* Fix issues with pkcs11-tool testing of C_GenerateRandom/C_SeedRandom and OpenSC PKCS#11 implementation of those functions.
Thanks goes to Rickard Bondesson who noticed the issues. http://www.opensc-project.org/pipermail/opensc-devel/2008-November/011436.html git-svn-id: https://www.opensc-project.org/svnp/opensc/trunk@3595 c6295689-39f2-0310-b995-f0e70906c6a9
This commit is contained in:
parent
36112bf6e0
commit
1e41d4d267
|
@ -491,6 +491,9 @@ static int iso7816_get_challenge(sc_card_t *card, u8 *rnd, size_t len)
|
|||
sc_apdu_t apdu;
|
||||
u8 buf[10];
|
||||
|
||||
if (!rnd)
|
||||
return SC_ERROR_INVALID_ARGUMENTS;
|
||||
|
||||
sc_format_apdu(card, &apdu, SC_APDU_CASE_2_SHORT,
|
||||
0x84, 0x00, 0x00);
|
||||
apdu.le = 8;
|
||||
|
|
|
@ -957,7 +957,7 @@ CK_RV C_SeedRandom(CK_SESSION_HANDLE hSession, /* the session's handle */
|
|||
if (rv == CKR_OK) {
|
||||
slot = session->slot;
|
||||
if (slot->card->framework->seed_random == NULL)
|
||||
rv = CKR_FUNCTION_NOT_SUPPORTED;
|
||||
rv = CKR_RANDOM_SEED_NOT_SUPPORTED;
|
||||
else
|
||||
rv = slot->card->framework->seed_random(slot->card, pSeed, ulSeedLen);
|
||||
}
|
||||
|
@ -982,7 +982,7 @@ CK_RV C_GenerateRandom(CK_SESSION_HANDLE hSession, /* the session's handle */
|
|||
if (rv == CKR_OK) {
|
||||
slot = session->slot;
|
||||
if (slot->card->framework->get_random == NULL)
|
||||
rv = CKR_FUNCTION_NOT_SUPPORTED;
|
||||
rv = CKR_RANDOM_NO_RNG;
|
||||
else
|
||||
rv = slot->card->framework->get_random(slot->card, RandomData, ulRandomLen);
|
||||
}
|
||||
|
|
|
@ -1376,6 +1376,7 @@ CK_RV C_WaitForSlotEvent(CK_FLAGS flags,
|
|||
{
|
||||
CK_RV rv;
|
||||
enter("C_WaitForSlotEvent");
|
||||
spy_dump_ulong_in("flags", flags);
|
||||
rv = po->C_WaitForSlotEvent(flags, pSlot, pRserved);
|
||||
return retne(rv);
|
||||
}
|
||||
|
|
|
@ -2978,12 +2978,13 @@ static int test_random(CK_SLOT_ID slot)
|
|||
if (rv != CKR_OK)
|
||||
p11_fatal("C_OpenSession", rv);
|
||||
|
||||
rv = p11->C_SeedRandom(session, seed1, 10);
|
||||
if (rv == CKR_RANDOM_NO_RNG || rv == CKR_FUNCTION_NOT_SUPPORTED) {
|
||||
printf(" not implemented\n");
|
||||
rv = p11->C_SeedRandom(session, seed1, 100);
|
||||
if (rv == CKR_RANDOM_NO_RNG) {
|
||||
printf(" RNG not available\n");
|
||||
return 0;
|
||||
}
|
||||
if (rv == CKR_RANDOM_SEED_NOT_SUPPORTED)
|
||||
|
||||
if (rv == CKR_RANDOM_SEED_NOT_SUPPORTED || rv == CKR_FUNCTION_NOT_SUPPORTED)
|
||||
printf(" seeding (C_SeedRandom) not supported\n");
|
||||
else if (rv != CKR_OK) {
|
||||
p11_perror("C_SeedRandom", rv);
|
||||
|
@ -2998,19 +2999,19 @@ static int test_random(CK_SLOT_ID slot)
|
|||
|
||||
rv = p11->C_GenerateRandom(session, buf1, 100);
|
||||
if (rv != CKR_OK) {
|
||||
p11_perror("C_GenerateRandom", rv);
|
||||
p11_perror("C_GenerateRandom(buf1,100)", rv);
|
||||
return 1;
|
||||
}
|
||||
|
||||
rv = p11->C_GenerateRandom(session, buf1, 0);
|
||||
if (rv != CKR_OK) {
|
||||
p11_perror("C_GenerateRandom(,,0)", rv);
|
||||
p11_perror("C_GenerateRandom(buf1,0)", rv);
|
||||
return 1;
|
||||
}
|
||||
|
||||
rv = p11->C_GenerateRandom(session, NULL, 100);
|
||||
rv = p11->C_GenerateRandom(session, buf2, 100);
|
||||
if (rv != CKR_OK) {
|
||||
p11_perror("C_GenerateRandom(,NULL,)", rv);
|
||||
p11_perror("C_GenerateRandom(buf2,100)", rv);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue