Go to the documentation of this file.
   32 #define TRACE_LEVEL CRYPTO_TRACE_LEVEL 
   35 #include "mxc_device.h" 
   49 #if (MAX32690_CRYPTO_PKC_SUPPORT == ENABLED) 
   65    p = (uint32_t *) (MXC_BASE_CTB + offset);
 
   74    for(i = 1; i < (
length * 2); i++)
 
   94    p = (uint32_t *) (MXC_BASE_CTB + offset);
 
  100    for(i = 0; i < 
length; i++)
 
  123    volatile uint32_t *
p;
 
  126    p = (uint32_t *) (MXC_BASE_CTB + offset);
 
  132    for(i = 0; i < src->
size && i < (
length * 2); i++)
 
  155    volatile uint32_t *
p;
 
  158    p = (uint32_t *) (MXC_BASE_CTB + offset);
 
  164    for(i = 0; i < 
length; i++)
 
  183    volatile uint32_t *
p;
 
  186    p = (uint32_t *) (MXC_BASE_CTB + offset);
 
  198       for(i = 0; i < 
length; i++)
 
  200          dest->
data[i] = 
p[i];
 
  204       for(; i < dest->
size; i++)
 
  218 #if (MPI_SUPPORT == ENABLED) 
  244       MXC_CTB->ctrl = MXC_F_CTB_CTRL_RST;
 
  248       while((MXC_CTB->ctrl & MXC_F_CTB_CTRL_RDY) == 0)
 
  253       MXC_CTB->ctrl |= MXC_F_CTB_CTRL_FLAG_MODE;
 
  256       MXC_CTB->maa_maws = modLen;
 
  321       MXC_CTB->ctrl = MXC_F_CTB_CTRL_RST;
 
  325       while((MXC_CTB->ctrl & MXC_F_CTB_CTRL_RDY) == 0)
 
  330       MXC_CTB->ctrl |= MXC_F_CTB_CTRL_FLAG_MODE;
 
  333       MXC_CTB->maa_maws = modLen;
 
  374 #if (EC_SUPPORT == ENABLED) 
  390    modLen = curve->fieldSize;
 
  396    MXC_CTB->ctrl = MXC_F_CTB_CTRL_RST;
 
  400    while((MXC_CTB->ctrl & MXC_F_CTB_CTRL_RDY) == 0)
 
  405    MXC_CTB->ctrl |= MXC_F_CTB_CTRL_FLAG_MODE;
 
  408    MXC_CTB->maa_maws = modLen;
 
  452    modLen = curve->fieldSize;
 
  458    MXC_CTB->ctrl = MXC_F_CTB_CTRL_RST;
 
  462    while((MXC_CTB->ctrl & MXC_F_CTB_CTRL_RDY) == 0)
 
  467    MXC_CTB->ctrl |= MXC_F_CTB_CTRL_FLAG_MODE;
 
  470    MXC_CTB->maa_maws = modLen;
 
  514    if(curve->fieldInv == NULL)
 
  517       modLen = curve->fieldSize;
 
  523       MXC_CTB->ctrl = MXC_F_CTB_CTRL_RST;
 
  527       while((MXC_CTB->ctrl & MXC_F_CTB_CTRL_RDY) == 0)
 
  532       MXC_CTB->ctrl |= MXC_F_CTB_CTRL_FLAG_MODE;
 
  535       MXC_CTB->maa_maws = modLen;
 
  568       modLen = (curve->fieldSize + 31) / 32;
 
  572       curve->fieldMod(curve, 
r, 
u);
 
  589    if(curve->fieldInv == NULL)
 
  592       modLen = curve->fieldSize;
 
  598       MXC_CTB->ctrl = MXC_F_CTB_CTRL_RST;
 
  602       while((MXC_CTB->ctrl & MXC_F_CTB_CTRL_RDY) == 0)
 
  607       MXC_CTB->ctrl |= MXC_F_CTB_CTRL_FLAG_MODE;
 
  610       MXC_CTB->maa_maws = modLen;
 
  641       modLen = (curve->fieldSize + 31) / 32;
 
  645       curve->fieldMod(curve, 
r, 
u);
 
  664    orderLen = curve->orderSize;
 
  670    MXC_CTB->ctrl = MXC_F_CTB_CTRL_RST;
 
  674    while((MXC_CTB->ctrl & MXC_F_CTB_CTRL_RDY) == 0)
 
  679    MXC_CTB->ctrl |= MXC_F_CTB_CTRL_FLAG_MODE;
 
  682    MXC_CTB->maa_maws = orderLen;
 
  724    orderLen = curve->orderSize;
 
  730    MXC_CTB->ctrl = MXC_F_CTB_CTRL_RST;
 
  734    while((MXC_CTB->ctrl & MXC_F_CTB_CTRL_RDY) == 0)
 
  739    MXC_CTB->ctrl |= MXC_F_CTB_CTRL_FLAG_MODE;
 
  742    MXC_CTB->maa_maws = orderLen;
 
  770 #if (X25519_SUPPORT == ENABLED || ED25519_SUPPORT == ENABLED) 
  781    volatile uint32_t *
