示例#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");
                }
            }
        }
示例#2
0
        /**
         * returns a vector with 0 or more objects of all the capabilities
         * matching the passed in capability OID. If the OID passed is null the
         * entire set is returned.
         */
        public ArrayList getCapabilities(
            DERObjectIdentifier capability)
        {
            IEnumerator e    = capabilities.getObjects();
            ArrayList   list = new ArrayList();

            if (capability == null)
            {
                while (e.MoveNext())
                {
                    SMIMECapability cap = SMIMECapability.getInstance(e.Current);

                    list.Add(cap);
                }
            }
            else
            {
                while (e.MoveNext())
                {
                    SMIMECapability cap = SMIMECapability.getInstance(e.Current);

                    if (capability.Equals(cap.getCapabilityID()))
                    {
                        list.Add(cap);
                    }
                }
            }

            return(list);
        }
示例#3
0
        public PrivateKeyInfo(
            ASN1Sequence seq)
        {
            IEnumerator e = seq.getObjects();

            e.MoveNext();
            BigInteger version = ((DERInteger)e.Current).getValue();

            if (version.intValue() != 0)
            {
                throw new ArgumentException("wrong version for private key info");
            }

            e.MoveNext();
            algId = new AlgorithmIdentifier((ASN1Sequence)e.Current);

            try
            {
                e.MoveNext();
                MemoryStream    bIn = new MemoryStream(((ASN1OctetString)e.Current).getOctets());
                ASN1InputStream aIn = new ASN1InputStream(bIn);

                privKey = aIn.readObject();
            }
            catch (IOException)
            {
                throw new ArgumentException("Error recoverying private key from sequence");
            }
        }
示例#4
0
        public RSAPrivateKeyStructure(
            ASN1Sequence seq)
        {
            IEnumerator e = seq.getObjects();

            e.MoveNext();
            BigInteger version = ((DERInteger)e.Current).getValue();

            if (version.intValue() != 0)
            {
                throw new ArgumentException("wrong version for RSA private key");
            }

            e.MoveNext();
            modulus = ((DERInteger)e.Current).getValue();
            e.MoveNext();
            publicExponent = ((DERInteger)e.Current).getValue();
            e.MoveNext();
            privateExponent = ((DERInteger)e.Current).getValue();
            e.MoveNext();
            prime1 = ((DERInteger)e.Current).getValue();
            e.MoveNext();
            prime2 = ((DERInteger)e.Current).getValue();
            e.MoveNext();
            exponent1 = ((DERInteger)e.Current).getValue();
            e.MoveNext();
            exponent2 = ((DERInteger)e.Current).getValue();
            e.MoveNext();
            coefficient = ((DERInteger)e.Current).getValue();
        }
示例#5
0
        /// <summary>
        /// Return a the certificates associated with this request.
        /// </summary>
        /// <returns>An array of certs or null is none were present in this request.</returns>
        public X509Certificate[] getCerts()
        {
            if (!this.isSigned())
            {
                return(null);
            }

            if (chain == null)
            {
                ASN1Sequence s = req.getOptionalSignature().getCerts();

                if (s != null)
                {
                    ArrayList lst = new ArrayList();

                    IEnumerator e = s.getObjects();
                    while (e.MoveNext())
                    {
                        lst.Add(new X509CertificateStructure((ASN1Sequence)e.Current));
                    }

                    chain = (X509Certificate[])lst.ToArray(Type.GetType("org.bouncycastle.x509.X509Certificate"));
                }

                return(chain);
            }
            return(null);
        }
示例#6
0
        public CrlID(
            ASN1Sequence seq)
        {
            IEnumerator e = seq.getObjects();

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

                switch ((int)o.getTagNo())
                {
                case 0:
                    crlUrl = DERIA5String.getInstance(o, true);
                    break;

                case 1:
                    crlNum = DERInteger.getInstance(o, true);
                    break;

                case 2:
                    crlTime = DERGeneralizedTime.getInstance(o, true);
                    break;

                default:
                    throw new ArgumentException(
                              "unknown tag number: " + o.getTagNo());
                }
            }
        }
