/// <summary>
        /// Constructor which also specifies a source of randomness
        /// to be used if one is required.
        /// </summary>
        /// <param name="signatureType">The signature algorithm to use.
        /// </param>
        /// <param name="generator">The signature generator.</param>
        public SignatureFactory(SignatureType signatureType,
                                X509SignatureGenerator generator)
        {
            _generator     = generator;
            _signatureType = signatureType;
            var algId = signatureType.ToAlgorithmIdentifier();

            AlgorithmDetails = AlgorithmIdentifier.GetInstance(algId);
        }
 private SubjectPublicKeyInfo(Asn1Sequence seq)
 {
     if (seq.Count != 2)
     {
         throw new ArgumentException("Bad sequence size: " + seq.Count, "seq");
     }
     algID   = AlgorithmIdentifier.GetInstance(seq[0]);
     keyData = DerBitString.GetInstance(seq[1]);
 }
Esempio n. 3
0
 private CertHash(Asn1Sequence seq)
 {
     if (seq.Count != 2)
     {
         throw new ArgumentException("Bad sequence size: " + seq.Count);
     }
     hashAlgorithm   = AlgorithmIdentifier.GetInstance(seq[0]);
     certificateHash = Asn1OctetString.GetInstance(seq[1]).GetOctets();
 }
 private DigestInfo(Asn1Sequence seq)
 {
     if (seq.Count != 2)
     {
         throw new ArgumentException("Wrong number of elements in sequence", "seq");
     }
     algID  = AlgorithmIdentifier.GetInstance(seq[0]);
     digest = Asn1OctetString.GetInstance(seq[1]).GetOctets();
 }
Esempio n. 5
0
 private EncryptedPrivateKeyInfo(Asn1Sequence seq)
 {
     if (seq.Count != 2)
     {
         throw new ArgumentException("Wrong number of elements in sequence", "seq");
     }
     algId = AlgorithmIdentifier.GetInstance(seq[0]);
     data  = Asn1OctetString.GetInstance(seq[1]);
 }
 public EncryptedContentInfo(Asn1Sequence seq)
 {
     contentType = (DerObjectIdentifier)seq[0];
     contentEncryptionAlgorithm = AlgorithmIdentifier.GetInstance(seq[1]);
     if (seq.Count > 2)
     {
         encryptedContent = Asn1OctetString.GetInstance((Asn1TaggedObject)seq[2], isExplicit: false);
     }
 }
Esempio n. 7
0
 private Signature(Asn1Sequence seq)
 {
     this.signatureAlgorithm = AlgorithmIdentifier.GetInstance(seq[0]);
     this.signatureValue     = (DerBitString)seq[1];
     if (seq.Count == 3)
     {
         this.certs = Asn1Sequence.GetInstance((Asn1TaggedObject)seq[2], true);
     }
 }
Esempio n. 8
0
 private X509CertificateStructure(Asn1Sequence seq)
 {
     if (seq.Count != 3)
     {
         throw new ArgumentException("sequence wrong size for a certificate", "seq");
     }
     tbsCert  = TbsCertificateStructure.GetInstance(seq[0]);
     sigAlgID = AlgorithmIdentifier.GetInstance(seq[1]);
     sig      = DerBitString.GetInstance(seq[2]);
 }
Esempio n. 9
0
 public CertificationRequest(Asn1Sequence seq)
 {
     if (seq.Count != 3)
     {
         throw new ArgumentException("Wrong number of elements in sequence", "seq");
     }
     reqInfo  = CertificationRequestInfo.GetInstance(seq[0]);
     sigAlgId = AlgorithmIdentifier.GetInstance(seq[1]);
     sigBits  = DerBitString.GetInstance(seq[2]);
 }
 private EncryptedPrivateKeyInfo(Asn1Sequence seq)
 {
     //IL_0019: Unknown result type (might be due to invalid IL or missing references)
     if (seq.Count != 2)
     {
         throw new ArgumentException("Wrong number of elements in sequence", "seq");
     }
     algId = AlgorithmIdentifier.GetInstance(seq[0]);
     data  = Asn1OctetString.GetInstance(seq[1]);
 }
 private BasicOcspResponse(Asn1Sequence seq)
 {
     tbsResponseData    = ResponseData.GetInstance(seq[0]);
     signatureAlgorithm = AlgorithmIdentifier.GetInstance(seq[1]);
     signature          = (DerBitString)seq[2];
     if (seq.Count > 3)
     {
         certs = Asn1Sequence.GetInstance((Asn1TaggedObject)seq[3], explicitly: true);
     }
 }
Esempio n. 12
0
 private MessageImprint(Asn1Sequence seq)
 {
     //IL_0019: Unknown result type (might be due to invalid IL or missing references)
     if (seq.Count != 2)
     {
         throw new ArgumentException("Wrong number of elements in sequence", "seq");
     }
     hashAlgorithm = AlgorithmIdentifier.GetInstance(seq[0]);
     hashedMessage = Asn1OctetString.GetInstance(seq[1]).GetOctets();
 }
