コード例 #1
0
        public OriginatorInfo(
            ASN1Sequence seq)
        {
            switch (seq.size())
            {
            case 0:     // empty
                break;

            case 1:
                ASN1TaggedObject o = (ASN1TaggedObject)seq.getObjectAt(0);
                switch ((int)o.getTagNo())
                {
                case 0:
                    certs = ASN1Set.getInstance(o, false);
                    break;

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

                default:
                    throw new ArgumentException("Bad tag in OriginatorInfo: " + o.getTagNo());
                }
                break;

            case 2:
                certs = ASN1Set.getInstance((ASN1TaggedObject)seq.getObjectAt(0), false);
                crls  = ASN1Set.getInstance((ASN1TaggedObject)seq.getObjectAt(1), false);
                break;

            default:
                throw new ArgumentException("OriginatorInfo too big");
            }
        }
コード例 #2
0
        public DistributionPointName(
            ASN1TaggedObject obj)
        {
            this.type = obj.getTagNo();

            if (type == FULL_NAME)
            {
                this.name = GeneralNames.getInstance(obj, false);
            }
            else
            {
                this.name = ASN1Set.getInstance(obj, false);
            }
        }
コード例 #3
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;
                }
            }
        }
コード例 #4
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;
            }
        }
コード例 #5
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.");
            }
        }
コード例 #6
0
        public EnvelopedData(
            ASN1Sequence seq)
        {
            int index = 0;

            version = (DERInteger)seq.getObjectAt(index++);

            Object tmp = seq.getObjectAt(index++);

            if (tmp is ASN1TaggedObject)
            {
                originatorInfo = OriginatorInfo.getInstance((ASN1TaggedObject)tmp, false);
                tmp            = seq.getObjectAt(index++);
            }

            recipientInfos = ASN1Set.getInstance(tmp);

            encryptedContentInfo = EncryptedContentInfo.getInstance(seq.getObjectAt(index++));

            if (seq.size() > index)
            {
                unprotectedAttrs = ASN1Set.getInstance((ASN1TaggedObject)seq.getObjectAt(index), false);
            }
        }