Skip to content

Commit 692d509

Browse files
authored
Fix RSA PKCS11_RSA_GetAttributeValue test (#71)
* PKCS11_TEST_RSA_CERTIFICATE and PKCS11_TEST_RSA_CERTIFICATE_LENGTH must be provided to verify RSA pre-provision mechanism. * Verify the pre-provisioned certificate acquired through PKCS11 API by comparing with PKCS11_TEST_RSA_CERTIFICATE. * Update README.md document for new test config.
1 parent 9b93c54 commit 692d509

File tree

4 files changed

+63
-53
lines changed

4 files changed

+63
-53
lines changed

src/pkcs11/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@ The following table lists the required test configurations for PKCS #11 tests. T
5959
|PKCS11_TEST_LABEL_CODE_VERIFICATION_KEY |The label of the code verification key used in JITP codeverify test. |
6060
|PKCS11_TEST_LABEL_JITP_CERTIFICATE |The label of the JITP certificate used in JITP codeverify test. |
6161
|PKCS11_TEST_LABEL_ROOT_CERTIFICATE |The label of the root certificate used in JITP codeverify test. |
62+
|PKCS11_TEST_RSA_CERTIFICATE |The certificate used to verify RSA preprovision mechanism. |
63+
|PKCS11_TEST_RSA_CERTIFICATE_LENGTH |The certificate length used to verify RSA preprovision mechanism. |
6264

6365

6466
FreeRTOS libraries and reference integrations needs at least one of the key function and one of the key provisioning mechanism supported by the PKCS #11 APIs. The test must enable at least one of the following configurations:
@@ -77,6 +79,7 @@ Pre-provisioned device credential test can not be enabled with other provisionin
7779
* Enable **PKCS11_TEST_PREPROVISIONED_SUPPORT** and the other provisioning mechanisms must be disabled
7880
* Only one of the key function, **PKCS11_TEST_RSA_KEY_SUPPORT** or **PKCS11_TEST_EC_KEY_SUPPORT**, enabled
7981
* Setup the pre-provisioned key labels according to your key function, including **PKCS11_TEST_LABEL_DEVICE_PRIVATE_KEY_FOR_TLS**, **PKCS11_TEST_LABEL_DEVICE_PUBLIC_KEY_FOR_TLS** and **PKCS11_TEST_LABEL_DEVICE_CERTIFICATE_FOR_TLS**. These credentials must exist in the PKCS #11 before running the test.
82+
* **PKCS11_TEST_RSA_CERTIFICATE** and **PKCS11_TEST_RSA_CERTIFICATE_LENGTH** must be defined before running the test to verify RSA preprovision mechanism.
8083

8184
You may need to run the test several times with different configurations if your implementation support pre-provisioned credentials and other provisioning mechanisms.
8285

src/pkcs11/core_pkcs11_test.c

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -56,14 +56,14 @@
5656
#include "mbedtls/ctr_drbg.h"
5757
#include "mbedtls/x509_crt.h"
5858

59+
/* Test configuration includes. */
60+
#include "test_param_config.h"
61+
5962
/* corePKCS11 test includes. */
6063
#include "platform_function.h"
6164
#include "rsa_test_credentials.h"
6265
#include "ecdsa_test_credentials.h"
6366

64-
/* Test configuration includes. */
65-
#include "test_param_config.h"
66-
6767
/*-----------------------------------------------------------*/
6868

6969
/**
@@ -140,7 +140,7 @@
140140
/**
141141
* @brief Test RSA certificate value length.
142142
*/
143-
#define CERTIFICATE_VALUE_LENGTH ( 949 )
143+
#define CERTIFICATE_VALUE_LENGTH ( RSA_TEST_VALID_CERTIFICATE_LENGTH )
144144

145145
/**
146146
* @brief EC point length.
@@ -1635,39 +1635,37 @@ static void prvTestRsaGetAttributeValue( provisionMethod_t testProvisionMethod )
16351635
xTemplate.pValue = NULL;
16361636
xTemplate.ulValueLen = 0;
16371637
xResult = pxGlobalFunctionList->C_GetAttributeValue( xGlobalSession, xCertificateHandle, &xTemplate, 1 );
1638+
TEST_ASSERT_MESSAGE( ( CKR_OK == xResult ), "Failed to get RSA certificate value length." );
16381639
TEST_ASSERT_MESSAGE( ( CERTIFICATE_VALUE_LENGTH == xTemplate.ulValueLen ), "GetAttributeValue returned incorrect length of RSA certificate value" );
16391640

16401641
/* Get the certificate value. */
16411642
xTemplate.pValue = xCertificateValue;
16421643
xResult = pxGlobalFunctionList->C_GetAttributeValue( xGlobalSession, xCertificateHandle, &xTemplate, 1 );
1643-
TEST_ASSERT_MESSAGE( ( CKR_OK == xResult ), "Failed to get RSA certificate value" );
1644+
TEST_ASSERT_MESSAGE( ( CKR_OK == xResult ), "Failed to get RSA certificate value." );
16441645
TEST_ASSERT_MESSAGE( ( CERTIFICATE_VALUE_LENGTH == xTemplate.ulValueLen ), "GetAttributeValue returned incorrect length of RSA certificate value" );
16451646

1646-
if( testProvisionMethod == eProvisionImportPrivateKey )
1647-
{
1648-
/* Verify the imported certificate. */
1649-
pucDerObject = FRTest_MemoryAlloc( sizeof( cValidRSACertificate ) );
1650-
TEST_ASSERT_MESSAGE( pucDerObject != NULL, "Allocate memory for RSA certificate failed." );
1651-
xDerLen = sizeof( cValidRSACertificate );
1647+
/* Verify the imported certificate. */
1648+
pucDerObject = FRTest_MemoryAlloc( sizeof( cValidRSACertificate ) );
1649+
TEST_ASSERT_MESSAGE( pucDerObject != NULL, "Allocate memory for RSA certificate failed." );
1650+
xDerLen = sizeof( cValidRSACertificate );
16521651

1653-
lConversionReturn = convert_pem_to_der( ( const unsigned char * ) cValidRSACertificate,
1654-
sizeof( cValidRSACertificate ),
1655-
pucDerObject,
1656-
&xDerLen );
1652+
lConversionReturn = convert_pem_to_der( ( const unsigned char * ) cValidRSACertificate,
1653+
sizeof( cValidRSACertificate ),
1654+
pucDerObject,
1655+
&xDerLen );
16571656

1658-
if( lConversionReturn == 0 )
1659-
{
1660-
lImportKeyCompare = memcmp( xTemplate.pValue, pucDerObject, xTemplate.ulValueLen );
1661-
}
1657+
if( lConversionReturn == 0 )
1658+
{
1659+
lImportKeyCompare = memcmp( xTemplate.pValue, pucDerObject, xTemplate.ulValueLen );
1660+
}
16621661

1663-
/* Free the allocated memory and compare. */
1664-
FRTest_MemoryFree( pucDerObject );
1665-
pucDerObject = NULL;
1662+
/* Free the allocated memory and compare. */
1663+
FRTest_MemoryFree( pucDerObject );
1664+
pucDerObject = NULL;
16661665

1667-
if( ( lConversionReturn != 0 ) || ( lImportKeyCompare != 0 ) )
1668-
{
1669-
TEST_FAIL_MESSAGE( "Compare imported RSA certificate failed." );
1670-
}
1666+
if( ( lConversionReturn != 0 ) || ( lImportKeyCompare != 0 ) )
1667+
{
1668+
TEST_FAIL_MESSAGE( "Compare imported RSA certificate failed." );
16711669
}
16721670

16731671
/* Get the private key handle. */
@@ -1753,6 +1751,7 @@ static void prvTestRsaSign( provisionMethod_t testProvisionMethod )
17531751
if( TEST_PROTECT() )
17541752
{
17551753
#if MBEDTLS_VERSION_NUMBER < 0x03000000
1754+
{
17561755
lMbedTLSResult = mbedtls_pk_parse_key( ( mbedtls_pk_context * ) &xMbedPkContext,
17571756
( const unsigned char * ) cValidRSAPrivateKey,
17581757
sizeof( cValidRSAPrivateKey ),
@@ -1762,9 +1761,10 @@ static void prvTestRsaSign( provisionMethod_t testProvisionMethod )
17621761

17631762
lMbedTLSResult = mbedtls_rsa_pkcs1_verify( xMbedPkContext.pk_ctx, NULL, NULL,
17641763
MBEDTLS_RSA_PUBLIC, MBEDTLS_MD_SHA256, 32, xHashedMessage, xSignature );
1765-
TEST_ASSERT_MESSAGE( ( 0 == xResult ), "mbedTLS failed to verify RSA signagure." );
1766-
1764+
TEST_ASSERT_MESSAGE( ( 0 == xResult ), "mbedTLS failed to verify RSA signature." );
1765+
}
17671766
#else
1767+
{
17681768
lMbedTLSResult = mbedtls_ctr_drbg_seed( &xDrbgContext, mbedtls_entropy_func, &xEntropyContext, NULL, 0 );
17691769
TEST_ASSERT_MESSAGE( ( 0 == lMbedTLSResult ), "Failed to initialize DRBG" );
17701770

@@ -1779,7 +1779,7 @@ static void prvTestRsaSign( provisionMethod_t testProvisionMethod )
17791779
lMbedTLSResult = mbedtls_rsa_pkcs1_verify( xMbedPkContext.pk_ctx, MBEDTLS_MD_SHA256,
17801780
32, xHashedMessage, xSignature );
17811781
TEST_ASSERT_MESSAGE( ( 0 == xResult ), "mbedTLS failed to verify RSA signagure." );
1782-
1782+
}
17831783
#endif /* MBEDTLS_VERSION_NUMBER < 0x03000000 */
17841784
}
17851785

src/pkcs11/dev_mode_key_provisioning/dev_mode_key_provisioning.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -470,7 +470,7 @@ CK_RV xProvisionPublicKey( CK_SESSION_HANDLE xSession,
470470
xPublicKeyTemplate[ 0 ].pValue = &xClass;
471471
xPublicKeyTemplate[ 1 ].pValue = &xPublicKeyType;
472472
xPublicKeyTemplate[ 2 ].pValue = &xTrue;
473-
xPublicKeyTemplate[ 3 ].pValue = &xModulus + 1;
473+
xPublicKeyTemplate[ 3 ].pValue = &xModulus[ 1 ];
474474
xPublicKeyTemplate[ 4 ].pValue = &xTrue;
475475
xPublicKeyTemplate[ 5 ].pValue = xPublicExponent;
476476

src/pkcs11/rsa_test_credentials.h

Lines changed: 30 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -66,29 +66,36 @@
6666
"YZ4lIW5sJLATES9+Z8nHi7yRDLw6x/kcVQIDAQAB\n" \
6767
"-----END RSA PUBLIC KEY-----\n"
6868

69-
70-
#define RSA_TEST_VALID_CERTIFICATE \
71-
"-----BEGIN CERTIFICATE-----\n" \
72-
"MIIDsTCCApmgAwIBAgIJALg4YJlPspxyMA0GCSqGSIb3DQEBCwUAMG8xCzAJBgNV\n" \
73-
"BAYTAlVTMQswCQYDVQQIDAJXQTEQMA4GA1UEBwwHU2VhdHRsZTENMAsGA1UECgwE\n" \
74-
"QW16bjEMMAoGA1UECwwDSW9UMQ0wCwYDVQQDDARUZXN0MRUwEwYJKoZIhvcNAQkB\n" \
75-
"FgZub2JvZHkwHhcNMTgwNjExMTk0NjM2WhcNMjEwMzMxMTk0NjM2WjBvMQswCQYD\n" \
76-
"VQQGEwJVUzELMAkGA1UECAwCV0ExEDAOBgNVBAcMB1NlYXR0bGUxDTALBgNVBAoM\n" \
77-
"BEFtem4xDDAKBgNVBAsMA0lvVDENMAsGA1UEAwwEVGVzdDEVMBMGCSqGSIb3DQEJ\n" \
78-
"ARYGbm9ib2R5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsIqRecRx\n" \
79-
"Lz3PZXzZOHF7jMlB25tfv2LDGR7nGTJiey5zxd7oswihe7+26yx8medpNvX1ym9j\n" \
80-
"phty+9IR053k1WGnQQ4aaDeJonqn7V50Vesw6zFx/x8LMdXFoBAkRXIL8WS5YKaf\n" \
81-
"C87KPnye8A0piVWUFy7+IEEaK3hQEJTzB6LC/N100XL5ykLCa4xJBOqlIvbDvJ+b\n" \
82-
"Kty1EBA3sStlTNuXi3nBWZbXwCB2A+ddjijFf5+gUjinr7h6e2uQeipWyiIw9NKW\n" \
83-
"bvq8AG1Mj4XBoFL9wP2YTf2SQAgAzx0ySPNrIYOzBNl1YZ4lIW5sJLATES9+Z8nH\n" \
84-
"i7yRDLw6x/kcVQIDAQABo1AwTjAdBgNVHQ4EFgQUHc4PjEL0CaxZ+1D/4VdeDjxt\n" \
85-
"JO8wHwYDVR0jBBgwFoAUHc4PjEL0CaxZ+1D/4VdeDjxtJO8wDAYDVR0TBAUwAwEB\n" \
86-
"/zANBgkqhkiG9w0BAQsFAAOCAQEAi1/okTpQuPcaQEBgepccZ/Lt/gEQNdGcbsYQ\n" \
87-
"3aEABNVYL8dYOW9r/8l074zD+vi9iSli/yYmwRFD0baN1FRWUqkVEIQ+3yfivOW9\n" \
88-
"R282NuQvEULgERC2KN7vm0vO+DF7ay58qm4PaAGHdQco1LaHKkljMPLHF841facG\n" \
89-
"M9KVtzFveOQKkWvb4VgOyfn7aCnEogGlWt1S0d12pBRwYjJgKrVQaGs6IiGFVtm8\n" \
90-
"JRLZrLL3sfgsN7L1xu//JUoTOkgxdKuYRmPuUdV2hw/VYDzcnKj7/DMXNDvgl3s7\n" \
91-
"5GC4F+8LFLzRrZJWs18FMLaCE+zJChw/oeSt+RS0JZDFn+uX9Q==\n" \
69+
#ifndef PKCS11_TEST_RSA_CERTIFICATE
70+
#define PKCS11_TEST_RSA_CERTIFICATE \
71+
"-----BEGIN CERTIFICATE-----\n" \
72+
"MIIDsTCCApmgAwIBAgIJALg4YJlPspxyMA0GCSqGSIb3DQEBCwUAMG8xCzAJBgNV\n" \
73+
"BAYTAlVTMQswCQYDVQQIDAJXQTEQMA4GA1UEBwwHU2VhdHRsZTENMAsGA1UECgwE\n" \
74+
"QW16bjEMMAoGA1UECwwDSW9UMQ0wCwYDVQQDDARUZXN0MRUwEwYJKoZIhvcNAQkB\n" \
75+
"FgZub2JvZHkwHhcNMTgwNjExMTk0NjM2WhcNMjEwMzMxMTk0NjM2WjBvMQswCQYD\n" \
76+
"VQQGEwJVUzELMAkGA1UECAwCV0ExEDAOBgNVBAcMB1NlYXR0bGUxDTALBgNVBAoM\n" \
77+
"BEFtem4xDDAKBgNVBAsMA0lvVDENMAsGA1UEAwwEVGVzdDEVMBMGCSqGSIb3DQEJ\n" \
78+
"ARYGbm9ib2R5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsIqRecRx\n" \
79+
"Lz3PZXzZOHF7jMlB25tfv2LDGR7nGTJiey5zxd7oswihe7+26yx8medpNvX1ym9j\n" \
80+
"phty+9IR053k1WGnQQ4aaDeJonqn7V50Vesw6zFx/x8LMdXFoBAkRXIL8WS5YKaf\n" \
81+
"C87KPnye8A0piVWUFy7+IEEaK3hQEJTzB6LC/N100XL5ykLCa4xJBOqlIvbDvJ+b\n" \
82+
"Kty1EBA3sStlTNuXi3nBWZbXwCB2A+ddjijFf5+gUjinr7h6e2uQeipWyiIw9NKW\n" \
83+
"bvq8AG1Mj4XBoFL9wP2YTf2SQAgAzx0ySPNrIYOzBNl1YZ4lIW5sJLATES9+Z8nH\n" \
84+
"i7yRDLw6x/kcVQIDAQABo1AwTjAdBgNVHQ4EFgQUHc4PjEL0CaxZ+1D/4VdeDjxt\n" \
85+
"JO8wHwYDVR0jBBgwFoAUHc4PjEL0CaxZ+1D/4VdeDjxtJO8wDAYDVR0TBAUwAwEB\n" \
86+
"/zANBgkqhkiG9w0BAQsFAAOCAQEAi1/okTpQuPcaQEBgepccZ/Lt/gEQNdGcbsYQ\n" \
87+
"3aEABNVYL8dYOW9r/8l074zD+vi9iSli/yYmwRFD0baN1FRWUqkVEIQ+3yfivOW9\n" \
88+
"R282NuQvEULgERC2KN7vm0vO+DF7ay58qm4PaAGHdQco1LaHKkljMPLHF841facG\n" \
89+
"M9KVtzFveOQKkWvb4VgOyfn7aCnEogGlWt1S0d12pBRwYjJgKrVQaGs6IiGFVtm8\n" \
90+
"JRLZrLL3sfgsN7L1xu//JUoTOkgxdKuYRmPuUdV2hw/VYDzcnKj7/DMXNDvgl3s7\n" \
91+
"5GC4F+8LFLzRrZJWs18FMLaCE+zJChw/oeSt+RS0JZDFn+uX9Q==\n" \
9292
"-----END CERTIFICATE-----\n"
93+
#endif
94+
#ifndef PKCS11_TEST_RSA_CERTIFICATE_LENGTH
95+
#define PKCS11_TEST_RSA_CERTIFICATE_LENGTH ( 949 )
96+
#endif
97+
98+
#define RSA_TEST_VALID_CERTIFICATE PKCS11_TEST_RSA_CERTIFICATE
99+
#define RSA_TEST_VALID_CERTIFICATE_LENGTH PKCS11_TEST_RSA_CERTIFICATE_LENGTH
93100

94101
#endif /* ifndef RSA_TEST_CREDENTIALS_H */

0 commit comments

Comments
 (0)