private void Reset(int version)
 {
     this.m_version = version;
     this.m_recipientIdentifier = null;
     this.m_encryptionAlgorithm = null;
     this.m_encryptedKey = new byte[0];
 }
Example #2
0
        //
        // Private methods.
        //

        private void Reset(int version)
        {
            m_version             = version;
            m_recipientIdentifier = null;
            m_encryptionAlgorithm = null;
            m_encryptedKey        = new byte[0];
        }
Example #3
0
 // only accessible from EnvelopedCms.RecipientInfos
 internal KeyTransRecipientInfo(byte[] encryptedKey, AlgorithmIdentifier keyEncryptionAlgorithm, SubjectIdentifier recipientIdentifier, int version)
     : base(RecipientInfoType.KeyTransport)
 {
     _encryptedKey           = encryptedKey;
     _keyEncryptionAlgorithm = keyEncryptionAlgorithm;
     _recipientIdentifier    = recipientIdentifier;
     _version = version;
 }
		// only accessible from EnvelopedCms.RecipientInfos
		internal KeyTransRecipientInfo (byte[] encryptedKey, AlgorithmIdentifier keyEncryptionAlgorithm, SubjectIdentifier recipientIdentifier, int version)
			: base (RecipientInfoType.KeyTransport)
		{
			_encryptedKey = encryptedKey;
			_keyEncryptionAlgorithm = keyEncryptionAlgorithm;
			_recipientIdentifier = recipientIdentifier;
			_version = version;
		}
Example #5
0
		// only accessible from SignedPkcs7.SignerInfos
		internal SignerInfo (string hashName, X509Certificate2 certificate, SubjectIdentifierType type, object o, int version)
		{
			_digest = new Oid (CryptoConfig.MapNameToOID (hashName));
			_certificate = certificate;
			_counter = new SignerInfoCollection ();
			_signed = new CryptographicAttributeObjectCollection ();
			_unsigned = new CryptographicAttributeObjectCollection ();
			_signer = new SubjectIdentifier (type, o);
			_version = version;
		}
Example #6
0
 // only accessible from SignedPkcs7.SignerInfos
 internal SignerInfo(string hashName, X509Certificate2 certificate, SubjectIdentifierType type, object o, int version)
 {
     _digest      = new Oid(CryptoConfig.MapNameToOID(hashName));
     _certificate = certificate;
     _counter     = new SignerInfoCollection();
     _signed      = new CryptographicAttributeObjectCollection();
     _unsigned    = new CryptographicAttributeObjectCollection();
     _signer      = new SubjectIdentifier(type, o);
     _version     = version;
 }
Example #7
0
        internal SignerInfo(ref SignerInfoAsn parsedData, SignedCms ownerDocument)
        {
            Version                       = parsedData.Version;
            SignerIdentifier              = new SubjectIdentifier(parsedData.Sid);
            _digestAlgorithm              = parsedData.DigestAlgorithm.Algorithm;
            _signedAttributes             = parsedData.SignedAttributes;
            _signatureAlgorithm           = parsedData.SignatureAlgorithm.Algorithm;
            _signatureAlgorithmParameters = parsedData.SignatureAlgorithm.Parameters;
            _signature                    = parsedData.SignatureValue;
            _unsignedAttributes           = parsedData.UnsignedAttributes;

            _document = ownerDocument;
        }