示例#7
0
            /**
             * Constructs an X509 name
             * @param seq an ASN1 Sequence
             */
            public X509Name(ASN1Sequence seq)
            {
                IEnumerator e = seq.getObjects();

                while (e.MoveNext())
                {
                    ASN1Set sett = (ASN1Set)e.Current;

                    for (int i = 0; i < sett.size(); i++)
                    {
                        ASN1Sequence s  = (ASN1Sequence)sett.getObjectAt(i);
                        String       id = (String)DefaultSymbols[s.getObjectAt(0)];
                        if (id == null)
                        {
                            continue;
                        }
                        ArrayList vs = (ArrayList)values[id];
                        if (vs == null)
                        {
                            vs         = new ArrayList();
                            values[id] = vs;
                        }
                        vs.Add(((DERString)s.getObjectAt(1)).getString());
                    }
                }
            }
示例#8
0
        public PBEParameter(ASN1Sequence seq)
        {
            IEnumerator e = seq.getObjects();

            e.MoveNext();
            octStr = (ASN1OctetString)e.Current;
            e.MoveNext();
            iterationCount = (DERInteger)e.Current;
        }
示例#9
0
        /**
         *
         */
        public IetfAttrSyntax(ASN1Sequence seq)
        {
            int i = 0;

            if (seq.getObjectAt(0) is ASN1TaggedObject)
            {
                policyAuthority = GeneralNames.getInstance(((ASN1TaggedObject)seq.getObjectAt(0)), false);
                i++;
            }
            else if (seq.size() == 2)
            { // VOMS fix
                policyAuthority = GeneralNames.getInstance(seq.getObjectAt(0));
                i++;
            }

            if (!(seq.getObjectAt(i) is ASN1Sequence))
            {
                throw new ArgumentException("Non-IetfAttrSyntax encoding");
            }

            seq = (ASN1Sequence)seq.getObjectAt(i);

            for (IEnumerator e = seq.getObjects(); e.MoveNext();)
            {
                ASN1Object obj = (ASN1Object)e.Current;
                int        type;

                if (obj is DERObjectIdentifier)
                {
                    type = VALUE_OID;
                }
                else if (obj is DERUTF8String)
                {
                    type = VALUE_UTF8;
                }
                else if (obj is DEROctetString)
                {
                    type = VALUE_OCTETS;
                }
                else
                {
                    throw new ArgumentException("Bad value type encoding IetfAttrSyntax");
                }

                if (valueChoice < 0)
                {
                    valueChoice = type;
                }

                if (type != valueChoice)
                {
                    throw new ArgumentException("Mix of value types in IetfAttrSyntax");
                }

                values.Add(obj);
            }
        }
示例#10
0
        public ElGamalParameter(
            ASN1Sequence seq)
        {
            IEnumerator e = seq.getObjects();

            e.MoveNext();
            p = (DERInteger)e.Current;
            e.MoveNext();
            g = (DERInteger)e.Current;
        }
示例#11
0
        public RSAPublicKeyStructure(
            ASN1Sequence seq)
        {
            IEnumerator e = seq.getObjects();

            e.MoveNext();
            modulus = ((DERInteger)e.Current).getPositiveValue();
            e.MoveNext();
            publicExponent = ((DERInteger)e.Current).getPositiveValue();
        }
示例#12
0
        public DigestInfo(
            ASN1Sequence obj)
        {
            IEnumerator e = obj.getObjects();

            e.MoveNext();
            algId = AlgorithmIdentifier.getInstance(e.Current);
            e.MoveNext();
            digest = ((ASN1OctetString)e.Current).getOctets();
        }
示例#13
0
        public SubjectPublicKeyInfo(
            ASN1Sequence seq)
        {
            IEnumerator e = seq.getObjects();

            e.MoveNext();
            this.algId = AlgorithmIdentifier.getInstance(e.Current);
            e.MoveNext();
            this.keyData = (DERBitString)e.Current;
        }
