81 #define tc_uECC_WORD_SIZE 4 84 #ifndef tc_uECC_RNG_MAX_TRIES 85 #define tc_uECC_RNG_MAX_TRIES 64 99 #define HIGH_BIT_SET 0x80000000 100 #define tc_uECC_WORD_BITS 32 101 #define tc_uECC_WORD_BITS_SHIFT 5 102 #define tc_uECC_WORD_BITS_MASK 0x01F 105 #define NUM_ECC_WORDS 8 107 #define NUM_ECC_BYTES (tc_uECC_WORD_SIZE*NUM_ECC_WORDS) 154 #define BYTES_TO_WORDS_8(a, b, c, d, e, f, g, h) 0x##d##c##b##a, 0x##h##g##f##e 155 #define BYTES_TO_WORDS_4(a, b, c, d) 0x##d##c##b##a 156 #define BITS_TO_WORDS(num_bits) \ 157 ((num_bits + ((tc_uECC_WORD_SIZE * 8) - 1)) / (tc_uECC_WORD_SIZE * 8)) 158 #define BITS_TO_BYTES(num_bits) ((num_bits + 7) / 8) 530 const unsigned int *native);
tc_uECC_word_t tc_uECC_vli_sub(tc_uECC_word_t *result, const tc_uECC_word_t *left, const tc_uECC_word_t *right, wordcount_t num_words)
Definition: tc_ecc.c:191
int tc_uECC_valid_public_key(const uint8_t *public_key, tc_uECC_Curve curve)
Definition: tc_ecc.c:890
int16_t bitcount_t
Definition: types.h:71
cmpresult_t tc_uECC_vli_cmp_unsafe(const tc_uECC_word_t *left, const tc_uECC_word_t *right, wordcount_t num_words)
Definition: tc_ecc.c:155
void(* double_jacobian)(tc_uECC_word_t *X1, tc_uECC_word_t *Y1, tc_uECC_word_t *Z1, tc_uECC_Curve curve)
Definition: tc_ecc.h:120
tc_uECC_word_t n[NUM_ECC_WORDS]
Definition: tc_ecc.h:117
bitcount_t tc_uECC_vli_numBits(const tc_uECC_word_t *vli, const wordcount_t max_words)
Definition: tc_ecc.c:125
void XYcZ_add(tc_uECC_word_t *X1, tc_uECC_word_t *Y1, tc_uECC_word_t *X2, tc_uECC_word_t *Y2, tc_uECC_Curve curve)
Definition: tc_ecc.c:661
tc_uECC_word_t EccPoint_isZero(const tc_uECC_word_t *point, tc_uECC_Curve curve)
Definition: tc_ecc.c:622
int8_t wordcount_t
Definition: tc_ecc.h:89
void(* x_side)(tc_uECC_word_t *result, const tc_uECC_word_t *x, tc_uECC_Curve curve)
Definition: tc_ecc.h:122
tc_uECC_word_t G[NUM_ECC_WORDS *2]
Definition: tc_ecc.h:118
int tc_uECC_compute_public_key(const uint8_t *private_key, uint8_t *public_key, tc_uECC_Curve curve)
Definition: tc_ecc.c:908
void x_side_default(tc_uECC_word_t *result, const tc_uECC_word_t *x, tc_uECC_Curve curve)
Definition: tc_ecc.c:502
int tc_uECC_curve_private_key_size(tc_uECC_Curve curve)
Definition: tc_ecc.c:77
void tc_uECC_vli_clear(tc_uECC_word_t *vli, wordcount_t num_words)
Definition: tc_ecc.c:87
void tc_uECC_vli_nativeToBytes(uint8_t *bytes, int num_bytes, const unsigned int *native)
Definition: tc_ecc.c:814
tc_uECC_word_t tc_uECC_vli_equal(const tc_uECC_word_t *left, const tc_uECC_word_t *right, wordcount_t num_words)
Definition: tc_ecc.c:171
int8_t cmpresult_t
Definition: types.h:72
tc_uECC_word_t EccPoint_compute_public_key(tc_uECC_word_t *result, tc_uECC_word_t *private_key, tc_uECC_Curve curve)
Definition: tc_ecc.c:791
void tc_uECC_vli_set(tc_uECC_word_t *dest, const tc_uECC_word_t *src, wordcount_t num_words)
Definition: tc_ecc.c:145
bitcount_t num_n_bits
Definition: tc_ecc.h:115
#define NUM_ECC_BYTES
Definition: tc_ecc.h:107
tc_uECC_Curve tc_uECC_secp256r1(void)
Definition: tc_ecc.c:516
int8_t cmpresult_t
Definition: tc_ecc.h:92
int8_t wordcount_t
Definition: types.h:70
void apply_z(tc_uECC_word_t *X1, tc_uECC_word_t *Y1, const tc_uECC_word_t *const Z, tc_uECC_Curve curve)
Definition: tc_ecc.c:627
tc_uECC_word_t b[NUM_ECC_WORDS]
Definition: tc_ecc.h:119
tc_uECC_word_t p[NUM_ECC_WORDS]
Definition: tc_ecc.h:116
cmpresult_t tc_uECC_vli_cmp(const tc_uECC_word_t *left, const tc_uECC_word_t *right, wordcount_t num_words)
Definition: tc_ecc.c:222
int tc_uECC_generate_random_int(tc_uECC_word_t *random, const tc_uECC_word_t *top, wordcount_t num_words)
Definition: tc_ecc.c:837
void EccPoint_mult(tc_uECC_word_t *result, const tc_uECC_word_t *point, const tc_uECC_word_t *scalar, const tc_uECC_word_t *initial_Z, bitcount_t num_bits, tc_uECC_Curve curve)
Definition: tc_ecc.c:729
int(* tc_uECC_RNG_Function)(uint8_t *dest, unsigned int size)
Definition: tc_ecc.h:225
#define NUM_ECC_WORDS
Definition: tc_ecc.h:105
void double_jacobian_default(tc_uECC_word_t *X1, tc_uECC_word_t *Y1, tc_uECC_word_t *Z1, tc_uECC_Curve curve)
Definition: tc_ecc.c:455
int tc_uECC_curve_public_key_size(tc_uECC_Curve curve)
Definition: tc_ecc.c:82
void vli_mmod_fast_secp256r1(unsigned int *result, unsigned int *product)
Definition: tc_ecc.c:521
const struct tc_uECC_Curve_t * tc_uECC_Curve
Definition: tc_ecc.h:111
void tc_uECC_vli_bytesToNative(unsigned int *native, const uint8_t *bytes, int num_bytes)
Definition: tc_ecc.c:825
void tc_uECC_vli_modInv(tc_uECC_word_t *result, const tc_uECC_word_t *input, const tc_uECC_word_t *mod, wordcount_t num_words)
Definition: tc_ecc.c:408
tc_uECC_word_t regularize_k(const tc_uECC_word_t *const k, tc_uECC_word_t *k0, tc_uECC_word_t *k1, tc_uECC_Curve curve)
Definition: tc_ecc.c:774
tc_uECC_word_t tc_uECC_vli_isZero(const tc_uECC_word_t *vli, wordcount_t num_words)
Definition: tc_ecc.c:95
int16_t bitcount_t
Definition: tc_ecc.h:90
void tc_uECC_vli_modAdd(tc_uECC_word_t *result, const tc_uECC_word_t *left, const tc_uECC_word_t *right, const tc_uECC_word_t *mod, wordcount_t num_words)
Definition: tc_ecc.c:294
void tc_uECC_set_rng(tc_uECC_RNG_Function rng_function)
Definition: tc_ecc.c:67
void tc_uECC_vli_modSub(tc_uECC_word_t *result, const tc_uECC_word_t *left, const tc_uECC_word_t *right, const tc_uECC_word_t *mod, wordcount_t num_words)
Definition: tc_ecc.c:306
tc_uECC_word_t tc_uECC_vli_testBit(const tc_uECC_word_t *vli, bitcount_t bit)
Definition: tc_ecc.c:105
#define BYTES_TO_WORDS_8(a, b, c, d, e, f, g, h)
Definition: tc_ecc.h:154
int tc_uECC_valid_point(const tc_uECC_word_t *point, tc_uECC_Curve curve)
Definition: tc_ecc.c:863
wordcount_t num_bytes
Definition: tc_ecc.h:114
tc_uECC_RNG_Function tc_uECC_get_rng(void)
Definition: tc_ecc.c:72
void tc_uECC_vli_modMult(tc_uECC_word_t *result, const tc_uECC_word_t *left, const tc_uECC_word_t *right, const tc_uECC_word_t *mod, wordcount_t num_words)
Definition: tc_ecc.c:364
uint64_t tc_uECC_dword_t
Definition: tc_ecc.h:96
void tc_uECC_vli_modMult_fast(tc_uECC_word_t *result, const tc_uECC_word_t *left, const tc_uECC_word_t *right, tc_uECC_Curve curve)
Definition: tc_ecc.c:373
void tc_uECC_vli_mmod(tc_uECC_word_t *result, tc_uECC_word_t *product, const tc_uECC_word_t *mod, wordcount_t num_words)
Definition: tc_ecc.c:320
void(* mmod_fast)(tc_uECC_word_t *result, tc_uECC_word_t *product)
Definition: tc_ecc.h:123
unsigned int tc_uECC_word_t
Definition: tc_ecc.h:94
wordcount_t num_words
Definition: tc_ecc.h:113
static const struct tc_uECC_Curve_t curve_secp256r1
Definition: tc_ecc.h:161