| /* |
| * |
| * 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 ); |
| } |