Exemplo n.º 1
0
        internal TbsCertificateStructure(
            Asn1Sequence seq)
        {
            int seqStart = 0;

            this.seq = seq;

            //
            // some certficates don't include a version number - we assume v1
            //
            if (seq[0] is DerTaggedObject)
            {
                version = DerInteger.GetInstance((Asn1TaggedObject)seq[0], true);
            }
            else
            {
                seqStart = -1;                          // field 0 is missing!
                version  = new DerInteger(0);
            }

            serialNumber = DerInteger.GetInstance(seq[seqStart + 1]);

            signature = AlgorithmIdentifier.GetInstance(seq[seqStart + 2]);
            issuer    = X509Name.GetInstance(seq[seqStart + 3]);

            //
            // before and after dates
            //
            Asn1Sequence dates = (Asn1Sequence)seq[seqStart + 4];

            startDate = Time.GetInstance(dates[0]);
            endDate   = Time.GetInstance(dates[1]);

            subject = X509Name.GetInstance(seq[seqStart + 5]);

            //
            // public key info.
            //
            subjectPublicKeyInfo = SubjectPublicKeyInfo.GetInstance(seq[seqStart + 6]);

            for (int extras = seq.Count - (seqStart + 6) - 1; extras > 0; extras--)
            {
                DerTaggedObject extra = (DerTaggedObject)seq[seqStart + 6 + extras];

                switch (extra.TagNo)
                {
                case 1:
                    issuerUniqueID = DerBitString.GetInstance(extra, false);
                    break;

                case 2:
                    subjectUniqueID = DerBitString.GetInstance(extra, false);
                    break;

                case 3:
                    extensions = X509Extensions.GetInstance(extra);
                    break;
                }
            }
        }
Exemplo n.º 2
0
        private SignedData(Asn1Sequence seq)
        {
            IEnumerator enumerator = seq.GetEnumerator();

            enumerator.MoveNext();
            this.version = (DerInteger)enumerator.Current;
            enumerator.MoveNext();
            this.digestAlgorithms = (Asn1Set)enumerator.Current;
            enumerator.MoveNext();
            this.contentInfo = Org.BouncyCastle.Asn1.Pkcs.ContentInfo.GetInstance(enumerator.Current);
            while (enumerator.MoveNext())
            {
                Asn1Object current = (Asn1Object)enumerator.Current;
                if (current is DerTaggedObject)
                {
                    DerTaggedObject obj3 = (DerTaggedObject)current;
                    switch (obj3.TagNo)
                    {
                    case 0:
                    {
                        this.certificates = Asn1Set.GetInstance(obj3, false);
                        continue;
                    }

                    case 1:
                    {
                        this.crls = Asn1Set.GetInstance(obj3, false);
                        continue;
                    }
                    }
                    throw new ArgumentException("unknown tag value " + obj3.TagNo);
                }
                this.signerInfos = (Asn1Set)current;
            }
        }
Exemplo n.º 3
0
        private string GetOcspUrlFromCertificate(X509Certificate cert)
        {
            var derId = new DerObjectIdentifier(X509Extensions.AuthorityInfoAccess.Id);

            byte[] extensionValue = cert.GetExtensionValue(derId).GetOctets();

            Asn1Sequence asn1Seq = (Asn1Sequence)Asn1Object.FromByteArray(extensionValue); // AuthorityInfoAccessSyntax
            // Enumeration <?> objects = asn1Seq.Objects;
            string result = null;

            foreach (Asn1Sequence obj in asn1Seq)
            {
                DerObjectIdentifier oid      = (DerObjectIdentifier)obj[0]; // accessMethod
                DerTaggedObject     location = (DerTaggedObject)obj[1];     // accessLocation

                if (location.TagNo == GeneralName.UniformResourceIdentifier)
                {
                    DerOctetString uri = (DerOctetString)location.GetObject();
                    String         str = Encoding.Default.GetString(uri.GetOctets());
                    if (oid.Equals(X509ObjectIdentifiers.IdADOcsp))
                    {
                        result = str;
                        break;
                    }
                }
            }
            //while (objects.hasMoreElements())
            //{
            //    ASN1Sequence obj = (ASN1Sequence)objects.nextElement(); // AccessDescription
            //}

            return(result);
        }
