예제 #1
0
        private static SubjectPublicKeyInfo EncodePublicKey(GostKeyExchangeParameters transportParameters)
        {
            var asnEncoder = new Asn1BerEncodeBuffer();
            var publicKey  = new Asn1OctetString(transportParameters.PublicKey);

            publicKey.Encode(asnEncoder);

            var publicKeyValue = asnEncoder.MsgCopy;

            var publicKeyInfo = new SubjectPublicKeyInfo
            {
                SubjectPublicKey = new Asn1BitString(publicKeyValue.Length * 8, publicKeyValue)
            };

            var publicKeyParams = new GostR34102001PublicKeyParameters
            {
                PublicKeyParamSet  = Asn1ObjectIdentifier.FromOidString(transportParameters.PublicKeyParamSet),
                DigestParamSet     = Asn1ObjectIdentifier.FromOidString(transportParameters.DigestParamSet),
                EncryptionParamSet = CreateEncryptionParamSet(transportParameters.EncryptionParamSet)
            };

            asnEncoder.Reset();
            publicKeyParams.Encode(asnEncoder);

            var publicKeyAlgOid = new Asn1ObjectIdentifier(GostR34102001Constants.IdGostR34102001);

            publicKeyInfo.Algorithm = new AlgorithmIdentifier(publicKeyAlgOid, new Asn1OpenType(asnEncoder.MsgCopy));

            return(publicKeyInfo);
        }
예제 #2
0
        public byte[] EncodeParameters()
        {
            byte[] data;

            var publicKeyParameters = new GostR34102001PublicKeyParameters();

            publicKeyParameters.DigestParamSet     = Asn1ObjectIdentifier.FromOidString(DigestParamSet);
            publicKeyParameters.PublicKeyParamSet  = Asn1ObjectIdentifier.FromOidString(PublicKeyParamSet);
            publicKeyParameters.EncryptionParamSet = CreateEncryptionParamSet(EncryptionParamSet);

            var asnEncoder = new Asn1BerEncodeBuffer();

            publicKeyParameters.Encode(asnEncoder);
            data = asnEncoder.MsgCopy;

            return(data);
        }
        public byte[] EncodeParameters()
        {
            byte[] data;

            var publicKeyParameters = new GostR34102001PublicKeyParameters();

            try
            {
                publicKeyParameters.DigestParamSet     = Asn1ObjectIdentifier.FromOidString(DigestParamSet);
                publicKeyParameters.PublicKeyParamSet  = Asn1ObjectIdentifier.FromOidString(PublicKeyParamSet);
                publicKeyParameters.EncryptionParamSet = CreateEncryptionParamSet(EncryptionParamSet);

                var asnEncoder = new Asn1BerEncodeBuffer();
                publicKeyParameters.Encode(asnEncoder);
                data = asnEncoder.MsgCopy;
            }
            catch (Exception exception)
            {
                throw ExceptionUtility.CryptographicException(exception, Resources.Asn1EncodeError, typeof(GostR34102001PublicKeyParameters).FullName);
            }

            return(data);
        }