internal Asn1Object ReadTaggedObject(bool constructed, int tag)
    {
        if (!constructed)
        {
            DefiniteLengthInputStream definiteLengthInputStream = (DefiniteLengthInputStream)_in;
            return(new DerTaggedObject(explicitly: false, tag, new DerOctetString(definiteLengthInputStream.ToArray())));
        }
        Asn1EncodableVector asn1EncodableVector = ReadVector();

        if (_in is IndefiniteLengthInputStream)
        {
            if (asn1EncodableVector.Count != 1)
            {
                return(new BerTaggedObject(explicitly: false, tag, BerSequence.FromVector(asn1EncodableVector)));
            }
            return(new BerTaggedObject(explicitly: true, tag, asn1EncodableVector[0]));
        }
        if (asn1EncodableVector.Count != 1)
        {
            return(new DerTaggedObject(explicitly: false, tag, DerSequence.FromVector(asn1EncodableVector)));
        }
        return(new DerTaggedObject(explicitly: true, tag, asn1EncodableVector[0]));
    }
예제 #2
0
        private static AttributeTable GenerateSignedAttributesTable(byte[] codeDirectoryBytes, byte[] alternativeCodeDirectory1Bytes)
        {
            DerObjectIdentifier hashesAttributeIdentifier = new DerObjectIdentifier("1.2.840.113635.100.9.2");
            DerObjectIdentifier sha256Identifier          = new DerObjectIdentifier("2.16.840.1.101.3.4.2.1");
            DerObjectIdentifier sha1Identifier            = new DerObjectIdentifier("1.3.14.3.2.26");
            DerObjectIdentifier hashesPlistIdentifier     = new DerObjectIdentifier("1.2.840.113635.100.9.1");

            byte[] codeDirectory1Sha256Hash = new SHA256Managed().ComputeHash(alternativeCodeDirectory1Bytes);
            byte[] codeDirectorySha1Hash    = new SHA1Managed().ComputeHash(codeDirectoryBytes);

            BerSequence sha256Sequence       = new BerSequence(sha256Identifier, new DerOctetString(codeDirectory1Sha256Hash));
            BerSequence sha1Sequence         = new BerSequence(sha1Identifier, new DerOctetString(codeDirectorySha1Hash));
            BerSet      codeDirectoryHashSet = new BerSet(new Asn1EncodableVector(sha256Sequence, sha1Sequence));

            byte[] hashesPListBytes = GenerateHashesPList(codeDirectoryBytes, alternativeCodeDirectory1Bytes);
            DerSet hashesPlistSet   = new DerSet(new DerOctetString(hashesPListBytes));

            Asn1EncodableVector signedAttributes = new Asn1EncodableVector();

            signedAttributes.Add(new Org.BouncyCastle.Asn1.Cms.Attribute(hashesAttributeIdentifier, codeDirectoryHashSet));
            signedAttributes.Add(new Org.BouncyCastle.Asn1.Cms.Attribute(hashesPlistIdentifier, hashesPlistSet));
            return(new AttributeTable(signedAttributes));
        }