p;
 
  787    MXC_CTB->ctrl = MXC_F_CTB_CTRL_RST;
 
  791    while((MXC_CTB->ctrl & MXC_F_CTB_CTRL_RDY) == 0)
 
  796    MXC_CTB->ctrl |= MXC_F_CTB_CTRL_FLAG_MODE;
 
  799    MXC_CTB->maa_maws = 255;
 
  863 #if (X448_SUPPORT == ENABLED || ED448_SUPPORT == ENABLED) 
  874    volatile uint32_t *
p;
 
  880    MXC_CTB->ctrl = MXC_F_CTB_CTRL_RST;
 
  884    while((MXC_CTB->ctrl & MXC_F_CTB_CTRL_RDY) == 0)
 
  889    MXC_CTB->ctrl |= MXC_F_CTB_CTRL_FLAG_MODE;
 
  892    MXC_CTB->maa_maws = 448;
 
  896    p[0] = (
a[1] << 28) | 
a[0];
 
  897    p[1] = (
a[2] << 24) | (
a[1] >> 4);
 
  898    p[2] = (
a[3] << 20) | (
a[2] >> 8);
 
  899    p[3] = (
a[4] << 16) | (
a[3] >> 12);
 
  900    p[4] = (
a[5] << 12) | (
a[4] >> 16);
 
  901    p[5] = (
a[6] << 8) | (
a[5] >> 20);
 
  902    p[6] = (
a[7] << 4) | (
a[6] >> 24);
 
  903    p[7] = (
a[9] << 28) | 
a[8];
 
  904    p[8] = (
a[10] << 24) | (
a[9] >> 4);
 
  905    p[9] = (
a[11] << 20) | (
a[10] >> 8);
 
  906    p[10] = (
a[12] << 16) | (
a[11] >> 12);
 
  907    p[11] = (
a[13] << 12) | (
a[12] >> 16);
 
  908    p[12] = (
a[14] << 8) | (
a[13] >> 20);
 
  909    p[13] = (
a[15] << 4) | (
a[14] >> 24);
 
  913    p[0] = (
b[1] << 28) | 
b[0];
 
  914    p[1] = (
b[2] << 24) | (
b[1] >> 4);
 
  915    p[2] = (
b[3] << 20) | (
b[2] >> 8);
 
  916    p[3] = (
b[4] << 16) | (
b[3] >> 12);
 
  917    p[4] = (
b[5] << 12) | (
b[4] >> 16);
 
  918    p[5] = (
b[6] << 8) | (
b[5] >> 20);
 
  919    p[6] = (
b[7] << 4) | (
b[6] >> 24);
 
  920    p[7] = (
b[9] << 28) | 
b[8];
 
  921    p[8] = (
b[10] << 24) | (
b[9] >> 4);
 
  922    p[9] = (
b[11] << 20) | (
b[10] >> 8);
 
  923    p[10] = (
b[12] << 16) | (
b[11] >> 12);
 
  924    p[11] = (
b[13] << 12) | (
b[12] >> 16);
 
  925    p[12] = (
b[14] << 8) | (
b[13] >> 20);
 
  926    p[13] = (
b[15] << 4) | (
b[14] >> 24);
 
  960    r[0] = 
p[0] & 0x0FFFFFFF;
 
  961    r[1] = 
p[0] >> 28 | ((
p[1] << 4) & 0x0FFFFFF0);
 
  962    r[2] = 
p[1] >> 24 | ((
p[2] << 8) & 0x0FFFFF00);
 
  963    r[3] = 
p[2] >> 20 | ((
p[3] << 12) & 0x0FFFF000);
 
  964    r[4] = 
p[3] >> 16 | ((
p[4] << 16) & 0x0FFF0000);
 
  965    r[5] = 
p[4] >> 12 | ((
p[5] << 20) & 0x0FF00000);
 
  966    r[6] = 
p[5] >> 8 | ((
p[6] << 24) & 0x0F000000);
 
  968    r[8] = 
p[7] & 0x0FFFFFFF;
 
  969    r[9] = 
p[7] >> 28 | ((
p[8] << 4) & 0x0FFFFFF0);
 
  970    r[10] = 
p[8] >> 24 | ((
p[9] << 8) & 0x0FFFFF00);
 
  971    r[11] = 
p[9] >> 20 | ((
p[10] << 12) & 0x0FFFF000);
 
  972    r[12] = 