示例#14
0
        public EncryptedPrivateKeyInfo(
            ASN1Sequence seq)
        {
            IEnumerator e = seq.getObjects();

            e.MoveNext();
            algId = new AlgorithmIdentifier((ASN1Sequence)e.Current);
            e.MoveNext();
            data = (ASN1OctetString)e.Current;
        }
示例#15
0
        public KeySpecificInfo(
            ASN1Sequence seq)
        {
            IEnumerator e = seq.getObjects();

            e.MoveNext();
            algorithm = (DERObjectIdentifier)e.Current;
            e.MoveNext();
            counter = (ASN1OctetString)e.Current;
        }
示例#16
0
        public override int GetHashCode()
        {
            ASN1Sequence seq      = (ASN1Sequence)this.toASN1Object();
            IEnumerator  e        = seq.getObjects();
            int          hashCode = 0;

            while (e.MoveNext())
            {
                hashCode ^= e.Current.GetHashCode();
            }

            return(hashCode);
        }
示例#17
0
        public ContentInfo(
            ASN1Sequence seq)
        {
            IEnumerator e = seq.getObjects();

            e.MoveNext();
            contentType = (DERObjectIdentifier)e.Current;

            if (e.MoveNext())
            {
                content = ((DERTaggedObject)e.Current).getObject();
            }
        }
示例#18
0
        public ExtendedKeyUsage(
            ASN1Sequence seq)
        {
            this.seq = seq;

            IEnumerator e = seq.getObjects();

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

                this.usageTable.Add(o, o);
            }
        }
示例#19
0
        public AuthorityInformationAccess(
            ASN1Sequence seq)
        {
            IEnumerator e = seq.getObjects();

            if (e.MoveNext())
            {
                DERSequence vec = (DERSequence)e.Current;
                if (vec.size() != 2)
                {
                    throw new ArgumentException("wrong number of elements in inner sequence");
                }
                accessMethod   = (DERObjectIdentifier)vec.getObjectAt(0);
                accessLocation = (GeneralName)vec.getObjectAt(1);
            }
        }
示例#20
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 ASN1TaggedObject)
                {
                    ASN1TaggedObject tagged = (ASN1TaggedObject)o;

                    switch ((int)tagged.getTagNo())
                    {
                    case 0:
                        certBer      = tagged is BERTaggedObject;
                        certificates = ASN1Set.getInstance(tagged, false);
                        break;

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

                    default:
                        throw new ArgumentException("unknown tag value " + tagged.getTagNo());
                    }
                }
                else
                {
                    signerInfos = (ASN1Set)o;
                }
            }
        }
示例#21
0
        /// <summary>
        /// Return a list of certificates.
        /// </summary>
        /// <returns>X509Certificate array or null if no certificates found.</returns>
        public X509Certificate[] getCerts()
        {
            ArrayList    list = new ArrayList();
            ASN1Sequence s    = resp.getCerts();

            if (s != null)
            {
                IEnumerator e = s.getObjects();
                while (e.MoveNext())
                {
                    list.Add(e.Current);
                }

                return((X509Certificate[])list.ToArray(Type.GetType("org.bouncycastle.x509.X509Certificate")));
            }
            return(null);
        }
示例#22
0
        public PBKDF2Params(ASN1Sequence seq)
        {
            IEnumerator e = seq.getObjects();

            e.MoveNext();
            octStr = (ASN1OctetString)e.Current;
            e.MoveNext();
            iterationCount = (DERInteger)e.Current;

            if (e.MoveNext())
            {
                keyLength = (DERInteger)e.Current;
            }
            else
            {
                keyLength = null;
            }
        }
示例#23
0
        public DHParameter(
            ASN1Sequence seq)
        {
            IEnumerator e = seq.getObjects();

            e.MoveNext();
            p = (DERInteger)e.Current;
            e.MoveNext();
            g = (DERInteger)e.Current;

            if (e.MoveNext())
            {
                l = (DERInteger)e.Current;
            }
            else
            {
                l = null;
            }
        }
