| 
| #define  | uECC_RNG_MAX_TRIES   64 | 
|   | 
| #define  | uECC_VLI_API   static | 
|   | 
| #define  | CONCATX(a, ...)   a ## __VA_ARGS__ | 
|   | 
| #define  | CONCAT(a, ...)   CONCATX(a, __VA_ARGS__) | 
|   | 
| #define  | STRX(a)   #a | 
|   | 
| #define  | STR(a)   STRX(a) | 
|   | 
| #define  | EVAL(...)   EVAL1(EVAL1(EVAL1(EVAL1(__VA_ARGS__)))) | 
|   | 
| #define  | EVAL1(...)   EVAL2(EVAL2(EVAL2(EVAL2(__VA_ARGS__)))) | 
|   | 
| #define  | EVAL2(...)   EVAL3(EVAL3(EVAL3(EVAL3(__VA_ARGS__)))) | 
|   | 
| #define  | EVAL3(...)   EVAL4(EVAL4(EVAL4(EVAL4(__VA_ARGS__)))) | 
|   | 
| #define  | EVAL4(...)   __VA_ARGS__ | 
|   | 
| #define  | DEC_1   0 | 
|   | 
| #define  | DEC_2   1 | 
|   | 
| #define  | DEC_3   2 | 
|   | 
| #define  | DEC_4   3 | 
|   | 
| #define  | DEC_5   4 | 
|   | 
| #define  | DEC_6   5 | 
|   | 
| #define  | DEC_7   6 | 
|   | 
| #define  | DEC_8   7 | 
|   | 
| #define  | DEC_9   8 | 
|   | 
| #define  | DEC_10   9 | 
|   | 
| #define  | DEC_11   10 | 
|   | 
| #define  | DEC_12   11 | 
|   | 
| #define  | DEC_13   12 | 
|   | 
| #define  | DEC_14   13 | 
|   | 
| #define  | DEC_15   14 | 
|   | 
| #define  | DEC_16   15 | 
|   | 
| #define  | DEC_17   16 | 
|   | 
| #define  | DEC_18   17 | 
|   | 
| #define  | DEC_19   18 | 
|   | 
| #define  | DEC_20   19 | 
|   | 
| #define  | DEC_21   20 | 
|   | 
| #define  | DEC_22   21 | 
|   | 
| #define  | DEC_23   22 | 
|   | 
| #define  | DEC_24   23 | 
|   | 
| #define  | DEC_25   24 | 
|   | 
| #define  | DEC_26   25 | 
|   | 
| #define  | DEC_27   26 | 
|   | 
| #define  | DEC_28   27 | 
|   | 
| #define  | DEC_29   28 | 
|   | 
| #define  | DEC_30   29 | 
|   | 
| #define  | DEC_31   30 | 
|   | 
| #define  | DEC_32   31 | 
|   | 
| #define  | DEC(N)   CONCAT(DEC_, N) | 
|   | 
| #define  | SECOND_ARG(_,  val, ...)   val | 
|   | 
| #define  | SOME_CHECK_0   ~, 0 | 
|   | 
| #define  | GET_SECOND_ARG(...)   SECOND_ARG(__VA_ARGS__, SOME,) | 
|   | 
| #define  | SOME_OR_0(N)   GET_SECOND_ARG(CONCAT(SOME_CHECK_, N)) | 
|   | 
| #define  | EMPTY(...) | 
|   | 
| #define  | DEFER(...)   __VA_ARGS__ EMPTY() | 
|   | 
| #define  | REPEAT_NAME_0()   REPEAT_0 | 
|   | 
| #define  | REPEAT_NAME_SOME()   REPEAT_SOME | 
|   | 
| #define  | REPEAT_0(...) | 
|   | 
| #define  | REPEAT_SOME(N,  stuff)   DEFER(CONCAT(REPEAT_NAME_, SOME_OR_0(DEC(N))))()(DEC(N), stuff) stuff | 
|   | 
| #define  | REPEAT(N,  stuff)   EVAL(REPEAT_SOME(N, stuff)) | 
|   | 
| #define  | REPEATM_NAME_0()   REPEATM_0 | 
|   | 
| #define  | REPEATM_NAME_SOME()   REPEATM_SOME | 
|   | 
| #define  | REPEATM_0(...) | 
|   | 
| #define  | REPEATM_SOME(N,  macro) | 
|   | 
| #define  | REPEATM(N,  macro)   EVAL(REPEATM_SOME(N, macro)) | 
|   | 
| #define  | uECC_MAX_WORDS   6 /* Due to the size of curve_n. */ | 
|   | 
| #define  | uECC_MAX_WORDS   6 | 
|   | 
| #define  | uECC_MAX_WORDS   7 | 
|   | 
| #define  | uECC_MAX_WORDS   8 | 
|   | 
| #define  | BITS_TO_WORDS(num_bits)   ((num_bits + ((uECC_WORD_SIZE * 8) - 1)) / (uECC_WORD_SIZE * 8)) | 
|   | 
| #define  | BITS_TO_BYTES(num_bits)   ((num_bits + 7) / 8) | 
|   | 
| #define  | EVEN(vli)   (!(vli[0] & 1)) | 
|   | 
| #define  | EccPoint_isZero(point,  curve)   uECC_vli_isZero((point), (curve)->num_words * 2) | 
|   | 
 | 
