128 lines
4.9 KiB
Diff
128 lines
4.9 KiB
Diff
From 1f46d537a1924f3d7af833d8b079b45d79d02ac0 Mon Sep 17 00:00:00 2001
|
|
From: Ingo Franzki <ifranzki@linux.ibm.com>
|
|
Date: Fri, 8 Apr 2022 13:02:41 +0200
|
|
Subject: [PATCH 07/11] Add support for MAC and HMAC general mechanisms
|
|
|
|
The take a mechanism parameter of type CK_MAC_GENERAL_PARAMS which
|
|
is a CK_ULONG.
|
|
|
|
Signed-off-by: Ingo Franzki <ifranzki@linux.ibm.com>
|
|
---
|
|
p11-kit/rpc-message.c | 59 +++++++++++++++++++++++++++++++++++++++++++
|
|
p11-kit/rpc-message.h | 11 ++++++++
|
|
2 files changed, 70 insertions(+)
|
|
|
|
diff --git a/p11-kit/rpc-message.c b/p11-kit/rpc-message.c
|
|
index a574911..5159d98 100644
|
|
--- a/p11-kit/rpc-message.c
|
|
+++ b/p11-kit/rpc-message.c
|
|
@@ -1632,6 +1632,52 @@ p11_rpc_buffer_get_des_iv_mechanism_value (p11_buffer *buffer,
|
|
return true;
|
|
}
|
|
|
|
+void
|
|
+p11_rpc_buffer_add_mac_general_mechanism_value (p11_buffer *buffer,
|
|
+ const void *value,
|
|
+ CK_ULONG value_length)
|
|
+{
|
|
+ CK_ULONG val;
|
|
+ uint64_t params;
|
|
+
|
|
+ /*
|
|
+ * Check if value can be converted to an CK_MAC_GENERAL_PARAMS which
|
|
+ * is a CK_ULONG.
|
|
+ */
|
|
+ if (value_length != sizeof (CK_ULONG)) {
|
|
+ p11_buffer_fail (buffer);
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ memcpy (&val, value, value_length);
|
|
+ params = val;
|
|
+
|
|
+ p11_rpc_buffer_add_uint64 (buffer, params);
|
|
+}
|
|
+
|
|
+bool
|
|
+p11_rpc_buffer_get_mac_general_mechanism_value (p11_buffer *buffer,
|
|
+ size_t *offset,
|
|
+ void *value,
|
|
+ CK_ULONG *value_length)
|
|
+{
|
|
+ uint64_t val;
|
|
+ CK_ULONG params;
|
|
+
|
|
+ if (!p11_rpc_buffer_get_uint64 (buffer, offset, &val))
|
|
+ return false;
|
|
+
|
|
+ params = val;
|
|
+
|
|
+ if (value)
|
|
+ memcpy (value, ¶ms, sizeof (params));
|
|
+
|
|
+ if (value_length)
|
|
+ *value_length = sizeof (params);
|
|
+
|
|
+ return true;
|
|
+}
|
|
+
|
|
static p11_rpc_mechanism_serializer p11_rpc_mechanism_serializers[] = {
|
|
{ CKM_RSA_PKCS_PSS, p11_rpc_buffer_add_rsa_pkcs_pss_mechanism_value, p11_rpc_buffer_get_rsa_pkcs_pss_mechanism_value },
|
|
{ CKM_SHA1_RSA_PKCS_PSS, p11_rpc_buffer_add_rsa_pkcs_pss_mechanism_value, p11_rpc_buffer_get_rsa_pkcs_pss_mechanism_value },
|
|
@@ -1659,6 +1705,17 @@ static p11_rpc_mechanism_serializer p11_rpc_mechanism_serializers[] = {
|
|
{ CKM_DES_CFB8, p11_rpc_buffer_add_des_iv_mechanism_value, p11_rpc_buffer_get_des_iv_mechanism_value },
|
|
{ CKM_DES_CFB64, p11_rpc_buffer_add_des_iv_mechanism_value, p11_rpc_buffer_get_des_iv_mechanism_value },
|
|
{ CKM_DES_OFB64, p11_rpc_buffer_add_des_iv_mechanism_value, p11_rpc_buffer_get_des_iv_mechanism_value },
|
|
+ { CKM_SHA_1_HMAC_GENERAL, p11_rpc_buffer_add_mac_general_mechanism_value, p11_rpc_buffer_get_mac_general_mechanism_value },
|
|
+ { CKM_SHA224_HMAC_GENERAL, p11_rpc_buffer_add_mac_general_mechanism_value, p11_rpc_buffer_get_mac_general_mechanism_value },
|
|
+ { CKM_SHA256_HMAC_GENERAL, p11_rpc_buffer_add_mac_general_mechanism_value, p11_rpc_buffer_get_mac_general_mechanism_value },
|
|
+ { CKM_SHA384_HMAC_GENERAL, p11_rpc_buffer_add_mac_general_mechanism_value, p11_rpc_buffer_get_mac_general_mechanism_value },
|
|
+ { CKM_SHA512_HMAC_GENERAL, p11_rpc_buffer_add_mac_general_mechanism_value, p11_rpc_buffer_get_mac_general_mechanism_value },
|
|
+ { CKM_SHA512_224_HMAC_GENERAL, p11_rpc_buffer_add_mac_general_mechanism_value, p11_rpc_buffer_get_mac_general_mechanism_value },
|
|
+ { CKM_SHA512_256_HMAC_GENERAL, p11_rpc_buffer_add_mac_general_mechanism_value, p11_rpc_buffer_get_mac_general_mechanism_value },
|
|
+ { CKM_AES_MAC_GENERAL, p11_rpc_buffer_add_mac_general_mechanism_value, p11_rpc_buffer_get_mac_general_mechanism_value },
|
|
+ { CKM_AES_CMAC_GENERAL, p11_rpc_buffer_add_mac_general_mechanism_value, p11_rpc_buffer_get_mac_general_mechanism_value },
|
|
+ { CKM_DES3_MAC_GENERAL, p11_rpc_buffer_add_mac_general_mechanism_value, p11_rpc_buffer_get_mac_general_mechanism_value },
|
|
+ { CKM_DES3_CMAC_GENERAL, p11_rpc_buffer_add_mac_general_mechanism_value, p11_rpc_buffer_get_mac_general_mechanism_value },
|
|
};
|
|
|
|
static p11_rpc_mechanism_serializer p11_rpc_byte_array_mechanism_serializer = {
|
|
@@ -1735,6 +1792,7 @@ mechanism_has_no_parameters (CK_MECHANISM_TYPE mech)
|
|
case CKM_AES_KEY_GEN:
|
|
case CKM_AES_ECB:
|
|
case CKM_AES_MAC:
|
|
+ case CKM_AES_CMAC:
|
|
case CKM_DES_KEY_GEN:
|
|
case CKM_DES2_KEY_GEN:
|
|
case CKM_DES3_KEY_GEN:
|
|
@@ -1760,6 +1818,7 @@ mechanism_has_no_parameters (CK_MECHANISM_TYPE mech)
|
|
case CKM_RC2_MAC:
|
|
case CKM_DES_MAC:
|
|
case CKM_DES3_MAC:
|
|
+ case CKM_DES3_CMAC:
|
|
case CKM_CDMF_MAC:
|
|
case CKM_CAST_MAC:
|
|
case CKM_CAST3_MAC:
|
|
diff --git a/p11-kit/rpc-message.h b/p11-kit/rpc-message.h
|
|
index 8c8119d..5ae09e5 100644
|
|
--- a/p11-kit/rpc-message.h
|
|
+++ b/p11-kit/rpc-message.h
|
|
@@ -520,4 +520,15 @@ bool p11_rpc_buffer_get_des_iv_mechanism_value (p11_buffer *buffer,
|
|
void *value,
|
|
CK_ULONG *value_length);
|
|
|
|
+void p11_rpc_buffer_add_mac_general_mechanism_value
|
|
+ (p11_buffer *buffer,
|
|
+ const void *value,
|
|
+ CK_ULONG value_length);
|
|
+
|
|
+bool p11_rpc_buffer_get_mac_general_mechanism_value
|
|
+ (p11_buffer *buffer,
|
|
+ size_t *offset,
|
|
+ void *value,
|
|
+ CK_ULONG *value_length);
|
|
+
|
|
#endif /* _RPC_MESSAGE_H */
|
|
--
|
|
2.38.1
|
|
|