有没有办法使用PKCS11接口使用ISO-9796方案2创建RSA签名?我知道定义中列出了适当的机制(或者至少我这么认为):
CKM_RSA_9796 0x00000002
但是根据
ISO Descrption
模式2需要参数(即salt和拖车),这似乎与
6.1.11 ISO/IEC 9796 RSA ISO/IEC 9796 RSA机制,表示为CKM_RSA_9796,是一种用于单部分签名和
基于RSA的有无消息恢复验证
公钥密码体制和ISO/IEC 9796中定义的块格式
及其附件A。
我试图使用PKCS11Interop C#class和HSM模拟器创建这样的签名,其中包含(引发PKCS11异常)和无参数(似乎无效)。任何帮助都将不胜感激。
我使用的代码:
using (Session session = slot[slotIndex].OpenSession(SessionType.ReadOnly))
{
session.Login(CKU.CKU_USER, callback.GetPassword());
List<ObjectAttribute> objectAttributes = new List<ObjectAttribute>();
objectAttributes.Add(new ObjectAttribute(CKA.CKA_CLASS, CKO.CKO_PRIVATE_KEY));
var prm = new Net.Pkcs11Interop.HighLevelAPI.MechanismParams.CkRsaPkcsPssParams(Convert.ToUInt32(CKM.CKM_SHA256), Convert.ToUInt32(CKG.CKG_MGF1_SHA256),Convert.ToUInt32(20));
Mechanism mchanism = new Mechanism(CKM.CKM_RSA_9796,prm);
List<ObjectHandle> foundObjects = session.FindAllObjects(objectAttributes);
if (foundObjects != null && foundObjects.Count > 0)
{
signature = session.SignRecover(mchanism, foundObjects[0], result);
}
else
{
throw new DSException("There was a problem with reading private key from token");
}
session.Logout();
}
我收到的例外情况:
方法C\u SignRecoverInit返回CKR\u MECHANISM\u PARAM\u INVALID
谢谢