From 16100c38ebbafe15c6bf85af5999773c75fefd6e Mon Sep 17 00:00:00 2001 From: Tom St Denis Date: Mon, 8 Sep 2003 01:06:11 +0000 Subject: [PATCH] added libtomcrypt-0.90 --- changes | 28 ++ config.pl | 6 +- crypt.c | 3 + crypt.pdf | Bin 411545 -> 411035 bytes crypt.tex | 36 +- demos/test.c | 23 +- demos/x86_prof.c | 3 + dh.c | 128 +++--- ecc.c | 2 +- hash.c | 4 +- hmac.c | 29 +- legal.txt | 53 --- makefile | 12 +- makefile.msvc | 2 +- mpi.c | 1062 ++++++++++++++++++++++++++++------------------ mycrypt.h | 4 +- mycrypt_custom.h | 9 +- mycrypt_hash.h | 41 +- mycrypt_macros.h | 18 + rmd128.c | 366 ++++++++++++++++ rmd160.c | 425 +++++++++++++++++++ tdcal.pdf | Bin 56674 -> 0 bytes tommath.h | 18 +- yarrow.c | 6 +- 24 files changed, 1687 insertions(+), 591 deletions(-) delete mode 100644 legal.txt create mode 100644 rmd128.c create mode 100644 rmd160.c delete mode 100644 tdcal.pdf diff --git a/changes b/changes index b97b9fb..93ea898 100644 --- a/changes +++ b/changes @@ -1,3 +1,31 @@ +Sept 7th, 2003 +v0.90 -- new ROL/ROR for x86 GCC + -- Jochen Katz submitted a patch to the makefile to prevent "make" from making the .a library + when not required. + == By default the KR code is not enabled [it's only a demo anyways!] + -- changed the "buf" in ecc_make_key from 4KB to 128 bytes [since the largest key is 65 bytes] + -- hmac_done() now requires you pass it the size of the destination buffer to prevent + buffer overflows. (API CHANGE) + -- hmac/hash filebased routines now return CRYPT_NOP if NO_FILE is defined. + -- I've removed the primes from dh.c and replaced them with DR safe primes suitable for the default + configuration of LibTomMath. Check out these comparisons on a 1.3Ghz Athlon XP, optimized for size, + +768-bit, 4 vs. 10 +1024-bit, 8 vs. 18 +1280-bit, 12 vs. 34 +1536-bit, 20 vs. 56 +1792-bit 28 vs. 88 +2048-bit, 40 vs. 124 +2560-bit, 71 vs. 234 +3072-bit, 113 vs. 386 +4096-bit, 283 vs. 916 + + Times are all in milliseconds for key generation. New primes times on the left. This makes the code binary + incompatible with previous releases. However, this addition is long overdue as LibTomMath has supported DR + reductions for quite some time. + -- Added RIPE-MD 128 and 160 to the list of supported hashes [10 in total]. + -- The project has been released as public domain. TDCAL no longer applies. + July 15th, 2003 v0.89 -- Fix a bug in bits.c which would prevent it from building with msvc -- Merged in LibTomMath v0.24 [and I used the alloc/free macros this time!] diff --git a/config.pl b/config.pl index 92392eb..4aa8695 100644 --- a/config.pl +++ b/config.pl @@ -21,7 +21,7 @@ ); @opts = ( - "SMALL_CODE,Use small code where possible (slower code),n", + "SMALL_CODE,Use small code where possible (slower code),y", "NO_FILE,Avoid file I/O calls,n", "CLEAN_STACK,Clean the stack within functions,n", "LTC_TEST,Include Test Vector Routines,y", @@ -55,6 +55,8 @@ "MD5,Include MD5 one-way hash,y", "MD4,Include MD4 one-way hash,y", "MD2,Include MD2 one-way hash,y", + "RIPEMD128,Include RIPEMD-128 one-way hash,y", + "RIPEMD160,Include RIPEMD-160 one-way hash,y", "HMAC,Include Hash based Message Authentication Support,y", "BASE64,Include Base64 encoding support,y", @@ -68,7 +70,7 @@ "MRSA,Include RSA public key support,y", "MDH,Include Diffie-Hellman (over Z/pZ) public key support,y", "MECC,Include Eliptic Curve public key crypto support,y", - "KR,Include Keyring support (groups all three PK systems),y", + "KR,Include Keyring support (groups all three PK systems),n", "DH768,768-bit DH key support,y", "DH1024,1024-bit DH key support,y", diff --git a/crypt.c b/crypt.c index 1cefc89..4c4a07f 100644 --- a/crypt.c +++ b/crypt.c @@ -443,6 +443,9 @@ const char *crypt_build_settings = #if defined(MD2) " MD2\n" #endif +#if defined(RIPEMD128) + " RIPEMD128\n" +#endif "\nBlock Chaining Modes:\n" #if defined(CFB) diff --git a/crypt.pdf b/crypt.pdf index 97b86660a92ec7793c37d04bed0b950e04cc1097..bd4e895662977441575822f9c30d6710fac82a58 100644 GIT binary patch delta 128043 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 J{Qbw*{{j4nf>!_l delta 128593 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

1sLn9nR1t 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 C_0IQ1PA>WCm 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 a#`pt>j~`$D`fGZ6^NSB3KK|`5U;H00VzPAr diff --git a/crypt.tex b/crypt.tex index a01cea6..748e811 100644 --- a/crypt.tex +++ b/crypt.tex @@ -47,7 +47,7 @@ \def\gap{\vspace{0.5ex}} \makeindex \begin{document} -\title{A Tiny Crypto Library, \\ LibTomCrypt \\ Version 0.89} +\title{A Tiny Crypto Library, \\ LibTomCrypt \\ Version 0.90} \author{Tom St Denis \\ Algonquin College \\ \\ @@ -158,25 +158,20 @@ can make use of the cipher right away. \section{License} All of the source code except for the following files have been written by the author or donated to the project -under the TDCAL license: +under a public domain license: \begin{enumerate} \item rc2.c \item safer.c \end{enumerate} -`mpi.c'' was originally written -by Michael Fromberger (sting@linguist.dartmouth.edu) but has since been replaced with my LibTomMath library. -``rc2.c'' is based on publicly available code that is not attributed to a person from the given source. ``safer.c'' +`mpi.c'' was originally written by Michael Fromberger (sting@linguist.dartmouth.edu) but has since been replaced with my LibTomMath +library. + +``rc2.c'' is based on publicly available code that is not attributed to a person from the given source. ``safer.c'' was written by Richard De Moliner (demoliner@isi.ee.ethz.ch) and is public domain. -The rest of the code was written either by Tom St Denis or contributed to the project under the ``Tom Doesn't Care -About Licenses'' (TDCAL) license. Essentially this license grants the user unlimited distribution and usage (including -commercial usage). This means that you can use the package, you can re-distribute the package and even branch it. I -still retain ownership over the name of the package. If you want to branch the project you can use the code as a base -but you must change the name. The package is also royalty free which means you can use it in commercial products -without compensation towards the author. I assume no risk from usage of the code nor do I guarantee it works as -desired or stated. +The project is hereby released as public domain. \section{Patent Disclosure} @@ -364,7 +359,7 @@ have the same prototype and store their keys as naturally as possible. All cip are (given that XXX is the name of the cipher): \index{Cipher Setup} \begin{verbatim} -int XXX_setup(const unsigned char *key, int keylen, int rounds, +int XXX_setup(const unsigned char *key, int keylen, int rounds, symmetric_key *skey); \end{verbatim} @@ -973,6 +968,8 @@ The following hashes are provided as of this release: \hline SHA-256 & sha256\_desc & 32 \\ \hline TIGER-192 & tiger\_desc & 24 \\ \hline SHA-1 & sha1\_desc & 20 \\ + \hline RIPEMD-160 & rmd160\_desc & 20 \\ + \hline RIPEMD-128 & rmd128\_desc & 16 \\ \hline MD5 & md5\_desc & 16 \\ \hline MD4 & md4\_desc & 16 \\ \hline MD2 & md2\_desc & 16 \\ @@ -1019,10 +1016,12 @@ int hmac_process(hmac_state *hmac, const unsigned char *buf, number of octets to process. Like the hash process routines you can send the data in arbitrarly sized chunks. When you are finished with the HMAC process you must call the following function to get the HMAC code: \begin{verbatim} -int hmac_done(hmac_state *hmac, unsigned char *hash); +int hmac_done(hmac_state *hmac, unsigned char *hashOut, + unsigned long *outlen); \end{verbatim} -``hmac'' is the HMAC state you are working with. ``hash'' is the array of octets where the HMAC code should be stored. You -must ensure that your destination array is the right size (or just make it of size MAXBLOCKSIZE to be sure). +``hmac'' is the HMAC state you are working with. ``hashOut'' is the array of octets where the HMAC code should be stored. You must +set ``outlen'' to the size of the destination buffer before calling this function. It is updated with the length of the HMAC code +produced (depending on which hash was picked) There are two utility functions provided to make using HMACs easier todo. They accept the key and information about the message (file pointer, address in memory) and produce the HMAC result in one shot. These are useful if you want to avoid @@ -1061,6 +1060,7 @@ int main(void) int idx, errno; hmac_state hmac; unsigned char key[16], dst[MAXBLOCKSIZE]; + unsigned long dstlen; /* register SHA-1 */ if (register_hash(&sha1_desc) == -1) { @@ -1086,10 +1086,12 @@ int main(void) } /* get result (presumably to use it somehow...) */ - if ((errno = hmac_done(&hmac, dst)) != CRYPT_OK) { + dstlen = sizeof(dst); + if ((errno = hmac_done(&hmac, dst, &dstlen)) != CRYPT_OK) { printf("Error finishing hmac: %s\n", error_to_string(errno)); return -1; } + printf("The hmac is %lu bytes long\n", dstlen); /* return */ return 0; diff --git a/demos/test.c b/demos/test.c index cc6ff98..81d3472 100644 --- a/demos/test.c +++ b/demos/test.c @@ -89,7 +89,7 @@ store_tests (void) L = 0; LOAD32H (L, &buf[0]); if (L != 0x12345678UL) { - printf ("LOAD/STORE32 High don't work\n"); + printf ("LOAD/STORE32 High don't work, %08lx\n", L); exit (-1); } LL = CONST64 (0x01020304050607); @@ -839,7 +839,12 @@ dh_tests (void) dh_key usera, userb; clock_t t1; -/* if ((errnum = dh_test()) != CRYPT_OK) printf("DH Error: %s\n", error_to_string(errnum)); */ + printf("Testing builting DH parameters...."); fflush(stdout); + if ((errnum = dh_test()) != CRYPT_OK) { + printf("DH Error: %s\n", error_to_string(errnum)); + exit(-1); + } + printf("Passed.\n"); dh_sizes (&low, &high); printf ("DH Keys from %d to %d supported.\n", low * 8, high * 8); @@ -916,13 +921,13 @@ dh_tests (void) for (ii = 0; ii < (int) (sizeof (sizes) / sizeof (sizes[0])); ii++) { t1 = XCLOCK (); - for (tt = 0; tt < 5; tt++) { + for (tt = 0; tt < 25; tt++) { dh_make_key (&prng, find_prng ("yarrow"), sizes[ii], &usera); dh_free (&usera); } t1 = XCLOCK () - t1; printf ("Make dh-%d key took %f msec\n", sizes[ii] * 8, - 1000.0 * (((double) t1 / 5.0) / (double) XCLOCKS_PER_SEC)); + 1000.0 * (((double) t1 / 25.0) / (double) XCLOCKS_PER_SEC)); } } @@ -1359,6 +1364,12 @@ register_all_algs (void) #ifdef SHA512 register_hash (&sha512_desc); #endif +#ifdef RIPEMD128 + register_hash (&rmd128_desc); +#endif +#ifdef RIPEMD160 + register_hash (&rmd160_desc); +#endif #ifdef YARROW register_prng (&yarrow_desc); @@ -1713,7 +1724,7 @@ main (void) if ((errnum = yarrow_start (&prng)) != CRYPT_OK) { printf ("yarrow_start: %s\n", error_to_string (errnum)); } - if ((errnum = yarrow_add_entropy ("hello", 5, &prng)) != CRYPT_OK) { + if ((errnum = yarrow_add_entropy ((unsigned char *)"hello", 5, &prng)) != CRYPT_OK) { printf ("yarrow_add_entropy: %s\n", error_to_string (errnum)); } if ((errnum = yarrow_ready (&prng)) != CRYPT_OK) { @@ -1742,7 +1753,7 @@ main (void) #ifdef KR kr_test (); -#endif +#endif rsa_test (); pad_test (); ecc_tests (); diff --git a/demos/x86_prof.c b/demos/x86_prof.c index 72a2eb6..df2e007 100644 --- a/demos/x86_prof.c +++ b/demos/x86_prof.c @@ -132,6 +132,9 @@ void reg_algs(void) #ifdef SHA512 register_hash (&sha512_desc); #endif +#ifdef RIPEMD128 + register_hash (&rmd128_desc); +#endif } diff --git a/dh.c b/dh.c index 1745ef4..0d12de5 100644 --- a/dh.c +++ b/dh.c @@ -11,118 +11,118 @@ static const struct { { 96, "DH-768", - "2", - "1tH+dRFGpEYyVLe4ydZcYyGDpeAxnChz0yk+pNCtkEXwUsOORyguBtx8spUD" - "FAjEDS8PutUBTEu2q4USqu19dUbCLj9D2jY7y3871RnSccurMBsMm35ILcyQ" - "rpN0MQKc/" + "4", + "F///////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "//////m3wvV" }, #endif #ifdef DH1024 { 128, "DH-1024", - "2", - "Uypu+t9nfUnCj7xD+xokM+Cd6mASW4ofg1jpC2BpQasC5edtA1dJC+RjbOBZ" - "z+5mvq5VYT8Wfjmlpjm9tQxHOYB0+3Myl7gbCQ5SRljWT2oBLukLNvgFjiU4" - "wiWkmu41Ern/j6uxwKb740C+VIgDAdeUY4fA5hyfr3/+DWYb14/" + "4", + "F///////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////m3C47" }, #endif #ifdef DH1280 { 160, "DH-1280", - "2", - "520QV4Tsq4NwK9Mt5CGR9xk4slvaikgi/ax3OPky5GERKTsoqEXOlFyMzURP" - "P8jYzCVz1izKd2zTDxbFfLxrJry0ceaQ5YZa5N4teByCPVlQh4v6iQl+944+" - "/NDlKzvWpx7HG7k8cGKhva7aFF8bP/CvLpaQhrfXlOX+X9pcmML9QH63tUjq" - "B80l8Yx9KN0dC3iNnsTV3DnqnEvFQkoqql" + "4", + "F///////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "//////////////////////////////m4kSN" }, #endif #ifdef DH1536 { 192, "DH-1536", - "3", - "1FTWXrPcY1w74oZ0ouIzSN8uZcRiOf6U11fx0ka6+7fqIAezPhd3Ab43QnDf" - "KFg+or/fFRGEWAxF8WIE2jx8iTOu010yNEQyH14CK0RAyy2zY4gRs2MpnU5r" - "/feWf60OkLtnPzN34+Xnlg5xf7Jl00wkHRCeJG17L3SklOidAPxWnE+Wm4BS" - "SOzdQBgiZOjlhrYS1+TIU3NP5H7BrtKFcf+ZwBULibf29L7LkDOgQbie1+43" - "lU+8SHAyBwAeGYMfZ" + "4", + "F///////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////m5uqd" }, #endif #ifdef DH1792 { 224, "DH-1792", - "2", - "IPo3wjvfS7vBYnFHwJHmesA51od9fnR8Aenezif4qLE2HX+YCv1tpvHA8yLH" - "yYbKe9QfSHHtOgVjK8AYEyPirpXxlmdykGuj+dX7EiWMRGYc+v1kKkqmCn0o" - "5tU416O/1HXTpQ2Hps0buchUD+HlCMrSgnIqRxK6Fjr0ZfiCS4XgAD6sLgi0" - "BxKFMxDsVzpGMNwF5Lj2R/cJiTi0cNDDY3gn4lK/PRUsJtRKU+9sxy0q5Yof" - "aG5VO8VcHkZJVwUKhDFHkZYWMHV808TGHXM2RQ9kRa2QvS2mXxMrDSCloQ/" + "4", + "F///////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "//////////////////////////////////////////////////////mT/sd" }, #endif #ifdef DH2048 { 256, "DH-2048", - "2", - "5sR1VmdsQQzzjN0iridVVyveug6sAC3+/jTIHSgEoimPOREXQ05r2WJZJAF2" - "CRu8kuusiPw2ivRli+fdLr63v1uZG5nQa28uLwNxZEsu4gu6TrGjepXeXm4Z" - "CVOC1HMmi660fLZ2ruHLa4v2NWex2Zx91/y4ygPlZM+K//iy+Gft9Ma9Ayn0" - "eYwofZeUL9vJSfutPVp2ZrIEUQDBKMvMm0SRSLiUjDtzXqrH+b/wuwIFG1K4" - "var3ucsT45mDzD9qb3tBdksSPZbr6yrELV8h+qmjiBr15oHKEglS0XwSvCap" - "abUn5XPPVoaKv13+tOnG9mGgzQ8JeClVXN63Q+GGEF" + "4", + "3///////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "/////////////////////////////////////////m8MPh" }, #endif #ifdef DH2560 { 320, "DH-2560", - "3", - "G7UVKk+N6LfpGkdBP6XLB4QJ3wzee5YH/3o6tBDMwr4FS8YjCmeP6l4gu0hX" - "dzY2Rive4TYOu4Akm4naZuv32d71/2lQeNcO23BNYOEPxtn9BU8uYfaHP9Mo" - "M+m76oUCiI5uqpag5RH3BO34FyE4BiKkzjEXq9xxc8ERacG8Mo8DNiXu79p9" - "Q/0wsRz+W/lIN4gYw3w4iLMooAGnDrhcj5cZb0HysHWYfqmFo+jTBP6Egi0g" - "cmVO2qWQh2cZIQMfppaf1Ffq0XGIJpgDFyOHPl3NVxDabVK1tkVct+hathxJ" - "UTdqZmR2VFwMASXjfgj4VFdvFCUxV8Xr8JcwXkwlMjOJbAl0LoCa4M7hpYvz" - "G/0XviGCpv7qQaONKtsiQ6mHhMcyo9hBCRZXtNPkfPMZkPeV05akvaDs6Ek7" - "DZ62oKR" + "4", + "3///////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "/////mKFpF" }, #endif #ifdef DH3072 { 384, "DH-3072", - "2", - "1zsV6XgY57R/hu2RR4H/BjwRqmQL9h+Dc5rgoWOcqiTS8qpVTWafi1KFV77V" - "rUcjcer1EDgCV0tpzlemtyrC2pHpw7hr3EEl2evfWOvg05FRI6mKc2UPNv2c" - "2Bjww4LD/tdsLleX7AHHXCXFSSyd6C3qWq7BqABZriSpQeaEtXbWfeC6ytFe" - "2i3VeQsLa40XQ21UxwhPAjamjSOfYzkW7xi0fwI1e+4OQiFcWOfOuvswoaEf" - "MIICyAmVp67vjGo66dk81dMemyplipgXAWPdl7ppnDd6cEjyN4N90D7kQiNg" - "lVmJlKLecldOUtdIqMnbJCbiN/t/3/AEFaokGO9om5ckc6M9gG5PG0T7Oh1N" - "dSx/PstGdxwvs9DOwjyo5wl5C9QSLtUYJl2+GZYMj6WfsgCrb6jjRJJJQe2C" - "y7wUcBILbRsP3lYT8s14zm4xFBrfMUoLN287j3wQ1TNUXjYSCi4ZLKT1XDai" - "93345OiutLOqGGikFg6ypnymJK3yeHuul" + "4", + "3///////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "/////////////////////////////m32nN" }, #endif #ifdef DH4096 { 512, "DH-4096", - "3", - "Id8ukxZdao3hS0NGTKAXdt3c8PpiyigIyBY8lwOHjM2cqkaZgwvr1pA6OowS" - "32kJkeOqKB8gNTZZZVqOFkPXgvC4WveUgA5a7rhTj28pDidNROmMO70CCcSw" - "aHI3GLFuEMz3JJyvQKGaGwpV3C9gS70dFWTxEfNRzdYEdvIic8/SXI79VgNP" - "LGR68nzd4qxCgaLpVBnWsanRp7mfEj52S/7Kxjs14lrbAOMjCuHgN4F6THWh" - "PNhG0VXfFFIwAMW2unrfpdo+gQHNclqCf2N1FALpABzvUesgs3wIP+QTMqms" - "os/AkuulG7MusbeFl3SoCtaoW12CF038ZbqW+e+DKI1zObhtsLanvaiZm/N4" - "BsJirW7avcWNQYm1oYjZ2bR/jYqfoJ0CLXLO/vqHb8J9a5VE9nz7cqMD3/MH" - "k/g7BapsOtKuol6ipbUvxQPtf4KCwqQQ40JeqgS6amivI/aLu05S7bAxKOwE" - "Yu8YxjN6lXm3co5Wy+BmNSuRlzKhxICyHEqMfKwUtm48XHzHuPaGQzHgkn6H" - "3A+FQjQGLHewADYlbfdTF3sHYyc5k9h/9cYVkbmv7bQze53CJGr3T1hZYbN6" - "+fuz0SPnfjiKu+bWD+8RYtZpLs2+f32huMz3OqoryGfULxC2aEjL2rdBn+ZR" - "PT0+ZAUyLSAVHbsul++cawh" + "4", + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "////////////////////////////////////////////////////////////" + "/////////////////////m8pOF" }, #endif { diff --git a/ecc.c b/ecc.c index 5bc6398..036f7cb 100644 --- a/ecc.c +++ b/ecc.c @@ -590,7 +590,7 @@ int ecc_make_key(prng_state *prng, int wprng, int keysize, ecc_key *key) int x, res, err; ecc_point *base; mp_int prime; - unsigned char buf[4096]; + unsigned char buf[128]; _ARGCHK(key != NULL); diff --git a/hash.c b/hash.c index 1d3eb57..0665ac9 100644 --- a/hash.c +++ b/hash.c @@ -27,7 +27,7 @@ int hash_memory(int hash, const unsigned char *data, unsigned long len, unsigned int hash_filehandle(int hash, FILE *in, unsigned char *dst, unsigned long *outlen) { #ifdef NO_FILE - return CRYPT_ERROR; + return CRYPT_NOP; #else hash_state md; unsigned char buf[512]; @@ -64,7 +64,7 @@ int hash_filehandle(int hash, FILE *in, unsigned char *dst, unsigned long *outle int hash_file(int hash, const char *fname, unsigned char *dst, unsigned long *outlen) { #ifdef NO_FILE - return CRYPT_ERROR; + return CRYPT_NOP; #else FILE *in; int err; diff --git a/hmac.c b/hmac.c index 833f749..4edbf8f 100644 --- a/hmac.c +++ b/hmac.c @@ -37,7 +37,8 @@ int hmac_init(hmac_state *hmac, int hash, const unsigned char *key, unsigned lon return err; } - if (keylen == 0) { + /* valid key length? */ + if (keylen == 0 || keylen > MAXBLOCKSIZE) { return CRYPT_INVALID_KEYSIZE; } @@ -88,7 +89,7 @@ int hmac_process(hmac_state *hmac, const unsigned char *buf, unsigned long len) return CRYPT_OK; } -int hmac_done(hmac_state *hmac, unsigned char *hashOut) +int hmac_done(hmac_state *hmac, unsigned char *hashOut, unsigned long *outlen) { unsigned char buf[MAXBLOCKSIZE]; unsigned char isha[MAXBLOCKSIZE]; @@ -103,11 +104,17 @@ int hmac_done(hmac_state *hmac, unsigned char *hashOut) return err; } + /* ensure the output size is valid */ + hashsize = hash_descriptor[hash].hashsize; + if (*outlen < hashsize) { + return CRYPT_BUFFER_OVERFLOW; + } + *outlen = hashsize; + // Get the hash of the first HMAC vector plus the data hash_descriptor[hash].done(&hmac->md, isha); // Create the second HMAC vector vector for step (3) - hashsize = hash_descriptor[hash].hashsize; for(i=0; i < HMAC_BLOCKSIZE; i++) { buf[i] = hmac->key[i] ^ 0x5C; } @@ -138,20 +145,16 @@ int hmac_memory(int hash, const unsigned char *key, unsigned long keylen, if((err = hash_is_valid(hash)) != CRYPT_OK) { return err; } - if (hash_descriptor[hash].hashsize > *dstlen) { - return CRYPT_BUFFER_OVERFLOW; - } - *dstlen = hash_descriptor[hash].hashsize; if ((err = hmac_init(&hmac, hash, key, keylen)) != CRYPT_OK) { return err; } - + if ((err = hmac_process(&hmac, data, len)) != CRYPT_OK) { return err; } - if ((err = hmac_done(&hmac, dst)) != CRYPT_OK) { + if ((err = hmac_done(&hmac, dst, dstlen)) != CRYPT_OK) { return err; } return CRYPT_OK; @@ -163,7 +166,7 @@ int hmac_file(int hash, const char *fname, const unsigned char *key, unsigned char *dst, unsigned long *dstlen) { #ifdef NO_FILE - return CRYPT_ERROR; + return CRYPT_NOP; #else hmac_state hmac; FILE *in; @@ -178,10 +181,6 @@ int hmac_file(int hash, const char *fname, const unsigned char *key, if((err = hash_is_valid(hash)) != CRYPT_OK) { return err; } - if (hash_descriptor[hash].hashsize > *dstlen) { - return CRYPT_BUFFER_OVERFLOW; - } - *dstlen = hash_descriptor[hash].hashsize; if ((err = hmac_init(&hmac, hash, key, keylen)) != CRYPT_OK) { return err; @@ -203,7 +202,7 @@ int hmac_file(int hash, const char *fname, const unsigned char *key, (void)fclose(in); /* get final hmac */ - if ((err = hmac_done(&hmac, dst)) != CRYPT_OK) { + if ((err = hmac_done(&hmac, dst, dstlen)) != CRYPT_OK) { return err; } diff --git a/legal.txt b/legal.txt deleted file mode 100644 index 6ef478e..0000000 --- a/legal.txt +++ /dev/null @@ -1,53 +0,0 @@ -Legal Issues Regarding LibTomCrypt -Tom St Denis - -The bulk of the code was written or donated under the TDCAL "Tom Doesn't Care About License" license. It entitles the developer to free-reign on -the use and distribution of derived works, commercial or otherwise. Certain files are taken from public domain packages. - -DES.C ------ -Author: Unknown, Submitted by Dobes Vandermeer -Email : dobes@smartt.com -Disclaimer: None -Status: TDCAL submission by Dobes, modified [not original] - -MD4.C ------ -Author: Dobes Vandermeer -Email : dobes@smartt.com -Disclaimer: None -Status: TDCAL submission by Dobes, modified [not original] - -HMAC.C ------- -Author: Dobes Vandermeer -Email: dobes@smartt.com -Disclaimer: None -Status: TDCAL submission by Dobes, modified [not original] - -MPI.C ------ -Author: Original [v0.80 and prior] Michael Fromberger, Current [v0.81 and later] Tom St Denis -Email: tomstdenis@iahu.ca -Disclaimer: None -Status: TDCAL submission by Tom - -RC2.C ------ -Author: Unknown, found on public domain archive [www.wiretapped.net] -Email: none -Disclaimer: Possible legal issues [should remove RC2/RC5/RC6 to simplify legal issues] -Status: Public Domain, questionable legal status, modified [not original] - -SAFER.C -------- -Author: [copied verbatim] ----- -* AUTHOR: Richard De Moliner (demoliner@isi.ee.ethz.ch) -* Signal and Information Processing Laboratory -* Swiss Federal Institute of Technology -* CH-8092 Zuerich, Switzerland ----- -Email: demoliner@isi.ee.ethz.ch -Disclaimer: Appears to be Public Domain [not quite sure] -Status: Public Domain, modified [not original] \ No newline at end of file diff --git a/makefile b/makefile index 7eb0a78..dde9b93 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.89 +VERSION=0.90 #ch1-01-1 # Compiler and Linker Names @@ -49,7 +49,6 @@ SMALL=small PROF=x86_prof TV=tv_gen - #LIBPATH-The directory for libtomcrypt to be installed to. #INCPATH-The directory to install the header files for libtomcrypt. #DATAPATH-The directory to install the pdf docs. @@ -67,7 +66,7 @@ OBJECTS=keyring.o gf.o mem.o sprng.o ecc.o base64.o dh.o rsa.o \ bits.o yarrow.o cfb.o ofb.o ecb.o ctr.o cbc.o hash.o tiger.o sha1.o \ md5.o md4.o md2.o sha256.o sha512.o xtea.o aes.o des.o \ safer_tab.o safer.o safer+.o rc4.o rc2.o rc6.o rc5.o cast5.o noekeon.o blowfish.o crypt.o \ -prime.o twofish.o packet.o hmac.o strings.o $(MPIOBJECT) +prime.o twofish.o packet.o hmac.o strings.o rmd128.o rmd160.o $(MPIOBJECT) TESTOBJECTS=demos/test.o HASHOBJECTS=demos/hashsum.o @@ -98,9 +97,10 @@ aes.o: aes.c aes_tab.c sha512.o: sha512.c sha384.c #This rule makes the libtomcrypt library. -library: $(OBJECTS) - $(AR) $(ARFLAGS) $(LIBNAME) $(OBJECTS) - ranlib $(LIBNAME) +library: $(LIBNAME) + +$(LIBNAME): $(OBJECTS) + $(AR) $(ARFLAGS) $@ $(OBJECTS) #This rule makes the test program included with libtomcrypt test: library $(TESTOBJECTS) diff --git a/makefile.msvc b/makefile.msvc index dde8628..3310ee7 100644 --- a/makefile.msvc +++ b/makefile.msvc @@ -10,7 +10,7 @@ OBJECTS=keyring.obj gf.obj mem.obj sprng.obj ecc.obj base64.obj dh.obj rsa.obj \ bits.obj yarrow.obj cfb.obj ofb.obj ecb.obj ctr.obj cbc.obj hash.obj tiger.obj sha1.obj \ md5.obj md4.obj md2.obj sha256.obj sha512.obj xtea.obj aes.obj des.obj \ safer_tab.obj safer.obj safer+.obj rc4.obj rc2.obj rc6.obj rc5.obj cast5.obj noekeon.obj \ -blowfish.obj crypt.obj mpi.obj prime.obj twofish.obj packet.obj hmac.obj strings.obj +blowfish.obj crypt.obj mpi.obj prime.obj twofish.obj packet.obj hmac.obj strings.obj rmd128.obj rmd160.obj library: $(OBJECTS) lib /out:tomcrypt.lib $(OBJECTS) diff --git a/mpi.c b/mpi.c index 4737ce7..3c139c9 100644 --- a/mpi.c +++ b/mpi.c @@ -1,10 +1,10 @@ -/* Start: bn_fast_mp_invmod.c */ +/* Start: bn_error.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -16,6 +16,51 @@ #include "mycrypt.h" #include +static const struct { + int code; + char *msg; +} msgs[] = { + { MP_OKAY, "Successful" }, + { MP_MEM, "Out of heap" }, + { MP_VAL, "Value out of range" } +}; + +/* return a char * string for a given code */ +char *mp_error_to_string(int code) +{ + int x; + + /* scan the lookup table for the given message */ + for (x = 0; x < (int)(sizeof(msgs) / sizeof(msgs[0])); x++) { + if (msgs[x].code == code) { + return msgs[x].msg; + } + } + + /* generic reply for invalid code */ + return "Invalid error code"; +} + + +/* End: bn_error.c */ + +/* Start: bn_fast_mp_invmod.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was 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 + /* computes the modular inverse via binary extended euclidean algorithm, * that is c = 1/a mod b * @@ -28,6 +73,14 @@ fast_mp_invmod (mp_int * a, mp_int * b, mp_int * c) mp_int x, y, u, v, B, D; int res, neg; + /* 2. [modified] if a,b are both even then return an error! + * + * That is if gcd(a,b) = 2**k * q then obviously there is no inverse. + */ + if (mp_iseven (a) == 1 && mp_iseven (b) == 1) { + return MP_VAL; + } + /* init all our temps */ if ((res = mp_init_multi(&x, &y, &u, &v, &B, &D, NULL)) != MP_OKAY) { return res; @@ -43,15 +96,6 @@ fast_mp_invmod (mp_int * a, mp_int * b, mp_int * c) goto __ERR; } - /* 2. [modified] if x,y are both even then return an error! - * - * That is if gcd(x,y) = 2 * k then obviously there is no inverse. - */ - if (mp_iseven (&x) == 1 && mp_iseven (&y) == 1) { - res = MP_VAL; - goto __ERR; - } - /* 3. u=x, v=y, A=1, B=0, C=0,D=1 */ if ((res = mp_copy (&x, &u)) != MP_OKAY) { goto __ERR; @@ -153,10 +197,10 @@ __ERR:mp_clear_multi (&x, &y, &u, &v, &B, &D, NULL); /* Start: bn_fast_mp_montgomery_reduce.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -191,11 +235,17 @@ fast_mp_montgomery_reduce (mp_int * x, mp_int * n, mp_digit rho) } } + /* first we have to get the digits of the input into + * an array of double precision words W[...] + */ { register mp_word *_W; register mp_digit *tmpx; - _W = W; + /* alias for the W[] array */ + _W = W; + + /* alias for the digits of x*/ tmpx = x->dp; /* copy the digits of a into W[0..a->used-1] */ @@ -209,6 +259,9 @@ fast_mp_montgomery_reduce (mp_int * x, mp_int * n, mp_digit rho) } } + /* now we proceed to zero successive digits + * from the least significant upwards + */ for (ix = 0; ix < n->used; ix++) { /* mu = ai * m' mod b * @@ -254,12 +307,20 @@ fast_mp_montgomery_reduce (mp_int * x, mp_int * n, mp_digit rho) W[ix + 1] += W[ix] >> ((mp_word) DIGIT_BIT); } + /* now we have to propagate the carries and + * shift the words downward [all those least + * significant digits we zeroed]. + */ { register mp_digit *tmpx; register mp_word *_W, *_W1; /* nox fix rest of carries */ + + /* alias for current word */ _W1 = W + ix; + + /* alias for next word, where the carry goes */ _W = W + ++ix; for (; ix <= n->used * 2 + 1; ix++) { @@ -272,7 +333,11 @@ fast_mp_montgomery_reduce (mp_int * x, mp_int * n, mp_digit rho) * array of mp_word to mp_digit than calling mp_rshd * we just copy them in the right order */ + + /* alias for destination word */ tmpx = x->dp; + + /* alias for shifted double precision result */ _W = W + n->used; for (ix = 0; ix < n->used + 1; ix++) { @@ -280,7 +345,8 @@ fast_mp_montgomery_reduce (mp_int * x, mp_int * n, mp_digit rho) } /* zero oldused digits, if the input a was larger than - * m->used+1 we'll have to clear the digits */ + * m->used+1 we'll have to clear the digits + */ for (; ix < olduse; ix++) { *tmpx++ = 0; } @@ -302,10 +368,10 @@ fast_mp_montgomery_reduce (mp_int * x, mp_int * n, mp_digit rho) /* Start: bn_fast_s_mp_mul_digs.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -436,10 +502,10 @@ fast_s_mp_mul_digs (mp_int * a, mp_int * b, mp_int * c, int digs) /* Start: bn_fast_s_mp_mul_high_digs.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -448,7 +514,7 @@ fast_s_mp_mul_digs (mp_int * a, mp_int * b, mp_int * c, int digs) * * Tom St Denis, tomstdenis@iahu.ca, http://math.libtomcrypt.org */ -#include + #include /* this is a modified version of fast_s_mp_mul_digs that only produces * output digits *above* digs. See the comments for fast_s_mp_mul_digs @@ -538,10 +604,10 @@ fast_s_mp_mul_high_digs (mp_int * a, mp_int * b, mp_int * c, int digs) /* Start: bn_fast_s_mp_sqr.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -586,14 +652,14 @@ fast_s_mp_sqr (mp_int * a, mp_int * b) /* zero temp buffer (columns) * Note that there are two buffers. Since squaring requires - * a outter and inner product and the inner product requires + * a outer and inner product and the inner product requires * computing a product and doubling it (a relatively expensive * op to perform n**2 times if you don't have to) the inner and * outer products are computed in different buffers. This way * the inner product can be doubled using n doublings instead of * n**2 */ - memset (W, 0, newused * sizeof (mp_word)); + memset (W, 0, newused * sizeof (mp_word)); memset (W2, 0, newused * sizeof (mp_word)); /* This computes the inner product. To simplify the inner N**2 loop @@ -605,6 +671,7 @@ fast_s_mp_sqr (mp_int * a, mp_int * b) * Note that every outer product is computed * for a particular column only once which means that * there is no need todo a double precision addition + * into the W2[] array. */ W2[ix + ix] = ((mp_word)a->dp[ix]) * ((mp_word)a->dp[ix]); @@ -633,7 +700,12 @@ fast_s_mp_sqr (mp_int * a, mp_int * b) olduse = b->used; b->used = newused; - /* now compute digits */ + /* now compute digits + * + * We have to double the inner product sums, add in the + * outer product sums, propagate carries and convert + * to single precision. + */ { register mp_digit *tmpb; @@ -647,16 +719,21 @@ fast_s_mp_sqr (mp_int * a, mp_int * b) /* double/add next digit */ W[ix] += W[ix] + W2[ix]; + /* propagate carry forwards [from the previous digit] */ W[ix] = W[ix] + (W[ix - 1] >> ((mp_word) DIGIT_BIT)); + + /* store the current digit now that the carry isn't + * needed + */ *tmpb++ = (mp_digit) (W[ix - 1] & ((mp_word) MP_MASK)); } - /* set the last value. Note even if the carry is zero - * this is required since the next step will not zero + /* set the last value. Note even if the carry is zero + * this is required since the next step will not zero * it if b originally had a value at b->dp[2*a.used] */ *tmpb++ = (mp_digit) (W[(newused) - 1] & ((mp_word) MP_MASK)); - /* clear high digits */ + /* clear high digits of b if there were any originally */ for (; ix < olduse; ix++) { *tmpb++ = 0; } @@ -671,10 +748,10 @@ fast_s_mp_sqr (mp_int * a, mp_int * b) /* Start: bn_mp_2expt.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -695,11 +772,18 @@ mp_2expt (mp_int * a, int b) { int res; + /* zero a as per default */ mp_zero (a); + + /* grow a to accomodate the single bit */ if ((res = mp_grow (a, b / DIGIT_BIT + 1)) != MP_OKAY) { return res; } + + /* set the used count of where the bit will go */ a->used = b / DIGIT_BIT + 1; + + /* put the single bit in its place */ a->dp[b / DIGIT_BIT] = 1 << (b % DIGIT_BIT); return MP_OKAY; @@ -710,10 +794,10 @@ mp_2expt (mp_int * a, int b) /* Start: bn_mp_abs.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -732,10 +816,17 @@ int mp_abs (mp_int * a, mp_int * b) { int res; - if ((res = mp_copy (a, b)) != MP_OKAY) { - return res; + + /* copy a to b */ + if (a != b) { + if ((res = mp_copy (a, b)) != MP_OKAY) { + return res; + } } + + /* force the sign of b to positive */ b->sign = MP_ZPOS; + return MP_OKAY; } @@ -744,10 +835,10 @@ mp_abs (mp_int * a, mp_int * b) /* Start: bn_mp_add.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -796,10 +887,10 @@ mp_add (mp_int * a, mp_int * b, mp_int * c) /* Start: bn_mp_add_d.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -838,7 +929,6 @@ mp_add_d (mp_int * a, mp_digit b, mp_int * c) return res; } - /* old number of used digits in c */ oldused = c->used; @@ -872,13 +962,16 @@ mp_add_d (mp_int * a, mp_digit b, mp_int * c) /* set final carry */ ix++; *tmpc++ = mu; - } else { /* a was negative and |a| < b */ c->used = 1; /* the result is a single digit */ - *tmpc++ = b - a->dp[0]; + if (a->used == 1) { + *tmpc++ = b - a->dp[0]; + } else { + *tmpc++ = b; + } /* setup count so the clearing of oldused * can fall through correctly @@ -901,10 +994,10 @@ mp_add_d (mp_int * a, mp_digit b, mp_int * c) /* Start: bn_mp_addmod.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -940,10 +1033,10 @@ mp_addmod (mp_int * a, mp_int * b, mp_int * c, mp_int * d) /* Start: bn_mp_and.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -995,10 +1088,10 @@ mp_and (mp_int * a, mp_int * b, mp_int * c) /* Start: bn_mp_clamp.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -1019,9 +1112,14 @@ mp_and (mp_int * a, mp_int * b, mp_int * c) void mp_clamp (mp_int * a) { + /* decrease used while the most significant digit is + * zero. + */ while (a->used > 0 && a->dp[a->used - 1] == 0) { --(a->used); } + + /* reset the sign flag if used == 0 */ if (a->used == 0) { a->sign = MP_ZPOS; } @@ -1032,10 +1130,10 @@ mp_clamp (mp_int * a) /* Start: bn_mp_clear.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -1050,6 +1148,7 @@ mp_clamp (mp_int * a) void mp_clear (mp_int * a) { + /* only do anything if a hasn't been freed previously */ if (a->dp != NULL) { /* first zero the digits */ memset (a->dp, 0, sizeof (mp_digit) * a->used); @@ -1060,18 +1159,51 @@ mp_clear (mp_int * a) /* reset members to make debugging easier */ a->dp = NULL; a->alloc = a->used = 0; + a->sign = MP_ZPOS; } } /* End: bn_mp_clear.c */ +/* Start: bn_mp_clear_multi.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was 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 +#include + +void mp_clear_multi(mp_int *mp, ...) +{ + mp_int* next_mp = mp; + va_list args; + va_start(args, mp); + while (next_mp != NULL) { + mp_clear(next_mp); + next_mp = va_arg(args, mp_int*); + } + va_end(args); +} + +/* End: bn_mp_clear_multi.c */ + /* Start: bn_mp_cmp.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -1087,12 +1219,12 @@ int mp_cmp (mp_int * a, mp_int * b) { /* compare based on sign */ - if (a->sign == MP_NEG && b->sign == MP_ZPOS) { - return MP_LT; - } - - if (a->sign == MP_ZPOS && b->sign == MP_NEG) { - return MP_GT; + if (a->sign != b->sign) { + if (a->sign == MP_NEG) { + return MP_LT; + } else { + return MP_GT; + } } /* compare digits */ @@ -1109,10 +1241,10 @@ mp_cmp (mp_int * a, mp_int * b) /* Start: bn_mp_cmp_d.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -1127,15 +1259,17 @@ mp_cmp (mp_int * a, mp_int * b) int mp_cmp_d (mp_int * a, mp_digit b) { - + /* compare based on sign */ if (a->sign == MP_NEG) { return MP_LT; } + /* compare based on magnitude */ if (a->used > 1) { return MP_GT; } + /* compare the only digit of a to b */ if (a->dp[0] > b) { return MP_GT; } else if (a->dp[0] < b) { @@ -1150,10 +1284,10 @@ mp_cmp_d (mp_int * a, mp_digit b) /* Start: bn_mp_cmp_mag.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -1169,23 +1303,30 @@ int mp_cmp_mag (mp_int * a, mp_int * b) { int n; + mp_digit *tmpa, *tmpb; /* compare based on # of non-zero digits */ if (a->used > b->used) { return MP_GT; - } + } if (a->used < b->used) { return MP_LT; } + /* alias for a */ + tmpa = a->dp + (a->used - 1); + + /* alias for b */ + tmpb = b->dp + (a->used - 1); + /* compare based on digits */ - for (n = a->used - 1; n >= 0; n--) { - if (a->dp[n] > b->dp[n]) { + for (n = 0; n < a->used; ++n, --tmpa, --tmpb) { + if (*tmpa > *tmpb) { return MP_GT; - } - - if (a->dp[n] < b->dp[n]) { + } + + if (*tmpa < *tmpb) { return MP_LT; } } @@ -1197,10 +1338,10 @@ mp_cmp_mag (mp_int * a, mp_int * b) /* Start: bn_mp_cnt_lsb.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -1217,6 +1358,7 @@ int mp_cnt_lsb(mp_int *a) int x; mp_digit q; + /* easy out */ if (mp_iszero(a) == 1) { return 0; } @@ -1241,10 +1383,10 @@ int mp_cnt_lsb(mp_int *a) /* Start: bn_mp_copy.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -1267,8 +1409,10 @@ mp_copy (mp_int * a, mp_int * b) } /* grow dest */ - if ((res = mp_grow (b, a->used)) != MP_OKAY) { - return res; + if (b->alloc < a->used) { + if ((res = mp_grow (b, a->used)) != MP_OKAY) { + return res; + } } /* zero b and copy the parameters over */ @@ -1276,7 +1420,11 @@ mp_copy (mp_int * a, mp_int * b) register mp_digit *tmpa, *tmpb; /* pointer aliases */ + + /* source */ tmpa = a->dp; + + /* destination */ tmpb = b->dp; /* copy all the digits */ @@ -1289,6 +1437,8 @@ mp_copy (mp_int * a, mp_int * b) *tmpb++ = 0; } } + + /* copy used count and sign */ b->used = a->used; b->sign = a->sign; return MP_OKAY; @@ -1299,10 +1449,10 @@ mp_copy (mp_int * a, mp_int * b) /* Start: bn_mp_count_bits.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -1342,10 +1492,10 @@ mp_count_bits (mp_int * a) /* Start: bn_mp_div.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -1453,8 +1603,9 @@ 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.used) + 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 */ @@ -1557,10 +1708,10 @@ __Q:mp_clear (&q); /* Start: bn_mp_div_2.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -1624,10 +1775,10 @@ mp_div_2 (mp_int * a, mp_int * b) /* Start: bn_mp_div_2d.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -1720,10 +1871,10 @@ mp_div_2d (mp_int * a, int b, mp_int * c, mp_int * d) /* Start: bn_mp_div_3.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -1755,10 +1906,17 @@ mp_div_3 (mp_int * a, mp_int *c, mp_digit * d) w = 0; for (ix = a->used - 1; ix >= 0; ix--) { w = (w << ((mp_word)DIGIT_BIT)) | ((mp_word)a->dp[ix]); - + if (w >= 3) { + /* multiply w by [1/3] */ t = (w * ((mp_word)b)) >> ((mp_word)DIGIT_BIT); + + /* now subtract 3 * [w/3] from w, to get the remainder */ w -= (t << ((mp_word)1)) + t; + + /* fixup the remainder as required since + * the optimization is not exact. + */ while (w >= 3) { t += 1; w -= 3; @@ -1768,11 +1926,13 @@ mp_div_3 (mp_int * a, mp_int *c, mp_digit * d) } q.dp[ix] = (mp_digit)t; } - + + /* [optional] store the remainder */ if (d != NULL) { *d = (mp_digit)w; } - + + /* [optional] store the quotient */ if (c != NULL) { mp_clamp(&q); mp_exch(&q, c); @@ -1788,10 +1948,10 @@ mp_div_3 (mp_int * a, mp_int *c, mp_digit * d) /* Start: bn_mp_div_d.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -1895,10 +2055,10 @@ mp_div_d (mp_int * a, mp_digit b, mp_int * c, mp_digit * d) /* Start: bn_mp_dr_is_modulus.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -1919,6 +2079,9 @@ int mp_dr_is_modulus(mp_int *a) return 0; } + /* must be of the form b**k - a [a <= b] so all + * but the first digit must be equal to -1 (mod b). + */ for (ix = 1; ix < a->used; ix++) { if (a->dp[ix] != MP_MASK) { return 0; @@ -1933,10 +2096,10 @@ int mp_dr_is_modulus(mp_int *a) /* Start: bn_mp_dr_reduce.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -1958,6 +2121,8 @@ int mp_dr_is_modulus(mp_int *a) * The modulus must be of a special format [see manual] * * Has been modified to use algorithm 7.10 from the LTM book instead + * + * Input x must be in the range 0 <= x <= (n-1)^2 */ int mp_dr_reduce (mp_int * x, mp_int * n, mp_digit k) @@ -1990,16 +2155,16 @@ top: /* set carry to zero */ mu = 0; - /* compute (x mod B**m) + mp * [x/B**m] inline and inplace */ + /* compute (x mod B**m) + k * [x/B**m] inline and inplace */ for (i = 0; i < m; i++) { r = ((mp_word)*tmpx2++) * ((mp_word)k) + *tmpx1 + mu; *tmpx1++ = (mp_digit)(r & MP_MASK); mu = (mp_digit)(r >> ((mp_word)DIGIT_BIT)); } - + /* set final carry */ *tmpx1++ = mu; - + /* zero words above m */ for (i = m + 1; i < x->used; i++) { *tmpx1++ = 0; @@ -2023,10 +2188,10 @@ top: /* Start: bn_mp_dr_setup.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -2053,10 +2218,10 @@ void mp_dr_setup(mp_int *a, mp_digit *d) /* Start: bn_mp_exch.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -2075,7 +2240,7 @@ mp_exch (mp_int * a, mp_int * b) { mp_int t; - t = *a; + t = *a; *a = *b; *b = t; } @@ -2085,10 +2250,10 @@ mp_exch (mp_int * a, mp_int * b) /* Start: bn_mp_expt_d.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -2141,10 +2306,10 @@ mp_expt_d (mp_int * a, mp_digit b, mp_int * c) /* Start: bn_mp_exptmod.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -2201,7 +2366,10 @@ mp_exptmod (mp_int * G, mp_int * X, mp_int * P, mp_int * Y) return err; } + /* is it a DR modulus? */ dr = mp_dr_is_modulus(P); + + /* if not, is it a uDR modulus? */ if (dr == 0) { dr = mp_reduce_is_2k(P) << 1; } @@ -2210,6 +2378,7 @@ mp_exptmod (mp_int * G, mp_int * X, mp_int * P, mp_int * Y) if (mp_isodd (P) == 1 || dr != 0) { return mp_exptmod_fast (G, X, P, Y, dr); } else { + /* otherwise use the generic Barrett reduction technique */ return s_mp_exptmod (G, X, P, Y); } } @@ -2220,10 +2389,10 @@ mp_exptmod (mp_int * G, mp_int * X, mp_int * P, mp_int * Y) /* Start: bn_mp_exptmod_fast.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -2314,15 +2483,15 @@ mp_exptmod_fast (mp_int * G, mp_int * X, mp_int * P, mp_int * Y, int redmode) P->used < (1 << ((CHAR_BIT * sizeof (mp_word)) - (2 * DIGIT_BIT)))) { redux = fast_mp_montgomery_reduce; } else { - /* use slower baselien method */ + /* use slower baseline Montgomery method */ redux = mp_montgomery_reduce; } } else if (redmode == 1) { - /* setup DR reduction */ + /* setup DR reduction for moduli of the form B**k - b */ mp_dr_setup(P, &mp); redux = mp_dr_reduce; } else { - /* setup 2k reduction */ + /* setup DR reduction for moduli of the form 2**k - b */ if ((err = mp_reduce_2k_setup(P, &mp)) != MP_OKAY) { goto __M; } @@ -2331,7 +2500,7 @@ mp_exptmod_fast (mp_int * G, mp_int * X, mp_int * P, mp_int * Y, int redmode) /* setup result */ if ((err = mp_init (&res)) != MP_OKAY) { - goto __RES; + goto __M; } /* create M table @@ -2393,15 +2562,17 @@ mp_exptmod_fast (mp_int * G, mp_int * X, mp_int * P, mp_int * Y, int redmode) for (;;) { /* grab next digit as required */ if (--bitcnt == 0) { + /* if digidx == -1 we are out of digits so break */ if (digidx == -1) { break; } - buf = X->dp[digidx--]; - bitcnt = (int) DIGIT_BIT; + /* read next digit and reset bitcnt */ + buf = X->dp[digidx--]; + bitcnt = (int)DIGIT_BIT; } /* grab the next msb from the exponent */ - y = (mp_digit)(buf >> (DIGIT_BIT - 1)) & 1; + y = (mp_digit)(buf >> (DIGIT_BIT - 1)) & 1; buf <<= (mp_digit)1; /* if the bit is zero and mode == 0 then we ignore it @@ -2426,7 +2597,7 @@ mp_exptmod_fast (mp_int * G, mp_int * X, mp_int * P, mp_int * Y, int redmode) /* else we add it to the window */ bitbuf |= (y << (winsize - ++bitcpy)); - mode = 2; + mode = 2; if (bitcpy == winsize) { /* ok window is filled so square as required and multiply */ @@ -2451,7 +2622,7 @@ mp_exptmod_fast (mp_int * G, mp_int * X, mp_int * P, mp_int * Y, int redmode) /* empty window and reset */ bitcpy = 0; bitbuf = 0; - mode = 1; + mode = 1; } } @@ -2466,6 +2637,7 @@ mp_exptmod_fast (mp_int * G, mp_int * X, mp_int * P, mp_int * Y, int redmode) goto __RES; } + /* get next bit of the window */ bitbuf <<= 1; if ((bitbuf & (1 << winsize)) != 0) { /* then multiply */ @@ -2480,12 +2652,18 @@ mp_exptmod_fast (mp_int * G, mp_int * X, mp_int * P, mp_int * Y, int redmode) } if (redmode == 0) { - /* fixup result if Montgomery reduction is used */ + /* fixup result if Montgomery reduction is used + * recall that any value in a Montgomery system is + * actually multiplied by R mod n. So we have + * to reduce one more time to cancel out the factor + * of R. + */ if ((err = mp_montgomery_reduce (&res, P, mp)) != MP_OKAY) { goto __RES; } } + /* swap res with Y */ mp_exch (&res, Y); err = MP_OKAY; __RES:mp_clear (&res); @@ -2502,10 +2680,10 @@ __M: /* Start: bn_mp_fread.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -2567,10 +2745,10 @@ int mp_fread(mp_int *a, int radix, FILE *stream) /* Start: bn_mp_fwrite.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -2590,25 +2768,25 @@ int mp_fwrite(mp_int *a, int radix, FILE *stream) if (len == 0) { return MP_VAL; } - + buf = XMALLOC(len); if (buf == NULL) { return MP_MEM; } if ((err = mp_toradix(a, buf, radix)) != MP_OKAY) { - XFREE(buf); + free(buf); return err; } for (x = 0; x < len; x++) { if (fputc(buf[x], stream) == EOF) { - XFREE(buf); + free(buf); return MP_VAL; } } - XFREE(buf); + free(buf); return MP_OKAY; } @@ -2618,10 +2796,10 @@ int mp_fwrite(mp_int *a, int radix, FILE *stream) /* Start: bn_mp_gcd.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -2641,16 +2819,21 @@ mp_gcd (mp_int * a, mp_int * b, mp_int * c) /* either zero than gcd is the largest */ if (mp_iszero (a) == 1 && mp_iszero (b) == 0) { - return mp_copy (b, c); + return mp_abs (b, c); } if (mp_iszero (a) == 0 && mp_iszero (b) == 1) { - return mp_copy (a, c); + return mp_abs (a, c); } - if (mp_iszero (a) == 1 && mp_iszero (b) == 1) { + + /* optimized. At this point if a == 0 then + * b must equal zero too + */ + if (mp_iszero (a) == 1) { mp_zero(c); return MP_OKAY; } + /* get copies of a and b we can modify */ if ((res = mp_init_copy (&u, a)) != MP_OKAY) { return res; } @@ -2667,12 +2850,15 @@ mp_gcd (mp_int * a, mp_int * b, mp_int * c) v_lsb = mp_cnt_lsb(&v); k = MIN(u_lsb, v_lsb); - if ((res = mp_div_2d(&u, k, &u, NULL)) != MP_OKAY) { - goto __V; - } + if (k > 0) { + /* divide the power of two out */ + if ((res = mp_div_2d(&u, k, &u, NULL)) != MP_OKAY) { + goto __V; + } - if ((res = mp_div_2d(&v, k, &v, NULL)) != MP_OKAY) { - goto __V; + if ((res = mp_div_2d(&v, k, &v, NULL)) != MP_OKAY) { + goto __V; + } } /* divide any remaining factors of two out */ @@ -2687,10 +2873,11 @@ mp_gcd (mp_int * a, mp_int * b, mp_int * c) goto __V; } } - + while (mp_iszero(&v) == 0) { /* make sure v is the largest */ if (mp_cmp_mag(&u, &v) == MP_GT) { + /* swap u and v to make sure v is >= u */ mp_exch(&u, &v); } @@ -2704,10 +2891,10 @@ mp_gcd (mp_int * a, mp_int * b, mp_int * c) goto __V; } } - - /* multiply by 2**k which we divided out at the beginning */ + + /* multiply by 2**k which we divided out at the beginning */ if ((res = mp_mul_2d (&u, k, c)) != MP_OKAY) { - goto __V; + goto __V; } c->sign = MP_ZPOS; res = MP_OKAY; @@ -2721,10 +2908,10 @@ __U:mp_clear (&v); /* Start: bn_mp_grow.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -2744,7 +2931,7 @@ mp_grow (mp_int * a, int size) /* if the alloc size is smaller alloc more ram */ if (a->alloc < size) { /* ensure there are always at least MP_PREC digits extra on top */ - size += (MP_PREC * 2) - (size & (MP_PREC - 1)); + size += (MP_PREC * 2) - (size % MP_PREC); a->dp = OPT_CAST XREALLOC (a->dp, sizeof (mp_digit) * size); if (a->dp == NULL) { @@ -2766,11 +2953,11 @@ mp_grow (mp_int * a, int size) /* Start: bn_mp_init.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides 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 + * The library was 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 @@ -2784,7 +2971,7 @@ mp_grow (mp_int * a, int size) int mp_init (mp_int * a) { - /* allocate ram required and clear it */ + /* allocate memory required and clear it */ a->dp = OPT_CAST calloc (sizeof (mp_digit), MP_PREC); if (a->dp == NULL) { return MP_MEM; @@ -2804,10 +2991,10 @@ mp_init (mp_int * a) /* Start: bn_mp_init_copy.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -2832,13 +3019,70 @@ mp_init_copy (mp_int * a, mp_int * b) /* End: bn_mp_init_copy.c */ +/* Start: bn_mp_init_multi.c */ +/* LibTomMath, multiple-precision integer library -- Tom St Denis + * + * LibTomMath is a library that provides multiple-precision + * integer arithmetic as well as number theoretic functionality. + * + * The library was 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 +#include + +int mp_init_multi(mp_int *mp, ...) +{ + mp_err res = MP_OKAY; /* Assume ok until proven otherwise */ + int n = 0; /* Number of ok inits */ + mp_int* cur_arg = mp; + va_list args; + + va_start(args, mp); /* init args to next argument from caller */ + while (cur_arg != NULL) { + if (mp_init(cur_arg) != MP_OKAY) { + /* Oops - error! Back-track and mp_clear what we already + succeeded in init-ing, then return error. + */ + va_list clean_args; + + /* end the current list */ + va_end(args); + + /* now start cleaning up */ + cur_arg = mp; + va_start(clean_args, mp); + while (n--) { + mp_clear(cur_arg); + cur_arg = va_arg(clean_args, mp_int*); + } + va_end(clean_args); + res = MP_MEM; + break; + } + n++; + cur_arg = va_arg(args, mp_int*); + } + va_end(args); + return res; /* Assumed ok, if error flagged above. */ +} + + +/* End: bn_mp_init_multi.c */ + /* Start: bn_mp_init_size.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -2849,22 +3093,21 @@ mp_init_copy (mp_int * a, mp_int * b) */ #include -/* init a mp_init and grow it to a given size */ +/* init an mp_init for a given size */ int mp_init_size (mp_int * a, int size) { - /* pad size so there are always extra digits */ - size += (MP_PREC * 2) - (size & (MP_PREC - 1)); + size += (MP_PREC * 2) - (size % MP_PREC); /* alloc mem */ a->dp = OPT_CAST calloc (sizeof (mp_digit), size); if (a->dp == NULL) { return MP_MEM; } - a->used = 0; + a->used = 0; a->alloc = size; - a->sign = MP_ZPOS; + a->sign = MP_ZPOS; return MP_OKAY; } @@ -2874,10 +3117,10 @@ mp_init_size (mp_int * a, int size) /* Start: bn_mp_invmod.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -3053,10 +3296,10 @@ __ERR:mp_clear_multi (&x, &y, &u, &v, &A, &B, &C, &D, NULL); /* Start: bn_mp_jacobi.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -3077,6 +3320,11 @@ mp_jacobi (mp_int * a, mp_int * p, int *c) int k, s, r, res; mp_digit residue; + /* if p <= 0 return MP_VAL */ + if (mp_cmp_d(p, 0) != MP_GT) { + return MP_VAL; + } + /* step 1. if a == 0, return 0 */ if (mp_iszero (a) == 1) { *c = 0; @@ -3090,7 +3338,7 @@ mp_jacobi (mp_int * a, mp_int * p, int *c) } /* default */ - k = s = 0; + s = 0; /* step 3. write a = a1 * 2**k */ if ((res = mp_init_copy (&a1, a)) != MP_OKAY) { @@ -3101,11 +3349,10 @@ mp_jacobi (mp_int * a, mp_int * p, int *c) goto __A1; } - while (mp_iseven (&a1) == 1) { - k = k + 1; - if ((res = mp_div_2 (&a1, &a1)) != MP_OKAY) { - goto __P1; - } + /* divide out larger power of two */ + k = mp_cnt_lsb(&a1); + if ((res = mp_div_2d(&a1, k, &a1, NULL)) != MP_OKAY) { + goto __P1; } /* step 4. if e is even set s=1 */ @@ -3153,10 +3400,10 @@ __A1:mp_clear (&a1); /* Start: bn_mp_karatsuba_mul.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -3322,10 +3569,10 @@ ERR: /* Start: bn_mp_karatsuba_sqr.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -3442,10 +3689,10 @@ ERR: /* Start: bn_mp_lcm.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -3456,30 +3703,43 @@ ERR: */ #include -/* computes least common multiple as a*b/(a, b) */ +/* computes least common multiple as |a*b|/(a, b) */ int mp_lcm (mp_int * a, mp_int * b, mp_int * c) { int res; - mp_int t; + mp_int t1, t2; - if ((res = mp_init (&t)) != MP_OKAY) { + if ((res = mp_init_multi (&t1, &t2, NULL)) != MP_OKAY) { return res; } - if ((res = mp_mul (a, b, &t)) != MP_OKAY) { - mp_clear (&t); - return res; + /* t1 = get the GCD of the two inputs */ + if ((res = mp_gcd (a, b, &t1)) != MP_OKAY) { + goto __T; } - if ((res = mp_gcd (a, b, c)) != MP_OKAY) { - mp_clear (&t); - return res; + /* divide the smallest by the GCD */ + if (mp_cmp_mag(a, b) == MP_LT) { + /* store quotient in t2 such that t2 * b is the LCM */ + if ((res = mp_div(a, &t1, &t2, NULL)) != MP_OKAY) { + goto __T; + } + res = mp_mul(b, &t2, c); + } else { + /* store quotient in t2 such that t2 * a is the LCM */ + if ((res = mp_div(b, &t1, &t2, NULL)) != MP_OKAY) { + goto __T; + } + res = mp_mul(a, &t2, c); } - res = mp_div (&t, c, c, NULL); - mp_clear (&t); + /* fix the sign to positive */ + c->sign = MP_ZPOS; + +__T: + mp_clear_multi (&t1, &t2, NULL); return res; } @@ -3488,10 +3748,10 @@ mp_lcm (mp_int * a, mp_int * b, mp_int * c) /* Start: bn_mp_lshd.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -3554,10 +3814,10 @@ mp_lshd (mp_int * a, int b) /* Start: bn_mp_mod.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -3601,10 +3861,10 @@ mp_mod (mp_int * a, mp_int * b, mp_int * c) /* Start: bn_mp_mod_2d.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -3621,7 +3881,6 @@ mp_mod_2d (mp_int * a, int b, mp_int * c) { int x, res; - /* if b is <= 0 then zero the int */ if (b <= 0) { mp_zero (c); @@ -3655,10 +3914,10 @@ mp_mod_2d (mp_int * a, int b, mp_int * c) /* Start: bn_mp_mod_d.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -3680,10 +3939,10 @@ mp_mod_d (mp_int * a, mp_digit b, mp_digit * c) /* Start: bn_mp_montgomery_calc_normalization.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -3737,10 +3996,10 @@ mp_montgomery_calc_normalization (mp_int * a, mp_int * b) /* Start: bn_mp_montgomery_reduce.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -3780,7 +4039,14 @@ mp_montgomery_reduce (mp_int * x, mp_int * n, mp_digit rho) x->used = digs; for (ix = 0; ix < n->used; ix++) { - /* mu = ai * m' mod b */ + /* mu = ai * rho mod b + * + * The value of rho must be precalculated via + * bn_mp_montgomery_setup() such that + * it equals -1/n0 mod b this allows the + * following inner loop to reduce the + * input one digit at a time + */ mu = ((mp_word)x->dp[ix]) * ((mp_word)rho) & MP_MASK; /* a = a + mu * m * b**i */ @@ -3789,8 +4055,10 @@ mp_montgomery_reduce (mp_int * x, mp_int * n, mp_digit rho) register mp_digit *tmpn, *tmpx, u; register mp_word r; - /* aliases */ + /* alias for digits of the modulus */ tmpn = n->dp; + + /* alias for the digits of x [the input] */ tmpx = x->dp + ix; /* set the carry to zero */ @@ -3798,12 +4066,20 @@ mp_montgomery_reduce (mp_int * x, mp_int * n, mp_digit rho) /* Multiply and add in place */ for (iy = 0; iy < n->used; iy++) { + /* compute product and sum */ r = ((mp_word)mu) * ((mp_word)*tmpn++) + ((mp_word) u) + ((mp_word) * tmpx); + + /* get carry */ u = (mp_digit)(r >> ((mp_word) DIGIT_BIT)); + + /* fix digit */ *tmpx++ = (mp_digit)(r & ((mp_word) MP_MASK)); } - /* propagate carries */ + /* At this point the ix'th digit of x should be zero */ + + + /* propagate carries upwards as required*/ while (u) { *tmpx += u; u = *tmpx >> DIGIT_BIT; @@ -3812,11 +4088,18 @@ mp_montgomery_reduce (mp_int * x, mp_int * n, mp_digit rho) } } + /* at this point the n.used'th least + * significant digits of x are all zero + * which means we can shift x to the + * right by n.used digits and the + * residue is unchanged. + */ + /* x = x/b**n.used */ mp_clamp(x); mp_rshd (x, n->used); - /* if A >= m then A = A - m */ + /* if x >= n then x = x - n */ if (mp_cmp_mag (x, n) != MP_LT) { return s_mp_sub (x, n, x); } @@ -3829,10 +4112,10 @@ mp_montgomery_reduce (mp_int * x, mp_int * n, mp_digit rho) /* Start: bn_mp_montgomery_setup.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -3886,10 +4169,10 @@ mp_montgomery_setup (mp_int * n, mp_digit * rho) /* Start: bn_mp_mul.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -3906,13 +4189,14 @@ mp_mul (mp_int * a, mp_int * b, mp_int * c) { int res, neg; neg = (a->sign == b->sign) ? MP_ZPOS : MP_NEG; - + + /* use Toom-Cook? */ if (MIN (a->used, b->used) >= TOOM_MUL_CUTOFF) { res = mp_toom_mul(a, b, c); + /* use Karatsuba? */ } else if (MIN (a->used, b->used) >= KARATSUBA_MUL_CUTOFF) { res = mp_karatsuba_mul (a, b, c); } else { - /* can we use the fast multiplier? * * The fast multiplier can be used if the output will @@ -3939,10 +4223,10 @@ mp_mul (mp_int * a, mp_int * b, mp_int * c) /* Start: bn_mp_mul_2.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -4000,7 +4284,7 @@ mp_mul_2 (mp_int * a, mp_int * b) if (r != 0) { /* add a MSB which is always 1 at this point */ *tmpb = 1; - ++b->used; + ++(b->used); } /* now zero any excess digits on the destination @@ -4020,10 +4304,10 @@ mp_mul_2 (mp_int * a, mp_int * b) /* Start: bn_mp_mul_2d.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -4092,7 +4376,7 @@ mp_mul_2d (mp_int * a, int b, mp_int * c) /* set final carry */ if (r != 0) { - c->dp[c->used++] = r; + c->dp[(c->used)++] = r; } } mp_clamp (c); @@ -4104,10 +4388,10 @@ mp_mul_2d (mp_int * a, int b, mp_int * c) /* Start: bn_mp_mul_d.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -4180,10 +4464,10 @@ mp_mul_d (mp_int * a, mp_digit b, mp_int * c) /* Start: bn_mp_mulmod.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -4217,81 +4501,13 @@ mp_mulmod (mp_int * a, mp_int * b, mp_int * c, mp_int * d) /* End: bn_mp_mulmod.c */ -/* Start: bn_mp_multi.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 -#include - -int mp_init_multi(mp_int *mp, ...) -{ - mp_err res = MP_OKAY; /* Assume ok until proven otherwise */ - int n = 0; /* Number of ok inits */ - mp_int* cur_arg = mp; - va_list args; - - va_start(args, mp); /* init args to next argument from caller */ - while (cur_arg != NULL) { - if (mp_init(cur_arg) != MP_OKAY) { - /* Oops - error! Back-track and mp_clear what we already - succeeded in init-ing, then return error. - */ - va_list clean_args; - - /* end the current list */ - va_end(args); - - /* now start cleaning up */ - cur_arg = mp; - va_start(clean_args, mp); - while (n--) { - mp_clear(cur_arg); - cur_arg = va_arg(clean_args, mp_int*); - } - va_end(clean_args); - res = MP_MEM; - break; - } - n++; - cur_arg = va_arg(args, mp_int*); - } - va_end(args); - return res; /* Assumed ok, if error flagged above. */ -} - -void mp_clear_multi(mp_int *mp, ...) -{ - mp_int* next_mp = mp; - va_list args; - va_start(args, mp); - while (next_mp != NULL) { - mp_clear(next_mp); - next_mp = va_arg(args, mp_int*); - } - va_end(args); -} - -/* End: bn_mp_multi.c */ - /* Start: bn_mp_n_root.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -4336,7 +4552,7 @@ mp_n_root (mp_int * a, mp_digit b, mp_int * c) } /* if a is negative fudge the sign but keep track */ - neg = a->sign; + neg = a->sign; a->sign = MP_ZPOS; /* t2 = 2 */ @@ -4419,10 +4635,10 @@ __T1:mp_clear (&t1); /* Start: bn_mp_neg.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -4441,7 +4657,9 @@ mp_neg (mp_int * a, mp_int * b) if ((res = mp_copy (a, b)) != MP_OKAY) { return res; } - b->sign = (a->sign == MP_ZPOS) ? MP_NEG : MP_ZPOS; + if (mp_iszero(b) != 1) { + b->sign = (a->sign == MP_ZPOS) ? MP_NEG : MP_ZPOS; + } return MP_OKAY; } @@ -4450,10 +4668,10 @@ mp_neg (mp_int * a, mp_int * b) /* Start: bn_mp_or.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -4499,10 +4717,10 @@ mp_or (mp_int * a, mp_int * b, mp_int * c) /* Start: bn_mp_prime_fermat.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -4527,7 +4745,7 @@ mp_prime_fermat (mp_int * a, mp_int * b, int *result) mp_int t; int err; - /* default to fail */ + /* default to composite */ *result = 0; /* ensure b > 1 */ @@ -4560,10 +4778,10 @@ __T:mp_clear (&t); /* Start: bn_mp_prime_is_divisible.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -4609,10 +4827,10 @@ mp_prime_is_divisible (mp_int * a, int *result) /* Start: bn_mp_prime_is_prime.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -4691,10 +4909,10 @@ __B:mp_clear (&b); /* Start: bn_mp_prime_miller_rabin.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -4793,10 +5011,10 @@ __N1:mp_clear (&n1); /* Start: bn_mp_prime_next_prime.c */ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -4824,9 +5042,7 @@ int mp_prime_next_prime(mp_int *a, int t, int bbs_style) } /* force positive */ - if (a->sign == MP_NEG) { - a->sign = MP_ZPOS; - } + a->sign = MP_ZPOS; /* simple algo if a is less than the largest prime in the table */ if (mp_cmp_d(a, __prime_tab[PRIME_SIZE-1]) == MP_LT) { @@ -4930,8 +5146,8 @@ int mp_prime_next_prime(mp_int *a, int t, int bbs_style) goto __ERR; } - /* if step == MAX then skip test */ - if (step >= ((((mp_digit)1)<= ((((mp_digit)1)<rmd128.buf + (4 * i)); + } + + /* load state */ + aa = aaa = md->rmd128.state[0]; + bb = bbb = md->rmd128.state[1]; + cc = ccc = md->rmd128.state[2]; + dd = ddd = md->rmd128.state[3]; + + /* round 1 */ + FF(aa, bb, cc, dd, X[ 0], 11); + FF(dd, aa, bb, cc, X[ 1], 14); + FF(cc, dd, aa, bb, X[ 2], 15); + FF(bb, cc, dd, aa, X[ 3], 12); + FF(aa, bb, cc, dd, X[ 4], 5); + FF(dd, aa, bb, cc, X[ 5], 8); + FF(cc, dd, aa, bb, X[ 6], 7); + FF(bb, cc, dd, aa, X[ 7], 9); + FF(aa, bb, cc, dd, X[ 8], 11); + FF(dd, aa, bb, cc, X[ 9], 13); + FF(cc, dd, aa, bb, X[10], 14); + FF(bb, cc, dd, aa, X[11], 15); + FF(aa, bb, cc, dd, X[12], 6); + FF(dd, aa, bb, cc, X[13], 7); + FF(cc, dd, aa, bb, X[14], 9); + FF(bb, cc, dd, aa, X[15], 8); + + /* round 2 */ + GG(aa, bb, cc, dd, X[ 7], 7); + GG(dd, aa, bb, cc, X[ 4], 6); + GG(cc, dd, aa, bb, X[13], 8); + GG(bb, cc, dd, aa, X[ 1], 13); + GG(aa, bb, cc, dd, X[10], 11); + GG(dd, aa, bb, cc, X[ 6], 9); + GG(cc, dd, aa, bb, X[15], 7); + GG(bb, cc, dd, aa, X[ 3], 15); + GG(aa, bb, cc, dd, X[12], 7); + GG(dd, aa, bb, cc, X[ 0], 12); + GG(cc, dd, aa, bb, X[ 9], 15); + GG(bb, cc, dd, aa, X[ 5], 9); + GG(aa, bb, cc, dd, X[ 2], 11); + GG(dd, aa, bb, cc, X[14], 7); + GG(cc, dd, aa, bb, X[11], 13); + GG(bb, cc, dd, aa, X[ 8], 12); + + /* round 3 */ + HH(aa, bb, cc, dd, X[ 3], 11); + HH(dd, aa, bb, cc, X[10], 13); + HH(cc, dd, aa, bb, X[14], 6); + HH(bb, cc, dd, aa, X[ 4], 7); + HH(aa, bb, cc, dd, X[ 9], 14); + HH(dd, aa, bb, cc, X[15], 9); + HH(cc, dd, aa, bb, X[ 8], 13); + HH(bb, cc, dd, aa, X[ 1], 15); + HH(aa, bb, cc, dd, X[ 2], 14); + HH(dd, aa, bb, cc, X[ 7], 8); + HH(cc, dd, aa, bb, X[ 0], 13); + HH(bb, cc, dd, aa, X[ 6], 6); + HH(aa, bb, cc, dd, X[13], 5); + HH(dd, aa, bb, cc, X[11], 12); + HH(cc, dd, aa, bb, X[ 5], 7); + HH(bb, cc, dd, aa, X[12], 5); + + /* round 4 */ + II(aa, bb, cc, dd, X[ 1], 11); + II(dd, aa, bb, cc, X[ 9], 12); + II(cc, dd, aa, bb, X[11], 14); + II(bb, cc, dd, aa, X[10], 15); + II(aa, bb, cc, dd, X[ 0], 14); + II(dd, aa, bb, cc, X[ 8], 15); + II(cc, dd, aa, bb, X[12], 9); + II(bb, cc, dd, aa, X[ 4], 8); + II(aa, bb, cc, dd, X[13], 9); + II(dd, aa, bb, cc, X[ 3], 14); + II(cc, dd, aa, bb, X[ 7], 5); + II(bb, cc, dd, aa, X[15], 6); + II(aa, bb, cc, dd, X[14], 8); + II(dd, aa, bb, cc, X[ 5], 6); + II(cc, dd, aa, bb, X[ 6], 5); + II(bb, cc, dd, aa, X[ 2], 12); + + /* parallel round 1 */ + III(aaa, bbb, ccc, ddd, X[ 5], 8); + III(ddd, aaa, bbb, ccc, X[14], 9); + III(ccc, ddd, aaa, bbb, X[ 7], 9); + III(bbb, ccc, ddd, aaa, X[ 0], 11); + III(aaa, bbb, ccc, ddd, X[ 9], 13); + III(ddd, aaa, bbb, ccc, X[ 2], 15); + III(ccc, ddd, aaa, bbb, X[11], 15); + III(bbb, ccc, ddd, aaa, X[ 4], 5); + III(aaa, bbb, ccc, ddd, X[13], 7); + III(ddd, aaa, bbb, ccc, X[ 6], 7); + III(ccc, ddd, aaa, bbb, X[15], 8); + III(bbb, ccc, ddd, aaa, X[ 8], 11); + III(aaa, bbb, ccc, ddd, X[ 1], 14); + III(ddd, aaa, bbb, ccc, X[10], 14); + III(ccc, ddd, aaa, bbb, X[ 3], 12); + III(bbb, ccc, ddd, aaa, X[12], 6); + + /* parallel round 2 */ + HHH(aaa, bbb, ccc, ddd, X[ 6], 9); + HHH(ddd, aaa, bbb, ccc, X[11], 13); + HHH(ccc, ddd, aaa, bbb, X[ 3], 15); + HHH(bbb, ccc, ddd, aaa, X[ 7], 7); + HHH(aaa, bbb, ccc, ddd, X[ 0], 12); + HHH(ddd, aaa, bbb, ccc, X[13], 8); + HHH(ccc, ddd, aaa, bbb, X[ 5], 9); + HHH(bbb, ccc, ddd, aaa, X[10], 11); + HHH(aaa, bbb, ccc, ddd, X[14], 7); + HHH(ddd, aaa, bbb, ccc, X[15], 7); + HHH(ccc, ddd, aaa, bbb, X[ 8], 12); + HHH(bbb, ccc, ddd, aaa, X[12], 7); + HHH(aaa, bbb, ccc, ddd, X[ 4], 6); + HHH(ddd, aaa, bbb, ccc, X[ 9], 15); + HHH(ccc, ddd, aaa, bbb, X[ 1], 13); + HHH(bbb, ccc, ddd, aaa, X[ 2], 11); + + /* parallel round 3 */ + GGG(aaa, bbb, ccc, ddd, X[15], 9); + GGG(ddd, aaa, bbb, ccc, X[ 5], 7); + GGG(ccc, ddd, aaa, bbb, X[ 1], 15); + GGG(bbb, ccc, ddd, aaa, X[ 3], 11); + GGG(aaa, bbb, ccc, ddd, X[ 7], 8); + GGG(ddd, aaa, bbb, ccc, X[14], 6); + GGG(ccc, ddd, aaa, bbb, X[ 6], 6); + GGG(bbb, ccc, ddd, aaa, X[ 9], 14); + GGG(aaa, bbb, ccc, ddd, X[11], 12); + GGG(ddd, aaa, bbb, ccc, X[ 8], 13); + GGG(ccc, ddd, aaa, bbb, X[12], 5); + GGG(bbb, ccc, ddd, aaa, X[ 2], 14); + GGG(aaa, bbb, ccc, ddd, X[10], 13); + GGG(ddd, aaa, bbb, ccc, X[ 0], 13); + GGG(ccc, ddd, aaa, bbb, X[ 4], 7); + GGG(bbb, ccc, ddd, aaa, X[13], 5); + + /* parallel round 4 */ + FFF(aaa, bbb, ccc, ddd, X[ 8], 15); + FFF(ddd, aaa, bbb, ccc, X[ 6], 5); + FFF(ccc, ddd, aaa, bbb, X[ 4], 8); + FFF(bbb, ccc, ddd, aaa, X[ 1], 11); + FFF(aaa, bbb, ccc, ddd, X[ 3], 14); + FFF(ddd, aaa, bbb, ccc, X[11], 14); + FFF(ccc, ddd, aaa, bbb, X[15], 6); + FFF(bbb, ccc, ddd, aaa, X[ 0], 14); + FFF(aaa, bbb, ccc, ddd, X[ 5], 6); + FFF(ddd, aaa, bbb, ccc, X[12], 9); + FFF(ccc, ddd, aaa, bbb, X[ 2], 12); + FFF(bbb, ccc, ddd, aaa, X[13], 9); + FFF(aaa, bbb, ccc, ddd, X[ 9], 12); + FFF(ddd, aaa, bbb, ccc, X[ 7], 5); + FFF(ccc, ddd, aaa, bbb, X[10], 15); + FFF(bbb, ccc, ddd, aaa, X[14], 8); + + /* combine results */ + ddd += cc + md->rmd128.state[1]; /* final result for MDbuf[0] */ + md->rmd128.state[1] = md->rmd128.state[2] + dd + aaa; + md->rmd128.state[2] = md->rmd128.state[3] + aa + bbb; + md->rmd128.state[3] = md->rmd128.state[0] + bb + ccc; + md->rmd128.state[0] = ddd; +} + +#ifdef CLEAN_STACK +static void rmd128_compress(hash_state *md) +{ + _rmd128_compress(md); + burn_stack(sizeof(unsigned long) * 24 + sizeof(int)); +} +#endif + +void rmd128_init(hash_state * md) +{ + _ARGCHK(md != NULL); + md->rmd128.state[0] = 0x67452301UL; + md->rmd128.state[1] = 0xefcdab89UL; + md->rmd128.state[2] = 0x98badcfeUL; + md->rmd128.state[3] = 0x10325476UL; + md->rmd128.curlen = 0; + md->rmd128.length = 0; +} + +void rmd128_process(hash_state * md, const unsigned char *buf, unsigned long len) +{ + unsigned long n; + _ARGCHK(md != NULL); + _ARGCHK(buf != NULL); + while (len > 0) { + n = MIN(len, (64 - md->rmd128.curlen)); + memcpy(md->rmd128.buf + md->rmd128.curlen, buf, (size_t)n); + md->rmd128.curlen += n; + buf += n; + len -= n; + + /* is 64 bytes full? */ + if (md->rmd128.curlen == 64) { + rmd128_compress(md); + md->rmd128.length += 512; + md->rmd128.curlen = 0; + } + } +} + +void rmd128_done(hash_state * md, unsigned char *hash) +{ + int i; + + _ARGCHK(md != NULL); + _ARGCHK(hash != NULL); + + /* increase the length of the message */ + md->rmd128.length += md->rmd128.curlen * 8; + + /* append the '1' bit */ + md->rmd128.buf[md->rmd128.curlen++] = (unsigned char)0x80; + + /* if the length is currently above 56 bytes we append zeros + * then compress. Then we can fall back to padding zeros and length + * encoding like normal. + */ + if (md->rmd128.curlen > 56) { + while (md->rmd128.curlen < 64) { + md->rmd128.buf[md->rmd128.curlen++] = (unsigned char)0; + } + rmd128_compress(md); + md->rmd128.curlen = 0; + } + + /* pad upto 56 bytes of zeroes */ + while (md->rmd128.curlen < 56) { + md->rmd128.buf[md->rmd128.curlen++] = (unsigned char)0; + } + + /* store length */ + STORE64L(md->rmd128.length, md->rmd128.buf+56); + rmd128_compress(md); + + /* copy output */ + for (i = 0; i < 4; i++) { + STORE32L(md->rmd128.state[i], hash+(4*i)); + } +#ifdef CLEAN_STACK + zeromem(md, sizeof(hash_state)); +#endif +} + +int rmd128_test(void) +{ + static const struct { + char *msg; + unsigned char md[16]; + } tests[] = { + { "", + { 0xcd, 0xf2, 0x62, 0x13, 0xa1, 0x50, 0xdc, 0x3e, + 0xcb, 0x61, 0x0f, 0x18, 0xf6, 0xb3, 0x8b, 0x46 } + }, + { "a", + { 0x86, 0xbe, 0x7a, 0xfa, 0x33, 0x9d, 0x0f, 0xc7, + 0xcf, 0xc7, 0x85, 0xe7, 0x2f, 0x57, 0x8d, 0x33 } + }, + { "abc", + { 0xc1, 0x4a, 0x12, 0x19, 0x9c, 0x66, 0xe4, 0xba, + 0x84, 0x63, 0x6b, 0x0f, 0x69, 0x14, 0x4c, 0x77 } + }, + { "message digest", + { 0x9e, 0x32, 0x7b, 0x3d, 0x6e, 0x52, 0x30, 0x62, + 0xaf, 0xc1, 0x13, 0x2d, 0x7d, 0xf9, 0xd1, 0xb8 } + }, + { "abcdefghijklmnopqrstuvwxyz", + { 0xfd, 0x2a, 0xa6, 0x07, 0xf7, 0x1d, 0xc8, 0xf5, + 0x10, 0x71, 0x49, 0x22, 0xb3, 0x71, 0x83, 0x4e } + }, + { "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", + { 0xd1, 0xe9, 0x59, 0xeb, 0x17, 0x9c, 0x91, 0x1f, + 0xae, 0xa4, 0x62, 0x4c, 0x60, 0xc5, 0xc7, 0x02 } + } + }; + int x; + unsigned char buf[16]; + hash_state md; + + for (x = 0; x < (int)(sizeof(tests)/sizeof(tests[0])); x++) { + rmd128_init(&md); + rmd128_process(&md, (unsigned char *)tests[x].msg, strlen(tests[x].msg)); + rmd128_done(&md, buf); + if (memcmp(buf, tests[x].md, 16) != 0) { + #if 0 + printf("Failed test %d\n", x); + #endif + return CRYPT_FAIL_TESTVECTOR; + } + } + return CRYPT_OK; +} + +#endif + diff --git a/rmd160.c b/rmd160.c new file mode 100644 index 0000000..934a239 --- /dev/null +++ b/rmd160.c @@ -0,0 +1,425 @@ +/* Implementation of RIPEMD-160 based on the source by Antoon Bosselaers, ESAT-COSIC + * + * This source has been radically overhauled to be portable and work within + * the LibTomCrypt API by Tom St Denis + */ +#include "mycrypt.h" + +#ifdef RIPEMD160 + +const struct _hash_descriptor rmd160_desc = +{ + "rmd160", + 9, + 20, + 64, + &rmd160_init, + &rmd160_process, + &rmd160_done, + &rmd160_test +}; + +/* the five basic functions F(), G() and H() */ +#define F(x, y, z) ((x) ^ (y) ^ (z)) +#define G(x, y, z) (((x) & (y)) | (~(x) & (z))) +#define H(x, y, z) (((x) | ~(y)) ^ (z)) +#define I(x, y, z) (((x) & (z)) | ((y) & ~(z))) +#define J(x, y, z) ((x) ^ ((y) | ~(z))) + +/* the ten basic operations FF() through III() */ +#define FF(a, b, c, d, e, x, s) \ + (a) += F((b), (c), (d)) + (x);\ + (a) = ROL((a), (s)) + (e);\ + (c) = ROL((c), 10); + +#define GG(a, b, c, d, e, x, s) \ + (a) += G((b), (c), (d)) + (x) + 0x5a827999UL;\ + (a) = ROL((a), (s)) + (e);\ + (c) = ROL((c), 10); + +#define HH(a, b, c, d, e, x, s) \ + (a) += H((b), (c), (d)) + (x) + 0x6ed9eba1UL;\ + (a) = ROL((a), (s)) + (e);\ + (c) = ROL((c), 10); + +#define II(a, b, c, d, e, x, s) \ + (a) += I((b), (c), (d)) + (x) + 0x8f1bbcdcUL;\ + (a) = ROL((a), (s)) + (e);\ + (c) = ROL((c), 10); + +#define JJ(a, b, c, d, e, x, s) \ + (a) += J((b), (c), (d)) + (x) + 0xa953fd4eUL;\ + (a) = ROL((a), (s)) + (e);\ + (c) = ROL((c), 10); + +#define FFF(a, b, c, d, e, x, s) \ + (a) += F((b), (c), (d)) + (x);\ + (a) = ROL((a), (s)) + (e);\ + (c) = ROL((c), 10); + +#define GGG(a, b, c, d, e, x, s) \ + (a) += G((b), (c), (d)) + (x) + 0x7a6d76e9UL;\ + (a) = ROL((a), (s)) + (e);\ + (c) = ROL((c), 10); + +#define HHH(a, b, c, d, e, x, s) \ + (a) += H((b), (c), (d)) + (x) + 0x6d703ef3UL;\ + (a) = ROL((a), (s)) + (e);\ + (c) = ROL((c), 10); + +#define III(a, b, c, d, e, x, s) \ + (a) += I((b), (c), (d)) + (x) + 0x5c4dd124UL;\ + (a) = ROL((a), (s)) + (e);\ + (c) = ROL((c), 10); + +#define JJJ(a, b, c, d, e, x, s) \ + (a) += J((b), (c), (d)) + (x) + 0x50a28be6UL;\ + (a) = ROL((a), (s)) + (e);\ + (c) = ROL((c), 10); + + +#ifdef CLEAN_STACK +static void _rmd160_compress(hash_state *md) +#else +static void rmd160_compress(hash_state *md) +#endif +{ + unsigned long aa,bb,cc,dd,ee,aaa,bbb,ccc,ddd,eee,X[16]; + int i; + + /* load words X */ + for (i = 0; i < 16; i++){ + LOAD32L(X[i], md->rmd160.buf + (4 * i)); + } + + /* load state */ + aa = aaa = md->rmd160.state[0]; + bb = bbb = md->rmd160.state[1]; + cc = ccc = md->rmd160.state[2]; + dd = ddd = md->rmd160.state[3]; + ee = eee = md->rmd160.state[4]; + + /* round 1 */ + FF(aa, bb, cc, dd, ee, X[ 0], 11); + FF(ee, aa, bb, cc, dd, X[ 1], 14); + FF(dd, ee, aa, bb, cc, X[ 2], 15); + FF(cc, dd, ee, aa, bb, X[ 3], 12); + FF(bb, cc, dd, ee, aa, X[ 4], 5); + FF(aa, bb, cc, dd, ee, X[ 5], 8); + FF(ee, aa, bb, cc, dd, X[ 6], 7); + FF(dd, ee, aa, bb, cc, X[ 7], 9); + FF(cc, dd, ee, aa, bb, X[ 8], 11); + FF(bb, cc, dd, ee, aa, X[ 9], 13); + FF(aa, bb, cc, dd, ee, X[10], 14); + FF(ee, aa, bb, cc, dd, X[11], 15); + FF(dd, ee, aa, bb, cc, X[12], 6); + FF(cc, dd, ee, aa, bb, X[13], 7); + FF(bb, cc, dd, ee, aa, X[14], 9); + FF(aa, bb, cc, dd, ee, X[15], 8); + + /* round 2 */ + GG(ee, aa, bb, cc, dd, X[ 7], 7); + GG(dd, ee, aa, bb, cc, X[ 4], 6); + GG(cc, dd, ee, aa, bb, X[13], 8); + GG(bb, cc, dd, ee, aa, X[ 1], 13); + GG(aa, bb, cc, dd, ee, X[10], 11); + GG(ee, aa, bb, cc, dd, X[ 6], 9); + GG(dd, ee, aa, bb, cc, X[15], 7); + GG(cc, dd, ee, aa, bb, X[ 3], 15); + GG(bb, cc, dd, ee, aa, X[12], 7); + GG(aa, bb, cc, dd, ee, X[ 0], 12); + GG(ee, aa, bb, cc, dd, X[ 9], 15); + GG(dd, ee, aa, bb, cc, X[ 5], 9); + GG(cc, dd, ee, aa, bb, X[ 2], 11); + GG(bb, cc, dd, ee, aa, X[14], 7); + GG(aa, bb, cc, dd, ee, X[11], 13); + GG(ee, aa, bb, cc, dd, X[ 8], 12); + + /* round 3 */ + HH(dd, ee, aa, bb, cc, X[ 3], 11); + HH(cc, dd, ee, aa, bb, X[10], 13); + HH(bb, cc, dd, ee, aa, X[14], 6); + HH(aa, bb, cc, dd, ee, X[ 4], 7); + HH(ee, aa, bb, cc, dd, X[ 9], 14); + HH(dd, ee, aa, bb, cc, X[15], 9); + HH(cc, dd, ee, aa, bb, X[ 8], 13); + HH(bb, cc, dd, ee, aa, X[ 1], 15); + HH(aa, bb, cc, dd, ee, X[ 2], 14); + HH(ee, aa, bb, cc, dd, X[ 7], 8); + HH(dd, ee, aa, bb, cc, X[ 0], 13); + HH(cc, dd, ee, aa, bb, X[ 6], 6); + HH(bb, cc, dd, ee, aa, X[13], 5); + HH(aa, bb, cc, dd, ee, X[11], 12); + HH(ee, aa, bb, cc, dd, X[ 5], 7); + HH(dd, ee, aa, bb, cc, X[12], 5); + + /* round 4 */ + II(cc, dd, ee, aa, bb, X[ 1], 11); + II(bb, cc, dd, ee, aa, X[ 9], 12); + II(aa, bb, cc, dd, ee, X[11], 14); + II(ee, aa, bb, cc, dd, X[10], 15); + II(dd, ee, aa, bb, cc, X[ 0], 14); + II(cc, dd, ee, aa, bb, X[ 8], 15); + II(bb, cc, dd, ee, aa, X[12], 9); + II(aa, bb, cc, dd, ee, X[ 4], 8); + II(ee, aa, bb, cc, dd, X[13], 9); + II(dd, ee, aa, bb, cc, X[ 3], 14); + II(cc, dd, ee, aa, bb, X[ 7], 5); + II(bb, cc, dd, ee, aa, X[15], 6); + II(aa, bb, cc, dd, ee, X[14], 8); + II(ee, aa, bb, cc, dd, X[ 5], 6); + II(dd, ee, aa, bb, cc, X[ 6], 5); + II(cc, dd, ee, aa, bb, X[ 2], 12); + + /* round 5 */ + JJ(bb, cc, dd, ee, aa, X[ 4], 9); + JJ(aa, bb, cc, dd, ee, X[ 0], 15); + JJ(ee, aa, bb, cc, dd, X[ 5], 5); + JJ(dd, ee, aa, bb, cc, X[ 9], 11); + JJ(cc, dd, ee, aa, bb, X[ 7], 6); + JJ(bb, cc, dd, ee, aa, X[12], 8); + JJ(aa, bb, cc, dd, ee, X[ 2], 13); + JJ(ee, aa, bb, cc, dd, X[10], 12); + JJ(dd, ee, aa, bb, cc, X[14], 5); + JJ(cc, dd, ee, aa, bb, X[ 1], 12); + JJ(bb, cc, dd, ee, aa, X[ 3], 13); + JJ(aa, bb, cc, dd, ee, X[ 8], 14); + JJ(ee, aa, bb, cc, dd, X[11], 11); + JJ(dd, ee, aa, bb, cc, X[ 6], 8); + JJ(cc, dd, ee, aa, bb, X[15], 5); + JJ(bb, cc, dd, ee, aa, X[13], 6); + + /* parallel round 1 */ + JJJ(aaa, bbb, ccc, ddd, eee, X[ 5], 8); + JJJ(eee, aaa, bbb, ccc, ddd, X[14], 9); + JJJ(ddd, eee, aaa, bbb, ccc, X[ 7], 9); + JJJ(ccc, ddd, eee, aaa, bbb, X[ 0], 11); + JJJ(bbb, ccc, ddd, eee, aaa, X[ 9], 13); + JJJ(aaa, bbb, ccc, ddd, eee, X[ 2], 15); + JJJ(eee, aaa, bbb, ccc, ddd, X[11], 15); + JJJ(ddd, eee, aaa, bbb, ccc, X[ 4], 5); + JJJ(ccc, ddd, eee, aaa, bbb, X[13], 7); + JJJ(bbb, ccc, ddd, eee, aaa, X[ 6], 7); + JJJ(aaa, bbb, ccc, ddd, eee, X[15], 8); + JJJ(eee, aaa, bbb, ccc, ddd, X[ 8], 11); + JJJ(ddd, eee, aaa, bbb, ccc, X[ 1], 14); + JJJ(ccc, ddd, eee, aaa, bbb, X[10], 14); + JJJ(bbb, ccc, ddd, eee, aaa, X[ 3], 12); + JJJ(aaa, bbb, ccc, ddd, eee, X[12], 6); + + /* parallel round 2 */ + III(eee, aaa, bbb, ccc, ddd, X[ 6], 9); + III(ddd, eee, aaa, bbb, ccc, X[11], 13); + III(ccc, ddd, eee, aaa, bbb, X[ 3], 15); + III(bbb, ccc, ddd, eee, aaa, X[ 7], 7); + III(aaa, bbb, ccc, ddd, eee, X[ 0], 12); + III(eee, aaa, bbb, ccc, ddd, X[13], 8); + III(ddd, eee, aaa, bbb, ccc, X[ 5], 9); + III(ccc, ddd, eee, aaa, bbb, X[10], 11); + III(bbb, ccc, ddd, eee, aaa, X[14], 7); + III(aaa, bbb, ccc, ddd, eee, X[15], 7); + III(eee, aaa, bbb, ccc, ddd, X[ 8], 12); + III(ddd, eee, aaa, bbb, ccc, X[12], 7); + III(ccc, ddd, eee, aaa, bbb, X[ 4], 6); + III(bbb, ccc, ddd, eee, aaa, X[ 9], 15); + III(aaa, bbb, ccc, ddd, eee, X[ 1], 13); + III(eee, aaa, bbb, ccc, ddd, X[ 2], 11); + + /* parallel round 3 */ + HHH(ddd, eee, aaa, bbb, ccc, X[15], 9); + HHH(ccc, ddd, eee, aaa, bbb, X[ 5], 7); + HHH(bbb, ccc, ddd, eee, aaa, X[ 1], 15); + HHH(aaa, bbb, ccc, ddd, eee, X[ 3], 11); + HHH(eee, aaa, bbb, ccc, ddd, X[ 7], 8); + HHH(ddd, eee, aaa, bbb, ccc, X[14], 6); + HHH(ccc, ddd, eee, aaa, bbb, X[ 6], 6); + HHH(bbb, ccc, ddd, eee, aaa, X[ 9], 14); + HHH(aaa, bbb, ccc, ddd, eee, X[11], 12); + HHH(eee, aaa, bbb, ccc, ddd, X[ 8], 13); + HHH(ddd, eee, aaa, bbb, ccc, X[12], 5); + HHH(ccc, ddd, eee, aaa, bbb, X[ 2], 14); + HHH(bbb, ccc, ddd, eee, aaa, X[10], 13); + HHH(aaa, bbb, ccc, ddd, eee, X[ 0], 13); + HHH(eee, aaa, bbb, ccc, ddd, X[ 4], 7); + HHH(ddd, eee, aaa, bbb, ccc, X[13], 5); + + /* parallel round 4 */ + GGG(ccc, ddd, eee, aaa, bbb, X[ 8], 15); + GGG(bbb, ccc, ddd, eee, aaa, X[ 6], 5); + GGG(aaa, bbb, ccc, ddd, eee, X[ 4], 8); + GGG(eee, aaa, bbb, ccc, ddd, X[ 1], 11); + GGG(ddd, eee, aaa, bbb, ccc, X[ 3], 14); + GGG(ccc, ddd, eee, aaa, bbb, X[11], 14); + GGG(bbb, ccc, ddd, eee, aaa, X[15], 6); + GGG(aaa, bbb, ccc, ddd, eee, X[ 0], 14); + GGG(eee, aaa, bbb, ccc, ddd, X[ 5], 6); + GGG(ddd, eee, aaa, bbb, ccc, X[12], 9); + GGG(ccc, ddd, eee, aaa, bbb, X[ 2], 12); + GGG(bbb, ccc, ddd, eee, aaa, X[13], 9); + GGG(aaa, bbb, ccc, ddd, eee, X[ 9], 12); + GGG(eee, aaa, bbb, ccc, ddd, X[ 7], 5); + GGG(ddd, eee, aaa, bbb, ccc, X[10], 15); + GGG(ccc, ddd, eee, aaa, bbb, X[14], 8); + + /* parallel round 5 */ + FFF(bbb, ccc, ddd, eee, aaa, X[12] , 8); + FFF(aaa, bbb, ccc, ddd, eee, X[15] , 5); + FFF(eee, aaa, bbb, ccc, ddd, X[10] , 12); + FFF(ddd, eee, aaa, bbb, ccc, X[ 4] , 9); + FFF(ccc, ddd, eee, aaa, bbb, X[ 1] , 12); + FFF(bbb, ccc, ddd, eee, aaa, X[ 5] , 5); + FFF(aaa, bbb, ccc, ddd, eee, X[ 8] , 14); + FFF(eee, aaa, bbb, ccc, ddd, X[ 7] , 6); + FFF(ddd, eee, aaa, bbb, ccc, X[ 6] , 8); + FFF(ccc, ddd, eee, aaa, bbb, X[ 2] , 13); + FFF(bbb, ccc, ddd, eee, aaa, X[13] , 6); + FFF(aaa, bbb, ccc, ddd, eee, X[14] , 5); + FFF(eee, aaa, bbb, ccc, ddd, X[ 0] , 15); + FFF(ddd, eee, aaa, bbb, ccc, X[ 3] , 13); + FFF(ccc, ddd, eee, aaa, bbb, X[ 9] , 11); + FFF(bbb, ccc, ddd, eee, aaa, X[11] , 11); + + /* combine results */ + ddd += cc + md->rmd160.state[1]; /* final result for md->rmd160.state[0] */ + md->rmd160.state[1] = md->rmd160.state[2] + dd + eee; + md->rmd160.state[2] = md->rmd160.state[3] + ee + aaa; + md->rmd160.state[3] = md->rmd160.state[4] + aa + bbb; + md->rmd160.state[4] = md->rmd160.state[0] + bb + ccc; + md->rmd160.state[0] = ddd; +} + +#ifdef CLEAN_STACK +static void rmd160_compress(hash_state *md) +{ + _rmd160_compress(md); + burn_stack(sizeof(unsigned long) * 26 + sizeof(int)); +} +#endif + +void rmd160_init(hash_state * md) +{ + _ARGCHK(md != NULL); + md->rmd160.state[0] = 0x67452301UL; + md->rmd160.state[1] = 0xefcdab89UL; + md->rmd160.state[2] = 0x98badcfeUL; + md->rmd160.state[3] = 0x10325476UL; + md->rmd160.state[4] = 0xc3d2e1f0UL; + md->rmd160.curlen = 0; + md->rmd160.length = 0; +} + +void rmd160_process(hash_state * md, const unsigned char *buf, unsigned long len) +{ + unsigned long n; + _ARGCHK(md != NULL); + _ARGCHK(buf != NULL); + while (len > 0) { + n = MIN(len, (64 - md->rmd160.curlen)); + memcpy(md->rmd160.buf + md->rmd160.curlen, buf, (size_t)n); + md->rmd160.curlen += n; + buf += n; + len -= n; + + /* is 64 bytes full? */ + if (md->rmd160.curlen == 64) { + rmd160_compress(md); + md->rmd160.length += 512; + md->rmd160.curlen = 0; + } + } +} + +void rmd160_done(hash_state * md, unsigned char *hash) +{ + int i; + + _ARGCHK(md != NULL); + _ARGCHK(hash != NULL); + + /* increase the length of the message */ + md->rmd160.length += md->rmd160.curlen * 8; + + /* append the '1' bit */ + md->rmd160.buf[md->rmd160.curlen++] = (unsigned char)0x80; + + /* if the length is currently above 56 bytes we append zeros + * then compress. Then we can fall back to padding zeros and length + * encoding like normal. + */ + if (md->rmd160.curlen > 56) { + while (md->rmd160.curlen < 64) { + md->rmd160.buf[md->rmd160.curlen++] = (unsigned char)0; + } + rmd160_compress(md); + md->rmd160.curlen = 0; + } + + /* pad upto 56 bytes of zeroes */ + while (md->rmd160.curlen < 56) { + md->rmd160.buf[md->rmd160.curlen++] = (unsigned char)0; + } + + /* store length */ + STORE64L(md->rmd160.length, md->rmd160.buf+56); + rmd160_compress(md); + + /* copy output */ + for (i = 0; i < 5; i++) { + STORE32L(md->rmd160.state[i], hash+(4*i)); + } +#ifdef CLEAN_STACK + zeromem(md, sizeof(hash_state)); +#endif +} + +int rmd160_test(void) +{ + static const struct { + char *msg; + unsigned char md[20]; + } tests[] = { + { "", + { 0x9c, 0x11, 0x85, 0xa5, 0xc5, 0xe9, 0xfc, 0x54, 0x61, 0x28, + 0x08, 0x97, 0x7e, 0xe8, 0xf5, 0x48, 0xb2, 0x25, 0x8d, 0x31 } + }, + { "a", + { 0x0b, 0xdc, 0x9d, 0x2d, 0x25, 0x6b, 0x3e, 0xe9, 0xda, 0xae, + 0x34, 0x7b, 0xe6, 0xf4, 0xdc, 0x83, 0x5a, 0x46, 0x7f, 0xfe } + }, + { "abc", + { 0x8e, 0xb2, 0x08, 0xf7, 0xe0, 0x5d, 0x98, 0x7a, 0x9b, 0x04, + 0x4a, 0x8e, 0x98, 0xc6, 0xb0, 0x87, 0xf1, 0x5a, 0x0b, 0xfc } + }, + { "message digest", + { 0x5d, 0x06, 0x89, 0xef, 0x49, 0xd2, 0xfa, 0xe5, 0x72, 0xb8, + 0x81, 0xb1, 0x23, 0xa8, 0x5f, 0xfa, 0x21, 0x59, 0x5f, 0x36 } + }, + { "abcdefghijklmnopqrstuvwxyz", + { 0xf7, 0x1c, 0x27, 0x10, 0x9c, 0x69, 0x2c, 0x1b, 0x56, 0xbb, + 0xdc, 0xeb, 0x5b, 0x9d, 0x28, 0x65, 0xb3, 0x70, 0x8d, 0xbc } + }, + { "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", + { 0x12, 0xa0, 0x53, 0x38, 0x4a, 0x9c, 0x0c, 0x88, 0xe4, 0x05, + 0xa0, 0x6c, 0x27, 0xdc, 0xf4, 0x9a, 0xda, 0x62, 0xeb, 0x2b } + } + }; + int x; + unsigned char buf[20]; + hash_state md; + + for (x = 0; x < (int)(sizeof(tests)/sizeof(tests[0])); x++) { + rmd160_init(&md); + rmd160_process(&md, (unsigned char *)tests[x].msg, strlen(tests[x].msg)); + rmd160_done(&md, buf); + if (memcmp(buf, tests[x].md, 20) != 0) { +#if 0 + printf("Failed test %d\n", x); +#endif + return CRYPT_FAIL_TESTVECTOR; + } + } + return CRYPT_OK; +} + +#endif + diff --git a/tdcal.pdf b/tdcal.pdf deleted file mode 100644 index e4f4b35d72b373c6d41963aa62da5856b0c0d3a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56674 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 diff --git a/tommath.h b/tommath.h index e5e166b..069e51c 100644 --- a/tommath.h +++ b/tommath.h @@ -1,9 +1,9 @@ /* LibTomMath, multiple-precision integer library -- Tom St Denis * - * LibTomMath is library that provides for multiple-precision + * LibTomMath is a library that provides multiple-precision * integer arithmetic as well as number theoretic functionality. * - * The library is designed directly after the MPI library by + * The library was designed directly after the MPI library by * Michael Fromberger but has been written from scratch with * additional optimizations in place. * @@ -82,8 +82,10 @@ extern "C" { typedef ulong64 mp_word; #ifdef MP_31BIT + /* this is an extension that uses 31-bit digits */ #define DIGIT_BIT 31 #else + /* default case is 28-bit digits, defines MP_28BIT as a handy macro to test */ #define DIGIT_BIT 28 #define MP_28BIT #endif @@ -94,7 +96,6 @@ extern "C" { #define DIGIT_BIT ((int)((CHAR_BIT * sizeof(mp_digit) - 1))) /* bits per digit */ #endif - #define MP_DIGIT_BIT DIGIT_BIT #define MP_MASK ((((mp_digit)1)<<((mp_digit)DIGIT_BIT))-((mp_digit)1)) #define MP_DIGIT_MAX MP_MASK @@ -121,7 +122,7 @@ extern int KARATSUBA_MUL_CUTOFF, TOOM_SQR_CUTOFF; /* various build options */ -#define MP_PREC 64 /* default digits of precision (must be power of two) */ +#define MP_PREC 64 /* default digits of precision */ /* define this to use lower memory usage routines (exptmods mostly) */ /* #define MP_LOW_MEM */ @@ -135,11 +136,13 @@ typedef struct { } mp_int; #define USED(m) ((m)->used) -#define DIGIT(m,k) ((m)->dp[k]) +#define DIGIT(m,k) ((m)->dp[(k)]) #define SIGN(m) ((m)->sign) -/* ---> init and deinit bignum functions <--- */ +/* error code to char* string */ +char *mp_error_to_string(int code); +/* ---> init and deinit bignum functions <--- */ /* init a bignum */ int mp_init(mp_int *a); @@ -165,7 +168,6 @@ int mp_grow(mp_int *a, int size); int mp_init_size(mp_int *a, int size); /* ---> Basic Manipulations <--- */ - #define mp_iszero(a) (((a)->used == 0) ? 1 : 0) #define mp_iseven(a) (((a)->used > 0 && (((a)->dp[0] & 1) == 0)) ? 1 : 0) #define mp_isodd(a) (((a)->used > 0 && (((a)->dp[0] & 1) == 1)) ? 1 : 0) @@ -462,5 +464,5 @@ extern const char *mp_s_rmap; } #endif -#endif +#endif /* ?BN_H_ */ diff --git a/yarrow.c b/yarrow.c index ee53a5c..be638f6 100644 --- a/yarrow.c +++ b/yarrow.c @@ -123,7 +123,11 @@ int yarrow_ready(prng_state *prng) return err; } - if ((err = ctr_start(prng->yarrow.cipher, prng->yarrow.pool, prng->yarrow.pool, ks, 0, &prng->yarrow.ctr)) != CRYPT_OK) { + if ((err = ctr_start(prng->yarrow.cipher, /* what cipher to use */ + prng->yarrow.pool, /* IV */ + prng->yarrow.pool, ks, /* KEY and key size */ + 0, /* number of rounds */ + &prng->yarrow.ctr)) != CRYPT_OK) { return err; } return CRYPT_OK;

wfdkA9DHzBxEX(Qj(Ous}&9)PKC;0}LEpSY6 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