#include <mcuxClExample_ELS_Helper.h>
#include <mcuxClExample_Session_Helper.h>
#include <mcuxClExample_RNG_Helper.h>
#include <mcuxClCore_Examples.h>
#define RAM_START_ADDRESS MCUXCLPKC_RAM_START_ADDRESS
#define MAX_CPUWA_SIZE ((MCUXCLECC_MONT_DHKEYGENERATION_CURVE25519_WACPU_SIZE >= MCUXCLECC_MONT_DHKEYAGREEMENT_CURVE25519_WACPU_SIZE) ? MCUXCLECC_MONT_DHKEYGENERATION_CURVE25519_WACPU_SIZE : MCUXCLECC_MONT_DHKEYAGREEMENT_CURVE25519_WACPU_SIZE)
#define MAX_PKCWA_SIZE ((MCUXCLECC_MONT_DHKEYGENERATION_CURVE25519_WAPKC_SIZE >= MCUXCLECC_MONT_DHKEYAGREEMENT_CURVE25519_WAPKC_SIZE) ? MCUXCLECC_MONT_DHKEYGENERATION_CURVE25519_WAPKC_SIZE : MCUXCLECC_MONT_DHKEYAGREEMENT_CURVE25519_WAPKC_SIZE)
{
{
return MCUXCLEXAMPLE_STATUS_ERROR;
}
MCUXCLEXAMPLE_ALLOCATE_AND_INITIALIZE_SESSION(&session, MAX_CPUWA_SIZE, MAX_PKCWA_SIZE);
MCUXCLEXAMPLE_ALLOCATE_AND_INITIALIZE_RNG(&session, 0u, mcuxClRandomModes_Mode_ELS_Drbg);
uint8_t alicePrivKeyDesc[MCUXCLKEY_DESCRIPTOR_SIZE];
uint8_t alicePubKeyDesc[MCUXCLKEY_DESCRIPTOR_SIZE];
uint8_t alicePrivKeyBuffer[MCUXCLECC_MONT_CURVE25519_SIZE_PRIVATEKEY]={0};
uint8_t alicePubKeyBuffer[MCUXCLECC_MONT_CURVE25519_SIZE_PUBLICKEY]={0};
uint32_t alicePrivKeySize = 0u;
uint32_t alicePubKeySize = 0u;
alicePrivKeyHandler,
alicePrivKeyBuffer, &alicePrivKeySize,
alicePubKeyHandler,
alicePubKeyBuffer, &alicePubKeySize)
);
{
return MCUXCLEXAMPLE_STATUS_ERROR;
}
uint8_t bobPrivKeyDesc[MCUXCLKEY_DESCRIPTOR_SIZE];
uint8_t bobPubKeyDesc[MCUXCLKEY_DESCRIPTOR_SIZE];
uint8_t bobPrivKeyBuffer[MCUXCLECC_MONT_CURVE25519_SIZE_PRIVATEKEY]={0};
uint8_t bobPubKeyBuffer[MCUXCLECC_MONT_CURVE25519_SIZE_PUBLICKEY]={0};
uint32_t bobPrivKeySize = 0u;
uint32_t bobPubKeySize = 0u;
bobPrivKeyHandler,
bobPrivKeyBuffer, &bobPrivKeySize,
bobPubKeyHandler,
bobPubKeyBuffer, &bobPubKeySize)
);
{
return MCUXCLEXAMPLE_STATUS_ERROR;
}
uint8_t aliceSharedSecret[MCUXCLECC_MONT_CURVE25519_SIZE_SHAREDSECRET];
uint32_t aliceSharedSecretSize;
alicePrivKeyHandler,
bobPubKeyHandler,
aliceSharedSecret,
&aliceSharedSecretSize));
{
return MCUXCLEXAMPLE_STATUS_ERROR;
}
uint8_t bobSharedSecret[MCUXCLECC_MONT_CURVE25519_SIZE_SHAREDSECRET];
uint32_t bobSharedSecretSize;
bobPrivKeyHandler,
alicePubKeyHandler,
bobSharedSecret,
&bobSharedSecretSize));
{
return MCUXCLEXAMPLE_STATUS_ERROR;
}
for(size_t i = 0u; i < MCUXCLECC_MONT_CURVE25519_SIZE_SHAREDSECRET; i++)
{
if(bobSharedSecret[i] != aliceSharedSecret[i])
{
return MCUXCLEXAMPLE_STATUS_ERROR;
}
}
if(!mcuxClExample_Session_Clean(&session))
{
return MCUXCLEXAMPLE_STATUS_ERROR;
}
if(!mcuxClExample_Els_Disable())
{
return MCUXCLEXAMPLE_STATUS_ERROR;
}
return MCUXCLEXAMPLE_STATUS_OK;
}