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