Inheritance: Asn1Object
Beispiel #1
0
 private DerSet GetAuthenticatedAttributeSet(byte[] secondDigest, DateTime signingTime, byte[] ocsp) {
     Asn1EncodableVector attribute = new Asn1EncodableVector();
     Asn1EncodableVector v = new Asn1EncodableVector();
     v.Add(new DerObjectIdentifier(ID_CONTENT_TYPE));
     v.Add(new DerSet(new DerObjectIdentifier(ID_PKCS7_DATA)));
     attribute.Add(new DerSequence(v));
     v = new Asn1EncodableVector();
     v.Add(new DerObjectIdentifier(ID_SIGNING_TIME));
     v.Add(new DerSet(new DerUtcTime(signingTime)));
     attribute.Add(new DerSequence(v));
     v = new Asn1EncodableVector();
     v.Add(new DerObjectIdentifier(ID_MESSAGE_DIGEST));
     v.Add(new DerSet(new DerOctetString(secondDigest)));
     attribute.Add(new DerSequence(v));
     if (ocsp != null) {
         v = new Asn1EncodableVector();
         v.Add(new DerObjectIdentifier(ID_ADBE_REVOCATION));
         DerOctetString doctet = new DerOctetString(ocsp);
         Asn1EncodableVector vo1 = new Asn1EncodableVector();
         Asn1EncodableVector v2 = new Asn1EncodableVector();
         v2.Add(OcspObjectIdentifiers.PkixOcspBasic);
         v2.Add(doctet);
         DerEnumerated den = new DerEnumerated(0);
         Asn1EncodableVector v3 = new Asn1EncodableVector();
         v3.Add(den);
         v3.Add(new DerTaggedObject(true, 0, new DerSequence(v2)));
         vo1.Add(new DerSequence(v3));
         v.Add(new DerSet(new DerSequence(new DerTaggedObject(true, 1, new DerSequence(vo1)))));
         attribute.Add(new DerSequence(v));
     }
     return new DerSet(attribute);
 }
 private static byte[] BuildOCSPResponse(byte[] BasicOCSPResponse) {
     DerOctetString doctet = new DerOctetString(BasicOCSPResponse);
     Asn1EncodableVector v2 = new Asn1EncodableVector();
     v2.Add(OcspObjectIdentifiers.PkixOcspBasic);
     v2.Add(doctet);
     DerEnumerated den = new DerEnumerated(0);
     Asn1EncodableVector v3 = new Asn1EncodableVector();
     v3.Add(den);
     v3.Add(new DerTaggedObject(true, 0, new DerSequence(v2)));            
     DerSequence seq = new DerSequence(v3);
     return seq.GetEncoded();
 }
        internal static Asn1Object CreatePrimitiveDerObject(
            int tagNo,
            DefiniteLengthInputStream defIn,
            byte[][]                    tmpBuffers)
        {
            switch (tagNo)
            {
            case Asn1Tags.Boolean:
                return(DerBoolean.FromOctetString(GetBuffer(defIn, tmpBuffers)));

            case Asn1Tags.Enumerated:
                return(DerEnumerated.FromOctetString(GetBuffer(defIn, tmpBuffers)));

            case Asn1Tags.ObjectIdentifier:
                return(DerObjectIdentifier.FromOctetString(GetBuffer(defIn, tmpBuffers)));
            }

            byte[] bytes = defIn.ToArray();

            switch (tagNo)
            {
            case Asn1Tags.BitString:
                return(DerBitString.FromAsn1Octets(bytes));

            case Asn1Tags.BmpString:
                return(new DerBmpString(bytes));

            case Asn1Tags.GeneralizedTime:
                return(new DerGeneralizedTime(bytes));

            case Asn1Tags.GeneralString:
                return(new DerGeneralString(bytes));

            case Asn1Tags.IA5String:
                return(new DerIA5String(bytes));

            case Asn1Tags.Integer:
                return(new DerInteger(bytes));

            case Asn1Tags.Null:
                return(DerNull.Instance);      // actual content is ignored (enforce 0 length?)

            case Asn1Tags.NumericString:
                return(new DerNumericString(bytes));

            case Asn1Tags.OctetString:
                return(new DerOctetString(bytes));

            case Asn1Tags.PrintableString:
                return(new DerPrintableString(bytes));

            case Asn1Tags.T61String:
                return(new DerT61String(bytes));

            case Asn1Tags.UniversalString:
                return(new DerUniversalString(bytes));

            case Asn1Tags.UtcTime:
                return(new DerUtcTime(bytes));

            case Asn1Tags.Utf8String:
                return(new DerUtf8String(bytes));

            case Asn1Tags.VisibleString:
                return(new DerVisibleString(bytes));

            default:
                throw new IOException("unknown tag " + tagNo + " encountered");
            }
        }
        /**
         * This method provides that encoding and the parameters must be
         * exactly the same as in {@link #getEncodedPKCS7(byte[],Calendar)}.
         *
         * @param secondDigest the content digest
         * @param signingTime the signing time
         * @return the byte array representation of the authenticatedAttributes ready to be signed
         */
        private DerSet GetAuthenticatedAttributeSet(byte[] secondDigest, DateTime signingTime, byte[] ocsp, ICollection<byte[]> crlBytes, CryptoStandard sigtype)
        {
            Asn1EncodableVector attribute = new Asn1EncodableVector();
            Asn1EncodableVector v = new Asn1EncodableVector();
            v.Add(new DerObjectIdentifier(SecurityIDs.ID_CONTENT_TYPE));
            v.Add(new DerSet(new DerObjectIdentifier(SecurityIDs.ID_PKCS7_DATA)));
            attribute.Add(new DerSequence(v));
            v = new Asn1EncodableVector();
            v.Add(new DerObjectIdentifier(SecurityIDs.ID_SIGNING_TIME));
            v.Add(new DerSet(new DerUtcTime(signingTime)));
            attribute.Add(new DerSequence(v));
            v = new Asn1EncodableVector();
            v.Add(new DerObjectIdentifier(SecurityIDs.ID_MESSAGE_DIGEST));
            v.Add(new DerSet(new DerOctetString(secondDigest)));
            attribute.Add(new DerSequence(v));

            bool haveCrl = false;
            if (crlBytes != null) {
                foreach (byte[] bCrl in crlBytes) {
                    if (bCrl != null) {
                        haveCrl = true;
                        break;
                    }
                }
            }
            if (ocsp != null || haveCrl) {
                v = new Asn1EncodableVector();
                v.Add(new DerObjectIdentifier(SecurityIDs.ID_ADBE_REVOCATION));

                Asn1EncodableVector revocationV = new Asn1EncodableVector();

                if (haveCrl) {
                    Asn1EncodableVector v2 = new Asn1EncodableVector();
                    foreach (byte[] bCrl in crlBytes) {
                        if (bCrl == null)
                            continue;
                        Asn1InputStream t = new Asn1InputStream(bCrl);
                        v2.Add(t.ReadObject());
                    }
                    revocationV.Add(new DerTaggedObject(true, 0, new DerSequence(v2)));
                }

                if (ocsp != null) {
                    DerOctetString doctet = new DerOctetString(ocsp);
                    Asn1EncodableVector vo1 = new Asn1EncodableVector();
                    Asn1EncodableVector v2 = new Asn1EncodableVector();
                    v2.Add(OcspObjectIdentifiers.PkixOcspBasic);
                    v2.Add(doctet);
                    DerEnumerated den = new DerEnumerated(0);
                    Asn1EncodableVector v3 = new Asn1EncodableVector();
                    v3.Add(den);
                    v3.Add(new DerTaggedObject(true, 0, new DerSequence(v2)));
                    vo1.Add(new DerSequence(v3));
                    revocationV.Add(new DerTaggedObject(true, 1, new DerSequence(vo1)));
                }

                v.Add(new DerSet(new DerSequence(revocationV)));
                attribute.Add(new DerSequence(v));
            }
            if (sigtype == CryptoStandard.CADES) {
                v = new Asn1EncodableVector();
                v.Add(new DerObjectIdentifier(SecurityIDs.ID_AA_SIGNING_CERTIFICATE_V2));

                Asn1EncodableVector aaV2 = new Asn1EncodableVector();
                AlgorithmIdentifier algoId = new AlgorithmIdentifier(new DerObjectIdentifier(digestAlgorithmOid), null);
                aaV2.Add(algoId);
                byte[] dig = DigestAlgorithms.Digest(GetHashAlgorithm(), signCert.GetEncoded());
                aaV2.Add(new DerOctetString(dig));

                v.Add(new DerSet(new DerSequence(new DerSequence(new DerSequence(aaV2)))));
                attribute.Add(new DerSequence(v));
            }

            return new DerSet(attribute);
        }
