Я пытаюсь подписать документы PDF с помощью библиотеки Pkcs11Interop .net. Мне нужно использовать алгоритм шифрования ECDSA с алгоритмом хеширования SHA256. И я использую SoftHSM 2.2.0 для хранения закрытых ключей.
Я нашел перечисление CKM, CKM_ECDSA_SHA256, которое я передаю при создании объекта механизма класса для вызова метода Sign сеанса.
Я получаю ответ от метода «Signdata», однако при открытии файлов Pdf, созданных после подписи, выдает ошибку «Подпись недействительна». Вот фрагмент кода для вызова метода Signdata. Я не получаю никаких ошибок или исключений в коде, однако PDF-файл, как я уже упоминал, показывает недействительную подпись.
private Pkcs11 _pkcs11;
private Slot _slot;
private Session _session;
try
{
_pkcs11 = new Pkcs11(hsmCryptoApi, true);
}
catch (Pkcs11Exception ex)
{
if (ex.RV == CKR.CKR_CANT_LOCK)
_pkcs11 = new Pkcs11(hsmCryptoApi, false);
else
throw ex;
}
_slot = FindSlot(_pkcs11, _certificateInformation.TokenLabel);
_session = _slot.OpenSession(true);
using (Mechanism mechanism = new Mechanism(CKM.CKM_ECDSA_SHA256))
{
_session.Login(CKU.CKU_USER, passowrd);
byte[] signedHash = _session.Sign(mechanism, GetPrivateKeyHandle(), message);
_session.Logout();
return signedHash;
}
private ObjectHandle GetPrivateKeyHandle()
{
string keyLabel = _certificateInformation.KeyLabel;
List<ObjectAttribute> searchTemplate = new List<ObjectAttribute>();
searchTemplate.Add(new ObjectAttribute(CKA.CKA_CLASS, CKO.CKO_PRIVATE_KEY));
searchTemplate.Add(new ObjectAttribute(CKA.CKA_LABEL, keyLabel));
List<ObjectHandle> foundObjects = _session.FindAllObjects(searchTemplate);
return foundObjects[0];
}
- Скажите, пожалуйста, поддерживает ли SoftHSM 2.2.0 ECDSA_P256 с SHA256 или нет ??
- Если нет, то есть ли возможность включить поддержку ??
- Если он поддерживает, пожалуйста, помогите мне, как это исправить ??
- Похоже, он хочет, чтобы я передал ECDSA_Param, есть ли у кого-нибудь фрагмент кода для передачи ECDSA_Param