Exemplo n.º 4
0
        private Accuracy(Asn1Sequence seq)
        {
            for (int i = 0; i < seq.Count; i++)
            {
                if (seq[i] is DerInteger)
                {
                    this.seconds = (DerInteger)seq[i];
                }
                else if (seq[i] is DerTaggedObject)
                {
                    DerTaggedObject derTaggedObject = (DerTaggedObject)seq[i];
                    switch (derTaggedObject.TagNo)
                    {
                    case 0:
                        this.millis = DerInteger.GetInstance(derTaggedObject, false);
                        if (this.millis.Value.IntValue < 1 || this.millis.Value.IntValue > 999)
                        {
                            throw new ArgumentException("Invalid millis field : not in (1..999).");
                        }
                        break;

                    case 1:
                        this.micros = DerInteger.GetInstance(derTaggedObject, false);
                        if (this.micros.Value.IntValue < 1 || this.micros.Value.IntValue > 999)
                        {
                            throw new ArgumentException("Invalid micros field : not in (1..999).");
                        }
                        break;

                    default:
                        throw new ArgumentException("Invalig tag number");
                    }
                }
            }
        }
Exemplo n.º 5
0
        private CertificationRequestInfo(
            Asn1Sequence seq)
        {
            version = (DerInteger)seq[0];

            subject       = X509Name.GetInstance(seq[1]);
            subjectPKInfo = SubjectPublicKeyInfo.GetInstance(seq[2]);

            //
            // some CertificationRequestInfo objects seem to treat this field
            // as optional.
            //
            if (seq.Count > 3)
            {
                DerTaggedObject tagobj = (DerTaggedObject)seq[3];
                attributes = Asn1Set.GetInstance(tagobj, false);
            }

            ValidateAttributes(attributes);

            if (subject == null || version == null || subjectPKInfo == null)
            {
                throw new ArgumentException(
                          "Not all mandatory fields set in CertificationRequestInfo generator.");
            }
        }
Exemplo n.º 6
0
            public override byte[]  ToArray()
            {
                DerTaggedObject tag = new DerTaggedObject(GetValue("TagNo").Value,
                                                          _noVerify ? new DummyAsn1Object(this["Object"].ToArray()) :
                                                          Asn1Object.FromByteArray(this["Object"].ToArray()));

                return(GetDerEncoded(tag));
            }
Exemplo n.º 7
0
		public CertBag(
            Asn1Sequence seq)
        {
			if (seq.Count != 2)
				throw new ArgumentException("Wrong number of elements in sequence", "seq");

//			this.seq = seq;
            this.certID = DerObjectIdentifier.GetInstance(seq[0]);
            this.certValue = DerTaggedObject.GetInstance(seq[1]).GetObject();
        }
Exemplo n.º 8
0
        public override void Build(
            X509V3CertificateGenerator certGen,
            Pkcs10CertificationRequest request,
            X509Certificate caCert)
        {
            certGen.AddExtension(
                X509Extensions.AuthorityKeyIdentifier,
                false,
                new AuthorityKeyIdentifierStructure(caCert)
                );

            certGen.AddExtension(
                X509Extensions.SubjectKeyIdentifier,
                false,
                new SubjectKeyIdentifierStructure(request.GetPublicKey())
                );

            certGen.AddExtension(
                X509Extensions.KeyUsage,
                true,
                new KeyUsage(0xa0)
                );

            certGen.AddExtension(
                X509Extensions.ExtendedKeyUsage,
                true,
                new ExtendedKeyUsage(new[]
            {
                new DerObjectIdentifier("1.3.6.1.4.1.311.20.2.2"),
                new DerObjectIdentifier("1.3.6.1.5.5.7.3.2")
            })
                );

            ApplyCrlExtension(certGen, crlLink);

            var otherName = new Asn1EncodableVector
            {
                new DerObjectIdentifier("1.3.6.1.4.1.311.20.2.3"),
                new DerTaggedObject(true, GeneralName.OtherName, new DerUtf8String(upnName))
            };

            var upn = new DerTaggedObject(false, 0, new DerSequence(otherName));

            var generalNames = new Asn1EncodableVector {
                upn
            };

            certGen.AddExtension(
                X509Extensions.SubjectAlternativeName,
                false,
                new DerSequence(generalNames)
                );
        }