Beispiel #5
0
        protected override bool Asn1Equals(Asn1Object asn1Object)
        {
            DerEnumerated derEnumerated = asn1Object as DerEnumerated;

            return(derEnumerated != null && Arrays.AreEqual(this.bytes, derEnumerated.bytes));
        }
Beispiel #6
0
		public OcspResponseStatus(DerEnumerated value)
			: base(value.Value.IntValue)
        {
        }
Beispiel #7
0
        /**
         * This method provides that encoding and the parameters must be
         * exactly the same as in {@link #getEncodedPKCS7(byte[],Calendar)}.
         * 
         * @param secondDigest the content digest
         * @return the byte array representation of the authenticatedAttributes ready to be signed
         */
        private DerSet GetAuthenticatedAttributeSet(byte[] secondDigest, byte[] ocsp, ICollection<byte[]> crlBytes, CryptoStandard sigtype) {
            Asn1EncodableVector attribute = new Asn1EncodableVector();
            Asn1EncodableVector v = new Asn1EncodableVector();
            v.Add(new DerObjectIdentifier(SecurityIDs.ID_CONTENT_TYPE));
            v.Add(new DerSet(new DerObjectIdentifier(SecurityIDs.ID_PKCS7_DATA)));
            attribute.Add(new DerSequence(v));
            v = new Asn1EncodableVector();
            v.Add(new DerObjectIdentifier(SecurityIDs.ID_MESSAGE_DIGEST));
            v.Add(new DerSet(new DerOctetString(secondDigest)));
            attribute.Add(new DerSequence(v));

            bool haveCrl = false;
            if (crlBytes != null) {
                foreach (byte[] bCrl in crlBytes) {
                    if (bCrl != null) {
                        haveCrl = true;
                        break;
                    }
                }
            }
            if (ocsp != null || haveCrl) {
                v = new Asn1EncodableVector();
                v.Add(new DerObjectIdentifier(SecurityIDs.ID_ADBE_REVOCATION));

                Asn1EncodableVector revocationV = new Asn1EncodableVector();

                if (haveCrl) {
                    Asn1EncodableVector v2 = new Asn1EncodableVector();
                    foreach (byte[] bCrl in crlBytes) {
                        if (bCrl == null)
                            continue;
                        Asn1InputStream t = new Asn1InputStream(bCrl);
                        v2.Add(t.ReadObject());
                    }
                    revocationV.Add(new DerTaggedObject(true, 0, new DerSequence(v2)));
                }

                if (ocsp != null) {
                    DerOctetString doctet = new DerOctetString(ocsp);
                    Asn1EncodableVector vo1 = new Asn1EncodableVector();
                    Asn1EncodableVector v2 = new Asn1EncodableVector();
                    v2.Add(OcspObjectIdentifiers.PkixOcspBasic);
                    v2.Add(doctet);
                    DerEnumerated den = new DerEnumerated(0);
                    Asn1EncodableVector v3 = new Asn1EncodableVector();
                    v3.Add(den);
                    v3.Add(new DerTaggedObject(true, 0, new DerSequence(v2)));
                    vo1.Add(new DerSequence(v3));
                    revocationV.Add(new DerTaggedObject(true, 1, new DerSequence(vo1)));
                }

                v.Add(new DerSet(new DerSequence(revocationV)));
                attribute.Add(new DerSequence(v));
            }
            if (sigtype == CryptoStandard.CADES) {
                v = new Asn1EncodableVector();
                v.Add(new DerObjectIdentifier(SecurityIDs.ID_AA_SIGNING_CERTIFICATE_V2));

                Asn1EncodableVector aaV2 = new Asn1EncodableVector();
                String sha256Oid = DigestAlgorithms.GetAllowedDigests(DigestAlgorithms.SHA256);

                // If we look into X.690-0207, clause 11.5, we can see that using DER all the components of a sequence having
                // default values shall not be included. According to RFC 5035, 5.4.1.1, definition of ESSCertIDv2, default
                // AlgorithmIdentifier is sha256.
                if (!sha256Oid.Equals(digestAlgorithmOid)) {
                    AlgorithmIdentifier algoId = new AlgorithmIdentifier(new DerObjectIdentifier(digestAlgorithmOid));
                    aaV2.Add(algoId);
                }

                byte[] dig = DigestAlgorithms.Digest(GetHashAlgorithm(), signCert.GetEncoded()); 
                aaV2.Add(new DerOctetString(dig));
                
                v.Add(new DerSet(new DerSequence(new DerSequence(new DerSequence(aaV2)))));
                attribute.Add(new DerSequence(v));
            }

            return new DerSet(attribute);
        }
