|
Packit |
8681c6 |
/*
|
|
Packit |
8681c6 |
* COPYRIGHT (c) International Business Machines Corp. 2005-2017
|
|
Packit |
8681c6 |
*
|
|
Packit |
8681c6 |
* This program is provided under the terms of the Common Public License,
|
|
Packit |
8681c6 |
* version 1.0 (CPL-1.0). Any use, reproduction or distribution for this
|
|
Packit |
8681c6 |
* software constitutes recipient's acceptance of CPL-1.0 terms which can be
|
|
Packit |
8681c6 |
* found in the file LICENSE file or at
|
|
Packit |
8681c6 |
* https://opensource.org/licenses/cpl1.0.php
|
|
Packit |
8681c6 |
*/
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
#include <windows.h>
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
#include <stdio.h>
|
|
Packit |
8681c6 |
#include <stdlib.h>
|
|
Packit |
8681c6 |
#include <string.h>
|
|
Packit |
8681c6 |
#include <memory.h>
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
#include "pkcs11types.h"
|
|
Packit |
8681c6 |
#include "regress.h"
|
|
Packit |
8681c6 |
#include "common.c"
|
|
Packit |
8681c6 |
#include "mech_to_str.h"
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
static CK_BBOOL true = TRUE;
|
|
Packit |
8681c6 |
static CK_BBOOL false = FALSE;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
//
|
|
Packit |
8681c6 |
//
|
|
Packit |
8681c6 |
CK_RV do_SignVerify_SSL3_MD5_MAC(CK_SESSION_HANDLE session)
|
|
Packit |
8681c6 |
{
|
|
Packit |
8681c6 |
CK_MECHANISM mech;
|
|
Packit |
8681c6 |
CK_ULONG mac_size;
|
|
Packit |
8681c6 |
CK_ULONG i;
|
|
Packit |
8681c6 |
CK_RV rc = CKR_OK;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
CK_OBJECT_HANDLE h_key;
|
|
Packit |
8681c6 |
CK_OBJECT_CLASS key_class = CKO_SECRET_KEY;
|
|
Packit |
8681c6 |
CK_KEY_TYPE key_type = CKK_GENERIC_SECRET;
|
|
Packit |
8681c6 |
CK_BBOOL false = FALSE;
|
|
Packit |
8681c6 |
CK_BYTE hash[MD5_HASH_LEN];
|
|
Packit |
8681c6 |
CK_BYTE data[50];
|
|
Packit |
8681c6 |
CK_BYTE data2[500];
|
|
Packit |
8681c6 |
CK_BYTE key_data[48];
|
|
Packit |
8681c6 |
CK_ULONG hash_len;
|
|
Packit |
8681c6 |
CK_ULONG data_len;
|
|
Packit |
8681c6 |
CK_ATTRIBUTE key_attribs[] = {
|
|
Packit |
8681c6 |
{CKA_CLASS, &key_class, sizeof(key_class)},
|
|
Packit |
8681c6 |
{CKA_KEY_TYPE, &key_type, sizeof(key_type)},
|
|
Packit |
8681c6 |
{CKA_TOKEN, &false, sizeof(false)},
|
|
Packit |
8681c6 |
{CKA_VALUE, &key_data, sizeof(key_data)}
|
|
Packit |
8681c6 |
};
|
|
Packit |
8681c6 |
CK_SLOT_ID slot_id = SLOT_ID;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
testcase_begin("starting do_SignVerify_SSL3_MD5_MAC...\n");
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
mac_size = 16;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
mech.mechanism = CKM_SSL3_MD5_MAC;
|
|
Packit |
8681c6 |
mech.ulParameterLen = sizeof(CK_ULONG);
|
|
Packit |
8681c6 |
mech.pParameter = &mac_size;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
/** skip test if the slot doesn't support this mechanism **/
|
|
Packit |
8681c6 |
if (!mech_supported(slot_id, mech.mechanism)) {
|
|
Packit |
8681c6 |
testsuite_skip(48, "Slot %u doesn't support %s (%u)",
|
|
Packit |
8681c6 |
(unsigned int) slot_id,
|
|
Packit |
8681c6 |
mech_to_str(mech.mechanism),
|
|
Packit |
8681c6 |
(unsigned int) mech.mechanism);
|
|
Packit |
8681c6 |
goto skipped;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
for (i = 0; i < 48; i++)
|
|
Packit |
8681c6 |
key_data[i] = i;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
memset(data, 0xb, 50);
|
|
Packit |
8681c6 |
data_len = 50;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
rc = funcs->C_CreateObject(session, key_attribs, 4, &h_key);
|
|
Packit |
8681c6 |
if (rc != CKR_OK) {
|
|
Packit |
8681c6 |
testcase_error("C_CreateObject() rc = %s", p11_get_ckr(rc));
|
|
Packit |
8681c6 |
return rc;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
testcase_new_assertion();
|
|
Packit |
8681c6 |
rc = funcs->C_SignInit(session, &mech, h_key);
|
|
Packit |
8681c6 |
if (rc != CKR_OK) {
|
|
Packit |
8681c6 |
testcase_error("C_SignInit() rc = %s", p11_get_ckr(rc));
|
|
Packit |
8681c6 |
goto done;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
hash_len = sizeof(hash);
|
|
Packit |
8681c6 |
rc = funcs->C_Sign(session, data, data_len, hash, &hash_len);
|
|
Packit |
8681c6 |
if (rc != CKR_OK) {
|
|
Packit |
8681c6 |
testcase_fail("C_Sign() rc = %s", p11_get_ckr(rc));
|
|
Packit |
8681c6 |
goto done;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
if (hash_len != mac_size) {
|
|
Packit |
8681c6 |
testcase_fail("Error: C_Sign generated bad MAC length\n");
|
|
Packit |
8681c6 |
goto done;
|
|
Packit |
8681c6 |
} else {
|
|
Packit |
8681c6 |
testcase_pass("Successfully signed.");
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
testcase_new_assertion();
|
|
Packit |
8681c6 |
rc = funcs->C_VerifyInit(session, &mech, h_key);
|
|
Packit |
8681c6 |
if (rc != CKR_OK) {
|
|
Packit |
8681c6 |
testcase_error("C_VerifyInit() rc = %s", p11_get_ckr(rc));
|
|
Packit |
8681c6 |
goto done;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
rc = funcs->C_Verify(session, data, data_len, hash, hash_len);
|
|
Packit |
8681c6 |
if (rc != CKR_OK)
|
|
Packit |
8681c6 |
testcase_fail("C_Verify() rc = %s", p11_get_ckr(rc));
|
|
Packit |
8681c6 |
else
|
|
Packit |
8681c6 |
testcase_pass("Successfully verified.");
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
rc = funcs->C_DestroyObject(session, h_key);
|
|
Packit |
8681c6 |
if (rc != CKR_OK) {
|
|
Packit |
8681c6 |
testcase_error("C_DestroyObject() rc = %s", p11_get_ckr(rc));
|
|
Packit |
8681c6 |
goto done;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
// TESTCASE #2
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
for (i = 0; i < 48; i++)
|
|
Packit |
8681c6 |
key_data[i] = i;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
memset(data2, 0xb, 500);
|
|
Packit |
8681c6 |
data_len = 500;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
rc = funcs->C_CreateObject(session, key_attribs, 4, &h_key);
|
|
Packit |
8681c6 |
if (rc != CKR_OK) {
|
|
Packit |
8681c6 |
testcase_error("C_CreateObject() rc = %s", p11_get_ckr(rc));
|
|
Packit |
8681c6 |
goto done;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
testcase_new_assertion();
|
|
Packit |
8681c6 |
rc = funcs->C_SignInit(session, &mech, h_key);
|
|
Packit |
8681c6 |
if (rc != CKR_OK) {
|
|
Packit |
8681c6 |
testcase_error("C_SignInit() rc = %s", p11_get_ckr(rc));
|
|
Packit |
8681c6 |
goto done;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
for (i = 0; i < 500; i += 100) {
|
|
Packit |
8681c6 |
rc = funcs->C_SignUpdate(session, &data2[i], 100);
|
|
Packit |
8681c6 |
if (rc != CKR_OK) {
|
|
Packit |
8681c6 |
testcase_error("Iteration #%ld, C_SignUpdate() rc = %s", i / 100,
|
|
Packit |
8681c6 |
p11_get_ckr(rc));
|
|
Packit |
8681c6 |
goto done;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
hash_len = sizeof(hash);
|
|
Packit |
8681c6 |
rc = funcs->C_SignFinal(session, hash, &hash_len);
|
|
Packit |
8681c6 |
if (rc != CKR_OK) {
|
|
Packit |
8681c6 |
testcase_error("C_SignFinal() rc = %s", p11_get_ckr(rc));
|
|
Packit |
8681c6 |
goto done;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
if (hash_len != mac_size) {
|
|
Packit |
8681c6 |
testcase_fail("Error: C_SignUpdate/Final generated bad MAC length\n");
|
|
Packit |
8681c6 |
goto done;
|
|
Packit |
8681c6 |
} else {
|
|
Packit |
8681c6 |
testcase_pass("Sucessfully signed in multipart.");
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
testcase_new_assertion();
|
|
Packit |
8681c6 |
rc = funcs->C_VerifyInit(session, &mech, h_key);
|
|
Packit |
8681c6 |
if (rc != CKR_OK) {
|
|
Packit |
8681c6 |
testcase_error("C_VerifyInit() rc = %s", p11_get_ckr(rc));
|
|
Packit |
8681c6 |
goto done;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
for (i = 0; i < 500; i += 100) {
|
|
Packit |
8681c6 |
rc = funcs->C_VerifyUpdate(session, &data2[i], 100);
|
|
Packit |
8681c6 |
if (rc != CKR_OK) {
|
|
Packit |
8681c6 |
testcase_error("Iteration #%ld, C_VerifyUpdate() rc = %s", i / 100,
|
|
Packit |
8681c6 |
p11_get_ckr(rc));
|
|
Packit |
8681c6 |
goto done;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
rc = funcs->C_VerifyFinal(session, hash, hash_len);
|
|
Packit |
8681c6 |
if (rc != CKR_OK)
|
|
Packit |
8681c6 |
testcase_fail("C_VerifyFinal rc = %s", p11_get_ckr(rc));
|
|
Packit |
8681c6 |
else
|
|
Packit |
8681c6 |
testcase_pass("Successfully verified signature in multipart.");
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
done:
|
|
Packit |
8681c6 |
if (funcs->C_DestroyObject(session, h_key) != CKR_OK)
|
|
Packit |
8681c6 |
testcase_error("C_DestroyObject failed.");
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
skipped:
|
|
Packit |
8681c6 |
return rc;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
//
|
|
Packit |
8681c6 |
//
|
|
Packit |
8681c6 |
CK_RV do_SignVerify_SSL3_SHA1_MAC(CK_SESSION_HANDLE session)
|
|
Packit |
8681c6 |
{
|
|
Packit |
8681c6 |
CK_MECHANISM mech;
|
|
Packit |
8681c6 |
CK_ULONG mac_size;
|
|
Packit |
8681c6 |
CK_ULONG i;
|
|
Packit |
8681c6 |
CK_RV rc = CKR_OK;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
CK_OBJECT_HANDLE h_key;
|
|
Packit |
8681c6 |
CK_OBJECT_CLASS key_class = CKO_SECRET_KEY;
|
|
Packit |
8681c6 |
CK_KEY_TYPE key_type = CKK_GENERIC_SECRET;
|
|
Packit |
8681c6 |
CK_BBOOL false = FALSE;
|
|
Packit |
8681c6 |
CK_BYTE hash[SHA1_HASH_LEN];
|
|
Packit |
8681c6 |
CK_BYTE data[50];
|
|
Packit |
8681c6 |
CK_BYTE key_data[48];
|
|
Packit |
8681c6 |
CK_ULONG hash_len;
|
|
Packit |
8681c6 |
CK_ULONG data_len;
|
|
Packit |
8681c6 |
CK_ATTRIBUTE key_attribs[] = {
|
|
Packit |
8681c6 |
{CKA_CLASS, &key_class, sizeof(key_class)},
|
|
Packit |
8681c6 |
{CKA_KEY_TYPE, &key_type, sizeof(key_type)},
|
|
Packit |
8681c6 |
{CKA_TOKEN, &false, sizeof(false)},
|
|
Packit |
8681c6 |
{CKA_VALUE, &key_data, sizeof(key_data)}
|
|
Packit |
8681c6 |
};
|
|
Packit |
8681c6 |
CK_SLOT_ID slot_id = SLOT_ID;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
testcase_begin("starting do_SignVerify_SSL3_SHA1_MAC...\n");
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
mac_size = 20;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
mech.mechanism = CKM_SSL3_SHA1_MAC;
|
|
Packit |
8681c6 |
mech.ulParameterLen = sizeof(CK_ULONG);
|
|
Packit |
8681c6 |
mech.pParameter = &mac_size;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
/** skip test if the slot doesn't support this mechanism **/
|
|
Packit |
8681c6 |
if (!mech_supported(slot_id, mech.mechanism)) {
|
|
Packit |
8681c6 |
testsuite_skip(48, "Slot %u doesn't support %s (%u)",
|
|
Packit |
8681c6 |
(unsigned int) slot_id,
|
|
Packit |
8681c6 |
mech_to_str(mech.mechanism),
|
|
Packit |
8681c6 |
(unsigned int) mech.mechanism);
|
|
Packit |
8681c6 |
goto skipped;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
for (i = 0; i < 48; i++)
|
|
Packit |
8681c6 |
key_data[i] = i;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
memset(data, 0xb, 50);
|
|
Packit |
8681c6 |
data_len = 50;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
rc = funcs->C_CreateObject(session, key_attribs, 4, &h_key);
|
|
Packit |
8681c6 |
if (rc != CKR_OK) {
|
|
Packit |
8681c6 |
testcase_error("C_CreateObject() rc = %s", p11_get_ckr(rc));
|
|
Packit |
8681c6 |
return rc;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
testcase_new_assertion();
|
|
Packit |
8681c6 |
rc = funcs->C_SignInit(session, &mech, h_key);
|
|
Packit |
8681c6 |
if (rc != CKR_OK) {
|
|
Packit |
8681c6 |
testcase_fail("C_SignInit() rc = %s", p11_get_ckr(rc));
|
|
Packit |
8681c6 |
goto done;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
hash_len = sizeof(hash);
|
|
Packit |
8681c6 |
rc = funcs->C_Sign(session, data, data_len, hash, &hash_len);
|
|
Packit |
8681c6 |
if (rc != CKR_OK) {
|
|
Packit |
8681c6 |
testcase_fail("C_Sign() rc = %s", p11_get_ckr(rc));
|
|
Packit |
8681c6 |
goto done;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
if (hash_len != mac_size) {
|
|
Packit |
8681c6 |
testcase_fail("Error: C_Sign generated bad MAC length\n");
|
|
Packit |
8681c6 |
goto done;
|
|
Packit |
8681c6 |
} else {
|
|
Packit |
8681c6 |
testcase_pass("Successfully signed.");
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
testcase_new_assertion();
|
|
Packit |
8681c6 |
rc = funcs->C_VerifyInit(session, &mech, h_key);
|
|
Packit |
8681c6 |
if (rc != CKR_OK) {
|
|
Packit |
8681c6 |
testcase_error("C_VerifyInit() rc = %s", p11_get_ckr(rc));
|
|
Packit |
8681c6 |
goto done;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
rc = funcs->C_Verify(session, data, data_len, hash, hash_len);
|
|
Packit |
8681c6 |
if (rc != CKR_OK)
|
|
Packit |
8681c6 |
testcase_fail("C_Verify() rc = %s", p11_get_ckr(rc));
|
|
Packit |
8681c6 |
else
|
|
Packit |
8681c6 |
testcase_pass("Successfully verified signature.");
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
done:
|
|
Packit |
8681c6 |
if (funcs->C_DestroyObject(session, h_key) != CKR_OK)
|
|
Packit |
8681c6 |
testcase_error("C_DestroyObject() failed.");
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
skipped:
|
|
Packit |
8681c6 |
return rc;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
//
|
|
Packit |
8681c6 |
//
|
|
Packit |
8681c6 |
CK_RV do_SSL3_PreMasterKeyGen(CK_SESSION_HANDLE session)
|
|
Packit |
8681c6 |
{
|
|
Packit |
8681c6 |
CK_MECHANISM mech;
|
|
Packit |
8681c6 |
CK_VERSION version;
|
|
Packit |
8681c6 |
CK_OBJECT_HANDLE h_key;
|
|
Packit |
8681c6 |
CK_RV rc = CKR_OK;
|
|
Packit |
8681c6 |
CK_SLOT_ID slot_id = SLOT_ID;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
testcase_begin("starting do_SSL3_PreMasterKeyGen...\n");
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
version.major = 3;
|
|
Packit |
8681c6 |
version.minor = 0;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
mech.mechanism = CKM_SSL3_PRE_MASTER_KEY_GEN;
|
|
Packit |
8681c6 |
mech.pParameter = &version;
|
|
Packit |
8681c6 |
mech.ulParameterLen = sizeof(CK_VERSION);
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
/** skip test if the slot doesn't support this mechanism **/
|
|
Packit |
8681c6 |
if (!mech_supported(slot_id, mech.mechanism)) {
|
|
Packit |
8681c6 |
testsuite_skip(1, "Slot %u doesn't support %s (%u)",
|
|
Packit |
8681c6 |
(unsigned int) slot_id,
|
|
Packit |
8681c6 |
mech_to_str(mech.mechanism),
|
|
Packit |
8681c6 |
(unsigned int) mech.mechanism);
|
|
Packit |
8681c6 |
goto done;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
testcase_new_assertion();
|
|
Packit |
8681c6 |
rc = funcs->C_GenerateKey(session, &mech, NULL, 0, &h_key);
|
|
Packit |
8681c6 |
if (rc != CKR_OK)
|
|
Packit |
8681c6 |
testcase_fail("C_GenerateKey() rc = %s", p11_get_ckr(rc));
|
|
Packit |
8681c6 |
else
|
|
Packit |
8681c6 |
testcase_pass("Successfully generated a generic secret key.");
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
if (funcs->C_DestroyObject(session, h_key) != CKR_OK)
|
|
Packit |
8681c6 |
testcase_error("C_DestroyObject() failed");
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
done:
|
|
Packit |
8681c6 |
return rc;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
//
|
|
Packit |
8681c6 |
//
|
|
Packit |
8681c6 |
CK_RV do_SSL3_MasterKeyDerive(CK_SESSION_HANDLE session)
|
|
Packit |
8681c6 |
{
|
|
Packit |
8681c6 |
CK_MECHANISM mech;
|
|
Packit |
8681c6 |
CK_OBJECT_HANDLE h_pm_secret = CK_INVALID_HANDLE;
|
|
Packit |
8681c6 |
CK_OBJECT_HANDLE h_mk = CK_INVALID_HANDLE;
|
|
Packit |
8681c6 |
CK_RV rc = CKR_OK;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
CK_VERSION version = { 3, 0 };
|
|
Packit |
8681c6 |
CK_ATTRIBUTE pm_tmpl[] = {
|
|
Packit |
8681c6 |
{CKA_SENSITIVE, &false, sizeof(CK_BBOOL)},
|
|
Packit |
8681c6 |
{CKA_EXTRACTABLE, &true, sizeof(CK_BBOOL)}
|
|
Packit |
8681c6 |
};
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
CK_BYTE client_random_data[256];
|
|
Packit |
8681c6 |
CK_BYTE server_random_data[256];
|
|
Packit |
8681c6 |
CK_ATTRIBUTE m_tmpl[] = {
|
|
Packit |
8681c6 |
{CKA_SENSITIVE, &true, sizeof(CK_BBOOL)},
|
|
Packit |
8681c6 |
{CKA_EXTRACTABLE, &false, sizeof(CK_BBOOL)}
|
|
Packit |
8681c6 |
};
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
CK_SSL3_MASTER_KEY_DERIVE_PARAMS mk_params;
|
|
Packit |
8681c6 |
CK_ULONG i;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
CK_OBJECT_CLASS class;
|
|
Packit |
8681c6 |
CK_KEY_TYPE keyType;
|
|
Packit |
8681c6 |
CK_ATTRIBUTE test_tmpl[] = {
|
|
Packit |
8681c6 |
{CKA_CLASS, &class, sizeof(class)},
|
|
Packit |
8681c6 |
{CKA_KEY_TYPE, &keyType, sizeof(keyType)}
|
|
Packit |
8681c6 |
};
|
|
Packit |
8681c6 |
CK_SLOT_ID slot_id = SLOT_ID;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
testcase_begin("starting do_SSL3_MasterKeyDerive...\n");
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
// generate the pre-master secret key
|
|
Packit |
8681c6 |
//
|
|
Packit |
8681c6 |
mech.mechanism = CKM_SSL3_PRE_MASTER_KEY_GEN;
|
|
Packit |
8681c6 |
mech.pParameter = &version;
|
|
Packit |
8681c6 |
mech.ulParameterLen = sizeof(CK_VERSION);
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
/** skip test if the slot doesn't support this mechanism **/
|
|
Packit |
8681c6 |
if (!mech_supported(slot_id, mech.mechanism)) {
|
|
Packit |
8681c6 |
testsuite_skip(32, "Slot %u doesn't support %s (%u)",
|
|
Packit |
8681c6 |
(unsigned int) slot_id,
|
|
Packit |
8681c6 |
mech_to_str(mech.mechanism),
|
|
Packit |
8681c6 |
(unsigned int) mech.mechanism);
|
|
Packit |
8681c6 |
goto skipped;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
testcase_new_assertion();
|
|
Packit |
8681c6 |
rc = funcs->C_GenerateKey(session, &mech, pm_tmpl, 2, &h_pm_secret);
|
|
Packit |
8681c6 |
if (rc != CKR_OK) {
|
|
Packit |
8681c6 |
testcase_fail("C_GenerateKey() rc= %s", p11_get_ckr(rc));
|
|
Packit |
8681c6 |
goto done;
|
|
Packit |
8681c6 |
} else {
|
|
Packit |
8681c6 |
testcase_pass("Successfully generated a generic secret key.");
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
// derive a master key
|
|
Packit |
8681c6 |
//
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
for (i = 0; i < 32; i++) {
|
|
Packit |
8681c6 |
client_random_data[i] = i;
|
|
Packit |
8681c6 |
server_random_data[i] = 32 - i;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
mk_params.pVersion = &version;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
mk_params.RandomInfo.pClientRandom = client_random_data;
|
|
Packit |
8681c6 |
mk_params.RandomInfo.pServerRandom = server_random_data;
|
|
Packit |
8681c6 |
mk_params.RandomInfo.ulClientRandomLen = 32;
|
|
Packit |
8681c6 |
mk_params.RandomInfo.ulServerRandomLen = 32;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
mech.mechanism = CKM_SSL3_MASTER_KEY_DERIVE;
|
|
Packit |
8681c6 |
mech.pParameter = &mk_params;
|
|
Packit |
8681c6 |
mech.ulParameterLen = sizeof(CK_SSL3_MASTER_KEY_DERIVE_PARAMS);
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
testcase_new_assertion();
|
|
Packit |
8681c6 |
rc = funcs->C_DeriveKey(session, &mech, h_pm_secret, m_tmpl, 2, &h_mk);
|
|
Packit |
8681c6 |
if (rc != CKR_OK) {
|
|
Packit |
8681c6 |
testcase_fail("C_DeriveKey() rc= %s", p11_get_ckr(rc));
|
|
Packit |
8681c6 |
goto done;
|
|
Packit |
8681c6 |
} else {
|
|
Packit |
8681c6 |
testcase_pass("Successfully derived a key from pre-master.");
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
/*
|
|
Packit |
8681c6 |
* This mechanism provides the following attributes:
|
|
Packit |
8681c6 |
* CKA_CLASS = CKO_SECRET_KEY
|
|
Packit |
8681c6 |
* CKA_KEY_TYPE = CKK_GENERIC_SECRET
|
|
Packit |
8681c6 |
* CKA_VALUE_LEN = 48
|
|
Packit |
8681c6 |
* Check that the newly derived key has these.
|
|
Packit |
8681c6 |
*/
|
|
Packit |
8681c6 |
testcase_new_assertion();
|
|
Packit |
8681c6 |
rc = funcs->C_GetAttributeValue(session, h_pm_secret, test_tmpl, 2);
|
|
Packit |
8681c6 |
if (rc != CKR_OK) {
|
|
Packit |
8681c6 |
testcase_error("C_GetAttributeValue() rc= %s", p11_get_ckr(rc));
|
|
Packit |
8681c6 |
goto done;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
if (*(CK_OBJECT_CLASS *) test_tmpl[0].pValue != CKO_SECRET_KEY) {
|
|
Packit |
8681c6 |
testcase_fail("Derived key has incorrect class.");
|
|
Packit |
8681c6 |
goto done;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
if (*(CK_KEY_TYPE *) test_tmpl[1].pValue != CKK_GENERIC_SECRET) {
|
|
Packit |
8681c6 |
testcase_fail("Derived key has incorrect key type.");
|
|
Packit |
8681c6 |
goto done;
|
|
Packit |
8681c6 |
} else {
|
|
Packit |
8681c6 |
testcase_pass("Derived key has correct attributes.");
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
done:
|
|
Packit |
8681c6 |
if (funcs->C_DestroyObject(session, h_mk) != CKR_OK)
|
|
Packit |
8681c6 |
testcase_error("C_DestroyObject rc=%s", p11_get_ckr(rc));
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
if (funcs->C_DestroyObject(session, h_pm_secret) != CKR_OK)
|
|
Packit |
8681c6 |
testcase_error("C_DestroyObject() failed");
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
skipped:
|
|
Packit |
8681c6 |
return rc;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
CK_RV do_SSL3_MultipleKeysDerive(CK_SESSION_HANDLE session)
|
|
Packit |
8681c6 |
{
|
|
Packit |
8681c6 |
CK_MECHANISM mech;
|
|
Packit |
8681c6 |
CK_OBJECT_HANDLE h_pm_secret;
|
|
Packit |
8681c6 |
CK_RV rc = CKR_OK;
|
|
Packit |
8681c6 |
CK_ULONG i;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
CK_VERSION version = { 3, 0 };
|
|
Packit |
8681c6 |
CK_BBOOL true_value = TRUE;
|
|
Packit |
8681c6 |
CK_BBOOL false_value = FALSE;
|
|
Packit |
8681c6 |
CK_ATTRIBUTE pm_tmpl[] = {
|
|
Packit |
8681c6 |
{CKA_TOKEN, &true_value, sizeof(true_value)},
|
|
Packit |
8681c6 |
};
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
CK_BYTE client_random_data[32];
|
|
Packit |
8681c6 |
CK_BYTE server_random_data[32];
|
|
Packit |
8681c6 |
CK_ATTRIBUTE incomplete_tmpl[] = {
|
|
Packit |
8681c6 |
{CKA_TOKEN, &false_value, sizeof(false_value)},
|
|
Packit |
8681c6 |
{CKA_SENSITIVE, &false_value, sizeof(false_value)},
|
|
Packit |
8681c6 |
{CKA_EXTRACTABLE, &true_value, sizeof(true_value)}
|
|
Packit |
8681c6 |
};
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
CK_OBJECT_CLASS class = CKO_SECRET_KEY;
|
|
Packit |
8681c6 |
CK_KEY_TYPE key_type = CKK_AES;
|
|
Packit |
8681c6 |
CK_ULONG key_len = 16;
|
|
Packit |
8681c6 |
CK_ATTRIBUTE complete_tmpl[] = {
|
|
Packit |
8681c6 |
{CKA_CLASS, &class, sizeof(class)},
|
|
Packit |
8681c6 |
{CKA_KEY_TYPE, &key_type, sizeof(key_type)},
|
|
Packit |
8681c6 |
{CKA_VALUE_LEN, &key_len, sizeof(CK_ULONG)},
|
|
Packit |
8681c6 |
{CKA_TOKEN, &false_value, sizeof(false_value)},
|
|
Packit |
8681c6 |
{CKA_SENSITIVE, &false_value, sizeof(false_value)},
|
|
Packit |
8681c6 |
{CKA_EXTRACTABLE, &true_value, sizeof(true_value)}
|
|
Packit |
8681c6 |
};
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
CK_BYTE iv_client[128 / 8] = { 0, };
|
|
Packit |
8681c6 |
CK_BYTE iv_server[128 / 8] = { 0, };
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
CK_SSL3_KEY_MAT_OUT param_out = {
|
|
Packit |
8681c6 |
.hClientMacSecret = 0,
|
|
Packit |
8681c6 |
.hServerMacSecret = 0,
|
|
Packit |
8681c6 |
.hClientKey = 0,
|
|
Packit |
8681c6 |
.hServerKey = 0,
|
|
Packit |
8681c6 |
.pIVClient = iv_client,
|
|
Packit |
8681c6 |
.pIVServer = iv_server,
|
|
Packit |
8681c6 |
};
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
CK_SSL3_KEY_MAT_PARAMS params = {
|
|
Packit |
8681c6 |
.ulMacSizeInBits = 128,
|
|
Packit |
8681c6 |
.ulKeySizeInBits = key_len * 8,
|
|
Packit |
8681c6 |
.ulIVSizeInBits = 128,
|
|
Packit |
8681c6 |
.bIsExport = FALSE,
|
|
Packit |
8681c6 |
.RandomInfo =
|
|
Packit |
8681c6 |
{
|
|
Packit |
8681c6 |
.pClientRandom = client_random_data,
|
|
Packit |
8681c6 |
.ulClientRandomLen = sizeof(client_random_data),
|
|
Packit |
8681c6 |
.pServerRandom = server_random_data,
|
|
Packit |
8681c6 |
.ulServerRandomLen = sizeof(server_random_data),
|
|
Packit |
8681c6 |
},
|
|
Packit |
8681c6 |
.pReturnedKeyMaterial = ¶m_out,
|
|
Packit |
8681c6 |
};
|
|
Packit |
8681c6 |
CK_SLOT_ID slot_id = SLOT_ID;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
testcase_begin("starting do_SSL3_MultipleKeysDerive...\n");
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
// generate the pre-master secret key
|
|
Packit |
8681c6 |
//
|
|
Packit |
8681c6 |
mech.mechanism = CKM_SSL3_PRE_MASTER_KEY_GEN;
|
|
Packit |
8681c6 |
mech.pParameter = &version;
|
|
Packit |
8681c6 |
mech.ulParameterLen = sizeof(CK_VERSION);
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
/** skip test if the slot doesn't support this mechanism **/
|
|
Packit |
8681c6 |
if (!mech_supported(slot_id, mech.mechanism)) {
|
|
Packit |
8681c6 |
testsuite_skip(3, "Slot %u doesn't support %s (%u)",
|
|
Packit |
8681c6 |
(unsigned int) slot_id,
|
|
Packit |
8681c6 |
mech_to_str(mech.mechanism),
|
|
Packit |
8681c6 |
(unsigned int) mech.mechanism);
|
|
Packit |
8681c6 |
goto skipped;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
testcase_new_assertion();
|
|
Packit |
8681c6 |
rc = funcs->C_GenerateKey(session, &mech, pm_tmpl,
|
|
Packit |
8681c6 |
sizeof(pm_tmpl) / sizeof(*pm_tmpl), &h_pm_secret);
|
|
Packit |
8681c6 |
if (rc != CKR_OK) {
|
|
Packit |
8681c6 |
testcase_fail("C_GenerateKey() rc= %s", p11_get_ckr(rc));
|
|
Packit |
8681c6 |
goto done;
|
|
Packit |
8681c6 |
} else {
|
|
Packit |
8681c6 |
testcase_pass("Successfully generated a generic secret key.");
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
for (i = 0; i < sizeof(client_random_data); i++) {
|
|
Packit |
8681c6 |
client_random_data[i] = i;
|
|
Packit |
8681c6 |
server_random_data[i] = sizeof(client_random_data) - i;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
mech.mechanism = CKM_SSL3_KEY_AND_MAC_DERIVE;
|
|
Packit |
8681c6 |
mech.pParameter = ¶m;;
|
|
Packit |
8681c6 |
mech.ulParameterLen = sizeof(params);
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
/*
|
|
Packit |
8681c6 |
* Try deriving the key without required attributes...
|
|
Packit |
8681c6 |
*/
|
|
Packit |
8681c6 |
testcase_new_assertion();
|
|
Packit |
8681c6 |
rc = funcs->C_DeriveKey(session, &mech, h_pm_secret, incomplete_tmpl,
|
|
Packit |
8681c6 |
sizeof(incomplete_tmpl) / sizeof(*incomplete_tmpl),
|
|
Packit |
8681c6 |
NULL);
|
|
Packit |
8681c6 |
if (rc != CKR_TEMPLATE_INCOMPLETE) {
|
|
Packit |
8681c6 |
testcase_fail("C_DeriveKey did not recognize missing attributes.");
|
|
Packit |
8681c6 |
goto done;
|
|
Packit |
8681c6 |
} else {
|
|
Packit |
8681c6 |
testcase_pass("Success, could not derive key without required "
|
|
Packit |
8681c6 |
"attributes.");
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
/*
|
|
Packit |
8681c6 |
* Now derive key with required attributes...
|
|
Packit |
8681c6 |
*/
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
testcase_new_assertion();
|
|
Packit |
8681c6 |
rc = funcs->C_DeriveKey(session, &mech, h_pm_secret, complete_tmpl,
|
|
Packit |
8681c6 |
sizeof(complete_tmpl) / sizeof(*complete_tmpl),
|
|
Packit |
8681c6 |
NULL);
|
|
Packit |
8681c6 |
if (rc != CKR_OK) {
|
|
Packit |
8681c6 |
testcase_fail("C_DeriveKey() rc= %s", p11_get_ckr(rc));
|
|
Packit |
8681c6 |
goto done;
|
|
Packit |
8681c6 |
} else {
|
|
Packit |
8681c6 |
testcase_pass("Successfully derived a keys from pre-master.");
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
if (funcs->C_DestroyObject(session, param_out.hClientMacSecret))
|
|
Packit |
8681c6 |
testcase_error("C_DestroyObject rc=%s", p11_get_ckr(rc));
|
|
Packit |
8681c6 |
if (funcs->C_DestroyObject(session, param_out.hServerMacSecret))
|
|
Packit |
8681c6 |
testcase_error("C_DestroyObject rc=%s", p11_get_ckr(rc));
|
|
Packit |
8681c6 |
if (funcs->C_DestroyObject(session, param_out.hClientKey))
|
|
Packit |
8681c6 |
testcase_error("C_DestroyObject rc=%s", p11_get_ckr(rc));
|
|
Packit |
8681c6 |
if (funcs->C_DestroyObject(session, param_out.hServerKey))
|
|
Packit |
8681c6 |
testcase_error("C_DestroyObject rc=%s", p11_get_ckr(rc));
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
done:
|
|
Packit |
8681c6 |
if (funcs->C_DestroyObject(session, h_pm_secret) != CKR_OK)
|
|
Packit |
8681c6 |
testcase_error("C_DestroyObject() failed");
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
skipped:
|
|
Packit |
8681c6 |
return rc;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
CK_RV ssl3_functions()
|
|
Packit |
8681c6 |
{
|
|
Packit |
8681c6 |
CK_RV rc;
|
|
Packit |
8681c6 |
SYSTEMTIME t1, t2;
|
|
Packit |
8681c6 |
CK_SLOT_ID slot_id = SLOT_ID;
|
|
Packit |
8681c6 |
CK_SESSION_HANDLE session;
|
|
Packit |
8681c6 |
CK_FLAGS flags;
|
|
Packit |
8681c6 |
CK_BYTE user_pin[PKCS11_MAX_PIN_LEN];
|
|
Packit |
8681c6 |
CK_ULONG user_pin_len;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
testcase_rw_session();
|
|
Packit |
8681c6 |
testcase_user_login();
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
GetSystemTime(&t1;;
|
|
Packit |
8681c6 |
rc = do_SSL3_PreMasterKeyGen(session);
|
|
Packit |
8681c6 |
if (rc && !no_stop)
|
|
Packit |
8681c6 |
goto testcase_cleanup;
|
|
Packit |
8681c6 |
GetSystemTime(&t2;;
|
|
Packit |
8681c6 |
process_time(t1, t2);
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
GetSystemTime(&t1;;
|
|
Packit |
8681c6 |
rc = do_SSL3_MasterKeyDerive(session);
|
|
Packit |
8681c6 |
if (rc && !no_stop)
|
|
Packit |
8681c6 |
goto testcase_cleanup;
|
|
Packit |
8681c6 |
GetSystemTime(&t2;;
|
|
Packit |
8681c6 |
process_time(t1, t2);
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
GetSystemTime(&t1;;
|
|
Packit |
8681c6 |
rc = do_SSL3_MultipleKeysDerive(session);
|
|
Packit |
8681c6 |
if (rc && !no_stop)
|
|
Packit |
8681c6 |
goto testcase_cleanup;
|
|
Packit |
8681c6 |
GetSystemTime(&t2;;
|
|
Packit |
8681c6 |
process_time(t1, t2);
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
GetSystemTime(&t1;;
|
|
Packit |
8681c6 |
rc = do_SignVerify_SSL3_SHA1_MAC(session);
|
|
Packit |
8681c6 |
if (rc && !no_stop)
|
|
Packit |
8681c6 |
goto testcase_cleanup;
|
|
Packit |
8681c6 |
GetSystemTime(&t2;;
|
|
Packit |
8681c6 |
process_time(t1, t2);
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
GetSystemTime(&t1;;
|
|
Packit |
8681c6 |
rc = do_SignVerify_SSL3_MD5_MAC(session);
|
|
Packit |
8681c6 |
if (rc && !no_stop)
|
|
Packit |
8681c6 |
return rc;
|
|
Packit |
8681c6 |
GetSystemTime(&t2;;
|
|
Packit |
8681c6 |
process_time(t1, t2);
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
testcase_cleanup:
|
|
Packit |
8681c6 |
testcase_user_logout();
|
|
Packit |
8681c6 |
rc = funcs->C_CloseAllSessions(slot_id);
|
|
Packit |
8681c6 |
if (rc != CKR_OK) {
|
|
Packit |
8681c6 |
testcase_error("C_CloseSessions rc=%s", p11_get_ckr(rc));
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
return rc;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
int main(int argc, char **argv)
|
|
Packit |
8681c6 |
{
|
|
Packit |
8681c6 |
CK_C_INITIALIZE_ARGS cinit_args;
|
|
Packit |
8681c6 |
int rc;
|
|
Packit |
8681c6 |
CK_RV rv;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
rc = do_ParseArgs(argc, argv);
|
|
Packit |
8681c6 |
if (rc != 1)
|
|
Packit |
8681c6 |
return rc;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
printf("Using slot #%lu...\n\n", SLOT_ID);
|
|
Packit |
8681c6 |
printf("With option: no_init: %d\n", no_init);
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
rc = do_GetFunctionList();
|
|
Packit |
8681c6 |
if (!rc) {
|
|
Packit |
8681c6 |
PRINT_ERR("ERROR do_GetFunctionList() Failed , rc = 0x%0x\n", rc);
|
|
Packit |
8681c6 |
return rc;
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
memset(&cinit_args, 0x0, sizeof(cinit_args));
|
|
Packit |
8681c6 |
cinit_args.flags = CKF_OS_LOCKING_OK;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
// SAB Add calls to ALL functions before the C_Initialize gets hit
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
funcs->C_Initialize(&cinit_args);
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
{
|
|
Packit |
8681c6 |
CK_SESSION_HANDLE hsess = 0;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
rc = funcs->C_GetFunctionStatus(hsess);
|
|
Packit |
8681c6 |
if (rc != CKR_FUNCTION_NOT_PARALLEL)
|
|
Packit |
8681c6 |
return rc;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
rc = funcs->C_CancelFunction(hsess);
|
|
Packit |
8681c6 |
if (rc != CKR_FUNCTION_NOT_PARALLEL)
|
|
Packit |
8681c6 |
return rc;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
}
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
testcase_setup(0);
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
rv = ssl3_functions();
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
testcase_print_result();
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
funcs->C_Finalize(NULL);
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
/* make sure we return non-zero if rv is non-zero */
|
|
Packit |
8681c6 |
return ((rv == 0) || (rv % 256) ? (int)rv : -1);
|
|
Packit |
8681c6 |
}
|