From 90a48a5bec4ab06d03773824035494f565fb0548 Mon Sep 17 00:00:00 2001 From: Tom St Denis Date: Sat, 29 Mar 2003 18:19:07 +0000 Subject: [PATCH] added libtomcrypt-0.83 --- aes.c | 3 +- changes | 8 + crypt.pdf | Bin 354528 -> 354942 bytes crypt.tex | 2 +- demos/test.c | 7 +- ecc.c | 246 +++++++------- hmac.c | 10 +- keyring.c | 22 +- makefile | 4 +- makefile.msvc | 2 +- mpi.c | 814 +++++++++++++++++++++++++++++++++++++++++------ mycrypt.h | 5 +- mycrypt_kr.h | 4 +- mycrypt_macros.h | 12 +- rsa_sys.c | 18 +- strings.c | 1 + tommath.h | 74 ++++- yarrow.c | 4 + 18 files changed, 964 insertions(+), 272 deletions(-) diff --git a/aes.c b/aes.c index ad85b37..c1bf568 100644 --- a/aes.c +++ b/aes.c @@ -102,8 +102,9 @@ int rijndael_setup(const unsigned char *key, int keylen, int numrounds, symmetri _ARGCHK(key != NULL); _ARGCHK(skey != NULL); - if (numrounds == 0) + if (numrounds == 0) { numrounds = 10 + (2 * ((keylen/8)-2)); + } if (keylen != 16 && keylen != 24 && keylen != 32) { return CRYPT_INVALID_KEYSIZE; diff --git a/changes b/changes index a000c16..4c7cdef 100644 --- a/changes +++ b/changes @@ -1,3 +1,11 @@ +Mar 29th, 2003 +v0.83 -- Optimized the ecc_mulmod, it's faster and takes less heap/stack space + -- Fixed a free memory error in ecc_mulmod and del_point which would try to free NULL + -- Fixed two serious bugs in rsa_decrypt_key and rsa_verify_hash that would allow a trivialy + buffer overflow. + -- Fixed a bug in the hmac testing code if you don't register all the hashes it won't return + errors now. + Mar 15th, 2003 v0.82 -- Manual updated -- Added MSVC makefile [back, actually its written from scratch to work with NMAKE] diff --git a/crypt.pdf b/crypt.pdf index 905ba3435e93b1680e9db9ed48c02c75dcc53317..a132eb01a44d49e5bfd59560e0ce55025bef67ce 100644 GIT binary patch delta 87910 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 delta 87248 zcmXV%V|boVwDprGW@9$C+1O3e*tTu^j-AGA%r>@d+qP}z{h#-oZ@-yqf1GP(t+n@j z&SP%RV8*Ecl(S~1HG50h%M9NlbRh%75q9Hjf8zghmE!O|ZZaRVLqYwnfK0g7mHx$N zgpnYCLCxTSAN+u&z+J;%QMf#}(1xjps%z~q+y>~Vje1P?M8eyGnU3d7>oY?`9a}5n zl53XWblR((HCaINDAcnHLPEn>RHWsZJykT*(J`n3Gxro&H7bqG`$0$-L$xBS#*W#c zKCjDy6GsgAsk1M;#qXQ#*jhgwe&3429xI>AaE>FIWOD2s@KG%L*O>MAnU><`aI+t= z_Lox!aOl-ws~STkL`g1aIApK>l)Yaq#F0H=p^L9_8c2;$*KWTw`pR^nbK(rZ7hhS_ ze7S4}%yXXaiel5Z5QmJLu4=}7aeXL$`M^0$ z#kPWFZ~5}|=mN9oT>*mVKw)$s@FqGCsK5|tp>Rq!MBz5Y>7yQP7RMeNXH}ahH%-CC z-DQ!L&=&jCm^8YGB`$AhzI<}n$P3>>hp{GJguJ1{nI%?ImoxWym)SL0x1i~Q+_IE7PAh~5kcv1*LJfdB+?cF@VIZ)sq+6Km2MXt+h@3gp3J!ru`{LqHA&jVQ1o&CDY8Iu8A!y$aoz%IRd0&+Cza)e`F% z)s8d8aQ=Vxb7AEX9deoTi?AcFpmzYhPwd7{4D)agKBl-X;@G4662{>$&t2d_(Jxp6 z*3h47G=Oq8el|WNC`#h*vBVL#Kb%ZzE2IEo5X#Q(L@(KUbe{pA18ijIa{o{kwfEQz#8xU5=3v_) zKdllw1()-IrJkw#nw>Ahg&fuOEq)_{Oil{)S<$nav9Baya7P-I*x~S;WE)v zHqX)2&OcjhEwA(NZpoED&eZ2r%j0dU;2EjP;-v%@H@gm9khfnAx~q55P1PWjy$nrf z8#2=xD&MpRe`M&ydWr)v>8ff_rxUmTGzuSW1~hJAjr zCb_%3coA(>(Jd`;Cn=(k?oOn{h!KOJ7qQpYB;#I{xa?q@9`n%38jMv82`S`Pg)G1>sQ&OgB3H)h&t!>E0YFh~}K2x!M6tlvczbFIqbu&xeKs4b#G^jT}*wdXK(#WOYv?ya4|)==-bM3+-lYx zSI18!ℜ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�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 diff --git a/crypt.tex b/crypt.tex index e94a7c3..e3b23ef 100644 --- a/crypt.tex +++ b/crypt.tex @@ -48,7 +48,7 @@ \def\gap{\vspace{0.5ex}} \makeindex \begin{document} -\title{A Tiny Crypto Library, \\ LibTomCrypt \\ Version 0.82} +\title{A Tiny Crypto Library, \\ LibTomCrypt \\ Version 0.83} \author{Tom St Denis \\ Algonquin College \\ \\ diff --git a/demos/test.c b/demos/test.c index 33c143d..d60051f 100644 --- a/demos/test.c +++ b/demos/test.c @@ -1139,7 +1139,7 @@ ecc_tests (void) } /* test encrypt_key */ - ecc_make_key (&prng, find_prng ("yarrow"), 28, &usera); + ecc_make_key (&prng, find_prng ("yarrow"), 20, &usera); for (x = 0; x < 32; x++) buf[0][x] = x; y = sizeof (buf[1]); @@ -1176,6 +1176,7 @@ ecc_tests (void) printf ("Error: %s\n", error_to_string (errnum)); exit (-1); } + printf("Signature size: %lu\n", x); if (ecc_verify_hash (buf[1], x, buf[0], 16, &stat, &usera)) { printf ("Error: %s\n", error_to_string (errnum)); exit (-1); @@ -1377,12 +1378,12 @@ register_all_algs (void) void kr_display (pk_key * kr) { - static const char *system[] = { "NON-KEY", "RSA", "DH", "ECC" }; + static const char *sys[] = { "NON-KEY", "RSA", "DH", "ECC" }; static const char *type[] = { "PRIVATE", "PUBLIC", "PRIVATE_OPTIMIZED" }; while (kr->system != NON_KEY) { printf ("CRC [%08lx], System [%10s], Type [%20s], %s, %s, %s\n", kr->ID, - system[kr->system], type[kr->key_type], kr->name, kr->email, + sys[kr->system], type[kr->key_type], kr->name, kr->email, kr->description); kr = kr->next; } diff --git a/ecc.c b/ecc.c index dfb127e..bdd9488 100644 --- a/ecc.c +++ b/ecc.c @@ -235,8 +235,13 @@ static ecc_point *new_point(void) static void del_point(ecc_point *p) { - mp_clear_multi(&p->x, &p->y, NULL); - XFREE(p); + /* prevents free'ing null arguments */ + if (p == NULL) { + return; + } else { + mp_clear_multi(&p->x, &p->y, NULL); + XFREE(p); + } } /* double a point R = 2P, R can be P*/ @@ -344,156 +349,161 @@ done: return res; } +/* size of sliding window, don't change this! */ +#define WINSIZE 4 + /* perform R = kG where k == integer and G == ecc_point */ static int ecc_mulmod(mp_int *k, ecc_point *G, ecc_point *R, mp_int *modulus) { - ecc_point *tG, *M[30]; - int i, j, z, res, Q; - mp_digit d; - unsigned char bits[150], m, first; + ecc_point *tG, *M[8]; + int i, j, res; mp_int mu; - - - if ((USED(k) * MP_DIGIT_BIT) > 256) { - Q = 5; - } else { - Q = 4; - } - - if (mp_init(&mu) != MP_OKAY) { - return CRYPT_MEM; - } + mp_digit buf; + int first, bitbuf, bitcpy, bitcnt, mode, digidx; /* init barrett reduction */ - mp_set(&mu, 1); - mp_lshd(&mu, 2 * USED(modulus)); - if (mp_div(&mu, modulus, &mu, NULL) != MP_OKAY) { - mp_clear(&mu); - return CRYPT_MEM; + if (mp_init(&mu) != MP_OKAY) { + return CRYPT_MEM; + } + if (mp_reduce_setup(&mu, modulus) != MP_OKAY) { + mp_clear(&mu); + return CRYPT_MEM; } + /* alloc ram for window temps */ + for (i = 0; i < 8; i++) { + M[i] = new_point(); + if (M[i] == NULL) { + for (j = 0; j < i; j++) { + del_point(M[j]); + } + mp_clear(&mu); + return CRYPT_MEM; + } + } - /* init M tab (alloc here, calculate below) - - This table holds the first 2^Q multiples of the input base point G, that is - - M[x] = x * G - - Where G is the point and x is a scalar. The implementation is optimized - since M[0] == 0 and M[1] == G so there is no need to waste space for those. In - effect M'[x] == M[x+2] where M'[] is the table we make. If M[0] or M[1] are needed - we handle them with if statements. - - */ - for (i = 0; i < ((1<>= 1; - } - } - - /* residue of multiplicand [if any] */ - if (m) { - bits[i++] = first; - } - /* make a copy of G incase R==G */ tG = new_point(); - if (tG == NULL) { goto error; } + if (tG == NULL) { goto error; } - /* skip leading digits which are zero */ - --i; while (i != 0 && bits[i] == (unsigned char)0) { --i; } - - /* if the multiplicand has no non-zero 4-bit words its invalid. */ - if (i == 0) { - res = CRYPT_INVALID_ARG; - goto done; - } - - /* now calc the M tab, note that there are only 2^Q - 2 spots, the normal M[0] is a no-op, and M[1] is the input - point (saves ram) - */ - - /* M[0] now is 2*G */ + /* calc the M tab, which holds kG for k==8..15 */ + /* M[0] == 8G */ if (dbl_point(G, M[0], modulus, &mu) != CRYPT_OK) { goto error; } - for (j = 1; j < ((1<x, &tG->x) != MP_OKAY) { goto error; } - if (mp_copy(&G->y, &tG->y) != MP_OKAY) { goto error; } + if (mp_copy(&G->x, &tG->x) != MP_OKAY) { goto error; } + if (mp_copy(&G->y, &tG->y) != MP_OKAY) { goto error; } - /* set result M[bits[i]] */ - if (bits[i] == (unsigned char)1) { - if (mp_copy(&G->x, &R->x) != MP_OKAY) { goto error; } - if (mp_copy(&G->y, &R->y) != MP_OKAY) { goto error; } - } else if (bits[i] >= (unsigned char)2) { - if (mp_copy(&M[(int)bits[i]-2]->x, &R->x) != MP_OKAY) { goto error; } - if (mp_copy(&M[(int)bits[i]-2]->y, &R->y) != MP_OKAY) { goto error; } - } + /* setup sliding window */ + mode = 0; + bitcnt = 1; + buf = 0; + digidx = k->used - 1; + bitcpy = bitbuf = 0; + first = 1; - while (--i >= 0) { - /* double */ - for (j = 0; j < Q; j++) { - if (dbl_point(R, R, modulus, &mu) != CRYPT_OK) { goto error; } + /* perform ops */ + for (;;) { + /* grab next digit as required */ + if (--bitcnt == 0) { + if (digidx == -1) { + break; } - - /* now based on the value of bits[i] we do ops */ - if (bits[i] == (unsigned char)0) { - /* nop */ - } else if (bits[i] == (unsigned char)1) { - /* add base point */ - if (add_point(R, tG, R, modulus, &mu) != CRYPT_OK) { goto error; } + buf = k->dp[digidx--]; + bitcnt = (int) DIGIT_BIT; + } + + /* grab the next msb from the multiplicand */ + i = (buf >> (DIGIT_BIT - 1)) & 1; + buf <<= 1; + + /* skip leading zero bits */ + if (mode == 0 && i == 0) + continue; + + /* if the bit is zero and mode == 1 then we double */ + if (mode == 1 && i == 0) { + if (dbl_point(R, R, modulus, &mu) != CRYPT_OK) { goto error; } + continue; + } + + /* else we add it to the window */ + bitbuf |= (i << (WINSIZE - ++bitcpy)); + mode = 2; + + if (bitcpy == WINSIZE) { + /* if this is the first window we do a simple copy */ + if (first == 1) { + /* R = kG [k = first window] */ + if (mp_copy(&M[bitbuf-8]->x, &R->x) != MP_OKAY) { goto error; } + if (mp_copy(&M[bitbuf-8]->y, &R->y) != MP_OKAY) { goto error; } + first = 0; } else { - /* other case */ - if (add_point(R, M[(int)bits[i] - 2], R, modulus, &mu) != CRYPT_OK) { goto error; } + /* normal window */ + /* ok window is filled so double as required and add */ + /* double first */ + for (j = 0; j < WINSIZE; j++) { + if (dbl_point(R, R, modulus, &mu) != CRYPT_OK) { goto error; } + } + + /* then add, bitbuf will be 1..15 [1..2^WINSIZE] guaranteed */ + if (bitbuf == 1) { + if (add_point(R, tG, R, modulus, &mu) != CRYPT_OK) { goto error; } + } else { + if (add_point(R, M[bitbuf-8], R, modulus, &mu) != CRYPT_OK) { goto error; } + } } - } + /* empty window and reset */ + bitcpy = bitbuf = 0; + mode = 1; + } + } + /* if bits remain then double/add */ + if (mode == 2 && bitcpy > 0) { + /* double then add */ + for (j = 0; j < bitcpy; j++) { + /* only double if we have had at least one add first */ + if (first == 0) { + if (dbl_point(R, R, modulus, &mu) != CRYPT_OK) { goto error; } + } + + bitbuf <<= 1; + if ((bitbuf & (1 << WINSIZE)) != 0) { + if (first == 1){ + /* first add, so copy */ + if (mp_copy(&tG->x, &R->x) != MP_OKAY) { goto error; } + if (mp_copy(&tG->y, &R->y) != MP_OKAY) { goto error; } + first = 0; + } else { + /* then add */ + if (add_point(R, tG, R, modulus, &mu) != CRYPT_OK) { goto error; } + } + } + } + } res = CRYPT_OK; goto done; error: res = CRYPT_MEM; done: del_point(tG); - for (i = 0; i < ((1<key_type = key_type; - pk->system = system; + pk->system = sys; strncpy((char *)pk->name, (char *)name, sizeof(pk->name)-1); strncpy((char *)pk->email, (char *)email, sizeof(pk->email)-1); strncpy((char *)pk->description, (char *)description, sizeof(pk->description)-1); @@ -187,7 +187,7 @@ int kr_add(pk_key *pk, int key_type, int system, const unsigned char *name, zeromem(&(pk->key), sizeof(pk->key)); /* copy the key */ - switch (system) { + switch (sys) { case RSA_KEY: memcpy(&(pk->key.rsa), &(key->rsa), sizeof(key->rsa)); break; @@ -366,7 +366,7 @@ int kr_export(pk_key *pk, unsigned long ID, int key_type, unsigned char *out, un int kr_import(pk_key *pk, const unsigned char *in, unsigned long inlen) { _pk_key key; - int system, key_type, err; + int sys, key_type, err; unsigned long ID; _ARGCHK(pk != NULL); @@ -380,7 +380,7 @@ int kr_import(pk_key *pk, const unsigned char *in, unsigned long inlen) return CRYPT_INVALID_PACKET; } key_type = in[4]; /* get type */ - system = in[5]; /* get system */ + sys = in[5]; /* get system */ LOAD32L(ID,in+6); /* the ID */ if (ID != kr_crc(in+10, in+10+MAXLEN, in+10+MAXLEN+MAXLEN)) { @@ -392,7 +392,7 @@ int kr_import(pk_key *pk, const unsigned char *in, unsigned long inlen) /* size of remaining packet */ inlen -= 10 + 3*MAXLEN; - switch (system) { + switch (sys) { case RSA_KEY: if ((err = rsa_import(in+10+3*MAXLEN, inlen, &(key.rsa))) != CRYPT_OK) { return err; @@ -409,7 +409,7 @@ int kr_import(pk_key *pk, const unsigned char *in, unsigned long inlen) } break; } - return kr_add(pk, key_type, system, + return kr_add(pk, key_type, sys, in+10, /* the name */ in+10+MAXLEN, /* email address */ in+10+MAXLEN+MAXLEN, /* description */ @@ -509,7 +509,7 @@ done: } int kr_make_key(pk_key *pk, prng_state *prng, int wprng, - int system, int keysize, const unsigned char *name, + int sys, int keysize, const unsigned char *name, const unsigned char *email, const unsigned char *description) { _pk_key key; @@ -527,7 +527,7 @@ int kr_make_key(pk_key *pk, prng_state *prng, int wprng, /* make the key first */ zeromem(&key, sizeof(key)); - switch (system) { + switch (sys) { case RSA_KEY: if ((err = rsa_make_key(prng, wprng, keysize, 65537, &(key.rsa))) != CRYPT_OK) { return err; @@ -551,7 +551,7 @@ int kr_make_key(pk_key *pk, prng_state *prng, int wprng, } /* now add the key */ - if ((err = kr_add(pk, key_type, system, name, email, description, &key)) != CRYPT_OK) { + if ((err = kr_add(pk, key_type, sys, name, email, description, &key)) != CRYPT_OK) { return err; } diff --git a/makefile b/makefile index 6b8ad8a..faf011b 100644 --- a/makefile +++ b/makefile @@ -9,7 +9,7 @@ # a build. This is easy to remedy though, for those that have problems. # The version -VERSION=0.82 +VERSION=0.83 #ch1-01-1 # Compiler and Linker Names @@ -23,7 +23,7 @@ ARFLAGS=r #ch1-01-3 # Compilation flags. Note the += does not write over the user's CFLAGS! -CFLAGS += -c -I./ -Wall -Wsign-compare -W -Wno-unused -Werror +CFLAGS += -c -I./ -Wall -Wsign-compare -W -Wno-unused -Wshadow -Werror # optimize for SPEED #CFLAGS += -O3 -funroll-loops diff --git a/makefile.msvc b/makefile.msvc index f476a31..bbf9059 100644 --- a/makefile.msvc +++ b/makefile.msvc @@ -2,7 +2,7 @@ # #Tom St Denis -CFLAGS = /I. /Ogityb2 /Gs /DWIN32 /W3 +CFLAGS = /I. /Ogiyb2t /Gs /DWIN32 /W3 default: library diff --git a/mpi.c b/mpi.c index ca2b633..10288b1 100644 --- a/mpi.c +++ b/mpi.c @@ -17,13 +17,11 @@ */ #include -/* configured for a Duron Morgan core with etc/tune.c */ +/* configured for a AMD Duron Morgan core with etc/tune.c */ int KARATSUBA_MUL_CUTOFF = 73, /* Min. number of digits before Karatsuba multiplication is used. */ KARATSUBA_SQR_CUTOFF = 121, /* Min. number of digits before Karatsuba squaring is used. */ MONTGOMERY_EXPT_CUTOFF = 128; /* max. number of digits that montgomery reductions will help for */ -/* note the MONT cuttoff should be tuned better. Seems it slowed down a 1024-bit exptmod when set to 74 */ - /* End: bncore.c */ /* Start: bn_fast_mp_invmod.c */ @@ -55,6 +53,7 @@ fast_mp_invmod (mp_int * a, mp_int * b, mp_int * c) mp_int x, y, u, v, B, D; int res, neg; + /* init all our temps */ if ((res = mp_init (&x)) != MP_OKAY) { goto __ERR; } @@ -87,6 +86,7 @@ fast_mp_invmod (mp_int * a, mp_int * b, mp_int * c) goto __D; } + /* we need |y| */ if ((res = mp_abs (&y, &y)) != MP_OKAY) { goto __D; } @@ -109,7 +109,6 @@ fast_mp_invmod (mp_int * a, mp_int * b, mp_int * c) } mp_set (&D, 1); - top: /* 4. while u is even do */ while (mp_iseven (&u) == 1) { @@ -123,13 +122,12 @@ top: goto __D; } } - /* A = A/2, B = B/2 */ + /* B = B/2 */ if ((res = mp_div_2 (&B, &B)) != MP_OKAY) { goto __D; } } - /* 5. while v is even do */ while (mp_iseven (&v) == 1) { /* 5.1 v = v/2 */ @@ -138,12 +136,12 @@ top: } /* 5.2 if C,D are even then */ if (mp_iseven (&D) == 0) { - /* C = (C+y)/2, D = (D-x)/2 */ + /* D = (D-x)/2 */ if ((res = mp_sub (&D, &x, &D)) != MP_OKAY) { goto __D; } } - /* C = C/2, D = D/2 */ + /* D = D/2 */ if ((res = mp_div_2 (&D, &D)) != MP_OKAY) { goto __D; } @@ -151,7 +149,7 @@ top: /* 6. if u >= v then */ if (mp_cmp (&u, &v) != MP_LT) { - /* u = u - v, A = A - C, B = B - D */ + /* u = u - v, B = B - D */ if ((res = mp_sub (&u, &v, &u)) != MP_OKAY) { goto __D; } @@ -160,7 +158,7 @@ top: goto __D; } } else { - /* v - v - u, C = C - A, D = D - B */ + /* v - v - u, D = D - B */ if ((res = mp_sub (&v, &u, &v)) != MP_OKAY) { goto __D; } @@ -254,12 +252,12 @@ fast_mp_montgomery_reduce (mp_int * a, mp_int * m, mp_digit mp) _W = W; tmpa = a->dp; - /* copy the digits of a */ + /* copy the digits of a into W[0..a->used-1] */ for (ix = 0; ix < a->used; ix++) { *_W++ = *tmpa++; } - /* zero the high words */ + /* zero the high words of W[a->used..m->used*2] */ for (; ix < m->used * 2 + 1; ix++) { *_W++ = 0; } @@ -904,7 +902,7 @@ mp_add_d (mp_int * a, mp_digit b, mp_int * c) mp_int t; int res; - if ((res = mp_init (&t)) != MP_OKAY) { + if ((res = mp_init_size(&t, 1)) != MP_OKAY) { return res; } mp_set (&t, b); @@ -998,8 +996,9 @@ mp_and (mp_int * a, mp_int * b, mp_int * c) void mp_clamp (mp_int * a) { - while (a->used > 0 && a->dp[a->used - 1] == 0) + while (a->used > 0 && a->dp[a->used - 1] == 0) { --(a->used); + } if (a->used == 0) { a->sign = MP_ZPOS; } @@ -1034,7 +1033,7 @@ mp_clear (mp_int * a) memset (a->dp, 0, sizeof (mp_digit) * a->used); /* free ram */ - XFREE(a->dp); + XFREE (a->dp); /* reset members to make debugging easier */ a->dp = NULL; @@ -1200,6 +1199,7 @@ mp_copy (mp_int * a, mp_int * b) { register mp_digit *tmpa, *tmpb; + /* point aliases */ tmpa = a->dp; tmpb = b->dp; @@ -1334,17 +1334,19 @@ mp_div (mp_int * a, mp_int * b, mp_int * c, mp_int * d) x.sign = y.sign = MP_ZPOS; /* normalize both x and y, ensure that y >= b/2, [b == 2^DIGIT_BIT] */ - norm = 0; - while ((y.dp[y.used - 1] & (((mp_digit) 1) << (DIGIT_BIT - 1))) == ((mp_digit) 0)) { - ++norm; - if ((res = mp_mul_2 (&x, &x)) != MP_OKAY) { - goto __Y; - } - if ((res = mp_mul_2 (&y, &y)) != MP_OKAY) { - goto __Y; - } + norm = mp_count_bits(&y) % DIGIT_BIT; + if (norm < (DIGIT_BIT-1)) { + norm = (DIGIT_BIT-1) - norm; + if ((res = mp_mul_2d (&x, norm, &x)) != MP_OKAY) { + goto __Y; + } + if ((res = mp_mul_2d (&y, norm, &y)) != MP_OKAY) { + goto __Y; + } + } else { + norm = 0; } - + /* note hac does 0 based, so if used==5 then its 0,1,2,3,4, e.g. use 4 */ n = x.used - 1; t = y.used - 1; @@ -1366,7 +1368,7 @@ mp_div (mp_int * a, mp_int * b, mp_int * c, mp_int * d) /* step 3. for i from n down to (t + 1) */ for (i = n; i >= (t + 1); i--) { - if (i > x.alloc) + if (i > x.used) continue; /* step 3.1 if xi == yt then set q{i-t-1} to b-1, otherwise set q{i-t-1} to (xi*b + x{i-1})/yt */ @@ -1431,10 +1433,11 @@ mp_div (mp_int * a, mp_int * b, mp_int * c, mp_int * d) q.dp[i - t - 1] = (q.dp[i - t - 1] - 1UL) & MP_MASK; } } - + /* now q is the quotient and x is the remainder [which we have to normalize] */ /* get sign before writing to c */ x.sign = a->sign; + if (c != NULL) { mp_clamp (&q); mp_exch (&q, c); @@ -1443,7 +1446,6 @@ mp_div (mp_int * a, mp_int * b, mp_int * c, mp_int * d) if (d != NULL) { mp_div_2d (&x, norm, &x, NULL); - mp_clamp (&x); mp_exch (&x, d); } @@ -1494,15 +1496,26 @@ mp_div_2 (mp_int * a, mp_int * b) { register mp_digit r, rr, *tmpa, *tmpb; + /* source alias */ tmpa = a->dp + b->used - 1; + + /* dest alias */ tmpb = b->dp + b->used - 1; + + /* carry */ r = 0; for (x = b->used - 1; x >= 0; x--) { + /* get the carry for the next iteration */ rr = *tmpa & 1; + + /* shift the current digit, add in carry and store */ *tmpb-- = (*tmpa-- >> 1) | (r << (DIGIT_BIT - 1)); + + /* forward carry to next iteration */ r = rr; } + /* zero excess digits */ tmpb = b->dp + b->used; for (x = b->used; x < oldused; x++) { *tmpb++ = 0; @@ -1570,19 +1583,29 @@ mp_div_2d (mp_int * a, int b, mp_int * c, mp_int * d) /* shift by as many digits in the bit count */ if (b >= DIGIT_BIT) { - mp_rshd (c, b / DIGIT_BIT); - } + mp_rshd (c, b / DIGIT_BIT); + } /* shift any bit count < DIGIT_BIT */ D = (mp_digit) (b % DIGIT_BIT); if (D != 0) { + register mp_digit *tmpc, mask; + + /* mask */ + mask = (1U << D) - 1U; + + /* alias */ + tmpc = c->dp + (c->used - 1); + + /* carry */ r = 0; for (x = c->used - 1; x >= 0; x--) { /* get the lower bits of this word in a temp */ - rr = c->dp[x] & ((mp_digit) ((1U << D) - 1U)); + rr = *tmpc & mask; /* shift the current word and mix in the carry bits from the previous word */ - c->dp[x] = (c->dp[x] >> D) | (r << (DIGIT_BIT - D)); + *tmpc = (*tmpc >> D) | (r << (DIGIT_BIT - D)); + --tmpc; /* set the carry to the carry bits of the current word found above */ r = rr; @@ -1623,7 +1646,6 @@ mp_div_d (mp_int * a, mp_digit b, mp_int * c, mp_digit * d) mp_int t, t2; int res; - if ((res = mp_init (&t)) != MP_OKAY) { return res; } @@ -1636,6 +1658,7 @@ mp_div_d (mp_int * a, mp_digit b, mp_int * c, mp_digit * d) mp_set (&t, b); res = mp_div (a, &t, c, &t2); + /* set remainder if not null */ if (d != NULL) { *d = t2.dp[0]; } @@ -1647,6 +1670,160 @@ mp_div_d (mp_int * a, mp_digit b, mp_int * c, mp_digit * d) /* End: bn_mp_div_d.c */ +/* Start: bn_mp_dr_reduce.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is library that provides for multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library is designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* reduce "a" in place modulo "b" using the Diminished Radix algorithm. + * + * Based on algorithm from the paper + * + * "Generating Efficient Primes for Discrete Log Cryptosystems" + * Chae Hoon Lim, Pil Loong Lee, + * POSTECH Information Research Laboratories + * + * The modulus must be of a special format [see manual] + */ +int +mp_dr_reduce (mp_int * a, mp_int * b, mp_digit mp) +{ + int err, i, j, k; + mp_word r; + mp_digit mu, *tmpj, *tmpi; + + /* k = digits in modulus */ + k = b->used; + + /* ensure that "a" has at least 2k digits */ + if (a->alloc < k + k) { + if ((err = mp_grow (a, k + k)) != MP_OKAY) { + return err; + } + } + + /* alias for a->dp[i] */ + tmpi = a->dp + k + k - 1; + + /* for (i = 2k - 1; i >= k; i = i - 1) + * + * This is the main loop of the reduction. Note that at the end + * the words above position k are not zeroed as expected. The end + * result is that the digits from 0 to k-1 are the residue. So + * we have to clear those afterwards. + */ + for (i = k + k - 1; i >= k; i = i - 1) { + /* x[i - 1 : i - k] += x[i]*mp */ + + /* x[i] * mp */ + r = ((mp_word) *tmpi--) * ((mp_word) mp); + + /* now add r to x[i-1:i-k] + * + * First add it to the first digit x[i-k] then form the carry + * then enter the main loop + */ + j = i - k; + + /* alias for a->dp[j] */ + tmpj = a->dp + j; + + /* add digit */ + *tmpj += (mp_digit)(r & MP_MASK); + + /* this is the carry */ + mu = (r >> ((mp_word) DIGIT_BIT)) + (*tmpj >> DIGIT_BIT); + + /* clear carry from a->dp[j] */ + *tmpj++ &= MP_MASK; + + /* now add rest of the digits + * + * Note this is basically a simple single digit addition to + * a larger multiple digit number. This is optimized somewhat + * because the propagation of carries is not likely to move + * more than a few digits. + * + */ + for (++j; mu != 0 && j <= (i - 1); ++j) { + *tmpj += mu; + mu = *tmpj >> DIGIT_BIT; + *tmpj++ &= MP_MASK; + } + + /* if final carry */ + if (mu != 0) { + /* add mp to this to correct */ + j = i - k; + tmpj = a->dp + j; + + *tmpj += mp; + mu = *tmpj >> DIGIT_BIT; + *tmpj++ &= MP_MASK; + + /* now handle carries */ + for (++j; mu != 0 && j <= (i - 1); j++) { + *tmpj += mu; + mu = *tmpj >> DIGIT_BIT; + *tmpj++ &= MP_MASK; + } + } + } + + /* zero words above k */ + tmpi = a->dp + k; + for (i = k; i < a->used; i++) { + *tmpi++ = 0; + } + + /* clamp, sub and return */ + mp_clamp (a); + + if (mp_cmp_mag (a, b) != MP_LT) { + return s_mp_sub (a, b, a); + } + return MP_OKAY; +} + +/* determines if a number is a valid DR modulus */ +int mp_dr_is_modulus(mp_int *a) +{ + int ix; + + /* must be at least two digits */ + if (a->used < 2) { + return 0; + } + + for (ix = 1; ix < a->used; ix++) { + if (a->dp[ix] != MP_MASK) { + return 0; + } + } + return 1; +} + +/* determines the setup value */ +void mp_dr_setup(mp_int *a, mp_digit *d) +{ + *d = (1 << DIGIT_BIT) - a->dp[0]; +} + + +/* End: bn_mp_dr_reduce.c */ + /* Start: bn_mp_exch.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * @@ -1664,6 +1841,9 @@ mp_div_d (mp_int * a, mp_digit b, mp_int * c, mp_digit * d) */ #include +/* swap the elements of two integers, for cases where you can't simply swap the + * mp_int pointers around + */ void mp_exch (mp_int * a, mp_int * b) { @@ -1703,9 +1883,12 @@ static int f_mp_exptmod (mp_int * G, mp_int * X, mp_int * P, mp_int * Y); int mp_exptmod (mp_int * G, mp_int * X, mp_int * P, mp_int * Y) { + int dr; + + dr = mp_dr_is_modulus(P); /* if the modulus is odd use the fast method */ - if (mp_isodd (P) == 1 && P->used > 4 && P->used < MONTGOMERY_EXPT_CUTOFF) { - return mp_exptmod_fast (G, X, P, Y); + if (((mp_isodd (P) == 1 && P->used < MONTGOMERY_EXPT_CUTOFF) || dr == 1) && P->used > 4) { + return mp_exptmod_fast (G, X, P, Y, dr); } else { return f_mp_exptmod (G, X, P, Y); } @@ -1840,7 +2023,7 @@ f_mp_exptmod (mp_int * G, mp_int * X, mp_int * P, mp_int * Y) mode = 2; if (bitcpy == winsize) { - /* ok window is filled so square as required and multiply multiply */ + /* ok window is filled so square as required and multiply */ /* square first */ for (x = 0; x < winsize; x++) { if ((err = mp_sqr (&res, &res)) != MP_OKAY) { @@ -1924,15 +2107,16 @@ __M: * Uses a left-to-right k-ary sliding window to compute the modular exponentiation. * The value of k changes based on the size of the exponent. * - * Uses Montgomery reduction + * Uses Montgomery or Diminished Radix reduction [whichever appropriate] */ int -mp_exptmod_fast (mp_int * G, mp_int * X, mp_int * P, mp_int * Y) +mp_exptmod_fast (mp_int * G, mp_int * X, mp_int * P, mp_int * Y, int redmode) { mp_int M[256], res; mp_digit buf, mp; int err, bitbuf, bitcpy, bitcnt, mode, digidx, x, y, winsize; - + int (*redux)(mp_int*,mp_int*,mp_digit); + /* find window size */ x = mp_count_bits (X); if (x <= 7) { @@ -1960,10 +2144,17 @@ mp_exptmod_fast (mp_int * G, mp_int * X, mp_int * P, mp_int * Y) return err; } } - - /* now setup montgomery */ - if ((err = mp_montgomery_setup (P, &mp)) != MP_OKAY) { - goto __M; + + if (redmode == 0) { + /* now setup montgomery */ + if ((err = mp_montgomery_setup (P, &mp)) != MP_OKAY) { + goto __M; + } + redux = mp_montgomery_reduce; + } else { + /* setup DR reduction */ + mp_dr_setup(P, &mp); + redux = mp_dr_reduce; } /* setup result */ @@ -1978,15 +2169,23 @@ mp_exptmod_fast (mp_int * G, mp_int * X, mp_int * P, mp_int * Y) * The first half of the table is not computed though accept for M[0] and M[1] */ - /* now we need R mod m */ - if ((err = mp_montgomery_calc_normalization (&res, P)) != MP_OKAY) { - goto __RES; - } + if (redmode == 0) { + /* now we need R mod m */ + if ((err = mp_montgomery_calc_normalization (&res, P)) != MP_OKAY) { + goto __RES; + } - /* now set M[1] to G * R mod m */ - if ((err = mp_mulmod (G, &res, P, &M[1])) != MP_OKAY) { - goto __RES; + /* now set M[1] to G * R mod m */ + if ((err = mp_mulmod (G, &res, P, &M[1])) != MP_OKAY) { + goto __RES; + } + } else { + mp_set(&res, 1); + if ((err = mp_mod(G, P, &M[1])) != MP_OKAY) { + goto __RES; + } } + /* compute the value at M[1<<(winsize-1)] by squaring M[1] (winsize-1) times */ if ((err = mp_copy (&M[1], &M[1 << (winsize - 1)])) != MP_OKAY) { goto __RES; @@ -1996,7 +2195,7 @@ mp_exptmod_fast (mp_int * G, mp_int * X, mp_int * P, mp_int * Y) if ((err = mp_sqr (&M[1 << (winsize - 1)], &M[1 << (winsize - 1)])) != MP_OKAY) { goto __RES; } - if ((err = mp_montgomery_reduce (&M[1 << (winsize - 1)], P, mp)) != MP_OKAY) { + if ((err = redux (&M[1 << (winsize - 1)], P, mp)) != MP_OKAY) { goto __RES; } } @@ -2006,7 +2205,7 @@ mp_exptmod_fast (mp_int * G, mp_int * X, mp_int * P, mp_int * Y) if ((err = mp_mul (&M[x - 1], &M[1], &M[x])) != MP_OKAY) { goto __RES; } - if ((err = mp_montgomery_reduce (&M[x], P, mp)) != MP_OKAY) { + if ((err = redux (&M[x], P, mp)) != MP_OKAY) { goto __RES; } } @@ -2046,7 +2245,7 @@ mp_exptmod_fast (mp_int * G, mp_int * X, mp_int * P, mp_int * Y) if ((err = mp_sqr (&res, &res)) != MP_OKAY) { goto __RES; } - if ((err = mp_montgomery_reduce (&res, P, mp)) != MP_OKAY) { + if ((err = redux (&res, P, mp)) != MP_OKAY) { goto __RES; } continue; @@ -2057,13 +2256,13 @@ mp_exptmod_fast (mp_int * G, mp_int * X, mp_int * P, mp_int * Y) mode = 2; if (bitcpy == winsize) { - /* ok window is filled so square as required and multiply multiply */ + /* ok window is filled so square as required and multiply */ /* square first */ for (x = 0; x < winsize; x++) { if ((err = mp_sqr (&res, &res)) != MP_OKAY) { goto __RES; } - if ((err = mp_montgomery_reduce (&res, P, mp)) != MP_OKAY) { + if ((err = redux (&res, P, mp)) != MP_OKAY) { goto __RES; } } @@ -2072,7 +2271,7 @@ mp_exptmod_fast (mp_int * G, mp_int * X, mp_int * P, mp_int * Y) if ((err = mp_mul (&res, &M[bitbuf], &res)) != MP_OKAY) { goto __RES; } - if ((err = mp_montgomery_reduce (&res, P, mp)) != MP_OKAY) { + if ((err = redux (&res, P, mp)) != MP_OKAY) { goto __RES; } @@ -2089,7 +2288,7 @@ mp_exptmod_fast (mp_int * G, mp_int * X, mp_int * P, mp_int * Y) if ((err = mp_sqr (&res, &res)) != MP_OKAY) { goto __RES; } - if ((err = mp_montgomery_reduce (&res, P, mp)) != MP_OKAY) { + if ((err = redux (&res, P, mp)) != MP_OKAY) { goto __RES; } @@ -2099,17 +2298,19 @@ mp_exptmod_fast (mp_int * G, mp_int * X, mp_int * P, mp_int * Y) if ((err = mp_mul (&res, &M[1], &res)) != MP_OKAY) { goto __RES; } - if ((err = mp_montgomery_reduce (&res, P, mp)) != MP_OKAY) { + if ((err = redux (&res, P, mp)) != MP_OKAY) { goto __RES; } } } } - /* fixup result */ - if ((err = mp_montgomery_reduce (&res, P, mp)) != MP_OKAY) { - goto __RES; - } + if (redmode == 0) { + /* fixup result */ + if ((err = mp_montgomery_reduce (&res, P, mp)) != MP_OKAY) { + goto __RES; + } + } mp_exch (&res, Y); err = MP_OKAY; @@ -2140,13 +2341,13 @@ __M: */ #include +/* calculate c = a^b using a square-multiply algorithm */ int mp_expt_d (mp_int * a, mp_digit b, mp_int * c) { int res, x; mp_int g; - if ((res = mp_init_copy (&g, a)) != MP_OKAY) { return res; } @@ -2155,11 +2356,13 @@ mp_expt_d (mp_int * a, mp_digit b, mp_int * c) mp_set (c, 1); for (x = 0; x < (int) DIGIT_BIT; x++) { + /* square */ if ((res = mp_sqr (c, c)) != MP_OKAY) { mp_clear (&g); return res; } + /* if the bit is set multiply */ if ((b & (mp_digit) (1 << (DIGIT_BIT - 1))) != 0) { if ((res = mp_mul (c, &g, c)) != MP_OKAY) { mp_clear (&g); @@ -2167,6 +2370,7 @@ mp_expt_d (mp_int * a, mp_digit b, mp_int * c) } } + /* shift to next bit */ b <<= 1; } @@ -2201,7 +2405,6 @@ mp_gcd (mp_int * a, mp_int * b, mp_int * c) mp_int u, v, t; int k, res, neg; - /* either zero than gcd is the largest */ if (mp_iszero (a) == 1 && mp_iszero (b) == 0) { return mp_copy (b, c); @@ -2234,7 +2437,7 @@ mp_gcd (mp_int * a, mp_int * b, mp_int * c) /* B1. Find power of two */ k = 0; - while ((u.dp[0] & 1) == 0 && (v.dp[0] & 1) == 0) { + while (mp_iseven(&u) == 1 && mp_iseven(&v) == 1) { ++k; if ((res = mp_div_2 (&u, &u)) != MP_OKAY) { goto __T; @@ -2245,12 +2448,14 @@ mp_gcd (mp_int * a, mp_int * b, mp_int * c) } /* B2. Initialize */ - if ((u.dp[0] & 1) == 1) { + if (mp_isodd(&u) == 1) { + /* t = -v */ if ((res = mp_copy (&v, &t)) != MP_OKAY) { goto __T; } t.sign = MP_NEG; } else { + /* t = u */ if ((res = mp_copy (&u, &t)) != MP_OKAY) { goto __T; } @@ -2258,7 +2463,7 @@ mp_gcd (mp_int * a, mp_int * b, mp_int * c) do { /* B3 (and B4). Halve t, if even */ - while (t.used != 0 && (t.dp[0] & 1) == 0) { + while (t.used != 0 && mp_iseven(&t) == 1) { if ((res = mp_div_2 (&t, &t)) != MP_OKAY) { goto __T; } @@ -2323,13 +2528,15 @@ mp_grow (mp_int * a, int size) /* if the alloc size is smaller alloc more ram */ if (a->alloc < size) { - size += (MP_PREC * 2) - (size & (MP_PREC - 1)); /* ensure there are always at least MP_PREC digits extra on top */ + /* ensure there are always at least MP_PREC digits extra on top */ + size += (MP_PREC * 2) - (size & (MP_PREC - 1)); - a->dp = XREALLOC (a->dp, sizeof (mp_digit) * size); + a->dp = OPT_CAST XREALLOC (a->dp, sizeof (mp_digit) * size); if (a->dp == NULL) { return MP_MEM; } + /* zero excess digits */ n = a->alloc; a->alloc = size; for (i = n; i < a->alloc; i++) { @@ -2364,16 +2571,16 @@ mp_init (mp_int * a) { /* allocate ram required and clear it */ - a->dp = XCALLOC (sizeof (mp_digit), MP_PREC); + a->dp = OPT_CAST XCALLOC (sizeof (mp_digit), MP_PREC); if (a->dp == NULL) { return MP_MEM; } /* set the used to zero, allocated digit to the default precision * and sign to positive */ - a->used = 0; + a->used = 0; a->alloc = MP_PREC; - a->sign = MP_ZPOS; + a->sign = MP_ZPOS; return MP_OKAY; } @@ -2433,9 +2640,11 @@ int mp_init_size (mp_int * a, int size) { - /* pad up so there are at least 16 zero digits */ - size += (MP_PREC * 2) - (size & (MP_PREC - 1)); /* ensure there are always at least 16 digits extra on top */ - a->dp = XCALLOC (sizeof (mp_digit), size); + /* pad size so there are always extra digits */ + size += (MP_PREC * 2) - (size & (MP_PREC - 1)); + + /* alloc mem */ + a->dp = OPT_CAST XCALLOC (sizeof (mp_digit), size); if (a->dp == NULL) { return MP_MEM; } @@ -3133,10 +3342,10 @@ mp_lshd (mp_int * a, int b) /* increment the used by the shift amount than copy upwards */ a->used += b; - + /* top */ tmpa = a->dp + a->used - 1; - + /* base */ tmpaa = a->dp + a->used - 1 - b; @@ -3623,17 +3832,29 @@ mp_mul_2 (mp_int * a, mp_int * b) { register mp_digit r, rr, *tmpa, *tmpb; - r = 0; + /* alias for source */ tmpa = a->dp; + + /* alias for dest */ tmpb = b->dp; + + /* carry */ + r = 0; for (x = 0; x < b->used; x++) { + + /* get what will be the *next* carry bit from the MSB of the current digit */ rr = *tmpa >> (DIGIT_BIT - 1); + + /* now shift up this digit, add in the carry [from the previous] */ *tmpb++ = ((*tmpa++ << 1) | r) & MP_MASK; + + /* copy the carry that would be from the source digit into the next iteration */ r = rr; } /* new leading digit? */ if (r != 0) { + /* do we have to grow to accomodate the new digit? */ if (b->alloc == b->used) { if ((res = mp_grow (b, b->used + 1)) != MP_OKAY) { return res; @@ -3644,11 +3865,12 @@ mp_mul_2 (mp_int * a, mp_int * b) */ tmpb = b->dp + b->used; } - /* add a MSB of 1 */ + /* add a MSB which is always 1 at this point */ *tmpb = 1; ++b->used; } + /* now zero any excess digits on the destination that we didn't write to */ tmpb = b->dp + b->used; for (x = b->used; x < oldused; x++) { *tmpb++ = 0; @@ -3684,7 +3906,6 @@ mp_mul_2d (mp_int * a, int b, mp_int * c) mp_digit d, r, rr; int x, res; - /* copy */ if ((res = mp_copy (a, c)) != MP_OKAY) { return res; @@ -3696,22 +3917,32 @@ mp_mul_2d (mp_int * a, int b, mp_int * c) /* shift by as many digits in the bit count */ if (b >= DIGIT_BIT) { - if ((res = mp_lshd (c, b / DIGIT_BIT)) != MP_OKAY) { - return res; - } - } + if ((res = mp_lshd (c, b / DIGIT_BIT)) != MP_OKAY) { + return res; + } + } c->used = c->alloc; /* shift any bit count < DIGIT_BIT */ d = (mp_digit) (b % DIGIT_BIT); if (d != 0) { - r = 0; + register mp_digit *tmpc, mask; + + /* bitmask for carries */ + mask = (1U << d) - 1U; + + /* alias */ + tmpc = c->dp; + + /* carry */ + r = 0; for (x = 0; x < c->used; x++) { /* get the higher bits of the current word */ - rr = (c->dp[x] >> (DIGIT_BIT - d)) & ((mp_digit) ((1U << d) - 1U)); + rr = (*tmpc >> (DIGIT_BIT - d)) & mask; /* shift the current word and OR in the carry */ - c->dp[x] = ((c->dp[x] << d) | r) & MP_MASK; + *tmpc = ((*tmpc << d) | r) & MP_MASK; + ++tmpc; /* set the carry to the carry bits of the current word */ r = rr; @@ -3987,6 +4218,340 @@ mp_or (mp_int * a, mp_int * b, mp_int * c) /* End: bn_mp_or.c */ +/* Start: bn_mp_prime_fermat.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is library that provides for multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library is designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* performs one Fermat test. + * + * If "a" were prime then b^a == b (mod a) since the order of + * the multiplicative sub-group would be phi(a) = a-1. That means + * it would be the same as b^(a mod (a-1)) == b^1 == b (mod a). + * + * Sets result to 1 if the congruence holds, or zero otherwise. + */ +int +mp_prime_fermat (mp_int * a, mp_int * b, int *result) +{ + mp_int t; + int err; + + /* default to fail */ + *result = 0; + + /* init t */ + if ((err = mp_init (&t)) != MP_OKAY) { + return err; + } + + /* compute t = b^a mod a */ + if ((err = mp_exptmod (b, a, a, &t)) != MP_OKAY) { + goto __T; + } + + /* is it equal to b? */ + if (mp_cmp (&t, b) == MP_EQ) { + *result = 1; + } + + err = MP_OKAY; +__T:mp_clear (&t); + return err; +} + +/* End: bn_mp_prime_fermat.c */ + +/* Start: bn_mp_prime_is_divisible.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is library that provides for multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library is designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* determines if an integers is divisible by one of the first 256 primes or not + * + * sets result to 0 if not, 1 if yes + */ +int +mp_prime_is_divisible (mp_int * a, int *result) +{ + int err, ix; + mp_digit res; + + /* default to not */ + *result = 0; + + for (ix = 0; ix < 256; ix++) { + /* is it equal to the prime? */ + if (mp_cmp_d (a, __prime_tab[ix]) == MP_EQ) { + *result = 1; + return MP_OKAY; + } + + /* what is a mod __prime_tab[ix] */ + if ((err = mp_mod_d (a, __prime_tab[ix], &res)) != MP_OKAY) { + return err; + } + + /* is the residue zero? */ + if (res == 0) { + *result = 1; + return MP_OKAY; + } + } + + return MP_OKAY; +} + +/* End: bn_mp_prime_is_divisible.c */ + +/* Start: bn_mp_prime_is_prime.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is library that provides for multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library is designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* performs a variable number of rounds of Miller-Rabin + * + * Probability of error after t rounds is no more than + * (1/4)^t when 1 <= t <= 256 + * + * Sets result to 1 if probably prime, 0 otherwise + */ +int +mp_prime_is_prime (mp_int * a, int t, int *result) +{ + mp_int b; + int ix, err, res; + + /* default to no */ + *result = 0; + + /* valid value of t? */ + if (t < 1 || t > 256) { + return MP_VAL; + } + + /* first perform trial division */ + if ((err = mp_prime_is_divisible (a, &res)) != MP_OKAY) { + return err; + } + if (res == 1) { + return MP_OKAY; + } + + /* now perform the miller-rabin rounds */ + if ((err = mp_init (&b)) != MP_OKAY) { + return err; + } + + for (ix = 0; ix < t; ix++) { + /* set the prime */ + mp_set (&b, __prime_tab[ix]); + + if ((err = mp_prime_miller_rabin (a, &b, &res)) != MP_OKAY) { + goto __B; + } + + if (res == 0) { + goto __B; + } + } + + /* passed the test */ + *result = 1; +__B:mp_clear (&b); + return err; +} + +/* End: bn_mp_prime_is_prime.c */ + +/* Start: bn_mp_prime_miller_rabin.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is library that provides for multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library is designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* Miller-Rabin test of "a" to the base of "b" as described in + * HAC pp. 139 Algorithm 4.24 + * + * Sets result to 0 if definitely composite or 1 if probably prime. + * Randomly the chance of error is no more than 1/4 and often + * very much lower. + */ +int +mp_prime_miller_rabin (mp_int * a, mp_int * b, int *result) +{ + mp_int n1, y, r; + int s, j, err; + + /* default */ + *result = 0; + + /* get n1 = a - 1 */ + if ((err = mp_init_copy (&n1, a)) != MP_OKAY) { + return err; + } + if ((err = mp_sub_d (&n1, 1, &n1)) != MP_OKAY) { + goto __N1; + } + + /* set 2^s * r = n1 */ + if ((err = mp_init_copy (&r, &n1)) != MP_OKAY) { + goto __N1; + } + s = 0; + while (mp_iseven (&r) == 1) { + ++s; + if ((err = mp_div_2 (&r, &r)) != MP_OKAY) { + goto __R; + } + } + + /* compute y = b^r mod a */ + if ((err = mp_init (&y)) != MP_OKAY) { + goto __R; + } + if ((err = mp_exptmod (b, &r, a, &y)) != MP_OKAY) { + goto __Y; + } + + /* if y != 1 and y != n1 do */ + if (mp_cmp_d (&y, 1) != MP_EQ && mp_cmp (&y, &n1) != MP_EQ) { + j = 1; + /* while j <= s-1 and y != n1 */ + while ((j <= (s - 1)) && mp_cmp (&y, &n1) != MP_EQ) { + if ((err = mp_sqrmod (&y, a, &y)) != MP_OKAY) { + goto __Y; + } + + /* if y == 1 then composite */ + if (mp_cmp_d (&y, 1) == MP_EQ) { + goto __Y; + } + + ++j; + } + + /* if y != n1 then composite */ + if (mp_cmp (&y, &n1) != MP_EQ) { + goto __Y; + } + } + + /* probably prime now */ + *result = 1; +__Y:mp_clear (&y); +__R:mp_clear (&r); +__N1:mp_clear (&n1); + return err; +} + +/* End: bn_mp_prime_miller_rabin.c */ + +/* Start: bn_mp_prime_next_prime.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is library that provides for multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library is designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include + +/* finds the next prime after the number "a" using "t" trials + * of Miller-Rabin. + */ +int mp_prime_next_prime(mp_int *a, int t) +{ + int err, res; + + if (mp_iseven(a) == 1) { + /* force odd */ + if ((err = mp_add_d(a, 1, a)) != MP_OKAY) { + return err; + } + } else { + /* force to next number */ + if ((err = mp_add_d(a, 2, a)) != MP_OKAY) { + return err; + } + } + + for (;;) { + /* is this prime? */ + if ((err = mp_prime_is_prime(a, t, &res)) != MP_OKAY) { + return err; + } + + if (res == 1) { + break; + } + + /* add two, next candidate */ + if ((err = mp_add_d(a, 2, a)) != MP_OKAY) { + return err; + } + } + + return MP_OKAY; +} + + +/* End: bn_mp_prime_next_prime.c */ + /* Start: bn_mp_rand.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * @@ -4255,19 +4820,19 @@ mp_rshd (mp_int * a, int b) /* base */ tmpa = a->dp; - + /* offset into digits */ tmpaa = a->dp + b; - + /* this is implemented as a sliding window where the window is b-digits long * and digits from the top of the window are copied to the bottom * * e.g. - + b-2 | b-1 | b0 | b1 | b2 | ... | bb | ----> /\ | ----> \-------------------/ ----> - */ + */ for (x = 0; x < (a->used - b); x++) { *tmpa++ = *tmpaa++; } @@ -4381,7 +4946,7 @@ int mp_shrink (mp_int * a) { if (a->alloc != a->used) { - if ((a->dp = XREALLOC (a->dp, sizeof (mp_digit) * a->used)) == NULL) { + if ((a->dp = OPT_CAST XREALLOC (a->dp, sizeof (mp_digit) * a->used)) == NULL) { return MP_MEM; } a->alloc = a->used; @@ -4819,6 +5384,62 @@ mp_zero (mp_int * a) /* End: bn_mp_zero.c */ +/* Start: bn_prime_tab.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is library that provides for multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library is designed directly after the MPI library by + * Michael Fromberger but has been written from scratch with + * additional optimizations in place. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org + */ +#include +const mp_digit __prime_tab[] = { + 0x0002, 0x0003, 0x0005, 0x0007, 0x000B, 0x000D, 0x0011, 0x0013, + 0x0017, 0x001D, 0x001F, 0x0025, 0x0029, 0x002B, 0x002F, 0x0035, + 0x003B, 0x003D, 0x0043, 0x0047, 0x0049, 0x004F, 0x0053, 0x0059, + 0x0061, 0x0065, 0x0067, 0x006B, 0x006D, 0x0071, 0x007F, 0x0083, + 0x0089, 0x008B, 0x0095, 0x0097, 0x009D, 0x00A3, 0x00A7, 0x00AD, + 0x00B3, 0x00B5, 0x00BF, 0x00C1, 0x00C5, 0x00C7, 0x00D3, 0x00DF, + 0x00E3, 0x00E5, 0x00E9, 0x00EF, 0x00F1, 0x00FB, 0x0101, 0x0107, + 0x010D, 0x010F, 0x0115, 0x0119, 0x011B, 0x0125, 0x0133, 0x0137, + + 0x0139, 0x013D, 0x014B, 0x0151, 0x015B, 0x015D, 0x0161, 0x0167, + 0x016F, 0x0175, 0x017B, 0x017F, 0x0185, 0x018D, 0x0191, 0x0199, + 0x01A3, 0x01A5, 0x01AF, 0x01B1, 0x01B7, 0x01BB, 0x01C1, 0x01C9, + 0x01CD, 0x01CF, 0x01D3, 0x01DF, 0x01E7, 0x01EB, 0x01F3, 0x01F7, + 0x01FD, 0x0209, 0x020B, 0x021D, 0x0223, 0x022D, 0x0233, 0x0239, + 0x023B, 0x0241, 0x024B, 0x0251, 0x0257, 0x0259, 0x025F, 0x0265, + 0x0269, 0x026B, 0x0277, 0x0281, 0x0283, 0x0287, 0x028D, 0x0293, + 0x0295, 0x02A1, 0x02A5, 0x02AB, 0x02B3, 0x02BD, 0x02C5, 0x02CF, + + 0x02D7, 0x02DD, 0x02E3, 0x02E7, 0x02EF, 0x02F5, 0x02F9, 0x0301, + 0x0305, 0x0313, 0x031D, 0x0329, 0x032B, 0x0335, 0x0337, 0x033B, + 0x033D, 0x0347, 0x0355, 0x0359, 0x035B, 0x035F, 0x036D, 0x0371, + 0x0373, 0x0377, 0x038B, 0x038F, 0x0397, 0x03A1, 0x03A9, 0x03AD, + 0x03B3, 0x03B9, 0x03C7, 0x03CB, 0x03D1, 0x03D7, 0x03DF, 0x03E5, + 0x03F1, 0x03F5, 0x03FB, 0x03FD, 0x0407, 0x0409, 0x040F, 0x0419, + 0x041B, 0x0425, 0x0427, 0x042D, 0x043F, 0x0443, 0x0445, 0x0449, + 0x044F, 0x0455, 0x045D, 0x0463, 0x0469, 0x047F, 0x0481, 0x048B, + + 0x0493, 0x049D, 0x04A3, 0x04A9, 0x04B1, 0x04BD, 0x04C1, 0x04C7, + 0x04CD, 0x04CF, 0x04D5, 0x04E1, 0x04EB, 0x04FD, 0x04FF, 0x0503, + 0x0509, 0x050B, 0x0511, 0x0515, 0x0517, 0x051B, 0x0527, 0x0529, + 0x052F, 0x0551, 0x0557, 0x055D, 0x0565, 0x0577, 0x0581, 0x058F, + 0x0593, 0x0595, 0x0599, 0x059F, 0x05A7, 0x05AB, 0x05AD, 0x05B3, + 0x05BF, 0x05C9, 0x05CB, 0x05CF, 0x05D1, 0x05D5, 0x05DB, 0x05E7, + 0x05F3, 0x05FB, 0x0607, 0x060D, 0x0611, 0x0617, 0x061F, 0x0623, + 0x062B, 0x062F, 0x063D, 0x0641, 0x0647, 0x0649, 0x064D, 0x0653 +}; + +/* End: bn_prime_tab.c */ + /* Start: bn_radix.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * @@ -4839,7 +5460,6 @@ mp_zero (mp_int * a) /* chars used in radix conversions */ static const char *s_rmap = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/"; - /* read a string [ASCII] in a given radix */ int mp_read_radix (mp_int * a, char *str, int radix) @@ -4915,7 +5535,7 @@ mp_toradix (mp_int * a, char *str, int radix) *str++ = s_rmap[d]; ++digs; } - bn_reverse ((unsigned char *) _s, digs); + bn_reverse ((unsigned char *)_s, digs); *str++ = '\0'; mp_clear (&t); return MP_OKAY; @@ -5056,13 +5676,13 @@ s_mp_add (mp_int * a, mp_int * b, mp_int * c) register int i; /* alias for digit pointers */ - + /* first input */ tmpa = a->dp; - + /* second input */ tmpb = b->dp; - + /* destination */ tmpc = c->dp; diff --git a/mycrypt.h b/mycrypt.h index aef7476..d72cb03 100644 --- a/mycrypt.h +++ b/mycrypt.h @@ -16,8 +16,8 @@ extern "C" { #endif /* version */ -#define CRYPT 0x0082 -#define SCRYPT "0.82" +#define CRYPT 0x0083 +#define SCRYPT "0.83" /* max size of either a cipher/hash block or symmetric key [largest of the two] */ #define MAXBLOCKSIZE 128 @@ -27,6 +27,7 @@ extern "C" { enum { CRYPT_OK=0, /* Result OK */ CRYPT_ERROR, /* Generic Error */ + CRYPT_NOP, /* Not a failure but no operation was performed */ CRYPT_INVALID_KEYSIZE, /* Invalid key size given */ CRYPT_INVALID_ROUNDS, /* Invalid number of rounds */ diff --git a/mycrypt_kr.h b/mycrypt_kr.h index 3edf7db..6dc16cd 100644 --- a/mycrypt_kr.h +++ b/mycrypt_kr.h @@ -42,13 +42,13 @@ extern unsigned long kr_crc(const unsigned char *name, const unsigned char *emai extern pk_key *kr_find(pk_key *pk, unsigned long ID); extern pk_key *kr_find_name(pk_key *pk, const char *name); -extern int kr_add(pk_key *pk, int key_type, int system, const unsigned char *name, +extern int kr_add(pk_key *pk, int key_type, int sys, const unsigned char *name, const unsigned char *email, const unsigned char *description, const _pk_key *key); extern int kr_del(pk_key **_pk, unsigned long ID); extern int kr_clear(pk_key **pk); extern int kr_make_key(pk_key *pk, prng_state *prng, int wprng, - int system, int keysize, const unsigned char *name, + int sys, int keysize, const unsigned char *name, const unsigned char *email, const unsigned char *description); extern int kr_export(pk_key *pk, unsigned long ID, int key_type, unsigned char *out, unsigned long *outlen); diff --git a/mycrypt_macros.h b/mycrypt_macros.h index 8824504..c89318d 100644 --- a/mycrypt_macros.h +++ b/mycrypt_macros.h @@ -85,7 +85,7 @@ extern char *crypt_error; #ifdef ENDIAN_32BITWORD #define STORE32L(x, y) \ - { unsigned long t = (x); memcpy(y, &t, 4); } + { unsigned long __t = (x); memcpy(y, &__t, 4); } #define LOAD32L(x, y) \ memcpy(&(x), y, 4); @@ -105,13 +105,13 @@ extern char *crypt_error; #else /* 64-bit words then */ #define STORE32L(x, y) \ - { unsigned long t = (x); memcpy(y, &t, 4); } + { unsigned long __t = (x); memcpy(y, &__t, 4); } #define LOAD32L(x, y) \ { memcpy(&(x), y, 4); x &= 0xFFFFFFFF; } #define STORE64L(x, y) \ - { ulong64 t = (x); memcpy(y, &t, 8); } + { ulong64 __t = (x); memcpy(y, &__t, 8); } #define LOAD64L(x, y) \ { memcpy(&(x), y, 8); } @@ -146,7 +146,7 @@ extern char *crypt_error; #ifdef ENDIAN_32BITWORD #define STORE32H(x, y) \ - { unsigned long t = (x); memcpy(y, &t, 4); } + { unsigned long __t = (x); memcpy(y, &__t, 4); } #define LOAD32H(x, y) \ memcpy(&(x), y, 4); @@ -166,13 +166,13 @@ extern char *crypt_error; #else /* 64-bit words then */ #define STORE32H(x, y) \ - { unsigned long t = (x); memcpy(y, &t, 4); } + { unsigned long __t = (x); memcpy(y, &__t, 4); } #define LOAD32H(x, y) \ { memcpy(&(x), y, 4); x &= 0xFFFFFFFF; } #define STORE64H(x, y) \ - { ulong64 t = (x); memcpy(y, &t, 8); } + { ulong64 __t = (x); memcpy(y, &__t, 8); } #define LOAD64H(x, y) \ { memcpy(&(x), y, 8); } diff --git a/rsa_sys.c b/rsa_sys.c index 4caef8d..06e6584 100644 --- a/rsa_sys.c +++ b/rsa_sys.c @@ -104,16 +104,12 @@ int rsa_decrypt_key(const unsigned char *in, unsigned long inlen, } y += 4; - /* read it in */ - for (x = 0; x < rsa_size; x++, y++) { - rsa_in[x] = in[y]; - } - /* decrypt it */ x = (unsigned long)sizeof(rsa_out); - if ((err = rsa_exptmod(rsa_in, rsa_size, rsa_out, &x, PK_PRIVATE, key)) != CRYPT_OK) { + if ((err = rsa_exptmod(in+y, rsa_size, rsa_out, &x, PK_PRIVATE, key)) != CRYPT_OK) { return err; } + y += rsa_size; /* depad it */ z = (unsigned long)sizeof(sym_key); @@ -240,16 +236,12 @@ int rsa_verify_hash(const unsigned char *sig, unsigned long siglen, } y += 4; - /* load the signature */ - for (x = 0; x < rsa_size; x++, y++) { - rsa_in[x] = sig[y]; - } - /* exptmod it */ - x = (unsigned long)sizeof(rsa_in); - if ((err = rsa_exptmod(rsa_in, rsa_size, rsa_out, &x, PK_PUBLIC, key)) != CRYPT_OK) { + x = (unsigned long)sizeof(rsa_out); + if ((err = rsa_exptmod(sig+y, rsa_size, rsa_out, &x, PK_PUBLIC, key)) != CRYPT_OK) { return err; } + y += rsa_size; /* depad it */ z = (unsigned long)sizeof(rsa_in); diff --git a/strings.c b/strings.c index d454e65..39b76d1 100644 --- a/strings.c +++ b/strings.c @@ -5,6 +5,7 @@ static const char *err_2_str[] = { "CRYPT_OK", "CRYPT_ERROR", + "Non-fatal 'no-operation' requested.", "Invalid keysize for block cipher.", "Invalid number of rounds for block cipher.", diff --git a/tommath.h b/tommath.h index ff4f1be..d71a264 100644 --- a/tommath.h +++ b/tommath.h @@ -10,10 +10,10 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@iahu.ca, http://libtommath.iahu.ca + * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ -#include "mycrypt.h" - +#include + #ifndef BN_H_ #define BN_H_ @@ -30,8 +30,16 @@ #ifdef __cplusplus extern "C" { -#endif +/* C++ compilers don't like assigning void * to mp_digit * */ +#define OPT_CAST (mp_digit *) + +#else + +/* C on the other hand dosen't care */ +#define OPT_CAST + +#endif /* some default configurations. * @@ -118,6 +126,12 @@ void mp_exch(mp_int *a, mp_int *b); /* shrink ram required for a bignum */ int mp_shrink(mp_int *a); +/* grow an int to a given size */ +int mp_grow(mp_int *a, int size); + +/* init to a given number of digits */ +int mp_init_size(mp_int *a, int size); + /* ---> Basic Manipulations <--- */ #define mp_iszero(a) (((a)->used == 0) ? 1 : 0) @@ -133,12 +147,6 @@ void mp_set(mp_int *a, mp_digit b); /* set a 32-bit const */ int mp_set_int(mp_int *a, unsigned long b); -/* grow an int to a given size */ -int mp_grow(mp_int *a, int size); - -/* init to a given number of digits */ -int mp_init_size(mp_int *a, int size); - /* copy, b = a */ int mp_copy(mp_int *a, mp_int *b); @@ -204,7 +212,6 @@ int mp_cmp_mag(mp_int *a, mp_int *b); /* c = a + b */ int mp_add(mp_int *a, mp_int *b, mp_int *c); - /* c = a - b */ int mp_sub(mp_int *a, mp_int *b, mp_int *c); @@ -299,9 +306,52 @@ int mp_montgomery_calc_normalization(mp_int *a, mp_int *b); /* computes xR^-1 == x (mod N) via Montgomery Reduction */ int mp_montgomery_reduce(mp_int *a, mp_int *m, mp_digit mp); +/* returns 1 if a is a valid DR modulus */ +int mp_dr_is_modulus(mp_int *a); + +/* sets the value of "d" required for mp_dr_reduce */ +void mp_dr_setup(mp_int *a, mp_digit *d); + +/* reduces a modulo b using the Diminished Radix method */ +int mp_dr_reduce(mp_int *a, mp_int *b, mp_digit mp); + /* d = a^b (mod c) */ int mp_exptmod(mp_int *a, mp_int *b, mp_int *c, mp_int *d); +/* ---> Primes <--- */ +#define PRIME_SIZE 256 /* number of primes */ + +/* table of first 256 primes */ +extern const mp_digit __prime_tab[]; + +/* result=1 if a is divisible by one of the first 256 primes */ +int mp_prime_is_divisible(mp_int *a, int *result); + +/* performs one Fermat test of "a" using base "b". + * Sets result to 0 if composite or 1 if probable prime + */ +int mp_prime_fermat(mp_int *a, mp_int *b, int *result); + +/* performs one Miller-Rabin test of "a" using base "b". + * Sets result to 0 if composite or 1 if probable prime + */ +int mp_prime_miller_rabin(mp_int *a, mp_int *b, int *result); + +/* performs t rounds of Miller-Rabin on "a" using the first + * t prime bases. Also performs an initial sieve of trial + * division. Determines if "a" is prime with probability + * of error no more than (1/4)^t. + * + * Sets result to 1 if probably prime, 0 otherwise + */ +int mp_prime_is_prime(mp_int *a, int t, int *result); + +/* finds the next prime after the number "a" using "t" trials + * of Miller-Rabin. + */ +int mp_prime_next_prime(mp_int *a, int t); + + /* ---> radix conversion <--- */ int mp_count_bits(mp_int *a); @@ -343,7 +393,7 @@ int mp_karatsuba_mul(mp_int *a, mp_int *b, mp_int *c); int mp_karatsuba_sqr(mp_int *a, mp_int *b); int fast_mp_invmod(mp_int *a, mp_int *b, mp_int *c); int fast_mp_montgomery_reduce(mp_int *a, mp_int *m, mp_digit mp); -int mp_exptmod_fast(mp_int *G, mp_int *X, mp_int *P, mp_int *Y); +int mp_exptmod_fast(mp_int *G, mp_int *X, mp_int *P, mp_int *Y, int mode); void bn_reverse(unsigned char *s, int len); #ifdef __cplusplus diff --git a/yarrow.c b/yarrow.c index 8827c38..6261edc 100644 --- a/yarrow.c +++ b/yarrow.c @@ -136,6 +136,10 @@ unsigned long yarrow_read(unsigned char *buf, unsigned long len, prng_state *prn _ARGCHK(buf != NULL); _ARGCHK(prng != NULL); + /* put buf in predictable state first */ + zeromem(buf, len); + + /* now randomize it */ if (ctr_encrypt(buf, buf, len, &prng->yarrow.ctr) != CRYPT_OK) { return 0; }