Esempio n. 13
0
 private BiometricData(Asn1Sequence seq)
 {
     typeOfBiometricData = TypeOfBiometricData.GetInstance(seq[0]);
     hashAlgorithm       = AlgorithmIdentifier.GetInstance(seq[1]);
     biometricDataHash   = Asn1OctetString.GetInstance(seq[2]);
     if (seq.Count > 3)
     {
         sourceDataUri = DerIA5String.GetInstance(seq[3]);
     }
 }
//		private readonly AlgorithmIdentifier	_encAlg;

        public PasswordRecipientInformation(
            PasswordRecipientInfo info,
            AlgorithmIdentifier encAlg,
            Stream data)
            : base(encAlg, AlgorithmIdentifier.GetInstance(info.KeyEncryptionAlgorithm), data)
        {
            this._info = info;
//			this._encAlg = encAlg;
            this._rid = new RecipientID();
        }
 private AttributeCertificate(Asn1Sequence seq)
 {
     if (seq.Count != 3)
     {
         throw new ArgumentException("Bad sequence size: " + seq.Count);
     }
     acinfo             = AttributeCertificateInfo.GetInstance(seq[0]);
     signatureAlgorithm = AlgorithmIdentifier.GetInstance(seq[1]);
     signatureValue     = DerBitString.GetInstance(seq[2]);
 }
 private CertificateList(Asn1Sequence seq)
 {
     if (seq.Count != 3)
     {
         throw new ArgumentException("sequence wrong size for CertificateList", "seq");
     }
     tbsCertList = TbsCertificateList.GetInstance(seq[0]);
     sigAlgID    = AlgorithmIdentifier.GetInstance(seq[1]);
     sig         = DerBitString.GetInstance(seq[2]);
 }
Esempio n. 17
0
 private CertHash(Asn1Sequence seq)
 {
     //IL_0024: Unknown result type (might be due to invalid IL or missing references)
     if (seq.Count != 2)
     {
         throw new ArgumentException(string.Concat((object)"Bad sequence size: ", (object)seq.Count));
     }
     hashAlgorithm   = AlgorithmIdentifier.GetInstance(seq[0]);
     certificateHash = Asn1OctetString.GetInstance(seq[1]).GetOctets();
 }
Esempio n. 18
0
 private CertID(Asn1Sequence seq)
 {
     if (seq.Count != 4)
     {
         throw new ArgumentException("Wrong number of elements in sequence", "seq");
     }
     hashAlgorithm  = AlgorithmIdentifier.GetInstance(seq[0]);
     issuerNameHash = Asn1OctetString.GetInstance(seq[1]);
     issuerKeyHash  = Asn1OctetString.GetInstance(seq[2]);
     serialNumber   = DerInteger.GetInstance(seq[3]);
 }
Esempio n. 19
0
        private MessageImprint(
            Asn1Sequence seq)
        {
            if (seq.Count != 2)
            {
                throw new ArgumentException("Wrong number of elements in sequence", "seq");
            }

            this.hashAlgorithm = AlgorithmIdentifier.GetInstance(seq[0]);
            this.hashedMessage = Asn1OctetString.GetInstance(seq[1]).GetOctets();
        }
Esempio n. 20
0
        private Challenge(Asn1Sequence seq)
        {
            int index = 0;

            if (seq.Count == 3)
            {
                this.owf = AlgorithmIdentifier.GetInstance(seq[index++]);
            }
            this.witness   = Asn1OctetString.GetInstance(seq[index++]);
            this.challenge = Asn1OctetString.GetInstance(seq[index]);
        }
 public CertificationRequest(Asn1Sequence seq)
 {
     //IL_0019: Unknown result type (might be due to invalid IL or missing references)
     if (seq.Count != 3)
     {
         throw new ArgumentException("Wrong number of elements in sequence", "seq");
     }
     reqInfo  = CertificationRequestInfo.GetInstance(seq[0]);
     sigAlgId = AlgorithmIdentifier.GetInstance(seq[1]);
     sigBits  = DerBitString.GetInstance(seq[2]);
 }
Esempio n. 22
0
    private Challenge(Asn1Sequence seq)
    {
        int num = 0;

        if (seq.Count == 3)
        {
            owf = AlgorithmIdentifier.GetInstance(seq[num++]);
        }
        witness   = Asn1OctetString.GetInstance(seq[num++]);
        challenge = Asn1OctetString.GetInstance(seq[num]);
    }
