CC26xx Driver Library
Rom_crypto_api

Functions

void ECC_initialize (uint32_t *pWorkzone)
 Pass pointer to ECC memory allocation to ECC engine. More...
 
uint8_t ECC_generateKey (uint32_t *randString, uint32_t *privateKey, uint32_t *publicKey_x, uint32_t *publicKey_y)
 Generate a key. More...
 
uint8_t ECC_ECDSA_sign (uint32_t *secretKey, uint32_t *text, uint32_t *randString, uint32_t *sign1, uint32_t *sign2)
 Sign data. More...
 
uint8_t ECC_ECDSA_verify (uint32_t *publicKey_x, uint32_t *publicKey_y, uint32_t *text, uint32_t *sign1, uint32_t *sign2)
 Verify signature. More...
 
uint8_t ECC_ECDH_computeSharedSecret (uint32_t *privateKey, uint32_t *publicKey_x, uint32_t *publicKey_y, uint32_t *sharedSecret_x, uint32_t *sharedSecret_y)
 Compute the shared secret. More...
 

Detailed Description

Function Documentation

uint8_t ECC_ECDH_computeSharedSecret ( uint32_t *  privateKey,
uint32_t *  publicKey_x,
uint32_t *  publicKey_y,
uint32_t *  sharedSecret_x,
uint32_t *  sharedSecret_y 
)

Compute the shared secret.

Parameters
privateKeyPointer to private key, input.
publicKey_xPointer to public key X-coordinate, input.
publicKey_yPointer to public key Y-coordinate, input.
sharedSecret_xPointer to shared secret X-coordinate, output.
sharedSecret_yPointer to shared secret Y-coordinate, output.
Returns
Status
155 {
156  return (uint8_t)ecdh_computeSharedSecret((uint32_t*)privateKey, (uint32_t*)publicKey_x,
157  (uint32_t*)publicKey_y, (uint32_t*)sharedSecret_x,
158  (uint32_t*)sharedSecret_y);
159 }
ecdh_computeSharedSecret_t ecdh_computeSharedSecret
Definition: rom_crypto.c:112
uint8_t ECC_ECDSA_sign ( uint32_t *  secretKey,
uint32_t *  text,
uint32_t *  randString,
uint32_t *  sign1,
uint32_t *  sign2 
)

Sign data.

Parameters
secretKeyPointer to the secret key, input.
textPointer to the message, input.
randStringPointer to random string, input.
sign1Pointer to signature part 1, output.
sign2Pointer to signature part 2, output.
Returns
Status
132 {
133  return (uint8_t)ecc_ecdsa_sign((uint32_t*)secretKey, (uint32_t*)text, (uint32_t*)randString,
134  (uint32_t*)sign1, (uint32_t*)sign2);
135 }
ecdsa_sign_t ecc_ecdsa_sign
Definition: rom_crypto.c:106
uint8_t ECC_ECDSA_verify ( uint32_t *  publicKey_x,
uint32_t *  publicKey_y,
uint32_t *  text,
uint32_t *  sign1,
uint32_t *  sign2 
)

Verify signature.

Parameters
publicKey_xPointer to public key X-coordinate, input.
publicKey_yPointer to public key Y-coordinate, input.
textPointer to message data, input.
sign1Pointer to signature part 1, input.
sign2Pointer to signature part 2, input.
Returns
Status
143 {
144  return (uint8_t)ecc_ecdsa_verify((uint32_t*)publicKey_x, (uint32_t*)publicKey_y, (uint32_t*)text,
145  (uint32_t*)sign1, (uint32_t*)sign2);
146 }
ecdsa_verify_t ecc_ecdsa_verify
Definition: rom_crypto.c:109
uint8_t ECC_generateKey ( uint32_t *  randString,
uint32_t *  privateKey,
uint32_t *  publicKey_x,
uint32_t *  publicKey_y 
)

Generate a key.

This is used for both ECDH and ECDSA.

Parameters
randStringPointer to random string, input.
privateKeyPointer to the private key, output.
publicKey_xPointer to public key X-coordinate, output.
publicKey_yPointer to public key Y-coordinate, output.
Returns
Status
120 {
121  return (uint8_t)ecc_generatekey((uint32_t*)randString, (uint32_t*)privateKey,
122  (uint32_t*)publicKey_x, (uint32_t*)publicKey_y);
123 
124 }
ecc_keygen_t ecc_generatekey
Definition: rom_crypto.c:103
void ECC_initialize ( uint32_t *  pWorkzone)