Example #8
0
        //
        // Private methods.
        //

        private void Reset(uint originatorChoice, uint version, CAPI.CMSG_RECIPIENT_ENCRYPTED_KEY_INFO encryptedKeyInfo, uint subIndex)
        {
            m_encryptedKeyInfo     = encryptedKeyInfo;
            m_originatorChoice     = originatorChoice;
            m_version              = (int)version;
            m_originatorIdentifier = null;
            m_userKeyMaterial      = new byte[0];
            m_encryptionAlgorithm  = null;
            m_recipientIdentifier  = null;
            m_encryptedKey         = new byte[0];
            m_date = DateTime.MinValue;
            m_otherKeyAttribute = null;
            m_subIndex          = subIndex;
        }
 private void Reset(uint originatorChoice, uint version, System.Security.Cryptography.CAPI.CMSG_RECIPIENT_ENCRYPTED_KEY_INFO encryptedKeyInfo, uint subIndex)
 {
     this.m_encryptedKeyInfo = encryptedKeyInfo;
     this.m_originatorChoice = originatorChoice;
     this.m_version = (int) version;
     this.m_originatorIdentifier = null;
     this.m_userKeyMaterial = new byte[0];
     this.m_encryptionAlgorithm = null;
     this.m_recipientIdentifier = null;
     this.m_encryptedKey = new byte[0];
     this.m_date = DateTime.MinValue;
     this.m_otherKeyAttribute = null;
     this.m_subIndex = subIndex;
 }
        private static int FindIndexForSigner(SignerInfo[] signerInfos, SignerInfo signer)
        {
            Debug.Assert(signer != null);
            SubjectIdentifier id = signer.SignerIdentifier;

            for (int i = 0; i < signerInfos.Length; i++)
            {
                SignerInfo        current   = signerInfos[i];
                SubjectIdentifier currentId = current.SignerIdentifier;

                if (id.IsEquivalentTo(currentId))
                {
                    return(i);
                }
            }

            return(-1);
        }
Example #11
0
        public void Decode(byte[] encodedMessage)
        {
            if (encodedMessage == null)
            {
                throw new ArgumentNullException("encodedMessage");
            }

            PKCS7.ContentInfo ci = new PKCS7.ContentInfo(encodedMessage);
            if (ci.ContentType != PKCS7.Oid.envelopedData)
            {
                throw new Exception("");
            }

            PKCS7.EnvelopedData ed = new PKCS7.EnvelopedData(ci.Content);

            Oid oid = new Oid(ed.ContentInfo.ContentType);

            _content = new ContentInfo(oid, new byte [0]);              //ed.ContentInfo.Content.Value);

            foreach (PKCS7.RecipientInfo ri in ed.RecipientInfos)
            {
                Oid o = new Oid(ri.Oid);
                AlgorithmIdentifier ai = new AlgorithmIdentifier(o);
                SubjectIdentifier   si = null;
                if (ri.SubjectKeyIdentifier != null)
                {
                    si = new SubjectIdentifier(SubjectIdentifierType.SubjectKeyIdentifier, ri.SubjectKeyIdentifier);
                }
                else if ((ri.Issuer != null) && (ri.Serial != null))
                {
                    X509IssuerSerial xis = GetIssuerSerial(ri.Issuer, ri.Serial);
                    si = new SubjectIdentifier(SubjectIdentifierType.IssuerAndSerialNumber, (object)xis);
                }

                KeyTransRecipientInfo _keyTrans = new KeyTransRecipientInfo(ri.Key, ai, si, ri.Version);
                _recipients.Add(_keyTrans);
            }

            // TODO - Certificates
            // TODO - UnprotectedAttributes

            _version = ed.Version;
        }
Example #12
0
        internal SignerInfo(ref SignerInfoAsn parsedData, SignedCms ownerDocument)
        {
            Version                       = parsedData.Version;
            SignerIdentifier              = new SubjectIdentifier(parsedData.Sid);
            _digestAlgorithm              = parsedData.DigestAlgorithm.Algorithm;
            _signedAttributesMemory       = parsedData.SignedAttributes;
            _signatureAlgorithm           = parsedData.SignatureAlgorithm.Algorithm;
            _signatureAlgorithmParameters = parsedData.SignatureAlgorithm.Parameters;
            _signature                    = parsedData.SignatureValue;
            _unsignedAttributes           = parsedData.UnsignedAttributes;

            if (_signedAttributesMemory.HasValue)
            {
                SignedAttributesSet signedSet = SignedAttributesSet.Decode(
                    _signedAttributesMemory.Value,
                    AsnEncodingRules.BER);

                _signedAttributes = signedSet.SignedAttributes;
                Debug.Assert(_signedAttributes != null);
            }

            _document = ownerDocument;
        }
