From 4a1a5796de610f7ec6f3993a972968aae00e6ad6 Mon Sep 17 00:00:00 2001 From: Tom St Denis Date: Fri, 18 Nov 2005 05:15:37 +0000 Subject: [PATCH] added libtomcrypt-1.07 --- Doxyfile | 2 +- TODO | 37 + changes | 49 +- crypt.tex | 303 +++-- demos/encrypt.c | 4 +- demos/test.c | 3 +- demos/timing.c | 4 +- demos/tv_gen.c | 4 +- doc/crypt.pdf | Bin 490813 -> 501926 bytes makefile | 80 +- makefile.icc | 39 +- makefile.msvc | 40 +- makefile.shared | 62 +- src/ciphers/aes/aes.c | 24 +- src/ciphers/anubis.c | 8 +- src/ciphers/blowfish.c | 23 +- src/ciphers/cast5.c | 21 +- src/ciphers/des.c | 18 +- src/ciphers/khazad.c | 8 +- src/ciphers/noekeon.c | 23 +- src/ciphers/rc2.c | 24 +- src/ciphers/rc5.c | 24 +- src/ciphers/rc6.c | 21 +- src/ciphers/safer/safer.c | 20 +- src/ciphers/safer/saferp.c | 8 +- src/ciphers/skipjack.c | 24 +- src/ciphers/twofish/twofish.c | 23 +- src/ciphers/xtea.c | 8 +- src/encauth/ccm/ccm_memory.c | 87 +- src/encauth/ccm/ccm_test.c | 16 +- src/encauth/gcm/gcm_done.c | 4 +- src/encauth/gcm/gcm_init.c | 4 +- src/encauth/gcm/gcm_memory.c | 4 +- src/encauth/gcm/gcm_process.c | 16 +- src/encauth/ocb/ocb_decrypt.c | 4 +- src/encauth/ocb/ocb_encrypt.c | 4 +- src/encauth/ocb/ocb_init.c | 8 +- src/encauth/ocb/s_ocb_done.c | 12 +- src/headers/tomcrypt.h | 4 +- src/headers/tomcrypt_cfg.h | 8 + src/headers/tomcrypt_cipher.h | 94 +- src/headers/tomcrypt_custom.h | 21 +- src/headers/tomcrypt_mac.h | 1 + src/headers/tomcrypt_macros.h | 44 + src/headers/tomcrypt_math.h | 26 +- src/headers/tomcrypt_pk.h | 150 ++- src/headers/tomcrypt_pkcs.h | 4 +- src/headers/tomcrypt_prng.h | 2 + src/mac/omac/omac_done.c | 4 +- src/mac/omac/omac_init.c | 4 +- src/mac/omac/omac_process.c | 8 +- src/mac/pmac/pmac_done.c | 4 +- src/mac/pmac/pmac_init.c | 9 +- src/mac/pmac/pmac_process.c | 8 +- src/math/ltm_desc.c | 15 +- src/math/multi.c | 1 + src/math/tfm_desc.c | 18 +- src/misc/crypt/crypt.c | 12 +- src/modes/cbc/cbc_decrypt.c | 6 +- src/modes/cbc/cbc_encrypt.c | 6 +- src/modes/cfb/cfb_decrypt.c | 4 +- src/modes/cfb/cfb_encrypt.c | 4 +- src/modes/cfb/cfb_setiv.c | 4 +- src/modes/cfb/cfb_start.c | 4 +- src/modes/ctr/ctr_encrypt.c | 8 +- src/modes/ctr/ctr_setiv.c | 4 +- src/modes/ctr/ctr_start.c | 3 +- src/modes/ecb/ecb_decrypt.c | 6 +- src/modes/ecb/ecb_encrypt.c | 6 +- src/modes/ofb/ofb_encrypt.c | 4 +- src/modes/ofb/ofb_setiv.c | 3 +- src/pk/asn1/der/bit/der_decode_bit_string.c | 4 +- src/pk/asn1/der/choice/der_decode_choice.c | 1 + .../der/sequence/der_decode_sequence_flexi.c | 352 ++++++ .../asn1/der/sequence/der_length_sequence.c | 7 + src/pk/asn1/der/sequence/der_sequence_free.c | 63 + src/pk/dsa/dsa_decrypt_key.c | 138 +++ src/pk/dsa/dsa_encrypt_key.c | 136 +++ src/pk/dsa/dsa_import.c | 1 + src/pk/dsa/dsa_make_key.c | 1 + src/pk/dsa/dsa_shared_secret.c | 71 ++ src/pk/ecc/ecc.c | 1065 +---------------- src/pk/ecc/ecc_decrypt_key.c | 149 +++ src/pk/ecc/ecc_encrypt_key.c | 136 +++ src/pk/ecc/ecc_export.c | 82 ++ src/pk/ecc/ecc_free.c | 40 + src/pk/ecc/ecc_get_size.c | 44 + src/pk/ecc/ecc_import.c | 155 +++ src/pk/ecc/ecc_make_key.c | 112 ++ src/pk/ecc/ecc_shared_secret.c | 94 ++ src/pk/ecc/ecc_sign_hash.c | 118 ++ src/pk/ecc/ecc_sizes.c | 48 + src/pk/ecc/ecc_sys.c | 472 -------- src/pk/ecc/ecc_test.c | 96 ++ src/pk/ecc/ecc_verify_hash.c | 160 +++ src/pk/ecc/ltc_ecc_is_valid_idx.c | 45 + src/pk/ecc/ltc_ecc_map.c | 77 ++ src/pk/ecc/ltc_ecc_mulmod.c | 213 ++++ src/pk/ecc/ltc_ecc_mulmod_timing.c | 162 +++ src/pk/ecc/ltc_ecc_points.c | 60 + src/pk/ecc/ltc_ecc_projective_add_point.c | 193 +++ src/pk/ecc/ltc_ecc_projective_dbl_point.c | 147 +++ src/pk/katja/katja_decrypt_key.c | 105 ++ src/pk/katja/katja_encrypt_key.c | 86 ++ src/pk/katja/katja_export.c | 75 ++ src/pk/katja/katja_exptmod.c | 114 ++ src/pk/katja/katja_free.c | 35 + src/pk/katja/katja_import.c | 81 ++ src/pk/katja/katja_make_key.c | 101 ++ src/pk/pkcs1/pkcs_1_mgf1.c | 4 +- src/pk/pkcs1/pkcs_1_oaep_decode.c | 6 +- src/pk/pkcs1/pkcs_1_oaep_encode.c | 4 +- src/pk/pkcs1/pkcs_1_pss_decode.c | 2 +- src/pk/pkcs1/pkcs_1_pss_encode.c | 2 +- src/pk/rsa/rsa_export.c | 11 +- src/pk/rsa/rsa_import.c | 1 + src/pk/rsa/rsa_make_key.c | 8 + src/prngs/fortuna.c | 28 +- src/prngs/yarrow.c | 41 +- testprof/der_tests.c | 289 +++++ testprof/dsa_test.c | 16 +- testprof/ecc_test.c | 2 +- testprof/katja_test.c | 231 ++++ testprof/makefile | 9 +- testprof/makefile.icc | 2 +- testprof/makefile.msvc | 2 +- testprof/makefile.shared | 14 +- testprof/tomcrypt_test.h | 2 + testprof/x86_prof.c | 131 +- 129 files changed, 5393 insertions(+), 2013 deletions(-) create mode 100644 src/pk/asn1/der/sequence/der_decode_sequence_flexi.c create mode 100644 src/pk/asn1/der/sequence/der_sequence_free.c create mode 100644 src/pk/dsa/dsa_decrypt_key.c create mode 100644 src/pk/dsa/dsa_encrypt_key.c create mode 100644 src/pk/dsa/dsa_shared_secret.c create mode 100644 src/pk/ecc/ecc_decrypt_key.c create mode 100644 src/pk/ecc/ecc_encrypt_key.c create mode 100644 src/pk/ecc/ecc_export.c create mode 100644 src/pk/ecc/ecc_free.c create mode 100644 src/pk/ecc/ecc_get_size.c create mode 100644 src/pk/ecc/ecc_import.c create mode 100644 src/pk/ecc/ecc_make_key.c create mode 100644 src/pk/ecc/ecc_shared_secret.c create mode 100644 src/pk/ecc/ecc_sign_hash.c create mode 100644 src/pk/ecc/ecc_sizes.c delete mode 100644 src/pk/ecc/ecc_sys.c create mode 100644 src/pk/ecc/ecc_test.c create mode 100644 src/pk/ecc/ecc_verify_hash.c create mode 100644 src/pk/ecc/ltc_ecc_is_valid_idx.c create mode 100644 src/pk/ecc/ltc_ecc_map.c create mode 100644 src/pk/ecc/ltc_ecc_mulmod.c create mode 100644 src/pk/ecc/ltc_ecc_mulmod_timing.c create mode 100644 src/pk/ecc/ltc_ecc_points.c create mode 100644 src/pk/ecc/ltc_ecc_projective_add_point.c create mode 100644 src/pk/ecc/ltc_ecc_projective_dbl_point.c create mode 100644 src/pk/katja/katja_decrypt_key.c create mode 100644 src/pk/katja/katja_encrypt_key.c create mode 100644 src/pk/katja/katja_export.c create mode 100644 src/pk/katja/katja_exptmod.c create mode 100644 src/pk/katja/katja_free.c create mode 100644 src/pk/katja/katja_import.c create mode 100644 src/pk/katja/katja_make_key.c create mode 100644 testprof/katja_test.c diff --git a/Doxyfile b/Doxyfile index 8a90fe2..b6e06d7 100644 --- a/Doxyfile +++ b/Doxyfile @@ -23,7 +23,7 @@ PROJECT_NAME = LibTomCrypt # This could be handy for archiving the generated documentation or # if some version control system is used. -PROJECT_NUMBER = 1.06 +PROJECT_NUMBER = 1.07 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. diff --git a/TODO b/TODO index 536c591..6457359 100644 --- a/TODO +++ b/TODO @@ -1,6 +1,43 @@ For 1.07 + 1. [3 hours] ASN.1 SET and T61String [punishment, add UTF8 to the list!] +4. [short] Make parameters in descriptors common, e.g. cipher.block_length => cipher.block_size, hash.blocksize => hash.block_size +DONE +---- +0. [important] Make ciphers enc/dec routines return int [for accel]. Make the ciphers themselves return CRYPT_OK [default] *AND* make + all dependent code check the returns + [x] gcm + [x] ccm + [x] yarrow + [x] fortuna + [x] eax + [x] ocb + [x] omac + [x] pmac + [x] pelican + [x] ctr + [x] cbc + [x] ecb + [x] cfb + [x] ofb + +2. [many] ASN.1 flexidecoder. Basically decode and construct a list of decoded ASN.1 types on the fly. + This will allow easy decoding of things like X.509 as their orders can be "screwed up". + The concept is simple, just read the ID byte and use a linked list. I'll do this after step #1. + +3. [short] Make the cipher/hash accelerators return int [not void] to signal errors. Whoops + +5. [short] Swap arguments of MGF1 around so hash_idx is first + +6. [longish] Re-write parts of the ECC api, re-factor the code, convert to w-NAF, add FP support, add ecc point verifier + +7. [shortish] Provide DH for the DSA code e.g. dsa_encrypt_key() + +8. [worthit] Move the ECC code for point mul and what not as symbols that the TFM/LTM descriptors link in. Means a change to the hierarchy. This allows + code that uses ECC plugins to simply ignore this code [e.g. save space] + +9. [short] Document the flexi decoder and how it relates to the other DER routines diff --git a/changes b/changes index 27e772e..2b34694 100644 --- a/changes +++ b/changes @@ -1,3 +1,44 @@ +November 18th, 2005 +v1.07 -- Craig Schlenter pointed out the "encrypt" demo doesn't call ctr_start() correctly. That's because as of a few releases ago + I added support to set the mode of the counter at init time + -- Fixed some "testprof" make issues + -- Added RSA keygen to the math descriptors + -- Fixed install_test target ... oops + -- made the "ranlib" program renamable useful for cross-compiling + -- Made the cipher accelerators return error codes. :-) + -- Made CCM accept a pre-scheduled key to speed it up if you use the same key for multiple packets + -- Added "Katja" public key crypto. It's based on the recent N = p^2q work by Katja. I added OAEP padding + to it. Note this code has been disabled not because it doesn't work but because it hasn't been thoroughly + analyzed. It does carry some advantages over RSA (slightly smaller public key, faster decrypt) but also + some annoying "setup" issues like the primes are smaller which makes ECM factoring more plausible. + -- Made makefile accept a NODOCS flag to disable the requirement of tetex to install LTC for you no tetex people... all 3 of ya :-) + -- Cleaned up rsa_export() since "zero" was handled with a SHORT_INTEGER + -- Cleaned up the LIBTEST_S definitions in both GNU makefiles. A few minor touchups as well. + -- Made the cipher ecb encrypt/decrypt return an int as well, changed ALL dependent code to check for this. + -- der_decode_choice() would fail to mark a NULL as "used" when decoding. Fixed + -- ecc_decrypt_key() now uses find_hash_oid() to clean up the code ;-) + -- Added mp_neg() to the math descriptors. + -- Swapped arguments for the pkcs_1_mgf1() function so the hash_idx is the first param (to be more consistent) + -- Made the math descriptors buildable when RSA has been undefined + -- ECC timing demo now capable of detecting which curves have been defined + -- Refactored the ECC code so it's easier to maintain. (note: the form of this code hasn't really changed since I first added ECC ... :-/) + -- Updated the documentation w.r.t. ECC and the accelerators to keep it current + -- Fixed bug in ltc_init_multi() which would fail to free all allocated memory on error. + -- Fixed bug in ecc_decrypt_key() which could possibly lead to overflows (if MAXBLOCKSIZE > ECC_BUF_SIZE and you have a hash that emits MAXBLOCKSIZE bytes) + -- Added encrypt/decrypt to the DSA side (basically DH with DSA parameters) + -- Updated makefiles to remove references to the old DH object files and the ecc_sys.o crap ... clean code ahead! + -- ecc_import() now checks if the point it reads in lies on the curve (to prevent degenerative points from being used) + -- ECC code now ALWAYS uses the accelerator interface. This allows people who use the accelerators to not have the stock + ECC point add/dbl/mul code linked in. Yeah space savings! Rah Rah Rah. + -- Added LTC_MUTEX_* support to Yarrow and Fortuna allowing you to use respective prng_state as a global PRNG state [e.g. thread-safe] if you define one of the LTC_* defines at + build time (e.g. LTC_PTHREAD == pthreads) + -- Added PPC32 support to the rotate macros (tested on an IBM PPC 405) and LTC_FAST macros (it aint fast but it's faster than stock) + -- Added ltc_mp checks in all *_make_key() and *_import() which will help catch newbs who don't register their bignum first :-) + -- the UTCTIME type was missing from der_length_sequence() [oops, oh like you've never done that] + -- the main makefile allows you to rename the make command [e.g. MAKE=gmake gmake install] so you can build LTC on platforms where the default make command sucks [e.g. BSD] + -- Added DER flexi decoder which allows the decoding of arbitrary DER encoded packets without knowing + their structure in advance (thanks to MSVC for finding 3 bugs in it just prior to release! ... don't ask) + August 1st, 2005 v1.06 -- Fixed rand_prime() to accept negative inputs as a signal for BBS primes. [Fredrik Olsson] -- Added fourth ARGCHK type which outputs to stderr and continues. Useful if you trap sigsegv. [Valient Gough] @@ -234,7 +275,7 @@ October 29th, 2004 v0.99 -- Merged in the latest version of LTM which includes all of the recent bug fixes -- Deprecated LTMSSE and removed it (to be replaced with TFM later on) -- Stefan Arentz pointed out that mp_s_rmap should be extern - -- Kristian Gjøsteen pointed out that there are typos in the + -- Kristian Gj?steen pointed out that there are typos in the "test" makefile and minor issues in Yarrow and Sober [just cosmetics really] -- Matthew P. Cashdollar pointed out that "export" is a C++ keyword so changed the PRNG api to use "pexport" and "pimport" @@ -613,7 +654,7 @@ v0.81 -- Merged in new makefile from Clay Culver and Mike Frysinger as much as possible. This sped the routine up quite a bit. -- Fixed a huge flaw in ecc_verify_hash() where it would return CRYPT_OK on error... Now fixed. -- Fixed up config.pl by fixing an invalid query and the file is saved in non-windows [e.g. not CR/LF] format - (fix due to Mika Boström) + (fix due to Mika Bostr?m) -- Merged in LibTomMath for kicks -- Changed the build process so that by default "mycrypt_custom.h" is included and provided The makefile doesn't include any build options anymore @@ -1342,6 +1383,6 @@ v0.02 -- Changed RC5 to only allow 12 to 24 rounds v0.01 -- We will call this the first version. /* $Source: /cvs/libtom/libtomcrypt/changes,v $ */ -/* $Revision: 1.123 $ */ -/* $Date: 2005/08/01 16:50:34 $ */ +/* $Revision: 1.151 $ */ +/* $Date: 2005/11/17 22:04:00 $ */ diff --git a/crypt.tex b/crypt.tex index 567de59..e697b93 100644 --- a/crypt.tex +++ b/crypt.tex @@ -47,7 +47,7 @@ \def\gap{\vspace{0.5ex}} \makeindex \begin{document} -\title{LibTomCrypt \\ Version 1.06} +\title{LibTomCrypt \\ Version 1.07} \author{Tom St Denis \\ \\ tomstdenis@gmail.com \\ @@ -236,8 +236,7 @@ int main(void) { } \end{verbatim} -The header file ``tomcrypt.h'' also includes ``stdio.h'', ``string.h'', ``stdlib.h'', ``time.h'', ``ctype.h'' and -``ltc\_tommath.h'' (the bignum library routines). +The header file ``tomcrypt.h'' also includes ``stdio.h'', ``string.h'', ``stdlib.h'', ``time.h'' and ``ctype.h''. \section{Macros} @@ -363,16 +362,17 @@ done with a key you can simply discard it (e.g. they can be on the stack). To encrypt or decrypt a block in ECB mode there are these two function classes \index{Cipher Encrypt} \index{Cipher Decrypt} \begin{verbatim} -void XXX_ecb_encrypt(const unsigned char *pt, unsigned char *ct, +int XXX_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); -void XXX_ecb_decrypt(const unsigned char *ct, unsigned char *pt, +int XXX_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey); \end{verbatim} These two functions will encrypt or decrypt (respectively) a single block of text\footnote{The size of which depends on which cipher you are using.} and store the result where you want it. It is possible that the input and output buffer are the same buffer. For the encrypt function ``pt''\footnote{pt stands for plaintext.} is the input and -``ct''\footnote{ct stands for ciphertext.} is the output. For the decryption function it's the opposite. To test a particular +``ct''\footnote{ct stands for ciphertext.} is the output. For the decryption function it's the opposite. They both +return \textbf{CRYPT\_OK} on success. To test a particular cipher against test vectors\footnote{As published in their design papers.} call the self-test function \subsection{Self--Testing} @@ -496,39 +496,47 @@ struct _cipher_descriptor { block_length, default_rounds; int (*setup)(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); - void (*ecb_encrypt)(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); - void (*ecb_decrypt)(const unsigned char *ct, unsigned char *pt, symmetric_key *skey); - int (*test)(void); + int (*ecb_encrypt)(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); + int (*ecb_decrypt)(const unsigned char *ct, unsigned char *pt, symmetric_key *skey); + int (*test)(void); void (*done)(symmetric_key *skey); int (*keysize)(int *keysize); - void (*accel_ecb_encrypt)(const unsigned char *pt, + int (*accel_ecb_encrypt)(const unsigned char *pt, unsigned char *ct, unsigned long blocks, symmetric_key *skey); - void (*accel_ecb_decrypt)(const unsigned char *ct, + int (*accel_ecb_decrypt)(const unsigned char *ct, unsigned char *pt, unsigned long blocks, symmetric_key *skey); - void (*accel_cbc_encrypt)(const unsigned char *pt, + int (*accel_cbc_encrypt)(const unsigned char *pt, unsigned char *ct, unsigned long blocks, unsigned char *IV, symmetric_key *skey); - void (*accel_cbc_decrypt)(const unsigned char *ct, + int (*accel_cbc_decrypt)(const unsigned char *ct, unsigned char *pt, unsigned long blocks, unsigned char *IV, symmetric_key *skey); - void (*accel_ctr_encrypt)(const unsigned char *pt, + int (*accel_ctr_encrypt)(const unsigned char *pt, unsigned char *ct, unsigned long blocks, unsigned char *IV, int mode, symmetric_key *skey); - void (*accel_ccm_memory)( + int (*accel_ccm_memory)( const unsigned char *key, unsigned long keylen, + symmetric_key *uskey, const unsigned char *nonce, unsigned long noncelen, const unsigned char *header, unsigned long headerlen, unsigned char *pt, unsigned long ptlen, unsigned char *ct, unsigned char *tag, unsigned long *taglen, int direction); - + int (*accel_gcm_memory)( + const unsigned char *key, unsigned long keylen, + const unsigned char *IV, unsigned long IVlen, + const unsigned char *adata, unsigned long adatalen, + unsigned char *pt, unsigned long ptlen, + unsigned char *ct, + unsigned char *tag, unsigned long *taglen, + int direction); }; \end{verbatim} \end{small} @@ -1200,6 +1208,7 @@ function that performs the protocol. \begin{verbatim} int ccm_memory(int cipher, const unsigned char *key, unsigned long keylen, + symmetric_key *uskey, const unsigned char *nonce, unsigned long noncelen, const unsigned char *header, unsigned long headerlen, unsigned char *pt, unsigned long ptlen, @@ -1209,9 +1218,15 @@ int ccm_memory(int cipher, \end{verbatim} This performs the ``CCM'' operation on the data. The ``cipher'' variable indicates which cipher in the descriptor table to use. It must have a -16--byte block size for CCM. The key is ``key'' with a length of ``keylen'' octets. The nonce or salt is ``nonce'' of -length ``noncelen'' octets. The header is meta--data you want to send with the message but not have encrypted, it is stored in ``header'' -of length ``headerlen'' octets. The header can be zero octets long (if $headerlen = 0$ then you can pass ``header'' as \textbf{NULL}). +16--byte block size for CCM. + +The key can be specified in one of two fashions. First it can be passed as an array of octets in ``key'' of length ``keylen''. Alternatively, +it can be passed in as a previously scheduled key in ``uskey''. The latter fashion saves time when the same key is used for multiple packets. If +``uskey'' is not \textbf{NULL} then ``key'' may be \textbf{NULL} (and vice-versa). + +The nonce or salt is ``nonce'' of length ``noncelen'' octets. The header is meta--data you want to send with the message but not have +encrypted, it is stored in ``header'' of length ``headerlen'' octets. The header can be zero octets long (if $headerlen = 0$ then +you can pass ``header'' as \textbf{NULL}). The plaintext is stored in ``pt'' and the ciphertext in ``ct''. The length of both are expected to be equal and is passed in as ``ptlen''. It is allowable that $pt = ct$. The ``direction'' variable indicates whether encryption (direction $=$ \textbf{CCM\_ENCRYPT}) or @@ -2902,28 +2917,39 @@ int ecc_shared_secret(ecc_key *private_key, The ``private\_key'' is your own key and ``public\_key'' is the key the other user sent you. Note that this function stores only the $x$ co-ordinate of the shared elliptic point as described in ANSI X9.63 ECC--DH. -\section{ECC Packet} +\section{ECC Diffie-Hellman Encryption} Similar to the RSA API there are two functions which encrypt and decrypt symmetric keys using the ECC public key algorithms. -\index{ecc\_encrypt\_key()} \index{ecc\_decrypt\_key()} +\index{ecc\_encrypt\_key()} \begin{verbatim} int ecc_encrypt_key(const unsigned char *in, unsigned long inlen, unsigned char *out, unsigned long *outlen, prng_state *prng, int wprng, int hash, ecc_key *key); +\end{verbatim} +Where ``in'' is an input symmetric key of no more than 64 bytes. This function creates a random public key +and computes the hash of the shared secret. The message digest is then XOR'ed against the symmetric key. All of the required +data is placed in ``out'' by ``ecc\_encrypt\_key()''. The hash chosen must produce a message digest at least as large +as the symmetric key you are trying to share. + +The data is encrypted to the public ECC ``key'' such that only the holder of the private key can decrypt the payload. If you want +to have multiple recipients you will have to call this function for each public ECC key you want to encrypt to. + + +\index{ecc\_decrypt\_key()} +\begin{verbatim} int ecc_decrypt_key(const unsigned char *in, unsigned long inlen, unsigned char *out, unsigned long *outlen, ecc_key *key); \end{verbatim} -Where ``in'' is an input symmetric key of no more than 64 bytes. Essentially these routines created a random public key -and find the hash of the shared secret. The message digest is than XOR'ed against the symmetric key. All of the required -data is placed in ``out'' by ``ecc\_encrypt\_key()''. The hash chosen must produce a message digest at least as large -as the symmetric key you are trying to share. +This function will decrypt an encrypted payload. The ``key'' provided must be the private key corresponding to the public key +used during encryption. If the wrong key is provided the function won't specifically return an error code. It is important +to use some form of challenge response in that case (e.g. compute a MAC of a known string). -\subsection{Encrypt Packet Format} +\subsection{Encrypt Encryption Format} The packet format for the encrypted keys is the following ASN.1 SEQUENCE: @@ -2935,30 +2961,40 @@ ECCEncrypt ::= SEQUENCE { } \end{verbatim} +\section{ECC DSA Signatures} + There are also functions to sign and verify the hash of a message. -\index{ecc\_sign\_hash()} \index{ecc\_verify\_hash()} +\index{ecc\_sign\_hash()} \begin{verbatim} int ecc_sign_hash(const unsigned char *in, unsigned long inlen, unsigned char *out, unsigned long *outlen, prng_state *prng, int wprng, ecc_key *key); +\end{verbatim} +This function will EC--DSA sign the message digest stored in the buffer ``in'' of length inlen octets. The signature +will be stored in the ``out'' buffer of length ``outlen''. The function requires a properly seeded PRNG and +the ECC ``key'' provided must be a private key. + +\index{ecc\_verify\_hash()} +\begin{verbatim} int ecc_verify_hash(const unsigned char *sig, unsigned long siglen, const unsigned char *hash, unsigned long hashlen, int *stat, ecc_key *key); \end{verbatim} -The ``ecc\_sign\_hash'' function signs the message hash in ``in'' of length ``inlen'' and forms a ECC packet in ``out''. -The ``ecc\_verify\_hash'' function verifies the ECC signature in ``sig'' against the hash in ``hash''. It sets ``stat'' -to non-zero if the signature passes or zero if it fails. +This function will verify the EC-DSA signature in ``sig'' of length ``siglen'' against the message digest ``hash''. +It will store a non--zero value in ``stat'' if the signature is valid. Note that the function will not return +an error if the signature is invalid. It will if the actual signature payload is an invalid format. They ECC ``key'' +must be the public (or private) ECC key corresponding to the key that performed the signature. \subsection{Signature Format} -The signature code is an implementation of X9.62 EC-DSA and the output is comformant for GF(p) curves. +The signature code is an implementation of X9.62 EC--DSA and the output is comformant for GF(p) curves. \section{ECC Keysizes} With ECC if you try and sign a hash that is bigger than your ECC key you can run into problems. The math will still work and in effect the signature will still work. With ECC keys the strength of the signature is limited by the size of the hash or the size of they key, whichever is smaller. For example, if you sign with SHA256 and an ECC-192 key in effect -you have 192-bits of security. +you have 96-bits of security. The library will not warn you if you make this mistake so it is important to check yourself before using the signatures. @@ -3077,6 +3113,7 @@ This will test ``key'' and store the result in ``stat''. If the result is $stat and should not be used at all. If the result is $stat = 1$ the DSA key is valid (as far as valid mathematics are concerned). \section{Signatures} +\subsection{Signature Generation} To generate a DSA signature call the following function \index{dsa\_sign\_hash()} @@ -3090,6 +3127,7 @@ Which will sign the data in ``in'' of length ``inlen'' bytes. The signature is of the signature in ``outlen''. If the signature is longer than the size you initially specify in ``outlen'' nothing is stored and the function returns an error code. The DSA ``key'' must be of the \textbf{PK\_PRIVATE} persuasion. +\subsection{Signature Verification} To verify a hash created with that function use the following function \index{dsa\_verify\_hash()} @@ -3101,6 +3139,35 @@ int dsa_verify_hash(const unsigned char *sig, unsigned long siglen, Which will verify the data in ``hash'' of length ``inlen'' against the signature stored in ``sig'' of length ``siglen''. It will set ``stat'' to $1$ if the signature is valid, otherwise it sets ``stat'' to $0$. +\section{DSA Encrypt and Decrypt} +As of version 1.07 the DSA keys can be used to encrypt and decrypt small payloads. It works similar to the ECC encryption where +a shared key is computed and the hash of the shared key xor'ed against the plaintext forms the ciphertext. + +\subsection{DSA Encryption} +This function will encrypt a small payload with a recipients public DSA key. + +\index{dsa\_encrypt\_key()} +\begin{verbatim} +int dsa_encrypt_key(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen, + prng_state *prng, int wprng, int hash, + dsa_key *key); +\end{verbatim} + +This will encrypt the payload in ``in'' of length ``inlen'' and store the ciphertext in the output buffer ``out''. The +length of the ciphertext ``outlen'' must be originally set to the length of the output buffer. The DSA ``key'' can be +a public key. + +\subsection{DSA Decryption} + +\index{dsa\_decrypt\_key()} +\begin{verbatim} +int dsa_decrypt_key(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen, + dsa_key *key); +\end{verbatim} +This will decrypt the ciphertext ``in'' of length ``inlen'' and store the original payload in ``out'' of length ``outlen''. The DSA ``key'' must be a private key. + \section{Import and Export} To export a DSA key so that it can be transported use the following function @@ -3137,13 +3204,16 @@ in the same manner as the other data types except they use list of objects known \index{ltc\_asn1\_list structure} \begin{verbatim} typedef struct { - int type; - void *data; - unsigned long size; - int used; + int type; + void *data; + unsigned long size; + int used; + struct ltc_asn1_list_ *prev, *next, + *child, *parent; } ltc_asn1_list; \end{verbatim} +\index{LTC\_SET\_ASN1 macro} The ``type'' field is one of the following ASN.1 field definitions. The ``data'' pointer is a void pointer to the data to be encoded (or the destination) and the ``size'' field is specific to what you are encoding (e.g. number of bits in the BIT STRING data type). The ``used'' field is primarily for the CHOICE decoder and reflects if the particular member of a list was the decoded data type. To help build the lists in an orderly fashion the macro @@ -3468,6 +3538,45 @@ This will decode the input in the ``in'' field of length ``inlen''. It uses the The ``inlen'' field will be updated with the length of the decoded data type as well as the respective entry in the ``list'' field will have the ``used'' flag set to non--zero to reflect it was the data type decoded. +\subsection{ASN.1 Flexi Decoder} +The ASN.1 ``flexi'' decoder allows the developer to decode arbitrary ASN.1 DER packets (provided they use data types LibTomCrypt supports) without first knowing +the structure of the data. Where der\_decode\_sequence() requires the developer to specify the data types to decode in advance the flexi decoder is entirely +free form. + +The flexi decoder uses the same ``ltc\_asn1\_list'' but instead of being stored in an array it uses the linked list pointers ``prev'', ``next'', ``parent'' +and ``child''. The list works as a ``doubly-linked list'' structure where decoded items at the same level are sibblings (using next and prev) and items +encoded in a SEQUENCE are stored as a child element. + +When a SEQUENCE has been encountered a SEQUENCE item is added as a sibbling (e.g. list.type == LTC\_ASN1\_SEQUENCE) and the child pointer points to a new list +of items contained within the sequence\footnote{The same will be true for the SET data type when I eventually support it.}. + +\index{der\_decode\_sequence\_flexi()} +\begin{verbatim} +int der_decode_sequence_flexi(const unsigned char *in, unsigned long *inlen, + ltc_asn1_list **out); +\end{verbatim} + +This will decode items in the ``in'' buffer of max input length ``inlen'' and store the newly created pointer to the list in ``out''. This function allocates +all required memory for the decoding. It stores the number of octets read back into ``inlen''. + +The function will terminate when either it hits an invalid ASN.1 type octet or it reads ``inlen'' octets. An early terminate is a soft error and returns +normally. The decoded list ``out'' will point to the very first element of the list (e.g. both parent and prev pointers will be \textbf{NULL}). + +An invalid decoding will terminate the process and free the allocated memory automatically. + +\textbf{Note} that the list decoded by this function is \textbf{NOT} in the correct form for der\_encode\_sequence() to use directly. You will have to first +have to convert the list by first storing all of the sibblings in an array then storing all the children as sub-lists of a sequence using the ``.data'' +pointer. Currently no function in LibTomCrypt provides this ability. + +To free the list use the following function. + +\index{der\_sequence\_free()} +\begin{verbatim} +void der_sequence_free(ltc_asn1_list *in); +\end{verbatim} + +This will free all of the memory allocated by der\_decode\_sequence\_flexi(). + \section{Password Based Cryptography} \subsection{PKCS \#5} \index{PKCS \#5} @@ -3729,6 +3838,26 @@ libraries. One for LibTomMath and one for TomsFastMath. All GNU driven makefiles (including the makefile for ICC) use a set of common variables to control the build and install process. Most of the settings can be overwritten from the command line which makes custom installation a breeze. +\index{MAKE} +\index{CC} +\index{AR} +\subsection{MAKE, CC and AR} +The MAKE, CC and AR flags can all be overwritten. They default to ``make'', ``\$CC'' and ``\$AR'' respectively. + +Changing MAKE allows you to change what program will be invoked to handle sub--directories. E.g. + +\begin{verbatim} +MAKE=gmake gmake install +\end{verbatim} + +Will build and install the libraries with the ``gmake'' tool. Similarly + +\begin{verbatim} +CC=arm-gcc AR=arm-ar make +\end{verbatim} + +Will build the library using ``arm--gcc'' as the compiler and ``arm--ar'' as the archiver. + \subsection{IGNORE\_SPEED} \index{IGNORE\_SPEED} When \textbf{IGNORE\_SPEED} has been defined the default optimization flags for CFLAGS will be disabled which allows the developer to specify new @@ -3758,7 +3887,8 @@ directory which defaults to ``/usr/lib''. \textbf{INCPATH} is the prefix for th All four can be used to create custom install locations depending on the nature of the OS and file system in use. \begin{verbatim} -make LIBPATH=/home/tom/project/lib INCPATH=/home/tom/project/include DATAPATH=/home/tom/project/docs install +make LIBPATH=/home/tom/project/lib INCPATH=/home/tom/project/include \ + DATAPATH=/home/tom/project/docs install \end{verbatim} This will build the library and install it to the directories under ``/home/tom/project/''. e.g. @@ -3848,13 +3978,11 @@ LibTomCrypt can also be built as a shared library through the ``makefile.shared' that you \textbf{must} specify the \textbf{EXTRALIBS} variable at install time. \begin{verbatim} -CFLAGS="-DTFM_DESC" EXTRALIBS=-ltfm make -f makefile.shared +CFLAGS="-DTFM_DESC" EXTRALIBS=-ltfm make -f makefile.shared install \end{verbatim} -This will build and install the library and link the shared object against the TomsFastMath library (which must be installed as a shared object as well). -Note that unlike the static build there is no ``install'' target. The default action of this make script is to install the library. - -The shared build process requires libtool to be installed. +This will build and install the library and link the shared object against the TomsFastMath library (which must be installed as a shared object as well). The +shared build process requires libtool to be installed. \section{tomcrypt\_cfg.h} The file ``tomcrypt\_cfg.h'' is what lets you control various high level macros which control the behaviour @@ -4025,26 +4153,31 @@ struct ltc_cipher_descriptor { @param skey [out] The destination of the scheduled key @return CRYPT_OK if successful */ - int (*setup)(const unsigned char *key, int keylen, - int num_rounds, symmetric_key *skey); + int (*setup)(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); /** Encrypt a block @param pt The plaintext @param ct [out] The ciphertext @param skey The scheduled key + @return CRYPT_OK if successful */ - void (*ecb_encrypt)(const unsigned char *pt, - unsigned char *ct, symmetric_key *skey); + int (*ecb_encrypt)(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); /** Decrypt a block @param ct The ciphertext @param pt [out] The plaintext @param skey The scheduled key + @return CRYPT_OK if successful */ - void (*ecb_decrypt)(const unsigned char *ct, - unsigned char *pt, symmetric_key *skey); + int (*ecb_decrypt)(const unsigned char *ct, unsigned char *pt, symmetric_key *skey); /** Test the block cipher @return CRYPT_OK if successful, CRYPT_NOP if self-testing has been disabled */ int (*test)(void); + + /** Terminate the context + @param skey The scheduled key + */ + void (*done)(symmetric_key *skey); + /** Determine a key size @param keysize [in/out] The size of the key desired and the suggested size @return CRYPT_OK if successful @@ -4057,20 +4190,20 @@ struct ltc_cipher_descriptor { @param ct Ciphertext @param blocks The number of complete blocks to process @param skey The scheduled key context + @return CRYPT_OK if successful */ - void (*accel_ecb_encrypt)(const unsigned char *pt, - unsigned char *ct, unsigned long blocks, - symmetric_key *skey); + int (*accel_ecb_encrypt)(const unsigned char *pt, unsigned char *ct, + unsigned long blocks, symmetric_key *skey); /** Accelerated ECB decryption @param pt Plaintext @param ct Ciphertext @param blocks The number of complete blocks to process @param skey The scheduled key context + @return CRYPT_OK if successful */ - void (*accel_ecb_decrypt)(const unsigned char *ct, - unsigned char *pt, unsigned long blocks, - symmetric_key *skey); + int (*accel_ecb_decrypt)(const unsigned char *ct, unsigned char *pt, + unsigned long blocks, symmetric_key *skey); /** Accelerated CBC encryption @param pt Plaintext @@ -4078,10 +4211,11 @@ struct ltc_cipher_descriptor { @param blocks The number of complete blocks to process @param IV The initial value (input/output) @param skey The scheduled key context + @return CRYPT_OK if successful */ - void (*accel_cbc_encrypt)(const unsigned char *pt, - unsigned char *ct, unsigned long blocks, - unsigned char *IV, symmetric_key *skey); + int (*accel_cbc_encrypt)(const unsigned char *pt, unsigned char *ct, + unsigned long blocks, unsigned char *IV, + symmetric_key *skey); /** Accelerated CBC decryption @param pt Plaintext @@ -4089,10 +4223,11 @@ struct ltc_cipher_descriptor { @param blocks The number of complete blocks to process @param IV The initial value (input/output) @param skey The scheduled key context + @return CRYPT_OK if successful */ - void (*accel_cbc_decrypt)(const unsigned char *ct, - unsigned char *pt, unsigned long blocks, - unsigned char *IV, symmetric_key *skey); + int (*accel_cbc_decrypt)(const unsigned char *ct, unsigned char *pt, + unsigned long blocks, unsigned char *IV, + symmetric_key *skey); /** Accelerated CTR encryption @param pt Plaintext @@ -4101,14 +4236,16 @@ struct ltc_cipher_descriptor { @param IV The initial value (input/output) @param mode little or big endian counter (mode=0 or mode=1) @param skey The scheduled key context + @return CRYPT_OK if successful */ - void (*accel_ctr_encrypt)(const unsigned char *pt, - unsigned char *ct, unsigned long blocks, - unsigned char *IV, int mode, symmetric_key *skey); + int (*accel_ctr_encrypt)(const unsigned char *pt, unsigned char *ct, + unsigned long blocks, unsigned char *IV, + int mode, symmetric_key *skey); /** Accelerated CCM packet (one-shot) @param key The secret key to use @param keylen The length of the secret key (octets) + @param uskey A previously scheduled key [optional can be NULL] @param nonce The session nonce [use once] @param noncelen The length of the nonce @param header The header for the session @@ -4121,8 +4258,9 @@ struct ltc_cipher_descriptor { @param direction Encrypt or Decrypt direction (0 or 1) @return CRYPT_OK if successful */ - void (*accel_ccm_memory)( + int (*accel_ccm_memory)( const unsigned char *key, unsigned long keylen, + symmetric_key *uskey, const unsigned char *nonce, unsigned long noncelen, const unsigned char *header, unsigned long headerlen, unsigned char *pt, unsigned long ptlen, @@ -4143,8 +4281,9 @@ struct ltc_cipher_descriptor { @param tag [out] The MAC tag @param taglen [in/out] The MAC tag length @param direction Encrypt or Decrypt mode (GCM_ENCRYPT or GCM_DECRYPT) + @return CRYPT_OK on success */ - void (*accel_gcm_memory)( + int (*accel_gcm_memory)( const unsigned char *key, unsigned long keylen, const unsigned char *IV, unsigned long IVlen, const unsigned char *adata, unsigned long adatalen, @@ -4152,7 +4291,6 @@ struct ltc_cipher_descriptor { unsigned char *ct, unsigned char *tag, unsigned long *taglen, int direction); - }; \end{verbatim} \end{small} @@ -4231,8 +4369,22 @@ buffer provided) before encrypting it to create the pad. The accelerator will only be used to encrypt whole blocks. Partial blocks are always handled in software. \subsubsection{Accelerated CCM} -This function is meant for accelerated CCM encryption or decryption. It processes the entire packet in one call. Note that the setup() function will not -be called prior to this. This function must handle scheduling the key provided on its own. +This function is meant for accelerated CCM encryption or decryption. It processes the entire packet in one call. You can optimize the work flow somewhat +by allowing the caller to call the setup() function first to schedule the key if your accelerator cannot do the key schedule on the fly (for instance). This +function MUST support both key passing methods. + +\begin{center} +\begin{small} +\begin{tabular}{|r|r|l|} +\hline \textbf{key} & \textbf{uskey} & \textbf{Source of key} \\ +\hline NULL & NULL & Error, not supported \\ +\hline non-NULL & NULL & Use key, do a key schedule \\ +\hline NULL & non-NULL & Use uskey, key schedule not required \\ +\hline non-NULL & non-NULL & Use uskey, key schedule not required \\ +\hline +\end{tabular} +\end{small} +\end{center} \subsubsection{Accelerated GCM} This function is meant for accelerated GCM encryption or decryption. It processes the entire packet in one call. Note that the setup() function will not @@ -4560,7 +4712,6 @@ typedef struct { */ int (*add)(void *a, void *b, void *c); - /** add two integers @param a The first source integer @param b The second source integer (single digit of upto bits_per_digit in length) @@ -4748,6 +4899,16 @@ typedef struct { /* ---- (optional) rsa optimized math (for internal CRT) ---- */ + /** RSA Key Generation + @param prng An active PRNG state + @param wprng The index of the PRNG desired + @param size The size of the modulus (key size) desired (octets) + @param e The "e" value (public key). e==65537 is a good choice + @param key [out] Destination of a newly created private key pair + @return CRYPT_OK if successful, upon error all allocated ram is freed + */ + int (*rsa_keygen)(prng_state *prng, int wprng, int size, long e, rsa_key *key); + /** RSA exponentiation @param in The octet array representing the base @param inlen The length of the input @@ -4851,5 +5012,5 @@ Since the function is given the entire RSA key (for private keys only) CRT is po \end{document} % $Source: /cvs/libtom/libtomcrypt/crypt.tex,v $ -% $Revision: 1.45 $ -% $Date: 2005/08/01 16:59:29 $ +% $Revision: 1.55 $ +% $Date: 2005/11/18 01:45:03 $ diff --git a/demos/encrypt.c b/demos/encrypt.c index 1f4d746..80ec5dc 100644 --- a/demos/encrypt.c +++ b/demos/encrypt.c @@ -170,7 +170,7 @@ int main(int argc, char *argv[]) exit(-1); } - if ((errno = ctr_start(cipher_idx,IV,key,ks,0,&ctr)) != CRYPT_OK) { + if ((errno = ctr_start(cipher_idx,IV,key,ks,0,CTR_COUNTER_LITTLE_ENDIAN,&ctr)) != CRYPT_OK) { printf("ctr_start error: %s\n",error_to_string(errno)); exit(-1); } @@ -212,7 +212,7 @@ int main(int argc, char *argv[]) exit(-1); } - if ((errno = ctr_start(cipher_idx,IV,key,ks,0,&ctr)) != CRYPT_OK) { + if ((errno = ctr_start(cipher_idx,IV,key,ks,0,CTR_COUNTER_LITTLE_ENDIAN,&ctr)) != CRYPT_OK) { printf("ctr_start error: %s\n",error_to_string(errno)); exit(-1); } diff --git a/demos/test.c b/demos/test.c index 381ba0f..d8d4e04 100644 --- a/demos/test.c +++ b/demos/test.c @@ -22,8 +22,9 @@ int main(void) printf("\nmac_test......"); fflush(stdout); x = mac_test(); printf(x ? "failed" : "passed");if (x) exit(EXIT_FAILURE); printf("\npkcs_1_test..."); fflush(stdout); x = pkcs_1_test(); printf(x ? "failed" : "passed");if (x) exit(EXIT_FAILURE); printf("\nrsa_test......"); fflush(stdout); x = rsa_test(); printf(x ? "failed" : "passed");if (x) exit(EXIT_FAILURE); - printf("\necc_test......"); fflush(stdout); x = ecc_tests(); printf(x ? "failed" : "passed");if (x) exit(EXIT_FAILURE); + printf("\necc_test......"); fflush(stdout); x = ecc_tests(); printf(x ? "failed" : "passed");if (x) exit(EXIT_FAILURE); printf("\ndsa_test......"); fflush(stdout); x = dsa_test(); printf(x ? "failed" : "passed");if (x) exit(EXIT_FAILURE); + printf("\nkatja_test...."); fflush(stdout); x = katja_test(); printf(x ? "failed" : "passed");if (x) exit(EXIT_FAILURE); printf("\n"); return EXIT_SUCCESS; } diff --git a/demos/timing.c b/demos/timing.c index 2b01a9b..dd35995 100644 --- a/demos/timing.c +++ b/demos/timing.c @@ -14,7 +14,6 @@ reg_algs(); extern ltc_math_descriptor EXT_MATH_LIB; ltc_mp = EXT_MATH_LIB; #endif - time_keysched(); time_cipher(); time_cipher2(); @@ -27,6 +26,9 @@ time_mult(); time_sqr(); time_rsa(); time_ecc(); +#ifdef USE_LTM +time_katja(); +#endif return EXIT_SUCCESS; } diff --git a/demos/tv_gen.c b/demos/tv_gen.c index eb67836..7b40aa7 100644 --- a/demos/tv_gen.c +++ b/demos/tv_gen.c @@ -551,7 +551,7 @@ void ccm_gen(void) plaintext[z] = (unsigned char)(z & 255); } len = sizeof(tag); - if ((err = ccm_memory(x, key, kl, nonce, 13, plaintext, y1, plaintext, y1, plaintext, tag, &len, CCM_ENCRYPT)) != CRYPT_OK) { + if ((err = ccm_memory(x, key, kl, NULL, nonce, 13, plaintext, y1, plaintext, y1, plaintext, tag, &len, CCM_ENCRYPT)) != CRYPT_OK) { printf("Error CCM'ing: %s\n", error_to_string(err)); exit(EXIT_FAILURE); } @@ -682,7 +682,7 @@ void ecc_gen(void) mp_set(G->z, 1); while (mp_cmp(k, order) == LTC_MP_LT) { - ltc_ecc_mulmod(k, G, R, modulus, 1); + ltc_mp.ecc_ptmul(k, G, R, modulus, 1); mp_tohex(k, str); fprintf(out, "%s, ", str); mp_tohex(R->x, str); fprintf(out, "%s, ", str); mp_tohex(R->y, str); fprintf(out, "%s\n", str); diff --git a/doc/crypt.pdf b/doc/crypt.pdf index 21832c47fecffb5bcf1d92f98af042f205abfb8f..08145c8d373adbc4bd370428c9953e5d28aceb28 100644 GIT binary patch delta 273653 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

gKAuM`Eq1wu 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≤h$#$5wT@a?q%6|!W_MeKac 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

$Ko=b(^ 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
XgyJ1iVqLsy$KStb*Dh^9dhP!LsQJVV

diff --git a/makefile b/makefile
index 0c1b11f..bc0554f 100644
--- a/makefile
+++ b/makefile
@@ -4,7 +4,7 @@
 # Modified by Clay Culver
 
 # The version
-VERSION=1.06
+VERSION=1.07
 
 # Compiler and Linker Names
 #CC=gcc
@@ -14,12 +14,23 @@ VERSION=1.06
 #AR=ar
 #ARFLAGS=r
 
+ifndef MAKE
+  MAKE=make
+endif
+
+# ranlib tools
+ifndef RANLIB
+   RANLIB=ranlib
+endif
+
 # Compilation flags. Note the += does not write over the user's CFLAGS!
 CFLAGS += -c -I./testprof/ -I./src/headers/ -Wall -Wsign-compare -W -Wshadow -Wno-unused-parameter -DLTC_SOURCE
 
 # additional warnings (newer GCC 3.4 and higher)
-#CFLAGS += -Wsystem-headers -Wdeclaration-after-statement -Wbad-function-cast -Wcast-align -Wstrict-prototypes -Wmissing-prototypes \
-#		  -Wmissing-declarations -Wpointer-arith 
+ifdef GCC_34
+CFLAGS += -Wsystem-headers -Wdeclaration-after-statement -Wbad-function-cast -Wcast-align -Wstrict-prototypes -Wmissing-prototypes \
+		  -Wmissing-declarations -Wpointer-arith 
+endif
 
 ifndef IGNORE_SPEED
 
@@ -47,8 +58,8 @@ ifndef LIBNAME
 endif
 ifndef LIBTEST
    LIBTEST=libtomcrypt_prof.a
-   LIBTEST_S=$(LIBTEST)
 endif
+LIBTEST_S=$(LIBTEST)
 
 HASH=hashsum
 CRYPT=encrypt
@@ -154,22 +165,31 @@ src/pk/asn1/der/octet/der_length_octet_string.o \
 src/pk/asn1/der/printable_string/der_decode_printable_string.o \
 src/pk/asn1/der/printable_string/der_encode_printable_string.o \
 src/pk/asn1/der/printable_string/der_length_printable_string.o \
-src/pk/asn1/der/sequence/der_decode_sequence.o src/pk/asn1/der/sequence/der_decode_sequence_multi.o \
-src/pk/asn1/der/sequence/der_encode_sequence.o src/pk/asn1/der/sequence/der_encode_sequence_multi.o \
-src/pk/asn1/der/sequence/der_length_sequence.o \
-src/pk/asn1/der/short_integer/der_decode_short_integer.o \
+src/pk/asn1/der/sequence/der_decode_sequence.o src/pk/asn1/der/sequence/der_decode_sequence_flexi.o \
+src/pk/asn1/der/sequence/der_decode_sequence_multi.o src/pk/asn1/der/sequence/der_encode_sequence.o \
+src/pk/asn1/der/sequence/der_encode_sequence_multi.o src/pk/asn1/der/sequence/der_length_sequence.o \
+src/pk/asn1/der/sequence/der_sequence_free.o src/pk/asn1/der/short_integer/der_decode_short_integer.o \
 src/pk/asn1/der/short_integer/der_encode_short_integer.o \
 src/pk/asn1/der/short_integer/der_length_short_integer.o src/pk/asn1/der/utctime/der_decode_utctime.o \
 src/pk/asn1/der/utctime/der_encode_utctime.o src/pk/asn1/der/utctime/der_length_utctime.o \
-src/pk/dsa/dsa_export.o src/pk/dsa/dsa_free.o src/pk/dsa/dsa_import.o src/pk/dsa/dsa_make_key.o \
+src/pk/dsa/dsa_decrypt_key.o src/pk/dsa/dsa_encrypt_key.o src/pk/dsa/dsa_export.o src/pk/dsa/dsa_free.o \
+src/pk/dsa/dsa_import.o src/pk/dsa/dsa_make_key.o src/pk/dsa/dsa_shared_secret.o \
 src/pk/dsa/dsa_sign_hash.o src/pk/dsa/dsa_verify_hash.o src/pk/dsa/dsa_verify_key.o src/pk/ecc/ecc.o \
-src/pk/pkcs1/pkcs_1_i2osp.o src/pk/pkcs1/pkcs_1_mgf1.o src/pk/pkcs1/pkcs_1_oaep_decode.o \
-src/pk/pkcs1/pkcs_1_oaep_encode.o src/pk/pkcs1/pkcs_1_os2ip.o src/pk/pkcs1/pkcs_1_pss_decode.o \
-src/pk/pkcs1/pkcs_1_pss_encode.o src/pk/rsa/rsa_decrypt_key.o src/pk/rsa/rsa_encrypt_key.o \
-src/pk/rsa/rsa_export.o src/pk/rsa/rsa_exptmod.o src/pk/rsa/rsa_free.o src/pk/rsa/rsa_import.o \
-src/pk/rsa/rsa_make_key.o src/pk/rsa/rsa_sign_hash.o src/pk/rsa/rsa_verify_hash.o src/prngs/fortuna.o \
-src/prngs/rc4.o src/prngs/rng_get_bytes.o src/prngs/rng_make_prng.o src/prngs/sober128.o \
-src/prngs/sprng.o src/prngs/yarrow.o 
+src/pk/ecc/ecc_decrypt_key.o src/pk/ecc/ecc_encrypt_key.o src/pk/ecc/ecc_export.o src/pk/ecc/ecc_free.o \
+src/pk/ecc/ecc_get_size.o src/pk/ecc/ecc_import.o src/pk/ecc/ecc_make_key.o \
+src/pk/ecc/ecc_shared_secret.o src/pk/ecc/ecc_sign_hash.o src/pk/ecc/ecc_sizes.o src/pk/ecc/ecc_test.o \
+src/pk/ecc/ecc_verify_hash.o src/pk/ecc/ltc_ecc_is_valid_idx.o src/pk/ecc/ltc_ecc_map.o \
+src/pk/ecc/ltc_ecc_mulmod.o src/pk/ecc/ltc_ecc_mulmod_timing.o src/pk/ecc/ltc_ecc_points.o \
+src/pk/ecc/ltc_ecc_projective_add_point.o src/pk/ecc/ltc_ecc_projective_dbl_point.o \
+src/pk/katja/katja_decrypt_key.o src/pk/katja/katja_encrypt_key.o src/pk/katja/katja_export.o \
+src/pk/katja/katja_exptmod.o src/pk/katja/katja_free.o src/pk/katja/katja_import.o \
+src/pk/katja/katja_make_key.o src/pk/pkcs1/pkcs_1_i2osp.o src/pk/pkcs1/pkcs_1_mgf1.o \
+src/pk/pkcs1/pkcs_1_oaep_decode.o src/pk/pkcs1/pkcs_1_oaep_encode.o src/pk/pkcs1/pkcs_1_os2ip.o \
+src/pk/pkcs1/pkcs_1_pss_decode.o src/pk/pkcs1/pkcs_1_pss_encode.o src/pk/rsa/rsa_decrypt_key.o \
+src/pk/rsa/rsa_encrypt_key.o src/pk/rsa/rsa_export.o src/pk/rsa/rsa_exptmod.o src/pk/rsa/rsa_free.o \
+src/pk/rsa/rsa_import.o src/pk/rsa/rsa_make_key.o src/pk/rsa/rsa_sign_hash.o \
+src/pk/rsa/rsa_verify_hash.o src/prngs/fortuna.o src/prngs/rc4.o src/prngs/rng_get_bytes.o \
+src/prngs/rng_make_prng.o src/prngs/sober128.o src/prngs/sprng.o src/prngs/yarrow.o 
 
 HEADERS=src/headers/tomcrypt_cfg.h src/headers/tomcrypt_mac.h src/headers/tomcrypt_macros.h \
 src/headers/tomcrypt_custom.h src/headers/tomcrypt_argchk.h src/headers/tomcrypt_cipher.h \
@@ -203,8 +223,6 @@ src/ciphers/aes/aes_enc.o: src/ciphers/aes/aes.c src/ciphers/aes/aes_tab.c
 src/ciphers/aes/aes.o: src/ciphers/aes/aes.c src/ciphers/aes/aes_tab.c
 src/ciphers/twofish/twofish.o: src/ciphers/twofish/twofish.c src/ciphers/twofish/twofish_tab.c
 src/hashes/whirl/whirl.o: src/hashes/whirl/whirl.c src/hashes/whirl/whirltab.c
-src/pk/ecc/ecc.o: src/pk/ecc/ecc.c src/pk/ecc/ecc_sys.c
-src/pk/dh/dh.o: src/pk/dh/dh.c src/pk/dh/dh_sys.c
 src/hashes/sha2/sha512.o: src/hashes/sha2/sha512.c src/hashes/sha2/sha384.c
 src/hashes/sha2/sha256.o: src/hashes/sha2/sha256.c src/hashes/sha2/sha224.c
 
@@ -212,11 +230,11 @@ src/hashes/sha2/sha256.o: src/hashes/sha2/sha256.c src/hashes/sha2/sha224.c
 library: $(LIBNAME)
 
 testprof/$(LIBTEST): 
-	cd testprof ; CFLAGS="$(CFLAGS)" LIBTEST_S=$(LIBTEST_S) make 
+	cd testprof ; CFLAGS="$(CFLAGS)" LIBTEST_S=$(LIBTEST_S) $(MAKE) 
 
 $(LIBNAME): $(OBJECTS)
 	$(AR) $(ARFLAGS) $@ $(OBJECTS) 
-	ranlib $(LIBNAME)
+	$(RANLIB) $@
 
 #This rule makes the hash program included with libtomcrypt
 hashsum: library $(HASHOBJECTS)
@@ -242,28 +260,33 @@ timing: library testprof/$(LIBTEST) $(TIMINGS)
 test: library testprof/$(LIBTEST) $(TESTS)
 	$(CC) $(TESTS) testprof/$(LIBTEST) $(LIBNAME) $(EXTRALIBS) -o $(TEST)
 
-
 #This rule installs the library and the header files. This must be run
 #as root in order to have a high enough permission to write to the correct
 #directories and to set the owner and group to root.
+ifndef NODOCS
 install: library docs
+else
+install: library
+endif
 	install -d -g $(GROUP) -o $(USER) $(DESTDIR)$(LIBPATH)
 	install -d -g $(GROUP) -o $(USER) $(DESTDIR)$(INCPATH)
 	install -d -g $(GROUP) -o $(USER) $(DESTDIR)$(DATAPATH)
 	install -g $(GROUP) -o $(USER) $(LIBNAME) $(DESTDIR)$(LIBPATH)
 	install -g $(GROUP) -o $(USER) $(HEADERS) $(DESTDIR)$(INCPATH)
+ifndef NODOCS
 	install -g $(GROUP) -o $(USER) doc/crypt.pdf $(DESTDIR)$(DATAPATH)
+endif
 
-install_test: $(LIBTEST)
+install_test: testprof/$(LIBTEST)
 	install -d -g $(GROUP) -o $(USER) $(DESTDIR)$(LIBPATH)
 	install -d -g $(GROUP) -o $(USER) $(DESTDIR)$(INCPATH)
-	install -g $(GROUP) -o $(USER) $(LIBTEST) $(DESTDIR)$(LIBPATH)
+	install -g $(GROUP) -o $(USER) testprof/$(LIBTEST) $(DESTDIR)$(LIBPATH)
 
 profile:
-	CFLAGS="$(CFLAGS) -fprofile-generate" make timing EXTRALIBS=-lgcov
+	CFLAGS="$(CFLAGS) -fprofile-generate" $(MAKE) timing EXTRALIBS="$(EXTRALIBS) -lgcov"
 	./timing
 	rm -f timing `find . -type f | grep [.][ao] | xargs`
-	CFLAGS="$(CFLAGS) -fprofile-use" make timing EXTRALIBS=-lgcov
+	CFLAGS="$(CFLAGS) -fprofile-use" $(MAKE) timing EXTRALIBS="$(EXTRALIBS) -lgcov"
 
 
 #This rule cleans the source tree of all compiled code, not including the pdf
@@ -291,7 +314,7 @@ clean:
 #build the doxy files (requires Doxygen, tetex and patience)
 doxy:
 	doxygen
-	cd doc/doxygen/latex ; make ; mv -f refman.pdf ../../.
+	cd doc/doxygen/latex ; ${MAKE} ; mv -f refman.pdf ../../.
 	echo The huge doxygen PDF should be available as doc/refman.pdf
 	
 #This builds the crypt.pdf file. Note that the rm -f *.pdf has been removed
@@ -333,6 +356,5 @@ zipup: no_oops docs
 
 
 # $Source: /cvs/libtom/libtomcrypt/makefile,v $ 
-# $Revision: 1.86 $ 
-# $Date: 2005/07/30 04:54:20 $ 
-
+# $Revision: 1.103 $ 
+# $Date: 2005/11/18 01:46:22 $ 
diff --git a/makefile.icc b/makefile.icc
index 4a6dc67..64d0798 100644
--- a/makefile.icc
+++ b/makefile.icc
@@ -152,22 +152,31 @@ src/pk/asn1/der/octet/der_length_octet_string.o \
 src/pk/asn1/der/printable_string/der_decode_printable_string.o \
 src/pk/asn1/der/printable_string/der_encode_printable_string.o \
 src/pk/asn1/der/printable_string/der_length_printable_string.o \
-src/pk/asn1/der/sequence/der_decode_sequence.o src/pk/asn1/der/sequence/der_decode_sequence_multi.o \
-src/pk/asn1/der/sequence/der_encode_sequence.o src/pk/asn1/der/sequence/der_encode_sequence_multi.o \
-src/pk/asn1/der/sequence/der_length_sequence.o \
-src/pk/asn1/der/short_integer/der_decode_short_integer.o \
+src/pk/asn1/der/sequence/der_decode_sequence.o src/pk/asn1/der/sequence/der_decode_sequence_flexi.o \
+src/pk/asn1/der/sequence/der_decode_sequence_multi.o src/pk/asn1/der/sequence/der_encode_sequence.o \
+src/pk/asn1/der/sequence/der_encode_sequence_multi.o src/pk/asn1/der/sequence/der_length_sequence.o \
+src/pk/asn1/der/sequence/der_sequence_free.o src/pk/asn1/der/short_integer/der_decode_short_integer.o \
 src/pk/asn1/der/short_integer/der_encode_short_integer.o \
 src/pk/asn1/der/short_integer/der_length_short_integer.o src/pk/asn1/der/utctime/der_decode_utctime.o \
 src/pk/asn1/der/utctime/der_encode_utctime.o src/pk/asn1/der/utctime/der_length_utctime.o \
-src/pk/dsa/dsa_export.o src/pk/dsa/dsa_free.o src/pk/dsa/dsa_import.o src/pk/dsa/dsa_make_key.o \
+src/pk/dsa/dsa_decrypt_key.o src/pk/dsa/dsa_encrypt_key.o src/pk/dsa/dsa_export.o src/pk/dsa/dsa_free.o \
+src/pk/dsa/dsa_import.o src/pk/dsa/dsa_make_key.o src/pk/dsa/dsa_shared_secret.o \
 src/pk/dsa/dsa_sign_hash.o src/pk/dsa/dsa_verify_hash.o src/pk/dsa/dsa_verify_key.o src/pk/ecc/ecc.o \
-src/pk/pkcs1/pkcs_1_i2osp.o src/pk/pkcs1/pkcs_1_mgf1.o src/pk/pkcs1/pkcs_1_oaep_decode.o \
-src/pk/pkcs1/pkcs_1_oaep_encode.o src/pk/pkcs1/pkcs_1_os2ip.o src/pk/pkcs1/pkcs_1_pss_decode.o \
-src/pk/pkcs1/pkcs_1_pss_encode.o src/pk/rsa/rsa_decrypt_key.o src/pk/rsa/rsa_encrypt_key.o \
-src/pk/rsa/rsa_export.o src/pk/rsa/rsa_exptmod.o src/pk/rsa/rsa_free.o src/pk/rsa/rsa_import.o \
-src/pk/rsa/rsa_make_key.o src/pk/rsa/rsa_sign_hash.o src/pk/rsa/rsa_verify_hash.o src/prngs/fortuna.o \
-src/prngs/rc4.o src/prngs/rng_get_bytes.o src/prngs/rng_make_prng.o src/prngs/sober128.o \
-src/prngs/sprng.o src/prngs/yarrow.o 
+src/pk/ecc/ecc_decrypt_key.o src/pk/ecc/ecc_encrypt_key.o src/pk/ecc/ecc_export.o src/pk/ecc/ecc_free.o \
+src/pk/ecc/ecc_get_size.o src/pk/ecc/ecc_import.o src/pk/ecc/ecc_make_key.o \
+src/pk/ecc/ecc_shared_secret.o src/pk/ecc/ecc_sign_hash.o src/pk/ecc/ecc_sizes.o src/pk/ecc/ecc_test.o \
+src/pk/ecc/ecc_verify_hash.o src/pk/ecc/ltc_ecc_is_valid_idx.o src/pk/ecc/ltc_ecc_map.o \
+src/pk/ecc/ltc_ecc_mulmod.o src/pk/ecc/ltc_ecc_mulmod_timing.o src/pk/ecc/ltc_ecc_points.o \
+src/pk/ecc/ltc_ecc_projective_add_point.o src/pk/ecc/ltc_ecc_projective_dbl_point.o \
+src/pk/katja/katja_decrypt_key.o src/pk/katja/katja_encrypt_key.o src/pk/katja/katja_export.o \
+src/pk/katja/katja_exptmod.o src/pk/katja/katja_free.o src/pk/katja/katja_import.o \
+src/pk/katja/katja_make_key.o src/pk/pkcs1/pkcs_1_i2osp.o src/pk/pkcs1/pkcs_1_mgf1.o \
+src/pk/pkcs1/pkcs_1_oaep_decode.o src/pk/pkcs1/pkcs_1_oaep_encode.o src/pk/pkcs1/pkcs_1_os2ip.o \
+src/pk/pkcs1/pkcs_1_pss_decode.o src/pk/pkcs1/pkcs_1_pss_encode.o src/pk/rsa/rsa_decrypt_key.o \
+src/pk/rsa/rsa_encrypt_key.o src/pk/rsa/rsa_export.o src/pk/rsa/rsa_exptmod.o src/pk/rsa/rsa_free.o \
+src/pk/rsa/rsa_import.o src/pk/rsa/rsa_make_key.o src/pk/rsa/rsa_sign_hash.o \
+src/pk/rsa/rsa_verify_hash.o src/prngs/fortuna.o src/prngs/rc4.o src/prngs/rng_get_bytes.o \
+src/prngs/rng_make_prng.o src/prngs/sober128.o src/prngs/sprng.o src/prngs/yarrow.o 
 
 HEADERS=src/headers/tomcrypt_cfg.h src/headers/tomcrypt_mac.h src/headers/tomcrypt_macros.h \
 src/headers/tomcrypt_custom.h src/headers/tomcrypt_argchk.h src/headers/tomcrypt_cipher.h \
@@ -207,8 +216,6 @@ src/ciphers/aes/aes_enc.o: src/ciphers/aes/aes.c src/ciphers/aes/aes_tab.c
 src/ciphers/aes/aes.o: src/ciphers/aes/aes.c src/ciphers/aes/aes_tab.c
 src/ciphers/twofish/twofish.o: src/ciphers/twofish/twofish.c src/ciphers/twofish/twofish_tab.c
 src/hashes/whirl/whirl.o: src/hashes/whirl/whirl.c src/hashes/whirl/whirltab.c
-src/pk/ecc/ecc.o: src/pk/ecc/ecc.c src/pk/ecc/ecc_sys.c
-src/pk/dh/dh.o: src/pk/dh/dh.c src/pk/dh/dh_sys.c
 src/hashes/sha2/sha512.o: src/hashes/sha2/sha512.c src/hashes/sha2/sha384.c
 src/hashes/sha2/sha256.o: src/hashes/sha2/sha256.c src/hashes/sha2/sha224.c
 
@@ -254,5 +261,5 @@ install: library
 	install -g $(GROUP) -o $(USER) $(HEADERS) $(DESTDIR)$(INCPATH)
 
 # $Source: /cvs/libtom/libtomcrypt/makefile.icc,v $   
-# $Revision: 1.39 $   
-# $Date: 2005/07/30 23:38:39 $ 
+# $Revision: 1.44 $   
+# $Date: 2005/11/18 01:46:22 $ 
diff --git a/makefile.msvc b/makefile.msvc
index de6bc4b..d9d893d 100644
--- a/makefile.msvc
+++ b/makefile.msvc
@@ -1,7 +1,7 @@
 #MSVC Makefile [tested with MSVC 6.00 with SP5]
 #
 #Tom St Denis
-CFLAGS = /Isrc/headers/ /Itestprof/ /Ox /DWIN32 /DLTC_SOURCE /W3 /Fo$@
+CFLAGS = /Isrc/headers/ /Itestprof/ /Ox /DWIN32 /DLTC_SOURCE /W3 /Fo$@ $(CF)
 
 OBJECTS=src/ciphers/aes/aes_enc.obj src/ciphers/aes/aes.obj src/ciphers/anubis.obj src/ciphers/blowfish.obj \
 src/ciphers/cast5.obj src/ciphers/des.obj src/ciphers/khazad.obj src/ciphers/noekeon.obj src/ciphers/rc2.obj \
@@ -67,22 +67,31 @@ src/pk/asn1/der/octet/der_length_octet_string.obj \
 src/pk/asn1/der/printable_string/der_decode_printable_string.obj \
 src/pk/asn1/der/printable_string/der_encode_printable_string.obj \
 src/pk/asn1/der/printable_string/der_length_printable_string.obj \
-src/pk/asn1/der/sequence/der_decode_sequence.obj src/pk/asn1/der/sequence/der_decode_sequence_multi.obj \
-src/pk/asn1/der/sequence/der_encode_sequence.obj src/pk/asn1/der/sequence/der_encode_sequence_multi.obj \
-src/pk/asn1/der/sequence/der_length_sequence.obj \
-src/pk/asn1/der/short_integer/der_decode_short_integer.obj \
+src/pk/asn1/der/sequence/der_decode_sequence.obj src/pk/asn1/der/sequence/der_decode_sequence_flexi.obj \
+src/pk/asn1/der/sequence/der_decode_sequence_multi.obj src/pk/asn1/der/sequence/der_encode_sequence.obj \
+src/pk/asn1/der/sequence/der_encode_sequence_multi.obj src/pk/asn1/der/sequence/der_length_sequence.obj \
+src/pk/asn1/der/sequence/der_sequence_free.obj src/pk/asn1/der/short_integer/der_decode_short_integer.obj \
 src/pk/asn1/der/short_integer/der_encode_short_integer.obj \
 src/pk/asn1/der/short_integer/der_length_short_integer.obj src/pk/asn1/der/utctime/der_decode_utctime.obj \
 src/pk/asn1/der/utctime/der_encode_utctime.obj src/pk/asn1/der/utctime/der_length_utctime.obj \
-src/pk/dsa/dsa_export.obj src/pk/dsa/dsa_free.obj src/pk/dsa/dsa_import.obj src/pk/dsa/dsa_make_key.obj \
+src/pk/dsa/dsa_decrypt_key.obj src/pk/dsa/dsa_encrypt_key.obj src/pk/dsa/dsa_export.obj src/pk/dsa/dsa_free.obj \
+src/pk/dsa/dsa_import.obj src/pk/dsa/dsa_make_key.obj src/pk/dsa/dsa_shared_secret.obj \
 src/pk/dsa/dsa_sign_hash.obj src/pk/dsa/dsa_verify_hash.obj src/pk/dsa/dsa_verify_key.obj src/pk/ecc/ecc.obj \
-src/pk/pkcs1/pkcs_1_i2osp.obj src/pk/pkcs1/pkcs_1_mgf1.obj src/pk/pkcs1/pkcs_1_oaep_decode.obj \
-src/pk/pkcs1/pkcs_1_oaep_encode.obj src/pk/pkcs1/pkcs_1_os2ip.obj src/pk/pkcs1/pkcs_1_pss_decode.obj \
-src/pk/pkcs1/pkcs_1_pss_encode.obj src/pk/rsa/rsa_decrypt_key.obj src/pk/rsa/rsa_encrypt_key.obj \
-src/pk/rsa/rsa_export.obj src/pk/rsa/rsa_exptmod.obj src/pk/rsa/rsa_free.obj src/pk/rsa/rsa_import.obj \
-src/pk/rsa/rsa_make_key.obj src/pk/rsa/rsa_sign_hash.obj src/pk/rsa/rsa_verify_hash.obj src/prngs/fortuna.obj \
-src/prngs/rc4.obj src/prngs/rng_get_bytes.obj src/prngs/rng_make_prng.obj src/prngs/sober128.obj \
-src/prngs/sprng.obj src/prngs/yarrow.obj 
+src/pk/ecc/ecc_decrypt_key.obj src/pk/ecc/ecc_encrypt_key.obj src/pk/ecc/ecc_export.obj src/pk/ecc/ecc_free.obj \
+src/pk/ecc/ecc_get_size.obj src/pk/ecc/ecc_import.obj src/pk/ecc/ecc_make_key.obj \
+src/pk/ecc/ecc_shared_secret.obj src/pk/ecc/ecc_sign_hash.obj src/pk/ecc/ecc_sizes.obj src/pk/ecc/ecc_test.obj \
+src/pk/ecc/ecc_verify_hash.obj src/pk/ecc/ltc_ecc_is_valid_idx.obj src/pk/ecc/ltc_ecc_map.obj \
+src/pk/ecc/ltc_ecc_mulmod.obj src/pk/ecc/ltc_ecc_mulmod_timing.obj src/pk/ecc/ltc_ecc_points.obj \
+src/pk/ecc/ltc_ecc_projective_add_point.obj src/pk/ecc/ltc_ecc_projective_dbl_point.obj \
+src/pk/katja/katja_decrypt_key.obj src/pk/katja/katja_encrypt_key.obj src/pk/katja/katja_export.obj \
+src/pk/katja/katja_exptmod.obj src/pk/katja/katja_free.obj src/pk/katja/katja_import.obj \
+src/pk/katja/katja_make_key.obj src/pk/pkcs1/pkcs_1_i2osp.obj src/pk/pkcs1/pkcs_1_mgf1.obj \
+src/pk/pkcs1/pkcs_1_oaep_decode.obj src/pk/pkcs1/pkcs_1_oaep_encode.obj src/pk/pkcs1/pkcs_1_os2ip.obj \
+src/pk/pkcs1/pkcs_1_pss_decode.obj src/pk/pkcs1/pkcs_1_pss_encode.obj src/pk/rsa/rsa_decrypt_key.obj \
+src/pk/rsa/rsa_encrypt_key.obj src/pk/rsa/rsa_export.obj src/pk/rsa/rsa_exptmod.obj src/pk/rsa/rsa_free.obj \
+src/pk/rsa/rsa_import.obj src/pk/rsa/rsa_make_key.obj src/pk/rsa/rsa_sign_hash.obj \
+src/pk/rsa/rsa_verify_hash.obj src/prngs/fortuna.obj src/prngs/rc4.obj src/prngs/rng_get_bytes.obj \
+src/prngs/rng_make_prng.obj src/prngs/sober128.obj src/prngs/sprng.obj src/prngs/yarrow.obj 
 
 HEADERS=src/headers/tomcrypt_cfg.h src/headers/tomcrypt_mac.h src/headers/tomcrypt_macros.h \
 src/headers/tomcrypt_custom.h src/headers/tomcrypt_argchk.h src/headers/tomcrypt_cipher.h \
@@ -115,5 +124,6 @@ timing: demos/timing.c library
 	cl $(CFLAGS) demos/timing.c testprof/tomcrypt_prof.lib tomcrypt.lib advapi32.lib $(EXTRALIBS)
 
 # $Source: /cvs/libtom/libtomcrypt/makefile.msvc,v $   
-# $Revision: 1.17 $   
-# $Date: 2005/07/30 23:42:57 $ 
+# $Revision: 1.24 $   
+# $Date: 2005/11/18 01:46:22 $ 
+
diff --git a/makefile.shared b/makefile.shared
index f50207d..00163a0 100644
--- a/makefile.shared
+++ b/makefile.shared
@@ -6,10 +6,15 @@
 # Tom St Denis
 
 # The version
-VERSION=0:106
+VERSION=0:107
 
 # Compiler and Linker Names
-CC=libtool --mode=compile gcc
+CC=libtool --mode=compile gcc 
+
+# ranlib tools
+ifndef RANLIB
+   RANLIB=ranlib
+endif
 
 # Compilation flags. Note the += does not write over the user's CFLAGS!
 CFLAGS += -c -I./src/headers/ -Wall -Wsign-compare -W -Wshadow -DLTC_SOURCE
@@ -39,8 +44,10 @@ endif
 #CFLAGS += -DLTC_NO_ROLC
 
 #Output filenames for various targets.
-ifndef LIBTEST
+ifndef LIBTEST_S
    LIBTEST_S=libtomcrypt_prof.a
+endif
+ifndef LIBTEST
    LIBTEST=libtomcrypt_prof.la
 endif
 ifndef LIBNAME
@@ -152,22 +159,31 @@ src/pk/asn1/der/octet/der_length_octet_string.o \
 src/pk/asn1/der/printable_string/der_decode_printable_string.o \
 src/pk/asn1/der/printable_string/der_encode_printable_string.o \
 src/pk/asn1/der/printable_string/der_length_printable_string.o \
-src/pk/asn1/der/sequence/der_decode_sequence.o src/pk/asn1/der/sequence/der_decode_sequence_multi.o \
-src/pk/asn1/der/sequence/der_encode_sequence.o src/pk/asn1/der/sequence/der_encode_sequence_multi.o \
-src/pk/asn1/der/sequence/der_length_sequence.o \
-src/pk/asn1/der/short_integer/der_decode_short_integer.o \
+src/pk/asn1/der/sequence/der_decode_sequence.o src/pk/asn1/der/sequence/der_decode_sequence_flexi.o \
+src/pk/asn1/der/sequence/der_decode_sequence_multi.o src/pk/asn1/der/sequence/der_encode_sequence.o \
+src/pk/asn1/der/sequence/der_encode_sequence_multi.o src/pk/asn1/der/sequence/der_length_sequence.o \
+src/pk/asn1/der/sequence/der_sequence_free.o src/pk/asn1/der/short_integer/der_decode_short_integer.o \
 src/pk/asn1/der/short_integer/der_encode_short_integer.o \
 src/pk/asn1/der/short_integer/der_length_short_integer.o src/pk/asn1/der/utctime/der_decode_utctime.o \
 src/pk/asn1/der/utctime/der_encode_utctime.o src/pk/asn1/der/utctime/der_length_utctime.o \
-src/pk/dsa/dsa_export.o src/pk/dsa/dsa_free.o src/pk/dsa/dsa_import.o src/pk/dsa/dsa_make_key.o \
+src/pk/dsa/dsa_decrypt_key.o src/pk/dsa/dsa_encrypt_key.o src/pk/dsa/dsa_export.o src/pk/dsa/dsa_free.o \
+src/pk/dsa/dsa_import.o src/pk/dsa/dsa_make_key.o src/pk/dsa/dsa_shared_secret.o \
 src/pk/dsa/dsa_sign_hash.o src/pk/dsa/dsa_verify_hash.o src/pk/dsa/dsa_verify_key.o src/pk/ecc/ecc.o \
-src/pk/pkcs1/pkcs_1_i2osp.o src/pk/pkcs1/pkcs_1_mgf1.o src/pk/pkcs1/pkcs_1_oaep_decode.o \
-src/pk/pkcs1/pkcs_1_oaep_encode.o src/pk/pkcs1/pkcs_1_os2ip.o src/pk/pkcs1/pkcs_1_pss_decode.o \
-src/pk/pkcs1/pkcs_1_pss_encode.o src/pk/rsa/rsa_decrypt_key.o src/pk/rsa/rsa_encrypt_key.o \
-src/pk/rsa/rsa_export.o src/pk/rsa/rsa_exptmod.o src/pk/rsa/rsa_free.o src/pk/rsa/rsa_import.o \
-src/pk/rsa/rsa_make_key.o src/pk/rsa/rsa_sign_hash.o src/pk/rsa/rsa_verify_hash.o src/prngs/fortuna.o \
-src/prngs/rc4.o src/prngs/rng_get_bytes.o src/prngs/rng_make_prng.o src/prngs/sober128.o \
-src/prngs/sprng.o src/prngs/yarrow.o 
+src/pk/ecc/ecc_decrypt_key.o src/pk/ecc/ecc_encrypt_key.o src/pk/ecc/ecc_export.o src/pk/ecc/ecc_free.o \
+src/pk/ecc/ecc_get_size.o src/pk/ecc/ecc_import.o src/pk/ecc/ecc_make_key.o \
+src/pk/ecc/ecc_shared_secret.o src/pk/ecc/ecc_sign_hash.o src/pk/ecc/ecc_sizes.o src/pk/ecc/ecc_test.o \
+src/pk/ecc/ecc_verify_hash.o src/pk/ecc/ltc_ecc_is_valid_idx.o src/pk/ecc/ltc_ecc_map.o \
+src/pk/ecc/ltc_ecc_mulmod.o src/pk/ecc/ltc_ecc_mulmod_timing.o src/pk/ecc/ltc_ecc_points.o \
+src/pk/ecc/ltc_ecc_projective_add_point.o src/pk/ecc/ltc_ecc_projective_dbl_point.o \
+src/pk/katja/katja_decrypt_key.o src/pk/katja/katja_encrypt_key.o src/pk/katja/katja_export.o \
+src/pk/katja/katja_exptmod.o src/pk/katja/katja_free.o src/pk/katja/katja_import.o \
+src/pk/katja/katja_make_key.o src/pk/pkcs1/pkcs_1_i2osp.o src/pk/pkcs1/pkcs_1_mgf1.o \
+src/pk/pkcs1/pkcs_1_oaep_decode.o src/pk/pkcs1/pkcs_1_oaep_encode.o src/pk/pkcs1/pkcs_1_os2ip.o \
+src/pk/pkcs1/pkcs_1_pss_decode.o src/pk/pkcs1/pkcs_1_pss_encode.o src/pk/rsa/rsa_decrypt_key.o \
+src/pk/rsa/rsa_encrypt_key.o src/pk/rsa/rsa_export.o src/pk/rsa/rsa_exptmod.o src/pk/rsa/rsa_free.o \
+src/pk/rsa/rsa_import.o src/pk/rsa/rsa_make_key.o src/pk/rsa/rsa_sign_hash.o \
+src/pk/rsa/rsa_verify_hash.o src/prngs/fortuna.o src/prngs/rc4.o src/prngs/rng_get_bytes.o \
+src/prngs/rng_make_prng.o src/prngs/sober128.o src/prngs/sprng.o src/prngs/yarrow.o 
 
 HEADERS=src/headers/tomcrypt_cfg.h src/headers/tomcrypt_mac.h src/headers/tomcrypt_macros.h \
 src/headers/tomcrypt_custom.h src/headers/tomcrypt_argchk.h src/headers/tomcrypt_cipher.h \
@@ -194,8 +210,6 @@ src/ciphers/aes/aes_enc.o: src/ciphers/aes/aes.c src/ciphers/aes/aes_tab.c
 src/ciphers/aes/aes.o: src/ciphers/aes/aes.c src/ciphers/aes/aes_tab.c
 src/ciphers/twofish/twofish.o: src/ciphers/twofish/twofish.c src/ciphers/twofish/twofish_tab.c
 src/hashes/whirl/whirl.o: src/hashes/whirl/whirl.c src/hashes/whirl/whirltab.c
-src/pk/ecc/ecc.o: src/pk/ecc/ecc.c src/pk/ecc/ecc_sys.c
-src/pk/dh/dh.o: src/pk/dh/dh.c src/pk/dh/dh_sys.c
 src/hashes/sha2/sha512.o: src/hashes/sha2/sha512.c src/hashes/sha2/sha384.c
 src/hashes/sha2/sha256.o: src/hashes/sha2/sha256.c src/hashes/sha2/sha224.c
 
@@ -205,10 +219,13 @@ library: $(LIBNAME)
 testprof/$(LIBTEST):
 	cd testprof ; CFLAGS="$(CFLAGS)" GROUP=$(GROUP) USER=$(USER) VERSION=$(VERSION) LIBPATH=$(LIBPATH) LIBTEST=$(LIBTEST) LIBTEST_S=$(LIBTEST_S) make -f makefile.shared
 
-$(LIBNAME): $(OBJECTS)
+objs: $(OBJECTS)
+
+$(LIBNAME): $(OBJECTS) testprof/$(LIBTEST)
 	libtool --silent --mode=link gcc $(CFLAGS) `find . -type f | grep "[.]lo" | grep "src/" | xargs` $(EXTRALIBS) -o $(LIBNAME) -rpath $(LIBPATH) -version-info $(VERSION)
-	libtool --silent --mode=link gcc $(CFLAGS) `find . -type f | grep "[.]o" | grep "src/" | xargs`  $(EXTRALIBS) -o $(LIBNAME_S)
-	ranlib $(LIBNAME_S)
+
+install: $(LIBNAME)
+	cd testprof ; CFLAGS="$(CFLAGS)" GROUP=$(GROUP) USER=$(USER) VERSION=$(VERSION) LIBPATH=$(LIBPATH) LIBTEST=$(LIBTEST) LIBTEST_S=$(LIBTEST_S) make -f makefile.shared install
 	libtool --silent --mode=install install -c libtomcrypt.la $(LIBPATH)/libtomcrypt.la
 	install -d -g $(GROUP) -o $(USER) $(DESTDIR)$(INCPATH)
 	install -g $(GROUP) -o $(USER) $(HEADERS) $(DESTDIR)$(INCPATH)
@@ -233,5 +250,6 @@ timing: library testprof/$(LIBTEST) $(TIMINGS)
 	gcc -o $(TIMING) $(TIMINGS) -ltomcrypt_prof -ltomcrypt $(EXTRALIBS)
 
 # $Source: /cvs/libtom/libtomcrypt/makefile.shared,v $   
-# $Revision: 1.25 $   
-# $Date: 2005/07/30 04:54:20 $ 
+# $Revision: 1.36 $   
+# $Date: 2005/11/18 01:46:22 $ 
+
diff --git a/src/ciphers/aes/aes.c b/src/ciphers/aes/aes.c
index 584cd1e..dd97956 100644
--- a/src/ciphers/aes/aes.c
+++ b/src/ciphers/aes/aes.c
@@ -281,11 +281,12 @@ int SETUP(const unsigned char *key, int keylen, int num_rounds, symmetric_key *s
   @param pt The input plaintext (16 bytes)
   @param ct The output ciphertext (16 bytes)
   @param skey The key as scheduled
+  @return CRYPT_OK if successful
 */
 #ifdef LTC_CLEAN_STACK
-static void _rijndael_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey) 
+static int _rijndael_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey) 
 #else
-void ECB_ENC(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
+int ECB_ENC(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
 #endif
 {
     ulong32 s0, s1, s2, s3, t0, t1, t2, t3, *rk;
@@ -440,13 +441,16 @@ void ECB_ENC(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
         (Te4_0[byte(t2, 0)]) ^ 
         rk[3];
     STORE32H(s3, ct+12);
+
+    return CRYPT_OK;
 }
 
 #ifdef LTC_CLEAN_STACK
-void ECB_ENC(const unsigned char *pt, unsigned char *ct, symmetric_key *skey) 
+int ECB_ENC(const unsigned char *pt, unsigned char *ct, symmetric_key *skey) 
 {
-   _rijndael_ecb_encrypt(pt, ct, skey);
+   int err = _rijndael_ecb_encrypt(pt, ct, skey);
    burn_stack(sizeof(unsigned long)*8 + sizeof(unsigned long*) + sizeof(int)*2);
+   return err;
 }
 #endif
 
@@ -457,11 +461,12 @@ void ECB_ENC(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
   @param ct The input ciphertext (16 bytes)
   @param pt The output plaintext (16 bytes)
   @param skey The key as scheduled 
+  @return CRYPT_OK if successful
 */
 #ifdef LTC_CLEAN_STACK
-static void _rijndael_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey) 
+static int _rijndael_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey) 
 #else
-void ECB_DEC(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
+int ECB_DEC(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
 #endif
 {
     ulong32 s0, s1, s2, s3, t0, t1, t2, t3, *rk;
@@ -615,14 +620,17 @@ void ECB_DEC(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
         (Td4[byte(t0, 0)] & 0x000000ff) ^
         rk[3];
     STORE32H(s3, pt+12);
+
+    return CRYPT_OK;
 }
 
 
 #ifdef LTC_CLEAN_STACK
-void ECB_DEC(const unsigned char *ct, unsigned char *pt, symmetric_key *skey) 
+int ECB_DEC(const unsigned char *ct, unsigned char *pt, symmetric_key *skey) 
 {
-   _rijndael_ecb_decrypt(ct, pt, skey);
+   int err = _rijndael_ecb_decrypt(ct, pt, skey);
    burn_stack(sizeof(unsigned long)*8 + sizeof(unsigned long*) + sizeof(int)*2);
+   return err;
 }
 #endif
 
diff --git a/src/ciphers/anubis.c b/src/ciphers/anubis.c
index 625c23f..182edb5 100644
--- a/src/ciphers/anubis.c
+++ b/src/ciphers/anubis.c
@@ -1134,13 +1134,15 @@ static void anubis_crypt(const unsigned char *plaintext, unsigned char *cipherte
   @param pt The input plaintext (16 bytes)
   @param ct The output ciphertext (16 bytes)
   @param skey The key as scheduled
+  @return CRYPT_OK if successful
 */
-void anubis_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
+int anubis_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
 {
    LTC_ARGCHK(pt   != NULL);
    LTC_ARGCHK(ct   != NULL);
    LTC_ARGCHK(skey != NULL);
    anubis_crypt(pt, ct, skey->anubis.roundKeyEnc, skey->anubis.R);
+   return CRYPT_OK;
 }
 
 /**
@@ -1148,13 +1150,15 @@ void anubis_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_ke
   @param ct The input ciphertext (16 bytes)
   @param pt The output plaintext (16 bytes)
   @param skey The key as scheduled 
+  @return CRYPT_OK if successful
 */
-void anubis_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
+int anubis_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
 {
    LTC_ARGCHK(pt   != NULL);
    LTC_ARGCHK(ct   != NULL);
    LTC_ARGCHK(skey != NULL);
    anubis_crypt(ct, pt, skey->anubis.roundKeyDec, skey->anubis.R);
+   return CRYPT_OK;
 }
 
 /**
diff --git a/src/ciphers/blowfish.c b/src/ciphers/blowfish.c
index 44189b2..74b9d9c 100644
--- a/src/ciphers/blowfish.c
+++ b/src/ciphers/blowfish.c
@@ -385,11 +385,12 @@ int blowfish_setup(const unsigned char *key, int keylen, int num_rounds,
   @param pt The input plaintext (8 bytes)
   @param ct The output ciphertext (8 bytes)
   @param skey The key as scheduled
+  @return CRYPT_OK if successful
 */
 #ifdef LTC_CLEAN_STACK
-static void _blowfish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
+static int _blowfish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
 #else
-void blowfish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
+int blowfish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
 #endif
 {
    ulong32 L, R;
@@ -428,13 +429,16 @@ void blowfish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_
    /* store */
    STORE32H(R, &ct[0]);
    STORE32H(L, &ct[4]);
+
+   return CRYPT_OK;
 }
 
 #ifdef LTC_CLEAN_STACK
-void blowfish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
+int blowfish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
 {
-    _blowfish_ecb_encrypt(pt, ct, skey);
+    int err = _blowfish_ecb_encrypt(pt, ct, skey);
     burn_stack(sizeof(ulong32) * 2 + sizeof(int));
+    return err;
 }
 #endif
 
@@ -443,11 +447,12 @@ void blowfish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_
   @param ct The input ciphertext (8 bytes)
   @param pt The output plaintext (8 bytes)
   @param skey The key as scheduled 
+  @return CRYPT_OK if successful
 */
 #ifdef LTC_CLEAN_STACK
-static void _blowfish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
+static int _blowfish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
 #else
-void blowfish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
+int blowfish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
 #endif
 {
    ulong32 L, R;
@@ -486,13 +491,15 @@ void blowfish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_
    /* store */
    STORE32H(L, &pt[0]);
    STORE32H(R, &pt[4]);
+   return CRYPT_OK;
 }
 
 #ifdef LTC_CLEAN_STACK
-void blowfish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
+int blowfish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
 {
-    _blowfish_ecb_decrypt(ct, pt, skey);
+    int err = _blowfish_ecb_decrypt(ct, pt, skey);
     burn_stack(sizeof(ulong32) * 2 + sizeof(int));
+    return err;
 }
 #endif
 
diff --git a/src/ciphers/cast5.c b/src/ciphers/cast5.c
index 654b6ef..1d30794 100644
--- a/src/ciphers/cast5.c
+++ b/src/ciphers/cast5.c
@@ -536,9 +536,9 @@ INLINE static ulong32 FIII(ulong32 R, ulong32 Km, ulong32 Kr)
   @param skey The key as scheduled
 */
 #ifdef LTC_CLEAN_STACK
-static void _cast5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
+static int _cast5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
 #else
-void cast5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
+int cast5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
 #endif
 {
    ulong32 R, L;
@@ -569,14 +569,16 @@ void cast5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key
    }
    STORE32H(R,&ct[0]);
    STORE32H(L,&ct[4]);
+   return CRYPT_OK;
 }
 
 
 #ifdef LTC_CLEAN_STACK
-void cast5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
+int cast5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
 {
-   _cast5_ecb_encrypt(pt,ct,skey);
+   int err =_cast5_ecb_encrypt(pt,ct,skey);
    burn_stack(sizeof(ulong32)*3);
+   return err;
 }
 #endif
 
@@ -587,9 +589,9 @@ void cast5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key
   @param skey The key as scheduled 
 */
 #ifdef LTC_CLEAN_STACK
-static void _cast5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
+static int _cast5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
 #else
-void cast5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
+int cast5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
 #endif
 {
    ulong32 R, L;
@@ -620,13 +622,16 @@ void cast5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key
    L ^= FI(R, skey->cast5.K[0], skey->cast5.K[16]);
    STORE32H(L,&pt[0]);
    STORE32H(R,&pt[4]);
+
+   return CRYPT_OK;
 }
 
 #ifdef LTC_CLEAN_STACK
-void cast5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
+int cast5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
 {
-   _cast5_ecb_decrypt(ct,pt,skey);
+   int err = _cast5_ecb_decrypt(ct,pt,skey);
    burn_stack(sizeof(ulong32)*3);
+   return err;
 }
 #endif
 
diff --git a/src/ciphers/des.c b/src/ciphers/des.c
index 4d3629b..e40a837 100644
--- a/src/ciphers/des.c
+++ b/src/ciphers/des.c
@@ -1582,8 +1582,9 @@ int des3_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_k
   @param pt The input plaintext (8 bytes)
   @param ct The output ciphertext (8 bytes)
   @param skey The key as scheduled
+  @return CRYPT_OK if successful
 */
-void des_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
+int des_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
 {
     ulong32 work[2];
     LTC_ARGCHK(pt   != NULL);
@@ -1594,6 +1595,7 @@ void des_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *
     desfunc(work, skey->des.ek);
     STORE32H(work[0],ct+0);
     STORE32H(work[1],ct+4);
+    return CRYPT_OK;
 }
 
 /**
@@ -1601,8 +1603,9 @@ void des_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *
   @param ct The input ciphertext (8 bytes)
   @param pt The output plaintext (8 bytes)
   @param skey The key as scheduled 
+  @return CRYPT_OK if successful
 */
-void des_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
+int des_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
 {
     ulong32 work[2];
     LTC_ARGCHK(pt   != NULL);
@@ -1612,7 +1615,8 @@ void des_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *
     LOAD32H(work[1], ct+4);
     desfunc(work, skey->des.dk);
     STORE32H(work[0],pt+0);
-    STORE32H(work[1],pt+4);
+    STORE32H(work[1],pt+4);  
+    return CRYPT_OK;
 }
 
 /**
@@ -1620,8 +1624,9 @@ void des_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *
   @param pt The input plaintext (8 bytes)
   @param ct The output ciphertext (8 bytes)
   @param skey The key as scheduled
+  @return CRYPT_OK if successful
 */
-void des3_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
+int des3_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
 {
     ulong32 work[2];
     
@@ -1635,6 +1640,7 @@ void des3_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key
     desfunc(work, skey->des3.ek[2]);
     STORE32H(work[0],ct+0);
     STORE32H(work[1],ct+4);
+    return CRYPT_OK;
 }
 
 /**
@@ -1642,8 +1648,9 @@ void des3_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key
   @param ct The input ciphertext (8 bytes)
   @param pt The output plaintext (8 bytes)
   @param skey The key as scheduled 
+  @return CRYPT_OK if successful
 */
-void des3_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
+int des3_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
 {
     ulong32 work[2];
     LTC_ARGCHK(pt   != NULL);
@@ -1656,6 +1663,7 @@ void des3_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key
     desfunc(work, skey->des3.dk[2]);
     STORE32H(work[0],pt+0);
     STORE32H(work[1],pt+4);
+    return CRYPT_OK;
 }
 
 /**
diff --git a/src/ciphers/khazad.c b/src/ciphers/khazad.c
index d8e6902..3a84272 100644
--- a/src/ciphers/khazad.c
+++ b/src/ciphers/khazad.c
@@ -741,13 +741,15 @@ static void khazad_crypt(const unsigned char *plaintext, unsigned char *cipherte
   @param pt The input plaintext (8 bytes)
   @param ct The output ciphertext (8 bytes)
   @param skey The key as scheduled
+  @return CRYPT_OK if successful
 */
-void khazad_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
+int khazad_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
 {
    LTC_ARGCHK(pt   != NULL);
    LTC_ARGCHK(ct   != NULL);
    LTC_ARGCHK(skey != NULL);
    khazad_crypt(pt, ct, skey->khazad.roundKeyEnc);
+   return CRYPT_OK;
 }
 
 /**
@@ -755,13 +757,15 @@ void khazad_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_ke
   @param ct The input ciphertext (8 bytes)
   @param pt The output plaintext (8 bytes)
   @param skey The key as scheduled 
+  @return CRYPT_OK if successful
 */
-void khazad_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
+int khazad_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
 {
    LTC_ARGCHK(pt   != NULL);
    LTC_ARGCHK(ct   != NULL);
    LTC_ARGCHK(skey != NULL);
    khazad_crypt(ct, pt, skey->khazad.roundKeyDec);
+   return CRYPT_OK;
 }
 
 /**
diff --git a/src/ciphers/noekeon.c b/src/ciphers/noekeon.c
index 0a54a22..70c1fec 100644
--- a/src/ciphers/noekeon.c
+++ b/src/ciphers/noekeon.c
@@ -107,11 +107,12 @@ int noekeon_setup(const unsigned char *key, int keylen, int num_rounds, symmetri
   @param pt The input plaintext (16 bytes)
   @param ct The output ciphertext (16 bytes)
   @param skey The key as scheduled
+  @return CRYPT_OK if successful
 */
 #ifdef LTC_CLEAN_STACK
-static void _noekeon_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
+static int _noekeon_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
 #else
-void noekeon_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
+int noekeon_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
 #endif
 {
    ulong32 a,b,c,d,temp;
@@ -142,13 +143,16 @@ void noekeon_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_k
    
    STORE32H(a,&ct[0]); STORE32H(b,&ct[4]);
    STORE32H(c,&ct[8]); STORE32H(d,&ct[12]);
+
+   return CRYPT_OK;
 }
 
 #ifdef LTC_CLEAN_STACK
-void noekeon_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
+int noekeon_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
 {
-   _noekeon_ecb_encrypt(pt, ct, skey);
+   int err = _noekeon_ecb_encrypt(pt, ct, skey);
    burn_stack(sizeof(ulong32) * 5 + sizeof(int));
+   return CRYPT_OK;
 }
 #endif
 
@@ -157,11 +161,12 @@ void noekeon_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_k
   @param ct The input ciphertext (16 bytes)
   @param pt The output plaintext (16 bytes)
   @param skey The key as scheduled 
+  @return CRYPT_OK if successful
 */
 #ifdef LTC_CLEAN_STACK
-static void _noekeon_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
+static int _noekeon_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
 #else
-void noekeon_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
+int noekeon_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
 #endif
 {
    ulong32 a,b,c,d, temp;
@@ -192,13 +197,15 @@ void noekeon_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_k
    a ^= RC[0];
    STORE32H(a,&pt[0]); STORE32H(b, &pt[4]);
    STORE32H(c,&pt[8]); STORE32H(d, &pt[12]);
+   return CRYPT_OK;
 }
 
 #ifdef LTC_CLEAN_STACK
-void noekeon_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
+int noekeon_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
 {
-   _noekeon_ecb_decrypt(ct, pt, skey);
+   int err = _noekeon_ecb_decrypt(ct, pt, skey);
    burn_stack(sizeof(ulong32) * 5 + sizeof(int));
+   return err;
 }
 #endif
 
diff --git a/src/ciphers/rc2.c b/src/ciphers/rc2.c
index 47b7276..8d5608f 100644
--- a/src/ciphers/rc2.c
+++ b/src/ciphers/rc2.c
@@ -125,13 +125,14 @@ int rc2_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_ke
   @param pt The input plaintext (8 bytes)
   @param ct The output ciphertext (8 bytes)
   @param skey The key as scheduled
+  @return CRYPT_OK if successful
 */
 #ifdef LTC_CLEAN_STACK
-static void _rc2_ecb_encrypt( const unsigned char *pt,
+static int _rc2_ecb_encrypt( const unsigned char *pt,
                             unsigned char *ct,
                             symmetric_key *skey)
 #else
-void rc2_ecb_encrypt( const unsigned char *pt,
+int rc2_ecb_encrypt( const unsigned char *pt,
                             unsigned char *ct,
                             symmetric_key *skey)
 #endif
@@ -179,15 +180,18 @@ void rc2_ecb_encrypt( const unsigned char *pt,
     ct[5] = (unsigned char)(x54 >> 8);
     ct[6] = (unsigned char)x76;
     ct[7] = (unsigned char)(x76 >> 8);
+ 
+    return CRYPT_OK;
 }
 
 #ifdef LTC_CLEAN_STACK
-void rc2_ecb_encrypt( const unsigned char *pt,
+int rc2_ecb_encrypt( const unsigned char *pt,
                             unsigned char *ct,
                             symmetric_key *skey)
 {
-    _rc2_ecb_encrypt(pt, ct, skey);
+    int err = _rc2_ecb_encrypt(pt, ct, skey);
     burn_stack(sizeof(unsigned *) + sizeof(unsigned) * 5);
+    return err;
 }
 #endif
 
@@ -199,13 +203,14 @@ void rc2_ecb_encrypt( const unsigned char *pt,
   @param ct The input ciphertext (8 bytes)
   @param pt The output plaintext (8 bytes)
   @param skey The key as scheduled 
+  @return CRYPT_OK if successful
 */
 #ifdef LTC_CLEAN_STACK
-static void _rc2_ecb_decrypt( const unsigned char *ct,
+static int _rc2_ecb_decrypt( const unsigned char *ct,
                             unsigned char *pt,
                             symmetric_key *skey)
 #else
-void rc2_ecb_decrypt( const unsigned char *ct,
+int rc2_ecb_decrypt( const unsigned char *ct,
                             unsigned char *pt,
                             symmetric_key *skey)
 #endif
@@ -254,15 +259,18 @@ void rc2_ecb_decrypt( const unsigned char *ct,
     pt[5] = (unsigned char)(x54 >> 8);
     pt[6] = (unsigned char)x76;
     pt[7] = (unsigned char)(x76 >> 8);
+
+    return CRYPT_OK;
 }
 
 #ifdef LTC_CLEAN_STACK
-void rc2_ecb_decrypt( const unsigned char *ct,
+int rc2_ecb_decrypt( const unsigned char *ct,
                             unsigned char *pt,
                             symmetric_key *skey)
 {
-    _rc2_ecb_decrypt(ct, pt, skey);
+    int err = _rc2_ecb_decrypt(ct, pt, skey);
     burn_stack(sizeof(unsigned *) + sizeof(unsigned) * 4 + sizeof(int));
+    return err;
 }
 #endif
 
diff --git a/src/ciphers/rc5.c b/src/ciphers/rc5.c
index 070ff5a..9c1afe3 100644
--- a/src/ciphers/rc5.c
+++ b/src/ciphers/rc5.c
@@ -123,11 +123,12 @@ int rc5_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_ke
   @param pt The input plaintext (8 bytes)
   @param ct The output ciphertext (8 bytes)
   @param skey The key as scheduled
+  @return CRYPT_OK if successful
 */
 #ifdef LTC_CLEAN_STACK
-static void _rc5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
+static int _rc5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
 #else
-void rc5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
+int rc5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
 #endif
 {
    ulong32 A, B, *K;
@@ -159,13 +160,16 @@ void rc5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *
    }
    STORE32L(A, &ct[0]);
    STORE32L(B, &ct[4]);
+
+   return CRYPT_OK;
 }
 
 #ifdef LTC_CLEAN_STACK
-void rc5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
+int rc5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
 {
-   _rc5_ecb_encrypt(pt, ct, skey);
+   int err = _rc5_ecb_encrypt(pt, ct, skey);
    burn_stack(sizeof(ulong32) * 2 + sizeof(int));
+   return err;
 }
 #endif
 
@@ -174,11 +178,12 @@ void rc5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *
   @param ct The input ciphertext (8 bytes)
   @param pt The output plaintext (8 bytes)
   @param skey The key as scheduled 
+  @return CRYPT_OK if successful
 */
 #ifdef LTC_CLEAN_STACK
-static void _rc5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
+static int _rc5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
 #else
-void rc5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
+int rc5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
 #endif
 {
    ulong32 A, B, *K;
@@ -211,13 +216,16 @@ void rc5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *
    B -= skey->rc5.K[1];
    STORE32L(A, &pt[0]);
    STORE32L(B, &pt[4]);
+
+   return CRYPT_OK;
 }
 
 #ifdef LTC_CLEAN_STACK
-void rc5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
+int rc5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
 {
-   _rc5_ecb_decrypt(ct, pt, skey);
+   int err = _rc5_ecb_decrypt(ct, pt, skey);
    burn_stack(sizeof(ulong32) * 2 + sizeof(int));
+   return err;
 }
 #endif
 
diff --git a/src/ciphers/rc6.c b/src/ciphers/rc6.c
index 7a4558e..99274f0 100644
--- a/src/ciphers/rc6.c
+++ b/src/ciphers/rc6.c
@@ -120,9 +120,9 @@ int rc6_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_ke
   @param skey The key as scheduled
 */
 #ifdef LTC_CLEAN_STACK
-static void _rc6_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
+static int _rc6_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
 #else
-void rc6_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
+int rc6_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
 #endif
 {
    ulong32 a,b,c,d,t,u, *K;
@@ -155,13 +155,15 @@ void rc6_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *
    a += skey->rc6.K[42];
    c += skey->rc6.K[43];
    STORE32L(a,&ct[0]);STORE32L(b,&ct[4]);STORE32L(c,&ct[8]);STORE32L(d,&ct[12]);
+   return CRYPT_OK;
 }
 
 #ifdef LTC_CLEAN_STACK
-void rc6_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
+int rc6_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
 {
-   _rc6_ecb_encrypt(pt, ct, skey);
+   int err = _rc6_ecb_encrypt(pt, ct, skey);
    burn_stack(sizeof(ulong32) * 6 + sizeof(int));
+   return err;
 }
 #endif
 
@@ -172,9 +174,9 @@ void rc6_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *
   @param skey The key as scheduled 
 */
 #ifdef LTC_CLEAN_STACK
-static void _rc6_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
+static int _rc6_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
 #else
-void rc6_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
+int rc6_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
 #endif
 {
    ulong32 a,b,c,d,t,u, *K;
@@ -208,13 +210,16 @@ void rc6_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *
    b -= skey->rc6.K[0];
    d -= skey->rc6.K[1];
    STORE32L(a,&pt[0]);STORE32L(b,&pt[4]);STORE32L(c,&pt[8]);STORE32L(d,&pt[12]);
+
+   return CRYPT_OK;
 }
 
 #ifdef LTC_CLEAN_STACK
-void rc6_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
+int rc6_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
 {
-   _rc6_ecb_decrypt(ct, pt, skey);
+   int err = _rc6_ecb_decrypt(ct, pt, skey);
    burn_stack(sizeof(ulong32) * 6 + sizeof(int));
+   return err;
 }
 #endif
 
diff --git a/src/ciphers/safer/safer.c b/src/ciphers/safer/safer.c
index 6c27679..5241110 100644
--- a/src/ciphers/safer/safer.c
+++ b/src/ciphers/safer/safer.c
@@ -246,11 +246,11 @@ int safer_sk128_setup(const unsigned char *key, int keylen, int numrounds, symme
 }
 
 #ifdef LTC_CLEAN_STACK
-static void _safer_ecb_encrypt(const unsigned char *block_in,
+static int _safer_ecb_encrypt(const unsigned char *block_in,
                              unsigned char *block_out,
                              symmetric_key *skey)
 #else
-void safer_ecb_encrypt(const unsigned char *block_in,
+int safer_ecb_encrypt(const unsigned char *block_in,
                              unsigned char *block_out,
                              symmetric_key *skey)
 #endif
@@ -285,24 +285,26 @@ void safer_ecb_encrypt(const unsigned char *block_in,
     block_out[2] = c & 0xFF; block_out[3] = d & 0xFF;
     block_out[4] = e & 0xFF; block_out[5] = f & 0xFF;
     block_out[6] = g & 0xFF; block_out[7] = h & 0xFF;
+    return CRYPT_OK;
 }
 
 #ifdef LTC_CLEAN_STACK
-void safer_ecb_encrypt(const unsigned char *block_in,
+int safer_ecb_encrypt(const unsigned char *block_in,
                              unsigned char *block_out,
                              symmetric_key *skey)
 {
-    _safer_ecb_encrypt(block_in, block_out, skey);
+    int err = _safer_ecb_encrypt(block_in, block_out, skey);
     burn_stack(sizeof(unsigned char) * 9 + sizeof(unsigned int) + sizeof(unsigned char *));
+    return err;
 }
 #endif
 
 #ifdef LTC_CLEAN_STACK
-static void _safer_ecb_decrypt(const unsigned char *block_in,
+static int _safer_ecb_decrypt(const unsigned char *block_in,
                              unsigned char *block_out,
                              symmetric_key *skey)
 #else
-void safer_ecb_decrypt(const unsigned char *block_in,
+int safer_ecb_decrypt(const unsigned char *block_in,
                              unsigned char *block_out,
                              symmetric_key *skey)
 #endif
@@ -338,15 +340,17 @@ void safer_ecb_decrypt(const unsigned char *block_in,
     block_out[2] = c & 0xFF; block_out[3] = d & 0xFF;
     block_out[4] = e & 0xFF; block_out[5] = f & 0xFF;
     block_out[6] = g & 0xFF; block_out[7] = h & 0xFF;
+    return CRYPT_OK;
 }
 
 #ifdef LTC_CLEAN_STACK
-void safer_ecb_decrypt(const unsigned char *block_in,
+int safer_ecb_decrypt(const unsigned char *block_in,
                              unsigned char *block_out,
                              symmetric_key *skey)
 {
-    _safer_ecb_decrypt(block_in, block_out, skey);
+    int err = _safer_ecb_decrypt(block_in, block_out, skey);
     burn_stack(sizeof(unsigned char) * 9 + sizeof(unsigned int) + sizeof(unsigned char *));
+    return err;
 }
 #endif
 
diff --git a/src/ciphers/safer/saferp.c b/src/ciphers/safer/saferp.c
index 8474784..2c6cb2c 100644
--- a/src/ciphers/safer/saferp.c
+++ b/src/ciphers/safer/saferp.c
@@ -329,8 +329,9 @@ int saferp_setup(const unsigned char *key, int keylen, int num_rounds, symmetric
   @param pt The input plaintext (16 bytes)
   @param ct The output ciphertext (16 bytes)
   @param skey The key as scheduled
+  @return CRYPT_OK if successful
 */
-void saferp_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
+int saferp_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
 {
    unsigned char b[16];
    int x;
@@ -384,6 +385,7 @@ void saferp_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_ke
 #ifdef LTC_CLEAN_STACK
    zeromem(b, sizeof(b));
 #endif
+   return CRYPT_OK;
 }
 
 /**
@@ -391,8 +393,9 @@ void saferp_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_ke
   @param ct The input ciphertext (16 bytes)
   @param pt The output plaintext (16 bytes)
   @param skey The key as scheduled 
+  @return CRYPT_OK if successful
 */
-void saferp_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
+int saferp_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
 {
    unsigned char b[16];
    int x;
@@ -446,6 +449,7 @@ void saferp_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_ke
 #ifdef LTC_CLEAN_STACK
    zeromem(b, sizeof(b));
 #endif
+   return CRYPT_OK;
 }
 
 /**
diff --git a/src/ciphers/skipjack.c b/src/ciphers/skipjack.c
index 7635042..0695017 100644
--- a/src/ciphers/skipjack.c
+++ b/src/ciphers/skipjack.c
@@ -138,11 +138,12 @@ static unsigned ig_func(unsigned w, int *kp, unsigned char *key)
   @param pt The input plaintext (8 bytes)
   @param ct The output ciphertext (8 bytes)
   @param skey The key as scheduled
+  @return CRYPT_OK if successful
 */
 #ifdef LTC_CLEAN_STACK
-static void _skipjack_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
+static int _skipjack_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
 #else
-void skipjack_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
+int skipjack_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
 #endif
 {
    unsigned w1,w2,w3,w4,tmp,tmp1;
@@ -183,13 +184,16 @@ void skipjack_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_
    ct[2] = (w2>>8)&255; ct[3] = w2&255;
    ct[4] = (w3>>8)&255; ct[5] = w3&255;
    ct[6] = (w4>>8)&255; ct[7] = w4&255;
+
+   return CRYPT_OK;
 }
 
 #ifdef LTC_CLEAN_STACK
-void skipjack_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
+int skipjack_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
 {
-   _skipjack_ecb_encrypt(pt, ct, skey);
+   int err = _skipjack_ecb_encrypt(pt, ct, skey);
    burn_stack(sizeof(unsigned) * 8 + sizeof(int) * 2);
+   return err;
 }
 #endif
 
@@ -198,11 +202,12 @@ void skipjack_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_
   @param ct The input ciphertext (8 bytes)
   @param pt The output plaintext (8 bytes)
   @param skey The key as scheduled 
+  @return CRYPT_OK if successful
 */
 #ifdef LTC_CLEAN_STACK
-static void _skipjack_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
+static int _skipjack_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
 #else
-void skipjack_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
+int skipjack_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
 #endif
 {
    unsigned w1,w2,w3,w4,tmp;
@@ -247,13 +252,16 @@ void skipjack_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_
    pt[2] = (w2>>8)&255; pt[3] = w2&255;
    pt[4] = (w3>>8)&255; pt[5] = w3&255;
    pt[6] = (w4>>8)&255; pt[7] = w4&255;
+
+   return CRYPT_OK;
 }
 
 #ifdef LTC_CLEAN_STACK
-void skipjack_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
+int skipjack_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
 {
-   _skipjack_ecb_decrypt(ct, pt, skey);
+   int err = _skipjack_ecb_decrypt(ct, pt, skey);
    burn_stack(sizeof(unsigned) * 7 + sizeof(int) * 2);
+   return err;
 }
 #endif
 
diff --git a/src/ciphers/twofish/twofish.c b/src/ciphers/twofish/twofish.c
index bd71d03..160b33f 100644
--- a/src/ciphers/twofish/twofish.c
+++ b/src/ciphers/twofish/twofish.c
@@ -465,11 +465,12 @@ int twofish_setup(const unsigned char *key, int keylen, int num_rounds, symmetri
   @param pt The input plaintext (16 bytes)
   @param ct The output ciphertext (16 bytes)
   @param skey The key as scheduled
+  @return CRYPT_OK if successful
 */
 #ifdef LTC_CLEAN_STACK
-static void _twofish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
+static int _twofish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
 #else
-void twofish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
+int twofish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
 #endif
 {
     ulong32 a,b,c,d,ta,tb,tc,td,t1,t2, *k;
@@ -519,13 +520,16 @@ void twofish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_k
     /* store output */
     STORE32L(ta,&ct[0]); STORE32L(tb,&ct[4]);
     STORE32L(tc,&ct[8]); STORE32L(td,&ct[12]);
+
+    return CRYPT_OK;
 }
 
 #ifdef LTC_CLEAN_STACK
-void twofish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
+int twofish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
 {
-   _twofish_ecb_encrypt(pt, ct, skey);
+   int err = _twofish_ecb_encrypt(pt, ct, skey);
    burn_stack(sizeof(ulong32) * 10 + sizeof(int));
+   return err;
 }
 #endif
 
@@ -534,11 +538,12 @@ void twofish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_k
   @param ct The input ciphertext (16 bytes)
   @param pt The output plaintext (16 bytes)
   @param skey The key as scheduled 
+  @return CRYPT_OK if successful
 */
 #ifdef LTC_CLEAN_STACK
-static void _twofish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
+static int _twofish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
 #else
-void twofish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
+int twofish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
 #endif
 {
     ulong32 a,b,c,d,ta,tb,tc,td,t1,t2, *k;
@@ -591,13 +596,15 @@ void twofish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_k
     /* store */
     STORE32L(a, &pt[0]); STORE32L(b, &pt[4]);
     STORE32L(c, &pt[8]); STORE32L(d, &pt[12]);
+    return CRYPT_OK;
 }
 
 #ifdef LTC_CLEAN_STACK
-void twofish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
+int twofish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
 {
-   _twofish_ecb_decrypt(ct, pt, skey);
+   int err =_twofish_ecb_decrypt(ct, pt, skey);
    burn_stack(sizeof(ulong32) * 10 + sizeof(int));
+   return err;
 }
 #endif
 
diff --git a/src/ciphers/xtea.c b/src/ciphers/xtea.c
index 2712f87..aeb6317 100644
--- a/src/ciphers/xtea.c
+++ b/src/ciphers/xtea.c
@@ -71,8 +71,9 @@ int xtea_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_k
   @param pt The input plaintext (8 bytes)
   @param ct The output ciphertext (8 bytes)
   @param skey The key as scheduled
+  @return CRYPT_OK if successful
 */
-void xtea_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
+int xtea_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
 {
    unsigned long y, z;
    int r;
@@ -98,6 +99,7 @@ void xtea_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key
    }
    STORE32L(y, &ct[0]);
    STORE32L(z, &ct[4]);
+   return CRYPT_OK;
 }
 
 /**
@@ -105,8 +107,9 @@ void xtea_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key
   @param ct The input ciphertext (8 bytes)
   @param pt The output plaintext (8 bytes)
   @param skey The key as scheduled 
+  @return CRYPT_OK if successful
 */
-void xtea_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
+int xtea_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
 {
    unsigned long y, z;
    int r;
@@ -132,6 +135,7 @@ void xtea_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key
    }
    STORE32L(y, &pt[0]);
    STORE32L(z, &pt[4]);
+   return CRYPT_OK;
 }
 
 /**
diff --git a/src/encauth/ccm/ccm_memory.c b/src/encauth/ccm/ccm_memory.c
index abca36a..339d570 100644
--- a/src/encauth/ccm/ccm_memory.c
+++ b/src/encauth/ccm/ccm_memory.c
@@ -22,6 +22,7 @@
    @param cipher     The index of the cipher desired
    @param key        The secret key to use
    @param keylen     The length of the secret key (octets)
+   @param uskey      A previously scheduled key [optional can be NULL]
    @param nonce      The session nonce [use once]
    @param noncelen   The length of the nonce
    @param header     The header for the session
@@ -36,6 +37,7 @@
 */
 int ccm_memory(int cipher,
     const unsigned char *key,    unsigned long keylen,
+    symmetric_key       *uskey,
     const unsigned char *nonce,  unsigned long noncelen,
     const unsigned char *header, unsigned long headerlen,
           unsigned char *pt,     unsigned long ptlen,
@@ -48,7 +50,9 @@ int ccm_memory(int cipher,
    int            err;
    unsigned long  len, L, x, y, z, CTRlen;
 
-   LTC_ARGCHK(key    != NULL);
+   if (uskey == NULL) {
+      LTC_ARGCHK(key    != NULL);
+   }
    LTC_ARGCHK(nonce  != NULL);
    if (headerlen > 0) {
       LTC_ARGCHK(header != NULL);
@@ -85,15 +89,15 @@ int ccm_memory(int cipher,
 
    /* is there an accelerator? */
    if (cipher_descriptor[cipher].accel_ccm_memory != NULL) {
-       cipher_descriptor[cipher].accel_ccm_memory(
+       return cipher_descriptor[cipher].accel_ccm_memory(
            key,    keylen,
+           uskey,
            nonce,  noncelen,
            header, headerlen,
            pt,     ptlen,
            ct, 
            tag,    taglen,
            direction);
-      return CRYPT_OK;
    }
 
    /* let's get the L value */
@@ -114,15 +118,19 @@ int ccm_memory(int cipher,
    }
 
    /* allocate mem for the symmetric key */
-   skey = XMALLOC(sizeof(*skey));
-   if (skey == NULL) {
-      return CRYPT_MEM;
-   }
+   if (uskey == NULL) {
+      skey = XMALLOC(sizeof(*skey));
+      if (skey == NULL) {
+         return CRYPT_MEM;
+      }
 
-   /* initialize the cipher */
-   if ((err = cipher_descriptor[cipher].setup(key, keylen, 0, skey)) != CRYPT_OK) {
-      XFREE(skey);
-      return err;
+      /* initialize the cipher */
+      if ((err = cipher_descriptor[cipher].setup(key, keylen, 0, skey)) != CRYPT_OK) {
+         XFREE(skey);
+         return err;
+      }
+   } else {
+      skey = uskey;
    }
 
    /* form B_0 == flags | Nonce N | l(m) */
@@ -154,7 +162,9 @@ int ccm_memory(int cipher,
    }
 
    /* encrypt PAD */
-   cipher_descriptor[cipher].ecb_encrypt(PAD, PAD, skey);
+   if ((err = cipher_descriptor[cipher].ecb_encrypt(PAD, PAD, skey)) != CRYPT_OK) {
+       goto error;
+   }
 
    /* handle header */
    if (headerlen > 0) {
@@ -177,7 +187,9 @@ int ccm_memory(int cipher,
       for (y = 0; y < headerlen; y++) {
           if (x == 16) {
              /* full block so let's encrypt it */
-             cipher_descriptor[cipher].ecb_encrypt(PAD, PAD, skey);
+             if ((err = cipher_descriptor[cipher].ecb_encrypt(PAD, PAD, skey)) != CRYPT_OK) {
+                goto error;
+             }
              x = 0;
           }
           PAD[x++] ^= header[y];
@@ -185,7 +197,9 @@ int ccm_memory(int cipher,
 
       /* remainder? */
       if (x != 0) {
-         cipher_descriptor[cipher].ecb_encrypt(PAD, PAD, skey);
+         if ((err = cipher_descriptor[cipher].ecb_encrypt(PAD, PAD, skey)) != CRYPT_OK) {
+            goto error;
+         }
       }
    }
 
@@ -219,14 +233,18 @@ int ccm_memory(int cipher,
                     ctr[z] = (ctr[z] + 1) & 255;
                     if (ctr[z]) break;
                 }
-                cipher_descriptor[cipher].ecb_encrypt(ctr, CTRPAD, skey);
+                if ((err = cipher_descriptor[cipher].ecb_encrypt(ctr, CTRPAD, skey)) != CRYPT_OK) {
+                   goto error;
+                }
 
                 /* xor the PT against the pad first */
                 for (z = 0; z < 16; z += sizeof(LTC_FAST_TYPE)) {
                     *((LTC_FAST_TYPE*)(&PAD[z]))  ^= *((LTC_FAST_TYPE*)(&pt[y+z]));
                     *((LTC_FAST_TYPE*)(&ct[y+z])) = *((LTC_FAST_TYPE*)(&pt[y+z])) ^ *((LTC_FAST_TYPE*)(&CTRPAD[z]));
                 }
-                cipher_descriptor[cipher].ecb_encrypt(PAD, PAD, skey);
+                if ((err = cipher_descriptor[cipher].ecb_encrypt(PAD, PAD, skey)) != CRYPT_OK) {
+                   goto error;
+                }
              }
          } else {
              for (; y < (ptlen & ~15); y += 16) {
@@ -235,14 +253,18 @@ int ccm_memory(int cipher,
                     ctr[z] = (ctr[z] + 1) & 255;
                     if (ctr[z]) break;
                 }
-                cipher_descriptor[cipher].ecb_encrypt(ctr, CTRPAD, skey);
+                if ((err = cipher_descriptor[cipher].ecb_encrypt(ctr, CTRPAD, skey)) != CRYPT_OK) {
+                   goto error;
+                }
 
                 /* xor the PT against the pad last */
                 for (z = 0; z < 16; z += sizeof(LTC_FAST_TYPE)) {
                     *((LTC_FAST_TYPE*)(&pt[y+z])) = *((LTC_FAST_TYPE*)(&ct[y+z])) ^ *((LTC_FAST_TYPE*)(&CTRPAD[z]));
                     *((LTC_FAST_TYPE*)(&PAD[z]))  ^= *((LTC_FAST_TYPE*)(&pt[y+z]));
                 }
-                cipher_descriptor[cipher].ecb_encrypt(PAD, PAD, skey);
+                if ((err = cipher_descriptor[cipher].ecb_encrypt(PAD, PAD, skey)) != CRYPT_OK) {
+                   goto error;
+                }
              }
          }
      }
@@ -255,7 +277,9 @@ int ccm_memory(int cipher,
                  ctr[z] = (ctr[z] + 1) & 255;
                  if (ctr[z]) break;
              }
-             cipher_descriptor[cipher].ecb_encrypt(ctr, CTRPAD, skey);
+             if ((err = cipher_descriptor[cipher].ecb_encrypt(ctr, CTRPAD, skey)) != CRYPT_OK) {
+                goto error;
+             }
              CTRlen = 0;
           }
 
@@ -269,21 +293,30 @@ int ccm_memory(int cipher,
           }
 
           if (x == 16) {
-             cipher_descriptor[cipher].ecb_encrypt(PAD, PAD, skey);
+             if ((err = cipher_descriptor[cipher].ecb_encrypt(PAD, PAD, skey)) != CRYPT_OK) {
+                goto error;
+             }
              x = 0;
           }
           PAD[x++] ^= b;
       }
              
       if (x != 0) {
-         cipher_descriptor[cipher].ecb_encrypt(PAD, PAD, skey);
+         if ((err = cipher_descriptor[cipher].ecb_encrypt(PAD, PAD, skey)) != CRYPT_OK) {
+            goto error;
+         }
       }
    }
 
    /* setup CTR for the TAG */
    ctr[14] = ctr[15] = 0x00;
-   cipher_descriptor[cipher].ecb_encrypt(ctr, CTRPAD, skey);
-   cipher_descriptor[cipher].done(skey);
+   if ((err = cipher_descriptor[cipher].ecb_encrypt(ctr, CTRPAD, skey)) != CRYPT_OK) {
+      goto error;
+   }
+
+   if (skey != uskey) {
+      cipher_descriptor[cipher].done(skey);
+   }
 
    /* store the TAG */
    for (x = 0; x < 16 && x < *taglen; x++) {
@@ -296,10 +329,12 @@ int ccm_memory(int cipher,
    zeromem(PAD,    sizeof(PAD));
    zeromem(CTRPAD, sizeof(CTRPAD));
 #endif
+error:
+   if (skey != uskey) {
+      XFREE(skey);
+   }
 
-   XFREE(skey);
-
-   return CRYPT_OK;
+   return err;
 }
 
 #endif
diff --git a/src/encauth/ccm/ccm_test.c b/src/encauth/ccm/ccm_test.c
index fb8e9a1..e45c781 100644
--- a/src/encauth/ccm/ccm_test.c
+++ b/src/encauth/ccm/ccm_test.c
@@ -116,6 +116,7 @@ int ccm_test(void)
   unsigned long taglen, x;
   unsigned char buf[64], buf2[64], tag2[16], tag[16];
   int           err, idx;
+  symmetric_key skey;
 
   idx = find_cipher("aes");
   if (idx == -1) {
@@ -127,8 +128,13 @@ int ccm_test(void)
 
   for (x = 0; x < (sizeof(tests)/sizeof(tests[0])); x++) {
       taglen = tests[x].taglen;
+      if ((err = cipher_descriptor[idx].setup(tests[x].key, 16, 0, &skey)) != CRYPT_OK) {
+         return err;
+      }
+      
       if ((err = ccm_memory(idx,
                             tests[x].key, 16,
+                            &skey,
                             tests[x].nonce, tests[x].noncelen,
                             tests[x].header, tests[x].headerlen,
                             (unsigned char*)tests[x].pt, tests[x].ptlen,
@@ -146,6 +152,7 @@ int ccm_test(void)
 
       if ((err = ccm_memory(idx,
                             tests[x].key, 16,
+                            NULL,
                             tests[x].nonce, tests[x].noncelen,
                             tests[x].header, tests[x].headerlen,
                             buf2, tests[x].ptlen,
@@ -154,14 +161,13 @@ int ccm_test(void)
          return err;
       }
 
-     if (memcmp(buf2, tests[x].pt, tests[x].ptlen)) {
+      if (memcmp(buf2, tests[x].pt, tests[x].ptlen)) {
          return CRYPT_FAIL_TESTVECTOR;
       }
-     if (memcmp(tag2, tests[x].tag, tests[x].taglen)) {
+      if (memcmp(tag2, tests[x].tag, tests[x].taglen)) {
          return CRYPT_FAIL_TESTVECTOR;
-     }
- 
-
+      }
+      cipher_descriptor[idx].done(&skey);
   }
   return CRYPT_OK;
 #endif
diff --git a/src/encauth/gcm/gcm_done.c b/src/encauth/gcm/gcm_done.c
index c0656f5..3ade767 100644
--- a/src/encauth/gcm/gcm_done.c
+++ b/src/encauth/gcm/gcm_done.c
@@ -62,7 +62,9 @@ int gcm_done(gcm_state *gcm,
    gcm_mult_h(gcm, gcm->X);
 
    /* encrypt original counter */
-   cipher_descriptor[gcm->cipher].ecb_encrypt(gcm->Y_0, gcm->buf, &gcm->K);
+   if ((err = cipher_descriptor[gcm->cipher].ecb_encrypt(gcm->Y_0, gcm->buf, &gcm->K)) != CRYPT_OK) {
+      return err;
+   }
    for (x = 0; x < 16 && x < *taglen; x++) {
        tag[x] = gcm->buf[x] ^ gcm->X[x];
    }
diff --git a/src/encauth/gcm/gcm_init.c b/src/encauth/gcm/gcm_init.c
index 417532f..2a95ba4 100644
--- a/src/encauth/gcm/gcm_init.c
+++ b/src/encauth/gcm/gcm_init.c
@@ -98,7 +98,9 @@ int gcm_init(gcm_state *gcm, int cipher,
 
    /* H = E(0) */
    zeromem(B, 16);
-   cipher_descriptor[cipher].ecb_encrypt(B, gcm->H, &gcm->K);
+   if ((err = cipher_descriptor[cipher].ecb_encrypt(B, gcm->H, &gcm->K)) != CRYPT_OK) {
+      return err;
+   }
 
    /* setup state */
    zeromem(gcm->buf, sizeof(gcm->buf));
diff --git a/src/encauth/gcm/gcm_memory.c b/src/encauth/gcm/gcm_memory.c
index 47b7206..972a28c 100644
--- a/src/encauth/gcm/gcm_memory.c
+++ b/src/encauth/gcm/gcm_memory.c
@@ -51,7 +51,8 @@ int gcm_memory(      int           cipher,
     }
  
     if (cipher_descriptor[cipher].accel_gcm_memory != NULL) {
-       cipher_descriptor[cipher].accel_gcm_memory
+       return 
+         cipher_descriptor[cipher].accel_gcm_memory
                                           (key,   keylen,
                                            IV,    IVlen,
                                            adata, adatalen,
@@ -59,7 +60,6 @@ int gcm_memory(      int           cipher,
                                            ct,
                                            tag,   taglen,
                                            direction);
-       return CRYPT_OK;
     }
 
 
diff --git a/src/encauth/gcm/gcm_process.c b/src/encauth/gcm/gcm_process.c
index a24eefb..de6f71c 100644
--- a/src/encauth/gcm/gcm_process.c
+++ b/src/encauth/gcm/gcm_process.c
@@ -62,7 +62,9 @@ int gcm_process(gcm_state *gcm,
           if (++gcm->Y[y]) { break; }
       }
       /* encrypt the counter */
-      cipher_descriptor[gcm->cipher].ecb_encrypt(gcm->Y, gcm->buf, &gcm->K);     
+      if ((err = cipher_descriptor[gcm->cipher].ecb_encrypt(gcm->Y, gcm->buf, &gcm->K)) != CRYPT_OK) {
+         return err;
+      }
 
       gcm->buflen = 0;
       gcm->mode   = GCM_MODE_TEXT;
@@ -89,7 +91,9 @@ int gcm_process(gcm_state *gcm,
              for (y = 15; y >= 12; y--) {
                  if (++gcm->Y[y]) { break; }
              }
-             cipher_descriptor[gcm->cipher].ecb_encrypt(gcm->Y, gcm->buf, &gcm->K);
+             if ((err = cipher_descriptor[gcm->cipher].ecb_encrypt(gcm->Y, gcm->buf, &gcm->K)) != CRYPT_OK) {
+                return err;
+             }
          }
       } else {
          for (x = 0; x < (ptlen & ~15); x += 16) {
@@ -105,7 +109,9 @@ int gcm_process(gcm_state *gcm,
              for (y = 15; y >= 12; y--) {
                  if (++gcm->Y[y]) { break; }
              }
-             cipher_descriptor[gcm->cipher].ecb_encrypt(gcm->Y, gcm->buf, &gcm->K);
+             if ((err = cipher_descriptor[gcm->cipher].ecb_encrypt(gcm->Y, gcm->buf, &gcm->K)) != CRYPT_OK) {
+                return err;
+             }
          }
      }
    }
@@ -121,7 +127,9 @@ int gcm_process(gcm_state *gcm,
           for (y = 15; y >= 12; y--) {
               if (++gcm->Y[y]) { break; }
           }
-          cipher_descriptor[gcm->cipher].ecb_encrypt(gcm->Y, gcm->buf, &gcm->K);
+          if ((err = cipher_descriptor[gcm->cipher].ecb_encrypt(gcm->Y, gcm->buf, &gcm->K)) != CRYPT_OK) {
+             return err;
+          }
           gcm->buflen = 0;
        }
 
diff --git a/src/encauth/ocb/ocb_decrypt.c b/src/encauth/ocb/ocb_decrypt.c
index 9551aa7..fa3937d 100644
--- a/src/encauth/ocb/ocb_decrypt.c
+++ b/src/encauth/ocb/ocb_decrypt.c
@@ -51,7 +51,9 @@ int ocb_decrypt(ocb_state *ocb, const unsigned char *ct, unsigned char *pt)
    for (x = 0; x < ocb->block_len; x++) {
        tmp[x] = ct[x] ^ Z[x];
    }
-   cipher_descriptor[ocb->cipher].ecb_decrypt(tmp, pt, &ocb->key);
+   if ((err = cipher_descriptor[ocb->cipher].ecb_decrypt(tmp, pt, &ocb->key)) != CRYPT_OK) {
+      return err;
+   }
    for (x = 0; x < ocb->block_len; x++) {
        pt[x] ^= Z[x];
    }
diff --git a/src/encauth/ocb/ocb_encrypt.c b/src/encauth/ocb/ocb_encrypt.c
index a3356c6..4b26c29 100644
--- a/src/encauth/ocb/ocb_encrypt.c
+++ b/src/encauth/ocb/ocb_encrypt.c
@@ -51,7 +51,9 @@ int ocb_encrypt(ocb_state *ocb, const unsigned char *pt, unsigned char *ct)
    for (x = 0; x < ocb->block_len; x++) {
        tmp[x] = pt[x] ^ Z[x];
    }
-   cipher_descriptor[ocb->cipher].ecb_encrypt(tmp, ct, &ocb->key);
+   if ((err = cipher_descriptor[ocb->cipher].ecb_encrypt(tmp, ct, &ocb->key)) != CRYPT_OK) {
+      return err;
+   }
    for (x = 0; x < ocb->block_len; x++) {
        ct[x] ^= Z[x];
    }
diff --git a/src/encauth/ocb/ocb_init.c b/src/encauth/ocb/ocb_init.c
index 84f113a..a1e3e2c 100644
--- a/src/encauth/ocb/ocb_init.c
+++ b/src/encauth/ocb/ocb_init.c
@@ -76,13 +76,17 @@ int ocb_init(ocb_state *ocb, int cipher,
  
    /* find L = E[0] */
    zeromem(ocb->L, ocb->block_len);
-   cipher_descriptor[cipher].ecb_encrypt(ocb->L, ocb->L, &ocb->key);
+   if ((err = cipher_descriptor[cipher].ecb_encrypt(ocb->L, ocb->L, &ocb->key)) != CRYPT_OK) {
+      return err;
+   }
 
    /* find R = E[N xor L] */
    for (x = 0; x < ocb->block_len; x++) {
        ocb->R[x] = ocb->L[x] ^ nonce[x];
    }
-   cipher_descriptor[cipher].ecb_encrypt(ocb->R, ocb->R, &ocb->key);
+   if ((err = cipher_descriptor[cipher].ecb_encrypt(ocb->R, ocb->R, &ocb->key)) != CRYPT_OK) {
+      return err;
+   }
 
    /* find Ls[i] = L << i for i == 0..31 */
    XMEMCPY(ocb->Ls[0], ocb->L, ocb->block_len);
diff --git a/src/encauth/ocb/s_ocb_done.c b/src/encauth/ocb/s_ocb_done.c
index 4a0d5be..8fe64f4 100644
--- a/src/encauth/ocb/s_ocb_done.c
+++ b/src/encauth/ocb/s_ocb_done.c
@@ -84,7 +84,9 @@ int s_ocb_done(ocb_state *ocb, const unsigned char *pt, unsigned long ptlen,
    }
 
    /* Y[m] = E(X[m])) */
-   cipher_descriptor[ocb->cipher].ecb_encrypt(X, Y, &ocb->key);
+   if ((err = cipher_descriptor[ocb->cipher].ecb_encrypt(X, Y, &ocb->key)) != CRYPT_OK) {
+      goto error;
+   }
 
    if (mode == 1) {
       /* decrypt mode, so let's xor it first */
@@ -113,7 +115,9 @@ int s_ocb_done(ocb_state *ocb, const unsigned char *pt, unsigned long ptlen,
    }
    
    /* encrypt checksum, er... tag!! */
-   cipher_descriptor[ocb->cipher].ecb_encrypt(ocb->checksum, X, &ocb->key);
+   if ((err = cipher_descriptor[ocb->cipher].ecb_encrypt(ocb->checksum, X, &ocb->key)) != CRYPT_OK) {
+      goto error;
+   }
    cipher_descriptor[ocb->cipher].done(&ocb->key);
 
    /* now store it */
@@ -128,12 +132,12 @@ int s_ocb_done(ocb_state *ocb, const unsigned char *pt, unsigned long ptlen,
    zeromem(Z, MAXBLOCKSIZE);
    zeromem(ocb, sizeof(*ocb));
 #endif
-   
+error:   
    XFREE(X);
    XFREE(Y);
    XFREE(Z);
 
-   return CRYPT_OK;
+   return err;
 }
 
 #endif
diff --git a/src/headers/tomcrypt.h b/src/headers/tomcrypt.h
index f1e4683..5cd712b 100644
--- a/src/headers/tomcrypt.h
+++ b/src/headers/tomcrypt.h
@@ -16,8 +16,8 @@ extern "C" {
 #endif
 
 /* version */
-#define CRYPT   0x0106
-#define SCRYPT  "1.06"
+#define CRYPT   0x0107
+#define SCRYPT  "1.07"
 
 /* max size of either a cipher/hash block or symmetric key [largest of the two] */
 #define MAXBLOCKSIZE  128
diff --git a/src/headers/tomcrypt_cfg.h b/src/headers/tomcrypt_cfg.h
index 5a5eed2..ea3cc02 100644
--- a/src/headers/tomcrypt_cfg.h
+++ b/src/headers/tomcrypt_cfg.h
@@ -54,6 +54,14 @@ int   XMEMCMP(const void *s1, const void *s2, size_t n);
    #define LTC_FAST_TYPE    unsigned long
 #endif
 
+/* detect PPC32 */
+#if defined(LTC_PPC32)
+   #define ENDIAN_BIG
+   #define ENDIAN_32BITWORD
+   #define LTC_FAST
+   #define LTC_FAST_TYPE    unsigned long
+#endif   
+
 /* detect sparc and sparc64 */
 #if defined(__sparc__)
   #define ENDIAN_BIG
diff --git a/src/headers/tomcrypt_cipher.h b/src/headers/tomcrypt_cipher.h
index e727779..aae0ad9 100644
--- a/src/headers/tomcrypt_cipher.h
+++ b/src/headers/tomcrypt_cipher.h
@@ -263,14 +263,16 @@ extern struct ltc_cipher_descriptor {
       @param pt      The plaintext
       @param ct      [out] The ciphertext
       @param skey    The scheduled key
+      @return CRYPT_OK if successful
    */
-   void (*ecb_encrypt)(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
+   int (*ecb_encrypt)(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
    /** Decrypt a block
       @param ct      The ciphertext
       @param pt      [out] The plaintext
       @param skey    The scheduled key
+      @return CRYPT_OK if successful
    */
-   void (*ecb_decrypt)(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
+   int (*ecb_decrypt)(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
    /** Test the block cipher
        @return CRYPT_OK if successful, CRYPT_NOP if self-testing has been disabled
    */
@@ -293,16 +295,18 @@ extern struct ltc_cipher_descriptor {
        @param ct      Ciphertext
        @param blocks  The number of complete blocks to process
        @param skey    The scheduled key context
+       @return CRYPT_OK if successful
    */
-   void (*accel_ecb_encrypt)(const unsigned char *pt, unsigned char *ct, unsigned long blocks, symmetric_key *skey);
+   int (*accel_ecb_encrypt)(const unsigned char *pt, unsigned char *ct, unsigned long blocks, symmetric_key *skey);
 
    /** Accelerated ECB decryption 
        @param pt      Plaintext
        @param ct      Ciphertext
        @param blocks  The number of complete blocks to process
        @param skey    The scheduled key context
+       @return CRYPT_OK if successful
    */
-   void (*accel_ecb_decrypt)(const unsigned char *ct, unsigned char *pt, unsigned long blocks, symmetric_key *skey);
+   int (*accel_ecb_decrypt)(const unsigned char *ct, unsigned char *pt, unsigned long blocks, symmetric_key *skey);
 
    /** Accelerated CBC encryption 
        @param pt      Plaintext
@@ -310,8 +314,9 @@ extern struct ltc_cipher_descriptor {
        @param blocks  The number of complete blocks to process
        @param IV      The initial value (input/output)
        @param skey    The scheduled key context
+       @return CRYPT_OK if successful
    */
-   void (*accel_cbc_encrypt)(const unsigned char *pt, unsigned char *ct, unsigned long blocks, unsigned char *IV, symmetric_key *skey);
+   int (*accel_cbc_encrypt)(const unsigned char *pt, unsigned char *ct, unsigned long blocks, unsigned char *IV, symmetric_key *skey);
 
    /** Accelerated CBC decryption 
        @param pt      Plaintext
@@ -319,8 +324,9 @@ extern struct ltc_cipher_descriptor {
        @param blocks  The number of complete blocks to process
        @param IV      The initial value (input/output)
        @param skey    The scheduled key context
+       @return CRYPT_OK if successful
    */
-   void (*accel_cbc_decrypt)(const unsigned char *ct, unsigned char *pt, unsigned long blocks, unsigned char *IV, symmetric_key *skey);
+   int (*accel_cbc_decrypt)(const unsigned char *ct, unsigned char *pt, unsigned long blocks, unsigned char *IV, symmetric_key *skey);
 
    /** Accelerated CTR encryption 
        @param pt      Plaintext
@@ -329,12 +335,14 @@ extern struct ltc_cipher_descriptor {
        @param IV      The initial value (input/output)
        @param mode    little or big endian counter (mode=0 or mode=1)
        @param skey    The scheduled key context
+       @return CRYPT_OK if successful
    */
-   void (*accel_ctr_encrypt)(const unsigned char *pt, unsigned char *ct, unsigned long blocks, unsigned char *IV, int mode, symmetric_key *skey);
+   int (*accel_ctr_encrypt)(const unsigned char *pt, unsigned char *ct, unsigned long blocks, unsigned char *IV, int mode, symmetric_key *skey);
 
    /** Accelerated CCM packet (one-shot)
        @param key        The secret key to use
        @param keylen     The length of the secret key (octets)
+       @param uskey      A previously scheduled key [optional can be NULL]
        @param nonce      The session nonce [use once]
        @param noncelen   The length of the nonce
        @param header     The header for the session
@@ -347,8 +355,9 @@ extern struct ltc_cipher_descriptor {
        @param direction  Encrypt or Decrypt direction (0 or 1)
        @return CRYPT_OK if successful
    */
-   void (*accel_ccm_memory)(
+   int (*accel_ccm_memory)(
        const unsigned char *key,    unsigned long keylen,
+       symmetric_key       *uskey,
        const unsigned char *nonce,  unsigned long noncelen,
        const unsigned char *header, unsigned long headerlen,
              unsigned char *pt,     unsigned long ptlen,
@@ -369,8 +378,9 @@ extern struct ltc_cipher_descriptor {
        @param tag               [out] The MAC tag
        @param taglen            [in/out] The MAC tag length
        @param direction         Encrypt or Decrypt mode (GCM_ENCRYPT or GCM_DECRYPT)
+       @return CRYPT_OK on success
    */
-   void (*accel_gcm_memory)(
+   int (*accel_gcm_memory)(
        const unsigned char *key,    unsigned long keylen,
        const unsigned char *IV,     unsigned long IVlen,
        const unsigned char *adata,  unsigned long adatalen,
@@ -382,8 +392,8 @@ extern struct ltc_cipher_descriptor {
 
 #ifdef BLOWFISH
 int blowfish_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
-void blowfish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
-void blowfish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
+int blowfish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
+int blowfish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
 int blowfish_test(void);
 void blowfish_done(symmetric_key *skey);
 int blowfish_keysize(int *keysize);
@@ -392,8 +402,8 @@ extern const struct ltc_cipher_descriptor blowfish_desc;
 
 #ifdef RC5
 int rc5_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
-void rc5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
-void rc5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
+int rc5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
+int rc5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
 int rc5_test(void);
 void rc5_done(symmetric_key *skey);
 int rc5_keysize(int *keysize);
@@ -402,8 +412,8 @@ extern const struct ltc_cipher_descriptor rc5_desc;
 
 #ifdef RC6
 int rc6_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
-void rc6_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
-void rc6_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
+int rc6_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
+int rc6_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
 int rc6_test(void);
 void rc6_done(symmetric_key *skey);
 int rc6_keysize(int *keysize);
@@ -412,8 +422,8 @@ extern const struct ltc_cipher_descriptor rc6_desc;
 
 #ifdef RC2
 int rc2_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
-void rc2_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
-void rc2_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
+int rc2_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
+int rc2_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
 int rc2_test(void);
 void rc2_done(symmetric_key *skey);
 int rc2_keysize(int *keysize);
@@ -422,8 +432,8 @@ extern const struct ltc_cipher_descriptor rc2_desc;
 
 #ifdef SAFERP
 int saferp_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
-void saferp_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
-void saferp_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
+int saferp_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
+int saferp_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
 int saferp_test(void);
 void saferp_done(symmetric_key *skey);
 int saferp_keysize(int *keysize);
@@ -435,8 +445,8 @@ int safer_k64_setup(const unsigned char *key, int keylen, int num_rounds, symmet
 int safer_sk64_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
 int safer_k128_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
 int safer_sk128_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
-void safer_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key);
-void safer_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key);
+int safer_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *key);
+int safer_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *key);
 int safer_k64_test(void);
 int safer_sk64_test(void);
 int safer_sk128_test(void);
@@ -461,13 +471,13 @@ extern const struct ltc_cipher_descriptor safer_k64_desc, safer_k128_desc, safer
 #define aes_enc_keysize         rijndael_enc_keysize
 
 int rijndael_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
-void rijndael_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
-void rijndael_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
+int rijndael_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
+int rijndael_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
 int rijndael_test(void);
 void rijndael_done(symmetric_key *skey);
 int rijndael_keysize(int *keysize);
 int rijndael_enc_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
-void rijndael_enc_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
+int rijndael_enc_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
 void rijndael_enc_done(symmetric_key *skey);
 int rijndael_enc_keysize(int *keysize);
 extern const struct ltc_cipher_descriptor rijndael_desc, aes_desc;
@@ -476,8 +486,8 @@ extern const struct ltc_cipher_descriptor rijndael_enc_desc, aes_enc_desc;
 
 #ifdef XTEA
 int xtea_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
-void xtea_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
-void xtea_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
+int xtea_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
+int xtea_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
 int xtea_test(void);
 void xtea_done(symmetric_key *skey);
 int xtea_keysize(int *keysize);
@@ -486,8 +496,8 @@ extern const struct ltc_cipher_descriptor xtea_desc;
 
 #ifdef TWOFISH
 int twofish_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
-void twofish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
-void twofish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
+int twofish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
+int twofish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
 int twofish_test(void);
 void twofish_done(symmetric_key *skey);
 int twofish_keysize(int *keysize);
@@ -496,14 +506,14 @@ extern const struct ltc_cipher_descriptor twofish_desc;
 
 #ifdef DES
 int des_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
-void des_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
-void des_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
+int des_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
+int des_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
 int des_test(void);
 void des_done(symmetric_key *skey);
 int des_keysize(int *keysize);
 int des3_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
-void des3_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
-void des3_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
+int des3_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
+int des3_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
 int des3_test(void);
 void des3_done(symmetric_key *skey);
 int des3_keysize(int *keysize);
@@ -512,8 +522,8 @@ extern const struct ltc_cipher_descriptor des_desc, des3_desc;
 
 #ifdef CAST5
 int cast5_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
-void cast5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
-void cast5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
+int cast5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
+int cast5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
 int cast5_test(void);
 void cast5_done(symmetric_key *skey);
 int cast5_keysize(int *keysize);
@@ -522,8 +532,8 @@ extern const struct ltc_cipher_descriptor cast5_desc;
 
 #ifdef NOEKEON
 int noekeon_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
-void noekeon_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
-void noekeon_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
+int noekeon_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
+int noekeon_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
 int noekeon_test(void);
 void noekeon_done(symmetric_key *skey);
 int noekeon_keysize(int *keysize);
@@ -532,8 +542,8 @@ extern const struct ltc_cipher_descriptor noekeon_desc;
 
 #ifdef SKIPJACK
 int skipjack_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
-void skipjack_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
-void skipjack_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
+int skipjack_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
+int skipjack_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
 int skipjack_test(void);
 void skipjack_done(symmetric_key *skey);
 int skipjack_keysize(int *keysize);
@@ -542,8 +552,8 @@ extern const struct ltc_cipher_descriptor skipjack_desc;
 
 #ifdef KHAZAD
 int khazad_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
-void khazad_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
-void khazad_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
+int khazad_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
+int khazad_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
 int khazad_test(void);
 void khazad_done(symmetric_key *skey);
 int khazad_keysize(int *keysize);
@@ -552,8 +562,8 @@ extern const struct ltc_cipher_descriptor khazad_desc;
 
 #ifdef ANUBIS
 int anubis_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);
-void anubis_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
-void anubis_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
+int anubis_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey);
+int anubis_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey);
 int anubis_test(void);
 void anubis_done(symmetric_key *skey);
 int anubis_keysize(int *keysize);
diff --git a/src/headers/tomcrypt_custom.h b/src/headers/tomcrypt_custom.h
index 16357e4..a154f65 100644
--- a/src/headers/tomcrypt_custom.h
+++ b/src/headers/tomcrypt_custom.h
@@ -186,6 +186,9 @@
 /* Include RSA support */
 #define MRSA
 
+/* Include Katja (an Rabin variant like RSA) */
+// #define MKAT 
+
 /* Digital Signature Algorithm */
 #define MDSA
 /* Max diff between group and modulus size in bytes */
@@ -200,11 +203,13 @@
 /* #define LTC_ECC_TIMING_RESISTANT */
 
 /* Supported ECC Key Sizes */
-#define ECC192
-#define ECC224
-#define ECC256
-#define ECC384
-#define ECC521
+#ifndef LTC_NO_CURVES
+   #define ECC192
+   #define ECC224
+   #define ECC256
+   #define ECC384
+   #define ECC521
+#endif
 
 /* Include the MPI functionality?  (required by the PK algorithms) */
 #define MPI
@@ -240,14 +245,18 @@
 
 #define LTC_MUTEX_GLOBAL(x)   pthread_mutex_t x = PTHREAD_MUTEX_INITIALIZER;
 #define LTC_MUTEX_PROTO(x)    extern pthread_mutex_t x;
+#define LTC_MUTEX_TYPE(x)     pthread_mutex_t x;
+#define LTC_MUTEX_INIT(x)     pthread_mutex_init(x, NULL);
 #define LTC_MUTEX_LOCK(x)     pthread_mutex_lock(x);
 #define LTC_MUTEX_UNLOCK(x)   pthread_mutex_unlock(x);
 
-#else 
+#else
 
 /* default no functions */
 #define LTC_MUTEX_GLOBAL(x)
 #define LTC_MUTEX_PROTO(x)
+#define LTC_MUTEX_TYPE(x)
+#define LTC_MUTEX_INIT(x)
 #define LTC_MUTEX_LOCK(x)
 #define LTC_MUTEX_UNLOCK(x)
 
diff --git a/src/headers/tomcrypt_mac.h b/src/headers/tomcrypt_mac.h
index 0ffbd45..a611486 100644
--- a/src/headers/tomcrypt_mac.h
+++ b/src/headers/tomcrypt_mac.h
@@ -200,6 +200,7 @@ int s_ocb_done(ocb_state *ocb, const unsigned char *pt, unsigned long ptlen,
 
 int ccm_memory(int cipher,
     const unsigned char *key,    unsigned long keylen,
+    symmetric_key       *uskey,
     const unsigned char *nonce,  unsigned long noncelen,
     const unsigned char *header, unsigned long headerlen,
           unsigned char *pt,     unsigned long ptlen,
diff --git a/src/headers/tomcrypt_macros.h b/src/headers/tomcrypt_macros.h
index 3ec84f2..cef694b 100644
--- a/src/headers/tomcrypt_macros.h
+++ b/src/headers/tomcrypt_macros.h
@@ -285,6 +285,50 @@ static inline unsigned RORc(unsigned word, const int i)
 
 #endif
 
+#elif defined(LTC_PPC32)
+
+static inline unsigned ROL(unsigned word, int i)
+{
+   asm ("rotlw %0,%0,%2"
+      :"=r" (word)
+      :"0" (word),"r" (i));
+   return word;
+}
+
+static inline unsigned ROR(unsigned word, int i)
+{
+   asm ("rotlw %0,%0,%2"
+      :"=r" (word)
+      :"0" (word),"r" (32-i));
+   return word;
+}
+
+#ifndef LTC_NO_ROLC
+
+static inline unsigned ROLc(unsigned word, const int i)
+{
+   asm ("rotlwi %0,%0,%2"
+      :"=r" (word)
+      :"0" (word),"I" (i));
+   return word;
+}
+
+static inline unsigned RORc(unsigned word, const int i)
+{
+   asm ("rotrwi %0,%0,%2"
+      :"=r" (word)
+      :"0" (word),"I" (i));
+   return word;
+}
+
+#else
+
+#define ROLc ROL
+#define RORc ROR
+
+#endif
+
+
 #else
 
 /* rotates the hard way */
diff --git a/src/headers/tomcrypt_math.h b/src/headers/tomcrypt_math.h
index 3a4ab9d..0397073 100644
--- a/src/headers/tomcrypt_math.h
+++ b/src/headers/tomcrypt_math.h
@@ -11,6 +11,10 @@
    typedef void ecc_point;
 #endif
 
+#ifndef MRSA
+   typedef void rsa_key;
+#endif
+
 /** math descriptor */
 typedef struct {
    /** Name of the math provider */
@@ -42,6 +46,13 @@ typedef struct {
 
 /* ---- data movement ---- */
 
+   /** negate
+      @param   src   The number to negate
+      @param   dst   The destination
+      @return CRYPT_OK on success
+   */
+   int (*neg)(void *src, void *dst);
+   
    /** copy 
       @param   src   The number to copy from
       @param   dst   The number to write to 
@@ -339,11 +350,22 @@ typedef struct {
 
 /* ---- (optional) rsa optimized math (for internal CRT) ---- */
 
+   /** RSA Key Generation 
+       @param prng     An active PRNG state
+       @param wprng    The index of the PRNG desired
+       @param size     The size of the modulus (key size) desired (octets)
+       @param e        The "e" value (public key).  e==65537 is a good choice
+       @param key      [out] Destination of a newly created private key pair
+       @return CRYPT_OK if successful, upon error all allocated ram is freed
+    */
+    int (*rsa_keygen)(prng_state *prng, int wprng, int size, long e, rsa_key *key);
+   
+
    /** RSA exponentiation
       @param in       The octet array representing the base
       @param inlen    The length of the input
       @param out      The destination (to be stored in an octet array format)
-      @param outlen   The length of the output buffer and the resulting size (zero padded to the size of the modulus
+      @param outlen   The length of the output buffer and the resulting size (zero padded to the size of the modulus)
       @param which    PK_PUBLIC for public RSA and PK_PRIVATE for private RSA
       @param key      The RSA key to use 
       @return CRYPT_OK on success
@@ -375,7 +397,9 @@ extern const ltc_math_descriptor tfm_desc;
 #define mp_init_multi                ltc_init_multi
 #define mp_clear(a)                  ltc_mp.deinit(a)
 #define mp_clear_multi               ltc_deinit_multi
+#define mp_init_copy(a, b)           ltc_mp.init_copy(a, b)
 
+#define mp_neg(a, b)                 ltc_mp.neg(a, b)
 #define mp_copy(a, b)                ltc_mp.copy(a, b)
 
 #define mp_set(a, b)                 ltc_mp.set_int(a, b)
diff --git a/src/headers/tomcrypt_pk.h b/src/headers/tomcrypt_pk.h
index 2b7100e..c50947b 100644
--- a/src/headers/tomcrypt_pk.h
+++ b/src/headers/tomcrypt_pk.h
@@ -73,9 +73,70 @@ int rsa_import(const unsigned char *in, unsigned long inlen, rsa_key *key);
                         
 #endif
 
+/* ---- Katja ---- */
+#ifdef MKAT
+
+/* Min and Max KAT key sizes (in bits) */
+#define MIN_KAT_SIZE 1024
+#define MAX_KAT_SIZE 4096
+
+/** Katja PKCS style key */
+typedef struct KAT_key {
+    /** Type of key, PK_PRIVATE or PK_PUBLIC */
+    int type;
+    /** The private exponent */
+    void *d; 
+    /** The modulus */
+    void *N; 
+    /** The p factor of N */
+    void *p; 
+    /** The q factor of N */
+    void *q; 
+    /** The 1/q mod p CRT param */
+    void *qP; 
+    /** The d mod (p - 1) CRT param */
+    void *dP; 
+    /** The d mod (q - 1) CRT param */
+    void *dQ;
+    /** The pq param */
+    void *pq;
+} katja_key;
+
+int katja_make_key(prng_state *prng, int wprng, int size, katja_key *key);
+
+int katja_exptmod(const unsigned char *in,   unsigned long inlen,
+                        unsigned char *out,  unsigned long *outlen, int which,
+                        katja_key *key);
+
+void katja_free(katja_key *key);
+
+/* These use PKCS #1 v2.0 padding */
+int katja_encrypt_key(const unsigned char *in,     unsigned long inlen,
+                            unsigned char *out,    unsigned long *outlen,
+                      const unsigned char *lparam, unsigned long lparamlen,
+                      prng_state *prng, int prng_idx, int hash_idx, katja_key *key);
+                                        
+int katja_decrypt_key(const unsigned char *in,       unsigned long inlen,
+                            unsigned char *out,      unsigned long *outlen, 
+                      const unsigned char *lparam,   unsigned long lparamlen,
+                            int            hash_idx, int *stat,
+                            katja_key       *key);
+
+/* PKCS #1 import/export */
+int katja_export(unsigned char *out, unsigned long *outlen, int type, katja_key *key);
+int katja_import(const unsigned char *in, unsigned long inlen, katja_key *key);
+                        
+#endif
+
 /* ---- ECC Routines ---- */
 #ifdef MECC
 
+/* size of our temp buffers for exported keys */
+#define ECC_BUF_SIZE 256
+
+/* max private key size */
+#define ECC_MAXSIZE  66
+
 /** Structure defines a NIST GF(p) curve */
 typedef struct {
    /** The size of the curve in octets */
@@ -104,8 +165,10 @@ typedef struct {
 typedef struct {
     /** The x co-ordinate */
     void *x;
+
     /** The y co-ordinate */
     void *y;
+
     /** The z co-ordinate */
     void *z;
 } ecc_point;
@@ -114,10 +177,13 @@ typedef struct {
 typedef struct {
     /** Type of key, PK_PRIVATE or PK_PUBLIC */
     int type;
+
     /** Index into the ltc_ecc_sets[] for the parameters of this curve */
     int idx;
+
     /** The public key */
     ecc_point pubkey;
+
     /** The private key */
     void *k;
 } ecc_key;
@@ -125,47 +191,52 @@ typedef struct {
 /** the ECC params provided */
 extern const ltc_ecc_set_type ltc_ecc_sets[];
 
-int ecc_test(void);
+int  ecc_test(void);
 void ecc_sizes(int *low, int *high);
-int ecc_get_size(ecc_key *key);
+int  ecc_get_size(ecc_key *key);
 
-int ecc_make_key(prng_state *prng, int wprng, int keysize, ecc_key *key);
+int  ecc_make_key(prng_state *prng, int wprng, int keysize, ecc_key *key);
 void ecc_free(ecc_key *key);
 
-int ecc_export(unsigned char *out, unsigned long *outlen, int type, ecc_key *key);
-int ecc_import(const unsigned char *in, unsigned long inlen, ecc_key *key);
+int  ecc_export(unsigned char *out, unsigned long *outlen, int type, ecc_key *key);
+int  ecc_import(const unsigned char *in, unsigned long inlen, ecc_key *key);
 
-int ecc_shared_secret(ecc_key *private_key, ecc_key *public_key, 
-                      unsigned char *out, unsigned long *outlen);
+int  ecc_shared_secret(ecc_key *private_key, ecc_key *public_key, 
+                       unsigned char *out, unsigned long *outlen);
 
-int ecc_encrypt_key(const unsigned char *in,   unsigned long inlen,
-                          unsigned char *out,  unsigned long *outlen, 
-                          prng_state *prng, int wprng, int hash, 
-                          ecc_key *key);
+int  ecc_encrypt_key(const unsigned char *in,   unsigned long inlen,
+                           unsigned char *out,  unsigned long *outlen, 
+                           prng_state *prng, int wprng, int hash, 
+                           ecc_key *key);
 
-int ecc_decrypt_key(const unsigned char *in,  unsigned long  inlen,
-                          unsigned char *out, unsigned long *outlen, 
-                          ecc_key *key);
+int  ecc_decrypt_key(const unsigned char *in,  unsigned long  inlen,
+                           unsigned char *out, unsigned long *outlen, 
+                           ecc_key *key);
 
-int ecc_sign_hash(const unsigned char *in,  unsigned long inlen, 
-                        unsigned char *out, unsigned long *outlen, 
-                        prng_state *prng, int wprng, ecc_key *key);
+int  ecc_sign_hash(const unsigned char *in,  unsigned long inlen, 
+                         unsigned char *out, unsigned long *outlen, 
+                         prng_state *prng, int wprng, ecc_key *key);
 
-int ecc_verify_hash(const unsigned char *sig,  unsigned long siglen,
-                    const unsigned char *hash, unsigned long hashlen, 
-                    int *stat, ecc_key *key);
+int  ecc_verify_hash(const unsigned char *sig,  unsigned long siglen,
+                     const unsigned char *hash, unsigned long hashlen, 
+                     int *stat, ecc_key *key);
 
 /* low level functions */
 ecc_point *ltc_ecc_new_point(void);
 void       ltc_ecc_del_point(ecc_point *p);
+int        ltc_ecc_is_valid_idx(int n);
+
 
 /* point ops (mp == montgomery digit) */
 /* R = 2P */
-int ltc_ecc_dbl_point(ecc_point *P, ecc_point *R, void *modulus, void *mp);
+int ltc_ecc_projective_dbl_point(ecc_point *P, ecc_point *R, void *modulus, void *mp);
+
 /* R = P + Q */
-int ltc_ecc_add_point(ecc_point *P, ecc_point *Q, ecc_point *R, void *modulus, void *mp);
+int ltc_ecc_projective_add_point(ecc_point *P, ecc_point *Q, ecc_point *R, void *modulus, void *mp);
+
 /* R = kG */
 int ltc_ecc_mulmod(void *k, ecc_point *G, ecc_point *R, void *modulus, int map);
+
 /* map P to affine from projective */
 int ltc_ecc_map(ecc_point *P, void *modulus, void *mp);
 
@@ -177,16 +248,22 @@ int ltc_ecc_map(ecc_point *P, void *modulus, void *mp);
 typedef struct {
    /** The key type, PK_PRIVATE or PK_PUBLIC */
    int type; 
+
    /** The order of the sub-group used in octets */
    int qord;
+
    /** The generator  */
    void *g;
+
    /** The prime used to generate the sub-group */
    void *q;
+
    /** The large prime that generats the field the contains the sub-group */
    void *p;
+
    /** The private key */
    void *x;
+
    /** The public key */
    void *y;
 } dsa_key;
@@ -194,7 +271,6 @@ typedef struct {
 int dsa_make_key(prng_state *prng, int wprng, int group_size, int modulus_size, dsa_key *key);
 void dsa_free(dsa_key *key);
 
-
 int dsa_sign_hash_raw(const unsigned char *in,  unsigned long inlen,
                                    void *r,   void *s,
                                prng_state *prng, int wprng, dsa_key *key);
@@ -211,12 +287,24 @@ int dsa_verify_hash(const unsigned char *sig,  unsigned long siglen,
                     const unsigned char *hash, unsigned long hashlen, 
                           int           *stat, dsa_key       *key);
 
+int dsa_encrypt_key(const unsigned char *in,   unsigned long inlen,
+                          unsigned char *out,  unsigned long *outlen, 
+                          prng_state *prng, int wprng, int hash, 
+                          dsa_key *key);
+                      
+int dsa_decrypt_key(const unsigned char *in,  unsigned long  inlen,
+                          unsigned char *out, unsigned long *outlen, 
+                          dsa_key *key);
+                          
 int dsa_import(const unsigned char *in, unsigned long inlen, dsa_key *key);
-
 int dsa_export(unsigned char *out, unsigned long *outlen, int type, dsa_key *key);
-
 int dsa_verify_key(dsa_key *key, int *stat);
 
+
+
+int dsa_shared_secret(void          *private_key, void *base,
+                      dsa_key       *public_key,
+                      unsigned char *out,         unsigned long *outlen);
 #endif
 
 #ifdef LTC_DER
@@ -239,7 +327,7 @@ enum {
 };
 
 /** A LTC ASN.1 list type */
-typedef struct {
+typedef struct ltc_asn1_list_ {
    /** The LTC ASN.1 enumerated type identifier */
    int           type;
    /** The data to encode or place for decoding */
@@ -248,6 +336,8 @@ typedef struct {
    unsigned long size;
    /** The used flag, this is used by the CHOICE ASN.1 type to indicate which choice was made */
    int           used;
+   /** prev/next entry in the list */
+   struct ltc_asn1_list_ *prev, *next, *child, *parent;
 } ltc_asn1_list;
 
 #define LTC_SET_ASN1(list, index, Type, Data, Size)  \
@@ -270,10 +360,16 @@ int der_decode_sequence(const unsigned char *in,   unsigned long  inlen,
 int der_length_sequence(ltc_asn1_list *list, unsigned long inlen,
                         unsigned long *outlen);
 
-/* VA list handy helpers */
+/* VA list handy helpers with triplets of  */
 int der_encode_sequence_multi(unsigned char *out, unsigned long *outlen, ...);
 int der_decode_sequence_multi(const unsigned char *in, unsigned long inlen, ...);
 
+/* handle unknown list decoder */
+int  der_decode_sequence_flexi(const unsigned char *in, unsigned long *inlen, ltc_asn1_list **out);
+void der_free_sequence_flexi(ltc_asn1_list *list);
+
+void der_sequence_free(ltc_asn1_list *in);
+
 /* INTEGER */
 int der_encode_integer(void *num, unsigned char *out, unsigned long *outlen);
 int der_decode_integer(const unsigned char *in, unsigned long inlen, void *num);
diff --git a/src/headers/tomcrypt_pkcs.h b/src/headers/tomcrypt_pkcs.h
index f137a1e..6ba6054 100644
--- a/src/headers/tomcrypt_pkcs.h
+++ b/src/headers/tomcrypt_pkcs.h
@@ -3,8 +3,8 @@
 /* ===> PKCS #1 -- RSA Cryptography <=== */
 #ifdef PKCS_1
 
-int pkcs_1_mgf1(const unsigned char *seed, unsigned long seedlen,
-                      int            hash_idx,
+int pkcs_1_mgf1(      int            hash_idx,
+                const unsigned char *seed, unsigned long seedlen,
                       unsigned char *mask, unsigned long masklen);
 
 int pkcs_1_i2osp(void *n, unsigned long modulus_len, unsigned char *out);
diff --git a/src/headers/tomcrypt_prng.h b/src/headers/tomcrypt_prng.h
index 82d395f..62f2029 100644
--- a/src/headers/tomcrypt_prng.h
+++ b/src/headers/tomcrypt_prng.h
@@ -4,6 +4,7 @@ struct yarrow_prng {
     int                   cipher, hash;
     unsigned char         pool[MAXBLOCKSIZE];
     symmetric_CTR         ctr;
+    LTC_MUTEX_TYPE(prng_lock)
 };
 #endif
 
@@ -28,6 +29,7 @@ struct fortuna_prng {
                   wd;            
 
     ulong64       reset_cnt;  /* number of times we have reset */
+    LTC_MUTEX_TYPE(prng_lock)
 };
 #endif
 
diff --git a/src/mac/omac/omac_done.c b/src/mac/omac/omac_done.c
index 7291884..e2c1578 100644
--- a/src/mac/omac/omac_done.c
+++ b/src/mac/omac/omac_done.c
@@ -61,7 +61,9 @@ int omac_done(omac_state *omac, unsigned char *out, unsigned long *outlen)
    }
 
    /* encrypt it */
-   cipher_descriptor[omac->cipher_idx].ecb_encrypt(omac->block, omac->block, &omac->key);
+   if ((err = cipher_descriptor[omac->cipher_idx].ecb_encrypt(omac->block, omac->block, &omac->key)) != CRYPT_OK) {
+      return err;
+   }
    cipher_descriptor[omac->cipher_idx].done(&omac->key);
  
    /* output it */
diff --git a/src/mac/omac/omac_init.c b/src/mac/omac/omac_init.c
index dc0678b..8645042 100644
--- a/src/mac/omac/omac_init.c
+++ b/src/mac/omac/omac_init.c
@@ -63,7 +63,9 @@ int omac_init(omac_state *omac, int cipher, const unsigned char *key, unsigned l
 
    /* first calc L which is Ek(0) */
    zeromem(omac->Lu[0], cipher_descriptor[cipher].block_length);
-   cipher_descriptor[cipher].ecb_encrypt(omac->Lu[0], omac->Lu[0], &omac->key);
+   if ((err = cipher_descriptor[cipher].ecb_encrypt(omac->Lu[0], omac->Lu[0], &omac->key)) != CRYPT_OK) {
+      return err;
+   }
 
    /* now do the mults, whoopy! */
    for (x = 0; x < 2; x++) {
diff --git a/src/mac/omac/omac_process.c b/src/mac/omac/omac_process.c
index 6491165..53985ab 100644
--- a/src/mac/omac/omac_process.c
+++ b/src/mac/omac/omac_process.c
@@ -49,7 +49,9 @@ int omac_process(omac_state *omac, const unsigned char *in, unsigned long inlen)
               *((LTC_FAST_TYPE*)(&omac->prev[y])) ^= *((LTC_FAST_TYPE*)(&in[y]));
           }
           in += 16;
-          cipher_descriptor[omac->cipher_idx].ecb_encrypt(omac->prev, omac->prev, &omac->key);
+          if ((err = cipher_descriptor[omac->cipher_idx].ecb_encrypt(omac->prev, omac->prev, &omac->key)) != CRYPT_OK) {
+             return err;
+          }
       }
       inlen -= x;
     }
@@ -61,7 +63,9 @@ int omac_process(omac_state *omac, const unsigned char *in, unsigned long inlen)
           for (x = 0; x < (unsigned long)omac->blklen; x++) {
               omac->block[x] ^= omac->prev[x];
           }
-          cipher_descriptor[omac->cipher_idx].ecb_encrypt(omac->block, omac->prev, &omac->key);
+          if ((err = cipher_descriptor[omac->cipher_idx].ecb_encrypt(omac->block, omac->prev, &omac->key)) != CRYPT_OK) {
+             return err;
+          }
           omac->buflen = 0;
        }
 
diff --git a/src/mac/pmac/pmac_done.c b/src/mac/pmac/pmac_done.c
index f6a08ce..8ec3cbd 100644
--- a/src/mac/pmac/pmac_done.c
+++ b/src/mac/pmac/pmac_done.c
@@ -49,7 +49,9 @@ int pmac_done(pmac_state *state, unsigned char *out, unsigned long *outlen)
    }
 
    /* encrypt it */
-   cipher_descriptor[state->cipher_idx].ecb_encrypt(state->checksum, state->checksum, &state->key);
+   if ((err = cipher_descriptor[state->cipher_idx].ecb_encrypt(state->checksum, state->checksum, &state->key)) != CRYPT_OK) {
+      return err;
+   }
    cipher_descriptor[state->cipher_idx].done(&state->key);
 
    /* store it */
diff --git a/src/mac/pmac/pmac_init.c b/src/mac/pmac/pmac_init.c
index 1b21e50..5dfc0fb 100644
--- a/src/mac/pmac/pmac_init.c
+++ b/src/mac/pmac/pmac_init.c
@@ -87,7 +87,9 @@ int pmac_init(pmac_state *pmac, int cipher, const unsigned char *key, unsigned l
 
    /* find L = E[0] */
    zeromem(L, pmac->block_len);
-   cipher_descriptor[cipher].ecb_encrypt(L, L, &pmac->key);
+   if ((err = cipher_descriptor[cipher].ecb_encrypt(L, L, &pmac->key)) != CRYPT_OK) {
+      goto error;
+   }
 
    /* find Ls[i] = L << i for i == 0..31 */
    XMEMCPY(pmac->Ls[0], L, pmac->block_len);
@@ -127,14 +129,15 @@ int pmac_init(pmac_state *pmac, int cipher, const unsigned char *key, unsigned l
     zeromem(pmac->block,    sizeof(pmac->block));
     zeromem(pmac->Li,       sizeof(pmac->Li));
     zeromem(pmac->checksum, sizeof(pmac->checksum));
-
+    err = CRYPT_OK;
+error:
 #ifdef LTC_CLEAN_STACK
     zeromem(L, pmac->block_len);
 #endif
 
     XFREE(L);
 
-    return CRYPT_OK;
+    return err;
 }
 
 #endif
diff --git a/src/mac/pmac/pmac_process.c b/src/mac/pmac/pmac_process.c
index 81fbc8c..40749a2 100644
--- a/src/mac/pmac/pmac_process.c
+++ b/src/mac/pmac/pmac_process.c
@@ -50,7 +50,9 @@ int pmac_process(pmac_state *pmac, const unsigned char *in, unsigned long inlen)
           for (y = 0; y < 16; y += sizeof(LTC_FAST_TYPE)) {
               *((LTC_FAST_TYPE*)(&Z[y])) = *((LTC_FAST_TYPE*)(&in[y])) ^ *((LTC_FAST_TYPE*)(&pmac->Li[y]));
           }
-          cipher_descriptor[pmac->cipher_idx].ecb_encrypt(Z, Z, &pmac->key);
+          if ((err = cipher_descriptor[pmac->cipher_idx].ecb_encrypt(Z, Z, &pmac->key)) != CRYPT_OK) {
+             return err;
+          }
           for (y = 0; y < 16; y += sizeof(LTC_FAST_TYPE)) {
               *((LTC_FAST_TYPE*)(&pmac->checksum[y])) ^= *((LTC_FAST_TYPE*)(&Z[y]));
           }
@@ -67,7 +69,9 @@ int pmac_process(pmac_state *pmac, const unsigned char *in, unsigned long inlen)
           for (x = 0; x < (unsigned long)pmac->block_len; x++) {
                Z[x] = pmac->Li[x] ^ pmac->block[x];
           }
-          cipher_descriptor[pmac->cipher_idx].ecb_encrypt(Z, Z, &pmac->key);
+          if ((err = cipher_descriptor[pmac->cipher_idx].ecb_encrypt(Z, Z, &pmac->key)) != CRYPT_OK) {
+             return err;
+           }
           for (x = 0; x < (unsigned long)pmac->block_len; x++) {
               pmac->checksum[x] ^= Z[x];
           }
diff --git a/src/math/ltm_desc.c b/src/math/ltm_desc.c
index a4a3841..03d8fc6 100644
--- a/src/math/ltm_desc.c
+++ b/src/math/ltm_desc.c
@@ -65,6 +65,13 @@ static void deinit(void *a)
    XFREE(a);
 }
 
+static int neg(void *a, void *b)
+{
+   LTC_ARGCHK(a != NULL);
+   LTC_ARGCHK(b != NULL);
+   return mpi_to_ltc_error(mp_neg(a, b));
+}
+
 static int copy(void *a, void *b)
 {
    LTC_ARGCHK(a != NULL);
@@ -379,6 +386,7 @@ const ltc_math_descriptor ltm_desc = {
    &init_copy,
    &deinit,
 
+   &neg,
    ©,
 
    &set_int,
@@ -420,10 +428,11 @@ const ltc_math_descriptor ltm_desc = {
    &exptmod,
    &isprime,
 
-   NULL,
-   NULL,
-   NULL,
+   <c_ecc_mulmod,
+   <c_ecc_projective_add_point,
+   <c_ecc_map,
 
+   NULL,
    NULL
 };
 
diff --git a/src/math/multi.c b/src/math/multi.c
index 4728c77..a3dea3f 100644
--- a/src/math/multi.c
+++ b/src/math/multi.c
@@ -34,6 +34,7 @@ int ltc_init_multi(void **a, ...)
           va_end(clean_list);
           return CRYPT_MEM;
        }
+       ++np;
        cur = va_arg(args, void**);
    }
    va_end(args);
diff --git a/src/math/tfm_desc.c b/src/math/tfm_desc.c
index ff448bb..0365498 100644
--- a/src/math/tfm_desc.c
+++ b/src/math/tfm_desc.c
@@ -59,6 +59,14 @@ static void deinit(void *a)
    XFREE(a);
 }
 
+static int neg(void *a, void *b)
+{
+   LTC_ARGCHK(a != NULL);
+   LTC_ARGCHK(b != NULL);
+   fp_neg(((fp_int*)a), ((fp_int*)b));
+   return CRYPT_OK;
+}
+
 static int copy(void *a, void *b)
 {
    LTC_ARGCHK(a != NULL);
@@ -390,6 +398,7 @@ const ltc_math_descriptor tfm_desc = {
    &init_copy,
    &deinit,
 
+   &neg,
    ©,
 
    &set_int,
@@ -422,7 +431,7 @@ const ltc_math_descriptor tfm_desc = {
 
    &mulmod,
    &invmod,
-   
+
    &montgomery_setup,
    &montgomery_normalization,
    &montgomery_reduce,
@@ -431,10 +440,11 @@ const ltc_math_descriptor tfm_desc = {
    &exptmod,
    &isprime,
 
-   NULL,
-   NULL,
-   NULL,
+   <c_ecc_mulmod,
+   <c_ecc_projective_add_point,
+   <c_ecc_map,
 
+   NULL,
    NULL
 };
 
diff --git a/src/misc/crypt/crypt.c b/src/misc/crypt/crypt.c
index 361c631..c138709 100644
--- a/src/misc/crypt/crypt.c
+++ b/src/misc/crypt/crypt.c
@@ -229,15 +229,18 @@ const char *crypt_build_settings =
 #if defined(MDSA)
     "   DSA\n"
 #endif
+#if defined(MKAT)
+    "   Katja\n"
+#endif    
 
     "\nCompiler:\n"
 #if defined(WIN32)
     "   WIN32 platform detected.\n"
 #endif
-#if defined(LBL_CYGWIN__)
+#if defined(__CYGWIN__)
     "   CYGWIN Detected.\n"
 #endif
-#if defined(LBL_DJGPP__)
+#if defined(__DJGPP__)
     "   DJGPP Detected.\n"
 #endif
 #if defined(_MSC_VER)
@@ -249,9 +252,12 @@ const char *crypt_build_settings =
 #if defined(INTEL_CC)
     "   Intel C Compiler detected.\n"
 #endif
-#if defined(LBL_x86_64__)
+#if defined(__x86_64__)
     "   x86-64 detected.\n"
 #endif
+#if defined(LTC_PPC32)
+    "   LTC_PPC32 defined \n"
+#endif    
 
     "\nVarious others: "
 #if defined(BASE64)
diff --git a/src/modes/cbc/cbc_decrypt.c b/src/modes/cbc/cbc_decrypt.c
index f4e9c4d..7a4ae6d 100644
--- a/src/modes/cbc/cbc_decrypt.c
+++ b/src/modes/cbc/cbc_decrypt.c
@@ -59,11 +59,13 @@ int cbc_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, s
 #endif
    
    if (cipher_descriptor[cbc->cipher].accel_cbc_decrypt != NULL) {
-      cipher_descriptor[cbc->cipher].accel_cbc_decrypt(ct, pt, len / cbc->blocklen, cbc->IV, &cbc->key);
+      return cipher_descriptor[cbc->cipher].accel_cbc_decrypt(ct, pt, len / cbc->blocklen, cbc->IV, &cbc->key);
    } else {
       while (len) {
          /* decrypt */
-         cipher_descriptor[cbc->cipher].ecb_decrypt(ct, tmp, &cbc->key);
+         if ((err = cipher_descriptor[cbc->cipher].ecb_decrypt(ct, tmp, &cbc->key)) != CRYPT_OK) {
+            return err;
+         }
 
          /* xor IV against plaintext */
          #if defined(LTC_FAST)
diff --git a/src/modes/cbc/cbc_encrypt.c b/src/modes/cbc/cbc_encrypt.c
index 7b97327..b0b7c57 100644
--- a/src/modes/cbc/cbc_encrypt.c
+++ b/src/modes/cbc/cbc_encrypt.c
@@ -53,7 +53,7 @@ int cbc_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, s
 #endif
 
    if (cipher_descriptor[cbc->cipher].accel_cbc_encrypt != NULL) {
-      cipher_descriptor[cbc->cipher].accel_cbc_encrypt(pt, ct, len / cbc->blocklen, cbc->IV, &cbc->key);
+      return cipher_descriptor[cbc->cipher].accel_cbc_encrypt(pt, ct, len / cbc->blocklen, cbc->IV, &cbc->key);
    } else {
       while (len) {
          /* xor IV against plaintext */
@@ -68,7 +68,9 @@ int cbc_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, s
 	 #endif
 
          /* encrypt */
-         cipher_descriptor[cbc->cipher].ecb_encrypt(cbc->IV, ct, &cbc->key);
+         if ((err = cipher_descriptor[cbc->cipher].ecb_encrypt(cbc->IV, ct, &cbc->key)) != CRYPT_OK) {
+            return err;
+         }
 
         /* store IV [ciphertext] for a future block */
          #if defined(LTC_FAST)
diff --git a/src/modes/cfb/cfb_decrypt.c b/src/modes/cfb/cfb_decrypt.c
index 6675df1..ac5ccd9 100644
--- a/src/modes/cfb/cfb_decrypt.c
+++ b/src/modes/cfb/cfb_decrypt.c
@@ -45,7 +45,9 @@ int cfb_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, s
 
    while (len-- > 0) {
        if (cfb->padlen == cfb->blocklen) {
-          cipher_descriptor[cfb->cipher].ecb_encrypt(cfb->pad, cfb->IV, &cfb->key);
+          if ((err = cipher_descriptor[cfb->cipher].ecb_encrypt(cfb->pad, cfb->IV, &cfb->key)) != CRYPT_OK) {
+             return err;
+          }
           cfb->padlen = 0;
        }
        cfb->pad[cfb->padlen] = *ct;
diff --git a/src/modes/cfb/cfb_encrypt.c b/src/modes/cfb/cfb_encrypt.c
index 681d8cd..e09793f 100644
--- a/src/modes/cfb/cfb_encrypt.c
+++ b/src/modes/cfb/cfb_encrypt.c
@@ -45,7 +45,9 @@ int cfb_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, s
 
    while (len-- > 0) {
        if (cfb->padlen == cfb->blocklen) {
-          cipher_descriptor[cfb->cipher].ecb_encrypt(cfb->pad, cfb->IV, &cfb->key);
+          if ((err = cipher_descriptor[cfb->cipher].ecb_encrypt(cfb->pad, cfb->IV, &cfb->key)) != CRYPT_OK) {
+             return err;
+          }
           cfb->padlen = 0;
        }
        cfb->pad[cfb->padlen] = (*ct = *pt ^ cfb->IV[cfb->padlen]);
diff --git a/src/modes/cfb/cfb_setiv.c b/src/modes/cfb/cfb_setiv.c
index 4eedaa8..2bf425a 100644
--- a/src/modes/cfb/cfb_setiv.c
+++ b/src/modes/cfb/cfb_setiv.c
@@ -40,9 +40,7 @@ int cfb_setiv(const unsigned char *IV, unsigned long len, symmetric_CFB *cfb)
       
    /* force next block */
    cfb->padlen = 0;
-   cipher_descriptor[cfb->cipher].ecb_encrypt(IV, cfb->IV, &cfb->key);
-
-   return CRYPT_OK;
+   return cipher_descriptor[cfb->cipher].ecb_encrypt(IV, cfb->IV, &cfb->key);
 }
 
 #endif 
diff --git a/src/modes/cfb/cfb_start.c b/src/modes/cfb/cfb_start.c
index e07fc0c..8c99fb9 100644
--- a/src/modes/cfb/cfb_start.c
+++ b/src/modes/cfb/cfb_start.c
@@ -54,10 +54,8 @@ int cfb_start(int cipher, const unsigned char *IV, const unsigned char *key,
    }
 
    /* encrypt the IV */
-   cipher_descriptor[cfb->cipher].ecb_encrypt(cfb->IV, cfb->IV, &cfb->key);
    cfb->padlen = 0;
-
-   return CRYPT_OK;
+   return cipher_descriptor[cfb->cipher].ecb_encrypt(cfb->IV, cfb->IV, &cfb->key);
 }
 
 #endif
diff --git a/src/modes/ctr/ctr_encrypt.c b/src/modes/ctr/ctr_encrypt.c
index b454897..70fd136 100644
--- a/src/modes/ctr/ctr_encrypt.c
+++ b/src/modes/ctr/ctr_encrypt.c
@@ -52,7 +52,9 @@ int ctr_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, s
    
    /* handle acceleration only if pad is empty, accelerator is present and length is >= a block size */
    if ((ctr->padlen == ctr->blocklen) && cipher_descriptor[ctr->cipher].accel_ctr_encrypt != NULL && (len >= (unsigned long)ctr->blocklen)) {
-      cipher_descriptor[ctr->cipher].accel_ctr_encrypt(pt, ct, len/ctr->blocklen, ctr->ctr, ctr->mode, &ctr->key);
+      if ((err = cipher_descriptor[ctr->cipher].accel_ctr_encrypt(pt, ct, len/ctr->blocklen, ctr->ctr, ctr->mode, &ctr->key)) != CRYPT_OK) {
+         return err;
+      }
       len %= ctr->blocklen;
    }
 
@@ -79,7 +81,9 @@ int ctr_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, s
          }
 
          /* encrypt it */
-         cipher_descriptor[ctr->cipher].ecb_encrypt(ctr->ctr, ctr->pad, &ctr->key);
+         if ((err = cipher_descriptor[ctr->cipher].ecb_encrypt(ctr->ctr, ctr->pad, &ctr->key)) != CRYPT_OK) {
+            return err;
+         }
          ctr->padlen = 0;
       }
 #ifdef LTC_FAST
diff --git a/src/modes/ctr/ctr_setiv.c b/src/modes/ctr/ctr_setiv.c
index e533b6e..9b7572f 100644
--- a/src/modes/ctr/ctr_setiv.c
+++ b/src/modes/ctr/ctr_setiv.c
@@ -45,9 +45,7 @@ int ctr_setiv(const unsigned char *IV, unsigned long len, symmetric_CTR *ctr)
    
    /* force next block */
    ctr->padlen = 0;
-   cipher_descriptor[ctr->cipher].ecb_encrypt(IV, ctr->pad, &ctr->key);
-   
-   return CRYPT_OK;
+   return cipher_descriptor[ctr->cipher].ecb_encrypt(IV, ctr->pad, &ctr->key);
 }
 
 #endif 
diff --git a/src/modes/ctr/ctr_start.c b/src/modes/ctr/ctr_start.c
index 47431d2..bc2c147 100644
--- a/src/modes/ctr/ctr_start.c
+++ b/src/modes/ctr/ctr_start.c
@@ -59,8 +59,7 @@ int ctr_start(               int   cipher,
    for (x = 0; x < ctr->blocklen; x++) {
        ctr->ctr[x] = IV[x];
    }
-   cipher_descriptor[ctr->cipher].ecb_encrypt(ctr->ctr, ctr->pad, &ctr->key);
-   return CRYPT_OK;
+   return cipher_descriptor[ctr->cipher].ecb_encrypt(ctr->ctr, ctr->pad, &ctr->key);
 }
 
 #endif
diff --git a/src/modes/ecb/ecb_decrypt.c b/src/modes/ecb/ecb_decrypt.c
index 97eeb70..4db22bc 100644
--- a/src/modes/ecb/ecb_decrypt.c
+++ b/src/modes/ecb/ecb_decrypt.c
@@ -40,10 +40,12 @@ int ecb_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, s
 
    /* check for accel */
    if (cipher_descriptor[ecb->cipher].accel_ecb_decrypt != NULL) {
-      cipher_descriptor[ecb->cipher].accel_ecb_decrypt(ct, pt, len / cipher_descriptor[ecb->cipher].block_length, &ecb->key);
+      return cipher_descriptor[ecb->cipher].accel_ecb_decrypt(ct, pt, len / cipher_descriptor[ecb->cipher].block_length, &ecb->key);
    } else {
       while (len) {
-         cipher_descriptor[ecb->cipher].ecb_decrypt(ct, pt, &ecb->key);
+         if ((err = cipher_descriptor[ecb->cipher].ecb_decrypt(ct, pt, &ecb->key)) != CRYPT_OK) {
+            return err;
+         }
          pt  += cipher_descriptor[ecb->cipher].block_length;
          ct  += cipher_descriptor[ecb->cipher].block_length;
          len -= cipher_descriptor[ecb->cipher].block_length;
diff --git a/src/modes/ecb/ecb_encrypt.c b/src/modes/ecb/ecb_encrypt.c
index 74adb0b..11fdcf5 100644
--- a/src/modes/ecb/ecb_encrypt.c
+++ b/src/modes/ecb/ecb_encrypt.c
@@ -40,10 +40,12 @@ int ecb_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, s
 
    /* check for accel */
    if (cipher_descriptor[ecb->cipher].accel_ecb_encrypt != NULL) {
-      cipher_descriptor[ecb->cipher].accel_ecb_encrypt(pt, ct, len / cipher_descriptor[ecb->cipher].block_length, &ecb->key);
+      return cipher_descriptor[ecb->cipher].accel_ecb_encrypt(pt, ct, len / cipher_descriptor[ecb->cipher].block_length, &ecb->key);
    } else {
       while (len) {
-         cipher_descriptor[ecb->cipher].ecb_encrypt(pt, ct, &ecb->key);
+         if ((err = cipher_descriptor[ecb->cipher].ecb_encrypt(pt, ct, &ecb->key)) != CRYPT_OK) {
+            return err;
+         }
          pt  += cipher_descriptor[ecb->cipher].block_length;
          ct  += cipher_descriptor[ecb->cipher].block_length;
          len -= cipher_descriptor[ecb->cipher].block_length;
diff --git a/src/modes/ofb/ofb_encrypt.c b/src/modes/ofb/ofb_encrypt.c
index 78e254d..c706682 100644
--- a/src/modes/ofb/ofb_encrypt.c
+++ b/src/modes/ofb/ofb_encrypt.c
@@ -43,7 +43,9 @@ int ofb_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, s
    
    while (len-- > 0) {
        if (ofb->padlen == ofb->blocklen) {
-          cipher_descriptor[ofb->cipher].ecb_encrypt(ofb->IV, ofb->IV, &ofb->key);
+          if ((err = cipher_descriptor[ofb->cipher].ecb_encrypt(ofb->IV, ofb->IV, &ofb->key)) != CRYPT_OK) {
+             return err;
+          }
           ofb->padlen = 0;
        }
        *ct++ = *pt++ ^ ofb->IV[ofb->padlen++];
diff --git a/src/modes/ofb/ofb_setiv.c b/src/modes/ofb/ofb_setiv.c
index bf42222..9de9235 100644
--- a/src/modes/ofb/ofb_setiv.c
+++ b/src/modes/ofb/ofb_setiv.c
@@ -41,8 +41,7 @@ int ofb_setiv(const unsigned char *IV, unsigned long len, symmetric_OFB *ofb)
 
    /* force next block */
    ofb->padlen = 0;
-   cipher_descriptor[ofb->cipher].ecb_encrypt(IV, ofb->IV, &ofb->key);
-   return CRYPT_OK;
+   return cipher_descriptor[ofb->cipher].ecb_encrypt(IV, ofb->IV, &ofb->key);
 }
 
 #endif 
diff --git a/src/pk/asn1/der/bit/der_decode_bit_string.c b/src/pk/asn1/der/bit/der_decode_bit_string.c
index 133d743..30d8381 100644
--- a/src/pk/asn1/der/bit/der_decode_bit_string.c
+++ b/src/pk/asn1/der/bit/der_decode_bit_string.c
@@ -51,7 +51,7 @@ int der_decode_bit_string(const unsigned char *in,  unsigned long inlen,
    /* get the length of the data */
    if (in[x] & 0x80) {
       /* long format get number of length bytes */
-      y = in[x++] & 127;
+      y = in[x++] & 0x7F;
 
       /* invalid if 0 or > 2 */
       if (y == 0 || y > 2) {
@@ -65,7 +65,7 @@ int der_decode_bit_string(const unsigned char *in,  unsigned long inlen,
       }
    } else {
       /* short format */
-      dlen = in[x++] & 127;
+      dlen = in[x++] & 0x7F;
    }
   
    /* is the data len too long or too short? */
diff --git a/src/pk/asn1/der/choice/der_decode_choice.c b/src/pk/asn1/der/choice/der_decode_choice.c
index 6eddf23..02f5050 100644
--- a/src/pk/asn1/der/choice/der_decode_choice.c
+++ b/src/pk/asn1/der/choice/der_decode_choice.c
@@ -96,6 +96,7 @@ int der_decode_choice(const unsigned char *in,   unsigned long *inlen,
            case LTC_ASN1_NULL:
                if (*inlen == 2 && in[x] == 0x05 && in[x+1] == 0x00) {
                   *inlen = 2;
+                  list[x].used   = 1;
                   return CRYPT_OK;
                }
                break;
diff --git a/src/pk/asn1/der/sequence/der_decode_sequence_flexi.c b/src/pk/asn1/der/sequence/der_decode_sequence_flexi.c
new file mode 100644
index 0000000..b03f826
--- /dev/null
+++ b/src/pk/asn1/der/sequence/der_decode_sequence_flexi.c
@@ -0,0 +1,352 @@
+/* LibTomCrypt, modular cryptographic library -- Tom St Denis
+ *
+ * LibTomCrypt is a library that provides various cryptographic
+ * algorithms in a highly modular and flexible manner.
+ *
+ * The library is free for all purposes without any express
+ * guarantee it works.
+ *
+ * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
+ */
+#include "tomcrypt.h"
+
+/**
+  @file der_decode_sequence_flexi.c
+  ASN.1 DER, decode a SEQUENCE with a flexi parser, Tom St Denis
+*/
+
+#ifdef LTC_DER
+
+static unsigned long fetch_length(const unsigned char *in, unsigned long inlen)
+{
+   unsigned long x, y, z;
+
+   y = 0;
+
+   /* skip type and read len */
+   if (inlen < 2) {
+      return 0xFFFFFFFF;
+   }
+   ++in; ++y;
+   
+   /* read len */
+   x = *in++; ++y;
+   
+   /* <128 means literal */
+   if (x < 128) {
+      return x+y;
+   }
+   x     &= 0x7F; /* the lower 7 bits are the length of the length */
+   inlen -= 2;
+   
+   /* len means len of len! */
+   if (x == 0 || x > 4 || x > inlen) {
+      return 0xFFFFFFFF;
+   }
+   
+   y += x;
+   z = 0;
+   while (x--) {   
+      z = (z<<8) | ((unsigned long)*in);
+      ++in;
+   }
+   return z+y;
+}
+
+/** 
+   ASN.1 DER Flexi(ble) decoder will decode arbitrary DER packets and create a linked list of the decoded elements.
+   @param in      The input buffer
+   @param inlen   [in/out] The length of the input buffer and on output the amount of decoded data 
+   @param out     [out] A pointer to the linked list
+   @return CRYPT_OK on success.
+*/   
+int der_decode_sequence_flexi(const unsigned char *in, unsigned long *inlen, ltc_asn1_list **out)
+{
+   ltc_asn1_list *l;
+   unsigned long err, type, len, totlen, x, y;
+   void          *realloc_tmp;
+   
+   LTC_ARGCHK(in    != NULL);
+   LTC_ARGCHK(inlen != NULL);
+   LTC_ARGCHK(out   != NULL);
+
+   l = NULL;
+   totlen = 0;
+   
+   /* scan the input and and get lengths and what not */
+   while (*inlen) {     
+      /* read the type byte */
+      type = *in;
+
+      /* fetch length */
+      len = fetch_length(in, *inlen);
+      if (len > *inlen) {
+         err = CRYPT_INVALID_PACKET;
+         goto error;
+      }
+
+      /* alloc new link */
+      if (l == NULL) {
+         l = XCALLOC(1, sizeof(*l));
+         if (l == NULL) {
+            err = CRYPT_MEM;
+            goto error;
+         }
+      } else {
+         l->next = XCALLOC(1, sizeof(*l));
+         if (l->next == NULL) {
+            err = CRYPT_MEM;
+            goto error;
+         }
+         l->next->prev = l;
+         l = l->next;
+      }
+
+      /* now switch on type */
+      switch (type) {
+         case 0x02: /* INTEGER */
+             /* init field */
+             l->type = LTC_ASN1_INTEGER;
+             l->size = 1;
+             if ((err = mp_init(&l->data)) != CRYPT_OK) {
+                 goto error;
+             }
+             
+             /* decode field */
+             if ((err = der_decode_integer(in, *inlen, l->data)) != CRYPT_OK) {
+                 goto error;
+             }
+             
+             /* calc length of object */
+             if ((err = der_length_integer(l->data, &len)) != CRYPT_OK) {
+                 goto error;
+             }
+             break;
+
+         case 0x03: /* BIT */
+            /* init field */
+            l->type = LTC_ASN1_BIT_STRING;
+            l->size = len * 8; /* *8 because we store decoded bits one per char and they are encoded 8 per char.  */
+
+            if ((l->data = XCALLOC(1, l->size)) == NULL) {
+               err = CRYPT_MEM;
+               goto error;
+            }
+            
+            if ((err = der_decode_bit_string(in, *inlen, l->data, &l->size)) != CRYPT_OK) {
+               goto error;
+            }
+            
+            if ((err = der_length_bit_string(l->size, &len)) != CRYPT_OK) {
+               goto error;
+            }
+            break;
+
+         case 0x04: /* OCTET */
+
+            /* init field */
+            l->type = LTC_ASN1_OCTET_STRING;
+            l->size = len;
+
+            if ((l->data = XCALLOC(1, l->size)) == NULL) {
+               err = CRYPT_MEM;
+               goto error;
+            }
+            
+            if ((err = der_decode_octet_string(in, *inlen, l->data, &l->size)) != CRYPT_OK) {
+               goto error;
+            }
+            
+            if ((err = der_length_octet_string(l->size, &len)) != CRYPT_OK) {
+               goto error;
+            }
+            break;
+
+         case 0x05: /* NULL */
+         
+            /* valid NULL is 0x05 0x00 */
+            if (in[0] != 0x05 || in[1] != 0x00) {
+               err = CRYPT_INVALID_PACKET;
+               goto error;
+            }
+            
+            /* simple to store ;-) */
+            l->type = LTC_ASN1_NULL;
+            l->data = NULL;
+            l->size = 0;
+            len     = 2;
+            
+            break;
+         
+         case 0x06: /* OID */
+         
+            /* init field */
+            l->type = LTC_ASN1_OBJECT_IDENTIFIER;
+            l->size = len;
+
+            if ((l->data = XCALLOC(len, sizeof(unsigned long))) == NULL) {
+               err = CRYPT_MEM;
+               goto error;
+            }
+            
+            if ((err = der_decode_object_identifier(in, *inlen, l->data, &l->size)) != CRYPT_OK) {
+               goto error;
+            }
+            
+            if ((err = der_length_object_identifier(l->data, l->size, &len)) != CRYPT_OK) {
+               goto error;
+            }
+            
+            /* resize it to save a bunch of mem */
+            if ((realloc_tmp = XREALLOC(l->data, l->size * sizeof(unsigned long))) == NULL) {
+               /* out of heap but this is not an error */
+               break;
+            }
+            l->data = realloc_tmp;
+            break;
+         
+
+         case 0x13: /* PRINTABLE */
+         
+            /* init field */
+            l->type = LTC_ASN1_PRINTABLE_STRING;
+            l->size = len;
+
+            if ((l->data = XCALLOC(1, l->size)) == NULL) {
+               err = CRYPT_MEM;
+               goto error;
+            }
+            
+            if ((err = der_decode_printable_string(in, *inlen, l->data, &l->size)) != CRYPT_OK) {
+               goto error;
+            }
+            
+            if ((err = der_length_printable_string(l->data, l->size, &len)) != CRYPT_OK) {
+               goto error;
+            }
+            break;
+         
+         case 0x16: /* IA5 */
+         
+            /* init field */
+            l->type = LTC_ASN1_IA5_STRING;
+            l->size = len;
+
+            if ((l->data = XCALLOC(1, l->size)) == NULL) {
+               err = CRYPT_MEM;
+               goto error;
+            }
+            
+            if ((err = der_decode_ia5_string(in, *inlen, l->data, &l->size)) != CRYPT_OK) {
+               goto error;
+            }
+            
+            if ((err = der_length_ia5_string(l->data, l->size, &len)) != CRYPT_OK) {
+               goto error;
+            }
+            break;
+         
+         case 0x17: /* UTC TIME */
+         
+            /* init field */
+            l->type = LTC_ASN1_UTCTIME;
+            l->size = 1;
+
+            if ((l->data = XCALLOC(1, sizeof(ltc_utctime))) == NULL) {
+               err = CRYPT_MEM;
+               goto error;
+            }
+            
+            len = *inlen;
+            if ((err = der_decode_utctime(in, &len, l->data)) != CRYPT_OK) {
+               goto error;
+            }
+            
+            if ((err = der_length_utctime(l->data, &len)) != CRYPT_OK) {
+               goto error;
+            }
+            break;
+         
+         case 0x30: /* SEQUENCE */
+         
+             /* init field */
+             l->type = LTC_ASN1_SEQUENCE;
+             
+             /* we have to decode the SEQUENCE header and get it's length */
+             
+                /* move past type */
+                ++in; --(*inlen);
+                
+                /* read length byte */
+                x = *in++; --(*inlen);
+                
+                /* smallest SEQUENCE header */
+                y = 2;
+                
+                /* now if it's > 127 the next bytes are the length of the length */
+                if (x > 128) {
+                   x      &= 0x7F;
+                   in     += x;
+                   *inlen -= x;
+                   
+                   /* update sequence header len */
+                   y      += x;
+                }
+             
+             /* Sequence elements go as child */
+             len = *inlen;
+             if ((err = der_decode_sequence_flexi(in, &len, &(l->child))) != CRYPT_OK) {
+                goto error;
+             }
+             
+             /* len update */
+             totlen += y;
+             
+             /* link them up y0 */
+             l->child->parent = l;
+             
+             break;
+         default:
+           /* invalid byte ... this is a soft error */
+           /* remove link */
+           l       = l->prev;
+           XFREE(l->next);
+           l->next = NULL;
+           goto outside;
+      }
+      
+      /* advance pointers */
+      totlen  += len;
+      in      += len;
+      *inlen  -= len;
+   }
+   
+outside:   
+
+   /* rewind l please */
+   while (l->prev != NULL || l->parent != NULL) {
+      if (l->parent != NULL) {
+         l = l->parent;
+      } else {
+         l = l->prev;
+      }
+   }
+   
+   /* return */
+   *out   = l;
+   *inlen = totlen;
+   return CRYPT_OK;
+
+error:
+   /* free list */
+   der_sequence_free(l);
+
+   return err;
+}
+
+#endif
+
+
+/* $Source$ */
+/* $Revision$ */
+/* $Date$ */
diff --git a/src/pk/asn1/der/sequence/der_length_sequence.c b/src/pk/asn1/der/sequence/der_length_sequence.c
index 9120451..a1b6a5b 100644
--- a/src/pk/asn1/der/sequence/der_length_sequence.c
+++ b/src/pk/asn1/der/sequence/der_length_sequence.c
@@ -101,6 +101,13 @@ int der_length_sequence(ltc_asn1_list *list, unsigned long inlen,
                y += x;
                break;
 
+           case LTC_ASN1_UTCTIME:
+               if ((err = der_length_utctime(data, &x)) != CRYPT_OK) {
+                  goto LBL_ERR;
+               }
+               y += x;
+               break;
+
            case LTC_ASN1_SEQUENCE:
                if ((err = der_length_sequence(data, size, &x)) != CRYPT_OK) {
                   goto LBL_ERR;
diff --git a/src/pk/asn1/der/sequence/der_sequence_free.c b/src/pk/asn1/der/sequence/der_sequence_free.c
new file mode 100644
index 0000000..e2f57f2
--- /dev/null
+++ b/src/pk/asn1/der/sequence/der_sequence_free.c
@@ -0,0 +1,63 @@
+/* LibTomCrypt, modular cryptographic library -- Tom St Denis
+ *
+ * LibTomCrypt is a library that provides various cryptographic
+ * algorithms in a highly modular and flexible manner.
+ *
+ * The library is free for all purposes without any express
+ * guarantee it works.
+ *
+ * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
+ */
+#include "tomcrypt.h"
+
+/**
+  @file der_sequence_free.c
+  ASN.1 DER, free's a structure allocated by der_decode_sequence_flexi(), Tom St Denis
+*/
+
+#ifdef LTC_DER
+
+/**
+  Free memory allocated by der_decode_sequence_flexi()
+  @param in     The list to free
+*/  
+void der_sequence_free(ltc_asn1_list *in)
+{
+   ltc_asn1_list *l;
+   
+   /* walk to the start of the chain */
+   while (in->prev != NULL || in->parent != NULL) {
+      if (in->parent != NULL) {
+          in = in->parent;
+      } else {
+          in = in->prev;
+      }
+   }
+   
+   /* now walk the list and free stuff */
+   while (in != NULL) {
+      /* is there a child? */
+      if (in->child) {
+         /* disconnect */
+         in->child->parent = NULL;
+         der_sequence_free(in->child);
+      }
+      
+      switch (in->type) { 
+         case LTC_ASN1_SEQUENCE: break;
+         case LTC_ASN1_INTEGER : if (in->data != NULL) { mp_clear(in->data); } break;
+         default               : if (in->data != NULL) { XFREE(in->data);    }
+      }
+      
+      /* move to next and free current */
+      l = in->next;
+      free(in);
+      in = l;
+   }     
+}
+
+#endif
+
+/* $Source$ */
+/* $Revision$ */
+/* $Date$ */
diff --git a/src/pk/dsa/dsa_decrypt_key.c b/src/pk/dsa/dsa_decrypt_key.c
new file mode 100644
index 0000000..f5f3287
--- /dev/null
+++ b/src/pk/dsa/dsa_decrypt_key.c
@@ -0,0 +1,138 @@
+/* LibTomCrypt, modular cryptographic library -- Tom St Denis
+ *
+ * LibTomCrypt is a library that provides various cryptographic
+ * algorithms in a highly modular and flexible manner.
+ *
+ * The library is free for all purposes without any express
+ * guarantee it works.
+ *
+ * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
+ */
+#include "tomcrypt.h"
+
+/**
+  @file dsa_decrypt_key.c
+  DSA Crypto, Tom St Denis
+*/  
+
+#ifdef MECC
+
+/**
+  Decrypt an DSA encrypted key
+  @param in       The ciphertext
+  @param inlen    The length of the ciphertext (octets)
+  @param out      [out] The plaintext
+  @param outlen   [in/out] The max size and resulting size of the plaintext
+  @param key      The corresponding private DSA key
+  @return CRYPT_OK if successful
+*/
+int dsa_decrypt_key(const unsigned char *in,  unsigned long  inlen,
+                          unsigned char *out, unsigned long *outlen, 
+                          dsa_key *key)
+{
+   unsigned char  *skey, *expt;
+   void           *g_pub;
+   unsigned long  x, y, hashOID[32];
+   int            hash, err;
+   ltc_asn1_list  decode[3];
+
+   LTC_ARGCHK(in     != NULL);
+   LTC_ARGCHK(out    != NULL);
+   LTC_ARGCHK(outlen != NULL);
+   LTC_ARGCHK(key    != NULL);
+
+   /* right key type? */
+   if (key->type != PK_PRIVATE) {
+      return CRYPT_PK_NOT_PRIVATE;
+   }
+   
+   /* decode to find out hash */
+   LTC_SET_ASN1(decode, 0, LTC_ASN1_OBJECT_IDENTIFIER, hashOID, sizeof(hashOID)/sizeof(hashOID[0]));
+ 
+   if ((err = der_decode_sequence(in, inlen, decode, 1)) != CRYPT_OK) {
+      return err;
+   }
+
+   hash = find_hash_oid(hashOID, decode[0].size);                   
+   if (hash_is_valid(hash) != CRYPT_OK) {
+      return CRYPT_INVALID_PACKET;
+   }
+
+   /* we now have the hash! */
+   
+   if ((err = mp_init(&g_pub)) != CRYPT_OK) {
+      return err;
+   }
+
+   /* allocate memory */
+   expt   = XMALLOC(mp_unsigned_bin_size(key->p) + 1);
+   skey   = XMALLOC(MAXBLOCKSIZE);
+   if (expt == NULL || skey == NULL) {
+      if (expt != NULL) {
+         XFREE(expt);
+      }
+      if (skey != NULL) {
+         XFREE(skey);
+      }
+      mp_clear(g_pub);
+      return CRYPT_MEM;
+   }
+   
+   LTC_SET_ASN1(decode, 1, LTC_ASN1_INTEGER,          g_pub,      1UL);
+   LTC_SET_ASN1(decode, 2, LTC_ASN1_OCTET_STRING,      skey,      MAXBLOCKSIZE);
+
+   /* read the structure in now */
+   if ((err = der_decode_sequence(in, inlen, decode, 3)) != CRYPT_OK) {
+      goto LBL_ERR;
+   }
+
+   /* make shared key */
+   x = mp_unsigned_bin_size(key->p) + 1;
+   if ((err = dsa_shared_secret(key->x, g_pub, key, expt, &x)) != CRYPT_OK) {
+      goto LBL_ERR;
+   }
+
+   y = MIN(mp_unsigned_bin_size(key->p) + 1, MAXBLOCKSIZE);
+   if ((err = hash_memory(hash, expt, x, expt, &y)) != CRYPT_OK) {
+      goto LBL_ERR;
+   }
+
+   /* ensure the hash of the shared secret is at least as big as the encrypt itself */
+   if (decode[2].size > y) {
+      err = CRYPT_INVALID_PACKET;
+      goto LBL_ERR;
+   }
+
+   /* avoid buffer overflow */
+   if (*outlen < decode[2].size) {
+      err = CRYPT_BUFFER_OVERFLOW;
+      goto LBL_ERR;
+   }
+
+   /* Decrypt the key */
+   for (x = 0; x < decode[2].size; x++) {
+     out[x] = expt[x] ^ skey[x];
+   }
+   *outlen = x;
+
+   err = CRYPT_OK;
+LBL_ERR:
+#ifdef LTC_CLEAN_STACK
+   zeromem(expt,   mp_unsigned_bin_size(key->p) + 1);
+   zeromem(skey,   MAXBLOCKSIZE);
+#endif
+
+   XFREE(expt);
+   XFREE(skey);
+   
+   mp_clear(g_pub);
+
+   return err;
+}
+
+#endif
+
+/* $Source$ */
+/* $Revision$ */
+/* $Date$ */
+
diff --git a/src/pk/dsa/dsa_encrypt_key.c b/src/pk/dsa/dsa_encrypt_key.c
new file mode 100644
index 0000000..4223849
--- /dev/null
+++ b/src/pk/dsa/dsa_encrypt_key.c
@@ -0,0 +1,136 @@
+/* LibTomCrypt, modular cryptographic library -- Tom St Denis
+ *
+ * LibTomCrypt is a library that provides various cryptographic
+ * algorithms in a highly modular and flexible manner.
+ *
+ * The library is free for all purposes without any express
+ * guarantee it works.
+ *
+ * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
+ */
+#include "tomcrypt.h"
+
+/**
+  @file dsa_encrypt_key.c
+  DSA Crypto, Tom St Denis
+*/  
+
+#ifdef MDSA
+
+/**
+  Encrypt a symmetric key with DSA
+  @param in         The symmetric key you want to encrypt
+  @param inlen      The length of the key to encrypt (octets)
+  @param out        [out] The destination for the ciphertext
+  @param outlen     [in/out] The max size and resulting size of the ciphertext
+  @param prng       An active PRNG state
+  @param wprng      The index of the PRNG you wish to use 
+  @param hash       The index of the hash you want to use 
+  @param key        The DSA key you want to encrypt to
+  @return CRYPT_OK if successful
+*/
+int dsa_encrypt_key(const unsigned char *in,   unsigned long inlen,
+                          unsigned char *out,  unsigned long *outlen, 
+                          prng_state *prng, int wprng, int hash, 
+                          dsa_key *key)
+{
+    unsigned char *expt, *skey;
+    void          *g_pub, *g_priv;
+    unsigned long  x, y;
+    int            err;
+
+    LTC_ARGCHK(in      != NULL);
+    LTC_ARGCHK(out     != NULL);
+    LTC_ARGCHK(outlen  != NULL);
+    LTC_ARGCHK(key     != NULL);
+
+    /* check that wprng/cipher/hash are not invalid */
+    if ((err = prng_is_valid(wprng)) != CRYPT_OK) {
+       return err;
+    }
+
+    if ((err = hash_is_valid(hash)) != CRYPT_OK) {
+       return err;
+    }
+
+    if (inlen > hash_descriptor[hash].hashsize) {
+       return CRYPT_INVALID_HASH;
+    }
+
+    /* make a random key and export the public copy */
+    if ((err = mp_init_multi(&g_pub, &g_priv, NULL)) != CRYPT_OK) {
+       return err;
+    }
+   
+    expt       = XMALLOC(mp_unsigned_bin_size(key->p) + 1);
+    skey       = XMALLOC(MAXBLOCKSIZE);
+    if (expt == NULL  || skey == NULL) {
+       if (expt != NULL) {
+          XFREE(expt);
+       }
+       if (skey != NULL) {
+          XFREE(skey);
+       }
+       mp_clear_multi(g_pub, g_priv, NULL);
+       return CRYPT_MEM;
+    }
+    
+    /* make a random x, g^x pair */
+    x = mp_unsigned_bin_size(key->q);
+    if (prng_descriptor[wprng].read(expt, x, prng) != x) {
+       err = CRYPT_ERROR_READPRNG;
+       goto LBL_ERR;
+    }
+    
+    /* load x */
+    if ((err = mp_read_unsigned_bin(g_priv, expt, x)) != CRYPT_OK) {
+       goto LBL_ERR;
+    }
+    
+    /* compute y */
+    if ((err = mp_exptmod(key->g, g_priv, key->p, g_pub)) != CRYPT_OK) {
+       goto LBL_ERR;
+    }
+    
+    /* make random key */
+    x        = mp_unsigned_bin_size(key->p) + 1;
+    if ((err = dsa_shared_secret(g_priv, key->y, key, expt, &x)) != CRYPT_OK) {
+       goto LBL_ERR;
+    }
+
+    y = MAXBLOCKSIZE;
+    if ((err = hash_memory(hash, expt, x, skey, &y)) != CRYPT_OK) {
+       goto LBL_ERR;
+    }
+    
+    /* Encrypt key */
+    for (x = 0; x < inlen; x++) {
+      skey[x] ^= in[x];
+    }
+
+    err = der_encode_sequence_multi(out, outlen,
+                                    LTC_ASN1_OBJECT_IDENTIFIER,  hash_descriptor[hash].OIDlen,   hash_descriptor[hash].OID,
+                                    LTC_ASN1_INTEGER,            1UL,                            g_pub,
+                                    LTC_ASN1_OCTET_STRING,       inlen,                          skey,
+                                    LTC_ASN1_EOL,                0UL,                            NULL);
+
+LBL_ERR:
+#ifdef LTC_CLEAN_STACK
+    /* clean up */
+    zeromem(expt,   mp_unsigned_bin_size(key->p) + 1);
+    zeromem(skey,   MAXBLOCKSIZE);
+#endif
+
+    XFREE(skey);
+    XFREE(expt);
+    
+    mp_clear_multi(g_pub, g_priv, NULL);
+
+    return err;
+}
+
+#endif
+/* $Source$ */
+/* $Revision$ */
+/* $Date$ */
+
diff --git a/src/pk/dsa/dsa_import.c b/src/pk/dsa/dsa_import.c
index 1175427..034b62a 100644
--- a/src/pk/dsa/dsa_import.c
+++ b/src/pk/dsa/dsa_import.c
@@ -31,6 +31,7 @@ int dsa_import(const unsigned char *in, unsigned long inlen, dsa_key *key)
 
    LTC_ARGCHK(in  != NULL);
    LTC_ARGCHK(key != NULL);
+   LTC_ARGCHK(ltc_mp.name != NULL);
 
    /* init key */
    if (mp_init_multi(&key->p, &key->g, &key->q, &key->x, &key->y, NULL) != CRYPT_OK) {
diff --git a/src/pk/dsa/dsa_make_key.c b/src/pk/dsa/dsa_make_key.c
index 961b317..54a7b1d 100644
--- a/src/pk/dsa/dsa_make_key.c
+++ b/src/pk/dsa/dsa_make_key.c
@@ -33,6 +33,7 @@ int dsa_make_key(prng_state *prng, int wprng, int group_size, int modulus_size,
    unsigned char *buf;
 
    LTC_ARGCHK(key  != NULL);
+   LTC_ARGCHK(ltc_mp.name != NULL);
 
    /* check prng */
    if ((err = prng_is_valid(wprng)) != CRYPT_OK) {
diff --git a/src/pk/dsa/dsa_shared_secret.c b/src/pk/dsa/dsa_shared_secret.c
new file mode 100644
index 0000000..069634e
--- /dev/null
+++ b/src/pk/dsa/dsa_shared_secret.c
@@ -0,0 +1,71 @@
+/* LibTomCrypt, modular cryptographic library -- Tom St Denis
+ *
+ * LibTomCrypt is a library that provides various cryptographic
+ * algorithms in a highly modular and flexible manner.
+ *
+ * The library is free for all purposes without any express
+ * guarantee it works.
+ *
+ * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
+ */
+#include "tomcrypt.h"
+
+/**
+  @file dsa_shared_secret.c
+  DSA Crypto, Tom St Denis
+*/  
+
+#ifdef MDSA
+
+/**
+  Create a DSA shared secret between two keys
+  @param private_key      The private DSA key (the exponent)
+  @param base             The base of the exponentiation (allows this to be used for both encrypt and decrypt) 
+  @param public_key       The public key
+  @param out              [out] Destination of the shared secret
+  @param outlen           [in/out] The max size and resulting size of the shared secret
+  @return CRYPT_OK if successful
+*/
+int dsa_shared_secret(void          *private_key, void *base,
+                      dsa_key       *public_key,
+                      unsigned char *out,         unsigned long *outlen)
+{
+   unsigned long x;
+   void *res;
+   int err;
+
+   LTC_ARGCHK(private_key != NULL);
+   LTC_ARGCHK(public_key  != NULL);
+   LTC_ARGCHK(out         != NULL);
+   LTC_ARGCHK(outlen      != NULL);
+
+   /* make new point */
+   if ((err = mp_init(&res)) != CRYPT_OK) {
+      return err;
+   }
+
+   if ((err = mp_exptmod(base, private_key, public_key->p, res)) != CRYPT_OK) {
+      mp_clear(res);
+      return err;
+   }
+   
+   x = (unsigned long)mp_unsigned_bin_size(res);
+   if (*outlen < x) {
+      err = CRYPT_BUFFER_OVERFLOW;
+      goto done;
+   }
+   zeromem(out, x);
+   if ((err = mp_to_unsigned_bin(res, out + (x - mp_unsigned_bin_size(res))))   != CRYPT_OK)          { goto done; }
+
+   err     = CRYPT_OK;
+   *outlen = x;
+done:
+   mp_clear(res);
+   return err;
+}
+
+#endif
+/* $Source$ */
+/* $Revision$ */
+/* $Date$ */
+
diff --git a/src/pk/ecc/ecc.c b/src/pk/ecc/ecc.c
index 91cb1e9..ab1ea6d 100644
--- a/src/pk/ecc/ecc.c
+++ b/src/pk/ecc/ecc.c
@@ -23,12 +23,6 @@
 
 #ifdef MECC
 
-/* size of our temp buffers for exported keys */
-#define ECC_BUF_SIZE 256
-
-/* max private key size */
-#define ECC_MAXSIZE  66
-
 /* This holds the key settings.  ***MUST*** be organized by size from smallest to largest. */
 const ltc_ecc_set_type ltc_ecc_sets[] = {
 
@@ -148,1064 +142,6 @@ const ltc_ecc_set_type ltc_ecc_sets[] = {
 }
 };
 
-static int is_valid_idx(int n)
-{
-   int x;
-
-   for (x = 0; ltc_ecc_sets[x].size != 0; x++);
-   if ((n < 0) || (n >= x)) {
-      return 0;
-   }
-   return 1;
-}
-
-/**
-   Allocate a new ECC point
-   @return A newly allocated point or NULL on error 
-*/
-ecc_point *ltc_ecc_new_point(void)
-{
-   ecc_point *p;
-   p = XMALLOC(sizeof(ecc_point));
-   if (p == NULL) {
-      return NULL;
-   }
-   if (mp_init_multi(&p->x, &p->y, &p->z, NULL) != CRYPT_OK) {
-      XFREE(p);
-      return NULL;
-   }
-   return p;
-}
-
-/** Free an ECC point from memory
-  @param p   The point to free
-*/
-void ltc_ecc_del_point(ecc_point *p)
-{
-   /* prevents free'ing null arguments */
-   if (p != NULL) {
-      mp_clear_multi(p->x, p->y, p->z, NULL);
-      XFREE(p);
-   }
-}
-
-/**
-  Map a projective jacbobian point back to affine space
-  @param P        [in/out] The point to map
-  @param modulus  The modulus of the field the ECC curve is in
-  @param mp       The "b" value from montgomery_setup()
-  @return CRYPT_OK on success
-*/
-int ltc_ecc_map(ecc_point *P, void *modulus, void *mp)
-{
-   void *t1, *t2;
-   int err;
-
-   LTC_ARGCHK(P       != NULL);
-   LTC_ARGCHK(modulus != NULL);
-   LTC_ARGCHK(mp      != NULL);
-
-   if ((err = mp_init_multi(&t1, &t2, NULL)) != CRYPT_OK) {
-      return CRYPT_MEM;
-   }
-
-   /* first map z back to normal */
-   if ((err = mp_montgomery_reduce(P->z, modulus, mp)) != CRYPT_OK)           { goto done; }
-
-   /* get 1/z */
-   if ((err = mp_invmod(P->z, modulus, t1)) != CRYPT_OK)                     { goto done; }
- 
-   /* get 1/z^2 and 1/z^3 */
-   if ((err = mp_sqr(t1, t2)) != CRYPT_OK)                                    { goto done; }
-   if ((err = mp_mod(t2, modulus, t2)) != CRYPT_OK)                           { goto done; }
-   if ((err = mp_mul(t1, t2, t1)) != CRYPT_OK)                                { goto done; }
-   if ((err = mp_mod(t1, modulus, t1)) != CRYPT_OK)                           { goto done; }
-
-   /* multiply against x/y */
-   if ((err = mp_mul(P->x, t2, P->x)) != CRYPT_OK)                            { goto done; }
-   if ((err = mp_montgomery_reduce(P->x, modulus, mp)) != CRYPT_OK)           { goto done; }
-   if ((err = mp_mul(P->y, t1, P->y)) != CRYPT_OK)                            { goto done; }
-   if ((err = mp_montgomery_reduce(P->y, modulus, mp)) != CRYPT_OK)           { goto done; }
-   mp_set(P->z, 1);
-
-   err = CRYPT_OK;
-   goto done;
-done:
-   mp_clear_multi(t1, t2, NULL);
-   return err;
-}
-
-/**
-   Double an ECC point
-   @param P   The point to double
-   @param R   [out] The destination of the double
-   @param modulus  The modulus of the field the ECC curve is in
-   @param mp       The "b" value from montgomery_setup()
-   @return CRYPT_OK on success
-*/
-int ltc_ecc_dbl_point(ecc_point *P, ecc_point *R, void *modulus, void *mp)
-{
-   void *t1, *t2;
-   int err;
-
-   LTC_ARGCHK(P       != NULL);
-   LTC_ARGCHK(R       != NULL);
-   LTC_ARGCHK(modulus != NULL);
-   LTC_ARGCHK(mp      != NULL);
-
-   if ((err = mp_init_multi(&t1, &t2, NULL)) != CRYPT_OK) {
-      return err;
-   }
-
-   if ((err = mp_copy(P->x, R->x)) != CRYPT_OK)                                   { goto done; }
-   if ((err = mp_copy(P->y, R->y)) != CRYPT_OK)                                   { goto done; }
-   if ((err = mp_copy(P->z, R->z)) != CRYPT_OK)                                   { goto done; }
-
-   /* t1 = Z * Z */
-   if ((err = mp_sqr(R->z, t1)) != CRYPT_OK)                                      { goto done; }
-   if ((err = mp_montgomery_reduce(t1, modulus, mp)) != CRYPT_OK)                 { goto done; }
-   /* Z = Y * Z */
-   if ((err = mp_mul(R->z, R->y, R->z)) != CRYPT_OK)                              { goto done; }
-   if ((err = mp_montgomery_reduce(R->z, modulus, mp)) != CRYPT_OK)               { goto done; }
-   /* Z = 2Z */
-   if ((err = mp_add(R->z, R->z, R->z)) != CRYPT_OK)                              { goto done; }
-   if (mp_cmp(R->z, modulus) != LTC_MP_LT) {
-      if ((err = mp_sub(R->z, modulus, R->z)) != CRYPT_OK)                        { goto done; }
-   }
-
-   /* T2 = X - T1 */
-   if ((err = mp_sub(R->x, t1, t2)) != CRYPT_OK)                                  { goto done; }
-   if (mp_cmp_d(t2, 0) == LTC_MP_LT) {
-      if ((err = mp_add(t2, modulus, t2)) != CRYPT_OK)                            { goto done; }
-   }
-   /* T1 = X + T1 */
-   if ((err = mp_add(t1, R->x, t1)) != CRYPT_OK)                                  { goto done; }
-   if (mp_cmp(t1, modulus) != LTC_MP_LT) {
-      if ((err = mp_sub(t1, modulus, t1)) != CRYPT_OK)                            { goto done; }
-   }
-   /* T2 = T1 * T2 */
-   if ((err = mp_mul(t1, t2, t2)) != CRYPT_OK)                                    { goto done; }
-   if ((err = mp_montgomery_reduce(t2, modulus, mp)) != CRYPT_OK)                 { goto done; }
-   /* T1 = 2T2 */
-   if ((err = mp_add(t2, t2, t1)) != CRYPT_OK)                                    { goto done; }
-   if (mp_cmp(t1, modulus) != LTC_MP_LT) {
-      if ((err = mp_sub(t1, modulus, t1)) != CRYPT_OK)                            { goto done; }
-   }
-   /* T1 = T1 + T2 */
-   if ((err = mp_add(t1, t2, t1)) != CRYPT_OK)                                    { goto done; }
-   if (mp_cmp(t1, modulus) != LTC_MP_LT) {
-      if ((err = mp_sub(t1, modulus, t1)) != CRYPT_OK)                            { goto done; }
-   }
-
-   /* Y = 2Y */
-   if ((err = mp_add(R->y, R->y, R->y)) != CRYPT_OK)                              { goto done; }
-   if (mp_cmp(R->y, modulus) != LTC_MP_LT) {
-      if ((err = mp_sub(R->y, modulus, R->y)) != CRYPT_OK)                        { goto done; }
-   }
-   /* Y = Y * Y */
-   if ((err = mp_sqr(R->y, R->y)) != CRYPT_OK)                                    { goto done; }
-   if ((err = mp_montgomery_reduce(R->y, modulus, mp)) != CRYPT_OK)               { goto done; }
-   /* T2 = Y * Y */
-   if ((err = mp_sqr(R->y, t2)) != CRYPT_OK)                                      { goto done; }
-   if ((err = mp_montgomery_reduce(t2, modulus, mp)) != CRYPT_OK)                 { goto done; }
-   /* T2 = T2/2 */
-   if (mp_isodd(t2)) {
-      if ((err = mp_add(t2, modulus, t2)) != CRYPT_OK)                            { goto done; }
-   }
-   if ((err = mp_div_2(t2, t2)) != CRYPT_OK)                                      { goto done; }
-   /* Y = Y * X */
-   if ((err = mp_mul(R->y, R->x, R->y)) != CRYPT_OK)                              { goto done; }
-   if ((err = mp_montgomery_reduce(R->y, modulus, mp)) != CRYPT_OK)               { goto done; }
-
-   /* X  = T1 * T1 */
-   if ((err = mp_sqr(t1, R->x)) != CRYPT_OK)                                      { goto done; }
-   if ((err = mp_montgomery_reduce(R->x, modulus, mp)) != CRYPT_OK)               { goto done; }
-   /* X = X - Y */
-   if ((err = mp_sub(R->x, R->y, R->x)) != CRYPT_OK)                              { goto done; }
-   if (mp_cmp_d(R->x, 0) == LTC_MP_LT) {
-      if ((err = mp_add(R->x, modulus, R->x)) != CRYPT_OK)                        { goto done; }
-   }
-   /* X = X - Y */
-   if ((err = mp_sub(R->x, R->y, R->x)) != CRYPT_OK)                              { goto done; }
-   if (mp_cmp_d(R->x, 0) == LTC_MP_LT) {
-      if ((err = mp_add(R->x, modulus, R->x)) != CRYPT_OK)                        { goto done; }
-   }
-
-   /* Y = Y - X */     
-   if ((err = mp_sub(R->y, R->x, R->y)) != CRYPT_OK)                              { goto done; }
-   if (mp_cmp_d(R->y, 0) == LTC_MP_LT) {
-      if ((err = mp_add(R->y, modulus, R->y)) != CRYPT_OK)                        { goto done; }
-   }
-   /* Y = Y * T1 */
-   if ((err = mp_mul(R->y, t1, R->y)) != CRYPT_OK)                                { goto done; }
-   if ((err = mp_montgomery_reduce(R->y, modulus, mp)) != CRYPT_OK)               { goto done; }
-   /* Y = Y - T2 */
-   if ((err = mp_sub(R->y, t2, R->y)) != CRYPT_OK)                                { goto done; }
-   if (mp_cmp_d(R->y, 0) == LTC_MP_LT) {
-      if ((err = mp_add(R->y, modulus, R->y)) != CRYPT_OK)                        { goto done; }
-   }
- 
-   err = CRYPT_OK;
-   goto done;
-done:
-   mp_clear_multi(t1, t2, NULL);
-   return err;
-}
-
-/**
-   Add two ECC points
-   @param P   The point to add
-   @param Q   The point to add
-   @param R   [out] The destination of the double
-   @param modulus  The modulus of the field the ECC curve is in
-   @param mp       The "b" value from montgomery_setup()
-   @return CRYPT_OK on success
-*/
-int ltc_ecc_add_point(ecc_point *P, ecc_point *Q, ecc_point *R, void *modulus, void *mp)
-{
-   void  *t1, *t2, *x, *y, *z;
-   int err;
-
-   LTC_ARGCHK(P       != NULL);
-   LTC_ARGCHK(Q       != NULL);
-   LTC_ARGCHK(R       != NULL);
-   LTC_ARGCHK(modulus != NULL);
-   LTC_ARGCHK(mp      != NULL);
-
-   if ((err = mp_init_multi(&t1, &t2, &x, &y, &z, NULL)) != CRYPT_OK) {
-      return err;
-   }
-
-   if ((err = mp_copy(P->x, x)) != CRYPT_OK)                                   { goto done; }
-   if ((err = mp_copy(P->y, y)) != CRYPT_OK)                                   { goto done; }
-   if ((err = mp_copy(P->z, z)) != CRYPT_OK)                                   { goto done; }
-
-      /* T1 = Z' * Z' */
-      if ((err = mp_sqr(Q->z, t1)) != CRYPT_OK)                                { goto done; }
-      if ((err = mp_montgomery_reduce(t1, modulus, mp)) != CRYPT_OK)           { goto done; }
-      /* X = X * T1 */
-      if ((err = mp_mul(t1, x, x)) != CRYPT_OK)                                { goto done; }
-      if ((err = mp_montgomery_reduce(x, modulus, mp)) != CRYPT_OK)            { goto done; }
-      /* T1 = Z' * T1 */
-      if ((err = mp_mul(Q->z, t1, t1)) != CRYPT_OK)                            { goto done; }
-      if ((err = mp_montgomery_reduce(t1, modulus, mp)) != CRYPT_OK)           { goto done; }
-      /* Y = Y * T1 */
-      if ((err = mp_mul(t1, y, y)) != CRYPT_OK)                                { goto done; }
-      if ((err = mp_montgomery_reduce(y, modulus, mp)) != CRYPT_OK)            { goto done; }
-
-   /* T1 = Z*Z */
-   if ((err = mp_sqr(z, t1)) != CRYPT_OK)                                      { goto done; }
-   if ((err = mp_montgomery_reduce(t1, modulus, mp)) != CRYPT_OK)              { goto done; }
-   /* T2 = X' * T1 */
-   if ((err = mp_mul(Q->x, t1, t2)) != CRYPT_OK)                               { goto done; }
-   if ((err = mp_montgomery_reduce(t2, modulus, mp)) != CRYPT_OK)              { goto done; }
-   /* T1 = Z * T1 */
-   if ((err = mp_mul(z, t1, t1)) != CRYPT_OK)                                  { goto done; }
-   if ((err = mp_montgomery_reduce(t1, modulus, mp)) != CRYPT_OK)              { goto done; }
-   /* T1 = Y' * T1 */
-   if ((err = mp_mul(Q->y, t1, t1)) != CRYPT_OK)                               { goto done; }
-   if ((err = mp_montgomery_reduce(t1, modulus, mp)) != CRYPT_OK)              { goto done; }
-
-   /* Y = Y - T1 */
-   if ((err = mp_sub(y, t1, y)) != CRYPT_OK)                                   { goto done; }
-   if (mp_cmp_d(y, 0) == LTC_MP_LT) {
-      if ((err = mp_add(y, modulus, y)) != CRYPT_OK)                           { goto done; }
-   }
-   /* T1 = 2T1 */
-   if ((err = mp_add(t1, t1, t1)) != CRYPT_OK)                                 { goto done; }
-   if (mp_cmp(t1, modulus) != LTC_MP_LT) {
-      if ((err = mp_sub(t1, modulus, t1)) != CRYPT_OK)                         { goto done; }
-   }
-   /* T1 = Y + T1 */
-   if ((err = mp_add(t1, y, t1)) != CRYPT_OK)                                  { goto done; }
-   if (mp_cmp(t1, modulus) != LTC_MP_LT) {
-      if ((err = mp_sub(t1, modulus, t1)) != CRYPT_OK)                         { goto done; }
-   }
-   /* X = X - T2 */
-   if ((err = mp_sub(x, t2, x)) != CRYPT_OK)                                   { goto done; }
-   if (mp_cmp_d(x, 0) == LTC_MP_LT) {
-      if ((err = mp_add(x, modulus, x)) != CRYPT_OK)                           { goto done; }
-   }
-   /* T2 = 2T2 */
-   if ((err = mp_add(t2, t2, t2)) != CRYPT_OK)                                 { goto done; }
-   if (mp_cmp(t2, modulus) != LTC_MP_LT) {
-      if ((err = mp_sub(t2, modulus, t2)) != CRYPT_OK)                         { goto done; }
-   }
-   /* T2 = X + T2 */
-   if ((err = mp_add(t2, x, t2)) != CRYPT_OK)                                  { goto done; }
-   if (mp_cmp(t2, modulus) != LTC_MP_LT) {
-      if ((err = mp_sub(t2, modulus, t2)) != CRYPT_OK)                         { goto done; }
-   }
-
-   /* if Z' != 1 */
-   if (mp_cmp_d(Q->z, 1) != LTC_MP_EQ) {
-      /* Z = Z * Z' */
-      if ((err = mp_mul(z, Q->z, z)) != CRYPT_OK)                              { goto done; }
-      if ((err = mp_montgomery_reduce(z, modulus, mp)) != CRYPT_OK)            { goto done; }
-   }
-   /* Z = Z * X */
-   if ((err = mp_mul(z, x, z)) != CRYPT_OK)                                    { goto done; }
-   if ((err = mp_montgomery_reduce(z, modulus, mp)) != CRYPT_OK)               { goto done; }
-
-   /* T1 = T1 * X  */
-   if ((err = mp_mul(t1, x, t1)) != CRYPT_OK)                                  { goto done; }
-   if ((err = mp_montgomery_reduce(t1, modulus, mp)) != CRYPT_OK)              { goto done; }
-   /* X = X * X */
-   if ((err = mp_sqr(x, x)) != CRYPT_OK)                                       { goto done; }
-   if ((err = mp_montgomery_reduce(x, modulus, mp)) != CRYPT_OK)               { goto done; }
-   /* T2 = T2 * x */
-   if ((err = mp_mul(t2, x, t2)) != CRYPT_OK)                                  { goto done; }
-   if ((err = mp_montgomery_reduce(t2, modulus, mp)) != CRYPT_OK)              { goto done; }
-   /* T1 = T1 * X  */
-   if ((err = mp_mul(t1, x, t1)) != CRYPT_OK)                                  { goto done; }
-   if ((err = mp_montgomery_reduce(t1, modulus, mp)) != CRYPT_OK)              { goto done; }
- 
-   /* X = Y*Y */
-   if ((err = mp_sqr(y, x)) != CRYPT_OK)                                       { goto done; }
-   if ((err = mp_montgomery_reduce(x, modulus, mp)) != CRYPT_OK)               { goto done; }
-   /* X = X - T2 */
-   if ((err = mp_sub(x, t2, x)) != CRYPT_OK)                                   { goto done; }
-   if (mp_cmp_d(x, 0) == LTC_MP_LT) {
-      if ((err = mp_add(x, modulus, x)) != CRYPT_OK)                           { goto done; }
-   }
-
-   /* T2 = T2 - X */
-   if ((err = mp_sub(t2, x, t2)) != CRYPT_OK)                                  { goto done; }
-   if (mp_cmp_d(t2, 0) == LTC_MP_LT) {
-      if ((err = mp_add(t2, modulus, t2)) != CRYPT_OK)                         { goto done; }
-   } 
-   /* T2 = T2 - X */
-   if ((err = mp_sub(t2, x, t2)) != CRYPT_OK)                                  { goto done; }
-   if (mp_cmp_d(t2, 0) == LTC_MP_LT) {
-      if ((err = mp_add(t2, modulus, t2)) != CRYPT_OK)                         { goto done; }
-   }
-   /* T2 = T2 * Y */
-   if ((err = mp_mul(t2, y, t2)) != CRYPT_OK)                                  { goto done; }
-   if ((err = mp_montgomery_reduce(t2, modulus, mp)) != CRYPT_OK)              { goto done; }
-   /* Y = T2 - T1 */
-   if ((err = mp_sub(t2, t1, y)) != CRYPT_OK)                                  { goto done; }
-   if (mp_cmp_d(y, 0) == LTC_MP_LT) {
-      if ((err = mp_add(y, modulus, y)) != CRYPT_OK)                           { goto done; }
-   }
-   /* Y = Y/2 */
-   if (mp_isodd(y)) {
-      if ((err = mp_add(y, modulus, y)) != CRYPT_OK)                           { goto done; }
-   }
-   if ((err = mp_div_2(y, y)) != CRYPT_OK)                                     { goto done; }
-
-   if ((err = mp_copy(x, R->x)) != CRYPT_OK)                                   { goto done; }
-   if ((err = mp_copy(y, R->y)) != CRYPT_OK)                                   { goto done; }
-   if ((err = mp_copy(z, R->z)) != CRYPT_OK)                                   { goto done; }
-
-   err = CRYPT_OK;
-   goto done;
-done:
-   mp_clear_multi(t1, t2, x, y, z, NULL);
-   return err;
-}
-
-/* size of sliding window, don't change this! */
-#define WINSIZE 4
-
-#ifdef LTC_ECC_TIMING_RESISTANT
-
-/**
-   Perform a point multiplication  (timing resistant)
-   @param k    The scalar to multiply by
-   @param G    The base point
-   @param R    [out] Destination for kG
-   @param modulus  The modulus of the field the ECC curve is in
-   @param map      Boolean whether to map back to affine or not (1==map, 0 == leave in projective)
-   @return CRYPT_OK on success
-*/
-int ltc_ecc_mulmod(void *k, ecc_point *G, ecc_point *R, void *modulus, int map)
-{
-   ecc_point *tG, *M[3];
-   int        i, j, err;
-   void       *mu, *mp;
-   unsigned long buf;
-   int        first, bitbuf, bitcpy, bitcnt, mode, digidx;
-
-   /* Call accelerator if present */
-   if (ltc_mp.ecc_ptmul != NULL) {
-      return ltc_mp.ecc_ptmul(k, G, R, modulus, map);
-   }
-
-   LTC_ARGCHK(k       != NULL);
-   LTC_ARGCHK(G       != NULL);
-   LTC_ARGCHK(R       != NULL);
-   LTC_ARGCHK(modulus != NULL);
-
-   /* init montgomery reduction */
-   if ((err = mp_montgomery_setup(modulus, &mp)) != CRYPT_OK) {
-      return err;
-   }
-   if ((err = mp_init(&mu)) != CRYPT_OK) {
-      return err;
-   }
-   if ((err = mp_montgomery_normalization(mu, modulus)) != CRYPT_OK) {
-      mp_montgomery_free(mp);
-      mp_clear(mu);
-      return err;
-   }
-
-  /* alloc ram for window temps */
-  for (i = 0; i < 3; i++) {
-      M[i] = ltc_ecc_new_point();
-      if (M[i] == NULL) {
-         for (j = 0; j < i; j++) {
-             ltc_ecc_del_point(M[j]);
-         }
-         mp_montgomery_free(mp);
-         mp_clear(mu);
-         return CRYPT_MEM;
-      }
-  }
-
-   /* make a copy of G incase R==G */
-   tG = ltc_ecc_new_point();
-   if (tG == NULL)                                                                   { err = CRYPT_MEM; goto done; }
-
-   /* tG = G  and convert to montgomery */
-   if ((err = mp_mulmod(G->x, mu, modulus, tG->x)) != CRYPT_OK)                      { goto done; }
-   if ((err = mp_mulmod(G->y, mu, modulus, tG->y)) != CRYPT_OK)                      { goto done; }
-   if ((err = mp_mulmod(G->z, mu, modulus, tG->z)) != CRYPT_OK)                      { goto done; }
-   mp_clear(mu);
-   
-   /* calc the M tab, which holds kG for k==8..15 */
-   /* M[0] == G */
-   if ((err = mp_copy(tG->x, M[0]->x)) != CRYPT_OK)                                   { goto done; }
-   if ((err = mp_copy(tG->y, M[0]->y)) != CRYPT_OK)                                   { goto done; }
-   if ((err = mp_copy(tG->z, M[0]->z)) != CRYPT_OK)                                   { goto done; }
-   /* M[1] == 2G */
-   if ((err = ltc_ecc_dbl_point(tG, M[1], modulus, mp)) != CRYPT_OK)                  { goto done; }
-
-   /* setup sliding window */
-   mode   = 0;
-   bitcnt = 1;
-   buf    = 0;
-   digidx = mp_get_digit_count(k) - 1;
-   bitcpy = bitbuf = 0;
-   first  = 1;
-
-   /* perform ops */
-   for (;;) {
-     /* grab next digit as required */
-      if (--bitcnt == 0) {
-         if (digidx == -1) {
-            break;
-         }
-         buf    = mp_get_digit(k, digidx);
-         bitcnt = (int) MP_DIGIT_BIT;
-         --digidx;
-      }
-
-      /* grab the next msb from the ltiplicand */
-      i = (buf >> (MP_DIGIT_BIT - 1)) & 1;
-      buf <<= 1;
-
-      if (mode == 0 && i == 0) {
-         /* dummy operations */
-         if ((err = ltc_ecc_add_point(M[0], M[1], M[2], modulus, mp)) != CRYPT_OK)    { goto done; }
-         if ((err = ltc_ecc_dbl_point(M[1], M[2], modulus, mp)) != CRYPT_OK)          { goto done; }
-         continue;
-      }
-
-      if (mode == 0 && i == 1) {
-         mode = 1;
-         /* dummy operations */
-         if ((err = ltc_ecc_add_point(M[0], M[1], M[2], modulus, mp)) != CRYPT_OK)    { goto done; }
-         if ((err = ltc_ecc_dbl_point(M[1], M[2], modulus, mp)) != CRYPT_OK)          { goto done; }
-         continue;
-      }
-
-      if ((err = ltc_ecc_add_point(M[0], M[1], M[i^1], modulus, mp)) != CRYPT_OK)    { goto done; }
-      if ((err = ltc_ecc_dbl_point(M[i], M[i], modulus, mp)) != CRYPT_OK)            { goto done; }
-   }
-
-   /* copy result out */
-   if ((err = mp_copy(M[0]->x, R->x)) != CRYPT_OK)                                   { goto done; }
-   if ((err = mp_copy(M[0]->y, R->y)) != CRYPT_OK)                                   { goto done; }
-   if ((err = mp_copy(M[0]->z, R->z)) != CRYPT_OK)                                   { goto done; }
-
-   /* map R back from projective space */
-   if (map) {
-      err = ltc_ecc_map(R, modulus, mp);
-   } else {
-      err = CRYPT_OK;
-   }
-done:
-   mp_montgomery_free(mp);
-   ltc_ecc_del_point(tG);
-   for (i = 0; i < 3; i++) {
-       ltc_ecc_del_point(M[i]);
-   }
-   return err;
-}
-
-
-#else
-
-/**
-   Perform a point multiplication 
-   @param k    The scalar to multiply by
-   @param G    The base point
-   @param R    [out] Destination for kG
-   @param modulus  The modulus of the field the ECC curve is in
-   @param map      Boolean whether to map back to affine or not (1==map, 0 == leave in projective)
-   @return CRYPT_OK on success
-*/
-int ltc_ecc_mulmod(void *k, ecc_point *G, ecc_point *R, void *modulus, int map)
-{
-   ecc_point *tG, *M[8];
-   int        i, j, err;
-   void       *mu, *mp;
-   unsigned long buf;
-   int        first, bitbuf, bitcpy, bitcnt, mode, digidx;
-
-   /* Call accelerator if present */
-   if (ltc_mp.ecc_ptmul != NULL) {
-      return ltc_mp.ecc_ptmul(k, G, R, modulus, map);
-   }
-
-   LTC_ARGCHK(k       != NULL);
-   LTC_ARGCHK(G       != NULL);
-   LTC_ARGCHK(R       != NULL);
-   LTC_ARGCHK(modulus != NULL);
-
-   /* init montgomery reduction */
-   if ((err = mp_montgomery_setup(modulus, &mp)) != CRYPT_OK) {
-      return err;
-   }
-   if ((err = mp_init(&mu)) != CRYPT_OK) {
-      return err;
-   }
-   if ((err = mp_montgomery_normalization(mu, modulus)) != CRYPT_OK) {
-      mp_montgomery_free(mp);
-      mp_clear(mu);
-      return err;
-   }
-
-  /* alloc ram for window temps */
-  for (i = 0; i < 8; i++) {
-      M[i] = ltc_ecc_new_point();
-      if (M[i] == NULL) {
-         for (j = 0; j < i; j++) {
-             ltc_ecc_del_point(M[j]);
-         }
-         mp_montgomery_free(mp);
-         mp_clear(mu);
-         return CRYPT_MEM;
-      }
-  }
-
-   /* make a copy of G incase R==G */
-   tG = ltc_ecc_new_point();
-   if (tG == NULL)                                                                   { err = CRYPT_MEM; goto done; }
-
-   /* tG = G  and convert to montgomery */
-   if ((err = mp_mulmod(G->x, mu, modulus, tG->x)) != CRYPT_OK)                      { goto done; }
-   if ((err = mp_mulmod(G->y, mu, modulus, tG->y)) != CRYPT_OK)                      { goto done; }
-   if ((err = mp_mulmod(G->z, mu, modulus, tG->z)) != CRYPT_OK)                      { goto done; }
-   mp_clear(mu);
-   
-   /* calc the M tab, which holds kG for k==8..15 */
-   /* M[0] == 8G */
-   if ((err = ltc_ecc_dbl_point(tG,   M[0], modulus, mp)) != CRYPT_OK)               { goto done; }
-   if ((err = ltc_ecc_dbl_point(M[0], M[0], modulus, mp)) != CRYPT_OK)               { goto done; }
-   if ((err = ltc_ecc_dbl_point(M[0], M[0], modulus, mp)) != CRYPT_OK)               { goto done; }
-
-   /* now find (8+k)G for k=1..7 */
-   for (j = 9; j < 16; j++) {
-       if ((err = ltc_ecc_add_point(M[j-9], tG, M[j-8], modulus, mp)) != CRYPT_OK)   { goto done; }
-   }
-
-   /* setup sliding window */
-   mode   = 0;
-   bitcnt = 1;
-   buf    = 0;
-   digidx = mp_get_digit_count(k) - 1;
-   bitcpy = bitbuf = 0;
-   first  = 1;
-
-   /* perform ops */
-   for (;;) {
-     /* grab next digit as required */
-     if (--bitcnt == 0) {
-       if (digidx == -1) {
-          break;
-       }
-       buf    = mp_get_digit(k, digidx);
-       bitcnt = (int) MP_DIGIT_BIT;
-       --digidx;
-     }
-
-     /* grab the next msb from the ltiplicand */
-     i = (buf >> (MP_DIGIT_BIT - 1)) & 1;
-     buf <<= 1;
-
-     /* skip leading zero bits */
-     if (mode == 0 && i == 0) {
-        continue;
-     }
-
-     /* if the bit is zero and mode == 1 then we double */
-     if (mode == 1 && i == 0) {
-        if ((err = ltc_ecc_dbl_point(R, R, modulus, mp)) != CRYPT_OK)                 { goto done; }
-        continue;
-     }
-
-     /* else we add it to the window */
-     bitbuf |= (i << (WINSIZE - ++bitcpy));
-     mode = 2;
-
-     if (bitcpy == WINSIZE) {
-       /* if this is the first window we do a simple copy */
-       if (first == 1) {
-          /* R = kG [k = first window] */
-          if ((err = mp_copy(M[bitbuf-8]->x, R->x)) != CRYPT_OK)                     { goto done; }
-          if ((err = mp_copy(M[bitbuf-8]->y, R->y)) != CRYPT_OK)                     { goto done; }
-          if ((err = mp_copy(M[bitbuf-8]->z, R->z)) != CRYPT_OK)                     { goto done; }
-          first = 0;
-       } else {
-         /* normal window */
-         /* ok window is filled so double as required and add  */
-         /* double first */
-         for (j = 0; j < WINSIZE; j++) {
-           if ((err = ltc_ecc_dbl_point(R, R, modulus, mp)) != CRYPT_OK)             { goto done; }
-         }
-
-         /* then add, bitbuf will be 8..15 [8..2^WINSIZE] guaranteed */
-         if ((err = ltc_ecc_add_point(R, M[bitbuf-8], R, modulus, mp)) != CRYPT_OK)  { goto done; }
-       }
-       /* empty window and reset */
-       bitcpy = bitbuf = 0;
-       mode = 1;
-    }
-  }
-
-   /* if bits remain then double/add */
-   if (mode == 2 && bitcpy > 0) {
-     /* double then add */
-     for (j = 0; j < bitcpy; j++) {
-       /* only double if we have had at least one add first */
-       if (first == 0) {
-          if ((err = ltc_ecc_dbl_point(R, R, modulus, mp)) != CRYPT_OK)             { goto done; }
-       }
-
-       bitbuf <<= 1;
-       if ((bitbuf & (1 << WINSIZE)) != 0) {
-         if (first == 1){
-            /* first add, so copy */
-            if ((err = mp_copy(tG->x, R->x)) != CRYPT_OK)                           { goto done; }
-            if ((err = mp_copy(tG->y, R->y)) != CRYPT_OK)                           { goto done; }
-            if ((err = mp_copy(tG->z, R->z)) != CRYPT_OK)                           { goto done; }
-            first = 0;
-         } else {
-            /* then add */
-            if ((err = ltc_ecc_add_point(R, tG, R, modulus, mp)) != CRYPT_OK)       { goto done; }
-         }
-       }
-     }
-   }
-
-   /* map R back from projective space */
-   if (map) {
-      err = ltc_ecc_map(R, modulus, mp);
-   } else {
-      err = CRYPT_OK;
-   }
-done:
-   mp_montgomery_free(mp);
-   ltc_ecc_del_point(tG);
-   for (i = 0; i < 8; i++) {
-       ltc_ecc_del_point(M[i]);
-   }
-   return err;
-}
-
-#endif
-
-#undef WINSIZE
-
-/**
-  Perform on the ECC system
-  @return CRYPT_OK if successful
-*/
-int ecc_test(void)
-{
-   void     *modulus, *order;
-   ecc_point  *G, *GG;
-   int i, err, primality;
-
-   if ((err = mp_init_multi(&modulus, &order, NULL)) != CRYPT_OK) {
-      return err;
-   }
-
-   G   = ltc_ecc_new_point();
-   GG  = ltc_ecc_new_point();
-   if (G == NULL || GG == NULL) {
-      mp_clear_multi(modulus, order, NULL);
-      ltc_ecc_del_point(G);
-      ltc_ecc_del_point(GG);
-      return CRYPT_MEM;
-   }
-
-   for (i = 0; ltc_ecc_sets[i].size; i++) {
-       #if 0
-          printf("Testing %d\n", ltc_ecc_sets[i].size);
-       #endif
-       if ((err = mp_read_radix(modulus, (char *)ltc_ecc_sets[i].prime, 64)) != CRYPT_OK)   { goto done; }
-       if ((err = mp_read_radix(order, (char *)ltc_ecc_sets[i].order, 64)) != CRYPT_OK)     { goto done; }
-
-       /* is prime actually prime? */
-       if ((err = mp_prime_is_prime(modulus, 8, &primality)) != CRYPT_OK)                      { goto done; }
-       if (primality == 0) {
-          err = CRYPT_FAIL_TESTVECTOR;
-          goto done;
-       }
-
-       /* is order prime ? */
-       if ((err = mp_prime_is_prime(order, 8, &primality)) != CRYPT_OK)                        { goto done; }
-       if (primality == 0) {
-          err = CRYPT_FAIL_TESTVECTOR;
-          goto done;
-       }
-
-       if ((err = mp_read_radix(G->x, (char *)ltc_ecc_sets[i].Gx, 64)) != CRYPT_OK)         { goto done; }
-       if ((err = mp_read_radix(G->y, (char *)ltc_ecc_sets[i].Gy, 64)) != CRYPT_OK)         { goto done; }
-       mp_set(G->z, 1);
-
-       /* then we should have G == (order + 1)G */
-       if ((err = mp_add_d(order, 1, order)) != CRYPT_OK)                              { goto done; }
-       if ((err = ltc_ecc_mulmod(order, G, GG, modulus, 1)) != CRYPT_OK)              { goto done; }
-       if (mp_cmp(G->x, GG->x) != LTC_MP_EQ || mp_cmp(G->y, GG->y) != LTC_MP_EQ) {
-          err = CRYPT_FAIL_TESTVECTOR;
-          goto done;
-       }
-   }
-   err = CRYPT_OK;
-   goto done;
-done:
-   ltc_ecc_del_point(GG);
-   ltc_ecc_del_point(G);
-   mp_clear_multi(order, modulus, NULL);
-   return err;
-}
-
-void ecc_sizes(int *low, int *high)
-{
- int i;
- LTC_ARGCHK(low  != NULL);
- LTC_ARGCHK(high != NULL);
-
- *low = INT_MAX;
- *high = 0;
- for (i = 0; ltc_ecc_sets[i].size != 0; i++) {
-     if (ltc_ecc_sets[i].size < *low)  {
-        *low  = ltc_ecc_sets[i].size;
-     }
-     if (ltc_ecc_sets[i].size > *high) {
-        *high = ltc_ecc_sets[i].size;
-     }
- }
-}
-
-/**
-  Make a new ECC key 
-  @param prng         An active PRNG state
-  @param wprng        The index of the PRNG you wish to use
-  @param keysize      The keysize for the new key (in octets from 20 to 65 bytes)
-  @param key          [out] Destination of the newly created key
-  @return CRYPT_OK if successful, upon error all allocated memory will be freed
-*/
-int ecc_make_key(prng_state *prng, int wprng, int keysize, ecc_key *key)
-{
-   int            x, err;
-   ecc_point     *base;
-   void          *prime;
-   unsigned char *buf;
-
-   LTC_ARGCHK(key != NULL);
-
-   /* good prng? */
-   if ((err = prng_is_valid(wprng)) != CRYPT_OK) {
-      return err;
-   }
-
-   /* find key size */
-   for (x = 0; (keysize > ltc_ecc_sets[x].size) && (ltc_ecc_sets[x].size != 0); x++);
-   keysize = ltc_ecc_sets[x].size;
-
-   if (keysize > ECC_MAXSIZE || ltc_ecc_sets[x].size == 0) {
-      return CRYPT_INVALID_KEYSIZE;
-   }
-   key->idx = x;
-
-   /* allocate ram */
-   base = NULL;
-   buf  = XMALLOC(ECC_MAXSIZE);
-   if (buf == NULL) {
-      return CRYPT_MEM;
-   }
-
-   /* make up random string */
-   if (prng_descriptor[wprng].read(buf, (unsigned long)keysize, prng) != (unsigned long)keysize) {
-      err = CRYPT_ERROR_READPRNG;
-      goto LBL_ERR2;
-   }
-
-   /* setup the key variables */
-   if ((err = mp_init_multi(&key->pubkey.x, &key->pubkey.y, &key->pubkey.z, &key->k, &prime, NULL)) != CRYPT_OK) {
-      goto done;
-   }
-   base = ltc_ecc_new_point();
-   if (base == NULL) {
-      mp_clear_multi(key->pubkey.x, key->pubkey.y, key->pubkey.z, key->k, prime, NULL);
-      err = CRYPT_MEM;
-      goto done;
-   }
-
-   /* read in the specs for this key */
-   if ((err = mp_read_radix(prime, (char *)ltc_ecc_sets[key->idx].prime, 64)) != CRYPT_OK)      { goto done; }
-   if ((err = mp_read_radix(base->x, (char *)ltc_ecc_sets[key->idx].Gx, 64)) != CRYPT_OK)       { goto done; }
-   if ((err = mp_read_radix(base->y, (char *)ltc_ecc_sets[key->idx].Gy, 64)) != CRYPT_OK)       { goto done; }
-   mp_set(base->z, 1);
-   if ((err = mp_read_unsigned_bin(key->k, (unsigned char *)buf, keysize)) != CRYPT_OK) { goto done; }
-
-   /* make the public key */
-   if ((err = ltc_ecc_mulmod(key->k, base, &key->pubkey, prime, 1)) != CRYPT_OK)          { goto done; }
-   key->type = PK_PRIVATE;
-
-   /* free up ram */
-   err = CRYPT_OK;
-done:
-   ltc_ecc_del_point(base);
-   mp_clear(prime);
-LBL_ERR2:
-#ifdef LTC_CLEAN_STACK
-   zeromem(buf, ECC_MAXSIZE);
-#endif
-
-   XFREE(buf);
-
-   return err;
-}
-
-/**
-  Free an ECC key from memory
-  @param key   The key you wish to free
-*/
-void ecc_free(ecc_key *key)
-{
-   LTC_ARGCHK(key != NULL);
-   mp_clear_multi(key->pubkey.x, key->pubkey.y, key->pubkey.z, key->k, NULL);
-}
-
-/**
-  Export an ECC key as a binary packet
-  @param out     [out] Destination for the key
-  @param outlen  [in/out] Max size and resulting size of the exported key
-  @param type    The type of key you want to export (PK_PRIVATE or PK_PUBLIC)
-  @param key     The key to export
-  @return CRYPT_OK if successful
-*/
-int ecc_export(unsigned char *out, unsigned long *outlen, int type, ecc_key *key)
-{
-   int           err;
-   unsigned char flags[1];
-   unsigned long key_size;
-
-   LTC_ARGCHK(out    != NULL);
-   LTC_ARGCHK(outlen != NULL);
-   LTC_ARGCHK(key    != NULL);
-   
-   /* type valid? */
-   if (key->type != PK_PRIVATE && type == PK_PRIVATE) {
-      return CRYPT_PK_TYPE_MISMATCH;
-   }
-
-   if (is_valid_idx(key->idx) == 0) {
-      return CRYPT_INVALID_ARG;
-   }
-
-   /* we store the NIST byte size */
-   key_size = ltc_ecc_sets[key->idx].size;
-
-   if (type == PK_PRIVATE) {
-       flags[0] = 1;
-       err = der_encode_sequence_multi(out, outlen,
-                                 LTC_ASN1_BIT_STRING,      1UL, flags,
-                                 LTC_ASN1_SHORT_INTEGER,   1UL, &key_size,
-                                 LTC_ASN1_INTEGER,         1UL, key->pubkey.x,
-                                 LTC_ASN1_INTEGER,         1UL, key->pubkey.y,
-                                 LTC_ASN1_INTEGER,         1UL, key->k,
-                                 LTC_ASN1_EOL,             0UL, NULL);
-   } else {
-       flags[0] = 0;
-       err = der_encode_sequence_multi(out, outlen,
-                                 LTC_ASN1_BIT_STRING,      1UL, flags,
-                                 LTC_ASN1_SHORT_INTEGER,   1UL, &key_size,
-                                 LTC_ASN1_INTEGER,         1UL, key->pubkey.x,
-                                 LTC_ASN1_INTEGER,         1UL, key->pubkey.y,
-                                 LTC_ASN1_EOL,             0UL, NULL);
-   }
-
-   return err;
-}
-
-/**
-  Import an ECC key from a binary packet
-  @param in      The packet to import
-  @param inlen   The length of the packet
-  @param key     [out] The destination of the import
-  @return CRYPT_OK if successful, upon error all allocated memory will be freed
-*/
-int ecc_import(const unsigned char *in, unsigned long inlen, ecc_key *key)
-{
-   unsigned long key_size;
-   unsigned char flags[1];
-   int           err;
-
-   LTC_ARGCHK(in  != NULL);
-   LTC_ARGCHK(key != NULL);
-
-   /* init key */
-   if (mp_init_multi(&key->pubkey.x, &key->pubkey.y, &key->pubkey.z, &key->k, NULL) != CRYPT_OK) {
-      return CRYPT_MEM;
-   }
-
-   /* find out what type of key it is */
-   if ((err = der_decode_sequence_multi(in, inlen, 
-                                  LTC_ASN1_BIT_STRING, 1UL, &flags,
-                                  LTC_ASN1_EOL,        0UL, NULL)) != CRYPT_OK) {
-      goto done;
-   }
-
-
-   if (flags[0] == 1) {
-      /* private key */
-      key->type = PK_PRIVATE;
-      if ((err = der_decode_sequence_multi(in, inlen,
-                                     LTC_ASN1_BIT_STRING,      1UL, flags,
-                                     LTC_ASN1_SHORT_INTEGER,   1UL, &key_size,
-                                     LTC_ASN1_INTEGER,         1UL, key->pubkey.x,
-                                     LTC_ASN1_INTEGER,         1UL, key->pubkey.y,
-                                     LTC_ASN1_INTEGER,         1UL, key->k,
-                                     LTC_ASN1_EOL,             0UL, NULL)) != CRYPT_OK) {
-         goto done;
-      }
-   } else {
-      /* public key */
-      /* private key */
-      key->type = PK_PUBLIC;
-      if ((err = der_decode_sequence_multi(in, inlen,
-                                     LTC_ASN1_BIT_STRING,      1UL, flags,
-                                     LTC_ASN1_SHORT_INTEGER,   1UL, &key_size,
-                                     LTC_ASN1_INTEGER,         1UL, key->pubkey.x,
-                                     LTC_ASN1_INTEGER,         1UL, key->pubkey.y,
-                                     LTC_ASN1_EOL,             0UL, NULL)) != CRYPT_OK) {
-         goto done;
-      }
-   }
-
-   /* find the idx */
-   for (key->idx = 0; ltc_ecc_sets[key->idx].size && (unsigned long)ltc_ecc_sets[key->idx].size != key_size; ++key->idx);
-   if (ltc_ecc_sets[key->idx].size == 0) {
-      err = CRYPT_INVALID_PACKET;
-      goto done;
-   }
-
-   /* set z */
-   mp_set(key->pubkey.z, 1);
-
-   /* we're good */
-   return CRYPT_OK;
-done:
-   mp_clear_multi(key->pubkey.x, key->pubkey.y, key->pubkey.z, key->k, NULL);
-   return err;
-}
-
-/**
-  Create an ECC shared secret between two keys
-  @param private_key      The private ECC key
-  @param public_key       The public key
-  @param out              [out] Destination of the shared secret (Conforms to EC-DH from ANSI X9.63)
-  @param outlen           [in/out] The max size and resulting size of the shared secret
-  @return CRYPT_OK if successful
-*/
-int ecc_shared_secret(ecc_key *private_key, ecc_key *public_key,
-                      unsigned char *out, unsigned long *outlen)
-{
-   unsigned long x;
-   ecc_point *result;
-   void *prime;
-   int err;
-
-   LTC_ARGCHK(private_key != NULL);
-   LTC_ARGCHK(public_key  != NULL);
-   LTC_ARGCHK(out         != NULL);
-   LTC_ARGCHK(outlen      != NULL);
-
-   /* type valid? */
-   if (private_key->type != PK_PRIVATE) {
-      return CRYPT_PK_NOT_PRIVATE;
-   }
-
-   if (is_valid_idx(private_key->idx) == 0) {
-      return CRYPT_INVALID_ARG;
-   }
-
-   if (private_key->idx != public_key->idx) {
-      return CRYPT_PK_TYPE_MISMATCH;
-   }
-
-   /* make new point */
-   result = ltc_ecc_new_point();
-   if (result == NULL) {
-      return CRYPT_MEM;
-   }
-
-   if ((err = mp_init(&prime)) != CRYPT_OK) {
-      ltc_ecc_del_point(result);
-      return err;
-   }
-
-   if ((err = mp_read_radix(prime, (char *)ltc_ecc_sets[private_key->idx].prime, 64)) != CRYPT_OK)                { goto done; }
-   if ((err = ltc_ecc_mulmod(private_key->k, &public_key->pubkey, result, prime, 1)) != CRYPT_OK)                 { goto done; }
-
-   x = (unsigned long)mp_unsigned_bin_size(prime);
-   if (*outlen < x) {
-      err = CRYPT_BUFFER_OVERFLOW;
-      goto done;
-   }
-   zeromem(out, x);
-   if ((err = mp_to_unsigned_bin(result->x, out + (x - mp_unsigned_bin_size(result->x))))   != CRYPT_OK)          { goto done; }
-
-   err     = CRYPT_OK;
-   *outlen = x;
-done:
-   mp_clear(prime);
-   ltc_ecc_del_point(result);
-   return err;
-}
-
-/**
-  Get the size of an ECC key
-  @param key    The key to get the size of 
-  @return The size (octets) of the key or INT_MAX on error
-*/
-int ecc_get_size(ecc_key *key)
-{
-   LTC_ARGCHK(key != NULL);
-   if (is_valid_idx(key->idx))
-      return ltc_ecc_sets[key->idx].size;
-   else
-      return INT_MAX; /* large value known to cause it to fail when passed to ecc_make_key() */
-}
-
-#include "ecc_sys.c"
-
 #endif
 
 
@@ -1213,3 +149,4 @@ int ecc_get_size(ecc_key *key)
 /* $Source$ */
 /* $Revision$ */
 /* $Date$ */
+
diff --git a/src/pk/ecc/ecc_decrypt_key.c b/src/pk/ecc/ecc_decrypt_key.c
new file mode 100644
index 0000000..a479c51
--- /dev/null
+++ b/src/pk/ecc/ecc_decrypt_key.c
@@ -0,0 +1,149 @@
+/* LibTomCrypt, modular cryptographic library -- Tom St Denis
+ *
+ * LibTomCrypt is a library that provides various cryptographic
+ * algorithms in a highly modular and flexible manner.
+ *
+ * The library is free for all purposes without any express
+ * guarantee it works.
+ *
+ * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
+ */
+
+/* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b
+ *
+ * All curves taken from NIST recommendation paper of July 1999
+ * Available at http://csrc.nist.gov/cryptval/dss.htm
+ */
+#include "tomcrypt.h"
+
+/**
+  @file ecc_decrypt_key.c
+  ECC Crypto, Tom St Denis
+*/  
+
+#ifdef MECC
+
+/**
+  Decrypt an ECC encrypted key
+  @param in       The ciphertext
+  @param inlen    The length of the ciphertext (octets)
+  @param out      [out] The plaintext
+  @param outlen   [in/out] The max size and resulting size of the plaintext
+  @param key      The corresponding private ECC key
+  @return CRYPT_OK if successful
+*/
+int ecc_decrypt_key(const unsigned char *in,  unsigned long  inlen,
+                          unsigned char *out, unsigned long *outlen, 
+                          ecc_key *key)
+{
+   unsigned char *ecc_shared, *skey, *pub_expt;
+   unsigned long  x, y, hashOID[32];
+   int            hash, err;
+   ecc_key        pubkey;
+   ltc_asn1_list  decode[3];
+
+   LTC_ARGCHK(in     != NULL);
+   LTC_ARGCHK(out    != NULL);
+   LTC_ARGCHK(outlen != NULL);
+   LTC_ARGCHK(key    != NULL);
+
+   /* right key type? */
+   if (key->type != PK_PRIVATE) {
+      return CRYPT_PK_NOT_PRIVATE;
+   }
+   
+   /* decode to find out hash */
+   LTC_SET_ASN1(decode, 0, LTC_ASN1_OBJECT_IDENTIFIER, hashOID, sizeof(hashOID)/sizeof(hashOID[0]));
+ 
+   if ((err = der_decode_sequence(in, inlen, decode, 1)) != CRYPT_OK) {
+      return err;
+   }
+
+   hash = find_hash_oid(hashOID, decode[0].size);                   
+   if (hash_is_valid(hash) != CRYPT_OK) {
+      return CRYPT_INVALID_PACKET;
+   }
+
+   /* we now have the hash! */
+
+   /* allocate memory */
+   pub_expt   = XMALLOC(ECC_BUF_SIZE);
+   ecc_shared = XMALLOC(ECC_BUF_SIZE);
+   skey       = XMALLOC(MAXBLOCKSIZE);
+   if (pub_expt == NULL || ecc_shared == NULL || skey == NULL) {
+      if (pub_expt != NULL) {
+         XFREE(pub_expt);
+      }
+      if (ecc_shared != NULL) {
+         XFREE(ecc_shared);
+      }
+      if (skey != NULL) {
+         XFREE(skey);
+      }
+      return CRYPT_MEM;
+   }
+   LTC_SET_ASN1(decode, 1, LTC_ASN1_OCTET_STRING,      pub_expt,  ECC_BUF_SIZE);
+   LTC_SET_ASN1(decode, 2, LTC_ASN1_OCTET_STRING,      skey,      MAXBLOCKSIZE);
+
+   /* read the structure in now */
+   if ((err = der_decode_sequence(in, inlen, decode, 3)) != CRYPT_OK) {
+      goto LBL_ERR;
+   }
+
+   /* import ECC key from packet */
+   if ((err = ecc_import(decode[1].data, decode[1].size, &pubkey)) != CRYPT_OK) {
+      goto LBL_ERR;
+   }
+
+   /* make shared key */
+   x = ECC_BUF_SIZE;
+   if ((err = ecc_shared_secret(key, &pubkey, ecc_shared, &x)) != CRYPT_OK) {
+      ecc_free(&pubkey);
+      goto LBL_ERR;
+   }
+   ecc_free(&pubkey);
+
+   y = MIN(ECC_BUF_SIZE, MAXBLOCKSIZE);
+   if ((err = hash_memory(hash, ecc_shared, x, ecc_shared, &y)) != CRYPT_OK) {
+      goto LBL_ERR;
+   }
+
+   /* ensure the hash of the shared secret is at least as big as the encrypt itself */
+   if (decode[2].size > y) {
+      err = CRYPT_INVALID_PACKET;
+      goto LBL_ERR;
+   }
+
+   /* avoid buffer overflow */
+   if (*outlen < decode[2].size) {
+      err = CRYPT_BUFFER_OVERFLOW;
+      goto LBL_ERR;
+   }
+
+   /* Decrypt the key */
+   for (x = 0; x < decode[2].size; x++) {
+     out[x] = skey[x] ^ ecc_shared[x];
+   }
+   *outlen = x;
+
+   err = CRYPT_OK;
+LBL_ERR:
+#ifdef LTC_CLEAN_STACK
+   zeromem(pub_expt,   ECC_BUF_SIZE);
+   zeromem(ecc_shared, ECC_BUF_SIZE);
+   zeromem(skey,       MAXBLOCKSIZE);
+#endif
+
+   XFREE(pub_expt);
+   XFREE(ecc_shared);
+   XFREE(skey);
+
+   return err;
+}
+
+#endif
+
+/* $Source$ */
+/* $Revision$ */
+/* $Date$ */
+
diff --git a/src/pk/ecc/ecc_encrypt_key.c b/src/pk/ecc/ecc_encrypt_key.c
new file mode 100644
index 0000000..f2ae375
--- /dev/null
+++ b/src/pk/ecc/ecc_encrypt_key.c
@@ -0,0 +1,136 @@
+/* LibTomCrypt, modular cryptographic library -- Tom St Denis
+ *
+ * LibTomCrypt is a library that provides various cryptographic
+ * algorithms in a highly modular and flexible manner.
+ *
+ * The library is free for all purposes without any express
+ * guarantee it works.
+ *
+ * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
+ */
+
+/* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b
+ *
+ * All curves taken from NIST recommendation paper of July 1999
+ * Available at http://csrc.nist.gov/cryptval/dss.htm
+ */
+#include "tomcrypt.h"
+
+/**
+  @file ecc_encrypt_key.c
+  ECC Crypto, Tom St Denis
+*/  
+
+#ifdef MECC
+
+/**
+  Encrypt a symmetric key with ECC 
+  @param in         The symmetric key you want to encrypt
+  @param inlen      The length of the key to encrypt (octets)
+  @param out        [out] The destination for the ciphertext
+  @param outlen     [in/out] The max size and resulting size of the ciphertext
+  @param prng       An active PRNG state
+  @param wprng      The index of the PRNG you wish to use 
+  @param hash       The index of the hash you want to use 
+  @param key        The ECC key you want to encrypt to
+  @return CRYPT_OK if successful
+*/
+int ecc_encrypt_key(const unsigned char *in,   unsigned long inlen,
+                          unsigned char *out,  unsigned long *outlen, 
+                          prng_state *prng, int wprng, int hash, 
+                          ecc_key *key)
+{
+    unsigned char *pub_expt, *ecc_shared, *skey;
+    ecc_key        pubkey;
+    unsigned long  x, y, pubkeysize;
+    int            err;
+
+    LTC_ARGCHK(in      != NULL);
+    LTC_ARGCHK(out     != NULL);
+    LTC_ARGCHK(outlen  != NULL);
+    LTC_ARGCHK(key     != NULL);
+
+    /* check that wprng/cipher/hash are not invalid */
+    if ((err = prng_is_valid(wprng)) != CRYPT_OK) {
+       return err;
+    }
+
+    if ((err = hash_is_valid(hash)) != CRYPT_OK) {
+       return err;
+    }
+
+    if (inlen > hash_descriptor[hash].hashsize) {
+       return CRYPT_INVALID_HASH;
+    }
+
+    /* make a random key and export the public copy */
+    if ((err = ecc_make_key(prng, wprng, ecc_get_size(key), &pubkey)) != CRYPT_OK) {
+       return err;
+    }
+
+    pub_expt   = XMALLOC(ECC_BUF_SIZE);
+    ecc_shared = XMALLOC(ECC_BUF_SIZE);
+    skey       = XMALLOC(MAXBLOCKSIZE);
+    if (pub_expt == NULL || ecc_shared == NULL || skey == NULL) {
+       if (pub_expt != NULL) {
+          XFREE(pub_expt);
+       }
+       if (ecc_shared != NULL) {
+          XFREE(ecc_shared);
+       }
+       if (skey != NULL) {
+          XFREE(skey);
+       }
+       ecc_free(&pubkey);
+       return CRYPT_MEM;
+    }
+
+    pubkeysize = ECC_BUF_SIZE;
+    if ((err = ecc_export(pub_expt, &pubkeysize, PK_PUBLIC, &pubkey)) != CRYPT_OK) {
+       ecc_free(&pubkey);
+       goto LBL_ERR;
+    }
+    
+    /* make random key */
+    x        = ECC_BUF_SIZE;
+    if ((err = ecc_shared_secret(&pubkey, key, ecc_shared, &x)) != CRYPT_OK) {
+       ecc_free(&pubkey);
+       goto LBL_ERR;
+    }
+    ecc_free(&pubkey);
+    y = MAXBLOCKSIZE;
+    if ((err = hash_memory(hash, ecc_shared, x, skey, &y)) != CRYPT_OK) {
+       goto LBL_ERR;
+    }
+    
+    /* Encrypt key */
+    for (x = 0; x < inlen; x++) {
+      skey[x] ^= in[x];
+    }
+
+    err = der_encode_sequence_multi(out, outlen,
+                                    LTC_ASN1_OBJECT_IDENTIFIER,  hash_descriptor[hash].OIDlen,   hash_descriptor[hash].OID,
+                                    LTC_ASN1_OCTET_STRING,       pubkeysize,                     pub_expt,
+                                    LTC_ASN1_OCTET_STRING,       inlen,                          skey,
+                                    LTC_ASN1_EOL,                0UL,                            NULL);
+
+LBL_ERR:
+#ifdef LTC_CLEAN_STACK
+    /* clean up */
+    zeromem(pub_expt,   ECC_BUF_SIZE);
+    zeromem(ecc_shared, ECC_BUF_SIZE);
+    zeromem(skey,       MAXBLOCKSIZE);
+#endif
+
+    XFREE(skey);
+    XFREE(ecc_shared);
+    XFREE(pub_expt);
+
+    return err;
+}
+
+#endif
+/* $Source$ */
+/* $Revision$ */
+/* $Date$ */
+
diff --git a/src/pk/ecc/ecc_export.c b/src/pk/ecc/ecc_export.c
new file mode 100644
index 0000000..b8c38a2
--- /dev/null
+++ b/src/pk/ecc/ecc_export.c
@@ -0,0 +1,82 @@
+/* LibTomCrypt, modular cryptographic library -- Tom St Denis
+ *
+ * LibTomCrypt is a library that provides various cryptographic
+ * algorithms in a highly modular and flexible manner.
+ *
+ * The library is free for all purposes without any express
+ * guarantee it works.
+ *
+ * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
+ */
+
+/* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b
+ *
+ * All curves taken from NIST recommendation paper of July 1999
+ * Available at http://csrc.nist.gov/cryptval/dss.htm
+ */
+#include "tomcrypt.h"
+
+/**
+  @file ecc_export.c
+  ECC Crypto, Tom St Denis
+*/  
+
+#ifdef MECC
+
+/**
+  Export an ECC key as a binary packet
+  @param out     [out] Destination for the key
+  @param outlen  [in/out] Max size and resulting size of the exported key
+  @param type    The type of key you want to export (PK_PRIVATE or PK_PUBLIC)
+  @param key     The key to export
+  @return CRYPT_OK if successful
+*/
+int ecc_export(unsigned char *out, unsigned long *outlen, int type, ecc_key *key)
+{
+   int           err;
+   unsigned char flags[1];
+   unsigned long key_size;
+
+   LTC_ARGCHK(out    != NULL);
+   LTC_ARGCHK(outlen != NULL);
+   LTC_ARGCHK(key    != NULL);
+   
+   /* type valid? */
+   if (key->type != PK_PRIVATE && type == PK_PRIVATE) {
+      return CRYPT_PK_TYPE_MISMATCH;
+   }
+
+   if (ltc_ecc_is_valid_idx(key->idx) == 0) {
+      return CRYPT_INVALID_ARG;
+   }
+
+   /* we store the NIST byte size */
+   key_size = ltc_ecc_sets[key->idx].size;
+
+   if (type == PK_PRIVATE) {
+       flags[0] = 1;
+       err = der_encode_sequence_multi(out, outlen,
+                                 LTC_ASN1_BIT_STRING,      1UL, flags,
+                                 LTC_ASN1_SHORT_INTEGER,   1UL, &key_size,
+                                 LTC_ASN1_INTEGER,         1UL, key->pubkey.x,
+                                 LTC_ASN1_INTEGER,         1UL, key->pubkey.y,
+                                 LTC_ASN1_INTEGER,         1UL, key->k,
+                                 LTC_ASN1_EOL,             0UL, NULL);
+   } else {
+       flags[0] = 0;
+       err = der_encode_sequence_multi(out, outlen,
+                                 LTC_ASN1_BIT_STRING,      1UL, flags,
+                                 LTC_ASN1_SHORT_INTEGER,   1UL, &key_size,
+                                 LTC_ASN1_INTEGER,         1UL, key->pubkey.x,
+                                 LTC_ASN1_INTEGER,         1UL, key->pubkey.y,
+                                 LTC_ASN1_EOL,             0UL, NULL);
+   }
+
+   return err;
+}
+
+#endif
+/* $Source$ */
+/* $Revision$ */
+/* $Date$ */
+
diff --git a/src/pk/ecc/ecc_free.c b/src/pk/ecc/ecc_free.c
new file mode 100644
index 0000000..ffb89d0
--- /dev/null
+++ b/src/pk/ecc/ecc_free.c
@@ -0,0 +1,40 @@
+/* LibTomCrypt, modular cryptographic library -- Tom St Denis
+ *
+ * LibTomCrypt is a library that provides various cryptographic
+ * algorithms in a highly modular and flexible manner.
+ *
+ * The library is free for all purposes without any express
+ * guarantee it works.
+ *
+ * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
+ */
+
+/* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b
+ *
+ * All curves taken from NIST recommendation paper of July 1999
+ * Available at http://csrc.nist.gov/cryptval/dss.htm
+ */
+#include "tomcrypt.h"
+
+/**
+  @file ecc_free.c
+  ECC Crypto, Tom St Denis
+*/  
+
+#ifdef MECC
+
+/**
+  Free an ECC key from memory
+  @param key   The key you wish to free
+*/
+void ecc_free(ecc_key *key)
+{
+   LTC_ARGCHK(key != NULL);
+   mp_clear_multi(key->pubkey.x, key->pubkey.y, key->pubkey.z, key->k, NULL);
+}
+
+#endif
+/* $Source$ */
+/* $Revision$ */
+/* $Date$ */
+
diff --git a/src/pk/ecc/ecc_get_size.c b/src/pk/ecc/ecc_get_size.c
new file mode 100644
index 0000000..d0e93ce
--- /dev/null
+++ b/src/pk/ecc/ecc_get_size.c
@@ -0,0 +1,44 @@
+/* LibTomCrypt, modular cryptographic library -- Tom St Denis
+ *
+ * LibTomCrypt is a library that provides various cryptographic
+ * algorithms in a highly modular and flexible manner.
+ *
+ * The library is free for all purposes without any express
+ * guarantee it works.
+ *
+ * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
+ */
+
+/* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b
+ *
+ * All curves taken from NIST recommendation paper of July 1999
+ * Available at http://csrc.nist.gov/cryptval/dss.htm
+ */
+#include "tomcrypt.h"
+
+/**
+  @file ecc_get_size.c
+  ECC Crypto, Tom St Denis
+*/  
+
+#ifdef MECC
+
+/**
+  Get the size of an ECC key
+  @param key    The key to get the size of 
+  @return The size (octets) of the key or INT_MAX on error
+*/
+int ecc_get_size(ecc_key *key)
+{
+   LTC_ARGCHK(key != NULL);
+   if (ltc_ecc_is_valid_idx(key->idx))
+      return ltc_ecc_sets[key->idx].size;
+   else
+      return INT_MAX; /* large value known to cause it to fail when passed to ecc_make_key() */
+}
+
+#endif
+/* $Source$ */
+/* $Revision$ */
+/* $Date$ */
+
diff --git a/src/pk/ecc/ecc_import.c b/src/pk/ecc/ecc_import.c
new file mode 100644
index 0000000..7c854a1
--- /dev/null
+++ b/src/pk/ecc/ecc_import.c
@@ -0,0 +1,155 @@
+/* LibTomCrypt, modular cryptographic library -- Tom St Denis
+ *
+ * LibTomCrypt is a library that provides various cryptographic
+ * algorithms in a highly modular and flexible manner.
+ *
+ * The library is free for all purposes without any express
+ * guarantee it works.
+ *
+ * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
+ */
+
+/* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b
+ *
+ * All curves taken from NIST recommendation paper of July 1999
+ * Available at http://csrc.nist.gov/cryptval/dss.htm
+ */
+#include "tomcrypt.h"
+
+/**
+  @file ecc_import.c
+  ECC Crypto, Tom St Denis
+*/  
+
+#ifdef MECC
+
+static int is_point(ecc_key *key)
+{
+   void *prime, *b, *t1, *t2;
+   int err;
+   
+   if ((err = mp_init_multi(&prime, &b, &t1, &t2, NULL)) != CRYPT_OK) {
+      return err;
+   }
+   
+   /* load prime and b */
+   if ((err = mp_read_radix(prime, ltc_ecc_sets[key->idx].prime, 64)) != CRYPT_OK)            { goto error; }
+   if ((err = mp_read_radix(b, ltc_ecc_sets[key->idx].B, 64)) != CRYPT_OK)                    { goto error; }
+   
+   /* compute y^2 */
+   if ((err = mp_sqr(key->pubkey.y, t1)) != CRYPT_OK)                                         { goto error; }
+   
+   /* compute x^3 */
+   if ((err = mp_sqr(key->pubkey.x, t2)) != CRYPT_OK)                                         { goto error; }
+   if ((err = mp_mod(t2, prime, t2)) != CRYPT_OK)                                             { goto error; }
+   if ((err = mp_mul(key->pubkey.x, t2, t2)) != CRYPT_OK)                                     { goto error; }
+   
+   /* compute y^2 - x^3 */
+   if ((err = mp_sub(t1, t2, t1)) != CRYPT_OK)                                                { goto error; }
+   
+   /* compute y^2 - x^3 + 3x */
+   if ((err = mp_add(t1, key->pubkey.x, t1)) != CRYPT_OK)                                     { goto error; }
+   if ((err = mp_add(t1, key->pubkey.x, t1)) != CRYPT_OK)                                     { goto error; }
+   if ((err = mp_add(t1, key->pubkey.x, t1)) != CRYPT_OK)                                     { goto error; }
+   if ((err = mp_mod(t1, prime, t1)) != CRYPT_OK)                                             { goto error; }
+   while (mp_cmp_d(t1, 0) == LTC_MP_LT) {
+      if ((err = mp_add(t1, prime, t1)) != CRYPT_OK)                                          { goto error; }
+   }
+   while (mp_cmp(t1, prime) != LTC_MP_LT) {
+      if ((err = mp_sub(t1, prime, t1)) != CRYPT_OK)                                          { goto error; }
+   }
+   
+   /* compare to b */
+   if (mp_cmp(t1, b) != LTC_MP_EQ) {
+      err = CRYPT_INVALID_PACKET;
+   } else {
+      err = CRYPT_OK;
+   }
+   
+error:
+   mp_clear_multi(prime, b, t1, t2, NULL);
+   return err;
+}
+
+/**
+  Import an ECC key from a binary packet
+  @param in      The packet to import
+  @param inlen   The length of the packet
+  @param key     [out] The destination of the import
+  @return CRYPT_OK if successful, upon error all allocated memory will be freed
+*/
+int ecc_import(const unsigned char *in, unsigned long inlen, ecc_key *key)
+{
+   unsigned long key_size;
+   unsigned char flags[1];
+   int           err;
+
+   LTC_ARGCHK(in  != NULL);
+   LTC_ARGCHK(key != NULL);
+   LTC_ARGCHK(ltc_mp.name != NULL);
+
+   /* init key */
+   if (mp_init_multi(&key->pubkey.x, &key->pubkey.y, &key->pubkey.z, &key->k, NULL) != CRYPT_OK) {
+      return CRYPT_MEM;
+   }
+
+   /* find out what type of key it is */
+   if ((err = der_decode_sequence_multi(in, inlen, 
+                                  LTC_ASN1_BIT_STRING, 1UL, &flags,
+                                  LTC_ASN1_EOL,        0UL, NULL)) != CRYPT_OK) {
+      goto done;
+   }
+
+
+   if (flags[0] == 1) {
+      /* private key */
+      key->type = PK_PRIVATE;
+      if ((err = der_decode_sequence_multi(in, inlen,
+                                     LTC_ASN1_BIT_STRING,      1UL, flags,
+                                     LTC_ASN1_SHORT_INTEGER,   1UL, &key_size,
+                                     LTC_ASN1_INTEGER,         1UL, key->pubkey.x,
+                                     LTC_ASN1_INTEGER,         1UL, key->pubkey.y,
+                                     LTC_ASN1_INTEGER,         1UL, key->k,
+                                     LTC_ASN1_EOL,             0UL, NULL)) != CRYPT_OK) {
+         goto done;
+      }
+   } else {
+      /* public key */
+      key->type = PK_PUBLIC;
+      if ((err = der_decode_sequence_multi(in, inlen,
+                                     LTC_ASN1_BIT_STRING,      1UL, flags,
+                                     LTC_ASN1_SHORT_INTEGER,   1UL, &key_size,
+                                     LTC_ASN1_INTEGER,         1UL, key->pubkey.x,
+                                     LTC_ASN1_INTEGER,         1UL, key->pubkey.y,
+                                     LTC_ASN1_EOL,             0UL, NULL)) != CRYPT_OK) {
+         goto done;
+      }
+   }
+
+   /* find the idx */
+   for (key->idx = 0; ltc_ecc_sets[key->idx].size && (unsigned long)ltc_ecc_sets[key->idx].size != key_size; ++key->idx);
+   if (ltc_ecc_sets[key->idx].size == 0) {
+      err = CRYPT_INVALID_PACKET;
+      goto done;
+   }
+
+   /* set z */
+   mp_set(key->pubkey.z, 1);
+   
+   /* is it a point on the curve?  */
+   if ((err = is_point(key)) != CRYPT_OK) {
+      goto done;
+   }
+
+   /* we're good */
+   return CRYPT_OK;
+done:
+   mp_clear_multi(key->pubkey.x, key->pubkey.y, key->pubkey.z, key->k, NULL);
+   return err;
+}
+
+#endif
+/* $Source$ */
+/* $Revision$ */
+/* $Date$ */
+
diff --git a/src/pk/ecc/ecc_make_key.c b/src/pk/ecc/ecc_make_key.c
new file mode 100644
index 0000000..b182484
--- /dev/null
+++ b/src/pk/ecc/ecc_make_key.c
@@ -0,0 +1,112 @@
+/* LibTomCrypt, modular cryptographic library -- Tom St Denis
+ *
+ * LibTomCrypt is a library that provides various cryptographic
+ * algorithms in a highly modular and flexible manner.
+ *
+ * The library is free for all purposes without any express
+ * guarantee it works.
+ *
+ * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
+ */
+
+/* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b
+ *
+ * All curves taken from NIST recommendation paper of July 1999
+ * Available at http://csrc.nist.gov/cryptval/dss.htm
+ */
+#include "tomcrypt.h"
+
+/**
+  @file ecc_make_key.c
+  ECC Crypto, Tom St Denis
+*/  
+
+#ifdef MECC
+
+/**
+  Make a new ECC key 
+  @param prng         An active PRNG state
+  @param wprng        The index of the PRNG you wish to use
+  @param keysize      The keysize for the new key (in octets from 20 to 65 bytes)
+  @param key          [out] Destination of the newly created key
+  @return CRYPT_OK if successful, upon error all allocated memory will be freed
+*/
+int ecc_make_key(prng_state *prng, int wprng, int keysize, ecc_key *key)
+{
+   int            x, err;
+   ecc_point     *base;
+   void          *prime;
+   unsigned char *buf;
+
+   LTC_ARGCHK(key != NULL);
+   LTC_ARGCHK(ltc_mp.name != NULL);
+
+   /* good prng? */
+   if ((err = prng_is_valid(wprng)) != CRYPT_OK) {
+      return err;
+   }
+
+   /* find key size */
+   for (x = 0; (keysize > ltc_ecc_sets[x].size) && (ltc_ecc_sets[x].size != 0); x++);
+   keysize = ltc_ecc_sets[x].size;
+
+   if (keysize > ECC_MAXSIZE || ltc_ecc_sets[x].size == 0) {
+      return CRYPT_INVALID_KEYSIZE;
+   }
+   key->idx = x;
+
+   /* allocate ram */
+   base = NULL;
+   buf  = XMALLOC(ECC_MAXSIZE);
+   if (buf == NULL) {
+      return CRYPT_MEM;
+   }
+
+   /* make up random string */
+   if (prng_descriptor[wprng].read(buf, (unsigned long)keysize, prng) != (unsigned long)keysize) {
+      err = CRYPT_ERROR_READPRNG;
+      goto LBL_ERR2;
+   }
+
+   /* setup the key variables */
+   if ((err = mp_init_multi(&key->pubkey.x, &key->pubkey.y, &key->pubkey.z, &key->k, &prime, NULL)) != CRYPT_OK) {
+      goto done;
+   }
+   base = ltc_ecc_new_point();
+   if (base == NULL) {
+      mp_clear_multi(key->pubkey.x, key->pubkey.y, key->pubkey.z, key->k, prime, NULL);
+      err = CRYPT_MEM;
+      goto done;
+   }
+
+   /* read in the specs for this key */
+   if ((err = mp_read_radix(prime, (char *)ltc_ecc_sets[key->idx].prime, 64)) != CRYPT_OK)      { goto done; }
+   if ((err = mp_read_radix(base->x, (char *)ltc_ecc_sets[key->idx].Gx, 64)) != CRYPT_OK)       { goto done; }
+   if ((err = mp_read_radix(base->y, (char *)ltc_ecc_sets[key->idx].Gy, 64)) != CRYPT_OK)       { goto done; }
+   mp_set(base->z, 1);
+   if ((err = mp_read_unsigned_bin(key->k, (unsigned char *)buf, keysize)) != CRYPT_OK)         { goto done; }
+
+   /* make the public key */
+   if ((err = ltc_mp.ecc_ptmul(key->k, base, &key->pubkey, prime, 1)) != CRYPT_OK)              { goto done; }
+   key->type = PK_PRIVATE;
+
+   /* free up ram */
+   err = CRYPT_OK;
+done:
+   ltc_ecc_del_point(base);
+   mp_clear(prime);
+LBL_ERR2:
+#ifdef LTC_CLEAN_STACK
+   zeromem(buf, ECC_MAXSIZE);
+#endif
+
+   XFREE(buf);
+
+   return err;
+}
+
+#endif
+/* $Source$ */
+/* $Revision$ */
+/* $Date$ */
+
diff --git a/src/pk/ecc/ecc_shared_secret.c b/src/pk/ecc/ecc_shared_secret.c
new file mode 100644
index 0000000..13f925d
--- /dev/null
+++ b/src/pk/ecc/ecc_shared_secret.c
@@ -0,0 +1,94 @@
+/* LibTomCrypt, modular cryptographic library -- Tom St Denis
+ *
+ * LibTomCrypt is a library that provides various cryptographic
+ * algorithms in a highly modular and flexible manner.
+ *
+ * The library is free for all purposes without any express
+ * guarantee it works.
+ *
+ * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
+ */
+
+/* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b
+ *
+ * All curves taken from NIST recommendation paper of July 1999
+ * Available at http://csrc.nist.gov/cryptval/dss.htm
+ */
+#include "tomcrypt.h"
+
+/**
+  @file ecc_shared_secret.c
+  ECC Crypto, Tom St Denis
+*/  
+
+#ifdef MECC
+
+/**
+  Create an ECC shared secret between two keys
+  @param private_key      The private ECC key
+  @param public_key       The public key
+  @param out              [out] Destination of the shared secret (Conforms to EC-DH from ANSI X9.63)
+  @param outlen           [in/out] The max size and resulting size of the shared secret
+  @return CRYPT_OK if successful
+*/
+int ecc_shared_secret(ecc_key *private_key, ecc_key *public_key,
+                      unsigned char *out, unsigned long *outlen)
+{
+   unsigned long x;
+   ecc_point *result;
+   void *prime;
+   int err;
+
+   LTC_ARGCHK(private_key != NULL);
+   LTC_ARGCHK(public_key  != NULL);
+   LTC_ARGCHK(out         != NULL);
+   LTC_ARGCHK(outlen      != NULL);
+
+   /* type valid? */
+   if (private_key->type != PK_PRIVATE) {
+      return CRYPT_PK_NOT_PRIVATE;
+   }
+
+   if (ltc_ecc_is_valid_idx(private_key->idx) == 0) {
+      return CRYPT_INVALID_ARG;
+   }
+
+   if (private_key->idx != public_key->idx) {
+      return CRYPT_PK_TYPE_MISMATCH;
+   }
+
+   /* make new point */
+   result = ltc_ecc_new_point();
+   if (result == NULL) {
+      return CRYPT_MEM;
+   }
+
+   if ((err = mp_init(&prime)) != CRYPT_OK) {
+      ltc_ecc_del_point(result);
+      return err;
+   }
+
+   if ((err = mp_read_radix(prime, (char *)ltc_ecc_sets[private_key->idx].prime, 64)) != CRYPT_OK)                 { goto done; }
+   if ((err = ltc_mp.ecc_ptmul(private_key->k, &public_key->pubkey, result, prime, 1)) != CRYPT_OK)                { goto done; }
+
+   x = (unsigned long)mp_unsigned_bin_size(prime);
+   if (*outlen < x) {
+      err = CRYPT_BUFFER_OVERFLOW;
+      goto done;
+   }
+   zeromem(out, x);
+   if ((err = mp_to_unsigned_bin(result->x, out + (x - mp_unsigned_bin_size(result->x))))   != CRYPT_OK)           { goto done; }
+
+   err     = CRYPT_OK;
+   *outlen = x;
+done:
+   mp_clear(prime);
+   ltc_ecc_del_point(result);
+   return err;
+}
+
+#endif
+/* $Source$ */
+/* $Revision$ */
+/* $Date$ */
+
diff --git a/src/pk/ecc/ecc_sign_hash.c b/src/pk/ecc/ecc_sign_hash.c
new file mode 100644
index 0000000..c63eeb3
--- /dev/null
+++ b/src/pk/ecc/ecc_sign_hash.c
@@ -0,0 +1,118 @@
+/* LibTomCrypt, modular cryptographic library -- Tom St Denis
+ *
+ * LibTomCrypt is a library that provides various cryptographic
+ * algorithms in a highly modular and flexible manner.
+ *
+ * The library is free for all purposes without any express
+ * guarantee it works.
+ *
+ * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
+ */
+
+/* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b
+ *
+ * All curves taken from NIST recommendation paper of July 1999
+ * Available at http://csrc.nist.gov/cryptval/dss.htm
+ */
+#include "tomcrypt.h"
+
+/**
+  @file ecc_sign_hash.c
+  ECC Crypto, Tom St Denis
+*/  
+
+#ifdef MECC
+
+/**
+  Sign a message digest
+  @param in        The message digest to sign
+  @param inlen     The length of the digest
+  @param out       [out] The destination for the signature
+  @param outlen    [in/out] The max size and resulting size of the signature
+  @param prng      An active PRNG state
+  @param wprng     The index of the PRNG you wish to use
+  @param key       A private ECC key
+  @return CRYPT_OK if successful
+*/
+int ecc_sign_hash(const unsigned char *in,  unsigned long inlen, 
+                        unsigned char *out, unsigned long *outlen, 
+                        prng_state *prng, int wprng, ecc_key *key)
+{
+   ecc_key       pubkey;
+   void          *r, *s, *e, *p;
+   int           err;
+
+   LTC_ARGCHK(in     != NULL);
+   LTC_ARGCHK(out    != NULL);
+   LTC_ARGCHK(outlen != NULL);
+   LTC_ARGCHK(key    != NULL);
+
+   /* is this a private key? */
+   if (key->type != PK_PRIVATE) {
+      return CRYPT_PK_NOT_PRIVATE;
+   }
+   
+   /* is the IDX valid ?  */
+   if (ltc_ecc_is_valid_idx(key->idx) != 1) {
+      return CRYPT_PK_INVALID_TYPE;
+   }
+   
+   if ((err = prng_is_valid(wprng)) != CRYPT_OK) {
+      return err;
+   }
+
+   /* get the hash and load it as a bignum into 'e' */
+   /* init the bignums */
+   if ((err = mp_init_multi(&r, &s, &p, &e, NULL)) != CRYPT_OK) { 
+      ecc_free(&pubkey);
+      goto LBL_ERR;
+   }
+   if ((err = mp_read_radix(p, (char *)ltc_ecc_sets[key->idx].order, 64)) != CRYPT_OK)        { goto error; }
+   if ((err = mp_read_unsigned_bin(e, (unsigned char *)in, (int)inlen)) != CRYPT_OK)  { goto error; }
+
+   /* make up a key and export the public copy */
+   for (;;) {
+      if ((err = ecc_make_key(prng, wprng, ecc_get_size(key), &pubkey)) != CRYPT_OK) {
+         return err;
+      }
+
+      /* find r = x1 mod n */
+      if ((err = mp_mod(pubkey.pubkey.x, p, r)) != CRYPT_OK)                           { goto error; }
+
+      if (mp_iszero(r)) {
+         ecc_free(&pubkey);
+      } else { 
+        /* find s = (e + xr)/k */
+        if ((err = mp_invmod(pubkey.k, p, pubkey.k)) != CRYPT_OK)            { goto error; } /* k = 1/k */
+        if ((err = mp_mulmod(key->k, r, p, s)) != CRYPT_OK)                  { goto error; } /* s = xr */
+        if ((err = mp_add(e, s, s)) != CRYPT_OK)                             { goto error; } /* s = e +  xr */
+        if ((err = mp_mod(s, p, s)) != CRYPT_OK)                             { goto error; } /* s = e +  xr */
+        if ((err = mp_mulmod(s, pubkey.k, p, s)) != CRYPT_OK)                { goto error; } /* s = (e + xr)/k */
+
+        if (mp_iszero(s)) {
+           ecc_free(&pubkey);
+        } else {
+           break;
+        }
+      }
+   }
+
+   /* store as SEQUENCE { r, s -- integer } */
+   err = der_encode_sequence_multi(out, outlen,
+                             LTC_ASN1_INTEGER, 1UL, r,
+                             LTC_ASN1_INTEGER, 1UL, s,
+                             LTC_ASN1_EOL, 0UL, NULL);
+   goto LBL_ERR;
+error:
+LBL_ERR:
+   mp_clear_multi(r, s, p, e, NULL);
+   ecc_free(&pubkey);
+
+   return err;   
+}
+
+#endif
+/* $Source$ */
+/* $Revision$ */
+/* $Date$ */
+
diff --git a/src/pk/ecc/ecc_sizes.c b/src/pk/ecc/ecc_sizes.c
new file mode 100644
index 0000000..06aac14
--- /dev/null
+++ b/src/pk/ecc/ecc_sizes.c
@@ -0,0 +1,48 @@
+/* LibTomCrypt, modular cryptographic library -- Tom St Denis
+ *
+ * LibTomCrypt is a library that provides various cryptographic
+ * algorithms in a highly modular and flexible manner.
+ *
+ * The library is free for all purposes without any express
+ * guarantee it works.
+ *
+ * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
+ */
+
+/* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b
+ *
+ * All curves taken from NIST recommendation paper of July 1999
+ * Available at http://csrc.nist.gov/cryptval/dss.htm
+ */
+#include "tomcrypt.h"
+
+/**
+  @file ecc_sizes.c
+  ECC Crypto, Tom St Denis
+*/  
+
+#ifdef MECC
+
+void ecc_sizes(int *low, int *high)
+{
+ int i;
+ LTC_ARGCHK(low  != NULL);
+ LTC_ARGCHK(high != NULL);
+
+ *low = INT_MAX;
+ *high = 0;
+ for (i = 0; ltc_ecc_sets[i].size != 0; i++) {
+     if (ltc_ecc_sets[i].size < *low)  {
+        *low  = ltc_ecc_sets[i].size;
+     }
+     if (ltc_ecc_sets[i].size > *high) {
+        *high = ltc_ecc_sets[i].size;
+     }
+ }
+}
+
+#endif
+/* $Source$ */
+/* $Revision$ */
+/* $Date$ */
+
diff --git a/src/pk/ecc/ecc_sys.c b/src/pk/ecc/ecc_sys.c
deleted file mode 100644
index 597f832..0000000
--- a/src/pk/ecc/ecc_sys.c
+++ /dev/null
@@ -1,472 +0,0 @@
-/* LibTomCrypt, modular cryptographic library -- Tom St Denis
- *
- * LibTomCrypt is a library that provides various cryptographic
- * algorithms in a highly modular and flexible manner.
- *
- * The library is free for all purposes without any express
- * guarantee it works.
- *
- * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
- */
-
-/**
-  @file ecc_sys.c
-  ECC Crypto, Tom St Denis
-*/
-  
-/**
-  Encrypt a symmetric key with ECC 
-  @param in         The symmetric key you want to encrypt
-  @param inlen      The length of the key to encrypt (octets)
-  @param out        [out] The destination for the ciphertext
-  @param outlen     [in/out] The max size and resulting size of the ciphertext
-  @param prng       An active PRNG state
-  @param wprng      The index of the PRNG you wish to use 
-  @param hash       The index of the hash you want to use 
-  @param key        The ECC key you want to encrypt to
-  @return CRYPT_OK if successful
-*/
-int ecc_encrypt_key(const unsigned char *in,   unsigned long inlen,
-                          unsigned char *out,  unsigned long *outlen, 
-                          prng_state *prng, int wprng, int hash, 
-                          ecc_key *key)
-{
-    unsigned char *pub_expt, *ecc_shared, *skey;
-    ecc_key        pubkey;
-    unsigned long  x, y, pubkeysize;
-    int            err;
-
-    LTC_ARGCHK(in      != NULL);
-    LTC_ARGCHK(out     != NULL);
-    LTC_ARGCHK(outlen  != NULL);
-    LTC_ARGCHK(key     != NULL);
-
-    /* check that wprng/cipher/hash are not invalid */
-    if ((err = prng_is_valid(wprng)) != CRYPT_OK) {
-       return err;
-    }
-
-    if ((err = hash_is_valid(hash)) != CRYPT_OK) {
-       return err;
-    }
-
-    if (inlen > hash_descriptor[hash].hashsize) {
-       return CRYPT_INVALID_HASH;
-    }
-
-    /* make a random key and export the public copy */
-    if ((err = ecc_make_key(prng, wprng, ecc_get_size(key), &pubkey)) != CRYPT_OK) {
-       return err;
-    }
-
-    pub_expt   = XMALLOC(ECC_BUF_SIZE);
-    ecc_shared = XMALLOC(ECC_BUF_SIZE);
-    skey       = XMALLOC(MAXBLOCKSIZE);
-    if (pub_expt == NULL || ecc_shared == NULL || skey == NULL) {
-       if (pub_expt != NULL) {
-          XFREE(pub_expt);
-       }
-       if (ecc_shared != NULL) {
-          XFREE(ecc_shared);
-       }
-       if (skey != NULL) {
-          XFREE(skey);
-       }
-       ecc_free(&pubkey);
-       return CRYPT_MEM;
-    }
-
-    pubkeysize = ECC_BUF_SIZE;
-    if ((err = ecc_export(pub_expt, &pubkeysize, PK_PUBLIC, &pubkey)) != CRYPT_OK) {
-       ecc_free(&pubkey);
-       goto LBL_ERR;
-    }
-    
-    /* make random key */
-    x        = ECC_BUF_SIZE;
-    if ((err = ecc_shared_secret(&pubkey, key, ecc_shared, &x)) != CRYPT_OK) {
-       ecc_free(&pubkey);
-       goto LBL_ERR;
-    }
-    ecc_free(&pubkey);
-    y = MAXBLOCKSIZE;
-    if ((err = hash_memory(hash, ecc_shared, x, skey, &y)) != CRYPT_OK) {
-       goto LBL_ERR;
-    }
-    
-    /* Encrypt key */
-    for (x = 0; x < inlen; x++) {
-      skey[x] ^= in[x];
-    }
-
-    err = der_encode_sequence_multi(out, outlen,
-                                    LTC_ASN1_OBJECT_IDENTIFIER,  hash_descriptor[hash].OIDlen,   hash_descriptor[hash].OID,
-                                    LTC_ASN1_OCTET_STRING,       pubkeysize,                     pub_expt,
-                                    LTC_ASN1_OCTET_STRING,       inlen,                          skey,
-                                    LTC_ASN1_EOL,                0UL,                            NULL);
-
-LBL_ERR:
-#ifdef LTC_CLEAN_STACK
-    /* clean up */
-    zeromem(pub_expt,   ECC_BUF_SIZE);
-    zeromem(ecc_shared, ECC_BUF_SIZE);
-    zeromem(skey,       MAXBLOCKSIZE);
-#endif
-
-    XFREE(skey);
-    XFREE(ecc_shared);
-    XFREE(pub_expt);
-
-    return err;
-}
-
-/**
-  Decrypt an ECC encrypted key
-  @param in       The ciphertext
-  @param inlen    The length of the ciphertext (octets)
-  @param out      [out] The plaintext
-  @param outlen   [in/out] The max size and resulting size of the plaintext
-  @param key      The corresponding private ECC key
-  @return CRYPT_OK if successful
-*/
-int ecc_decrypt_key(const unsigned char *in,  unsigned long  inlen,
-                          unsigned char *out, unsigned long *outlen, 
-                          ecc_key *key)
-{
-   unsigned char *ecc_shared, *skey, *pub_expt;
-   unsigned long  x, y, hashOID[32];
-   int            hash, err;
-   ecc_key        pubkey;
-   ltc_asn1_list  decode[3];
-
-   LTC_ARGCHK(in     != NULL);
-   LTC_ARGCHK(out    != NULL);
-   LTC_ARGCHK(outlen != NULL);
-   LTC_ARGCHK(key    != NULL);
-
-   /* right key type? */
-   if (key->type != PK_PRIVATE) {
-      return CRYPT_PK_NOT_PRIVATE;
-   }
-   
-   /* decode to find out hash */
-   LTC_SET_ASN1(decode, 0, LTC_ASN1_OBJECT_IDENTIFIER, hashOID, sizeof(hashOID)/sizeof(hashOID[0]));
- 
-   if ((err = der_decode_sequence(in, inlen, decode, 1)) != CRYPT_OK) {
-      return err;
-   }
-   for (hash = 0; hash_descriptor[hash].name   != NULL             && 
-                  (hash_descriptor[hash].OIDlen != decode[0].size   || 
-                   memcmp(hash_descriptor[hash].OID, hashOID, sizeof(unsigned long)*decode[0].size)); hash++);
-
-   if (hash_descriptor[hash].name == NULL) {
-      return CRYPT_INVALID_PACKET;
-   }
-
-   /* we now have the hash! */
-
-   /* allocate memory */
-   pub_expt   = XMALLOC(ECC_BUF_SIZE);
-   ecc_shared = XMALLOC(ECC_BUF_SIZE);
-   skey       = XMALLOC(MAXBLOCKSIZE);
-   if (pub_expt == NULL || ecc_shared == NULL || skey == NULL) {
-      if (pub_expt != NULL) {
-         XFREE(pub_expt);
-      }
-      if (ecc_shared != NULL) {
-         XFREE(ecc_shared);
-      }
-      if (skey != NULL) {
-         XFREE(skey);
-      }
-      return CRYPT_MEM;
-   }
-   LTC_SET_ASN1(decode, 1, LTC_ASN1_OCTET_STRING,      pub_expt,  ECC_BUF_SIZE);
-   LTC_SET_ASN1(decode, 2, LTC_ASN1_OCTET_STRING,      skey,      MAXBLOCKSIZE);
-
-   /* read the structure in now */
-   if ((err = der_decode_sequence(in, inlen, decode, 3)) != CRYPT_OK) {
-      goto LBL_ERR;
-   }
-
-   /* import ECC key from packet */
-   if ((err = ecc_import(decode[1].data, decode[1].size, &pubkey)) != CRYPT_OK) {
-      goto LBL_ERR;
-   }
-
-   /* make shared key */
-   x = ECC_BUF_SIZE;
-   if ((err = ecc_shared_secret(key, &pubkey, ecc_shared, &x)) != CRYPT_OK) {
-      ecc_free(&pubkey);
-      goto LBL_ERR;
-   }
-   ecc_free(&pubkey);
-
-   y = MAXBLOCKSIZE;
-   if ((err = hash_memory(hash, ecc_shared, x, ecc_shared, &y)) != CRYPT_OK) {
-      goto LBL_ERR;
-   }
-
-   /* ensure the hash of the shared secret is at least as big as the encrypt itself */
-   if (decode[2].size > y) {
-      err = CRYPT_INVALID_PACKET;
-      goto LBL_ERR;
-   }
-
-   /* avoid buffer overflow */
-   if (*outlen < decode[2].size) {
-      err = CRYPT_BUFFER_OVERFLOW;
-      goto LBL_ERR;
-   }
-
-   /* Decrypt the key */
-   for (x = 0; x < decode[2].size; x++) {
-     out[x] = skey[x] ^ ecc_shared[x];
-   }
-   *outlen = x;
-
-   err = CRYPT_OK;
-LBL_ERR:
-#ifdef LTC_CLEAN_STACK
-   zeromem(pub_expt,   ECC_BUF_SIZE);
-   zeromem(ecc_shared, ECC_BUF_SIZE);
-   zeromem(skey,       MAXBLOCKSIZE);
-#endif
-
-   XFREE(pub_expt);
-   XFREE(ecc_shared);
-   XFREE(skey);
-
-   return err;
-}
-
-/**
-  Sign a message digest
-  @param in        The message digest to sign
-  @param inlen     The length of the digest
-  @param out       [out] The destination for the signature
-  @param outlen    [in/out] The max size and resulting size of the signature
-  @param prng      An active PRNG state
-  @param wprng     The index of the PRNG you wish to use
-  @param key       A private ECC key
-  @return CRYPT_OK if successful
-*/
-int ecc_sign_hash(const unsigned char *in,  unsigned long inlen, 
-                        unsigned char *out, unsigned long *outlen, 
-                        prng_state *prng, int wprng, ecc_key *key)
-{
-   ecc_key       pubkey;
-   void          *r, *s, *e, *p;
-   int           err;
-
-   LTC_ARGCHK(in     != NULL);
-   LTC_ARGCHK(out    != NULL);
-   LTC_ARGCHK(outlen != NULL);
-   LTC_ARGCHK(key    != NULL);
-
-   /* is this a private key? */
-   if (key->type != PK_PRIVATE) {
-      return CRYPT_PK_NOT_PRIVATE;
-   }
-   
-   /* is the IDX valid ?  */
-   if (is_valid_idx(key->idx) != 1) {
-      return CRYPT_PK_INVALID_TYPE;
-   }
-   
-   if ((err = prng_is_valid(wprng)) != CRYPT_OK) {
-      return err;
-   }
-
-   /* get the hash and load it as a bignum into 'e' */
-   /* init the bignums */
-   if ((err = mp_init_multi(&r, &s, &p, &e, NULL)) != CRYPT_OK) { 
-      ecc_free(&pubkey);
-      goto LBL_ERR;
-   }
-   if ((err = mp_read_radix(p, (char *)ltc_ecc_sets[key->idx].order, 64)) != CRYPT_OK)        { goto error; }
-   if ((err = mp_read_unsigned_bin(e, (unsigned char *)in, (int)inlen)) != CRYPT_OK)  { goto error; }
-
-   /* make up a key and export the public copy */
-   for (;;) {
-      if ((err = ecc_make_key(prng, wprng, ecc_get_size(key), &pubkey)) != CRYPT_OK) {
-         return err;
-      }
-
-      /* find r = x1 mod n */
-      if ((err = mp_mod(pubkey.pubkey.x, p, r)) != CRYPT_OK)                           { goto error; }
-
-      if (mp_iszero(r)) {
-         ecc_free(&pubkey);
-      } else { 
-        /* find s = (e + xr)/k */
-        if ((err = mp_invmod(pubkey.k, p, pubkey.k)) != CRYPT_OK)            { goto error; } /* k = 1/k */
-        if ((err = mp_mulmod(key->k, r, p, s)) != CRYPT_OK)                 { goto error; } /* s = xr */
-        if ((err = mp_add(e, s, s)) != CRYPT_OK)                      { goto error; } /* s = e +  xr */
-        if ((err = mp_mod(s, p, s)) != CRYPT_OK)                      { goto error; } /* s = e +  xr */
-        if ((err = mp_mulmod(s, pubkey.k, p, s)) != CRYPT_OK)               { goto error; } /* s = (e + xr)/k */
-
-        if (mp_iszero(s)) {
-           ecc_free(&pubkey);
-        } else {
-           break;
-        }
-      }
-   }
-
-   /* store as SEQUENCE { r, s -- integer } */
-   err = der_encode_sequence_multi(out, outlen,
-                             LTC_ASN1_INTEGER, 1UL, r,
-                             LTC_ASN1_INTEGER, 1UL, s,
-                             LTC_ASN1_EOL, 0UL, NULL);
-   goto LBL_ERR;
-error:
-LBL_ERR:
-   mp_clear_multi(r, s, p, e, NULL);
-   ecc_free(&pubkey);
-
-   return err;   
-}
-
-/* verify 
- *
- * w  = s^-1 mod n
- * u1 = xw 
- * u2 = rw
- * X = u1*G + u2*Q
- * v = X_x1 mod n
- * accept if v == r
- */
-
-/**
-   Verify an ECC signature
-   @param sig         The signature to verify
-   @param siglen      The length of the signature (octets)
-   @param hash        The hash (message digest) that was signed
-   @param hashlen     The length of the hash (octets)
-   @param stat        Result of signature, 1==valid, 0==invalid
-   @param key         The corresponding public ECC key
-   @return CRYPT_OK if successful (even if the signature is not valid)
-*/
-int ecc_verify_hash(const unsigned char *sig,  unsigned long siglen,
-                    const unsigned char *hash, unsigned long hashlen, 
-                    int *stat, ecc_key *key)
-{
-   ecc_point    *mG, *mQ;
-   void          *r, *s, *v, *w, *u1, *u2, *e, *p, *m;
-   void          *mp;
-   int           err;
-
-   LTC_ARGCHK(sig  != NULL);
-   LTC_ARGCHK(hash != NULL);
-   LTC_ARGCHK(stat != NULL);
-   LTC_ARGCHK(key  != NULL);
-
-   /* default to invalid signature */
-   *stat = 0;
-   mp    = NULL;
-
-   /* is the IDX valid ?  */
-   if (is_valid_idx(key->idx) != 1) {
-      return CRYPT_PK_INVALID_TYPE;
-   }
-
-   /* allocate ints */
-   if ((err = mp_init_multi(&r, &s, &v, &w, &u1, &u2, &p, &e, &m, NULL)) != CRYPT_OK) {
-      return CRYPT_MEM;
-   }
-
-   /* allocate points */
-   mG = ltc_ecc_new_point();
-   mQ = ltc_ecc_new_point();
-   if (mQ  == NULL || mG == NULL) {
-      err = CRYPT_MEM;
-      goto done;
-   }
-
-   /* parse header */
-   if ((err = der_decode_sequence_multi(sig, siglen,
-                                  LTC_ASN1_INTEGER, 1UL, r,
-                                  LTC_ASN1_INTEGER, 1UL, s,
-                                  LTC_ASN1_EOL, 0UL, NULL)) != CRYPT_OK) {
-      goto done;
-   }
-
-   /* get the order */
-   if ((err = mp_read_radix(p, (char *)ltc_ecc_sets[key->idx].order, 64)) != CRYPT_OK)                  { goto error; }
-
-   /* get the modulus */
-   if ((err = mp_read_radix(m, (char *)ltc_ecc_sets[key->idx].prime, 64)) != CRYPT_OK)                  { goto error; }
-
-   /* check for zero */
-   if (mp_iszero(r) || mp_iszero(s) || mp_cmp(r, p) != LTC_MP_LT || mp_cmp(s, p) != LTC_MP_LT) {
-      err = CRYPT_INVALID_PACKET;
-      goto done;
-   }
-
-   /* read hash */
-   if ((err = mp_read_unsigned_bin(e, (unsigned char *)hash, (int)hashlen)) != CRYPT_OK)                { goto error; }
-
-   /*  w  = s^-1 mod n */
-   if ((err = mp_invmod(s, p, w)) != CRYPT_OK)                                                          { goto error; }
-
-   /* u1 = ew */
-   if ((err = mp_mulmod(e, w, p, u1)) != CRYPT_OK)                                                      { goto error; }
-
-   /* u2 = rw */
-   if ((err = mp_mulmod(r, w, p, u2)) != CRYPT_OK)                                                      { goto error; }
-
-   /* find mG = u1*G */
-   if ((err = mp_read_radix(mG->x, (char *)ltc_ecc_sets[key->idx].Gx, 64)) != CRYPT_OK)                 { goto error; }
-   if ((err = mp_read_radix(mG->y, (char *)ltc_ecc_sets[key->idx].Gy, 64)) != CRYPT_OK)                 { goto error; }
-   mp_set(mG->z, 1);  
-   if ((err = ltc_ecc_mulmod(u1, mG, mG, m, 0)) != CRYPT_OK)                                            { goto done; }
-
-   /* find mQ = u2*Q */
-   if ((err = mp_copy(key->pubkey.x, mQ->x)) != CRYPT_OK)                                               { goto error; }
-   if ((err = mp_copy(key->pubkey.y, mQ->y)) != CRYPT_OK)                                               { goto error; }
-   if ((err = mp_copy(key->pubkey.z, mQ->z)) != CRYPT_OK)                                               { goto error; }
-   if ((err = ltc_ecc_mulmod(u2, mQ, mQ, m, 0)) != CRYPT_OK)                                            { goto done; }
-  
-   /* find the montgomery mp */
-   if ((err = mp_montgomery_setup(m, &mp)) != CRYPT_OK)                                                 { goto error; }
-   /* add them */
-   if (ltc_mp.ecc_ptadd != NULL) {
-      if ((err = ltc_mp.ecc_ptadd(mQ, mG, mG, m, mp)) != CRYPT_OK)                                      { goto done; }
-   } else {
-      if ((err = ltc_ecc_add_point(mQ, mG, mG, m, mp)) != CRYPT_OK)                                     { goto done; }
-   }
-   
-   /* reduce */
-   if (ltc_mp.ecc_map != NULL) {
-      if ((err = ltc_mp.ecc_map(mG, m, mp)) != CRYPT_OK)                                                { goto done; }
-   } else {
-      if ((err = ltc_ecc_map(mG, m, mp)) != CRYPT_OK)                                                   { goto done; }
-   }
-
-   /* v = X_x1 mod n */
-   if ((err = mp_mod(mG->x, p, v)) != CRYPT_OK)                                                         { goto done; }
-
-   /* does v == r */
-   if (mp_cmp(v, r) == LTC_MP_EQ) {
-      *stat = 1;
-   }
-
-   /* clear up and return */
-   err = CRYPT_OK;
-   goto done;
-error:
-done:
-   ltc_ecc_del_point(mG);
-   ltc_ecc_del_point(mQ);
-   mp_clear_multi(r, s, v, w, u1, u2, p, e, m, NULL);
-   if (mp != NULL) { 
-      mp_montgomery_free(mp);
-   }
-   return err;
-}
-
-
-/* $Source$ */
-/* $Revision$ */
-/* $Date$ */
diff --git a/src/pk/ecc/ecc_test.c b/src/pk/ecc/ecc_test.c
new file mode 100644
index 0000000..367cbbc
--- /dev/null
+++ b/src/pk/ecc/ecc_test.c
@@ -0,0 +1,96 @@
+/* LibTomCrypt, modular cryptographic library -- Tom St Denis
+ *
+ * LibTomCrypt is a library that provides various cryptographic
+ * algorithms in a highly modular and flexible manner.
+ *
+ * The library is free for all purposes without any express
+ * guarantee it works.
+ *
+ * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
+ */
+
+/* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b
+ *
+ * All curves taken from NIST recommendation paper of July 1999
+ * Available at http://csrc.nist.gov/cryptval/dss.htm
+ */
+#include "tomcrypt.h"
+
+/**
+  @file ecc_test.c
+  ECC Crypto, Tom St Denis
+*/  
+
+#ifdef MECC
+
+/**
+  Perform on the ECC system
+  @return CRYPT_OK if successful
+*/
+int ecc_test(void)
+{
+   void     *modulus, *order;
+   ecc_point  *G, *GG;
+   int i, err, primality;
+
+   if ((err = mp_init_multi(&modulus, &order, NULL)) != CRYPT_OK) {
+      return err;
+   }
+
+   G   = ltc_ecc_new_point();
+   GG  = ltc_ecc_new_point();
+   if (G == NULL || GG == NULL) {
+      mp_clear_multi(modulus, order, NULL);
+      ltc_ecc_del_point(G);
+      ltc_ecc_del_point(GG);
+      return CRYPT_MEM;
+   }
+
+   for (i = 0; ltc_ecc_sets[i].size; i++) {
+       #if 0
+          printf("Testing %d\n", ltc_ecc_sets[i].size);
+       #endif
+       if ((err = mp_read_radix(modulus, (char *)ltc_ecc_sets[i].prime, 64)) != CRYPT_OK)   { goto done; }
+       if ((err = mp_read_radix(order, (char *)ltc_ecc_sets[i].order, 64)) != CRYPT_OK)     { goto done; }
+
+       /* is prime actually prime? */
+       if ((err = mp_prime_is_prime(modulus, 8, &primality)) != CRYPT_OK)                   { goto done; }
+       if (primality == 0) {
+          err = CRYPT_FAIL_TESTVECTOR;
+          goto done;
+       }
+
+       /* is order prime ? */
+       if ((err = mp_prime_is_prime(order, 8, &primality)) != CRYPT_OK)                     { goto done; }
+       if (primality == 0) {
+          err = CRYPT_FAIL_TESTVECTOR;
+          goto done;
+       }
+
+       if ((err = mp_read_radix(G->x, (char *)ltc_ecc_sets[i].Gx, 64)) != CRYPT_OK)         { goto done; }
+       if ((err = mp_read_radix(G->y, (char *)ltc_ecc_sets[i].Gy, 64)) != CRYPT_OK)         { goto done; }
+       mp_set(G->z, 1);
+
+       /* then we should have G == (order + 1)G */
+       if ((err = mp_add_d(order, 1, order)) != CRYPT_OK)                                   { goto done; }
+       if ((err = ltc_mp.ecc_ptmul(order, G, GG, modulus, 1)) != CRYPT_OK)                  { goto done; }
+       if (mp_cmp(G->x, GG->x) != LTC_MP_EQ || mp_cmp(G->y, GG->y) != LTC_MP_EQ) {
+          err = CRYPT_FAIL_TESTVECTOR;
+          goto done;
+       }
+   }
+   err = CRYPT_OK;
+   goto done;
+done:
+   ltc_ecc_del_point(GG);
+   ltc_ecc_del_point(G);
+   mp_clear_multi(order, modulus, NULL);
+   return err;
+}
+
+#endif
+
+/* $Source$ */
+/* $Revision$ */
+/* $Date$ */
+
diff --git a/src/pk/ecc/ecc_verify_hash.c b/src/pk/ecc/ecc_verify_hash.c
new file mode 100644
index 0000000..8b0c6d8
--- /dev/null
+++ b/src/pk/ecc/ecc_verify_hash.c
@@ -0,0 +1,160 @@
+/* LibTomCrypt, modular cryptographic library -- Tom St Denis
+ *
+ * LibTomCrypt is a library that provides various cryptographic
+ * algorithms in a highly modular and flexible manner.
+ *
+ * The library is free for all purposes without any express
+ * guarantee it works.
+ *
+ * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
+ */
+
+/* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b
+ *
+ * All curves taken from NIST recommendation paper of July 1999
+ * Available at http://csrc.nist.gov/cryptval/dss.htm
+ */
+#include "tomcrypt.h"
+
+/**
+  @file ecc_verify_hash.c
+  ECC Crypto, Tom St Denis
+*/  
+
+#ifdef MECC
+
+/* verify 
+ *
+ * w  = s^-1 mod n
+ * u1 = xw 
+ * u2 = rw
+ * X = u1*G + u2*Q
+ * v = X_x1 mod n
+ * accept if v == r
+ */
+
+/**
+   Verify an ECC signature
+   @param sig         The signature to verify
+   @param siglen      The length of the signature (octets)
+   @param hash        The hash (message digest) that was signed
+   @param hashlen     The length of the hash (octets)
+   @param stat        Result of signature, 1==valid, 0==invalid
+   @param key         The corresponding public ECC key
+   @return CRYPT_OK if successful (even if the signature is not valid)
+*/
+int ecc_verify_hash(const unsigned char *sig,  unsigned long siglen,
+                    const unsigned char *hash, unsigned long hashlen, 
+                    int *stat, ecc_key *key)
+{
+   ecc_point    *mG, *mQ;
+   void          *r, *s, *v, *w, *u1, *u2, *e, *p, *m;
+   void          *mp;
+   int           err;
+
+   LTC_ARGCHK(sig  != NULL);
+   LTC_ARGCHK(hash != NULL);
+   LTC_ARGCHK(stat != NULL);
+   LTC_ARGCHK(key  != NULL);
+
+   /* default to invalid signature */
+   *stat = 0;
+   mp    = NULL;
+
+   /* is the IDX valid ?  */
+   if (ltc_ecc_is_valid_idx(key->idx) != 1) {
+      return CRYPT_PK_INVALID_TYPE;
+   }
+
+   /* allocate ints */
+   if ((err = mp_init_multi(&r, &s, &v, &w, &u1, &u2, &p, &e, &m, NULL)) != CRYPT_OK) {
+      return CRYPT_MEM;
+   }
+
+   /* allocate points */
+   mG = ltc_ecc_new_point();
+   mQ = ltc_ecc_new_point();
+   if (mQ  == NULL || mG == NULL) {
+      err = CRYPT_MEM;
+      goto done;
+   }
+
+   /* parse header */
+   if ((err = der_decode_sequence_multi(sig, siglen,
+                                  LTC_ASN1_INTEGER, 1UL, r,
+                                  LTC_ASN1_INTEGER, 1UL, s,
+                                  LTC_ASN1_EOL, 0UL, NULL)) != CRYPT_OK) {
+      goto done;
+   }
+
+   /* get the order */
+   if ((err = mp_read_radix(p, (char *)ltc_ecc_sets[key->idx].order, 64)) != CRYPT_OK)                  { goto error; }
+
+   /* get the modulus */
+   if ((err = mp_read_radix(m, (char *)ltc_ecc_sets[key->idx].prime, 64)) != CRYPT_OK)                  { goto error; }
+
+   /* check for zero */
+   if (mp_iszero(r) || mp_iszero(s) || mp_cmp(r, p) != LTC_MP_LT || mp_cmp(s, p) != LTC_MP_LT) {
+      err = CRYPT_INVALID_PACKET;
+      goto done;
+   }
+
+   /* read hash */
+   if ((err = mp_read_unsigned_bin(e, (unsigned char *)hash, (int)hashlen)) != CRYPT_OK)                { goto error; }
+
+   /*  w  = s^-1 mod n */
+   if ((err = mp_invmod(s, p, w)) != CRYPT_OK)                                                          { goto error; }
+
+   /* u1 = ew */
+   if ((err = mp_mulmod(e, w, p, u1)) != CRYPT_OK)                                                      { goto error; }
+
+   /* u2 = rw */
+   if ((err = mp_mulmod(r, w, p, u2)) != CRYPT_OK)                                                      { goto error; }
+
+   /* find mG = u1*G */
+   if ((err = mp_read_radix(mG->x, (char *)ltc_ecc_sets[key->idx].Gx, 64)) != CRYPT_OK)                 { goto error; }
+   if ((err = mp_read_radix(mG->y, (char *)ltc_ecc_sets[key->idx].Gy, 64)) != CRYPT_OK)                 { goto error; }
+   mp_set(mG->z, 1);  
+   if ((err = ltc_mp.ecc_ptmul(u1, mG, mG, m, 0)) != CRYPT_OK)                                          { goto done; }
+
+   /* find mQ = u2*Q */
+   if ((err = mp_copy(key->pubkey.x, mQ->x)) != CRYPT_OK)                                               { goto error; }
+   if ((err = mp_copy(key->pubkey.y, mQ->y)) != CRYPT_OK)                                               { goto error; }
+   if ((err = mp_copy(key->pubkey.z, mQ->z)) != CRYPT_OK)                                               { goto error; }
+   if ((err = ltc_mp.ecc_ptmul(u2, mQ, mQ, m, 0)) != CRYPT_OK)                                          { goto done; }
+  
+   /* find the montgomery mp */
+   if ((err = mp_montgomery_setup(m, &mp)) != CRYPT_OK)                                                 { goto error; }
+   /* add them */
+   if ((err = ltc_mp.ecc_ptadd(mQ, mG, mG, m, mp)) != CRYPT_OK)                                         { goto done; }
+   
+   /* reduce */
+   if ((err = ltc_mp.ecc_map(mG, m, mp)) != CRYPT_OK)                                                   { goto done; }
+
+   /* v = X_x1 mod n */
+   if ((err = mp_mod(mG->x, p, v)) != CRYPT_OK)                                                         { goto done; }
+
+   /* does v == r */
+   if (mp_cmp(v, r) == LTC_MP_EQ) {
+      *stat = 1;
+   }
+
+   /* clear up and return */
+   err = CRYPT_OK;
+   goto done;
+error:
+done:
+   ltc_ecc_del_point(mG);
+   ltc_ecc_del_point(mQ);
+   mp_clear_multi(r, s, v, w, u1, u2, p, e, m, NULL);
+   if (mp != NULL) { 
+      mp_montgomery_free(mp);
+   }
+   return err;
+}
+
+#endif
+/* $Source$ */
+/* $Revision$ */
+/* $Date$ */
+
diff --git a/src/pk/ecc/ltc_ecc_is_valid_idx.c b/src/pk/ecc/ltc_ecc_is_valid_idx.c
new file mode 100644
index 0000000..b67b4e8
--- /dev/null
+++ b/src/pk/ecc/ltc_ecc_is_valid_idx.c
@@ -0,0 +1,45 @@
+/* LibTomCrypt, modular cryptographic library -- Tom St Denis
+ *
+ * LibTomCrypt is a library that provides various cryptographic
+ * algorithms in a highly modular and flexible manner.
+ *
+ * The library is free for all purposes without any express
+ * guarantee it works.
+ *
+ * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
+ */
+
+/* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b
+ *
+ * All curves taken from NIST recommendation paper of July 1999
+ * Available at http://csrc.nist.gov/cryptval/dss.htm
+ */
+#include "tomcrypt.h"
+
+/**
+  @file ltc_ecc_is_valid_idx.c
+  ECC Crypto, Tom St Denis
+*/  
+
+#ifdef MECC
+
+/** Returns whether an ECC idx is valid or not
+  @param n   The idx number to check
+  @return 1 if valid, 0 if not
+*/  
+int ltc_ecc_is_valid_idx(int n)
+{
+   int x;
+
+   for (x = 0; ltc_ecc_sets[x].size != 0; x++);
+   if ((n < 0) || (n >= x)) {
+      return 0;
+   }
+   return 1;
+}
+
+#endif
+/* $Source$ */
+/* $Revision$ */
+/* $Date$ */
+
diff --git a/src/pk/ecc/ltc_ecc_map.c b/src/pk/ecc/ltc_ecc_map.c
new file mode 100644
index 0000000..39f4f4a
--- /dev/null
+++ b/src/pk/ecc/ltc_ecc_map.c
@@ -0,0 +1,77 @@
+/* LibTomCrypt, modular cryptographic library -- Tom St Denis
+ *
+ * LibTomCrypt is a library that provides various cryptographic
+ * algorithms in a highly modular and flexible manner.
+ *
+ * The library is free for all purposes without any express
+ * guarantee it works.
+ *
+ * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
+ */
+
+/* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b
+ *
+ * All curves taken from NIST recommendation paper of July 1999
+ * Available at http://csrc.nist.gov/cryptval/dss.htm
+ */
+#include "tomcrypt.h"
+
+/**
+  @file ltc_ecc_map.c
+  ECC Crypto, Tom St Denis
+*/  
+
+#ifdef MECC
+
+/**
+  Map a projective jacbobian point back to affine space
+  @param P        [in/out] The point to map
+  @param modulus  The modulus of the field the ECC curve is in
+  @param mp       The "b" value from montgomery_setup()
+  @return CRYPT_OK on success
+*/
+int ltc_ecc_map(ecc_point *P, void *modulus, void *mp)
+{
+   void *t1, *t2;
+   int err;
+
+   LTC_ARGCHK(P       != NULL);
+   LTC_ARGCHK(modulus != NULL);
+   LTC_ARGCHK(mp      != NULL);
+
+   if ((err = mp_init_multi(&t1, &t2, NULL)) != CRYPT_OK) {
+      return CRYPT_MEM;
+   }
+
+   /* first map z back to normal */
+   if ((err = mp_montgomery_reduce(P->z, modulus, mp)) != CRYPT_OK)           { goto done; }
+
+   /* get 1/z */
+   if ((err = mp_invmod(P->z, modulus, t1)) != CRYPT_OK)                      { goto done; }
+ 
+   /* get 1/z^2 and 1/z^3 */
+   if ((err = mp_sqr(t1, t2)) != CRYPT_OK)                                    { goto done; }
+   if ((err = mp_mod(t2, modulus, t2)) != CRYPT_OK)                           { goto done; }
+   if ((err = mp_mul(t1, t2, t1)) != CRYPT_OK)                                { goto done; }
+   if ((err = mp_mod(t1, modulus, t1)) != CRYPT_OK)                           { goto done; }
+
+   /* multiply against x/y */
+   if ((err = mp_mul(P->x, t2, P->x)) != CRYPT_OK)                            { goto done; }
+   if ((err = mp_montgomery_reduce(P->x, modulus, mp)) != CRYPT_OK)           { goto done; }
+   if ((err = mp_mul(P->y, t1, P->y)) != CRYPT_OK)                            { goto done; }
+   if ((err = mp_montgomery_reduce(P->y, modulus, mp)) != CRYPT_OK)           { goto done; }
+   mp_set(P->z, 1);
+
+   err = CRYPT_OK;
+   goto done;
+done:
+   mp_clear_multi(t1, t2, NULL);
+   return err;
+}
+
+#endif
+
+/* $Source$ */
+/* $Revision$ */
+/* $Date$ */
+
diff --git a/src/pk/ecc/ltc_ecc_mulmod.c b/src/pk/ecc/ltc_ecc_mulmod.c
new file mode 100644
index 0000000..fc68446
--- /dev/null
+++ b/src/pk/ecc/ltc_ecc_mulmod.c
@@ -0,0 +1,213 @@
+/* LibTomCrypt, modular cryptographic library -- Tom St Denis
+ *
+ * LibTomCrypt is a library that provides various cryptographic
+ * algorithms in a highly modular and flexible manner.
+ *
+ * The library is free for all purposes without any express
+ * guarantee it works.
+ *
+ * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
+ */
+
+/* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b
+ *
+ * All curves taken from NIST recommendation paper of July 1999
+ * Available at http://csrc.nist.gov/cryptval/dss.htm
+ */
+#include "tomcrypt.h"
+
+/**
+  @file ltc_ecc_mulmod.c
+  ECC Crypto, Tom St Denis
+*/  
+
+#ifdef MECC
+#ifndef LTC_ECC_TIMING_RESISTANT
+
+/* size of sliding window, don't change this! */
+#define WINSIZE 4
+
+/**
+   Perform a point multiplication 
+   @param k    The scalar to multiply by
+   @param G    The base point
+   @param R    [out] Destination for kG
+   @param modulus  The modulus of the field the ECC curve is in
+   @param map      Boolean whether to map back to affine or not (1==map, 0 == leave in projective)
+   @return CRYPT_OK on success
+*/
+int ltc_ecc_mulmod(void *k, ecc_point *G, ecc_point *R, void *modulus, int map)
+{
+   ecc_point *tG, *M[8];
+   int        i, j, err;
+   void       *mu, *mp;
+   unsigned long buf;
+   int        first, bitbuf, bitcpy, bitcnt, mode, digidx;
+
+   LTC_ARGCHK(k       != NULL);
+   LTC_ARGCHK(G       != NULL);
+   LTC_ARGCHK(R       != NULL);
+   LTC_ARGCHK(modulus != NULL);
+
+   /* init montgomery reduction */
+   if ((err = mp_montgomery_setup(modulus, &mp)) != CRYPT_OK) {
+      return err;
+   }
+   if ((err = mp_init(&mu)) != CRYPT_OK) {
+      return err;
+   }
+   if ((err = mp_montgomery_normalization(mu, modulus)) != CRYPT_OK) {
+      mp_montgomery_free(mp);
+      mp_clear(mu);
+      return err;
+   }
+  
+  /* alloc ram for window temps */
+  for (i = 0; i < 8; i++) {
+      M[i] = ltc_ecc_new_point();
+      if (M[i] == NULL) {
+         for (j = 0; j < i; j++) {
+             ltc_ecc_del_point(M[j]);
+         }
+         mp_montgomery_free(mp);
+         mp_clear(mu);
+         return CRYPT_MEM;
+      }
+  }
+
+   /* make a copy of G incase R==G */
+   tG = ltc_ecc_new_point();
+   if (tG == NULL)                                                                   { err = CRYPT_MEM; goto done; }
+
+   /* tG = G  and convert to montgomery */
+   if (mp_cmp_d(mu, 1) == LTC_MP_EQ) {
+      if ((err = mp_copy(G->x, tG->x)) != CRYPT_OK)                                  { goto done; }
+      if ((err = mp_copy(G->y, tG->y)) != CRYPT_OK)                                  { goto done; }
+      if ((err = mp_copy(G->z, tG->z)) != CRYPT_OK)                                  { goto done; }
+   } else {      
+      if ((err = mp_mulmod(G->x, mu, modulus, tG->x)) != CRYPT_OK)                   { goto done; }
+      if ((err = mp_mulmod(G->y, mu, modulus, tG->y)) != CRYPT_OK)                   { goto done; }
+      if ((err = mp_mulmod(G->z, mu, modulus, tG->z)) != CRYPT_OK)                   { goto done; }
+   }
+   mp_clear(mu);
+   
+   /* calc the M tab, which holds kG for k==8..15 */
+   /* M[0] == 8G */
+   if ((err = ltc_ecc_projective_dbl_point(tG, M[0], modulus, mp)) != CRYPT_OK)               { goto done; }
+   if ((err = ltc_ecc_projective_dbl_point(M[0], M[0], modulus, mp)) != CRYPT_OK)               { goto done; }
+   if ((err = ltc_ecc_projective_dbl_point(M[0], M[0], modulus, mp)) != CRYPT_OK)               { goto done; }
+
+   /* now find (8+k)G for k=1..7 */
+   for (j = 9; j < 16; j++) {
+       if ((err = ltc_ecc_projective_add_point(M[j-9], tG, M[j-8], modulus, mp)) != CRYPT_OK)   { goto done; }
+   }
+
+   /* setup sliding window */
+   mode   = 0;
+   bitcnt = 1;
+   buf    = 0;
+   digidx = mp_get_digit_count(k) - 1;
+   bitcpy = bitbuf = 0;
+   first  = 1;
+
+   /* perform ops */
+   for (;;) {
+     /* grab next digit as required */
+     if (--bitcnt == 0) {
+       if (digidx == -1) {
+          break;
+       }
+       buf    = mp_get_digit(k, digidx);
+       bitcnt = (int) MP_DIGIT_BIT;
+       --digidx;
+     }
+
+     /* grab the next msb from the ltiplicand */
+     i = (buf >> (MP_DIGIT_BIT - 1)) & 1;
+     buf <<= 1;
+
+     /* skip leading zero bits */
+     if (mode == 0 && i == 0) {
+        continue;
+     }
+
+     /* if the bit is zero and mode == 1 then we double */
+     if (mode == 1 && i == 0) {
+        if ((err = ltc_ecc_projective_dbl_point(R, R, modulus, mp)) != CRYPT_OK)                 { goto done; }
+        continue;
+     }
+
+     /* else we add it to the window */
+     bitbuf |= (i << (WINSIZE - ++bitcpy));
+     mode = 2;
+
+     if (bitcpy == WINSIZE) {
+       /* if this is the first window we do a simple copy */
+       if (first == 1) {
+          /* R = kG [k = first window] */
+          if ((err = mp_copy(M[bitbuf-8]->x, R->x)) != CRYPT_OK)                     { goto done; }
+          if ((err = mp_copy(M[bitbuf-8]->y, R->y)) != CRYPT_OK)                     { goto done; }
+          if ((err = mp_copy(M[bitbuf-8]->z, R->z)) != CRYPT_OK)                     { goto done; }
+          first = 0;
+       } else {
+         /* normal window */
+         /* ok window is filled so double as required and add  */
+         /* double first */
+         for (j = 0; j < WINSIZE; j++) {
+           if ((err = ltc_ecc_projective_dbl_point(R, R, modulus, mp)) != CRYPT_OK)             { goto done; }
+         }
+
+         /* then add, bitbuf will be 8..15 [8..2^WINSIZE] guaranteed */
+         if ((err = ltc_ecc_projective_add_point(R, M[bitbuf-8], R, modulus, mp)) != CRYPT_OK)  { goto done; }
+       }
+       /* empty window and reset */
+       bitcpy = bitbuf = 0;
+       mode = 1;
+    }
+  }
+
+   /* if bits remain then double/add */
+   if (mode == 2 && bitcpy > 0) {
+     /* double then add */
+     for (j = 0; j < bitcpy; j++) {
+       /* only double if we have had at least one add first */
+       if (first == 0) {
+          if ((err = ltc_ecc_projective_dbl_point(R, R, modulus, mp)) != CRYPT_OK)             { goto done; }
+       }
+
+       bitbuf <<= 1;
+       if ((bitbuf & (1 << WINSIZE)) != 0) {
+         if (first == 1){
+            /* first add, so copy */
+            if ((err = mp_copy(tG->x, R->x)) != CRYPT_OK)                           { goto done; }
+            if ((err = mp_copy(tG->y, R->y)) != CRYPT_OK)                           { goto done; }
+            if ((err = mp_copy(tG->z, R->z)) != CRYPT_OK)                           { goto done; }
+            first = 0;
+         } else {
+            /* then add */
+            if ((err = ltc_ecc_projective_add_point(R, tG, R, modulus, mp)) != CRYPT_OK)       { goto done; }
+         }
+       }
+     }
+   }
+
+   /* map R back from projective space */
+   if (map) {
+      err = ltc_ecc_map(R, modulus, mp);
+   } else {
+      err = CRYPT_OK;
+   }
+done:
+   mp_montgomery_free(mp);
+   ltc_ecc_del_point(tG);
+   for (i = 0; i < 8; i++) {
+       ltc_ecc_del_point(M[i]);
+   }
+   return err;
+}
+
+#endif
+
+#undef WINSIZE
+
+#endif
diff --git a/src/pk/ecc/ltc_ecc_mulmod_timing.c b/src/pk/ecc/ltc_ecc_mulmod_timing.c
new file mode 100644
index 0000000..49ac20e
--- /dev/null
+++ b/src/pk/ecc/ltc_ecc_mulmod_timing.c
@@ -0,0 +1,162 @@
+/* LibTomCrypt, modular cryptographic library -- Tom St Denis
+ *
+ * LibTomCrypt is a library that provides various cryptographic
+ * algorithms in a highly modular and flexible manner.
+ *
+ * The library is free for all purposes without any express
+ * guarantee it works.
+ *
+ * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
+ */
+
+/* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b
+ *
+ * All curves taken from NIST recommendation paper of July 1999
+ * Available at http://csrc.nist.gov/cryptval/dss.htm
+ */
+#include "tomcrypt.h"
+
+/**
+  @file ltc_ecc_mulmod_timing.c
+  ECC Crypto, Tom St Denis
+*/  
+
+#ifdef MECC
+
+#ifdef LTC_ECC_TIMING_RESISTANT
+
+/**
+   Perform a point multiplication  (timing resistant)
+   @param k    The scalar to multiply by
+   @param G    The base point
+   @param R    [out] Destination for kG
+   @param modulus  The modulus of the field the ECC curve is in
+   @param map      Boolean whether to map back to affine or not (1==map, 0 == leave in projective)
+   @return CRYPT_OK on success
+*/
+int ltc_ecc_mulmod(void *k, ecc_point *G, ecc_point *R, void *modulus, int map)
+{
+   ecc_point *tG, *M[3];
+   int        i, j, err;
+   void       *mu, *mp;
+   unsigned long buf;
+   int        first, bitbuf, bitcpy, bitcnt, mode, digidx;
+
+   LTC_ARGCHK(k       != NULL);
+   LTC_ARGCHK(G       != NULL);
+   LTC_ARGCHK(R       != NULL);
+   LTC_ARGCHK(modulus != NULL);
+
+   /* init montgomery reduction */
+   if ((err = mp_montgomery_setup(modulus, &mp)) != CRYPT_OK) {
+      return err;
+   }
+   if ((err = mp_init(&mu)) != CRYPT_OK) {
+      return err;
+   }
+   if ((err = mp_montgomery_normalization(mu, modulus)) != CRYPT_OK) {
+      mp_montgomery_free(mp);
+      mp_clear(mu);
+      return err;
+   }
+
+  /* alloc ram for window temps */
+  for (i = 0; i < 3; i++) {
+      M[i] = ltc_ecc_new_point();
+      if (M[i] == NULL) {
+         for (j = 0; j < i; j++) {
+             ltc_ecc_del_point(M[j]);
+         }
+         mp_montgomery_free(mp);
+         mp_clear(mu);
+         return CRYPT_MEM;
+      }
+  }
+
+   /* make a copy of G incase R==G */
+   tG = ltc_ecc_new_point();
+   if (tG == NULL)                                                                   { err = CRYPT_MEM; goto done; }
+
+   /* tG = G  and convert to montgomery */
+   if ((err = mp_mulmod(G->x, mu, modulus, tG->x)) != CRYPT_OK)                      { goto done; }
+   if ((err = mp_mulmod(G->y, mu, modulus, tG->y)) != CRYPT_OK)                      { goto done; }
+   if ((err = mp_mulmod(G->z, mu, modulus, tG->z)) != CRYPT_OK)                      { goto done; }
+   mp_clear(mu);
+   
+   /* calc the M tab, which holds kG for k==8..15 */
+   /* M[0] == G */
+   if ((err = mp_copy(tG->x, M[0]->x)) != CRYPT_OK)                                   { goto done; }
+   if ((err = mp_copy(tG->y, M[0]->y)) != CRYPT_OK)                                   { goto done; }
+   if ((err = mp_copy(tG->z, M[0]->z)) != CRYPT_OK)                                   { goto done; }
+   /* M[1] == 2G */
+   if ((err = ltc_ecc_projective_dbl_point(tG, M[1], modulus, mp)) != CRYPT_OK)                  { goto done; }
+
+   /* setup sliding window */
+   mode   = 0;
+   bitcnt = 1;
+   buf    = 0;
+   digidx = mp_get_digit_count(k) - 1;
+   bitcpy = bitbuf = 0;
+   first  = 1;
+
+   /* perform ops */
+   for (;;) {
+     /* grab next digit as required */
+      if (--bitcnt == 0) {
+         if (digidx == -1) {
+            break;
+         }
+         buf    = mp_get_digit(k, digidx);
+         bitcnt = (int) MP_DIGIT_BIT;
+         --digidx;
+      }
+
+      /* grab the next msb from the ltiplicand */
+      i = (buf >> (MP_DIGIT_BIT - 1)) & 1;
+      buf <<= 1;
+
+      if (mode == 0 && i == 0) {
+         /* dummy operations */
+         if ((err = ltc_ecc_projective_add_point(M[0], M[1], M[2], modulus, mp)) != CRYPT_OK)    { goto done; }
+         if ((err = ltc_ecc_projective_dbl_point(M[1], M[2], modulus, mp)) != CRYPT_OK)          { goto done; }
+         continue;
+      }
+
+      if (mode == 0 && i == 1) {
+         mode = 1;
+         /* dummy operations */
+         if ((err = ltc_ecc_projective_add_point(M[0], M[1], M[2], modulus, mp)) != CRYPT_OK)    { goto done; }
+         if ((err = ltc_ecc_projective_dbl_point(M[1], M[2], modulus, mp)) != CRYPT_OK)          { goto done; }
+         continue;
+      }
+
+      if ((err = ltc_ecc_projective_add_point(M[0], M[1], M[i^1], modulus, mp)) != CRYPT_OK)    { goto done; }
+      if ((err = ltc_ecc_projective_dbl_point(M[i], M[i], modulus, mp)) != CRYPT_OK)            { goto done; }
+   }
+
+   /* copy result out */
+   if ((err = mp_copy(M[0]->x, R->x)) != CRYPT_OK)                                   { goto done; }
+   if ((err = mp_copy(M[0]->y, R->y)) != CRYPT_OK)                                   { goto done; }
+   if ((err = mp_copy(M[0]->z, R->z)) != CRYPT_OK)                                   { goto done; }
+
+   /* map R back from projective space */
+   if (map) {
+      err = ltc_ecc_map(R, modulus, mp);
+   } else {
+      err = CRYPT_OK;
+   }
+done:
+   mp_montgomery_free(mp);
+   ltc_ecc_del_point(tG);
+   for (i = 0; i < 3; i++) {
+       ltc_ecc_del_point(M[i]);
+   }
+   return err;
+}
+
+#endif
+#endif
+/* $Source$ */
+/* $Revision$ */
+/* $Date$ */
+
diff --git a/src/pk/ecc/ltc_ecc_points.c b/src/pk/ecc/ltc_ecc_points.c
new file mode 100644
index 0000000..21496b5
--- /dev/null
+++ b/src/pk/ecc/ltc_ecc_points.c
@@ -0,0 +1,60 @@
+/* LibTomCrypt, modular cryptographic library -- Tom St Denis
+ *
+ * LibTomCrypt is a library that provides various cryptographic
+ * algorithms in a highly modular and flexible manner.
+ *
+ * The library is free for all purposes without any express
+ * guarantee it works.
+ *
+ * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
+ */
+
+/* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b
+ *
+ * All curves taken from NIST recommendation paper of July 1999
+ * Available at http://csrc.nist.gov/cryptval/dss.htm
+ */
+#include "tomcrypt.h"
+
+/**
+  @file ltc_ecc_points.c
+  ECC Crypto, Tom St Denis
+*/  
+
+#ifdef MECC
+
+/**
+   Allocate a new ECC point
+   @return A newly allocated point or NULL on error 
+*/
+ecc_point *ltc_ecc_new_point(void)
+{
+   ecc_point *p;
+   p = XMALLOC(sizeof(*p));
+   if (p == NULL) {
+      return NULL;
+   }
+   if (mp_init_multi(&p->x, &p->y, &p->z, NULL) != CRYPT_OK) {
+      XFREE(p);
+      return NULL;
+   }
+   return p;
+}
+
+/** Free an ECC point from memory
+  @param p   The point to free
+*/
+void ltc_ecc_del_point(ecc_point *p)
+{
+   /* prevents free'ing null arguments */
+   if (p != NULL) {
+      mp_clear_multi(p->x, p->y, p->z, NULL);
+      XFREE(p);
+   }
+}
+
+#endif
+/* $Source$ */
+/* $Revision$ */
+/* $Date$ */
+
diff --git a/src/pk/ecc/ltc_ecc_projective_add_point.c b/src/pk/ecc/ltc_ecc_projective_add_point.c
new file mode 100644
index 0000000..9521231
--- /dev/null
+++ b/src/pk/ecc/ltc_ecc_projective_add_point.c
@@ -0,0 +1,193 @@
+/* LibTomCrypt, modular cryptographic library -- Tom St Denis
+ *
+ * LibTomCrypt is a library that provides various cryptographic
+ * algorithms in a highly modular and flexible manner.
+ *
+ * The library is free for all purposes without any express
+ * guarantee it works.
+ *
+ * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
+ */
+
+/* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b
+ *
+ * All curves taken from NIST recommendation paper of July 1999
+ * Available at http://csrc.nist.gov/cryptval/dss.htm
+ */
+#include "tomcrypt.h"
+
+/**
+  @file ltc_ecc_projective_add_point.c
+  ECC Crypto, Tom St Denis
+*/  
+
+#ifdef MECC
+
+/**
+   Add two ECC points
+   @param P        The point to add
+   @param Q        The point to add
+   @param R        [out] The destination of the double
+   @param modulus  The modulus of the field the ECC curve is in
+   @param mp       The "b" value from montgomery_setup()
+   @return CRYPT_OK on success
+*/
+int ltc_ecc_projective_add_point(ecc_point *P, ecc_point *Q, ecc_point *R, void *modulus, void *mp)
+{
+   void  *t1, *t2, *x, *y, *z;
+   int err;
+
+   LTC_ARGCHK(P       != NULL);
+   LTC_ARGCHK(Q       != NULL);
+   LTC_ARGCHK(R       != NULL);
+   LTC_ARGCHK(modulus != NULL);
+   LTC_ARGCHK(mp      != NULL);
+
+   if ((err = mp_init_multi(&t1, &t2, &x, &y, &z, NULL)) != CRYPT_OK) {
+      return err;
+   }
+   
+   /* should we dbl instead? */
+   if ((err = mp_sub(modulus, Q->y, t1)) != CRYPT_OK)                          { goto done; }
+
+   if ( (mp_cmp(P->x, Q->x) == LTC_MP_EQ) && 
+        (mp_cmp(P->z, Q->z) == LTC_MP_EQ) &&
+        (mp_cmp(P->y, Q->y) == LTC_MP_EQ || mp_cmp(P->y, t1) == LTC_MP_EQ)) {
+        mp_clear_multi(t1, t2, x, y, z, NULL);
+        return ltc_ecc_projective_dbl_point(P, R, modulus, mp);
+   }
+
+   if ((err = mp_copy(P->x, x)) != CRYPT_OK)                                   { goto done; }
+   if ((err = mp_copy(P->y, y)) != CRYPT_OK)                                   { goto done; }
+   if ((err = mp_copy(P->z, z)) != CRYPT_OK)                                   { goto done; }
+
+   /* if Z is one then these are no-operations */
+      /* T1 = Z' * Z' */
+      if ((err = mp_sqr(Q->z, t1)) != CRYPT_OK)                                { goto done; }
+      if ((err = mp_montgomery_reduce(t1, modulus, mp)) != CRYPT_OK)           { goto done; }
+      /* X = X * T1 */
+      if ((err = mp_mul(t1, x, x)) != CRYPT_OK)                                { goto done; }
+      if ((err = mp_montgomery_reduce(x, modulus, mp)) != CRYPT_OK)            { goto done; }
+      /* T1 = Z' * T1 */
+      if ((err = mp_mul(Q->z, t1, t1)) != CRYPT_OK)                            { goto done; }
+      if ((err = mp_montgomery_reduce(t1, modulus, mp)) != CRYPT_OK)           { goto done; }
+      /* Y = Y * T1 */
+      if ((err = mp_mul(t1, y, y)) != CRYPT_OK)                                { goto done; }
+      if ((err = mp_montgomery_reduce(y, modulus, mp)) != CRYPT_OK)            { goto done; }
+   
+   /* T1 = Z*Z */
+   if ((err = mp_sqr(z, t1)) != CRYPT_OK)                                      { goto done; }
+   if ((err = mp_montgomery_reduce(t1, modulus, mp)) != CRYPT_OK)              { goto done; }
+   /* T2 = X' * T1 */
+   if ((err = mp_mul(Q->x, t1, t2)) != CRYPT_OK)                               { goto done; }
+   if ((err = mp_montgomery_reduce(t2, modulus, mp)) != CRYPT_OK)              { goto done; }
+   /* T1 = Z * T1 */
+   if ((err = mp_mul(z, t1, t1)) != CRYPT_OK)                                  { goto done; }
+   if ((err = mp_montgomery_reduce(t1, modulus, mp)) != CRYPT_OK)              { goto done; }
+   /* T1 = Y' * T1 */
+   if ((err = mp_mul(Q->y, t1, t1)) != CRYPT_OK)                               { goto done; }
+   if ((err = mp_montgomery_reduce(t1, modulus, mp)) != CRYPT_OK)              { goto done; }
+
+   /* Y = Y - T1 */
+   if ((err = mp_sub(y, t1, y)) != CRYPT_OK)                                   { goto done; }
+   if (mp_cmp_d(y, 0) == LTC_MP_LT) {
+      if ((err = mp_add(y, modulus, y)) != CRYPT_OK)                           { goto done; }
+   }
+   /* T1 = 2T1 */
+   if ((err = mp_add(t1, t1, t1)) != CRYPT_OK)                                 { goto done; }
+   if (mp_cmp(t1, modulus) != LTC_MP_LT) {
+      if ((err = mp_sub(t1, modulus, t1)) != CRYPT_OK)                         { goto done; }
+   }
+   /* T1 = Y + T1 */
+   if ((err = mp_add(t1, y, t1)) != CRYPT_OK)                                  { goto done; }
+   if (mp_cmp(t1, modulus) != LTC_MP_LT) {
+      if ((err = mp_sub(t1, modulus, t1)) != CRYPT_OK)                         { goto done; }
+   }
+   /* X = X - T2 */
+   if ((err = mp_sub(x, t2, x)) != CRYPT_OK)                                   { goto done; }
+   if (mp_cmp_d(x, 0) == LTC_MP_LT) {
+      if ((err = mp_add(x, modulus, x)) != CRYPT_OK)                           { goto done; }
+   }
+   /* T2 = 2T2 */
+   if ((err = mp_add(t2, t2, t2)) != CRYPT_OK)                                 { goto done; }
+   if (mp_cmp(t2, modulus) != LTC_MP_LT) {
+      if ((err = mp_sub(t2, modulus, t2)) != CRYPT_OK)                         { goto done; }
+   }
+   /* T2 = X + T2 */
+   if ((err = mp_add(t2, x, t2)) != CRYPT_OK)                                  { goto done; }
+   if (mp_cmp(t2, modulus) != LTC_MP_LT) {
+      if ((err = mp_sub(t2, modulus, t2)) != CRYPT_OK)                         { goto done; }
+   }
+
+   /* if Z' != 1 */
+      /* Z = Z * Z' */
+      if ((err = mp_mul(z, Q->z, z)) != CRYPT_OK)                              { goto done; }
+      if ((err = mp_montgomery_reduce(z, modulus, mp)) != CRYPT_OK)            { goto done; }
+   
+   /* Z = Z * X */
+   if ((err = mp_mul(z, x, z)) != CRYPT_OK)                                    { goto done; }
+   if ((err = mp_montgomery_reduce(z, modulus, mp)) != CRYPT_OK)               { goto done; }
+
+   /* T1 = T1 * X  */
+   if ((err = mp_mul(t1, x, t1)) != CRYPT_OK)                                  { goto done; }
+   if ((err = mp_montgomery_reduce(t1, modulus, mp)) != CRYPT_OK)              { goto done; }
+   /* X = X * X */
+   if ((err = mp_sqr(x, x)) != CRYPT_OK)                                       { goto done; }
+   if ((err = mp_montgomery_reduce(x, modulus, mp)) != CRYPT_OK)               { goto done; }
+   /* T2 = T2 * x */
+   if ((err = mp_mul(t2, x, t2)) != CRYPT_OK)                                  { goto done; }
+   if ((err = mp_montgomery_reduce(t2, modulus, mp)) != CRYPT_OK)              { goto done; }
+   /* T1 = T1 * X  */
+   if ((err = mp_mul(t1, x, t1)) != CRYPT_OK)                                  { goto done; }
+   if ((err = mp_montgomery_reduce(t1, modulus, mp)) != CRYPT_OK)              { goto done; }
+ 
+   /* X = Y*Y */
+   if ((err = mp_sqr(y, x)) != CRYPT_OK)                                       { goto done; }
+   if ((err = mp_montgomery_reduce(x, modulus, mp)) != CRYPT_OK)               { goto done; }
+   /* X = X - T2 */
+   if ((err = mp_sub(x, t2, x)) != CRYPT_OK)                                   { goto done; }
+   if (mp_cmp_d(x, 0) == LTC_MP_LT) {
+      if ((err = mp_add(x, modulus, x)) != CRYPT_OK)                           { goto done; }
+   }
+
+   /* T2 = T2 - X */
+   if ((err = mp_sub(t2, x, t2)) != CRYPT_OK)                                  { goto done; }
+   if (mp_cmp_d(t2, 0) == LTC_MP_LT) {
+      if ((err = mp_add(t2, modulus, t2)) != CRYPT_OK)                         { goto done; }
+   } 
+   /* T2 = T2 - X */
+   if ((err = mp_sub(t2, x, t2)) != CRYPT_OK)                                  { goto done; }
+   if (mp_cmp_d(t2, 0) == LTC_MP_LT) {
+      if ((err = mp_add(t2, modulus, t2)) != CRYPT_OK)                         { goto done; }
+   }
+   /* T2 = T2 * Y */
+   if ((err = mp_mul(t2, y, t2)) != CRYPT_OK)                                  { goto done; }
+   if ((err = mp_montgomery_reduce(t2, modulus, mp)) != CRYPT_OK)              { goto done; }
+   /* Y = T2 - T1 */
+   if ((err = mp_sub(t2, t1, y)) != CRYPT_OK)                                  { goto done; }
+   if (mp_cmp_d(y, 0) == LTC_MP_LT) {
+      if ((err = mp_add(y, modulus, y)) != CRYPT_OK)                           { goto done; }
+   }
+   /* Y = Y/2 */
+   if (mp_isodd(y)) {
+      if ((err = mp_add(y, modulus, y)) != CRYPT_OK)                           { goto done; }
+   }
+   if ((err = mp_div_2(y, y)) != CRYPT_OK)                                     { goto done; }
+
+   if ((err = mp_copy(x, R->x)) != CRYPT_OK)                                   { goto done; }
+   if ((err = mp_copy(y, R->y)) != CRYPT_OK)                                   { goto done; }
+   if ((err = mp_copy(z, R->z)) != CRYPT_OK)                                   { goto done; }
+
+   err = CRYPT_OK;
+   goto done;
+done:
+   mp_clear_multi(t1, t2, x, y, z, NULL);
+   return err;
+}
+
+#endif
+
+/* $Source$ */
+/* $Revision$ */
+/* $Date$ */
+
diff --git a/src/pk/ecc/ltc_ecc_projective_dbl_point.c b/src/pk/ecc/ltc_ecc_projective_dbl_point.c
new file mode 100644
index 0000000..b015ee4
--- /dev/null
+++ b/src/pk/ecc/ltc_ecc_projective_dbl_point.c
@@ -0,0 +1,147 @@
+/* LibTomCrypt, modular cryptographic library -- Tom St Denis
+ *
+ * LibTomCrypt is a library that provides various cryptographic
+ * algorithms in a highly modular and flexible manner.
+ *
+ * The library is free for all purposes without any express
+ * guarantee it works.
+ *
+ * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
+ */
+
+/* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b
+ *
+ * All curves taken from NIST recommendation paper of July 1999
+ * Available at http://csrc.nist.gov/cryptval/dss.htm
+ */
+#include "tomcrypt.h"
+
+/**
+  @file ltc_ecc_projective_dbl_point.c
+  ECC Crypto, Tom St Denis
+*/  
+
+#ifdef MECC
+/**
+   Double an ECC point
+   @param P   The point to double
+   @param R   [out] The destination of the double
+   @param modulus  The modulus of the field the ECC curve is in
+   @param mp       The "b" value from montgomery_setup()
+   @return CRYPT_OK on success
+*/
+int ltc_ecc_projective_dbl_point(ecc_point *P, ecc_point *R, void *modulus, void *mp)
+{
+   void *t1, *t2;
+   int err;
+
+   LTC_ARGCHK(P       != NULL);
+   LTC_ARGCHK(R       != NULL);
+   LTC_ARGCHK(modulus != NULL);
+   LTC_ARGCHK(mp      != NULL);
+
+   if ((err = mp_init_multi(&t1, &t2, NULL)) != CRYPT_OK) {
+      return err;
+   }
+
+   if (P != R) {
+      if ((err = mp_copy(P->x, R->x)) != CRYPT_OK)                                   { goto done; }
+      if ((err = mp_copy(P->y, R->y)) != CRYPT_OK)                                   { goto done; }
+      if ((err = mp_copy(P->z, R->z)) != CRYPT_OK)                                   { goto done; }
+   }
+
+   /* t1 = Z * Z */
+   if ((err = mp_sqr(R->z, t1)) != CRYPT_OK)                                      { goto done; }
+   if ((err = mp_montgomery_reduce(t1, modulus, mp)) != CRYPT_OK)                 { goto done; }
+   /* Z = Y * Z */
+   if ((err = mp_mul(R->z, R->y, R->z)) != CRYPT_OK)                              { goto done; }
+   if ((err = mp_montgomery_reduce(R->z, modulus, mp)) != CRYPT_OK)               { goto done; }
+   /* Z = 2Z */
+   if ((err = mp_add(R->z, R->z, R->z)) != CRYPT_OK)                              { goto done; }
+   if (mp_cmp(R->z, modulus) != LTC_MP_LT) {
+      if ((err = mp_sub(R->z, modulus, R->z)) != CRYPT_OK)                        { goto done; }
+   }
+   
+   /* T2 = X - T1 */
+   if ((err = mp_sub(R->x, t1, t2)) != CRYPT_OK)                                  { goto done; }
+   if (mp_cmp_d(t2, 0) == LTC_MP_LT) {
+      if ((err = mp_add(t2, modulus, t2)) != CRYPT_OK)                            { goto done; }
+   }
+   /* T1 = X + T1 */
+   if ((err = mp_add(t1, R->x, t1)) != CRYPT_OK)                                  { goto done; }
+   if (mp_cmp(t1, modulus) != LTC_MP_LT) {
+      if ((err = mp_sub(t1, modulus, t1)) != CRYPT_OK)                            { goto done; }
+   }
+   /* T2 = T1 * T2 */
+   if ((err = mp_mul(t1, t2, t2)) != CRYPT_OK)                                    { goto done; }
+   if ((err = mp_montgomery_reduce(t2, modulus, mp)) != CRYPT_OK)                 { goto done; }
+   /* T1 = 2T2 */
+   if ((err = mp_add(t2, t2, t1)) != CRYPT_OK)                                    { goto done; }
+   if (mp_cmp(t1, modulus) != LTC_MP_LT) {
+      if ((err = mp_sub(t1, modulus, t1)) != CRYPT_OK)                            { goto done; }
+   }
+   /* T1 = T1 + T2 */
+   if ((err = mp_add(t1, t2, t1)) != CRYPT_OK)                                    { goto done; }
+   if (mp_cmp(t1, modulus) != LTC_MP_LT) {
+      if ((err = mp_sub(t1, modulus, t1)) != CRYPT_OK)                            { goto done; }
+   }
+
+   /* Y = 2Y */
+   if ((err = mp_add(R->y, R->y, R->y)) != CRYPT_OK)                              { goto done; }
+   if (mp_cmp(R->y, modulus) != LTC_MP_LT) {
+      if ((err = mp_sub(R->y, modulus, R->y)) != CRYPT_OK)                        { goto done; }
+   }
+   /* Y = Y * Y */
+   if ((err = mp_sqr(R->y, R->y)) != CRYPT_OK)                                    { goto done; }
+   if ((err = mp_montgomery_reduce(R->y, modulus, mp)) != CRYPT_OK)               { goto done; }
+   /* T2 = Y * Y */
+   if ((err = mp_sqr(R->y, t2)) != CRYPT_OK)                                      { goto done; }
+   if ((err = mp_montgomery_reduce(t2, modulus, mp)) != CRYPT_OK)                 { goto done; }
+   /* T2 = T2/2 */
+   if (mp_isodd(t2)) {
+      if ((err = mp_add(t2, modulus, t2)) != CRYPT_OK)                            { goto done; }
+   }
+   if ((err = mp_div_2(t2, t2)) != CRYPT_OK)                                      { goto done; }
+   /* Y = Y * X */
+   if ((err = mp_mul(R->y, R->x, R->y)) != CRYPT_OK)                              { goto done; }
+   if ((err = mp_montgomery_reduce(R->y, modulus, mp)) != CRYPT_OK)               { goto done; }
+
+   /* X  = T1 * T1 */
+   if ((err = mp_sqr(t1, R->x)) != CRYPT_OK)                                      { goto done; }
+   if ((err = mp_montgomery_reduce(R->x, modulus, mp)) != CRYPT_OK)               { goto done; }
+   /* X = X - Y */
+   if ((err = mp_sub(R->x, R->y, R->x)) != CRYPT_OK)                              { goto done; }
+   if (mp_cmp_d(R->x, 0) == LTC_MP_LT) {
+      if ((err = mp_add(R->x, modulus, R->x)) != CRYPT_OK)                        { goto done; }
+   }
+   /* X = X - Y */
+   if ((err = mp_sub(R->x, R->y, R->x)) != CRYPT_OK)                              { goto done; }
+   if (mp_cmp_d(R->x, 0) == LTC_MP_LT) {
+      if ((err = mp_add(R->x, modulus, R->x)) != CRYPT_OK)                        { goto done; }
+   }
+
+   /* Y = Y - X */     
+   if ((err = mp_sub(R->y, R->x, R->y)) != CRYPT_OK)                              { goto done; }
+   if (mp_cmp_d(R->y, 0) == LTC_MP_LT) {
+      if ((err = mp_add(R->y, modulus, R->y)) != CRYPT_OK)                        { goto done; }
+   }
+   /* Y = Y * T1 */
+   if ((err = mp_mul(R->y, t1, R->y)) != CRYPT_OK)                                { goto done; }
+   if ((err = mp_montgomery_reduce(R->y, modulus, mp)) != CRYPT_OK)               { goto done; }
+   /* Y = Y - T2 */
+   if ((err = mp_sub(R->y, t2, R->y)) != CRYPT_OK)                                { goto done; }
+   if (mp_cmp_d(R->y, 0) == LTC_MP_LT) {
+      if ((err = mp_add(R->y, modulus, R->y)) != CRYPT_OK)                        { goto done; }
+   }
+ 
+   err = CRYPT_OK;
+   goto done;
+done:
+   mp_clear_multi(t1, t2, NULL);
+   return err;
+}
+#endif
+/* $Source$ */
+/* $Revision$ */
+/* $Date$ */
+
diff --git a/src/pk/katja/katja_decrypt_key.c b/src/pk/katja/katja_decrypt_key.c
new file mode 100644
index 0000000..1b2aec4
--- /dev/null
+++ b/src/pk/katja/katja_decrypt_key.c
@@ -0,0 +1,105 @@
+/* LibTomCrypt, modular cryptographic library -- Tom St Denis
+ *
+ * LibTomCrypt is a library that provides various cryptographic
+ * algorithms in a highly modular and flexible manner.
+ *
+ * The library is free for all purposes without any express
+ * guarantee it works.
+ *
+ * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
+ */
+#include "tomcrypt.h"
+
+/**
+  @file katja_decrypt_key.c
+  Katja PKCS #1 OAEP Decryption, Tom St Denis
+*/  
+
+#ifdef MKAT
+
+/**
+   (PKCS #1 v2.0) decrypt then OAEP depad  
+   @param in          The ciphertext
+   @param inlen       The length of the ciphertext (octets)
+   @param out         [out] The plaintext
+   @param outlen      [in/out] The max size and resulting size of the plaintext (octets)
+   @param lparam      The system "lparam" value
+   @param lparamlen   The length of the lparam value (octets)
+   @param hash_idx    The index of the hash desired
+   @param stat        [out] Result of the decryption, 1==valid, 0==invalid
+   @param key         The corresponding private Katja key
+   @return CRYPT_OK if succcessul (even if invalid)
+*/
+int katja_decrypt_key(const unsigned char *in,       unsigned long  inlen,
+                          unsigned char *out,      unsigned long *outlen, 
+                    const unsigned char *lparam,   unsigned long  lparamlen,
+                          int            hash_idx, int           *stat,
+                          katja_key       *key)
+{
+  unsigned long modulus_bitlen, modulus_bytelen, x;
+  int           err;
+  unsigned char *tmp;
+  
+  LTC_ARGCHK(out    != NULL);
+  LTC_ARGCHK(outlen != NULL);
+  LTC_ARGCHK(key    != NULL);
+  LTC_ARGCHK(stat   != NULL);
+
+  /* default to invalid */
+  *stat = 0;
+
+  /* valid hash ? */
+  if ((err = hash_is_valid(hash_idx)) != CRYPT_OK) {
+     return err;
+  }
+  
+  /* get modulus len in bits */
+  modulus_bitlen = mp_count_bits( (key->N));
+
+  /* payload is upto pq, so we know q is 1/3rd the size of N and therefore pq is 2/3th the size */
+ modulus_bitlen = ((modulus_bitlen << 1) / 3);
+
+  /* round down to next byte */
+  modulus_bitlen -= (modulus_bitlen & 7) + 8;
+
+  /* outlen must be at least the size of the modulus */
+  modulus_bytelen = mp_unsigned_bin_size( (key->N));
+  if (modulus_bytelen != inlen) {
+     return CRYPT_INVALID_PACKET;
+  }
+
+  /* allocate ram */
+  tmp = XMALLOC(inlen);
+  if (tmp == NULL) {
+     return CRYPT_MEM;
+  }
+
+  /* rsa decode the packet */
+  x = inlen;
+  if ((err = katja_exptmod(in, inlen, tmp, &x, PK_PRIVATE, key)) != CRYPT_OK) {
+     XFREE(tmp);
+     return err;
+  }
+
+  /* shift right by modulus_bytelen - modulus_bitlen/8  bytes */
+  for (x = 0; x < (modulus_bitlen >> 3); x++) {
+     tmp[x] = tmp[x+(modulus_bytelen-(modulus_bitlen>>3))];
+  }
+
+  /* now OAEP decode the packet */
+  err = pkcs_1_oaep_decode(tmp, x, lparam, lparamlen, modulus_bitlen, hash_idx,
+                           out, outlen, stat);
+
+  XFREE(tmp);
+  return err;
+}
+
+#endif /* MRSA */
+
+
+
+
+
+/* $Source$ */
+/* $Revision$ */
+/* $Date$ */
diff --git a/src/pk/katja/katja_encrypt_key.c b/src/pk/katja/katja_encrypt_key.c
new file mode 100644
index 0000000..b423c50
--- /dev/null
+++ b/src/pk/katja/katja_encrypt_key.c
@@ -0,0 +1,86 @@
+/* LibTomCrypt, modular cryptographic library -- Tom St Denis
+ *
+ * LibTomCrypt is a library that provides various cryptographic
+ * algorithms in a highly modular and flexible manner.
+ *
+ * The library is free for all purposes without any express
+ * guarantee it works.
+ *
+ * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
+ */
+#include "tomcrypt.h"
+
+/**
+  @file katja_encrypt_key.c
+  Katja PKCS-style OAEP encryption, Tom St Denis
+*/  
+
+#ifdef MKAT
+
+/**
+    (PKCS #1 v2.0) OAEP pad then encrypt
+    @param in          The plaintext
+    @param inlen       The length of the plaintext (octets)
+    @param out         [out] The ciphertext
+    @param outlen      [in/out] The max size and resulting size of the ciphertext
+    @param lparam      The system "lparam" for the encryption
+    @param lparamlen   The length of lparam (octets)
+    @param prng        An active PRNG
+    @param prng_idx    The index of the desired prng
+    @param hash_idx    The index of the desired hash
+    @param key         The Katja key to encrypt to
+    @return CRYPT_OK if successful
+*/    
+int katja_encrypt_key(const unsigned char *in,     unsigned long inlen,
+                          unsigned char *out,    unsigned long *outlen,
+                    const unsigned char *lparam, unsigned long lparamlen,
+                    prng_state *prng, int prng_idx, int hash_idx, katja_key *key)
+{
+  unsigned long modulus_bitlen, modulus_bytelen, x;
+  int           err;
+  
+  LTC_ARGCHK(in     != NULL);
+  LTC_ARGCHK(out    != NULL);
+  LTC_ARGCHK(outlen != NULL);
+  LTC_ARGCHK(key    != NULL);
+  
+  /* valid prng and hash ? */
+  if ((err = prng_is_valid(prng_idx)) != CRYPT_OK) {
+     return err;
+  }
+  if ((err = hash_is_valid(hash_idx)) != CRYPT_OK) {
+     return err;
+  }
+  
+  /* get modulus len in bits */
+  modulus_bitlen = mp_count_bits((key->N));
+
+  /* payload is upto pq, so we know q is 1/3rd the size of N and therefore pq is 2/3th the size */
+  modulus_bitlen = ((modulus_bitlen << 1) / 3);
+
+  /* round down to next byte */
+  modulus_bitlen -= (modulus_bitlen & 7) + 8;
+
+  /* outlen must be at least the size of the modulus */
+  modulus_bytelen = mp_unsigned_bin_size((key->N));
+  if (modulus_bytelen > *outlen) {
+     return CRYPT_BUFFER_OVERFLOW;
+  }
+
+  /* OAEP pad the key */
+  x = *outlen;
+  if ((err = pkcs_1_oaep_encode(in, inlen, lparam, 
+                                lparamlen, modulus_bitlen, prng, prng_idx, hash_idx, 
+                                out, &x)) != CRYPT_OK) {
+     return err;
+  }                          
+
+  /* Katja exptmod the OAEP pad */
+  return katja_exptmod(out, x, out, outlen, PK_PUBLIC, key);
+}
+
+#endif /* MRSA */
+
+/* $Source$ */
+/* $Revision$ */
+/* $Date$ */
diff --git a/src/pk/katja/katja_export.c b/src/pk/katja/katja_export.c
new file mode 100644
index 0000000..ccddb30
--- /dev/null
+++ b/src/pk/katja/katja_export.c
@@ -0,0 +1,75 @@
+/* LibTomCrypt, modular cryptographic library -- Tom St Denis
+ *
+ * LibTomCrypt is a library that provides various cryptographic
+ * algorithms in a highly modular and flexible manner.
+ *
+ * The library is free for all purposes without any express
+ * guarantee it works.
+ *
+ * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
+ */
+#include "tomcrypt.h"
+
+/**
+  @file katja_export.c
+  Export Katja PKCS-style keys, Tom St Denis
+*/  
+
+#ifdef MKAT
+
+/**
+    This will export either an KatjaPublicKey or KatjaPrivateKey
+    @param out       [out] Destination of the packet
+    @param outlen    [in/out] The max size and resulting size of the packet
+    @param type      The type of exported key (PK_PRIVATE or PK_PUBLIC)
+    @param key       The Katja key to export
+    @return CRYPT_OK if successful
+*/    
+int katja_export(unsigned char *out, unsigned long *outlen, int type, katja_key *key)
+{
+   int           err;
+   unsigned long zero=0;
+
+   LTC_ARGCHK(out    != NULL);
+   LTC_ARGCHK(outlen != NULL);
+   LTC_ARGCHK(key    != NULL);
+
+   /* type valid? */
+   if (!(key->type == PK_PRIVATE) && (type == PK_PRIVATE)) {
+      return CRYPT_PK_INVALID_TYPE;
+   }
+
+   if (type == PK_PRIVATE) {
+      /* private key */
+      /* output is 
+            Version, n, d, p, q, d mod (p-1), d mod (q - 1), 1/q mod p, pq
+       */
+      if ((err = der_encode_sequence_multi(out, outlen, 
+                          LTC_ASN1_SHORT_INTEGER, 1UL, &zero, 
+                          LTC_ASN1_INTEGER, 1UL,  key->N, 
+                          LTC_ASN1_INTEGER, 1UL,  key->d, 
+                          LTC_ASN1_INTEGER, 1UL,  key->p, 
+                          LTC_ASN1_INTEGER, 1UL,  key->q, 
+                          LTC_ASN1_INTEGER, 1UL,  key->dP,
+                          LTC_ASN1_INTEGER, 1UL,  key->dQ, 
+                          LTC_ASN1_INTEGER, 1UL,  key->qP, 
+                          LTC_ASN1_INTEGER, 1UL,  key->pq, 
+                          LTC_ASN1_EOL,     0UL, NULL)) != CRYPT_OK) {
+         return err;
+      }
+ 
+      /* clear zero and return */
+      return CRYPT_OK;
+   } else {
+      /* public key */
+      return der_encode_sequence_multi(out, outlen, 
+                                 LTC_ASN1_INTEGER, 1UL, key->N, 
+                                 LTC_ASN1_EOL,     0UL, NULL);
+   }
+}
+
+#endif /* MRSA */
+
+/* $Source$ */
+/* $Revision$ */
+/* $Date$ */
diff --git a/src/pk/katja/katja_exptmod.c b/src/pk/katja/katja_exptmod.c
new file mode 100644
index 0000000..e3cc7f1
--- /dev/null
+++ b/src/pk/katja/katja_exptmod.c
@@ -0,0 +1,114 @@
+/* LibTomCrypt, modular cryptographic library -- Tom St Denis
+ *
+ * LibTomCrypt is a library that provides various cryptographic
+ * algorithms in a highly modular and flexible manner.
+ *
+ * The library is free for all purposes without any express
+ * guarantee it works.
+ *
+ * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
+ */
+#include "tomcrypt.h"
+
+/**
+  @file katja_exptmod.c
+  Katja PKCS-style exptmod, Tom St Denis
+*/  
+
+#ifdef MKAT
+
+/** 
+   Compute an RSA modular exponentiation 
+   @param in         The input data to send into RSA
+   @param inlen      The length of the input (octets)
+   @param out        [out] The destination 
+   @param outlen     [in/out] The max size and resulting size of the output
+   @param which      Which exponent to use, e.g. PK_PRIVATE or PK_PUBLIC
+   @param key        The RSA key to use 
+   @return CRYPT_OK if successful
+*/   
+int katja_exptmod(const unsigned char *in,   unsigned long inlen,
+                        unsigned char *out,  unsigned long *outlen, int which,
+                        katja_key *key)
+{
+   void         *tmp, *tmpa, *tmpb;
+   unsigned long x;
+   int           err;
+
+   LTC_ARGCHK(in     != NULL);
+   LTC_ARGCHK(out    != NULL);
+   LTC_ARGCHK(outlen != NULL);
+   LTC_ARGCHK(key    != NULL);
+  
+   /* is the key of the right type for the operation? */
+   if (which == PK_PRIVATE && (key->type != PK_PRIVATE)) {
+      return CRYPT_PK_NOT_PRIVATE;
+   }
+
+   /* must be a private or public operation */
+   if (which != PK_PRIVATE && which != PK_PUBLIC) {
+      return CRYPT_PK_INVALID_TYPE;
+   }
+
+   /* init and copy into tmp */
+   if ((err = mp_init_multi(&tmp, &tmpa, &tmpb, NULL)) != CRYPT_OK)                                    { return err; }
+   if ((err = mp_read_unsigned_bin(tmp, (unsigned char *)in, (int)inlen)) != CRYPT_OK)                 { goto error; }
+
+   /* sanity check on the input */
+   if (mp_cmp(key->N, tmp) == LTC_MP_LT) {
+      err = CRYPT_PK_INVALID_SIZE;
+      goto done;
+   }
+
+   /* are we using the private exponent and is the key optimized? */
+   if (which == PK_PRIVATE) {
+      /* tmpa = tmp^dP mod p */
+      if ((err = mp_exptmod(tmp, key->dP, key->p, tmpa)) != CRYPT_OK)                               { goto error; }
+
+      /* tmpb = tmp^dQ mod q */
+      if ((err = mp_exptmod(tmp, key->dQ, key->q, tmpb)) != CRYPT_OK)                               { goto error; }
+
+      /* tmp = (tmpa - tmpb) * qInv (mod p) */
+      if ((err = mp_sub(tmpa, tmpb, tmp)) != CRYPT_OK)                                              { goto error; }
+      if ((err = mp_mulmod(tmp, key->qP, key->p, tmp)) != CRYPT_OK)                                 { goto error; }
+
+      /* tmp = tmpb + q * tmp */
+      if ((err = mp_mul(tmp, key->q, tmp)) != CRYPT_OK)                                             { goto error; }
+      if ((err = mp_add(tmp, tmpb, tmp)) != CRYPT_OK)                                               { goto error; }
+   } else {
+      /* exptmod it */
+      if ((err = mp_exptmod(tmp, key->N, key->N, tmp)) != CRYPT_OK)                                 { goto error; }
+   }
+
+   /* read it back */
+   x = (unsigned long)mp_unsigned_bin_size(key->N);
+   if (x > *outlen) {
+      err = CRYPT_BUFFER_OVERFLOW;
+      goto done;
+   }
+
+   /* this should never happen ... */
+   if (mp_unsigned_bin_size(tmp) > mp_unsigned_bin_size(key->N)) {
+      err = CRYPT_ERROR;
+      goto done;
+   }
+   *outlen = x;
+
+   /* convert it */
+   zeromem(out, x);
+   if ((err = mp_to_unsigned_bin(tmp, out+(x-mp_unsigned_bin_size(tmp)))) != CRYPT_OK)               { goto error; }
+
+   /* clean up and return */
+   err = CRYPT_OK;
+   goto done;
+error:
+done:
+   mp_clear_multi(tmp, tmpa, tmpb, NULL);
+   return err;
+}
+
+#endif
+
+/* $Source$ */
+/* $Revision$ */
+/* $Date$ */
diff --git a/src/pk/katja/katja_free.c b/src/pk/katja/katja_free.c
new file mode 100644
index 0000000..b56bdff
--- /dev/null
+++ b/src/pk/katja/katja_free.c
@@ -0,0 +1,35 @@
+/* LibTomCrypt, modular cryptographic library -- Tom St Denis
+ *
+ * LibTomCrypt is a library that provides various cryptographic
+ * algorithms in a highly modular and flexible manner.
+ *
+ * The library is free for all purposes without any express
+ * guarantee it works.
+ *
+ * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
+ */
+#include "tomcrypt.h"
+
+/**
+  @file katja_free.c
+  Free an Katja key, Tom St Denis
+*/  
+
+#ifdef MKAT
+
+/**
+  Free an Katja key from memory
+  @param key   The RSA key to free
+*/
+void katja_free(katja_key *key)
+{
+   LTC_ARGCHK(key != NULL);
+   mp_clear_multi( key->d,  key->N,  key->dQ,  key->dP,
+                   key->qP,  key->p,  key->q, key->pq, NULL);
+}
+
+#endif
+
+/* $Source$ */
+/* $Revision$ */
+/* $Date$ */
diff --git a/src/pk/katja/katja_import.c b/src/pk/katja/katja_import.c
new file mode 100644
index 0000000..c7fe063
--- /dev/null
+++ b/src/pk/katja/katja_import.c
@@ -0,0 +1,81 @@
+/* LibTomCrypt, modular cryptographic library -- Tom St Denis
+ *
+ * LibTomCrypt is a library that provides various cryptographic
+ * algorithms in a highly modular and flexible manner.
+ *
+ * The library is free for all purposes without any express
+ * guarantee it works.
+ *
+ * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
+ */
+#include "tomcrypt.h"
+
+/**
+  @file katja_import.c
+  Import a PKCS-style Katja key, Tom St Denis
+*/  
+
+#ifdef MKAT
+
+/**
+  Import an KatjaPublicKey or KatjaPrivateKey [two-prime only, only support >= 1024-bit keys, defined in PKCS #1 v2.1]
+  @param in      The packet to import from
+  @param inlen   It's length (octets)
+  @param key     [out] Destination for newly imported key
+  @return CRYPT_OK if successful, upon error allocated memory is freed
+*/
+int katja_import(const unsigned char *in, unsigned long inlen, katja_key *key)
+{
+   int           err;
+   void         *zero;
+
+   LTC_ARGCHK(in  != NULL);
+   LTC_ARGCHK(key != NULL);
+   LTC_ARGCHK(ltc_mp.name != NULL);
+
+   /* init key */
+   if ((err = mp_init_multi(&zero, &key->d, &key->N, &key->dQ, 
+                            &key->dP, &key->qP, &key->p, &key->q, &key->pq, NULL)) != CRYPT_OK) {
+      return err;
+   }
+
+   if ((err = der_decode_sequence_multi(in, inlen, 
+                                  LTC_ASN1_INTEGER, 1UL, key->N, 
+                                  LTC_ASN1_EOL,     0UL, NULL)) != CRYPT_OK) {
+      goto LBL_ERR;
+   }
+
+   if (mp_cmp_d(key->N, 0) == LTC_MP_EQ) {
+      /* it's a private key */
+      if ((err = der_decode_sequence_multi(in, inlen, 
+                          LTC_ASN1_INTEGER, 1UL, zero, 
+                          LTC_ASN1_INTEGER, 1UL, key->N, 
+                          LTC_ASN1_INTEGER, 1UL, key->d, 
+                          LTC_ASN1_INTEGER, 1UL, key->p, 
+                          LTC_ASN1_INTEGER, 1UL, key->q, 
+                          LTC_ASN1_INTEGER, 1UL, key->dP,
+                          LTC_ASN1_INTEGER, 1UL, key->dQ, 
+                          LTC_ASN1_INTEGER, 1UL, key->qP, 
+                          LTC_ASN1_INTEGER, 1UL, key->pq, 
+                          LTC_ASN1_EOL,     0UL, NULL)) != CRYPT_OK) {
+         goto LBL_ERR;
+      }
+      key->type = PK_PRIVATE;
+   } else {
+      /* public we have N */
+      key->type = PK_PUBLIC;
+   }
+   mp_clear(zero);
+   return CRYPT_OK;
+LBL_ERR:
+   mp_clear_multi(zero,    key->d, key->N, key->dQ, key->dP,
+                  key->qP, key->p, key->q, key->pq, NULL);
+   return err;
+}
+
+#endif /* MRSA */
+
+
+/* $Source$ */
+/* $Revision$ */
+/* $Date$ */
diff --git a/src/pk/katja/katja_make_key.c b/src/pk/katja/katja_make_key.c
new file mode 100644
index 0000000..350dfe5
--- /dev/null
+++ b/src/pk/katja/katja_make_key.c
@@ -0,0 +1,101 @@
+/* LibTomCrypt, modular cryptographic library -- Tom St Denis
+ *
+ * LibTomCrypt is a library that provides various cryptographic
+ * algorithms in a highly modular and flexible manner.
+ *
+ * The library is free for all purposes without any express
+ * guarantee it works.
+ *
+ * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org
+ */
+#include "tomcrypt.h"
+
+/**
+  @file katja_make_key.c
+  Katja key generation, Tom St Denis
+*/  
+
+#ifdef MKAT
+
+/** 
+   Create a Katja key
+   @param prng     An active PRNG state
+   @param wprng    The index of the PRNG desired
+   @param size     The size of the modulus (key size) desired (octets)
+   @param key      [out] Destination of a newly created private key pair
+   @return CRYPT_OK if successful, upon error all allocated ram is freed
+*/
+int katja_make_key(prng_state *prng, int wprng, int size, katja_key *key)
+{
+   void *p, *q, *tmp1, *tmp2;
+   int    err;
+  
+   LTC_ARGCHK(key != NULL);
+   LTC_ARGCHK(ltc_mp.name != NULL);
+
+   if ((size < (MIN_KAT_SIZE/8)) || (size > (MAX_KAT_SIZE/8))) {
+      return CRYPT_INVALID_KEYSIZE;
+   }
+
+   if ((err = prng_is_valid(wprng)) != CRYPT_OK) {
+      return err;
+   }
+
+   if ((err = mp_init_multi(&p, &q, &tmp1, &tmp2, NULL)) != CRYPT_OK) {
+      return err;
+   }
+
+   /* divide size by three  */
+   size   = (((size << 3) / 3) + 7) >> 3;
+
+   /* make prime "q" (we negate size to make q == 3 mod 4) */
+   if ((err = rand_prime(q, -size, prng, wprng)) != CRYPT_OK)      { goto done; }
+   if ((err = mp_sub_d(q, 1, tmp1)) != CRYPT_OK)                   { goto done; }
+
+   /* make prime "p" */
+   do {
+      if ((err = rand_prime(p, size+1, prng, wprng)) != CRYPT_OK)  { goto done; }
+      if ((err = mp_gcd(p, tmp1, tmp2)) != CRYPT_OK)               { goto done; }
+   } while (mp_cmp_d(tmp2, 1) != LTC_MP_EQ);
+
+   /* make key */
+   if ((err = mp_init_multi(&key->d, &key->N, &key->dQ, &key->dP,
+                     &key->qP, &key->p, &key->q, &key->pq, NULL)) != CRYPT_OK) {
+      goto error;
+   }
+
+   /* n=p^2q and 1/n mod pq */
+   if ((err = mp_copy( p,  key->p)) != CRYPT_OK)                       { goto error2; }
+   if ((err = mp_copy( q,  key->q)) != CRYPT_OK)                       { goto error2; }
+   if ((err = mp_mul(key->p, key->q, key->pq)) != CRYPT_OK)            { goto error2; } /* tmp1 = pq  */
+   if ((err = mp_mul(key->pq, key->p, key->N)) != CRYPT_OK)            { goto error2; } /* N = p^2q   */  
+   if ((err = mp_sub_d( p, 1,  tmp1)) != CRYPT_OK)                     { goto error2; } /* tmp1 = q-1 */
+   if ((err = mp_sub_d( q, 1,  tmp2)) != CRYPT_OK)                     { goto error2; } /* tmp2 = p-1 */
+   if ((err = mp_lcm(tmp1, tmp2, key->d)) != CRYPT_OK)                 { goto error2; } /* tmp1 = lcd(p-1,q-1) */
+   if ((err = mp_invmod( key->N,  key->d,  key->d)) != CRYPT_OK)       { goto error2; } /* key->d = 1/N mod pq */
+
+   /* optimize for CRT now */
+   /* find d mod q-1 and d mod p-1 */
+   if ((err = mp_mod( key->d,  tmp1,  key->dP)) != CRYPT_OK)           { goto error2; } /* dP = d mod p-1 */
+   if ((err = mp_mod( key->d,  tmp2,  key->dQ)) != CRYPT_OK)           { goto error2; } /* dQ = d mod q-1 */
+   if ((err = mp_invmod( q,  p,  key->qP)) != CRYPT_OK)                { goto error2; } /* qP = 1/q mod p */
+
+   /* set key type (in this case it's CRT optimized) */
+   key->type = PK_PRIVATE;
+
+   /* return ok and free temps */
+   err       = CRYPT_OK;
+   goto done;
+error2:
+   mp_clear_multi( key->d,  key->N,  key->dQ,  key->dP,  key->qP,  key->p,  key->q, key->pq, NULL);
+error:
+done:
+   mp_clear_multi( tmp2,  tmp1,  p,  q, NULL);
+   return err;
+}
+
+#endif
+
+/* $Source$ */
+/* $Revision$ */
+/* $Date$ */
diff --git a/src/pk/pkcs1/pkcs_1_mgf1.c b/src/pk/pkcs1/pkcs_1_mgf1.c
index 233d7bc..e097145 100644
--- a/src/pk/pkcs1/pkcs_1_mgf1.c
+++ b/src/pk/pkcs1/pkcs_1_mgf1.c
@@ -26,8 +26,8 @@
    @param masklen     The length of the mask desired
    @return CRYPT_OK if successful
 */
-int pkcs_1_mgf1(const unsigned char *seed, unsigned long seedlen,
-                      int            hash_idx,
+int pkcs_1_mgf1(int                  hash_idx,
+                const unsigned char *seed, unsigned long seedlen,
                       unsigned char *mask, unsigned long masklen)
 {
    unsigned long hLen, x;
diff --git a/src/pk/pkcs1/pkcs_1_oaep_decode.c b/src/pk/pkcs1/pkcs_1_oaep_decode.c
index b9c8970..e3799b8 100644
--- a/src/pk/pkcs1/pkcs_1_oaep_decode.c
+++ b/src/pk/pkcs1/pkcs_1_oaep_decode.c
@@ -101,7 +101,7 @@ int pkcs_1_oaep_decode(const unsigned char *msg,    unsigned long msglen,
    x += modulus_len - hLen - 1;
 
    /* compute MGF1 of maskedDB (hLen) */ 
-   if ((err = pkcs_1_mgf1(DB, modulus_len - hLen - 1, hash_idx, mask, hLen)) != CRYPT_OK) {
+   if ((err = pkcs_1_mgf1(hash_idx, DB, modulus_len - hLen - 1, mask, hLen)) != CRYPT_OK) {
       goto LBL_ERR;
    }
 
@@ -111,7 +111,7 @@ int pkcs_1_oaep_decode(const unsigned char *msg,    unsigned long msglen,
    }
 
    /* compute MGF1 of seed (k - hlen - 1) */
-   if ((err = pkcs_1_mgf1(seed, hLen, hash_idx, mask, modulus_len - hLen - 1)) != CRYPT_OK) {
+   if ((err = pkcs_1_mgf1(hash_idx, seed, hLen, mask, modulus_len - hLen - 1)) != CRYPT_OK) {
       goto LBL_ERR;
    }
 
@@ -159,7 +159,7 @@ int pkcs_1_oaep_decode(const unsigned char *msg,    unsigned long msglen,
    }
 
    /* copy message */
-   *outlen = (modulus_len - hLen - 1) - x;
+   *outlen = modulus_len - hLen - 1 - x;
    XMEMCPY(out, DB + x, modulus_len - hLen - 1 - x);
    x += modulus_len - hLen - 1;
 
diff --git a/src/pk/pkcs1/pkcs_1_oaep_encode.c b/src/pk/pkcs1/pkcs_1_oaep_encode.c
index 525158c..42eb44d 100644
--- a/src/pk/pkcs1/pkcs_1_oaep_encode.c
+++ b/src/pk/pkcs1/pkcs_1_oaep_encode.c
@@ -114,7 +114,7 @@ int pkcs_1_oaep_encode(const unsigned char *msg,    unsigned long msglen,
    }
 
    /* compute MGF1 of seed (k - hlen - 1) */
-   if ((err = pkcs_1_mgf1(seed, hLen, hash_idx, mask, modulus_len - hLen - 1)) != CRYPT_OK) {
+   if ((err = pkcs_1_mgf1(hash_idx, seed, hLen, mask, modulus_len - hLen - 1)) != CRYPT_OK) {
       goto LBL_ERR;
    }
 
@@ -124,7 +124,7 @@ int pkcs_1_oaep_encode(const unsigned char *msg,    unsigned long msglen,
    }
 
    /* compute MGF1 of maskedDB (hLen) */ 
-   if ((err = pkcs_1_mgf1(DB, modulus_len - hLen - 1, hash_idx, mask, hLen)) != CRYPT_OK) {
+   if ((err = pkcs_1_mgf1(hash_idx, DB, modulus_len - hLen - 1, mask, hLen)) != CRYPT_OK) {
       goto LBL_ERR;
    }
 
diff --git a/src/pk/pkcs1/pkcs_1_pss_decode.c b/src/pk/pkcs1/pkcs_1_pss_decode.c
index 98c7160..294e121 100644
--- a/src/pk/pkcs1/pkcs_1_pss_decode.c
+++ b/src/pk/pkcs1/pkcs_1_pss_decode.c
@@ -102,7 +102,7 @@ int pkcs_1_pss_decode(const unsigned char *msghash, unsigned long msghashlen,
    }
 
    /* generate mask of length modulus_len - hLen - 1 from hash */
-   if ((err = pkcs_1_mgf1(hash, hLen, hash_idx, mask, modulus_len - hLen - 1)) != CRYPT_OK) {
+   if ((err = pkcs_1_mgf1(hash_idx, hash, hLen, mask, modulus_len - hLen - 1)) != CRYPT_OK) {
       goto LBL_ERR;
    }
 
diff --git a/src/pk/pkcs1/pkcs_1_pss_encode.c b/src/pk/pkcs1/pkcs_1_pss_encode.c
index a086e38..244b165 100644
--- a/src/pk/pkcs1/pkcs_1_pss_encode.c
+++ b/src/pk/pkcs1/pkcs_1_pss_encode.c
@@ -118,7 +118,7 @@ int pkcs_1_pss_encode(const unsigned char *msghash, unsigned long msghashlen,
    x += saltlen;
 
    /* generate mask of length modulus_len - hLen - 1 from hash */
-   if ((err = pkcs_1_mgf1(hash, hLen, hash_idx, mask, modulus_len - hLen - 1)) != CRYPT_OK) {
+   if ((err = pkcs_1_mgf1(hash_idx, hash, hLen, mask, modulus_len - hLen - 1)) != CRYPT_OK) {
       goto LBL_ERR;
    }
 
diff --git a/src/pk/rsa/rsa_export.c b/src/pk/rsa/rsa_export.c
index 8509efd..26cf417 100644
--- a/src/pk/rsa/rsa_export.c
+++ b/src/pk/rsa/rsa_export.c
@@ -27,9 +27,7 @@
 */    
 int rsa_export(unsigned char *out, unsigned long *outlen, int type, rsa_key *key)
 {
-   int           err;
    unsigned long zero=0;
-
    LTC_ARGCHK(out    != NULL);
    LTC_ARGCHK(outlen != NULL);
    LTC_ARGCHK(key    != NULL);
@@ -44,7 +42,7 @@ int rsa_export(unsigned char *out, unsigned long *outlen, int type, rsa_key *key
       /* output is 
             Version, n, e, d, p, q, d mod (p-1), d mod (q - 1), 1/q mod p
        */
-      if ((err = der_encode_sequence_multi(out, outlen, 
+      return der_encode_sequence_multi(out, outlen, 
                           LTC_ASN1_SHORT_INTEGER, 1UL, &zero, 
                           LTC_ASN1_INTEGER, 1UL,  key->N, 
                           LTC_ASN1_INTEGER, 1UL,  key->e,
@@ -54,12 +52,7 @@ int rsa_export(unsigned char *out, unsigned long *outlen, int type, rsa_key *key
                           LTC_ASN1_INTEGER, 1UL,  key->dP,
                           LTC_ASN1_INTEGER, 1UL,  key->dQ, 
                           LTC_ASN1_INTEGER, 1UL,  key->qP, 
-                          LTC_ASN1_EOL,     0UL, NULL)) != CRYPT_OK) {
-         return err;
-      }
- 
-      /* clear zero and return */
-      return CRYPT_OK;
+                          LTC_ASN1_EOL,     0UL, NULL);
    } else {
       /* public key */
       return der_encode_sequence_multi(out, outlen, 
diff --git a/src/pk/rsa/rsa_import.c b/src/pk/rsa/rsa_import.c
index a9ad391..6e75a41 100644
--- a/src/pk/rsa/rsa_import.c
+++ b/src/pk/rsa/rsa_import.c
@@ -35,6 +35,7 @@ int rsa_import(const unsigned char *in, unsigned long inlen, rsa_key *key)
 
    LTC_ARGCHK(in  != NULL);
    LTC_ARGCHK(key != NULL);
+   LTC_ARGCHK(ltc_mp.name != NULL);
 
    /* init key */
    if ((err = mp_init_multi(&zero, &key->e, &key->d, &key->N, &key->dQ, 
diff --git a/src/pk/rsa/rsa_make_key.c b/src/pk/rsa/rsa_make_key.c
index 036cdc1..f4cffa5 100644
--- a/src/pk/rsa/rsa_make_key.c
+++ b/src/pk/rsa/rsa_make_key.c
@@ -31,7 +31,15 @@ int rsa_make_key(prng_state *prng, int wprng, int size, long e, rsa_key *key)
    void *p, *q, *tmp1, *tmp2, *tmp3;
    int    err;
 
+   LTC_ARGCHK(ltc_mp.name != NULL);
+
+   /* check for descriptor */
+   if (ltc_mp.rsa_keygen != NULL) {
+      return ltc_mp.rsa_keygen(prng, wprng, size, e, key);
+   }
+   
    LTC_ARGCHK(key != NULL);
+  
 
    if ((size < (MIN_RSA_SIZE/8)) || (size > (MAX_RSA_SIZE/8))) {
       return CRYPT_INVALID_KEYSIZE;
diff --git a/src/prngs/fortuna.c b/src/prngs/fortuna.c
index cdb67bf..cd62a36 100644
--- a/src/prngs/fortuna.c
+++ b/src/prngs/fortuna.c
@@ -140,7 +140,9 @@ int fortuna_start(prng_state *prng)
       return err;
    }
    zeromem(prng->fortuna.IV, 16);
-
+   
+   LTC_MUTEX_INIT(&prng->fortuna.prng_lock)
+   
    return CRYPT_OK;
 }
 
@@ -159,8 +161,11 @@ int fortuna_add_entropy(const unsigned char *in, unsigned long inlen, prng_state
    LTC_ARGCHK(in  != NULL);
    LTC_ARGCHK(prng != NULL);
 
+   LTC_MUTEX_LOCK(&prng->fortuna.prng_lock);
+
    /* ensure inlen <= 32 */
    if (inlen > 32) {
+      LTC_MUTEX_UNLOCK(&prng->fortuna.prng_lock);
       return CRYPT_INVALID_ARG;
    }
 
@@ -168,9 +173,11 @@ int fortuna_add_entropy(const unsigned char *in, unsigned long inlen, prng_state
    tmp[0] = 0;
    tmp[1] = inlen;
    if ((err = sha256_process(&prng->fortuna.pool[prng->fortuna.pool_idx], tmp, 2)) != CRYPT_OK) {
+      LTC_MUTEX_UNLOCK(&prng->fortuna.prng_lock);
       return err;
    }
    if ((err = sha256_process(&prng->fortuna.pool[prng->fortuna.pool_idx], in, inlen)) != CRYPT_OK) {
+      LTC_MUTEX_UNLOCK(&prng->fortuna.prng_lock);
       return err;
    }
    if (prng->fortuna.pool_idx == 0) {
@@ -180,6 +187,7 @@ int fortuna_add_entropy(const unsigned char *in, unsigned long inlen, prng_state
       prng->fortuna.pool_idx = 0;
    }
 
+   LTC_MUTEX_UNLOCK(&prng->fortuna.prng_lock);
    return CRYPT_OK;
 }
 
@@ -209,9 +217,12 @@ unsigned long fortuna_read(unsigned char *out, unsigned long outlen, prng_state
    LTC_ARGCHK(out  != NULL);
    LTC_ARGCHK(prng != NULL);
 
+   LTC_MUTEX_LOCK(&prng->fortuna.prng_lock);
+
    /* do we have to reseed? */
    if (++prng->fortuna.wd == FORTUNA_WD || prng->fortuna.pool0_len >= 64) {
       if ((err = fortuna_reseed(prng)) != CRYPT_OK) {
+         LTC_MUTEX_UNLOCK(&prng->fortuna.prng_lock);
          return 0;
       }
    }
@@ -239,12 +250,14 @@ unsigned long fortuna_read(unsigned char *out, unsigned long outlen, prng_state
    rijndael_ecb_encrypt(prng->fortuna.IV, prng->fortuna.K   , &prng->fortuna.skey); fortuna_update_iv(prng);
    rijndael_ecb_encrypt(prng->fortuna.IV, prng->fortuna.K+16, &prng->fortuna.skey); fortuna_update_iv(prng);
    if ((err = rijndael_setup(prng->fortuna.K, 32, 0, &prng->fortuna.skey)) != CRYPT_OK) {
+      LTC_MUTEX_UNLOCK(&prng->fortuna.prng_lock);
       return 0;
    }
 
 #ifdef LTC_CLEAN_STACK
    zeromem(tmp, sizeof(tmp));
 #endif
+   LTC_MUTEX_UNLOCK(&prng->fortuna.prng_lock);
    return tlen;
 }   
 
@@ -259,10 +272,12 @@ int fortuna_done(prng_state *prng)
    unsigned char tmp[32];
 
    LTC_ARGCHK(prng != NULL);
+   LTC_MUTEX_LOCK(&prng->fortuna.prng_lock);
 
    /* terminate all the hashes */
    for (x = 0; x < FORTUNA_POOLS; x++) {
        if ((err = sha256_done(&(prng->fortuna.pool[x]), tmp)) != CRYPT_OK) {
+          LTC_MUTEX_UNLOCK(&prng->fortuna.prng_lock);
           return err; 
        }
    }
@@ -272,6 +287,7 @@ int fortuna_done(prng_state *prng)
    zeromem(tmp, sizeof(tmp));
 #endif
 
+   LTC_MUTEX_UNLOCK(&prng->fortuna.prng_lock);
    return CRYPT_OK;
 }
 
@@ -291,13 +307,17 @@ int fortuna_export(unsigned char *out, unsigned long *outlen, prng_state *prng)
    LTC_ARGCHK(outlen != NULL);
    LTC_ARGCHK(prng   != NULL);
 
+   LTC_MUTEX_LOCK(&prng->fortuna.prng_lock);
+
    /* we'll write bytes for s&g's */
    if (*outlen < 32*FORTUNA_POOLS) {
+      LTC_MUTEX_UNLOCK(&prng->fortuna.prng_lock);
       return CRYPT_BUFFER_OVERFLOW;
    }
 
    md = XMALLOC(sizeof(hash_state));
    if (md == NULL) {
+      LTC_MUTEX_UNLOCK(&prng->fortuna.prng_lock);
       return CRYPT_MEM;
    }
 
@@ -332,6 +352,7 @@ LBL_ERR:
    zeromem(md, sizeof(*md));
 #endif
    XFREE(md);
+   LTC_MUTEX_UNLOCK(&prng->fortuna.prng_lock);
    return err;
 }
  
@@ -349,18 +370,23 @@ int fortuna_import(const unsigned char *in, unsigned long inlen, prng_state *prn
    LTC_ARGCHK(in   != NULL);
    LTC_ARGCHK(prng != NULL);
 
+   LTC_MUTEX_LOCK(&prng->fortuna.prng_lock);
    if (inlen != 32*FORTUNA_POOLS) {
+      LTC_MUTEX_UNLOCK(&prng->fortuna.prng_lock);
       return CRYPT_INVALID_ARG;
    }
 
    if ((err = fortuna_start(prng)) != CRYPT_OK) {
+      LTC_MUTEX_UNLOCK(&prng->fortuna.prng_lock);
       return err;
    }
    for (x = 0; x < FORTUNA_POOLS; x++) {
       if ((err = fortuna_add_entropy(in+x*32, 32, prng)) != CRYPT_OK) {
+         LTC_MUTEX_UNLOCK(&prng->fortuna.prng_lock);
          return err;
       }
    }
+   LTC_MUTEX_UNLOCK(&prng->fortuna.prng_lock);
    return err;
 }
 
diff --git a/src/prngs/yarrow.c b/src/prngs/yarrow.c
index 4abaf73..50ab7d1 100644
--- a/src/prngs/yarrow.c
+++ b/src/prngs/yarrow.c
@@ -110,6 +110,7 @@ int yarrow_start(prng_state *prng)
 
    /* zero the memory used */
    zeromem(prng->yarrow.pool, sizeof(prng->yarrow.pool));
+   LTC_MUTEX_INIT(&prng->yarrow.prng_lock)
 
    return CRYPT_OK;
 }
@@ -128,32 +129,40 @@ int yarrow_add_entropy(const unsigned char *in, unsigned long inlen, prng_state
 
    LTC_ARGCHK(in  != NULL);
    LTC_ARGCHK(prng != NULL);
-
+   
+   LTC_MUTEX_LOCK(&prng->yarrow.prng_lock);
+   
    if ((err = hash_is_valid(prng->yarrow.hash)) != CRYPT_OK) {
+      LTC_MUTEX_UNLOCK(&prng->yarrow.prng_lock);
       return err;
    }
 
    /* start the hash */
    if ((err = hash_descriptor[prng->yarrow.hash].init(&md)) != CRYPT_OK) {
+      LTC_MUTEX_UNLOCK(&prng->yarrow.prng_lock);
       return err; 
    }
 
    /* hash the current pool */
    if ((err = hash_descriptor[prng->yarrow.hash].process(&md, prng->yarrow.pool, 
                                                         hash_descriptor[prng->yarrow.hash].hashsize)) != CRYPT_OK) {
+      LTC_MUTEX_UNLOCK(&prng->yarrow.prng_lock);
       return err;
    }
 
    /* add the new entropy */
    if ((err = hash_descriptor[prng->yarrow.hash].process(&md, in, inlen)) != CRYPT_OK) {
+      LTC_MUTEX_UNLOCK(&prng->yarrow.prng_lock);
       return err;
    }
 
    /* store result */
    if ((err = hash_descriptor[prng->yarrow.hash].done(&md, prng->yarrow.pool)) != CRYPT_OK) {
+      LTC_MUTEX_UNLOCK(&prng->yarrow.prng_lock);
       return err;
    }
 
+   LTC_MUTEX_UNLOCK(&prng->yarrow.prng_lock);
    return CRYPT_OK;
 }
 
@@ -167,18 +176,22 @@ int yarrow_ready(prng_state *prng)
    int ks, err;
 
    LTC_ARGCHK(prng != NULL);
+   LTC_MUTEX_LOCK(&prng->yarrow.prng_lock);
 
    if ((err = hash_is_valid(prng->yarrow.hash)) != CRYPT_OK) {
+      LTC_MUTEX_UNLOCK(&prng->yarrow.prng_lock);
       return err;
    }
    
    if ((err = cipher_is_valid(prng->yarrow.cipher)) != CRYPT_OK) {
+      LTC_MUTEX_UNLOCK(&prng->yarrow.prng_lock);
       return err;
    }
 
    /* setup CTR mode using the "pool" as the key */
    ks = (int)hash_descriptor[prng->yarrow.hash].hashsize;
    if ((err = cipher_descriptor[prng->yarrow.cipher].keysize(&ks)) != CRYPT_OK) {
+      LTC_MUTEX_UNLOCK(&prng->yarrow.prng_lock);
       return err;
    }
 
@@ -188,8 +201,10 @@ int yarrow_ready(prng_state *prng)
                         0,                       /* number of rounds */
                         CTR_COUNTER_LITTLE_ENDIAN, /* little endian counter */
                         &prng->yarrow.ctr)) != CRYPT_OK) {
+      LTC_MUTEX_UNLOCK(&prng->yarrow.prng_lock);
       return err;
    }
+   LTC_MUTEX_UNLOCK(&prng->yarrow.prng_lock);
    return CRYPT_OK;
 }
 
@@ -205,13 +220,17 @@ unsigned long yarrow_read(unsigned char *out, unsigned long outlen, prng_state *
    LTC_ARGCHK(out  != NULL);
    LTC_ARGCHK(prng != NULL);
 
+   LTC_MUTEX_LOCK(&prng->yarrow.prng_lock);
+
    /* put out in predictable state first */
    zeromem(out, outlen);
    
    /* now randomize it */
    if (ctr_encrypt(out, out, outlen, &prng->yarrow.ctr) != CRYPT_OK) {
+      LTC_MUTEX_UNLOCK(&prng->yarrow.prng_lock);
       return 0;
    }
+   LTC_MUTEX_UNLOCK(&prng->yarrow.prng_lock);
    return outlen;
 }
 
@@ -222,12 +241,18 @@ unsigned long yarrow_read(unsigned char *out, unsigned long outlen, prng_state *
 */  
 int yarrow_done(prng_state *prng)
 {
+   int err;
    LTC_ARGCHK(prng != NULL);
 
+   LTC_MUTEX_LOCK(&prng->yarrow.prng_lock);
+
    /* call cipher done when we invent one ;-) */
 
    /* we invented one */
-   return ctr_done(&prng->yarrow.ctr);
+   err = ctr_done(&prng->yarrow.ctr);
+   
+   LTC_MUTEX_UNLOCK(&prng->yarrow.prng_lock);
+   return err;
 }
 
 /**
@@ -243,12 +268,16 @@ int yarrow_export(unsigned char *out, unsigned long *outlen, prng_state *prng)
    LTC_ARGCHK(outlen != NULL);
    LTC_ARGCHK(prng   != NULL);
 
+   LTC_MUTEX_LOCK(&prng->yarrow.prng_lock);
+
    /* we'll write 64 bytes for s&g's */
    if (*outlen < 64) {
+      LTC_MUTEX_UNLOCK(&prng->yarrow.prng_lock);
       return CRYPT_BUFFER_OVERFLOW;
    }
 
    if (yarrow_read(out, 64, prng) != 64) {
+      LTC_MUTEX_UNLOCK(&prng->yarrow.prng_lock);
       return CRYPT_ERROR_READPRNG;
    }
    *outlen = 64;
@@ -269,15 +298,21 @@ int yarrow_import(const unsigned char *in, unsigned long inlen, prng_state *prng
 
    LTC_ARGCHK(in   != NULL);
    LTC_ARGCHK(prng != NULL);
+   
+   LTC_MUTEX_LOCK(&prng->yarrow.prng_lock);
 
    if (inlen != 64) {
+      LTC_MUTEX_UNLOCK(&prng->yarrow.prng_lock);
       return CRYPT_INVALID_ARG;
    }
 
    if ((err = yarrow_start(prng)) != CRYPT_OK) {
+      LTC_MUTEX_UNLOCK(&prng->yarrow.prng_lock);
       return err;
    }
-   return yarrow_add_entropy(in, 64, prng);
+   err = yarrow_add_entropy(in, 64, prng);
+   LTC_MUTEX_UNLOCK(&prng->yarrow.prng_lock);
+   return err;
 }
 
 /**
diff --git a/testprof/der_tests.c b/testprof/der_tests.c
index 59f0bd9..226ae24 100644
--- a/testprof/der_tests.c
+++ b/testprof/der_tests.c
@@ -10,6 +10,293 @@ int der_tests(void)
 
 #else
 
+/* we are encoding 
+
+  SEQUENCE {
+     PRINTABLE "printable"
+     IA5       "ia5"
+     SEQUENCE {
+        INTEGER 12345678
+        UTCTIME { 91, 5, 6, 16, 45, 40, 1, 7, 0 }
+        SEQUENCE {
+           OCTET STRING { 1, 2, 3, 4 }
+           BIT STRING   { 1, 0, 0, 1 }
+           SEQUENCE {
+              OID       { 1, 2, 840, 113549 }
+              NULL
+           }
+        }
+     }
+  }     
+
+*/  
+
+static void der_flexi_test(void)
+{
+   static const char printable_str[]    = "printable";
+   static const char ia5_str[]          = "ia5";
+   static const unsigned long int_val   = 12345678UL;
+   static const ltc_utctime   utctime   = { 91, 5, 6, 16, 45, 40, 1, 7, 0 };
+   static const unsigned char oct_str[] = { 1, 2, 3, 4 };
+   static const unsigned char bit_str[] = { 1, 0, 0, 1 };
+   static const unsigned long oid_str[] = { 1, 2, 840, 113549 };
+   
+   unsigned char encode_buf[128];
+   unsigned long encode_buf_len, decode_len;
+   int           err;
+   
+   ltc_asn1_list static_list[4][3], *decoded_list, *l;
+   
+   /* build list */
+   LTC_SET_ASN1(static_list[0], 0, LTC_ASN1_PRINTABLE_STRING, (void *)printable_str, strlen(printable_str));
+   LTC_SET_ASN1(static_list[0], 1, LTC_ASN1_IA5_STRING,       (void *)ia5_str,       strlen(ia5_str));
+   LTC_SET_ASN1(static_list[0], 2, LTC_ASN1_SEQUENCE,         static_list[1],   3);
+   
+   LTC_SET_ASN1(static_list[1], 0, LTC_ASN1_SHORT_INTEGER,    (void *)&int_val,         1);
+   LTC_SET_ASN1(static_list[1], 1, LTC_ASN1_UTCTIME,          (void *)&utctime,         1);
+   LTC_SET_ASN1(static_list[1], 2, LTC_ASN1_SEQUENCE,         static_list[2],   3);
+
+   LTC_SET_ASN1(static_list[2], 0, LTC_ASN1_OCTET_STRING,     (void *)oct_str,          4);
+   LTC_SET_ASN1(static_list[2], 1, LTC_ASN1_BIT_STRING,       (void *)bit_str,          4);
+   LTC_SET_ASN1(static_list[2], 2, LTC_ASN1_SEQUENCE,         static_list[3],   2);
+
+   LTC_SET_ASN1(static_list[3], 0, LTC_ASN1_OBJECT_IDENTIFIER,(void *)oid_str,          4);
+   LTC_SET_ASN1(static_list[3], 1, LTC_ASN1_NULL,             NULL,             0);
+   
+   /* encode it */
+   encode_buf_len = sizeof(encode_buf);
+   if ((err = der_encode_sequence(&static_list[0][0], 3, encode_buf, &encode_buf_len)) != CRYPT_OK) {
+      fprintf(stderr, "Encoding static_list: %s\n", error_to_string(err));
+      exit(EXIT_FAILURE);
+   }
+   
+#if 0
+   {
+     FILE *f;
+     f = fopen("t.bin", "wb");
+     fwrite(encode_buf, 1, encode_buf_len, f);
+     fclose(f);
+   } 
+#endif    
+   
+   /* decode with flexi */
+   decode_len = encode_buf_len;
+   if ((err = der_decode_sequence_flexi(encode_buf, &decode_len, &decoded_list)) != CRYPT_OK) {
+      fprintf(stderr, "decoding static_list: %s\n", error_to_string(err));
+      exit(EXIT_FAILURE);
+   }
+   
+   if (decode_len != encode_buf_len) {
+      fprintf(stderr, "Decode len of %lu does not match encode len of %lu \n", decode_len, encode_buf_len);
+      exit(EXIT_FAILURE);
+   }
+   
+   /* we expect l->next to be NULL and l->child to not be */
+   l = decoded_list;
+   if (l->next != NULL || l->child == NULL) {
+      fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child);
+      exit(EXIT_FAILURE);
+   }
+   
+   /* we expect a SEQUENCE */
+      if (l->type != LTC_ASN1_SEQUENCE) {
+         fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child);
+         exit(EXIT_FAILURE);
+      }
+      l = l->child;
+         
+   /* PRINTABLE STRING */
+      /* we expect printable_str */
+      if (l->next == NULL || l->child != NULL) {
+         fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child);
+         exit(EXIT_FAILURE);
+      }
+   
+      if (l->type != LTC_ASN1_PRINTABLE_STRING) {
+         fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child);
+         exit(EXIT_FAILURE);
+      }
+   
+      if (l->size != strlen(printable_str) || memcmp(printable_str, l->data, l->size)) {
+         fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child);
+         exit(EXIT_FAILURE);
+      }
+   
+      /* move to next */
+      l = l->next;
+      
+   /* IA5 STRING */      
+      /* we expect ia5_str */
+      if (l->next == NULL || l->child != NULL) {
+         fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child);
+         exit(EXIT_FAILURE);
+      }
+      
+      if (l->type != LTC_ASN1_IA5_STRING) {
+         fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child);
+         exit(EXIT_FAILURE);
+      }
+   
+      if (l->size != strlen(ia5_str) || memcmp(ia5_str, l->data, l->size)) {
+         fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child);
+         exit(EXIT_FAILURE);
+      }
+   
+      /* move to next */
+      l = l->next;
+   
+   /* expect child anve move down */
+      
+      if (l->next != NULL || l->child == NULL) {
+         fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child);
+         exit(EXIT_FAILURE);
+      }
+      
+      if (l->type != LTC_ASN1_SEQUENCE) {
+         fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child);
+         exit(EXIT_FAILURE);
+      }
+      l = l->child;
+      
+
+   /* INTEGER */
+   
+      if (l->next == NULL || l->child != NULL) {
+         fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child);
+         exit(EXIT_FAILURE);
+      }
+      
+      if (l->type != LTC_ASN1_INTEGER) {
+         fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child);
+         exit(EXIT_FAILURE);
+      }
+   
+      if (mp_cmp_d(l->data, 12345678UL) != LTC_MP_EQ) {
+         fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child);
+         exit(EXIT_FAILURE);
+      }
+   
+      /* move to next */
+      l = l->next;
+      
+   /* UTCTIME */
+         
+      if (l->next == NULL || l->child != NULL) {
+         fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child);
+         exit(EXIT_FAILURE);
+      }
+      
+      if (l->type != LTC_ASN1_UTCTIME) {
+         fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child);
+         exit(EXIT_FAILURE);
+      }
+   
+      if (memcmp(l->data, &utctime, sizeof(utctime))) {
+         fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child);
+         exit(EXIT_FAILURE);
+      }
+   
+      /* move to next */
+      l = l->next;
+      
+   /* expect child anve move down */
+      
+      if (l->next != NULL || l->child == NULL) {
+         fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child);
+         exit(EXIT_FAILURE);
+      }
+      
+      if (l->type != LTC_ASN1_SEQUENCE) {
+         fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child);
+         exit(EXIT_FAILURE);
+      }
+      l = l->child;
+      
+      
+   /* OCTET STRING */      
+      /* we expect oct_str */
+      if (l->next == NULL || l->child != NULL) {
+         fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child);
+         exit(EXIT_FAILURE);
+      }
+      
+      if (l->type != LTC_ASN1_OCTET_STRING) {
+         fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child);
+         exit(EXIT_FAILURE);
+      }
+   
+      if (l->size != sizeof(oct_str) || memcmp(oct_str, l->data, l->size)) {
+         fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child);
+         exit(EXIT_FAILURE);
+      }
+   
+      /* move to next */
+      l = l->next;
+
+   /* BIT STRING */      
+      /* we expect oct_str */
+      if (l->next == NULL || l->child != NULL) {
+         fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child);
+         exit(EXIT_FAILURE);
+      }
+      
+      if (l->type != LTC_ASN1_BIT_STRING) {
+         fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child);
+         exit(EXIT_FAILURE);
+      }
+   
+      if (l->size != sizeof(bit_str) || memcmp(bit_str, l->data, l->size)) {
+         fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child);
+         exit(EXIT_FAILURE);
+      }
+   
+      /* move to next */
+      l = l->next;
+
+   /* expect child anve move down */
+      
+      if (l->next != NULL || l->child == NULL) {
+         fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child);
+         exit(EXIT_FAILURE);
+      }
+      
+      if (l->type != LTC_ASN1_SEQUENCE) {
+         fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child);
+         exit(EXIT_FAILURE);
+      }
+      l = l->child;
+
+
+   /* OID STRING */      
+      /* we expect oid_str */
+      if (l->next == NULL || l->child != NULL) {
+         fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child);
+         exit(EXIT_FAILURE);
+      }
+      
+      if (l->type != LTC_ASN1_OBJECT_IDENTIFIER) {
+         fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child);
+         exit(EXIT_FAILURE);
+      }
+   
+      if (l->size != sizeof(oid_str)/sizeof(oid_str[0]) || memcmp(oid_str, l->data, l->size*sizeof(oid_str[0]))) {
+         fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child);
+         exit(EXIT_FAILURE);
+      }
+   
+      /* move to next */
+      l = l->next;
+      
+   /* NULL */
+      if (l->type != LTC_ASN1_NULL) {
+         fprintf(stderr, "(%d), %d, %lu, next=%p, prev=%p, parent=%p, child=%p\n", __LINE__, l->type, l->size, l->next, l->prev, l->parent, l->child);
+         exit(EXIT_FAILURE);
+      }
+
+   der_sequence_free(l);
+
+}
+
 static int der_choice_test(void)
 {
    ltc_asn1_list types[7], host[1];
@@ -92,6 +379,8 @@ int der_tests(void)
    static const unsigned char rsa_time1_der[] = { 0x17, 0x11, 0x39, 0x31, 0x30, 0x35, 0x30, 0x36, 0x31, 0x36, 0x34, 0x35, 0x34, 0x30, 0x2D, 0x30, 0x37, 0x30, 0x30 };
    static const unsigned char rsa_time2_der[] = { 0x17, 0x0d, 0x39, 0x31, 0x30, 0x35, 0x30, 0x36, 0x32, 0x33, 0x34, 0x35, 0x34, 0x30, 0x5a };
 
+   der_flexi_test();
+
    DO(mp_init_multi(&a, &b, &c, &d, &e, &f, &g, NULL));
    for (zz = 0; zz < 16; zz++) {
 #ifdef USE_TFM
diff --git a/testprof/dsa_test.c b/testprof/dsa_test.c
index 6724feb..7d0f271 100644
--- a/testprof/dsa_test.c
+++ b/testprof/dsa_test.c
@@ -5,7 +5,7 @@
 int dsa_test(void)
 {
    unsigned char msg[16], out[1024], out2[1024];
-   unsigned long x;
+   unsigned long x, y;
    int stat1, stat2;
    dsa_key key, key2;
 
@@ -15,6 +15,20 @@ int dsa_test(void)
    /* verify it */
    DO(dsa_verify_key(&key, &stat1));
    if (stat1 == 0) { fprintf(stderr, "dsa_verify_key "); return 1; }
+   
+   /* encrypt a message */
+   for (x = 0; x < 16; x++) { msg[x] = x; }
+   x = sizeof(out);
+   DO(dsa_encrypt_key(msg, 16, out, &x, &yarrow_prng, find_prng("yarrow"), find_hash("sha1"), &key));
+   
+   /* decrypt */
+   y = sizeof(out2);
+   DO(dsa_decrypt_key(out, x, out2, &y, &key));
+   
+   if (y != 16 || memcmp(out2, msg, 16)) {
+      fprintf(stderr, "dsa_decrypt failed, y == %lu\n", y);
+      return 1;
+   }
 
    /* sign the message */
    x = sizeof(out);
diff --git a/testprof/ecc_test.c b/testprof/ecc_test.c
index 1b0f6b8..979a492 100644
--- a/testprof/ecc_test.c
+++ b/testprof/ecc_test.c
@@ -29,7 +29,7 @@ int ecc_tests (void)
 	
   DO(ecc_test ());
 
-  for (s = 0; s < (int)(sizeof(sizes)/sizeof(sizes[0])); s++) {
+  for (s = 0; s < (sizeof(sizes)/sizeof(sizes[0])); s++) {
      /* make up two keys */
      DO(ecc_make_key (&yarrow_prng, find_prng ("yarrow"), sizes[s], &usera));
      DO(ecc_make_key (&yarrow_prng, find_prng ("yarrow"), sizes[s], &userb));
diff --git a/testprof/katja_test.c b/testprof/katja_test.c
new file mode 100644
index 0000000..47d01fe
--- /dev/null
+++ b/testprof/katja_test.c
@@ -0,0 +1,231 @@
+#include 
+
+#ifdef MKAT
+
+int katja_test(void)
+{
+   unsigned char in[1024], out[1024], tmp[1024];
+   katja_key     key, privKey, pubKey;
+   int           hash_idx, prng_idx, stat, stat2, size;
+   unsigned long kat_msgsize, len, len2, cnt;
+   static unsigned char lparam[] = { 0x01, 0x02, 0x03, 0x04 };
+
+   hash_idx = find_hash("sha1");
+   prng_idx = find_prng("yarrow");
+   if (hash_idx == -1 || prng_idx == -1) {
+      fprintf(stderr, "katja_test requires SHA1 and yarrow");
+      return 1;
+   }
+
+for (size = 1024; size <= 2048; size += 256) {
+  
+   /* make 10 random key */
+   for (cnt = 0; cnt < 10; cnt++) {
+      DO(katja_make_key(&yarrow_prng, prng_idx, size/8, &key));
+      if (mp_count_bits(key.N) < size - 7) {
+         fprintf(stderr, "katja_%d key modulus has %d bits\n", size, mp_count_bits(key.N));
+
+len = mp_unsigned_bin_size(key.N);
+mp_to_unsigned_bin(key.N, tmp);
+ fprintf(stderr, "N == \n");
+for (cnt = 0; cnt < len; ) {
+   fprintf(stderr, "%02x ", tmp[cnt]);
+   if (!(++cnt & 15)) fprintf(stderr, "\n");
+}
+
+len = mp_unsigned_bin_size(key.p);
+mp_to_unsigned_bin(key.p, tmp);
+ fprintf(stderr, "p == \n");
+for (cnt = 0; cnt < len; ) {
+   fprintf(stderr, "%02x ", tmp[cnt]);
+   if (!(++cnt & 15)) fprintf(stderr, "\n");
+}
+
+len = mp_unsigned_bin_size(key.q);
+mp_to_unsigned_bin(key.q, tmp);
+ fprintf(stderr, "\nq == \n");
+for (cnt = 0; cnt < len; ) {
+   fprintf(stderr, "%02x ", tmp[cnt]);
+   if (!(++cnt & 15)) fprintf(stderr, "\n");
+}
+ fprintf(stderr, "\n");
+
+
+         return 1;
+      }
+      if (cnt != 9) {
+         katja_free(&key);
+      }
+   }
+   /* encrypt the key (without lparam) */
+   for (cnt = 0; cnt < 4; cnt++) {
+   for (kat_msgsize = 1; kat_msgsize <= 42; kat_msgsize++) {
+      /* make a random key/msg */
+      yarrow_read(in, kat_msgsize, &yarrow_prng);
+
+      len  = sizeof(out);
+      len2 = kat_msgsize;
+   
+      DO(katja_encrypt_key(in, kat_msgsize, out, &len, NULL, 0, &yarrow_prng, prng_idx, hash_idx, &key));
+      /* change a byte */
+      out[8] ^= 1;
+      DO(katja_decrypt_key(out, len, tmp, &len2, NULL, 0, hash_idx, &stat2, &key));
+      /* change a byte back */
+      out[8] ^= 1;
+      if (len2 != kat_msgsize) {
+         fprintf(stderr, "\nkatja_decrypt_key mismatch len %lu (first decrypt)", len2);
+         return 1;
+      }
+
+      len2 = kat_msgsize;
+      DO(katja_decrypt_key(out, len, tmp, &len2, NULL, 0, hash_idx, &stat, &key));
+      if (!(stat == 1 && stat2 == 0)) {
+         fprintf(stderr, "katja_decrypt_key failed");
+         return 1;
+      }
+      if (len2 != kat_msgsize || memcmp(tmp, in, kat_msgsize)) {
+         unsigned long x;
+         fprintf(stderr, "\nkatja_decrypt_key mismatch, len %lu (second decrypt)\n", len2);
+         fprintf(stderr, "Original contents: \n"); 
+         for (x = 0; x < kat_msgsize; ) {
+             fprintf(stderr, "%02x ", in[x]);
+             if (!(++x % 16)) {
+                fprintf(stderr, "\n");
+             }
+         }
+         fprintf(stderr, "\n");
+         fprintf(stderr, "Output contents: \n"); 
+         for (x = 0; x < kat_msgsize; ) {
+             fprintf(stderr, "%02x ", out[x]);
+             if (!(++x % 16)) {
+                fprintf(stderr, "\n");
+             }
+         }     
+         fprintf(stderr, "\n");
+         return 1;
+      }
+   }
+   }
+
+   /* encrypt the key (with lparam) */
+   for (kat_msgsize = 1; kat_msgsize <= 42; kat_msgsize++) {
+      len  = sizeof(out);
+      len2 = kat_msgsize;
+      DO(katja_encrypt_key(in, kat_msgsize, out, &len, lparam, sizeof(lparam), &yarrow_prng, prng_idx, hash_idx, &key));
+      /* change a byte */
+      out[8] ^= 1;
+      DO(katja_decrypt_key(out, len, tmp, &len2, lparam, sizeof(lparam), hash_idx, &stat2, &key));
+      if (len2 != kat_msgsize) {
+         fprintf(stderr, "\nkatja_decrypt_key mismatch len %lu (first decrypt)", len2);
+         return 1;
+      }
+      /* change a byte back */
+      out[8] ^= 1;
+
+      len2 = kat_msgsize;
+      DO(katja_decrypt_key(out, len, tmp, &len2, lparam, sizeof(lparam), hash_idx, &stat, &key));
+      if (!(stat == 1 && stat2 == 0)) {
+         fprintf(stderr, "katja_decrypt_key failed");
+         return 1;
+      }
+      if (len2 != kat_msgsize || memcmp(tmp, in, kat_msgsize)) {
+         fprintf(stderr, "katja_decrypt_key mismatch len %lu", len2);
+         return 1;
+      }
+   }
+
+#if 0
+
+   /* sign a message (unsalted, lower cholestorol and Atkins approved) now */
+   len = sizeof(out);
+   DO(katja_sign_hash(in, 20, out, &len, &yarrow_prng, prng_idx, hash_idx, 0, &key));
+
+/* export key and import as both private and public */
+   len2 = sizeof(tmp);
+   DO(katja_export(tmp, &len2, PK_PRIVATE, &key)); 
+   DO(katja_import(tmp, len2, &privKey)); 
+   len2 = sizeof(tmp);
+   DO(katja_export(tmp, &len2, PK_PUBLIC, &key));
+   DO(katja_import(tmp, len2, &pubKey));
+
+   /* verify with original */
+   DO(katja_verify_hash(out, len, in, 20, hash_idx, 0, &stat, &key));
+   /* change a byte */
+   in[0] ^= 1;
+   DO(katja_verify_hash(out, len, in, 20, hash_idx, 0, &stat2, &key));
+   
+   if (!(stat == 1 && stat2 == 0)) {
+      fprintf(stderr, "katja_verify_hash (unsalted, origKey) failed, %d, %d", stat, stat2);
+      katja_free(&key);
+      katja_free(&pubKey);
+      katja_free(&privKey);
+      return 1;
+   }
+
+   /* verify with privKey */
+   /* change a byte */
+   in[0] ^= 1;
+   DO(katja_verify_hash(out, len, in, 20, hash_idx, 0, &stat, &privKey));
+   /* change a byte */
+   in[0] ^= 1;
+   DO(katja_verify_hash(out, len, in, 20, hash_idx, 0, &stat2, &privKey));
+   
+   if (!(stat == 1 && stat2 == 0)) {
+      fprintf(stderr, "katja_verify_hash (unsalted, privKey) failed, %d, %d", stat, stat2);
+      katja_free(&key);
+      katja_free(&pubKey);
+      katja_free(&privKey);
+      return 1;
+   }
+
+   /* verify with pubKey */
+   /* change a byte */
+   in[0] ^= 1;
+   DO(katja_verify_hash(out, len, in, 20, hash_idx, 0, &stat, &pubKey));
+   /* change a byte */
+   in[0] ^= 1;
+   DO(katja_verify_hash(out, len, in, 20, hash_idx, 0, &stat2, &pubKey));
+   
+   if (!(stat == 1 && stat2 == 0)) {
+      fprintf(stderr, "katja_verify_hash (unsalted, pubkey) failed, %d, %d", stat, stat2);
+      katja_free(&key);
+      katja_free(&pubKey);
+      katja_free(&privKey);
+      return 1;
+   }
+
+   /* sign a message (salted) now (use privKey to make, pubKey to verify) */
+   len = sizeof(out);
+   DO(katja_sign_hash(in, 20, out, &len, &yarrow_prng, prng_idx, hash_idx, 8, &privKey));
+   DO(katja_verify_hash(out, len, in, 20, hash_idx, 8, &stat, &pubKey));
+   /* change a byte */
+   in[0] ^= 1;
+   DO(katja_verify_hash(out, len, in, 20, hash_idx, 8, &stat2, &pubKey));
+   
+   if (!(stat == 1 && stat2 == 0)) {
+      fprintf(stderr, "katja_verify_hash (salted) failed, %d, %d", stat, stat2);
+      katja_free(&key);
+      katja_free(&pubKey);
+      katja_free(&privKey);
+      return 1;
+   }
+#endif
+
+   katja_free(&key);
+   katja_free(&pubKey);
+   katja_free(&privKey);
+}
+   
+   /* free the key and return */
+   return 0;
+}
+
+#else
+
+int katja_test(void)
+{
+   fprintf(stderr, "NOP");
+   return 0;
+}
+
+#endif
diff --git a/testprof/makefile b/testprof/makefile
index 0504608..05ff9b4 100644
--- a/testprof/makefile
+++ b/testprof/makefile
@@ -1,8 +1,13 @@
 CFLAGS += -I../src/headers -I./ -Wall -W
 
+# ranlib tools
+ifndef RANLIB
+   RANLIB=ranlib
+endif
+
 OBJECTS = base64_test.o cipher_hash_test.o der_tests.o                                   \
 dsa_test.o ecc_test.o mac_test.o modes_test.o pkcs_1_test.o rsa_test.o                   \
-store_test.o test.o x86_prof.o
+store_test.o test.o x86_prof.o katja_test.o
 
 ifndef LIBTEST_S
    LIBTEST_S=libtomcrypt_prof.a
@@ -12,7 +17,7 @@ default: $(LIBTEST_S)
 
 $(LIBTEST_S): $(OBJECTS)
 	$(AR) $(ARFLAGS) $@ $(OBJECTS)
-	ranlib $@
+	$(RANLIB) $@
 
 clean:
 	rm -f *.o *.a
diff --git a/testprof/makefile.icc b/testprof/makefile.icc
index 3a36b4c..e021d77 100644
--- a/testprof/makefile.icc
+++ b/testprof/makefile.icc
@@ -3,7 +3,7 @@ CC=icc
 
 OBJECTS = base64_test.o cipher_hash_test.o der_tests.o                                   \
 dsa_test.o ecc_test.o mac_test.o modes_test.o pkcs_1_test.o rsa_test.o                   \
-store_test.o test.o x86_prof.o
+store_test.o test.o x86_prof.o katja_test.o
 
 ifndef LIBTEST_S
    LIBTEST_S = libtomcrypt_prof.a
diff --git a/testprof/makefile.msvc b/testprof/makefile.msvc
index 1cec387..e05e9e6 100644
--- a/testprof/makefile.msvc
+++ b/testprof/makefile.msvc
@@ -2,7 +2,7 @@ CFLAGS = /I../src/headers/ /I./ /Ox /DWIN32 /DLTC_SOURCE /W3 /Fo$@
 
 OBJECTS=base64_test.obj cipher_hash_test.obj der_tests.obj            \
 dsa_test.obj ecc_test.obj mac_test.obj modes_test.obj pkcs_1_test.obj \
-rsa_test.obj store_test.obj test.obj x86_prof.obj
+rsa_test.obj store_test.obj test.obj x86_prof.obj katja_test.obj
 
 tomcrypt_prof.lib: $(OBJECTS)
 	lib /out:tomcrypt_prof.lib $(OBJECTS)
diff --git a/testprof/makefile.shared b/testprof/makefile.shared
index a671b92..e07cfc0 100644
--- a/testprof/makefile.shared
+++ b/testprof/makefile.shared
@@ -2,19 +2,23 @@ CC=libtool --mode=compile gcc
 
 CFLAGS += -I../src/headers -I./ -Wall -W
 
+# ranlib tools
+ifndef RANLIB
+   RANLIB=ranlib
+endif
+
 OBJECTS = base64_test.o cipher_hash_test.o der_tests.o                                   \
 dsa_test.o ecc_test.o mac_test.o modes_test.o pkcs_1_test.o rsa_test.o                   \
-store_test.o test.o x86_prof.o
+store_test.o test.o x86_prof.o katja_test.o
 
 ifndef LIBTEST
    LIBTEST=libtomcrypt_prof.la
-   LIBTEST_S=libtomcrypt_prof.a
 endif
 
 default: $(LIBTEST)
 
 $(LIBTEST): $(OBJECTS)
 	libtool --silent --mode=link gcc $(CFLAGS) `find . -type f | grep "[.]lo" |  xargs` -o $@ -rpath $(LIBPATH) -version-info $(VERSION)
-	libtool --silent --mode=link gcc $(CFLAGS) `find . -type f | grep "[.]o" | xargs`  -o $(LIBTEST_S)
-	ranlib $(LIBTEST_S)
-	libtool --silent --mode=install install -c $@ $(LIBPATH)/$@
+
+install: $(LIBTEST)
+	libtool --silent --mode=install install -c $(LIBTEST) $(LIBPATH)/$(LIBTEST)
diff --git a/testprof/tomcrypt_test.h b/testprof/tomcrypt_test.h
index ccd391c..559d6cf 100644
--- a/testprof/tomcrypt_test.h
+++ b/testprof/tomcrypt_test.h
@@ -27,6 +27,7 @@ int mac_test(void);
 int pkcs_1_test(void);
 int store_test(void);
 int rsa_test(void);
+int katja_test(void);
 int ecc_tests(void);
 int dsa_test(void);
 int der_tests(void);
@@ -61,6 +62,7 @@ void time_mult(void);
 void time_sqr(void);
 void time_prng(void);
 void time_rsa(void);
+void time_katja(void);
 void time_ecc(void);
 void time_macs_(unsigned long MAC_SIZE);
 void time_macs(void);
diff --git a/testprof/x86_prof.c b/testprof/x86_prof.c
index 5e9305a..e9434de 100644
--- a/testprof/x86_prof.c
+++ b/testprof/x86_prof.c
@@ -51,6 +51,10 @@ ulong64 rdtsc (void)
          ulong64 a;
          asm __volatile__ ("rdtsc\nmovl %%eax,(%0)\nmovl %%edx,4(%0)\n"::"r"(&a):"%eax","%edx");
          return a;
+      #elif defined(LTC_PPC32) || defined(TFM_PPC32)
+         unsigned long a, b;
+         __asm__ __volatile__ ("mftbu %1 \nmftb %0\n":"=r"(a), "=r"(b));
+         return (((ulong64)b) << 32ULL) | ((ulong64)a);
       #elif defined(__ia64__)  /* gcc-IA64 version */
          unsigned long result;
          __asm__ __volatile__("mov %0=ar.itc" : "=r"(result) :: "memory");
@@ -538,7 +542,7 @@ int time_hash(void)
 }
 
 #undef MPI
-#warning you need an mp_rand!!!
+//#warning you need an mp_rand!!!
 
 #ifdef MPI
 void time_mult(void)
@@ -705,7 +709,7 @@ void time_rsa(void)
        fprintf(stderr, "RSA-%lu encrypt_key took %15llu cycles\n", x, t2);
 
        t2 = 0;
-       for (y = 0; y < 16; y++) {
+       for (y = 0; y < 2048; y++) {
            t_start();
            t1 = t_read();
            zzz = sizeof(buf[0]);
@@ -717,7 +721,7 @@ void time_rsa(void)
            t1 = t_read() - t1;
            t2 += t1;
        }
-       t2 >>= 4;
+       t2 >>= 11;
        fprintf(stderr, "RSA-%lu decrypt_key took %15llu cycles\n", x, t2);
 
 
@@ -728,6 +732,76 @@ void time_rsa(void)
 void time_rsa(void) { fprintf(stderr, "NO RSA\n"); }
 #endif
 
+#ifdef MKAT      
+/* time various KAT operations */
+void time_katja(void)
+{
+   katja_key key;
+   ulong64 t1, t2;
+   unsigned char buf[2][4096];
+   unsigned long x, y, z, zzz;
+   int           err, zz;
+
+   for (x = 1024; x <= 2048; x += 256) {
+       t2 = 0;
+       for (y = 0; y < 4; y++) {
+           t_start();
+           t1 = t_read();
+           if ((err = katja_make_key(&yarrow_prng, find_prng("yarrow"), x/8, &key)) != CRYPT_OK) {
+              fprintf(stderr, "\n\nkatja_make_key says %s, wait...no it should say %s...damn you!\n", error_to_string(err), error_to_string(CRYPT_OK));
+              exit(EXIT_FAILURE);
+           }
+           t1 = t_read() - t1;
+           t2 += t1;
+
+           if (y < 3) {
+              rsa_free(&key);
+           }
+       }
+       t2 >>= 2;
+       fprintf(stderr, "Katja-%lu make_key    took %15llu cycles\n", x, t2);
+
+       t2 = 0;
+       for (y = 0; y < 16; y++) {
+           t_start();
+           t1 = t_read();
+           z = sizeof(buf[1]);
+           if ((err = katja_encrypt_key(buf[0], 32, buf[1], &z, "testprog", 8, &yarrow_prng,
+                                      find_prng("yarrow"), find_hash("sha1"),
+                                      &key)) != CRYPT_OK) {
+              fprintf(stderr, "\n\nkatja_encrypt_key says %s, wait...no it should say %s...damn you!\n", error_to_string(err), error_to_string(CRYPT_OK));
+              exit(EXIT_FAILURE);
+           }
+           t1 = t_read() - t1;
+           t2 += t1;
+       }
+       t2 >>= 4;
+       fprintf(stderr, "Katja-%lu encrypt_key took %15llu cycles\n", x, t2);
+
+       t2 = 0;
+       for (y = 0; y < 2048; y++) {
+           t_start();
+           t1 = t_read();
+           zzz = sizeof(buf[0]);
+           if ((err = katja_decrypt_key(buf[1], z, buf[0], &zzz, "testprog", 8,  find_hash("sha1"), 
+                                      &zz, &key)) != CRYPT_OK) {
+              fprintf(stderr, "\n\nkatja_decrypt_key says %s, wait...no it should say %s...damn you!\n", error_to_string(err), error_to_string(CRYPT_OK));
+              exit(EXIT_FAILURE);
+           }
+           t1 = t_read() - t1;
+           t2 += t1;
+       }
+       t2 >>= 11;
+       fprintf(stderr, "Katja-%lu decrypt_key took %15llu cycles\n", x, t2);
+
+
+       katja_free(&key);
+  }
+}
+#else
+void time_katja(void) { fprintf(stderr, "NO Katja\n"); }
+#endif
+
 #ifdef MECC
 /* time various ECC operations */
 void time_ecc(void)
@@ -737,11 +811,27 @@ void time_ecc(void)
    unsigned char buf[2][4096];
    unsigned long i, x, y, z;
    int           err;
-   static unsigned long sizes[] = {192/8, 256/8, 384/8, 521/8, 100000};
+   static unsigned long sizes[] = {
+#ifdef ECC192
+192/8, 
+#endif
+#ifdef ECC224
+224/8,
+#endif
+#ifdef ECC256
+256/8, 
+#endif
+#ifdef ECC384
+384/8, 
+#endif
+#ifdef ECC521
+521/8, 
+#endif
+100000};
 
    for (x = sizes[i=0]; x < 100000; x = sizes[++i]) {
        t2 = 0;
-       for (y = 0; y < 16; y++) {
+       for (y = 0; y < 64; y++) {
            t_start();
            t1 = t_read();
            if ((err = ecc_make_key(&yarrow_prng, find_prng("yarrow"), x, &key)) != CRYPT_OK) {
@@ -751,11 +841,11 @@ void time_ecc(void)
            t1 = t_read() - t1;
            t2 += t1;
 
-           if (y < 15) {
+           if (y < 63) {
               ecc_free(&key);
            }
        }
-       t2 >>= 4;
+       t2 >>= 6;
        fprintf(stderr, "ECC-%lu make_key    took %15llu cycles\n", x*8, t2);
 
        t2 = 0;
@@ -881,6 +971,7 @@ void time_encmacs_(unsigned long MAC_SIZE)
    ulong64 t1, t2;
    unsigned long x, z;
    int err, cipher_idx;
+   symmetric_key skey;
 
    fprintf(stderr, "\nENC+MAC Timings (zero byte AAD, 16 byte IV, cycles/byte on %luKB blocks):\n", MAC_SIZE);
 
@@ -909,7 +1000,7 @@ void time_encmacs_(unsigned long MAC_SIZE)
         t1 = t_read() - t1;
         if (t1 < t2) t2 = t1;
    }
-   fprintf(stderr, "EAX \t\t%9llu\n", t2/(ulong64)(MAC_SIZE*1024));
+   fprintf(stderr, "EAX \t\t\t%9llu\n", t2/(ulong64)(MAC_SIZE*1024));
 #endif
 
 #ifdef OCB_MODE
@@ -925,7 +1016,7 @@ void time_encmacs_(unsigned long MAC_SIZE)
         t1 = t_read() - t1;
         if (t1 < t2) t2 = t1;
    }
-   fprintf(stderr, "OCB \t\t%9llu\n", t2/(ulong64)(MAC_SIZE*1024));
+   fprintf(stderr, "OCB \t\t\t%9llu\n", t2/(ulong64)(MAC_SIZE*1024));
 #endif
 
 #ifdef CCM_MODE
@@ -934,14 +1025,30 @@ void time_encmacs_(unsigned long MAC_SIZE)
         t_start();
         t1 = t_read();
         z = 16;
-        if ((err = ccm_memory(cipher_idx, key, 16, IV, 16, NULL, 0, buf, MAC_SIZE*1024, buf, tag, &z, CCM_ENCRYPT)) != CRYPT_OK) {
+        if ((err = ccm_memory(cipher_idx, key, 16, NULL, IV, 16, NULL, 0, buf, MAC_SIZE*1024, buf, tag, &z, CCM_ENCRYPT)) != CRYPT_OK) {
            fprintf(stderr, "\nCCM error... %s\n", error_to_string(err));
            exit(EXIT_FAILURE);
         }
         t1 = t_read() - t1;
         if (t1 < t2) t2 = t1;
    }
-   fprintf(stderr, "CCM \t\t%9llu\n", t2/(ulong64)(MAC_SIZE*1024));
+   fprintf(stderr, "CCM (no-precomp) \t%9llu\n", t2/(ulong64)(MAC_SIZE*1024));
+   
+   cipher_descriptor[cipher_idx].setup(key, 16, 0, &skey);
+   t2 = -1;
+   for (x = 0; x < 10000; x++) {
+        t_start();
+        t1 = t_read();
+        z = 16;
+        if ((err = ccm_memory(cipher_idx, key, 16, &skey, IV, 16, NULL, 0, buf, MAC_SIZE*1024, buf, tag, &z, CCM_ENCRYPT)) != CRYPT_OK) {
+           fprintf(stderr, "\nCCM error... %s\n", error_to_string(err));
+           exit(EXIT_FAILURE);
+        }
+        t1 = t_read() - t1;
+        if (t1 < t2) t2 = t1;
+   }
+   fprintf(stderr, "CCM (precomp) \t\t%9llu\n", t2/(ulong64)(MAC_SIZE*1024));
+   cipher_descriptor[cipher_idx].done(&skey);   
 #endif
 
 #ifdef GCM_MODE
@@ -992,7 +1099,7 @@ void time_encmacs_(unsigned long MAC_SIZE)
         t1 = t_read() - t1;
         if (t1 < t2) t2 = t1;
    }
-   fprintf(stderr, "GCM (precomp)\t%9llu\n", t2/(ulong64)(MAC_SIZE*1024));
+   fprintf(stderr, "GCM (precomp)\t\t%9llu\n", t2/(ulong64)(MAC_SIZE*1024));
    }
 
 #endif