Esempio n. 23
0
 private CertID(Asn1Sequence seq)
 {
     //IL_0019: Unknown result type (might be due to invalid IL or missing references)
     if (seq.Count != 4)
     {
         throw new ArgumentException("Wrong number of elements in sequence", "seq");
     }
     hashAlgorithm  = AlgorithmIdentifier.GetInstance(seq[0]);
     issuerNameHash = Asn1OctetString.GetInstance(seq[1]);
     issuerKeyHash  = Asn1OctetString.GetInstance(seq[2]);
     serialNumber   = DerInteger.GetInstance(seq[3]);
 }
Esempio n. 24
0
        private PkiHeader(Asn1Sequence seq)
        {
            pvno      = DerInteger.GetInstance(seq[0]);
            sender    = GeneralName.GetInstance(seq[1]);
            recipient = GeneralName.GetInstance(seq[2]);

            for (int pos = 3; pos < seq.Count; ++pos)
            {
                Asn1TaggedObject tObj = (Asn1TaggedObject)seq[pos];

                switch (tObj.TagNo)
                {
                case 0:
                    messageTime = DerGeneralizedTime.GetInstance(tObj, true);
                    break;

                case 1:
                    protectionAlg = AlgorithmIdentifier.GetInstance(tObj, true);
                    break;

                case 2:
                    senderKID = Asn1OctetString.GetInstance(tObj, true);
                    break;

                case 3:
                    recipKID = Asn1OctetString.GetInstance(tObj, true);
                    break;

                case 4:
                    transactionID = Asn1OctetString.GetInstance(tObj, true);
                    break;

                case 5:
                    senderNonce = Asn1OctetString.GetInstance(tObj, true);
                    break;

                case 6:
                    recipNonce = Asn1OctetString.GetInstance(tObj, true);
                    break;

                case 7:
                    freeText = PkiFreeText.GetInstance(tObj, true);
                    break;

                case 8:
                    generalInfo = Asn1Sequence.GetInstance(tObj, true);
                    break;

                default:
                    throw new ArgumentException("unknown tag number: " + tObj.TagNo, "seq");
                }
            }
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="MimeKit.Cryptography.SecureMimeDigitalSignature"/> class.
        /// </summary>
        /// <remarks>
        /// Creates a new <see cref="SecureMimeDigitalSignature"/>.
        /// </remarks>
        /// <param name="signerInfo">The information about the signer.</param>
        /// <param name="certificate">The signer's certificate.</param>
        /// <exception cref="System.ArgumentNullException">
        /// <paramref name="signerInfo"/> is <c>null</c>.
        /// </exception>
        public SecureMimeDigitalSignature(SignerInformation signerInfo, X509Certificate certificate)
        {
            if (signerInfo == null)
            {
                throw new ArgumentNullException(nameof(signerInfo));
            }

            SignerInfo = signerInfo;

            var             algorithms = new List <EncryptionAlgorithm> ();
            DigestAlgorithm digestAlgo;

            if (signerInfo.SignedAttributes != null)
            {
                Asn1EncodableVector vector = signerInfo.SignedAttributes.GetAll(CmsAttributes.SigningTime);
                foreach (Org.BouncyCastle.Asn1.Cms.Attribute attr in vector)
                {
                    var signingTime = (DerUtcTime)((DerSet)attr.AttrValues)[0];
                    CreationDate = ToAdjustedDateTime(signingTime);
                    break;
                }

                vector = signerInfo.SignedAttributes.GetAll(SmimeAttributes.SmimeCapabilities);
                foreach (Org.BouncyCastle.Asn1.Cms.Attribute attr in vector)
                {
                    foreach (Asn1Sequence sequence in attr.AttrValues)
                    {
                        for (int i = 0; i < sequence.Count; i++)
                        {
                            var identifier = AlgorithmIdentifier.GetInstance(sequence[i]);
                            EncryptionAlgorithm algorithm;

                            if (BouncyCastleSecureMimeContext.TryGetEncryptionAlgorithm(identifier, out algorithm))
                            {
                                algorithms.Add(algorithm);
                            }
                        }
                    }
                }

                EncryptionAlgorithms = algorithms.ToArray();
            }

            if (BouncyCastleSecureMimeContext.TryGetDigestAlgorithm(signerInfo.DigestAlgorithmID, out digestAlgo))
            {
                DigestAlgorithm = digestAlgo;
            }

            if (certificate != null)
            {
                SignerCertificate = new SecureMimeDigitalCertificate(certificate);
            }
        }
Esempio n. 26
0
        private CertTemplate(Asn1Sequence seq)
        {
            this.seq = seq;

            foreach (Asn1TaggedObject tObj in seq)
            {
                switch (tObj.TagNo)
                {
                case 0:
                    version = DerInteger.GetInstance(tObj, false);
                    break;

                case 1:
                    serialNumber = DerInteger.GetInstance(tObj, false);
                    break;

                case 2:
                    signingAlg = AlgorithmIdentifier.GetInstance(tObj, false);
                    break;

                case 3:
                    issuer = X509Name.GetInstance(tObj, true); // CHOICE
                    break;

                case 4:
                    validity = OptionalValidity.GetInstance(Asn1Sequence.GetInstance(tObj, false));
                    break;

                case 5:
                    subject = X509Name.GetInstance(tObj, true); // CHOICE
                    break;

                case 6:
                    publicKey = SubjectPublicKeyInfo.GetInstance(tObj, false);
                    break;

                case 7:
                    issuerUID = DerBitString.GetInstance(tObj, false);
                    break;

                case 8:
                    subjectUID = DerBitString.GetInstance(tObj, false);
                    break;

                case 9:
                    extensions = X509Extensions.GetInstance(tObj, false);
                    break;

                default:
                    throw new ArgumentException("unknown tag: " + tObj.TagNo, "seq");
                }
            }
        }
Esempio n. 27
0
        private PkiHeader(Asn1Sequence seq)
        {
            //IL_012d: Unknown result type (might be due to invalid IL or missing references)
            pvno      = DerInteger.GetInstance(seq[0]);
            sender    = GeneralName.GetInstance(seq[1]);
            recipient = GeneralName.GetInstance(seq[2]);
            for (int i = 3; i < seq.Count; i++)
            {
                Asn1TaggedObject asn1TaggedObject = (Asn1TaggedObject)seq[i];
                switch (asn1TaggedObject.TagNo)
                {
                case 0:
                    messageTime = DerGeneralizedTime.GetInstance(asn1TaggedObject, isExplicit: true);
                    break;

                case 1:
                    protectionAlg = AlgorithmIdentifier.GetInstance(asn1TaggedObject, explicitly: true);
                    break;

                case 2:
                    senderKID = Asn1OctetString.GetInstance(asn1TaggedObject, isExplicit: true);
                    break;

                case 3:
                    recipKID = Asn1OctetString.GetInstance(asn1TaggedObject, isExplicit: true);
                    break;

                case 4:
                    transactionID = Asn1OctetString.GetInstance(asn1TaggedObject, isExplicit: true);
                    break;

                case 5:
                    senderNonce = Asn1OctetString.GetInstance(asn1TaggedObject, isExplicit: true);
                    break;

                case 6:
                    recipNonce = Asn1OctetString.GetInstance(asn1TaggedObject, isExplicit: true);
                    break;

                case 7:
                    freeText = PkiFreeText.GetInstance(asn1TaggedObject, isExplicit: true);
                    break;

                case 8:
                    generalInfo = Asn1Sequence.GetInstance(asn1TaggedObject, explicitly: true);
                    break;

                default:
                    throw new ArgumentException(string.Concat((object)"unknown tag number: ", (object)asn1TaggedObject.TagNo), "seq");
                }
            }
        }
Esempio n. 28
0
        /// <summary>
        /// Parses the AddedTo data that is returned from TPM2_CertifyX509()
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        public static AddedToCertificate FromDerEncoding(byte[] data)
        {
            var ret           = new AddedToCertificate();
            var sequence      = (DerSequence)DerSequence.FromByteArray(data);
            var taggedVersion = (DerTaggedObject)(sequence[0]);

            Debug.Assert(taggedVersion.TagNo == 0);
            ret.Version              = (DerInteger)taggedVersion.GetObject();
            ret.SerialNumber         = (DerInteger)sequence[1];
            ret.Signature            = AlgorithmIdentifier.GetInstance(sequence[2]);
            ret.SubjectPublicKeyInfo = SubjectPublicKeyInfo.GetInstance(sequence[3]);
            return(ret);
        }
Esempio n. 29
0
        public KeyAgreeRecipientInfo(Asn1Sequence seq)
        {
            int index = 0;

            version    = (DerInteger)seq[index++];
            originator = OriginatorIdentifierOrKey.GetInstance((Asn1TaggedObject)seq[index++], explicitly: true);
            if (seq[index] is Asn1TaggedObject)
            {
                ukm = Asn1OctetString.GetInstance((Asn1TaggedObject)seq[index++], isExplicit: true);
            }
            keyEncryptionAlgorithm = AlgorithmIdentifier.GetInstance(seq[index++]);
            recipientEncryptedKeys = (Asn1Sequence)seq[index++];
        }
Esempio n. 30
0
        public KeyParameters(Asn1Sequence seq)
        {
            Attributes = seq?.OfType <DerBitString>().FirstOrDefault();
            Algorithm  = seq?.OfType <Asn1TaggedObject>()
                         .Where(x => x.TagNo == 0)
                         .Select(x => AlgorithmIdentifier.GetInstance(x, false))
                         .FirstOrDefault();

            if (Algorithm == null)
            {
                throw new CryptographicException("Ошибка в данных параметров ключа.");
            }
        }