Exemplo n.º 9
0
        private void TestTaggedObject()
        {
            // boolean explicit, int tagNo, ASN1Encodable obj
            bool isExplicit = false;

            // Type1 ::= VisibleString
            DerVisibleString type1 = new DerVisibleString("Jones");

            if (!Arrays.AreEqual(Hex.Decode("1A054A6F6E6573"), type1.GetEncoded()))
            {
                Fail("ERROR: expected value doesn't match!");
            }

            // Type2 ::= [APPLICATION 3] IMPLICIT Type1
            isExplicit = false;
            DerApplicationSpecific type2 = new DerApplicationSpecific(isExplicit, 3, type1);

            // type2.isConstructed()
            if (!Arrays.AreEqual(Hex.Decode("43054A6F6E6573"), type2.GetEncoded()))
            {
                Fail("ERROR: expected value doesn't match!");
            }

            // Type3 ::= [2] Type2
            isExplicit = true;
            DerTaggedObject type3 = new DerTaggedObject(isExplicit, 2, type2);

            if (!Arrays.AreEqual(Hex.Decode("A20743054A6F6E6573"), type3.GetEncoded()))
            {
                Fail("ERROR: expected value doesn't match!");
            }

            // Type4 ::= [APPLICATION 7] IMPLICIT Type3
            isExplicit = false;
            DerApplicationSpecific type4 = new DerApplicationSpecific(isExplicit, 7, type3);

            if (!Arrays.AreEqual(Hex.Decode("670743054A6F6E6573"), type4.GetEncoded()))
            {
                Fail("ERROR: expected value doesn't match!");
            }

            // Type5 ::= [2] IMPLICIT Type2
            isExplicit = false;
            DerTaggedObject type5 = new DerTaggedObject(isExplicit, 2, type2);

            // type5.isConstructed()
            if (!Arrays.AreEqual(Hex.Decode("82054A6F6E6573"), type5.GetEncoded()))
            {
                Fail("ERROR: expected value doesn't match!");
            }
        }
Exemplo n.º 10
0
        public void Read_WithInvalidMicroseconds_Throws(int microseconds)
        {
            var derMicroseconds = new DerTaggedObject(
                explicitly: false,
                tagNo: 1,
                obj: new DerInteger(BigInteger.ValueOf(microseconds)));
            var bcAccuracy = new DerSequence(derMicroseconds);
            var bytes      = bcAccuracy.GetDerEncoded();

            var exception = Assert.Throws <CryptographicException>(
                () => Accuracy.Read(bytes));

            Assert.Equal("The ASN.1 data is invalid.", exception.Message);
        }
Exemplo n.º 11
0
    private TstInfo(Asn1Sequence seq)
    {
        IEnumerator enumerator = seq.GetEnumerator();

        enumerator.MoveNext();
        version = DerInteger.GetInstance(enumerator.Current);
        enumerator.MoveNext();
        tsaPolicyId = DerObjectIdentifier.GetInstance(enumerator.Current);
        enumerator.MoveNext();
        messageImprint = MessageImprint.GetInstance(enumerator.Current);
        enumerator.MoveNext();
        serialNumber = DerInteger.GetInstance(enumerator.Current);
        enumerator.MoveNext();
        genTime  = DerGeneralizedTime.GetInstance(enumerator.Current);
        ordering = DerBoolean.False;
        while (enumerator.MoveNext())
        {
            Asn1Object asn1Object = (Asn1Object)enumerator.Current;
            if (asn1Object is Asn1TaggedObject)
            {
                DerTaggedObject derTaggedObject = (DerTaggedObject)asn1Object;
                switch (derTaggedObject.TagNo)
                {
                case 0:
                    tsa = GeneralName.GetInstance(derTaggedObject, explicitly: true);
                    break;

                case 1:
                    extensions = X509Extensions.GetInstance(derTaggedObject, explicitly: false);
                    break;

                default:
                    throw new ArgumentException("Unknown tag value " + derTaggedObject.TagNo);
                }
            }
            if (asn1Object is DerSequence)
            {
                accuracy = Accuracy.GetInstance(asn1Object);
            }
            if (asn1Object is DerBoolean)
            {
                ordering = DerBoolean.GetInstance(asn1Object);
            }
            if (asn1Object is DerInteger)
            {
                nonce = DerInteger.GetInstance(asn1Object);
            }
        }
    }