| static cmpresult_t  | uECC_vli_cmp_unsafe (const uECC_word_t *left, const uECC_word_t *right, wordcount_t num_words) | 
|   | 
| void  | uECC_set_rng (uECC_RNG_Function rng_function) | 
|   | 
| uECC_RNG_Function  | uECC_get_rng (void) | 
|   | 
| int  | uECC_curve_private_key_size (uECC_Curve curve) | 
|   | 
| int  | uECC_curve_public_key_size (uECC_Curve curve) | 
|   | 
| uECC_VLI_API void  | uECC_vli_clear (uECC_word_t *vli, wordcount_t num_words) | 
|   | 
| uECC_VLI_API uECC_word_t  | uECC_vli_isZero (const uECC_word_t *vli, wordcount_t num_words) | 
|   | 
| uECC_VLI_API uECC_word_t  | uECC_vli_testBit (const uECC_word_t *vli, bitcount_t bit) | 
|   | 
| static wordcount_t  | vli_numDigits (const uECC_word_t *vli, const wordcount_t max_words) | 
|   | 
| uECC_VLI_API bitcount_t  | uECC_vli_numBits (const uECC_word_t *vli, const wordcount_t max_words) | 
|   | 
| uECC_VLI_API void  | uECC_vli_set (uECC_word_t *dest, const uECC_word_t *src, wordcount_t num_words) | 
|   | 
| uECC_VLI_API uECC_word_t  | uECC_vli_equal (const uECC_word_t *left, const uECC_word_t *right, wordcount_t num_words) | 
|   | 
| uECC_VLI_API uECC_word_t  | uECC_vli_sub (uECC_word_t *result, const uECC_word_t *left, const uECC_word_t *right, wordcount_t num_words) | 
|   | 
| uECC_VLI_API cmpresult_t  | uECC_vli_cmp (const uECC_word_t *left, const uECC_word_t *right, wordcount_t num_words) | 
|   | 
| uECC_VLI_API void  | uECC_vli_rshift1 (uECC_word_t *vli, wordcount_t num_words) | 
|   | 
| uECC_VLI_API uECC_word_t  | uECC_vli_add (uECC_word_t *result, const uECC_word_t *left, const uECC_word_t *right, wordcount_t num_words) | 
|   | 
| static void  | muladd (uECC_word_t a, uECC_word_t b, uECC_word_t *r0, uECC_word_t *r1, uECC_word_t *r2) | 
|   | 
| uECC_VLI_API void  | uECC_vli_mult (uECC_word_t *result, const uECC_word_t *left, const uECC_word_t *right, wordcount_t num_words) | 
|   | 
| uECC_VLI_API void  | uECC_vli_modAdd (uECC_word_t *result, const uECC_word_t *left, const uECC_word_t *right, const uECC_word_t *mod, wordcount_t num_words) | 
|   | 
| uECC_VLI_API void  | uECC_vli_modSub (uECC_word_t *result, const uECC_word_t *left, const uECC_word_t *right, const uECC_word_t *mod, wordcount_t num_words) | 
|   | 
| uECC_VLI_API void  | uECC_vli_mmod (uECC_word_t *result, uECC_word_t *product, const uECC_word_t *mod, wordcount_t num_words) | 
|   | 
| uECC_VLI_API void  | uECC_vli_modMult (uECC_word_t *result, const uECC_word_t *left, const uECC_word_t *right, const uECC_word_t *mod, wordcount_t num_words) | 
|   | 
| uECC_VLI_API void  | uECC_vli_modMult_fast (uECC_word_t *result, const uECC_word_t *left, const uECC_word_t *right, uECC_Curve curve) | 
|   | 
| uECC_VLI_API void  | uECC_vli_modSquare_fast (uECC_word_t *result, const uECC_word_t *left, uECC_Curve curve) | 
|   | 
| static void  | vli_modInv_update (uECC_word_t *uv, const uECC_word_t *mod, wordcount_t num_words) | 
|   | 
| uECC_VLI_API void  | uECC_vli_modInv (uECC_word_t *result, const uECC_word_t *input, const uECC_word_t *mod, wordcount_t num_words) | 
|   | 
| static void  | apply_z (uECC_word_t *X1, uECC_word_t *Y1, const uECC_word_t *const Z, uECC_Curve curve) | 
|   | 
| static void  | XYcZ_initial_double (uECC_word_t *X1, uECC_word_t *Y1, uECC_word_t *X2, uECC_word_t *Y2, const uECC_word_t *const initial_Z, uECC_Curve curve) | 
|   | 
| static void  | XYcZ_add (uECC_word_t *X1, uECC_word_t *Y1, uECC_word_t *X2, uECC_word_t *Y2, uECC_Curve curve) | 
|   | 
| static void  | XYcZ_addC (uECC_word_t *X1, uECC_word_t *Y1, uECC_word_t *X2, uECC_word_t *Y2, uECC_Curve curve) | 
|   | 
| static void  | EccPoint_mult (uECC_word_t *result, const uECC_word_t *point, const uECC_word_t *scalar, const uECC_word_t *initial_Z, bitcount_t num_bits, uECC_Curve curve) | 
|   | 
| static uECC_word_t  | regularize_k (const uECC_word_t *const k, uECC_word_t *k0, uECC_word_t *k1, uECC_Curve curve) | 
|   | 
| static uECC_word_t  | EccPoint_compute_public_key (uECC_word_t *result, uECC_word_t *private_key, uECC_Curve curve) | 
|   | 
| uECC_VLI_API void  | uECC_vli_nativeToBytes (uint8_t *bytes, int num_bytes, const uECC_word_t *native) | 
|   | 
| uECC_VLI_API void  | uECC_vli_bytesToNative (uECC_word_t *native, const uint8_t *bytes, int num_bytes) | 
|   | 
| uECC_VLI_API int  | uECC_generate_random_int (uECC_word_t *random, const uECC_word_t *top, wordcount_t num_words) | 
|   | 
| int  | uECC_make_key (uint8_t *public_key, uint8_t *private_key, uECC_Curve curve) | 
|   | 
| int  | uECC_shared_secret (const uint8_t *public_key, const uint8_t *private_key, uint8_t *secret, uECC_Curve curve) | 
|   | 
| void  | uECC_compress (const uint8_t *public_key, uint8_t *compressed, uECC_Curve curve) | 
|   | 
| void  | uECC_decompress (const uint8_t *compressed, uint8_t *public_key, uECC_Curve curve) | 
|   | 
| int  | uECC_valid_point (const uECC_word_t *point, uECC_Curve curve) | 
|   | 
| int  | uECC_valid_public_key (const uint8_t *public_key, uECC_Curve curve) | 
|   | 
| int  | uECC_compute_public_key (const uint8_t *private_key, uint8_t *public_key, uECC_Curve curve) | 
|   | 
| static void  | bits2int (uECC_word_t *native, const uint8_t *bits, unsigned bits_size, uECC_Curve curve) | 
|   | 
| static int  | uECC_sign_with_k (const uint8_t *private_key, const uint8_t *message_hash, unsigned hash_size, uECC_word_t *k, uint8_t *signature, uECC_Curve curve) | 
|   | 
| int  | uECC_sign (const uint8_t *private_key, const uint8_t *message_hash, unsigned hash_size, uint8_t *signature, uECC_Curve curve) | 
|   | 
| static void  | HMAC_init (const uECC_HashContext *hash_context, const uint8_t *K) | 
|   | 
| static void  | HMAC_update (const uECC_HashContext *hash_context, const uint8_t *message, unsigned message_size) | 
|   | 
| static void  | HMAC_finish (const uECC_HashContext *hash_context, const uint8_t *K, uint8_t *result) | 
|   | 
| static void  | update_V (const uECC_HashContext *hash_context, uint8_t *K, uint8_t *V) | 
|   | 
| int  | uECC_sign_deterministic (const uint8_t *private_key, const uint8_t *message_hash, unsigned hash_size, const uECC_HashContext *hash_context, uint8_t *signature, uECC_Curve curve) | 
|   | 
| static bitcount_t  | smax (bitcount_t a, bitcount_t b) | 
|   | 
| int  | uECC_verify (const uint8_t *public_key, const uint8_t *message_hash, unsigned hash_size, const uint8_t *signature, uECC_Curve curve) | 
|   |