Ejemplo n.º 1
0
        public AuthorityKeyIdentifier(
            ASN1Sequence seq)
        {
            IEnumerator e = seq.getObjects();

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

                switch ((int)o.getTagNo())
                {
                case 0:
                    this.keyidentifier = ASN1OctetString.getInstance(o, false);
                    break;

                case 1:
                    this.certissuer = GeneralNames.getInstance(o, false);
                    break;

                case 2:
                    this.certserno = DERInteger.getInstance(o, false);
                    break;

                default:
                    throw new ArgumentException("illegal tag");
                }
            }
        }
Ejemplo n.º 2
0
        public TBSCertificateStructure(
            ASN1Sequence seq)
        {
            int seqStart = 0;

            this.seq = seq;

            //
            // some certficates don't include a version number - we assume v1
            //
            if (seq.getObjectAt(0) is DERTaggedObject)
            {
                version = DERInteger.getInstance(seq.getObjectAt(0));
            }
            else
            {
                seqStart = -1;          // field 0 is missing!
                version  = new DERInteger(0);
            }

            serialNumber = DERInteger.getInstance(seq.getObjectAt(seqStart + 1));

            signature = AlgorithmIdentifier.getInstance(seq.getObjectAt(seqStart + 2));
            issuer    = X509Name.getInstance(seq.getObjectAt(seqStart + 3));

            //
            // before and after dates
            //
            ASN1Sequence dates = (ASN1Sequence)seq.getObjectAt(seqStart + 4);

            startDate = Time.getInstance(dates.getObjectAt(0));
            endDate   = Time.getInstance(dates.getObjectAt(1));

            subject = X509Name.getInstance(seq.getObjectAt(seqStart + 5));

            //
            // public key info.
            //
            subjectPublicKeyInfo = SubjectPublicKeyInfo.getInstance(seq.getObjectAt(seqStart + 6));

            for (int extras = seq.size() - (seqStart + 6) - 1; extras > 0; extras--)
            {
                DERTaggedObject extra = (DERTaggedObject)seq.getObjectAt(seqStart + 6 + extras);

                switch ((int)extra.getTagNo())
                {
                case 1:
                    issuerUniqueId = DERBitString.getInstance(extra, false);
                    break;

                case 2:
                    subjectUniqueId = DERBitString.getInstance(extra, false);
                    break;

                case 3:
                    extensions = X509Extensions.getInstance(extra);
                    break;
                }
            }
        }
Ejemplo n.º 3
0
        public ASN1OctetString getContent()
        {
            if (data.size() == 3)
            {
                DERTaggedObject o = (DERTaggedObject)data.getObjectAt(2);

                return(ASN1OctetString.getInstance(o.getObject()));
            }

            return(null);
        }
Ejemplo n.º 4
0
        public SignedData(
            ASN1Sequence seq)
        {
            IEnumerator e = seq.getObjects();

            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 ((int)tagged.getTagNo())
                    {
                    case 0:
                        certificates = ASN1Set.getInstance(tagged, false);
                        break;

                    case 1:
                        crls = ASN1Set.getInstance(tagged, false);
                        break;

                    default:
                        throw new ArgumentException("unknown tag value " + tagged.getTagNo());
                    }
                }
                else
                {
                    signerInfos = (ASN1Set)o;
                }
            }
        }
Ejemplo n.º 5
0
        public OtherInfo(
            ASN1Sequence seq)
        {
            IEnumerator e = seq.getObjects();

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

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

                if (o.getTagNo() == 0)
                {
                    partyAInfo = (ASN1OctetString)o.getObject();
                }
                else if ((int)o.getTagNo() == 2)
                {
                    suppPubInfo = (ASN1OctetString)o.getObject();
                }
            }
        }
Ejemplo n.º 6
0
        public CertificationRequestInfo(
            ASN1Sequence seq)
        {
            version = (DERInteger)seq.getObjectAt(0);

            subject       = X509Name.getInstance(seq.getObjectAt(1));
            subjectPKInfo = SubjectPublicKeyInfo.getInstance(seq.getObjectAt(2));

            //
            // some CertificationRequestInfo objects seem to treat this field
            // as optional.
            //
            if (seq.size() > 3)
            {
                DERTaggedObject tagobj = (DERTaggedObject)seq.getObjectAt(3);
                attributes = ASN1Set.getInstance(tagobj, false);
            }

            if ((subject == null) || (version == null) || (subjectPKInfo == null))
            {
                throw new ArgumentException("Not all mandatory fields set in CertificationRequestInfo generator.");
            }
        }