Exemplo n.º 12
0
        private TstInfo(Asn1Sequence seq)
        {
            //IL_00fa: Unknown result type (might be due to invalid IL or missing references)
            global::System.Collections.IEnumerator enumerator = seq.GetEnumerator();
            enumerator.MoveNext();
            version = DerInteger.GetInstance(enumerator.get_Current());
            enumerator.MoveNext();
            tsaPolicyId = DerObjectIdentifier.GetInstance(enumerator.get_Current());
            enumerator.MoveNext();
            messageImprint = MessageImprint.GetInstance(enumerator.get_Current());
            enumerator.MoveNext();
            serialNumber = DerInteger.GetInstance(enumerator.get_Current());
            enumerator.MoveNext();
            genTime  = DerGeneralizedTime.GetInstance(enumerator.get_Current());
            ordering = DerBoolean.False;
            while (enumerator.MoveNext())
            {
                Asn1Object asn1Object = (Asn1Object)enumerator.get_Current();
                if (asn1Object is Asn1TaggedObject)
                {
                    DerTaggedObject derTaggedObject = (DerTaggedObject)asn1Object;
                    switch (derTaggedObject.TagNo)
                    {
                    case 0:
                        tsa = GeneralName.GetInstance(derTaggedObject, explicitly: true);
                        break;

                    case 1:
                        extensions = X509Extensions.GetInstance(derTaggedObject, explicitly: false);
                        break;

                    default:
                        throw new ArgumentException(string.Concat((object)"Unknown tag value ", (object)derTaggedObject.TagNo));
                    }
                }
                if (asn1Object is DerSequence)
                {
                    accuracy = Accuracy.GetInstance(asn1Object);
                }
                if (asn1Object is DerBoolean)
                {
                    ordering = DerBoolean.GetInstance(asn1Object);
                }
                if (asn1Object is DerInteger)
                {
                    nonce = DerInteger.GetInstance(asn1Object);
                }
            }
        }
 private CertificationRequestInfo(Asn1Sequence seq)
 {
     version       = (DerInteger)seq[0];
     subject       = X509Name.GetInstance(seq[1]);
     subjectPKInfo = SubjectPublicKeyInfo.GetInstance(seq[2]);
     if (seq.Count > 3)
     {
         DerTaggedObject obj = (DerTaggedObject)seq[3];
         attributes = Asn1Set.GetInstance(obj, explicitly: false);
     }
     if (subject == null || version == null || subjectPKInfo == null)
     {
         throw new ArgumentException("Not all mandatory fields set in CertificationRequestInfo generator.");
     }
 }
Exemplo n.º 14
0
        private SignedData(
            Asn1Sequence seq)
        {
            IEnumerator e = seq.GetEnumerator();

            e.MoveNext();
            version = (DerInteger)e.Current;

            e.MoveNext();
            digestAlgorithms = (Asn1Set)e.Current;

            e.MoveNext();
            contentInfo = ContentInfo.GetInstance(e.Current);

            while (e.MoveNext())
            {
                Asn1Object o = (Asn1Object)e.Current;

                //
                // an interesting feature of SignedData is that there appear to be varying implementations...
                // for the moment we ignore anything which doesn't fit.
                //
                if (o is DerTaggedObject)
                {
                    DerTaggedObject tagged = (DerTaggedObject)o;

                    switch (tagged.TagNo)
                    {
                    case 0:
                        certificates = Asn1Set.GetInstance(tagged, false);
                        break;

                    case 1:
                        crls = Asn1Set.GetInstance(tagged, false);
                        break;

                    default:
                        throw new ArgumentException("unknown tag value " + tagged.TagNo);
                    }
                }
                else
                {
                    signerInfos = (Asn1Set)o;
                }
            }
        }
Exemplo n.º 15
0
        private SignerAttribute(object obj)
        {
            Asn1Sequence    asn1Sequence    = (Asn1Sequence)obj;
            DerTaggedObject derTaggedObject = (DerTaggedObject)asn1Sequence[0];

            if (derTaggedObject.TagNo == 0)
            {
                this.claimedAttributes = Asn1Sequence.GetInstance(derTaggedObject, true);
                return;
            }
            if (derTaggedObject.TagNo == 1)
            {
                this.certifiedAttributes = AttributeCertificate.GetInstance(derTaggedObject);
                return;
            }
            throw new ArgumentException("illegal tag.", "obj");
        }
        private void TestTaggedObject()
        {
            // boolean explicit, int tagNo, ASN1Encodable obj
            bool isExplicit = false;

            // Type1 ::= VisibleString
            DerVisibleString type1 = new DerVisibleString("Jones");
            if (!Arrays.AreEqual(Hex.Decode("1A054A6F6E6573"), type1.GetEncoded()))
            {
                Fail("ERROR: expected value doesn't match!");
            }

            // Type2 ::= [APPLICATION 3] IMPLICIT Type1
            isExplicit = false;
            DerApplicationSpecific type2 = new DerApplicationSpecific(isExplicit, 3, type1);
            // type2.isConstructed()
            if (!Arrays.AreEqual(Hex.Decode("43054A6F6E6573"), type2.GetEncoded()))
            {
                Fail("ERROR: expected value doesn't match!");
            }

            // Type3 ::= [2] Type2
            isExplicit = true;
            DerTaggedObject type3 = new DerTaggedObject(isExplicit, 2, type2);
            if (!Arrays.AreEqual(Hex.Decode("A20743054A6F6E6573"), type3.GetEncoded()))
            {
                Fail("ERROR: expected value doesn't match!");
            }

            // Type4 ::= [APPLICATION 7] IMPLICIT Type3
            isExplicit = false;
            DerApplicationSpecific type4 = new DerApplicationSpecific(isExplicit, 7, type3);
            if (!Arrays.AreEqual(Hex.Decode("670743054A6F6E6573"), type4.GetEncoded()))
            {
                Fail("ERROR: expected value doesn't match!");
            }

            // Type5 ::= [2] IMPLICIT Type2
            isExplicit = false;
            DerTaggedObject type5 = new DerTaggedObject(isExplicit, 2, type2);
            // type5.isConstructed()
            if (!Arrays.AreEqual(Hex.Decode("82054A6F6E6573"), type5.GetEncoded()))
            {
                Fail("ERROR: expected value doesn't match!");
            }
        }