Pass pointer to ECC memory allocation to ECC engine.

This function can be called again to point the ECC workzone at a different memory buffer.

Parameters
pWorkzonePointer to memory allocated for computations, input. See description at beginning of ECC section for memory requirements.
Returns
None
73 {
74  // Initialize curve parameters
75  //data_p = (uint32_t *)PARAM_P;
76  *((uint32_t **)0x20000138) = (uint32_t *)PARAM_P;
77 
78  //data_r = (uint32_t *)PARAM_R;
79  *((uint32_t **)0x2000013c) = (uint32_t *)PARAM_R;
80 
81  //data_a = (uint32_t *)PARAM_A;
82  *((uint32_t **)0x20000140) = (uint32_t *)PARAM_A;
83 
84  //data_b = (uint32_t *)PARAM_B;
85  *((uint32_t **)0x20000144) = (uint32_t *)PARAM_B;
86 
87  //data_Gx = (uint32_t *)PARAM_GX;
88  *((uint32_t **)0x2000012c) = (uint32_t *)PARAM_GX;
89 
90  //data_Gy = (uint32_t *)PARAM_GY;
91  *((uint32_t **)0x20000130) = (uint32_t *)PARAM_GY;
92 
93  // Initialize window size
94  //win = (uint8_t) ECC_WINDOW_SIZE;
95  *((uint8_t *)0x20000148) = (uint8_t) ECC_WINDOW_SIZE;
96 
97  // Initialize work zone
98  //workzone = (uint32_t *) pWorkzone;
99  *((uint32_t **)0x20000134) = (uint32_t *) pWorkzone;
100 }
#define PARAM_P
Definition: rom_crypto.c:48
#define PARAM_R
Definition: rom_crypto.c:51
#define PARAM_A
Definition: rom_crypto.c:54
#define PARAM_GX
Definition: rom_crypto.c:60
#define PARAM_GY
Definition: rom_crypto.c:63
#define ECC_WINDOW_SIZE
Definition: rom_crypto.h:66
#define PARAM_B
Definition: rom_crypto.c:57

Macro Definition Documentation

#define ECC_A_COEF_LENGTH_ZERO   0xC5
#define ECC_A_COEF_TOO_LONG   0x5C
#define ECC_BAD_WINDOW_SIZE   0x66
#define ECC_DIGEST_LENGTH_ZERO   0x72
#define ECC_DIGEST_TOO_LONG   0x27
#define ECC_ECC_KEY_LENGTH_ZERO   0x52
#define ECC_ECC_KEY_TOO_LONG   0x25
#define ECC_ECDH_COMMON_KEY_OK   ECC_SCALAR_MUL_OK
#define ECC_ECDH_KEYGEN_OK   ECC_SCALAR_MUL_OK
#define ECC_ECDSA_INVALID_SIGNATURE   0x5A
#define ECC_ECDSA_KEYGEN_OK   ECC_SCALAR_MUL_OK
#define ECC_ECDSA_SIGN_OK   0x32
#define ECC_ECDSA_VALID_SIGNATURE   0xA5
#define ECC_MODULUS_EVEN   0xDC
#define ECC_MODULUS_LARGER_THAN_255_WORDS   0xD2
#define ECC_MODULUS_LENGTH_ZERO   0x08
#define ECC_MODULUS_MSW_IS_ZERO   0x30
#define ECC_ORDER_EVEN   0x82
#define ECC_ORDER_LARGER_THAN_255_WORDS   0x28
#define ECC_ORDER_LENGTH_ZERO   0x6C
#define ECC_ORDER_MSW_IS_ZERO   0x23
#define ECC_ORDER_TOO_LONG   0xC6
#define ECC_PRIME_NIST256_CURVE
#define ECC_SCALAR_LENGTH_ZERO   0x53
#define ECC_SCALAR_MUL_OK   0x99
#define ECC_SCALAR_TOO_LONG   0x35
#define ECC_SIG_P1_LENGTH_ZERO   0x12
#define ECC_SIG_P1_TOO_LONG   0x11
#define ECC_SIG_P2_LENGTH_ZERO   0x21
#define ECC_SIG_P2_TOO_LONG   0x22
#define ECC_WINDOW_SIZE   3

Referenced by ECC_initialize().

#define ECC_X_COORD_LENGTH_ZERO   0xC3
#define ECC_X_COORD_TOO_LONG   0x3C
#define ECC_Y_COORD_LENGTH_ZERO   0x56
#define ECC_Y_COORD_TOO_LONG   0x65