使用预计算签名在c#中创建PKCS#7签名消息

使用预计算签名在c#中创建PKCS#7签名消息,c#,cryptography,digital-signature,pkcs#7,hsm,C#,Cryptography,Digital Signature,Pkcs#7,Hsm,我正在尝试用C语言创建PKCS#7签名消息。数字签名在HSM中单独计算,因此我已经有了签名的值,我只想创建一个包含它的PKCS#7结构 我已经研究过在System.Security.Cryptography.Pkcs命名空间中使用SignedCms,但它似乎没有提供预计算签名的选项 当我已经拥有数字签名的值时,用C生成PKCS#7结构的最佳方法是什么?我想你想要的是X509Certificate2类,使用静态CreateFromSignedFile函数从签名文件检索证书,或者使用CreateFr

我正在尝试用C语言创建PKCS#7签名消息。数字签名在HSM中单独计算,因此我已经有了签名的值,我只想创建一个包含它的PKCS#7结构

我已经研究过在System.Security.Cryptography.Pkcs命名空间中使用SignedCms,但它似乎没有提供预计算签名的选项


当我已经拥有数字签名的值时,用C生成PKCS#7结构的最佳方法是什么?

我想你想要的是
X509Certificate2
类,使用静态
CreateFromSignedFile
函数从签名文件检索证书,或者使用
CreateFromCertFile
从指定的证书文件创建:

X509Certificate2 cert = X509Certificate2.CreateFromSignedFile(filename);
CmsSigner signer = new CmsSigner(cert);

抱歉,您不能用“内置的.NET类”来实现这一点

然而,我创建了一个示例应用程序——用于CMS签名创建(我是其作者)和库


在此应用程序中,Pkcs11Interop库使用存储在硬件设备中的私钥通过PKCS#11 API执行签名操作,BounchCastle库负责构建CMS(PKCS#7)签名结构。

这种方法的问题是,当证书上没有私钥时,CmsSigner将尝试使用证书上的私钥计算签名,私钥仅存在于HSM中。我基本上想要SignedCms类的一个版本,在这个版本中我可以为它提供数字签名,而不是让CmsSigner计算数字签名。@AndyGibson您能在OP中提供一个简化的例子来说明您拥有什么,以及您试图实现什么吗?还包括任何可能相关的示例代码,即使它可能是伪代码,这非常有用,谢谢。最后,我使用了Pkcs7SignatureGenerator项目中的代码作为起点,并对其进行了微调以满足我的需要。