Ejemplo n.º 7
0
        /**
         * dump a DER object as a formatted string with indentation
         *
         * @param obj the ASN1Object to be dumped out.
         */
        public static string _dumpAsString(
            string indent,
            ASN1Object obj)
        {
            if (obj is ASN1Sequence)
            {
                StringBuilder buf = new StringBuilder();
                IEnumerator   e   = ((ASN1Sequence)obj).getObjects();
                string        tab = indent + TAB;

                buf.Append(indent);
                if (obj is DERSequence)
                {
                    buf.Append("DER Sequence");
                }
                else if (obj is BERSequence)
                {
                    buf.Append("BER Sequence");
                }
                else
                {
                    buf.Append("Sequence");
                }

                buf.Append(Environment.NewLine);

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

                    if (o == null || o.Equals(new DERNull()))
                    {
                        buf.Append(tab);
                        buf.Append("NULL");
                        buf.Append(Environment.NewLine);
                    }
                    else if (o is ASN1Object)
                    {
                        buf.Append(_dumpAsString(tab, (ASN1Object)o));
                    }
                    else
                    {
                        buf.Append(_dumpAsString(tab, ((ASN1Encodable)o).toASN1Object()));
                    }
                }
                return(buf.ToString());
            }
            else if (obj is DERTaggedObject)
            {
                StringBuilder buf = new StringBuilder();
                string        tab = indent + TAB;

                buf.Append(indent);
                if (obj is BERTaggedObject)
                {
                    buf.Append("BER Tagged [");
                }
                else
                {
                    buf.Append("Tagged [");
                }

                DERTaggedObject o = (DERTaggedObject)obj;

                buf.Append(((int)o.getTagNo()).ToString());
                buf.Append("]");

                if (!o.isExplicit())
                {
                    buf.Append(" IMPLICIT ");
                }

                buf.Append(Environment.NewLine);

                if (o.isEmpty())
                {
                    buf.Append(tab);
                    buf.Append("EMPTY");
                    buf.Append(Environment.NewLine);
                }
                else
                {
                    buf.Append(_dumpAsString(tab, o.getObject()));
                }

                return(buf.ToString());
            }
            else if (obj is BERSet)
            {
                StringBuilder buf = new StringBuilder();
                IEnumerator   e   = ((ASN1Set)obj).getObjects();
                string        tab = indent + TAB;

                buf.Append(indent);
                buf.Append("BER Set");
                buf.Append(Environment.NewLine);

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

                    if (o == null)
                    {
                        buf.Append(tab);
                        buf.Append("NULL");
                        buf.Append(Environment.NewLine);
                    }
                    else if (o is ASN1Object)
                    {
                        buf.Append(_dumpAsString(tab, (ASN1Object)o));
                    }
                    else
                    {
                        buf.Append(_dumpAsString(tab, ((ASN1Encodable)o).toASN1Object()));
                    }
                }
                return(buf.ToString());
            }
            else if (obj is DERSet)
            {
                StringBuilder buf = new StringBuilder();
                IEnumerator   e   = ((ASN1Set)obj).getObjects();
                string        tab = indent + TAB;

                buf.Append(indent);
                buf.Append("DER Set");
                buf.Append(Environment.NewLine);

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

                    if (o == null)
                    {
                        buf.Append(tab);
                        buf.Append("NULL");
                        buf.Append(Environment.NewLine);
                    }
                    else if (o is ASN1Object)
                    {
                        buf.Append(_dumpAsString(tab, (ASN1Object)o));
                    }
                    else
                    {
                        buf.Append(_dumpAsString(tab, ((ASN1Encodable)o).toASN1Object()));
                    }
                }
                return(buf.ToString());
            }
            else if (obj is DERObjectIdentifier)
            {
                return(indent + "ObjectIdentifier(" + ((DERObjectIdentifier)obj).getId() + ")" + Environment.NewLine);
            }
            else if (obj is DERBoolean)
            {
                return(indent + "Boolean(" + ((DERBoolean)obj).isTrue() + ")" + Environment.NewLine);
            }
            else if (obj is DERInteger)
            {
                return(indent + "Integer(" + ((DERInteger)obj).getValue() + ")" + Environment.NewLine);
            }
            else if (obj is DEROctetString)
            {
                return(indent + obj.ToString() + "[" + ((ASN1OctetString)obj).getOctets().Length + "] " + Environment.NewLine);
            }
            else if (obj is DERIA5String)
            {
                return(indent + "IA5String(" + ((DERIA5String)obj).getString() + ") " + Environment.NewLine);
            }
            else if (obj is DERPrintableString)
            {
                return(indent + "PrintableString(" + ((DERPrintableString)obj).getString() + ") " + Environment.NewLine);
            }
            else if (obj is DERVisibleString)
            {
                return(indent + "VisibleString(" + ((DERVisibleString)obj).getString() + ") " + Environment.NewLine);
            }
            else if (obj is DERBMPString)
            {
                return(indent + "BMPString(" + ((DERBMPString)obj).getString() + ") " + Environment.NewLine);
            }
            else if (obj is DERT61String)
            {
                return(indent + "T61String(" + ((DERT61String)obj).getString() + ") " + Environment.NewLine);
            }
            else if (obj is DERUTCTime)
            {
                return(indent + "UTCTime(" + ((DERUTCTime)obj).getTime() + ") " + Environment.NewLine);
            }
            else if (obj is DERUnknownTag)
            {
                return(indent + "Unknown " + ((int)((DERUnknownTag)obj).getTag()).ToString("X") + " "
                       + ByteArray2String(Hex.encode(((DERUnknownTag)obj).getData())) + Environment.NewLine);
            }
            else
            {
                return(indent + obj.ToString() + Environment.NewLine);
            }
        }