Exemplo n.º 17
0
 public OtherInfo(Asn1Sequence seq)
 {
     global::System.Collections.IEnumerator enumerator = seq.GetEnumerator();
     enumerator.MoveNext();
     keyInfo = new KeySpecificInfo((Asn1Sequence)enumerator.get_Current());
     while (enumerator.MoveNext())
     {
         DerTaggedObject derTaggedObject = (DerTaggedObject)enumerator.get_Current();
         if (derTaggedObject.TagNo == 0)
         {
             partyAInfo = (Asn1OctetString)derTaggedObject.GetObject();
         }
         else if (derTaggedObject.TagNo == 2)
         {
             suppPubInfo = (Asn1OctetString)derTaggedObject.GetObject();
         }
     }
 }
Exemplo n.º 18
0
        private SignerAttribute(object obj)
        {
            //IL_0050: Unknown result type (might be due to invalid IL or missing references)
            Asn1Sequence    asn1Sequence    = (Asn1Sequence)obj;
            DerTaggedObject derTaggedObject = (DerTaggedObject)asn1Sequence[0];

            if (derTaggedObject.TagNo == 0)
            {
                claimedAttributes = Asn1Sequence.GetInstance(derTaggedObject, explicitly: true);
                return;
            }
            if (derTaggedObject.TagNo == 1)
            {
                certifiedAttributes = AttributeCertificate.GetInstance(derTaggedObject);
                return;
            }
            throw new ArgumentException("illegal tag.", "obj");
        }
Exemplo n.º 19
0
        public OtherInfo(Asn1Sequence seq)
        {
            IEnumerator enumerator = seq.GetEnumerator();

            enumerator.MoveNext();
            this.keyInfo = new KeySpecificInfo((Asn1Sequence)enumerator.Current);
            while (enumerator.MoveNext())
            {
                DerTaggedObject derTaggedObject = (DerTaggedObject)enumerator.Current;
                if (derTaggedObject.TagNo == 0)
                {
                    this.partyAInfo = (Asn1OctetString)derTaggedObject.GetObject();
                }
                else if (derTaggedObject.TagNo == 2)
                {
                    this.suppPubInfo = (Asn1OctetString)derTaggedObject.GetObject();
                }
            }
        }
Exemplo n.º 20
0
        private SignerAttribute(
            object obj)
        {
            Asn1Sequence    seq          = (Asn1Sequence)obj;
            DerTaggedObject taggedObject = (DerTaggedObject)seq[0];

            if (taggedObject.TagNo == 0)
            {
                claimedAttributes = Asn1Sequence.GetInstance(taggedObject, true);
            }
            else if (taggedObject.TagNo == 1)
            {
                certifiedAttributes = AttributeCertificate.GetInstance(taggedObject);
            }
            else
            {
                throw new ArgumentException("illegal tag.", "obj");
            }
        }
Exemplo n.º 21
0
        private Accuracy(Asn1Sequence seq)
        {
            //IL_00a6: Unknown result type (might be due to invalid IL or missing references)
            //IL_00e8: Unknown result type (might be due to invalid IL or missing references)
            //IL_00f3: Unknown result type (might be due to invalid IL or missing references)
            for (int i = 0; i < seq.Count; i++)
            {
                if (seq[i] is DerInteger)
                {
                    seconds = (DerInteger)seq[i];
                }
                else
                {
                    if (!(seq[i] is DerTaggedObject))
                    {
                        continue;
                    }
                    DerTaggedObject derTaggedObject = (DerTaggedObject)seq[i];
                    switch (derTaggedObject.TagNo)
                    {
                    case 0:
                        millis = DerInteger.GetInstance(derTaggedObject, isExplicit: false);
                        if (millis.Value.IntValue < 1 || millis.Value.IntValue > 999)
                        {
                            throw new ArgumentException("Invalid millis field : not in (1..999).");
                        }
                        break;

                    case 1:
                        micros = DerInteger.GetInstance(derTaggedObject, isExplicit: false);
                        if (micros.Value.IntValue < 1 || micros.Value.IntValue > 999)
                        {
                            throw new ArgumentException("Invalid micros field : not in (1..999).");
                        }
                        break;

                    default:
                        throw new ArgumentException("Invalig tag number");
                    }
                }
            }
        }
