Skip to content
This repository has been archived by the owner on Jan 22, 2025. It is now read-only.

Commit

Permalink
Add vestigial Sign/VerifyRecover test
Browse files Browse the repository at this point in the history
  • Loading branch information
daviddrysdale committed Oct 7, 2014
1 parent ef98012 commit 49e9b46
Showing 1 changed file with 32 additions and 3 deletions.
35 changes: 32 additions & 3 deletions sign.cc
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ TEST_P(SignTest, SignVerify) {
EXPECT_CKR_OK(g_fns->C_Sign(session_, data_.get(), datalen_, output, &output_len));

ASSERT_CKR_OK(g_fns->C_VerifyInit(session_, &mechanism_, keypair_.public_handle()));
EXPECT_CKR_OK(g_fns->C_Verify(session_, data_.get(), datalen_,output, output_len));
EXPECT_CKR_OK(g_fns->C_Verify(session_, data_.get(), datalen_, output, output_len));
}

TEST_P(SignTest, SignFailVerify) {
Expand All @@ -109,10 +109,39 @@ TEST_P(SignTest, SignFailVerify) {

ASSERT_CKR_OK(g_fns->C_VerifyInit(session_, &mechanism_, keypair_.public_handle()));
EXPECT_CKR(CKR_SIGNATURE_INVALID,
g_fns->C_Verify(session_, data_.get(), datalen_,output, output_len));
g_fns->C_Verify(session_, data_.get(), datalen_, output, output_len));
}

TEST_F(ReadOnlySessionTest, DISABLED_SignVerifyRecover) {
vector<CK_ATTRIBUTE_TYPE> public_attrs = {CKA_VERIFY_RECOVER};
vector<CK_ATTRIBUTE_TYPE> private_attrs = {CKA_SIGN_RECOVER};
KeyPair keypair(session_, public_attrs, private_attrs);
const int datalen = 64;
unique_ptr<CK_BYTE, freer> data = randmalloc(datalen);
CK_MECHANISM mechanism = {CKM_RSA_PKCS, NULL_PTR, 0};

CK_RV rv = g_fns->C_SignRecoverInit(session_, &mechanism, keypair.private_handle());
if (rv == CKR_FUNCTION_NOT_SUPPORTED) {
TEST_SKIPPED("SignRecover not supported");
return;
}
ASSERT_CKR_OK(rv);
CK_BYTE output[2048];
CK_ULONG output_len = sizeof(output);
EXPECT_CKR_OK(g_fns->C_SignRecover(session_, data.get(), datalen, output, &output_len));
if (g_verbose) {
cout << "SignRecover on " << datalen << " bytes produced " << output_len << " bytes:" << endl;
cout << " " << hex_data(output, output_len) << endl;
}

CK_BYTE recovered[2048];
CK_ULONG recovered_len = sizeof(recovered);
ASSERT_CKR_OK(g_fns->C_VerifyRecoverInit(session_, &mechanism, keypair.public_handle()));
ASSERT_CKR_OK(g_fns->C_VerifyRecover(session_, output, output_len, recovered, &recovered_len));
EXPECT_EQ(datalen, recovered_len);
EXPECT_EQ(0, memcmp(data.get(), recovered, datalen));
}

// Skip CKM_RSA_PKCS as it has restrictions on data sizes (see PKCS#11 s12.1.6 table 37).
INSTANTIATE_TEST_CASE_P(Signatures, SignTest,
::testing::Values("RSA",
"MD5-RSA",
Expand Down

0 comments on commit 49e9b46

Please sign in to comment.