mirror of https://github.com/wolfSSL/wolfTPM.git
Add test coverage analysis documentation
Co-Authored-By: david@wolfssl.com <david@wolfssl.com>pull/400/head
parent
32ffc09590
commit
9709c8fedd
|
@ -0,0 +1,205 @@
|
|||
# Test Coverage Analysis
|
||||
|
||||
## Test Files Analyzed:
|
||||
1. Unit Tests (tests/unit_tests.c)
|
||||
2. Integration Tests (examples/wrap/wrap_test.c)
|
||||
3. Example Files (examples/*)
|
||||
|
||||
## Coverage Types:
|
||||
1. Direct test coverage (function called directly)
|
||||
2. Indirect test coverage (called by tested functions)
|
||||
3. Return code checking verification
|
||||
|
||||
## Test Coverage Status:
|
||||
|
||||
### Core TPM2 Functions:
|
||||
#### Tested in unit_tests.c:
|
||||
- TPM2_GetCapability (with return code check)
|
||||
- TPM2_PCR_Read (with return code check)
|
||||
- TPM2_PCR_Extend (with return code check)
|
||||
- TPM2_GetRandom (with return code check)
|
||||
- TPM2_Create (with return code check)
|
||||
- TPM2_Load (with return code check)
|
||||
- TPM2_StartAuthSession (with return code check)
|
||||
|
||||
#### Tested in wrap_test.c:
|
||||
- TPM2_CreatePrimary (with return code check)
|
||||
- TPM2_Create (with return code check)
|
||||
- TPM2_Load (with return code check)
|
||||
- TPM2_RSA_Encrypt (with return code check)
|
||||
- TPM2_RSA_Decrypt (with return code check)
|
||||
- TPM2_Sign (with return code check)
|
||||
- TPM2_VerifySignature (with return code check)
|
||||
- TPM2_ECDH_KeyGen (with return code check)
|
||||
- TPM2_ECDH_ZGen (with return code check)
|
||||
- TPM2_NV_DefineSpace (with return code check)
|
||||
- TPM2_NV_Write (with return code check)
|
||||
- TPM2_NV_Read (with return code check)
|
||||
- TPM2_PCR_Read (with return code check)
|
||||
- TPM2_PCR_Extend (with return code check)
|
||||
|
||||
#### Tested in keygen.c:
|
||||
- TPM2_CreatePrimary (with return code check)
|
||||
- TPM2_Create (with return code check)
|
||||
- TPM2_Load (with return code check)
|
||||
- wolfTPM2_CreateEK (with return code check)
|
||||
- wolfTPM2_CreateSRK (with return code check)
|
||||
- wolfTPM2_GetKeyTemplate_RSA (with return code check)
|
||||
- wolfTPM2_GetKeyTemplate_ECC (with return code check)
|
||||
- wolfTPM2_CreateKey (with return code check)
|
||||
- wolfTPM2_LoadKey (with return code check)
|
||||
|
||||
#### Tested in store.c:
|
||||
- wolfTPM2_NVCreateAuth (with return code check)
|
||||
- wolfTPM2_NVWriteAuth (with return code check)
|
||||
- wolfTPM2_NVReadAuth (with return code check)
|
||||
- wolfTPM2_NVOpen (with return code check)
|
||||
|
||||
#### Tested in extend.c:
|
||||
- TPM2_PCR_Extend (with return code check)
|
||||
- TPM2_PCR_Read (with return code check)
|
||||
- wolfTPM2_ExtendPCR (with return code check)
|
||||
- wolfTPM2_ReadPCR (with return code check)
|
||||
|
||||
#### Tested in attestation examples:
|
||||
- TPM2_MakeCredential (with return code check)
|
||||
- TPM2_ActivateCredential (with return code check)
|
||||
- TPM2_Certify (with return code check)
|
||||
- TPM2_PolicyCommandCode (with return code check)
|
||||
- TPM2_PolicyOR (with return code check)
|
||||
- wolfTPM2_CreateEK (with return code check)
|
||||
- wolfTPM2_LoadKey (with return code check)
|
||||
- wolfTPM2_CreateAuthSession_EkPolicy (with return code check)
|
||||
- wolfTPM2_SetAuthSession (with return code check)
|
||||
- wolfTPM2_ReadPublicKey (with return code check)
|
||||
|
||||
#### Tested in TLS examples:
|
||||
- wolfTPM2_CreatePrimaryKey (with return code check)
|
||||
- wolfTPM2_CreateKey (with return code check)
|
||||
- wolfTPM2_LoadKey (with return code check)
|
||||
- wolfTPM2_SignHash (with return code check)
|
||||
- wolfTPM2_VerifyHash (with return code check)
|
||||
- wolfTPM2_ECDHGenKey (with return code check)
|
||||
- wolfTPM2_ECDHGenZ (with return code check)
|
||||
- wolfTPM2_RsaEncrypt (with return code check)
|
||||
- wolfTPM2_RsaDecrypt (with return code check)
|
||||
- wolfTPM2_LoadRsaPublicKey (with return code check)
|
||||
- wolfTPM2_LoadRsaPrivateKey (with return code check)
|
||||
- wolfTPM2_LoadEccPublicKey (with return code check)
|
||||
- wolfTPM2_LoadEccPrivateKey (with return code check)
|
||||
|
||||
#### Tested in PKCS7 examples:
|
||||
- wolfTPM2_SignHash (with return code check)
|
||||
- wolfTPM2_VerifyHash (with return code check)
|
||||
- wolfTPM2_LoadKey (with return code check)
|
||||
- wolfTPM2_CreateKey (with return code check)
|
||||
- wolfTPM2_ExportPublicKeyBuffer (with return code check)
|
||||
- wolfTPM2_ImportPrivateKey (with return code check)
|
||||
|
||||
#### Tested in Timestamp examples:
|
||||
- TPM2_ReadClock (with return code check)
|
||||
- TPM2_GetTime (with return code check)
|
||||
- wolfTPM2_GetTime (with return code check)
|
||||
- wolfTPM2_CreateAndLoadAIK (with return code check)
|
||||
- wolfTPM2_StartSession (with return code check)
|
||||
|
||||
#### Tested in GPIO examples:
|
||||
- TPM2_GPIO_Config (with return code check)
|
||||
- TPM2_NV_DefineSpace (with return code check)
|
||||
- TPM2_NV_Write (with return code check)
|
||||
- TPM2_NV_Read (with return code check)
|
||||
- wolfTPM2_NVCreateAuth (with return code check)
|
||||
- wolfTPM2_NVWriteAuth (with return code check)
|
||||
|
||||
#### Tested in Secure Boot examples:
|
||||
- wolfTPM2_NVCreateAuth (with return code check)
|
||||
- wolfTPM2_NVWriteAuth (with return code check)
|
||||
- wolfTPM2_NVReadAuth (with return code check)
|
||||
- wolfTPM2_NVWriteLock (with return code check)
|
||||
- wolfTPM2_NVReadPublic (with return code check)
|
||||
- wolfTPM2_StartSession (with return code check)
|
||||
|
||||
## Test Coverage Summary:
|
||||
1. Core TPM2 Functions:
|
||||
- Most core TPM2 functions have direct test coverage
|
||||
- Return code checking is consistently implemented
|
||||
- Test coverage spans across unit tests and examples
|
||||
|
||||
2. Wrapper Functions:
|
||||
- Comprehensive coverage of key management functions
|
||||
- Strong coverage of cryptographic operations
|
||||
- Good coverage of session and policy management
|
||||
|
||||
3. Test Coverage Patterns:
|
||||
- Consistent error handling and return code checks
|
||||
- Parameter validation testing
|
||||
- Resource cleanup verification
|
||||
- Session management verification
|
||||
|
||||
4. Notable Test Coverage Areas:
|
||||
- Key generation and management
|
||||
- Cryptographic operations (sign/verify/encrypt/decrypt)
|
||||
- NV storage operations
|
||||
- PCR operations
|
||||
- Session management
|
||||
- GPIO configuration
|
||||
- Time and timestamp operations
|
||||
- Secure boot functionality
|
||||
- TLS integration
|
||||
- PKCS7 operations
|
||||
|
||||
### Wrapper Functions:
|
||||
#### Tested in unit_tests.c:
|
||||
- wolfTPM2_Init (with return code check)
|
||||
- wolfTPM2_OpenExisting (with return code check)
|
||||
- wolfTPM2_GetCapabilities (with return code check)
|
||||
- wolfTPM2_ReadPublicKey (with return code check)
|
||||
- wolfTPM2_GetRandom (with return code check)
|
||||
- wolfTPM2_UnsetAuth (with return code check)
|
||||
- wolfTPM2_SetAuth (with return code check)
|
||||
- wolfTPM2_Cleanup (with return code check)
|
||||
- wolfTPM2_CreatePrimaryKey (with return code check)
|
||||
- wolfTPM2_LoadKey (with return code check)
|
||||
|
||||
#### Tested in wrap_test.c:
|
||||
- wolfTPM2_Init (with return code check)
|
||||
- wolfTPM2_GetCapabilities (with return code check)
|
||||
- wolfTPM2_UnloadHandles_AllTransient (with return code check)
|
||||
- wolfTPM2_CreatePrimaryKey (with return code check)
|
||||
- wolfTPM2_CreateSRK (with return code check)
|
||||
- wolfTPM2_StartSession (with return code check)
|
||||
- wolfTPM2_SetAuthSession (with return code check)
|
||||
- wolfTPM2_CreateLoadedKey (with return code check)
|
||||
- wolfTPM2_CreateAndLoadKey (with return code check)
|
||||
- wolfTPM2_SignHashScheme (with return code check)
|
||||
- wolfTPM2_VerifyHashScheme (with return code check)
|
||||
- wolfTPM2_UnloadHandle (with return code check)
|
||||
- wolfTPM2_RsaEncrypt (with return code check)
|
||||
- wolfTPM2_RsaDecrypt (with return code check)
|
||||
- wolfTPM2_LoadEccPublicKey (with return code check)
|
||||
- wolfTPM2_LoadEccPrivateKey (with return code check)
|
||||
- wolfTPM2_ECDHGen (with return code check)
|
||||
- wolfTPM2_ECDHGenZ (with return code check)
|
||||
- wolfTPM2_EccKey_TpmToWolf (with return code check)
|
||||
- wolfTPM2_EccKey_WolfToTpm (with return code check)
|
||||
- wolfTPM2_ChangeAuthKey (with return code check)
|
||||
|
||||
### Parameter Encryption Functions:
|
||||
#### Tested in unit_tests.c:
|
||||
- TPM2_KDFa (indirectly tested through session creation)
|
||||
|
||||
#### Tested in wrap_test.c:
|
||||
- TPM2_KDFa (directly tested through parameter encryption)
|
||||
|
||||
## Test Coverage Patterns:
|
||||
1. Function call with NULL argument checks
|
||||
2. Function call with invalid argument checks
|
||||
3. Function call with valid arguments
|
||||
4. Return code verification
|
||||
5. Cleanup after test
|
||||
|
||||
## Notes:
|
||||
- Exclude WOLFTPM_LOCAL and static functions
|
||||
- Focus on public APIs only
|
||||
- Document test coverage patterns
|
||||
- Verify return code checking
|
|
@ -0,0 +1,177 @@
|
|||
# wolfTPM Test Coverage Report
|
||||
|
||||
## TPM2 Core APIs Lacking Direct Tests
|
||||
|
||||
### Policy APIs
|
||||
1. TPM2_PolicyPhysicalPresence
|
||||
- No direct test coverage
|
||||
- Not called by any higher-level functions
|
||||
- No example usage found
|
||||
|
||||
2. TPM2_PolicyTemplate
|
||||
- No direct test coverage
|
||||
- Not used in policy examples
|
||||
- No indirect usage found
|
||||
|
||||
3. TPM2_PolicyAuthorizeNV
|
||||
- No direct test coverage
|
||||
- Not used in NV or policy examples
|
||||
- No indirect usage through wrapper functions
|
||||
|
||||
### Hierarchy Management APIs
|
||||
1. TPM2_HierarchyControl
|
||||
- No direct test coverage
|
||||
- Not used in management examples
|
||||
- Critical for TPM hierarchy management
|
||||
|
||||
2. TPM2_SetPrimaryPolicy
|
||||
- No direct test coverage
|
||||
- Referenced in tpm2_wrap.c but not tested
|
||||
- Important for TPM policy management
|
||||
|
||||
3. TPM2_ChangePPS
|
||||
- No direct test coverage
|
||||
- Platform hierarchy management function
|
||||
- No example usage found
|
||||
|
||||
4. TPM2_ChangeEPS
|
||||
- No direct test coverage
|
||||
- Endorsement hierarchy management
|
||||
- No example usage found
|
||||
|
||||
5. TPM2_ClearControl
|
||||
- No direct test coverage
|
||||
- TPM state management function
|
||||
- No example usage found
|
||||
|
||||
### System Management APIs
|
||||
1. TPM2_DictionaryAttackLockReset
|
||||
- No direct test coverage
|
||||
- Security feature for TPM protection
|
||||
- No example usage found
|
||||
|
||||
2. TPM2_DictionaryAttackParameters
|
||||
- No direct test coverage
|
||||
- Security configuration function
|
||||
- No example usage found
|
||||
|
||||
3. TPM2_PP_Commands
|
||||
- No direct test coverage
|
||||
- Physical presence configuration
|
||||
- No example usage found
|
||||
|
||||
4. TPM2_SetAlgorithmSet
|
||||
- No direct test coverage
|
||||
- TPM algorithm management
|
||||
- No example usage found
|
||||
|
||||
### Firmware Management APIs
|
||||
1. TPM2_FieldUpgradeStart
|
||||
- No direct test coverage
|
||||
- Firmware update initialization
|
||||
- No example usage found
|
||||
|
||||
2. TPM2_FieldUpgradeData
|
||||
- No direct test coverage
|
||||
- Firmware update data transfer
|
||||
- No example usage found
|
||||
|
||||
3. TPM2_FirmwareRead
|
||||
- No direct test coverage
|
||||
- Firmware verification function
|
||||
- No example usage found
|
||||
|
||||
### Context Management APIs
|
||||
1. TPM2_ContextSave
|
||||
- No direct test coverage
|
||||
- Session/object context management
|
||||
- No example usage found
|
||||
|
||||
2. TPM2_ContextLoad
|
||||
- No direct test coverage
|
||||
- Session/object context restoration
|
||||
- No example usage found
|
||||
|
||||
## wolfTPM2 APIs Lacking Direct Tests
|
||||
|
||||
### Key Management APIs
|
||||
1. wolfTPM2_RsaKey_PubPemToTpm
|
||||
- No direct test coverage
|
||||
- Public key import function
|
||||
- No example usage found
|
||||
|
||||
### Crypto Operation APIs
|
||||
1. wolfTPM2_ECDHEGenKey
|
||||
- No direct test coverage
|
||||
- ECDHE key generation
|
||||
- No example usage found
|
||||
|
||||
2. wolfTPM2_ECDHEGenZ
|
||||
- No direct test coverage
|
||||
- ECDHE shared secret generation
|
||||
- No example usage found
|
||||
|
||||
### System Management APIs
|
||||
1. wolfTPM2_SetCommand
|
||||
- No direct test coverage
|
||||
- Command configuration function
|
||||
- No example usage found
|
||||
|
||||
## Test Coverage Recommendations
|
||||
|
||||
### High Priority
|
||||
1. Policy APIs
|
||||
- Add unit tests for TPM2_PolicyPhysicalPresence
|
||||
- Add unit tests for TPM2_PolicyTemplate
|
||||
- Add unit tests for TPM2_PolicyAuthorizeNV
|
||||
- Create policy example demonstrating usage
|
||||
|
||||
2. Hierarchy Management
|
||||
- Add unit tests for TPM2_HierarchyControl
|
||||
- Add unit tests for TPM2_SetPrimaryPolicy
|
||||
- Create management example showing hierarchy control
|
||||
|
||||
3. System Management
|
||||
- Add unit tests for dictionary attack functions
|
||||
- Add unit tests for algorithm management
|
||||
- Create example showing security configuration
|
||||
|
||||
### Medium Priority
|
||||
1. Context Management
|
||||
- Add unit tests for TPM2_ContextSave/Load
|
||||
- Create example showing context management
|
||||
- Add session persistence tests
|
||||
|
||||
2. Crypto Operations
|
||||
- Add unit tests for ECDHE functions
|
||||
- Extend TLS examples to use ECDHE
|
||||
- Add key import tests
|
||||
|
||||
### Low Priority
|
||||
1. Firmware Management
|
||||
- Add unit tests for firmware update functions
|
||||
- Create firmware update example
|
||||
- Add firmware read verification
|
||||
|
||||
## Test Coverage Guidelines
|
||||
1. Each test should verify:
|
||||
- Successful operation
|
||||
- Error handling
|
||||
- Return code checking
|
||||
- Resource cleanup
|
||||
|
||||
2. Example files should demonstrate:
|
||||
- Real-world usage patterns
|
||||
- Error recovery
|
||||
- Complete workflows
|
||||
|
||||
3. Test organization:
|
||||
- Unit tests for individual functions
|
||||
- Integration tests for workflows
|
||||
- Examples for usage patterns
|
||||
|
||||
4. Documentation:
|
||||
- Test prerequisites
|
||||
- Expected results
|
||||
- Error conditions
|
||||
- Cleanup requirements
|
|
@ -0,0 +1,73 @@
|
|||
# Public APIs Missing Test Coverage
|
||||
|
||||
## Key Management APIs
|
||||
1. wolfTPM2_RsaKey_PubPemToTpm - No direct test coverage
|
||||
|
||||
## Crypto Operation APIs
|
||||
2. wolfTPM2_ECDHEGenKey - No direct test coverage
|
||||
3. wolfTPM2_ECDHEGenZ - No direct test coverage
|
||||
|
||||
## System Management APIs
|
||||
4. wolfTPM2_SetCommand - No direct test coverage
|
||||
|
||||
## TPM2 Core APIs Missing Test Coverage
|
||||
|
||||
## Policy APIs
|
||||
5. TPM2_PolicyPhysicalPresence - No direct test coverage
|
||||
6. TPM2_PolicyTemplate - No direct test coverage
|
||||
7. TPM2_PolicyAuthorizeNV - No direct test coverage
|
||||
|
||||
## Hierarchy Management APIs
|
||||
8. TPM2_HierarchyControl - No direct test coverage
|
||||
9. TPM2_SetPrimaryPolicy - No direct test coverage
|
||||
10. TPM2_ChangePPS - No direct test coverage
|
||||
11. TPM2_ChangeEPS - No direct test coverage
|
||||
12. TPM2_ClearControl - No direct test coverage
|
||||
|
||||
## System Management APIs
|
||||
13. TPM2_DictionaryAttackLockReset - No direct test coverage
|
||||
14. TPM2_DictionaryAttackParameters - No direct test coverage
|
||||
15. TPM2_PP_Commands - No direct test coverage
|
||||
16. TPM2_SetAlgorithmSet - No direct test coverage
|
||||
|
||||
## Firmware Management APIs
|
||||
17. TPM2_FieldUpgradeStart - No direct test coverage
|
||||
18. TPM2_FieldUpgradeData - No direct test coverage
|
||||
19. TPM2_FirmwareRead - No direct test coverage
|
||||
|
||||
## Context Management APIs
|
||||
20. TPM2_ContextSave - No direct test coverage
|
||||
21. TPM2_ContextLoad - No direct test coverage
|
||||
|
||||
Notes:
|
||||
1. APIs marked as missing test coverage have no direct tests verifying their functionality and return code checking
|
||||
2. Some APIs may be indirectly tested through other functions but lack explicit test coverage
|
||||
3. This list excludes APIs that are tested through example files or unit tests
|
||||
4. Focus is on public APIs marked with WOLFTPM_API
|
||||
|
||||
Removed from untested list due to having test coverage:
|
||||
- wolfTPM2_ImportEccPrivateKeySeed (tested via wolfTPM2_ImportEccPrivateKey)
|
||||
- wolfTPM2_RsaKey_WolfToTpm_ex (tested in tpm2_cryptocb.c)
|
||||
- wolfTPM2_DecodeRsaDer (tested in policy_sign.c)
|
||||
- wolfTPM2_EccKey_WolfToPubPoint (tested in tpm2_cryptocb.c)
|
||||
- wolfTPM2_DecodeEccDer (tested via wolfTPM2_ImportEccPrivateKey)
|
||||
- wolfTPM2_SetSessionHandle (tested via session management functions)
|
||||
- wolfTPM2_SetAuthHandle (tested in multiple example files)
|
||||
- wolfTPM2_NVCreateAuthPolicy (tested in nvram/extend.c)
|
||||
- wolfTPM2_NVWriteAuthPolicy (tested via NV policy functions)
|
||||
- wolfTPM2_NVReadAuthPolicy (tested via NV policy functions)
|
||||
- wolfTPM2_NVOpen (tested in multiple nvram examples)
|
||||
- wolfTPM2_Shutdown (tested in wrap/caps.c)
|
||||
- wolfTPM2_UnloadHandles (tested via key management functions)
|
||||
- wolfTPM2_UnloadHandles_AllTransient (tested via key management functions)
|
||||
- All CSR APIs (tested in C# wrapper)
|
||||
- TPM2_PolicyAuthValue (tested via wolfTPM2_PolicyAuthValue)
|
||||
- TPM2_PolicyPassword (tested via wolfTPM2_PolicyPassword)
|
||||
- TPM2_PolicyNvWritten (tested in policy examples)
|
||||
- TPM2_HierarchyChangeAuth (tested via hierarchy management functions)
|
||||
|
||||
Notes:
|
||||
1. APIs marked as missing test coverage have no direct tests verifying their functionality and return code checking
|
||||
2. Some APIs may be indirectly tested through other functions but lack explicit test coverage
|
||||
3. This list excludes APIs that are tested through example files or unit tests
|
||||
4. Focus is on public APIs marked with WOLFTPM_API
|
Loading…
Reference in New Issue