#include <mcuxClCore_Examples.h>
#include <mcuxClExample_Session_Helper.h>
#define BN256_BYTE_LEN_P (32u)
#define BN256_BYTE_LEN_N (32u)
static const uint8_t BN_P256_P[BN256_BYTE_LEN_P] =
{
0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFCu, 0xF0u, 0xCDu,
0x46u, 0xE5u, 0xF2u, 0x5Eu, 0xEEu, 0x71u, 0xA4u, 0x9Fu,
0x0Cu, 0xDCu, 0x65u, 0xFBu, 0x12u, 0x98u, 0x0Au, 0x82u,
0xD3u, 0x29u, 0x2Du, 0xDBu, 0xAEu, 0xD3u, 0x30u, 0x13u};
static const uint8_t BN_P256_A[BN256_BYTE_LEN_P] =
{
0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u
};
static const uint8_t BN_P256_B[BN256_BYTE_LEN_P] =
{
0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x03u
};
static const uint8_t BN_P256_G[2u * BN256_BYTE_LEN_P] =
{
0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x01u,
0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u,
0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x00u, 0x02u
};
static const uint8_t BN_P256_N[BN256_BYTE_LEN_N] =
{
0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFCu, 0xF0u, 0xCDu,
0x46u, 0xE5u, 0xF2u, 0x5Eu, 0xEEu, 0x71u, 0xA4u, 0x9Eu,
0x0Cu, 0xDCu, 0x65u, 0xFBu, 0x12u, 0x99u, 0x92u, 0x1Au,
0xF6u, 0x2Du, 0x53u, 0x6Cu, 0xD1u, 0x0Bu, 0x50u, 0x0Du
};
#define MAX_CPUWA_SIZE MCUXCLECC_WEIERECC_GENERATEDOMAINPARAMS_WACPU_SIZE
#define MAX_PKCWA_SIZE MCUXCLECC_WEIERECC_GENERATEDOMAINPARAMS_WAPKC_SIZE(BN256_BYTE_LEN_P, BN256_BYTE_LEN_N)
{
MCUXCLEXAMPLE_ALLOCATE_AND_INITIALIZE_SESSION(pSession, MAX_CPUWA_SIZE, MAX_PKCWA_SIZE);
EccWeierBasicDomainParams.
pP = BN_P256_P;
EccWeierBasicDomainParams.
pLen = BN256_BYTE_LEN_P;
EccWeierBasicDomainParams.
pA = BN_P256_A;
EccWeierBasicDomainParams.
pB = BN_P256_B;
EccWeierBasicDomainParams.
pG = BN_P256_G;
EccWeierBasicDomainParams.
pN = BN_P256_N;
EccWeierBasicDomainParams.
nLen = BN256_BYTE_LEN_N;
pEccWeierDomainParams,
&EccWeierBasicDomainParams,
MCUXCLECC_OPTION_GENERATEPRECPOINT_YES)
);
{
return MCUXCLEXAMPLE_STATUS_ERROR;
}
uint32_t customPrivKeyTypeDescriptor[MCUXCLKEY_CUSTOMTYPEDESCRIPTOR_SIZE_IN_WORDS] = {0};
customPrivKeyType,
(void *) pEccWeierDomainParams)
);
{
return MCUXCLEXAMPLE_STATUS_ERROR;
}
uint32_t customPubKeyTypeDescriptor[MCUXCLKEY_CUSTOMTYPEDESCRIPTOR_SIZE_IN_WORDS] = {0};
customPubKeyType,
(void *) pEccWeierDomainParams)
);
{
return MCUXCLEXAMPLE_STATUS_ERROR;
}
uint8_t privKeyDesc[MCUXCLKEY_DESCRIPTOR_SIZE];
pSession,
privKey,
customPrivKeyType,
);
{
return MCUXCLEXAMPLE_STATUS_ERROR;
}
uint8_t pubKeyDesc[MCUXCLKEY_DESCRIPTOR_SIZE];
uint8_t pPubKeyData[MCUXCLECC_WEIERECC_NIST_P256_SIZE_PUBLICKEY];
pSession,
pubKey,
customPubKeyType,
);
{
return MCUXCLEXAMPLE_STATUS_ERROR;
}
if(!mcuxClExample_Session_Clean(pSession))
{
return MCUXCLEXAMPLE_STATUS_ERROR;
}
return MCUXCLEXAMPLE_STATUS_OK;
}