p[10] >> 16 | ((
p[11] << 16) & 0x0FFF0000);
 
  973    r[13] = 
p[11] >> 12 | ((
p[12] << 20) & 0x0FF00000);
 
  974    r[14] = 
p[12] >> 8 | ((
p[13] << 24) & 0x0F000000);
 
  
void curve25519Mul2(uint32_t *r, const uint32_t *a, const uint32_t *b)
Modular multiplication.
 
Curve448 elliptic curve (constant-time implementation)
 
#define CTB_MAA_CTRL_AMA(n)
 
void maaSetValue(uint_t offset, uint32_t value, uint_t length)
Set operand value.
 
__weak_func void ecScalarSqr(uint32_t *r, const uint32_t *a, uint_t n)
Squaring operation.
 
MAX32690 hardware cryptographic accelerator.
 
Arbitrary precision integer.
 
#define CTB_MAA_CTRL_CALC_MOD_EXP_Val
 
#define CTB_MAA_CTRL_OPT_Msk
 
#define CTB_MAA_CTRL_CALC_MOD_SUB_Val
 
void ecFieldSubMod2(const EcCurve *curve, uint32_t *r, const uint32_t *a, const uint32_t *b)
Modular subtraction.
 
#define CTB_MAA_CTRL_START_Msk
 
void ecFieldAddMod2(const EcCurve *curve, uint32_t *r, const uint32_t *a, const uint32_t *b)
Modular addition.
 
#define CTB_MAA_MEM_INSTANCE_1
 
void ecScalarSqrMod(const EcCurve *curve, uint32_t *r, const uint32_t *a)
Modular squaring.
 
error_t maaExportMpi(uint_t offset, Mpi *dest, uint_t length)
Export multiple-precision integer.
 
#define CTB_MAA_CTRL_RMA(n)
 
error_t mpiExpModFast(Mpi *r, const Mpi *a, const Mpi *e, const Mpi *p)
Modular exponentiation (fast calculation)
 
void ecScalarMulMod(const EcCurve *curve, uint32_t *r, const uint32_t *a, const uint32_t *b)
Modular multiplication.
 
MAX32690 public-key hardware accelerator.
 
MPI (Multiple Precision Integer Arithmetic)
 
#define CTB_MAA_CTRL_CALC_MOD_ADD_Val
 
General definitions for cryptographic algorithms.
 
#define CTB_MAA_MEM_INSTANCE_5
 
uint_t mpiGetBitLength(const Mpi *a)
Get the actual length in bits.
 
#define CTB_MAA_MEM_INSTANCE_2
 
void maaImportScalar(uint_t offset, const uint32_t *src, uint_t length)
Import scalar.
 
void maaExportScalar(uint_t offset, uint32_t *dest, uint_t length)
Export scalar.
 
#define CTB_MAA_MEM_INSTANCE_0
 
#define CTB_MAA_MEM_INSTANCE_4
 
void osAcquireMutex(OsMutex *mutex)
Acquire ownership of the specified mutex object.
 
void maaImportMpi(uint_t offset, const Mpi *src, uint_t length)
Import multiple-precision integer.
 
void osReleaseMutex(OsMutex *mutex)
Release ownership of the specified mutex object.
 
#define CTB_MAA_CTRL_TMA(n)
 
#define CTB_MAA_CTRL_CALC_MOD_MUL_Val
 
#define CTB_MAA_CTRL_CALC_MOD_SQR_Val
 
Curve25519 elliptic curve (constant-time implementation)
 
OsMutex max32690CryptoMutex
 
#define TB_CTRL_MAA_DONE_Msk
 
void ecFieldMulMod(const EcCurve *curve, uint32_t *r, const uint32_t *a, const uint32_t *b)
Modular multiplication.
 
#define CTB_MAA_CTRL_BMA(n)
 
__weak_func void ecScalarMul(uint32_t *rl, uint32_t *rh, const uint32_t *a, const uint32_t *b, uint_t n)
Multiplication of two integers.
 
ECC (Elliptic Curve Cryptography)
 
error_t mpiGrow(Mpi *r, uint_t size)
Adjust the size of multiple precision integer.
 
#define CTB_MAA_CTRL_CALC(n)
 
void ecFieldSqrMod(const EcCurve *curve, uint32_t *r, const uint32_t *a)
Modular squaring.
 
error_t mpiExpMod(Mpi *r, const Mpi *a, const Mpi *e, const Mpi *p)
Modular exponentiation.
 
#define EC_MAX_MODULUS_SIZE
 
void curve448Mul2(uint32_t *r, const uint32_t *a, const uint32_t *b)
Modular multiplication.
 
error_t mpiExpModRegular(Mpi *r, const Mpi *a, const Mpi *e, const Mpi *p)
Modular exponentiation (regular calculation)