MCUX CLNS
MCUX Crypto Library Normal Secure
Loading...
Searching...
No Matches
mcuxClFfdh_KeyAgreement_ffdhe3072_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_3072)
#define MAX_PKCWA_SIZE (MCUXCLKEY_AGREEMENT_FFDH_WAPKC_SIZE_3072)
/* Private key Alice (randomly generated) [BE] 0xd3f7dd9bee1187a07a2c39b53a0e1e33b9f0a6131cf15a55e8d2f2dabdae9226520d8195c83d5908ba2989f9982533bd09b50f4da0372d32e01a626e3a689cdd2c79dfce283c45fe9040b843adb3e1f3f7b59e411e8ee1b706e74a9c2a014783f408dc5bea4b26da584a2fa7e8ca691926033ce4917520d8cf4cc6df15be83a1e1faecb44225bd227f09df4a55acea37cdc408348e7657a57ad0ec4c57bafc6bfc4ecfe0e6ce6a9b65f83fa355852163f7f059c6f623f4f02abdeb3891d7239d2bc7a869e3aded0a47ab8f7e20eb3276f3962361e8d37cfde45149611d025779632cabe1b04b17492afbcf7bf2c73e7fd428f6f1fa0d6e072a08fe84163dc6f61a1bcfb1c1fcca3071d04cd19e4408f69ac790e52597e7a0dca5329482061104c9941ca7d1b857bd069ef3dbbabe037d3cfa966009e3f404fc8f9866ddd412bc3904959cdb52c5ad4de5abdc6cb8af530943e654065acddf23aa9f86d2eb3d8fa4651c067a92f9243d9a0f0daf5dc47d070f3d12721853d2bb3fe9836f847af*/
static const ALIGNED uint8_t pAlicePrivKeyData[MCUXCLFFDH_FFDHE3072_SIZE_PRIVATEKEY] = {
0x0DU, 0x3FU, 0x7DU, 0xD9U, 0xBEU, 0xE1U, 0x18U, 0x7AU, 0x07U, 0xA2U, 0xC3U, 0x9BU, 0x53U, 0xA0U, 0xE1U, 0xE3U,
0x3BU, 0x9FU, 0x0AU, 0x61U, 0x31U, 0xCFU, 0x15U, 0xA5U, 0x5EU, 0x8DU, 0x2FU, 0x2DU, 0xABU, 0xDAU, 0xE9U, 0x22U,
0x65U, 0x20U, 0xD8U, 0x19U, 0x5CU, 0x83U, 0xD5U, 0x90U, 0x8BU, 0xA2U, 0x98U, 0x9FU, 0x99U, 0x82U, 0x53U, 0x3BU,
0xD0U, 0x9BU, 0x50U, 0xF4U, 0xDAU, 0x03U, 0x72U, 0xD3U, 0x2EU, 0x01U, 0xA6U, 0x26U, 0xE3U, 0xA6U, 0x89U, 0xCDU,
0xD2U, 0xC7U, 0x9DU, 0xFCU, 0xE2U, 0x83U, 0xC4U, 0x5FU, 0xE9U, 0x04U, 0x0BU, 0x84U, 0x3AU, 0xDBU, 0x3EU, 0x1FU,
0x3FU, 0x7BU, 0x59U, 0xE4U, 0x11U, 0xE8U, 0xEEU, 0x1BU, 0x70U, 0x6EU, 0x74U, 0xA9U, 0xC2U, 0xA0U, 0x14U, 0x78U,
0x3FU, 0x40U, 0x8DU, 0xC5U, 0xBEU, 0xA4U, 0xB2U, 0x6DU, 0xA5U, 0x84U, 0xA2U, 0xFAU, 0x7EU, 0x8CU, 0xA6U, 0x91U,
0x92U, 0x60U, 0x33U, 0xCEU, 0x49U, 0x17U, 0x52U, 0x0DU, 0x8CU, 0xF4U, 0xCCU, 0x6DU, 0xF1U, 0x5BU, 0xE8U, 0x3AU,
0x1EU, 0x1FU, 0xAEU, 0xCBU, 0x44U, 0x22U, 0x5BU, 0xD2U, 0x27U, 0xF0U, 0x9DU, 0xF4U, 0xA5U, 0x5AU, 0xCEU, 0xA3U,
0x7CU, 0xDCU, 0x40U, 0x83U, 0x48U, 0xE7U, 0x65U, 0x7AU, 0x57U, 0xADU, 0x0EU, 0xC4U, 0xC5U, 0x7BU, 0xAFU, 0xC6U,
0xBFU, 0xC4U, 0xECU, 0xFEU, 0x0EU, 0x6CU, 0xE6U, 0xA9U, 0xB6U, 0x5FU, 0x83U, 0xFAU, 0x35U, 0x58U, 0x52U, 0x16U,
0x3FU, 0x7FU, 0x05U, 0x9CU, 0x6FU, 0x62U, 0x3FU, 0x4FU, 0x02U, 0xABU, 0xDEU, 0xB3U, 0x89U, 0x1DU, 0x72U, 0x39U,
0xD2U, 0xBCU, 0x7AU, 0x86U, 0x9EU, 0x3AU, 0xDEU, 0xD0U, 0xA4U, 0x7AU, 0xB8U, 0xF7U, 0xE2U, 0x0EU, 0xB3U, 0x27U,
0x6FU, 0x39U, 0x62U, 0x36U, 0x1EU, 0x8DU, 0x37U, 0xCFU, 0xDEU, 0x45U, 0x14U, 0x96U, 0x11U, 0xD0U, 0x25U, 0x77U,
0x96U, 0x32U, 0xCAU, 0xBEU, 0x1BU, 0x04U, 0xB1U, 0x74U, 0x92U, 0xAFU, 0xBCU, 0xF7U, 0xBFU, 0x2CU, 0x73U, 0xE7U,
0xFDU, 0x42U, 0x8FU, 0x6FU, 0x1FU, 0xA0U, 0xD6U, 0xE0U, 0x72U, 0xA0U, 0x8FU, 0xE8U, 0x41U, 0x63U, 0xDCU, 0x6FU,
0x61U, 0xA1U, 0xBCU, 0xFBU, 0x1CU, 0x1FU, 0xCCU, 0xA3U, 0x07U, 0x1DU, 0x04U, 0xCDU, 0x19U, 0xE4U, 0x40U, 0x8FU,
0x69U, 0xACU, 0x79U, 0x0EU, 0x52U, 0x59U, 0x7EU, 0x7AU, 0x0DU, 0xCAU, 0x53U, 0x29U, 0x48U, 0x20U, 0x61U, 0x10U,
0x4CU, 0x99U, 0x41U, 0xCAU, 0x7DU, 0x1BU, 0x85U, 0x7BU, 0xD0U, 0x69U, 0xEFU, 0x3DU, 0xBBU, 0xABU, 0xE0U, 0x37U,
0xD3U, 0xCFU, 0xA9U, 0x66U, 0x00U, 0x9EU, 0x3FU, 0x40U, 0x4FU, 0xC8U, 0xF9U, 0x86U, 0x6DU, 0xDDU, 0x41U, 0x2BU,
0xC3U, 0x90U, 0x49U, 0x59U, 0xCDU, 0xB5U, 0x2CU, 0x5AU, 0xD4U, 0xDEU, 0x5AU, 0xBDU, 0xC6U, 0xCBU, 0x8AU, 0xF5U,
0x30U, 0x94U, 0x3EU, 0x65U, 0x40U, 0x65U, 0xACU, 0xDDU, 0xF2U, 0x3AU, 0xA9U, 0xF8U, 0x6DU, 0x2EU, 0xB3U, 0xD8U,
0xFAU, 0x46U, 0x51U, 0xC0U, 0x67U, 0xA9U, 0x2FU, 0x92U, 0x43U, 0xD9U, 0xA0U, 0xF0U, 0xDAU, 0xF5U, 0xDCU, 0x47U,
0xD0U, 0x70U, 0xF3U, 0xD1U, 0x27U, 0x21U, 0x85U, 0x3DU, 0x2BU, 0xB3U, 0xFEU, 0x98U, 0x36U, 0xF8U, 0x47U, 0xAFU,
};
/* Public key Alice [BE] 0x2cf53c4cecc03a85fa363682fdb5bf59179fda859b46bc2041ab76f1f2c7db29d746c40109435cebfa3bf1ded7d548c2147ba7f2992baa91128a153d0bd59a2723d435000a62a34ed69f17e4e1d5df4e7b2d1359886be532b210508eaa653e1c1e15d048ff542716c55e6c5db50b4ff0d834ab9754cb9597315f1428cf0cf9bb2f72a01f8c414c7515be5cd29c882f63b9136fc932dd740ff97f907b5f6e0bb376b441d349356dbd21b6c78bdf70458d90445a09324c5a53a18d4d29257ff7668b6dadb39a621c40ab0b8b80cb4bc7f16d05182ea0baa4ade2fbab34693360845d4976e296f4214b5ef1d5ed065ed6bfcd659d2b38b2a8cbdc7971c23d88a7df2d6a6a320972ee12f8bd3d139dcfd4a812788981ea209db4d9d8469dec8887cdff1f75f1247a916562d2c940ad2cc9d9713931b8e2c9a9cf62e2d038695e9f9927008e511da7c31466f503fd5829aa5b046ebae7ebf4ddb7eec49f4fe8ba55234e8d55c12923fe3cbad46d6824fbf28522af861326852e96b0ccc011e0e02e04 */
static const ALIGNED uint8_t pAlicePubKeyData[MCUXCLFFDH_FFDHE3072_SIZE_PUBLICKEY] = {
0x2CU, 0xF5U, 0x3CU, 0x4CU, 0xECU, 0xC0U, 0x3AU, 0x85U, 0xFAU, 0x36U, 0x36U, 0x82U, 0xFDU, 0xB5U, 0xBFU, 0x59U,
0x17U, 0x9FU, 0xDAU, 0x85U, 0x9BU, 0x46U, 0xBCU, 0x20U, 0x41U, 0xABU, 0x76U, 0xF1U, 0xF2U, 0xC7U, 0xDBU, 0x29U,
0xD7U, 0x46U, 0xC4U, 0x01U, 0x09U, 0x43U, 0x5CU, 0xEBU, 0xFAU, 0x3BU, 0xF1U, 0xDEU, 0xD7U, 0xD5U, 0x48U, 0xC2U,
0x14U, 0x7BU, 0xA7U, 0xF2U, 0x99U, 0x2BU, 0xAAU, 0x91U, 0x12U, 0x8AU, 0x15U, 0x3DU, 0x0BU, 0xD5U, 0x9AU, 0x27U,
0x23U, 0xD4U, 0x35U, 0x00U, 0x0AU, 0x62U, 0xA3U, 0x4EU, 0xD6U, 0x9FU, 0x17U, 0xE4U, 0xE1U, 0xD5U, 0xDFU, 0x4EU,
0x7BU, 0x2DU, 0x13U, 0x59U, 0x88U, 0x6BU, 0xE5U, 0x32U, 0xB2U, 0x10U, 0x50U, 0x8EU, 0xAAU, 0x65U, 0x3EU, 0x1CU,
0x1EU, 0x15U, 0xD0U, 0x48U, 0xFFU, 0x54U, 0x27U, 0x16U, 0xC5U, 0x5EU, 0x6CU, 0x5DU, 0xB5U, 0x0BU, 0x4FU, 0xF0U,
0xD8U, 0x34U, 0xABU, 0x97U, 0x54U, 0xCBU, 0x95U, 0x97U, 0x31U, 0x5FU, 0x14U, 0x28U, 0xCFU, 0x0CU, 0xF9U, 0xBBU,
0x2FU, 0x72U, 0xA0U, 0x1FU, 0x8CU, 0x41U, 0x4CU, 0x75U, 0x15U, 0xBEU, 0x5CU, 0xD2U, 0x9CU, 0x88U, 0x2FU, 0x63U,
0xB9U, 0x13U, 0x6FU, 0xC9U, 0x32U, 0xDDU, 0x74U, 0x0FU, 0xF9U, 0x7FU, 0x90U, 0x7BU, 0x5FU, 0x6EU, 0x0BU, 0xB3U,
0x76U, 0xB4U, 0x41U, 0xD3U, 0x49U, 0x35U, 0x6DU, 0xBDU, 0x21U, 0xB6U, 0xC7U, 0x8BU, 0xDFU, 0x70U, 0x45U, 0x8DU,
0x90U, 0x44U, 0x5AU, 0x09U, 0x32U, 0x4CU, 0x5AU, 0x53U, 0xA1U, 0x8DU, 0x4DU, 0x29U, 0x25U, 0x7FU, 0xF7U, 0x66U,
0x8BU, 0x6DU, 0xADU, 0xB3U, 0x9AU, 0x62U, 0x1CU, 0x40U, 0xABU, 0x0BU, 0x8BU, 0x80U, 0xCBU, 0x4BU, 0xC7U, 0xF1U,
0x6DU, 0x05U, 0x18U, 0x2EU, 0xA0U, 0xBAU, 0xA4U, 0xADU, 0xE2U, 0xFBU, 0xABU, 0x34U, 0x69U, 0x33U, 0x60U, 0x84U,
0x5DU, 0x49U, 0x76U, 0xE2U, 0x96U, 0xF4U, 0x21U, 0x4BU, 0x5EU, 0xF1U, 0xD5U, 0xEDU, 0x06U, 0x5EU, 0xD6U, 0xBFU,
0xCDU, 0x65U, 0x9DU, 0x2BU, 0x38U, 0xB2U, 0xA8U, 0xCBU, 0xDCU, 0x79U, 0x71U, 0xC2U, 0x3DU, 0x88U, 0xA7U, 0xDFU,
0x2DU, 0x6AU, 0x6AU, 0x32U, 0x09U, 0x72U, 0xEEU, 0x12U, 0xF8U, 0xBDU, 0x3DU, 0x13U, 0x9DU, 0xCFU, 0xD4U, 0xA8U,
0x12U, 0x78U, 0x89U, 0x81U, 0xEAU, 0x20U, 0x9DU, 0xB4U, 0xD9U, 0xD8U, 0x46U, 0x9DU, 0xECU, 0x88U, 0x87U, 0xCDU,
0xFFU, 0x1FU, 0x75U, 0xF1U, 0x24U, 0x7AU, 0x91U, 0x65U, 0x62U, 0xD2U, 0xC9U, 0x40U, 0xADU, 0x2CU, 0xC9U, 0xD9U,
0x71U, 0x39U, 0x31U, 0xB8U, 0xE2U, 0xC9U, 0xA9U, 0xCFU, 0x62U, 0xE2U, 0xD0U, 0x38U, 0x69U, 0x5EU, 0x9FU, 0x99U,
0x27U, 0x00U, 0x8EU, 0x51U, 0x1DU, 0xA7U, 0xC3U, 0x14U, 0x66U, 0xF5U, 0x03U, 0xFDU, 0x58U, 0x29U, 0xAAU, 0x5BU,
0x04U, 0x6EU, 0xBAU, 0xE7U, 0xEBU, 0xF4U, 0xDDU, 0xB7U, 0xEEU, 0xC4U, 0x9FU, 0x4FU, 0xE8U, 0xBAU, 0x55U, 0x23U,
0x4EU, 0x8DU, 0x55U, 0xC1U, 0x29U, 0x23U, 0xFEU, 0x3CU, 0xBAU, 0xD4U, 0x6DU, 0x68U, 0x24U, 0xFBU, 0xF2U, 0x85U,
0x22U, 0xAFU, 0x86U, 0x13U, 0x26U, 0x85U, 0x2EU, 0x96U, 0xB0U, 0xCCU, 0xC0U, 0x11U, 0xE0U, 0xE0U, 0x2EU, 0x04U
};
/* Private key Bob (randomly generated) [BE] 0x5073c3dcd1d5b2c2c8f6b687148f00785fcc215ab0847e41b93110979f345c9c334c34c0391af0a3e4bec08b1e2d0993e0ebaeecb1b7e907afed0efa4291f7fada433303ace29ef3591fe7647525d86266c780258e02bc88f1979ecebc52e2311834daa0542767fc706dd1c5a940c4a4af0441a93e866f4869bbf2f31e39ebae87945f4b70521880f2ccb1bf25a9c693e5757593a0da5d36e3f9dfe888857ea1f5b3fb3110c629a2b4ab8d8e6e905108c1904af349effc747cb6d4a7c24d8b05dc61169c8fbef80c90017df34a00176844176b2a6f457576a4b8a7d87a55cbd527186508cfd0747bf1105b2547e4d0e63d54ab54bf6e39444cbc2d99fb601927f9aeb1704fcc1060089f689a5cbf711b4419c290b0f8330aa1560a9221b3d69c58a6fe3b439ec189d410e0398c3d756eab9f7d65d6735726ea4870067a9726153271947e9b9310174478d1b4367447131edf7068b5c536eec8a9c5658e04aa2a6bf59af9001c39b869a9585fc976140b0abd189ff43438fa62f25318b225232c */
static const ALIGNED uint8_t pBobPrivKeyData[MCUXCLFFDH_FFDHE3072_SIZE_PRIVATEKEY] = {
0x50U, 0x73U, 0xC3U, 0xDCU, 0xD1U, 0xD5U, 0xB2U, 0xC2U, 0xC8U, 0xF6U, 0xB6U, 0x87U, 0x14U, 0x8FU, 0x00U, 0x78U,
0x5FU, 0xCCU, 0x21U, 0x5AU, 0xB0U, 0x84U, 0x7EU, 0x41U, 0xB9U, 0x31U, 0x10U, 0x97U, 0x9FU, 0x34U, 0x5CU, 0x9CU,
0x33U, 0x4CU, 0x34U, 0xC0U, 0x39U, 0x1AU, 0xF0U, 0xA3U, 0xE4U, 0xBEU, 0xC0U, 0x8BU, 0x1EU, 0x2DU, 0x09U, 0x93U,
0xE0U, 0xEBU, 0xAEU, 0xECU, 0xB1U, 0xB7U, 0xE9U, 0x07U, 0xAFU, 0xEDU, 0x0EU, 0xFAU, 0x42U, 0x91U, 0xF7U, 0xFAU,
0xDAU, 0x43U, 0x33U, 0x03U, 0xACU, 0xE2U, 0x9EU, 0xF3U, 0x59U, 0x1FU, 0xE7U, 0x64U, 0x75U, 0x25U, 0xD8U, 0x62U,
0x66U, 0xC7U, 0x80U, 0x25U, 0x8EU, 0x02U, 0xBCU, 0x88U, 0xF1U, 0x97U, 0x9EU, 0xCEU, 0xBCU, 0x52U, 0xE2U, 0x31U,
0x18U, 0x34U, 0xDAU, 0xA0U, 0x54U, 0x27U, 0x67U, 0xFCU, 0x70U, 0x6DU, 0xD1U, 0xC5U, 0xA9U, 0x40U, 0xC4U, 0xA4U,
0xAFU, 0x04U, 0x41U, 0xA9U, 0x3EU, 0x86U, 0x6FU, 0x48U, 0x69U, 0xBBU, 0xF2U, 0xF3U, 0x1EU, 0x39U, 0xEBU, 0xAEU,
0x87U, 0x94U, 0x5FU, 0x4BU, 0x70U, 0x52U, 0x18U, 0x80U, 0xF2U, 0xCCU, 0xB1U, 0xBFU, 0x25U, 0xA9U, 0xC6U, 0x93U,
0xE5U, 0x75U, 0x75U, 0x93U, 0xA0U, 0xDAU, 0x5DU, 0x36U, 0xE3U, 0xF9U, 0xDFU, 0xE8U, 0x88U, 0x85U, 0x7EU, 0xA1U,
0xF5U, 0xB3U, 0xFBU, 0x31U, 0x10U, 0xC6U, 0x29U, 0xA2U, 0xB4U, 0xABU, 0x8DU, 0x8EU, 0x6EU, 0x90U, 0x51U, 0x08U,
0xC1U, 0x90U, 0x4AU, 0xF3U, 0x49U, 0xEFU, 0xFCU, 0x74U, 0x7CU, 0xB6U, 0xD4U, 0xA7U, 0xC2U, 0x4DU, 0x8BU, 0x05U,
0xDCU, 0x61U, 0x16U, 0x9CU, 0x8FU, 0xBEU, 0xF8U, 0x0CU, 0x90U, 0x01U, 0x7DU, 0xF3U, 0x4AU, 0x00U, 0x17U, 0x68U,
0x44U, 0x17U, 0x6BU, 0x2AU, 0x6FU, 0x45U, 0x75U, 0x76U, 0xA4U, 0xB8U, 0xA7U, 0xD8U, 0x7AU, 0x55U, 0xCBU, 0xD5U,
0x27U, 0x18U, 0x65U, 0x08U, 0xCFU, 0xD0U, 0x74U, 0x7BU, 0xF1U, 0x10U, 0x5BU, 0x25U, 0x47U, 0xE4U, 0xD0U, 0xE6U,
0x3DU, 0x54U, 0xABU, 0x54U, 0xBFU, 0x6EU, 0x39U, 0x44U, 0x4CU, 0xBCU, 0x2DU, 0x99U, 0xFBU, 0x60U, 0x19U, 0x27U,
0xF9U, 0xAEU, 0xB1U, 0x70U, 0x4FU, 0xCCU, 0x10U, 0x60U, 0x08U, 0x9FU, 0x68U, 0x9AU, 0x5CU, 0xBFU, 0x71U, 0x1BU,
0x44U, 0x19U, 0xC2U, 0x90U, 0xB0U, 0xF8U, 0x33U, 0x0AU, 0xA1U, 0x56U, 0x0AU, 0x92U, 0x21U, 0xB3U, 0xD6U, 0x9CU,
0x58U, 0xA6U, 0xFEU, 0x3BU, 0x43U, 0x9EU, 0xC1U, 0x89U, 0xD4U, 0x10U, 0xE0U, 0x39U, 0x8CU, 0x3DU, 0x75U, 0x6EU,
0xABU, 0x9FU, 0x7DU, 0x65U, 0xD6U, 0x73U, 0x57U, 0x26U, 0xEAU, 0x48U, 0x70U, 0x06U, 0x7AU, 0x97U, 0x26U, 0x15U,
0x32U, 0x71U, 0x94U, 0x7EU, 0x9BU, 0x93U, 0x10U, 0x17U, 0x44U, 0x78U, 0xD1U, 0xB4U, 0x36U, 0x74U, 0x47U, 0x13U,
0x1EU, 0xDFU, 0x70U, 0x68U, 0xB5U, 0xC5U, 0x36U, 0xEEU, 0xC8U, 0xA9U, 0xC5U, 0x65U, 0x8EU, 0x04U, 0xAAU, 0x2AU,
0x6BU, 0xF5U, 0x9AU, 0xF9U, 0x00U, 0x1CU, 0x39U, 0xB8U, 0x69U, 0xA9U, 0x58U, 0x5FU, 0xC9U, 0x76U, 0x14U, 0x0BU,
0x0AU, 0xBDU, 0x18U, 0x9FU, 0xF4U, 0x34U, 0x38U, 0xFAU, 0x62U, 0xF2U, 0x53U, 0x18U, 0xB2U, 0x25U, 0x23U, 0x2CU
};
/* Public key Bob [BE] 0x6f2623e74e89e17625484a1fb321d91ba4b245fe27c120568746630ae198dd74b4fbccb3d6dba5f2beb63851919e36ab2fea619d7ab5539082ed6535c7622f7167db840a36b59a7fed157dcf1cc10d17ac82e461c5e1e219273a85ef32f72c03c647a6b0511db574a421f9699cb120217a24eee4da4d86c058a50b7eaed9620c4e6f46e4250e25bd411d1e7aabbca065a2cb027b3acb4e066f49a4a82ca43ca1a6aff71ec3f0560faff8e56e72be8a4d4afba4cc5cb4753e1ccd77e1119a68a48ccc97f9483c182c18cd0f0573138bc6b398cd1baf557938092dda3b05ef03152412f836e20388381b090afc0bba8e7a8952e3f557f77e6f19ab66888c934f4248afd66d7e9f9a04e0cdfe4f92c732ee91a562521be11f34d80bfead58336aedefa005a258ad4928ea56233c611d05dd0c20c916ac1f1ea7c96688fe2eadaaa525ccb21ffe2a85c8de16ed88ba7d31d1176c9abd6ea563e22d467f0225a743ea2117cd4b7236fd1ea2a4d05279dd8f56cf5d8fd1dd2976aa0c2380b72c1f7bb9 */
static const ALIGNED uint8_t pBobPubKeyData[MCUXCLFFDH_FFDHE3072_SIZE_PUBLICKEY] = {
0x6FU, 0x26U, 0x23U, 0xE7U, 0x4EU, 0x89U, 0xE1U, 0x76U, 0x25U, 0x48U, 0x4AU, 0x1FU, 0xB3U, 0x21U, 0xD9U, 0x1BU,
0xA4U, 0xB2U, 0x45U, 0xFEU, 0x27U, 0xC1U, 0x20U, 0x56U, 0x87U, 0x46U, 0x63U, 0x0AU, 0xE1U, 0x98U, 0xDDU, 0x74U,
0xB4U, 0xFBU, 0xCCU, 0xB3U, 0xD6U, 0xDBU, 0xA5U, 0xF2U, 0xBEU, 0xB6U, 0x38U, 0x51U, 0x91U, 0x9EU, 0x36U, 0xABU,
0x2FU, 0xEAU, 0x61U, 0x9DU, 0x7AU, 0xB5U, 0x53U, 0x90U, 0x82U, 0xEDU, 0x65U, 0x35U, 0xC7U, 0x62U, 0x2FU, 0x71U,
0x67U, 0xDBU, 0x84U, 0x0AU, 0x36U, 0xB5U, 0x9AU, 0x7FU, 0xEDU, 0x15U, 0x7DU, 0xCFU, 0x1CU, 0xC1U, 0x0DU, 0x17U,
0xACU, 0x82U, 0xE4U, 0x61U, 0xC5U, 0xE1U, 0xE2U, 0x19U, 0x27U, 0x3AU, 0x85U, 0xEFU, 0x32U, 0xF7U, 0x2CU, 0x03U,
0xC6U, 0x47U, 0xA6U, 0xB0U, 0x51U, 0x1DU, 0xB5U, 0x74U, 0xA4U, 0x21U, 0xF9U, 0x69U, 0x9CU, 0xB1U, 0x20U, 0x21U,
0x7AU, 0x24U, 0xEEU, 0xE4U, 0xDAU, 0x4DU, 0x86U, 0xC0U, 0x58U, 0xA5U, 0x0BU, 0x7EU, 0xAEU, 0xD9U, 0x62U, 0x0CU,
0x4EU, 0x6FU, 0x46U, 0xE4U, 0x25U, 0x0EU, 0x25U, 0xBDU, 0x41U, 0x1DU, 0x1EU, 0x7AU, 0xABU, 0xBCU, 0xA0U, 0x65U,
0xA2U, 0xCBU, 0x02U, 0x7BU, 0x3AU, 0xCBU, 0x4EU, 0x06U, 0x6FU, 0x49U, 0xA4U, 0xA8U, 0x2CU, 0xA4U, 0x3CU, 0xA1U,
0xA6U, 0xAFU, 0xF7U, 0x1EU, 0xC3U, 0xF0U, 0x56U, 0x0FU, 0xAFU, 0xF8U, 0xE5U, 0x6EU, 0x72U, 0xBEU, 0x8AU, 0x4DU,
0x4AU, 0xFBU, 0xA4U, 0xCCU, 0x5CU, 0xB4U, 0x75U, 0x3EU, 0x1CU, 0xCDU, 0x77U, 0xE1U, 0x11U, 0x9AU, 0x68U, 0xA4U,
0x8CU, 0xCCU, 0x97U, 0xF9U, 0x48U, 0x3CU, 0x18U, 0x2CU, 0x18U, 0xCDU, 0x0FU, 0x05U, 0x73U, 0x13U, 0x8BU, 0xC6U,
0xB3U, 0x98U, 0xCDU, 0x1BU, 0xAFU, 0x55U, 0x79U, 0x38U, 0x09U, 0x2DU, 0xDAU, 0x3BU, 0x05U, 0xEFU, 0x03U, 0x15U,
0x24U, 0x12U, 0xF8U, 0x36U, 0xE2U, 0x03U, 0x88U, 0x38U, 0x1BU, 0x09U, 0x0AU, 0xFCU, 0x0BU, 0xBAU, 0x8EU, 0x7AU,
0x89U, 0x52U, 0xE3U, 0xF5U, 0x57U, 0xF7U, 0x7EU, 0x6FU, 0x19U, 0xABU, 0x66U, 0x88U, 0x8CU, 0x93U, 0x4FU, 0x42U,
0x48U, 0xAFU, 0xD6U, 0x6DU, 0x7EU, 0x9FU, 0x9AU, 0x04U, 0xE0U, 0xCDU, 0xFEU, 0x4FU, 0x92U, 0xC7U, 0x32U, 0xEEU,
0x91U, 0xA5U, 0x62U, 0x52U, 0x1BU, 0xE1U, 0x1FU, 0x34U, 0xD8U, 0x0BU, 0xFEU, 0xADU, 0x58U, 0x33U, 0x6AU, 0xEDU,
0xEFU, 0xA0U, 0x05U, 0xA2U, 0x58U, 0xADU, 0x49U, 0x28U, 0xEAU, 0x56U, 0x23U, 0x3CU, 0x61U, 0x1DU, 0x05U, 0xDDU,
0x0CU, 0x20U, 0xC9U, 0x16U, 0xACU, 0x1FU, 0x1EU, 0xA7U, 0xC9U, 0x66U, 0x88U, 0xFEU, 0x2EU, 0xADU, 0xAAU, 0xA5U,
0x25U, 0xCCU, 0xB2U, 0x1FU, 0xFEU, 0x2AU, 0x85U, 0xC8U, 0xDEU, 0x16U, 0xEDU, 0x88U, 0xBAU, 0x7DU, 0x31U, 0xD1U,
0x17U, 0x6CU, 0x9AU, 0xBDU, 0x6EU, 0xA5U, 0x63U, 0xE2U, 0x2DU, 0x46U, 0x7FU, 0x02U, 0x25U, 0xA7U, 0x43U, 0xEAU,
0x21U, 0x17U, 0xCDU, 0x4BU, 0x72U, 0x36U, 0xFDU, 0x1EU, 0xA2U, 0xA4U, 0xD0U, 0x52U, 0x79U, 0xDDU, 0x8FU, 0x56U,
0xCFU, 0x5DU, 0x8FU, 0xD1U, 0xDDU, 0x29U, 0x76U, 0xAAU, 0x0CU, 0x23U, 0x80U, 0xB7U, 0x2CU, 0x1FU, 0x7BU, 0xB9U
};
/* shared secret ZZ [BE] 0xf8c13e0b40c19b3aebd73e93fed54ff5b0ff374e95cf0a6ab387b0f69c9200a2d7484db6a53fd52a07b0e29ca43122aefab90ff0e7ab9a8142f458aab356d4ba74f4b16ff24e46a2f33381ed4d103510b03dc364a1f9d3275ea2f839e436ecdf32c0ad254e38c58e6aac69e82cc45f94dddaaadf66ae50e0cfd1955ae01dd33baa5119f574eebe6d1a64d6e04290986e8776dc3f9f467ad96e3f93641a015dc371eb29a45dd1bf58c010445ce107740f03b6f97d90037b5aa07dcb689f04da598060944c6ae69e114988d932364a5a2c79fadd6706f0ddff7775a126dd0aabccaa179819aef703d3464936fad1ee7f34552f266c8bbe87e647b6e280d8feddd87f676bf09cece68ac333f77e409b7b133f236da8f137f9e96d6e0f0cb44ee1a0857570966900d52606882a74d6f6297c023b04ee6a8ea9461ac99a64f75e9c057bfa4918aca97021ad78632709b64d2a911b726e0ff2a87ee3299c81e249382ae80e99e48333ea68286c8baa8640ea4b7e19198e8ba3c8db93a7770a1968f8f7 */
MCUXCLEXAMPLE_FUNCTION(mcuxClFfdh_KeyAgreement_ffdhe3072_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 ffdhe3072 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_ffdhe3072_Priv,
/* const uint8_t * pKeyData */ pAlicePrivKeyData,
/* uint32_t keyDataLength */ MCUXCLFFDH_FFDHE3072_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 ffdhe3072 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_ffdhe3072_Pub,
/* const uint8_t * pKeyData */ pAlicePubKeyData,
/* uint32_t keyDataLength */ MCUXCLFFDH_FFDHE3072_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 ffdhe3072 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_ffdhe3072_Priv,
/* const uint8_t * pKeyData */ pBobPrivKeyData,
/* uint32_t keyDataLength */ MCUXCLFFDH_FFDHE3072_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 ffdhe3072 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_ffdhe3072_Pub,
/* const uint8_t * pKeyData */ pBobPubKeyData,
/* uint32_t keyDataLength */ MCUXCLFFDH_FFDHE3072_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 ffdhe3072 */
/**************************************************************************/
/* Alice computes the shared key, additionalInputs parameter is not required */
uint8_t aliceSharedSecret[MCUXCLFFDH_FFDHE3072_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_FFDHE3072_SIZE_SHAREDSECRET))
{
return MCUXCLEXAMPLE_STATUS_ERROR;
}
/* Bob computes the shared key, additionalInputs parameter is not required */
uint8_t bobSharedSecret[MCUXCLFFDH_FFDHE3072_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_FFDHE3072_SIZE_SHAREDSECRET))
{
return MCUXCLEXAMPLE_STATUS_ERROR;
}
/* Verify that Alice and Bob computed the same shared key */
if(!mcuxClCore_assertEqual(bobSharedSecret, aliceSharedSecret, MCUXCLFFDH_FFDHE3072_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_ffdhe3072_Pub
Key type pointer for public FFDHE3072 keys.
Definition mcuxClFfdh_KeyTypes.h:85
static const mcuxClKey_Type_t mcuxClKey_Type_Ffdh_ffdhe3072_Priv
Key type pointer for private FFDHE3072 keys.
Definition mcuxClFfdh_KeyTypes.h:99
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