示例#24
0
        public NameConstraints(
            ASN1Sequence seq)
        {
            IEnumerator e = seq.getObjects();

            while (e.MoveNext())
            {
                ASN1TaggedObject o = (ASN1TaggedObject)e.Current;
                switch ((int)o.getTagNo())
                {
                case 0:
                    permitted = ASN1Sequence.getInstance(o, false);
                    break;

                case 1:
                    excluded = ASN1Sequence.getInstance(o, false);
                    break;
                }
            }
        }
示例#25
0
        public PBES2Parameters(
            ASN1Sequence obj)
        {
            IEnumerator e = obj.getObjects();

            e.MoveNext();
            ASN1Sequence funcSeq = (ASN1Sequence)e.Current;

            if (funcSeq.getObjectAt(0).Equals(PKCSObjectIdentifiers.id_PBKDF2))
            {
                func = new KeyDerivationFunc(PKCSObjectIdentifiers.id_PBKDF2, funcSeq.getObjectAt(1));
            }
            else
            {
                func = new KeyDerivationFunc(funcSeq);
            }

            e.MoveNext();
            scheme = new EncryptionScheme((ASN1Sequence)e.Current);
        }
示例#26
0
        /**
         * Constructor from ASN1Sequence
         *
         * the principal will be a list of constructed sets, each containing an (OID, String) pair.
         */
        public X509Name(
            ASN1Sequence seq)
        {
            this.seq = seq;

            IEnumerator e = seq.getObjects();

            while (e.MoveNext())
            {
                ASN1Set set = (ASN1Set)e.Current;

                for (int i = 0; i < set.size(); i++)
                {
                    ASN1Sequence s = (ASN1Sequence)set.getObjectAt(i);

                    ordering.Add(s.getObjectAt(0));
                    values.Add(((DERString)s.getObjectAt(1)).getString());
                    added.Add(i != 0);
                }
            }
        }
示例#27
0
        /**
         * Constructor from ASN1Sequence.
         *
         * the extensions are a list of constructed sequences, either with (OID, OctetString) or (OID, Boolean, OctetString)
         */
        public X509Extensions(
            ASN1Sequence seq)
        {
            IEnumerator e = seq.getObjects();

            while (e.MoveNext())
            {
                ASN1Sequence s = (ASN1Sequence)e.Current;

                if (s.size() == 3)
                {
                    extensions.Add(s.getObjectAt(0), new X509Extension((DERBoolean)s.getObjectAt(1), (ASN1OctetString)s.getObjectAt(2)));
                }
                else
                {
                    extensions.Add(s.getObjectAt(0), new X509Extension(false, (ASN1OctetString)s.getObjectAt(1)));
                }

                ordering.Add(s.getObjectAt(0));
            }
        }
示例#28
0
        public SignerInfo(
            ASN1Sequence seq)
        {
            IEnumerator e = seq.getObjects();

            e.MoveNext();
            version = (DERInteger)e.Current;
            e.MoveNext();
            issuerAndSerialNumber = IssuerAndSerialNumber.getInstance(e.Current);
            e.MoveNext();
            digAlgorithm = AlgorithmIdentifier.getInstance(e.Current);

            e.MoveNext();
            object obj = e.Current;

            if (obj is ASN1TaggedObject)
            {
                authenticatedAttributes = ASN1Set.getInstance((ASN1TaggedObject)obj, false);

                e.MoveNext();
                digEncryptionAlgorithm = AlgorithmIdentifier.getInstance(e.Current);
            }
            else
            {
                authenticatedAttributes = null;
                digEncryptionAlgorithm  = AlgorithmIdentifier.getInstance(obj);
            }

            e.MoveNext();
            encryptedDigest = DEROctetString.getInstance(e.Current);

            if (e.MoveNext())
            {
                unauthenticatedAttributes = ASN1Set.getInstance((ASN1TaggedObject)e.Current, false);
            }
            else
            {
                unauthenticatedAttributes = null;
            }
        }
示例#29
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();
                }
            }
        }