Example of PuK import from a DER-encoded certificate using the ELS (CLNS component mcuxClEls)
#include <mcuxClCore_Examples.h>
#include <mcuxClExample_ELS_Helper.h>
#include <mcuxClExample_ELS_Key_Helper.h>
#include <mcuxClExample_RFC3394_Helper.h>
0x30U, 0x82U, 0x01U, 0xBEU, 0x30U, 0x82U, 0x01U, 0x63U, 0x02U, 0x14U, 0x14U, 0xFDU, 0x55U, 0xCAU, 0x4AU, 0x3BU,
0x27U, 0xB7U, 0x47U, 0xCAU, 0x12U, 0x5CU, 0xD4U, 0x52U, 0x6DU, 0x82U, 0xC9U, 0xB5U, 0xB7U, 0xA7U, 0x30U, 0x0AU,
0x06U, 0x08U, 0x2AU, 0x86U, 0x48U, 0xCEU, 0x3DU, 0x04U, 0x03U, 0x02U, 0x30U, 0x61U, 0x31U, 0x0BU, 0x30U, 0x09U,
0x06U, 0x03U, 0x55U, 0x04U, 0x06U, 0x13U, 0x02U, 0x30U, 0x30U, 0x31U, 0x0BU, 0x30U, 0x09U, 0x06U, 0x03U, 0x55U,
0x04U, 0x08U, 0x0CU, 0x02U, 0x30U, 0x30U, 0x31U, 0x0BU, 0x30U, 0x09U, 0x06U, 0x03U, 0x55U, 0x04U, 0x07U, 0x0CU,
0x02U, 0x30U, 0x30U, 0x31U, 0x0BU, 0x30U, 0x09U, 0x06U, 0x03U, 0x55U, 0x04U, 0x0AU, 0x0CU, 0x02U, 0x30U, 0x30U,
0x31U, 0x0BU, 0x30U, 0x09U, 0x06U, 0x03U, 0x55U, 0x04U, 0x0BU, 0x0CU, 0x02U, 0x30U, 0x30U, 0x31U, 0x0BU, 0x30U,
0x09U, 0x06U, 0x03U, 0x55U, 0x04U, 0x03U, 0x0CU, 0x02U, 0x30U, 0x30U, 0x31U, 0x11U, 0x30U, 0x0FU, 0x06U, 0x09U,
0x2AU, 0x86U, 0x48U, 0x86U, 0xF7U, 0x0DU, 0x01U, 0x09U, 0x01U, 0x16U, 0x02U, 0x30U, 0x30U, 0x30U, 0x1EU, 0x17U,
0x0DU, 0x32U, 0x31U, 0x31U, 0x32U, 0x31U, 0x33U, 0x31U, 0x30U, 0x31U, 0x32U, 0x30U, 0x35U, 0x5AU, 0x17U, 0x0DU,
0x32U, 0x32U, 0x31U, 0x32U, 0x31U, 0x33U, 0x31U, 0x30U, 0x31U, 0x32U, 0x30U, 0x35U, 0x5AU, 0x30U, 0x61U, 0x31U,
0x0BU, 0x30U, 0x09U, 0x06U, 0x03U, 0x55U, 0x04U, 0x06U, 0x13U, 0x02U, 0x30U, 0x30U, 0x31U, 0x0BU, 0x30U, 0x09U,
0x06U, 0x03U, 0x55U, 0x04U, 0x08U, 0x0CU, 0x02U, 0x30U, 0x30U, 0x31U, 0x0BU, 0x30U, 0x09U, 0x06U, 0x03U, 0x55U,
0x04U, 0x07U, 0x0CU, 0x02U, 0x30U, 0x30U, 0x31U, 0x0BU, 0x30U, 0x09U, 0x06U, 0x03U, 0x55U, 0x04U, 0x0AU, 0x0CU,
0x02U, 0x30U, 0x30U, 0x31U, 0x0BU, 0x30U, 0x09U, 0x06U, 0x03U, 0x55U, 0x04U, 0x0BU, 0x0CU, 0x02U, 0x30U, 0x30U,
0x31U, 0x0BU, 0x30U, 0x09U, 0x06U, 0x03U, 0x55U, 0x04U, 0x03U, 0x0CU, 0x02U, 0x30U, 0x30U, 0x31U, 0x11U, 0x30U,
0x0FU, 0x06U, 0x09U, 0x2AU, 0x86U, 0x48U, 0x86U, 0xF7U, 0x0DU, 0x01U, 0x09U, 0x01U, 0x16U, 0x02U, 0x30U, 0x30U,
0x30U, 0x59U, 0x30U, 0x13U, 0x06U, 0x07U, 0x2AU, 0x86U, 0x48U, 0xCEU, 0x3DU, 0x02U, 0x01U, 0x06U, 0x08U, 0x2AU,
0x86U, 0x48U, 0xCEU, 0x3DU, 0x03U, 0x01U, 0x07U,
0x03U, 0x42U, 0x00U, 0x04U,
0x12U, 0x54U, 0x6EU, 0xDBU, 0x7CU, 0xD4U, 0x85U, 0xBEU, 0xDDU, 0x5BU, 0x3BU, 0x71U, 0xB7U, 0x0EU, 0xC2U, 0x19U,
0x34U, 0x76U, 0x3BU, 0xAFU, 0xD2U, 0xE5U, 0xA2U, 0x76U, 0xCAU, 0xB6U, 0x09U, 0x63U, 0x09U, 0xA5U, 0x7FU, 0xEEU,
0xF9U, 0x74U, 0x18U, 0x5DU, 0x9AU, 0x4AU, 0x0EU, 0x88U, 0x4AU, 0xBEU, 0xF4U, 0xBEU, 0xBDU, 0xC9U, 0x96U, 0x64U,
0xBBU, 0xD5U, 0x67U, 0x94U, 0xACU, 0x9CU, 0x30U, 0xBAU, 0xF7U, 0xCFU, 0x36U, 0x18U, 0x91U, 0x10U, 0xE6U, 0x7EU,
0x30U, 0x0AU, 0x06U, 0x08U, 0x2AU, 0x86U, 0x48U, 0xCEU, 0x3DU, 0x04U, 0x03U, 0x02U, 0x03U, 0x49U, 0x00U, 0x30U,
0x46U,
0x02U, 0x21U,
0x00U, 0xC3U, 0x08U, 0x77U, 0xFBU, 0x74U, 0x0FU, 0x18U, 0x57U, 0xC0U, 0x1EU, 0xE1U, 0x22U, 0x5CU, 0x07U, 0x54U,
0x29U, 0x2AU, 0xEAU, 0x79U, 0x1DU, 0x06U, 0xEFU, 0xF0U, 0x61U, 0xEAU, 0xB7U, 0xEDU, 0x83U, 0x5BU, 0x16U, 0x64U,
0x9BU,
0x02U, 0x21U,
0x00U, 0xB0U, 0x8BU, 0xFAU, 0x21U, 0x8EU, 0x03U, 0x9BU, 0xA4U, 0x14U, 0x69U, 0x1AU, 0x81U, 0x93U, 0xF2U, 0x13U,
0x27U, 0x06U, 0x28U, 0x24U, 0xB1U, 0x1DU, 0x64U, 0x72U, 0x79U, 0xADU, 0x92U, 0x6EU, 0x9CU, 0xD2U, 0x79U, 0x8BU,
0xFDU
};
#define SHA256_BLOCK_SIZE 64U
static uint8_t
key_rfc3394[MCUXCLELS_RFC3394_CONTAINER_SIZE_P256] = { 0U };
{
{
return MCUXCLEXAMPLE_STATUS_ERROR;
}
uint8_t key_idx_helper_key = 0u;
uint8_t key_idx_ecc_root_private_key = 8u;
uint8_t key_idx_ecc_root_public_key = 12u;
uint8_t key_idx_ecc_import_public_key = 16u;
0x00,
));
{
return MCUXCLEXAMPLE_STATUS_ERROR;
}
));
{
return MCUXCLEXAMPLE_STATUS_ERROR;
}
size_t padIndex = der_certificate_paddedLength;
keygen_options,
key_idx_ecc_root_private_key,
keygen_prop,
NULL,
));
{
return MCUXCLEXAMPLE_STATUS_ERROR;
}
{
return MCUXCLEXAMPLE_STATUS_ERROR;
}
sign_options,
key_idx_ecc_root_private_key,
NULL,
der_certificate_paddedLength,
));
{
return MCUXCLEXAMPLE_STATUS_ERROR;
}
{
return MCUXCLEXAMPLE_STATUS_ERROR;
}
mcuxClEls_KeyProvisionOption_t key_provision_options;
key_provision_options.word.value = 0U;
key_provision_options.bits.noic = MCUXCLELS_KEYPROV_NOIC_ENABLE;
#error KEYPROV command not supported
{
return MCUXCLEXAMPLE_STATUS_ERROR;
}
{
}
key_properties.
bits.
ksize = MCUXCLELS_KEYPROPERTY_KEY_SIZE_512;
key_properties.
bits.upuk = MCUXCLELS_KEYPROPERTY_PUK_TRUE;
bool wrap_result = mcuxClExample_rfc3394_wrap(
ecc_root_public_key_switched,
NULL,
key_idx_helper_key,
0U,
0U,
key_properties);
if (!wrap_result)
{
return MCUXCLEXAMPLE_STATUS_ERROR;
}
MCUXCLELS_RFC3394_CONTAINER_SIZE_P256,
key_idx_helper_key,
key_idx_ecc_root_public_key
));
{
return MCUXCLEXAMPLE_STATUS_ERROR;
}
{
return MCUXCLEXAMPLE_STATUS_ERROR;
}
key_properties.
bits.
ksize = MCUXCLELS_KEYPROPERTY_KEY_SIZE_512;
key_properties.
bits.upuk = MCUXCLELS_KEYPROPERTY_PUK_TRUE;
der_certificate_paddedLength,
key_idx_ecc_root_public_key,
key_properties,
key_idx_ecc_import_public_key,
{
return MCUXCLEXAMPLE_STATUS_ERROR;
}
{
return MCUXCLEXAMPLE_STATUS_ERROR;
}
{
{
return MCUXCLEXAMPLE_STATUS_ERROR;
}
}
{
return MCUXCLEXAMPLE_STATUS_ERROR;
}
{
return MCUXCLEXAMPLE_STATUS_ERROR;
}
{
return MCUXCLEXAMPLE_STATUS_ERROR;
}
if (key_properties.
bits.upuk != key_properties_imported.
bits.upuk)
{
return MCUXCLEXAMPLE_STATUS_ERROR;
}
if(!mcuxClExample_Els_KeyDelete(key_idx_helper_key))
{
return MCUXCLEXAMPLE_STATUS_ERROR;
}
if(!mcuxClExample_Els_KeyDelete(key_idx_ecc_root_private_key))
{
return MCUXCLEXAMPLE_STATUS_ERROR;
}
if(!mcuxClExample_Els_KeyDelete(key_idx_ecc_root_public_key))
{
return MCUXCLEXAMPLE_STATUS_ERROR;
}
if(!mcuxClExample_Els_KeyDelete(key_idx_ecc_import_public_key))
{
return MCUXCLEXAMPLE_STATUS_ERROR;
}
if(!mcuxClExample_Els_Disable())
{
return MCUXCLEXAMPLE_STATUS_ERROR;
}
return MCUXCLEXAMPLE_STATUS_OK;
}