我使用 Botan2 库来访问 SoftHSM2。我设法生成了一些 AES/DES 密钥,但我想为 SHA256 HMAC 生成一个秘密。
我的代码(在创建会话、登录并检测到我的令牌之后):
namespace p11 = Botan::PKCS11;
p11::SecretKeyProperties propsOtpGen(p11::KeyType::Sha256Hmac);
propsOtpGen.set_label("OTPGEN");
propsOtpGen.set_modifiable(false);
propsOtpGen.set_private(true);
propsOtpGen.set_token(true);
propsOtpGen.set_sensitive(true);
propsOtpGen.set_sign(true);
propsOtpGen.set_verify(true);
propsOtpGen.add_numeric(p11::AttributeType::ValueLen, 16UL);
p11::Mechanism m {static_cast<CK_MECHANISM_TYPE >::MechanismType::GenericSecretKeyGen), NULL_PTR, 0};
11::ObjectHandle keyHandle;
const std::vector<p11::Attribute> vec = propsOtpGen.attributes();
module->C_GenerateKey(session.handle(), &m, const_cast<CK_ATTRIBUTE*>(&vec[0]), vec.size(), &keyHandle);
抛出 0xd1 CKR_TEMPLATE_INCONSISTENT
。
我检查了 SofthHSM2 日志,但没有更多信息。
编辑
我有一些使用 nCipher 的其他示例实现,并且类似的态度与供应商机制一起使用CKM_NC_SHA256_HMAC_KEY_GEN
。但是,这个不在 pkcs11 标准中,因此我不能使用它。