Beispiel #8
0
        internal static Asn1Object CreatePrimitiveDerObject(int tagNo, DefiniteLengthInputStream defIn, byte[][] tmpBuffers)
        {
            if (tagNo != 1)
            {
                if (tagNo == 10)
                {
                    return(DerEnumerated.FromOctetString(GetBuffer(defIn, tmpBuffers)));
                }
                if (tagNo == 6)
                {
                    return(DerObjectIdentifier.FromOctetString(GetBuffer(defIn, tmpBuffers)));
                }
            }
            else
            {
                return(DerBoolean.FromOctetString(GetBuffer(defIn, tmpBuffers)));
            }
            byte[] str = defIn.ToArray();
            switch (tagNo)
            {
            case 0x12:
                return(new DerNumericString(str));

            case 0x13:
                return(new DerPrintableString(str));

            case 20:
                return(new DerT61String(str));

            case 0x15:
                return(new DerVideotexString(str));

            case 0x16:
                return(new DerIA5String(str));

            case 0x17:
                return(new DerUtcTime(str));

            case 0x18:
                return(new DerGeneralizedTime(str));

            case 0x19:
                return(new DerGraphicString(str));

            case 0x1a:
                return(new DerVisibleString(str));

            case 0x1b:
                return(new DerGeneralString(str));

            case 0x1c:
                return(new DerUniversalString(str));

            case 30:
                return(new DerBmpString(str));

            case 2:
                return(new DerInteger(str));

            case 3:
                return(DerBitString.FromAsn1Octets(str));

            case 4:
                return(new DerOctetString(str));

            case 5:
                return(DerNull.Instance);

            case 12:
                return(new DerUtf8String(str));
            }
            throw new IOException("unknown tag " + tagNo + " encountered");
        }
        internal static DerEnumerated FromOctetString(byte[] enc)
        {
            if (enc.Length == 0)
            {
                throw new ArgumentException("ENUMERATED has zero length", "enc");
            }

            if (enc.Length == 1)
            {
                int value = enc[0];
                if (value < cache.Length)
                {
                    DerEnumerated cached = cache[value];
                    if (cached != null)
                    {
                        return cached;
                    }

                    return cache[value] = new DerEnumerated(Arrays.Clone(enc));
                }
            }

            return new DerEnumerated(Arrays.Clone(enc));
        }
