private void Reset(int version) { this.m_version = version; this.m_recipientIdentifier = null; this.m_encryptionAlgorithm = null; this.m_encryptedKey = new byte[0]; }
// // Private methods. // private void Reset(int version) { m_version = version; m_recipientIdentifier = null; m_encryptionAlgorithm = null; m_encryptedKey = new byte[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; }
// 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; }
// 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; }
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; }
// // 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); }
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; }
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; }
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); }
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; }
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; }
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; }