Exemplo n.º 22
0
        private Accuracy(
            Asn1Sequence seq)
        {
            for (int i = 0; i < seq.Count; ++i)
            {
                // seconds
                if (seq[i] is DerInteger)
                {
                    seconds = (DerInteger)seq[i];
                }
                else if (seq[i] is DerTaggedObject)
                {
                    DerTaggedObject extra = (DerTaggedObject)seq[i];

                    switch (extra.TagNo)
                    {
                    case 0:
                        millis = DerInteger.GetInstance(extra, false);
                        if (millis.Value.IntValue < MinMillis ||
                            millis.Value.IntValue > MaxMillis)
                        {
                            throw new ArgumentException(
                                      "Invalid millis field : not in (1..999).");
                        }
                        break;

                    case 1:
                        micros = DerInteger.GetInstance(extra, false);
                        if (micros.Value.IntValue < MinMicros ||
                            micros.Value.IntValue > MaxMicros)
                        {
                            throw new ArgumentException(
                                      "Invalid micros field : not in (1..999).");
                        }
                        break;

                    default:
                        throw new ArgumentException("Invalig tag number");
                    }
                }
            }
        }
        internal TbsCertificateStructure(Asn1Sequence seq)
        {
            int num = 0;

            this.seq = seq;
            if (seq[0] is DerTaggedObject)
            {
                this.version = DerInteger.GetInstance((Asn1TaggedObject)seq[0], true);
            }
            else
            {
                num          = -1;
                this.version = new DerInteger(0);
            }
            this.serialNumber = DerInteger.GetInstance(seq[num + 1]);
            this.signature    = AlgorithmIdentifier.GetInstance(seq[num + 2]);
            this.issuer       = X509Name.GetInstance(seq[num + 3]);
            Asn1Sequence asn1Sequence = (Asn1Sequence)seq[num + 4];

            this.startDate            = Time.GetInstance(asn1Sequence[0]);
            this.endDate              = Time.GetInstance(asn1Sequence[1]);
            this.subject              = X509Name.GetInstance(seq[num + 5]);
            this.subjectPublicKeyInfo = SubjectPublicKeyInfo.GetInstance(seq[num + 6]);
            for (int i = seq.Count - (num + 6) - 1; i > 0; i--)
            {
                DerTaggedObject derTaggedObject = (DerTaggedObject)seq[num + 6 + i];
                switch (derTaggedObject.TagNo)
                {
                case 1:
                    this.issuerUniqueID = DerBitString.GetInstance(derTaggedObject, false);
                    break;

                case 2:
                    this.subjectUniqueID = DerBitString.GetInstance(derTaggedObject, false);
                    break;

                case 3:
                    this.extensions = X509Extensions.GetInstance(derTaggedObject);
                    break;
                }
            }
        }
Exemplo n.º 24
0
        private void checkConstruction(
            DeclarationOfMajority decl,
            DeclarationOfMajority.Choice type,
            DerGeneralizedTime dateOfBirth,
            int notYoungerThan)
        {
            checkValues(decl, type, dateOfBirth, notYoungerThan);

            decl = DeclarationOfMajority.GetInstance(decl);

            checkValues(decl, type, dateOfBirth, notYoungerThan);

            Asn1InputStream aIn = new Asn1InputStream(decl.ToAsn1Object().GetEncoded());

            DerTaggedObject info = (DerTaggedObject)aIn.ReadObject();

            decl = DeclarationOfMajority.GetInstance(info);

            checkValues(decl, type, dateOfBirth, notYoungerThan);
        }
Exemplo n.º 25
0
        private string GetResponderName(ResponderID responderId, ref bool byKey)
        {
            DerTaggedObject derTaggedObject = (DerTaggedObject)responderId.ToAsn1Object();

            if (derTaggedObject.TagNo != 1)
            {
                if (derTaggedObject.TagNo != 2)
                {
                    return(null);
                }
                Asn1TaggedObject asn1TaggedObject = (Asn1TaggedObject)responderId.ToAsn1Object();
                Asn1OctetString  asn1OctetString  = (Asn1OctetString)asn1TaggedObject.GetObject();
                byKey = true;
                return(Convert.ToBase64String(asn1OctetString.GetOctets()));
            }
            X509Name instance = X509Name.GetInstance(derTaggedObject.GetObject());

            byKey = false;
            return(instance.ToString());
        }
