public static SignedData GetInstance(object obj) { if (obj == null) { return(null); } SignedData signedData = obj as SignedData; if (signedData != null) { return(signedData); } return(new SignedData(Asn1Sequence.GetInstance(obj))); }
public static SignedData GetInstance(object obj) { if (obj == null) { return(null); } SignedData existing = obj as SignedData; if (existing != null) { return(existing); } return(new SignedData(Asn1Sequence.GetInstance(obj))); }
/// <summary> /// Write myself to the given stream /// </summary> public void WriteTo(Stream stream, out string md5FingerPrint, out string sha1FingerPrint) { X509Certificate[] cert; AsymmetricKeyEntry privateKey; LoadPfx(out cert, out privateKey); var certsVector = new Asn1EncodableVector(); md5FingerPrint = null; sha1FingerPrint = null; foreach (var c in cert) { var certStream = new MemoryStream(c.GetEncoded()); var certStruct = X509CertificateStructure.GetInstance(new Asn1InputStream(certStream).ReadObject()); certsVector.Add(certStruct); if (md5FingerPrint == null) { var certData = certStream.ToArray(); md5FingerPrint = CreateFingerprint(new MD5Digest(), certData); } if (sha1FingerPrint == null) { var certData = certStream.ToArray(); sha1FingerPrint = CreateFingerprint(new Sha1Digest(), certData); } } var encryptedSignature = GetSignature(signature, privateKey.Key); var signerInfo = new SignerInfo( new DerInteger(1), new IssuerAndSerialNumber(cert[0].IssuerDN, cert[0].SerialNumber), new AlgorithmIdentifier(Oids.SHA1, DerNull.Instance), null, new AlgorithmIdentifier(Oids.RSA, DerNull.Instance), new DerOctetString(encryptedSignature), null); var pkcs7 = new SignedData( new DerInteger(1), new DerSet(new AlgorithmIdentifier(Oids.SHA1, DerNull.Instance)), new ContentInfo(new DerObjectIdentifier(Oids.data), null), new DerSet(certsVector), null, new DerSet(signerInfo)); //var signedData = new ContentInfo(new DERObjectIdentifier(Oids.signedData), pkcs7); var v = new Asn1EncodableVector(); v.Add(new DerObjectIdentifier(Oids.signedData)); v.Add(new DerTaggedObject(0, pkcs7)); var signedData = new DerSequence(v); // Save var data = signedData.GetEncoded(); stream.Write(data, 0, data.Length); }