diff --git a/src/libopensc/iso7816.c b/src/libopensc/iso7816.c index 8cb9e6b6..d35ef086 100644 --- a/src/libopensc/iso7816.c +++ b/src/libopensc/iso7816.c @@ -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; diff --git a/src/pkcs11/pkcs11-object.c b/src/pkcs11/pkcs11-object.c index 5137dfc2..05e8622e 100644 --- a/src/pkcs11/pkcs11-object.c +++ b/src/pkcs11/pkcs11-object.c @@ -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); } diff --git a/src/pkcs11/pkcs11-spy.c b/src/pkcs11/pkcs11-spy.c index 9e945cfd..6cb29eca 100644 --- a/src/pkcs11/pkcs11-spy.c +++ b/src/pkcs11/pkcs11-spy.c @@ -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); } diff --git a/src/tools/pkcs11-tool.c b/src/tools/pkcs11-tool.c index 2b076cba..790749fd 100644 --- a/src/tools/pkcs11-tool.c +++ b/src/tools/pkcs11-tool.c @@ -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; }