Exemplo n.º 26
0
        public static ECPrivateKeyParameters GetPrivateKey(byte[] privateKey)
        {
            Asn1Object version           = new DerInteger(1);
            Asn1Object derEncodedKey     = new DerOctetString(privateKey);
            Asn1Object keyTypeParameters = new DerTaggedObject(0, new DerObjectIdentifier(@"1.2.840.10045.3.1.7"));

            Asn1Object derSequence = new DerSequence(version, derEncodedKey, keyTypeParameters);

            var base64EncodedDerSequence = Convert.ToBase64String(derSequence.GetDerEncoded());
            var pemKey = "-----BEGIN EC PRIVATE KEY-----\n";

            pemKey += base64EncodedDerSequence;
            pemKey += "\n-----END EC PRIVATE KEY----";

            var reader    = new StringReader(pemKey);
            var pemReader = new PemReader(reader);
            var keyPair   = (AsymmetricCipherKeyPair)pemReader.ReadObject();

            return((ECPrivateKeyParameters)keyPair.Private);
        }
Exemplo n.º 27
0
        private void IncorporateOCSPRefs(CompleteRevocationRefs completeRevocationRefs
                                         , ValidationContext ctx)
        {
            if (!ctx.GetNeededOCSPResp().IsEmpty())
            {
                var ocsp = ctx.GetNeededOCSPResp()[0];

                //TODO jbonill Digest parameter?
                byte[] ocspDigest = DigestUtilities.CalculateDigest("SHA-1", ocsp.GetEncoded());

                MSXades.OCSPRef incOCSPRef = new MSXades.OCSPRef();

                //TODO jbonilla Digest parameter?
                incOCSPRef.CertDigest.DigestMethod.Algorithm = SignedXml.XmlDsigSHA1Url;
                incOCSPRef.CertDigest.DigestValue            = ocspDigest;

                //TODO jbonilla
                //incOCSPRef.OCSPIdentifier.UriAttribute = "";
                incOCSPRef.OCSPIdentifier.ProducedAt = ocsp.ProducedAt;

                string responderIdText = "";

                RespID      respId          = ocsp.ResponderId;
                ResponderID ocspResponderId = respId.ToAsn1Object();

                DerTaggedObject derTaggedObject = (DerTaggedObject)ocspResponderId.ToAsn1Object();

                if (2 == derTaggedObject.TagNo)
                {
                    responderIdText = Convert.ToBase64String(ocspResponderId.GetKeyHash());
                }
                else
                {
                    responderIdText = ocspResponderId.Name.ToString();
                }

                incOCSPRef.OCSPIdentifier.ResponderID = responderIdText;

                completeRevocationRefs.OCSPRefs.OCSPRefCollection.Add(incOCSPRef);
            }
        }
Exemplo n.º 28
0
        public void explode(byte[] fileContents)
        {
            try
            {
                Asn1Sequence        sequenza   = Asn1Sequence.GetInstance(fileContents);
                DerObjectIdentifier tsdOIDFile = sequenza[0] as DerObjectIdentifier;
                if (tsdOIDFile != null)
                {
                    if (tsdOIDFile.Id == CmsObjectIdentifiers.timestampedData.Id)   //TSD
                    {
                        DerTaggedObject taggedObject = sequenza[1] as DerTaggedObject;
                        if (taggedObject != null)
                        {
                            Asn1Sequence    asn1seq = Asn1Sequence.GetInstance(taggedObject, true);
                            TimeStampedData tsd     = TimeStampedData.GetInstance(asn1seq);
                            _p7m = new CryptoFile {
                                Content = tsd.Content.GetOctets(), MessageFileType = fileType.Binary, Name = "default.p7m"
                            };
                            TimeStampAndCrl[] crlTS = tsd.TemporalEvidence.TstEvidence.ToTimeStampAndCrlArray();
                            foreach (TimeStampAndCrl tokCRL in crlTS)
                            {
                                TimeStampToken tsToken = new TimeStampToken(tokCRL.TimeStampToken);
                                ContentInfo    o       = tokCRL.TimeStampToken;

                                Org.BouncyCastle.Asn1.Cmp.PkiStatusInfo si = new Org.BouncyCastle.Asn1.Cmp.PkiStatusInfo(0);
                                Org.BouncyCastle.Asn1.Tsp.TimeStampResp re = new Org.BouncyCastle.Asn1.Tsp.TimeStampResp(si, o);

                                string serial = tsToken.TimeStampInfo.SerialNumber.ToString();
                                _tsr.Add(new CryptoFile {
                                    Content = re.GetEncoded(), Name = String.Format("default.{0}.tsr", serial), MessageFileType = fileType.Binary
                                });
                            }
                        }
                    }
                }
            }
            catch (Exception e)
            {
                throw e;
            }
        }
Exemplo n.º 29
0
        public OtherInfo(
            Asn1Sequence seq)
        {
            IEnumerator e = seq.GetEnumerator();

            e.MoveNext();
            keyInfo = new KeySpecificInfo((Asn1Sequence)e.Current);

            while (e.MoveNext())
            {
                DerTaggedObject o = (DerTaggedObject)e.Current;

                if (o.TagNo == 0)
                {
                    partyAInfo = (Asn1OctetString)o.GetObject();
                }
                else if ((int)o.TagNo == 2)
                {
                    suppPubInfo = (Asn1OctetString)o.GetObject();
                }
            }
        }
Exemplo n.º 30
0
        private string GetResponderName(ResponderID responderId, ref bool byKey)
        {
            DerTaggedObject dt = (DerTaggedObject)responderId.ToAsn1Object();

            if (dt.TagNo == 1)
            {
                byKey = false;

                return(new X500DistinguishedName(dt.GetObject().GetEncoded()).Name);
            }
            else if (dt.TagNo == 2)
            {
                Asn1TaggedObject tagger  = (Asn1TaggedObject)responderId.ToAsn1Object();
                Asn1OctetString  pubInfo = (Asn1OctetString)tagger.GetObject();
                byKey = true;

                return(Convert.ToBase64String(pubInfo.GetOctets()));
            }
            else
            {
                return(null);
            }
        }
Exemplo n.º 31
0
        private SignedData(Asn1Sequence seq)
        {
            IEnumerator enumerator = seq.GetEnumerator();

            enumerator.MoveNext();
            this.version = (DerInteger)enumerator.Current;
            enumerator.MoveNext();
            this.digestAlgorithms = (Asn1Set)enumerator.Current;
            enumerator.MoveNext();
            this.contentInfo = ContentInfo.GetInstance(enumerator.Current);
            while (enumerator.MoveNext())
            {
                Asn1Object asn1Object = (Asn1Object)enumerator.Current;
                if (asn1Object is DerTaggedObject)
                {
                    DerTaggedObject derTaggedObject = (DerTaggedObject)asn1Object;
                    switch (derTaggedObject.TagNo)
                    {
                    case 0:
                        this.certificates = Asn1Set.GetInstance(derTaggedObject, false);
                        break;

                    case 1:
                        this.crls = Asn1Set.GetInstance(derTaggedObject, false);
                        break;

                    default:
                        throw new ArgumentException("unknown tag value " + derTaggedObject.TagNo);
                    }
                }
                else
                {
                    this.signerInfos = (Asn1Set)asn1Object;
                }
            }
        }
Exemplo n.º 32
0
		public override void PerformTest()
		{
			Asn1EncodableVector v = new Asn1EncodableVector();
			byte[] data = new byte[10];

			v.Add(new DerOctetString(data));
			v.Add(new DerBitString(data));
			v.Add(new DerInteger(100));
			v.Add(DerBoolean.True);

			checkSortedSet(0, new DerSet(v));

			v = new Asn1EncodableVector();
			v.Add(new DerInteger(100));
			v.Add(DerBoolean.True);
			v.Add(new DerOctetString(data));
			v.Add(new DerBitString(data));

			checkSortedSet(1, new DerSet(v));

			v = new Asn1EncodableVector();
			v.Add(DerBoolean.True);
			v.Add(new DerOctetString(data));
			v.Add(new DerBitString(data));
			v.Add(new DerInteger(100));


			checkSortedSet(2, new DerSet(v));

			v = new Asn1EncodableVector();
			v.Add(new DerBitString(data));
			v.Add(new DerOctetString(data));
			v.Add(new DerInteger(100));
			v.Add(DerBoolean.True);

			checkSortedSet(3, new DerSet(v));

			v = new Asn1EncodableVector();
			v.Add(new DerOctetString(data));
			v.Add(new DerBitString(data));
			v.Add(new DerInteger(100));
			v.Add(DerBoolean.True);

			Asn1Set s = new BerSet(v);

			if (!(s[0] is DerOctetString))
			{
				Fail("BER set sort order changed.");
			}

			// create an implicitly tagged "set" without sorting
			Asn1TaggedObject tag = new DerTaggedObject(false, 1, new DerSequence(v));
			s = Asn1Set.GetInstance(tag, false);

			if (s[0] is DerBoolean)
			{
				Fail("sorted when shouldn't be.");
			}

			// equality test
			v = new Asn1EncodableVector();

			v.Add(DerBoolean.True);
			v.Add(DerBoolean.True);
			v.Add(DerBoolean.True);

			s = new DerSet(v);
		}