Example #13
0
        internal bool IsEquivalentTo(SubjectIdentifier other)
        {
            SubjectIdentifier currentId = other;

            if (currentId.Type != Type)
            {
                return(false);
            }

            X509IssuerSerial issuerSerial = default;

            if (Type == SubjectIdentifierType.IssuerAndSerialNumber)
            {
                issuerSerial = (X509IssuerSerial)Value !;
            }

            switch (Type)
            {
            case SubjectIdentifierType.IssuerAndSerialNumber:
            {
                X509IssuerSerial currentIssuerSerial = (X509IssuerSerial)currentId.Value !;

                return(currentIssuerSerial.IssuerName == issuerSerial.IssuerName &&
                       currentIssuerSerial.SerialNumber == issuerSerial.SerialNumber);
            }

            case SubjectIdentifierType.SubjectKeyIdentifier:
                return((string)Value ! == (string)currentId.Value !);

            case SubjectIdentifierType.NoSignature:
                return(true);

            default:
                Debug.Fail($"No match logic for SubjectIdentifierType {Type}");
                throw new CryptographicException();
            }
        }
        internal static X509Certificate2 FindCertificate(SubjectIdentifier identifier, X509Certificate2Collection certificates)
        {
            X509Certificate2 certificate = null;

            if ((certificates != null) && (certificates.Count > 0))
            {
                X509Certificate2Collection certificates2;
                switch (identifier.Type)
                {
                case SubjectIdentifierType.IssuerAndSerialNumber:
                {
                    X509IssuerSerial serial = (X509IssuerSerial)identifier.Value;
                    certificates2 = certificates.Find(X509FindType.FindByIssuerDistinguishedName, serial.IssuerName, false);
                    if (certificates2.Count > 0)
                    {
                        X509IssuerSerial serial2 = (X509IssuerSerial)identifier.Value;
                        certificates2 = certificates2.Find(X509FindType.FindBySerialNumber, serial2.SerialNumber, false);
                        if (certificates2.Count > 0)
                        {
                            certificate = certificates2[0];
                        }
                    }
                    return(certificate);
                }

                case SubjectIdentifierType.SubjectKeyIdentifier:
                    certificates2 = certificates.Find(X509FindType.FindBySubjectKeyIdentifier, identifier.Value, false);
                    if (certificates2.Count > 0)
                    {
                        certificate = certificates2[0];
                    }
                    return(certificate);
                }
            }
            return(certificate);
        }
Example #15
0
        internal int FindIndexForSigner(SignerInfo signer)
        {
            Debug.Assert(signer != null);
            SubjectIdentifier id           = signer.SignerIdentifier;
            X509IssuerSerial  issuerSerial = default;

            if (id.Type == SubjectIdentifierType.IssuerAndSerialNumber)
            {
                issuerSerial = (X509IssuerSerial)id.Value;
            }

            for (int i = 0; i < _signerInfos.Length; i++)
            {
                SignerInfo        current   = _signerInfos[i];
                SubjectIdentifier currentId = current.SignerIdentifier;

                if (currentId.Type != id.Type)
                {
                    continue;
                }

                bool equal = false;

                switch (id.Type)
                {
                case SubjectIdentifierType.IssuerAndSerialNumber:
                {
                    X509IssuerSerial currentIssuerSerial = (X509IssuerSerial)currentId.Value;

                    if (currentIssuerSerial.IssuerName == issuerSerial.IssuerName &&
                        currentIssuerSerial.SerialNumber == issuerSerial.SerialNumber)
                    {
                        equal = true;
                    }

                    break;
                }

                case SubjectIdentifierType.SubjectKeyIdentifier:
                    if ((string)id.Value == (string)currentId.Value)
                    {
                        equal = true;
                    }

                    break;

                case SubjectIdentifierType.NoSignature:
                    equal = true;
                    break;

                default:
                    Debug.Fail($"No match logic for SubjectIdentifierType {id.Type}");
                    throw new CryptographicException();
                }

                if (equal)
                {
                    return(i);
                }
            }

            return(-1);
        }
 internal static X509Certificate2 FindCertificate(SubjectIdentifier identifier, X509Certificate2Collection certificates)
 {
     X509Certificate2 certificate = null;
     if ((certificates != null) && (certificates.Count > 0))
     {
         X509Certificate2Collection certificates2;
         switch (identifier.Type)
         {
             case SubjectIdentifierType.IssuerAndSerialNumber:
             {
                 X509IssuerSerial serial = (X509IssuerSerial) identifier.Value;
                 certificates2 = certificates.Find(X509FindType.FindByIssuerDistinguishedName, serial.IssuerName, false);
                 if (certificates2.Count > 0)
                 {
                     X509IssuerSerial serial2 = (X509IssuerSerial) identifier.Value;
                     certificates2 = certificates2.Find(X509FindType.FindBySerialNumber, serial2.SerialNumber, false);
                     if (certificates2.Count > 0)
                     {
                         certificate = certificates2[0];
                     }
                 }
                 return certificate;
             }
             case SubjectIdentifierType.SubjectKeyIdentifier:
                 certificates2 = certificates.Find(X509FindType.FindBySubjectKeyIdentifier, identifier.Value, false);
                 if (certificates2.Count > 0)
                 {
                     certificate = certificates2[0];
                 }
                 return certificate;
         }
     }
     return certificate;
 }
