Example #1
0
CK_RV init_token_data(CK_SLOT_ID slot_id)
{
	CK_RV rc;

	memset((char *)nv_token_data, 0, sizeof(nv_token_data));

	// the normal USER pin is not set when the token is initialized
	//
	memcpy(nv_token_data->user_pin_sha, "00000000000000000000",
	       SHA1_HASH_SIZE);
	memcpy(nv_token_data->so_pin_sha, default_so_pin_sha, SHA1_HASH_SIZE);

	memset(user_pin_md5, 0x0, MD5_HASH_SIZE);
	memcpy(so_pin_md5, default_so_pin_md5, MD5_HASH_SIZE);

	memcpy(nv_token_data->next_token_object_name, "00000000", 8);

	// generate the master key used for signing the Operation State information
	//                          `
	memset(nv_token_data->token_info.label, ' ',
	       sizeof(nv_token_data->token_info.label));
	memcpy(nv_token_data->token_info.label, label, strlen((char *)label));

	nv_token_data->tweak_vector.allow_weak_des = TRUE;
	nv_token_data->tweak_vector.check_des_parity = FALSE;
	nv_token_data->tweak_vector.allow_key_mods = TRUE;
	nv_token_data->tweak_vector.netscape_mods = TRUE;

	init_tokenInfo();

	if (token_specific.t_init_token_data) {
		rc = token_specific.t_init_token_data(slot_id);
		if (rc != CKR_OK)
			return rc;
	} else {
		//
		// FIXME: erase the token object index file (and all token objects)
		//
		rc = generate_master_key(master_key);
		if (rc != CKR_OK) {
			TRACE_DEVEL("generate_master_key failed.\n");
			return CKR_FUNCTION_FAILED;
		}

		rc = save_masterkey_so();
		if (rc != CKR_OK) {
			TRACE_DEVEL("save_masterkey_so failed.\n");
			return rc;
		}
	}

	rc = save_token_data(slot_id);

	return rc;
}
Example #2
0
CK_RV
init_token_data( void )
{
	CK_RV rc;

	memset( (char *)nv_token_data, 0, sizeof(nv_token_data) );

	// the normal USER pin is not set when the token is initialized
	//
	memcpy( nv_token_data->user_pin_sha, "00000000000000000000", SHA1_HASH_SIZE );
	memcpy( nv_token_data->so_pin_sha,   default_so_pin_sha,     SHA1_HASH_SIZE );

	memset( user_pin_md5, 0x0,                MD5_HASH_SIZE );
	memcpy( so_pin_md5,   default_so_pin_md5, MD5_HASH_SIZE );

	memcpy( nv_token_data->next_token_object_name, "00000000", 8 );

	// generate the master key used for signing the Operation State information
	//                          `
	memset( nv_token_data->token_info.label, ' ', sizeof(nv_token_data->token_info.label) );
	memcpy( nv_token_data->token_info.label, label, strlen((char *)label) );

	nv_token_data->tweak_vector.allow_weak_des   = TRUE;
	nv_token_data->tweak_vector.check_des_parity = FALSE;
	nv_token_data->tweak_vector.allow_key_mods   = TRUE;
	nv_token_data->tweak_vector.netscape_mods    = TRUE;

	init_tokenInfo();

	//
	// FIXME: erase the token object index file (and all token objects)
	//
#if 0
	rc  = rng_generate( master_key, 3 * DES_KEY_SIZE );
	if (rc != CKR_OK){
		OCK_LOG_ERR(ERR_FUNCTION_FAILED); 
		return CKR_FUNCTION_FAILED;
	}
	rc = save_masterkey_so();
	if (rc != CKR_OK){
		OCK_LOG_ERR(ERR_FUNCTION_FAILED); 
		return CKR_FUNCTION_FAILED;
	}
#endif
	rc = save_token_data();
	if (rc != CKR_OK)
		OCK_LOG_ERR(ERR_FUNCTION_FAILED); 
	return rc;
}