- fix compile warnings generated by -Wall - always return a non-zero error code to the command line on test error - use a macro to send output to stderr when appropriate - print file/line numbers for any failures
Signed-off-by: Kent Yoder <[email protected]> testcases/driver/aes_func.c | 463 ++++++++++++++++++++++--------------------- 1 files changed, 237 insertions(+), 226 deletions(-) diff --git a/testcases/driver/aes_func.c b/testcases/driver/aes_func.c index 4959d45..d23947f 100755 --- a/testcases/driver/aes_func.c +++ b/testcases/driver/aes_func.c @@ -24,7 +24,7 @@ #define AES_KEY_LEN 32 #endif -int do_EncryptAES_ECB(void) +CK_RV do_EncryptAES_ECB(void) { CK_BYTE data1[BIG_REQUEST]; CK_BYTE data2[BIG_REQUEST]; @@ -37,7 +37,7 @@ int do_EncryptAES_ECB(void) CK_ULONG user_pin_len; CK_ULONG i; CK_ULONG len1, len2, key_size = AES_KEY_SIZE_256; - CK_RV rc; + CK_RV rc, loc_rc; CK_ATTRIBUTE key_gen_tmpl[] = { {CKA_VALUE_LEN, &key_size, sizeof(CK_ULONG) } }; @@ -49,7 +49,7 @@ int do_EncryptAES_ECB(void) rc = funcs->C_OpenSession( slot_id, flags, NULL, NULL, &session ); if (rc != CKR_OK) { show_error(" C_OpenSession #1", rc ); - return FALSE; + return rc; } if (get_user_pin(user_pin)) @@ -99,33 +99,35 @@ int do_EncryptAES_ECB(void) goto error; } if (len1 != len2) { - printf(" ERROR: lengths don't match\n"); + PRINT_ERR(" ERROR: lengths don't match\n"); + rc = -1; goto error; } for (i=0; i <len1; i++) { if (data1[i] != data2[i]) { - printf(" ERROR: data mismatch at byte %ld\n", i ); + PRINT_ERR(" ERROR: data mismatch at byte %ld\n", i ); + rc = -1; goto error; } } rc = funcs->C_CloseAllSessions( slot_id ); if (rc != CKR_OK) { show_error(" C_CloseAllSessions #1", rc ); - return FALSE; + return rc; } printf("Pass\n"); - return TRUE; + return 0; error: - rc = funcs->C_CloseSession (session); - if (rc != CKR_OK) - show_error (" C_CloseSession #2", rc); - return FALSE; + loc_rc = funcs->C_CloseSession (session); + if (loc_rc != CKR_OK) + show_error (" C_CloseSession #2", loc_rc); + return rc; } // // -int do_EncryptAES_Multipart_ECB( void ) +CK_RV do_EncryptAES_Multipart_ECB( void ) { CK_BYTE original[BIG_REQUEST]; CK_BYTE crypt1 [BIG_REQUEST]; @@ -144,7 +146,7 @@ int do_EncryptAES_Multipart_ECB( void ) CK_ULONG orig_len; CK_ULONG crypt1_len, crypt2_len, decrypt1_len, decrypt2_len; CK_ULONG tmp, key_size = AES_KEY_SIZE_256; - CK_RV rc; + CK_RV rc, loc_rc; CK_ATTRIBUTE key_gen_tmpl[] = { {CKA_VALUE_LEN, &key_size, sizeof(CK_ULONG) } }; @@ -156,7 +158,7 @@ int do_EncryptAES_Multipart_ECB( void ) rc = funcs->C_OpenSession( slot_id, flags, NULL, NULL, &session ); if (rc != CKR_OK) { show_error(" C_OpenSession #1", rc ); - return FALSE; + return rc; } @@ -254,12 +256,12 @@ int do_EncryptAES_Multipart_ECB( void ) } if (tmp != 0) { - printf(" ERROR: DecryptFinal wants to return %ld bytes\n", tmp ); + PRINT_ERR(" ERROR: DecryptFinal wants to return %ld bytes\n", tmp ); goto error; } if (crypt2_len != crypt1_len) { - printf(" ERROR: crypt1_len = %ld, crypt2_len = %ld\n", crypt1_len, crypt2_len ); + PRINT_ERR(" ERROR: crypt1_len = %ld, crypt2_len = %ld\n", crypt1_len, crypt2_len ); goto error; } @@ -268,7 +270,7 @@ int do_EncryptAES_Multipart_ECB( void ) // for (i=0; i < crypt1_len; i++) { if (crypt1[i] != crypt2[i]) { - printf(" ERROR: mismatch. crypt1 != crypt2 at byte %ld\n", i ); + PRINT_ERR(" ERROR: mismatch. crypt1 != crypt2 at byte %ld\n", i ); goto error; } } @@ -332,17 +334,20 @@ int do_EncryptAES_Multipart_ECB( void ) } if (tmp != 0) { - printf(" ERROR: DecryptFinal wants to return %ld bytes\n", tmp ); + PRINT_ERR(" ERROR: DecryptFinal wants to return %ld bytes\n", tmp ); + rc = -1; goto error; } if (decrypt1_len != decrypt2_len) { - printf(" ERROR: decrypt1_len = %ld, decrypt2_len = %ld\n", decrypt1_len, decrypt2_len ); + PRINT_ERR(" ERROR: decrypt1_len = %ld, decrypt2_len = %ld\n", decrypt1_len, decrypt2_len ); + rc = -1; goto error; } if (decrypt1_len != orig_len) { - printf(" ERROR: decrypted lengths = %ld, original length = %ld\n", decrypt1_len, orig_len ); + PRINT_ERR(" ERROR: decrypted lengths = %ld, original length = %ld\n", decrypt1_len, orig_len ); + rc = -1; goto error; } @@ -350,7 +355,8 @@ int do_EncryptAES_Multipart_ECB( void ) // for (i=0; i < decrypt1_len; i++) { if (decrypt1[i] != decrypt2[i]) { - printf(" ERROR: mismatch. decrypt1 != decrypt2 at byte %ld\n", i ); + PRINT_ERR(" ERROR: mismatch. decrypt1 != decrypt2 at byte %ld\n", i ); + rc = -1; goto error; } } @@ -359,7 +365,8 @@ int do_EncryptAES_Multipart_ECB( void ) // for (i=0; i < orig_len; i++) { if (original[i] != decrypt1[i]) { - printf(" ERROR: decrypted mismatch: original != decrypt at byte %ld\n", i ); + PRINT_ERR(" ERROR: decrypted mismatch: original != decrypt at byte %ld\n", i ); + rc = -1; goto error; } } @@ -368,24 +375,24 @@ int do_EncryptAES_Multipart_ECB( void ) rc = funcs->C_CloseAllSessions( slot_id ); if (rc != CKR_OK) { show_error(" C_CloseAllSessions #1", rc ); - return FALSE; + return rc; } printf("Success.\n"); - return TRUE; + return 0; error: - rc = funcs->C_CloseSession (session); - if (rc != CKR_OK) - show_error (" C_CloseSession #2", rc); + loc_rc = funcs->C_CloseSession (session); + if (loc_rc != CKR_OK) + show_error (" C_CloseSession #2", loc_rc); - return FALSE; + return rc; } // // -int do_EncryptAES_CBC( void ) +CK_RV do_EncryptAES_CBC( void ) { CK_BYTE data1[BIG_REQUEST]; CK_BYTE data2[BIG_REQUEST]; @@ -411,7 +418,7 @@ int do_EncryptAES_CBC( void ) rc = funcs->C_OpenSession( slot_id, flags, NULL, NULL, &session ); if (rc != CKR_OK) { show_error(" C_OpenSession #1", rc ); - return FALSE; + return rc; } @@ -422,7 +429,7 @@ int do_EncryptAES_CBC( void ) rc = funcs->C_Login( session, CKU_USER, user_pin, user_pin_len ); if (rc != CKR_OK) { show_error(" C_Login #1", rc ); - return FALSE; + return rc; } @@ -436,7 +443,7 @@ int do_EncryptAES_CBC( void ) rc = funcs->C_GenerateKey( session, &mech, key_gen_tmpl, 1, &h_key ); if (rc != CKR_OK) { show_error(" C_GenerateKey #1", rc ); - return FALSE; + return rc; } @@ -458,13 +465,13 @@ int do_EncryptAES_CBC( void ) rc = funcs->C_EncryptInit( session, &mech, h_key ); if (rc != CKR_OK) { show_error(" C_EncryptInit #1", rc ); - return FALSE; + return rc; } rc = funcs->C_Encrypt( session, data1, len1, data1, &len1 ); if (rc != CKR_OK) { show_error(" C_Encrypt #1", rc ); - return FALSE; + return rc; } // now, decrypt the data @@ -472,41 +479,41 @@ int do_EncryptAES_CBC( void ) rc = funcs->C_DecryptInit( session, &mech, h_key ); if (rc != CKR_OK) { show_error(" C_DecryptInit #1", rc ); - return FALSE; + return rc; } rc = funcs->C_Decrypt( session, data1, len1, data1, &len1 ); if (rc != CKR_OK) { show_error(" C_Decrypt #1", rc ); - return FALSE; + return rc; } if (len1 != len2) { - printf(" ERROR: lengths don't match\n"); - return FALSE; + PRINT_ERR(" ERROR: lengths don't match\n"); + return -1; } for (i=0; i <len1; i++) { if (data1[i] != data2[i]) { - printf(" ERROR: mismatch at byte %ld\n", i ); - return FALSE; + PRINT_ERR(" ERROR: mismatch at byte %ld\n", i ); + return -1; } } rc = funcs->C_CloseAllSessions( slot_id ); if (rc != CKR_OK) { show_error(" C_CloseAllSessions #1", rc ); - return FALSE; + return rc; } printf("Success.\n"); - return TRUE; + return 0; } // // -int do_EncryptAES_Multipart_CBC( void ) +CK_RV do_EncryptAES_Multipart_CBC( void ) { CK_BYTE original[BIG_REQUEST]; CK_BYTE crypt1 [BIG_REQUEST]; @@ -538,7 +545,7 @@ int do_EncryptAES_Multipart_CBC( void ) rc = funcs->C_OpenSession( slot_id, flags, NULL, NULL, &session ); if (rc != CKR_OK) { show_error(" C_OpenSession #1", rc ); - return FALSE; + return rc; } @@ -549,7 +556,7 @@ int do_EncryptAES_Multipart_CBC( void ) rc = funcs->C_Login( session, CKU_USER, user_pin, user_pin_len ); if (rc != CKR_OK) { show_error(" C_Login #1", rc ); - return FALSE; + return rc; } mech.mechanism = CKM_AES_KEY_GEN; @@ -562,7 +569,7 @@ int do_EncryptAES_Multipart_CBC( void ) rc = funcs->C_GenerateKey( session, &mech, key_gen_tmpl, 1, &h_key ); if (rc != CKR_OK) { show_error(" C_GenerateKey #1", rc ); - return FALSE; + return rc; } @@ -582,7 +589,7 @@ int do_EncryptAES_Multipart_CBC( void ) rc = funcs->C_EncryptInit( session, &mech, h_key ); if (rc != CKR_OK) { show_error(" C_EncryptInit #1", rc ); - return FALSE; + return rc; } // use normal ecb mode to encrypt data1 @@ -591,7 +598,7 @@ int do_EncryptAES_Multipart_CBC( void ) rc = funcs->C_Encrypt( session, original, orig_len, crypt1, &crypt1_len ); if (rc != CKR_OK) { show_error(" C_Encrypt #1", rc ); - return FALSE; + return rc; } // use multipart cbc mode to encrypt data2 in 1024 byte chunks @@ -599,7 +606,7 @@ int do_EncryptAES_Multipart_CBC( void ) rc = funcs->C_EncryptInit( session, &mech, h_key ); if (rc != CKR_OK) { show_error(" C_EncryptInit #2", rc ); - return FALSE; + return rc; } i = k = 0; @@ -620,7 +627,7 @@ int do_EncryptAES_Multipart_CBC( void ) &crypt2[k], &tmp ); if (rc != CKR_OK) { show_error(" C_EncryptUpdate #1", rc ); - return FALSE; + return rc; } k += tmp; @@ -632,26 +639,26 @@ int do_EncryptAES_Multipart_CBC( void ) rc = funcs->C_EncryptFinal( session, NULL, &tmp ); if (rc != CKR_OK) { show_error(" C_EncryptFinal #2", rc ); - return FALSE; + return rc; } if (tmp != 0) { - printf(" ERROR: EncryptFinal wants to return %ld bytes\n", tmp ); - return FALSE; + PRINT_ERR(" ERROR: EncryptFinal wants to return %ld bytes\n", tmp ); + return -1; } if (crypt2_len != crypt1_len) { - printf(" ERROR: crypt1_len = %ld, crypt2_len = %ld\n", crypt1_len, crypt2_len ); - return FALSE; + PRINT_ERR(" ERROR: crypt1_len = %ld, crypt2_len = %ld\n", crypt1_len, crypt2_len ); + return -1; } // compare both encrypted blocks. they'd better be equal // for (i=0; i < crypt1_len; i++) { if (crypt1[i] != crypt2[i]) { - printf(" ERROR: mismatch. crypt1 != crypt2 at byte %ld\n", i ); - return FALSE; + PRINT_ERR(" ERROR: mismatch. crypt1 != crypt2 at byte %ld\n", i ); + return -1; } } @@ -662,14 +669,14 @@ int do_EncryptAES_Multipart_CBC( void ) rc = funcs->C_DecryptInit( session, &mech, h_key ); if (rc != CKR_OK) { show_error(" C_DecryptInit #1", rc ); - return FALSE; + return rc; } decrypt1_len = sizeof(decrypt1); rc = funcs->C_Decrypt( session, crypt1, crypt1_len, decrypt1, &decrypt1_len ); if (rc != CKR_OK) { show_error(" C_Decrypt #1", rc ); - return FALSE; + return rc; } // use multipart cbc mode to encrypt data2 in 1024 byte chunks @@ -677,7 +684,7 @@ int do_EncryptAES_Multipart_CBC( void ) rc = funcs->C_DecryptInit( session, &mech, h_key ); if (rc != CKR_OK) { show_error(" C_DecryptInit #1", rc ); - return FALSE; + return rc; } @@ -699,7 +706,7 @@ int do_EncryptAES_Multipart_CBC( void ) &decrypt2[k], &tmp ); if (rc != CKR_OK) { show_error(" C_DecryptUpdate #1", rc ); - return FALSE; + return rc; } k += tmp; @@ -711,25 +718,25 @@ int do_EncryptAES_Multipart_CBC( void ) rc = funcs->C_DecryptFinal( session, NULL, &tmp ); if (rc != CKR_OK) { show_error(" C_DecryptFinal #2", rc ); - return FALSE; + return rc; } if (tmp != 0) { - printf(" ERROR: DecryptFinal wants to return %ld bytes\n", tmp ); - return FALSE; + PRINT_ERR(" ERROR: DecryptFinal wants to return %ld bytes\n", tmp ); + return -1; } if (decrypt2_len != decrypt1_len) { - printf(" ERROR: decrypt1_len = %ld, decrypt2_len = %ld\n", decrypt1_len, decrypt2_len ); - return FALSE; + PRINT_ERR(" ERROR: decrypt1_len = %ld, decrypt2_len = %ld\n", decrypt1_len, decrypt2_len ); + return -1; } // compare both decrypted blocks. they'd better be equal // for (i=0; i < decrypt1_len; i++) { if (crypt1[i] != crypt2[i]) { - printf(" ERROR: mismatch. decrypt1 != decrypt2 at byte %ld\n", i ); - return FALSE; + PRINT_ERR(" ERROR: mismatch. decrypt1 != decrypt2 at byte %ld\n", i ); + return -1; } } @@ -737,8 +744,8 @@ int do_EncryptAES_Multipart_CBC( void ) // for (i=0; i < orig_len; i++) { if (original[i] != decrypt1[i]) { - printf(" ERROR: decrypted mismatch: original != decrypt at byte %ld\n", i ); - return FALSE; + PRINT_ERR(" ERROR: decrypted mismatch: original != decrypt at byte %ld\n", i ); + return -1; } } @@ -746,17 +753,17 @@ int do_EncryptAES_Multipart_CBC( void ) rc = funcs->C_CloseAllSessions( slot_id ); if (rc != CKR_OK) { show_error(" C_CloseAllSessions #1", rc ); - return FALSE; + return rc; } printf("Success.\n"); - return TRUE; + return 0; } // // -int do_EncryptAES_Multipart_CBC_PAD( void ) +CK_RV do_EncryptAES_Multipart_CBC_PAD( void ) { CK_BYTE original[BIG_REQUEST]; @@ -789,7 +796,7 @@ int do_EncryptAES_Multipart_CBC_PAD( void ) rc = funcs->C_OpenSession( slot_id, flags, NULL, NULL, &session ); if (rc != CKR_OK) { show_error(" C_OpenSession #1", rc ); - return FALSE; + return rc; } @@ -800,7 +807,7 @@ int do_EncryptAES_Multipart_CBC_PAD( void ) rc = funcs->C_Login( session, CKU_USER, user_pin, user_pin_len ); if (rc != CKR_OK) { show_error(" C_Login #1", rc ); - return FALSE; + return rc; } mech.mechanism = CKM_AES_KEY_GEN; @@ -813,7 +820,7 @@ int do_EncryptAES_Multipart_CBC_PAD( void ) rc = funcs->C_GenerateKey( session, &mech, key_gen_tmpl, 1, &h_key ); if (rc != CKR_OK) { show_error(" C_GenerateKey #1", rc ); - return FALSE; + return rc; } @@ -834,7 +841,7 @@ int do_EncryptAES_Multipart_CBC_PAD( void ) rc = funcs->C_EncryptInit( session, &mech, h_key ); if (rc != CKR_OK) { show_error(" C_EncryptInit #1", rc ); - return FALSE; + return rc; } // use normal ecb mode to encrypt data1 @@ -843,7 +850,7 @@ int do_EncryptAES_Multipart_CBC_PAD( void ) rc = funcs->C_Encrypt( session, original, orig_len, crypt1, &crypt1_len ); if (rc != CKR_OK) { show_error(" C_Encrypt #1", rc ); - return FALSE; + return rc; } // use multipart cbc mode to encrypt data2 in chunks @@ -851,7 +858,7 @@ int do_EncryptAES_Multipart_CBC_PAD( void ) rc = funcs->C_EncryptInit( session, &mech, h_key ); if (rc != CKR_OK) { show_error(" C_EncryptInit #2", rc ); - return FALSE; + return rc; } i = k = 0; @@ -872,7 +879,7 @@ int do_EncryptAES_Multipart_CBC_PAD( void ) &crypt2[k], &len ); if (rc != CKR_OK) { show_error(" C_EncryptUpdate #1", rc ); - return FALSE; + return rc; } k += len; @@ -884,23 +891,23 @@ int do_EncryptAES_Multipart_CBC_PAD( void ) rc = funcs->C_EncryptFinal( session, &crypt2[k], &crypt2_len ); if (rc != CKR_OK) { show_error(" C_EncryptFinal #2", rc ); - return FALSE; + return rc; } crypt2_len += k; if (crypt2_len != crypt1_len) { - printf(" ERROR: encrypted lengths don't match\n"); - printf(" crypt2_len == %ld, crypt1_len == %ld\n", crypt2_len, crypt1_len ); - return FALSE; + PRINT_ERR(" ERROR: encrypted lengths don't match\n"); + PRINT_ERR(" crypt2_len == %ld, crypt1_len == %ld\n", crypt2_len, crypt1_len ); + return -1; } // compare both encrypted blocks. they'd better be equal // for (i=0; i < crypt2_len; i++) { if (crypt1[i] != crypt2[i]) { - printf(" ERROR: encrypted mismatch: crypt1 != crypt2 at byte %ld\n", i ); - return FALSE; + PRINT_ERR(" ERROR: encrypted mismatch: crypt1 != crypt2 at byte %ld\n", i ); + return -1; } } @@ -911,14 +918,14 @@ int do_EncryptAES_Multipart_CBC_PAD( void ) rc = funcs->C_DecryptInit( session, &mech, h_key ); if (rc != CKR_OK) { show_error(" C_DecryptInit #1", rc ); - return FALSE; + return rc; } decrypt1_len = sizeof(decrypt1); rc = funcs->C_Decrypt( session, crypt1, crypt1_len, decrypt1, &decrypt1_len ); if (rc != CKR_OK) { show_error(" C_Decrypt #1", rc ); - return FALSE; + return rc; } // use multipart cbc mode to encrypt data2 in 1024 byte chunks @@ -926,7 +933,7 @@ int do_EncryptAES_Multipart_CBC_PAD( void ) rc = funcs->C_DecryptInit( session, &mech, h_key ); if (rc != CKR_OK) { show_error(" C_DecryptInit #1", rc ); - return FALSE; + return rc; } @@ -948,7 +955,7 @@ int do_EncryptAES_Multipart_CBC_PAD( void ) &decrypt2[k], &len ); if (rc != CKR_OK) { show_error(" C_DecryptUpdate #1", rc ); - return FALSE; + return rc; } k += len; @@ -960,21 +967,21 @@ int do_EncryptAES_Multipart_CBC_PAD( void ) rc = funcs->C_DecryptFinal( session, &decrypt2[k], &decrypt2_len ); if (rc != CKR_OK) { show_error(" C_DecryptFinal #2", rc ); - return FALSE; + return rc; } decrypt2_len += k; if (decrypt2_len != decrypt1_len) { - printf(" ERROR: decrypted lengths don't match\n"); - printf(" decrypt1_len == %ld, decrypt2_len == %ld\n", decrypt1_len, decrypt2_len ); - return FALSE; + PRINT_ERR(" ERROR: decrypted lengths don't match\n"); + PRINT_ERR(" decrypt1_len == %ld, decrypt2_len == %ld\n", decrypt1_len, decrypt2_len ); + return -1; } if (decrypt2_len != orig_len) { - printf(" ERROR: decrypted lengths don't match the original\n"); - printf(" decrypt_len == %ld, orig_len == %ld\n", decrypt1_len, orig_len ); - return FALSE; + PRINT_ERR(" ERROR: decrypted lengths don't match the original\n"); + PRINT_ERR(" decrypt_len == %ld, orig_len == %ld\n", decrypt1_len, orig_len ); + return -1; } @@ -982,8 +989,8 @@ int do_EncryptAES_Multipart_CBC_PAD( void ) // for (i=0; i < decrypt1_len; i++) { if (decrypt1[i] != decrypt2[i]) { - printf(" ERROR: decrypted mismatch: data1 != data2 at byte %ld\n", i ); - return FALSE; + PRINT_ERR(" ERROR: decrypted mismatch: data1 != data2 at byte %ld\n", i ); + return -1; } } @@ -991,8 +998,8 @@ int do_EncryptAES_Multipart_CBC_PAD( void ) // for (i=0; i < orig_len; i++) { if (original[i] != decrypt2[i]) { - printf(" ERROR: decrypted mismatch: original != decrypted at byte %ld\n", i ); - return FALSE; + PRINT_ERR(" ERROR: decrypted mismatch: original != decrypted at byte %ld\n", i ); + return -1; } } @@ -1000,17 +1007,17 @@ int do_EncryptAES_Multipart_CBC_PAD( void ) rc = funcs->C_CloseAllSessions( slot_id ); if (rc != CKR_OK) { show_error(" C_CloseAllSessions #1", rc ); - return FALSE; + return rc; } printf("Success.\n"); - return TRUE; + return 0; } // // -int do_WrapUnwrapAES_ECB( void ) +CK_RV do_WrapUnwrapAES_ECB( void ) { CK_BYTE data1[BIG_REQUEST]; CK_BYTE data2[BIG_REQUEST]; @@ -1026,8 +1033,8 @@ int do_WrapUnwrapAES_ECB( void ) CK_ULONG user_pin_len; CK_ULONG wrapped_data_len; CK_ULONG i; - CK_ULONG len1, len2; - CK_RV rc, key_size = AES_KEY_SIZE_256; + CK_ULONG len1, len2, key_size = AES_KEY_SIZE_256; + CK_RV rc, loc_rc; CK_ATTRIBUTE key_gen_tmpl[] = { {CKA_VALUE_LEN, &key_size, sizeof(CK_ULONG) } }; @@ -1050,7 +1057,7 @@ int do_WrapUnwrapAES_ECB( void ) rc = funcs->C_OpenSession( slot_id, flags, NULL, NULL, &session ); if (rc != CKR_OK) { show_error(" C_OpenSession #1", rc ); - return FALSE; + return rc; } @@ -1148,13 +1155,15 @@ int do_WrapUnwrapAES_ECB( void ) } if (len1 != len2) { - printf(" ERROR: lengths don't match\n"); + PRINT_ERR(" ERROR: lengths don't match\n"); + rc = -1; goto error; } for (i=0; i <len1; i++) { if (data1[i] != data2[i]) { - printf(" ERROR: mismatch at byte %ld\n", i ); + PRINT_ERR(" ERROR: mismatch at byte %ld\n", i ); + rc = -1; goto error; } } @@ -1203,7 +1212,7 @@ int do_WrapUnwrapAES_ECB( void ) data, &data_len ); if (rc != CKR_KEY_NOT_WRAPPABLE) { show_error(" C_WrapKey #2", rc ); - printf(" Expected CKR_KEY_NOT_WRAPPABLE\n" ); + PRINT_ERR(" Expected CKR_KEY_NOT_WRAPPABLE\n" ); goto error; } } @@ -1211,24 +1220,24 @@ int do_WrapUnwrapAES_ECB( void ) rc = funcs->C_CloseAllSessions( slot_id ); if (rc != CKR_OK) { show_error(" C_CloseAllSessions #1", rc ); - return FALSE; + return rc; } printf("Success.\n"); - return TRUE; + return 0; error: - rc = funcs->C_CloseSession (session); - if (rc != CKR_OK) - show_error (" C_CloseSession #2", rc); + loc_rc = funcs->C_CloseSession (session); + if (loc_rc != CKR_OK) + show_error (" C_CloseSession #2", loc_rc); - return FALSE; + return rc; } // // -int do_WrapUnwrapAES_CBC( void ) +CK_RV do_WrapUnwrapAES_CBC( void ) { CK_BYTE data1[BIG_REQUEST]; CK_BYTE data2[BIG_REQUEST]; @@ -1269,7 +1278,7 @@ int do_WrapUnwrapAES_CBC( void ) rc = funcs->C_OpenSession( slot_id, flags, NULL, NULL, &session ); if (rc != CKR_OK) { show_error(" C_OpenSession #1", rc ); - return FALSE; + return rc; } @@ -1280,7 +1289,7 @@ int do_WrapUnwrapAES_CBC( void ) rc = funcs->C_Login( session, CKU_USER, user_pin, user_pin_len ); if (rc != CKR_OK) { show_error(" C_Login #1", rc ); - return FALSE; + return rc; } mech.mechanism = CKM_AES_KEY_GEN; @@ -1293,13 +1302,13 @@ int do_WrapUnwrapAES_CBC( void ) rc = funcs->C_GenerateKey( session, &mech, key_gen_tmpl, 1, &h_key ); if (rc != CKR_OK) { show_error(" C_GenerateKey #1", rc ); - return FALSE; + return rc; } rc = funcs->C_GenerateKey( session, &mech, key_gen_tmpl, 1, &w_key ); if (rc != CKR_OK) { show_error(" C_GenerateKey #2", rc ); - return FALSE; + return rc; } @@ -1319,13 +1328,13 @@ int do_WrapUnwrapAES_CBC( void ) rc = funcs->C_EncryptInit( session, &mech, h_key ); if (rc != CKR_OK) { show_error(" C_EncryptInit #1", rc ); - return FALSE; + return rc; } rc = funcs->C_Encrypt( session, data1, len1, data1, &len1 ); if (rc != CKR_OK) { show_error(" C_Encrypt #1", rc ); - return FALSE; + return rc; } @@ -1338,7 +1347,7 @@ int do_WrapUnwrapAES_CBC( void ) (CK_BYTE *)&wrapped_data, &wrapped_data_len ); if (rc != CKR_OK) { show_error(" C_WrapKey #1", rc ); - return FALSE; + return rc; } rc = funcs->C_UnwrapKey( session, &mech, @@ -1348,7 +1357,7 @@ int do_WrapUnwrapAES_CBC( void ) &uw_key ); if (rc != CKR_OK) { show_error(" C_UnWrapKey #1", rc ); - return FALSE; + return rc; } @@ -1357,24 +1366,24 @@ int do_WrapUnwrapAES_CBC( void ) rc = funcs->C_DecryptInit( session, &mech, uw_key ); if (rc != CKR_OK) { show_error(" C_DecryptInit #1", rc ); - return FALSE; + return rc; } rc = funcs->C_Decrypt( session, data1, len1, data1, &len1 ); if (rc != CKR_OK) { show_error(" C_Decrypt #1", rc ); - return FALSE; + return rc; } if (len1 != len2) { - printf(" ERROR: lengths don't match\n"); - return FALSE; + PRINT_ERR(" ERROR: lengths don't match\n"); + return -1; } for (i=0; i <len1; i++) { if (data1[i] != data2[i]) { - printf(" ERROR: mismatch at byte %ld\n", i ); - return FALSE; + PRINT_ERR(" ERROR: mismatch at byte %ld\n", i ); + return -1; } } @@ -1414,7 +1423,7 @@ int do_WrapUnwrapAES_CBC( void ) rc = funcs->C_CreateObject( session, tmpl, 10, &priv_key ); if (rc != CKR_OK) { show_error(" C_CreateObject #1", rc ); - return FALSE; + return rc; } rc = funcs->C_WrapKey( session, &mech, @@ -1422,25 +1431,25 @@ int do_WrapUnwrapAES_CBC( void ) data, &data_len ); if (rc != CKR_KEY_NOT_WRAPPABLE) { show_error(" C_WrapKey #2", rc ); - printf(" Expected CKR_KEY_NOT_WRAPPABLE\n" ); - return FALSE; + PRINT_ERR(" Expected CKR_KEY_NOT_WRAPPABLE\n" ); + return rc; } } rc = funcs->C_CloseAllSessions( slot_id ); if (rc != CKR_OK) { show_error(" C_CloseAllSessions #1", rc ); - return FALSE; + return rc; } printf("Success.\n"); - return TRUE; + return 0; } // // -int do_WrapUnwrapAES_CBC_PAD( void ) +CK_RV do_WrapUnwrapAES_CBC_PAD( void ) { CK_BYTE original[BIG_REQUEST]; CK_BYTE cipher [BIG_REQUEST + AES_BLOCK_SIZE]; @@ -1484,7 +1493,7 @@ int do_WrapUnwrapAES_CBC_PAD( void ) rc = funcs->C_OpenSession( slot_id, flags, NULL, NULL, &session ); if (rc != CKR_OK) { show_error(" C_OpenSession #1", rc ); - return FALSE; + return rc; } @@ -1495,7 +1504,7 @@ int do_WrapUnwrapAES_CBC_PAD( void ) rc = funcs->C_Login( session, CKU_USER, user_pin, user_pin_len ); if (rc != CKR_OK) { show_error(" C_Login #1", rc ); - return FALSE; + return rc; } mech.mechanism = CKM_AES_KEY_GEN; @@ -1508,13 +1517,13 @@ int do_WrapUnwrapAES_CBC_PAD( void ) rc = funcs->C_GenerateKey( session, &mech, key_gen_tmpl, 1, &h_key ); if (rc != CKR_OK) { show_error(" C_GenerateKey #1", rc ); - return FALSE; + return rc; } rc = funcs->C_GenerateKey( session, &mech, key_gen_tmpl, 1, &w_key ); if (rc != CKR_OK) { show_error(" C_GenerateKey #2", rc ); - return FALSE; + return rc; } @@ -1532,14 +1541,14 @@ int do_WrapUnwrapAES_CBC_PAD( void ) rc = funcs->C_EncryptInit( session, &mech, h_key ); if (rc != CKR_OK) { show_error(" C_EncryptInit #1", rc ); - return FALSE; + return rc; } cipher_len = sizeof(cipher); rc = funcs->C_Encrypt( session, original, orig_len, cipher, &cipher_len ); if (rc != CKR_OK) { show_error(" C_Encrypt #1", rc ); - return FALSE; + return rc; } @@ -1552,7 +1561,7 @@ int do_WrapUnwrapAES_CBC_PAD( void ) wrapped_data, &wrapped_data_len ); if (rc != CKR_OK) { show_error(" C_WrapKey #1", rc ); - return FALSE; + return rc; } rc = funcs->C_UnwrapKey( session, &mech, @@ -1562,7 +1571,7 @@ int do_WrapUnwrapAES_CBC_PAD( void ) &uw_key ); if (rc != CKR_OK) { show_error(" C_UnWrapKey #1", rc ); - return FALSE; + return rc; } @@ -1571,25 +1580,25 @@ int do_WrapUnwrapAES_CBC_PAD( void ) rc = funcs->C_DecryptInit( session, &mech, uw_key ); if (rc != CKR_OK) { show_error(" C_DecryptInit #1", rc ); - return FALSE; + return rc; } decipher_len = sizeof(decipher); rc = funcs->C_Decrypt( session, cipher, cipher_len, decipher, &decipher_len ); if (rc != CKR_OK) { show_error(" C_Decrypt #1", rc ); - return FALSE; + return rc; } if (orig_len != decipher_len) { - printf(" ERROR: lengths don't match: %ld vs %ld\n", orig_len, decipher_len ); - return FALSE; + PRINT_ERR(" ERROR: lengths don't match: %ld vs %ld\n", orig_len, decipher_len ); + return -1; } for (i=0; i < orig_len; i++) { if (original[i] != decipher[i]) { - printf(" ERROR: mismatch at byte %ld\n", i ); - return FALSE; + PRINT_ERR(" ERROR: mismatch at byte %ld\n", i ); + return -1; } } @@ -1624,7 +1633,7 @@ int do_WrapUnwrapAES_CBC_PAD( void ) &publ_key, &priv_key ); if (rc != CKR_OK) { show_error(" C_GenerateKeyPair #1", rc ); - return FALSE; + return rc; } @@ -1637,7 +1646,7 @@ int do_WrapUnwrapAES_CBC_PAD( void ) wrapped_data, &wrapped_data_len ); if (rc != CKR_OK) { show_error(" C_WrapKey #2", rc ); - return FALSE; + return rc; } rc = funcs->C_UnwrapKey( session, &mech, @@ -1647,7 +1656,7 @@ int do_WrapUnwrapAES_CBC_PAD( void ) &uw_key ); if (rc != CKR_OK) { show_error(" C_UnWrapKey #2", rc ); - return FALSE; + return rc; } // encrypt something with the public key @@ -1659,7 +1668,7 @@ int do_WrapUnwrapAES_CBC_PAD( void ) rc = funcs->C_EncryptInit( session, &mech2, publ_key ); if (rc != CKR_OK) { show_error(" C_EncryptInit #2", rc ); - return FALSE; + return rc; } // for RSA operations, keep the input data size smaller than @@ -1671,7 +1680,7 @@ int do_WrapUnwrapAES_CBC_PAD( void ) rc = funcs->C_Encrypt( session, original, orig_len, cipher, &cipher_len ); if (rc != CKR_OK) { show_error(" C_Encrypt #2", rc ); - return FALSE; + return rc; } // now, decrypt the data using the unwrapped private key. @@ -1679,25 +1688,25 @@ int do_WrapUnwrapAES_CBC_PAD( void ) rc = funcs->C_DecryptInit( session, &mech2, uw_key ); if (rc != CKR_OK) { show_error(" C_DecryptInit #1", rc ); - return FALSE; + return rc; } decipher_len = sizeof(decipher); rc = funcs->C_Decrypt( session, cipher, cipher_len, decipher, &decipher_len ); if (rc != CKR_OK) { show_error(" C_Decrypt #1", rc ); - return FALSE; + return rc; } if (orig_len != decipher_len) { - printf(" ERROR: lengths don't match: %ld vs %ld\n", orig_len, decipher_len ); - return FALSE; + PRINT_ERR(" ERROR: lengths don't match: %ld vs %ld\n", orig_len, decipher_len ); + return -1; } for (i=0; i < orig_len; i++) { if (original[i] != decipher[i]) { - printf(" ERROR: mismatch at byte %ld\n", i ); - return FALSE; + PRINT_ERR(" ERROR: mismatch at byte %ld\n", i ); + return -1; } } } @@ -1705,65 +1714,22 @@ int do_WrapUnwrapAES_CBC_PAD( void ) rc = funcs->C_CloseAllSessions( slot_id ); if (rc != CKR_OK) { show_error(" C_CloseAllSessions #1", rc ); - return FALSE; - } - - printf("Success.\n"); - return TRUE; -} - - -int main(int argc, char **argv) -{ - CK_C_INITIALIZE_ARGS cinit_args; - int rc, i; - - - rc = do_ParseArgs(argc, argv); - if ( rc != 1) return rc; - - printf("Using slot #%lu...\n\n", SLOT_ID ); - printf("With option: no_stop: %d\n", no_stop); - - rc = do_GetFunctionList(); - if (!rc) { - fprintf(stderr, "ERROR do_GetFunctionList() Failed , rc = 0x%0x\n", rc); - return rc; - } - - memset( &cinit_args, 0x0, sizeof(cinit_args) ); - cinit_args.flags = CKF_OS_LOCKING_OK; - - // SAB Add calls to ALL functions before the C_Initialize gets hit - - funcs->C_Initialize( &cinit_args ); - - { - CK_SESSION_HANDLE hsess = 0; - - rc = funcs->C_GetFunctionStatus(hsess); - if (rc != CKR_FUNCTION_NOT_PARALLEL) - return rc; - - rc = funcs->C_CancelFunction(hsess); - if (rc != CKR_FUNCTION_NOT_PARALLEL) - return rc; - } - aes_functions(); + printf("Success.\n"); + return 0; } -int aes_functions() +CK_RV aes_functions() { SYSTEMTIME t1, t2; - int rc; + CK_RV rc; GetSystemTime(&t1); rc = do_EncryptAES_ECB(); - if (!rc) { - fprintf (stderr, "ERROR do_EncryptAES_ECB failed, rc = 0x%0x\n", rc); + if (rc) { + PRINT_ERR("ERROR do_EncryptAES_ECB failed, rc = 0x%lx\n", rc); if (!no_stop) return rc; } @@ -1772,8 +1738,8 @@ int aes_functions() GetSystemTime(&t1); rc = do_EncryptAES_CBC(); - if (!rc) { - fprintf (stderr, "ERROR do_EncryptAES_CBC failed, rc = 0x%0x\n", rc); + if (rc) { + PRINT_ERR("ERROR do_EncryptAES_CBC failed, rc = 0x%lx\n", rc); if (!no_stop) return rc; } @@ -1782,8 +1748,8 @@ int aes_functions() GetSystemTime(&t1); rc = do_EncryptAES_Multipart_ECB(); - if (!rc) { - fprintf (stderr, "ERROR do_EncryptAES_Multipart_ECB failed, rc = 0x%0x\n", rc); + if (rc) { + PRINT_ERR("ERROR do_EncryptAES_Multipart_ECB failed, rc = 0x%lx\n", rc); if (!no_stop) return rc; } @@ -1792,8 +1758,8 @@ int aes_functions() GetSystemTime(&t1); rc = do_EncryptAES_Multipart_CBC(); - if (!rc) { - fprintf (stderr, "ERROR do_EncryptAES_Multipart_CBC failed, rc = 0x%0x\n", rc); + if (rc) { + PRINT_ERR("ERROR do_EncryptAES_Multipart_CBC failed, rc = 0x%lx\n", rc); if (!no_stop) return rc; } @@ -1802,8 +1768,8 @@ int aes_functions() GetSystemTime(&t1); rc = do_EncryptAES_Multipart_CBC_PAD(); - if (!rc) { - fprintf (stderr, "ERROR do_EncryptAES_Multipart_CBC_PAD failed, rc = 0x%0x\n", rc); + if (rc) { + PRINT_ERR("ERROR do_EncryptAES_Multipart_CBC_PAD failed, rc = 0x%lx\n", rc); if (!no_stop) return rc; } @@ -1812,8 +1778,8 @@ int aes_functions() GetSystemTime(&t1); rc = do_WrapUnwrapAES_ECB(); - if (!rc) { - fprintf (stderr, "ERROR do_WrapUnwrapAES_EBC failed, rc = 0x%0x\n", rc); + if (rc) { + PRINT_ERR("ERROR do_WrapUnwrapAES_EBC failed, rc = 0x%lx\n", rc); if (!no_stop) return rc; } @@ -1822,8 +1788,8 @@ int aes_functions() GetSystemTime(&t1); rc = do_WrapUnwrapAES_CBC(); - if (!rc) { - fprintf (stderr, "ERROR do_WrapUnwrapAES_CBC failed, rc = 0x%0x\n", rc); + if (rc) { + PRINT_ERR("ERROR do_WrapUnwrapAES_CBC failed, rc = 0x%lx\n", rc); if (!no_stop) return rc; } @@ -1832,13 +1798,58 @@ int aes_functions() GetSystemTime(&t1); rc = do_WrapUnwrapAES_CBC_PAD(); - if (!rc) { - fprintf (stderr, "ERROR do_WrapUnwrapAES_CBC_PAD failed, rc = 0x%0x\n", rc); + if (rc) { + PRINT_ERR("ERROR do_WrapUnwrapAES_CBC_PAD failed, rc = 0x%lx\n", rc); if (!no_stop) return rc; } GetSystemTime(&t2); process_time( t1, t2 ); - return TRUE; + return 0; } + +int main(int argc, char **argv) +{ + CK_C_INITIALIZE_ARGS cinit_args; + int rc; + CK_RV rv; + + rc = do_ParseArgs(argc, argv); + if ( rc != 1) + return rc; + + printf("Using slot #%lu...\n\n", SLOT_ID ); + printf("With option: no_stop: %d\n", no_stop); + + rc = do_GetFunctionList(); + if (!rc) { + PRINT_ERR("ERROR do_GetFunctionList() Failed , rc = 0x%0x\n", rc); + return rc; + } + + memset( &cinit_args, 0x0, sizeof(cinit_args) ); + cinit_args.flags = CKF_OS_LOCKING_OK; + + // SAB Add calls to ALL functions before the C_Initialize gets hit + + funcs->C_Initialize( &cinit_args ); + + { + CK_SESSION_HANDLE hsess = 0; + + rc = funcs->C_GetFunctionStatus(hsess); + if (rc != CKR_FUNCTION_NOT_PARALLEL) + return rc; + + rc = funcs->C_CancelFunction(hsess); + if (rc != CKR_FUNCTION_NOT_PARALLEL) + return rc; + + } + + rv = aes_functions(); + /* make sure we return non-zero if rv is non-zero */ + return ((rv==0) || (rv % 256) ? rv : -1); +} + ------------------------------------------------------------------------------ This SF.net email is sponsored by Make an app they can't live without Enter the BlackBerry Developer Challenge http://p.sf.net/sfu/RIM-dev2dev _______________________________________________ Opencryptoki-tech mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/opencryptoki-tech
