Exemple #1
0
        private SubjectPublicKeyInfo EncodePublicKey(Gost_R3410_KeyExchangeParams 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 = CreatePublicKeyParams();

            publicKeyParams.PublicKeyParamSet  = new Asn1ObjectIdentifier(OidValue.FromString(transportParameters.PublicKeyParamSet));
            publicKeyParams.DigestParamSet     = new Asn1ObjectIdentifier(OidValue.FromString(transportParameters.DigestParamSet));
            publicKeyParams.EncryptionParamSet = Gost_28147_89_ParamSet.FromString(transportParameters.EncryptionParamSet);

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

            var publicKeyAlgOid = new Asn1ObjectIdentifier(KeyAlgorithm);

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

            return(publicKeyInfo);
        }
Exemple #2
0
        public override void Decode(Asn1BerDecodeBuffer buffer, bool explicitTagging, int implicitLength)
        {
            var len = explicitTagging ? MatchTag(buffer, Tag) : implicitLength;

            OidValue        = OidValue.FromArray(buffer.DecodeRelOidContents(len));
            buffer.TypeCode = RelativeOidTypeCode;
        }
Exemple #3
0
        public override void Decode(Asn1BerDecodeBuffer buffer, bool explicitTagging, int implicitLength)
        {
            var len = explicitTagging ? MatchTag(buffer, Tag) : implicitLength;

            if (len <= 0)
            {
                throw ExceptionUtility.CryptographicException(Resources.Asn1InvalidLengthException);
            }

            OidValue        = OidValue.FromArray(buffer.DecodeOidContents(len));
            buffer.TypeCode = ObjectIdentifierTypeCode;
        }
        public void VerifyWriteObjectIdentifier_ConstructedIgnored(AsnEncodingRules ruleSet)
        {
            AsnWriter writer = new AsnWriter(ruleSet);

            const string OidValue            = "1.1";
            Asn1Tag      constructedOid      = new Asn1Tag(UniversalTagNumber.ObjectIdentifier, isConstructed: true);
            Asn1Tag      constructedContext0 = new Asn1Tag(TagClass.ContextSpecific, 0, isConstructed: true);

            writer.WriteObjectIdentifier(OidValue, constructedOid);
            writer.WriteObjectIdentifier(OidValue, constructedContext0);
            writer.WriteObjectIdentifier(OidValue.AsSpan(), constructedOid);
            writer.WriteObjectIdentifier(OidValue.AsSpan(), constructedContext0);

            Verify(writer, "060129800129060129800129");
        }
        public void VerifyWriteObjectIdentifier_ConstructedIgnored(PublicEncodingRules ruleSet)
        {
            using (AsnWriter writer = new AsnWriter((AsnEncodingRules)ruleSet))
            {
                const string OidValue            = "1.1";
                Asn1Tag      constructedOid      = new Asn1Tag(UniversalTagNumber.ObjectIdentifier, isConstructed: true);
                Asn1Tag      constructedContext0 = new Asn1Tag(TagClass.ContextSpecific, 0, isConstructed: true);

                writer.WriteObjectIdentifier(constructedOid, OidValue);
                writer.WriteObjectIdentifier(constructedContext0, OidValue);
                writer.WriteObjectIdentifier(constructedOid, OidValue.AsSpan());
                writer.WriteObjectIdentifier(constructedContext0, OidValue.AsSpan());
                writer.WriteObjectIdentifier(constructedOid, new Oid(OidValue, OidValue));
                writer.WriteObjectIdentifier(constructedContext0, new Oid(OidValue, OidValue));

                Verify(writer, "060129800129060129800129060129800129");
            }
        }
Exemple #6
0
        /// <summary>
        /// Зашифровать параметры.
        /// </summary>
        public byte[] EncodeParameters()
        {
            byte[] data;

            try
            {
                var publicKeyParams = CreatePublicKeyParams();
                publicKeyParams.DigestParamSet     = new Asn1ObjectIdentifier(OidValue.FromString(DigestParamSet));
                publicKeyParams.PublicKeyParamSet  = new Asn1ObjectIdentifier(OidValue.FromString(PublicKeyParamSet));
                publicKeyParams.EncryptionParamSet = Gost_28147_89_ParamSet.FromString(EncryptionParamSet);

                var asnEncoder = new Asn1BerEncodeBuffer();
                publicKeyParams.Encode(asnEncoder);
                data = asnEncoder.MsgCopy;
            }
            catch (Exception exception)
            {
                throw ExceptionUtility.CryptographicException(exception, Resources.Asn1EncodeError, nameof(Gost_R3410_PublicKeyParams));
            }

            return(data);
        }
Exemple #7
0
 public Asn1RelativeOid(OidValue oidValue)
     : base(oidValue)
 {
 }
 public static Gost_28147_89_ParamSet FromString(string value)
 {
     return((value != null) ? new Gost_28147_89_ParamSet(OidValue.FromString(value)) : null);
 }
 public Gost_28147_89_ParamSet(OidValue oidValue)
     : base(oidValue)
 {
 }
Exemple #10
0
 public Asn1ObjectIdentifier(OidValue oidValue)
 {
     OidValue = oidValue;
 }
Exemple #11
0
 public Asn1ObjectIdentifier()
 {
     OidValue = null;
 }