TrustCore SDK NanoCrypto API reference  version 7.0
ecc_edwards.h
Go to the documentation of this file.
1 /*
2  * ecc_edwards.h
3  *
4  * Header for curve25519 and curve448 operations.
5  *
6  * Copyright 2019-2024 DigiCert, Inc. All Rights Reserved.
7  * Proprietary and Confidential Material.
8  *
9  */
10 
29 /*------------------------------------------------------------------*/
30 
31 #ifndef __ECC_EDWARDS_HEADER__
32 #define __ECC_EDWARDS_HEADER__
33 
34 #include "../crypto/primefld25519.h"
35 #include "../common/vlong.h"
36 #include "../crypto/primefld.h"
37 #include "../crypto/primefld_priv.h"
38 
39 #ifdef __cplusplus
40 extern "C" {
41 #endif
42 
43 /* Curve25519 definitions */
44 #define MOC_CURVE25519_BYTE_SIZE MOC_NUM_25519_BYTES /* 32 */
45 #define MOC_CURVE25519_ENCODING_SIZE MOC_CURVE25519_BYTE_SIZE
46 
47 typedef struct
48 {
49  sbyte4 pX[MOC_NUM_25519_UNITS];
50  sbyte4 pY[MOC_NUM_25519_UNITS];
51  sbyte4 pZ[MOC_NUM_25519_UNITS];
52  sbyte4 pT[MOC_NUM_25519_UNITS];
53 
54 } projPoint25519;
55 
72 MOC_EXTERN MSTATUS CURVE25519_convertEncodedToProjective(projPoint25519 *pResult, const ubyte *pEncodedInput);
73 
88 MOC_EXTERN void CURVE25519_addPoints(projPoint25519 *pResult, const projPoint25519 *pP, const projPoint25519 *pQ, sbyte4 *pTemps);
89 
107 MOC_EXTERN MSTATUS CURVE25519_multiplyPoint(MOC_ECC(hwAccelDescr hwAccelCtx) projPoint25519 *pResult, const ubyte *pScalar, const projPoint25519 *pP);
108 
127 MOC_EXTERN MSTATUS CURVE25519_convertProjectiveToEncoded(ubyte *pBuffer, const projPoint25519 *pInput);
128 
142 MOC_EXTERN MSTATUS CURVE25519_createCombMutex(void);
143 
157 MOC_EXTERN MSTATUS CURVE25519_deleteCombAndMutex(void);
158 
179 MOC_EXTERN MSTATUS CURVE25519_X25519(MOC_ECC(hwAccelDescr hwAccelCtx) ubyte *pResult, ubyte *pScalar, ubyte *pU);
180 
181 /* ------------------------------------------------------------------------------------ */
182 
183 /* X448 (curve448) definitions */
184 #define MOC_CURVE448_BYTE_SIZE 56
185 #define MOC_CURVE448_ENCODING_SIZE (MOC_CURVE448_BYTE_SIZE+1)
186 #define MOC_CURVE448_NUM_UNITS (MOC_CURVE448_BYTE_SIZE/sizeof(pf_unit))
187 
188 typedef struct
189 {
190  pf_unit pX[MOC_CURVE448_NUM_UNITS];
191  pf_unit pY[MOC_CURVE448_NUM_UNITS];
192  pf_unit pZ[MOC_CURVE448_NUM_UNITS];
193 
194 } projPoint448;
195 
212 MOC_EXTERN MSTATUS CURVE448_convertEncodedToProjective(projPoint448 *pResult, const ubyte *pEncodedInput);
213 
228 MOC_EXTERN void CURVE448_addPoints(projPoint448 *pResult, const projPoint448 *pP, const projPoint448 *pQ, pf_unit *pTemps);
229 
247 MOC_EXTERN MSTATUS CURVE448_multiplyPoint(MOC_ECC(hwAccelDescr hwAccelCtx) projPoint448 *pResult, const ubyte *pScalar, const projPoint448 *pP);
248 
267 MOC_EXTERN MSTATUS CURVE448_convertProjectiveToEncoded(ubyte *pBuffer, const projPoint448 *pInput);
268 
282 MOC_EXTERN MSTATUS CURVE448_createCombMutex(void);
283 
297 MOC_EXTERN MSTATUS CURVE448_deleteCombAndMutex(void);
298 
318 MOC_EXTERN MSTATUS CURVE448_X448(MOC_ECC(hwAccelDescr hwAccelCtx) ubyte *pResult, ubyte *pScalar, ubyte *pU);
319 
320 #ifdef __cplusplus
321 }
322 #endif
323 
324 #endif /* __ECC_EDWARDS_HEADER__ */
MOC_EXTERN MSTATUS CURVE448_multiplyPoint(MOC_ECC(hwAccelDescr hwAccelCtx) projPoint448 *pResult, const ubyte *pScalar, const projPoint448 *pP)
Performs a scalar point multiplication on curve448.
MOC_EXTERN void CURVE25519_addPoints(projPoint25519 *pResult, const projPoint25519 *pP, const projPoint25519 *pQ, sbyte4 *pTemps)
Adds two projective form points on curve25519.
MOC_EXTERN MSTATUS CURVE448_X448(MOC_ECC(hwAccelDescr hwAccelCtx) ubyte *pResult, ubyte *pScalar, ubyte *pU)
Scalar point multiplication for EDDH on curve448.
MOC_EXTERN MSTATUS CURVE448_createCombMutex(void)
Creates a mutex for thread safety for curve448 comb generation.
MOC_EXTERN void CURVE448_addPoints(projPoint448 *pResult, const projPoint448 *pP, const projPoint448 *pQ, pf_unit *pTemps)
Adds two projective form points on curve448.
MOC_EXTERN MSTATUS CURVE448_convertEncodedToProjective(projPoint448 *pResult, const ubyte *pEncodedInput)
Converts an encoded point on curve448 to a projective form.
MOC_EXTERN MSTATUS CURVE25519_convertEncodedToProjective(projPoint25519 *pResult, const ubyte *pEncodedInput)
Converts an encoded point on curve25519 to a projective form.
MOC_EXTERN MSTATUS CURVE25519_createCombMutex(void)
Creates a mutex for thread safety for curve25519 comb generation.
MOC_EXTERN MSTATUS CURVE448_convertProjectiveToEncoded(ubyte *pBuffer, const projPoint448 *pInput)
Converts a projective form point on curve448 to an encoded form point.
MOC_EXTERN MSTATUS CURVE25519_deleteCombAndMutex(void)
Zeroes and frees the persisted comb and mutex for curve25519.
MOC_EXTERN MSTATUS CURVE25519_convertProjectiveToEncoded(ubyte *pBuffer, const projPoint25519 *pInput)
Converts a projective form point on curve25519 to an encoded form point.
MOC_EXTERN MSTATUS CURVE25519_multiplyPoint(MOC_ECC(hwAccelDescr hwAccelCtx) projPoint25519 *pResult, const ubyte *pScalar, const projPoint25519 *pP)
Performs a scalar point multiplication on curve25519.
MOC_EXTERN MSTATUS CURVE25519_X25519(MOC_ECC(hwAccelDescr hwAccelCtx) ubyte *pResult, ubyte *pScalar, ubyte *pU)
Scalar point multiplication for EDDH on curve25519.
MOC_EXTERN MSTATUS CURVE448_deleteCombAndMutex(void)
Zeroes and frees the persisted comb and mutex for curve448.