Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Test improvements (from #374) #443

Merged
merged 6 commits into from
Feb 28, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
206 changes: 162 additions & 44 deletions common/mock.c

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion common/pkcs11.h
Original file line number Diff line number Diff line change
Expand Up @@ -1118,7 +1118,7 @@ _CK_DECLARE_FUNCTION (C_SetOperationState,
unsigned char *operation_state,
unsigned long operation_state_len,
ck_object_handle_t encryption_key,
ck_object_handle_t authentiation_key));
ck_object_handle_t authentication_key));
_CK_DECLARE_FUNCTION (C_Login,
(ck_session_handle_t session, ck_user_type_t user_type,
unsigned char *pin, unsigned long pin_len));
Expand Down
14 changes: 9 additions & 5 deletions p11-kit/log.c
Original file line number Diff line number Diff line change
Expand Up @@ -466,11 +466,15 @@ log_mechanism (p11_buffer *buf,
p11_buffer_add (buf, name, -1);
p11_buffer_add (buf, " = {\n", 5);
p11_buffer_add (buf, "\tmechanism: ", -1);
log_CKM (buf, mech->mechanism);
p11_buffer_add (buf, "\n\tpParameter: ", -1);
snprintf (temp, sizeof (temp), "(%lu) ", mech->ulParameterLen);
p11_buffer_add (buf, temp, -1);
log_some_bytes (buf, mech->pParameter, mech->ulParameterLen);
if (mech != NULL) {
log_CKM (buf, mech->mechanism);
p11_buffer_add (buf, "\n\tpParameter: ", -1);
snprintf (temp, sizeof (temp), "(%lu) ", mech->ulParameterLen);
p11_buffer_add (buf, temp, -1);
log_some_bytes (buf, mech->pParameter, mech->ulParameterLen);
} else {
p11_buffer_add (buf, "NULL", 4);
}
p11_buffer_add (buf, "\n }\n", -1);
}

