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])); }
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)); }