32 #define TRACE_LEVEL CRYPTO_TRACE_LEVEL
35 #include <mcuxClToolchain.h>
36 #include <mcuxClEls.h>
37 #include <mcuxClEcc.h>
38 #include <mcuxClRsa.h>
39 #include <internal/mcuxClRsa_Internal_Functions.h>
53 #if (MCXN947_CRYPTO_PKC_SUPPORT == ENABLED)
63 static const uint8_t SECP192R1_PRECG[] =
65 0x51, 0xA5, 0x81, 0xD9, 0x18, 0x4A, 0xC7, 0x37, 0x47, 0x30, 0xD4, 0xF4, 0x80, 0xD1, 0x09, 0x0B,
66 0xB1, 0x99, 0x63, 0xD8, 0xC0, 0xA1, 0xE3, 0x40,
67 0x5B, 0xD8, 0x1E, 0xE2, 0xE0, 0xBB, 0x9F, 0x6E, 0x7C, 0xDF, 0xCE, 0xA0, 0x2F, 0x68, 0x3F, 0x16,
68 0xEC, 0xC5, 0x67, 0x31, 0xE6, 0x99, 0x12, 0xA5
72 static const uint8_t SECP224R1_PRECG[] =
74 0x04, 0x99, 0xAA, 0x8A, 0x5F, 0x8E, 0xBE, 0xEF, 0xEC, 0x27, 0xA4, 0xE1, 0x3A, 0x0B, 0x91, 0xFB,
75 0x29, 0x91, 0xFA, 0xB0, 0xA0, 0x06, 0x41, 0x96, 0x6C, 0xAB, 0x26, 0xE3,
76 0x69, 0x16, 0xF6, 0xD4, 0x33, 0x8C, 0x5B, 0x81, 0xD7, 0x7A, 0xAE, 0x82, 0xF7, 0x06, 0x84, 0xD9,
77 0x29, 0x61, 0x0D, 0x54, 0x50, 0x75, 0x10, 0x40, 0x77, 0x66, 0xAF, 0x5D
81 static const uint8_t SECP256K1_PRECG[] =
83 0x8F, 0x68, 0xB9, 0xD2, 0xF6, 0x3B, 0x5F, 0x33, 0x92, 0x39, 0xC1, 0xAD, 0x98, 0x1F, 0x16, 0x2E,
84 0xE8, 0x8C, 0x56, 0x78, 0x72, 0x3E, 0xA3, 0x35, 0x1B, 0x7B, 0x44, 0x4C, 0x9E, 0xC4, 0xC0, 0xDA,
85 0x66, 0x2A, 0x9F, 0x2D, 0xBA, 0x06, 0x39, 0x86, 0xDE, 0x1D, 0x90, 0xC2, 0xB6, 0xBE, 0x21, 0x5D,
86 0xBB, 0xEA, 0x2C, 0xFE, 0x95, 0x51, 0x0B, 0xFD, 0xF2, 0x3C, 0xBF, 0x79, 0x50, 0x1F, 0xFF, 0x82
90 static const uint8_t SECP256R1_PRECG[] =
92 0x44, 0x7D, 0x73, 0x9B, 0xEE, 0xDB, 0x5E, 0x67, 0xFB, 0x98, 0x2F, 0xD5, 0x88, 0xC6, 0x76, 0x6E,
93 0xFC, 0x35, 0xFF, 0x7D, 0xC2, 0x97, 0xEA, 0xC3, 0x57, 0xC8, 0x4F, 0xC9, 0xD7, 0x89, 0xBD, 0x85,
94 0x2D, 0x48, 0x25, 0xAB, 0x83, 0x41, 0x31, 0xEE, 0xE1, 0x2E, 0x9D, 0x95, 0x3A, 0x4A, 0xAF, 0xF7,
95 0x3D, 0x34, 0x9B, 0x95, 0xA7, 0xFA, 0xE5, 0x00, 0x0C, 0x7E, 0x33, 0xC9, 0x72, 0xE2, 0x5B, 0x32
99 static const uint8_t SECP384R1_PRECG[] =
101 0xC1, 0x9E, 0x0B, 0x4C, 0x80, 0x01, 0x19, 0xC4, 0x40, 0xF7, 0xF9, 0xE7, 0x06, 0x42, 0x12, 0x79,
102 0xB4, 0x2A, 0x31, 0xAF, 0x8A, 0x3E, 0x29, 0x7D, 0xDB, 0x29, 0x87, 0x89, 0x4D, 0x10, 0xDD, 0xEA,
103 0xBA, 0x06, 0x54, 0x58, 0xA4, 0xF5, 0x2D, 0x78, 0xA6, 0x28, 0xB0, 0x9A, 0xAA, 0x03, 0xBD, 0x53,
104 0x16, 0xF3, 0xFD, 0xBF, 0x03, 0x56, 0xB3, 0x01, 0xE5, 0xA0, 0x19, 0x1D, 0x1F, 0x5B, 0x77, 0xF6,
105 0x57, 0x7A, 0x30, 0xEA, 0xE3, 0x56, 0x7A, 0xF9, 0xC1, 0xC7, 0xCA, 0xD1, 0x35, 0xF6, 0xEB, 0xF2,
106 0xAF, 0x68, 0xAA, 0x6D, 0xE6, 0x39, 0xD8, 0x58, 0x82, 0x2D, 0x0F, 0xC5, 0xE6, 0xC8, 0x8C, 0x41
110 static const uint8_t SECP521R1_PRECG[] =
112 0x00, 0x8E, 0x81, 0x8D, 0x28, 0xF3, 0x81, 0xD8, 0xB2, 0x05, 0xED, 0xFF, 0x69, 0x61, 0x3B, 0x96,
113 0x2E, 0x0C, 0x77, 0xD2, 0x23, 0xEF, 0x25, 0xCC, 0x1C, 0x99, 0xD9, 0xA6, 0x2E, 0x4F, 0x25, 0x72,
114 0xC1, 0x61, 0x7A, 0xD0, 0xF5, 0xE9, 0xA8, 0x6B, 0x71, 0x04, 0xE8, 0x97, 0x00, 0xD4, 0xDA, 0x71,
115 0x3C, 0xB4, 0x08, 0xF3, 0xDE, 0x44, 0x65, 0xF8, 0x6A, 0xC4, 0xEE, 0x31, 0xE7, 0x1A, 0x28, 0x64,
117 0x01, 0x3E, 0xFD, 0xBC, 0x85, 0x6E, 0x8F, 0x68, 0xBF, 0x44, 0xD4, 0xE1, 0x9F, 0xC7, 0xC3, 0x26,
118 0xFE, 0x48, 0xA1, 0x6F, 0x78, 0x55, 0xC8, 0x08, 0x66, 0x23, 0x71, 0x96, 0xBF, 0x8F, 0x72, 0xEA,
119 0x0D, 0xCB, 0x42, 0x22, 0x85, 0xDC, 0x03, 0x70, 0x68, 0x9F, 0xBE, 0x72, 0x6F, 0x8C, 0xE0, 0x45,
120 0xA4, 0x03, 0x8B, 0x64, 0x0F, 0x2B, 0x67, 0x17, 0x76, 0x0F, 0x72, 0x12, 0x31, 0xCF, 0x8C, 0xDF,
125 static const uint8_t BRAINPOOLP256R1_PRECG[] =
127 0x4A, 0x14, 0xC0, 0x30, 0x3B, 0x85, 0x6C, 0x94, 0xB4, 0x43, 0x85, 0x11, 0x7F, 0x87, 0xED, 0x9D,
128 0x12, 0x00, 0xCA, 0x9B, 0x11, 0x00, 0x65, 0x90, 0xEB, 0x6B, 0x65, 0x1C, 0xF5, 0x84, 0x72, 0xC9,
129 0x7B, 0x81, 0xE4, 0x70, 0xDA, 0xE2, 0xD5, 0xEF, 0xE6, 0x38, 0x73, 0x49, 0x8B, 0x47, 0xCC, 0x5E,
130 0xD5, 0x44, 0xA0, 0x68, 0xCD, 0x73, 0x21, 0x17, 0x52, 0x9C, 0x5C, 0xD6, 0x28, 0xF8, 0x52, 0xD1
134 static const uint8_t BRAINPOOLP384R1_PRECG[] =
136 0x23, 0x69, 0xDB, 0xB6, 0x39, 0x7C, 0x99, 0xF1, 0x89, 0x74, 0xB5, 0x68, 0x8E, 0x81, 0xAF, 0x98,
137 0xDF, 0x4D, 0xDA, 0xCC, 0xBB, 0x1F, 0xDC, 0x04, 0xE1, 0x8A, 0x5D, 0x2D, 0x02, 0xC7, 0xF7, 0x27,
138 0x02, 0xA3, 0x53, 0xBC, 0x53, 0x45, 0xA9, 0x46, 0x6B, 0xF5, 0x50, 0xB0, 0x4D, 0x99, 0x4B, 0x04,
139 0x6F, 0x47, 0xB1, 0x1D, 0xAA, 0x3B, 0x12, 0x4F, 0x93, 0xB0, 0x87, 0x75, 0x92, 0x5F, 0xF0, 0xA8,
140 0x12, 0x73, 0x68, 0xF1, 0x07, 0x42, 0xFA, 0x8F, 0xCD, 0x41, 0xCA, 0xE9, 0x33, 0x34, 0xCE, 0x66,
141 0x43, 0xF1, 0x43, 0xE6, 0x50, 0x0C, 0xB2, 0xC1, 0x0E, 0xE1, 0x88, 0xBB, 0x14, 0x50, 0x4C, 0x85
145 static const uint8_t BRAINPOOLP512R1_PRECG[] =
147 0x7B, 0x59, 0x13, 0xF7, 0x66, 0xC4, 0xED, 0x95, 0xD5, 0x26, 0x2C, 0xE1, 0xB8, 0xF1, 0xB2, 0xAF,
148 0xC0, 0x56, 0xFD, 0x65, 0x8F, 0x28, 0x48, 0x70, 0x79, 0xA8, 0x3D, 0x9B, 0x94, 0x5E, 0x84, 0x60,
149 0x1B, 0xAE, 0x0F, 0x47, 0xAC, 0xA3, 0xB9, 0x4E, 0x97, 0x50, 0x2F, 0x33, 0x73, 0x0A, 0x37, 0x21,
150 0x9D, 0x18, 0x9C, 0x54, 0x08, 0xAC, 0x7D, 0xA5, 0xCA, 0x44, 0x81, 0x27, 0xEF, 0x66, 0xEF, 0xB5,
151 0x3B, 0x4D, 0x8E, 0x45, 0x4F, 0xFC, 0x59, 0x3A, 0x37, 0x27, 0xEA, 0x1E, 0xEA, 0x20, 0xB7, 0x08,
152 0xC2, 0x1F, 0xCA, 0x91, 0x61, 0x30, 0x6A, 0xF0, 0xE4, 0x66, 0x56, 0xA7, 0x5F, 0xC4, 0x50, 0xA8,
153 0xFB, 0x4E, 0xDB, 0x0D, 0xBC, 0x57, 0x88, 0x77, 0x24, 0xEC, 0x6F, 0x84, 0x4E, 0xB4, 0x96, 0xC3,
154 0x3E, 0x94, 0x70, 0xF8, 0xDA, 0x00, 0x92, 0xC9, 0xD6, 0x10, 0x45, 0x3C, 0xC2, 0xF4, 0x58, 0x72
158 #if (MPI_SUPPORT == ENABLED)
175 mcuxClRsa_KeyEntry_t ee;
176 mcuxClRsa_KeyEntry_t pp;
177 mcuxClRsa_Key privateKey;
188 if(aLen <= pLen && eLen <= 512 && pLen <= 512)
202 ee.keyEntryLength = eLen;
206 pp.keyEntryLength = pLen;
209 privateKey.keytype = MCUXCLRSA_KEY_PRIVATEPLAIN;
210 privateKey.pMod1 = &pp;
211 privateKey.pMod2 = NULL;
212 privateKey.pQInv = NULL;
213 privateKey.pExp1 = ⅇ
214 privateKey.pExp2 = NULL;
215 privateKey.pExp3 = NULL;
218 MCUX_CSSL_FP_FUNCTION_CALL_BEGIN(status,
token, mcuxClRsa_sign(
220 (mcuxClRsa_SignVerifyMode_t *) &mcuxClRsa_Mode_Sign_NoEncode,
224 if(
token != MCUX_CSSL_FP_FUNCTION_CALLED(mcuxClRsa_sign) ||
225 status != MCUXCLRSA_STATUS_SIGN_OK)
231 MCUX_CSSL_FP_FUNCTION_CALL_END();
254 #if (RSA_SUPPORT == ENABLED)
273 mcuxClRsa_KeyEntry_t
n;
274 mcuxClRsa_KeyEntry_t e;
275 mcuxClRsa_Key publicKey;
290 if(nLen <= 512 && eLen <= 512)
302 n.keyEntryLength = nLen;
306 e.keyEntryLength = eLen;
309 publicKey.keytype = MCUXCLRSA_KEY_PUBLIC;
310 publicKey.pMod1 = &
n;
311 publicKey.pMod2 = NULL;
312 publicKey.pQInv = NULL;
313 publicKey.pExp1 = &e;
314 publicKey.pExp2 = NULL;
315 publicKey.pExp3 = NULL;
321 MCUX_CSSL_FP_FUNCTION_CALL_BEGIN(status,
token, mcuxClRsa_verify(
323 (mcuxClRsa_SignVerifyMode_t *) &mcuxClRsa_Mode_Verify_NoVerify,
327 if(
token != MCUX_CSSL_FP_FUNCTION_CALLED(mcuxClRsa_verify) ||
328 status != MCUXCLRSA_STATUS_VERIFYPRIMITIVE_OK)
334 MCUX_CSSL_FP_FUNCTION_CALL_END();
374 mcuxClRsa_KeyEntry_t
n;
375 mcuxClRsa_KeyEntry_t d;
376 mcuxClRsa_KeyEntry_t
p;
377 mcuxClRsa_KeyEntry_t q;
378 mcuxClRsa_KeyEntry_t dp;
379 mcuxClRsa_KeyEntry_t dq;
380 mcuxClRsa_KeyEntry_t qinv;
381 mcuxClRsa_Key privateKey;
396 if(nLen <= 512 && dLen <= 512)
419 p.keyEntryLength = nLen / 2;
423 q.keyEntryLength = nLen / 2;
427 dp.keyEntryLength = nLen / 2;
431 dq.keyEntryLength = nLen / 2;
435 qinv.keyEntryLength = nLen / 2;
438 privateKey.keytype = MCUXCLRSA_KEY_PRIVATECRT;
439 privateKey.pMod1 = &
p;
440 privateKey.pMod2 = &q;
441 privateKey.pQInv = &qinv;
442 privateKey.pExp1 = &dp;
443 privateKey.pExp2 = &dq;
444 privateKey.pExp3 = NULL;
455 n.keyEntryLength = nLen;
459 d.keyEntryLength = dLen;
462 privateKey.keytype = MCUXCLRSA_KEY_PRIVATEPLAIN;
463 privateKey.pMod1 = &
n;
464 privateKey.pMod2 = NULL;
465 privateKey.pQInv = NULL;
466 privateKey.pExp1 = &d;
467 privateKey.pExp2 = NULL;
468 privateKey.pExp3 = NULL;
475 MCUX_CSSL_FP_FUNCTION_CALL_BEGIN(status,
token, mcuxClRsa_sign(
477 (mcuxClRsa_SignVerifyMode_t *) &mcuxClRsa_Mode_Sign_NoEncode,
481 if(
token != MCUX_CSSL_FP_FUNCTION_CALLED(mcuxClRsa_sign) ||
482 status != MCUXCLRSA_STATUS_SIGN_OK)
488 MCUX_CSSL_FP_FUNCTION_CALL_END();
511 #if (EC_SUPPORT == ENABLED)
545 mcuxClEcc_PointMult_Param_t pointMultParam;
551 modLen = (curve->fieldSize + 7) / 8;
553 orderLen = (curve->orderSize + 7) / 8;
556 if(modLen <= 66 && orderLen <= 66)
597 pointMultParam.curveParam.misc = (orderLen << 8) | modLen;
601 pointMultParam.optLen = 0;
604 MCUX_CSSL_FP_FUNCTION_CALL_BEGIN(status,
token, mcuxClEcc_PointMult(
608 if(
token != MCUX_CSSL_FP_FUNCTION_CALLED(mcuxClEcc_PointMult) ||
609 status != MCUXCLECC_STATUS_OK)
615 MCUX_CSSL_FP_FUNCTION_CALL_END();
670 #if (CRYPTO_STATIC_MEM_SUPPORT == DISABLED)
676 #if (CRYPTO_STATIC_MEM_SUPPORT == DISABLED)
687 state->
curve = curve;
711 #if (ECDSA_SUPPORT == ENABLED)
725 const EcPrivateKey *privateKey,
const uint8_t *digest,
size_t digestLen,
732 mcuxClEcc_Sign_Param_t signParam;
735 if(privateKey == NULL || digest == NULL || signature == NULL)
739 if(privateKey->
curve == NULL)
746 curve = privateKey->
curve;
749 modLen = (curve->fieldSize + 7) / 8;
751 orderLen = (curve->orderSize + 7) / 8;
754 if(modLen <= 66 && orderLen <= 66)
788 signParam.curveParam.misc = (orderLen << 8) | modLen;
789 signParam.pHash = digest;
792 signParam.optLen = mcuxClEcc_Sign_Param_optLen_Pack(digestLen);
793 signParam.pMode = &mcuxClEcc_ECDSA_ProtocolDescriptor;
796 MCUX_CSSL_FP_FUNCTION_CALL_BEGIN(status,
token, mcuxClEcc_Sign(
800 if(
token != MCUX_CSSL_FP_FUNCTION_CALLED(mcuxClEcc_Sign) ||
801 status != MCUXCLECC_STATUS_OK)
807 MCUX_CSSL_FP_FUNCTION_CALL_END();
813 signature->
curve = curve;
853 const uint8_t *digest,
size_t digestLen,
const EcdsaSignature *signature)
858 const uint8_t *precG;
860 mcuxClEcc_Verify_Param_t verifyParam;
863 if(publicKey == NULL || digest == NULL || signature == NULL)
867 if(publicKey->
curve == NULL)
874 curve = publicKey->
curve;
877 if(
osStrcmp(curve->name,
"secp192r1") == 0)
879 precG = SECP192R1_PRECG;
881 else if(
osStrcmp(curve->name,
"secp224r1") == 0)
883 precG = SECP224R1_PRECG;
885 else if(
osStrcmp(curve->name,
"secp256k1") == 0)
887 precG = SECP256K1_PRECG;
889 else if(
osStrcmp(curve->name,
"secp256r1") == 0)
891 precG = SECP256R1_PRECG;
893 else if(
osStrcmp(curve->name,
"secp384r1") == 0)
895 precG = SECP384R1_PRECG;
897 else if(
osStrcmp(curve->name,
"secp521r1") == 0)
899 precG = SECP521R1_PRECG;
901 else if(
osStrcmp(curve->name,
"brainpoolP256r1") == 0)
903 precG = BRAINPOOLP256R1_PRECG;
905 else if(
osStrcmp(curve->name,
"brainpoolP384r1") == 0)
907 precG = BRAINPOOLP384R1_PRECG;
909 else if(
osStrcmp(curve->name,
"brainpoolP512r1") == 0)
911 precG = BRAINPOOLP512R1_PRECG;
919 modLen = (curve->fieldSize + 7) / 8;
921 orderLen = (curve->orderSize + 7) / 8;
924 if(modLen <= 66 && orderLen <= 66)
968 verifyParam.curveParam.misc = (orderLen << 8) | modLen;
969 verifyParam.pPrecG = precG;
970 verifyParam.pHash = digest;
974 verifyParam.optLen = mcuxClEcc_Sign_Param_optLen_Pack(digestLen);
977 MCUX_CSSL_FP_FUNCTION_CALL_BEGIN(status,
token, mcuxClEcc_Verify(
981 if(
token != MCUX_CSSL_FP_FUNCTION_CALLED(mcuxClEcc_Verify))
985 else if(status == MCUXCLECC_STATUS_OK)
989 else if(status == MCUXCLECC_STATUS_INVALID_SIGNATURE)
999 MCUX_CSSL_FP_FUNCTION_CALL_END();
1015 #if (X25519_SUPPORT == ENABLED)
1041 MCUX_CSSL_FP_FUNCTION_CALL_BEGIN(status,
token, mcuxClKey_init(&
elsSession,
1042 privKeyHandle, mcuxClKey_Type_Ecc_MontDH_Curve25519_PrivateKey, k,
1043 MCUXCLECC_MONTDH_CURVE25519_SIZE_PRIVATEKEY));
1046 if(
token != MCUX_CSSL_FP_FUNCTION_CALLED(mcuxClKey_init) ||
1047 status != MCUXCLKEY_STATUS_OK)
1053 MCUX_CSSL_FP_FUNCTION_CALL_END();
1059 MCUX_CSSL_FP_FUNCTION_CALL_BEGIN(status,
token, mcuxClKey_init(&
elsSession,
1060 pubKeyHandle, mcuxClKey_Type_Ecc_MontDH_Curve25519_PublicKey,
u,
1061 MCUXCLECC_MONTDH_CURVE25519_SIZE_PUBLICKEY));
1064 if(
token != MCUX_CSSL_FP_FUNCTION_CALLED(mcuxClKey_init) ||
1065 status != MCUXCLKEY_STATUS_OK)
1071 MCUX_CSSL_FP_FUNCTION_CALL_END();
1078 MCUX_CSSL_FP_FUNCTION_CALL_BEGIN(status,
token, mcuxClEcc_MontDH_KeyAgreement(
1082 if(
token != MCUX_CSSL_FP_FUNCTION_CALLED(mcuxClEcc_MontDH_KeyAgreement) ||
1083 status != MCUXCLECC_STATUS_OK)
1089 MCUX_CSSL_FP_FUNCTION_CALL_END();
1107 #if (X448_SUPPORT == ENABLED)
1133 MCUX_CSSL_FP_FUNCTION_CALL_BEGIN(status,
token, mcuxClKey_init(&
elsSession,
1134 privKeyHandle, mcuxClKey_Type_Ecc_MontDH_Curve448_PrivateKey, k,
1135 MCUXCLECC_MONTDH_CURVE448_SIZE_PRIVATEKEY));
1138 if(
token != MCUX_CSSL_FP_FUNCTION_CALLED(mcuxClKey_init) ||
1139 status != MCUXCLKEY_STATUS_OK)
1145 MCUX_CSSL_FP_FUNCTION_CALL_END();
1151 MCUX_CSSL_FP_FUNCTION_CALL_BEGIN(status,
token, mcuxClKey_init(&
elsSession,
1152 pubKeyHandle, mcuxClKey_Type_Ecc_MontDH_Curve448_PublicKey,
u,
1153 MCUXCLECC_MONTDH_CURVE448_SIZE_PUBLICKEY));
1156 if(
token != MCUX_CSSL_FP_FUNCTION_CALLED(mcuxClKey_init) ||
1157 status != MCUXCLKEY_STATUS_OK)
1163 MCUX_CSSL_FP_FUNCTION_CALL_END();
1170 MCUX_CSSL_FP_FUNCTION_CALL_BEGIN(status,
token, mcuxClEcc_MontDH_KeyAgreement(
1174 if(
token != MCUX_CSSL_FP_FUNCTION_CALLED(mcuxClEcc_MontDH_KeyAgreement) ||
1175 status != MCUXCLECC_STATUS_OK)
1181 MCUX_CSSL_FP_FUNCTION_CALL_END();
1199 #if (ED25519_SUPPORT == ENABLED)
1215 const uint8_t *publicKey,
const void *
message,
size_t messageLen,
1216 const void *context, uint8_t contextLen, uint8_t flag, uint8_t *signature)
1220 const mcuxClEcc_EdDSA_SignatureProtocolDescriptor_t *protocolDesc;
1237 MCUX_CSSL_FP_FUNCTION_CALL_BEGIN(status,
token, mcuxClKey_init(&
elsSession,
1239 MCUXCLECC_EDDSA_ED25519_SIZE_PRIVATEKEYDATA));
1242 if(
token != MCUX_CSSL_FP_FUNCTION_CALLED(mcuxClKey_init) ||
1243 status != MCUXCLKEY_STATUS_OK)
1249 MCUX_CSSL_FP_FUNCTION_CALL_END();
1255 MCUX_CSSL_FP_FUNCTION_CALL_BEGIN(status,
token, mcuxClKey_init(&
elsSession,
1257 MCUXCLECC_EDDSA_ED25519_SIZE_PUBLICKEY));
1260 if(
token != MCUX_CSSL_FP_FUNCTION_CALLED(mcuxClKey_init) ||
1261 status != MCUXCLKEY_STATUS_OK)
1267 MCUX_CSSL_FP_FUNCTION_CALL_END();
1274 MCUX_CSSL_FP_FUNCTION_CALL_BEGIN(status,
token,
1275 mcuxClEcc_EdDSA_InitPrivKeyInputMode(&
elsSession,
1280 if(
token != MCUX_CSSL_FP_FUNCTION_CALLED(mcuxClEcc_EdDSA_InitPrivKeyInputMode) ||
1281 status != MCUXCLECC_STATUS_OK)
1287 MCUX_CSSL_FP_FUNCTION_CALL_END();
1294 MCUX_CSSL_FP_FUNCTION_CALL_BEGIN(status,
token,
1297 privKeyHandle, pubKeyHandle));
1300 if(
token != MCUX_CSSL_FP_FUNCTION_CALLED(mcuxClEcc_EdDSA_GenerateKeyPair) ||
1301 status != MCUXCLECC_STATUS_OK)
1307 MCUX_CSSL_FP_FUNCTION_CALL_END();
1320 MCUX_CSSL_FP_FUNCTION_CALL_BEGIN(status,
token,
1321 mcuxClEcc_EdDSA_GenerateProtocolDescriptor(&
elsSession,
1322 &mcuxClEcc_EdDSA_DomainParams_Ed25519,
1323 (mcuxClEcc_EdDSA_SignatureProtocolDescriptor_t *) protocolDesc,
1324 MCUXCLECC_EDDSA_PHFLAG_ZERO, context, contextLen));
1327 if(
token != MCUX_CSSL_FP_FUNCTION_CALLED(mcuxClEcc_EdDSA_GenerateProtocolDescriptor) ||
1328 status != MCUXCLECC_STATUS_OK)
1334 MCUX_CSSL_FP_FUNCTION_CALL_END();
1339 protocolDesc = &mcuxClEcc_EdDsa_Ed25519ProtocolDescriptor;
1347 MCUX_CSSL_FP_FUNCTION_CALL_BEGIN(status,
token,
1348 mcuxClEcc_EdDSA_GenerateSignature(&
elsSession, privKeyHandle,
1352 if(
token != MCUX_CSSL_FP_FUNCTION_CALLED(mcuxClEcc_EdDSA_GenerateSignature) ||
1353 status != MCUXCLECC_STATUS_OK)
1359 MCUX_CSSL_FP_FUNCTION_CALL_END();
1390 size_t messageLen,
const void *context, uint8_t contextLen, uint8_t flag,
1391 const uint8_t *signature)
1394 const mcuxClEcc_EdDSA_SignatureProtocolDescriptor_t *protocolDesc;
1410 MCUX_CSSL_FP_FUNCTION_CALL_BEGIN(status,
token, mcuxClKey_init(&
elsSession,
1411 pubKeyHandle, mcuxClKey_Type_EdDSA_Ed25519_Pub, publicKey,
1412 MCUXCLECC_EDDSA_ED25519_SIZE_PUBLICKEY));
1415 if(
token != MCUX_CSSL_FP_FUNCTION_CALLED(mcuxClKey_init) ||
1416 status != MCUXCLKEY_STATUS_OK)
1422 MCUX_CSSL_FP_FUNCTION_CALL_END();
1434 MCUX_CSSL_FP_FUNCTION_CALL_BEGIN(status,
token,
1435 mcuxClEcc_EdDSA_GenerateProtocolDescriptor(&
elsSession,
1436 &mcuxClEcc_EdDSA_DomainParams_Ed25519,
1437 (mcuxClEcc_EdDSA_SignatureProtocolDescriptor_t *) protocolDesc,
1438 MCUXCLECC_EDDSA_PHFLAG_ZERO, context, contextLen));
1441 if(
token != MCUX_CSSL_FP_FUNCTION_CALLED(mcuxClEcc_EdDSA_GenerateProtocolDescriptor) ||
1442 status != MCUXCLECC_STATUS_OK)
1448 MCUX_CSSL_FP_FUNCTION_CALL_END();
1453 protocolDesc = &mcuxClEcc_EdDsa_Ed25519ProtocolDescriptor;
1464 MCUX_CSSL_FP_FUNCTION_CALL_BEGIN(status,
token,
1465 mcuxClEcc_EdDSA_VerifySignature(&
elsSession, pubKeyHandle,
1470 if(
token != MCUX_CSSL_FP_FUNCTION_CALLED(mcuxClEcc_EdDSA_VerifySignature))
1474 else if(status == MCUXCLECC_STATUS_OK)
1478 else if(status == MCUXCLECC_STATUS_INVALID_SIGNATURE)
1488 MCUX_CSSL_FP_FUNCTION_CALL_END();