Example #17
0
		public void Decode (byte[] encodedMessage)
		{
			if (encodedMessage == null)
				throw new ArgumentNullException ("encodedMessage");

			PKCS7.ContentInfo ci = new PKCS7.ContentInfo (encodedMessage);
			if (ci.ContentType != PKCS7.Oid.envelopedData)
				throw new Exception ("");

			PKCS7.EnvelopedData ed = new PKCS7.EnvelopedData (ci.Content);

			Oid oid = new Oid (ed.ContentInfo.ContentType);
			_content = new ContentInfo (oid, new byte [0]); //ed.ContentInfo.Content.Value);

			foreach (PKCS7.RecipientInfo ri in ed.RecipientInfos) {
				Oid o = new Oid (ri.Oid);
				AlgorithmIdentifier ai = new AlgorithmIdentifier (o);
				SubjectIdentifier si = null;
				if (ri.SubjectKeyIdentifier != null) {
					si = new SubjectIdentifier (SubjectIdentifierType.SubjectKeyIdentifier, ri.SubjectKeyIdentifier);
				}
				else if ((ri.Issuer != null) && (ri.Serial != null)) {
					X509IssuerSerial xis = GetIssuerSerial (ri.Issuer, ri.Serial);
					si = new SubjectIdentifier (SubjectIdentifierType.IssuerAndSerialNumber, (object)xis);
				}
				
				KeyTransRecipientInfo _keyTrans = new KeyTransRecipientInfo (ri.Key, ai, si, ri.Version);
				_recipients.Add (_keyTrans);
			}

			// TODO - Certificates
			// TODO - UnprotectedAttributes 

			_version = ed.Version;
		}
Example #18
0
        internal static X509Certificate2 FindCertificate (SubjectIdentifier identifier, X509Certificate2Collection certificates) {
            X509Certificate2 certificate = null;

            if (certificates != null && certificates.Count > 0) {
                X509Certificate2Collection filters;
                switch (identifier.Type) {
                case SubjectIdentifierType.IssuerAndSerialNumber:
                    filters = certificates.Find(X509FindType.FindByIssuerDistinguishedName, ((X509IssuerSerial) identifier.Value).IssuerName, false);
                    if (filters.Count > 0) {
                        filters = filters.Find(X509FindType.FindBySerialNumber, ((X509IssuerSerial) identifier.Value).SerialNumber, false);
                        if (filters.Count > 0)
                            certificate = filters[0];
                    }
                    break;
                case SubjectIdentifierType.SubjectKeyIdentifier:
                    filters = certificates.Find(X509FindType.FindBySubjectKeyIdentifier, identifier.Value, false);
                    if (filters.Count > 0)
                        certificate = filters[0];

                    break;
                }
            }

            return certificate;
        }