Beispiel #10
0
        internal static Asn1Object CreatePrimitiveDerObject(int tagNo, DefiniteLengthInputStream defIn, byte[][] tmpBuffers)
        {
            //IL_014a: Unknown result type (might be due to invalid IL or missing references)
            switch (tagNo)
            {
            case 1:
                return(DerBoolean.FromOctetString(GetBuffer(defIn, tmpBuffers)));

            case 10:
                return(DerEnumerated.FromOctetString(GetBuffer(defIn, tmpBuffers)));

            case 6:
                return(DerObjectIdentifier.FromOctetString(GetBuffer(defIn, tmpBuffers)));

            default:
            {
                byte[] array = defIn.ToArray();
                switch (tagNo)
                {
                case 3:
                    return(DerBitString.FromAsn1Octets(array));

                case 30:
                    return(new DerBmpString(array));

                case 24:
                    return(new DerGeneralizedTime(array));

                case 27:
                    return(new DerGeneralString(array));

                case 25:
                    return(new DerGraphicString(array));

                case 22:
                    return(new DerIA5String(array));

                case 2:
                    return(new DerInteger(array));

                case 5:
                    return(DerNull.Instance);

                case 18:
                    return(new DerNumericString(array));

                case 4:
                    return(new DerOctetString(array));

                case 19:
                    return(new DerPrintableString(array));

                case 20:
                    return(new DerT61String(array));

                case 28:
                    return(new DerUniversalString(array));

                case 23:
                    return(new DerUtcTime(array));

                case 12:
                    return(new DerUtf8String(array));

                case 21:
                    return(new DerVideotexString(array));

                case 26:
                    return(new DerVisibleString(array));

                default:
                    throw new IOException(string.Concat((object)"unknown tag ", (object)tagNo, (object)" encountered"));
                }
            }
            }
        }
Beispiel #11
0
        internal static Asn1Object CreatePrimitiveDerObject(int tagNo, DefiniteLengthInputStream defIn, byte[][] tmpBuffers)
        {
            switch (tagNo)
            {
            case 1:
                return(DerBoolean.FromOctetString(GetBuffer(defIn, tmpBuffers)));

            case 10:
                return(DerEnumerated.FromOctetString(GetBuffer(defIn, tmpBuffers)));

            case 6:
                return(DerObjectIdentifier.FromOctetString(GetBuffer(defIn, tmpBuffers)));

            default:
            {
                byte[] array = defIn.ToArray();
                switch (tagNo)
                {
                case 3:
                    return(DerBitString.FromAsn1Octets(array));

                case 30:
                    return(new DerBmpString(array));

                case 24:
                    return(new DerGeneralizedTime(array));

                case 27:
                    return(new DerGeneralString(array));

                case 22:
                    return(new DerIA5String(array));

                case 2:
                    return(new DerInteger(array));

                case 5:
                    return(DerNull.Instance);

                case 18:
                    return(new DerNumericString(array));

                case 4:
                    return(new DerOctetString(array));

                case 19:
                    return(new DerPrintableString(array));

                case 20:
                    return(new DerT61String(array));

                case 28:
                    return(new DerUniversalString(array));

                case 23:
                    return(new DerUtcTime(array));

                case 12:
                    return(new DerUtf8String(array));

                case 26:
                    return(new DerVisibleString(array));

                default:
                    throw new IOException("unknown tag " + tagNo + " encountered");
                }
            }
            }
        }