Last active
February 24, 2016 22:03
-
-
Save jonny-novikov/2de51707112c407b19a2 to your computer and use it in GitHub Desktop.
Verify and decrypt p7m-mime
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Hi! | |
I have a data Content-Type: application/pkcs7-mime | |
Here is openssl command verifies and print the decoded content in console: | |
openssl smime -verify -in request.p7m -inform PEM -nointern -certfile yamoney.pem -CAfile yamoney.pem | |
It works fine. But I want to use MimeKit and ApplicationPkcs7Mime to simplify the usage in my application pipeline. | |
Parsing yamoney.pem I have a X509CertificateStore. | |
using (var fs = File.OpenRead(@"request.p7m")) | |
{ | |
var mime = new ApplicationPkcs7Mime(SecureMimeType.SignedData, fs); // This throws... | |
... | |
There is a request file in a git (request.p7m). | |
And pem - it is not secret. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.IO; | |
using System.Text; | |
using Org.BouncyCastle.Asn1.Cms; | |
using Org.BouncyCastle.OpenSsl; | |
using Org.BouncyCastle.X509; | |
using MimeKit; | |
using MimeKit.IO; | |
using MimeKit.Cryptography; | |
namespace P7mVerify | |
{ | |
class Program | |
{ | |
public const string RequestPkcs7File = @"request.p7m"; | |
public const string CertsFile = @"yamoney.pem"; | |
private byte[] GetRawRequest() | |
{ | |
using (var reader = File.OpenText(RequestPkcs7File)) | |
{ | |
var pem = new PemReader(reader); | |
var contentInfo = (ContentInfo) pem.ReadObject(); | |
return contentInfo.GetEncoded(); | |
} | |
} | |
public static void Main () | |
{ | |
using (var pem = File.OpenRead(CertsFile)) | |
{ | |
using (var ctx = PemSecureMimeContext.Create(pem)) | |
{ | |
Stream stream = null; | |
try | |
{ | |
using (var content = new MemoryStream(GetRawRequest(), false)) | |
{ | |
var signatures = ctx.Verify(content, out stream); | |
foreach (var signature in signatures) | |
{ | |
try | |
{ | |
if (!signature.Verify()) | |
{ | |
Console.WriteLine("Bad signature from {0}", | |
signature.SignerCertificate.Email); | |
} | |
else | |
{ | |
Console.WriteLine("Verified. Sender: {0}", signature.SignerCertificate.Email); | |
} | |
} | |
catch (DigitalSignatureVerifyException ex) | |
{ | |
Console.WriteLine("Failed to verify signature: {0}", ex); | |
} | |
} | |
XDocument xResponse = XDocument.Load(stream); | |
// show decoded xml | |
Console.WriteLine(xResponse.ToString(SaveOptions.None)); | |
} | |
} | |
catch (Exception e) | |
{ | |
// something goes wrong | |
} | |
finally | |
{ | |
stream?.Dispose(); | |
} | |
} | |
} | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
using System.IO; | |
using MimeKit.Cryptography; | |
using Org.BouncyCastle.Cms; | |
using Org.BouncyCastle.X509; | |
namespace P7mVerify | |
{ | |
public class PemSecureMimeContext : TemporarySecureMimeContext | |
{ | |
public static PemSecureMimeContext Create(Stream s) | |
{ | |
var ctx = new PemSecureMimeContext(); | |
ctx.ImportUnique(s); | |
return ctx; | |
} | |
readonly HashSet<X509Certificate> unique = new HashSet<X509Certificate>(); | |
public DigitalSignatureCollection Verify(Stream signedData, out Stream stream) | |
{ | |
if (signedData == null) | |
throw new ArgumentNullException("signedData"); | |
var parser = new CmsSignedDataParser(signedData); | |
var signed = parser.GetSignedContent(); | |
stream = new MemoryStream(); | |
signed.ContentStream.CopyTo(stream, 4096); | |
stream.Position = 0; | |
return GetDigitalSignatures(parser); | |
} | |
/// <summary> | |
/// Imports the certificate(s) from the specified stream. | |
/// </summary> | |
/// <remarks> | |
/// Imports the certificate(s) from the specified stream. | |
/// </remarks> | |
/// <param name="stream">The stream to import.</param> | |
/// <exception cref="System.ArgumentNullException"> | |
/// <paramref name="stream"/> is <c>null</c>. | |
/// </exception> | |
/// <exception cref="System.IO.IOException"> | |
/// An error occurred reading the stream. | |
/// </exception> | |
public void ImportUnique(Stream stream) | |
{ | |
if (stream == null) | |
throw new ArgumentNullException("stream"); | |
var parser = new X509CertificateParser(); | |
foreach (X509Certificate certificate in parser.ReadCertificates(stream)) | |
{ | |
if (unique.Add(certificate)) | |
Import(certificate); | |
} | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
-----BEGIN PKCS7----- | |
MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAaCA | |
JIAEggPoPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+PHBh | |
eW1lbnRBdmlzb1JlcXVlc3QgcGF5bWVudERhdGV0aW1lPSIyMDE1LTAzLTA1VDE1 | |
OjI0OjQ1LjQ1OSswMzowMCIgb3JkZXJTdW1CYW5rUGF5Y2FzaD0iMTAwMyIgc2hv | |
cFN1bUJhbmtQYXljYXNoPSIxMDAzIiByZXF1ZXN0RGF0ZXRpbWU9IjIwMTUtMDMt | |
MDVUMTc6NDA6NTcuODI4KzAzOjAwIiBpbnZvaWNlSWQ9IjIwMDAwMDA0MTk4NjUi | |
IHBheW1lbnRUeXBlPSJQQyIgY3VzdG9tZXJOdW1iZXI9ImJhaWJpayIgc2hvcFN1 | |
bUFtb3VudD0iOTkuMDAiIHNob3BTdW1DdXJyZW5jeVBheWNhc2g9IjEwNjQzIiBv | |
cmRlckNyZWF0ZWREYXRldGltZT0iMjAxNS0wMy0wNVQxNToyNDoyOS4wMTMrMDM6 | |
MDAiIG9yZGVyU3VtQW1vdW50PSIxMDAuMDAiIHBheW1lbnRQYXllckNvZGU9IjQx | |
MDAzMjIzNDQ3NzkiIHJlYmlsbGluZ09uPSJmYWxzZSIgc2hvcElkPSIxNTEiIHNo | |
b3BBcnRpY2xlSWQ9IjE1MSIgb3JkZXJTdW1DdXJyZW5jeVBheWNhc2g9IjEwNjQz | |
Ij48cGFyYW0ga2V5PSJ0YXJnZXRjdXJyZW5jeSIgdmFsPSI2NDMiPjwvcGFyYW0+ | |
PHBhcmFtIGtleT0id2JwX1Nob3BLZXlJRCIgdmFsPSIyMzUwNDg0MTQ3Ij48L3Bh | |
cmFtPjxwYXJhbSBrZXk9ImNwc190aGVtZSIgdmFsPSJkZWZhdWx0Ij48L3BhcmFt | |
PjxwYXJhbSBrZXk9ImlzT1VUc2hvcCIgdmFsPSJ0cnVlIj48L3BhcmFtPjxwYXJh | |
bSBrZXk9IndicF9zaG9wZXJyb3JpbmZvIiB2YWw9IlNob3AgZXJyb3IiPjwvcGFy | |
YW0+PHBhcmFtIGtleT0ibWVyY2hhbnRfb3JkZXJfaWQiIHZhbD0iYmFpYmlrXzA1 | |
MDMxNTE1MjQyN18xNTFfMTUxIj48L3BhcmFtPjxwYXJhbSBrZXk9InN1bUN1cnJl | |
bmN5IiB2YWw9IjEwNjQzIj48L3BhcmFtPjxwYXJhbSBrZXk9IndicF9WZXJzaW9u | |
IiB2YWw9IjIiPjwvcGFyYW0+PHBhcmFtIGtleT0iY3BzX3VzZXJfY291bnRyeV9j | |
b2RlIiB2YWw9IlJVIj48L3BhcmFtPjxwYXJhbSBrZXk9IndicF9TaG9wRW5jcgSC | |
A+h5cHRpb25LZXkiIHZhbD0iaEFBQUVpY0JBSS9nV1o3blBtdlBDRWY2Q3lOWnJE | |
VC9NNWRxaHhGMElRZUIrcHY3dmV0VTFhMzVpckRSdVNoZ3dzeVVqeHNVeEhpd0Zn | |
b09PNTFRcWVkblZyZWVXWk8xNkFQc0haaFdGUUd3NGNaaFN6T2xDNTQ3MFBnR1NH | |
dC9NWlRxeGV0dVNZZTlaYm5hT01YcXkzZ3JFa3pCL1oxaWltNDBLSHRUeWV3aUlp | |
WEpoQUtKIj48L3BhcmFtPjxwYXJhbSBrZXk9IkVycm9yVGVtcGxhdGUiIHZhbD0i | |
eW0yeG1sZXJyb3IiPjwvcGFyYW0+PHBhcmFtIGtleT0iY3BzX3VzZXJfaXAiIHZh | |
bD0iNzcuNzUuMTUzLjIyIj48L3BhcmFtPjxwYXJhbSBrZXk9InN1Y2Nlc3NVUkwi | |
IHZhbD0iIj48L3BhcmFtPjxwYXJhbSBrZXk9ImNwc19jaGFuZ2VTdW0iIHZhbD0i | |
ZmFsc2UiPjwvcGFyYW0+PHBhcmFtIGtleT0icGF5bWVudC1uYW1lIiB2YWw9ItCR | |
0LDQudCx0LjQui3QqNC+0L8iPjwvcGFyYW0+PHBhcmFtIGtleT0iY3BzX3JlYmls | |
bGluZ0FsbG93ZWQiIHZhbD0iZmFsc2UiPjwvcGFyYW0+PHBhcmFtIGtleT0id2Jw | |
X1Nob3BBZGRyZXNzIiB2YWw9Ijc3Ljc1LjE1Ny4xNjc6OTEyOCI+PC9wYXJhbT48 | |
cGFyYW0ga2V5PSJ3YnBfQ29ycmVzcG9uZGVudElEIiB2YWw9IkY1NUVGREUyRDE2 | |
QkEwNDU2QjJEREJFNDY4QTZDMEY4QjFEMEQxMDUiPjwvcGFyYW0+PHBhcmFtIGtl | |
eT0id2JwX1Nob3BBZGRpdGlvbmFsQWRkcmVzcyIgdmFsPSI3Ny43NS4xNTcuMTY3 | |
OjkxMzgiPjwvcGFyYW0+PHBhcmFtIGtleT0id2JwX0luYWN0aXZpdHlQZXJpb2Qi | |
IHZhbD0iMiI+PC9wYXJhbT48cGFyYW0ga2V5PSJpc1ZpYVdlYiIgdmFsPSJ0cnVl | |
Ij48L3BhcmFtPjxwYXJhbSBrZXk9ImNwc19yZWdpb25faWQiIHZhbD0iMiI+PC9w | |
YXJhbT48cGFyYW0ga2V5PSJTdWNjZXNzVGVtcGxhdGUiIHZhbD0ieW0yeG1sc3Vj | |
Y2VzcyI+PC9wYXJhbT48cGFyYW0ga2V5PSJXQVNob3BJRCIgdmFsPSIxOTM2ODAz | |
NjYwIj48L3BhcmFtPjxwYXJhbSBrZXk9ImNwcy1zb3VyY2UiIHZhbD0iBIHcZGVm | |
YXVsdCI+PC9wYXJhbT48cGFyYW0ga2V5PSJuc3RfdW5pbGFiZWwiIHZhbD0iMWM4 | |
YTVlYmItMDAwMS01MDAwLTgwMDAtMDAwMDAwMDM3YzRiIj48L3BhcmFtPjxwYXJh | |
bSBrZXk9IndicF9tZXNzYWdldHlwZSIgdmFsPSJNb25leUludml0YXRpb25SZXF1 | |
ZXN0Ij48L3BhcmFtPjxwYXJhbSBrZXk9InNjaWQiIHZhbD0iNTk4MTYiPjwvcGFy | |
YW0+PC9wYXltZW50QXZpc29SZXF1ZXN0PgAAAAAAAKCAMIIE2TCCBEKgAwIBAgIK | |
eSU5HgACAAA1mzANBgkqhkiG9w0BAQUFADBJMQswCQYDVQQGEwJSVTEYMBYGA1UE | |
ChMPUFMgWWFuZGV4Lk1vbmV5MSAwHgYDVQQDExdZYW5kZXggTW9uZXkgSXNzdWlu | |
ZyBDQTAeFw0xNDA0MjkwODA3MThaFw0xNjA0MjkwODE3MThaMIGpMQswCQYDVQQG | |
EwJSVTEPMA0GA1UECBMGUnVzc2lhMRkwFwYDVQQHExBTYWludC1QZXRlcnNidXJn | |
MRkwFwYDVQQKExBOS08gWWFuZGV4Lk1vbmV5MQswCQYDVQQLEwJJVDEWMBQGA1UE | |
AxMNUGF5bWVudENlbnRlcjEuMCwGCSqGSIb3DQEJARYfc3lzdGVtYWRtaW5pc3Ry | |
YXRvcnNAeWFtb25leS5ydTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB | |
AMuptoMIfqHmau5pMsPLU+wJxH+JX0NQhbQ/1szLrJYqYHZrlqntyeyQVfVhkYmj | |
de80/MN1qnDcCPlDvzODiFgysnP7k5Td+MHsqERxwPqMxTVbeZ8eM3C8LUzl4+om | |
GvNtrxWr7EBEiFTrUDXH0TaNyAlHuDHNm94dcBpyVKCJjFuTJZOKJiEY0PD11/fq | |
HEoIKrrLB0CbLdRJMkHdjK48iMLlwk984/nOeqwlqJrA1CnaUvgSmVSDL4JSDwRx | |
KiWg5arvYXvCNvSLaMdSCdKqYO45SrF5GAoBGlaew+HihD6GJ19r72ZNAybLfUjH | |
baUUSoZXO10FuavJ+Nl/828CAwEAAaOCAeEwggHdMB0GA1UdDgQWBBRGlToBHhGL | |
aCvdwoYSXkRTAYKhOjAfBgNVHSMEGDAWgBTmLOeIVWnILDo9dmAW41baXjKS3DA1 | |
BgNVHR8ELjAsMCqgKKAmhiRodHRwOi8vY3Jscy55YW1vbmV5LnJ1L2lzc3Vpbmdj | |
YS5jcmwwgc4GCCsGAQUFBwEBBIHBMIG+MIG7BggrBgEFBQcwAoaBrmxkYXA6Ly8v | |
Q049WWFuZGV4JTIwTW9uZXklMjBJc3N1aW5nJTIwQ0EsQ049QUlBLENOPVB1Ymxp | |
YyUyMEtleSUyMFNlcnZpY2VzLENOPVNlcnZpY2VzLENOPUNvbmZpZ3VyYXRpb24s | |
REM9eWFtb25leSxEQz1ydT9jQUNlcnRpZmljYXRlP2Jhc2U/b2JqZWN0Q2xhc3M9 | |
Y2VydGlmaWNhdGlvbkF1dGhvcml0eTALBgNVHQ8EBAMCB4AwPgYJKwYBBAGCNxUH | |
BDEwLwYnKwYBBAGCNxUIhNPQNYT06hSDyY0lh++3M4S2zAGBZ4eBn3mBhPNdAgFk | |
AgEEMB0GA1UdJQQWMBQGCCsGAQUFBwMEBggrBgEFBQcDAjAnBgkrBgEEAYI3FQoE | |
GjAYMAoGCCsGAQUFBwMEMAoGCCsGAQUFBwMCMA0GCSqGSIb3DQEBBQUAA4GBAF7A | |
wYyU5FWVYqSVHIqMZ5gzdtQeAy4tPr2lu6fnfq3RvOH6rbU0SAHW+Iy+4GBaeVXl | |
3549BxszJzZnXClDLNYpjXIIcvLRaZKYlTw/NrebqVDV5SCIxrhP9W/oRi93Rbq+ | |
TGjVKfyV5jrf9zJ3lbWzqbwv9FrC/L0+GxYy+iW3AAAxggHdMIIB2QIBATBXMEkx | |
CzAJBgNVBAYTAlJVMRgwFgYDVQQKEw9QUyBZYW5kZXguTW9uZXkxIDAeBgNVBAMT | |
F1lhbmRleCBNb25leSBJc3N1aW5nIENBAgp5JTkeAAIAADWbMAkGBSsOAwIaBQCg | |
XTAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0xNTAz | |
MDUxNDQwNTdaMCMGCSqGSIb3DQEJBDEWBBSd0J93n6UUuPYBcLAchb8gQ6S33DAN | |
BgkqhkiG9w0BAQEFAASCAQCTqBnmim1YnBOoiCq+DgQAoz3T6qpgahF+jhlh2us7 | |
mlW7PhcUSHr0Tq5dU3AquGh9AV0vDEChrjbRHNJgXoFETkjOW5u2sf8U9oEjI9gf | |
GsnMNDAmeow01LJrtJzBX/6QEV2emRJ+vuEFnGZDnB1QmVkxFbylOkaoGoVUqsxw | |
5NCWG7OYsyacbAVZT69M7rOiFceQpw486wLVzzdRQMFJD0RFNEdJwQDMhywa12zJ | |
LQnavA38TVetaOJ7A8IIoYSzDjmkwyDcA4FRRpTZ/MnjusHeuqIO5sCBx0ZEnHVv | |
w3Hr/6IzcWSz4FvexFHHGN2IVi47UZ4KbZ1/haWs1j+GAAAAAAAA | |
-----END PKCS7----- |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
subject=/C=RU/L=Saint-Petersburg/O=Yandex.Money/OU=IT/CN=PaymentCenter/emailAddress=systemadministrators@yamoney.ru | |
issuer=/C=RU/O=PS Yandex.Money/CN=Yandex Money Issuing CA | |
-----BEGIN CERTIFICATE----- | |
MIIE2TCCBEKgAwIBAgIKeSU5HgACAAA1mzANBgkqhkiG9w0BAQUFADBJMQswCQYD | |
VQQGEwJSVTEYMBYGA1UEChMPUFMgWWFuZGV4Lk1vbmV5MSAwHgYDVQQDExdZYW5k | |
ZXggTW9uZXkgSXNzdWluZyBDQTAeFw0xNDA0MjkwODA3MThaFw0xNjA0MjkwODE3 | |
MThaMIGpMQswCQYDVQQGEwJSVTEPMA0GA1UECBMGUnVzc2lhMRkwFwYDVQQHExBT | |
YWludC1QZXRlcnNidXJnMRkwFwYDVQQKExBOS08gWWFuZGV4Lk1vbmV5MQswCQYD | |
VQQLEwJJVDEWMBQGA1UEAxMNUGF5bWVudENlbnRlcjEuMCwGCSqGSIb3DQEJARYf | |
c3lzdGVtYWRtaW5pc3RyYXRvcnNAeWFtb25leS5ydTCCASIwDQYJKoZIhvcNAQEB | |
BQADggEPADCCAQoCggEBAMuptoMIfqHmau5pMsPLU+wJxH+JX0NQhbQ/1szLrJYq | |
YHZrlqntyeyQVfVhkYmjde80/MN1qnDcCPlDvzODiFgysnP7k5Td+MHsqERxwPqM | |
xTVbeZ8eM3C8LUzl4+omGvNtrxWr7EBEiFTrUDXH0TaNyAlHuDHNm94dcBpyVKCJ | |
jFuTJZOKJiEY0PD11/fqHEoIKrrLB0CbLdRJMkHdjK48iMLlwk984/nOeqwlqJrA | |
1CnaUvgSmVSDL4JSDwRxKiWg5arvYXvCNvSLaMdSCdKqYO45SrF5GAoBGlaew+Hi | |
hD6GJ19r72ZNAybLfUjHbaUUSoZXO10FuavJ+Nl/828CAwEAAaOCAeEwggHdMB0G | |
A1UdDgQWBBRGlToBHhGLaCvdwoYSXkRTAYKhOjAfBgNVHSMEGDAWgBTmLOeIVWnI | |
LDo9dmAW41baXjKS3DA1BgNVHR8ELjAsMCqgKKAmhiRodHRwOi8vY3Jscy55YW1v | |
bmV5LnJ1L2lzc3VpbmdjYS5jcmwwgc4GCCsGAQUFBwEBBIHBMIG+MIG7BggrBgEF | |
BQcwAoaBrmxkYXA6Ly8vQ049WWFuZGV4JTIwTW9uZXklMjBJc3N1aW5nJTIwQ0Es | |
Q049QUlBLENOPVB1YmxpYyUyMEtleSUyMFNlcnZpY2VzLENOPVNlcnZpY2VzLENO | |
PUNvbmZpZ3VyYXRpb24sREM9eWFtb25leSxEQz1ydT9jQUNlcnRpZmljYXRlP2Jh | |
c2U/b2JqZWN0Q2xhc3M9Y2VydGlmaWNhdGlvbkF1dGhvcml0eTALBgNVHQ8EBAMC | |
B4AwPgYJKwYBBAGCNxUHBDEwLwYnKwYBBAGCNxUIhNPQNYT06hSDyY0lh++3M4S2 | |
zAGBZ4eBn3mBhPNdAgFkAgEEMB0GA1UdJQQWMBQGCCsGAQUFBwMEBggrBgEFBQcD | |
AjAnBgkrBgEEAYI3FQoEGjAYMAoGCCsGAQUFBwMEMAoGCCsGAQUFBwMCMA0GCSqG | |
SIb3DQEBBQUAA4GBAF7AwYyU5FWVYqSVHIqMZ5gzdtQeAy4tPr2lu6fnfq3RvOH6 | |
rbU0SAHW+Iy+4GBaeVXl3549BxszJzZnXClDLNYpjXIIcvLRaZKYlTw/NrebqVDV | |
5SCIxrhP9W/oRi93Rbq+TGjVKfyV5jrf9zJ3lbWzqbwv9FrC/L0+GxYy+iW3 | |
-----END CERTIFICATE----- | |
subject=/C=RU/O=PS Yandex.Money/CN=Yandex Money Issuing CA | |
issuer=/C=RU/O=PS Yandex.Money/CN=Yandex Money Root CA | |
-----BEGIN CERTIFICATE----- | |
MIIDwDCCAqigAwIBAgIBBzANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJSVTEY | |
MBYGA1UEChMPUFMgWWFuZGV4Lk1vbmV5MR0wGwYDVQQDExRZYW5kZXggTW9uZXkg | |
Um9vdCBDQTAeFw0xMzAxMTgxMzUyMTJaFw0xODAxMTcxMzUyMTJaMEkxCzAJBgNV | |
BAYTAlJVMRgwFgYDVQQKEw9QUyBZYW5kZXguTW9uZXkxIDAeBgNVBAMTF1lhbmRl | |
eCBNb25leSBJc3N1aW5nIENBMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDN | |
GJm1Clk6TQA0nd+FJMYaQLj58puo7dzaOSjkBex2FiQfD/DjJ3c+rBArKQO2xdEB | |
tnbYXsfPIx5UeqEIWAXeIV03aP5PFJgQvSCOUZc3NJ1peVc4pfIhjQ3vuULVpmUD | |
zLaSXkbquGCPGORnlIBcE9YFCfxWe5X/uIhkE5D8AQIDAQABo4IBODCCATQwHQYD | |
VR0OBBYEFOYs54hVacgsOj12YBbjVtpeMpLcMHYGA1UdIwRvMG2AFCUMTTkJAIhu | |
s3EnCL6nJyB6oy0QoUqkSDBGMQswCQYDVQQGEwJSVTEYMBYGA1UEChMPUFMgWWFu | |
ZGV4Lk1vbmV5MR0wGwYDVQQDExRZYW5kZXggTW9uZXkgUm9vdCBDQYIJAJjDBQmy | |
njdSMAwGA1UdEwQFMAMBAf8wLgYDVR0fBCcwJTAjoCGgH4YdaHR0cDovL2NybHMu | |
eWFtb25leS5ydS95bS5jcmwwCwYDVR0PBAQDAgEGMBAGCSsGAQQBgjcVAQQDAgEC | |
MCMGCSsGAQQBgjcVAgQWBBSef2laqr3b8E7GfhqWqtJanSJtrTAZBgkrBgEEAYI3 | |
FAIEDB4KAFMAdQBiAEMAQTANBgkqhkiG9w0BAQUFAAOCAQEAjq8fKq/JMni/Yozn | |
x/JE3Q1jcYqxkew6maKCayyJAYTDbBEz6nQFOKCj0Il5Bk6RDyt2lOAkKYzumuZ7 | |
YNF7VKf2aGoSLr7aC6ODaSdgI2snYhyOZv3625Y1L89evxQLK/wJdEd2Z0/IsUid | |
VOLg3Ms4eOD8etMc+lLNW7VW2v4IqPC9POak4yMGjed33ee6XU+QDI43snse+N58 | |
qYQWXH4UK8T7yYPVgF5yXBE4HBNaGQ+qEJ61oC4QAbq3mgp8MoYB1J9yjnD5g1cT | |
q/104c9iRSYRmVtx0ifdJN2zDirwPLiRNzN6aNZNyI7VYeiabnW2wXf6u2/KwEpX | |
3Mce+g== | |
-----END CERTIFICATE----- | |
subject=/C=RU/O=PS Yandex.Money/CN=Yandex Money Root CA | |
issuer=/C=RU/O=PS Yandex.Money/CN=Yandex Money Root CA | |
-----BEGIN CERTIFICATE----- | |
MIID9TCCAt2gAwIBAgIJAJjDBQmynjdSMA0GCSqGSIb3DQEBBQUAMEYxCzAJBgNV | |
BAYTAlJVMRgwFgYDVQQKEw9QUyBZYW5kZXguTW9uZXkxHTAbBgNVBAMTFFlhbmRl | |
eCBNb25leSBSb290IENBMB4XDTEzMDExODEzNDIxNloXDTIzMDExNjEzNDIxNlow | |
RjELMAkGA1UEBhMCUlUxGDAWBgNVBAoTD1BTIFlhbmRleC5Nb25leTEdMBsGA1UE | |
AxMUWWFuZGV4IE1vbmV5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw | |
ggEKAoIBAQDDFBsDMxIC5BdNHQ+VxFjF3P6fVzDwF/4W6qCaXSc29PF5msWAqZoU | |
/irwqaY5Hnzp2/tShQVxac2Gel59r9fN1tiuR1fT1y709vYg2sj/4Bwc/n9HJ3NS | |
6f5FEEJu62PawhD1XUbbXDAvFeQA5vAHmxKggE2WGRkZZCcoGcaEipvlL2oAE4HV | |
jW+nSn8RQvkB8hXxMXZKeKNRzHCK52Icelc1Oip0f4jPetbtduXUowAIJdyWwP3y | |
JKwzjtsSsBic4BWzTA0fifQN3Vxy+YPfF8jw8xkBdgEPTmWbJ83G2Jc98mYEji9b | |
83YPAn1OgQXn0wYHTyfzO7EhTj7voP5zAgMBAAGjgeUwgeIwHQYDVR0OBBYEFCUM | |
TTkJAIhus3EnCL6nJyB6oy0QMHYGA1UdIwRvMG2AFCUMTTkJAIhus3EnCL6nJyB6 | |
oy0QoUqkSDBGMQswCQYDVQQGEwJSVTEYMBYGA1UEChMPUFMgWWFuZGV4Lk1vbmV5 | |
MR0wGwYDVQQDExRZYW5kZXggTW9uZXkgUm9vdCBDQYIJAJjDBQmynjdSMAwGA1Ud | |
EwQFMAMBAf8wLgYDVR0fBCcwJTAjoCGgH4YdaHR0cDovL2NybHMueWFtb25leS5y | |
dS95bS5jcmwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAJcYTLHZgw | |
rsm1htBDq2YZxAqIN+dvQU9lY/tuQ/ggCL9JHkSyUbFtk8DsRWgYl9w0Y8f9HKYh | |
/nF6nYsfhSStIRMdyOMjfLGJp7esIqzyj0Sx88y8tnHSWs/Sls0lJIl4IS7YfHsZ | |
OZggRg/TGItwOtGcq6q7u19KreueVpfqAHwZygtwqf+Ic419TBpeOc6CuyFcwd2a | |
C4DhQKui58+sODqucGXkzSOeG97azuTFQ2Hnunv15+Jr/OwHQqKzieUf9+oBq5ZW | |
iQ3NHYUvgldVGW2fByvlgjG0tw6NrNwJEK0TEevgA8uNXE9FjaoqC/0+vsoQ4DMA | |
xsN5poPvsYTC | |
-----END CERTIFICATE----- |
Brilliant! I modified PemSecureMimeContext with static Create function and ability to avoid duplicate X509 certs and added simple program for this stuff P7mVerifyXml.cs which uses this crypto context and shows verification message and output request XML.
But, yes, I made method GetDigitalSignatures protected to compile this.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
There are a few problems:
ApplicationPkcs7Mime
.ctor expects a base64 decoded stream.request.p7m
file is not actually in a valid S/MIME signed-data format. It's in a PEM format.Import()
streams in PEM format.So, to do what you want to do, it would have to be implemented something like this:
Unfortunately, this does not work because the signed content is not in MIME format and so the MimeParser fails to parse the extracted content. It looks like the content is in XML format.
If you don't care about the digital signatures and you just want the extracted content, you could replace
signatures = ctx.Verify (content, out entity);
with this:Now you can read the cleartext data from
signed.ContentStream
. Be aware, however, thatsigned.ContentStream
is not seekable, so you can only read it once. You can get around this by simply copying it to aMemoryStream
or something, though.If you do care about the
DigitalSignatureCollection
, perhaps I can modifySecureMimeContext.GetDigitalSignatures()
to be aprotected
method instead ofprivate
so that you can write your ownSecureMimeContext
subclass and do this: