case CKM::DataType::KEY_DSA_PRIVATE: return TYPE_AKEY_PRIVATE_DSA;
case CKM::DataType::KEY_RSA_PRIVATE: return TYPE_AKEY_PRIVATE_RSA;
case CKM::DataType::KEY_ECDSA_PRIVATE: return TYPE_AKEY_PRIVATE_EC;
+ case CKM::DataType::KEY_KEM_PRIVATE: return TYPE_AKEY_PRIVATE_KEM;
case CKM::DataType::KEY_DSA_PUBLIC: return TYPE_AKEY_PUBLIC_DSA;
case CKM::DataType::KEY_RSA_PUBLIC: return TYPE_AKEY_PUBLIC_RSA;
case CKM::DataType::KEY_ECDSA_PUBLIC: return TYPE_AKEY_PUBLIC_EC;
+ case CKM::DataType::KEY_KEM_PUBLIC: return TYPE_AKEY_PUBLIC_KEM;
default:
ThrowErr(CKM::Exc::Crypto::DataTypeNotSupported,
"Data type could not be imported by tz-backend");
}
}
+tz_kem toTzKem(CKM::KemType kem)
+{
+ switch(kem) {
+ case CKM::KemType::ML_KEM_768: return ML_KEM_768;
+ case CKM::KemType::ML_KEM_1024: return ML_KEM_1024;
+ default: ThrowErr(CKM::Exc::Crypto::InputParam, "KEM not supported by tz-backend");
+ }
+}
+
tz_prf toTzPrf(CKM::KdfPrf prf)
{
switch(prf) {
hashPub);
break;
}
+ case AlgoType::KEM_GEN: {
+ CKM::KemType kt = unpack<CKM::KemType>(alg, ParamName::GEN_KEM_TYPE);
+ TrustZoneContext::Instance().generateKEMKey(toTzKem(kt),
+ pubPwdBuf,
+ pubPwdIv,
+ privPwdBuf,
+ privPwdIv,
+ pubTag,
+ privTag,
+ hashPriv,
+ hashPub);
+ break;
+ }
default: {
ThrowErr(Exc::Crypto::InputParam,
"Invalid algo type provided for generateAKey function");
pubType= DataType(KeyType::KEY_ECDSA_PUBLIC);
privType = DataType(KeyType::KEY_ECDSA_PRIVATE);
}
+ else if(keyType == AlgoType::KEM_GEN){
+ pubType= DataType(KeyType::KEY_KEM_PUBLIC);
+ privType = DataType(KeyType::KEY_KEM_PRIVATE);
+ }
return std::make_pair<Token, Token>(
Token(m_backendId, privType, pack(hashPriv, privPass, privIv, privTag)),
void Store::destroy(const Token &token)
{
RawBuffer id = unpackData(token.data);
- if (token.dataType.isBinaryData()) {
+ if (token.dataType.isBinaryData() ||
+ token.dataType.isKemPublicKey() ||
+ token.dataType.isKemPrivateKey()) {
// TODO this should be a generic "destroy persistent memory object" once
// serialization in key-manager-ta is unified
Internals::destroyData(id);
hashPub);
}
+void TrustZoneContext::generateKEMKey(tz_kem kemType,
+ const RawBuffer &pubPwd,
+ const RawBuffer &pubPwdIv,
+ const RawBuffer &privPwd,
+ const RawBuffer &privPwdIv,
+ RawBuffer &pubKeyTag,
+ RawBuffer &privKeyTag,
+ const RawBuffer &hashPriv,
+ const RawBuffer &hashPub)
+{
+ // command ID = CMD_GENERATE_KEM_KEYPAIR
+ TZSerializer sIn;
+
+ GenerateAKey(CMD_GENERATE_KEM_KEYPAIR,
+ sIn,
+ static_cast<uint32_t>(kemType),
+ pubPwd,
+ pubPwdIv,
+ privPwd,
+ privPwdIv,
+ pubKeyTag,
+ privKeyTag,
+ hashPriv,
+ hashPub);
+}
+
void TrustZoneContext::executeCrypt(tz_command cmd,
tz_algo_type algo,
tz_hash_type hash,
RawBuffer &privKeyTag,
const RawBuffer &hashPriv,
const RawBuffer &hashPub);
+ void generateKEMKey(tz_kem kemType,
+ const RawBuffer &pubPwd,
+ const RawBuffer &pubPwdIv,
+ const RawBuffer &privPwd,
+ const RawBuffer &privPwdIv,
+ RawBuffer &pubKeyTag,
+ RawBuffer &privKeyTag,
+ const RawBuffer &hashPriv,
+ const RawBuffer &hashPub);
void importData(uint32_t dataType,
const RawBuffer &data,