Expand Down
9 changes: 6 additions & 3 deletions p11-kit/rpc-client.c
Original file line number Diff line number Diff line change
Expand Up @@ -421,12 +421,17 @@ proto_write_mechanism (p11_rpc_message *msg,
CK_MECHANISM_PTR mech)
{
assert (msg != NULL);
assert (mech != NULL);
assert (msg->output != NULL);

/* Make sure this is in the right order */
assert (!msg->signature || p11_rpc_message_verify_part (msg, "M"));

/* This case is valid for C_*Init () functions to cancel operation */
if (mech == NULL) {
p11_rpc_buffer_add_uint32 (msg->output, 0);
return p11_buffer_failed (msg->output) ? CKR_HOST_MEMORY : CKR_OK;
}

if (!p11_rpc_mechanism_is_supported (mech->mechanism))
return CKR_MECHANISM_INVALID;

Expand Down Expand Up @@ -624,8 +629,6 @@ proto_read_sesssion_info (p11_rpc_message *msg,
{ _ret = CKR_HOST_MEMORY; goto _cleanup; }

#define IN_MECHANISM(val) \
if (val == NULL) \
{ _ret = CKR_ARGUMENTS_BAD; goto _cleanup; } \
_ret = proto_write_mechanism (&_msg, val); \
if (_ret != CKR_OK) goto _cleanup;

Expand Down
5 changes: 5 additions & 0 deletions p11-kit/rpc-message.c
Original file line number Diff line number Diff line change
Expand Up @@ -2114,6 +2114,11 @@ p11_rpc_buffer_get_mechanism (p11_buffer *buffer,

mech->mechanism = mechanism;

/* special NULL case */
if (mechanism == 0) {
return true;
}

for (i = 0; i < ELEMS (p11_rpc_mechanism_serializers); i++) {
if (p11_rpc_mechanism_serializers[i].type == mech->mechanism) {
serializer = &p11_rpc_mechanism_serializers[i];
Expand Down
83 changes: 52 additions & 31 deletions p11-kit/rpc-server.c
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,7 @@ proto_read_byte_array (p11_rpc_message *msg,
{
const unsigned char *data;
unsigned char valid;
uint32_t len;
size_t n_data;

assert (msg != NULL);
Expand All @@ -134,8 +135,10 @@ proto_read_byte_array (p11_rpc_message *msg,
return PARSE_ERROR;

if (!valid) {
if (!p11_rpc_buffer_get_uint32 (msg->input, &msg->parsed, &len))
return PARSE_ERROR;
*array = NULL;
*n_array = 0;
*n_array = len;
return CKR_OK;
}

Expand Down Expand Up @@ -426,7 +429,7 @@ proto_read_null_string (p11_rpc_message *msg,

static CK_RV
proto_read_mechanism (p11_rpc_message *msg,
CK_MECHANISM_PTR mech)
CK_MECHANISM_PTR *mech)
{
size_t offset;
CK_MECHANISM temp;
Expand All @@ -446,19 +449,24 @@ proto_read_mechanism (p11_rpc_message *msg,
return PARSE_ERROR;
}

mech->mechanism = temp.mechanism;
if (temp.mechanism == 0) {
*mech = NULL;
return CKR_OK;
}

(*mech)->mechanism = temp.mechanism;

/* The mechanism doesn't require parameter */
if (temp.ulParameterLen == 0) {
mech->pParameter = NULL;
mech->ulParameterLen = 0;
(*mech)->pParameter = NULL;
(*mech)->ulParameterLen = 0;
msg->parsed = offset;
return CKR_OK;
}

/* Actually retrieve the parameter */
mech->pParameter = p11_rpc_message_alloc_extra (msg, temp.ulParameterLen);
if (!p11_rpc_buffer_get_mechanism (msg->input, &msg->parsed, mech))
(*mech)->pParameter = p11_rpc_message_alloc_extra (msg, temp.ulParameterLen);
if (!p11_rpc_buffer_get_mechanism (msg->input, &msg->parsed, *mech))
return PARSE_ERROR;

assert (msg->parsed == offset);
Expand Down Expand Up @@ -1180,14 +1188,15 @@ rpc_C_EncryptInit (CK_X_FUNCTION_LIST *self,
p11_rpc_message *msg)
{
CK_SESSION_HANDLE session;
CK_MECHANISM mechanism;
CK_MECHANISM mechanism_;
CK_MECHANISM_PTR mechanism = &mechanism_;
CK_OBJECT_HANDLE key;

BEGIN_CALL (EncryptInit);
IN_ULONG (session);
IN_MECHANISM (mechanism);
IN_ULONG (key);
PROCESS_CALL ((self, session, &mechanism, key));
PROCESS_CALL ((self, session, mechanism, key));
END_CALL;

}
Expand Down Expand Up @@ -1251,14 +1260,15 @@ rpc_C_DecryptInit (CK_X_FUNCTION_LIST *self,
p11_rpc_message *msg)
{
CK_SESSION_HANDLE session;
CK_MECHANISM mechanism;
CK_MECHANISM mechanism_;
CK_MECHANISM_PTR mechanism = &mechanism_;
CK_OBJECT_HANDLE key;

BEGIN_CALL (DecryptInit);
IN_ULONG (session);
IN_MECHANISM (mechanism);
IN_ULONG (key);
PROCESS_CALL ((self, session, &mechanism, key));
PROCESS_CALL ((self, session, mechanism, key));
END_CALL;
}

Expand Down Expand Up @@ -1321,12 +1331,13 @@ rpc_C_DigestInit (CK_X_FUNCTION_LIST *self,
p11_rpc_message *msg)
{
CK_SESSION_HANDLE session;
CK_MECHANISM mechanism;
CK_MECHANISM mechanism_;
CK_MECHANISM_PTR mechanism = &mechanism_;

BEGIN_CALL (DigestInit);
IN_ULONG (session);
IN_MECHANISM (mechanism);
PROCESS_CALL ((self, session, &mechanism));
PROCESS_CALL ((self, session, mechanism));
END_CALL;
}

Expand Down Expand Up @@ -1399,14 +1410,15 @@ rpc_C_SignInit (CK_X_FUNCTION_LIST *self,
p11_rpc_message *msg)
{
CK_SESSION_HANDLE session;
CK_MECHANISM mechanism;
CK_MECHANISM mechanism_;
CK_MECHANISM_PTR mechanism = &mechanism_;
CK_OBJECT_HANDLE key;

BEGIN_CALL (SignInit);
IN_ULONG (session);
IN_MECHANISM (mechanism);
IN_ULONG (key);
PROCESS_CALL ((self, session, &mechanism, key));
PROCESS_CALL ((self, session, mechanism, key));
END_CALL;
}

Expand Down Expand Up @@ -1466,14 +1478,15 @@ rpc_C_SignRecoverInit (CK_X_FUNCTION_LIST *self,
p11_rpc_message *msg)
{
CK_SESSION_HANDLE session;
CK_MECHANISM mechanism;
CK_MECHANISM mechanism_;
CK_MECHANISM_PTR mechanism = &mechanism_;
CK_OBJECT_HANDLE key;

BEGIN_CALL (SignRecoverInit);
IN_ULONG (session);
IN_MECHANISM (mechanism);
IN_ULONG (key);
PROCESS_CALL ((self, session, &mechanism, key));
PROCESS_CALL ((self, session, mechanism, key));
END_CALL;
}

Expand Down Expand Up @@ -1501,14 +1514,15 @@ rpc_C_VerifyInit (CK_X_FUNCTION_LIST *self,
p11_rpc_message *msg)
{
CK_SESSION_HANDLE session;
CK_MECHANISM mechanism;
CK_MECHANISM mechanism_;
CK_MECHANISM_PTR mechanism = &mechanism_;
CK_OBJECT_HANDLE key;

BEGIN_CALL (VerifyInit);
IN_ULONG (session);
IN_MECHANISM (mechanism);
IN_ULONG (key);
PROCESS_CALL ((self, session, &mechanism, key));
PROCESS_CALL ((self, session, mechanism, key));
END_CALL;
}

Expand Down Expand Up @@ -1565,14 +1579,15 @@ rpc_C_VerifyRecoverInit (CK_X_FUNCTION_LIST *self,
p11_rpc_message *msg)
{
CK_SESSION_HANDLE session;
CK_MECHANISM mechanism;
CK_MECHANISM mechanism_;
CK_MECHANISM_PTR mechanism = &mechanism_;
CK_OBJECT_HANDLE key;

BEGIN_CALL (VerifyRecoverInit);
IN_ULONG (session);
IN_MECHANISM (mechanism);
IN_ULONG (key);
PROCESS_CALL ((self, session, &mechanism, key));
PROCESS_CALL ((self, session, mechanism, key));
END_CALL;
}

Expand Down Expand Up @@ -1676,7 +1691,8 @@ rpc_C_GenerateKey (CK_X_FUNCTION_LIST *self,
p11_rpc_message *msg)
{
CK_SESSION_HANDLE session;
CK_MECHANISM mechanism;
CK_MECHANISM mechanism_;
CK_MECHANISM_PTR mechanism = &mechanism_;
CK_ATTRIBUTE_PTR template;
CK_ULONG count;
CK_OBJECT_HANDLE key;
Expand All @@ -1685,7 +1701,7 @@ rpc_C_GenerateKey (CK_X_FUNCTION_LIST *self,
IN_ULONG (session);
IN_MECHANISM (mechanism);
IN_ATTRIBUTE_ARRAY (template, count);
PROCESS_CALL ((self, session, &mechanism, template, count, &key));
PROCESS_CALL ((self, session, mechanism, template, count, &key));
OUT_ULONG (key);
END_CALL;
}
Expand All @@ -1695,7 +1711,8 @@ rpc_C_GenerateKeyPair (CK_X_FUNCTION_LIST *self,
p11_rpc_message *msg)
{
CK_SESSION_HANDLE session;
CK_MECHANISM mechanism;
CK_MECHANISM mechanism_;
CK_MECHANISM_PTR mechanism = &mechanism_;
CK_ATTRIBUTE_PTR public_key_template;
CK_ULONG public_key_attribute_count;
CK_ATTRIBUTE_PTR private_key_template;
Expand All @@ -1708,7 +1725,8 @@ rpc_C_GenerateKeyPair (CK_X_FUNCTION_LIST *self,
IN_MECHANISM (mechanism);
IN_ATTRIBUTE_ARRAY (public_key_template, public_key_attribute_count);
IN_ATTRIBUTE_ARRAY (private_key_template, private_key_attribute_count);
PROCESS_CALL ((self, session, &mechanism, public_key_template, public_key_attribute_count, private_key_template, private_key_attribute_count, &public_key, &private_key));
PROCESS_CALL ((self, session, mechanism, public_key_template, public_key_attribute_count,
private_key_template, private_key_attribute_count, &public_key, &private_key));
OUT_ULONG (public_key);
OUT_ULONG (private_key);
END_CALL;
Expand All @@ -1719,7 +1737,8 @@ rpc_C_WrapKey (CK_X_FUNCTION_LIST *self,
p11_rpc_message *msg)
{
CK_SESSION_HANDLE session;
CK_MECHANISM mechanism;
CK_MECHANISM mechanism_;
CK_MECHANISM_PTR mechanism = &mechanism_;
CK_OBJECT_HANDLE wrapping_key;
CK_OBJECT_HANDLE key;
CK_BYTE_PTR wrapped_key;
Expand All @@ -1731,7 +1750,7 @@ rpc_C_WrapKey (CK_X_FUNCTION_LIST *self,
IN_ULONG (wrapping_key);
IN_ULONG (key);
IN_BYTE_BUFFER (wrapped_key, wrapped_key_len);
PROCESS_CALL ((self, session, &mechanism, wrapping_key, key, wrapped_key, &wrapped_key_len));
PROCESS_CALL ((self, session, mechanism, wrapping_key, key, wrapped_key, &wrapped_key_len));
OUT_BYTE_ARRAY (wrapped_key, wrapped_key_len);
END_CALL;
}
Expand All @@ -1741,7 +1760,8 @@ rpc_C_UnwrapKey (CK_X_FUNCTION_LIST *self,
p11_rpc_message *msg)
{
CK_SESSION_HANDLE session;
CK_MECHANISM mechanism;
CK_MECHANISM mechanism_;
CK_MECHANISM_PTR mechanism = &mechanism_;
CK_OBJECT_HANDLE unwrapping_key;
CK_BYTE_PTR wrapped_key;
CK_ULONG wrapped_key_len;
Expand All @@ -1755,7 +1775,7 @@ rpc_C_UnwrapKey (CK_X_FUNCTION_LIST *self,
IN_ULONG (unwrapping_key);
IN_BYTE_ARRAY (wrapped_key, wrapped_key_len);
IN_ATTRIBUTE_ARRAY (template, attribute_count);
PROCESS_CALL ((self, session, &mechanism, unwrapping_key, wrapped_key, wrapped_key_len, template, attribute_count, &key));
PROCESS_CALL ((self, session, mechanism, unwrapping_key, wrapped_key, wrapped_key_len, template, attribute_count, &key));
OUT_ULONG (key);
END_CALL;
}
Expand All @@ -1765,7 +1785,8 @@ rpc_C_DeriveKey (CK_X_FUNCTION_LIST *self,
p11_rpc_message *msg)
{
CK_SESSION_HANDLE session;
CK_MECHANISM mechanism;
CK_MECHANISM mechanism_;
CK_MECHANISM_PTR mechanism = &mechanism_;
CK_OBJECT_HANDLE base_key;
CK_ATTRIBUTE_PTR template;
CK_ULONG attribute_count;
Expand All @@ -1776,7 +1797,7 @@ rpc_C_DeriveKey (CK_X_FUNCTION_LIST *self,
IN_MECHANISM (mechanism);
IN_ULONG (base_key);
IN_ATTRIBUTE_ARRAY (template, attribute_count);
PROCESS_CALL ((self, session, &mechanism, base_key, template, attribute_count, &key));
PROCESS_CALL ((self, session, mechanism, base_key, template, attribute_count, &key));
OUT_ULONG (key);
END_CALL;
}
Expand Down
Loading