blob: 75bc50e84c2610dd305f3a3ae4c69c89b1985544 [file] [log] [blame]
/*
*
* Copyright (C) International Business Machines Corp., 2004, 2005
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
* the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/*
* NAME
* Tspi_TPM_LoadMaintenancePubKey01.c
*
* DESCRIPTION
* This test will verify that Tspi_TPM_LoadMaintenancePubKey can succeed.
*
* There are 3 acceptable return codes from this API:
* TSS_SUCCESS: The TPM supports this command and it succeeded.
* TCPA_E_DISABLED_CMD: The testsuite or user has run the kill
* maintenance feature API on this TPM
* TCPA_E_INACTIVE: The TPM doesn't support this API (most likely)
*
* ALGORITHM
* Setup:
* Create Context
* Connect Context
* Create Object
* Get TPM Object
* Get SRK Handle
* Get Policy
* Set Secret
* Create Maintenance Key Object
* Create Maintenance Key
* Get Random Number
* Set Validation Data
*
* Test:
* Call TPM_LoadMaintenancePubKey then if it does not succeed
* Make sure that it returns the proper return codes
* Print results
*
* Cleanup:
* Free memory relating to hContext
* Close context
*
* USAGE
* First parameter is --options
* -v or --version
* Second parameter is the version of the test case to be run
* This test case is currently only implemented for v1.1
*
* HISTORY
* Megan Schneider, mschnei@us.ibm.com, 6/04.
*
* RESTRICTIONS
* None.
*/
#include <stdio.h>
#include "common.h"
int
main( int argc, char **argv )
{
char version;
version = parseArgs( argc, argv );
if (version == TESTSUITE_TEST_TSS_1_2)
main_v1_2(version);
else if (version == TESTSUITE_TEST_TSS_1_1)
print_NA();
else
print_wrongVersion();
}
int
main_v1_2(char version)
{
char *function = "Tspi_TPM_LoadMaintenancePubKey-trans03";
TSS_HCONTEXT hContext;
TSS_HKEY hMaintenanceKey;
BYTE *data;
TSS_VALIDATION ValidationData;
TSS_RESULT result;
TSS_HTPM hTPM;
TSS_HPOLICY srkUsagePolicy;
TSS_HKEY hSRK, hWrappingKey;
TSS_FLAG initFlags = TSS_KEY_TYPE_SIGNING | TSS_KEY_SIZE_2048 |
TSS_KEY_VOLATILE | TSS_KEY_NO_AUTHORIZATION |
TSS_KEY_NOT_MIGRATABLE;
print_begin_test( function );
result = connect_load_all(&hContext, &hSRK, &hTPM);
if ( result != TSS_SUCCESS )
{
print_error( "connect_load_all", (result) );
Tspi_Context_FreeMemory( hContext, NULL );
Tspi_Context_Close( hContext );
exit( result );
}
result = Testsuite_Transport_Init(hContext, hSRK, hTPM, TRUE, TRUE, &hWrappingKey,
NULL);
if (result != TSS_SUCCESS) {
print_error("Testsuite_Transport_Init", result);
Tspi_Context_Close(hContext);
exit(result);
}
//Create Signing Key
result = Tspi_Context_CreateObject( hContext, TSS_OBJECT_TYPE_RSAKEY,
TSS_KEY_SIZE_2048 |
TSS_KEY_TYPE_BIND,
&hMaintenanceKey );
if ( result != TSS_SUCCESS )
{
print_error( "Tspi_Context_CreateObject (maintenance key)",
result );
Tspi_Context_FreeMemory( hContext, NULL );
Tspi_Context_Close( hContext );
exit( result );
}
result = Tspi_Key_CreateKey( hMaintenanceKey, hSRK, 0 );
if ( result != TSS_SUCCESS )
{
print_error( "Tspi_Key_CreateKey (signing key)", result );
Tspi_Context_FreeMemory( hContext, NULL );
Tspi_Context_Close( hContext );
exit( result );
}
// get blob
result = Tspi_TPM_GetRandom( hTPM, 20, &data );
if ( result != TSS_SUCCESS )
{
print_error( "Tspi_TPM_GetRandom", result );
Tspi_Context_FreeMemory( hContext, NULL );
Tspi_Context_Close( hContext );
exit( result );
}
ValidationData.ulDataLength = 20;
ValidationData.rgbExternalData = data;
//Load Key Blob
result = Tspi_TPM_LoadMaintenancePubKey( hTPM, hMaintenanceKey,
&ValidationData );
if (result != TSS_SUCCESS &&
TSS_ERROR_CODE(result) != TCPA_E_INACTIVE &&
TSS_ERROR_CODE(result) != TCPA_E_DISABLED_CMD)
{
print_error( "Tspi_TPM_LoadMaintenancePubKey", result );
Tspi_Context_FreeMemory( hContext, NULL );
Tspi_Context_Close( hContext );
exit( result );
}
result = Testsuite_Transport_Final(hContext, 0);
if ( result != TSS_SUCCESS )
{
if( !(checkNonAPI(result)) )
{
print_error( function, result );
}
else
{
print_error_nonapi( function, result );
}
print_end_test( function );
Tspi_Context_FreeMemory( hContext, NULL );
Tspi_Context_Close( hContext );
exit( result );
}
else
{
print_success( function, result );
}
print_end_test( function );
Tspi_Context_FreeMemory( hContext, NULL );
Tspi_Context_Close( hContext );
exit( 0 );
}