MCUX CLNS
MCUX Crypto Library Normal Secure
Loading...
Searching...
No Matches
mcuxClFfdh_KeyAgreement_ffdhe4096_example.c

Example for the mcuxClFfdh component.

Example for the mcuxClFfdh component

/*--------------------------------------------------------------------------*/
/* Copyright 2025 NXP */
/* */
/* NXP Confidential and Proprietary. This software is owned or controlled */
/* by NXP and may only be used strictly in accordance with the applicable */
/* license terms. By expressly accepting such terms or by downloading, */
/* installing, activating and/or otherwise using the software, you are */
/* agreeing that you have read, and that you agree to comply with and are */
/* bound by, such license terms. If you do not agree to be bound by the */
/* applicable license terms, then you may not retain, install, activate or */
/* otherwise use the software. */
/*--------------------------------------------------------------------------*/
#include <mcuxClToolchain.h>
#include <mcuxClSession.h>
#include <mcuxClKey.h>
#include <mcuxClFfdh.h>
#include <mcuxClCore_Examples.h>
#include <mcuxClExample_Session_Helper.h>
#include <mcuxClExample_RNG_Helper.h>
#include <mcuxClRandom.h>
#include <mcuxClCore_FunctionIdentifiers.h> // Code flow protection
#define MAX_CPUWA_SIZE (MCUXCLKEY_AGREEMENT_FFDH_WACPU_SIZE_4096)
#define MAX_PKCWA_SIZE (MCUXCLKEY_AGREEMENT_FFDH_WAPKC_SIZE_4096)
/* Private key Alice (randomly generated) [BE] 0x3460485433ff505e63731a0d913283cd122e792cec567454c4f7c18930ce1511dcce731d7810cf42a3c3c0e6b72b5c3c2160b5eb89e991ef7a07bededb9322afc8996dd0432abbf3f4d80d2b8bad655780e2f1e4f354b16546c0d008448ace02c6cd3f95bb36e14b460b10ef77e2f980f5f3dd901b5aa9fc4e486c1257e5b0be0ba22f0b8a0f4b4ed01c9624c08a5c6252e178e7ddef5f492efe21b9b73ea66e82e2bf4dfb460c71513ccc2a5c0a7c60d985efe689f82f2203fc0dc26a67d5e5f96afa713282fa066928598ada5e4553985ad71ab0c55f2e53ddb2a5a27baf2859c7ae6bfd92c22b2753c13ab512d1600a8096873844a63995993b0ed324470098f1b9984cae77aafd5a5829409f17e3cf3c4e2b997ab6341de3b9c35927b4292709049c32a862e8259e58640b2680c3bc88f167458be3f89bef034a06a8c6b5f543e003cd589a1cc549c489691ac6c3ea5c278ec9ae443882d2fe8249fe2041bdf297a8303aa03c3d484153f1acc087f2dd4249af29358c9fb7c737406894ab99a251b455ac0dbdd33e9675d551feec43de5ac7bae8509ade4878d6e72498fee40e085b5dff56df4417761b9b25bd0e598de8e16f4205cc3c4a5e7b8e0486759299e300e529b2d97f8967d6b7a661d880650d761a6f52b2c28b924c15888a21ca0a0e0af1965dfad8bc6373c1400d632e55ae01e6bc6a6b56cfa9a2ae866dfb */
static const ALIGNED uint8_t pAlicePrivKeyData[MCUXCLFFDH_FFDHE4096_SIZE_PRIVATEKEY] = {
0x34U, 0x60U, 0x48U, 0x54U, 0x33U, 0xFFU, 0x50U, 0x5EU, 0x63U, 0x73U, 0x1AU, 0x0DU, 0x91U, 0x32U, 0x83U, 0xCDU,
0x12U, 0x2EU, 0x79U, 0x2CU, 0xECU, 0x56U, 0x74U, 0x54U, 0xC4U, 0xF7U, 0xC1U, 0x89U, 0x30U, 0xCEU, 0x15U, 0x11U,
0xDCU, 0xCEU, 0x73U, 0x1DU, 0x78U, 0x10U, 0xCFU, 0x42U, 0xA3U, 0xC3U, 0xC0U, 0xE6U, 0xB7U, 0x2BU, 0x5CU, 0x3CU,
0x21U, 0x60U, 0xB5U, 0xEBU, 0x89U, 0xE9U, 0x91U, 0xEFU, 0x7AU, 0x07U, 0xBEU, 0xDEU, 0xDBU, 0x93U, 0x22U, 0xAFU,
0xC8U, 0x99U, 0x6DU, 0xD0U, 0x43U, 0x2AU, 0xBBU, 0xF3U, 0xF4U, 0xD8U, 0x0DU, 0x2BU, 0x8BU, 0xADU, 0x65U, 0x57U,
0x80U, 0xE2U, 0xF1U, 0xE4U, 0xF3U, 0x54U, 0xB1U, 0x65U, 0x46U, 0xC0U, 0xD0U, 0x08U, 0x44U, 0x8AU, 0xCEU, 0x02U,
0xC6U, 0xCDU, 0x3FU, 0x95U, 0xBBU, 0x36U, 0xE1U, 0x4BU, 0x46U, 0x0BU, 0x10U, 0xEFU, 0x77U, 0xE2U, 0xF9U, 0x80U,
0xF5U, 0xF3U, 0xDDU, 0x90U, 0x1BU, 0x5AU, 0xA9U, 0xFCU, 0x4EU, 0x48U, 0x6CU, 0x12U, 0x57U, 0xE5U, 0xB0U, 0xBEU,
0x0BU, 0xA2U, 0x2FU, 0x0BU, 0x8AU, 0x0FU, 0x4BU, 0x4EU, 0xD0U, 0x1CU, 0x96U, 0x24U, 0xC0U, 0x8AU, 0x5CU, 0x62U,
0x52U, 0xE1U, 0x78U, 0xE7U, 0xDDU, 0xEFU, 0x5FU, 0x49U, 0x2EU, 0xFEU, 0x21U, 0xB9U, 0xB7U, 0x3EU, 0xA6U, 0x6EU,
0x82U, 0xE2U, 0xBFU, 0x4DU, 0xFBU, 0x46U, 0x0CU, 0x71U, 0x51U, 0x3CU, 0xCCU, 0x2AU, 0x5CU, 0x0AU, 0x7CU, 0x60U,
0xD9U, 0x85U, 0xEFU, 0xE6U, 0x89U, 0xF8U, 0x2FU, 0x22U, 0x03U, 0xFCU, 0x0DU, 0xC2U, 0x6AU, 0x67U, 0xD5U, 0xE5U,
0xF9U, 0x6AU, 0xFAU, 0x71U, 0x32U, 0x82U, 0xFAU, 0x06U, 0x69U, 0x28U, 0x59U, 0x8AU, 0xDAU, 0x5EU, 0x45U, 0x53U,
0x98U, 0x5AU, 0xD7U, 0x1AU, 0xB0U, 0xC5U, 0x5FU, 0x2EU, 0x53U, 0xDDU, 0xB2U, 0xA5U, 0xA2U, 0x7BU, 0xAFU, 0x28U,
0x59U, 0xC7U, 0xAEU, 0x6BU, 0xFDU, 0x92U, 0xC2U, 0x2BU, 0x27U, 0x53U, 0xC1U, 0x3AU, 0xB5U, 0x12U, 0xD1U, 0x60U,
0x0AU, 0x80U, 0x96U, 0x87U, 0x38U, 0x44U, 0xA6U, 0x39U, 0x95U, 0x99U, 0x3BU, 0x0EU, 0xD3U, 0x24U, 0x47U, 0x00U,
0x98U, 0xF1U, 0xB9U, 0x98U, 0x4CU, 0xAEU, 0x77U, 0xAAU, 0xFDU, 0x5AU, 0x58U, 0x29U, 0x40U, 0x9FU, 0x17U, 0xE3U,
0xCFU, 0x3CU, 0x4EU, 0x2BU, 0x99U, 0x7AU, 0xB6U, 0x34U, 0x1DU, 0xE3U, 0xB9U, 0xC3U, 0x59U, 0x27U, 0xB4U, 0x29U,
0x27U, 0x09U, 0x04U, 0x9CU, 0x32U, 0xA8U, 0x62U, 0xE8U, 0x25U, 0x9EU, 0x58U, 0x64U, 0x0BU, 0x26U, 0x80U, 0xC3U,
0xBCU, 0x88U, 0xF1U, 0x67U, 0x45U, 0x8BU, 0xE3U, 0xF8U, 0x9BU, 0xEFU, 0x03U, 0x4AU, 0x06U, 0xA8U, 0xC6U, 0xB5U,
0xF5U, 0x43U, 0xE0U, 0x03U, 0xCDU, 0x58U, 0x9AU, 0x1CU, 0xC5U, 0x49U, 0xC4U, 0x89U, 0x69U, 0x1AU, 0xC6U, 0xC3U,
0xEAU, 0x5CU, 0x27U, 0x8EU, 0xC9U, 0xAEU, 0x44U, 0x38U, 0x82U, 0xD2U, 0xFEU, 0x82U, 0x49U, 0xFEU, 0x20U, 0x41U,
0xBDU, 0xF2U, 0x97U, 0xA8U, 0x30U, 0x3AU, 0xA0U, 0x3CU, 0x3DU, 0x48U, 0x41U, 0x53U, 0xF1U, 0xACU, 0xC0U, 0x87U,
0xF2U, 0xDDU, 0x42U, 0x49U, 0xAFU, 0x29U, 0x35U, 0x8CU, 0x9FU, 0xB7U, 0xC7U, 0x37U, 0x40U, 0x68U, 0x94U, 0xABU,
0x99U, 0xA2U, 0x51U, 0xB4U, 0x55U, 0xACU, 0x0DU, 0xBDU, 0xD3U, 0x3EU, 0x96U, 0x75U, 0xD5U, 0x51U, 0xFEU, 0xECU,
0x43U, 0xDEU, 0x5AU, 0xC7U, 0xBAU, 0xE8U, 0x50U, 0x9AU, 0xDEU, 0x48U, 0x78U, 0xD6U, 0xE7U, 0x24U, 0x98U, 0xFEU,
0xE4U, 0x0EU, 0x08U, 0x5BU, 0x5DU, 0xFFU, 0x56U, 0xDFU, 0x44U, 0x17U, 0x76U, 0x1BU, 0x9BU, 0x25U, 0xBDU, 0x0EU,
0x59U, 0x8DU, 0xE8U, 0xE1U, 0x6FU, 0x42U, 0x05U, 0xCCU, 0x3CU, 0x4AU, 0x5EU, 0x7BU, 0x8EU, 0x04U, 0x86U, 0x75U,
0x92U, 0x99U, 0xE3U, 0x00U, 0xE5U, 0x29U, 0xB2U, 0xD9U, 0x7FU, 0x89U, 0x67U, 0xD6U, 0xB7U, 0xA6U, 0x61U, 0xD8U,
0x80U, 0x65U, 0x0DU, 0x76U, 0x1AU, 0x6FU, 0x52U, 0xB2U, 0xC2U, 0x8BU, 0x92U, 0x4CU, 0x15U, 0x88U, 0x8AU, 0x21U,
0xCAU, 0x0AU, 0x0EU, 0x0AU, 0xF1U, 0x96U, 0x5DU, 0xFAU, 0xD8U, 0xBCU, 0x63U, 0x73U, 0xC1U, 0x40U, 0x0DU, 0x63U,
0x2EU, 0x55U, 0xAEU, 0x01U, 0xE6U, 0xBCU, 0x6AU, 0x6BU, 0x56U, 0xCFU, 0xA9U, 0xA2U, 0xAEU, 0x86U, 0x6DU, 0xFBU
};
/* Public key Alice [BE] 0xaaa46114c1f5a246b5adba8937c353c93d4b0df49abda9905de2c0888f9c87a26fb3728904330e56e54f59ee921da231dc7851af0afe324642bea10b0b3dbdd7e308549e0165476cd34325880d4bdbbb3d52318eb724f748a1604ef3af0e2274846f4c2f2836b4e325556132b51a66eaea67506d5c9e4768a7629184a4e250d8ec430e912ae6c7eadce69273965bb6a2c56f00a9f840ba50032b5b21b9f9ea62aa2999ce7cda2520a1009e308504b81d30fab7e3a52fc76b9e41fe1c3ea674bc62a8e85557c06d22a8b2663098b3155d162efbdb650b4306b2ca6556fe3ad1a2036333e3584518cf677bc7e99a60c4a3027e5106ebcca4eef267c3cd3cc0f3ed63138beb4736e82b77acdd220626ccbff8f21c2f886b6f8ddea607a56c1ea8439e9330e2b9c8e20bb6432ef5b87dff5bb9ba28f03311238506de5a2fd4ecb9dd5a3d0bd1a1ee5cc91eff5fa5316b4c9b1b62e634af3a82c0efcf2c8107035b2a855a11278df8cc8d7d04c0d476f4907684c99ac9e8347dd605eb6d53b144d74c55fce4017ba5ea07d155cb65ca11ded45d76bf54379bb2efe3fb96800c51ae3ea318f9ddef70b0729b378abfaee7d28245b286dfed9b7e00c3408601e509912fa958b500cf6624ccdf0936ea08b7395719abb5711ee2cc24114b908b13642dc6e90460b41c9a8a995b2adde4223573b487739628f1f816894b97a3b7b4b5507b */
static const ALIGNED uint8_t pAlicePubKeyData[MCUXCLFFDH_FFDHE4096_SIZE_PUBLICKEY] = {
0xAAU, 0xA4U, 0x61U, 0x14U, 0xC1U, 0xF5U, 0xA2U, 0x46U, 0xB5U, 0xADU, 0xBAU, 0x89U, 0x37U, 0xC3U, 0x53U, 0xC9U,
0x3DU, 0x4BU, 0x0DU, 0xF4U, 0x9AU, 0xBDU, 0xA9U, 0x90U, 0x5DU, 0xE2U, 0xC0U, 0x88U, 0x8FU, 0x9CU, 0x87U, 0xA2U,
0x6FU, 0xB3U, 0x72U, 0x89U, 0x04U, 0x33U, 0x0EU, 0x56U, 0xE5U, 0x4FU, 0x59U, 0xEEU, 0x92U, 0x1DU, 0xA2U, 0x31U,
0xDCU, 0x78U, 0x51U, 0xAFU, 0x0AU, 0xFEU, 0x32U, 0x46U, 0x42U, 0xBEU, 0xA1U, 0x0BU, 0x0BU, 0x3DU, 0xBDU, 0xD7U,
0xE3U, 0x08U, 0x54U, 0x9EU, 0x01U, 0x65U, 0x47U, 0x6CU, 0xD3U, 0x43U, 0x25U, 0x88U, 0x0DU, 0x4BU, 0xDBU, 0xBBU,
0x3DU, 0x52U, 0x31U, 0x8EU, 0xB7U, 0x24U, 0xF7U, 0x48U, 0xA1U, 0x60U, 0x4EU, 0xF3U, 0xAFU, 0x0EU, 0x22U, 0x74U,
0x84U, 0x6FU, 0x4CU, 0x2FU, 0x28U, 0x36U, 0xB4U, 0xE3U, 0x25U, 0x55U, 0x61U, 0x32U, 0xB5U, 0x1AU, 0x66U, 0xEAU,
0xEAU, 0x67U, 0x50U, 0x6DU, 0x5CU, 0x9EU, 0x47U, 0x68U, 0xA7U, 0x62U, 0x91U, 0x84U, 0xA4U, 0xE2U, 0x50U, 0xD8U,
0xECU, 0x43U, 0x0EU, 0x91U, 0x2AU, 0xE6U, 0xC7U, 0xEAU, 0xDCU, 0xE6U, 0x92U, 0x73U, 0x96U, 0x5BU, 0xB6U, 0xA2U,
0xC5U, 0x6FU, 0x00U, 0xA9U, 0xF8U, 0x40U, 0xBAU, 0x50U, 0x03U, 0x2BU, 0x5BU, 0x21U, 0xB9U, 0xF9U, 0xEAU, 0x62U,
0xAAU, 0x29U, 0x99U, 0xCEU, 0x7CU, 0xDAU, 0x25U, 0x20U, 0xA1U, 0x00U, 0x9EU, 0x30U, 0x85U, 0x04U, 0xB8U, 0x1DU,
0x30U, 0xFAU, 0xB7U, 0xE3U, 0xA5U, 0x2FU, 0xC7U, 0x6BU, 0x9EU, 0x41U, 0xFEU, 0x1CU, 0x3EU, 0xA6U, 0x74U, 0xBCU,
0x62U, 0xA8U, 0xE8U, 0x55U, 0x57U, 0xC0U, 0x6DU, 0x22U, 0xA8U, 0xB2U, 0x66U, 0x30U, 0x98U, 0xB3U, 0x15U, 0x5DU,
0x16U, 0x2EU, 0xFBU, 0xDBU, 0x65U, 0x0BU, 0x43U, 0x06U, 0xB2U, 0xCAU, 0x65U, 0x56U, 0xFEU, 0x3AU, 0xD1U, 0xA2U,
0x03U, 0x63U, 0x33U, 0xE3U, 0x58U, 0x45U, 0x18U, 0xCFU, 0x67U, 0x7BU, 0xC7U, 0xE9U, 0x9AU, 0x60U, 0xC4U, 0xA3U,
0x02U, 0x7EU, 0x51U, 0x06U, 0xEBU, 0xCCU, 0xA4U, 0xEEU, 0xF2U, 0x67U, 0xC3U, 0xCDU, 0x3CU, 0xC0U, 0xF3U, 0xEDU,
0x63U, 0x13U, 0x8BU, 0xEBU, 0x47U, 0x36U, 0xE8U, 0x2BU, 0x77U, 0xACU, 0xDDU, 0x22U, 0x06U, 0x26U, 0xCCU, 0xBFU,
0xF8U, 0xF2U, 0x1CU, 0x2FU, 0x88U, 0x6BU, 0x6FU, 0x8DU, 0xDEU, 0xA6U, 0x07U, 0xA5U, 0x6CU, 0x1EU, 0xA8U, 0x43U,
0x9EU, 0x93U, 0x30U, 0xE2U, 0xB9U, 0xC8U, 0xE2U, 0x0BU, 0xB6U, 0x43U, 0x2EU, 0xF5U, 0xB8U, 0x7DU, 0xFFU, 0x5BU,
0xB9U, 0xBAU, 0x28U, 0xF0U, 0x33U, 0x11U, 0x23U, 0x85U, 0x06U, 0xDEU, 0x5AU, 0x2FU, 0xD4U, 0xECU, 0xB9U, 0xDDU,
0x5AU, 0x3DU, 0x0BU, 0xD1U, 0xA1U, 0xEEU, 0x5CU, 0xC9U, 0x1EU, 0xFFU, 0x5FU, 0xA5U, 0x31U, 0x6BU, 0x4CU, 0x9BU,
0x1BU, 0x62U, 0xE6U, 0x34U, 0xAFU, 0x3AU, 0x82U, 0xC0U, 0xEFU, 0xCFU, 0x2CU, 0x81U, 0x07U, 0x03U, 0x5BU, 0x2AU,
0x85U, 0x5AU, 0x11U, 0x27U, 0x8DU, 0xF8U, 0xCCU, 0x8DU, 0x7DU, 0x04U, 0xC0U, 0xD4U, 0x76U, 0xF4U, 0x90U, 0x76U,
0x84U, 0xC9U, 0x9AU, 0xC9U, 0xE8U, 0x34U, 0x7DU, 0xD6U, 0x05U, 0xEBU, 0x6DU, 0x53U, 0xB1U, 0x44U, 0xD7U, 0x4CU,
0x55U, 0xFCU, 0xE4U, 0x01U, 0x7BU, 0xA5U, 0xEAU, 0x07U, 0xD1U, 0x55U, 0xCBU, 0x65U, 0xCAU, 0x11U, 0xDEU, 0xD4U,
0x5DU, 0x76U, 0xBFU, 0x54U, 0x37U, 0x9BU, 0xB2U, 0xEFU, 0xE3U, 0xFBU, 0x96U, 0x80U, 0x0CU, 0x51U, 0xAEU, 0x3EU,
0xA3U, 0x18U, 0xF9U, 0xDDU, 0xEFU, 0x70U, 0xB0U, 0x72U, 0x9BU, 0x37U, 0x8AU, 0xBFU, 0xAEU, 0xE7U, 0xD2U, 0x82U,
0x45U, 0xB2U, 0x86U, 0xDFU, 0xEDU, 0x9BU, 0x7EU, 0x00U, 0xC3U, 0x40U, 0x86U, 0x01U, 0xE5U, 0x09U, 0x91U, 0x2FU,
0xA9U, 0x58U, 0xB5U, 0x00U, 0xCFU, 0x66U, 0x24U, 0xCCU, 0xDFU, 0x09U, 0x36U, 0xEAU, 0x08U, 0xB7U, 0x39U, 0x57U,
0x19U, 0xABU, 0xB5U, 0x71U, 0x1EU, 0xE2U, 0xCCU, 0x24U, 0x11U, 0x4BU, 0x90U, 0x8BU, 0x13U, 0x64U, 0x2DU, 0xC6U,
0xE9U, 0x04U, 0x60U, 0xB4U, 0x1CU, 0x9AU, 0x8AU, 0x99U, 0x5BU, 0x2AU, 0xDDU, 0xE4U, 0x22U, 0x35U, 0x73U, 0xB4U,
0x87U, 0x73U, 0x96U, 0x28U, 0xF1U, 0xF8U, 0x16U, 0x89U, 0x4BU, 0x97U, 0xA3U, 0xB7U, 0xB4U, 0xB5U, 0x50U, 0x7BU
};
/* Private key Bob (randomly generated) [BE] 0x8d6d2d4d6d65cf3e4586eaad77c5156b2bbb54a6861c30a8bb4cbc8a1d10b4df8ca10283ddeaf054ccc1fff8962c01ad176c6f0b2ac144bd47f10c70726de4fb60a98d59088bc953b9e4476bacd6f8f5b1b7c166df48b2df42c6be962f7afc2023bceb58c60413f0e4f0c1025511605a755eb278751b3717e9cbef3096f73ebf3e3346e52674eb93bec2e6d68a045f4d965cf59bee23c8d0beb868f6467e818ba64baa5239dd010b0b4c200c1de9d91f6ce52c800bdf2a640c69b4040267e58e54299d7c537b0d33f0eda601e4b2ce7fad4d073c24d586181f2b40c53ee98c6141f1c0ae97a63864afe908608d8e9e68916cb614b9312758301b074b94dc73631c1010bfa8207e3a8b77001291529fecd8fc22524f86a679eaf2e436f7985a632c35249b4c1237a5fcfd47d66fc628ac602e94fa0977f3fc0be436fd4db0f1287cd6b4bdb26e1db24d25717ab520505a4b7518624f2f3cf9616571834ca489cde66b11101a2b072a9d6e0021a50e864d1cbcec9fd9e36f0d51fe02906d7c0676ae0e06e5f6832a16f66cdf065f669ddda4f39f59d4d0d9ecece1c00379d63da41d867168a6f272a7b8d4d983bbdc7ab90cfc90ca3183b89988c55260fc5ae7935e79d05e4ca089a20b03c561e5dac12155f8c16c74bb429da0eb3b65008f4ed31b6e5d2118d1dc00f5a787c8ee0717bda0e277f264fc1604e2cb02c0b7846aa */
static const ALIGNED uint8_t pBobPrivKeyData[MCUXCLFFDH_FFDHE4096_SIZE_PRIVATEKEY] = {
0x08U, 0xD6U, 0xD2U, 0xD4U, 0xD6U, 0xD6U, 0x5CU, 0xF3U, 0xE4U, 0x58U, 0x6EU, 0xAAU, 0xD7U, 0x7CU, 0x51U, 0x56U,
0xB2U, 0xBBU, 0xB5U, 0x4AU, 0x68U, 0x61U, 0xC3U, 0x0AU, 0x8BU, 0xB4U, 0xCBU, 0xC8U, 0xA1U, 0xD1U, 0x0BU, 0x4DU,
0xF8U, 0xCAU, 0x10U, 0x28U, 0x3DU, 0xDEU, 0xAFU, 0x05U, 0x4CU, 0xCCU, 0x1FU, 0xFFU, 0x89U, 0x62U, 0xC0U, 0x1AU,
0xD1U, 0x76U, 0xC6U, 0xF0U, 0xB2U, 0xACU, 0x14U, 0x4BU, 0xD4U, 0x7FU, 0x10U, 0xC7U, 0x07U, 0x26U, 0xDEU, 0x4FU,
0xB6U, 0x0AU, 0x98U, 0xD5U, 0x90U, 0x88U, 0xBCU, 0x95U, 0x3BU, 0x9EU, 0x44U, 0x76U, 0xBAU, 0xCDU, 0x6FU, 0x8FU,
0x5BU, 0x1BU, 0x7CU, 0x16U, 0x6DU, 0xF4U, 0x8BU, 0x2DU, 0xF4U, 0x2CU, 0x6BU, 0xE9U, 0x62U, 0xF7U, 0xAFU, 0xC2U,
0x02U, 0x3BU, 0xCEU, 0xB5U, 0x8CU, 0x60U, 0x41U, 0x3FU, 0x0EU, 0x4FU, 0x0CU, 0x10U, 0x25U, 0x51U, 0x16U, 0x05U,
0xA7U, 0x55U, 0xEBU, 0x27U, 0x87U, 0x51U, 0xB3U, 0x71U, 0x7EU, 0x9CU, 0xBEU, 0xF3U, 0x09U, 0x6FU, 0x73U, 0xEBU,
0xF3U, 0xE3U, 0x34U, 0x6EU, 0x52U, 0x67U, 0x4EU, 0xB9U, 0x3BU, 0xECU, 0x2EU, 0x6DU, 0x68U, 0xA0U, 0x45U, 0xF4U,
0xD9U, 0x65U, 0xCFU, 0x59U, 0xBEU, 0xE2U, 0x3CU, 0x8DU, 0x0BU, 0xEBU, 0x86U, 0x8FU, 0x64U, 0x67U, 0xE8U, 0x18U,
0xBAU, 0x64U, 0xBAU, 0xA5U, 0x23U, 0x9DU, 0xD0U, 0x10U, 0xB0U, 0xB4U, 0xC2U, 0x00U, 0xC1U, 0xDEU, 0x9DU, 0x91U,
0xF6U, 0xCEU, 0x52U, 0xC8U, 0x00U, 0xBDU, 0xF2U, 0xA6U, 0x40U, 0xC6U, 0x9BU, 0x40U, 0x40U, 0x26U, 0x7EU, 0x58U,
0xE5U, 0x42U, 0x99U, 0xD7U, 0xC5U, 0x37U, 0xB0U, 0xD3U, 0x3FU, 0x0EU, 0xDAU, 0x60U, 0x1EU, 0x4BU, 0x2CU, 0xE7U,
0xFAU, 0xD4U, 0xD0U, 0x73U, 0xC2U, 0x4DU, 0x58U, 0x61U, 0x81U, 0xF2U, 0xB4U, 0x0CU, 0x53U, 0xEEU, 0x98U, 0xC6U,
0x14U, 0x1FU, 0x1CU, 0x0AU, 0xE9U, 0x7AU, 0x63U, 0x86U, 0x4AU, 0xFEU, 0x90U, 0x86U, 0x08U, 0xD8U, 0xE9U, 0xE6U,
0x89U, 0x16U, 0xCBU, 0x61U, 0x4BU, 0x93U, 0x12U, 0x75U, 0x83U, 0x01U, 0xB0U, 0x74U, 0xB9U, 0x4DU, 0xC7U, 0x36U,
0x31U, 0xC1U, 0x01U, 0x0BU, 0xFAU, 0x82U, 0x07U, 0xE3U, 0xA8U, 0xB7U, 0x70U, 0x01U, 0x29U, 0x15U, 0x29U, 0xFEU,
0xCDU, 0x8FU, 0xC2U, 0x25U, 0x24U, 0xF8U, 0x6AU, 0x67U, 0x9EU, 0xAFU, 0x2EU, 0x43U, 0x6FU, 0x79U, 0x85U, 0xA6U,
0x32U, 0xC3U, 0x52U, 0x49U, 0xB4U, 0xC1U, 0x23U, 0x7AU, 0x5FU, 0xCFU, 0xD4U, 0x7DU, 0x66U, 0xFCU, 0x62U, 0x8AU,
0xC6U, 0x02U, 0xE9U, 0x4FU, 0xA0U, 0x97U, 0x7FU, 0x3FU, 0xC0U, 0xBEU, 0x43U, 0x6FU, 0xD4U, 0xDBU, 0x0FU, 0x12U,
0x87U, 0xCDU, 0x6BU, 0x4BU, 0xDBU, 0x26U, 0xE1U, 0xDBU, 0x24U, 0xD2U, 0x57U, 0x17U, 0xABU, 0x52U, 0x05U, 0x05U,
0xA4U, 0xB7U, 0x51U, 0x86U, 0x24U, 0xF2U, 0xF3U, 0xCFU, 0x96U, 0x16U, 0x57U, 0x18U, 0x34U, 0xCAU, 0x48U, 0x9CU,
0xDEU, 0x66U, 0xB1U, 0x11U, 0x01U, 0xA2U, 0xB0U, 0x72U, 0xA9U, 0xD6U, 0xE0U, 0x02U, 0x1AU, 0x50U, 0xE8U, 0x64U,
0xD1U, 0xCBU, 0xCEU, 0xC9U, 0xFDU, 0x9EU, 0x36U, 0xF0U, 0xD5U, 0x1FU, 0xE0U, 0x29U, 0x06U, 0xD7U, 0xC0U, 0x67U,
0x6AU, 0xE0U, 0xE0U, 0x6EU, 0x5FU, 0x68U, 0x32U, 0xA1U, 0x6FU, 0x66U, 0xCDU, 0xF0U, 0x65U, 0xF6U, 0x69U, 0xDDU,
0xDAU, 0x4FU, 0x39U, 0xF5U, 0x9DU, 0x4DU, 0x0DU, 0x9EU, 0xCEU, 0xCEU, 0x1CU, 0x00U, 0x37U, 0x9DU, 0x63U, 0xDAU,
0x41U, 0xD8U, 0x67U, 0x16U, 0x8AU, 0x6FU, 0x27U, 0x2AU, 0x7BU, 0x8DU, 0x4DU, 0x98U, 0x3BU, 0xBDU, 0xC7U, 0xABU,
0x90U, 0xCFU, 0xC9U, 0x0CU, 0xA3U, 0x18U, 0x3BU, 0x89U, 0x98U, 0x8CU, 0x55U, 0x26U, 0x0FU, 0xC5U, 0xAEU, 0x79U,
0x35U, 0xE7U, 0x9DU, 0x05U, 0xE4U, 0xCAU, 0x08U, 0x9AU, 0x20U, 0xB0U, 0x3CU, 0x56U, 0x1EU, 0x5DU, 0xACU, 0x12U,
0x15U, 0x5FU, 0x8CU, 0x16U, 0xC7U, 0x4BU, 0xB4U, 0x29U, 0xDAU, 0x0EU, 0xB3U, 0xB6U, 0x50U, 0x08U, 0xF4U, 0xEDU,
0x31U, 0xB6U, 0xE5U, 0xD2U, 0x11U, 0x8DU, 0x1DU, 0xC0U, 0x0FU, 0x5AU, 0x78U, 0x7CU, 0x8EU, 0xE0U, 0x71U, 0x7BU,
0xDAU, 0x0EU, 0x27U, 0x7FU, 0x26U, 0x4FU, 0xC1U, 0x60U, 0x4EU, 0x2CU, 0xB0U, 0x2CU, 0x0BU, 0x78U, 0x46U, 0xAAU
};
/* Public key Bob [BE] 0x525756fccbf64b668d326fa7383199d6583500d7a860f5b20d18ff1a4111c0e5ca4be796aba0326629da140799ac8c47d74c6fdb3f155d8cf804b03a35055361b3174a0bcf7ec6bda366fc5a0a0eecbf6e4cd3d30ab0bc17a419c39903afa3927e56d9c3193fa1e4b3946ec69b300a28e9179feaba7762ba8587385f78d1374ef04f67858bd8a85db3c9a47744314fa59d066b486830b7fad343b1eb721b42e5f92dc1526ea7a74b43acd1b3659d9b5b4ba34f834adfd12f92a6954cd344d3a1fa43cd0b0d7aed69d17af6484f6aaebce4f3c10c3eb86c7c18bfaf06112bca8d98a274d5db02df066ae6fd6a3a7cf9b6ff1ae34b5adee4723a038c25fa3429d5d0e1e6586e2448adfa9824a613f8c2536e69803680c018a5ac5f5b8464797e1720292813e66dd6b8d7d1e9c8db15462db21e82a1fa49bb43018c131878510fa8d5fabcde47fe78d1b2fb5e3bd9118a2652dc16bca06044c1986be4f22d988fc0673c4f7b341eed6e139a64ce8c39f86b6b4d59529f43f5e4677798a9960a2594b6019099152f06616e0f3480ef413a4a0d220f0f9d8425d91d0016e551be2d4f36966018dda68faab53bb10117f713238d0cb8e0c83ca31abafb8c7aed595bfd8ef28aa3e790b0a959d519610951bea4bba5ad5818998f3a5c1b76862878ceb1bed931241ad439413bc9b7be06f3994192fe56f43b57e21b114262acdcdabce9 */
static const ALIGNED uint8_t pBobPubKeyData[MCUXCLFFDH_FFDHE4096_SIZE_PUBLICKEY] = {
0x52U, 0x57U, 0x56U, 0xFCU, 0xCBU, 0xF6U, 0x4BU, 0x66U, 0x8DU, 0x32U, 0x6FU, 0xA7U, 0x38U, 0x31U, 0x99U, 0xD6U,
0x58U, 0x35U, 0x00U, 0xD7U, 0xA8U, 0x60U, 0xF5U, 0xB2U, 0x0DU, 0x18U, 0xFFU, 0x1AU, 0x41U, 0x11U, 0xC0U, 0xE5U,
0xCAU, 0x4BU, 0xE7U, 0x96U, 0xABU, 0xA0U, 0x32U, 0x66U, 0x29U, 0xDAU, 0x14U, 0x07U, 0x99U, 0xACU, 0x8CU, 0x47U,
0xD7U, 0x4CU, 0x6FU, 0xDBU, 0x3FU, 0x15U, 0x5DU, 0x8CU, 0xF8U, 0x04U, 0xB0U, 0x3AU, 0x35U, 0x05U, 0x53U, 0x61U,
0xB3U, 0x17U, 0x4AU, 0x0BU, 0xCFU, 0x7EU, 0xC6U, 0xBDU, 0xA3U, 0x66U, 0xFCU, 0x5AU, 0x0AU, 0x0EU, 0xECU, 0xBFU,
0x6EU, 0x4CU, 0xD3U, 0xD3U, 0x0AU, 0xB0U, 0xBCU, 0x17U, 0xA4U, 0x19U, 0xC3U, 0x99U, 0x03U, 0xAFU, 0xA3U, 0x92U,
0x7EU, 0x56U, 0xD9U, 0xC3U, 0x19U, 0x3FU, 0xA1U, 0xE4U, 0xB3U, 0x94U, 0x6EU, 0xC6U, 0x9BU, 0x30U, 0x0AU, 0x28U,
0xE9U, 0x17U, 0x9FU, 0xEAU, 0xBAU, 0x77U, 0x62U, 0xBAU, 0x85U, 0x87U, 0x38U, 0x5FU, 0x78U, 0xD1U, 0x37U, 0x4EU,
0xF0U, 0x4FU, 0x67U, 0x85U, 0x8BU, 0xD8U, 0xA8U, 0x5DU, 0xB3U, 0xC9U, 0xA4U, 0x77U, 0x44U, 0x31U, 0x4FU, 0xA5U,
0x9DU, 0x06U, 0x6BU, 0x48U, 0x68U, 0x30U, 0xB7U, 0xFAU, 0xD3U, 0x43U, 0xB1U, 0xEBU, 0x72U, 0x1BU, 0x42U, 0xE5U,
0xF9U, 0x2DU, 0xC1U, 0x52U, 0x6EU, 0xA7U, 0xA7U, 0x4BU, 0x43U, 0xACU, 0xD1U, 0xB3U, 0x65U, 0x9DU, 0x9BU, 0x5BU,
0x4BU, 0xA3U, 0x4FU, 0x83U, 0x4AU, 0xDFU, 0xD1U, 0x2FU, 0x92U, 0xA6U, 0x95U, 0x4CU, 0xD3U, 0x44U, 0xD3U, 0xA1U,
0xFAU, 0x43U, 0xCDU, 0x0BU, 0x0DU, 0x7AU, 0xEDU, 0x69U, 0xD1U, 0x7AU, 0xF6U, 0x48U, 0x4FU, 0x6AU, 0xAEU, 0xBCU,
0xE4U, 0xF3U, 0xC1U, 0x0CU, 0x3EU, 0xB8U, 0x6CU, 0x7CU, 0x18U, 0xBFU, 0xAFU, 0x06U, 0x11U, 0x2BU, 0xCAU, 0x8DU,
0x98U, 0xA2U, 0x74U, 0xD5U, 0xDBU, 0x02U, 0xDFU, 0x06U, 0x6AU, 0xE6U, 0xFDU, 0x6AU, 0x3AU, 0x7CU, 0xF9U, 0xB6U,
0xFFU, 0x1AU, 0xE3U, 0x4BU, 0x5AU, 0xDEU, 0xE4U, 0x72U, 0x3AU, 0x03U, 0x8CU, 0x25U, 0xFAU, 0x34U, 0x29U, 0xD5U,
0xD0U, 0xE1U, 0xE6U, 0x58U, 0x6EU, 0x24U, 0x48U, 0xADU, 0xFAU, 0x98U, 0x24U, 0xA6U, 0x13U, 0xF8U, 0xC2U, 0x53U,
0x6EU, 0x69U, 0x80U, 0x36U, 0x80U, 0xC0U, 0x18U, 0xA5U, 0xACU, 0x5FU, 0x5BU, 0x84U, 0x64U, 0x79U, 0x7EU, 0x17U,
0x20U, 0x29U, 0x28U, 0x13U, 0xE6U, 0x6DU, 0xD6U, 0xB8U, 0xD7U, 0xD1U, 0xE9U, 0xC8U, 0xDBU, 0x15U, 0x46U, 0x2DU,
0xB2U, 0x1EU, 0x82U, 0xA1U, 0xFAU, 0x49U, 0xBBU, 0x43U, 0x01U, 0x8CU, 0x13U, 0x18U, 0x78U, 0x51U, 0x0FU, 0xA8U,
0xD5U, 0xFAU, 0xBCU, 0xDEU, 0x47U, 0xFEU, 0x78U, 0xD1U, 0xB2U, 0xFBU, 0x5EU, 0x3BU, 0xD9U, 0x11U, 0x8AU, 0x26U,
0x52U, 0xDCU, 0x16U, 0xBCU, 0xA0U, 0x60U, 0x44U, 0xC1U, 0x98U, 0x6BU, 0xE4U, 0xF2U, 0x2DU, 0x98U, 0x8FU, 0xC0U,
0x67U, 0x3CU, 0x4FU, 0x7BU, 0x34U, 0x1EU, 0xEDU, 0x6EU, 0x13U, 0x9AU, 0x64U, 0xCEU, 0x8CU, 0x39U, 0xF8U, 0x6BU,
0x6BU, 0x4DU, 0x59U, 0x52U, 0x9FU, 0x43U, 0xF5U, 0xE4U, 0x67U, 0x77U, 0x98U, 0xA9U, 0x96U, 0x0AU, 0x25U, 0x94U,
0xB6U, 0x01U, 0x90U, 0x99U, 0x15U, 0x2FU, 0x06U, 0x61U, 0x6EU, 0x0FU, 0x34U, 0x80U, 0xEFU, 0x41U, 0x3AU, 0x4AU,
0x0DU, 0x22U, 0x0FU, 0x0FU, 0x9DU, 0x84U, 0x25U, 0xD9U, 0x1DU, 0x00U, 0x16U, 0xE5U, 0x51U, 0xBEU, 0x2DU, 0x4FU,
0x36U, 0x96U, 0x60U, 0x18U, 0xDDU, 0xA6U, 0x8FU, 0xAAU, 0xB5U, 0x3BU, 0xB1U, 0x01U, 0x17U, 0xF7U, 0x13U, 0x23U,
0x8DU, 0x0CU, 0xB8U, 0xE0U, 0xC8U, 0x3CU, 0xA3U, 0x1AU, 0xBAU, 0xFBU, 0x8CU, 0x7AU, 0xEDU, 0x59U, 0x5BU, 0xFDU,
0x8EU, 0xF2U, 0x8AU, 0xA3U, 0xE7U, 0x90U, 0xB0U, 0xA9U, 0x59U, 0xD5U, 0x19U, 0x61U, 0x09U, 0x51U, 0xBEU, 0xA4U,
0xBBU, 0xA5U, 0xADU, 0x58U, 0x18U, 0x99U, 0x8FU, 0x3AU, 0x5CU, 0x1BU, 0x76U, 0x86U, 0x28U, 0x78U, 0xCEU, 0xB1U,
0xBEU, 0xD9U, 0x31U, 0x24U, 0x1AU, 0xD4U, 0x39U, 0x41U, 0x3BU, 0xC9U, 0xB7U, 0xBEU, 0x06U, 0xF3U, 0x99U, 0x41U,
0x92U, 0xFEU, 0x56U, 0xF4U, 0x3BU, 0x57U, 0xE2U, 0x1BU, 0x11U, 0x42U, 0x62U, 0xACU, 0xDCU, 0xDAU, 0xBCU, 0xE9U
};
/* shared secret ZZ [BE] 0xace18d0199d070e31214fa0cd10c069b873fa3441c5e12a2e885e0788fb3c4b40c6806085c4f8fa87a50a2760aa6ba28846ecda27e291c3b19c7a2dd10590f4c428529a9b47aec99038316d517d6248a60535dc4a6387e0c58306473cf7f7293f8927355882bb78de22e824f3f030a98ed30571f6dca66c296b19b34109b28a5b43bcb29955d001d7dc0ebffc68bff6a40b92271a5c3ceff0ed60bdd377c14e965d3362821359fbf3595cfb6fb1eb91d260f1c571d5fb1bbd7292cfd083dc1d100dbfc64db1bdbe3c07ed419505210571ac6e03f4bafd507216cbff101304f44376311ef02894ae1fea7e6ba7b05d035dbfec07e4c33877ff485e77a38937daa8f68c98ce40681964312f2e3bd68316da1d914de923edf463a0c3f1ff13840eccc144d4446357b49fbb68f50aa724293b6fd37b4dd733b614c673ad9f1c751bfbece421876f581687b067d60310bd8878901b0874c6d714b2ed954ce889a1d477055d7964159800e9db549ba2d25caf7746dbb7ce54d2316fd86fd8d9c71b47a3d558f6a9d12850ef91cb8f1df3f7f77f221a74edaa23383bd9687569bb6a9ef8d642c3222c20c8a9168c43ff5c482bb51c26febbb55d39308f59acad6ee180745717c26af6dacf038e9f2063a255129001e3c51501552ba5a82b0edac5d121fb49684330b9ebcf1f109a9d392ed1685f09b367ee83c4c22356ac22a61a0961 */
MCUXCLEXAMPLE_FUNCTION(mcuxClFfdh_KeyAgreement_ffdhe4096_example)
{
/**************************************************************************/
/* Preparation */
/**************************************************************************/
/* Setup one session to be used by all functions called */
mcuxClSession_Descriptor_t sessionDesc;
mcuxClSession_Handle_t session = &sessionDesc;
MCUXCLEXAMPLE_ALLOCATE_AND_INITIALIZE_SESSION(session,
MAX_CPUWA_SIZE,
MAX_PKCWA_SIZE);
/* Allocate space for and initialize Alice's private key handle for an ffdhe4096 private key */
uint32_t alicePrivKeyDesc[MCUXCLKEY_DESCRIPTOR_SIZE_IN_WORDS];
MCUX_CSSL_ANALYSIS_START_PATTERN_REINTERPRET_MEMORY_OF_OPAQUE_TYPES()
mcuxClKey_Handle_t alicePrivKey = (mcuxClKey_Handle_t) &alicePrivKeyDesc;
MCUX_CSSL_ANALYSIS_STOP_PATTERN_REINTERPRET_MEMORY_OF_OPAQUE_TYPES()
MCUX_CSSL_FP_FUNCTION_CALL_BEGIN(aliceprivkeyinit_result, aliceprivkeyinit_token, mcuxClKey_init(
/* mcuxClSession_Handle_t session */ session,
/* mcuxClKey_Handle_t key */ alicePrivKey,
/* mcuxClKey_Type_t type */ mcuxClKey_Type_Ffdh_ffdhe4096_Priv,
/* const uint8_t * pKeyData */ pAlicePrivKeyData,
/* uint32_t keyDataLength */ MCUXCLFFDH_FFDHE4096_SIZE_PRIVATEKEY));
if((MCUX_CSSL_FP_FUNCTION_CALLED(mcuxClKey_init) != aliceprivkeyinit_token) || (MCUXCLKEY_STATUS_OK != aliceprivkeyinit_result))
{
return MCUXCLEXAMPLE_STATUS_ERROR;
}
/* Allocate space for and initialize Alice's public key handle for an ffdhe4096 public key */
uint32_t alicePubKeyDesc[MCUXCLKEY_DESCRIPTOR_SIZE_IN_WORDS];
MCUX_CSSL_ANALYSIS_START_PATTERN_REINTERPRET_MEMORY_OF_OPAQUE_TYPES()
mcuxClKey_Handle_t alicePubKey = (mcuxClKey_Handle_t) &alicePubKeyDesc;
MCUX_CSSL_ANALYSIS_STOP_PATTERN_REINTERPRET_MEMORY_OF_OPAQUE_TYPES()
MCUX_CSSL_FP_FUNCTION_CALL_BEGIN(alicepubkeyinit_result, alicepubkeyinit_token, mcuxClKey_init(
/* mcuxClSession_Handle_t session */ session,
/* mcuxClKey_Handle_t key */ alicePubKey,
/* mcuxClKey_Type_t type */ mcuxClKey_Type_Ffdh_ffdhe4096_Pub,
/* const uint8_t * pKeyData */ pAlicePubKeyData,
/* uint32_t keyDataLength */ MCUXCLFFDH_FFDHE4096_SIZE_PUBLICKEY));
if((MCUX_CSSL_FP_FUNCTION_CALLED(mcuxClKey_init) != alicepubkeyinit_token) || (MCUXCLKEY_STATUS_OK != alicepubkeyinit_result))
{
return MCUXCLEXAMPLE_STATUS_ERROR;
}
/* Allocate space for and initialize Bob's private key handle for an ffdhe4096 private key */
uint32_t bobPrivKeyDesc[MCUXCLKEY_DESCRIPTOR_SIZE_IN_WORDS];
MCUX_CSSL_ANALYSIS_START_PATTERN_REINTERPRET_MEMORY_OF_OPAQUE_TYPES()
mcuxClKey_Handle_t bobPrivKey = (mcuxClKey_Handle_t) &bobPrivKeyDesc;
MCUX_CSSL_ANALYSIS_STOP_PATTERN_REINTERPRET_MEMORY_OF_OPAQUE_TYPES()
MCUX_CSSL_FP_FUNCTION_CALL_BEGIN(bobprivkeyinit_result, bobprivkeyinit_token, mcuxClKey_init(
/* mcuxClSession_Handle_t session */ session,
/* mcuxClKey_Handle_t key */ bobPrivKey,
/* mcuxClKey_Type_t type */ mcuxClKey_Type_Ffdh_ffdhe4096_Priv,
/* const uint8_t * pKeyData */ pBobPrivKeyData,
/* uint32_t keyDataLength */ MCUXCLFFDH_FFDHE4096_SIZE_PRIVATEKEY));
if((MCUX_CSSL_FP_FUNCTION_CALLED(mcuxClKey_init) != bobprivkeyinit_token) || (MCUXCLKEY_STATUS_OK != bobprivkeyinit_result))
{
return MCUXCLEXAMPLE_STATUS_ERROR;
}
/* Allocate space for and initialize Bob's public key handle for an ffdhe4096 public key */
uint32_t bobPubKeyDesc[MCUXCLKEY_DESCRIPTOR_SIZE_IN_WORDS];
MCUX_CSSL_ANALYSIS_START_PATTERN_REINTERPRET_MEMORY_OF_OPAQUE_TYPES()
mcuxClKey_Handle_t bobPubKey = (mcuxClKey_Handle_t) &bobPubKeyDesc;
MCUX_CSSL_ANALYSIS_STOP_PATTERN_REINTERPRET_MEMORY_OF_OPAQUE_TYPES()
MCUX_CSSL_FP_FUNCTION_CALL_BEGIN(bobpubkeyinit_result, bobpubkeyinit_token, mcuxClKey_init(
/* mcuxClSession_Handle_t session */ session,
/* mcuxClKey_Handle_t key */ bobPubKey,
/* mcuxClKey_Type_t type */ mcuxClKey_Type_Ffdh_ffdhe4096_Pub,
/* const uint8_t * pKeyData */ pBobPubKeyData,
/* uint32_t keyDataLength */ MCUXCLFFDH_FFDHE4096_SIZE_PUBLICKEY));
if((MCUX_CSSL_FP_FUNCTION_CALLED(mcuxClKey_init) != bobpubkeyinit_token) || (MCUXCLKEY_STATUS_OK != bobpubkeyinit_result))
{
return MCUXCLEXAMPLE_STATUS_ERROR;
}
/* Initialize the PRNG */
MCUXCLEXAMPLE_INITIALIZE_PRNG(session);
/**************************************************************************/
/* FFDH key agreement on ffdhe4096 */
/**************************************************************************/
/* Alice computes the shared key, additionalInputs parameter is not required */
uint8_t aliceSharedSecret[MCUXCLFFDH_FFDHE4096_SIZE_SHAREDSECRET];
uint32_t aliceSharedSecretSize = 0u;
MCUX_CSSL_FP_FUNCTION_CALL_BEGIN(alice_keyagreement_result, alice_keyagreement_token, mcuxClKey_agreement(
/* mcuxClSession_Handle_t pSession: */ session,
/* mcuxClKey_Agreement_t agreement: */ mcuxClKey_Agreement_FFDH,
/* mcuxClKey_Handle_t key: */ alicePrivKey,
/* mcuxClKey_Handle_t otherKey: */ bobPubKey,
MCUX_CSSL_ANALYSIS_START_SUPPRESS_NULL_POINTER_CONSTANT("NULL is used in code")
/* mcuxClKey_Agreement_AdditionalInput_t additionalInputs[]: */ NULL,
MCUX_CSSL_ANALYSIS_STOP_SUPPRESS_NULL_POINTER_CONSTANT()
/* uint32_t numberOfInputs: */ 0U,
/* uint8_t * pOut: */ aliceSharedSecret,
/* uint32_t * const pOutLength: */ &aliceSharedSecretSize));
if ((MCUX_CSSL_FP_FUNCTION_CALLED(mcuxClKey_agreement) != alice_keyagreement_token) || (MCUXCLKEY_STATUS_OK != alice_keyagreement_result) || (aliceSharedSecretSize != MCUXCLFFDH_FFDHE4096_SIZE_SHAREDSECRET))
{
return MCUXCLEXAMPLE_STATUS_ERROR;
}
/* Bob computes the shared key, additionalInputs parameter is not required */
uint8_t bobSharedSecret[MCUXCLFFDH_FFDHE4096_SIZE_SHAREDSECRET];
uint32_t bobSharedSecretSize = 0u;
MCUX_CSSL_FP_FUNCTION_CALL_BEGIN(bob_keyagreement_result, bob_keyagreement_token, mcuxClKey_agreement(
/* mcuxClSession_Handle_t pSession: */ session,
/* mcuxClKey_Agreement_t agreement: */ mcuxClKey_Agreement_FFDH,
/* mcuxClKey_Handle_t key: */ bobPrivKey,
/* mcuxClKey_Handle_t otherKey: */ alicePubKey,
MCUX_CSSL_ANALYSIS_START_SUPPRESS_NULL_POINTER_CONSTANT("NULL is used in code")
/* mcuxClKey_Agreement_AdditionalInput_t additionalInputs[]: */ NULL,
MCUX_CSSL_ANALYSIS_STOP_SUPPRESS_NULL_POINTER_CONSTANT()
/* uint32_t numberOfInputs: */ 0U,
/* uint8_t * pOut: */ bobSharedSecret,
/* uint32_t * const pOutLength: */ &bobSharedSecretSize));
if ((MCUX_CSSL_FP_FUNCTION_CALLED(mcuxClKey_agreement) != bob_keyagreement_token) || (MCUXCLKEY_STATUS_OK != bob_keyagreement_result) || (bobSharedSecretSize != MCUXCLFFDH_FFDHE4096_SIZE_SHAREDSECRET))
{
return MCUXCLEXAMPLE_STATUS_ERROR;
}
/* Verify that Alice and Bob computed the same shared key */
if(!mcuxClCore_assertEqual(bobSharedSecret, aliceSharedSecret, MCUXCLFFDH_FFDHE4096_SIZE_SHAREDSECRET))
{
return MCUXCLEXAMPLE_STATUS_ERROR;
}
/* Destroy Session and cleanup Session */
if(!mcuxClExample_Session_Clean(session))
{
return MCUXCLEXAMPLE_STATUS_ERROR;
}
return MCUXCLEXAMPLE_STATUS_OK;
}
Definition of function identifiers for the flow protection mechanism.
Definition of macros.
Top level header of mcuxClFfdh component.
Top-level include file for the mcuxClKey component.
Top level header of mcuxClRandom component.
Top-level include file for the mcuxClSession component.
Provides the API for the CSSL flow protection mechanism.
static const mcuxClKey_Type_t mcuxClKey_Type_Ffdh_ffdhe4096_Priv
Key type pointer for private FFDHE4096 keys.
Definition mcuxClFfdh_KeyTypes.h:132
static const mcuxClKey_Type_t mcuxClKey_Type_Ffdh_ffdhe4096_Pub
Key type pointer for public FFDHE4096 keys.
Definition mcuxClFfdh_KeyTypes.h:118
static mcuxClKey_Agreement_t mcuxClKey_Agreement_FFDH
FFDH Key agreement algorithm.
Definition mcuxClFfdh_KeyTypes.h:222
#define MCUXCLKEY_STATUS_OK
Key operation successful.
Definition mcuxClKey_Constants.h:40
mcuxClKey_Status_t mcuxClKey_init(mcuxClSession_Handle_t session, mcuxClKey_Handle_t key, mcuxClKey_Type_t type, const uint8_t *pKeyData, uint32_t keyDataLength)
Initializes a key handle.
mcuxClKey_Status_t mcuxClKey_agreement(mcuxClSession_Handle_t session, mcuxClKey_Agreement_t agreement, mcuxClKey_Handle_t key, mcuxClKey_Handle_t otherKey, mcuxClKey_Agreement_AdditionalInput_t additionalInputs[], uint32_t numberOfInputs, uint8_t *pOut, uint32_t *const pOutLength)
Key agreement function.
mcuxClKey_Descriptor_t *const mcuxClKey_Handle_t
Key handle type.
Definition mcuxClKey_Types.h:91
mcuxClSession_Descriptor_t *const mcuxClSession_Handle_t
Type for mcuxClSession Handle.
Definition mcuxClSession_Types.h:98
#define MCUX_CSSL_FP_FUNCTION_CALL_BEGIN(...)
Call a flow protected function and check the protection token.
Definition mcuxCsslFlowProtection.h:623
#define MCUX_CSSL_FP_FUNCTION_CALLED(...)
Expectation of a called function.
Definition mcuxCsslFlowProtection.h:777
#define MCUX_CSSL_FP_FUNCTION_CALL_END(...)
End a function call section started by MCUX_CSSL_FP_FUNCTION_CALL_BEGIN.
Definition mcuxCsslFlowProtection.h:658