1f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* LibTomCrypt, modular cryptographic library -- Tom St Denis 2f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * 3f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * LibTomCrypt is a library that provides various cryptographic 4f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * algorithms in a highly modular and flexible manner. 5f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * 6f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * The library is free for all purposes without any express 7f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * guarantee it works. 8f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * 9f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com 10f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project */ 11f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 12f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define DESC_DEF_ONLY 13f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#include "tomcrypt.h" 14f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 15f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef GMP_DESC 16f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 17f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#include <stdio.h> 18f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#include <gmp.h> 19f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 20f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic int init(void **a) 21f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 22f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(a != NULL); 23f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 24f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project *a = XCALLOC(1, sizeof(__mpz_struct)); 25f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (*a == NULL) { 26f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return CRYPT_MEM; 27f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 28f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project mpz_init(((__mpz_struct *)*a)); 29f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return CRYPT_OK; 30f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 31f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 32f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic void deinit(void *a) 33f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 34f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHKVD(a != NULL); 35f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project mpz_clear(a); 36f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project XFREE(a); 37f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 38f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 39f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic int neg(void *a, void *b) 40f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 41f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(a != NULL); 42f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(b != NULL); 43f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project mpz_neg(b, a); 44f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return CRYPT_OK; 45f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 46f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 47f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic int copy(void *a, void *b) 48f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 49f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(a != NULL); 50f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(b != NULL); 51f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project mpz_set(b, a); 52f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return CRYPT_OK; 53f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 54f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 55f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic int init_copy(void **a, void *b) 56f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 57f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (init(a) != CRYPT_OK) { 58f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return CRYPT_MEM; 59f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 60f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return copy(b, *a); 61f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 62f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 63f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* ---- trivial ---- */ 64f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic int set_int(void *a, unsigned long b) 65f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 66f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(a != NULL); 67f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project mpz_set_ui(((__mpz_struct *)a), b); 68f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return CRYPT_OK; 69f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 70f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 71f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic unsigned long get_int(void *a) 72f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 73f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(a != NULL); 74f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return mpz_get_ui(a); 75f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 76f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 77f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic unsigned long get_digit(void *a, int n) 78f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 79f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(a != NULL); 80f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return mpz_getlimbn(a, n); 81f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 82f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 83f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic int get_digit_count(void *a) 84f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 85f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(a != NULL); 86f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return mpz_size(a); 87f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 88f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 89f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic int compare(void *a, void *b) 90f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 91f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project int ret; 92f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(a != NULL); 93f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(b != NULL); 94f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ret = mpz_cmp(a, b); 95f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (ret < 0) { 96f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return LTC_MP_LT; 97f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } else if (ret > 0) { 98f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return LTC_MP_GT; 99f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } else { 100f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return LTC_MP_EQ; 101f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 102f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 103f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 104f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic int compare_d(void *a, unsigned long b) 105f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 106f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project int ret; 107f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(a != NULL); 108f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ret = mpz_cmp_ui(((__mpz_struct *)a), b); 109f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (ret < 0) { 110f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return LTC_MP_LT; 111f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } else if (ret > 0) { 112f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return LTC_MP_GT; 113f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } else { 114f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return LTC_MP_EQ; 115f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 116f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 117f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 118f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic int count_bits(void *a) 119f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 120f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(a != NULL); 121f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return mpz_sizeinbase(a, 2); 122f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 123f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 124f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic int count_lsb_bits(void *a) 125f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 126f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(a != NULL); 127f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return mpz_scan1(a, 0); 128f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 129f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 130f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 131f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic int twoexpt(void *a, int n) 132f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 133f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(a != NULL); 134f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project mpz_set_ui(a, 0); 135f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project mpz_setbit(a, n); 136f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return CRYPT_OK; 137f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 138f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 139f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* ---- conversions ---- */ 140f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 141f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* read ascii string */ 142f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic int read_radix(void *a, const char *b, int radix) 143f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 144f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(a != NULL); 145f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(b != NULL); 146f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project mpz_set_str(a, b, radix); 147f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return CRYPT_OK; 148f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 149f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 150f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* write one */ 151f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic int write_radix(void *a, char *b, int radix) 152f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 153f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(a != NULL); 154f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(b != NULL); 155f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project mpz_get_str(b, radix, a); 156f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return CRYPT_OK; 157f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 158f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 159f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* get size as unsigned char string */ 160f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic unsigned long unsigned_size(void *a) 161f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 162f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project unsigned long t; 163f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(a != NULL); 164f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project t = mpz_sizeinbase(a, 2); 165f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (mpz_cmp_ui(((__mpz_struct *)a), 0) == 0) return 0; 166f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return (t>>3) + ((t&7)?1:0); 167f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 168f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 169f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* store */ 170f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic int unsigned_write(void *a, unsigned char *b) 171f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 172f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(a != NULL); 173f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(b != NULL); 174f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project mpz_export(b, NULL, 1, 1, 1, 0, ((__mpz_struct*)a)); 175f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return CRYPT_OK; 176f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 177f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 178f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* read */ 179f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic int unsigned_read(void *a, unsigned char *b, unsigned long len) 180f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 181f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(a != NULL); 182f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(b != NULL); 183f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project mpz_import(a, len, 1, 1, 1, 0, b); 184f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return CRYPT_OK; 185f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 186f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 187f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* add */ 188f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic int add(void *a, void *b, void *c) 189f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 190f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(a != NULL); 191f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(b != NULL); 192f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(c != NULL); 193f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project mpz_add(c, a, b); 194f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return CRYPT_OK; 195f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 196f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 197f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic int addi(void *a, unsigned long b, void *c) 198f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 199f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(a != NULL); 200f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(c != NULL); 201f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project mpz_add_ui(c, a, b); 202f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return CRYPT_OK; 203f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 204f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 205f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* sub */ 206f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic int sub(void *a, void *b, void *c) 207f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 208f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(a != NULL); 209f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(b != NULL); 210f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(c != NULL); 211f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project mpz_sub(c, a, b); 212f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return CRYPT_OK; 213f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 214f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 215f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic int subi(void *a, unsigned long b, void *c) 216f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 217f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(a != NULL); 218f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(c != NULL); 219f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project mpz_sub_ui(c, a, b); 220f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return CRYPT_OK; 221f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 222f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 223f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* mul */ 224f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic int mul(void *a, void *b, void *c) 225f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 226f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(a != NULL); 227f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(b != NULL); 228f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(c != NULL); 229f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project mpz_mul(c, a, b); 230f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return CRYPT_OK; 231f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 232f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 233f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic int muli(void *a, unsigned long b, void *c) 234f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 235f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(a != NULL); 236f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(c != NULL); 237f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project mpz_mul_ui(c, a, b); 238f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return CRYPT_OK; 239f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 240f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 241f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* sqr */ 242f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic int sqr(void *a, void *b) 243f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 244f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(a != NULL); 245f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(b != NULL); 246f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project mpz_mul(b, a, a); 247f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return CRYPT_OK; 248f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 249f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 250f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* div */ 251f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic int divide(void *a, void *b, void *c, void *d) 252f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 253f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project mpz_t tmp; 254f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(a != NULL); 255f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(b != NULL); 256f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (c != NULL) { 257f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project mpz_init(tmp); 258f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project mpz_divexact(tmp, a, b); 259f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 260f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (d != NULL) { 261f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project mpz_mod(d, a, b); 262f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 263f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project if (c != NULL) { 264f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project mpz_set(c, tmp); 265f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project mpz_clear(tmp); 266f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project } 267f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return CRYPT_OK; 268f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 269f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 270f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic int div_2(void *a, void *b) 271f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 272f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(a != NULL); 273f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(b != NULL); 274f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project mpz_divexact_ui(b, a, 2); 275f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return CRYPT_OK; 276f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 277f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 278f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* modi */ 279f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic int modi(void *a, unsigned long b, unsigned long *c) 280f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 281f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(a != NULL); 282f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(c != NULL); 283f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 284f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project *c = mpz_fdiv_ui(a, b); 285f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return CRYPT_OK; 286f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 287f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 288f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* gcd */ 289f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic int gcd(void *a, void *b, void *c) 290f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 291f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(a != NULL); 292f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(b != NULL); 293f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(c != NULL); 294f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project mpz_gcd(c, a, b); 295f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return CRYPT_OK; 296f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 297f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 298f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* lcm */ 299f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic int lcm(void *a, void *b, void *c) 300f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 301f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(a != NULL); 302f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(b != NULL); 303f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(c != NULL); 304f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project mpz_lcm(c, a, b); 305f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return CRYPT_OK; 306f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 307f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 308f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic int mulmod(void *a, void *b, void *c, void *d) 309f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 310f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(a != NULL); 311f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(b != NULL); 312f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(c != NULL); 313f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(d != NULL); 314f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project mpz_mul(d, a, b); 315f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project mpz_mod(d, d, c); 316f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return CRYPT_OK; 317f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 318f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 319f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic int sqrmod(void *a, void *b, void *c) 320f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 321f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(a != NULL); 322f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(b != NULL); 323f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(c != NULL); 324f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project mpz_mul(c, a, a); 325f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project mpz_mod(c, c, b); 326f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return CRYPT_OK; 327f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 328f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 329f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* invmod */ 330f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic int invmod(void *a, void *b, void *c) 331f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 332f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(a != NULL); 333f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(b != NULL); 334f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(c != NULL); 335f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project mpz_invert(c, a, b); 336f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return CRYPT_OK; 337f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 338f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 339f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* setup */ 340f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic int montgomery_setup(void *a, void **b) 341f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 342f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(a != NULL); 343f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(b != NULL); 344f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project *b = (void *)1; 345f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return CRYPT_OK; 346f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 347f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 348f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* get normalization value */ 349f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic int montgomery_normalization(void *a, void *b) 350f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 351f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(a != NULL); 352f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(b != NULL); 353f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project mpz_set_ui(a, 1); 354f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return CRYPT_OK; 355f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 356f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 357f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* reduce */ 358f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic int montgomery_reduce(void *a, void *b, void *c) 359f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 360f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(a != NULL); 361f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(b != NULL); 362f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(c != NULL); 363f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project mpz_mod(a, a, b); 364f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return CRYPT_OK; 365f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 366f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 367f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* clean up */ 368f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic void montgomery_deinit(void *a) 369f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 370f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 371f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 372f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic int exptmod(void *a, void *b, void *c, void *d) 373f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 374f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(a != NULL); 375f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(b != NULL); 376f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(c != NULL); 377f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(d != NULL); 378f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project mpz_powm(d, a, b, c); 379f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return CRYPT_OK; 380f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 381f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 382f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic int isprime(void *a, int *b) 383f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{ 384f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(a != NULL); 385f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project LTC_ARGCHK(b != NULL); 386f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project *b = mpz_probab_prime_p(a, 8) > 0 ? LTC_MP_YES : LTC_MP_NO; 387f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project return CRYPT_OK; 388f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project} 389f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 390f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectconst ltc_math_descriptor gmp_desc = { 391f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project "GNU MP", 392f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project sizeof(mp_limb_t) * CHAR_BIT - GMP_NAIL_BITS, 393f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 394f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project &init, 395f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project &init_copy, 396f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project &deinit, 397f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 398f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project &neg, 399f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ©, 400f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 401f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project &set_int, 402f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project &get_int, 403f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project &get_digit, 404f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project &get_digit_count, 405f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project &compare, 406f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project &compare_d, 407f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project &count_bits, 408f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project &count_lsb_bits, 409f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project &twoexpt, 410f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 411f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project &read_radix, 412f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project &write_radix, 413f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project &unsigned_size, 414f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project &unsigned_write, 415f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project &unsigned_read, 416f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 417f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project &add, 418f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project &addi, 419f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project &sub, 420f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project &subi, 421f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project &mul, 422f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project &muli, 423f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project &sqr, 424f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project ÷, 425f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project &div_2, 426f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project &modi, 427f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project &gcd, 428f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project &lcm, 429f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 430f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project &mulmod, 431f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project &sqrmod, 432f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project &invmod, 433f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 434f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project &montgomery_setup, 435f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project &montgomery_normalization, 436f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project &montgomery_reduce, 437f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project &montgomery_deinit, 438f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 439f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project &exptmod, 440f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project &isprime, 441f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 442f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef MECC 443f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef MECC_FP 444f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project <c_ecc_fp_mulmod, 445f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#else 446f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project <c_ecc_mulmod, 447f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif /* MECC_FP */ 448f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project <c_ecc_projective_add_point, 449f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project <c_ecc_projective_dbl_point, 450f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project <c_ecc_map, 451f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef LTC_ECC_SHAMIR 452f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef MECC_FP 453f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project <c_ecc_fp_mul2add, 454f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#else 455f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project <c_ecc_mul2add, 456f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif /* MECC_FP */ 457f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#else 458f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project NULL, 459f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif /* LTC_ECC_SHAMIR */ 460f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#else 461f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project NULL, NULL, NULL, NULL, NULL 462f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif /* MECC */ 463f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 464f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef MRSA 465f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project &rsa_make_key, 466f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project &rsa_exptmod, 467f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#else 468f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project NULL, NULL 469f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 470f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 471f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project}; 472f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 473f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 474f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif 475f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project 476f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* $Source: /cvs/libtom/libtomcrypt/src/math/gmp_desc.c,v $ */ 477f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* $Revision: 1.14 $ */ 478f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* $Date: 2006/12/03 00:39:56 $ */ 479