From bbc52b9e1bf4b22ac4616e667b06d217c6ab004e Mon Sep 17 00:00:00 2001 From: Tom St Denis Date: Fri, 20 Jul 2007 17:48:02 +0000 Subject: [PATCH] added libtomcrypt-1.17 --- Doxyfile | 2 +- TODO | 14 +- changes | 19 +- crypt.lof | 12 +- crypt.tex | 95 +- demos/encrypt.c | 34 +- demos/hashsum.c | 26 +- demos/multi.c | 4 +- demos/tv_gen.c | 78 +- doc/crypt.pdf | Bin 818739 -> 827358 bytes libtomcrypt.dsp | 1634 +++++++++++++++++ makefile | 133 +- makefile.icc | 117 +- makefile.msvc | 117 +- makefile.shared | 119 +- makefile.unix | 117 +- notes/etc/saferp_optimizer.c | 2 +- notes/tech0005.txt | 2 +- src/ciphers/aes/aes.c | 4 +- src/ciphers/aes/aes_tab.c | 2 +- src/ciphers/anubis.c | 12 +- src/ciphers/blowfish.c | 4 +- src/ciphers/cast5.c | 14 +- src/ciphers/des.c | 20 +- src/ciphers/kasumi.c | 2 +- src/ciphers/khazad.c | 4 +- src/ciphers/kseed.c | 4 +- src/ciphers/multi2.c | 303 +++ src/ciphers/noekeon.c | 4 +- src/ciphers/rc2.c | 14 +- src/ciphers/rc5.c | 14 +- src/ciphers/rc6.c | 16 +- src/ciphers/safer/safer.c | 74 +- src/ciphers/safer/safer_tab.c | 6 +- src/ciphers/safer/saferp.c | 16 +- src/ciphers/skipjack.c | 4 +- src/ciphers/twofish/twofish.c | 44 +- src/ciphers/twofish/twofish_tab.c | 8 +- src/ciphers/xtea.c | 12 +- src/encauth/ccm/ccm_memory.c | 4 +- src/encauth/ccm/ccm_test.c | 4 +- src/encauth/eax/eax_addheader.c | 4 +- src/encauth/eax/eax_decrypt.c | 4 +- src/encauth/eax/eax_decrypt_verify_memory.c | 4 +- src/encauth/eax/eax_done.c | 4 +- src/encauth/eax/eax_encrypt.c | 4 +- .../eax/eax_encrypt_authenticate_memory.c | 4 +- src/encauth/eax/eax_init.c | 10 +- src/encauth/eax/eax_test.c | 6 +- src/encauth/gcm/gcm_add_aad.c | 10 +- src/encauth/gcm/gcm_add_iv.c | 6 +- src/encauth/gcm/gcm_done.c | 6 +- src/encauth/gcm/gcm_gf_mult.c | 6 +- src/encauth/gcm/gcm_init.c | 10 +- src/encauth/gcm/gcm_memory.c | 8 +- src/encauth/gcm/gcm_mult_h.c | 10 +- src/encauth/gcm/gcm_process.c | 10 +- src/encauth/gcm/gcm_reset.c | 6 +- src/encauth/gcm/gcm_test.c | 4 +- src/encauth/ocb/ocb_decrypt.c | 4 +- src/encauth/ocb/ocb_decrypt_verify_memory.c | 4 +- src/encauth/ocb/ocb_done_decrypt.c | 4 +- src/encauth/ocb/ocb_done_encrypt.c | 4 +- src/encauth/ocb/ocb_encrypt.c | 4 +- .../ocb/ocb_encrypt_authenticate_memory.c | 4 +- src/encauth/ocb/ocb_init.c | 4 +- src/encauth/ocb/ocb_ntz.c | 4 +- src/encauth/ocb/ocb_shift_xor.c | 4 +- src/encauth/ocb/ocb_test.c | 6 +- src/encauth/ocb/s_ocb_done.c | 4 +- src/hashes/chc/chc.c | 4 +- src/hashes/helper/hash_file.c | 2 +- src/hashes/helper/hash_filehandle.c | 2 +- src/hashes/helper/hash_memory.c | 2 +- src/hashes/helper/hash_memory_multi.c | 2 +- src/hashes/md2.c | 8 +- src/hashes/md4.c | 6 +- src/hashes/md5.c | 6 +- src/hashes/rmd128.c | 6 +- src/hashes/rmd160.c | 6 +- src/hashes/rmd256.c | 8 +- src/hashes/rmd320.c | 6 +- src/hashes/sha1.c | 6 +- src/hashes/sha2/sha224.c | 4 +- src/hashes/sha2/sha256.c | 8 +- src/hashes/sha2/sha384.c | 4 +- src/hashes/sha2/sha512.c | 8 +- src/hashes/tiger.c | 4 +- src/hashes/whirl/whirl.c | 6 +- src/hashes/whirl/whirltab.c | 2 +- src/headers/tomcrypt.h | 4 +- src/headers/tomcrypt_cipher.h | 180 +- src/headers/tomcrypt_custom.h | 197 +- src/headers/tomcrypt_hash.h | 90 +- src/headers/tomcrypt_mac.h | 37 +- src/headers/tomcrypt_math.h | 4 +- src/headers/tomcrypt_misc.h | 4 +- src/headers/tomcrypt_pk.h | 48 +- src/headers/tomcrypt_pkcs.h | 24 +- src/headers/tomcrypt_prng.h | 28 +- src/mac/f9/f9_done.c | 2 +- src/mac/f9/f9_file.c | 2 +- src/mac/f9/f9_init.c | 2 +- src/mac/f9/f9_memory.c | 2 +- src/mac/f9/f9_memory_multi.c | 2 +- src/mac/f9/f9_process.c | 2 +- src/mac/f9/f9_test.c | 2 +- src/mac/hmac/hmac_done.c | 24 +- src/mac/hmac/hmac_file.c | 10 +- src/mac/hmac/hmac_init.c | 32 +- src/mac/hmac/hmac_memory.c | 10 +- src/mac/hmac/hmac_memory_multi.c | 12 +- src/mac/hmac/hmac_process.c | 10 +- src/mac/hmac/hmac_test.c | 20 +- src/mac/omac/omac_done.c | 8 +- src/mac/omac/omac_file.c | 8 +- src/mac/omac/omac_init.c | 8 +- src/mac/omac/omac_memory.c | 10 +- src/mac/omac/omac_memory_multi.c | 12 +- src/mac/omac/omac_process.c | 23 +- src/mac/omac/omac_test.c | 6 +- src/mac/pelican/pelican.c | 4 +- src/mac/pelican/pelican_memory.c | 4 +- src/mac/pelican/pelican_test.c | 4 +- src/mac/pmac/pmac_done.c | 2 +- src/mac/pmac/pmac_file.c | 2 +- src/mac/pmac/pmac_init.c | 2 +- src/mac/pmac/pmac_memory.c | 2 +- src/mac/pmac/pmac_memory_multi.c | 2 +- src/mac/pmac/pmac_ntz.c | 2 +- src/mac/pmac/pmac_process.c | 2 +- src/mac/pmac/pmac_shift_xor.c | 2 +- src/mac/pmac/pmac_test.c | 4 +- src/mac/xcbc/xcbc_done.c | 2 +- src/mac/xcbc/xcbc_file.c | 2 +- src/mac/xcbc/xcbc_init.c | 60 +- src/mac/xcbc/xcbc_memory.c | 2 +- src/mac/xcbc/xcbc_memory_multi.c | 2 +- src/mac/xcbc/xcbc_process.c | 2 +- src/mac/xcbc/xcbc_test.c | 2 +- src/math/fp/ltc_ecc_fp_mulmod.c | 353 +++- src/math/gmp_desc.c | 16 +- src/math/ltm_desc.c | 14 +- src/math/multi.c | 2 +- src/math/rand_prime.c | 2 +- src/math/tfm_desc.c | 22 +- src/misc/base64/base64_decode.c | 4 +- src/misc/base64/base64_encode.c | 4 +- src/misc/burn_stack.c | 2 +- src/misc/crypt/crypt.c | 201 +- src/misc/crypt/crypt_argchk.c | 2 +- src/misc/crypt/crypt_cipher_descriptor.c | 2 +- src/misc/crypt/crypt_cipher_is_valid.c | 2 +- src/misc/crypt/crypt_find_cipher.c | 2 +- src/misc/crypt/crypt_find_cipher_any.c | 2 +- src/misc/crypt/crypt_find_cipher_id.c | 2 +- src/misc/crypt/crypt_find_hash.c | 2 +- src/misc/crypt/crypt_find_hash_any.c | 2 +- src/misc/crypt/crypt_find_hash_id.c | 2 +- src/misc/crypt/crypt_find_hash_oid.c | 2 +- src/misc/crypt/crypt_find_prng.c | 2 +- src/misc/crypt/crypt_fsa.c | 2 +- src/misc/crypt/crypt_hash_descriptor.c | 2 +- src/misc/crypt/crypt_hash_is_valid.c | 2 +- src/misc/crypt/crypt_ltc_mp_descriptor.c | 2 +- src/misc/crypt/crypt_prng_descriptor.c | 2 +- src/misc/crypt/crypt_prng_is_valid.c | 2 +- src/misc/crypt/crypt_register_cipher.c | 2 +- src/misc/crypt/crypt_register_hash.c | 2 +- src/misc/crypt/crypt_register_prng.c | 2 +- src/misc/crypt/crypt_unregister_cipher.c | 2 +- src/misc/crypt/crypt_unregister_hash.c | 2 +- src/misc/crypt/crypt_unregister_prng.c | 2 +- src/misc/error_to_string.c | 2 +- src/misc/pkcs5/pkcs_5_1.c | 10 +- src/misc/pkcs5/pkcs_5_2.c | 10 +- src/misc/zeromem.c | 2 +- src/modes/cbc/cbc_decrypt.c | 2 +- src/modes/cbc/cbc_done.c | 2 +- src/modes/cbc/cbc_encrypt.c | 2 +- src/modes/cbc/cbc_getiv.c | 2 +- src/modes/cbc/cbc_setiv.c | 2 +- src/modes/cbc/cbc_start.c | 2 +- src/modes/cfb/cfb_decrypt.c | 2 +- src/modes/cfb/cfb_done.c | 2 +- src/modes/cfb/cfb_encrypt.c | 2 +- src/modes/cfb/cfb_getiv.c | 2 +- src/modes/cfb/cfb_setiv.c | 2 +- src/modes/cfb/cfb_start.c | 2 +- src/modes/ctr/ctr_decrypt.c | 2 +- src/modes/ctr/ctr_done.c | 2 +- src/modes/ctr/ctr_encrypt.c | 6 +- src/modes/ctr/ctr_getiv.c | 2 +- src/modes/ctr/ctr_setiv.c | 2 +- src/modes/ctr/ctr_start.c | 18 +- src/modes/ctr/ctr_test.c | 2 +- src/modes/ecb/ecb_decrypt.c | 2 +- src/modes/ecb/ecb_done.c | 2 +- src/modes/ecb/ecb_encrypt.c | 2 +- src/modes/ecb/ecb_start.c | 2 +- src/modes/f8/f8_decrypt.c | 2 +- src/modes/f8/f8_done.c | 2 +- src/modes/f8/f8_encrypt.c | 2 +- src/modes/f8/f8_getiv.c | 2 +- src/modes/f8/f8_setiv.c | 2 +- src/modes/f8/f8_start.c | 2 +- src/modes/f8/f8_test_mode.c | 2 +- src/modes/lrw/lrw_decrypt.c | 2 +- src/modes/lrw/lrw_done.c | 2 +- src/modes/lrw/lrw_encrypt.c | 2 +- src/modes/lrw/lrw_getiv.c | 2 +- src/modes/lrw/lrw_process.c | 2 +- src/modes/lrw/lrw_setiv.c | 2 +- src/modes/lrw/lrw_start.c | 2 +- src/modes/lrw/lrw_test.c | 2 +- src/modes/ofb/ofb_decrypt.c | 2 +- src/modes/ofb/ofb_done.c | 2 +- src/modes/ofb/ofb_encrypt.c | 2 +- src/modes/ofb/ofb_getiv.c | 2 +- src/modes/ofb/ofb_setiv.c | 2 +- src/modes/ofb/ofb_start.c | 2 +- src/modes/xts/xts_decrypt.c | 141 ++ src/modes/xts/xts_done.c | 34 + src/modes/xts/xts_encrypt.c | 142 ++ src/modes/xts/xts_init.c | 69 + src/modes/xts/xts_mult_x.c | 42 + src/modes/xts/xts_test.c | 199 ++ src/pk/asn1/der/bit/der_decode_bit_string.c | 2 +- src/pk/asn1/der/bit/der_encode_bit_string.c | 2 +- src/pk/asn1/der/bit/der_length_bit_string.c | 2 +- src/pk/asn1/der/boolean/der_decode_boolean.c | 2 +- src/pk/asn1/der/boolean/der_encode_boolean.c | 2 +- src/pk/asn1/der/boolean/der_length_boolean.c | 2 +- src/pk/asn1/der/choice/der_decode_choice.c | 2 +- src/pk/asn1/der/ia5/der_decode_ia5_string.c | 2 +- src/pk/asn1/der/ia5/der_encode_ia5_string.c | 2 +- src/pk/asn1/der/ia5/der_length_ia5_string.c | 2 +- src/pk/asn1/der/integer/der_decode_integer.c | 2 +- src/pk/asn1/der/integer/der_encode_integer.c | 2 +- src/pk/asn1/der/integer/der_length_integer.c | 2 +- .../der_decode_object_identifier.c | 2 +- .../der_encode_object_identifier.c | 2 +- .../der_length_object_identifier.c | 2 +- .../asn1/der/octet/der_decode_octet_string.c | 2 +- .../asn1/der/octet/der_encode_octet_string.c | 2 +- .../asn1/der/octet/der_length_octet_string.c | 2 +- .../der_decode_printable_string.c | 2 +- .../der_encode_printable_string.c | 2 +- .../der_length_printable_string.c | 2 +- .../der/sequence/der_decode_sequence_ex.c | 2 +- .../der/sequence/der_decode_sequence_flexi.c | 2 +- .../der/sequence/der_decode_sequence_multi.c | 2 +- .../der/sequence/der_encode_sequence_ex.c | 2 +- .../der/sequence/der_encode_sequence_multi.c | 2 +- .../asn1/der/sequence/der_length_sequence.c | 2 +- src/pk/asn1/der/sequence/der_sequence_free.c | 2 +- src/pk/asn1/der/set/der_encode_set.c | 2 +- src/pk/asn1/der/set/der_encode_setof.c | 2 +- .../short_integer/der_decode_short_integer.c | 2 +- .../short_integer/der_encode_short_integer.c | 2 +- .../short_integer/der_length_short_integer.c | 2 +- src/pk/asn1/der/utctime/der_decode_utctime.c | 2 +- src/pk/asn1/der/utctime/der_encode_utctime.c | 2 +- src/pk/asn1/der/utctime/der_length_utctime.c | 2 +- src/pk/asn1/der/utf8/der_decode_utf8_string.c | 2 +- src/pk/asn1/der/utf8/der_encode_utf8_string.c | 18 +- src/pk/asn1/der/utf8/der_length_utf8_string.c | 2 +- src/pk/dsa/dsa_decrypt_key.c | 4 +- src/pk/dsa/dsa_encrypt_key.c | 4 +- src/pk/dsa/dsa_export.c | 4 +- src/pk/dsa/dsa_free.c | 4 +- src/pk/dsa/dsa_import.c | 8 +- src/pk/dsa/dsa_make_key.c | 12 +- src/pk/dsa/dsa_shared_secret.c | 4 +- src/pk/dsa/dsa_sign_hash.c | 10 +- src/pk/dsa/dsa_verify_hash.c | 4 +- src/pk/dsa/dsa_verify_key.c | 4 +- src/pk/ecc/ecc.c | 4 +- src/pk/ecc/ecc_ansi_x963_export.c | 4 +- src/pk/ecc/ecc_ansi_x963_import.c | 4 +- src/pk/ecc/ecc_decrypt_key.c | 4 +- src/pk/ecc/ecc_encrypt_key.c | 4 +- src/pk/ecc/ecc_export.c | 4 +- src/pk/ecc/ecc_free.c | 4 +- src/pk/ecc/ecc_get_size.c | 4 +- src/pk/ecc/ecc_import.c | 4 +- src/pk/ecc/ecc_make_key.c | 15 +- src/pk/ecc/ecc_shared_secret.c | 4 +- src/pk/ecc/ecc_sign_hash.c | 4 +- src/pk/ecc/ecc_sizes.c | 4 +- src/pk/ecc/ecc_test.c | 4 +- src/pk/ecc/ecc_verify_hash.c | 4 +- src/pk/ecc/ltc_ecc_is_valid_idx.c | 6 +- src/pk/ecc/ltc_ecc_map.c | 4 +- src/pk/ecc/ltc_ecc_mul2add.c | 4 +- src/pk/ecc/ltc_ecc_mulmod.c | 4 +- src/pk/ecc/ltc_ecc_mulmod_timing.c | 4 +- src/pk/ecc/ltc_ecc_points.c | 4 +- src/pk/ecc/ltc_ecc_projective_add_point.c | 4 +- src/pk/ecc/ltc_ecc_projective_dbl_point.c | 4 +- src/pk/katja/katja_decrypt_key.c | 8 +- src/pk/katja/katja_encrypt_key.c | 8 +- src/pk/katja/katja_export.c | 6 +- src/pk/katja/katja_exptmod.c | 4 +- src/pk/katja/katja_free.c | 2 +- src/pk/katja/katja_import.c | 8 +- src/pk/katja/katja_make_key.c | 2 +- src/pk/pkcs1/pkcs_1_i2osp.c | 8 +- src/pk/pkcs1/pkcs_1_mgf1.c | 10 +- src/pk/pkcs1/pkcs_1_oaep_decode.c | 10 +- src/pk/pkcs1/pkcs_1_oaep_encode.c | 10 +- src/pk/pkcs1/pkcs_1_os2ip.c | 6 +- src/pk/pkcs1/pkcs_1_pss_decode.c | 10 +- src/pk/pkcs1/pkcs_1_pss_encode.c | 10 +- src/pk/pkcs1/pkcs_1_v1_5_decode.c | 12 +- src/pk/pkcs1/pkcs_1_v1_5_encode.c | 22 +- src/pk/rsa/rsa_decrypt_key.c | 24 +- src/pk/rsa/rsa_encrypt_key.c | 26 +- src/pk/rsa/rsa_export.c | 10 +- src/pk/rsa/rsa_exptmod.c | 6 +- src/pk/rsa/rsa_free.c | 4 +- src/pk/rsa/rsa_import.c | 12 +- src/pk/rsa/rsa_make_key.c | 4 +- src/pk/rsa/rsa_sign_hash.c | 22 +- src/pk/rsa/rsa_verify_hash.c | 24 +- src/prngs/fortuna.c | 48 +- src/prngs/rc4.c | 10 +- src/prngs/rng_get_bytes.c | 8 +- src/prngs/rng_make_prng.c | 2 +- src/prngs/sober128.c | 6 +- src/prngs/sprng.c | 4 +- src/prngs/yarrow.c | 70 +- testprof/der_tests.c | 2 +- testprof/dsa_test.c | 2 +- testprof/ecc_test.c | 2 +- testprof/katja_test.c | 2 +- testprof/mac_test.c | 10 +- testprof/modes_test.c | 4 + testprof/pkcs_1_test.c | 4 +- testprof/rsa_test.c | 18 +- testprof/x86_prof.c | 99 +- 341 files changed, 4806 insertions(+), 1740 deletions(-) create mode 100644 libtomcrypt.dsp create mode 100644 src/ciphers/multi2.c create mode 100644 src/modes/xts/xts_decrypt.c create mode 100644 src/modes/xts/xts_done.c create mode 100644 src/modes/xts/xts_encrypt.c create mode 100644 src/modes/xts/xts_init.c create mode 100644 src/modes/xts/xts_mult_x.c create mode 100644 src/modes/xts/xts_test.c diff --git a/Doxyfile b/Doxyfile index b4a01c797..f07c339bf 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.16 +PROJECT_NUMBER = 1.17 # 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 226ec8ae5..30c6e4f8a 100644 --- a/TODO +++ b/TODO @@ -1,11 +1,3 @@ -stopped at ch12 --- needs examples for ecc/dsa!!! (and for asn.1) - -must have for v1.16 -- document PK build flags -- document makefile flags [INSTALL_* for instance] -- prepare manual for printing (both soft and hard cover) - -Nice to have [in order of precedence] -- add X9.63 IES -- add CPP macros like OpenSSL has for ASN1 (e.g. encode/decode functions, etc) shameless ripoff :-) +for 1.18 +- document new ECC functions +- add test for new functions diff --git a/changes b/changes index b2c70140e..85a9c69ca 100644 --- a/changes +++ b/changes @@ -1,3 +1,18 @@ +May 12th, 2007 +v1.17 -- Cryptography Research Inc. contributed another small volley of patches, one to fix __WCHAR_DEFINED__ for BSD platforms, + another to silence MSVC warnings. + -- Added LTC_XCBC_PURE to XCBC mode which lets you use it in three-key mode. + -- [CRI] Added libtomcrypt.dsp for Visual C++ users. + -- [CRI] Added more functions for manipulating the ECC fixed point cache (including saving and loading) + -- [CRI] Modified ecc_make_key() to always produce keys smaller than base point order, for standards-compliance + -- Elliptic Semiconductor contributed XTS chaining mode to the cipher suite (subsequently optimized it) + -- Fixed xcbc_init() keylen when using single key mode. + -- Bruce Fortune pointed out a typo in the hmac_process() description in the manual. Fixed. + -- Added variable width counter support to CTR mode + -- Fixed CMAC (aka OMAC) when using 64-bit block ciphers and LTC_FAST ... my bad. + -- Fixed bug in ecc_is_valid() that would basically always return true + -- renamed a lot of macros to add the LTC_ prefix [e.g. RIJNDAEL => LTC_RIJNDAEL] + December 16th, 2006 v1.16 -- Brian Gladman pointed out that a recent change to GCM broke how the IV was handled. Currently the code complies against his test vectors so the code should be considered frozen now. @@ -1551,6 +1566,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.274 $ */ -/* $Date: 2006/12/16 19:08:17 $ */ +/* $Revision: 1.288 $ */ +/* $Date: 2007/05/12 14:37:41 $ */ diff --git a/crypt.lof b/crypt.lof index 0f1a2fb80..ba16c2d8d 100644 --- a/crypt.lof +++ b/crypt.lof @@ -6,19 +6,19 @@ \contentsline {figure}{\numberline {3.1}{\ignorespaces Built--In Software Ciphers}}{19}{figure.3.1} \contentsline {figure}{\numberline {3.2}{\ignorespaces Twofish Build Options}}{21}{figure.3.2} \addvspace {10\p@ } -\contentsline {figure}{\numberline {4.1}{\ignorespaces Built--In Software Hashes}}{57}{figure.4.1} +\contentsline {figure}{\numberline {4.1}{\ignorespaces Built--In Software Hashes}}{59}{figure.4.1} \addvspace {10\p@ } \addvspace {10\p@ } -\contentsline {figure}{\numberline {6.1}{\ignorespaces List of Provided PRNGs}}{82}{figure.6.1} +\contentsline {figure}{\numberline {6.1}{\ignorespaces List of Provided PRNGs}}{84}{figure.6.1} \addvspace {10\p@ } \addvspace {10\p@ } \addvspace {10\p@ } -\contentsline {figure}{\numberline {9.1}{\ignorespaces DSA Key Sizes}}{119}{figure.9.1} +\contentsline {figure}{\numberline {9.1}{\ignorespaces DSA Key Sizes}}{121}{figure.9.1} \addvspace {10\p@ } -\contentsline {figure}{\numberline {10.1}{\ignorespaces List of ASN.1 Supported Types}}{127}{figure.10.1} +\contentsline {figure}{\numberline {10.1}{\ignorespaces List of ASN.1 Supported Types}}{129}{figure.10.1} \addvspace {10\p@ } \addvspace {10\p@ } -\contentsline {figure}{\numberline {12.1}{\ignorespaces RSA/DH Key Strength}}{149}{figure.12.1} -\contentsline {figure}{\numberline {12.2}{\ignorespaces ECC Key Strength}}{149}{figure.12.2} +\contentsline {figure}{\numberline {12.1}{\ignorespaces RSA/DH Key Strength}}{151}{figure.12.1} +\contentsline {figure}{\numberline {12.2}{\ignorespaces ECC Key Strength}}{151}{figure.12.2} \addvspace {10\p@ } \addvspace {10\p@ } diff --git a/crypt.tex b/crypt.tex index 0d374f742..31bf399b9 100644 --- a/crypt.tex +++ b/crypt.tex @@ -190,7 +190,7 @@ \subsection{Modular} \mysection{Patent Disclosure} The author (Tom St Denis) is not a patent lawyer so this section is not to be treated as legal advice. To the best -of the authors knowledge the only patent related issues within the library are the RC5 and RC6 symmetric block ciphers. +of the author's knowledge the only patent related issues within the library are the RC5 and RC6 symmetric block ciphers. They can be removed from a build by simply commenting out the two appropriate lines in \textit{tomcrypt\_custom.h}. The rest of the ciphers and hashes are patent free or under patents that have since expired. @@ -616,8 +616,8 @@ \subsection{Simple Encryption Demonstration} \hline AES & aes\_desc & 16 & 16, 24, 32 & 10, 12, 14 \\ & aes\_enc\_desc & 16 & 16, 24, 32 & 10, 12, 14 \\ \hline Twofish & twofish\_desc & 16 & 16, 24, 32 & 16 \\ - \hline DES & des\_desc & 8 & 7 & 16 \\ - \hline 3DES (EDE mode) & des3\_desc & 8 & 21 & 16 \\ + \hline DES & des\_desc & 8 & 8 & 16 \\ + \hline 3DES (EDE mode) & des3\_desc & 8 & 24 & 16 \\ \hline CAST5 (CAST-128) & cast5\_desc & 8 & 5 $\ldots$ 16 & 12, 16 \\ \hline Noekeon & noekeon\_desc & 16 & 16 & 16 \\ \hline Skipjack & skipjack\_desc & 8 & 10 & 32 \\ @@ -879,14 +879,37 @@ \subsection{Initialization} parameters \textit{key}, \textit{keylen} and \textit{num\_rounds} are the same as in the XXX\_setup() function call. The final parameter is a pointer to the structure you want to hold the information for the mode of operation. +The routines return {\bf CRYPT\_OK} if the cipher initialized correctly, otherwise, they return an error code. +\subsubsection{CTR Mode} In the case of CTR mode there is an additional parameter \textit{ctr\_mode} which specifies the mode that the counter is to be used in. If \textbf{CTR\_COUNTER\_ LITTLE\_ENDIAN} was specified then the counter will be treated as a little endian value. Otherwise, if \textbf{CTR\_COUNTER\_BIG\_ENDIAN} was specified the counter will be treated as a big endian value. As of v1.15 the RFC 3686 style of increment then encrypt is also supported. By OR'ing \textbf{LTC\_CTR\_RFC3686} with the CTR \textit{mode} value, ctr\_start() will increment the counter before encrypting it for the first time. -The routines return {\bf CRYPT\_OK} if the cipher initialized correctly, otherwise, they return an error code. +As of V1.17, the library supports variable length counters for CTR mode. The (optional) counter length is specified by OR'ing the octet +length of the counter against the \textit{ctr\_mode} parameter. The default, zero, indicates that a full block length counter will be used. This also +ensures backwards compatibility with software that uses older versions of the library. + +\begin{small} +\begin{verbatim} +symmetric_CTR ctr; +int err; +unsigned char IV[16], key[16]; + +/* use a 32-bit little endian counter */ +if ((err = ctr_start(find_cipher("aes"), + IV, key, 16, 0, + CTR_COUNTER_LITTLE_ENDIAN | 4, + &ctr)) != CRYPT_OK) { + handle_error(err); +} +\end{verbatim} +\end{small} + +Changing the counter size has little (really no) effect on the performance of the CTR chaining mode. It is provided for compatibility +with other software (and hardware) which have smaller fixed sized counters. \subsection{Encryption and Decryption} To actually encrypt or decrypt the following routines are provided: @@ -1093,6 +1116,55 @@ \subsection{LRW Mode} int lrw_done(symmetric_LRW *lrw); \end{verbatim} +\subsection{XTS Mode} +As of v1.17, LibTomCrypt supports XTS mode with code donated by Elliptic Semiconductor Inc.\footnote{www.ellipticsemi.com}. +XTS is a chaining mode for 128--bit block ciphers, recommended by IEEE (P1619) +for disk encryption. It is meant to be an encryption mode with random access to the message data without compromising privacy. It requires two private keys (of equal +length) to perform the encryption process. Each encryption invocation includes a sector number or unique identifier specified as a 128--bit string. + +To initialize XTS mode use the following function call: + +\index{xts\_start()} +\begin{verbatim} +int xts_start( int cipher, + const unsigned char *key1, + const unsigned char *key2, + unsigned long keylen, + int num_rounds, + symmetric_xts *xts) +\end{verbatim} +This will start the XTS mode with the two keys pointed to by \textit{key1} and \textit{key2} of length \textit{keylen} octets each. + +To encrypt or decrypt a sector use the following calls: + +\index{xts\_encrypt()} \index{xts\_decrypt()} +\begin{verbatim} +int xts_encrypt( + const unsigned char *pt, unsigned long ptlen, + unsigned char *ct, + const unsigned char *tweak, + symmetric_xts *xts); + +int xts_decrypt( + const unsigned char *ct, unsigned long ptlen, + unsigned char *pt, + const unsigned char *tweak, + symmetric_xts *xts); +\end{verbatim} +The first will encrypt the plaintext pointed to by \textit{pt} of length \textit{ptlen} octets, and store the ciphertext in the array pointed to by +\textit{ct}. It uses the 128--bit tweak pointed to by \textit{tweak} to encrypt the block. The decrypt function performs the opposite operation. Both +functions support ciphertext stealing (blocks that are not multiples of 16 bytes). + +The P1619 specification states the tweak for sector number shall be represented as a 128--bit little endian string. + +To terminate the XTS state call the following function: + +\index{xts\_done()} +\begin{verbatim} +void xts_done(symmetric_xts *xts); +\end{verbatim} + + \subsection{F8 Mode} \index{F8 Mode} The F8 Chaining mode (see RFC 3711 for instance) is yet another chaining mode for block ciphers. It behaves much like CTR mode in that it XORs a keystream @@ -2098,8 +2170,8 @@ \chapter{Message Authentication Codes} const unsigned char *in, unsigned long inlen); \end{verbatim} -\textit{hmac} is the HMAC state you are working with. \textit{buf} is the array of octets to send into the HMAC process. \textit{len} is the -number of octets to process. Like the hash process routines you can send the data in arbitrarily sized chunks. When you +\textit{hmac} is the HMAC state you are working with. \textit{in} is the array of octets to send into the HMAC process. \textit{inlen} is the +number of octets to process. Like the hash process routines, you can send the data in arbitrarily sized chunks. When you are finished with the HMAC process you must call the following function to get the HMAC code: \index{hmac\_done()} \begin{verbatim} @@ -2511,6 +2583,13 @@ \subsection{Example} This will initialize the XCBC--MAC state \textit{xcbc}, with the key specified in \textit{key} of length \textit{keylen} octets. The cipher indicated by the \textit{cipher} index can be either a 64 or 128--bit block cipher. This will return \textbf{CRYPT\_OK} on success. +\index{LTC\_XCBC\_PURE} +It is possible to use XCBC in a three key mode by OR'ing the value \textbf{LTC\_XCBC\_PURE} against the \textit{keylen} parameter. In this mode, the key is +interpretted as three keys. If the cipher has a block size of $n$ octets, the first key is then $keylen - 2n$ octets and is the encryption key. The next +$2n$ octets are the $K_1$ and $K_2$ padding keys (used on the last block). For example, to use AES--192 \textit{keylen} should be $24 + 2 \cdot 16 = 56$ octets. +The three keys are interpretted as if they were concatenated in the \textit{key} buffer. + + To process data through XCBC--MAC use the following function: \index{xcbc\_process()} @@ -6485,5 +6564,5 @@ \subsection{RSA Functions} \end{document} % $Source: /cvs/libtom/libtomcrypt/crypt.tex,v $ -% $Revision: 1.123 $ -% $Date: 2006/12/16 19:08:17 $ +% $Revision: 1.128 $ +% $Date: 2007/03/10 23:59:54 $ diff --git a/demos/encrypt.c b/demos/encrypt.c index 80ec5dc2e..12b234652 100644 --- a/demos/encrypt.c +++ b/demos/encrypt.c @@ -26,58 +26,58 @@ void register_algs(void) { int x; -#ifdef RIJNDAEL +#ifdef LTC_RIJNDAEL register_cipher (&aes_desc); #endif -#ifdef BLOWFISH +#ifdef LTC_BLOWFISH register_cipher (&blowfish_desc); #endif -#ifdef XTEA +#ifdef LTC_XTEA register_cipher (&xtea_desc); #endif -#ifdef RC5 +#ifdef LTC_RC5 register_cipher (&rc5_desc); #endif -#ifdef RC6 +#ifdef LTC_RC6 register_cipher (&rc6_desc); #endif -#ifdef SAFERP +#ifdef LTC_SAFERP register_cipher (&saferp_desc); #endif -#ifdef TWOFISH +#ifdef LTC_TWOFISH register_cipher (&twofish_desc); #endif -#ifdef SAFER +#ifdef LTC_SAFER register_cipher (&safer_k64_desc); register_cipher (&safer_sk64_desc); register_cipher (&safer_k128_desc); register_cipher (&safer_sk128_desc); #endif -#ifdef RC2 +#ifdef LTC_RC2 register_cipher (&rc2_desc); #endif -#ifdef DES +#ifdef LTC_DES register_cipher (&des_desc); register_cipher (&des3_desc); #endif -#ifdef CAST5 +#ifdef LTC_CAST5 register_cipher (&cast5_desc); #endif -#ifdef NOEKEON +#ifdef LTC_NOEKEON register_cipher (&noekeon_desc); #endif -#ifdef SKIPJACK +#ifdef LTC_SKIPJACK register_cipher (&skipjack_desc); #endif -#ifdef KHAZAD +#ifdef LTC_KHAZAD register_cipher (&khazad_desc); #endif -#ifdef ANUBIS +#ifdef LTC_ANUBIS register_cipher (&anubis_desc); #endif if (register_hash(&sha256_desc) == -1) { - printf("Error registering SHA256\n"); + printf("Error registering LTC_SHA256\n"); exit(-1); } @@ -144,7 +144,7 @@ int main(int argc, char *argv[]) hash_idx = find_hash("sha256"); if (hash_idx == -1) { - printf("SHA256 not found...?\n"); + printf("LTC_SHA256 not found...?\n"); exit(-1); } diff --git a/demos/hashsum.c b/demos/hashsum.c index 4e9b0fb5f..4e315011b 100644 --- a/demos/hashsum.c +++ b/demos/hashsum.c @@ -68,43 +68,43 @@ void register_algs(void) { int err; -#ifdef TIGER +#ifdef LTC_TIGER register_hash (&tiger_desc); #endif -#ifdef MD2 +#ifdef LTC_MD2 register_hash (&md2_desc); #endif -#ifdef MD4 +#ifdef LTC_MD4 register_hash (&md4_desc); #endif -#ifdef MD5 +#ifdef LTC_MD5 register_hash (&md5_desc); #endif -#ifdef SHA1 +#ifdef LTC_SHA1 register_hash (&sha1_desc); #endif -#ifdef SHA224 +#ifdef LTC_SHA224 register_hash (&sha224_desc); #endif -#ifdef SHA256 +#ifdef LTC_SHA256 register_hash (&sha256_desc); #endif -#ifdef SHA384 +#ifdef LTC_SHA384 register_hash (&sha384_desc); #endif -#ifdef SHA512 +#ifdef LTC_SHA512 register_hash (&sha512_desc); #endif -#ifdef RIPEMD128 +#ifdef LTC_RIPEMD128 register_hash (&rmd128_desc); #endif -#ifdef RIPEMD160 +#ifdef LTC_RIPEMD160 register_hash (&rmd160_desc); #endif -#ifdef WHIRLPOOL +#ifdef LTC_WHIRLPOOL register_hash (&whirlpool_desc); #endif -#ifdef CHC_HASH +#ifdef LTC_CHC_HASH register_hash(&chc_desc); if ((err = chc_register(register_cipher(&aes_enc_desc))) != CRYPT_OK) { printf("chc_register error: %s\n", error_to_string(err)); diff --git a/demos/multi.c b/demos/multi.c index 424a19031..82d543f85 100644 --- a/demos/multi.c +++ b/demos/multi.c @@ -33,7 +33,7 @@ int main(void) return EXIT_FAILURE; } -/* HMAC */ +/* LTC_HMAC */ len = sizeof(buf[0]); hmac_memory(find_hash("sha256"), key, 16, (unsigned char*)"hello", 5, buf[0], &len); len2 = sizeof(buf[0]); @@ -55,7 +55,7 @@ int main(void) return EXIT_FAILURE; } -/* OMAC */ +/* LTC_OMAC */ len = sizeof(buf[0]); omac_memory(find_cipher("aes"), key, 16, (unsigned char*)"hello", 5, buf[0], &len); len2 = sizeof(buf[0]); diff --git a/demos/tv_gen.c b/demos/tv_gen.c index 4d4db068b..4518ebd4b 100644 --- a/demos/tv_gen.c +++ b/demos/tv_gen.c @@ -4,93 +4,93 @@ void reg_algs(void) { int err; -#ifdef RIJNDAEL +#ifdef LTC_RIJNDAEL register_cipher (&aes_desc); #endif -#ifdef BLOWFISH +#ifdef LTC_BLOWFISH register_cipher (&blowfish_desc); #endif -#ifdef XTEA +#ifdef LTC_XTEA register_cipher (&xtea_desc); #endif -#ifdef RC5 +#ifdef LTC_RC5 register_cipher (&rc5_desc); #endif -#ifdef RC6 +#ifdef LTC_RC6 register_cipher (&rc6_desc); #endif -#ifdef SAFERP +#ifdef LTC_SAFERP register_cipher (&saferp_desc); #endif -#ifdef TWOFISH +#ifdef LTC_TWOFISH register_cipher (&twofish_desc); #endif -#ifdef SAFER +#ifdef LTC_SAFER register_cipher (&safer_k64_desc); register_cipher (&safer_sk64_desc); register_cipher (&safer_k128_desc); register_cipher (&safer_sk128_desc); #endif -#ifdef RC2 +#ifdef LTC_RC2 register_cipher (&rc2_desc); #endif -#ifdef DES +#ifdef LTC_DES register_cipher (&des_desc); register_cipher (&des3_desc); #endif -#ifdef CAST5 +#ifdef LTC_CAST5 register_cipher (&cast5_desc); #endif -#ifdef NOEKEON +#ifdef LTC_NOEKEON register_cipher (&noekeon_desc); #endif -#ifdef SKIPJACK +#ifdef LTC_SKIPJACK register_cipher (&skipjack_desc); #endif -#ifdef ANUBIS +#ifdef LTC_ANUBIS register_cipher (&anubis_desc); #endif -#ifdef KHAZAD +#ifdef LTC_KHAZAD register_cipher (&khazad_desc); #endif -#ifdef TIGER +#ifdef LTC_TIGER register_hash (&tiger_desc); #endif -#ifdef MD2 +#ifdef LTC_MD2 register_hash (&md2_desc); #endif -#ifdef MD4 +#ifdef LTC_MD4 register_hash (&md4_desc); #endif -#ifdef MD5 +#ifdef LTC_MD5 register_hash (&md5_desc); #endif -#ifdef SHA1 +#ifdef LTC_SHA1 register_hash (&sha1_desc); #endif -#ifdef SHA224 +#ifdef LTC_SHA224 register_hash (&sha224_desc); #endif -#ifdef SHA256 +#ifdef LTC_SHA256 register_hash (&sha256_desc); #endif -#ifdef SHA384 +#ifdef LTC_SHA384 register_hash (&sha384_desc); #endif -#ifdef SHA512 +#ifdef LTC_SHA512 register_hash (&sha512_desc); #endif -#ifdef RIPEMD128 +#ifdef LTC_RIPEMD128 register_hash (&rmd128_desc); #endif -#ifdef RIPEMD160 +#ifdef LTC_RIPEMD160 register_hash (&rmd160_desc); #endif -#ifdef WHIRLPOOL +#ifdef LTC_WHIRLPOOL register_hash (&whirlpool_desc); #endif -#ifdef CHC_HASH +#ifdef LTC_CHC_HASH register_hash(&chc_desc); if ((err = chc_register(register_cipher(&aes_desc))) != CRYPT_OK) { printf("chc_register error: %s\n", error_to_string(err)); @@ -238,12 +238,12 @@ void hmac_gen(void) out = fopen("hmac_tv.txt", "w"); fprintf(out, -"HMAC Tests. In these tests messages of N bytes long (00,01,02,...,NN-1) are HMACed. The initial key is\n" -"of the same format (the same length as the HASH output size). The HMAC key in step N+1 is the HMAC output of\n" +"LTC_HMAC Tests. In these tests messages of N bytes long (00,01,02,...,NN-1) are LTC_HMACed. The initial key is\n" +"of the same format (the same length as the HASH output size). The LTC_HMAC key in step N+1 is the LTC_HMAC output of\n" "step N.\n\n"); for (x = 0; hash_descriptor[x].name != NULL; x++) { - fprintf(out, "HMAC-%s\n", hash_descriptor[x].name); + fprintf(out, "LTC_HMAC-%s\n", hash_descriptor[x].name); /* initial key */ for (y = 0; y < (int)hash_descriptor[x].hashsize; y++) { @@ -290,8 +290,8 @@ void omac_gen(void) out = fopen("omac_tv.txt", "w"); fprintf(out, -"OMAC Tests. In these tests messages of N bytes long (00,01,02,...,NN-1) are OMAC'ed. The initial key is\n" -"of the same format (length specified per cipher). The OMAC key in step N+1 is the OMAC output of\n" +"LTC_OMAC Tests. In these tests messages of N bytes long (00,01,02,...,NN-1) are LTC_OMAC'ed. The initial key is\n" +"of the same format (length specified per cipher). The LTC_OMAC key in step N+1 is the LTC_OMAC output of\n" "step N (repeated as required to fill the array).\n\n"); for (x = 0; cipher_descriptor[x].name != NULL; x++) { @@ -303,7 +303,7 @@ void omac_gen(void) if (cipher_descriptor[x].keysize(&kl) != CRYPT_OK) { kl = cipher_descriptor[x].max_key_length; } - fprintf(out, "OMAC-%s (%d byte key)\n", cipher_descriptor[x].name, kl); + fprintf(out, "LTC_OMAC-%s (%d byte key)\n", cipher_descriptor[x].name, kl); /* initial key/block */ for (y = 0; y < kl; y++) { @@ -345,8 +345,8 @@ void pmac_gen(void) out = fopen("pmac_tv.txt", "w"); fprintf(out, -"PMAC Tests. In these tests messages of N bytes long (00,01,02,...,NN-1) are OMAC'ed. The initial key is\n" -"of the same format (length specified per cipher). The OMAC key in step N+1 is the OMAC output of\n" +"PMAC Tests. In these tests messages of N bytes long (00,01,02,...,NN-1) are LTC_OMAC'ed. The initial key is\n" +"of the same format (length specified per cipher). The LTC_OMAC key in step N+1 is the LTC_OMAC output of\n" "step N (repeated as required to fill the array).\n\n"); for (x = 0; cipher_descriptor[x].name != NULL; x++) { @@ -767,14 +767,14 @@ int main(void) reg_algs(); printf("Generating hash vectors..."); fflush(stdout); hash_gen(); printf("done\n"); printf("Generating cipher vectors..."); fflush(stdout); cipher_gen(); printf("done\n"); - printf("Generating HMAC vectors..."); fflush(stdout); hmac_gen(); printf("done\n"); - printf("Generating OMAC vectors..."); fflush(stdout); omac_gen(); printf("done\n"); + printf("Generating LTC_HMAC vectors..."); fflush(stdout); hmac_gen(); printf("done\n"); + printf("Generating LTC_OMAC vectors..."); fflush(stdout); omac_gen(); printf("done\n"); printf("Generating PMAC vectors..."); fflush(stdout); pmac_gen(); printf("done\n"); printf("Generating EAX vectors..."); fflush(stdout); eax_gen(); printf("done\n"); printf("Generating OCB vectors..."); fflush(stdout); ocb_gen(); printf("done\n"); printf("Generating CCM vectors..."); fflush(stdout); ccm_gen(); printf("done\n"); printf("Generating GCM vectors..."); fflush(stdout); gcm_gen(); printf("done\n"); - printf("Generating BASE64 vectors..."); fflush(stdout); base64_gen(); printf("done\n"); + printf("Generating LTC_BASE64 vectors..."); fflush(stdout); base64_gen(); printf("done\n"); printf("Generating MATH vectors..."); fflush(stdout); math_gen(); printf("done\n"); printf("Generating ECC vectors..."); fflush(stdout); ecc_gen(); printf("done\n"); printf("Generating LRW vectors..."); fflush(stdout); lrw_gen(); printf("done\n"); diff --git a/doc/crypt.pdf b/doc/crypt.pdf index 7738250243c7640af2d0c77ce488de8942d4e30d..b4668a99db13fa4ee69464669b78041a9abe8886 100644 GIT binary patch delta 351139 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Πkrfo$sh1dB>^cP^NT{h>qjdmhDj_p+ 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�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

B4km~~&atz>Yj!}axO3cfyMcoF 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 ROwE0iujqI3oRBfhhKOr6hrZoMWr5-TR( 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 nt5_{;|TF9 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

7kBc~yXu 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

#wpbT$}ZH{3})0AydMxrRj^W>J^_X;>$uDej= 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

`Pyb{NEY~qDrEYU2a#dgIG7l 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

0{#*isK9$q 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%0Ax8E9Udd=v6njO1Z}h|vj`B)mRxZeGu8^L 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 <~RdSs$s|2XeHD9M*7z=o+?fM4GaCO zr+H<#KM05`8=N0Cf!VUj$3+<`K@R`zYmftEtTi|Qm{ZZYKk{p*Cdz4SGEY5%48#Qz`tIMAN+OQ%!+N-W zeOhkYl(p9{USeR0KIDG`^K8I*4iF^~Qtr_`T>|RQ-}wo_@ggos_IyH$jUW@q-pQ3J zd2}2BbQh7Mi^>FlL>jrJNrV)8Zl5jZ9aa{Y(c(HO>8PS2rlDC<&1l>i)xLD;-B&%v zF9)j9&1AhJBBB?sn5h^ASP2R8!b0?&vat#))Z7%PF3Mpf7N+-+jn{PJW8*q5RY091 z5Dy1+H-IEe$z8!Bb~@2iA5abP|l^p2}`* zxdK0eklN!nM zPSxx~0afSA>!;@`SN}<%a6_ zC9ER6t=#9_P(7u;S4Qg+`<)r8+$P-SN9LUFJUdx+;0C+^bYk*^4j8A!FGY{vrH?)I z-M2Eg28}P+Yv>v-3U)V1z_qfhc30w4xTU%+f4A$Uvka)|jsD#B=^gA>UAgEg69psd z+(mc8BwB1@Czg9?WQ>|zjgog14ei6W3%okG*qb3%D9AGMwzZm+E^g*oa`M)^$PetK z>@=Q}%Z&;EXuHKk?3L(bQ3M`)exnrUxJ@62{{8maKi#fswdU*Y&M=^-{M2O|ey)3L z81zvNzn=Smp2iYt-ADN}l)yxOD1ZF6(%t~nm}iMB&48Clk{w5Bg@xUNF8H7pEn^H2 z%{K*r`6&rin4=2nx(LXCWIJ48i{gg}zHUJ84HaGkW`F@4h|r=1$_5YonV)F?h!?&V zhOlQ~a*kX#1|NkB;Z_jc%HH#{euCaq+`X&bXZC;*Seau5DOO=Q4Q?U19-1sJD`MUchb`7@u{ZC$uq4J zt}EPtSu8^<3UnkSp2?m>2=`5HO8>uukBVTQGUf(e#83^Mzp}2E?i#Xem?a^T9~A;$ zkTMcTdLo>sY&Wp@vxvIG_>B+{XQ@KvF&Z8< z4Uj8yTO?GtXmOZ^ol1zO$J=CU#Xqrw+ybQmz{Ovy7O8u+#nv_ST2pHZ_i zFeY3-gdegA%g#bk0qcI8-7aY7;gMt@EVQY4$Bn-GUMr0Gt2AmXdiyze~8{>0nvZ_#Ou+FOBCSr}86gAHcjU%;r3KZrfE0ivA7))A5ibU`4mp~Gdg zb-{xJPklg+vYci4vOI0Vp;A}7vAdI5t44Z1=trn2=1k}KiH$6Q^zQK)F!%l9F$^pc zcrxHTnksI(?8&i+MR#&(2KJh5yWR@RTMN&@YZ!0w2KjTuVAi@Ys3g zftp;vFfk^;B|Xotx?>*U-Fkn?q|U(H(kaM*#BDr_rSBfBij0kEBL(*Avlk%%Y6tiG zJ{^{oNGdq)a^dWE4RySr~&fSN>bS;7M4#JJ5og1B(&vy+Y+KHu`^c z!LWUW1}+~iXEu)%9WC6HZu=E4-7s%+t8czKQYyUw#XmQK z?*xJbpC(_S%ZP|8v6$Vb(9!E&D<~nnuEg5CFWH3t{}Lu@_VzK@$jc4U4qb#$U2_^I zheTPW_jow^c!jt`?;yw2$>iUn7M7cTHzqanfePMSVM*UR~|DF4=WQv z`5vi~l%l2&!G0a39}2BG3f#DJ)u_5t&Ba5fcCcKGnXBa|7Bo=9uuT(j2`)4xHFVgN zGZ)4PZ`LIriS8;>l5vRx;%oYN=XUllhYl7CP?P`u8Pv%*dfag@^}BZ*dYv8Og+E*p zUdzwc!(btk=6Ggqjc_M$wCMqP<03brxp)yy0J<3ZmB-Kqra9eMtjfkLVL=JWGl{-#oAU7VZ##VwH>+h&3+3rS^?V%g%$D3k%U(s|a7$jj3rj|ice z7wO>RwpU{jRtl95c&qY(G)blIWBVN=L2)QMWGuY%XPxqtjjHp`Sr=jg$8n?h^{epV zj#(!rwWa(5WtJV>Wi)VNA8Wj(Ye*@E(P>ZZdM*nA?D0G5S4)IaR>QxDHMH$tJmROQ zdAmnw4(80oeh__hYg}%PP*%@Qjhb^dAh_HD_#;TRq)-V3fPNAt`kJWX?EF5Q;bA|e ze(q(6#_vXS&j-UwGH0Pl=^*l9^QVM9eOz(J{zJP^Ji`$zI~x)$VTx$WQS1?{tG>{5 z3Awu&7lO8t@PakzIG+__ESM$08VG+doA;mfyRSz+$GpwHcZB384T+OO7-I7DFc;BZ zVj_hk1k21c09FM8#|T5i{nCDyzJoV1pWmB6#uvM+ey7$%De+;&Uj-clyh zhtdW$6@sxpP1Eup+%gGgsM*FDXgrx(muON&sFjHoTI5cNhPG%qcl*D`dl09M3AO#n zMRHSh0V(@N*nbyIaXzn|g>tdBl5PsCN2SF$$>g1C(6fcb1agUn7CMa`AyP|)Dbo+N zAl!IT$mwF892bl34w&?FvP$YPJ?JvrOmQ2J9?41t#uKd~KeF{lQVqk&W6h+`{pG0l zctRm?tyytAEl4u{hSyV{b4-d6>Le5ACaEJK0u}&Pt6vS$gX1QV^q3rU$2T4s_qcJ< z+_R|bZAoUXRJp{Guulw&(ncoXAA-M9ylG{;H-pK8br`ZDQ|Ei7Y=NnElXXnhRjV5{ z3Lqz?)hC^`O1c^=Qm6~Zdz|sL3iQe<#1F=%%$Ay{L=B?q6y;&7J`fPz=&0q1larEC z08E+MwnQe5Y0WPNRpM0Y&|8fR*wv>-m#8bD`<9tC{84T5VY)QfOfWrxZzB8f5!)l$ zV~;fWs!;9s+Gym!hFiRgwA8<>jy!vD{7k|6I3BuSTDt3>pC7vRcp8}c)zx8rYF3AY zeJ^A}f{klSn`X=AIcFbmM4Y51kX(5>-qWJ}V9UOaY%i&h0qDA2 zwqh-qm3q!|<@#~){Q>_{dA4v;Y8Rh{5BOnZ2dwWXyeRGR@8ejoX3}S?`G!8?S#&vT z{{_o?@=Et(3wyL%p%Ii=%VE@~T6|GWV?nXk4SJTzveT`GrOhzc?nW5xC{>7y^Qxtm z+V#@SkM-R5o+weVBOx$OCcP(7148FHv9mN-Zj|?oTwrjwf0L6c{#@nl=g$Jg>m+ix z$NiM_b;glk&8VQbEAy6FW8Sv{JwddYXajk|mk}D)_gSKE!Cg?M%B;}UIY$VUAFSJz z03VK3c)HYfd|gcrmYQ70Gj+a(!R^{15Yaj1UNjJE)^aJKoUhz*#xNjJ00I#rgO}+n znq}Afs!ZDVGG!iQ#!pliIAz%*TkZ2V`g#`m=D7gM3#UEyN=|_Wn!0N53W;Nf4YscH zqNYFvQLAJPljhiC+)LY-{S+~km`=Ac?Dg%ipj*g`yoE$txU!g*Q}M=pKJ-) z_ryv=B+Sf`>;%h?BvwNUjA8`+Yot&0-)WYz@?8}Stw&Rn_~?x$rakjKCb$&mr=l)* ze95d@XJt}AyiO~81i{(FX!X?lWtAp@EsP2|@8#uxK2Kt3j$f9JG#G-Ub-%vHwv(I& z5Zzdrf7xKqKGI`Ih`ayntg_6&6ect#+?!(OukR9T1mvpB#QypLMLz`P{QnF%|GlYV zEiOTZ#df(HbrrkI-e?L(QLcP@XQ z#u~77sH#vkwu2=i3`nqExv~tEo&`_mcYAE#Hn5l~`7WxcmR4)jL4r^?uUMFBmJSoe zSg0>+&Ds=hY%^NqAw+1?H`dqFTe&Bz^Mo%zgZ{H8JXFHxh$5Ux8obPAB+=xGjnQEF zfl@AN)s6ZVu>+7%3?dEuL`?YORn;e}EgQrZT~Ry*sB*m|)j25su^smGxrvvF$Y}Fv z>}z>Y`#+^!QX)Vh;dg2$S0m}uqa2Yfr*v=o?=ul+a46O#fL6iQ7q6 zNU9R3ZXp(U*NjPK^uw<&SU|`xD;AvZK&$r%GQX}7P5^{O!8@LpEE1GE#s1n-A)I(M z7cy5~#Q?RbP-r<`uqp?EsYivV9Q(4V#Zt>s^!ANJ7?WB}bYN+gnPz_A+mseW+Du57 zj}LYqHYYK~mejok30S+(h9>(6W=>vFzmVIKv=}J-^ioz|DH{-=6FgGqjZK0+2{2o) zH9>qXD}YOO1QsI}rVtnQUVZNqg)mH&oQ8$MD{uqu3Vn!&t~Hg_mJ=%8+KT5^_ydHb zn1BW}wO3s|6J$>$VB!-Fil6(_@9cc(g7_WV-v^H5&B5XTs!thc5pl@irn_o7aO1O` zLvQuO!SdZ)K7a44?)QbyZ?D~zom{J13mbwZU_k03@S?@2_AWGGHl^ZJwjzg#bpvP^ z1VcS>gPn2P*j6rkvm^JfxMrr4hN()5T)DHvleNPQ*cVQ&!S2T3?D`_e<`=^~;%Uj)Za&>df0%SNg!4xh=%Udn{56htfG>H2%x7ugJ4jj^vphw-IBR^K^ zAAsO<2Y-qd&_jNAJfvE%J>o0>)tAoJw*+h7j$%-WzU+u*^`4e$Naa)%rJoIx6B~x( zk&UV-pO&FS1vMC>qk|h+7K^i5yF05>f`7h_`t0pA1w$r`K3a`{zx)wseRT6Lc?_*v zv2{z&_djgoEUl)zA6?HZ*ymW$!0#+sqkz-tXno0>M4Rhx!=WR#&dv6@_8=T65+sec zoCjCuKZPVHltk@f#xJOEnI7|45&(tLbb=7o~db;*)q5KFDgZ!7hxtU4sBzHN{D`^-Nj-p|96tQ3j)KM#Y zLXlaYun-{d_mQ6Woj8@<$|N@!Vt{vN4;VhoaFFUNPQVei1^j)icJ^|Z3=R&*58YFe z8+n!*);t1_ZdIf?Q~RE=XfdN%*HzAd%7YJ`tnNepCD*;P>%Q0NG7 z9`MF)sbL-wxwkC0CR^U4%XB}%aZ~#=)Z{;5iqq|n^^=s>EbbmVL+>^ircL)@_=>6jB#qT6FL{83(+C z(1TmwSr3V6=NPTw78<<*JHTwzTt1ka#8NZ4u#PlEou&Mk`cZ1FQROiF z7NSs6GOu1c&@2D5=Sm@i5`g&|S?zD(b&Zw6?4Lp0QMrf<_-Ag<h(UoXS_%nc{n?Bw(R*_7+^F`W#zCy86E}6H&HUeREuX&+BRIux`F)z z(90``X{>}RaOWC+!maHDKG(J9sMQWiOC*@h_!?Gjv4c>Qn+n#~7>2@q^>g#)!;njr zw`{;1+?Lw}Y<+0s;1w#&*xa6#5CK`L(LuQj2L7@MB-GSpdhMSG^&`YEFKN!U1UK`^ zAqB#!wz^TnGM?*k|I4NCws>u!sXp|!Vu|JF%DsV%riqZ3j3Xm9JVDIfT1~9lNPr>% zBWRZmdF}NCbI8iCz#w~Gq~=Toks(&Anq;!VVI3w75JKET%5KWhD^XoD@-uS4u3o4@ z!koX@5j`Gp9npX4tVYv^uy_`DlngiLajS;!srB-1?DedBcZv4qDQe~BwWPuv<5`&? zogcd0pIrX+^6Ta1$H>RU!KbU^xiU#FkiOTnt1_Fmt*S2**5gF84W z591+Xz!%ZGVy$0KXcEeJr9@fYc`_tiWPOwpuzY?~W8{{VfA99_sV;2j4D!n(6>tt! z^6wLc1G^{aHrY{9vl~dw=BRuC|Dys&bCjC!$CP#lcca%Jl5UD-z~ z2Hxq6WDcib-eo;E09TY8QA`_#vPyn7UI-=~(D!Mel)>itx1f&=cvNSXO)h3lyBpbn zd}}{COkzx^h814Zv|lu^P+Nj-Xq$kV%vr^OyQXZ>RbnG5c4PK$J!65;V0KPHVSz|Z zYUEiO1-FltvznSP_58y}e__c53vd)_iuaLGN1aO(9NCZk9aLw**>j7o4x6pl+2(0BiGh_2ZpOGL8QN04?AI&Z+<2`O53w8F)J; zV8aWX*JJ5y7-kh#pc9L&TnL4J779z9t}&9}@P6i1^Cf&pVLIM+}^Dqzi-qvFC&MUsd#xC_zA^t4^H z40et&Zv2IEMEVA^T|iO2kjpMBAo+J~nMnaTu+whjLI*>2;le`$mrQMJH8t>+z+>c_)pJ&N(lAb?;FvH7=%)bZ^%(HZ3e^~xQpJ{b)_QUF*$b=rkuqm%Ah^Cs>WfZB`O*SE%U zF?l7*3j}hvfhP|YDC6jFIUm7Ys_9H*iw#rMbqF0f=MpycLdRW_^CeGJQzVN>wn=b_ zIv7ta2w!HEYxmJwT+dEC*0^^CoWq!OEleX{W{&-$mgCxAZvt2l z-1(>CTS&|zPwnj|(3W6vKwQcpzb(|M%&sEq!=25KdhxBpd1A4hNS!$o^j_Maj-phe zvK*HjJ@bl(WjaftBR?xukdOx~cY(wcRM3F`TUO zXyCtVWc(s4=l?y5F#q?ig^iUxwF(OyI<6moY-XL&ZG(rUUU(r zuOSCY3Fmw*jTK8?3hSEb)2+FahEhg}#b*4{M&<|nj5iA6 zB_5I`PsFaV19M23b?}{v60Zq9_*koyUr38e?soPK{0HkF>po?kagp@yZA`ix} zZQ3*PB+~xlf%3s<5FO(8zxH0bp1dYlOWIfHC#bIH%TN16vAPEfQ8ax)rpyQ?K<44u z5t%fhQzk$Ah48P0zW&+B;yByHnCt&OB`f`U8G5N9<=jpgX`d;jFQblBI*kpQIW5~| z)&E8y{08cx2KXP{`fX6Sb^-0!^?Au}t(L^5pzR+VG>1&?GW@=@12dDcJdXP2gSMI- z(1uO)>r97o%Uwg1-^fLVyg}{TB}MYGiLD6`+Y^Nwm=@&atAkisI9K%~j-h1eE&?J{ z80@nsV^uW71d118Bwpe5CFv<_vNb^1o20)|zZi3wzx@_;`-4tPwp`Is5 za>4>3k?D26FFEA47Kor>Rb#-n%bQR#bU&l3qSt*4;v%+;{5vSRg7MEZ<6{%fSk(jd zXbcbsPW=w0jbN5HPAH>NF5&hs+Xjt@z+b|xJw?)}t#jA(w$k-b5=F{F?Yu=Fcc1Q# z#|vJo253ja-c5l}RYZRA33P}m%D+*eEQYrV*s&{Ploq_d7)Lray=bXyU5?@ zt#MPxfPL52dEvTK$5*rFfmNNj1AoukzHN~2G`wh`4;Ys1dAuc8=+*4gB*lh;JE)(b zR@@(6P&@1}oZCw3sG55~qm|@ff;HRf-kXqX0mi#aFMnT(r+1MotjGe*y{!2un*cww z>(TV-b@H#fb*_o|FaNf2!PW3Sl+(-wyl;P>tKi9Gsa@d zGzK&osgJMqU!mS~Is;RB^>LcpVcC;=s|TqSCWGms3nk&!#!L9Z}9^J#F*@p2qbFPh*e9^EQ5YW2yW_vaIVbeAk>RVU0?& zuQI~rgG2XzxCOeUk4YCm9*ujTvI}94vkGJJqwB?Y@oOJqK`N24no8h8bR#^l1wc#+ zxJ(v=6_UiX?nnEj1dV=^=||2>n-c%|mg4Gph-)A%IIDjX=RG-N!MX4YQ@RQ#Rols8 zb+F5FHni`|Du*d)i->3$Msf}I8oJ>hYa@2QKB1E0+g-|3eBav?>fMz!sOh4Z#%KvfS}OR32~ucuUOZ9?Xf5~86yib?RM6W(^m#x+22$**ES9Ie(Zks zVuVmCPXBzIF?*XYELVr`>t2=nq}Q&v)G(C+ls3!4eb*MYMmgF92xD8Z`?jFQ{I4+K zTWt=4k2@7)&?+Mk$OtEkj@F$YBi|kn{hx{b|36>Of2m*0oUELw`!L|5tyo0h5Wv7^ zt%StjjnH6u3!5sb(OBUB_|%;2EdTkGL{qtF!DE0;TSsZZTfhMo46}F|IFtd-@)){c zfg%HYMUUWtz+A@&f4Q(weDM$+IrH;ftVO%eQhP z<*|qYkIf%jxRO(HoO-kN`|=Fd^YOqOs^Q{IKYH^D5*!=E0sgIEXYJ8XB~52Xz=zCK z+$4~_kz~+6xyc0Tr!of9yjY*_PgtLG?k?;8q-mo;{1yi2_0%b^tcocc?q|YKq7Q1k zc2rN$Drp-BeJ9Ak3sy~bH!={Kw0;nnf?GcEAKxepc#~`cBnBbWQ!775WX?JyaK;9#!ypkwjq{dNv-~P{2NDRGa0(r|EY) z@gPl=PhS9$S3}s!m-IH0+Ga{8hbiaHbq7b9dZRu&$2(((KoD zV|;!y==ofN|7o8U&&GeM&|XEDu=t+KW7`c_ZD8zd%<@3RYI=woEmYdHMip$Z0NFLJ zGW4sn_=-1?BO@AfA@PU2`DhOSHJifsO`cg?g-MP8iqu68cmm|WZbg_xsw9pZq4q^C z@C*YKrE?{fcIzInfF@_fQv`pOG1oZ@ajQNYQ;)bgl4}=!k!$z#hMKDD=qcZM1fH6n zl)ojAw`x?;Yz(hXl~*}C3D>DJD^l#VS#HL5k|jLN+X0NKFMwKF_Yr&d6Xnq%^~Yx} z4aeWq4|B&Z&To3*9QW$~M;)Qr{@=)Aj{lAG>Z66Ca2UF@3&A$rk76Q)#u4(-(49*D#z!z1;1Bk_luZ7c7 z)njsGplZ>wid@9|3;R~6w*@|Y+B66KIRjvU@*Ht+5(@FU|1M9@zMgVEiO&$JQQ&Th ziaeWh0Qjm;>h5Qi{W!v`*F0%t=^)`~qvJ!7LxrjdtK8+-gs|{J$HzI)2*aoY?FBYI z06wn;fChs&g}y-mY^0Xq?g4j2tTkR7lK!uIc?A77ZxEhrpFNPh>kA%#D|B@D2b z(!L5o=|KL{MTlo?b8);s0k=^XCx-t8eqy`&ftSLlQ}ClFKg)}j`%4M-I3lGz0vm`- z(I?0#7j37N=AcA(D5keXr0AB|SQK3y(0@XxtVwkBpsAgFP-6E3e**}m|UU?(#k?v z+cmf=3yWW(A4?`OMSF<@@dXwPtdTw~DG%nnvN$MDj~8`<-7sx=l(lH=n-6T-4|g|f zWBv+G8%u%)4ALSg+ZPkrB4tB6gRk}ni41QK&eP{f2&j$Z`Sb=#0_pPQBn1ii16zO$ zSC+Av2_d~9Rq7&~z|(_H|Dr2^2X8J~f0v?v*uWxqo(G#+skau>lCgRwPee!p;0xbO z^D&8@LmXi_wb)4=@2U8p&`gul=lX9wu?-6;fhtD=fHskBQbGGcS&^A~&+&!GFQElG zhP?*8txj)4)kE7ljEM5Ukw``nKII#`8bwKigm1qcqgnN`MehmIT~;ZNlb-YVsKTVr z=+@RS3OQ<~8vRPkE{2?Roc#)_w(f=&OAyQznc6WssxOYr;GQraVmUU77;%eqXdQZ3r%mb0wExa(9^d#!^W?Djp6(?9UbGV~l zG^z?ryS{v0Wj40**1Z!ibH%*o;cM<9xk}&ykmmfzlQv&wZMOk!ABT#!xw+f#FWG#Z zPq?4Go3S^2f-k)rU(4&;ADwm_lhpj<%~>E=z<+S)KoM9mRd4!lNZp0+4r5W=>l`vL zWr(|o`+LnLJkSTn7_h%Od|pWcrTs`U>k|+nO&}H5Qcg$>@=(7)LV1`{3}B)@c!2Z) zin~#2dfH{@8OR_Wa5J!A9f7Ct{i$N9+XRGjhqdQ_b0-U5K1R=xtGd>IP`kgpJiUrq z_2xI7JiTHG2p1rK*zsLo_6$S`p1;$4B`4_j=!`fqyrk@I7dCmn;I=zd zZR!02W&C=3yhUOK7rk&xwP$C_g3k{u=CrToB!v ze^!TwvxmF)2B<@O3g9nyDE>TAd*YK0kz1mNk`7}Y!)=9Pc}pO{pI1E~9~+SZ8haCB zs2YNS7;CnRctRMkY5V=Ux=xo%Pe~`}-ab5q$f%|i8->q^b%u-wU4b#3QTKO786!;5 zQh^4$I)0?j}Z%M!y*zfHFh_U#=jcF6WQ^!p87{eFb@ zFlrAe2am%D3V+8LX&-yYy?|-MHymo*BcLRyO!#oXHkQY@5q)yeySPFCq+nxhFjPrD ztTSE=FP>}0$e=QCX>4>T0LznmiSvH)0}P*eV016JlsDCewJ|V#SyzQ?(pX(K@vFp= z6R07ydn$C|zU#C`=!-h+~V<&;h_% zPvzfB$4Ab&=h90MX!{wQQPZza$CN8xLB(Zf?mfj4iI=a_Wn!Vi{@KqfQRlEDm~1>K zRjav~ae9uDX?YE3i4Wpfv5|&+wIbBgKzgV9BaIA!VM*`m>o{gbC$sRFzK5p9JG!_Ib9v@oCRvDZpI&(V`E` z1L2-Bd}f(J)P|e~cw6|BvE7_v&qPG`uGbrevh@a$n^ioku3sSw5=LN;J()O@Y}Y%1E#3nRHUV zj#h-{lra(l>SZfC4KoT@X)9)j!6xxG|eN_$6 zi}qpQUj39c@Sk$1H*r#FfNa%&e4^3Tp;=%TyjqgYz2%vnT)GXD5MR&(VTre)gYwa0 zz996lIqwuHW7v0OEzMPBu;J9*_@Cc4yGB%(yUuk0=p2mN6@}}F0^1dmC3PNU|9K(> zflKRNNQI=&*@ zZtK&_E&~{1|#}8q(2S?Tm@Wi2KFzX69Y> zOz$cIT3-na=t>@z(QlpRm1vVLHR8|1_rOmjVhikLsq0n?J`@PFO>3#{rYr%{0DpXN zThQySnzvKoW0ZszT<8aMMj7yJQcK9{b~h+}DIX~QacmVxfh^{6NUzer;5pEpMtuo$Oyg_cxDGTs15-AD?6GC|6 z!`f-XY%(#NNY0|y4V|MzefrFmg?QIrZ3pc*tMf6-1z5LY0quoV7 z<@T(0!tqOCAzr?N?0C-H>0-=lVkvxDD*^qd>+DzrX7}o_Zrj;v@j!dG<u!$ zcp?g{%N+bfEVT{QW67~>fc11qR_VbTP2%o$)cVD=+_-jQPx0`l(B0Og?W0i*K8e;+ z4J#}9bzYG{R(a(<@ zB-J3a2^+<58)IXP8vLQRD8n1JuIZAMpT`evyssf`m4c+nrF>u9LTKaSL0lkg9gV?= zDLaiMcT2qjnESdn^N6^?3{JBptC+AgqXqoca8-R@K)wH3wxR(XC-7S_4BP=QC-;8d z*F)DznsuOavAFNN14r(oHQ3Sj?t!iah5_6l&FO7WZaHI|5l(b?O5;wYnajW~=O~bh zYNbINX4u$Gf~hjd$2ksq@MjPfR%Zg|h8|;PyMxCyy;^m`J>R2A+6na7UBjl7Do<{0 zts2zy==%gnnM){Dt@p_fhNKNpF0Y+s!2P26@NrCMd1kj%(zN1w`748vZ|U)yhkj!} zGwZxn8#2ALY4KwHiGg_-F4N8Daw~VxAf-=wwi^moQg=l^VSC^-UX7Y@YBEk7#fr?s zr4%G^-k739d0)o=ZZa99en0TDNdbKKR1FoZnR8GX3$f`F(KaajU(!1OA__h92CpeP z=QRIgTlO;$9v3{)iiW-F%@E@`9_k5`nils%F3y>{YpDy|(q#~hQDHB*lLP~>y&Hbc zPqrhVkLep)86z6k)Y0OG*rsnlicuNIl-!bOp%o2C1k&MW!hFEU%^P(I+pDM@^>&o0 zIB;BE^@6I(j@Y}5-SY;p8vzoWW*9>pmK;fkxKBiu-I?1+8h+bJc?#ZItpMP{|Thro8=+1`xr zUHj|za$cJW8;3n7xBzXP=Q6M8n#oj;89yedo;ZqKV{p=3j^qBwZR$>t7D0rkbQck(Ecq%7i5YaQiR z)Z}vH;0hgyeM__Jj9{MOD_|*FGUG=Mn^=nDUyzmpDLKy9XbF4tsyfW&v8Pxm^uvqR77>%{sRGjTjE(wwqsUBXmszv_f*QS1v2sy6t4;*O#1CE4d zK^0_Q_1dw5oy?Ghh_k)Es(PaFK4PfVPJxZgKEzLL@JblDzN3l97KHQ(9!>fC&dUbM zkXe382kVg}_E;v&^lAzJ1cr7GFlJxD!^x=D%Kj-bAUP)1 z)3SAOTCKRa23ez^_$QF29gw}cHSw$42k!w%g{$2_zF?@s-%2MecQRuLthEkSxq#mc z9$5-+^0^j=qz>F+8;Q6cw?J%Bb#oJC_Pyvk&QMK|lef>!zz*RQqVwuQ=dy`!R7d|h zqm*CYNHG@@-(O5wl*;7$S7}!fjH+J*_kv;PM~< zY-!}N1eO?(q7V0!DbJB=Yn`SM+~jbnHH?)!{`}x=XKC2^5Cbf>^e@_!IX{MbYYHOE zfCn;bOG!fKSW2~UD=aq|C}G7!*CoII!`3+lXA*VoI(lMGY}>YN+qNgh6Whkbwyl}i zb|$uMoq4}g@A>ncs_v@(v%9Nz@2XyVt@~bA;rK2(89cXSBxLGJk$WS=DnWy0e8~&5 zFrA`4X{v&8Ygl&_vBfjet-+yYSUzWRQtB=-uuH+R1CT9tD?g(Jy?_>p2zfyiz9DC_ zMZjvSEBN6IP;Hi?peSFVE3M?f#r-+l>}hHu3g@F=^ZNrO*5FvLu;t*S(6}KJG-9Z3 zASyIUM*E)+J--w1y)=jO^3L&cM7}{aMzST0kPM}MNM~A6JWnM9$`4tfWwB&b^kO&$ zgb}bSH9VP|v|I{%H$gp>jbzT4O<*|En7#Zg_0lPP+r)Fi;#XEV1fjr#VrS~9o~vvp zKTyCWR_MBPMlj_RW5ocR6%U`nA(7{zI6v%&@uGo8FW-1pzsiQjXH~GcktD++VKC{= zW@AD8_$r4DWODEkkd2wYjks}b%spxa8b=+TP&NrAx;*R+i`ZLOM~q=3n3XlSsT(5b znE>S8BeW7XySQ2&@W-?1XUXrq_#4@&RJeb%-RWhjl@YRiD1*EOru0C<4RaGl5Tz>m zWYik(x0BGkw<5MqOsI|Dz9}G2!lMWEk&j6rmS-as#0@>hs%C`L+|zL#u`&Jz^6kd{ zKEpUjF(R#Y*ewgM#HiE-=v|^!LWbqIO1B#gLk9`j;}VI2uPK(9%Z+yeeu?Zx8U|8L zi$mcxAuW_Zy$WB~7b_3DM{no_TE=}6s3S$X5J3}fS-Kg>CPGoK$?pM0WGRPRX&1FJxwMx$@ z!!Dc4S|oE=*cVOtP8&F8#u{&oN%8x+LoM^QF}KU57P1^QIby&N`)Il~K7XuorvVW4L_s#T7nUfcz#VX2`CWMlJ6 zzEZRMGSG|;1rws8Q$L{KY;(dMSWR%h9IxxESWYRxY*X;yv!KT`Xl^Vk+ zUFbK)fvxhXqZFfcvVi%+_neh-4fY7A>$)yxZ|^`Q`)+kAt&w-!xua3|s|7 zf$`b-Y1{Id!N$o0&z2+}C|Kd}A<}vJcg@KJ`@mJK%@KOLSu@&J9iqU#4#rd7l8UjeuC395b|n4eo? zO_aQ{75?Kz;qto*m=5psFZ1DgK;PuqZ5wHk`BCqS9?~_Gi{8>T z$87rnZ&xbk5fZ{~%O;?h!jto_j}JsnZ=6ik!flB9W$@RtH{fUQaF3Tt+x#}07DcwU zH>k0JXWU4@GEDM+_G*edlulny?{)4qff{c)KWZh(#XG0yFc0g6o-OJps~2NSnbc3j zmZW!ufkOA%@_Pw^Y=nWV;gyB0jIz{PSsVE@RUL(6SwGf^l4W_Do>FYf9Bju5^_HK) ztZ|Jse6lmhIZXc7Ii6Gx@Y5C|N69@|q>B^!lE3-m0JS zoK^b(<<13c4@m`-{AqfkUK0^{WVS5J@?e6!%N1PKbx1G$?wl=oF6i!Ro1pK%JI7bK z@3j!Dt+kY8HD3D)rUlWg@!Yg)>)Ea0q0utgj*)fy#dVCTSW7fgKk|0Ce%vh}f78aP zuJ{a3itxO`WFa#YKEx0!uCZiSs~FFMzrsubGa4u^f02+G-dHC-nnYJ)&FoP+e}xd2 zyBPdr@={;A>2!TMhEIitMG&vq-7clkD=k>=6F}0b?WJn|c*LR41E;6ZcedHRt26mf zOA^tEW8bWsG?^(^Cwmgsu5do08O ze#cv7QbZq?Qw>eIvAln0P0|$9C9lORS_lHYU2-PBkV+}JGY_xhYLnM&n|*yxUAO)W z2v-fRSxrgN>KOPcTXA1o-3BcFT*mGhO)h#%fSKMvw}e@tgRu?dLgAZ5XQA391; zImD@ge`^Zqx$={ii)jw1R%+_wC|}_Qj*}yVYRVe%$71G&k68B9os6`2#mz`0tl4*+ zKyN#{#dzN?~X4-1z8YqD;u5#GWOf4?IA?&T( z*<=_J492)E{2sI=8ZT$oKdI5Y+wx$vb7!FS?~(bODy&Lw@@pKXH&QWF z0-dL{v3spGWvnpe?Htxq#q?CPH|%&pWY&&?1~s~N)awvP5Zh{CMF2(FRTvOb`+E1a zO++tM*Nk_KkFLbrqK_F>tkEbW;eZff&Km_%MT4bA*f%ttx_*KvK@lke^fFYu^yn2Kt z9|#1oLKAjtmyW=y$Lnk|exQ(N3+z_tT~>h{RI*?XeF%Oal&-E z3LNGQ76xa*-YbN!BI}m(Ku$~=;T7Z5*3W9sY`RIND#()3lR~_AmuHbZF;lB+E%RZl zpoi%~5|)>$M3g93bkEmD2$pmvjsk0b49JftU)Lv@M>WDzyXQ8DD5)5W0rq*e+|D$# z=lKqw!J-HadV_wTf)2kGhazMH=KLi$LsG%eB z9ZNjpcW$KwJJjh1Mu1+UPaQAK(ojbLfmbD?KUyEA^9AmjF@O7*8^o=(N^L(er~5l?Twt6_ z7g>^~f$OW*Z_t|>ImixV7haf2j-OT<=fVsIHto&Imz;2ajnCIrLIX`IPHRzE&5iJQ z(mW*1`-fOb?i2Qt|K*4Kl~SGh^(w33JTdNzDlg3JwjsS|$cNN0oMkrIZZDBg81 z)#V1Zjb$45=h3KzM_`MLp-ANOpM|l_tEjMoMWjiudW*hgR5Od3H@c!6u{0uI7z(zh%6aZmI0Q> z{SVmgs<>yuFIN);wC^2|)9EgIi2fs%f-&~YHKVtJ=-Hh{D$yImu^+2*WOM#b}iQ0>I zI@6793RxD{J>Y}hQ;+2_E=D#l1p(`>i_89ceU3(=IO_fV*u%Z;w+!G!+K~h(ndJ*o zXW#-KmO|n;XG0k?$2y~D7GFGKw9x0sTeDbC&Gq%7=)q+j8e?(APfza>#qW^HDg4wK zpD~N*sDGVKL^}df2>m*hXfP7uCVT`%g`1ApV-r*|2Gp=3)Yrq=?R>?#<+7eMGo*ml zstv2?BNu}WVqM_!o_-d((xC+Zbe1v*J!An`e_>{&AZI2TH#%N zo#?}0_T*_PzgB_YmGwKoe>9`EC8%#* zR)Vd(@rcDN$aWjiIFP_k8JXWk6k$QgJ!54% zt_y938+ny^tA>ri{lT@=4u7SymtkgjduJaP-nM;$wQCTKw5qxCCz<_RG-48mMJ);s zXr-$D06p)(hr4wsNb+mvQVE9sG?8c04<5x~6kQ>{YfprkdJY*j3Cw>G0Vu!!1i{&6 z2lDj|Ar!JR;1|5QPSWk37-)!TMluYO^MD&@n0*OUfWSd}7fQB~XO}E;JlMoECJ!+~ z@8`~1&%kUZOJ-gr6g?#cb>_hg!$48HHJrdiOCJ01Xcw`mC(XSoe%Q&K^uSb;uOP@{IL&m`kb-avUGyRlSC05P%^@+hP6o|QHBqn15V?Q zwkt>D)H9SXURrMIGohug?Nf-uVsma-mB7eMvFk{-yop~fDL3d+zX6gM(oZZY!v4sT zW-!@2fNP-8jZ1FcmZcaA{=mj%lYPbyj+lDQxaAAgif;LpQ!?9ESK9^A-eqED$15$% zbtS9$DZ8~MM+fYA!6ftn7yqZUz;pfSVs2~?`|r}x#0Hjw?Z0v-7B&{H^n0~`$sSo- zz$-BJBCR-Oqqv~n(V%VH4gcaN^4K4Sjy%kb9CT`#W`UFu+MmV65ybP};q!j?x5{38 zjPYf!%w$+^=7u;T+u96%YBGjt^OPkIs$L&{sy5vWLyoei1t|g>ki?>Qfk@8Mp~@6G zYf8hVo~avFMfVWD(6&OR;!DoXRaywy^6P-2)P5QS*D>+Ua5B8R58mN5G$nnG6ZeEw(hBkG3>3RH#eUHws@T^Z0fxxT7>32GA#V5CdYEhT4oCtwMwGp-F(m78S%v;T8c7k?<4ykORZRqs}Iv0P)bPnXBIHE#cvcv}z}Z`ITy0#xg} zkg|E6s-*zDGYzF&M^~jh)?Tazkh*kJd>eQFO51uEUXj15XM4rq_JXnHxorKt^QpI{ z=i2t#qig-MfTQjV_1fmz{L+s&FIHv*uaNB+Prgpw$)I*Ge4Xz+OWCrunob~e6Y~+& z_$~acn(5QSG}(_Z*@byvV>NK^M7OT=P~SiSHo|;Hc!}w@GV5i}eZq?ynCB^Q^|L28 zh1|ZuAh@DAagKcZfWm@#{ZBCw_Z{kOl#HeOKuLG^sv6az)xU4i?U=Q&C^r2H`*9!CIxBp80{1|T;q$q2}j(jyiE zMfU)e10fDnB%+=NfqtR{Cc+Mv5@^5<_R!1E^W1VIG>k(=m#R+#c4RG6SIjTXTIQ+y zNzK%josu(P5sC44Y`RRU@X$)d%uTm3o6ado^3KJ;#s--LXDBHrJ=wcAz4$X>ZlGp_ zwoTawvgW4;;^H&-y_4a8?HfnL5d`-eXC&#oOA1-Uo%>UPs5|-tpP2x!_2NW_Y}4=T zx$JWT$MI`dzeutDFXv8=#*U_zc_1Ju%fUIRIsz(M4K|8J_CB6>%v`SzW;UK31@-K% zK22>op1($c{4a0BU)-+)Pn_A3lpB;)9ZohI32+T6A@GVtZ*p2w9~)b=o_Gz<0SL=s z$Yh2Es-(Arn=p95P|u+)KDvsrGO3C~w(3FG-pkJ$@4pKIPoo=Y?*YU(UtOv1$O8}D zf5Yvn_M+Ztjd|Z7INbTbj@R_Hph;#zgpux9p=>@$9nvEVv zmBNFOL_yGAovieKeEk7aujt>?F5%GJH|ipL*6kW)8uD>a?5wZAh6v}_NzB?6xv@~k zQD#_Og0jUh0Z(?3%gRZHDBjS-h^t*(mh3>k{S(EkfljE&ob|>E|8oG#=<$ywdWmg- zUKF-uaP6v5oeBKjvu4Z)S~c#EjND!}X(LgV-Hc&sU_c<=*D{WI48R?Kyw;ZcdtvTi z!EcWXQ9($J)90aJ!!ModTJ0~5G}7ym4bpvB;ENQIq=B?luCf~mglAKTG(9n z?XJom;5CI!ZfZd-JSn{LYJ>AxECbdk47D$gO#BISZhEDnVv@GPk^w7?+W<-8`DpEU19g}k0+LRg;s;=d5p?p z7Efydl4>$5n#)JEuc-{^laxDyD2Ji4HL}Q#2AUo*hZ>T6leVeAm<2cv-_X}l3iPJR zxMG1e{3Hv^E`m7uDR9F2JUPFN z?5?1=PA5q-pVt?HqW`NG{BFHASbLNtfm{xJX{%wSCFj~zkFo=GW#+8F{&s|z%5(<$ z1t`T=rP3gv1ta<$b$aBk9K09LtZ30MeQ5DpQy_$D7%i(gMJfa8g_=9mMj5pE{`BST zXJT|YyB-IQ+jczOuJ*YBeVRrYd5d9D&Dw!p<~eAHUIPR_%2Mxfx5MaOJ%P3nRn~zq zt`IR-hdD_-c>~r%e@QiA9J&PJMS@K83J}%6(2*D;SXX3Hhm)6`Igo83z!OjDer4i< z@jV#N7gudCDQpS+_#pH6Q+9YNcrjt1H%ogDO{HAkUz_m&1S!&pzsgzD!yLynIHgjH z9==`|LF^7XA`mZXHjgMYu%ljHuP|TQDvtgOe=W?Q@gzZXPZ}7~tu!1EHUVoEakqX$(qxUsA zxZXvR8i$_p*|J!+IHXa<)~D6=j{X6gw92CV@koAqQ5ajtf*k~lfe!h58DBe`+UF9g zZhAnk+R-`3mldkpw)d&`^`a#`ZUDN(fh}_CeyEA>3gr>JxLqlVU<3`>PKkK4+~24o z<;X!_@OJ|Xb=@+O7RdndKj2tE9JK+OuUL#gK^+tnqH_A_7~T6w-uFwEo9s)Nyec(J81{Jv1J^+n-C48^N<$i?=$3w?48rj z!)RKit#VBDg{jTxJl)oy875KG^wXXWqo5%@DZQ!wfd98{nnC!^fJL4UKR z7WJDu_fDa>x-CYy17ad69lOF5a^dd`E8NLyBxNd8DWD*)5##}N=l)ecq--Xyx#2ka z0u4%e;&heA-=SHfWo`<={KvbXILRN9`SUe^Im?=DGtZa zf(+a2n-}$XVM5s8P8vW{>IQeS*df;n4ntI04kk;1q%Q9-_zAiF5lAVWgp4lo1C%Bb z6-t5TKZQLQs^-FT3=wXBf&dLyeYB=SRW00UTK6LYyNG)u-lGpYWw)lH5S~Zb!8PIA z3lXfx13h<&B`6hM1=Gi}0Sj2n&JkDw5rUH*BOZp_LfJzshibr_sS>W^yQ){1oFIc^ zI^3K*>)TzH2S~5&AYxDZjZDpuRAfUDJ^FB#X!=Rnj3dw?Hcfi=l}cwPEZp9!=M}UP zGvR3&D_&dkHf^a?Z#;T&)0z=y%O(<~31@V;v^<3pE(fIyv^Pq&k`&PH{cEk-_cw9h znYE7;W2~SYWm4efa7&w(t>ZIxUJxb7qM;0{jag40;$aIaB>r!z#;>-=F}-us%?!{Q zC0_czlG`-vm8UlqT;4m4lGYISrK9t09;~mgRDq>7M4r2{PLH=5@C9}GJ2w31j@*xR z;elXcMVWnbFooOmJQS+|Uxni6&hj!-0~GN+Y2yx%F?P+BPz_ykYj-ydI~fP|z}pP2 zj^|reVJ+T4Y8|C0Y-66)VP_k=wM)nMc>G^4tHhci$c8fE>$YX$tyhPMUTok}dWw%x zH1F=Wes>k(9a}z)uSkTHo0#dRHvd9hZYJh*Xj_12*;6n86xiZ&vGufl2 z{i|&w2ZdSc!cRN8jVmFE2ECbi;%1HDx=l`t_d;{IiY$Ue^4}#-!o$d<-?>O<0DvvbBTY35`+l}+v zx8VKkj>;jVmdndCi`frk*zASAU%&hxUpZXo^mokd-`|Y0JGA8ZaGzgWHNHF7UjI6I z?DqtrX$)mBKBq8GWs89fpA0gH(M-cDCZ>j{%~$lxumFQf8=r6x3`jeLBB@xZ(QAdB ztjj{#A?1ysi14U})=E`o4>79i5#`BIQ|_mvj+-&)3*#=HX|n`ip)EYQ-A1^D0~Y6x zE}@ogn13ixb%)wwAeS_AsZ#q5&h?~nJRm9pc4dw`f0D=)yXh{&38TWqR8jG2@}%TI z8A{<*TL44&p4yP-{rT~!*euyJB=DLOd`sTbD96*ZCWAWS56sd(#`TlJscC5#F~8?Gjl4f2^j4I(h=`9+SgJ0&br+?n zhylSrcV}#v4Qtq)e^Fh&R9?L_(y@uEng|{}$^G-5rv7#*iDH?hJ}PR$i>)i?faWQK zZG7TMMX}1TBW>CBC&*CFyRT?A6bn@eyY=V?5nW&vLG3rt)~%y%Y^WWr9sLAtOT3i< ziB9jf&TNHG1+P`{Va8tqm?oJ0@kA6pAZB6&aY zc9qK1RHF_|_qB$gHE*85wFA(aQ?rNa-F9)Uhf-Bnr!(Ka#oy_a7y8MT5MTt3FQ%p3IVq= zbR_T=q+nWOPU(pKE6KKQtP+IhK#1(vB1z%b!Cx{M0M;s$8`<9aWvsId%uEvW<3!Z8 zTm}PsZA+d2Wnz(ChJ34Co49eaDmX0?Eq}9M7ebYoNHF2hkV+EVFQG>Du@QFvcInn6 zKbi?`Ce*40)k(4qg~|Ez8?-L4ARstqo8yS2nk@e_I@bR1oaXF$-W<;?+^*R3J^G=L zKu(DBtBR44DTS)ejlJse_(4EhBK(gg%F9Yrfpzm(TG#et5~7G}ca}olTx;BPtu_1YMKs zErmC!;->MWv9s<>#qIHIE_ok3CjIAeGWFS`m?Q=zF0>BixB6I>`Qb=N?l`6&sLLcO zlOf3<9Wrt$KIU`jOHv&Wj@e& zU!`z4Yrj-Yd$(EakxsW2MR#(ENGI&J z%In7%|BEZ4Fd6svk02}cp{}@sc$las&r_`rGjJN6W#0*iNj%Tk_Kb3WV-2HDr^CH5 zxfxj}zUt#s$k-GHUEn02&$=v%7DDSLoe$|5EP4XMJdbLP#K`MEjcJRo!~2;0%lafuR8Rszkb z=`Hbxr=A%jFg&Txwrco8-<$XFdiT$3mqOm_)#!F~^K0hav&6cu-Z{U*r-;bj1eqbx z?W&$$v`^z=3Fa0pocfwi2RhXJ`}~F&Bo4S8xxFFe2B*7(lEkx9S&R~yW$DO}|C7M- zDYIAj8~3X-I&hQkK@_0>hPIky36>Ig=qvCl5oA*ciUGlC~(fKAWH>A66--$1d44UL} zN>t7AuPb(ZmQsPJE+P)90c(E8<&@WPenNI|rui;-Zs1|2`J6uHh(zT(kma5t8WYJY zii7#%Tiw>+=2uq)`^DwpeZfzjs?^vkp`4g!@wJGxgI+WC5g(KzLW%G6MZC?Bmv3?; zeRs&f6mtsys|#O;Yn@F$cbA1r_YHfW4F@;6UPnoy?sG`nQ_izcfk$3!+vaWs-e( zImo?KGO$73O^k|;4=<_X3%uZWt#mBv^yDQ3GNSX$Ajt&fOY`Jdr%)^$iCQzmvGfKr z^n8Ip@@Fi4ZFwo6P%m&Sl7iUq)nO>5pzMmoL8YKzsF6xT{&2WQ6$Kclkf|$4$|Rv^ z67BP}Cy|Zi$xVqP(BwSEG=KNjjpbT94MaRpt>l`?oQ$S?<;!F``3aTiVQMzYS!aa< zuc{aJhF|XmcOW`usVf?hK03Qee~vRVe&X?%Yfv`TyEh9|R7OxrR~D}jmP)1aoY;j} zrLr6_0uZqyt705wjN{Yss>dT0mBE`FDrRYB?mdv=2YkEK*caS(+ZpJ5WHIBF(5YK9 z)P@4Olmv48=37&a0<=CDp`r|Z#5CuCZ^kw&CyEQSBYrt2&nGO!>VZDXhSSdC6Xh}g zl!HkNSWFD1#{}?u(Pgya{&K(fSSGWjjdTVxE5(U?g1yoYmcQxL5y2?blSeBY@+57O zo0}Lbv-tN)auCQ^PM4tE#R!+#bj(rGrX}^m{WDHpjAu$;Hx5~L#3DR;t{ZH5zBr9) z$>u2fO4FoL7NFuW(n5FlZ4873H$; zMZMCuJ^tf3=3?ha|MK{!WeA7|#Dns;AtwOj5J*9lhPnQ?i<0BNseM*`Fj09K^Y&4O+TU z&c9HWnVl&enDZ}d+tLa+1if#|ZUZm?Fuh{QqW|}^xzcyK0qE%sc@U`SI~4%R^n7?o zSYYUgSwuq);fO7H8cSd!F@}&@gn>GsxL2TqEoD5o4{t+~Qj*9lzr_Nm{dX$3|7zm1 z^0$*m0g}g0K0>xOTn|OXyTrW!S z7dR7UU$sl(dP%eytpJKP{a%0z46;87H-<|izjtWgH(23tjY9fV z_kX@G8!JcpMK?ecc!|B{g2s8{*Jna#NmWPE5|>zh0}`kdf`)E%kM?66Gj8JfkFm<@ z^G{p01%6&rCwO$Q!@FP~UHXb^QCF6g@k#d2)bDJlrt4hx`J5= z+g=_UY^GsNsE{XQ6Vq{P24YXO>~gtgrJQ92ZhO&kcO4j$1sD4;8?BdO__4kK3GzG> z+WtZVuGFj$Adb*1czLmC%h;+Q_FsoT5|q;Q;YLw3Sz%@wtF6-;3BPe;$yJR5OIf%E}f*Lx>bhWSf39>ifASJJzKy3CdNOMdM>$&Sv!hrPll zZn#!|AhA^SqpPa;Ma0RM8axNrm#XL+O8vq_WzexJO5axmeSm_F=PA2SmJCO6!YFZI z@h8~UHD=W@{FeC*CZr;Fu{cDxarNv3x2gCEKhR*vBH;p8DAcTSBc_L+BL#*(d7$|& zrJ;}I>5p0Go3Ru!xO;W)n{B@6Y)z6kKEb_mkzPu}f6o4A;ICqR%W7z|N%4HUo9AtzNE;sUH z!|A^AuTX+1&;f0m2iU7)IHng}%sX-*KV6qq_oEd{aQ@1xK(tf`jZ+Qj z&$b|j%TH)Y32;j8arj# zIX@y)o=Oi-xe$TLV5`-|#unmUu0uPy>>Z0bOG;`lI6c(rT6aUJIVY1(>`oXBBBHEl z8W~izO?BFaPF!-cEGX_rH+=zFm$1nscl1)ZsdLdt3oMH@5l5*&y^i&-;U^mx&L2wc zGk^{-E7T_H-(=|aNeV-)tA%ddb=9XC_zaE7@;Ta=$zqz zZ=lnTRnN!pI$pQuI(2jT@mE)?8|0)XGfrZ5h%&cl^tH%c63PXD&fO-%kKs|uwx|Cj zM*$d7eF$`=VXr)^H>M+{Nr8`Qqns6Tm?`Wc%VDMFD{uol_%rD~e}`DZFt zbs3O<;b^b9jq080ptlw97e`IRTp15MmgNC9OkCkzie=9Qx`qjb7LH;loI800qJqwc zZY~`A^f&pIYgV5QB$0VF={#G8dZIla9t@B_O2i|$;3@P4RLzEa1cFn&j|!2_ui0)$ zYdHh0p~mJOS0dpLmNh9=u`m^q$fyX>&|#1g$7UVB1OBMR{z>Nj8>7w6vPxfLxK|IKN7FFm8H*ODHa!O4&FpjE z3G~p2mcUG$(Q|Y)r&Bmju^>_N7Ya*j&K*Sbu~$4To_7sc=SauMy;d&2w~FNAE4Aq8fOF;`iqy?X;U(!t(09msuS&Q+C;01!=aZ1=GwJN3=;Ji z_Q?zSg=8t5FA<(CVLqNMc%w(L{DC3-d@FkU9sMTcwLFoLORw3ty|@h|06t;#s?S4z z41$GBs0jYGBWEkAZaqJiwjMrVOAOL+)A|NBHwa6a>&^MId>OH9TlIB(TH&4WZ7y%E z4)19<=j+Vbp`jJyRNr}<0;s9>et?e}^$c8Vf+R(#n5;J;!1OC_wA7)jOXCbzk~He0 z!JNy(krQy}ppdp`5^4rmRKHq{D@7HC8bBldu-^&&qX?mU2-gml(((lhJ3B4b_Jsu8 zA}1fK{?0ACW!V*lv;N8Za2he-J7qyBZBgIZky9Yg0p^UFpom_{7SD3BW62k#>s)8j zP+O=aUQni0b0fp9g8ubNwLsKpi|_g{OmhbU<$i9c#j4!CdbV%!AdzM!O92f?4;GsG zd+|N9K`hK-M6Y>7twaz}UcQ-tQ$0bT373}YK<>}qYe?CNB|qEEGH)~kX&^7eAA|vJ z#GTGN56}UQ{rK)PZ*|Ito9Q(QT|!~<%d6|OTE%|irT{PEIkFC~dk)3{Z-({Dti~c| ze%4);_KpTE#ZeEmjtEJHblA|Ni)N+>6IVy|LO_YHwVD6n+)#F2yi|QI)LV28Fw8ma zj4WJg%6ISojd7)cUl)*F?SKqKTuIvDvT_ zS0?mx{2)62DZ1=%Ye`zGp!FQRXd*ib!hqSRba8GnuOf~~aC)t$<^E6^E+i}#xHmrDE(`A3i8vW1 z`{RqH?(jOzpg%<+z(5ncPBfc$kRkmP(pVJ;;i!p$Wl6$?vH245lV4&IT%LYj9=hu% zYT;>V8jZV3aL$d~Gz_{Z_=JPfAtil1gz5At*`WciZ@;!q-alU14u%x}A#*TD-bE2i z7;yjZr#@`aI!If7h2#s2Y+{z@<9^glXK#AZ>{PO&HqAk9K}povHamLvPO6jwS9U6J zG1THP13GlY%ir#SiAbO61LjAjIHzo-qz%i=hbtadSa+7C3&%(S{jWur9c=5@LI-%3 zK+F#aZqNiYHB@pjT&f|8mU|0vo;Yx_LfE)QS+7&%OGDNHPs>=_92t%DplsOisjSGO zI6WH%&)W*EBvVwkebsiV*y8|jYu^K)9j<`+8d#&I*o&>vToEcO z9ACb}*s!n^JYMF_$f3IeLieDwn-FX4lA&V!J)weT*7*@iMs5v`!zElv9kLxCY3*NGzr@w|~R zMmOGixX`OZOtzwUSvUjBgXQVqP=3;(Q8QPS8yXoS*%9G*&}_=jKeAn}sw-&OJePAw zB|x3o0a)uLq+W&uyB@oqs z(JO!C*J*N03~g^6nj^>`4I>@S90{M<;Dh=Jc6`E$xo0uSai}R7fz~)RCOs}Y^`9Ec zIcY{FwZz4=-F#NmG^K4oVO08_SXruD-O~26VgY1EDEh#GXFHe*vby3-o!3t#TAEf> zREOO1yqGurMMVqAr*t|dP`nDriVl^l4keDtugahsKE~8S6 zk+8X_fukDuCONC+Q}78txDX5b_97((eM|G@k#+e-eHE+nU3mpy(o;{diy61{I-5Kx zr5nq(ZO-+oiFa026UB*|sE5@I)N|0CQ((IAm|K+-W!NuWCkHdC8X(7*5(D>odj8(t9|X;Y2yx2kcID;B~wY;IIK zvt(Hp0#7{MO~5oweFuUEf$liiG)>8++t+MtgI9a^#A*ry0Xq@yfI~5H2cz@;zkith zFXd0wsT@~XfoCikq~dT$YX4@AAa<@#Rc?!$bH#))pzOr)WlQfpv!+BndYkbH7Mw!c z2#Nf}>PpW2!SmzTm9Ys=`0w0JY=Lm1oNP!H{xe-WH@JWIW#ILEi zz9gFB3_3jr@AC}5dJx6)jAY<&WesK`DA_+$Y`nH;`T40)sreTzRiZWO^1t!o@525O zi4!?iff*Zx?x%}#mr|0crH|3h&a5@}1s*nx+4KU%{;)Nf*?SI(2B#FGECU#yP}8p%U+pi$Gfbbl~`gqrubBM z;0HL#dqZ8-!ZI!iudeZGra^exHGFos*dz``fUivR$tW#N6lL1HW)2h|D`Nxky}I9O zZy4$}8(98dT0pQB4d>UjScK%tMasLGg}3|gw|ni&@a|vFqSG5xeTFL&if4yyk7ot) znSY@GwwJc!a+)65EDMKTsub8vEKQ6hLEN`H#@ixY2L-Jk`WiK1Slz-C6 zfbF~ieh_UrvNbF`MquTq+49gL_ttZs&q+Ohc*YUv1|kScEl>w?+F@4yxMrT9J)>+D z?n&SoJ8z_UWH2!{nhi7mp4iwlotWp+!+5a1iZr9iYStu?g)mnxWGwb_;8d&sX12uc zCcI>@Y^aM#6q#vHg(Kbir^|W~&0Z$!!5#^fJ$IckYstCJ z08BKlfAw-RWq6$2T}tK{L|SW#JYxx=Jmsj67MGG$<{B#S_P-y$rzk5=hyL53<%&`j z2VXb%JhBlsQ!PblMArJ`4}ePWh9tBaR&JbgTTe<2^4cR*P;6zocrz@)-LrQt0Yz)1 zQ7@QwA91~q!(C{hDCYhgVHmnUr4o2|%)Bh(V;jf?ikE#*LlK}L_&lO3MZgExKI%Y} z{nX=%Br~P6j4_MtE;4zRdmyHrS#sDx!(&Ga;U1}%j+QD$Bedz6F?TG>Slv-Xp}BM? zCeDgK%h++QBC#}we!`;MF4Gn90D8yqVg}+uAzOxrfAjFtZd!Xc$R{7+D)@vTCT`ps z1yISiwW-R#M}0%jJa%aQxRRQ?Nv@DD|M+X2v9WP0hQbkl#nhIFhwT10Ojp8wL|w9v z+H0R}ND;=w-mlVYe9?J6WmhB4G*U1aD=~?OR8EcC+QhMeZ*3V44)1J_li<`zoCLyq z>{5AP2&GQ8HzZ*QSA5U+xx5$6t7zapo%k<+9C-EEzBbB9Zz=z~Jg<_CuzWFh8@8fV z6{$h}j-vtL`!)Dq{kr0X)y!S#bE2T_D%M}k^ky0gvntrKikCjPVxY^DuEdRknFbnOqlcL!H z9x%JsI)sGtz1@m1aKrlQPh@xN1ssg z#(0W*&jP({GR9ghqdR+$QG|SWk2ME}jj818$EPHE{z|Y9bID#Nkx^xZy3F%7yT%&Q zyY`#bZ)>}it;Fo6C92_;l344Bx+6tr3Sc087f`A6)PIHy;HQo2de6lvTlz|ae(Bpg zirGd@fbuYZBh5+honpCvsk%V3*?LuKUuYa87bM&Dm`}mDW8W>dUhM8;xbP`?UmZ$eIKz&)(2K3+dYKMl4Kze5 z@l^-vw34P7p~-#sL^Cr5naZy&VKaP`LmUje5$%c!J-gs z)ansuQe0#6(JDrH zS$1%M6lPI&sJ80_(>q)lE6a(48<5PMqvam&FzgB%CyMwf8a=-2_Sjl?KnxN;c`AFS zQ*Cg^gsx(n3EhSAi{fX+6`wD8N};_shXPAwOeb@Nj$QM`+ei0PHdc<|9*y1>+hwE@ z6WmvW4bR4FF#Y5s+_zZRp53L#%1X#Q8iWkb2;mMJe`EN53=F&%+g+aj4=KR`yXM3uBJUJxAd*D z_|zC2q$}Xx(Y$oeugcvhpcZ3&NOJZjcwbu zZB1-zV%z>=+qP}nw(VqMJDD?ooxRVlQ@g4!-ixlTe(%XSPw&3`v&nnIZHz$-Ich6-AdOpPFlBq?bDlg(uCq!q4a7%tYGW z+tL&wrR9@q?vLyH^TqK_#PnaJ_v@v-Ji|cMGRH`HZfCETL$TA>p1f{Uz{PSX6E&Zw z^TUq(4Wb*2l4g_2AM?uf_ox7$yAqVD^0d3k`RHk=#Px)VHws4OS>pz%Ek5@!EHc6Hb z^>naZ_LCD%?-Poel%1WM6O%x6v)2F@vS{c?j@p*oJJ?M{D<|p6oj5kEyT*+kJ&GQM zMVbn77frON70QxsS2oDWU>Lowj35-1y9MLh=EV3W&5HMyT% zT2eBzoA;W+HZKtbnk6ddOKxpes4W{cZ<9S&yb{xmLrKlUkTIFo3`kh+YnVI4E8+2wm$;O9LC?Lsg9;qcUnC@Cx6&FmO7!8G6Wjw{aX zGTk=WV72K(-yig;7N2^M)ljO``=eCvdO*U4_kGZ3orBBrp|WC*NaKx_%TPf|Cp!DX~Ietm-+t-}4eQ z0$~pUCz_E@fcK=n5FcSVme8GFY4Voo$@pTiSf4$ZAF~BHhF$Kfx+G4o>Q<3tuu-4=8Alg*bvQ z)D$&@n>gP$rmuv|?5aYHhbzh@193uh!q;K*3zf|{HB=E%_i}KkTc{6divcO+9Kl>M z576#zqwc(;7k=NA>~aF-B5*j}z2~en((uQjVsv^pmo0N^*=Z15Ba2w$2eZ_ec76V} zE#X2JCCtjEx>dYPIpI4d?h#cdw0H4j->)7EfZ32Wft?U!QWvyGhp3jwOU$nv5bXd> z28gD8llOO^EO&M&eR!d@5j0TTdt!jyeRlWC)vp0(QP(0)^vsiS-ya0=XFi>*r*t}P z=neIaeMkosVT35$rV&Z>YZ{Z1fwrBjW_P;+(ss3TXJ23(B@;}Am)n(i$)9?kJ0S(( zU&Oa3lT1)#J&^fQ_SBu?{~9v>po}@y2@SV85KA7sSO1N0C+`R+4%el3_U!@C<*5Ll z4SM(rLq~6a_-|?wrb595ri6adCp@igc?=!_&NK3|AMys_S|F>&pm*mk()xYSE)sP+ zs}%dH70v5=cl*8WixHt#A+TdD|A30x<+$?R9Zd^Wg2#`M?_LRz4_G|%XPZPOoE=LA zfO2iBRTW5FxNOSR5qJDP8GQ$g%_}4nx`T%LjENEuOiXr$S)Er5xg(AyJX-+tWV9(gWC~bT zUxBSpHRaVJN}3M9ldP>|OvLHjqt(xw zv$pui@o493!5(b8n-x;cJ8>3VK}(!(b*^7IKSV&ZZFQ` zT%UaLdn$_$gs@qJsXhGLTaPy~4PU@|@cruXBO81D?>SD3C(YTp@q z;s{eE-|T7?pe-eDv$dBBi=@Ory|Fc)1)c@f-n}>_d2=t%uNqTRLkN35%@s*r!!BCL zLB~)Ikp3&6)qxlH%I8J8q3(xf*g-ZZo?E(t9^zN@Fv7>JUmxM`1hRB+uUM30kq|oc ze5ey46Dg_y6IxN3k|Xe{5~N1M3W`msc2aSF0f+ibT6}Y~{ojr!HyE`G7gCWfORV;f zp!l(@44Lsr;(5xd+J&c48maKH0SnCq!Y%_(4hUYa=5EeOSIqui;f~%9sO3OX7~#$u zQ+Ye95PQmI7g0-u=Sd)*Y5F%gUTK9r!GW$;+YCbhQd^fa_+AQ(nnirR&iz9^V6P@$ z5q>POAVHzWL1~-MEpn{ySOQqG55pXZ#1JG%Q9rX7L!}sC4-;3tBBTzlaJTf{l;Yvb zSc_wvGj&RC+w+8k&`G@@mll_a^67On=HG7Izhn|F?50d`TbIx#%ktZ9GPUetYHmtf zT$5@64+)O-#d*~mN|}-cmI2X{@F}Dv^6=}k=`Q|)5l6VTWUPk}88_|pd^Fh(M&03U zEELzFt!T#1loUD%F)O-~S4QH_Zd#$7)l^KsWYv#>U_H1pye)Zb0vT*~OlVR1_u8V& z#v==o@ab6#knAi4Jp_T zK!|CDwxbKrr7+`$gbbIe)@~sIe<NYMbD! z``OPnI#HiaIK#shWjDD}Zt+KkU4Go0UPj!z!hK=wl?TwxfHrae^iur1s4l*zdLiEd z9z#hSJpH)mm>E`%?lem~Su|rIAop5$Z3#1}jb|orawWQKO|7 za%vW`G3$+vE9{lE;!!ER@PmY6x&a0OJPRbJ$e0vE8oSHrmq=OsU(+P(a*XMzqPM^} zXx90Q++Q;D>x6xc^bLq-oB9Ba^VQuyXyk zmW7jH9e5itwF(?&;?EE#=ek;8qb_wFtjVUGI+XXI&K*(D>RX zoa-cv?OKiSO@uZe6)>@z0$yeE^<~ zaqssmb@RLJ0zr+_hd@C;08ELF1e zMDE9q=5^Zx8P4~21@wfa`6hJjea>Nop{w!wTjZL+gurU6@Gikv;13H@@<#|Ic#dBM zV?-E1A$Y7IN~P&u>U@Tk=9On5M!K{*vV8PMj3C(Cg)H1w6g*T^fTLlSyL1A)xFGSj z**(0))I@MCWfy_q<6K;Q)s9H0YAN)&tyWQbZ$0gscYwhgPyI|x{~vA(QyU|pJ^_!DLq zdGc>!GNBFHs8}j@HJ$k?z1%n+YG0`Mc)x0bllo}B3FGxu4TDnz$A#;k8ih(6N$5Ed zD7l_;)fUETK(pQ=5qPiFvfd}UOS)&5Fg51*3RgZb(6&GY&6IIQG+!$Bb`vN= z)A2O@bxda!8crkRumox~{mz$?TT+PXo*mm#fdU~zfUd__LP@h1meARjLNWIT$ zM^uhdr8r+jq;ep1fp#W^xm}uiHx_o@vL=q&!=pz%AiGqAP@dh5>f``&yK!)U8TZ7i zVmu$hn8Y zV{-pc2=j)W=+SszC$B16&fJl-YjZJ-r2How7H9}h0ce2f zPF$#}7-U$-21m#O!H+#>`I*9Qd1FA^03`E_8dFRe@eo+9khl?T?eYv36H|{gCp%IM zpmn29Ej>+D`lsIU0@14r>suRzV-ep82hV!^h7J(&ZJgJSX(UqyPzD;x8t}L;JN-=Kld*afI2_S z$2YfNuIxbp^~Ebk9ESfi9BNz~IFTEstdCG%S$zB1!2r@dwIoLXt??%H4OrJ`hldZ# zPCM8bYI6rr7fBzn#l_G5+m5_5rvn~!x_x&3dUWXxm~IrQk)5o5LR1BeBmd-B2C|Ba zf&^O1EYX*}+~ReI#tby-o12LwAcN~0LhLV*Eix(Pp?+|wx1cHJv^isCFO*!G?ss2* zneE=DnCjcfdNVRu^wn^wxX`H3e)9@dgBvCDHlrD{wm6a_G-6X~fk_{%LCt_1Cu2z( zkoBPTh$deTuD}1#!9irKT|zR6CH^i4D&NM?Ut2gG(ix3IB_^BqJD}Dqz)=yBoUk5& z%?X=YOE_4TWfR<1L8&mv&*lEQL@;!`@9$|GHPDI~J!Wfq+T2v0l;TtVSQ(JRZMG;E z8TKEMD6kRqqrthAC>#4qebl6l8vRBqGqO&lw)4U^*2SFUnNb>RtgW5*fW`_V(AEv@ zg7k($5CF7`kmZol3ER>iKvOlVIU72G&?Zk`oiJs&VN;7iy8Q%|aDepYF=jT~$i7IA zIjpDJd^QZ!g7QL6@>{u8-Fj3KV-!2y7 z$x>@Dd=ts3YwVc8BY1&$@W&?#oc}J?TfRZr?8#Dj|(F{<$z9Vf>Us54Jd?Nb7TO>Lg?oHoP%rN&{D%Y?Sx( z${_I?KMJZ*?(vs2wqcX7}t8X88ycSX{U(D;;sOv(-tnhM>v0!0I<9 zWRQ+5azY4H@YGKu4dvAz&smV%B`~msPD2ktwaqXh<){P=?(wcvWi{ZIuvfaBf^qC; z#p2}jD?ZKJi=C2S+pJWAXZwlW&zEyD-HV?@VZ*l&00UVAgo^IqOlvMU7ikPd;@`r| zUtK3r1MU|TH(`yCw=7Z--g`aHuHFhiaXPc?r{J_znc?@VpiC$WD$4r>#tYCZ`A-`RSb^Wwn^ zW@!0(0C&?{5p!1N#aoq3kpfoN_tlRsB{>DN*??9X4j#W;{k_7SiW*$iZfSrbS;w)n@U6L5YKX${IBe&KYq{`Ftm%d?BDb-F)IWh6XojrYTnLxKbyZ zO4hEX9lVpwmW*g6j|onRm`Ib4k~SFIaj7;009YX8zUnE9uRXk4G}ZP?MIpmp%2Qlt zq6T71G;PWL85wH3g(*I+n+|V0$&EE0(MzTfSaZU>2a9x8(jaa4{;_)geNHnr_CFx} z-`9V%YXD*%I1yKPd2 zH&KJf#@i&fEToSD{xvXTGGdFWhb(uaxh6&tD?gT!pMctY5pcfikf?E57=kTr1-(Ln5W+-649PlM=L~hs*Fui+@6AEU<8Nhff7^jMT5cPwb zaD4F+{4mDup(<)KeX5S$OHyVYp>*E#psV)9N4H(oRm5u~vY0isC0 z2i{Zm#Yx*UbqQBoE%NmRg073ED6PtwaZ>kQGm-{`-`sSttK;!u`_qqs;CC{#Mijlt zjr&nK0I#|MA&dufcCGQKQ?^}a1%5D^LRNo4kDzX9Icf!(^~j?CpHOc?brnG8OxSw$ zmWhGqOp#|a@N9Hc=6LP^TDlC(T+Bo^>Ui>9>hygc2V0jc8-JF|AOU#-B2!v5qhm*h zVyB_U$3E;uejt_ue97d8l+KD$l!klp_=*<%5ESg_tBk7M3v26>S~_Fj>ujpxa`YI(Q_g^X9(*hZySorjT*u`#BjpH4}_Xr@LG z^r9Hi1EcwvscO{&ZD$6>*2*AV_1cF4fCG*u`W0!L?r)+%mAsKfAB-a3kF*wiYz%&9 zIMaQO9!bjUq}*=*@!|e&amfT(4_0FZ$7_esrvqJNAqU7OND1H2l~r?Q$Q&p&!J2{g z8E4eSo3f?jBnzS$H8kf4A}`-@*!;3e2ZPa)5|Md(eItTQyZ}Vy(&g_{txf>SQE%Eq zx6xp}Ppbq7~BXLOX>6Jbn4QkRDF%sXBtj=@=5kmxOc~9Oc|Z(HPp01c-!7fmxT( zrsh(gm~Wyn;7|jA`>=6RP+L#)@M9Dnd}-v5At~E_l$WH4CL zxaU=1=?Vx;Xfe;UgA{aadw&7)xQ^_E-AY_HNW|drCHoeSzVAud4U7!vw*h`xycI~I z<&C2u;K*6aUUZu82^~yxo*>m)nAVtjef<{cAZ7-DpU+|AXq^nZTl>`{(lU7F3w*Cl z=NM{yk%1AStFOt}vp0c>(x?7gXuJ&js!@uxrczStS3lPH?%P|zkLBCE#2aR8imoxf z1ptl~{@39bY&g-*ygI-vIuZ`B%!JhNmZ5Xw;RvkAi1`T-cu(+h(W$X@NlD05y@FHb zx;X@x&L>N}xP^HzSWHr2udKr-OJY`EASvZXm{{S|L7%Y3w5V&ESlD}?9(~TTS6Y)i z``WR{itCE{k)xGm8;Ge0&U9SD>S^A~OZCb^KW1%jqjC z{dj9~Y^DF*VfvF34PWxP(qanH|5YGwQiniI2^i}83xt{lM3-0*o8z5r664ZALs<7Nb;atB+FxxS?rfHplR$> zwOM8DlRu>#4utK*ZDe=oXer9n_56SHSJrlaLiqVgKLtn7GoGK_JB2 z7U3b9py6wKw@yP3pD+5JStvjMvk~sUkr@j+6H}TV9E51v6DC9ouwz>!7Q_%d80;*G zc$z&t1TH8m2WMI|JcL+U69vQ%uzg!2C4>PoDTYG#|F&#$vim1MPm9`fk@jImld>3Zj3dQjw5jc!D=7 z7R|3RZq^}UyAWIeLuQIRk{(tSUSZS%Ywff{XJS1sx#N3_ix9}_UI-{l+=DFd!fqkn zGE^Ys#8?hb6?8o%{*6S__7wvM;dgpUe?&2u@P-gH+MT|a%1Cz&LOH{jc!NKD{SI>R zwv`H5F?2yupo&y3WQjPnc%&}SBygf?eoU+ZXgp{lNN6uW)DM~>10vMS=i$2<=(h&Z zd#o;s72Ea_Y0hYnL%Wb=tpm#f%BHzCRB#f^KCP2aU$t7C#+sm5rr)xN`3+DWj5FSV zyo?ps<0k_cTZ+|7hsLd*Ku-M-EfI|bDHmgQ=uu9cqG_;szTZ0pssPz1Q8V5u6)K}Y zb$Ek3mGwNJ#sA3+{8ifH5ASJ+Ol}C_Nw#<+B3lSvjmuEqT_??0%kpvg3Q$i-1&W=p zi9!m&L2t+{wPd@#$0s@D=+Gn)F+F{L zzfy}vd-$=R2}ezKwbJftDnXIk@VAb_bN+?8cm*ebk_Y&NUO~dpsA;4e9(98WuK@Z! zmOMvFv|hqsYCpAT7UNtPUw`>v>Lyrn+6!MEHJ@WW8g8d8K;y#HX_`V^2E=F-s zDmo6pUhP!Pzqe+nhpV|hBZ>^$JT&ein6+^4)aW*yA zzi{Q;ZHnwJ->k;_JA^OKTbP}94!NNv_BNJ!Xud>cx{N~j`#O7>$RrWSipV0Bz%eeo z?TkmZ)^kYYoc4dbpMQ+$r`4blH|^j8V^EqIKBT09v~6pEK)DlAshxY{Imse=*kT26 zlE+D`|KlfvcK;~t@8@+*B@gfESE0l?sfx2stNY5oolj^wDd;#CZ<3K9oKDOvw}hn3 zOG+#^m0|TYJI^+%x}r_k#CC!u7Op@tReTzZOqSXcSx^be?#QjWQ{+j0w{X~YI46Cc zf@)BPz)ISqfdg-J_3~+18qptxFMUL9Q z?01+mj9R%KXdOXKkXs;Ah6&J!g^$nIu(U_nGCcpQ(Q%4@UDAzRysZbiWNt50bVS0B zY495*TRjmx$5v3qI`vPbfC=I?v{|O%vB#Jc5=$0~p?$Z+C!wOILFDqWmI@5XC=R>6 zw7nkx2&D=|9pS&!D;VrNhrtKfJFzHQ<|m|}8dJdeMQbpCrH%_YsPy$CRG-EU{jg^* zg>k{34;qnpSUNoFg8f1JDoTM+Iqxs{lFkR7ac(a`e0(jx&<@E#OW6vWBPn0d$J^*8 zo$(1B(0D@5@M=@Fs8`mA^-$=_ss*IE+pz^ZY~rP_3^PC=Fx1N!?&1UHX3}qNkW&XX z>81kw)G<{JH6e%B)Z@bw(pNc%O_{Kk(X>mvu&n*GS0jzvJRsk&cqzWZJQ?{h()nm7 zb{wk`w--?CrhHGow&UD+eEKq@&`})tGJsYE4jcrErApv3X;SO4CsCAH$epEf&@ROx zL^N$J@n5RNWvaxDHnjj-yhS08s2!@j%J@fqv}>tr{r^lEdG=!65b73QIu>=7H{gJE1!OkKi@FVU zg`rgTm@+A1_o}kMsF%vNC4nijQDM_H2XxogL@Y7|1?+DmJgVWl7=m9ml$~5AIZ0fo zqq9nQ(lx>h_QZ9N;G>U#B($}?IK`q42>jq0;4?t<3 zf(&{ElvyK9BV7RU(7FQfw$Xq#1LPX5zzkrvF#O&z-l$)^zZvToY7sHw{4^g%iWu+f z#`gRm{$72VzL$+8<(xEa*zFBtl-d!Fjg!%VW};{LwwOM3XLc_44%VlRW$|^nw(G$y zo$mQw)>m7($#2^3ExYMnsdNA7GDEOKLtc~YS>GJG_oV}f2BLToo?Yd?34N^wum1{E z8QnFt#_hk7l1KLe;E3+8*yCslK_jpwbtPo9mnIh-p`f8*yn0ZFpLERDz~Z!{d{Jy7 zba6UI=oX!!at2BK+F7d;<#W&a{nr!xUFoi3#Y7dhJB8(9IaxH6RpI7K>&n^xxC=j8 zANQ_)sg(#Yb(|Y-fy=nX)iE;oWFokJmztT`ez9EjoBZ>7RZaN>v&*`NK zWNDw`DZ9GCHk3xkc`Wk|`C6JFUFH`$b}3BMH(iSwu@q0%+O|%J%}Q8Ivm1sC$jIzu zH{}7PyNrho?xMP_Mn^=Ojb0j))3R<$Au_?`fY~g-T(&<9iF!Z-a@aTWlAM`&2V_BJKSn{tmYPA@vood*&JW5gDHKE@1sd}ktQl8lLUJrhv@`{#g+q>=(e!EJ z-{a4&O@~z_9%ZGOIL;?Fm-%)zfk%%L=22ptrd{??+E9xaQX*CJZrS#4zmG;r#(&Bo z@xGl!XF+Q9`Jzmh&ztPyW@hHzRYe&{W#+|_L{-lr*PcNUGE}O4zRux<2b?KtY`66c zcSVVO9_@k#k+I|ed)SN~77+&jTeSStIvA$wfg{*dxX*_EUWR&wsdM|2%OjA_-hKhb z`ZLpJmENDC{#>+m1@IR~f)Ez&;lfIQfc5)~r>m~NdC0USHvVpk#u&KUJn^IB503n> z1Yu+0m!i3MnWk;yYQO;TF~cMZCTlSIaaw;RyBQ}1r~YsB$`p5i~Q-O;ck%@@BrHv#brM(Q5DJR3-cRpxb`F2@&pBwFxb%C9&#_qG@7)#Ah%K zR_}p`V|A3S5wt@VW6Cw7ee%mC0^EGru{g#b9-4b{)YIjm5&=>X0zWi!g*O2A-=O#v(*}Q+w+ffZ&S&b-n$hMH-8QVVhD%z)lLY z!d65uiBnM_Qc?7PnHy9J`-F_7(<04$A7+(NGE!a1!S-Kg-Qiq%RyaJ;T|S&Vbzt(@N7 zzv`SKBEyn%*RkKjBTAIFx``H1l9zX8!5Gon(9005P$N`Z7)Xz2mNz;plrCRwFpZk9 ze)olk04=UXUjqq0VCAN9$oF@?TenTo!zkzyXxb8|WkgyZhlmtF-VbATETt`o?3Ey0 zJ>;7i6z}~KrGoSAm7T}Klm6`$9)_;odB&l4xy>QzrDW(P+r0>jwK;8N0otl6@g?<( zG;~vM7zsD85iBbWF@-A&UGZcGxP5s{&60BQRZ!nP%l2^|PlMmW*pc<&Lt~LZiL}Hp zuKb6n2H8)y~mv5(K(m@-F&kTc??SIQ~Ng9aVAvpaWAq!b;ZA?#&xQRlRZXAJVGB9QX72#waFq{7HS?uy;?L`nP%OQp&Q#=$mc#Zo!h0 z!aiAT>v2b4P6X$=b#C*_y{jiXIf}<_@9G7_1={lZg$4DW&p@E;KR$!TD>D)SMt2rj z7K;|&7S<%>&5rA(Y2mw!3w;=G67RbIcnkm;ADq1W*hlqSue{tD1|b`{*Dn%>Xl1RK zyrz_w*?YY?0KZ-pyG0R?Lfwi9YHCaPbf7;7!${E5;q|^TIbaD4ZE;x^m*vcB_;amB zklkb()CD1?s{C0ceEKfh=4Jy_YZ+mYNp6jmPxLP=%o5>0AbILk*ES^HiG%Hun@xbE zSDZ3_a&Z~Tltbsa@L{O$#Q|^QZ?Yod?={o3??xx>-DwCx)jZCmdByDV${>oGm#w@k zK7F#7bs%aD=D=V&Q$(1?s`4%X*w;b-j$;uyPQ|lOO6E%Vz@0!!^Mt6 zdGMu%#L{X%D%#QcYh>XbG8n{Yk=YB?;kf{bI2nFjSYF$E43Im97MrH6FknM?EtCV9 zmKUEOG$3sEFNPY3vI0k^|WkSFr zU+MHn6|rt$Zv(w^`W=`P?K?GTkr4v8mK?U~LEEpPuf;6!?Gaq^brt^PX^BIMQa z6ZxPHT14hU&)Z)-oUdYJP*t{k2co8~ z(?{?i@G>({1wtvxReXwAx~1e#TV=IWo(xJlCJ^eHk$wQ`b-GhOg*@PCl^r!MMIJ@D zV2Lsj!bP5m1wP`S)>lAB|KZeS0|R{4s~I6cH)u1Yq%tSQh?X*8WWaOTMDJ;w&+x&L3V7D~SiKli1E0sRId z2onDmqHV+$LSZ_1d~=Ct{ZQSMI5{h>_AYoWY9EXiX|0tUHi7LBYB4A_qH3!30$QRb=(AxrGS(d!eRuT zTV_M!XRi@LhM{n%&XJqZIIzN~5)t)60FnX)P#=;BSXjOW@>U-57V_G%ZQsUh6|11S z{>fXuahd0ndp@8I0%Uib!9cbYW1Oe5;@c3cP}X7@E-&7qF)Stxo;I*qSN;Uvgf4xna5=$wNs?q8<*Co!W zEPG$$!WkGG45||v4e84(+GiSTs(Ys0=wyzBGLYSSO>kU)dK*&^p;@zeE30%=qb*4N z5C~-2nqPn)WCL@C&9jCVvbojxAiZpx&8!g(MEdp;LFo!+Qx#bR=|+C=y;FF#HBrq3 zMYV1|YBiur)Sn>7fj$5HdJKv_7+wAW>icq<{6umMY(md9KXE|T9e7Yn`s70VtagcV zOYoP~0>ljw?{w8MK18&yflfRVcR~l-f(x657uLvB@Y?fAUL(4qBaO!!RSKQS1i#_E z0|9fHce?@0bkRHwt$nr-uCzp+O1%`UTsq6&?sh=AX|t;IF12fpaMnITlPIQALvr3t zPjSC~?I0^d-+A$9tz_)gglj{L9j1U}v8|FLuT^k8JN<)++nw2qaZCq6YD)f>1ie8@ zp&8YsPyCS~?yb*3A zZJC0>Uj)QJGFUL}_7i-qqx-vYd5PsBsrK%VF@o2{d7JH1b&P)VLK279hQ!#X-A@q%m)RNemsl_(Wws<7M8b_bKuFs!VHFEbS{}AWNjYU_X}{^^-Ai9g z3|J6<{v?Q8&Ies>;a?7eRNm{Ug0g<_QYpba3oM~jT13RciwoClb%O9AA_8&wiHp8d z!nAV(wun!9(CIH-JO^p#xlmNE7j1OFlW&8|B8AVM0AX84U1UI*ym9n*o9#_y<}M{9 zr_yAXgM**LozZWT%g4Js9yi2~lmRqWa3Eei?^NU0cqQ4&bY53wrO*ZPuQ>=PnPnO# z%VS>NNL3z%nJq^~)P)GhQ^ufBZ3f!hcrrj5Fl!)a6@lvD`nD;X(1J9#eZ=u!+oNT&=fB(h; zNH?z2dE%@vV3;_&SPAR^S>y$<%1VrO@Y3GbVY$FmC!b#GlrO9{%PY&cmRFG*RqpT2 zmy>yh%)=EN=h*+Txi*1msckNP*f%zj(vH8|@vbNPa$`;0VwZXWn?z%6OIb`YgL5rO z)@J1^M_5{6pb)ZAEU&4cKC8RN*yhUKF4M`knWdw0WsW*G%3!beZ*l=pKu46^wEKO~TBUFs^_=KZC9@;-8JJ|IN>&``Q$%aCron^=7gFvvSXK|$n$;>6I5=2qx0ipQIPln5 zTr~Z~_r}j-e6}M5%a*zN4`ox}oC=n`7eHw2AE@*S)Wa{>)s`mv>-wpeJP3)%Nv&Kd zIL13;u0z}CHMUaKm7(v`+^Rh;xDoYrR%)a!qQmN(w&ZyDDT)A=B`XTQpr8G3ZDRk_ z6Rhh`uOyxXr5>MTV49C^^blM8i>4=i)6(>JAFBMxv@VrcwB5=PQNRJx=kb}H5|Ee= z-K72TDy{)fv$i6n%}+DBwCHSnTlY>OXgZAhcv~(gX=utk&ba3c*B!VTGJ+;;W+VFZ zO1)9s45oRkc`^fV#xSkmGDo;@m^nk38qx4nt(U6V#PwK~9xr#^7dt`I6gp13(LTo`YRUqq;od~!J${>WYaE78glJ&t6$awI5!k8Tjf z0~g$dLp)a2g+&pTA4QZ7L!Wq2nI29BUwayrvv&N3w$26+%Ty?8gB>ic!fg!a+O5^4moDN_mR_lO;FvEb~?o1yHDR`-5E}(l4_i?_H5YfHo$5|70sAhjK%M}5o0T`O_u1Garh6GjM@^ABrIG5op~vUa?WsT_82CZ2 zjq)Vjzx~~HZ<^=55T3q;xPfug49uMSY0XB|$!Y}vJq)y0$3be|ErC2~5$P&V>9cED z58AwUy2(-RL$v;6b64tIGcrPK-Nl6Dw3Y%o9>jMgtAw55n20qmc}!|OYlAd0^DV*TziCMPppIR3KyiQBEkv#wx1QL=Zt7N{%14R zCla7a1gWE4>sd;Y%Azv-Mm($%k!LRZ>l^*L76gKGpmb8>ftFto^N#Yax7|X{q0~)Q|gatGG1f~ zxR*CFJqFkq8{=wlfyH6-s1npcSGyAGP>Z!}v1q^2JVYGrJ|Lb;X1`cIXJi8?*4(1T zzs`T$fq6mRBLbx>!!?1%4SE&?CWe94ny+F#ovfL{segGi8ifZeBoEcVp>q_dy`Kb$ zVhQf`+{1{uTV_lpgG<{Ii&>zOR^{G7J-74nBLE^W)ehEj5+~br0%@w$&?kkQr9dG* z?yVMmqf1vS9N?1*@A6)5oh!*#BtZ=_G=?irr&T(h-j=(-m)O`O$BfM49_OsrrI4gZ z!X<%hQ=H;j5TKoLw#wQF?6*9?^2kG7Xd_#9fP%$m_DIoeQ;jPO{##^p^5R^SL&$VX zPF5EZ(4ireoR&GjjGA1a1S43$%8fp0mT7UX!r3nU2xyICJvo@#m+ihTXttB~BYCP1 z5&^2m2%|yRLo}Ur13Cf8$)80*rP)J|8b7ax*|}A1yZhvq1L_LmKQG99HrI9AV0D_a zB+F6kYj$tmXjYw#F`2vgU{-bdGE!nzJP!RoWPM|BUQxSt_{6qt8;#l6c4IqfxMSP4 zZKFvV+g6h_wi@>Id^7KvZ|428|Ls|`X8pOZ>%Ne@HX6+S4g$lYvhU=vF0V1O>eLoh z7?_z+{!%nN3z!T4Q)iOPGu9AV?u%oeCHRsi?!Te>)g%xX?f!drRAy>n#y!GuR$l}H zQt}SLNO?-fv5^$R*^2a%;gR3ju;TB&-gMo4!H5(kPu+`-N{an!cY4;;zO?G2JXO?j zeOs)~7Ve`vLi)mdg>}ae&%6}&HM*)MS=0*Y5ONm)4%0I22xLk`PJA#6pz@0;R zxznYwaY*Vjnp;2Q$FBgWs6Tx@o-W5bMjj-)MtS*LFQbZiTQ3wJ*OUEzp~BC7J0E9< zSH0UG!1Re@U@qYYc(JKEC(=G2G$6bldQ}1Wyp@RGUKQe3sdN~ZjP?}U5BV@y{X7JW z|CVCkzE2o2x?IsBTgR&{ul#DUa?z+X zV?8o!HMrk{u>D{p*aeoE^)66k8Z#nvfUe?1O^AF8`a(?$(yG4$g~GoeMPOGFJuq&Y z;S^DfG=x7|gcLorp-8lCi)bSd);c0ffFww^0ZR|44vJf_+6|M^Y>@`)Kc4~5u=&CA zhSeTF5;bGwUh(?s(8>>!ZcS0`qxK6TReDdmZVm12HtjnrHt6;gP>hl>tU_%)P6kRW9`-A+x`GU}m?J#$G|dv}IU2^80lSIF zf+@5g$@fHD>x=Tx@spn6Ke;Bt#(ygqrSe|UyZpGYdjq#(fF0f3Ip2!J#tp38j++>d zD`2f3SG>zI^p({uv)3$$aGDbN0t^vRus0Az z@uQoY%b1+3SEvjrxexuE@*)Pw!T#j4j7q*wokHm60c@!nXOo+J? z_$qw`WAsIV-!|{Qk|mT}Sm~a1KK2Op)yE6F31@)r=c%bwtCjN3fGuxLy;<9Hl-5V_ z=ivD5fxH#XpOnO+Qf@6irH>R`Ahb?a;ib=bRT8ewzxQvet|aT1u8FS+qCP4F!X-ko zRg|;|M*%e~-^=eZe7w-^OXT|>{`@=Ja3O}mt`_=IYa{0DjB_l-fiio8WPdTrxtYMP{gR3u$0e`&-^RCA84 z0z=cpypYV({a4oo&FuXfS9Nu0YSp z8P3gh-uYy&%47|1H?3g%OSm5BD=4la=o!Y8j2uZq7RDg)X}#(JkC{=6lA1#FwMxZ6 zrJ`4|A?-QN0g_-hB6gjG=w2dRxAg>k1OEYwa_}uzr@p3_AkG}P;v_nv;nR(nIkFHiKL(wrB)L@tUtF7$*N>LFqk zWq$e>4hBzEN&v_qBzu>=@s{4%e^wMQl@P!}7bmtLJma0kmbTj8<`N2YUYg{#cK#}g zx?Y7&CcF^pb~(4gb+=#%=99u0YQTb;`R0C6m+0rsjjEfMLM&ClOxWz~!jI9DRK5zf} zS$+BMhM}nLlhWDrLh?Amk;< zZt}V%L*Z?P%XC6U3Kx+*=0^IY`W2y_4;fx1-6TbTdlG3jGq|(BwT#?+#sMV_Hrx1y zRjB|`q963f6+l{Eq>)Oz0VaW0TC&sCoLHfL5wsgjwT&M^Z+WR_X^?de6wTq>8g%wq znLiJlb%cb2n{YOnArR;X61R?OELipEoVR4%Ibaw?)jvM-AT@%1Fi`x=-fxspjLv^o zh}yT_B>83OevTKSOcha<;4Ju&(7ig#^AvIdI(VeMzDRt0**je^-5tdNnEpQ<(?b zI@C1TwklbnIb?Ls?`3 zO=2suxK`~r++qyIWqi2^9m|dg)G8|mJ8#8+Iz|cvb7-n9ERR2mv z5`{u=UeM>jyN{LcU$5nB^gBInI9SMxr^69^F-ZBPiA8Wr?V}!7u|*D#tpR;+uK$@s zF~lN0KJRH?R^Tu5ZoHSaS%;Fsh~&}j(yM~c7j=xwi84S8-Syp?gA^Nd-{XTCIsr~0 zG~)0>D;;Ndf483RN-ZrN&lL2pSA(6KFP+!)-&1?|fNp>`IaIyd!uOz*9F`QE`Cqb0 zY4_eH5)Wve&N=Cp(+iW@z2i$mGCRRjZ|HKk*SWQE>_g*Oxc6dsG8Fr{F41DwD!&CY z%sRGN*0r^}-mU-jOL$RVT86E9b*6i*k3&TVRXZqT0eN0p1eYQ|Kr-p}Q{12H!x_b` zvC`i8%bCFY<&QgPKICiYa=LH}Q@pFewma)io7p3A_VQBV!y{`$q1j2U9k+mwv@<{J z^+|cA@A;Nz(LIcHKx*aeXr1hm#%1Wk{L5#I40r@Mj%$u}C`G=8%vWnJfs3xW^&3h} zc+1l+sv++xj%!-TEY=f@{WAIOl*+$ynfzIdYKuT=VFgcU@!wl^_dL9~FNMwH$%NE+ z$+!rf4Kd`YSJQMYs@{{F8loYp%h9b}98p0*aqng0CU2l8k#kr4q^HO5^_+o>p6T^zksW&5bol%|^M5Y{04)2bJd>w8a^Mklc1>zw-G@r(+1cnQqJ zF(~th#}d{@rlwM87q;<=wg(f0%y&VvZs{&aAF;ph=Jy!~NSiU@r=aOMOC zB^4m(d2lUr10{G~FIR6!kx}<~zO#-*bgWe;{?J6%i@FgXo=fJS#Kf!Q*HB2{l~f0f zTf1uG4Os?>+^EIA4XgQun-ki2($?^gJ7-4%kICnw7IM{tR-R8OO<6}=l4SGapDLTA zlz3WG)13}E@hs^4**_3fzDpMS->CuS5#(Ya=LsHzvct1qoh5Z)kaq&(Q;!xB4vH&+ zYMDX^eO5`F`7u`yyBoB0|Fr6>#8^_&!|*2V;A+xcrWoE+R%&Y|Z{`jM*EW?g3vQ6F zIlQuUGa30>@5y8b!j>X@XU)~Q?pZtzYAbEcwD=tnYgH@zvL9NG+dY!@quLaBpjJfL%{sY^d((Vo1$H=p zFml@eaNa#voH`xRZ?|@;=G#6v;(A&Cdp&ic#j$BPU*LZlFw~kezq$5vF_Yxu9D#O6 zy*~Twk*iv3kkO%PRpGGjQu&#}EH(Oop~GBX{hs*LwbP&uOMH8?oQZW}7Z^o}}fOYi&$hL3TC{?bmu9 z?+b3fsQxxk|9Va zliv@{Av%QfA8ObB{}OR{{xd_c@v?EGKRSaX(=UTSUjR2HrRUZ3)7*4hx+UF({Qcdb z=H*^#6Tf$xRLfPHk8$Is?e{FQLhpmgucZT|v^T&!4Fy>?RVh-4p zcQ5)EhXU#=f38Z9^B)MPT9l~WwLYZ8m@9M6nWMmDJFjBOa-Y~L0<#rx4Ik*?v0|^7 zeHdyucRWXrpx7`gHLAm6NBN`g9onkp2c1@Ty52Ie*)ZW5Ab%cU->_}t-sQ*R}_TaD+dg; zsbWE=-0$~0>?MV31-p^`7N56+^&Oq$fAh;VF!a&3WO2}Y`|!0V7OF(>@34=q7J|h~ zLdjW$Qy3YL*gQPW9I-gFZkn?y?Y8tyIt3`ZYLa)|F_!m{VPn+m&nPd?N^VyA{6wTs z`Ti}1w9YHjhvLs#;I z%CSy6y{?*JC;12v`^BsutBzD7RdkQ{7Z8vU^I`I3z20(c>PM`6m>JxfrKLz&(w_3_ z%}sFf1i${MP5eE4FV(4xm>ZHEHR4AvYp*`T%Ud-#H{OF2rIXT-=VlsG0-p}mkOyzu zG$G+W2yd!Mu9qLO6xqz5|A%Bnrb0w~0+;Y%{HdKes^mji*76h}%MS;8)d#kFrsF2;BDKjmR9ekHXP9?(dsZ?8xy^Eh7~wY;2=Sgbcj; z)cyqwA&G|Z-el&8-p>3Gx*)Ca1i-F$HpP1b94Cq@&R$>Jwh7dVt&(U;K3^ad#erZ_ zLB^o=#VcJbM#h&4+5ijcK~LfiwQqo=k`ux`SS2X866es6cdHE78QQ8tfHxON!E3ogEq`U>6JS(|x+xKrR<>S2#MugF`X4a%`G z`RQjGfG}(_pwJSi77Ydi0$lGXE;Fz|Lfke{10w}V3x@^)J*%>bxFZsGq1ad>A}0Pg zNs&LD?buDV=Ht#O=V=+_-EwodAd2i>$rOk9i<Uo?Ua)A3TR)3*`U#rRU6Q{pn^)5n1j#?9E{nY?m2M^1SH$qw~wJvY%`dxyM;( z{JdVOqDx)u=YT?U_(M)K06L7CY@vXIGBQzB#7<#B8DjOj#beGPrBiO@ku}_ItZ#%j;;i zgK{yJWW5BOztzr3yX8M|w?1^*Mn$AJ!D*6HVw`?R^eLJ8NPYT>b`9mdrta82F`V}^ zdYWrfbaKnb12#CRDv6R@y<%+gXbMWso&Eexu==Mkk4TeimF)itWvNPJ^%N9Hmg1xs z4~#OITkC%dDquV+2r5u)BPl45*TM7s%PY=GDLOW!dcYs}NbeE! zHZiqJCc4}k3rYv&syDaS&NRvVI9Y}5>vNhDe#V4w5*d&28?4K?6K7Zs5ZJ4_9(X8( zHcarV^KrZ8Wv?<_Q-&++b0`_*f~+@^9zcU~cdt?N#v_wRWkF*pB>C-!J)ClFIA&fJ z+$hA=qrPJ81)?{xrLE05xoSvdhCEDg5+Q?N|E0LZ@1;Dv1GHi4bB)iR@flgcV}GsQ z=Y7W9xeR9A)b>^+-1J&?AjxO>_&&?tqbwu(9|_piQMpoI4!hr@|BA5gTf=asIReal za22XbR^E34EEcrN_8Rj)eHo@!QCcL#Hzm|%g}76}E@XHDxU&!8cg-iW5}(vC}0Bq4R*y>zIw zP97!9qSedWV7#i<{+u|@6mzIe#Rqti-&*N+(-wXkA4AFIuxFDwQA;2X$9e0b4GiN2tHdTv;yiHNNN`4h zUEG)c?95O&XX=gx@u%^duIgdRpiC{egw+y!Sb88vc~5u>T`Y%MFkYL?^Pq4iIXLRP_ z;!Nl8`8UC$#(|!}_1j_NL7lKr>$_p9>5)PI%bjrY@}*Y<{o_t(GC;`?x!LVK86X*O zKpw}+=b{#II~_y5?G8cS#uGCg2|ce}?OOtAIScUcueMK!n^hY7};TbrOd> z#(eWtt{L>grzeBRC&DW%P{rZh!6l)Q(!u&ucj_%;*tSsDUP4ES2Qy6h`?0TqbtO6T z8s?}i4ulurmAzXCO~%YVj-TK*o^zWD;K_J^1?xgxyX}=fJW}4u{rjiD_k(BMkg8=5 zLLb|(E#t$6y*t>2POB3KavOe_!fJEV_$xiq;b4I2=$hlV7%+D*Q=-}giL$HUNKuR_ z>9^`xE#aETp??X2)&-0uiXpA3KRZPFZiYsydqYm_X$YKu6cvf=wioL3?*Chn7xivlq7r`2wF9c>u!5Zb@rU zZA-fODNrU9TP$g8oZ;P9WEzmXdU5d$+em5SzN=7BvfU6dA`+KATQ)yc;ZsE%?LCC5 z@w)_)%k)t&-3IhN$W&*&{s8WT0|NhRsz1g(t+9@A9lX~|7-ITEIu&&{u$GV$P`I`_ zhb-kEr~}3(lUFoC={W%f!HajI*L5XgN*(SRTd=9`6c%Drh(;-7j-uE|{($Dt7(f_5 z;#b;?<^n%y(spByuTklJz7wjloVMg?Z|pO+)yq)~FIuXG`n>(4L<$PE2zGiHMAo(3 z_g4A6dSGr1HTh0^-=|U?KpwNX*JgH5#-J4V6SY|o5k`Ox?_YdQ*IFTuyeM5H5?;DA z)l0v`jgD>a#e%+`^#02TZy)I1j{?7H4?OC z!g0X0K%97tD87BFT@;&Itn8)nNTBszzjF70UbW{<60HtWt7NE|!<{P6Q$}y3fI0!3nd9 z6~%fOKm6*|glmNoDqtdd16$6XP1X(3-W0j7$yov5Z=y2vc?&RB3G(R{bW0QMDfB z3}3$K-fsc{RD&&z(+v+k{HXr)IymMDuy=%MqBYIZ=Ha+?SPIyCX1<72f65|$#zM*y zTf^q{$mIS)1Z)>~jYuq8qO%}F(T|l4$ineim+3aFDE@|>gjxj*DdC(Vj2os_P(53U z=||D|{WTT0X83n9!_}VqBtv8A^pr0%=M?GwM)eP}1m%*$L>(Poq~@@|SZq9ps*r*D zEOiJZ{&W#44=V|*o1mbJE>w7n#`31Pr#PVQ_lP?LK>1a{+433O5`dMjl7R^b#c_kcYidD9wL_SvD`@;mexM+vA+!S#gMfju-nUi(MX zJLVEfWn;cnk@U=9wo~MmVKU`9Nh(Grzp)YDJc1V*Fc?>GHZRUKNvtg-h|rW-XtmLj zn^stL;9!a^v3B`))tQQYKi)&I^A{F)O=}uC(0X3Bc`Ni|)k2~+JalE1#<)SSD~Y`C zrwhdAI;U0^h>|v9);QAhrAgkNFME?~a6T*Jn;s4t>uR3YS8cCIfytjUV5xUTo5-Qk zzt=scO^L5iHgXB$*uKC|M!N*7Prq48^?wht02F=rc*I=BbXr`-otMdZuz9l(^Rt-r zlXN@hXHyN9(R&hCQ+euA>kyqSE-aYx3%7)~F6VSaa;#+t?r+@jgcyd3olgWE1qI6O zP~nnh43b*{+!<#k8ExALS8U-R2G5Mj)+vLO=?~qhR67~R7_+$GmWp(eEpVo@I485X zfZddJ$BB(M)9{gShkC}2a2-j!zCefAU7&8ks^^#QWoPO`_oOkNxPcxNS-jy z$fv44HO<}@zL?k zNUTK_YRxH5{S=)hYls-30}d8zmL ztD3$!A9Yjg(D<`-KlH;c(_WfgHr5H_s7g0w!Zzr!!Nz9dle0?g7r9S~$-f|~w3Hh4i!8L@{TXE(ECw-1Yrz$`Xo zYHmKHP>0rNwI5a>6_i+eEX(FH;5_7R&a)V6WORK?Zd<3H_jWY(fm<^B5@|YIsG5kU z%3fJid(JokEs@hT6Oc0c>qJLPby>Rdov_3jOm(SBZWG)layy~2R0zzy29PDzL;luF zXUJ4WQE4@5#el2UJwS%zX)@oI310Qqzl0m8@wP ztG%n+PO0BXy6{7z6y6T=_f~QRDbm7yc*n=cx~)`2(SeOkOsS6{d5)*yH&#y7ED#h% zGD+i&r{ii9Vd{Y9qm6r`?Xypv{l3|(E<+2WBZ0kj>I7NXjAPyi0rnid`IHVi@}mE0 zN&7`BksT)FJd?3$iB7RKd2IJozx^Y#$`M=- z>$>83B5zGJi_}7L0k~)}a$Dk*CYDs`k zJSgfvG2HX@g0p0t^Ja;?v}7&R{H$zvH`g~v>$KmEHDznS)Gjk?-LK&rvO1_OrvI+v zC3Waejc?`_?yTeeHembu4njotjOdYysoCiiVE(RBolwaA9S}Vj_I3ZzHav&wT|4+4 zeY~11=-}@l)h^y~h;+@-ARXGBMbGUH>18t)qjMf7buOO}W+mE2@}hD2^~$gj*4{>> z6#~~L0Kd${)QxoE2g8>*R`YVYyFHaBmGG-Y`q<`&I?F#g5oN!=;wsB7JFY|ci~9Vq zlWbgt5ZEj#s|SF*Uuke0uFInWR$<&r7P%$opm@;=gp49+o2zlBU{v#-X|nI_Uj?@r zy)D^>P-R(qgyq1Ran;)q*h+d7)oP>iLcEfZ!2R;o(|b>h^P_dn%GK{S(v~KZ7V65YlV1jlT=mY$%U9%kYfQ&P`>6`W6=z}la zqz#0bevuCPlHSk;N&vZaA+ntrq)WAf{DCz%ef)o3#0-i5^&*mZK2P|-m&nzY8+-g! zMDWlw5e3$&$GvKv`xgaS8b~hAgP*=d&0l>&s_PvD{TxXt*K$Ln!hYtct9de9)I24n zMjO1c-GC)GJh`hHTuW~W95AKa;KZU~(ck(P-+hR4y7KQ1%CrbdIPB=u3Qf+pz~%Zd z4zO-8r%(M)qkV-H#yWtT^=KTLUs8eZ=U8Dq{@ldxNV6s}4QiscHGb{j%vhD=rnTX4p2{-d4u`cU|D)%`Ft1 zle4q$#k;I|dd85@|3fZGk&Mv!X-~8}URleDm(7*VfihNR3u|K*3ay*9YZWJtkS?OcT-js9H8YO92#CT}8_u+-2# zholvE;^H4qf_+K&+-h32N^LH5uar3T7OFekI&VMILS9T@B)2|*N!1{;HcE4MlF6JA zagpQcPLm-T9Sl9nBOZ6~Bdx1U?^Fx{^&*igYqqE!LY%%rW& zR?D(|lk^2KbS|2xvVQ)}DGFWVc{q~_s^S|p(4ys`oQyO8h2Itgq;bgth3y7 z3unShpm^CV0_Y}cw+90>w>D%Yh62Iq6z;TDhj~t%d$4Q7z3;Vc{EPzC##TrER#Te$ z(3UNA=BdrYc-6!#1xG#vO3Z|CHtc^LYN1EWo(TBET zPROO8ktz$&dD<$r*rhJeoDqbXV)YirRPrHOL zXOmLWLyoY3v=F!&9f@viD912tnAwo7UJ zuOefV`xYX~>)psPYdPWUKbom?Ou^%NehuZ0295j@NWn^W=S1SWIsB4GhN#T$y#eVo z#>*bT1BU@$NlqU2?wjp_GJ6wWuuX7Ro%7_??7Bsu-XAp*WFm1*Gdj2r8u@ZkNhAcW zu2%#|P`gj-Vw9QQjn?pqVcQ=_%v3?TZwx|;istboOoMP0UR{Ve^$fvwPO|n5AXJa3 z!j}hA|ak>dwSA1Akh9L3j3B(XV(myqjf|YK_$%;^{1bs?vq(5_P zE0Y^@)aKd$oKtWDrz=`jU$mPkvdO^Zf-}`ga`Qa? zzbK;C?(B39KX52pu`y4v8$k2e{2+4KY)EWuojIdUme+529LiRqLyG zSMpw=Neu$)-vV|`W4ni7x5`DSAQZa&6AZ( zp>hLRpGPK-r$W4vLF3G8M1sW>U)!!NF7nF*CNH)Fu?)Qhva6ep>v{Z7Jo6#U>A`g} z#mtCb%Y^8I&Z4t|?{$`k?C(NaobMp@>o&Oa+i`jKTR@|5haYE!8#rg(I8xx5oBA$x zLtP>O&y-3!=2U4e4GD2_lm<_FpvrwGbk`;BllKu~&;hIY`_yw=Sw9e5SEtGaMbE)5 z3MH-t#ulQE`nMicG$K~c%i()hL7R&*Ddd!f3B~Pfb=r3>^0^2EA&g2DS99OSuvi3W z?l>E{E-hp6O7`?M3Bc!o_`+?0HbL*VO@?tpTmUv7`V``ip^dXev{~6jIc!zQ_RO#; zNm?E**1wJlXB*~pyrs_;L${ZCG2mQSPEb>vz7*gj`v`R4C_UKJ&oAgV=zj?3(aJJq zUq8Or_SfH_z@|?m)BE`k4mb~=`cv9w=amH+HDDxs@Fu?%X#5<8-nLwgI z0lSe>=4}NtjLmNW=f>woH+>$HU_!+&WIMQ0#xzVv|K%aXqXCB7%leCTYiH2$?`{qv z363*2D^iPf<~&fLAX0DQJMfLHa!kM|NKVxlBRP7^bD*Kx?bMVxceQ)Bz5BqEWplf| zeCMNY`-9bY-=O=ga=UlKXON38RW;veVLE{U7xEiWFiO0_%_lFUtjum6em1>&iH=<5 z@4kN3m)qZE%_H108Gq=5R;M=}Y1n@*d6?Ww*yppnQwj)%9N&W7#AIn*-s$+H-$YV= zJ@PO@O!rva@nhdrh~Tx6?U_gmg;PuUY@MRqttGnz&?D z{V(sBQw?B~Hl3;7IN7=lkzU3aw*1UoupBdAnuY4G}^KUAVXRxWs zT?C!m?XZT{jAM?QhGqdH$_ofM9ri%}J*_OWEVIbbk0`rBr2N0~@r8{Z7Zd*Y@&?VU z^Dz{sDn}Nr?gVs}m8=E)ZAOgl-dyEsdXEmYXi!7_nWY|SjR_{ycCv+?3Gt8rKYlwOJ!Ii6%n`@1I39cqN z>Z)EWah6S;x4lCZZ`xJ3&oXLU`45?hlF_)3Z8Z za%~-Duf!~y^Y5-C1*RCZ?Y0g>SfC2|x#pc+Y=QuLOPqXYo zM7%iV(($g=pE4S{@3hWKLU`s}MlGSYF}ig;bSuujhlC138!7Ax3rrA6CL_Ph7tNz= zQ0rt0rTOd*UO(88sU>zGA~}=2T7bnNHH^NwXAM39;;NjX#^uUqJ_`G96;VVf6k@f(47!}Q_^>#8!?YB_ zUz?|UNWLKY^SN0nb!kophj4c~;l~`yANztyd}p?g)fyrWw!qSqnm1XA`OYmEj9%E5E+@tTad|;- zDcn{?xoIhygM0PquY!OF6IRFNi9~)Tl2*~gu#%i{CQ8C8Q6gZi$s0`6MSI6QJmp+~ zwA2g#ME*FK3#8dCEXKi>TI%YiJo>dY<;7<0oaW87`OVoum}u5@@+V+^yy4PEidgUf zzw!WT8s(~d_H;^nb)I_XjQ%VE z9oWd}pf5`FEUUng1NRY%ag30qH(K_^1nc2-!t$$&F82;V2WeRMh?LrYPl~Q?YT6 zAqd|-LJXx+0~m_rP*;NFWXHGjp98bn_QD6ZPoVRiQ*|z1s!LFxc&A%5%hGD?p$C=h7m27*y@Iyv6IDXz>7ZoM zL8}JVydHD=lj3}A>lg>pjO-+|4&yL8A)#K(UVTfG*lUJpMeN%Q$=!<~3n^Q(((d9A zzM57<;2AS--cfnGmxg>Ze=UlCzSH^)v|TzkEsdD( zjRD39{Wgq-` zlH|xJ?~l!|rQjaQyJVGAbG)G0`shdX8ZI9P;PpX%G(Vm^&ZLUVGg$9bE}}e0fcO{D z!~@J%F|;}1JwFD@57JGJ8{VvlY95K0BBOveI^nd+gXkiGRE-ritkuiD9U9|b?y)eb z6qkAN#KfGWs6m9hDktV4G&sVD!E#8G#LAq0Oj zsE(8oO_gLHbhMRBEb-!a}dSXR6J`L>{AY7@8*68?`unY z{1?N-%le=FHYXn|TRK+Rzx_7P1n3W7Kl)~M*{#oCe!6iyd8mFI#Dmd;0bO-YSG$YKKXQ1uKTz>;`~V-ST~nue@eB^HK2Yd7z6GD(<6MdX|h0w?44OtZ%d^ z#S$o5_%uL{*EWxBxQm z{C$$nH>Yx=RJAGurixmuR_A|eC~a}cjEO;(%_ImK?xcF>ePFX?E4;X>WTbG?;F-@EBUK1`p zYby0t4sf2!zA6X7Nnj%6{+&8yDOtT zpz=4O9YKw!b0znr2zq@#Cw-oZ#VqI8>`SfVp5I|VAgQa+X+x`0xVj;D;@E0Ku^rTk zn05$ym7_{gS}BZHY{EYzQ^b#~rv)aJQ`BLqG82U4&fQ(UfCE?VRfa}}Do+8^W^9q@ zcSuWB#T}hb74u(cG)>`q?us5xLf5JiW>3UiFfZtbA%hv_BY|PvtJa zr`+nh04HrY#}UlA+(bmrciA?x4g&qF5dSM*4WeohMvP63G&BsKj0rR`qPgMz5Vj=M z&PSewxXefSiC`l z-4cG|JrAh=`<2QTv3ACZ2P%pwpgS5t=kb!r1keGUvTs4OC*o23iwFsxBE+Ee6?}hd zaA%<50DF&uZyB4VgqF8}lW37b{!3s-*pn9Y!zM`7`d4;^cTIYBOdsPEo#{6=Nk@g4 zcH&frdKAMyH~qWu|Dv1yj7)4uq2>==uox-gYqNVMyc zbb!FwQ!wuWeXT>1x!U4@P)h(yOJ_;X2vs)brawpo&Is)QHF#K??0?h@2E*6VA`#AVAeoJ5TLj#aGR^c>)054S0K8Rj=9Q9=M?vYCz zexW}0(mx#tZFt@*T*Lt4Hb}tXn`fV~Aj*JU^lloGGr+CjwUC7Kw1~8_p*t~nlCMJ& zJSjj5&j?ky=!74Aj-$u=cY)=m0hnr-t6X!MAY>`Ya!mqfOoMX&>EqbSq6C%^F(7N6 z!3oCS8}oB6|7c-qOs~7a9EXa{{Dz%YMoQHHrg_LkLi;2W1Y)_U4z@wVSs4n!Mq*=N z!Y+`Fw?bAj-!$Pk zDs2GM#A95h_NPp0brOrqyO9xa|K;v1|BXEmsk38VzeuOt+W`i*ONUTNn&{$ ziN4l}2gClS>?L>%!lXld)sFy_Bci1SEua@tj2f0B>pRf^KBU)<85$pjNzTI^9ujxR z{D>71g2r%2FblVRL7bV?=5YR;R7rTLdLONhDwnv$Drn;9ZT|`X1h6pL(A5a%pSTC_ z8`zUck8#)05Xk9$cm2zt=7taa$Qs3-D)&z{&AOdxYGsDDzx@RtPKk=Z)qJK8lM5Ro zE;TG*)E>=!gXQ07C&`15Kte@*O@_UfaI9=0seZ#pSilQw|IZ?J5fJLoMJX6{(U56x zfN?Hq4F>dDG@A480O9qsb+}x4-k-od@M9X^=7!wg!|lf(+oRuhZ{jFML(Ti2&tqYP z-8uKDz79LjIA5cn$Bx~1+$#}7_p;{-A$sC#a(oZ@psyQs;JHtj9DKP`5K#eH3IzQ5 z-aRq=YF=nxdS)}nQNrCep;l~ePerbCh;Ov-TVFbo_o4>K0O3b{LqY$8NVm?ENYjia zl3sc9jV$VGSq;Lq(1#;lJy}B)?>1;SVY5{7#>L8PF(KXjM|WBLhLFoB#S+LWAel)H6M$~LW#RqGlwxGHW3M)>3eQ^? zG1%Z5Qa$?z2A;RjZ?zE*JcT~?i0kDSB2$sO2Gyc7>5i;TDtEkF2@mlwY$JgKv}^(f z-YBJwPk+qZF9^st)*!I?OCOfynufIeIRS~sk57|q)uu66vho2PCp5q2gZj{+cS>`} zYRQH*F=mI~8z`O$21e0O~$NG$B?Ua||ML_4o?c|t!ze7}c6@z(S7@SF% zo%>Bdu5sp$Nd5DE=|~&>c4gS<-f`X1%m-A@4Ig6Z`om!=5m`1+>)ngtSd*c88SuQ^ zPO&F?Y`LYILO|n9>n;G54KliZauIANu?5_`qcX?gV6xpW#Ds?lnF{Riv z{gk?!mVb~xiOte0-~@0aEX*W$|2q(2{7)dl%=!a7x*G)-Zk{~^XZxY1*AnpIbtn9( za2s=*-SeEI#aPce{n1FdU7za+5(q@nv0qt#d2C^^bDWPD;r>uhx89ncdtSbKyswqi z+SJ&HiFAmfJBr#Y+zzoDbJtAzh+38gzKWi;o-huNO|mg?BKVi7_LNffzY`S`CHX1 z@R)10-7k@+5>F~uW*3PsEr-(|Rp32Y4>4-Cj47S)6ntZADO24j>BiBwQ!oDNQD5)`a`U%cc8TQLX8O6$S6w*+Spc~$_}!?fqy1BTB7Q(hO5 z@O)VTiSavphENf_-~TpY@aN2OVPK`v&iaZ*{tUkEGC3-B zp3V~ro2)I;XAcDU2cP$lkrGvZCE=~G8ap#0>}%ZBJ{x_yv>mPK#dFW@Y|}k!B8;~9 z_flnfH#{+ulhFj-2Xj8X0nk#v-2`nZ9by=8C1&T=sB$2gWOKej=kkyRl2|jT?#9sm(@d-6m!j>?SkGk{dpv5Vfrr}QrNwdl|f}!IZg(kK8HgGSFutT#jsCV=B|nw zBA3|FbWe9_BM4a͈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�UeSk3R^QOk-8ApL<|9Wxr4f9py)E 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 +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Static Library" 0x0104 + +CFG=libtomcrypt - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "libtomcrypt.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "libtomcrypt.mak" CFG="libtomcrypt - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "libtomcrypt - Win32 Release" (based on "Win32 (x86) Static Library") +!MESSAGE "libtomcrypt - Win32 Debug" (based on "Win32 (x86) Static Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "libtomcrypt" +# PROP Scc_LocalPath "." +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "libtomcrypt - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /I "src\headers" /I "..\libtommath" /D "NDEBUG" /D "LTM_DESC" /D "WIN32" /D "_MBCS" /D "_LIB" /D "LTC_SOURCE" /D "USE_LTM" /YX /FD /c +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"Release\tomcrypt.lib" + +!ELSEIF "$(CFG)" == "libtomcrypt - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c +# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "src\headers" /I "..\libtommath" /D "_DEBUG" /D "LTM_DESC" /D "WIN32" /D "_MBCS" /D "_LIB" /D "LTC_SOURCE" /D "USE_LTM" /YX /FD /GZ /c +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LIB32=link.exe -lib +# ADD BASE LIB32 /nologo +# ADD LIB32 /nologo /out:"Debug\tomcrypt.lib" + +!ENDIF + +# Begin Target + +# Name "libtomcrypt - Win32 Release" +# Name "libtomcrypt - Win32 Debug" +# Begin Group "ciphers" + +# PROP Default_Filter "" +# Begin Group "aes" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\src\ciphers\aes\aes.c + +!IF "$(CFG)" == "libtomcrypt - Win32 Release" + +# PROP Ignore_Default_Tool 1 +# Begin Custom Build +InputPath=.\src\ciphers\aes\aes.c + +BuildCmds= \ + cl /nologo /MLd /W3 /Gm /GX /ZI /Od /I "src\headers" /I "..\libtommath" /D "_DEBUG" /D "LTM_DESC" /D "WIN32" /D "_MBCS" /D "_LIB" /D "LTC_SOURCE" /D "USE_LTM" /Fp"Release/libtomcrypt.pch" /YX /Fo"Release/" /Fd"Release/" /FD /GZ /c $(InputPath) \ + cl /nologo /DENCRYPT_ONLY /MLd /W3 /Gm /GX /ZI /Od /I "src\headers" /I "..\libtommath" /D "_DEBUG" /D "LTM_DESC" /D "WIN32" /D "_MBCS" /D "_LIB" /D "LTC_SOURCE" /D "USE_LTM" /Fp"Release/libtomcrypt.pch" /YX /Fo"Release/aes_enc.obj" /Fd"Release/" /FD /GZ /c $(InputPath) \ + + +"Release/aes.obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) + +"Release/aes_enc.obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) +# End Custom Build + +!ELSEIF "$(CFG)" == "libtomcrypt - Win32 Debug" + +# PROP Ignore_Default_Tool 1 +# Begin Custom Build +InputPath=.\src\ciphers\aes\aes.c + +BuildCmds= \ + cl /nologo /MLd /W3 /Gm /GX /ZI /Od /I "src\headers" /I "..\libtommath" /D "_DEBUG" /D "LTM_DESC" /D "WIN32" /D "_MBCS" /D "_LIB" /D "LTC_SOURCE" /D "USE_LTM" /Fp"Debug/libtomcrypt.pch" /YX /Fo"Debug/" /Fd"Debug/" /FD /GZ /c $(InputPath) \ + cl /nologo /DENCRYPT_ONLY /MLd /W3 /Gm /GX /ZI /Od /I "src\headers" /I "..\libtommath" /D "_DEBUG" /D "LTM_DESC" /D "WIN32" /D "_MBCS" /D "_LIB" /D "LTC_SOURCE" /D "USE_LTM" /Fp"Debug/libtomcrypt.pch" /YX /Fo"Debug/aes_enc.obj" /Fd"Debug/" /FD /GZ /c $(InputPath) \ + + +"Debug/aes.obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) + +"Debug/aes_enc.obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + $(BuildCmds) +# End Custom Build + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\src\ciphers\aes\aes_tab.c +# PROP Exclude_From_Build 1 +# End Source File +# End Group +# Begin Group "safer" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\src\ciphers\safer\safer.c +# End Source File +# Begin Source File + +SOURCE=.\src\ciphers\safer\safer_tab.c +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\src\ciphers\safer\saferp.c +# End Source File +# End Group +# Begin Group "twofish" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\src\ciphers\twofish\twofish.c +# End Source File +# Begin Source File + +SOURCE=.\src\ciphers\twofish\twofish_tab.c +# PROP Exclude_From_Build 1 +# End Source File +# End Group +# Begin Source File + +SOURCE=.\src\ciphers\anubis.c +# End Source File +# Begin Source File + +SOURCE=.\src\ciphers\blowfish.c +# End Source File +# Begin Source File + +SOURCE=.\src\ciphers\cast5.c +# End Source File +# Begin Source File + +SOURCE=.\src\ciphers\des.c +# End Source File +# Begin Source File + +SOURCE=.\src\ciphers\kasumi.c +# End Source File +# Begin Source File + +SOURCE=.\src\ciphers\khazad.c +# End Source File +# Begin Source File + +SOURCE=.\src\ciphers\kseed.c +# End Source File +# Begin Source File + +SOURCE=.\src\ciphers\multi2.c +# End Source File +# Begin Source File + +SOURCE=.\src\ciphers\noekeon.c +# End Source File +# Begin Source File + +SOURCE=.\src\ciphers\rc2.c +# End Source File +# Begin Source File + +SOURCE=.\src\ciphers\rc5.c +# End Source File +# Begin Source File + +SOURCE=.\src\ciphers\rc6.c +# End Source File +# Begin Source File + +SOURCE=.\src\ciphers\skipjack.c +# End Source File +# Begin Source File + +SOURCE=.\src\ciphers\xtea.c +# End Source File +# End Group +# Begin Group "encauth" + +# PROP Default_Filter "" +# Begin Group "ccm" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\src\encauth\ccm\ccm_memory.c +# End Source File +# Begin Source File + +SOURCE=.\src\encauth\ccm\ccm_test.c +# End Source File +# End Group +# Begin Group "eax" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\src\encauth\eax\eax_addheader.c +# End Source File +# Begin Source File + +SOURCE=.\src\encauth\eax\eax_decrypt.c +# End Source File +# Begin Source File + +SOURCE=.\src\encauth\eax\eax_decrypt_verify_memory.c +# End Source File +# Begin Source File + +SOURCE=.\src\encauth\eax\eax_done.c +# End Source File +# Begin Source File + +SOURCE=.\src\encauth\eax\eax_encrypt.c +# End Source File +# Begin Source File + +SOURCE=.\src\encauth\eax\eax_encrypt_authenticate_memory.c +# End Source File +# Begin Source File + +SOURCE=.\src\encauth\eax\eax_init.c +# End Source File +# Begin Source File + +SOURCE=.\src\encauth\eax\eax_test.c +# End Source File +# End Group +# Begin Group "gcm" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\src\encauth\gcm\gcm_add_aad.c +# End Source File +# Begin Source File + +SOURCE=.\src\encauth\gcm\gcm_add_iv.c +# End Source File +# Begin Source File + +SOURCE=.\src\encauth\gcm\gcm_done.c +# End Source File +# Begin Source File + +SOURCE=.\src\encauth\gcm\gcm_gf_mult.c +# End Source File +# Begin Source File + +SOURCE=.\src\encauth\gcm\gcm_init.c +# End Source File +# Begin Source File + +SOURCE=.\src\encauth\gcm\gcm_memory.c +# End Source File +# Begin Source File + +SOURCE=.\src\encauth\gcm\gcm_mult_h.c +# End Source File +# Begin Source File + +SOURCE=.\src\encauth\gcm\gcm_process.c +# End Source File +# Begin Source File + +SOURCE=.\src\encauth\gcm\gcm_reset.c +# End Source File +# Begin Source File + +SOURCE=.\src\encauth\gcm\gcm_test.c +# End Source File +# End Group +# Begin Group "ocb" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\src\encauth\ocb\ocb_decrypt.c +# End Source File +# Begin Source File + +SOURCE=.\src\encauth\ocb\ocb_decrypt_verify_memory.c +# End Source File +# Begin Source File + +SOURCE=.\src\encauth\ocb\ocb_done_decrypt.c +# End Source File +# Begin Source File + +SOURCE=.\src\encauth\ocb\ocb_done_encrypt.c +# End Source File +# Begin Source File + +SOURCE=.\src\encauth\ocb\ocb_encrypt.c +# End Source File +# Begin Source File + +SOURCE=.\src\encauth\ocb\ocb_encrypt_authenticate_memory.c +# End Source File +# Begin Source File + +SOURCE=.\src\encauth\ocb\ocb_init.c +# End Source File +# Begin Source File + +SOURCE=.\src\encauth\ocb\ocb_ntz.c +# End Source File +# Begin Source File + +SOURCE=.\src\encauth\ocb\ocb_shift_xor.c +# End Source File +# Begin Source File + +SOURCE=.\src\encauth\ocb\ocb_test.c +# End Source File +# Begin Source File + +SOURCE=.\src\encauth\ocb\s_ocb_done.c +# End Source File +# End Group +# End Group +# Begin Group "hashes" + +# PROP Default_Filter "" +# Begin Group "helper" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\src\hashes\helper\hash_file.c +# End Source File +# Begin Source File + +SOURCE=.\src\hashes\helper\hash_filehandle.c +# End Source File +# Begin Source File + +SOURCE=.\src\hashes\helper\hash_memory.c +# End Source File +# Begin Source File + +SOURCE=.\src\hashes\helper\hash_memory_multi.c +# End Source File +# End Group +# Begin Group "sha2" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\src\hashes\sha2\sha224.c +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\src\hashes\sha2\sha256.c +# End Source File +# Begin Source File + +SOURCE=.\src\hashes\sha2\sha384.c +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\src\hashes\sha2\sha512.c +# End Source File +# End Group +# Begin Group "whirl" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\src\hashes\whirl\whirl.c +# End Source File +# Begin Source File + +SOURCE=.\src\hashes\whirl\whirltab.c +# PROP Exclude_From_Build 1 +# End Source File +# End Group +# Begin Source File + +SOURCE=.\src\hashes\chc\chc.c +# End Source File +# Begin Source File + +SOURCE=.\src\hashes\md2.c +# End Source File +# Begin Source File + +SOURCE=.\src\hashes\md4.c +# End Source File +# Begin Source File + +SOURCE=.\src\hashes\md5.c +# End Source File +# Begin Source File + +SOURCE=.\src\hashes\rmd128.c +# End Source File +# Begin Source File + +SOURCE=.\src\hashes\rmd160.c +# End Source File +# Begin Source File + +SOURCE=.\src\hashes\rmd256.c +# End Source File +# Begin Source File + +SOURCE=.\src\hashes\rmd320.c +# End Source File +# Begin Source File + +SOURCE=.\src\hashes\sha1.c +# End Source File +# Begin Source File + +SOURCE=.\src\hashes\tiger.c +# End Source File +# End Group +# Begin Group "mac" + +# PROP Default_Filter "" +# Begin Group "f9" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\src\mac\f9\f9_done.c +# End Source File +# Begin Source File + +SOURCE=.\src\mac\f9\f9_file.c +# End Source File +# Begin Source File + +SOURCE=.\src\mac\f9\f9_init.c +# End Source File +# Begin Source File + +SOURCE=.\src\mac\f9\f9_memory.c +# End Source File +# Begin Source File + +SOURCE=.\src\mac\f9\f9_memory_multi.c +# End Source File +# Begin Source File + +SOURCE=.\src\mac\f9\f9_process.c +# End Source File +# Begin Source File + +SOURCE=.\src\mac\f9\f9_test.c +# End Source File +# End Group +# Begin Group "hmac" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\src\mac\hmac\hmac_done.c +# End Source File +# Begin Source File + +SOURCE=.\src\mac\hmac\hmac_file.c +# End Source File +# Begin Source File + +SOURCE=.\src\mac\hmac\hmac_init.c +# End Source File +# Begin Source File + +SOURCE=.\src\mac\hmac\hmac_memory.c +# End Source File +# Begin Source File + +SOURCE=.\src\mac\hmac\hmac_memory_multi.c +# End Source File +# Begin Source File + +SOURCE=.\src\mac\hmac\hmac_process.c +# End Source File +# Begin Source File + +SOURCE=.\src\mac\hmac\hmac_test.c +# End Source File +# End Group +# Begin Group "omac" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\src\mac\omac\omac_done.c +# End Source File +# Begin Source File + +SOURCE=.\src\mac\omac\omac_file.c +# End Source File +# Begin Source File + +SOURCE=.\src\mac\omac\omac_init.c +# End Source File +# Begin Source File + +SOURCE=.\src\mac\omac\omac_memory.c +# End Source File +# Begin Source File + +SOURCE=.\src\mac\omac\omac_memory_multi.c +# End Source File +# Begin Source File + +SOURCE=.\src\mac\omac\omac_process.c +# End Source File +# Begin Source File + +SOURCE=.\src\mac\omac\omac_test.c +# End Source File +# End Group +# Begin Group "pelican" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\src\mac\pelican\pelican.c +# End Source File +# Begin Source File + +SOURCE=.\src\mac\pelican\pelican_memory.c +# End Source File +# Begin Source File + +SOURCE=.\src\mac\pelican\pelican_test.c +# End Source File +# End Group +# Begin Group "pmac" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\src\mac\pmac\pmac_done.c +# End Source File +# Begin Source File + +SOURCE=.\src\mac\pmac\pmac_file.c +# End Source File +# Begin Source File + +SOURCE=.\src\mac\pmac\pmac_init.c +# End Source File +# Begin Source File + +SOURCE=.\src\mac\pmac\pmac_memory.c +# End Source File +# Begin Source File + +SOURCE=.\src\mac\pmac\pmac_memory_multi.c +# End Source File +# Begin Source File + +SOURCE=.\src\mac\pmac\pmac_ntz.c +# End Source File +# Begin Source File + +SOURCE=.\src\mac\pmac\pmac_process.c +# End Source File +# Begin Source File + +SOURCE=.\src\mac\pmac\pmac_shift_xor.c +# End Source File +# Begin Source File + +SOURCE=.\src\mac\pmac\pmac_test.c +# End Source File +# End Group +# Begin Group "xcbc" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\src\mac\xcbc\xcbc_done.c +# End Source File +# Begin Source File + +SOURCE=.\src\mac\xcbc\xcbc_file.c +# End Source File +# Begin Source File + +SOURCE=.\src\mac\xcbc\xcbc_init.c +# End Source File +# Begin Source File + +SOURCE=.\src\mac\xcbc\xcbc_memory.c +# End Source File +# Begin Source File + +SOURCE=.\src\mac\xcbc\xcbc_memory_multi.c +# End Source File +# Begin Source File + +SOURCE=.\src\mac\xcbc\xcbc_process.c +# End Source File +# Begin Source File + +SOURCE=.\src\mac\xcbc\xcbc_test.c +# End Source File +# End Group +# End Group +# Begin Group "math" + +# PROP Default_Filter "" +# Begin Group "fp" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\src\math\fp\ltc_ecc_fp_mulmod.c +# End Source File +# End Group +# Begin Source File + +SOURCE=.\src\math\gmp_desc.c +# End Source File +# Begin Source File + +SOURCE=.\src\math\ltm_desc.c +# End Source File +# Begin Source File + +SOURCE=.\src\math\multi.c +# End Source File +# Begin Source File + +SOURCE=.\src\math\rand_prime.c +# End Source File +# Begin Source File + +SOURCE=.\src\math\tfm_desc.c +# End Source File +# End Group +# Begin Group "misc" + +# PROP Default_Filter "" +# Begin Group "base64" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\src\misc\base64\base64_decode.c +# End Source File +# Begin Source File + +SOURCE=.\src\misc\base64\base64_encode.c +# End Source File +# End Group +# Begin Group "crypt" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\src\misc\crypt\crypt.c +# End Source File +# Begin Source File + +SOURCE=.\src\misc\crypt\crypt_argchk.c +# End Source File +# Begin Source File + +SOURCE=.\src\misc\crypt\crypt_cipher_descriptor.c +# End Source File +# Begin Source File + +SOURCE=.\src\misc\crypt\crypt_cipher_is_valid.c +# End Source File +# Begin Source File + +SOURCE=.\src\misc\crypt\crypt_find_cipher.c +# End Source File +# Begin Source File + +SOURCE=.\src\misc\crypt\crypt_find_cipher_any.c +# End Source File +# Begin Source File + +SOURCE=.\src\misc\crypt\crypt_find_cipher_id.c +# End Source File +# Begin Source File + +SOURCE=.\src\misc\crypt\crypt_find_hash.c +# End Source File +# Begin Source File + +SOURCE=.\src\misc\crypt\crypt_find_hash_any.c +# End Source File +# Begin Source File + +SOURCE=.\src\misc\crypt\crypt_find_hash_id.c +# End Source File +# Begin Source File + +SOURCE=.\src\misc\crypt\crypt_find_hash_oid.c +# End Source File +# Begin Source File + +SOURCE=.\src\misc\crypt\crypt_find_prng.c +# End Source File +# Begin Source File + +SOURCE=.\src\misc\crypt\crypt_fsa.c +# End Source File +# Begin Source File + +SOURCE=.\src\misc\crypt\crypt_hash_descriptor.c +# End Source File +# Begin Source File + +SOURCE=.\src\misc\crypt\crypt_hash_is_valid.c +# End Source File +# Begin Source File + +SOURCE=.\src\misc\crypt\crypt_ltc_mp_descriptor.c +# End Source File +# Begin Source File + +SOURCE=.\src\misc\crypt\crypt_prng_descriptor.c +# End Source File +# Begin Source File + +SOURCE=.\src\misc\crypt\crypt_prng_is_valid.c +# End Source File +# Begin Source File + +SOURCE=.\src\misc\crypt\crypt_register_cipher.c +# End Source File +# Begin Source File + +SOURCE=.\src\misc\crypt\crypt_register_hash.c +# End Source File +# Begin Source File + +SOURCE=.\src\misc\crypt\crypt_register_prng.c +# End Source File +# Begin Source File + +SOURCE=.\src\misc\crypt\crypt_unregister_cipher.c +# End Source File +# Begin Source File + +SOURCE=.\src\misc\crypt\crypt_unregister_hash.c +# End Source File +# Begin Source File + +SOURCE=.\src\misc\crypt\crypt_unregister_prng.c +# End Source File +# End Group +# Begin Group "pkcs" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\src\misc\pkcs5\pkcs_5_1.c +# End Source File +# Begin Source File + +SOURCE=.\src\misc\pkcs5\pkcs_5_2.c +# End Source File +# End Group +# Begin Source File + +SOURCE=.\src\misc\burn_stack.c +# End Source File +# Begin Source File + +SOURCE=.\src\misc\error_to_string.c +# End Source File +# Begin Source File + +SOURCE=.\src\misc\zeromem.c +# End Source File +# End Group +# Begin Group "modes" + +# PROP Default_Filter "" +# Begin Group "cbc" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\src\modes\cbc\cbc_decrypt.c +# End Source File +# Begin Source File + +SOURCE=.\src\modes\cbc\cbc_done.c +# End Source File +# Begin Source File + +SOURCE=.\src\modes\cbc\cbc_encrypt.c +# End Source File +# Begin Source File + +SOURCE=.\src\modes\cbc\cbc_getiv.c +# End Source File +# Begin Source File + +SOURCE=.\src\modes\cbc\cbc_setiv.c +# End Source File +# Begin Source File + +SOURCE=.\src\modes\cbc\cbc_start.c +# End Source File +# End Group +# Begin Group "cfb" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\src\modes\cfb\cfb_decrypt.c +# End Source File +# Begin Source File + +SOURCE=.\src\modes\cfb\cfb_done.c +# End Source File +# Begin Source File + +SOURCE=.\src\modes\cfb\cfb_encrypt.c +# End Source File +# Begin Source File + +SOURCE=.\src\modes\cfb\cfb_getiv.c +# End Source File +# Begin Source File + +SOURCE=.\src\modes\cfb\cfb_setiv.c +# End Source File +# Begin Source File + +SOURCE=.\src\modes\cfb\cfb_start.c +# End Source File +# End Group +# Begin Group "ctr" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\src\modes\ctr\ctr_decrypt.c +# End Source File +# Begin Source File + +SOURCE=.\src\modes\ctr\ctr_done.c +# End Source File +# Begin Source File + +SOURCE=.\src\modes\ctr\ctr_encrypt.c +# End Source File +# Begin Source File + +SOURCE=.\src\modes\ctr\ctr_getiv.c +# End Source File +# Begin Source File + +SOURCE=.\src\modes\ctr\ctr_setiv.c +# End Source File +# Begin Source File + +SOURCE=.\src\modes\ctr\ctr_start.c +# End Source File +# Begin Source File + +SOURCE=.\src\modes\ctr\ctr_test.c +# End Source File +# End Group +# Begin Group "ecb" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\src\modes\ecb\ecb_decrypt.c +# End Source File +# Begin Source File + +SOURCE=.\src\modes\ecb\ecb_done.c +# End Source File +# Begin Source File + +SOURCE=.\src\modes\ecb\ecb_encrypt.c +# End Source File +# Begin Source File + +SOURCE=.\src\modes\ecb\ecb_start.c +# End Source File +# End Group +# Begin Group "f8" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\src\modes\f8\f8_decrypt.c +# End Source File +# Begin Source File + +SOURCE=.\src\modes\f8\f8_done.c +# End Source File +# Begin Source File + +SOURCE=.\src\modes\f8\f8_encrypt.c +# End Source File +# Begin Source File + +SOURCE=.\src\modes\f8\f8_getiv.c +# End Source File +# Begin Source File + +SOURCE=.\src\modes\f8\f8_setiv.c +# End Source File +# Begin Source File + +SOURCE=.\src\modes\f8\f8_start.c +# End Source File +# Begin Source File + +SOURCE=.\src\modes\f8\f8_test_mode.c +# End Source File +# End Group +# Begin Group "lrw" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\src\modes\lrw\lrw_decrypt.c +# End Source File +# Begin Source File + +SOURCE=.\src\modes\lrw\lrw_done.c +# End Source File +# Begin Source File + +SOURCE=.\src\modes\lrw\lrw_encrypt.c +# End Source File +# Begin Source File + +SOURCE=.\src\modes\lrw\lrw_getiv.c +# End Source File +# Begin Source File + +SOURCE=.\src\modes\lrw\lrw_process.c +# End Source File +# Begin Source File + +SOURCE=.\src\modes\lrw\lrw_setiv.c +# End Source File +# Begin Source File + +SOURCE=.\src\modes\lrw\lrw_start.c +# End Source File +# Begin Source File + +SOURCE=.\src\modes\lrw\lrw_test.c +# End Source File +# End Group +# Begin Group "ofb" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\src\modes\ofb\ofb_decrypt.c +# End Source File +# Begin Source File + +SOURCE=.\src\modes\ofb\ofb_done.c +# End Source File +# Begin Source File + +SOURCE=.\src\modes\ofb\ofb_encrypt.c +# End Source File +# Begin Source File + +SOURCE=.\src\modes\ofb\ofb_getiv.c +# End Source File +# Begin Source File + +SOURCE=.\src\modes\ofb\ofb_setiv.c +# End Source File +# Begin Source File + +SOURCE=.\src\modes\ofb\ofb_start.c +# End Source File +# End Group +# Begin Group "xts" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\src\modes\xts\xts_decrypt.c +# End Source File +# Begin Source File + +SOURCE=.\src\modes\xts\xts_done.c +# End Source File +# Begin Source File + +SOURCE=.\src\modes\xts\xts_encrypt.c +# End Source File +# Begin Source File + +SOURCE=.\src\modes\xts\xts_init.c +# End Source File +# Begin Source File + +SOURCE=.\src\modes\xts\xts_mult_x.c +# End Source File +# Begin Source File + +SOURCE=.\src\modes\xts\xts_test.c +# End Source File +# End Group +# End Group +# Begin Group "pk" + +# PROP Default_Filter "" +# Begin Group "asn1" + +# PROP Default_Filter "" +# Begin Group "der" + +# PROP Default_Filter "" +# Begin Group "bit" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\src\pk\asn1\der\bit\der_decode_bit_string.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\asn1\der\bit\der_encode_bit_string.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\asn1\der\bit\der_length_bit_string.c +# End Source File +# End Group +# Begin Group "boolean" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\src\pk\asn1\der\boolean\der_decode_boolean.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\asn1\der\boolean\der_encode_boolean.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\asn1\der\boolean\der_length_boolean.c +# End Source File +# End Group +# Begin Group "choice" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\src\pk\asn1\der\choice\der_decode_choice.c +# End Source File +# End Group +# Begin Group "ia5" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\src\pk\asn1\der\ia5\der_decode_ia5_string.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\asn1\der\ia5\der_encode_ia5_string.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\asn1\der\ia5\der_length_ia5_string.c +# End Source File +# End Group +# Begin Group "integer" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\src\pk\asn1\der\integer\der_decode_integer.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\asn1\der\integer\der_encode_integer.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\asn1\der\integer\der_length_integer.c +# End Source File +# End Group +# Begin Group "object_identifier" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\src\pk\asn1\der\object_identifier\der_decode_object_identifier.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\asn1\der\object_identifier\der_encode_object_identifier.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\asn1\der\object_identifier\der_length_object_identifier.c +# End Source File +# End Group +# Begin Group "octet" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\src\pk\asn1\der\octet\der_decode_octet_string.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\asn1\der\octet\der_encode_octet_string.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\asn1\der\octet\der_length_octet_string.c +# End Source File +# End Group +# Begin Group "printable_string" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\src\pk\asn1\der\printable_string\der_decode_printable_string.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\asn1\der\printable_string\der_encode_printable_string.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\asn1\der\printable_string\der_length_printable_string.c +# End Source File +# End Group +# Begin Group "sequence" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\src\pk\asn1\der\sequence\der_decode_sequence_ex.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\asn1\der\sequence\der_decode_sequence_flexi.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\asn1\der\sequence\der_decode_sequence_multi.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\asn1\der\sequence\der_encode_sequence_ex.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\asn1\der\sequence\der_encode_sequence_multi.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\asn1\der\sequence\der_length_sequence.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\asn1\der\sequence\der_sequence_free.c +# End Source File +# End Group +# Begin Group "set" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\src\pk\asn1\der\set\der_encode_set.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\asn1\der\set\der_encode_setof.c +# End Source File +# End Group +# Begin Group "short_integer" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\src\pk\asn1\der\short_integer\der_decode_short_integer.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\asn1\der\short_integer\der_encode_short_integer.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\asn1\der\short_integer\der_length_short_integer.c +# End Source File +# End Group +# Begin Group "utctime" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\src\pk\asn1\der\utctime\der_decode_utctime.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\asn1\der\utctime\der_encode_utctime.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\asn1\der\utctime\der_length_utctime.c +# End Source File +# End Group +# Begin Group "utf8" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\src\pk\asn1\der\utf8\der_decode_utf8_string.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\asn1\der\utf8\der_encode_utf8_string.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\asn1\der\utf8\der_length_utf8_string.c +# End Source File +# End Group +# End Group +# End Group +# Begin Group "dsa" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\src\pk\dsa\dsa_decrypt_key.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\dsa\dsa_encrypt_key.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\dsa\dsa_export.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\dsa\dsa_free.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\dsa\dsa_import.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\dsa\dsa_make_key.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\dsa\dsa_shared_secret.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\dsa\dsa_sign_hash.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\dsa\dsa_verify_hash.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\dsa\dsa_verify_key.c +# End Source File +# End Group +# Begin Group "ecc" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\src\pk\ecc\ecc.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\ecc\ecc_ansi_x963_export.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\ecc\ecc_ansi_x963_import.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\ecc\ecc_decrypt_key.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\ecc\ecc_encrypt_key.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\ecc\ecc_export.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\ecc\ecc_free.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\ecc\ecc_get_size.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\ecc\ecc_import.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\ecc\ecc_make_key.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\ecc\ecc_shared_secret.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\ecc\ecc_sign_hash.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\ecc\ecc_sizes.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\ecc\ecc_test.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\ecc\ecc_verify_hash.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\ecc\ltc_ecc_is_valid_idx.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\ecc\ltc_ecc_map.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\ecc\ltc_ecc_mul2add.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\ecc\ltc_ecc_mulmod.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\ecc\ltc_ecc_mulmod_timing.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\ecc\ltc_ecc_points.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\ecc\ltc_ecc_projective_add_point.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\ecc\ltc_ecc_projective_dbl_point.c +# End Source File +# End Group +# Begin Group "katja" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\src\pk\katja\katja_decrypt_key.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\katja\katja_encrypt_key.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\katja\katja_export.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\katja\katja_exptmod.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\katja\katja_free.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\katja\katja_import.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\katja\katja_make_key.c +# End Source File +# End Group +# Begin Group "pkcs1" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\src\pk\pkcs1\pkcs_1_i2osp.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\pkcs1\pkcs_1_mgf1.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\pkcs1\pkcs_1_oaep_decode.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\pkcs1\pkcs_1_oaep_encode.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\pkcs1\pkcs_1_os2ip.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\pkcs1\pkcs_1_pss_decode.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\pkcs1\pkcs_1_pss_encode.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\pkcs1\pkcs_1_v1_5_decode.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\pkcs1\pkcs_1_v1_5_encode.c +# End Source File +# End Group +# Begin Group "rsa" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\src\pk\rsa\rsa_decrypt_key.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\rsa\rsa_encrypt_key.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\rsa\rsa_export.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\rsa\rsa_exptmod.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\rsa\rsa_free.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\rsa\rsa_import.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\rsa\rsa_make_key.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\rsa\rsa_sign_hash.c +# End Source File +# Begin Source File + +SOURCE=.\src\pk\rsa\rsa_verify_hash.c +# End Source File +# End Group +# End Group +# Begin Group "prngs" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\src\prngs\fortuna.c +# End Source File +# Begin Source File + +SOURCE=.\src\prngs\rc4.c +# End Source File +# Begin Source File + +SOURCE=.\src\prngs\rng_get_bytes.c +# End Source File +# Begin Source File + +SOURCE=.\src\prngs\rng_make_prng.c +# End Source File +# Begin Source File + +SOURCE=.\src\prngs\sober128.c +# End Source File +# Begin Source File + +SOURCE=.\src\prngs\sober128tab.c +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\src\prngs\sprng.c +# End Source File +# Begin Source File + +SOURCE=.\src\prngs\yarrow.c +# End Source File +# End Group +# Begin Group "headers" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\src\headers\tomcrypt.h +# End Source File +# Begin Source File + +SOURCE=.\src\headers\tomcrypt_argchk.h +# End Source File +# Begin Source File + +SOURCE=.\src\headers\tomcrypt_cfg.h +# End Source File +# Begin Source File + +SOURCE=.\src\headers\tomcrypt_cipher.h +# End Source File +# Begin Source File + +SOURCE=.\src\headers\tomcrypt_custom.h +# End Source File +# Begin Source File + +SOURCE=.\src\headers\tomcrypt_hash.h +# End Source File +# Begin Source File + +SOURCE=.\src\headers\tomcrypt_mac.h +# End Source File +# Begin Source File + +SOURCE=.\src\headers\tomcrypt_macros.h +# End Source File +# Begin Source File + +SOURCE=.\src\headers\tomcrypt_math.h +# End Source File +# Begin Source File + +SOURCE=.\src\headers\tomcrypt_misc.h +# End Source File +# Begin Source File + +SOURCE=.\src\headers\tomcrypt_pk.h +# End Source File +# Begin Source File + +SOURCE=.\src\headers\tomcrypt_pkcs.h +# End Source File +# Begin Source File + +SOURCE=.\src\headers\tomcrypt_prng.h +# End Source File +# End Group +# End Target +# End Project diff --git a/makefile b/makefile index 554f072b7..f650ea159 100644 --- a/makefile +++ b/makefile @@ -4,7 +4,9 @@ # Modified by Clay Culver # The version -VERSION=1.16 +VERSION=1.17 + +PLATFORM := $(shell uname | sed -e 's/_.*//') # Compiler and Linker Names #CC=gcc @@ -20,7 +22,11 @@ endif # ranlib tools ifndef RANLIB - RANLIB=ranlib +ifeq ($(PLATFORM), Darwin) +RANLIB=ranlib -c +else +RANLIB=ranlib +endif endif # Compilation flags. Note the += does not write over the user's CFLAGS! @@ -104,27 +110,28 @@ endif #START_INS OBJECTS=src/ciphers/aes/aes_enc.o src/ciphers/aes/aes.o src/ciphers/anubis.o src/ciphers/blowfish.o \ src/ciphers/cast5.o src/ciphers/des.o src/ciphers/kasumi.o src/ciphers/khazad.o src/ciphers/kseed.o \ -src/ciphers/noekeon.o src/ciphers/rc2.o src/ciphers/rc5.o src/ciphers/rc6.o src/ciphers/safer/safer.o \ -src/ciphers/safer/safer_tab.o src/ciphers/safer/saferp.o src/ciphers/skipjack.o \ -src/ciphers/twofish/twofish.o src/ciphers/xtea.o src/encauth/ccm/ccm_memory.o \ +src/ciphers/multi2.o src/ciphers/noekeon.o src/ciphers/rc2.o src/ciphers/rc5.o src/ciphers/rc6.o \ +src/ciphers/safer/safer.o src/ciphers/safer/saferp.o src/ciphers/safer/safer_tab.o \ +src/ciphers/skipjack.o src/ciphers/twofish/twofish.o src/ciphers/xtea.o src/encauth/ccm/ccm_memory.o \ src/encauth/ccm/ccm_test.o src/encauth/eax/eax_addheader.o src/encauth/eax/eax_decrypt.o \ -src/encauth/eax/eax_decrypt_verify_memory.o src/encauth/eax/eax_done.o src/encauth/eax/eax_encrypt.o \ -src/encauth/eax/eax_encrypt_authenticate_memory.o src/encauth/eax/eax_init.o \ -src/encauth/eax/eax_test.o src/encauth/gcm/gcm_add_aad.o src/encauth/gcm/gcm_add_iv.o \ -src/encauth/gcm/gcm_done.o src/encauth/gcm/gcm_gf_mult.o src/encauth/gcm/gcm_init.o \ -src/encauth/gcm/gcm_memory.o src/encauth/gcm/gcm_mult_h.o src/encauth/gcm/gcm_process.o \ -src/encauth/gcm/gcm_reset.o src/encauth/gcm/gcm_test.o src/encauth/ocb/ocb_decrypt.o \ -src/encauth/ocb/ocb_decrypt_verify_memory.o src/encauth/ocb/ocb_done_decrypt.o \ -src/encauth/ocb/ocb_done_encrypt.o src/encauth/ocb/ocb_encrypt.o \ -src/encauth/ocb/ocb_encrypt_authenticate_memory.o src/encauth/ocb/ocb_init.o src/encauth/ocb/ocb_ntz.o \ -src/encauth/ocb/ocb_shift_xor.o src/encauth/ocb/ocb_test.o src/encauth/ocb/s_ocb_done.o \ -src/hashes/chc/chc.o src/hashes/helper/hash_file.o src/hashes/helper/hash_filehandle.o \ -src/hashes/helper/hash_memory.o src/hashes/helper/hash_memory_multi.o src/hashes/md2.o src/hashes/md4.o \ -src/hashes/md5.o src/hashes/rmd128.o src/hashes/rmd160.o src/hashes/rmd256.o src/hashes/rmd320.o \ -src/hashes/sha1.o src/hashes/sha2/sha256.o src/hashes/sha2/sha512.o src/hashes/tiger.o \ -src/hashes/whirl/whirl.o src/mac/f9/f9_done.o src/mac/f9/f9_file.o src/mac/f9/f9_init.o \ -src/mac/f9/f9_memory.o src/mac/f9/f9_memory_multi.o src/mac/f9/f9_process.o src/mac/f9/f9_test.o \ -src/mac/hmac/hmac_done.o src/mac/hmac/hmac_file.o src/mac/hmac/hmac_init.o src/mac/hmac/hmac_memory.o \ +src/encauth/eax/eax_decrypt_verify_memory.o src/encauth/eax/eax_done.o \ +src/encauth/eax/eax_encrypt_authenticate_memory.o src/encauth/eax/eax_encrypt.o \ +src/encauth/eax/eax_init.o src/encauth/eax/eax_test.o src/encauth/gcm/gcm_add_aad.o \ +src/encauth/gcm/gcm_add_iv.o src/encauth/gcm/gcm_done.o src/encauth/gcm/gcm_gf_mult.o \ +src/encauth/gcm/gcm_init.o src/encauth/gcm/gcm_memory.o src/encauth/gcm/gcm_mult_h.o \ +src/encauth/gcm/gcm_process.o src/encauth/gcm/gcm_reset.o src/encauth/gcm/gcm_test.o \ +src/encauth/ocb/ocb_decrypt.o src/encauth/ocb/ocb_decrypt_verify_memory.o \ +src/encauth/ocb/ocb_done_decrypt.o src/encauth/ocb/ocb_done_encrypt.o \ +src/encauth/ocb/ocb_encrypt_authenticate_memory.o src/encauth/ocb/ocb_encrypt.o \ +src/encauth/ocb/ocb_init.o src/encauth/ocb/ocb_ntz.o src/encauth/ocb/ocb_shift_xor.o \ +src/encauth/ocb/ocb_test.o src/encauth/ocb/s_ocb_done.o src/hashes/chc/chc.o \ +src/hashes/helper/hash_file.o src/hashes/helper/hash_filehandle.o src/hashes/helper/hash_memory.o \ +src/hashes/helper/hash_memory_multi.o src/hashes/md2.o src/hashes/md4.o src/hashes/md5.o \ +src/hashes/rmd128.o src/hashes/rmd160.o src/hashes/rmd256.o src/hashes/rmd320.o src/hashes/sha1.o \ +src/hashes/sha2/sha256.o src/hashes/sha2/sha512.o src/hashes/tiger.o src/hashes/whirl/whirl.o \ +src/mac/f9/f9_done.o src/mac/f9/f9_file.o src/mac/f9/f9_init.o src/mac/f9/f9_memory.o \ +src/mac/f9/f9_memory_multi.o src/mac/f9/f9_process.o src/mac/f9/f9_test.o src/mac/hmac/hmac_done.o \ +src/mac/hmac/hmac_file.o src/mac/hmac/hmac_init.o src/mac/hmac/hmac_memory.o \ src/mac/hmac/hmac_memory_multi.o src/mac/hmac/hmac_process.o src/mac/hmac/hmac_test.o \ src/mac/omac/omac_done.o src/mac/omac/omac_file.o src/mac/omac/omac_init.o src/mac/omac/omac_memory.o \ src/mac/omac/omac_memory_multi.o src/mac/omac/omac_process.o src/mac/omac/omac_test.o \ @@ -136,39 +143,41 @@ src/mac/xcbc/xcbc_file.o src/mac/xcbc/xcbc_init.o src/mac/xcbc/xcbc_memory.o \ src/mac/xcbc/xcbc_memory_multi.o src/mac/xcbc/xcbc_process.o src/mac/xcbc/xcbc_test.o \ src/math/fp/ltc_ecc_fp_mulmod.o src/math/gmp_desc.o src/math/ltm_desc.o src/math/multi.o \ src/math/rand_prime.o src/math/tfm_desc.o src/misc/base64/base64_decode.o \ -src/misc/base64/base64_encode.o src/misc/burn_stack.o src/misc/crypt/crypt.o \ -src/misc/crypt/crypt_argchk.o src/misc/crypt/crypt_cipher_descriptor.o \ -src/misc/crypt/crypt_cipher_is_valid.o src/misc/crypt/crypt_find_cipher.o \ -src/misc/crypt/crypt_find_cipher_any.o src/misc/crypt/crypt_find_cipher_id.o \ -src/misc/crypt/crypt_find_hash.o src/misc/crypt/crypt_find_hash_any.o \ -src/misc/crypt/crypt_find_hash_id.o src/misc/crypt/crypt_find_hash_oid.o \ -src/misc/crypt/crypt_find_prng.o src/misc/crypt/crypt_fsa.o src/misc/crypt/crypt_hash_descriptor.o \ -src/misc/crypt/crypt_hash_is_valid.o src/misc/crypt/crypt_ltc_mp_descriptor.o \ -src/misc/crypt/crypt_prng_descriptor.o src/misc/crypt/crypt_prng_is_valid.o \ -src/misc/crypt/crypt_register_cipher.o src/misc/crypt/crypt_register_hash.o \ -src/misc/crypt/crypt_register_prng.o src/misc/crypt/crypt_unregister_cipher.o \ -src/misc/crypt/crypt_unregister_hash.o src/misc/crypt/crypt_unregister_prng.o \ -src/misc/error_to_string.o src/misc/pkcs5/pkcs_5_1.o src/misc/pkcs5/pkcs_5_2.o src/misc/zeromem.o \ -src/modes/cbc/cbc_decrypt.o src/modes/cbc/cbc_done.o src/modes/cbc/cbc_encrypt.o \ -src/modes/cbc/cbc_getiv.o src/modes/cbc/cbc_setiv.o src/modes/cbc/cbc_start.o \ -src/modes/cfb/cfb_decrypt.o src/modes/cfb/cfb_done.o src/modes/cfb/cfb_encrypt.o \ -src/modes/cfb/cfb_getiv.o src/modes/cfb/cfb_setiv.o src/modes/cfb/cfb_start.o \ -src/modes/ctr/ctr_decrypt.o src/modes/ctr/ctr_done.o src/modes/ctr/ctr_encrypt.o \ -src/modes/ctr/ctr_getiv.o src/modes/ctr/ctr_setiv.o src/modes/ctr/ctr_start.o src/modes/ctr/ctr_test.o \ -src/modes/ecb/ecb_decrypt.o src/modes/ecb/ecb_done.o src/modes/ecb/ecb_encrypt.o \ -src/modes/ecb/ecb_start.o src/modes/f8/f8_decrypt.o src/modes/f8/f8_done.o src/modes/f8/f8_encrypt.o \ -src/modes/f8/f8_getiv.o src/modes/f8/f8_setiv.o src/modes/f8/f8_start.o src/modes/f8/f8_test_mode.o \ -src/modes/lrw/lrw_decrypt.o src/modes/lrw/lrw_done.o src/modes/lrw/lrw_encrypt.o \ -src/modes/lrw/lrw_getiv.o src/modes/lrw/lrw_process.o src/modes/lrw/lrw_setiv.o \ -src/modes/lrw/lrw_start.o src/modes/lrw/lrw_test.o src/modes/ofb/ofb_decrypt.o src/modes/ofb/ofb_done.o \ -src/modes/ofb/ofb_encrypt.o src/modes/ofb/ofb_getiv.o src/modes/ofb/ofb_setiv.o \ -src/modes/ofb/ofb_start.o src/pk/asn1/der/bit/der_decode_bit_string.o \ -src/pk/asn1/der/bit/der_encode_bit_string.o src/pk/asn1/der/bit/der_length_bit_string.o \ -src/pk/asn1/der/boolean/der_decode_boolean.o src/pk/asn1/der/boolean/der_encode_boolean.o \ -src/pk/asn1/der/boolean/der_length_boolean.o src/pk/asn1/der/choice/der_decode_choice.o \ -src/pk/asn1/der/ia5/der_decode_ia5_string.o src/pk/asn1/der/ia5/der_encode_ia5_string.o \ -src/pk/asn1/der/ia5/der_length_ia5_string.o src/pk/asn1/der/integer/der_decode_integer.o \ -src/pk/asn1/der/integer/der_encode_integer.o src/pk/asn1/der/integer/der_length_integer.o \ +src/misc/base64/base64_encode.o src/misc/burn_stack.o src/misc/crypt/crypt_argchk.o \ +src/misc/crypt/crypt.o src/misc/crypt/crypt_cipher_descriptor.o src/misc/crypt/crypt_cipher_is_valid.o \ +src/misc/crypt/crypt_find_cipher_any.o src/misc/crypt/crypt_find_cipher.o \ +src/misc/crypt/crypt_find_cipher_id.o src/misc/crypt/crypt_find_hash_any.o \ +src/misc/crypt/crypt_find_hash.o src/misc/crypt/crypt_find_hash_id.o \ +src/misc/crypt/crypt_find_hash_oid.o src/misc/crypt/crypt_find_prng.o src/misc/crypt/crypt_fsa.o \ +src/misc/crypt/crypt_hash_descriptor.o src/misc/crypt/crypt_hash_is_valid.o \ +src/misc/crypt/crypt_ltc_mp_descriptor.o src/misc/crypt/crypt_prng_descriptor.o \ +src/misc/crypt/crypt_prng_is_valid.o src/misc/crypt/crypt_register_cipher.o \ +src/misc/crypt/crypt_register_hash.o src/misc/crypt/crypt_register_prng.o \ +src/misc/crypt/crypt_unregister_cipher.o src/misc/crypt/crypt_unregister_hash.o \ +src/misc/crypt/crypt_unregister_prng.o src/misc/error_to_string.o src/misc/pkcs5/pkcs_5_1.o \ +src/misc/pkcs5/pkcs_5_2.o src/misc/zeromem.o src/modes/cbc/cbc_decrypt.o src/modes/cbc/cbc_done.o \ +src/modes/cbc/cbc_encrypt.o src/modes/cbc/cbc_getiv.o src/modes/cbc/cbc_setiv.o \ +src/modes/cbc/cbc_start.o src/modes/cfb/cfb_decrypt.o src/modes/cfb/cfb_done.o \ +src/modes/cfb/cfb_encrypt.o src/modes/cfb/cfb_getiv.o src/modes/cfb/cfb_setiv.o \ +src/modes/cfb/cfb_start.o src/modes/ctr/ctr_decrypt.o src/modes/ctr/ctr_done.o \ +src/modes/ctr/ctr_encrypt.o src/modes/ctr/ctr_getiv.o src/modes/ctr/ctr_setiv.o \ +src/modes/ctr/ctr_start.o src/modes/ctr/ctr_test.o src/modes/ecb/ecb_decrypt.o src/modes/ecb/ecb_done.o \ +src/modes/ecb/ecb_encrypt.o src/modes/ecb/ecb_start.o src/modes/f8/f8_decrypt.o src/modes/f8/f8_done.o \ +src/modes/f8/f8_encrypt.o src/modes/f8/f8_getiv.o src/modes/f8/f8_setiv.o src/modes/f8/f8_start.o \ +src/modes/f8/f8_test_mode.o src/modes/lrw/lrw_decrypt.o src/modes/lrw/lrw_done.o \ +src/modes/lrw/lrw_encrypt.o src/modes/lrw/lrw_getiv.o src/modes/lrw/lrw_process.o \ +src/modes/lrw/lrw_setiv.o src/modes/lrw/lrw_start.o src/modes/lrw/lrw_test.o \ +src/modes/ofb/ofb_decrypt.o src/modes/ofb/ofb_done.o src/modes/ofb/ofb_encrypt.o \ +src/modes/ofb/ofb_getiv.o src/modes/ofb/ofb_setiv.o src/modes/ofb/ofb_start.o \ +src/modes/xts/xts_decrypt.o src/modes/xts/xts_done.o src/modes/xts/xts_encrypt.o \ +src/modes/xts/xts_init.o src/modes/xts/xts_mult_x.o src/modes/xts/xts_test.o \ +src/pk/asn1/der/bit/der_decode_bit_string.o src/pk/asn1/der/bit/der_encode_bit_string.o \ +src/pk/asn1/der/bit/der_length_bit_string.o src/pk/asn1/der/boolean/der_decode_boolean.o \ +src/pk/asn1/der/boolean/der_encode_boolean.o src/pk/asn1/der/boolean/der_length_boolean.o \ +src/pk/asn1/der/choice/der_decode_choice.o src/pk/asn1/der/ia5/der_decode_ia5_string.o \ +src/pk/asn1/der/ia5/der_encode_ia5_string.o src/pk/asn1/der/ia5/der_length_ia5_string.o \ +src/pk/asn1/der/integer/der_decode_integer.o src/pk/asn1/der/integer/der_encode_integer.o \ +src/pk/asn1/der/integer/der_length_integer.o \ src/pk/asn1/der/object_identifier/der_decode_object_identifier.o \ src/pk/asn1/der/object_identifier/der_encode_object_identifier.o \ src/pk/asn1/der/object_identifier/der_length_object_identifier.o \ @@ -191,8 +200,8 @@ src/pk/asn1/der/utf8/der_decode_utf8_string.o src/pk/asn1/der/utf8/der_encode_ut src/pk/asn1/der/utf8/der_length_utf8_string.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/ecc/ecc_ansi_x963_export.o src/pk/ecc/ecc_ansi_x963_import.o src/pk/ecc/ecc_decrypt_key.o \ +src/pk/dsa/dsa_verify_hash.o src/pk/dsa/dsa_verify_key.o src/pk/ecc/ecc_ansi_x963_export.o \ +src/pk/ecc/ecc_ansi_x963_import.o src/pk/ecc/ecc.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 \ @@ -250,6 +259,8 @@ src/hashes/sha2/sha256.o: src/hashes/sha2/sha256.c src/hashes/sha2/sha224.c #This rule makes the libtomcrypt library. library: $(LIBNAME) +$(OBJECTS): $(HEADERS) + testprof/$(LIBTEST): cd testprof ; CFLAGS="$(CFLAGS)" LIBTEST_S=$(LIBTEST_S) $(MAKE) @@ -268,7 +279,7 @@ crypt: library $(CRYPTOBJECTS) #makes the small program small: library $(SMALLOBJECTS) $(CC) $(SMALLOBJECTS) $(LIBNAME) $(EXTRALIBS) -o $(SMALL) $(WARN) - + tv_gen: library $(TVS) $(CC) $(LDFLAGS) $(TVS) $(LIBNAME) $(EXTRALIBS) -o $(TV) @@ -337,7 +348,7 @@ doxy: doxygen 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 #from the clean command! This is because most people would like to keep the #nice pre-compiled crypt.pdf that comes with libtomcrypt! We only need to @@ -380,5 +391,5 @@ zipup: no_oops docs # $Source: /cvs/libtom/libtomcrypt/makefile,v $ -# $Revision: 1.145 $ -# $Date: 2006/12/02 19:23:21 $ +# $Revision: 1.150 $ +# $Date: 2007/02/16 16:36:25 $ diff --git a/makefile.icc b/makefile.icc index 3fafcf1c9..c1ff1630a 100644 --- a/makefile.icc +++ b/makefile.icc @@ -96,27 +96,28 @@ endif #START_INS OBJECTS=src/ciphers/aes/aes_enc.o src/ciphers/aes/aes.o src/ciphers/anubis.o src/ciphers/blowfish.o \ src/ciphers/cast5.o src/ciphers/des.o src/ciphers/kasumi.o src/ciphers/khazad.o src/ciphers/kseed.o \ -src/ciphers/noekeon.o src/ciphers/rc2.o src/ciphers/rc5.o src/ciphers/rc6.o src/ciphers/safer/safer.o \ -src/ciphers/safer/safer_tab.o src/ciphers/safer/saferp.o src/ciphers/skipjack.o \ -src/ciphers/twofish/twofish.o src/ciphers/xtea.o src/encauth/ccm/ccm_memory.o \ +src/ciphers/multi2.o src/ciphers/noekeon.o src/ciphers/rc2.o src/ciphers/rc5.o src/ciphers/rc6.o \ +src/ciphers/safer/safer.o src/ciphers/safer/saferp.o src/ciphers/safer/safer_tab.o \ +src/ciphers/skipjack.o src/ciphers/twofish/twofish.o src/ciphers/xtea.o src/encauth/ccm/ccm_memory.o \ src/encauth/ccm/ccm_test.o src/encauth/eax/eax_addheader.o src/encauth/eax/eax_decrypt.o \ -src/encauth/eax/eax_decrypt_verify_memory.o src/encauth/eax/eax_done.o src/encauth/eax/eax_encrypt.o \ -src/encauth/eax/eax_encrypt_authenticate_memory.o src/encauth/eax/eax_init.o \ -src/encauth/eax/eax_test.o src/encauth/gcm/gcm_add_aad.o src/encauth/gcm/gcm_add_iv.o \ -src/encauth/gcm/gcm_done.o src/encauth/gcm/gcm_gf_mult.o src/encauth/gcm/gcm_init.o \ -src/encauth/gcm/gcm_memory.o src/encauth/gcm/gcm_mult_h.o src/encauth/gcm/gcm_process.o \ -src/encauth/gcm/gcm_reset.o src/encauth/gcm/gcm_test.o src/encauth/ocb/ocb_decrypt.o \ -src/encauth/ocb/ocb_decrypt_verify_memory.o src/encauth/ocb/ocb_done_decrypt.o \ -src/encauth/ocb/ocb_done_encrypt.o src/encauth/ocb/ocb_encrypt.o \ -src/encauth/ocb/ocb_encrypt_authenticate_memory.o src/encauth/ocb/ocb_init.o src/encauth/ocb/ocb_ntz.o \ -src/encauth/ocb/ocb_shift_xor.o src/encauth/ocb/ocb_test.o src/encauth/ocb/s_ocb_done.o \ -src/hashes/chc/chc.o src/hashes/helper/hash_file.o src/hashes/helper/hash_filehandle.o \ -src/hashes/helper/hash_memory.o src/hashes/helper/hash_memory_multi.o src/hashes/md2.o src/hashes/md4.o \ -src/hashes/md5.o src/hashes/rmd128.o src/hashes/rmd160.o src/hashes/rmd256.o src/hashes/rmd320.o \ -src/hashes/sha1.o src/hashes/sha2/sha256.o src/hashes/sha2/sha512.o src/hashes/tiger.o \ -src/hashes/whirl/whirl.o src/mac/f9/f9_done.o src/mac/f9/f9_file.o src/mac/f9/f9_init.o \ -src/mac/f9/f9_memory.o src/mac/f9/f9_memory_multi.o src/mac/f9/f9_process.o src/mac/f9/f9_test.o \ -src/mac/hmac/hmac_done.o src/mac/hmac/hmac_file.o src/mac/hmac/hmac_init.o src/mac/hmac/hmac_memory.o \ +src/encauth/eax/eax_decrypt_verify_memory.o src/encauth/eax/eax_done.o \ +src/encauth/eax/eax_encrypt_authenticate_memory.o src/encauth/eax/eax_encrypt.o \ +src/encauth/eax/eax_init.o src/encauth/eax/eax_test.o src/encauth/gcm/gcm_add_aad.o \ +src/encauth/gcm/gcm_add_iv.o src/encauth/gcm/gcm_done.o src/encauth/gcm/gcm_gf_mult.o \ +src/encauth/gcm/gcm_init.o src/encauth/gcm/gcm_memory.o src/encauth/gcm/gcm_mult_h.o \ +src/encauth/gcm/gcm_process.o src/encauth/gcm/gcm_reset.o src/encauth/gcm/gcm_test.o \ +src/encauth/ocb/ocb_decrypt.o src/encauth/ocb/ocb_decrypt_verify_memory.o \ +src/encauth/ocb/ocb_done_decrypt.o src/encauth/ocb/ocb_done_encrypt.o \ +src/encauth/ocb/ocb_encrypt_authenticate_memory.o src/encauth/ocb/ocb_encrypt.o \ +src/encauth/ocb/ocb_init.o src/encauth/ocb/ocb_ntz.o src/encauth/ocb/ocb_shift_xor.o \ +src/encauth/ocb/ocb_test.o src/encauth/ocb/s_ocb_done.o src/hashes/chc/chc.o \ +src/hashes/helper/hash_file.o src/hashes/helper/hash_filehandle.o src/hashes/helper/hash_memory.o \ +src/hashes/helper/hash_memory_multi.o src/hashes/md2.o src/hashes/md4.o src/hashes/md5.o \ +src/hashes/rmd128.o src/hashes/rmd160.o src/hashes/rmd256.o src/hashes/rmd320.o src/hashes/sha1.o \ +src/hashes/sha2/sha256.o src/hashes/sha2/sha512.o src/hashes/tiger.o src/hashes/whirl/whirl.o \ +src/mac/f9/f9_done.o src/mac/f9/f9_file.o src/mac/f9/f9_init.o src/mac/f9/f9_memory.o \ +src/mac/f9/f9_memory_multi.o src/mac/f9/f9_process.o src/mac/f9/f9_test.o src/mac/hmac/hmac_done.o \ +src/mac/hmac/hmac_file.o src/mac/hmac/hmac_init.o src/mac/hmac/hmac_memory.o \ src/mac/hmac/hmac_memory_multi.o src/mac/hmac/hmac_process.o src/mac/hmac/hmac_test.o \ src/mac/omac/omac_done.o src/mac/omac/omac_file.o src/mac/omac/omac_init.o src/mac/omac/omac_memory.o \ src/mac/omac/omac_memory_multi.o src/mac/omac/omac_process.o src/mac/omac/omac_test.o \ @@ -128,39 +129,41 @@ src/mac/xcbc/xcbc_file.o src/mac/xcbc/xcbc_init.o src/mac/xcbc/xcbc_memory.o \ src/mac/xcbc/xcbc_memory_multi.o src/mac/xcbc/xcbc_process.o src/mac/xcbc/xcbc_test.o \ src/math/fp/ltc_ecc_fp_mulmod.o src/math/gmp_desc.o src/math/ltm_desc.o src/math/multi.o \ src/math/rand_prime.o src/math/tfm_desc.o src/misc/base64/base64_decode.o \ -src/misc/base64/base64_encode.o src/misc/burn_stack.o src/misc/crypt/crypt.o \ -src/misc/crypt/crypt_argchk.o src/misc/crypt/crypt_cipher_descriptor.o \ -src/misc/crypt/crypt_cipher_is_valid.o src/misc/crypt/crypt_find_cipher.o \ -src/misc/crypt/crypt_find_cipher_any.o src/misc/crypt/crypt_find_cipher_id.o \ -src/misc/crypt/crypt_find_hash.o src/misc/crypt/crypt_find_hash_any.o \ -src/misc/crypt/crypt_find_hash_id.o src/misc/crypt/crypt_find_hash_oid.o \ -src/misc/crypt/crypt_find_prng.o src/misc/crypt/crypt_fsa.o src/misc/crypt/crypt_hash_descriptor.o \ -src/misc/crypt/crypt_hash_is_valid.o src/misc/crypt/crypt_ltc_mp_descriptor.o \ -src/misc/crypt/crypt_prng_descriptor.o src/misc/crypt/crypt_prng_is_valid.o \ -src/misc/crypt/crypt_register_cipher.o src/misc/crypt/crypt_register_hash.o \ -src/misc/crypt/crypt_register_prng.o src/misc/crypt/crypt_unregister_cipher.o \ -src/misc/crypt/crypt_unregister_hash.o src/misc/crypt/crypt_unregister_prng.o \ -src/misc/error_to_string.o src/misc/pkcs5/pkcs_5_1.o src/misc/pkcs5/pkcs_5_2.o src/misc/zeromem.o \ -src/modes/cbc/cbc_decrypt.o src/modes/cbc/cbc_done.o src/modes/cbc/cbc_encrypt.o \ -src/modes/cbc/cbc_getiv.o src/modes/cbc/cbc_setiv.o src/modes/cbc/cbc_start.o \ -src/modes/cfb/cfb_decrypt.o src/modes/cfb/cfb_done.o src/modes/cfb/cfb_encrypt.o \ -src/modes/cfb/cfb_getiv.o src/modes/cfb/cfb_setiv.o src/modes/cfb/cfb_start.o \ -src/modes/ctr/ctr_decrypt.o src/modes/ctr/ctr_done.o src/modes/ctr/ctr_encrypt.o \ -src/modes/ctr/ctr_getiv.o src/modes/ctr/ctr_setiv.o src/modes/ctr/ctr_start.o src/modes/ctr/ctr_test.o \ -src/modes/ecb/ecb_decrypt.o src/modes/ecb/ecb_done.o src/modes/ecb/ecb_encrypt.o \ -src/modes/ecb/ecb_start.o src/modes/f8/f8_decrypt.o src/modes/f8/f8_done.o src/modes/f8/f8_encrypt.o \ -src/modes/f8/f8_getiv.o src/modes/f8/f8_setiv.o src/modes/f8/f8_start.o src/modes/f8/f8_test_mode.o \ -src/modes/lrw/lrw_decrypt.o src/modes/lrw/lrw_done.o src/modes/lrw/lrw_encrypt.o \ -src/modes/lrw/lrw_getiv.o src/modes/lrw/lrw_process.o src/modes/lrw/lrw_setiv.o \ -src/modes/lrw/lrw_start.o src/modes/lrw/lrw_test.o src/modes/ofb/ofb_decrypt.o src/modes/ofb/ofb_done.o \ -src/modes/ofb/ofb_encrypt.o src/modes/ofb/ofb_getiv.o src/modes/ofb/ofb_setiv.o \ -src/modes/ofb/ofb_start.o src/pk/asn1/der/bit/der_decode_bit_string.o \ -src/pk/asn1/der/bit/der_encode_bit_string.o src/pk/asn1/der/bit/der_length_bit_string.o \ -src/pk/asn1/der/boolean/der_decode_boolean.o src/pk/asn1/der/boolean/der_encode_boolean.o \ -src/pk/asn1/der/boolean/der_length_boolean.o src/pk/asn1/der/choice/der_decode_choice.o \ -src/pk/asn1/der/ia5/der_decode_ia5_string.o src/pk/asn1/der/ia5/der_encode_ia5_string.o \ -src/pk/asn1/der/ia5/der_length_ia5_string.o src/pk/asn1/der/integer/der_decode_integer.o \ -src/pk/asn1/der/integer/der_encode_integer.o src/pk/asn1/der/integer/der_length_integer.o \ +src/misc/base64/base64_encode.o src/misc/burn_stack.o src/misc/crypt/crypt_argchk.o \ +src/misc/crypt/crypt.o src/misc/crypt/crypt_cipher_descriptor.o src/misc/crypt/crypt_cipher_is_valid.o \ +src/misc/crypt/crypt_find_cipher_any.o src/misc/crypt/crypt_find_cipher.o \ +src/misc/crypt/crypt_find_cipher_id.o src/misc/crypt/crypt_find_hash_any.o \ +src/misc/crypt/crypt_find_hash.o src/misc/crypt/crypt_find_hash_id.o \ +src/misc/crypt/crypt_find_hash_oid.o src/misc/crypt/crypt_find_prng.o src/misc/crypt/crypt_fsa.o \ +src/misc/crypt/crypt_hash_descriptor.o src/misc/crypt/crypt_hash_is_valid.o \ +src/misc/crypt/crypt_ltc_mp_descriptor.o src/misc/crypt/crypt_prng_descriptor.o \ +src/misc/crypt/crypt_prng_is_valid.o src/misc/crypt/crypt_register_cipher.o \ +src/misc/crypt/crypt_register_hash.o src/misc/crypt/crypt_register_prng.o \ +src/misc/crypt/crypt_unregister_cipher.o src/misc/crypt/crypt_unregister_hash.o \ +src/misc/crypt/crypt_unregister_prng.o src/misc/error_to_string.o src/misc/pkcs5/pkcs_5_1.o \ +src/misc/pkcs5/pkcs_5_2.o src/misc/zeromem.o src/modes/cbc/cbc_decrypt.o src/modes/cbc/cbc_done.o \ +src/modes/cbc/cbc_encrypt.o src/modes/cbc/cbc_getiv.o src/modes/cbc/cbc_setiv.o \ +src/modes/cbc/cbc_start.o src/modes/cfb/cfb_decrypt.o src/modes/cfb/cfb_done.o \ +src/modes/cfb/cfb_encrypt.o src/modes/cfb/cfb_getiv.o src/modes/cfb/cfb_setiv.o \ +src/modes/cfb/cfb_start.o src/modes/ctr/ctr_decrypt.o src/modes/ctr/ctr_done.o \ +src/modes/ctr/ctr_encrypt.o src/modes/ctr/ctr_getiv.o src/modes/ctr/ctr_setiv.o \ +src/modes/ctr/ctr_start.o src/modes/ctr/ctr_test.o src/modes/ecb/ecb_decrypt.o src/modes/ecb/ecb_done.o \ +src/modes/ecb/ecb_encrypt.o src/modes/ecb/ecb_start.o src/modes/f8/f8_decrypt.o src/modes/f8/f8_done.o \ +src/modes/f8/f8_encrypt.o src/modes/f8/f8_getiv.o src/modes/f8/f8_setiv.o src/modes/f8/f8_start.o \ +src/modes/f8/f8_test_mode.o src/modes/lrw/lrw_decrypt.o src/modes/lrw/lrw_done.o \ +src/modes/lrw/lrw_encrypt.o src/modes/lrw/lrw_getiv.o src/modes/lrw/lrw_process.o \ +src/modes/lrw/lrw_setiv.o src/modes/lrw/lrw_start.o src/modes/lrw/lrw_test.o \ +src/modes/ofb/ofb_decrypt.o src/modes/ofb/ofb_done.o src/modes/ofb/ofb_encrypt.o \ +src/modes/ofb/ofb_getiv.o src/modes/ofb/ofb_setiv.o src/modes/ofb/ofb_start.o \ +src/modes/xts/xts_decrypt.o src/modes/xts/xts_done.o src/modes/xts/xts_encrypt.o \ +src/modes/xts/xts_init.o src/modes/xts/xts_mult_x.o src/modes/xts/xts_test.o \ +src/pk/asn1/der/bit/der_decode_bit_string.o src/pk/asn1/der/bit/der_encode_bit_string.o \ +src/pk/asn1/der/bit/der_length_bit_string.o src/pk/asn1/der/boolean/der_decode_boolean.o \ +src/pk/asn1/der/boolean/der_encode_boolean.o src/pk/asn1/der/boolean/der_length_boolean.o \ +src/pk/asn1/der/choice/der_decode_choice.o src/pk/asn1/der/ia5/der_decode_ia5_string.o \ +src/pk/asn1/der/ia5/der_encode_ia5_string.o src/pk/asn1/der/ia5/der_length_ia5_string.o \ +src/pk/asn1/der/integer/der_decode_integer.o src/pk/asn1/der/integer/der_encode_integer.o \ +src/pk/asn1/der/integer/der_length_integer.o \ src/pk/asn1/der/object_identifier/der_decode_object_identifier.o \ src/pk/asn1/der/object_identifier/der_encode_object_identifier.o \ src/pk/asn1/der/object_identifier/der_length_object_identifier.o \ @@ -183,8 +186,8 @@ src/pk/asn1/der/utf8/der_decode_utf8_string.o src/pk/asn1/der/utf8/der_encode_ut src/pk/asn1/der/utf8/der_length_utf8_string.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/ecc/ecc_ansi_x963_export.o src/pk/ecc/ecc_ansi_x963_import.o src/pk/ecc/ecc_decrypt_key.o \ +src/pk/dsa/dsa_verify_hash.o src/pk/dsa/dsa_verify_key.o src/pk/ecc/ecc_ansi_x963_export.o \ +src/pk/ecc/ecc_ansi_x963_import.o src/pk/ecc/ecc.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 \ @@ -287,6 +290,6 @@ install: library install -g $(GROUP) -o $(USER) $(HEADERS) $(DESTDIR)$(INCPATH) # $Source: /cvs/libtom/libtomcrypt/makefile.icc,v $ -# $Revision: 1.73 $ -# $Date: 2006/12/02 19:23:21 $ +# $Revision: 1.76 $ +# $Date: 2007/02/16 16:36:25 $ diff --git a/makefile.msvc b/makefile.msvc index 2d408df7f..7f41ad998 100644 --- a/makefile.msvc +++ b/makefile.msvc @@ -6,27 +6,28 @@ CFLAGS = /Isrc/headers/ /Itestprof/ /Ox /DWIN32 /DLTC_SOURCE /W3 /Fo$@ $(CF) #START_INS 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/kasumi.obj src/ciphers/khazad.obj src/ciphers/kseed.obj \ -src/ciphers/noekeon.obj src/ciphers/rc2.obj src/ciphers/rc5.obj src/ciphers/rc6.obj src/ciphers/safer/safer.obj \ -src/ciphers/safer/safer_tab.obj src/ciphers/safer/saferp.obj src/ciphers/skipjack.obj \ -src/ciphers/twofish/twofish.obj src/ciphers/xtea.obj src/encauth/ccm/ccm_memory.obj \ +src/ciphers/multi2.obj src/ciphers/noekeon.obj src/ciphers/rc2.obj src/ciphers/rc5.obj src/ciphers/rc6.obj \ +src/ciphers/safer/safer.obj src/ciphers/safer/saferp.obj src/ciphers/safer/safer_tab.obj \ +src/ciphers/skipjack.obj src/ciphers/twofish/twofish.obj src/ciphers/xtea.obj src/encauth/ccm/ccm_memory.obj \ src/encauth/ccm/ccm_test.obj src/encauth/eax/eax_addheader.obj src/encauth/eax/eax_decrypt.obj \ -src/encauth/eax/eax_decrypt_verify_memory.obj src/encauth/eax/eax_done.obj src/encauth/eax/eax_encrypt.obj \ -src/encauth/eax/eax_encrypt_authenticate_memory.obj src/encauth/eax/eax_init.obj \ -src/encauth/eax/eax_test.obj src/encauth/gcm/gcm_add_aad.obj src/encauth/gcm/gcm_add_iv.obj \ -src/encauth/gcm/gcm_done.obj src/encauth/gcm/gcm_gf_mult.obj src/encauth/gcm/gcm_init.obj \ -src/encauth/gcm/gcm_memory.obj src/encauth/gcm/gcm_mult_h.obj src/encauth/gcm/gcm_process.obj \ -src/encauth/gcm/gcm_reset.obj src/encauth/gcm/gcm_test.obj src/encauth/ocb/ocb_decrypt.obj \ -src/encauth/ocb/ocb_decrypt_verify_memory.obj src/encauth/ocb/ocb_done_decrypt.obj \ -src/encauth/ocb/ocb_done_encrypt.obj src/encauth/ocb/ocb_encrypt.obj \ -src/encauth/ocb/ocb_encrypt_authenticate_memory.obj src/encauth/ocb/ocb_init.obj src/encauth/ocb/ocb_ntz.obj \ -src/encauth/ocb/ocb_shift_xor.obj src/encauth/ocb/ocb_test.obj src/encauth/ocb/s_ocb_done.obj \ -src/hashes/chc/chc.obj src/hashes/helper/hash_file.obj src/hashes/helper/hash_filehandle.obj \ -src/hashes/helper/hash_memory.obj src/hashes/helper/hash_memory_multi.obj src/hashes/md2.obj src/hashes/md4.obj \ -src/hashes/md5.obj src/hashes/rmd128.obj src/hashes/rmd160.obj src/hashes/rmd256.obj src/hashes/rmd320.obj \ -src/hashes/sha1.obj src/hashes/sha2/sha256.obj src/hashes/sha2/sha512.obj src/hashes/tiger.obj \ -src/hashes/whirl/whirl.obj src/mac/f9/f9_done.obj src/mac/f9/f9_file.obj src/mac/f9/f9_init.obj \ -src/mac/f9/f9_memory.obj src/mac/f9/f9_memory_multi.obj src/mac/f9/f9_process.obj src/mac/f9/f9_test.obj \ -src/mac/hmac/hmac_done.obj src/mac/hmac/hmac_file.obj src/mac/hmac/hmac_init.obj src/mac/hmac/hmac_memory.obj \ +src/encauth/eax/eax_decrypt_verify_memory.obj src/encauth/eax/eax_done.obj \ +src/encauth/eax/eax_encrypt_authenticate_memory.obj src/encauth/eax/eax_encrypt.obj \ +src/encauth/eax/eax_init.obj src/encauth/eax/eax_test.obj src/encauth/gcm/gcm_add_aad.obj \ +src/encauth/gcm/gcm_add_iv.obj src/encauth/gcm/gcm_done.obj src/encauth/gcm/gcm_gf_mult.obj \ +src/encauth/gcm/gcm_init.obj src/encauth/gcm/gcm_memory.obj src/encauth/gcm/gcm_mult_h.obj \ +src/encauth/gcm/gcm_process.obj src/encauth/gcm/gcm_reset.obj src/encauth/gcm/gcm_test.obj \ +src/encauth/ocb/ocb_decrypt.obj src/encauth/ocb/ocb_decrypt_verify_memory.obj \ +src/encauth/ocb/ocb_done_decrypt.obj src/encauth/ocb/ocb_done_encrypt.obj \ +src/encauth/ocb/ocb_encrypt_authenticate_memory.obj src/encauth/ocb/ocb_encrypt.obj \ +src/encauth/ocb/ocb_init.obj src/encauth/ocb/ocb_ntz.obj src/encauth/ocb/ocb_shift_xor.obj \ +src/encauth/ocb/ocb_test.obj src/encauth/ocb/s_ocb_done.obj src/hashes/chc/chc.obj \ +src/hashes/helper/hash_file.obj src/hashes/helper/hash_filehandle.obj src/hashes/helper/hash_memory.obj \ +src/hashes/helper/hash_memory_multi.obj src/hashes/md2.obj src/hashes/md4.obj src/hashes/md5.obj \ +src/hashes/rmd128.obj src/hashes/rmd160.obj src/hashes/rmd256.obj src/hashes/rmd320.obj src/hashes/sha1.obj \ +src/hashes/sha2/sha256.obj src/hashes/sha2/sha512.obj src/hashes/tiger.obj src/hashes/whirl/whirl.obj \ +src/mac/f9/f9_done.obj src/mac/f9/f9_file.obj src/mac/f9/f9_init.obj src/mac/f9/f9_memory.obj \ +src/mac/f9/f9_memory_multi.obj src/mac/f9/f9_process.obj src/mac/f9/f9_test.obj src/mac/hmac/hmac_done.obj \ +src/mac/hmac/hmac_file.obj src/mac/hmac/hmac_init.obj src/mac/hmac/hmac_memory.obj \ src/mac/hmac/hmac_memory_multi.obj src/mac/hmac/hmac_process.obj src/mac/hmac/hmac_test.obj \ src/mac/omac/omac_done.obj src/mac/omac/omac_file.obj src/mac/omac/omac_init.obj src/mac/omac/omac_memory.obj \ src/mac/omac/omac_memory_multi.obj src/mac/omac/omac_process.obj src/mac/omac/omac_test.obj \ @@ -38,39 +39,41 @@ src/mac/xcbc/xcbc_file.obj src/mac/xcbc/xcbc_init.obj src/mac/xcbc/xcbc_memory.o src/mac/xcbc/xcbc_memory_multi.obj src/mac/xcbc/xcbc_process.obj src/mac/xcbc/xcbc_test.obj \ src/math/fp/ltc_ecc_fp_mulmod.obj src/math/gmp_desc.obj src/math/ltm_desc.obj src/math/multi.obj \ src/math/rand_prime.obj src/math/tfm_desc.obj src/misc/base64/base64_decode.obj \ -src/misc/base64/base64_encode.obj src/misc/burn_stack.obj src/misc/crypt/crypt.obj \ -src/misc/crypt/crypt_argchk.obj src/misc/crypt/crypt_cipher_descriptor.obj \ -src/misc/crypt/crypt_cipher_is_valid.obj src/misc/crypt/crypt_find_cipher.obj \ -src/misc/crypt/crypt_find_cipher_any.obj src/misc/crypt/crypt_find_cipher_id.obj \ -src/misc/crypt/crypt_find_hash.obj src/misc/crypt/crypt_find_hash_any.obj \ -src/misc/crypt/crypt_find_hash_id.obj src/misc/crypt/crypt_find_hash_oid.obj \ -src/misc/crypt/crypt_find_prng.obj src/misc/crypt/crypt_fsa.obj src/misc/crypt/crypt_hash_descriptor.obj \ -src/misc/crypt/crypt_hash_is_valid.obj src/misc/crypt/crypt_ltc_mp_descriptor.obj \ -src/misc/crypt/crypt_prng_descriptor.obj src/misc/crypt/crypt_prng_is_valid.obj \ -src/misc/crypt/crypt_register_cipher.obj src/misc/crypt/crypt_register_hash.obj \ -src/misc/crypt/crypt_register_prng.obj src/misc/crypt/crypt_unregister_cipher.obj \ -src/misc/crypt/crypt_unregister_hash.obj src/misc/crypt/crypt_unregister_prng.obj \ -src/misc/error_to_string.obj src/misc/pkcs5/pkcs_5_1.obj src/misc/pkcs5/pkcs_5_2.obj src/misc/zeromem.obj \ -src/modes/cbc/cbc_decrypt.obj src/modes/cbc/cbc_done.obj src/modes/cbc/cbc_encrypt.obj \ -src/modes/cbc/cbc_getiv.obj src/modes/cbc/cbc_setiv.obj src/modes/cbc/cbc_start.obj \ -src/modes/cfb/cfb_decrypt.obj src/modes/cfb/cfb_done.obj src/modes/cfb/cfb_encrypt.obj \ -src/modes/cfb/cfb_getiv.obj src/modes/cfb/cfb_setiv.obj src/modes/cfb/cfb_start.obj \ -src/modes/ctr/ctr_decrypt.obj src/modes/ctr/ctr_done.obj src/modes/ctr/ctr_encrypt.obj \ -src/modes/ctr/ctr_getiv.obj src/modes/ctr/ctr_setiv.obj src/modes/ctr/ctr_start.obj src/modes/ctr/ctr_test.obj \ -src/modes/ecb/ecb_decrypt.obj src/modes/ecb/ecb_done.obj src/modes/ecb/ecb_encrypt.obj \ -src/modes/ecb/ecb_start.obj src/modes/f8/f8_decrypt.obj src/modes/f8/f8_done.obj src/modes/f8/f8_encrypt.obj \ -src/modes/f8/f8_getiv.obj src/modes/f8/f8_setiv.obj src/modes/f8/f8_start.obj src/modes/f8/f8_test_mode.obj \ -src/modes/lrw/lrw_decrypt.obj src/modes/lrw/lrw_done.obj src/modes/lrw/lrw_encrypt.obj \ -src/modes/lrw/lrw_getiv.obj src/modes/lrw/lrw_process.obj src/modes/lrw/lrw_setiv.obj \ -src/modes/lrw/lrw_start.obj src/modes/lrw/lrw_test.obj src/modes/ofb/ofb_decrypt.obj src/modes/ofb/ofb_done.obj \ -src/modes/ofb/ofb_encrypt.obj src/modes/ofb/ofb_getiv.obj src/modes/ofb/ofb_setiv.obj \ -src/modes/ofb/ofb_start.obj src/pk/asn1/der/bit/der_decode_bit_string.obj \ -src/pk/asn1/der/bit/der_encode_bit_string.obj src/pk/asn1/der/bit/der_length_bit_string.obj \ -src/pk/asn1/der/boolean/der_decode_boolean.obj src/pk/asn1/der/boolean/der_encode_boolean.obj \ -src/pk/asn1/der/boolean/der_length_boolean.obj src/pk/asn1/der/choice/der_decode_choice.obj \ -src/pk/asn1/der/ia5/der_decode_ia5_string.obj src/pk/asn1/der/ia5/der_encode_ia5_string.obj \ -src/pk/asn1/der/ia5/der_length_ia5_string.obj src/pk/asn1/der/integer/der_decode_integer.obj \ -src/pk/asn1/der/integer/der_encode_integer.obj src/pk/asn1/der/integer/der_length_integer.obj \ +src/misc/base64/base64_encode.obj src/misc/burn_stack.obj src/misc/crypt/crypt_argchk.obj \ +src/misc/crypt/crypt.obj src/misc/crypt/crypt_cipher_descriptor.obj src/misc/crypt/crypt_cipher_is_valid.obj \ +src/misc/crypt/crypt_find_cipher_any.obj src/misc/crypt/crypt_find_cipher.obj \ +src/misc/crypt/crypt_find_cipher_id.obj src/misc/crypt/crypt_find_hash_any.obj \ +src/misc/crypt/crypt_find_hash.obj src/misc/crypt/crypt_find_hash_id.obj \ +src/misc/crypt/crypt_find_hash_oid.obj src/misc/crypt/crypt_find_prng.obj src/misc/crypt/crypt_fsa.obj \ +src/misc/crypt/crypt_hash_descriptor.obj src/misc/crypt/crypt_hash_is_valid.obj \ +src/misc/crypt/crypt_ltc_mp_descriptor.obj src/misc/crypt/crypt_prng_descriptor.obj \ +src/misc/crypt/crypt_prng_is_valid.obj src/misc/crypt/crypt_register_cipher.obj \ +src/misc/crypt/crypt_register_hash.obj src/misc/crypt/crypt_register_prng.obj \ +src/misc/crypt/crypt_unregister_cipher.obj src/misc/crypt/crypt_unregister_hash.obj \ +src/misc/crypt/crypt_unregister_prng.obj src/misc/error_to_string.obj src/misc/pkcs5/pkcs_5_1.obj \ +src/misc/pkcs5/pkcs_5_2.obj src/misc/zeromem.obj src/modes/cbc/cbc_decrypt.obj src/modes/cbc/cbc_done.obj \ +src/modes/cbc/cbc_encrypt.obj src/modes/cbc/cbc_getiv.obj src/modes/cbc/cbc_setiv.obj \ +src/modes/cbc/cbc_start.obj src/modes/cfb/cfb_decrypt.obj src/modes/cfb/cfb_done.obj \ +src/modes/cfb/cfb_encrypt.obj src/modes/cfb/cfb_getiv.obj src/modes/cfb/cfb_setiv.obj \ +src/modes/cfb/cfb_start.obj src/modes/ctr/ctr_decrypt.obj src/modes/ctr/ctr_done.obj \ +src/modes/ctr/ctr_encrypt.obj src/modes/ctr/ctr_getiv.obj src/modes/ctr/ctr_setiv.obj \ +src/modes/ctr/ctr_start.obj src/modes/ctr/ctr_test.obj src/modes/ecb/ecb_decrypt.obj src/modes/ecb/ecb_done.obj \ +src/modes/ecb/ecb_encrypt.obj src/modes/ecb/ecb_start.obj src/modes/f8/f8_decrypt.obj src/modes/f8/f8_done.obj \ +src/modes/f8/f8_encrypt.obj src/modes/f8/f8_getiv.obj src/modes/f8/f8_setiv.obj src/modes/f8/f8_start.obj \ +src/modes/f8/f8_test_mode.obj src/modes/lrw/lrw_decrypt.obj src/modes/lrw/lrw_done.obj \ +src/modes/lrw/lrw_encrypt.obj src/modes/lrw/lrw_getiv.obj src/modes/lrw/lrw_process.obj \ +src/modes/lrw/lrw_setiv.obj src/modes/lrw/lrw_start.obj src/modes/lrw/lrw_test.obj \ +src/modes/ofb/ofb_decrypt.obj src/modes/ofb/ofb_done.obj src/modes/ofb/ofb_encrypt.obj \ +src/modes/ofb/ofb_getiv.obj src/modes/ofb/ofb_setiv.obj src/modes/ofb/ofb_start.obj \ +src/modes/xts/xts_decrypt.obj src/modes/xts/xts_done.obj src/modes/xts/xts_encrypt.obj \ +src/modes/xts/xts_init.obj src/modes/xts/xts_mult_x.obj src/modes/xts/xts_test.obj \ +src/pk/asn1/der/bit/der_decode_bit_string.obj src/pk/asn1/der/bit/der_encode_bit_string.obj \ +src/pk/asn1/der/bit/der_length_bit_string.obj src/pk/asn1/der/boolean/der_decode_boolean.obj \ +src/pk/asn1/der/boolean/der_encode_boolean.obj src/pk/asn1/der/boolean/der_length_boolean.obj \ +src/pk/asn1/der/choice/der_decode_choice.obj src/pk/asn1/der/ia5/der_decode_ia5_string.obj \ +src/pk/asn1/der/ia5/der_encode_ia5_string.obj src/pk/asn1/der/ia5/der_length_ia5_string.obj \ +src/pk/asn1/der/integer/der_decode_integer.obj src/pk/asn1/der/integer/der_encode_integer.obj \ +src/pk/asn1/der/integer/der_length_integer.obj \ src/pk/asn1/der/object_identifier/der_decode_object_identifier.obj \ src/pk/asn1/der/object_identifier/der_encode_object_identifier.obj \ src/pk/asn1/der/object_identifier/der_length_object_identifier.obj \ @@ -93,8 +96,8 @@ src/pk/asn1/der/utf8/der_decode_utf8_string.obj src/pk/asn1/der/utf8/der_encode_ src/pk/asn1/der/utf8/der_length_utf8_string.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/ecc/ecc_ansi_x963_export.obj src/pk/ecc/ecc_ansi_x963_import.obj src/pk/ecc/ecc_decrypt_key.obj \ +src/pk/dsa/dsa_verify_hash.obj src/pk/dsa/dsa_verify_key.obj src/pk/ecc/ecc_ansi_x963_export.obj \ +src/pk/ecc/ecc_ansi_x963_import.obj src/pk/ecc/ecc.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 \ @@ -145,5 +148,5 @@ 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.51 $ -# $Date: 2006/12/02 19:23:21 $ +# $Revision: 1.54 $ +# $Date: 2007/02/16 16:36:25 $ diff --git a/makefile.shared b/makefile.shared index a66ab1fba..dd575d949 100644 --- a/makefile.shared +++ b/makefile.shared @@ -6,7 +6,7 @@ # Tom St Denis # The version -VERSION=0:116 +VERSION=0:117 # Compiler and Linker Names CC=libtool --mode=compile --tag=CC gcc @@ -101,27 +101,28 @@ endif #START_INS OBJECTS=src/ciphers/aes/aes_enc.o src/ciphers/aes/aes.o src/ciphers/anubis.o src/ciphers/blowfish.o \ src/ciphers/cast5.o src/ciphers/des.o src/ciphers/kasumi.o src/ciphers/khazad.o src/ciphers/kseed.o \ -src/ciphers/noekeon.o src/ciphers/rc2.o src/ciphers/rc5.o src/ciphers/rc6.o src/ciphers/safer/safer.o \ -src/ciphers/safer/safer_tab.o src/ciphers/safer/saferp.o src/ciphers/skipjack.o \ -src/ciphers/twofish/twofish.o src/ciphers/xtea.o src/encauth/ccm/ccm_memory.o \ +src/ciphers/multi2.o src/ciphers/noekeon.o src/ciphers/rc2.o src/ciphers/rc5.o src/ciphers/rc6.o \ +src/ciphers/safer/safer.o src/ciphers/safer/saferp.o src/ciphers/safer/safer_tab.o \ +src/ciphers/skipjack.o src/ciphers/twofish/twofish.o src/ciphers/xtea.o src/encauth/ccm/ccm_memory.o \ src/encauth/ccm/ccm_test.o src/encauth/eax/eax_addheader.o src/encauth/eax/eax_decrypt.o \ -src/encauth/eax/eax_decrypt_verify_memory.o src/encauth/eax/eax_done.o src/encauth/eax/eax_encrypt.o \ -src/encauth/eax/eax_encrypt_authenticate_memory.o src/encauth/eax/eax_init.o \ -src/encauth/eax/eax_test.o src/encauth/gcm/gcm_add_aad.o src/encauth/gcm/gcm_add_iv.o \ -src/encauth/gcm/gcm_done.o src/encauth/gcm/gcm_gf_mult.o src/encauth/gcm/gcm_init.o \ -src/encauth/gcm/gcm_memory.o src/encauth/gcm/gcm_mult_h.o src/encauth/gcm/gcm_process.o \ -src/encauth/gcm/gcm_reset.o src/encauth/gcm/gcm_test.o src/encauth/ocb/ocb_decrypt.o \ -src/encauth/ocb/ocb_decrypt_verify_memory.o src/encauth/ocb/ocb_done_decrypt.o \ -src/encauth/ocb/ocb_done_encrypt.o src/encauth/ocb/ocb_encrypt.o \ -src/encauth/ocb/ocb_encrypt_authenticate_memory.o src/encauth/ocb/ocb_init.o src/encauth/ocb/ocb_ntz.o \ -src/encauth/ocb/ocb_shift_xor.o src/encauth/ocb/ocb_test.o src/encauth/ocb/s_ocb_done.o \ -src/hashes/chc/chc.o src/hashes/helper/hash_file.o src/hashes/helper/hash_filehandle.o \ -src/hashes/helper/hash_memory.o src/hashes/helper/hash_memory_multi.o src/hashes/md2.o src/hashes/md4.o \ -src/hashes/md5.o src/hashes/rmd128.o src/hashes/rmd160.o src/hashes/rmd256.o src/hashes/rmd320.o \ -src/hashes/sha1.o src/hashes/sha2/sha256.o src/hashes/sha2/sha512.o src/hashes/tiger.o \ -src/hashes/whirl/whirl.o src/mac/f9/f9_done.o src/mac/f9/f9_file.o src/mac/f9/f9_init.o \ -src/mac/f9/f9_memory.o src/mac/f9/f9_memory_multi.o src/mac/f9/f9_process.o src/mac/f9/f9_test.o \ -src/mac/hmac/hmac_done.o src/mac/hmac/hmac_file.o src/mac/hmac/hmac_init.o src/mac/hmac/hmac_memory.o \ +src/encauth/eax/eax_decrypt_verify_memory.o src/encauth/eax/eax_done.o \ +src/encauth/eax/eax_encrypt_authenticate_memory.o src/encauth/eax/eax_encrypt.o \ +src/encauth/eax/eax_init.o src/encauth/eax/eax_test.o src/encauth/gcm/gcm_add_aad.o \ +src/encauth/gcm/gcm_add_iv.o src/encauth/gcm/gcm_done.o src/encauth/gcm/gcm_gf_mult.o \ +src/encauth/gcm/gcm_init.o src/encauth/gcm/gcm_memory.o src/encauth/gcm/gcm_mult_h.o \ +src/encauth/gcm/gcm_process.o src/encauth/gcm/gcm_reset.o src/encauth/gcm/gcm_test.o \ +src/encauth/ocb/ocb_decrypt.o src/encauth/ocb/ocb_decrypt_verify_memory.o \ +src/encauth/ocb/ocb_done_decrypt.o src/encauth/ocb/ocb_done_encrypt.o \ +src/encauth/ocb/ocb_encrypt_authenticate_memory.o src/encauth/ocb/ocb_encrypt.o \ +src/encauth/ocb/ocb_init.o src/encauth/ocb/ocb_ntz.o src/encauth/ocb/ocb_shift_xor.o \ +src/encauth/ocb/ocb_test.o src/encauth/ocb/s_ocb_done.o src/hashes/chc/chc.o \ +src/hashes/helper/hash_file.o src/hashes/helper/hash_filehandle.o src/hashes/helper/hash_memory.o \ +src/hashes/helper/hash_memory_multi.o src/hashes/md2.o src/hashes/md4.o src/hashes/md5.o \ +src/hashes/rmd128.o src/hashes/rmd160.o src/hashes/rmd256.o src/hashes/rmd320.o src/hashes/sha1.o \ +src/hashes/sha2/sha256.o src/hashes/sha2/sha512.o src/hashes/tiger.o src/hashes/whirl/whirl.o \ +src/mac/f9/f9_done.o src/mac/f9/f9_file.o src/mac/f9/f9_init.o src/mac/f9/f9_memory.o \ +src/mac/f9/f9_memory_multi.o src/mac/f9/f9_process.o src/mac/f9/f9_test.o src/mac/hmac/hmac_done.o \ +src/mac/hmac/hmac_file.o src/mac/hmac/hmac_init.o src/mac/hmac/hmac_memory.o \ src/mac/hmac/hmac_memory_multi.o src/mac/hmac/hmac_process.o src/mac/hmac/hmac_test.o \ src/mac/omac/omac_done.o src/mac/omac/omac_file.o src/mac/omac/omac_init.o src/mac/omac/omac_memory.o \ src/mac/omac/omac_memory_multi.o src/mac/omac/omac_process.o src/mac/omac/omac_test.o \ @@ -133,39 +134,41 @@ src/mac/xcbc/xcbc_file.o src/mac/xcbc/xcbc_init.o src/mac/xcbc/xcbc_memory.o \ src/mac/xcbc/xcbc_memory_multi.o src/mac/xcbc/xcbc_process.o src/mac/xcbc/xcbc_test.o \ src/math/fp/ltc_ecc_fp_mulmod.o src/math/gmp_desc.o src/math/ltm_desc.o src/math/multi.o \ src/math/rand_prime.o src/math/tfm_desc.o src/misc/base64/base64_decode.o \ -src/misc/base64/base64_encode.o src/misc/burn_stack.o src/misc/crypt/crypt.o \ -src/misc/crypt/crypt_argchk.o src/misc/crypt/crypt_cipher_descriptor.o \ -src/misc/crypt/crypt_cipher_is_valid.o src/misc/crypt/crypt_find_cipher.o \ -src/misc/crypt/crypt_find_cipher_any.o src/misc/crypt/crypt_find_cipher_id.o \ -src/misc/crypt/crypt_find_hash.o src/misc/crypt/crypt_find_hash_any.o \ -src/misc/crypt/crypt_find_hash_id.o src/misc/crypt/crypt_find_hash_oid.o \ -src/misc/crypt/crypt_find_prng.o src/misc/crypt/crypt_fsa.o src/misc/crypt/crypt_hash_descriptor.o \ -src/misc/crypt/crypt_hash_is_valid.o src/misc/crypt/crypt_ltc_mp_descriptor.o \ -src/misc/crypt/crypt_prng_descriptor.o src/misc/crypt/crypt_prng_is_valid.o \ -src/misc/crypt/crypt_register_cipher.o src/misc/crypt/crypt_register_hash.o \ -src/misc/crypt/crypt_register_prng.o src/misc/crypt/crypt_unregister_cipher.o \ -src/misc/crypt/crypt_unregister_hash.o src/misc/crypt/crypt_unregister_prng.o \ -src/misc/error_to_string.o src/misc/pkcs5/pkcs_5_1.o src/misc/pkcs5/pkcs_5_2.o src/misc/zeromem.o \ -src/modes/cbc/cbc_decrypt.o src/modes/cbc/cbc_done.o src/modes/cbc/cbc_encrypt.o \ -src/modes/cbc/cbc_getiv.o src/modes/cbc/cbc_setiv.o src/modes/cbc/cbc_start.o \ -src/modes/cfb/cfb_decrypt.o src/modes/cfb/cfb_done.o src/modes/cfb/cfb_encrypt.o \ -src/modes/cfb/cfb_getiv.o src/modes/cfb/cfb_setiv.o src/modes/cfb/cfb_start.o \ -src/modes/ctr/ctr_decrypt.o src/modes/ctr/ctr_done.o src/modes/ctr/ctr_encrypt.o \ -src/modes/ctr/ctr_getiv.o src/modes/ctr/ctr_setiv.o src/modes/ctr/ctr_start.o src/modes/ctr/ctr_test.o \ -src/modes/ecb/ecb_decrypt.o src/modes/ecb/ecb_done.o src/modes/ecb/ecb_encrypt.o \ -src/modes/ecb/ecb_start.o src/modes/f8/f8_decrypt.o src/modes/f8/f8_done.o src/modes/f8/f8_encrypt.o \ -src/modes/f8/f8_getiv.o src/modes/f8/f8_setiv.o src/modes/f8/f8_start.o src/modes/f8/f8_test_mode.o \ -src/modes/lrw/lrw_decrypt.o src/modes/lrw/lrw_done.o src/modes/lrw/lrw_encrypt.o \ -src/modes/lrw/lrw_getiv.o src/modes/lrw/lrw_process.o src/modes/lrw/lrw_setiv.o \ -src/modes/lrw/lrw_start.o src/modes/lrw/lrw_test.o src/modes/ofb/ofb_decrypt.o src/modes/ofb/ofb_done.o \ -src/modes/ofb/ofb_encrypt.o src/modes/ofb/ofb_getiv.o src/modes/ofb/ofb_setiv.o \ -src/modes/ofb/ofb_start.o src/pk/asn1/der/bit/der_decode_bit_string.o \ -src/pk/asn1/der/bit/der_encode_bit_string.o src/pk/asn1/der/bit/der_length_bit_string.o \ -src/pk/asn1/der/boolean/der_decode_boolean.o src/pk/asn1/der/boolean/der_encode_boolean.o \ -src/pk/asn1/der/boolean/der_length_boolean.o src/pk/asn1/der/choice/der_decode_choice.o \ -src/pk/asn1/der/ia5/der_decode_ia5_string.o src/pk/asn1/der/ia5/der_encode_ia5_string.o \ -src/pk/asn1/der/ia5/der_length_ia5_string.o src/pk/asn1/der/integer/der_decode_integer.o \ -src/pk/asn1/der/integer/der_encode_integer.o src/pk/asn1/der/integer/der_length_integer.o \ +src/misc/base64/base64_encode.o src/misc/burn_stack.o src/misc/crypt/crypt_argchk.o \ +src/misc/crypt/crypt.o src/misc/crypt/crypt_cipher_descriptor.o src/misc/crypt/crypt_cipher_is_valid.o \ +src/misc/crypt/crypt_find_cipher_any.o src/misc/crypt/crypt_find_cipher.o \ +src/misc/crypt/crypt_find_cipher_id.o src/misc/crypt/crypt_find_hash_any.o \ +src/misc/crypt/crypt_find_hash.o src/misc/crypt/crypt_find_hash_id.o \ +src/misc/crypt/crypt_find_hash_oid.o src/misc/crypt/crypt_find_prng.o src/misc/crypt/crypt_fsa.o \ +src/misc/crypt/crypt_hash_descriptor.o src/misc/crypt/crypt_hash_is_valid.o \ +src/misc/crypt/crypt_ltc_mp_descriptor.o src/misc/crypt/crypt_prng_descriptor.o \ +src/misc/crypt/crypt_prng_is_valid.o src/misc/crypt/crypt_register_cipher.o \ +src/misc/crypt/crypt_register_hash.o src/misc/crypt/crypt_register_prng.o \ +src/misc/crypt/crypt_unregister_cipher.o src/misc/crypt/crypt_unregister_hash.o \ +src/misc/crypt/crypt_unregister_prng.o src/misc/error_to_string.o src/misc/pkcs5/pkcs_5_1.o \ +src/misc/pkcs5/pkcs_5_2.o src/misc/zeromem.o src/modes/cbc/cbc_decrypt.o src/modes/cbc/cbc_done.o \ +src/modes/cbc/cbc_encrypt.o src/modes/cbc/cbc_getiv.o src/modes/cbc/cbc_setiv.o \ +src/modes/cbc/cbc_start.o src/modes/cfb/cfb_decrypt.o src/modes/cfb/cfb_done.o \ +src/modes/cfb/cfb_encrypt.o src/modes/cfb/cfb_getiv.o src/modes/cfb/cfb_setiv.o \ +src/modes/cfb/cfb_start.o src/modes/ctr/ctr_decrypt.o src/modes/ctr/ctr_done.o \ +src/modes/ctr/ctr_encrypt.o src/modes/ctr/ctr_getiv.o src/modes/ctr/ctr_setiv.o \ +src/modes/ctr/ctr_start.o src/modes/ctr/ctr_test.o src/modes/ecb/ecb_decrypt.o src/modes/ecb/ecb_done.o \ +src/modes/ecb/ecb_encrypt.o src/modes/ecb/ecb_start.o src/modes/f8/f8_decrypt.o src/modes/f8/f8_done.o \ +src/modes/f8/f8_encrypt.o src/modes/f8/f8_getiv.o src/modes/f8/f8_setiv.o src/modes/f8/f8_start.o \ +src/modes/f8/f8_test_mode.o src/modes/lrw/lrw_decrypt.o src/modes/lrw/lrw_done.o \ +src/modes/lrw/lrw_encrypt.o src/modes/lrw/lrw_getiv.o src/modes/lrw/lrw_process.o \ +src/modes/lrw/lrw_setiv.o src/modes/lrw/lrw_start.o src/modes/lrw/lrw_test.o \ +src/modes/ofb/ofb_decrypt.o src/modes/ofb/ofb_done.o src/modes/ofb/ofb_encrypt.o \ +src/modes/ofb/ofb_getiv.o src/modes/ofb/ofb_setiv.o src/modes/ofb/ofb_start.o \ +src/modes/xts/xts_decrypt.o src/modes/xts/xts_done.o src/modes/xts/xts_encrypt.o \ +src/modes/xts/xts_init.o src/modes/xts/xts_mult_x.o src/modes/xts/xts_test.o \ +src/pk/asn1/der/bit/der_decode_bit_string.o src/pk/asn1/der/bit/der_encode_bit_string.o \ +src/pk/asn1/der/bit/der_length_bit_string.o src/pk/asn1/der/boolean/der_decode_boolean.o \ +src/pk/asn1/der/boolean/der_encode_boolean.o src/pk/asn1/der/boolean/der_length_boolean.o \ +src/pk/asn1/der/choice/der_decode_choice.o src/pk/asn1/der/ia5/der_decode_ia5_string.o \ +src/pk/asn1/der/ia5/der_encode_ia5_string.o src/pk/asn1/der/ia5/der_length_ia5_string.o \ +src/pk/asn1/der/integer/der_decode_integer.o src/pk/asn1/der/integer/der_encode_integer.o \ +src/pk/asn1/der/integer/der_length_integer.o \ src/pk/asn1/der/object_identifier/der_decode_object_identifier.o \ src/pk/asn1/der/object_identifier/der_encode_object_identifier.o \ src/pk/asn1/der/object_identifier/der_length_object_identifier.o \ @@ -188,8 +191,8 @@ src/pk/asn1/der/utf8/der_decode_utf8_string.o src/pk/asn1/der/utf8/der_encode_ut src/pk/asn1/der/utf8/der_length_utf8_string.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/ecc/ecc_ansi_x963_export.o src/pk/ecc/ecc_ansi_x963_import.o src/pk/ecc/ecc_decrypt_key.o \ +src/pk/dsa/dsa_verify_hash.o src/pk/dsa/dsa_verify_key.o src/pk/ecc/ecc_ansi_x963_export.o \ +src/pk/ecc/ecc_ansi_x963_import.o src/pk/ecc/ecc.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 \ @@ -275,5 +278,5 @@ timing: library testprof/$(LIBTEST) $(TIMINGS) gcc -o $(TIMING) $(TIMINGS) -ltomcrypt_prof -ltomcrypt $(EXTRALIBS) # $Source: /cvs/libtom/libtomcrypt/makefile.shared,v $ -# $Revision: 1.76 $ -# $Date: 2006/12/02 19:23:21 $ +# $Revision: 1.80 $ +# $Date: 2007/02/16 16:36:25 $ diff --git a/makefile.unix b/makefile.unix index a4e0ff076..bb8f29c3a 100644 --- a/makefile.unix +++ b/makefile.unix @@ -42,27 +42,28 @@ GROUP=wheel #START_INS OBJECTS=src/ciphers/aes/aes_enc.o src/ciphers/aes/aes.o src/ciphers/anubis.o src/ciphers/blowfish.o \ src/ciphers/cast5.o src/ciphers/des.o src/ciphers/kasumi.o src/ciphers/khazad.o src/ciphers/kseed.o \ -src/ciphers/noekeon.o src/ciphers/rc2.o src/ciphers/rc5.o src/ciphers/rc6.o src/ciphers/safer/safer.o \ -src/ciphers/safer/safer_tab.o src/ciphers/safer/saferp.o src/ciphers/skipjack.o \ -src/ciphers/twofish/twofish.o src/ciphers/xtea.o src/encauth/ccm/ccm_memory.o \ +src/ciphers/multi2.o src/ciphers/noekeon.o src/ciphers/rc2.o src/ciphers/rc5.o src/ciphers/rc6.o \ +src/ciphers/safer/safer.o src/ciphers/safer/saferp.o src/ciphers/safer/safer_tab.o \ +src/ciphers/skipjack.o src/ciphers/twofish/twofish.o src/ciphers/xtea.o src/encauth/ccm/ccm_memory.o \ src/encauth/ccm/ccm_test.o src/encauth/eax/eax_addheader.o src/encauth/eax/eax_decrypt.o \ -src/encauth/eax/eax_decrypt_verify_memory.o src/encauth/eax/eax_done.o src/encauth/eax/eax_encrypt.o \ -src/encauth/eax/eax_encrypt_authenticate_memory.o src/encauth/eax/eax_init.o \ -src/encauth/eax/eax_test.o src/encauth/gcm/gcm_add_aad.o src/encauth/gcm/gcm_add_iv.o \ -src/encauth/gcm/gcm_done.o src/encauth/gcm/gcm_gf_mult.o src/encauth/gcm/gcm_init.o \ -src/encauth/gcm/gcm_memory.o src/encauth/gcm/gcm_mult_h.o src/encauth/gcm/gcm_process.o \ -src/encauth/gcm/gcm_reset.o src/encauth/gcm/gcm_test.o src/encauth/ocb/ocb_decrypt.o \ -src/encauth/ocb/ocb_decrypt_verify_memory.o src/encauth/ocb/ocb_done_decrypt.o \ -src/encauth/ocb/ocb_done_encrypt.o src/encauth/ocb/ocb_encrypt.o \ -src/encauth/ocb/ocb_encrypt_authenticate_memory.o src/encauth/ocb/ocb_init.o src/encauth/ocb/ocb_ntz.o \ -src/encauth/ocb/ocb_shift_xor.o src/encauth/ocb/ocb_test.o src/encauth/ocb/s_ocb_done.o \ -src/hashes/chc/chc.o src/hashes/helper/hash_file.o src/hashes/helper/hash_filehandle.o \ -src/hashes/helper/hash_memory.o src/hashes/helper/hash_memory_multi.o src/hashes/md2.o src/hashes/md4.o \ -src/hashes/md5.o src/hashes/rmd128.o src/hashes/rmd160.o src/hashes/rmd256.o src/hashes/rmd320.o \ -src/hashes/sha1.o src/hashes/sha2/sha256.o src/hashes/sha2/sha512.o src/hashes/tiger.o \ -src/hashes/whirl/whirl.o src/mac/f9/f9_done.o src/mac/f9/f9_file.o src/mac/f9/f9_init.o \ -src/mac/f9/f9_memory.o src/mac/f9/f9_memory_multi.o src/mac/f9/f9_process.o src/mac/f9/f9_test.o \ -src/mac/hmac/hmac_done.o src/mac/hmac/hmac_file.o src/mac/hmac/hmac_init.o src/mac/hmac/hmac_memory.o \ +src/encauth/eax/eax_decrypt_verify_memory.o src/encauth/eax/eax_done.o \ +src/encauth/eax/eax_encrypt_authenticate_memory.o src/encauth/eax/eax_encrypt.o \ +src/encauth/eax/eax_init.o src/encauth/eax/eax_test.o src/encauth/gcm/gcm_add_aad.o \ +src/encauth/gcm/gcm_add_iv.o src/encauth/gcm/gcm_done.o src/encauth/gcm/gcm_gf_mult.o \ +src/encauth/gcm/gcm_init.o src/encauth/gcm/gcm_memory.o src/encauth/gcm/gcm_mult_h.o \ +src/encauth/gcm/gcm_process.o src/encauth/gcm/gcm_reset.o src/encauth/gcm/gcm_test.o \ +src/encauth/ocb/ocb_decrypt.o src/encauth/ocb/ocb_decrypt_verify_memory.o \ +src/encauth/ocb/ocb_done_decrypt.o src/encauth/ocb/ocb_done_encrypt.o \ +src/encauth/ocb/ocb_encrypt_authenticate_memory.o src/encauth/ocb/ocb_encrypt.o \ +src/encauth/ocb/ocb_init.o src/encauth/ocb/ocb_ntz.o src/encauth/ocb/ocb_shift_xor.o \ +src/encauth/ocb/ocb_test.o src/encauth/ocb/s_ocb_done.o src/hashes/chc/chc.o \ +src/hashes/helper/hash_file.o src/hashes/helper/hash_filehandle.o src/hashes/helper/hash_memory.o \ +src/hashes/helper/hash_memory_multi.o src/hashes/md2.o src/hashes/md4.o src/hashes/md5.o \ +src/hashes/rmd128.o src/hashes/rmd160.o src/hashes/rmd256.o src/hashes/rmd320.o src/hashes/sha1.o \ +src/hashes/sha2/sha256.o src/hashes/sha2/sha512.o src/hashes/tiger.o src/hashes/whirl/whirl.o \ +src/mac/f9/f9_done.o src/mac/f9/f9_file.o src/mac/f9/f9_init.o src/mac/f9/f9_memory.o \ +src/mac/f9/f9_memory_multi.o src/mac/f9/f9_process.o src/mac/f9/f9_test.o src/mac/hmac/hmac_done.o \ +src/mac/hmac/hmac_file.o src/mac/hmac/hmac_init.o src/mac/hmac/hmac_memory.o \ src/mac/hmac/hmac_memory_multi.o src/mac/hmac/hmac_process.o src/mac/hmac/hmac_test.o \ src/mac/omac/omac_done.o src/mac/omac/omac_file.o src/mac/omac/omac_init.o src/mac/omac/omac_memory.o \ src/mac/omac/omac_memory_multi.o src/mac/omac/omac_process.o src/mac/omac/omac_test.o \ @@ -74,39 +75,41 @@ src/mac/xcbc/xcbc_file.o src/mac/xcbc/xcbc_init.o src/mac/xcbc/xcbc_memory.o \ src/mac/xcbc/xcbc_memory_multi.o src/mac/xcbc/xcbc_process.o src/mac/xcbc/xcbc_test.o \ src/math/fp/ltc_ecc_fp_mulmod.o src/math/gmp_desc.o src/math/ltm_desc.o src/math/multi.o \ src/math/rand_prime.o src/math/tfm_desc.o src/misc/base64/base64_decode.o \ -src/misc/base64/base64_encode.o src/misc/burn_stack.o src/misc/crypt/crypt.o \ -src/misc/crypt/crypt_argchk.o src/misc/crypt/crypt_cipher_descriptor.o \ -src/misc/crypt/crypt_cipher_is_valid.o src/misc/crypt/crypt_find_cipher.o \ -src/misc/crypt/crypt_find_cipher_any.o src/misc/crypt/crypt_find_cipher_id.o \ -src/misc/crypt/crypt_find_hash.o src/misc/crypt/crypt_find_hash_any.o \ -src/misc/crypt/crypt_find_hash_id.o src/misc/crypt/crypt_find_hash_oid.o \ -src/misc/crypt/crypt_find_prng.o src/misc/crypt/crypt_fsa.o src/misc/crypt/crypt_hash_descriptor.o \ -src/misc/crypt/crypt_hash_is_valid.o src/misc/crypt/crypt_ltc_mp_descriptor.o \ -src/misc/crypt/crypt_prng_descriptor.o src/misc/crypt/crypt_prng_is_valid.o \ -src/misc/crypt/crypt_register_cipher.o src/misc/crypt/crypt_register_hash.o \ -src/misc/crypt/crypt_register_prng.o src/misc/crypt/crypt_unregister_cipher.o \ -src/misc/crypt/crypt_unregister_hash.o src/misc/crypt/crypt_unregister_prng.o \ -src/misc/error_to_string.o src/misc/pkcs5/pkcs_5_1.o src/misc/pkcs5/pkcs_5_2.o src/misc/zeromem.o \ -src/modes/cbc/cbc_decrypt.o src/modes/cbc/cbc_done.o src/modes/cbc/cbc_encrypt.o \ -src/modes/cbc/cbc_getiv.o src/modes/cbc/cbc_setiv.o src/modes/cbc/cbc_start.o \ -src/modes/cfb/cfb_decrypt.o src/modes/cfb/cfb_done.o src/modes/cfb/cfb_encrypt.o \ -src/modes/cfb/cfb_getiv.o src/modes/cfb/cfb_setiv.o src/modes/cfb/cfb_start.o \ -src/modes/ctr/ctr_decrypt.o src/modes/ctr/ctr_done.o src/modes/ctr/ctr_encrypt.o \ -src/modes/ctr/ctr_getiv.o src/modes/ctr/ctr_setiv.o src/modes/ctr/ctr_start.o src/modes/ctr/ctr_test.o \ -src/modes/ecb/ecb_decrypt.o src/modes/ecb/ecb_done.o src/modes/ecb/ecb_encrypt.o \ -src/modes/ecb/ecb_start.o src/modes/f8/f8_decrypt.o src/modes/f8/f8_done.o src/modes/f8/f8_encrypt.o \ -src/modes/f8/f8_getiv.o src/modes/f8/f8_setiv.o src/modes/f8/f8_start.o src/modes/f8/f8_test_mode.o \ -src/modes/lrw/lrw_decrypt.o src/modes/lrw/lrw_done.o src/modes/lrw/lrw_encrypt.o \ -src/modes/lrw/lrw_getiv.o src/modes/lrw/lrw_process.o src/modes/lrw/lrw_setiv.o \ -src/modes/lrw/lrw_start.o src/modes/lrw/lrw_test.o src/modes/ofb/ofb_decrypt.o src/modes/ofb/ofb_done.o \ -src/modes/ofb/ofb_encrypt.o src/modes/ofb/ofb_getiv.o src/modes/ofb/ofb_setiv.o \ -src/modes/ofb/ofb_start.o src/pk/asn1/der/bit/der_decode_bit_string.o \ -src/pk/asn1/der/bit/der_encode_bit_string.o src/pk/asn1/der/bit/der_length_bit_string.o \ -src/pk/asn1/der/boolean/der_decode_boolean.o src/pk/asn1/der/boolean/der_encode_boolean.o \ -src/pk/asn1/der/boolean/der_length_boolean.o src/pk/asn1/der/choice/der_decode_choice.o \ -src/pk/asn1/der/ia5/der_decode_ia5_string.o src/pk/asn1/der/ia5/der_encode_ia5_string.o \ -src/pk/asn1/der/ia5/der_length_ia5_string.o src/pk/asn1/der/integer/der_decode_integer.o \ -src/pk/asn1/der/integer/der_encode_integer.o src/pk/asn1/der/integer/der_length_integer.o \ +src/misc/base64/base64_encode.o src/misc/burn_stack.o src/misc/crypt/crypt_argchk.o \ +src/misc/crypt/crypt.o src/misc/crypt/crypt_cipher_descriptor.o src/misc/crypt/crypt_cipher_is_valid.o \ +src/misc/crypt/crypt_find_cipher_any.o src/misc/crypt/crypt_find_cipher.o \ +src/misc/crypt/crypt_find_cipher_id.o src/misc/crypt/crypt_find_hash_any.o \ +src/misc/crypt/crypt_find_hash.o src/misc/crypt/crypt_find_hash_id.o \ +src/misc/crypt/crypt_find_hash_oid.o src/misc/crypt/crypt_find_prng.o src/misc/crypt/crypt_fsa.o \ +src/misc/crypt/crypt_hash_descriptor.o src/misc/crypt/crypt_hash_is_valid.o \ +src/misc/crypt/crypt_ltc_mp_descriptor.o src/misc/crypt/crypt_prng_descriptor.o \ +src/misc/crypt/crypt_prng_is_valid.o src/misc/crypt/crypt_register_cipher.o \ +src/misc/crypt/crypt_register_hash.o src/misc/crypt/crypt_register_prng.o \ +src/misc/crypt/crypt_unregister_cipher.o src/misc/crypt/crypt_unregister_hash.o \ +src/misc/crypt/crypt_unregister_prng.o src/misc/error_to_string.o src/misc/pkcs5/pkcs_5_1.o \ +src/misc/pkcs5/pkcs_5_2.o src/misc/zeromem.o src/modes/cbc/cbc_decrypt.o src/modes/cbc/cbc_done.o \ +src/modes/cbc/cbc_encrypt.o src/modes/cbc/cbc_getiv.o src/modes/cbc/cbc_setiv.o \ +src/modes/cbc/cbc_start.o src/modes/cfb/cfb_decrypt.o src/modes/cfb/cfb_done.o \ +src/modes/cfb/cfb_encrypt.o src/modes/cfb/cfb_getiv.o src/modes/cfb/cfb_setiv.o \ +src/modes/cfb/cfb_start.o src/modes/ctr/ctr_decrypt.o src/modes/ctr/ctr_done.o \ +src/modes/ctr/ctr_encrypt.o src/modes/ctr/ctr_getiv.o src/modes/ctr/ctr_setiv.o \ +src/modes/ctr/ctr_start.o src/modes/ctr/ctr_test.o src/modes/ecb/ecb_decrypt.o src/modes/ecb/ecb_done.o \ +src/modes/ecb/ecb_encrypt.o src/modes/ecb/ecb_start.o src/modes/f8/f8_decrypt.o src/modes/f8/f8_done.o \ +src/modes/f8/f8_encrypt.o src/modes/f8/f8_getiv.o src/modes/f8/f8_setiv.o src/modes/f8/f8_start.o \ +src/modes/f8/f8_test_mode.o src/modes/lrw/lrw_decrypt.o src/modes/lrw/lrw_done.o \ +src/modes/lrw/lrw_encrypt.o src/modes/lrw/lrw_getiv.o src/modes/lrw/lrw_process.o \ +src/modes/lrw/lrw_setiv.o src/modes/lrw/lrw_start.o src/modes/lrw/lrw_test.o \ +src/modes/ofb/ofb_decrypt.o src/modes/ofb/ofb_done.o src/modes/ofb/ofb_encrypt.o \ +src/modes/ofb/ofb_getiv.o src/modes/ofb/ofb_setiv.o src/modes/ofb/ofb_start.o \ +src/modes/xts/xts_decrypt.o src/modes/xts/xts_done.o src/modes/xts/xts_encrypt.o \ +src/modes/xts/xts_init.o src/modes/xts/xts_mult_x.o src/modes/xts/xts_test.o \ +src/pk/asn1/der/bit/der_decode_bit_string.o src/pk/asn1/der/bit/der_encode_bit_string.o \ +src/pk/asn1/der/bit/der_length_bit_string.o src/pk/asn1/der/boolean/der_decode_boolean.o \ +src/pk/asn1/der/boolean/der_encode_boolean.o src/pk/asn1/der/boolean/der_length_boolean.o \ +src/pk/asn1/der/choice/der_decode_choice.o src/pk/asn1/der/ia5/der_decode_ia5_string.o \ +src/pk/asn1/der/ia5/der_encode_ia5_string.o src/pk/asn1/der/ia5/der_length_ia5_string.o \ +src/pk/asn1/der/integer/der_decode_integer.o src/pk/asn1/der/integer/der_encode_integer.o \ +src/pk/asn1/der/integer/der_length_integer.o \ src/pk/asn1/der/object_identifier/der_decode_object_identifier.o \ src/pk/asn1/der/object_identifier/der_encode_object_identifier.o \ src/pk/asn1/der/object_identifier/der_length_object_identifier.o \ @@ -129,8 +132,8 @@ src/pk/asn1/der/utf8/der_decode_utf8_string.o src/pk/asn1/der/utf8/der_encode_ut src/pk/asn1/der/utf8/der_length_utf8_string.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/ecc/ecc_ansi_x963_export.o src/pk/ecc/ecc_ansi_x963_import.o src/pk/ecc/ecc_decrypt_key.o \ +src/pk/dsa/dsa_verify_hash.o src/pk/dsa/dsa_verify_key.o src/pk/ecc/ecc_ansi_x963_export.o \ +src/pk/ecc/ecc_ansi_x963_import.o src/pk/ecc/ecc.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 \ @@ -235,5 +238,5 @@ install_test: testprof/$(LIBTEST) install -g $(GROUP) -o $(USER) testprof/$(LIBTEST) $(DESTDIR)$(LIBPATH) # $Source: /cvs/libtom/libtomcrypt/makefile.unix,v $ -# $Revision: 1.4 $ -# $Date: 2006/12/02 19:23:21 $ +# $Revision: 1.7 $ +# $Date: 2007/02/16 16:36:25 $ diff --git a/notes/etc/saferp_optimizer.c b/notes/etc/saferp_optimizer.c index feb58bc96..b2ae718ec 100644 --- a/notes/etc/saferp_optimizer.c +++ b/notes/etc/saferp_optimizer.c @@ -1,4 +1,4 @@ -/* emits an optimized version of SAFER+ ... only does encrypt so far... */ +/* emits an optimized version of LTC_SAFER+ ... only does encrypt so far... */ #include #include diff --git a/notes/tech0005.txt b/notes/tech0005.txt index ef10a4305..c2502208c 100644 --- a/notes/tech0005.txt +++ b/notes/tech0005.txt @@ -12,7 +12,7 @@ You can disable whole classes of algorithms on the command line with the LTC_NO_ The following build with GCC 3.4.4 on an AMD64 box gets you AES, CTR mode, SHA-256, HMAC, Yarrow, full RSA PKCS #1, PKCS #5 and ASN.1 DER in roughly 40KB of code (49KB on the ARMv4) (both excluding the math library). -CFLAGS="-DLTC_NO_CIPHERS -DLTC_NO_HASHES -DLTC_NO_PRNGS -DLTC_NO_MACS -DLTC_NO_MODES -DLTC_NO_PK -DRIJNDAEL -DLTC_CTR_MODE -DSHA256 \ +CFLAGS="-DLTC_NO_CIPHERS -DLTC_NO_HASHES -DLTC_NO_PRNGS -DLTC_NO_MACS -DLTC_NO_MODES -DLTC_NO_PK -DLTC_RIJNDAEL -DLTC_CTR_MODE -DSHA256 \ -DLTC_HMAC -DYARROW -DMRSA -DMPI -DTFM_DESC -DARGTYPE=3 -Os -DLTC_SMALL_CODE -fomit-frame-pointer" make IGNORE_SPEED=1 Obviously this won't get you performance but if you need to pack a crypto lib in a device with limited means it's more than enough... diff --git a/src/ciphers/aes/aes.c b/src/ciphers/aes/aes.c index eccbb8a63..bea512502 100644 --- a/src/ciphers/aes/aes.c +++ b/src/ciphers/aes/aes.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* AES implementation by Tom St Denis @@ -32,7 +32,7 @@ #include "tomcrypt.h" -#ifdef RIJNDAEL +#ifdef LTC_RIJNDAEL #ifndef ENCRYPT_ONLY diff --git a/src/ciphers/aes/aes_tab.c b/src/ciphers/aes/aes_tab.c index 5f106ef7d..ca7008d59 100644 --- a/src/ciphers/aes/aes_tab.c +++ b/src/ciphers/aes/aes_tab.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* The precomputed tables for AES */ /* diff --git a/src/ciphers/anubis.c b/src/ciphers/anubis.c index 6531ed14f..229d5e8da 100644 --- a/src/ciphers/anubis.c +++ b/src/ciphers/anubis.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /** @@ -17,7 +17,7 @@ #include "tomcrypt.h" -#ifdef ANUBIS +#ifdef LTC_ANUBIS const struct ltc_cipher_descriptor anubis_desc = { "anubis", @@ -48,7 +48,7 @@ const struct ltc_cipher_descriptor anubis_desc = { * (but little-endian notation would be equally suitable if consistently * employed). */ -#if defined(ANUBIS_TWEAK) +#if defined(LTC_ANUBIS_TWEAK) static const ulong32 T0[256] = { 0xba69d2bbU, 0x54a84de5U, 0x2f5ebce2U, 0x74e8cd25U, @@ -1174,8 +1174,8 @@ int anubis_test(void) int keylen; unsigned char pt[16], ct[16], key[40]; } tests[] = { -#ifndef ANUBIS_TWEAK - /**** ORIGINAL ANUBIS ****/ +#ifndef LTC_ANUBIS_TWEAK + /**** ORIGINAL LTC_ANUBIS ****/ /* 128 bit keys */ { 16, @@ -1333,7 +1333,7 @@ int anubis_test(void) 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 } } #else - /**** Tweaked ANUBIS ****/ + /**** Tweaked LTC_ANUBIS ****/ /* 128 bit keys */ { 16, diff --git a/src/ciphers/blowfish.c b/src/ciphers/blowfish.c index 349ca65da..6a55abc0a 100644 --- a/src/ciphers/blowfish.c +++ b/src/ciphers/blowfish.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /** @file blowfish.c @@ -14,7 +14,7 @@ */ #include "tomcrypt.h" -#ifdef BLOWFISH +#ifdef LTC_BLOWFISH const struct ltc_cipher_descriptor blowfish_desc = { diff --git a/src/ciphers/cast5.c b/src/ciphers/cast5.c index ff8832250..ffc2f28a6 100644 --- a/src/ciphers/cast5.c +++ b/src/ciphers/cast5.c @@ -6,16 +6,16 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /** @file cast5.c - Implementation of CAST5 (RFC 2144) by Tom St Denis + Implementation of LTC_CAST5 (RFC 2144) by Tom St Denis */ #include "tomcrypt.h" -#ifdef CAST5 +#ifdef LTC_CAST5 const struct ltc_cipher_descriptor cast5_desc = { "cast5", @@ -398,7 +398,7 @@ static const ulong32 S8[256] = { #endif /** - Initialize the CAST5 block cipher + Initialize the LTC_CAST5 block cipher @param key The symmetric key you wish to pass @param keylen The key length in bytes @param num_rounds The number of rounds desired (0 for default) @@ -530,7 +530,7 @@ INLINE static ulong32 FIII(ulong32 R, ulong32 Km, ulong32 Kr) } /** - Encrypts a block of text with CAST5 + Encrypts a block of text with LTC_CAST5 @param pt The input plaintext (8 bytes) @param ct The output ciphertext (8 bytes) @param skey The key as scheduled @@ -583,7 +583,7 @@ int cast5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key #endif /** - Decrypts a block of text with CAST5 + Decrypts a block of text with LTC_CAST5 @param ct The input ciphertext (8 bytes) @param pt The output plaintext (8 bytes) @param skey The key as scheduled @@ -636,7 +636,7 @@ int cast5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key #endif /** - Performs a self-test of the CAST5 block cipher + Performs a self-test of the LTC_CAST5 block cipher @return CRYPT_OK if functional, CRYPT_NOP if self-test has been disabled */ int cast5_test(void) diff --git a/src/ciphers/des.c b/src/ciphers/des.c index 5b1aac20f..af3a4d072 100644 --- a/src/ciphers/des.c +++ b/src/ciphers/des.c @@ -6,16 +6,16 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" /** @file des.c - DES code submitted by Dobes Vandermeer + LTC_DES code submitted by Dobes Vandermeer */ -#ifdef DES +#ifdef LTC_DES #define EN0 0 #define DE1 1 @@ -1519,7 +1519,7 @@ static void desfunc(ulong32 *block, const ulong32 *keys) #endif /** - Initialize the DES block cipher + Initialize the LTC_DES block cipher @param key The symmetric key you wish to pass @param keylen The key length in bytes @param num_rounds The number of rounds desired (0 for default) @@ -1546,7 +1546,7 @@ int des_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_ke } /** - Initialize the 3DES-EDE block cipher + Initialize the 3LTC_DES-EDE block cipher @param key The symmetric key you wish to pass @param keylen The key length in bytes @param num_rounds The number of rounds desired (0 for default) @@ -1578,7 +1578,7 @@ int des3_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_k } /** - Encrypts a block of text with DES + Encrypts a block of text with LTC_DES @param pt The input plaintext (8 bytes) @param ct The output ciphertext (8 bytes) @param skey The key as scheduled @@ -1599,7 +1599,7 @@ int des_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *s } /** - Decrypts a block of text with DES + Decrypts a block of text with LTC_DES @param ct The input ciphertext (8 bytes) @param pt The output plaintext (8 bytes) @param skey The key as scheduled @@ -1620,7 +1620,7 @@ int des_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *s } /** - Encrypts a block of text with 3DES-EDE + Encrypts a block of text with 3LTC_DES-EDE @param pt The input plaintext (8 bytes) @param ct The output ciphertext (8 bytes) @param skey The key as scheduled @@ -1644,7 +1644,7 @@ int des3_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key * } /** - Decrypts a block of text with 3DES-EDE + Decrypts a block of text with 3LTC_DES-EDE @param ct The input ciphertext (8 bytes) @param pt The output plaintext (8 bytes) @param skey The key as scheduled @@ -1667,7 +1667,7 @@ int des3_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key * } /** - Performs a self-test of the DES block cipher + Performs a self-test of the LTC_DES block cipher @return CRYPT_OK if functional, CRYPT_NOP if self-test has been disabled */ int des_test(void) diff --git a/src/ciphers/kasumi.c b/src/ciphers/kasumi.c index c02e6d651..3b765d0b4 100644 --- a/src/ciphers/kasumi.c +++ b/src/ciphers/kasumi.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /** diff --git a/src/ciphers/khazad.c b/src/ciphers/khazad.c index fc4f0c4cf..a3c67d57b 100644 --- a/src/ciphers/khazad.c +++ b/src/ciphers/khazad.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" @@ -16,7 +16,7 @@ Authors: Paulo S.L.M. Barreto and Vincent Rijmen. */ -#ifdef KHAZAD +#ifdef LTC_KHAZAD const struct ltc_cipher_descriptor khazad_desc = { "khazad", diff --git a/src/ciphers/kseed.c b/src/ciphers/kseed.c index e82fd19c1..a163c9543 100644 --- a/src/ciphers/kseed.c +++ b/src/ciphers/kseed.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /** @@ -17,7 +17,7 @@ #include "tomcrypt.h" -#ifdef KSEED +#ifdef LTC_KSEED const struct ltc_cipher_descriptor kseed_desc = { "seed", diff --git a/src/ciphers/multi2.c b/src/ciphers/multi2.c new file mode 100644 index 000000000..db0b3bafb --- /dev/null +++ b/src/ciphers/multi2.c @@ -0,0 +1,303 @@ +/* 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://libtom.org + */ + +/** + @file multi2.c + Multi-2 implementation (not public domain, hence the default disable) +*/ +#include "tomcrypt.h" + +#ifdef LTC_MULTI2 + +static void pi1(ulong32 *p) +{ + p[1] ^= p[0]; +} + +static void pi2(ulong32 *p, ulong32 *k) +{ + ulong32 t; + t = (p[1] + k[0]) & 0xFFFFFFFFUL; + t = (ROL(t, 1) + t - 1) & 0xFFFFFFFFUL; + t = (ROL(t, 4) ^ t) & 0xFFFFFFFFUL; + p[0] ^= t; +} + +static void pi3(ulong32 *p, ulong32 *k) +{ + ulong32 t; + t = p[0] + k[1]; + t = (ROL(t, 2) + t + 1) & 0xFFFFFFFFUL; + t = (ROL(t, 8) ^ t) & 0xFFFFFFFFUL; + t = (t + k[2]) & 0xFFFFFFFFUL; + t = (ROL(t, 1) - t) & 0xFFFFFFFFUL; + t = ROL(t, 16) ^ (p[0] | t); + p[1] ^= t; +} + +static void pi4(ulong32 *p, ulong32 *k) +{ + ulong32 t; + t = (p[1] + k[3]) & 0xFFFFFFFFUL; + t = (ROL(t, 2) + t + 1) & 0xFFFFFFFFUL; + p[0] ^= t; +} + +static void setup(ulong32 *dk, ulong32 *k, ulong32 *uk) +{ + int n, t; + ulong32 p[2]; + + p[0] = dk[0]; p[1] = dk[1]; + + t = 4; + n = 0; + pi1(p); + pi2(p, k); + uk[n++] = p[0]; + pi3(p, k); + uk[n++] = p[1]; + pi4(p, k); + uk[n++] = p[0]; + pi1(p); + uk[n++] = p[1]; + pi2(p, k+t); + uk[n++] = p[0]; + pi3(p, k+t); + uk[n++] = p[1]; + pi4(p, k+t); + uk[n++] = p[0]; + pi1(p); + uk[n++] = p[1]; +} + +static void encrypt(ulong32 *p, int N, ulong32 *uk) +{ + int n, t; + for (t = n = 0; ; ) { + pi1(p); if (++n == N) break; + pi2(p, uk+t); if (++n == N) break; + pi3(p, uk+t); if (++n == N) break; + pi4(p, uk+t); if (++n == N) break; + t ^= 4; + } +} + +static void decrypt(ulong32 *p, int N, ulong32 *uk) +{ + int n, t; + for (t = 4*((N&1)^1), n = N; ; ) { + switch (n >= 4 ? 4 : 0) { + case 4: pi4(p, uk+t); --n; + case 3: pi3(p, uk+t); --n; + case 2: pi2(p, uk+t); --n; + case 1: pi1(p); --n; break; + case 0: return; + } + t ^= 4; + } +} + +const struct ltc_cipher_descriptor multi2_desc = { + "multi2", + 22, + 40, 40, 8, 128, + &multi2_setup, + &multi2_ecb_encrypt, + &multi2_ecb_decrypt, + &multi2_test, + &multi2_done, + &multi2_keysize, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL +}; + +int multi2_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) +{ + ulong32 sk[8], dk[2]; + int x; + + LTC_ARGCHK(key != NULL); + LTC_ARGCHK(skey != NULL); + + if (keylen != 40) return CRYPT_INVALID_KEYSIZE; + if (num_rounds == 0) num_rounds = 128; + + skey->multi2.N = num_rounds; + for (x = 0; x < 8; x++) { + LOAD32H(sk[x], key + x*4); + } + LOAD32H(dk[0], key + 32); + LOAD32H(dk[1], key + 36); + setup(dk, sk, skey->multi2.uk); + + zeromem(sk, sizeof(sk)); + zeromem(dk, sizeof(dk)); + return CRYPT_OK; +} + +/** + Encrypts a block of text with multi2 + @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 +*/ +int multi2_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey) +{ + ulong32 p[2]; + LTC_ARGCHK(pt != NULL); + LTC_ARGCHK(ct != NULL); + LTC_ARGCHK(skey != NULL); + LOAD32H(p[0], pt); + LOAD32H(p[1], pt+4); + encrypt(p, skey->multi2.N, skey->multi2.uk); + STORE32H(p[0], ct); + STORE32H(p[1], ct+4); + return CRYPT_OK; +} + +/** + Decrypts a block of text with multi2 + @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 +*/ +int multi2_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey) +{ + ulong32 p[2]; + LTC_ARGCHK(pt != NULL); + LTC_ARGCHK(ct != NULL); + LTC_ARGCHK(skey != NULL); + LOAD32H(p[0], ct); + LOAD32H(p[1], ct+4); + decrypt(p, skey->multi2.N, skey->multi2.uk); + STORE32H(p[0], pt); + STORE32H(p[1], pt+4); + return CRYPT_OK; +} + +/** + Performs a self-test of the multi2 block cipher + @return CRYPT_OK if functional, CRYPT_NOP if self-test has been disabled +*/ +int multi2_test(void) +{ + static const struct { + unsigned char key[40]; + unsigned char pt[8], ct[8]; + int rounds; + } tests[] = { +{ + { + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + + 0x01, 0x23, 0x45, 0x67, + 0x89, 0xAB, 0xCD, 0xEF + }, + { + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, + }, + { + 0xf8, 0x94, 0x40, 0x84, + 0x5e, 0x11, 0xcf, 0x89 + }, + 128, +}, +{ + { + 0x35, 0x91, 0x9d, 0x96, + 0x07, 0x02, 0xe2, 0xce, + 0x8d, 0x0b, 0x58, 0x3c, + 0xc9, 0xc8, 0x9d, 0x59, + 0xa2, 0xae, 0x96, 0x4e, + 0x87, 0x82, 0x45, 0xed, + 0x3f, 0x2e, 0x62, 0xd6, + 0x36, 0x35, 0xd0, 0x67, + + 0xb1, 0x27, 0xb9, 0x06, + 0xe7, 0x56, 0x22, 0x38, + }, + { + 0x1f, 0xb4, 0x60, 0x60, + 0xd0, 0xb3, 0x4f, 0xa5 + }, + { + 0xca, 0x84, 0xa9, 0x34, + 0x75, 0xc8, 0x60, 0xe5 + }, + 216, +} +}; + unsigned char buf[8]; + symmetric_key skey; + int err, x; + + for (x = 1; x < (int)(sizeof(tests)/sizeof(tests[0])); x++) { + if ((err = multi2_setup(tests[x].key, 40, tests[x].rounds, &skey)) != CRYPT_OK) { + return err; + } + if ((err = multi2_ecb_encrypt(tests[x].pt, buf, &skey)) != CRYPT_OK) { + return err; + } + + if (XMEMCMP(buf, tests[x].ct, 8)) { + return CRYPT_FAIL_TESTVECTOR; + } + + if ((err = multi2_ecb_decrypt(buf, buf, &skey)) != CRYPT_OK) { + return err; + } + if (XMEMCMP(buf, tests[x].pt, 8)) { + return CRYPT_FAIL_TESTVECTOR; + } + } + + return CRYPT_OK; +} + +/** Terminate the context + @param skey The scheduled key +*/ +void multi2_done(symmetric_key *skey) +{ +} + +/** + Gets suitable key size + @param keysize [in/out] The length of the recommended key (in bytes). This function will store the suitable size back in this variable. + @return CRYPT_OK if the input key size is acceptable. +*/ +int multi2_keysize(int *keysize) +{ + LTC_ARGCHK(keysize != NULL); + if (*keysize >= 40) { + *keysize = 40; + } else { + return CRYPT_INVALID_KEYSIZE; + } + return CRYPT_OK; +} + +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/ciphers/noekeon.c b/src/ciphers/noekeon.c index dc450a05f..bdbcb2a89 100644 --- a/src/ciphers/noekeon.c +++ b/src/ciphers/noekeon.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /** @file noekeon.c @@ -14,7 +14,7 @@ */ #include "tomcrypt.h" -#ifdef NOEKEON +#ifdef LTC_NOEKEON const struct ltc_cipher_descriptor noekeon_desc = { diff --git a/src/ciphers/rc2.c b/src/ciphers/rc2.c index 5ee798a39..256f07450 100644 --- a/src/ciphers/rc2.c +++ b/src/ciphers/rc2.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /**********************************************************************\ * To commemorate the 1996 RSA Data Security Conference, the following * @@ -22,10 +22,10 @@ /** @file rc2.c - Implementation of RC2 + Implementation of LTC_RC2 */ -#ifdef RC2 +#ifdef LTC_RC2 const struct ltc_cipher_descriptor rc2_desc = { "rc2", @@ -60,7 +60,7 @@ static const unsigned char permute[256] = { }; /** - Initialize the RC2 block cipher + Initialize the LTC_RC2 block cipher @param key The symmetric key you wish to pass @param keylen The key length in bytes @param num_rounds The number of rounds desired (0 for default) @@ -121,7 +121,7 @@ int rc2_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_ke * Encrypt an 8-byte block of plaintext using the given key. * \**********************************************************************/ /** - Encrypts a block of text with RC2 + Encrypts a block of text with LTC_RC2 @param pt The input plaintext (8 bytes) @param ct The output ciphertext (8 bytes) @param skey The key as scheduled @@ -199,7 +199,7 @@ int rc2_ecb_encrypt( const unsigned char *pt, * Decrypt an 8-byte block of ciphertext using the given key. * \**********************************************************************/ /** - Decrypts a block of text with RC2 + Decrypts a block of text with LTC_RC2 @param ct The input ciphertext (8 bytes) @param pt The output plaintext (8 bytes) @param skey The key as scheduled @@ -275,7 +275,7 @@ int rc2_ecb_decrypt( const unsigned char *ct, #endif /** - Performs a self-test of the RC2 block cipher + Performs a self-test of the LTC_RC2 block cipher @return CRYPT_OK if functional, CRYPT_NOP if self-test has been disabled */ int rc2_test(void) diff --git a/src/ciphers/rc5.c b/src/ciphers/rc5.c index 4948c68c4..ac5645117 100644 --- a/src/ciphers/rc5.c +++ b/src/ciphers/rc5.c @@ -6,17 +6,17 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /** @file rc5.c - RC5 code by Tom St Denis + LTC_RC5 code by Tom St Denis */ #include "tomcrypt.h" -#ifdef RC5 +#ifdef LTC_RC5 const struct ltc_cipher_descriptor rc5_desc = { @@ -43,7 +43,7 @@ static const ulong32 stab[50] = { }; /** - Initialize the RC5 block cipher + Initialize the LTC_RC5 block cipher @param key The symmetric key you wish to pass @param keylen The key length in bytes @param num_rounds The number of rounds desired (0 for default) @@ -119,7 +119,7 @@ int rc5_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_ke #endif /** - Encrypts a block of text with RC5 + Encrypts a block of text with LTC_RC5 @param pt The input plaintext (8 bytes) @param ct The output ciphertext (8 bytes) @param skey The key as scheduled @@ -174,7 +174,7 @@ int rc5_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *s #endif /** - Decrypts a block of text with RC5 + Decrypts a block of text with LTC_RC5 @param ct The input ciphertext (8 bytes) @param pt The output plaintext (8 bytes) @param skey The key as scheduled @@ -230,7 +230,7 @@ int rc5_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *s #endif /** - Performs a self-test of the RC5 block cipher + Performs a self-test of the LTC_RC5 block cipher @return CRYPT_OK if functional, CRYPT_NOP if self-test has been disabled */ int rc5_test(void) diff --git a/src/ciphers/rc6.c b/src/ciphers/rc6.c index 71ec0f8d6..88639b8a2 100644 --- a/src/ciphers/rc6.c +++ b/src/ciphers/rc6.c @@ -6,16 +6,16 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /** @file rc6.c - RC6 code by Tom St Denis + LTC_RC6 code by Tom St Denis */ #include "tomcrypt.h" -#ifdef RC6 +#ifdef LTC_RC6 const struct ltc_cipher_descriptor rc6_desc = { @@ -40,7 +40,7 @@ static const ulong32 stab[44] = { 0x708c564bUL, 0x0ec3d004UL, 0xacfb49bdUL, 0x4b32c376UL }; /** - Initialize the RC6 block cipher + Initialize the LTC_RC6 block cipher @param key The symmetric key you wish to pass @param keylen The key length in bytes @param num_rounds The number of rounds desired (0 for default) @@ -114,7 +114,7 @@ int rc6_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_ke #endif /** - Encrypts a block of text with RC6 + Encrypts a block of text with LTC_RC6 @param pt The input plaintext (16 bytes) @param ct The output ciphertext (16 bytes) @param skey The key as scheduled @@ -168,7 +168,7 @@ int rc6_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *s #endif /** - Decrypts a block of text with RC6 + Decrypts a block of text with LTC_RC6 @param ct The input ciphertext (16 bytes) @param pt The output plaintext (16 bytes) @param skey The key as scheduled @@ -224,7 +224,7 @@ int rc6_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *s #endif /** - Performs a self-test of the RC6 block cipher + Performs a self-test of the LTC_RC6 block cipher @return CRYPT_OK if functional, CRYPT_NOP if self-test has been disabled */ int rc6_test(void) @@ -339,7 +339,7 @@ int rc6_keysize(int *keysize) return CRYPT_OK; } -#endif /*RC6*/ +#endif /*LTC_RC6*/ diff --git a/src/ciphers/safer/safer.c b/src/ciphers/safer/safer.c index f1099c9f0..5189c2fdb 100644 --- a/src/ciphers/safer/safer.c +++ b/src/ciphers/safer/safer.c @@ -6,16 +6,16 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /******************************************************************************* * * FILE: safer.c * -* DESCRIPTION: block-cipher algorithm SAFER (Secure And Fast Encryption -* Routine) in its four versions: SAFER K-64, SAFER K-128, -* SAFER SK-64 and SAFER SK-128. +* LTC_DESCRIPTION: block-cipher algorithm LTC_SAFER (Secure And Fast Encryption +* Routine) in its four versions: LTC_SAFER K-64, LTC_SAFER K-128, +* LTC_SAFER SK-64 and LTC_SAFER SK-128. * * AUTHOR: Richard De Moliner (demoliner@isi.ee.ethz.ch) * Signal and Information Processing Laboratory @@ -30,12 +30,12 @@ #include -#ifdef SAFER +#ifdef LTC_SAFER const struct ltc_cipher_descriptor safer_k64_desc = { "safer-k64", - 8, 8, 8, 8, SAFER_K64_DEFAULT_NOF_ROUNDS, + 8, 8, 8, 8, LTC_SAFER_K64_DEFAULT_NOF_ROUNDS, &safer_k64_setup, &safer_ecb_encrypt, &safer_ecb_decrypt, @@ -47,7 +47,7 @@ const struct ltc_cipher_descriptor safer_sk64_desc = { "safer-sk64", - 9, 8, 8, 8, SAFER_SK64_DEFAULT_NOF_ROUNDS, + 9, 8, 8, 8, LTC_SAFER_SK64_DEFAULT_NOF_ROUNDS, &safer_sk64_setup, &safer_ecb_encrypt, &safer_ecb_decrypt, @@ -59,7 +59,7 @@ const struct ltc_cipher_descriptor safer_k128_desc = { "safer-k128", - 10, 16, 16, 8, SAFER_K128_DEFAULT_NOF_ROUNDS, + 10, 16, 16, 8, LTC_SAFER_K128_DEFAULT_NOF_ROUNDS, &safer_k128_setup, &safer_ecb_encrypt, &safer_ecb_decrypt, @@ -71,7 +71,7 @@ const struct ltc_cipher_descriptor safer_sk128_desc = { "safer-sk128", - 11, 16, 16, 8, SAFER_SK128_DEFAULT_NOF_ROUNDS, + 11, 16, 16, 8, LTC_SAFER_SK128_DEFAULT_NOF_ROUNDS, &safer_sk128_setup, &safer_ecb_encrypt, &safer_ecb_decrypt, @@ -111,48 +111,48 @@ static void Safer_Expand_Userkey(const unsigned char *userkey_1, safer_key_t key) #endif { unsigned int i, j, k; - unsigned char ka[SAFER_BLOCK_LEN + 1]; - unsigned char kb[SAFER_BLOCK_LEN + 1]; + unsigned char ka[LTC_SAFER_BLOCK_LEN + 1]; + unsigned char kb[LTC_SAFER_BLOCK_LEN + 1]; - if (SAFER_MAX_NOF_ROUNDS < nof_rounds) - nof_rounds = SAFER_MAX_NOF_ROUNDS; + if (LTC_SAFER_MAX_NOF_ROUNDS < nof_rounds) + nof_rounds = LTC_SAFER_MAX_NOF_ROUNDS; *key++ = (unsigned char)nof_rounds; - ka[SAFER_BLOCK_LEN] = (unsigned char)0; - kb[SAFER_BLOCK_LEN] = (unsigned char)0; + ka[LTC_SAFER_BLOCK_LEN] = (unsigned char)0; + kb[LTC_SAFER_BLOCK_LEN] = (unsigned char)0; k = 0; - for (j = 0; j < SAFER_BLOCK_LEN; j++) { + for (j = 0; j < LTC_SAFER_BLOCK_LEN; j++) { ka[j] = ROL8(userkey_1[j], 5); - ka[SAFER_BLOCK_LEN] ^= ka[j]; + ka[LTC_SAFER_BLOCK_LEN] ^= ka[j]; kb[j] = *key++ = userkey_2[j]; - kb[SAFER_BLOCK_LEN] ^= kb[j]; + kb[LTC_SAFER_BLOCK_LEN] ^= kb[j]; } for (i = 1; i <= nof_rounds; i++) { - for (j = 0; j < SAFER_BLOCK_LEN + 1; j++) { + for (j = 0; j < LTC_SAFER_BLOCK_LEN + 1; j++) { ka[j] = ROL8(ka[j], 6); kb[j] = ROL8(kb[j], 6); } if (strengthened) { k = 2 * i - 1; - while (k >= (SAFER_BLOCK_LEN + 1)) { k -= SAFER_BLOCK_LEN + 1; } + while (k >= (LTC_SAFER_BLOCK_LEN + 1)) { k -= LTC_SAFER_BLOCK_LEN + 1; } } - for (j = 0; j < SAFER_BLOCK_LEN; j++) { + for (j = 0; j < LTC_SAFER_BLOCK_LEN; j++) { if (strengthened) { *key++ = (ka[k] + safer_ebox[(int)safer_ebox[(int)((18 * i + j + 1)&0xFF)]]) & 0xFF; - if (++k == (SAFER_BLOCK_LEN + 1)) { k = 0; } + if (++k == (LTC_SAFER_BLOCK_LEN + 1)) { k = 0; } } else { *key++ = (ka[j] + safer_ebox[(int)safer_ebox[(int)((18 * i + j + 1)&0xFF)]]) & 0xFF; } } if (strengthened) { k = 2 * i; - while (k >= (SAFER_BLOCK_LEN + 1)) { k -= SAFER_BLOCK_LEN + 1; } + while (k >= (LTC_SAFER_BLOCK_LEN + 1)) { k -= LTC_SAFER_BLOCK_LEN + 1; } } - for (j = 0; j < SAFER_BLOCK_LEN; j++) { + for (j = 0; j < LTC_SAFER_BLOCK_LEN; j++) { if (strengthened) { *key++ = (kb[k] + safer_ebox[(int)safer_ebox[(int)((18 * i + j + 10)&0xFF)]]) & 0xFF; - if (++k == (SAFER_BLOCK_LEN + 1)) { k = 0; } + if (++k == (LTC_SAFER_BLOCK_LEN + 1)) { k = 0; } } else { *key++ = (kb[j] + safer_ebox[(int)safer_ebox[(int)((18 * i + j + 10)&0xFF)]]) & 0xFF; } @@ -173,7 +173,7 @@ static void Safer_Expand_Userkey(const unsigned char *userkey_1, safer_key_t key) { _Safer_Expand_Userkey(userkey_1, userkey_2, nof_rounds, strengthened, key); - burn_stack(sizeof(unsigned char) * (2 * (SAFER_BLOCK_LEN + 1)) + sizeof(unsigned int)*2); + burn_stack(sizeof(unsigned char) * (2 * (LTC_SAFER_BLOCK_LEN + 1)) + sizeof(unsigned int)*2); } #endif @@ -182,7 +182,7 @@ int safer_k64_setup(const unsigned char *key, int keylen, int numrounds, symmetr LTC_ARGCHK(key != NULL); LTC_ARGCHK(skey != NULL); - if (numrounds != 0 && (numrounds < 6 || numrounds > SAFER_MAX_NOF_ROUNDS)) { + if (numrounds != 0 && (numrounds < 6 || numrounds > LTC_SAFER_MAX_NOF_ROUNDS)) { return CRYPT_INVALID_ROUNDS; } @@ -190,7 +190,7 @@ int safer_k64_setup(const unsigned char *key, int keylen, int numrounds, symmetr return CRYPT_INVALID_KEYSIZE; } - Safer_Expand_Userkey(key, key, (unsigned int)(numrounds != 0 ?numrounds:SAFER_K64_DEFAULT_NOF_ROUNDS), 0, skey->safer.key); + Safer_Expand_Userkey(key, key, (unsigned int)(numrounds != 0 ?numrounds:LTC_SAFER_K64_DEFAULT_NOF_ROUNDS), 0, skey->safer.key); return CRYPT_OK; } @@ -199,7 +199,7 @@ int safer_sk64_setup(const unsigned char *key, int keylen, int numrounds, symmet LTC_ARGCHK(key != NULL); LTC_ARGCHK(skey != NULL); - if (numrounds != 0 && (numrounds < 6 || numrounds > SAFER_MAX_NOF_ROUNDS)) { + if (numrounds != 0 && (numrounds < 6 || numrounds > LTC_SAFER_MAX_NOF_ROUNDS)) { return CRYPT_INVALID_ROUNDS; } @@ -207,7 +207,7 @@ int safer_sk64_setup(const unsigned char *key, int keylen, int numrounds, symmet return CRYPT_INVALID_KEYSIZE; } - Safer_Expand_Userkey(key, key, (unsigned int)(numrounds != 0 ?numrounds:SAFER_SK64_DEFAULT_NOF_ROUNDS), 1, skey->safer.key); + Safer_Expand_Userkey(key, key, (unsigned int)(numrounds != 0 ?numrounds:LTC_SAFER_SK64_DEFAULT_NOF_ROUNDS), 1, skey->safer.key); return CRYPT_OK; } @@ -216,7 +216,7 @@ int safer_k128_setup(const unsigned char *key, int keylen, int numrounds, symmet LTC_ARGCHK(key != NULL); LTC_ARGCHK(skey != NULL); - if (numrounds != 0 && (numrounds < 6 || numrounds > SAFER_MAX_NOF_ROUNDS)) { + if (numrounds != 0 && (numrounds < 6 || numrounds > LTC_SAFER_MAX_NOF_ROUNDS)) { return CRYPT_INVALID_ROUNDS; } @@ -224,7 +224,7 @@ int safer_k128_setup(const unsigned char *key, int keylen, int numrounds, symmet return CRYPT_INVALID_KEYSIZE; } - Safer_Expand_Userkey(key, key+8, (unsigned int)(numrounds != 0 ?numrounds:SAFER_K128_DEFAULT_NOF_ROUNDS), 0, skey->safer.key); + Safer_Expand_Userkey(key, key+8, (unsigned int)(numrounds != 0 ?numrounds:LTC_SAFER_K128_DEFAULT_NOF_ROUNDS), 0, skey->safer.key); return CRYPT_OK; } @@ -233,7 +233,7 @@ int safer_sk128_setup(const unsigned char *key, int keylen, int numrounds, symme LTC_ARGCHK(key != NULL); LTC_ARGCHK(skey != NULL); - if (numrounds != 0 && (numrounds < 6 || numrounds > SAFER_MAX_NOF_ROUNDS)) { + if (numrounds != 0 && (numrounds < 6 || numrounds > LTC_SAFER_MAX_NOF_ROUNDS)) { return CRYPT_INVALID_ROUNDS; } @@ -241,7 +241,7 @@ int safer_sk128_setup(const unsigned char *key, int keylen, int numrounds, symme return CRYPT_INVALID_KEYSIZE; } - Safer_Expand_Userkey(key, key+8, (unsigned int)(numrounds != 0?numrounds:SAFER_SK128_DEFAULT_NOF_ROUNDS), 1, skey->safer.key); + Safer_Expand_Userkey(key, key+8, (unsigned int)(numrounds != 0?numrounds:LTC_SAFER_SK128_DEFAULT_NOF_ROUNDS), 1, skey->safer.key); return CRYPT_OK; } @@ -265,7 +265,7 @@ int safer_ecb_encrypt(const unsigned char *block_in, key = skey->safer.key; a = block_in[0]; b = block_in[1]; c = block_in[2]; d = block_in[3]; e = block_in[4]; f = block_in[5]; g = block_in[6]; h = block_in[7]; - if (SAFER_MAX_NOF_ROUNDS < (round = *key)) round = SAFER_MAX_NOF_ROUNDS; + if (LTC_SAFER_MAX_NOF_ROUNDS < (round = *key)) round = LTC_SAFER_MAX_NOF_ROUNDS; while(round-- > 0) { a ^= *++key; b += *++key; c += *++key; d ^= *++key; @@ -319,8 +319,8 @@ int safer_ecb_decrypt(const unsigned char *block_in, key = skey->safer.key; a = block_in[0]; b = block_in[1]; c = block_in[2]; d = block_in[3]; e = block_in[4]; f = block_in[5]; g = block_in[6]; h = block_in[7]; - if (SAFER_MAX_NOF_ROUNDS < (round = *key)) round = SAFER_MAX_NOF_ROUNDS; - key += SAFER_BLOCK_LEN * (1 + 2 * round); + if (LTC_SAFER_MAX_NOF_ROUNDS < (round = *key)) round = LTC_SAFER_MAX_NOF_ROUNDS; + key += LTC_SAFER_BLOCK_LEN * (1 + 2 * round); h ^= *key; g -= *--key; f -= *--key; e ^= *--key; d ^= *--key; c -= *--key; b -= *--key; a ^= *--key; while (round--) diff --git a/src/ciphers/safer/safer_tab.c b/src/ciphers/safer/safer_tab.c index f50a71781..9a515ff51 100644 --- a/src/ciphers/safer/safer_tab.c +++ b/src/ciphers/safer/safer_tab.c @@ -6,17 +6,17 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /** @file safer_tab.c - Tables for SAFER block ciphers + Tables for LTC_SAFER block ciphers */ #include "tomcrypt.h" -#if defined(SAFERP) || defined(SAFER) +#if defined(LTC_SAFERP) || defined(LTC_SAFER) /* This is the box defined by ebox[x] = 45^x mod 257. * Its assumed that the value "256" corresponds to zero. */ diff --git a/src/ciphers/safer/saferp.c b/src/ciphers/safer/saferp.c index 0b4880b90..8cecab05c 100644 --- a/src/ciphers/safer/saferp.c +++ b/src/ciphers/safer/saferp.c @@ -6,16 +6,16 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /** @file saferp.c - SAFER+ Implementation by Tom St Denis + LTC_SAFER+ Implementation by Tom St Denis */ #include "tomcrypt.h" -#ifdef SAFERP +#ifdef LTC_SAFERP const struct ltc_cipher_descriptor saferp_desc = { @@ -37,7 +37,7 @@ const struct ltc_cipher_descriptor saferp_desc = * key addition, substitution, key addition. The safer_ebox and safer_lbox * are the exponentiation box and logarithm boxes respectively. * The value of 'i' is the current round number which allows this - * function to be unrolled massively. Most of SAFER+'s speed + * function to be unrolled massively. Most of LTC_SAFER+'s speed * comes from not having to compute indirect accesses into the * array of 16 bytes b[0..15] which is the block of data */ @@ -206,7 +206,7 @@ static const unsigned char safer_bias[33][16] = { { 62, 220, 134, 119, 215, 166, 17, 251, 244, 186, 146, 145, 100, 131, 241, 51}}; /** - Initialize the SAFER+ block cipher + Initialize the LTC_SAFER+ block cipher @param key The symmetric key you wish to pass @param keylen The key length in bytes @param num_rounds The number of rounds desired (0 for default) @@ -325,7 +325,7 @@ int saferp_setup(const unsigned char *key, int keylen, int num_rounds, symmetric } /** - Encrypts a block of text with SAFER+ + Encrypts a block of text with LTC_SAFER+ @param pt The input plaintext (16 bytes) @param ct The output ciphertext (16 bytes) @param skey The key as scheduled @@ -389,7 +389,7 @@ int saferp_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key } /** - Decrypts a block of text with SAFER+ + Decrypts a block of text with LTC_SAFER+ @param ct The input ciphertext (16 bytes) @param pt The output plaintext (16 bytes) @param skey The key as scheduled @@ -453,7 +453,7 @@ int saferp_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key } /** - Performs a self-test of the SAFER+ block cipher + Performs a self-test of the LTC_SAFER+ block cipher @return CRYPT_OK if functional, CRYPT_NOP if self-test has been disabled */ int saferp_test(void) diff --git a/src/ciphers/skipjack.c b/src/ciphers/skipjack.c index bcdea90d9..89e9a5646 100644 --- a/src/ciphers/skipjack.c +++ b/src/ciphers/skipjack.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /** @@ -15,7 +15,7 @@ */ #include "tomcrypt.h" -#ifdef SKIPJACK +#ifdef LTC_SKIPJACK const struct ltc_cipher_descriptor skipjack_desc = { diff --git a/src/ciphers/twofish/twofish.c b/src/ciphers/twofish/twofish.c index ea842fa84..e96bf67ab 100644 --- a/src/ciphers/twofish/twofish.c +++ b/src/ciphers/twofish/twofish.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /** @@ -15,12 +15,12 @@ */ #include "tomcrypt.h" -#ifdef TWOFISH +#ifdef LTC_TWOFISH -/* first TWOFISH_ALL_TABLES must ensure TWOFISH_TABLES is defined */ -#ifdef TWOFISH_ALL_TABLES -#ifndef TWOFISH_TABLES -#define TWOFISH_TABLES +/* first LTC_TWOFISH_ALL_TABLES must ensure LTC_TWOFISH_TABLES is defined */ +#ifdef LTC_TWOFISH_ALL_TABLES +#ifndef LTC_TWOFISH_TABLES +#define LTC_TWOFISH_TABLES #endif #endif @@ -66,7 +66,7 @@ static const unsigned char qord[4][5] = { { 1, 0, 1, 1, 0 } }; -#ifdef TWOFISH_TABLES +#ifdef LTC_TWOFISH_TABLES #include "twofish_tab.c" @@ -140,7 +140,7 @@ static ulong32 sbox(int i, ulong32 x) } #endif /* LTC_CLEAN_STACK */ -#endif /* TWOFISH_TABLES */ +#endif /* LTC_TWOFISH_TABLES */ /* computes ab mod p */ static ulong32 gf_mult(ulong32 a, ulong32 b, ulong32 p) @@ -165,7 +165,7 @@ static ulong32 gf_mult(ulong32 a, ulong32 b, ulong32 p) } /* computes [y0 y1 y2 y3] = MDS . [x0] */ -#ifndef TWOFISH_TABLES +#ifndef LTC_TWOFISH_TABLES static ulong32 mds_column_mult(unsigned char in, int col) { ulong32 x01, x5B, xEF; @@ -200,11 +200,11 @@ static ulong32 mds_column_mult(unsigned char in, int col) return 0; } -#else /* !TWOFISH_TABLES */ +#else /* !LTC_TWOFISH_TABLES */ #define mds_column_mult(x, i) mds_tab[i][x] -#endif /* TWOFISH_TABLES */ +#endif /* LTC_TWOFISH_TABLES */ /* Computes [y0 y1 y2 y3] = MDS . [x0 x1 x2 x3] */ static void mds_mult(const unsigned char *in, unsigned char *out) @@ -217,7 +217,7 @@ static void mds_mult(const unsigned char *in, unsigned char *out) STORE32L(tmp, out); } -#ifdef TWOFISH_ALL_TABLES +#ifdef LTC_TWOFISH_ALL_TABLES /* computes [y0 y1 y2 y3] = RS . [x0 x1 x2 x3 x4 x5 x6 x7] */ static void rs_mult(const unsigned char *in, unsigned char *out) { @@ -227,7 +227,7 @@ static void rs_mult(const unsigned char *in, unsigned char *out) STORE32L(tmp, out); } -#else /* !TWOFISH_ALL_TABLES */ +#else /* !LTC_TWOFISH_ALL_TABLES */ /* computes [y0 y1 y2 y3] = RS . [x0 x1 x2 x3 x4 x5 x6 x7] */ static void rs_mult(const unsigned char *in, unsigned char *out) @@ -271,7 +271,7 @@ static void h_func(const unsigned char *in, unsigned char *out, unsigned char *M mds_mult(y, out); } -#ifndef TWOFISH_SMALL +#ifndef LTC_TWOFISH_SMALL /* for GCC we don't use pointer aliases */ #if defined(__GNUC__) @@ -330,7 +330,7 @@ static ulong32 g_func(ulong32 x, symmetric_key *key) } #endif /* LTC_CLEAN_STACK */ -#endif /* TWOFISH_SMALL */ +#endif /* LTC_TWOFISH_SMALL */ /** Initialize the Twofish block cipher @@ -346,7 +346,7 @@ static int _twofish_setup(const unsigned char *key, int keylen, int num_rounds, int twofish_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey) #endif { -#ifndef TWOFISH_SMALL +#ifndef LTC_TWOFISH_SMALL unsigned char S[4*4], tmpx0, tmpx1; #endif int k, x, y; @@ -374,7 +374,7 @@ int twofish_setup(const unsigned char *key, int keylen, int num_rounds, symmetri } /* create the S[..] words */ -#ifndef TWOFISH_SMALL +#ifndef LTC_TWOFISH_SMALL for (x = 0; x < k; x++) { rs_mult(M+(x*8), S+(x*4)); } @@ -408,7 +408,7 @@ int twofish_setup(const unsigned char *key, int keylen, int num_rounds, symmetri skey->twofish.K[x+x+1] = ROLc(B + B + A, 9); } -#ifndef TWOFISH_SMALL +#ifndef LTC_TWOFISH_SMALL /* make the sboxes (large ram variant) */ if (k == 2) { for (x = 0; x < 256; x++) { @@ -475,7 +475,7 @@ int twofish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_ke { ulong32 a,b,c,d,ta,tb,tc,td,t1,t2, *k; int r; -#if !defined(TWOFISH_SMALL) && !defined(__GNUC__) +#if !defined(LTC_TWOFISH_SMALL) && !defined(__GNUC__) ulong32 *S1, *S2, *S3, *S4; #endif @@ -483,7 +483,7 @@ int twofish_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_ke LTC_ARGCHK(ct != NULL); LTC_ARGCHK(skey != NULL); -#if !defined(TWOFISH_SMALL) && !defined(__GNUC__) +#if !defined(LTC_TWOFISH_SMALL) && !defined(__GNUC__) S1 = skey->twofish.S[0]; S2 = skey->twofish.S[1]; S3 = skey->twofish.S[2]; @@ -548,7 +548,7 @@ int twofish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_ke { ulong32 a,b,c,d,ta,tb,tc,td,t1,t2, *k; int r; -#if !defined(TWOFISH_SMALL) && !defined(__GNUC__) +#if !defined(LTC_TWOFISH_SMALL) && !defined(__GNUC__) ulong32 *S1, *S2, *S3, *S4; #endif @@ -556,7 +556,7 @@ int twofish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_ke LTC_ARGCHK(ct != NULL); LTC_ARGCHK(skey != NULL); -#if !defined(TWOFISH_SMALL) && !defined(__GNUC__) +#if !defined(LTC_TWOFISH_SMALL) && !defined(__GNUC__) S1 = skey->twofish.S[0]; S2 = skey->twofish.S[1]; S3 = skey->twofish.S[2]; diff --git a/src/ciphers/twofish/twofish_tab.c b/src/ciphers/twofish/twofish_tab.c index cdd628b8f..ea3eb21b4 100644 --- a/src/ciphers/twofish/twofish_tab.c +++ b/src/ciphers/twofish/twofish_tab.c @@ -6,14 +6,14 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /** @file twofish_tab.c Twofish tables, Tom St Denis */ -#ifdef TWOFISH_TABLES +#ifdef LTC_TWOFISH_TABLES /* pre generated 8x8 tables from the four 4x4s */ static const unsigned char SBOX[2][256] = { @@ -212,7 +212,7 @@ static const ulong32 mds_tab[4][256] = { 0xc6baf8c6UL, 0x9d55f99dUL, 0x700dfa70UL, 0x2be2fb2bUL, 0xc3bdfcc3UL, 0x9852fd98UL, 0x750afe75UL, 0x2ee5ff2eUL }}; -#ifdef TWOFISH_ALL_TABLES +#ifdef LTC_TWOFISH_ALL_TABLES /* the 4x8 RS transform */ static const ulong32 rs_tab0[256] = { @@ -487,7 +487,7 @@ static const ulong32 rs_tab7[256] = { 0x5d8218b2LU, 0x5e9bfd2cLU, 0x5bb09fc3LU, 0x58a97a5dLU, 0x51e65b50LU, 0x52ffbeceLU, 0x57d4dc21LU, 0x54cd39bfLU, 0x454a9e3bLU, 0x46537ba5LU, 0x4378194aLU, 0x4061fcd4LU, 0x492eddd9LU, 0x4a373847LU, 0x4f1c5aa8LU, 0x4c05bf36LU }; -#endif /* TWOFISH_ALL_TABLES */ +#endif /* LTC_TWOFISH_ALL_TABLES */ #endif diff --git a/src/ciphers/xtea.c b/src/ciphers/xtea.c index cc9d191f9..d907e54e3 100644 --- a/src/ciphers/xtea.c +++ b/src/ciphers/xtea.c @@ -6,16 +6,16 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /** @file xtea.c - Implementation of XTEA, Tom St Denis + Implementation of LTC_XTEA, Tom St Denis */ #include "tomcrypt.h" -#ifdef XTEA +#ifdef LTC_XTEA const struct ltc_cipher_descriptor xtea_desc = { @@ -67,7 +67,7 @@ int xtea_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_k } /** - Encrypts a block of text with XTEA + Encrypts a block of text with LTC_XTEA @param pt The input plaintext (8 bytes) @param ct The output ciphertext (8 bytes) @param skey The key as scheduled @@ -103,7 +103,7 @@ int xtea_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key * } /** - Decrypts a block of text with XTEA + Decrypts a block of text with LTC_XTEA @param ct The input ciphertext (8 bytes) @param pt The output plaintext (8 bytes) @param skey The key as scheduled @@ -139,7 +139,7 @@ int xtea_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key * } /** - Performs a self-test of the XTEA block cipher + Performs a self-test of the LTC_XTEA block cipher @return CRYPT_OK if functional, CRYPT_NOP if self-test has been disabled */ int xtea_test(void) diff --git a/src/encauth/ccm/ccm_memory.c b/src/encauth/ccm/ccm_memory.c index e57f46ef5..abd8653cb 100644 --- a/src/encauth/ccm/ccm_memory.c +++ b/src/encauth/ccm/ccm_memory.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" @@ -15,7 +15,7 @@ CCM support, process a block of memory, Tom St Denis */ -#ifdef CCM_MODE +#ifdef LTC_CCM_MODE /** CCM encrypt/decrypt and produce an authentication tag diff --git a/src/encauth/ccm/ccm_test.c b/src/encauth/ccm/ccm_test.c index 3481962b6..9b63ffc5b 100644 --- a/src/encauth/ccm/ccm_test.c +++ b/src/encauth/ccm/ccm_test.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" @@ -15,7 +15,7 @@ CCM support, process a block of memory, Tom St Denis */ -#ifdef CCM_MODE +#ifdef LTC_CCM_MODE int ccm_test(void) { diff --git a/src/encauth/eax/eax_addheader.c b/src/encauth/eax/eax_addheader.c index 2389cfd43..d06e921c0 100644 --- a/src/encauth/eax/eax_addheader.c +++ b/src/encauth/eax/eax_addheader.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /** @file eax_addheader.c @@ -14,7 +14,7 @@ */ #include "tomcrypt.h" -#ifdef EAX_MODE +#ifdef LTC_EAX_MODE /** add header (metadata) to the stream diff --git a/src/encauth/eax/eax_decrypt.c b/src/encauth/eax/eax_decrypt.c index 59a01c10b..185330ff4 100644 --- a/src/encauth/eax/eax_decrypt.c +++ b/src/encauth/eax/eax_decrypt.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /** @@ -15,7 +15,7 @@ */ #include "tomcrypt.h" -#ifdef EAX_MODE +#ifdef LTC_EAX_MODE /** Decrypt data with the EAX protocol diff --git a/src/encauth/eax/eax_decrypt_verify_memory.c b/src/encauth/eax/eax_decrypt_verify_memory.c index b1de421e3..7956142f7 100644 --- a/src/encauth/eax/eax_decrypt_verify_memory.c +++ b/src/encauth/eax/eax_decrypt_verify_memory.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /** @@ -15,7 +15,7 @@ */ #include "tomcrypt.h" -#ifdef EAX_MODE +#ifdef LTC_EAX_MODE /** Decrypt a block of memory and verify the provided MAC tag with EAX diff --git a/src/encauth/eax/eax_done.c b/src/encauth/eax/eax_done.c index 91ee22ae5..0bb0b3324 100644 --- a/src/encauth/eax/eax_done.c +++ b/src/encauth/eax/eax_done.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /** @@ -15,7 +15,7 @@ */ #include "tomcrypt.h" -#ifdef EAX_MODE +#ifdef LTC_EAX_MODE /** Terminate an EAX session and get the tag. diff --git a/src/encauth/eax/eax_encrypt.c b/src/encauth/eax/eax_encrypt.c index 501a0c331..79f9dc568 100644 --- a/src/encauth/eax/eax_encrypt.c +++ b/src/encauth/eax/eax_encrypt.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /** @@ -15,7 +15,7 @@ */ #include "tomcrypt.h" -#ifdef EAX_MODE +#ifdef LTC_EAX_MODE /** Encrypt with EAX a block of data. diff --git a/src/encauth/eax/eax_encrypt_authenticate_memory.c b/src/encauth/eax/eax_encrypt_authenticate_memory.c index 520d37c4e..fc58ce63e 100644 --- a/src/encauth/eax/eax_encrypt_authenticate_memory.c +++ b/src/encauth/eax/eax_encrypt_authenticate_memory.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /** @@ -15,7 +15,7 @@ */ #include "tomcrypt.h" -#ifdef EAX_MODE +#ifdef LTC_EAX_MODE /** EAX encrypt and produce an authentication tag diff --git a/src/encauth/eax/eax_init.c b/src/encauth/eax/eax_init.c index a73a2b6e5..563eabf9b 100644 --- a/src/encauth/eax/eax_init.c +++ b/src/encauth/eax/eax_init.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /** @@ -15,7 +15,7 @@ */ #include "tomcrypt.h" -#ifdef EAX_MODE +#ifdef LTC_EAX_MODE /** Initialized an EAX state @@ -66,7 +66,7 @@ int eax_init(eax_state *eax, int cipher, return CRYPT_MEM; } - /* N = OMAC_0K(nonce) */ + /* N = LTC_OMAC_0K(nonce) */ zeromem(buf, MAXBLOCKSIZE); if ((err = omac_init(omac, cipher, key, keylen)) != CRYPT_OK) { goto LBL_ERR; @@ -86,7 +86,7 @@ int eax_init(eax_state *eax, int cipher, goto LBL_ERR; } - /* H = OMAC_1K(header) */ + /* H = LTC_OMAC_1K(header) */ zeromem(buf, MAXBLOCKSIZE); buf[blklen - 1] = 1; @@ -112,7 +112,7 @@ int eax_init(eax_state *eax, int cipher, goto LBL_ERR; } - /* setup the OMAC for the ciphertext */ + /* setup the LTC_OMAC for the ciphertext */ if ((err = omac_init(&eax->ctomac, cipher, key, keylen)) != CRYPT_OK) { goto LBL_ERR; } diff --git a/src/encauth/eax/eax_test.c b/src/encauth/eax/eax_test.c index a1c992fc1..5babef2ee 100644 --- a/src/encauth/eax/eax_test.c +++ b/src/encauth/eax/eax_test.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /** @@ -15,7 +15,7 @@ */ #include "tomcrypt.h" -#ifdef EAX_MODE +#ifdef LTC_EAX_MODE /** Test the EAX implementation @@ -275,7 +275,7 @@ int eax_test(void) #endif /* LTC_TEST */ } -#endif /* EAX_MODE */ +#endif /* LTC_EAX_MODE */ /* $Source$ */ /* $Revision$ */ diff --git a/src/encauth/gcm/gcm_add_aad.c b/src/encauth/gcm/gcm_add_aad.c index c85914642..26e47f647 100644 --- a/src/encauth/gcm/gcm_add_aad.c +++ b/src/encauth/gcm/gcm_add_aad.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /** @@ -15,7 +15,7 @@ */ #include "tomcrypt.h" -#ifdef GCM_MODE +#ifdef LTC_GCM_MODE /** Add AAD to the GCM state @@ -47,7 +47,7 @@ int gcm_add_aad(gcm_state *gcm, } /* in IV mode? */ - if (gcm->mode == GCM_MODE_IV) { + if (gcm->mode == LTC_GCM_MODE_IV) { /* let's process the IV */ if (gcm->ivmode || gcm->buflen != 12) { for (x = 0; x < (unsigned long)gcm->buflen; x++) { @@ -80,10 +80,10 @@ int gcm_add_aad(gcm_state *gcm, zeromem(gcm->buf, 16); gcm->buflen = 0; gcm->totlen = 0; - gcm->mode = GCM_MODE_AAD; + gcm->mode = LTC_GCM_MODE_AAD; } - if (gcm->mode != GCM_MODE_AAD || gcm->buflen >= 16) { + if (gcm->mode != LTC_GCM_MODE_AAD || gcm->buflen >= 16) { return CRYPT_INVALID_ARG; } diff --git a/src/encauth/gcm/gcm_add_iv.c b/src/encauth/gcm/gcm_add_iv.c index 27324b2dd..0ac79b6be 100644 --- a/src/encauth/gcm/gcm_add_iv.c +++ b/src/encauth/gcm/gcm_add_iv.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /** @@ -15,7 +15,7 @@ */ #include "tomcrypt.h" -#ifdef GCM_MODE +#ifdef LTC_GCM_MODE /** Add IV data to the GCM state @@ -36,7 +36,7 @@ int gcm_add_iv(gcm_state *gcm, } /* must be in IV mode */ - if (gcm->mode != GCM_MODE_IV) { + if (gcm->mode != LTC_GCM_MODE_IV) { return CRYPT_INVALID_ARG; } diff --git a/src/encauth/gcm/gcm_done.c b/src/encauth/gcm/gcm_done.c index 3acfb7512..bbc9bbe23 100644 --- a/src/encauth/gcm/gcm_done.c +++ b/src/encauth/gcm/gcm_done.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /** @@ -15,7 +15,7 @@ */ #include "tomcrypt.h" -#ifdef GCM_MODE +#ifdef LTC_GCM_MODE /** Terminate a GCM stream @@ -43,7 +43,7 @@ int gcm_done(gcm_state *gcm, } - if (gcm->mode != GCM_MODE_TEXT) { + if (gcm->mode != LTC_GCM_MODE_TEXT) { return CRYPT_INVALID_ARG; } diff --git a/src/encauth/gcm/gcm_gf_mult.c b/src/encauth/gcm/gcm_gf_mult.c index 3acf40feb..72e06244d 100644 --- a/src/encauth/gcm/gcm_gf_mult.c +++ b/src/encauth/gcm/gcm_gf_mult.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /** @@ -15,7 +15,7 @@ */ #include "tomcrypt.h" -#if defined(GCM_TABLES) || defined(LRW_TABLES) || ((defined(GCM_MODE) || defined(GCM_MODE)) && defined(LTC_FAST)) +#if defined(LTC_GCM_TABLES) || defined(LRW_TABLES) || ((defined(LTC_GCM_MODE) || defined(LTC_GCM_MODE)) && defined(LTC_FAST)) /* this is x*2^128 mod p(x) ... the results are 16 bytes each stored in a packed format. Since only the * lower 16 bits are not zero'ed I removed the upper 14 bytes */ @@ -56,7 +56,7 @@ const unsigned char gcm_shift_table[256*2] = { #endif -#if defined(GCM_MODE) || defined(LRW_MODE) +#if defined(LTC_GCM_MODE) || defined(LRW_MODE) #ifndef LTC_FAST /* right shift */ diff --git a/src/encauth/gcm/gcm_init.c b/src/encauth/gcm/gcm_init.c index b5d57dbd9..8e1c496b3 100644 --- a/src/encauth/gcm/gcm_init.c +++ b/src/encauth/gcm/gcm_init.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /** @@ -15,7 +15,7 @@ */ #include "tomcrypt.h" -#ifdef GCM_MODE +#ifdef LTC_GCM_MODE /** Initialize a GCM state @@ -30,7 +30,7 @@ int gcm_init(gcm_state *gcm, int cipher, { int err; unsigned char B[16]; -#ifdef GCM_TABLES +#ifdef LTC_GCM_TABLES int x, y, z, t; #endif @@ -66,13 +66,13 @@ int gcm_init(gcm_state *gcm, int cipher, zeromem(gcm->buf, sizeof(gcm->buf)); zeromem(gcm->X, sizeof(gcm->X)); gcm->cipher = cipher; - gcm->mode = GCM_MODE_IV; + gcm->mode = LTC_GCM_MODE_IV; gcm->ivmode = 0; gcm->buflen = 0; gcm->totlen = 0; gcm->pttotlen = 0; -#ifdef GCM_TABLES +#ifdef LTC_GCM_TABLES /* setup tables */ /* generate the first table as it has no shifting (from which we make the other tables) */ diff --git a/src/encauth/gcm/gcm_memory.c b/src/encauth/gcm/gcm_memory.c index 7f231c787..451e3fa4a 100644 --- a/src/encauth/gcm/gcm_memory.c +++ b/src/encauth/gcm/gcm_memory.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /** @@ -15,7 +15,7 @@ */ #include "tomcrypt.h" -#ifdef GCM_MODE +#ifdef LTC_GCM_MODE /** Process an entire GCM packet in one call. @@ -65,7 +65,7 @@ int gcm_memory( int cipher, -#ifndef GCM_TABLES_SSE2 +#ifndef LTC_GCM_TABLES_SSE2 orig = gcm = XMALLOC(sizeof(*gcm)); #else orig = gcm = XMALLOC(sizeof(*gcm) + 16); @@ -78,7 +78,7 @@ int gcm_memory( int cipher, * note that we only modify gcm and keep orig intact. This code is not portable * but again it's only for SSE2 anyways, so who cares? */ -#ifdef GCM_TABLES_SSE2 +#ifdef LTC_GCM_TABLES_SSE2 if ((unsigned long)gcm & 15) { gcm = (gcm_state *)((unsigned long)gcm + (16 - ((unsigned long)gcm & 15))); } diff --git a/src/encauth/gcm/gcm_mult_h.c b/src/encauth/gcm/gcm_mult_h.c index 627eb9b14..2cda6a4bf 100644 --- a/src/encauth/gcm/gcm_mult_h.c +++ b/src/encauth/gcm/gcm_mult_h.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /** @@ -15,7 +15,7 @@ */ #include "tomcrypt.h" -#if defined(GCM_MODE) +#if defined(LTC_GCM_MODE) /** GCM multiply by H @param gcm The GCM state which holds the H value @@ -24,9 +24,9 @@ void gcm_mult_h(gcm_state *gcm, unsigned char *I) { unsigned char T[16]; -#ifdef GCM_TABLES +#ifdef LTC_GCM_TABLES int x, y; -#ifdef GCM_TABLES_SSE2 +#ifdef LTC_GCM_TABLES_SSE2 asm("movdqa (%0),%%xmm0"::"r"(&gcm->PC[0][I[0]][0])); for (x = 1; x < 16; x++) { asm("pxor (%0),%%xmm0"::"r"(&gcm->PC[x][I[x]][0])); @@ -45,7 +45,7 @@ void gcm_mult_h(gcm_state *gcm, unsigned char *I) } #endif /* LTC_FAST */ } -#endif /* GCM_TABLES_SSE2 */ +#endif /* LTC_GCM_TABLES_SSE2 */ #else gcm_gf_mult(gcm->H, I, T); #endif diff --git a/src/encauth/gcm/gcm_process.c b/src/encauth/gcm/gcm_process.c index 20eb66043..af0444d0c 100644 --- a/src/encauth/gcm/gcm_process.c +++ b/src/encauth/gcm/gcm_process.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /** @@ -15,7 +15,7 @@ */ #include "tomcrypt.h" -#ifdef GCM_MODE +#ifdef LTC_GCM_MODE /** Process plaintext/ciphertext through GCM @@ -50,7 +50,7 @@ int gcm_process(gcm_state *gcm, } /* in AAD mode? */ - if (gcm->mode == GCM_MODE_AAD) { + if (gcm->mode == LTC_GCM_MODE_AAD) { /* let's process the AAD */ if (gcm->buflen) { gcm->totlen += gcm->buflen * CONST64(8); @@ -67,10 +67,10 @@ int gcm_process(gcm_state *gcm, } gcm->buflen = 0; - gcm->mode = GCM_MODE_TEXT; + gcm->mode = LTC_GCM_MODE_TEXT; } - if (gcm->mode != GCM_MODE_TEXT) { + if (gcm->mode != LTC_GCM_MODE_TEXT) { return CRYPT_INVALID_ARG; } diff --git a/src/encauth/gcm/gcm_reset.c b/src/encauth/gcm/gcm_reset.c index 6dd73c902..c9e13d968 100644 --- a/src/encauth/gcm/gcm_reset.c +++ b/src/encauth/gcm/gcm_reset.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /** @@ -15,7 +15,7 @@ */ #include "tomcrypt.h" -#ifdef GCM_MODE +#ifdef LTC_GCM_MODE /** Reset a GCM state to as if you just called gcm_init(). This saves the initialization time. @@ -28,7 +28,7 @@ int gcm_reset(gcm_state *gcm) zeromem(gcm->buf, sizeof(gcm->buf)); zeromem(gcm->X, sizeof(gcm->X)); - gcm->mode = GCM_MODE_IV; + gcm->mode = LTC_GCM_MODE_IV; gcm->ivmode = 0; gcm->buflen = 0; gcm->totlen = 0; diff --git a/src/encauth/gcm/gcm_test.c b/src/encauth/gcm/gcm_test.c index e712f8c95..7380c8109 100644 --- a/src/encauth/gcm/gcm_test.c +++ b/src/encauth/gcm/gcm_test.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /** @@ -15,7 +15,7 @@ */ #include "tomcrypt.h" -#ifdef GCM_MODE +#ifdef LTC_GCM_MODE /** Test the GCM code diff --git a/src/encauth/ocb/ocb_decrypt.c b/src/encauth/ocb/ocb_decrypt.c index e77a8bed4..61003db03 100644 --- a/src/encauth/ocb/ocb_decrypt.c +++ b/src/encauth/ocb/ocb_decrypt.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /** @@ -15,7 +15,7 @@ */ #include "tomcrypt.h" -#ifdef OCB_MODE +#ifdef LTC_OCB_MODE /** Decrypt a block with OCB. diff --git a/src/encauth/ocb/ocb_decrypt_verify_memory.c b/src/encauth/ocb/ocb_decrypt_verify_memory.c index fca6adcdb..6644618c8 100644 --- a/src/encauth/ocb/ocb_decrypt_verify_memory.c +++ b/src/encauth/ocb/ocb_decrypt_verify_memory.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /** @@ -15,7 +15,7 @@ */ #include "tomcrypt.h" -#ifdef OCB_MODE +#ifdef LTC_OCB_MODE /** Decrypt and compare the tag with OCB. diff --git a/src/encauth/ocb/ocb_done_decrypt.c b/src/encauth/ocb/ocb_done_decrypt.c index 1a0f9814d..d604b36b1 100644 --- a/src/encauth/ocb/ocb_done_decrypt.c +++ b/src/encauth/ocb/ocb_done_decrypt.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /** @@ -15,7 +15,7 @@ */ #include "tomcrypt.h" -#ifdef OCB_MODE +#ifdef LTC_OCB_MODE /** Terminate a decrypting OCB state diff --git a/src/encauth/ocb/ocb_done_encrypt.c b/src/encauth/ocb/ocb_done_encrypt.c index 837991c98..276d50e91 100644 --- a/src/encauth/ocb/ocb_done_encrypt.c +++ b/src/encauth/ocb/ocb_done_encrypt.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /** @@ -15,7 +15,7 @@ */ #include "tomcrypt.h" -#ifdef OCB_MODE +#ifdef LTC_OCB_MODE /** Terminate an encryption OCB state diff --git a/src/encauth/ocb/ocb_encrypt.c b/src/encauth/ocb/ocb_encrypt.c index 097e0b3a1..84afa66ee 100644 --- a/src/encauth/ocb/ocb_encrypt.c +++ b/src/encauth/ocb/ocb_encrypt.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /** @@ -15,7 +15,7 @@ */ #include "tomcrypt.h" -#ifdef OCB_MODE +#ifdef LTC_OCB_MODE /** Encrypt a block of data with OCB. diff --git a/src/encauth/ocb/ocb_encrypt_authenticate_memory.c b/src/encauth/ocb/ocb_encrypt_authenticate_memory.c index d42fda808..f81cc4b98 100644 --- a/src/encauth/ocb/ocb_encrypt_authenticate_memory.c +++ b/src/encauth/ocb/ocb_encrypt_authenticate_memory.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /** @@ -15,7 +15,7 @@ */ #include "tomcrypt.h" -#ifdef OCB_MODE +#ifdef LTC_OCB_MODE /** Encrypt and generate an authentication code for a buffer of memory diff --git a/src/encauth/ocb/ocb_init.c b/src/encauth/ocb/ocb_init.c index fc00b2284..604ae0e8c 100644 --- a/src/encauth/ocb/ocb_init.c +++ b/src/encauth/ocb/ocb_init.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /** @@ -15,7 +15,7 @@ */ #include "tomcrypt.h" -#ifdef OCB_MODE +#ifdef LTC_OCB_MODE static const struct { int len; diff --git a/src/encauth/ocb/ocb_ntz.c b/src/encauth/ocb/ocb_ntz.c index f472553c7..c3e42f17e 100644 --- a/src/encauth/ocb/ocb_ntz.c +++ b/src/encauth/ocb/ocb_ntz.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /** @@ -16,7 +16,7 @@ #include "tomcrypt.h" -#ifdef OCB_MODE +#ifdef LTC_OCB_MODE /** Returns the number of leading zero bits [from lsb up] diff --git a/src/encauth/ocb/ocb_shift_xor.c b/src/encauth/ocb/ocb_shift_xor.c index 934fca2c1..145f4c423 100644 --- a/src/encauth/ocb/ocb_shift_xor.c +++ b/src/encauth/ocb/ocb_shift_xor.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /** @@ -15,7 +15,7 @@ */ #include "tomcrypt.h" -#ifdef OCB_MODE +#ifdef LTC_OCB_MODE /** Compute the shift/xor for OCB (internal function) diff --git a/src/encauth/ocb/ocb_test.c b/src/encauth/ocb/ocb_test.c index cf1eb5889..8de1a576e 100644 --- a/src/encauth/ocb/ocb_test.c +++ b/src/encauth/ocb/ocb_test.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /** @@ -15,7 +15,7 @@ */ #include "tomcrypt.h" -#ifdef OCB_MODE +#ifdef LTC_OCB_MODE /** Test the OCB protocol @@ -222,7 +222,7 @@ int ocb_test(void) #endif /* LTC_TEST */ } -#endif /* OCB_MODE */ +#endif /* LTC_OCB_MODE */ /* some comments diff --git a/src/encauth/ocb/s_ocb_done.c b/src/encauth/ocb/s_ocb_done.c index 98cf92e15..37a7cb736 100644 --- a/src/encauth/ocb/s_ocb_done.c +++ b/src/encauth/ocb/s_ocb_done.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /** @@ -15,7 +15,7 @@ */ #include "tomcrypt.h" -#ifdef OCB_MODE +#ifdef LTC_OCB_MODE /* Since the last block is encrypted in CTR mode the same code can * be used to finish a decrypt or encrypt stream. The only difference diff --git a/src/hashes/chc/chc.c b/src/hashes/chc/chc.c index a2cc3c803..2c061e3c5 100644 --- a/src/hashes/chc/chc.c +++ b/src/hashes/chc/chc.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" @@ -16,7 +16,7 @@ CHC support. (Tom St Denis) */ -#ifdef CHC_HASH +#ifdef LTC_CHC_HASH #define UNDEFED_HASH -17 diff --git a/src/hashes/helper/hash_file.c b/src/hashes/helper/hash_file.c index a030f99fa..c9714a058 100644 --- a/src/hashes/helper/hash_file.c +++ b/src/hashes/helper/hash_file.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/hashes/helper/hash_filehandle.c b/src/hashes/helper/hash_filehandle.c index 1c9b68b77..3eb6f0ce4 100644 --- a/src/hashes/helper/hash_filehandle.c +++ b/src/hashes/helper/hash_filehandle.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/hashes/helper/hash_memory.c b/src/hashes/helper/hash_memory.c index 17579d067..853183a81 100644 --- a/src/hashes/helper/hash_memory.c +++ b/src/hashes/helper/hash_memory.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/hashes/helper/hash_memory_multi.c b/src/hashes/helper/hash_memory_multi.c index c1e3a8b77..ef39646f6 100644 --- a/src/hashes/helper/hash_memory_multi.c +++ b/src/hashes/helper/hash_memory_multi.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" #include diff --git a/src/hashes/md2.c b/src/hashes/md2.c index d7d556eec..5a65d7ee4 100644 --- a/src/hashes/md2.c +++ b/src/hashes/md2.c @@ -6,16 +6,16 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" /** @param md2.c - MD2 (RFC 1319) hash function implementation by Tom St Denis + LTC_MD2 (RFC 1319) hash function implementation by Tom St Denis */ -#ifdef MD2 +#ifdef LTC_MD2 const struct ltc_hash_descriptor md2_desc = { @@ -102,7 +102,7 @@ int md2_init(hash_state *md) { LTC_ARGCHK(md != NULL); - /* MD2 uses a zero'ed state... */ + /* LTC_MD2 uses a zero'ed state... */ zeromem(md->md2.X, sizeof(md->md2.X)); zeromem(md->md2.chksum, sizeof(md->md2.chksum)); zeromem(md->md2.buf, sizeof(md->md2.buf)); diff --git a/src/hashes/md4.c b/src/hashes/md4.c index ad4945007..adf916b0c 100644 --- a/src/hashes/md4.c +++ b/src/hashes/md4.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" @@ -15,7 +15,7 @@ Submitted by Dobes Vandermeer (dobes@smartt.com) */ -#ifdef MD4 +#ifdef LTC_MD4 const struct ltc_hash_descriptor md4_desc = { @@ -48,7 +48,7 @@ const struct ltc_hash_descriptor md4_desc = #define S33 11 #define S34 15 -/* F, G and H are basic MD4 functions. */ +/* F, G and H are basic LTC_MD4 functions. */ #define F(x, y, z) (z ^ (x & (y ^ z))) #define G(x, y, z) ((x & y) | (z & (x | y))) #define H(x, y, z) ((x) ^ (y) ^ (z)) diff --git a/src/hashes/md5.c b/src/hashes/md5.c index 4ec21e060..4fa1e9e17 100644 --- a/src/hashes/md5.c +++ b/src/hashes/md5.c @@ -6,17 +6,17 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" /** @file md5.c - MD5 hash function by Tom St Denis + LTC_MD5 hash function by Tom St Denis */ -#ifdef MD5 +#ifdef LTC_MD5 const struct ltc_hash_descriptor md5_desc = { diff --git a/src/hashes/rmd128.c b/src/hashes/rmd128.c index 9a2ec77d1..58ae92716 100644 --- a/src/hashes/rmd128.c +++ b/src/hashes/rmd128.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" @@ -15,13 +15,13 @@ RMD128 Hash function */ -/* Implementation of RIPEMD-128 based on the source by Antoon Bosselaers, ESAT-COSIC +/* Implementation of LTC_RIPEMD-128 based on the source by Antoon Bosselaers, ESAT-COSIC * * This source has been radically overhauled to be portable and work within * the LibTomCrypt API by Tom St Denis */ -#ifdef RIPEMD128 +#ifdef LTC_RIPEMD128 const struct ltc_hash_descriptor rmd128_desc = { diff --git a/src/hashes/rmd160.c b/src/hashes/rmd160.c index 8b288ee48..1313e415f 100644 --- a/src/hashes/rmd160.c +++ b/src/hashes/rmd160.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" @@ -15,13 +15,13 @@ RMD160 hash function */ -/* Implementation of RIPEMD-160 based on the source by Antoon Bosselaers, ESAT-COSIC +/* Implementation of LTC_RIPEMD-160 based on the source by Antoon Bosselaers, ESAT-COSIC * * This source has been radically overhauled to be portable and work within * the LibTomCrypt API by Tom St Denis */ -#ifdef RIPEMD160 +#ifdef LTC_RIPEMD160 const struct ltc_hash_descriptor rmd160_desc = { diff --git a/src/hashes/rmd256.c b/src/hashes/rmd256.c index 4540ef9c5..0188bf740 100644 --- a/src/hashes/rmd256.c +++ b/src/hashes/rmd256.c @@ -6,22 +6,22 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" /** @param rmd256.c - RMD256 Hash function + RLTC_MD256 Hash function */ -#ifdef RIPEMD256 +#ifdef LTC_RIPEMD256 const struct ltc_hash_descriptor rmd256_desc = { "rmd256", 8, - 16, + 32, 64, /* OID */ diff --git a/src/hashes/rmd320.c b/src/hashes/rmd320.c index a11fca44b..858d7bbea 100644 --- a/src/hashes/rmd320.c +++ b/src/hashes/rmd320.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" @@ -15,13 +15,13 @@ RMD320 hash function */ -#ifdef RIPEMD320 +#ifdef LTC_RIPEMD320 const struct ltc_hash_descriptor rmd320_desc = { "rmd320", 9, - 20, + 40, 64, /* OID */ diff --git a/src/hashes/sha1.c b/src/hashes/sha1.c index 060b9b8d4..8c846b089 100644 --- a/src/hashes/sha1.c +++ b/src/hashes/sha1.c @@ -6,17 +6,17 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" /** @file sha1.c - SHA1 code by Tom St Denis + LTC_SHA1 code by Tom St Denis */ -#ifdef SHA1 +#ifdef LTC_SHA1 const struct ltc_hash_descriptor sha1_desc = { diff --git a/src/hashes/sha2/sha224.c b/src/hashes/sha2/sha224.c index 3e9d91982..5d7dfb230 100644 --- a/src/hashes/sha2/sha224.c +++ b/src/hashes/sha2/sha224.c @@ -6,11 +6,11 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /** @param sha224.c - SHA-224 new NIST standard based off of SHA-256 truncated to 224 bits (Tom St Denis) + LTC_SHA-224 new NIST standard based off of LTC_SHA-256 truncated to 224 bits (Tom St Denis) */ const struct ltc_hash_descriptor sha224_desc = diff --git a/src/hashes/sha2/sha256.c b/src/hashes/sha2/sha256.c index 0eea74a7e..ad1386a55 100644 --- a/src/hashes/sha2/sha256.c +++ b/src/hashes/sha2/sha256.c @@ -6,16 +6,16 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" /** @file sha256.c - SHA256 by Tom St Denis + LTC_SHA256 by Tom St Denis */ -#ifdef SHA256 +#ifdef LTC_SHA256 const struct ltc_hash_descriptor sha256_desc = { @@ -327,7 +327,7 @@ int sha256_test(void) #endif } -#ifdef SHA224 +#ifdef LTC_SHA224 #include "sha224.c" #endif diff --git a/src/hashes/sha2/sha384.c b/src/hashes/sha2/sha384.c index 298470ffc..cf4d7dc37 100644 --- a/src/hashes/sha2/sha384.c +++ b/src/hashes/sha2/sha384.c @@ -6,11 +6,11 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /** @param sha384.c - SHA384 hash included in sha512.c, Tom St Denis + LTC_SHA384 hash included in sha512.c, Tom St Denis */ const struct ltc_hash_descriptor sha384_desc = diff --git a/src/hashes/sha2/sha512.c b/src/hashes/sha2/sha512.c index 89e58f731..4b7e7612f 100644 --- a/src/hashes/sha2/sha512.c +++ b/src/hashes/sha2/sha512.c @@ -6,16 +6,16 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" /** @param sha512.c - SHA512 by Tom St Denis + LTC_SHA512 by Tom St Denis */ -#ifdef SHA512 +#ifdef LTC_SHA512 const struct ltc_hash_descriptor sha512_desc = { @@ -305,7 +305,7 @@ int sha512_test(void) #endif } -#ifdef SHA384 +#ifdef LTC_SHA384 #include "sha384.c" #endif diff --git a/src/hashes/tiger.c b/src/hashes/tiger.c index 6d5bccc12..4d8c6594e 100644 --- a/src/hashes/tiger.c +++ b/src/hashes/tiger.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" @@ -16,7 +16,7 @@ Tiger hash function, Tom St Denis */ -#ifdef TIGER +#ifdef LTC_TIGER const struct ltc_hash_descriptor tiger_desc = { diff --git a/src/hashes/whirl/whirl.c b/src/hashes/whirl/whirl.c index cc1fe5d77..102d6f168 100644 --- a/src/hashes/whirl/whirl.c +++ b/src/hashes/whirl/whirl.c @@ -6,17 +6,17 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /** @file whirl.c - WHIRLPOOL (using their new sbox) hash function by Tom St Denis + LTC_WHIRLPOOL (using their new sbox) hash function by Tom St Denis */ #include "tomcrypt.h" -#ifdef WHIRLPOOL +#ifdef LTC_WHIRLPOOL const struct ltc_hash_descriptor whirlpool_desc = { diff --git a/src/hashes/whirl/whirltab.c b/src/hashes/whirl/whirltab.c index d38ef7c91..85ba31221 100644 --- a/src/hashes/whirl/whirltab.c +++ b/src/hashes/whirl/whirltab.c @@ -1,6 +1,6 @@ /** @file whirltab.c - WHIRLPOOL tables, Tom St Denis + LTC_WHIRLPOOL tables, Tom St Denis */ static const ulong64 sbox0[] = { CONST64(0x18186018c07830d8), CONST64(0x23238c2305af4626), CONST64(0xc6c63fc67ef991b8), CONST64(0xe8e887e8136fcdfb), diff --git a/src/headers/tomcrypt.h b/src/headers/tomcrypt.h index fe96e5fdc..ad27eec4e 100644 --- a/src/headers/tomcrypt.h +++ b/src/headers/tomcrypt.h @@ -16,8 +16,8 @@ extern "C" { #endif /* version */ -#define CRYPT 0x0116 -#define SCRYPT "1.16" +#define CRYPT 0x0117 +#define SCRYPT "1.17" /* max size of either a cipher/hash block or symmetric key [largest of the two] */ #define MAXBLOCKSIZE 128 diff --git a/src/headers/tomcrypt_cipher.h b/src/headers/tomcrypt_cipher.h index 41f62c3b3..f23fd977c 100644 --- a/src/headers/tomcrypt_cipher.h +++ b/src/headers/tomcrypt_cipher.h @@ -3,41 +3,41 @@ * We put each of the ciphers scheduled keys in their own structs then we put all of * the key formats in one union. This makes the function prototypes easier to use. */ -#ifdef BLOWFISH +#ifdef LTC_BLOWFISH struct blowfish_key { ulong32 S[4][256]; ulong32 K[18]; }; #endif -#ifdef RC5 +#ifdef LTC_RC5 struct rc5_key { int rounds; ulong32 K[50]; }; #endif -#ifdef RC6 +#ifdef LTC_RC6 struct rc6_key { ulong32 K[44]; }; #endif -#ifdef SAFERP +#ifdef LTC_SAFERP struct saferp_key { unsigned char K[33][16]; long rounds; }; #endif -#ifdef RIJNDAEL +#ifdef LTC_RIJNDAEL struct rijndael_key { ulong32 eK[60], dK[60]; int Nr; }; #endif -#ifdef KSEED +#ifdef LTC_KSEED struct kseed_key { ulong32 K[32], dK[32]; }; @@ -51,14 +51,14 @@ struct kasumi_key { }; #endif -#ifdef XTEA +#ifdef LTC_XTEA struct xtea_key { unsigned long A[32], B[32]; }; #endif -#ifdef TWOFISH -#ifndef TWOFISH_SMALL +#ifdef LTC_TWOFISH +#ifndef LTC_TWOFISH_SMALL struct twofish_key { ulong32 S[4][256], K[40]; }; @@ -70,24 +70,24 @@ struct xtea_key { #endif #endif -#ifdef SAFER -#define SAFER_K64_DEFAULT_NOF_ROUNDS 6 -#define SAFER_K128_DEFAULT_NOF_ROUNDS 10 -#define SAFER_SK64_DEFAULT_NOF_ROUNDS 8 -#define SAFER_SK128_DEFAULT_NOF_ROUNDS 10 -#define SAFER_MAX_NOF_ROUNDS 13 -#define SAFER_BLOCK_LEN 8 -#define SAFER_KEY_LEN (1 + SAFER_BLOCK_LEN * (1 + 2 * SAFER_MAX_NOF_ROUNDS)) -typedef unsigned char safer_block_t[SAFER_BLOCK_LEN]; -typedef unsigned char safer_key_t[SAFER_KEY_LEN]; +#ifdef LTC_SAFER +#define LTC_SAFER_K64_DEFAULT_NOF_ROUNDS 6 +#define LTC_SAFER_K128_DEFAULT_NOF_ROUNDS 10 +#define LTC_SAFER_SK64_DEFAULT_NOF_ROUNDS 8 +#define LTC_SAFER_SK128_DEFAULT_NOF_ROUNDS 10 +#define LTC_SAFER_MAX_NOF_ROUNDS 13 +#define LTC_SAFER_BLOCK_LEN 8 +#define LTC_SAFER_KEY_LEN (1 + LTC_SAFER_BLOCK_LEN * (1 + 2 * LTC_SAFER_MAX_NOF_ROUNDS)) +typedef unsigned char safer_block_t[LTC_SAFER_BLOCK_LEN]; +typedef unsigned char safer_key_t[LTC_SAFER_KEY_LEN]; struct safer_key { safer_key_t key; }; #endif -#ifdef RC2 +#ifdef LTC_RC2 struct rc2_key { unsigned xkey[64]; }; #endif -#ifdef DES +#ifdef LTC_DES struct des_key { ulong32 ek[32], dk[32]; }; @@ -97,32 +97,32 @@ struct des3_key { }; #endif -#ifdef CAST5 +#ifdef LTC_CAST5 struct cast5_key { ulong32 K[32], keylen; }; #endif -#ifdef NOEKEON +#ifdef LTC_NOEKEON struct noekeon_key { ulong32 K[4], dK[4]; }; #endif -#ifdef SKIPJACK +#ifdef LTC_SKIPJACK struct skipjack_key { unsigned char key[10]; }; #endif -#ifdef KHAZAD +#ifdef LTC_KHAZAD struct khazad_key { ulong64 roundKeyEnc[8 + 1]; ulong64 roundKeyDec[8 + 1]; }; #endif -#ifdef ANUBIS +#ifdef LTC_ANUBIS struct anubis_key { int keyBits; int R; @@ -131,59 +131,69 @@ struct anubis_key { }; #endif +#ifdef LTC_MULTI2 +struct multi2_key { + int N; + ulong32 uk[8]; +}; +#endif + typedef union Symmetric_key { -#ifdef DES +#ifdef LTC_DES struct des_key des; struct des3_key des3; #endif -#ifdef RC2 +#ifdef LTC_RC2 struct rc2_key rc2; #endif -#ifdef SAFER +#ifdef LTC_SAFER struct safer_key safer; #endif -#ifdef TWOFISH +#ifdef LTC_TWOFISH struct twofish_key twofish; #endif -#ifdef BLOWFISH +#ifdef LTC_BLOWFISH struct blowfish_key blowfish; #endif -#ifdef RC5 +#ifdef LTC_RC5 struct rc5_key rc5; #endif -#ifdef RC6 +#ifdef LTC_RC6 struct rc6_key rc6; #endif -#ifdef SAFERP +#ifdef LTC_SAFERP struct saferp_key saferp; #endif -#ifdef RIJNDAEL +#ifdef LTC_RIJNDAEL struct rijndael_key rijndael; #endif -#ifdef XTEA +#ifdef LTC_XTEA struct xtea_key xtea; #endif -#ifdef CAST5 +#ifdef LTC_CAST5 struct cast5_key cast5; #endif -#ifdef NOEKEON +#ifdef LTC_NOEKEON struct noekeon_key noekeon; #endif -#ifdef SKIPJACK +#ifdef LTC_SKIPJACK struct skipjack_key skipjack; #endif -#ifdef KHAZAD +#ifdef LTC_KHAZAD struct khazad_key khazad; #endif -#ifdef ANUBIS +#ifdef LTC_ANUBIS struct anubis_key anubis; #endif -#ifdef KSEED +#ifdef LTC_KSEED struct kseed_key kseed; #endif #ifdef LTC_KASUMI struct kasumi_key kasumi; #endif +#ifdef LTC_MULTI2 + struct multi2_key multi2; +#endif void *data; } symmetric_key; @@ -257,8 +267,11 @@ typedef struct { blocklen, /** The padding offset */ padlen, - /** The mode (endianess) of the CTR, 0==little, 1==big */ - mode; + /** The mode (endianess) of the CTR, 0==little, 1==big */ + mode, + /** counter width */ + ctrlen; + /** The counter */ unsigned char ctr[MAXBLOCKSIZE], /** The pad used to encrypt/decrypt */ @@ -488,7 +501,7 @@ extern struct ltc_cipher_descriptor { unsigned char *tag, unsigned long *taglen, int direction); - /** Accelerated one shot OMAC + /** Accelerated one shot LTC_OMAC @param key The secret key @param keylen The key length (octets) @param in The message @@ -532,7 +545,7 @@ extern struct ltc_cipher_descriptor { unsigned char *out, unsigned long *outlen); } cipher_descriptor[]; -#ifdef BLOWFISH +#ifdef LTC_BLOWFISH int blowfish_setup(const unsigned char *key, int keylen, int num_rounds, 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); @@ -542,7 +555,7 @@ int blowfish_keysize(int *keysize); extern const struct ltc_cipher_descriptor blowfish_desc; #endif -#ifdef RC5 +#ifdef LTC_RC5 int rc5_setup(const unsigned char *key, int keylen, int num_rounds, 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); @@ -552,7 +565,7 @@ int rc5_keysize(int *keysize); extern const struct ltc_cipher_descriptor rc5_desc; #endif -#ifdef RC6 +#ifdef LTC_RC6 int rc6_setup(const unsigned char *key, int keylen, int num_rounds, 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); @@ -562,7 +575,7 @@ int rc6_keysize(int *keysize); extern const struct ltc_cipher_descriptor rc6_desc; #endif -#ifdef RC2 +#ifdef LTC_RC2 int rc2_setup(const unsigned char *key, int keylen, int num_rounds, 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); @@ -572,7 +585,7 @@ int rc2_keysize(int *keysize); extern const struct ltc_cipher_descriptor rc2_desc; #endif -#ifdef SAFERP +#ifdef LTC_SAFERP int saferp_setup(const unsigned char *key, int keylen, int num_rounds, 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); @@ -582,7 +595,7 @@ int saferp_keysize(int *keysize); extern const struct ltc_cipher_descriptor saferp_desc; #endif -#ifdef SAFER +#ifdef LTC_SAFER int safer_k64_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); 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); @@ -598,7 +611,7 @@ int safer_128_keysize(int *keysize); extern const struct ltc_cipher_descriptor safer_k64_desc, safer_k128_desc, safer_sk64_desc, safer_sk128_desc; #endif -#ifdef RIJNDAEL +#ifdef LTC_RIJNDAEL /* make aes an alias */ #define aes_setup rijndael_setup @@ -626,7 +639,7 @@ extern const struct ltc_cipher_descriptor rijndael_desc, aes_desc; extern const struct ltc_cipher_descriptor rijndael_enc_desc, aes_enc_desc; #endif -#ifdef XTEA +#ifdef LTC_XTEA int xtea_setup(const unsigned char *key, int keylen, int num_rounds, 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); @@ -636,7 +649,7 @@ int xtea_keysize(int *keysize); extern const struct ltc_cipher_descriptor xtea_desc; #endif -#ifdef TWOFISH +#ifdef LTC_TWOFISH int twofish_setup(const unsigned char *key, int keylen, int num_rounds, 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); @@ -646,7 +659,7 @@ int twofish_keysize(int *keysize); extern const struct ltc_cipher_descriptor twofish_desc; #endif -#ifdef DES +#ifdef LTC_DES int des_setup(const unsigned char *key, int keylen, int num_rounds, 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); @@ -662,7 +675,7 @@ int des3_keysize(int *keysize); extern const struct ltc_cipher_descriptor des_desc, des3_desc; #endif -#ifdef CAST5 +#ifdef LTC_CAST5 int cast5_setup(const unsigned char *key, int keylen, int num_rounds, 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); @@ -672,7 +685,7 @@ int cast5_keysize(int *keysize); extern const struct ltc_cipher_descriptor cast5_desc; #endif -#ifdef NOEKEON +#ifdef LTC_NOEKEON int noekeon_setup(const unsigned char *key, int keylen, int num_rounds, 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); @@ -682,7 +695,7 @@ int noekeon_keysize(int *keysize); extern const struct ltc_cipher_descriptor noekeon_desc; #endif -#ifdef SKIPJACK +#ifdef LTC_SKIPJACK int skipjack_setup(const unsigned char *key, int keylen, int num_rounds, 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); @@ -692,7 +705,7 @@ int skipjack_keysize(int *keysize); extern const struct ltc_cipher_descriptor skipjack_desc; #endif -#ifdef KHAZAD +#ifdef LTC_KHAZAD int khazad_setup(const unsigned char *key, int keylen, int num_rounds, 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); @@ -702,7 +715,7 @@ int khazad_keysize(int *keysize); extern const struct ltc_cipher_descriptor khazad_desc; #endif -#ifdef ANUBIS +#ifdef LTC_ANUBIS int anubis_setup(const unsigned char *key, int keylen, int num_rounds, 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); @@ -712,7 +725,7 @@ int anubis_keysize(int *keysize); extern const struct ltc_cipher_descriptor anubis_desc; #endif -#ifdef KSEED +#ifdef LTC_KSEED int kseed_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); int kseed_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); int kseed_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey); @@ -732,6 +745,17 @@ int kasumi_keysize(int *keysize); extern const struct ltc_cipher_descriptor kasumi_desc; #endif + +#ifdef LTC_MULTI2 +int multi2_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey); +int multi2_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey); +int multi2_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey); +int multi2_test(void); +void multi2_done(symmetric_key *skey); +int multi2_keysize(int *keysize); +extern const struct ltc_cipher_descriptor multi2_desc; +#endif + #ifdef LTC_ECB_MODE int ecb_start(int cipher, const unsigned char *key, int keylen, int num_rounds, symmetric_ECB *ecb); @@ -772,9 +796,9 @@ int cbc_done(symmetric_CBC *cbc); #ifdef LTC_CTR_MODE -#define CTR_COUNTER_LITTLE_ENDIAN 0 -#define CTR_COUNTER_BIG_ENDIAN 1 -#define LTC_CTR_RFC3686 2 +#define CTR_COUNTER_LITTLE_ENDIAN 0x0000 +#define CTR_COUNTER_BIG_ENDIAN 0x1000 +#define LTC_CTR_RFC3686 0x2000 int ctr_start( int cipher, const unsigned char *IV, @@ -824,6 +848,34 @@ int f8_done(symmetric_F8 *f8); int f8_test_mode(void); #endif +#ifdef LTC_XTS_MODE +typedef struct { + symmetric_key key1, key2; + int cipher; +} symmetric_xts; + +int xts_start( int cipher, + const unsigned char *key1, + const unsigned char *key2, + unsigned long keylen, + int num_rounds, + symmetric_xts *xts); + +int xts_encrypt( + const unsigned char *pt, unsigned long ptlen, + unsigned char *ct, + const unsigned char *tweak, + symmetric_xts *xts); +int xts_decrypt( + const unsigned char *ct, unsigned long ptlen, + unsigned char *pt, + const unsigned char *tweak, + symmetric_xts *xts); + +void xts_done(symmetric_xts *xts); +int xts_test(void); +void xts_mult_x(unsigned char *I); +#endif int find_cipher(const char *name); int find_cipher_any(const char *name, int blocklen, int keylen); diff --git a/src/headers/tomcrypt_custom.h b/src/headers/tomcrypt_custom.h index cf4be6d9b..0243c6ce1 100644 --- a/src/headers/tomcrypt_custom.h +++ b/src/headers/tomcrypt_custom.h @@ -69,10 +69,10 @@ /* Easy button? */ #ifdef LTC_EASY #define LTC_NO_CIPHERS - #define RIJNDAEL - #define BLOWFISH - #define DES - #define CAST5 + #define LTC_RIJNDAEL + #define LTC_BLOWFISH + #define LTC_DES + #define LTC_CAST5 #define LTC_NO_MODES #define LTC_ECB_MODE @@ -80,26 +80,26 @@ #define LTC_CTR_MODE #define LTC_NO_HASHES - #define SHA1 - #define SHA512 - #define SHA384 - #define SHA256 - #define SHA224 + #define LTC_SHA1 + #define LTC_SHA512 + #define LTC_SHA384 + #define LTC_SHA256 + #define LTC_SHA224 #define LTC_NO_MACS - #define HMAC - #define OMAC - #define CCM_MODE + #define LTC_HMAC + #define LTC_OMAC + #define LTC_CCM_MODE #define LTC_NO_PRNGS - #define SPRNG - #define YARROW - #define DEVRANDOM + #define LTC_SPRNG + #define LTC_YARROW + #define LTC_DEVRANDOM #define TRY_URANDOM_FIRST #define LTC_NO_PK - #define MRSA - #define MECC + #define LTC_MRSA + #define LTC_MECC #endif /* Use small code where possible */ @@ -128,33 +128,33 @@ /* ---> Symmetric Block Ciphers <--- */ #ifndef LTC_NO_CIPHERS -#define BLOWFISH -#define RC2 -#define RC5 -#define RC6 -#define SAFERP -#define RIJNDAEL -#define XTEA +#define LTC_BLOWFISH +#define LTC_RC2 +#define LTC_RC5 +#define LTC_RC6 +#define LTC_SAFERP +#define LTC_RIJNDAEL +#define LTC_XTEA /* _TABLES tells it to use tables during setup, _SMALL means to use the smaller scheduled key format * (saves 4KB of ram), _ALL_TABLES enables all tables during setup */ -#define TWOFISH +#define LTC_TWOFISH #ifndef LTC_NO_TABLES - #define TWOFISH_TABLES - /* #define TWOFISH_ALL_TABLES */ + #define LTC_TWOFISH_TABLES + /* #define LTC_TWOFISH_ALL_TABLES */ #else - #define TWOFISH_SMALL + #define LTC_TWOFISH_SMALL #endif -/* #define TWOFISH_SMALL */ -/* DES includes EDE triple-DES */ -#define DES -#define CAST5 -#define NOEKEON -#define SKIPJACK -#define SAFER -#define KHAZAD -#define ANUBIS -#define ANUBIS_TWEAK -#define KSEED +/* #define LTC_TWOFISH_SMALL */ +/* LTC_DES includes EDE triple-LTC_DES */ +#define LTC_DES +#define LTC_CAST5 +#define LTC_NOEKEON +#define LTC_SKIPJACK +#define LTC_SAFER +#define LTC_KHAZAD +#define LTC_ANUBIS +#define LTC_ANUBIS_TWEAK +#define LTC_KSEED #define LTC_KASUMI #endif /* LTC_NO_CIPHERS */ @@ -181,26 +181,29 @@ #define LRW_TABLES #endif +/* XTS mode */ +#define LTC_XTS_MODE + #endif /* LTC_NO_MODES */ /* ---> One-Way Hash Functions <--- */ #ifndef LTC_NO_HASHES -#define CHC_HASH -#define WHIRLPOOL -#define SHA512 -#define SHA384 -#define SHA256 -#define SHA224 -#define TIGER -#define SHA1 -#define MD5 -#define MD4 -#define MD2 -#define RIPEMD128 -#define RIPEMD160 -#define RIPEMD256 -#define RIPEMD320 +#define LTC_CHC_HASH +#define LTC_WHIRLPOOL +#define LTC_SHA512 +#define LTC_SHA384 +#define LTC_SHA256 +#define LTC_SHA224 +#define LTC_TIGER +#define LTC_SHA1 +#define LTC_MD5 +#define LTC_MD4 +#define LTC_MD2 +#define LTC_RIPEMD128 +#define LTC_RIPEMD160 +#define LTC_RIPEMD256 +#define LTC_RIPEMD320 #endif /* LTC_NO_HASHES */ @@ -212,69 +215,69 @@ #define LTC_PMAC #define LTC_XCBC #define LTC_F9_MODE -#define PELICAN +#define LTC_PELICAN -#if defined(PELICAN) && !defined(RIJNDAEL) - #error Pelican-MAC requires RIJNDAEL +#if defined(LTC_PELICAN) && !defined(LTC_RIJNDAEL) + #error Pelican-MAC requires LTC_RIJNDAEL #endif /* ---> Encrypt + Authenticate Modes <--- */ -#define EAX_MODE -#if defined(EAX_MODE) && !(defined(LTC_CTR_MODE) && defined(LTC_OMAC)) - #error EAX_MODE requires CTR and OMAC mode +#define LTC_EAX_MODE +#if defined(LTC_EAX_MODE) && !(defined(LTC_CTR_MODE) && defined(LTC_OMAC)) + #error LTC_EAX_MODE requires CTR and LTC_OMAC mode #endif -#define OCB_MODE -#define CCM_MODE -#define GCM_MODE +#define LTC_OCB_MODE +#define LTC_CCM_MODE +#define LTC_GCM_MODE /* Use 64KiB tables */ #ifndef LTC_NO_TABLES - #define GCM_TABLES + #define LTC_GCM_TABLES #endif /* USE SSE2? requires GCC works on x86_32 and x86_64*/ -#ifdef GCM_TABLES -/* #define GCM_TABLES_SSE2 */ +#ifdef LTC_GCM_TABLES +/* #define LTC_GCM_TABLES_SSE2 */ #endif #endif /* LTC_NO_MACS */ /* Various tidbits of modern neatoness */ -#define BASE64 +#define LTC_BASE64 /* --> Pseudo Random Number Generators <--- */ #ifndef LTC_NO_PRNGS /* Yarrow */ -#define YARROW +#define LTC_YARROW /* which descriptor of AES to use? */ /* 0 = rijndael_enc 1 = aes_enc, 2 = rijndael [full], 3 = aes [full] */ -#define YARROW_AES 0 +#define LTC_YARROW_AES 0 -#if defined(YARROW) && !defined(LTC_CTR_MODE) - #error YARROW requires LTC_CTR_MODE chaining mode to be defined! +#if defined(LTC_YARROW) && !defined(LTC_CTR_MODE) + #error LTC_YARROW requires LTC_CTR_MODE chaining mode to be defined! #endif /* a PRNG that simply reads from an available system source */ -#define SPRNG +#define LTC_SPRNG -/* The RC4 stream cipher */ -#define RC4 +/* The LTC_RC4 stream cipher */ +#define LTC_RC4 /* Fortuna PRNG */ -#define FORTUNA +#define LTC_FORTUNA /* reseed every N calls to the read function */ -#define FORTUNA_WD 10 +#define LTC_FORTUNA_WD 10 /* number of pools (4..32) can save a bit of ram by lowering the count */ -#define FORTUNA_POOLS 32 +#define LTC_FORTUNA_POOLS 32 -/* Greg's SOBER128 PRNG ;-0 */ -#define SOBER128 +/* Greg's LTC_SOBER128 PRNG ;-0 */ +#define LTC_SOBER128 /* the *nix style /dev/random device */ -#define DEVRANDOM +#define LTC_DEVRANDOM /* try /dev/urandom before trying /dev/random */ #define TRY_URANDOM_FIRST @@ -284,10 +287,10 @@ #ifndef LTC_NO_MATH /* LibTomMath */ -/* #define LTM_DESC */ +/* #define LTM_LTC_DESC */ /* TomsFastMath */ -/* #define TFM_DESC */ +/* #define TFM_LTC_DESC */ #endif /* LTC_NO_MATH */ @@ -295,37 +298,37 @@ #ifndef LTC_NO_PK /* Include RSA support */ -#define MRSA +#define LTC_MRSA /* Include Katja (a Rabin variant like RSA) */ /* #define MKAT */ /* Digital Signature Algorithm */ -#define MDSA +#define LTC_MDSA /* ECC */ -#define MECC +#define LTC_MECC /* use Shamir's trick for point mul (speeds up signature verification) */ #define LTC_ECC_SHAMIR -#if defined(TFM_DESC) && defined(MECC) - #define MECC_ACCEL +#if defined(TFM_LTC_DESC) && defined(LTC_MECC) + #define LTC_MECC_ACCEL #endif /* do we want fixed point ECC */ -/* #define MECC_FP */ +/* #define LTC_MECC_FP */ /* Timing Resistant? */ /* #define LTC_ECC_TIMING_RESISTANT */ #endif /* LTC_NO_PK */ -/* PKCS #1 (RSA) and #5 (Password Handling) stuff */ +/* LTC_PKCS #1 (RSA) and #5 (Password Handling) stuff */ #ifndef LTC_NO_PKCS -#define PKCS_1 -#define PKCS_5 +#define LTC_PKCS_1 +#define LTC_PKCS_5 /* Include ASN.1 DER (required by DSA/RSA) */ #define LTC_DER @@ -334,7 +337,7 @@ /* cleanup */ -#ifdef MECC +#ifdef LTC_MECC /* Supported ECC Key Sizes */ #ifndef LTC_NO_CURVES #define ECC112 @@ -348,20 +351,20 @@ #endif #endif -#if defined(MECC) || defined(MRSA) || defined(MDSA) || defined(MKATJA) +#if defined(LTC_MECC) || defined(LTC_MRSA) || defined(LTC_MDSA) || defined(MKATJA) /* Include the MPI functionality? (required by the PK algorithms) */ #define MPI #endif -#ifdef MRSA - #define PKCS_1 +#ifdef LTC_MRSA + #define LTC_PKCS_1 #endif #if defined(LTC_DER) && !defined(MPI) #error ASN.1 DER requires MPI functionality #endif -#if (defined(MDSA) || defined(MRSA) || defined(MECC) || defined(MKATJA)) && !defined(LTC_DER) +#if (defined(LTC_MDSA) || defined(LTC_MRSA) || defined(LTC_MECC) || defined(MKATJA)) && !defined(LTC_DER) #error PK requires ASN.1 DER functionality, make sure LTC_DER is enabled #endif @@ -391,7 +394,7 @@ /* Debuggers */ -/* define this if you use Valgrind, note: it CHANGES the way SOBER-128 and RC4 work (see the code) */ +/* define this if you use Valgrind, note: it CHANGES the way SOBER-128 and LTC_RC4 work (see the code) */ /* #define LTC_VALGRIND */ #endif diff --git a/src/headers/tomcrypt_hash.h b/src/headers/tomcrypt_hash.h index a00aa4ba9..56b272ad9 100644 --- a/src/headers/tomcrypt_hash.h +++ b/src/headers/tomcrypt_hash.h @@ -1,5 +1,5 @@ /* ---- HASH FUNCTIONS ---- */ -#ifdef SHA512 +#ifdef LTC_SHA512 struct sha512_state { ulong64 length, state[8]; unsigned long curlen; @@ -7,7 +7,7 @@ struct sha512_state { }; #endif -#ifdef SHA256 +#ifdef LTC_SHA256 struct sha256_state { ulong64 length; ulong32 state[8], curlen; @@ -15,7 +15,7 @@ struct sha256_state { }; #endif -#ifdef SHA1 +#ifdef LTC_SHA1 struct sha1_state { ulong64 length; ulong32 state[5], curlen; @@ -23,7 +23,7 @@ struct sha1_state { }; #endif -#ifdef MD5 +#ifdef LTC_MD5 struct md5_state { ulong64 length; ulong32 state[4], curlen; @@ -31,7 +31,7 @@ struct md5_state { }; #endif -#ifdef MD4 +#ifdef LTC_MD4 struct md4_state { ulong64 length; ulong32 state[4], curlen; @@ -39,7 +39,7 @@ struct md4_state { }; #endif -#ifdef TIGER +#ifdef LTC_TIGER struct tiger_state { ulong64 state[3], length; unsigned long curlen; @@ -47,14 +47,14 @@ struct tiger_state { }; #endif -#ifdef MD2 +#ifdef LTC_MD2 struct md2_state { unsigned char chksum[16], X[48], buf[16]; unsigned long curlen; }; #endif -#ifdef RIPEMD128 +#ifdef LTC_RIPEMD128 struct rmd128_state { ulong64 length; unsigned char buf[64]; @@ -62,7 +62,7 @@ struct rmd128_state { }; #endif -#ifdef RIPEMD160 +#ifdef LTC_RIPEMD160 struct rmd160_state { ulong64 length; unsigned char buf[64]; @@ -70,7 +70,7 @@ struct rmd160_state { }; #endif -#ifdef RIPEMD256 +#ifdef LTC_RIPEMD256 struct rmd256_state { ulong64 length; unsigned char buf[64]; @@ -78,7 +78,7 @@ struct rmd256_state { }; #endif -#ifdef RIPEMD320 +#ifdef LTC_RIPEMD320 struct rmd320_state { ulong64 length; unsigned char buf[64]; @@ -86,7 +86,7 @@ struct rmd320_state { }; #endif -#ifdef WHIRLPOOL +#ifdef LTC_WHIRLPOOL struct whirlpool_state { ulong64 length, state[8]; unsigned char buf[64]; @@ -94,7 +94,7 @@ struct whirlpool_state { }; #endif -#ifdef CHC_HASH +#ifdef LTC_CHC_HASH struct chc_state { ulong64 length; unsigned char state[MAXBLOCKSIZE], buf[MAXBLOCKSIZE]; @@ -104,43 +104,43 @@ struct chc_state { typedef union Hash_state { char dummy[1]; -#ifdef CHC_HASH +#ifdef LTC_CHC_HASH struct chc_state chc; #endif -#ifdef WHIRLPOOL +#ifdef LTC_WHIRLPOOL struct whirlpool_state whirlpool; #endif -#ifdef SHA512 +#ifdef LTC_SHA512 struct sha512_state sha512; #endif -#ifdef SHA256 +#ifdef LTC_SHA256 struct sha256_state sha256; #endif -#ifdef SHA1 +#ifdef LTC_SHA1 struct sha1_state sha1; #endif -#ifdef MD5 +#ifdef LTC_MD5 struct md5_state md5; #endif -#ifdef MD4 +#ifdef LTC_MD4 struct md4_state md4; #endif -#ifdef MD2 +#ifdef LTC_MD2 struct md2_state md2; #endif -#ifdef TIGER +#ifdef LTC_TIGER struct tiger_state tiger; #endif -#ifdef RIPEMD128 +#ifdef LTC_RIPEMD128 struct rmd128_state rmd128; #endif -#ifdef RIPEMD160 +#ifdef LTC_RIPEMD160 struct rmd160_state rmd160; #endif -#ifdef RIPEMD256 +#ifdef LTC_RIPEMD256 struct rmd256_state rmd256; #endif -#ifdef RIPEMD320 +#ifdef LTC_RIPEMD320 struct rmd320_state rmd320; #endif void *data; @@ -191,7 +191,7 @@ extern struct ltc_hash_descriptor { } hash_descriptor[]; -#ifdef CHC_HASH +#ifdef LTC_CHC_HASH int chc_register(int cipher); int chc_init(hash_state * md); int chc_process(hash_state * md, const unsigned char *in, unsigned long inlen); @@ -200,7 +200,7 @@ int chc_test(void); extern const struct ltc_hash_descriptor chc_desc; #endif -#ifdef WHIRLPOOL +#ifdef LTC_WHIRLPOOL int whirlpool_init(hash_state * md); int whirlpool_process(hash_state * md, const unsigned char *in, unsigned long inlen); int whirlpool_done(hash_state * md, unsigned char *hash); @@ -208,7 +208,7 @@ int whirlpool_test(void); extern const struct ltc_hash_descriptor whirlpool_desc; #endif -#ifdef SHA512 +#ifdef LTC_SHA512 int sha512_init(hash_state * md); int sha512_process(hash_state * md, const unsigned char *in, unsigned long inlen); int sha512_done(hash_state * md, unsigned char *hash); @@ -216,9 +216,9 @@ int sha512_test(void); extern const struct ltc_hash_descriptor sha512_desc; #endif -#ifdef SHA384 -#ifndef SHA512 - #error SHA512 is required for SHA384 +#ifdef LTC_SHA384 +#ifndef LTC_SHA512 + #error LTC_SHA512 is required for LTC_SHA384 #endif int sha384_init(hash_state * md); #define sha384_process sha512_process @@ -227,16 +227,16 @@ int sha384_test(void); extern const struct ltc_hash_descriptor sha384_desc; #endif -#ifdef SHA256 +#ifdef LTC_SHA256 int sha256_init(hash_state * md); int sha256_process(hash_state * md, const unsigned char *in, unsigned long inlen); int sha256_done(hash_state * md, unsigned char *hash); int sha256_test(void); extern const struct ltc_hash_descriptor sha256_desc; -#ifdef SHA224 -#ifndef SHA256 - #error SHA256 is required for SHA224 +#ifdef LTC_SHA224 +#ifndef LTC_SHA256 + #error LTC_SHA256 is required for LTC_SHA224 #endif int sha224_init(hash_state * md); #define sha224_process sha256_process @@ -246,7 +246,7 @@ extern const struct ltc_hash_descriptor sha224_desc; #endif #endif -#ifdef SHA1 +#ifdef LTC_SHA1 int sha1_init(hash_state * md); int sha1_process(hash_state * md, const unsigned char *in, unsigned long inlen); int sha1_done(hash_state * md, unsigned char *hash); @@ -254,7 +254,7 @@ int sha1_test(void); extern const struct ltc_hash_descriptor sha1_desc; #endif -#ifdef MD5 +#ifdef LTC_MD5 int md5_init(hash_state * md); int md5_process(hash_state * md, const unsigned char *in, unsigned long inlen); int md5_done(hash_state * md, unsigned char *hash); @@ -262,7 +262,7 @@ int md5_test(void); extern const struct ltc_hash_descriptor md5_desc; #endif -#ifdef MD4 +#ifdef LTC_MD4 int md4_init(hash_state * md); int md4_process(hash_state * md, const unsigned char *in, unsigned long inlen); int md4_done(hash_state * md, unsigned char *hash); @@ -270,7 +270,7 @@ int md4_test(void); extern const struct ltc_hash_descriptor md4_desc; #endif -#ifdef MD2 +#ifdef LTC_MD2 int md2_init(hash_state * md); int md2_process(hash_state * md, const unsigned char *in, unsigned long inlen); int md2_done(hash_state * md, unsigned char *hash); @@ -278,7 +278,7 @@ int md2_test(void); extern const struct ltc_hash_descriptor md2_desc; #endif -#ifdef TIGER +#ifdef LTC_TIGER int tiger_init(hash_state * md); int tiger_process(hash_state * md, const unsigned char *in, unsigned long inlen); int tiger_done(hash_state * md, unsigned char *hash); @@ -286,7 +286,7 @@ int tiger_test(void); extern const struct ltc_hash_descriptor tiger_desc; #endif -#ifdef RIPEMD128 +#ifdef LTC_RIPEMD128 int rmd128_init(hash_state * md); int rmd128_process(hash_state * md, const unsigned char *in, unsigned long inlen); int rmd128_done(hash_state * md, unsigned char *hash); @@ -294,7 +294,7 @@ int rmd128_test(void); extern const struct ltc_hash_descriptor rmd128_desc; #endif -#ifdef RIPEMD160 +#ifdef LTC_RIPEMD160 int rmd160_init(hash_state * md); int rmd160_process(hash_state * md, const unsigned char *in, unsigned long inlen); int rmd160_done(hash_state * md, unsigned char *hash); @@ -302,7 +302,7 @@ int rmd160_test(void); extern const struct ltc_hash_descriptor rmd160_desc; #endif -#ifdef RIPEMD256 +#ifdef LTC_RIPEMD256 int rmd256_init(hash_state * md); int rmd256_process(hash_state * md, const unsigned char *in, unsigned long inlen); int rmd256_done(hash_state * md, unsigned char *hash); @@ -310,7 +310,7 @@ int rmd256_test(void); extern const struct ltc_hash_descriptor rmd256_desc; #endif -#ifdef RIPEMD320 +#ifdef LTC_RIPEMD320 int rmd320_init(hash_state * md); int rmd320_process(hash_state * md, const unsigned char *in, unsigned long inlen); int rmd320_done(hash_state * md, unsigned char *hash); diff --git a/src/headers/tomcrypt_mac.h b/src/headers/tomcrypt_mac.h index 172c0d418..d030d734b 100644 --- a/src/headers/tomcrypt_mac.h +++ b/src/headers/tomcrypt_mac.h @@ -51,7 +51,7 @@ int omac_file(int cipher, const char *filename, unsigned char *out, unsigned long *outlen); int omac_test(void); -#endif /* OMAC */ +#endif /* LTC_OMAC */ #ifdef LTC_PMAC @@ -96,10 +96,10 @@ void pmac_shift_xor(pmac_state *pmac); #endif /* PMAC */ -#ifdef EAX_MODE +#ifdef LTC_EAX_MODE #if !(defined(LTC_OMAC) && defined(LTC_CTR_MODE)) - #error EAX_MODE requires OMAC and CTR + #error LTC_EAX_MODE requires LTC_OMAC and CTR #endif typedef struct { @@ -137,7 +137,7 @@ int eax_decrypt_verify_memory(int cipher, int eax_test(void); #endif /* EAX MODE */ -#ifdef OCB_MODE +#ifdef LTC_OCB_MODE typedef struct { unsigned char L[MAXBLOCKSIZE], /* L value */ Ls[32][MAXBLOCKSIZE], /* L shifted by i bits to the left */ @@ -191,9 +191,9 @@ int ocb_ntz(unsigned long x); int s_ocb_done(ocb_state *ocb, const unsigned char *pt, unsigned long ptlen, unsigned char *ct, unsigned char *tag, unsigned long *taglen, int mode); -#endif /* OCB_MODE */ +#endif /* LTC_OCB_MODE */ -#ifdef CCM_MODE +#ifdef LTC_CCM_MODE #define CCM_ENCRYPT 0 #define CCM_DECRYPT 1 @@ -210,26 +210,26 @@ int ccm_memory(int cipher, int ccm_test(void); -#endif /* CCM_MODE */ +#endif /* LTC_CCM_MODE */ -#if defined(LRW_MODE) || defined(GCM_MODE) +#if defined(LRW_MODE) || defined(LTC_GCM_MODE) void gcm_gf_mult(const unsigned char *a, const unsigned char *b, unsigned char *c); #endif /* table shared between GCM and LRW */ -#if defined(GCM_TABLES) || defined(LRW_TABLES) || ((defined(GCM_MODE) || defined(GCM_MODE)) && defined(LTC_FAST)) +#if defined(LTC_GCM_TABLES) || defined(LRW_TABLES) || ((defined(LTC_GCM_MODE) || defined(LTC_GCM_MODE)) && defined(LTC_FAST)) extern const unsigned char gcm_shift_table[]; #endif -#ifdef GCM_MODE +#ifdef LTC_GCM_MODE #define GCM_ENCRYPT 0 #define GCM_DECRYPT 1 -#define GCM_MODE_IV 0 -#define GCM_MODE_AAD 1 -#define GCM_MODE_TEXT 2 +#define LTC_GCM_MODE_IV 0 +#define LTC_GCM_MODE_AAD 1 +#define LTC_GCM_MODE_TEXT 2 typedef struct { symmetric_key K; @@ -247,9 +247,9 @@ typedef struct { ulong64 totlen, /* 64-bit counter used for IV and AAD */ pttotlen; /* 64-bit counter for the PT */ -#ifdef GCM_TABLES +#ifdef LTC_GCM_TABLES unsigned char PC[16][256][16] /* 16 tables of 8x128 */ -#ifdef GCM_TABLES_SSE2 +#ifdef LTC_GCM_TABLES_SSE2 __attribute__ ((aligned (16))) #endif ; @@ -287,9 +287,9 @@ int gcm_memory( int cipher, int direction); int gcm_test(void); -#endif /* GCM_MODE */ +#endif /* LTC_GCM_MODE */ -#ifdef PELICAN +#ifdef LTC_PELICAN typedef struct pelican_state { @@ -311,6 +311,9 @@ int pelican_memory(const unsigned char *key, unsigned long keylen, #ifdef LTC_XCBC +/* add this to "keylen" to xcbc_init to use a pure three-key XCBC MAC */ +#define LTC_XCBC_PURE 0x8000UL + typedef struct { unsigned char K[3][MAXBLOCKSIZE], IV[MAXBLOCKSIZE]; diff --git a/src/headers/tomcrypt_math.h b/src/headers/tomcrypt_math.h index e6ee79995..aee61053e 100644 --- a/src/headers/tomcrypt_math.h +++ b/src/headers/tomcrypt_math.h @@ -7,11 +7,11 @@ #define LTC_MP_NO 0 #define LTC_MP_YES 1 -#ifndef MECC +#ifndef LTC_MECC typedef void ecc_point; #endif -#ifndef MRSA +#ifndef LTC_MRSA typedef void rsa_key; #endif diff --git a/src/headers/tomcrypt_misc.h b/src/headers/tomcrypt_misc.h index ec0e65593..239ad775b 100644 --- a/src/headers/tomcrypt_misc.h +++ b/src/headers/tomcrypt_misc.h @@ -1,5 +1,5 @@ -/* ---- BASE64 Routines ---- */ -#ifdef BASE64 +/* ---- LTC_BASE64 Routines ---- */ +#ifdef LTC_BASE64 int base64_encode(const unsigned char *in, unsigned long len, unsigned char *out, unsigned long *outlen); diff --git a/src/headers/tomcrypt_pk.h b/src/headers/tomcrypt_pk.h index 079ae3ea0..cc05f6cb2 100644 --- a/src/headers/tomcrypt_pk.h +++ b/src/headers/tomcrypt_pk.h @@ -8,13 +8,13 @@ enum { int rand_prime(void *N, long len, prng_state *prng, int wprng); /* ---- RSA ---- */ -#ifdef MRSA +#ifdef LTC_MRSA /* Min and Max RSA key sizes (in bits) */ #define MIN_RSA_SIZE 1024 #define MAX_RSA_SIZE 4096 -/** RSA PKCS style key */ +/** RSA LTC_PKCS style key */ typedef struct Rsa_key { /** Type of key, PK_PRIVATE or PK_PUBLIC */ int type; @@ -44,20 +44,20 @@ int rsa_exptmod(const unsigned char *in, unsigned long inlen, void rsa_free(rsa_key *key); -/* These use PKCS #1 v2.0 padding */ +/* These use LTC_PKCS #1 v2.0 padding */ #define rsa_encrypt_key(_in, _inlen, _out, _outlen, _lparam, _lparamlen, _prng, _prng_idx, _hash_idx, _key) \ - rsa_encrypt_key_ex(_in, _inlen, _out, _outlen, _lparam, _lparamlen, _prng, _prng_idx, _hash_idx, LTC_PKCS_1_OAEP, _key) + rsa_encrypt_key_ex(_in, _inlen, _out, _outlen, _lparam, _lparamlen, _prng, _prng_idx, _hash_idx, LTC_LTC_PKCS_1_OAEP, _key) #define rsa_decrypt_key(_in, _inlen, _out, _outlen, _lparam, _lparamlen, _hash_idx, _stat, _key) \ - rsa_decrypt_key_ex(_in, _inlen, _out, _outlen, _lparam, _lparamlen, _hash_idx, LTC_PKCS_1_OAEP, _stat, _key) + rsa_decrypt_key_ex(_in, _inlen, _out, _outlen, _lparam, _lparamlen, _hash_idx, LTC_LTC_PKCS_1_OAEP, _stat, _key) #define rsa_sign_hash(_in, _inlen, _out, _outlen, _prng, _prng_idx, _hash_idx, _saltlen, _key) \ - rsa_sign_hash_ex(_in, _inlen, _out, _outlen, LTC_PKCS_1_PSS, _prng, _prng_idx, _hash_idx, _saltlen, _key) + rsa_sign_hash_ex(_in, _inlen, _out, _outlen, LTC_LTC_PKCS_1_PSS, _prng, _prng_idx, _hash_idx, _saltlen, _key) #define rsa_verify_hash(_sig, _siglen, _hash, _hashlen, _hash_idx, _saltlen, _stat, _key) \ - rsa_verify_hash_ex(_sig, _siglen, _hash, _hashlen, LTC_PKCS_1_PSS, _hash_idx, _saltlen, _stat, _key) + rsa_verify_hash_ex(_sig, _siglen, _hash, _hashlen, LTC_LTC_PKCS_1_PSS, _hash_idx, _saltlen, _stat, _key) -/* These can be switched between PKCS #1 v2.x and PKCS #1 v1.5 paddings */ +/* These can be switched between LTC_PKCS #1 v2.x and LTC_PKCS #1 v1.5 paddings */ int rsa_encrypt_key_ex(const unsigned char *in, unsigned long inlen, unsigned char *out, unsigned long *outlen, const unsigned char *lparam, unsigned long lparamlen, @@ -82,7 +82,7 @@ int rsa_verify_hash_ex(const unsigned char *sig, unsigned long siglen, int hash_idx, unsigned long saltlen, int *stat, rsa_key *key); -/* PKCS #1 import/export */ +/* LTC_PKCS #1 import/export */ int rsa_export(unsigned char *out, unsigned long *outlen, int type, rsa_key *key); int rsa_import(const unsigned char *in, unsigned long inlen, rsa_key *key); @@ -95,7 +95,7 @@ int rsa_import(const unsigned char *in, unsigned long inlen, rsa_key *key); #define MIN_KAT_SIZE 1024 #define MAX_KAT_SIZE 4096 -/** Katja PKCS style key */ +/** Katja LTC_PKCS style key */ typedef struct KAT_key { /** Type of key, PK_PRIVATE or PK_PUBLIC */ int type; @@ -125,7 +125,7 @@ int katja_exptmod(const unsigned char *in, unsigned long inlen, void katja_free(katja_key *key); -/* These use PKCS #1 v2.0 padding */ +/* These use LTC_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, @@ -137,14 +137,14 @@ int katja_decrypt_key(const unsigned char *in, unsigned long inlen, int hash_idx, int *stat, katja_key *key); -/* PKCS #1 import/export */ +/* LTC_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 +#ifdef LTC_MECC /* size of our temp buffers for exported keys */ #define ECC_BUF_SIZE 256 @@ -251,7 +251,7 @@ void ltc_ecc_del_point(ecc_point *p); int ltc_ecc_is_valid_idx(int n); /* point ops (mp == montgomery digit) */ -#if !defined(MECC_ACCEL) || defined(LTM_DESC) || defined(GMP_DESC) +#if !defined(LTC_MECC_ACCEL) || defined(LTM_LTC_DESC) || defined(GMP_LTC_DESC) /* R = 2P */ int ltc_ecc_projective_dbl_point(ecc_point *P, ecc_point *R, void *modulus, void *mp); @@ -259,11 +259,18 @@ int ltc_ecc_projective_dbl_point(ecc_point *P, ecc_point *R, void *modulus, void int ltc_ecc_projective_add_point(ecc_point *P, ecc_point *Q, ecc_point *R, void *modulus, void *mp); #endif -#if defined(MECC_FP) +#if defined(LTC_MECC_FP) +/* optimized point multiplication using fixed point cache (HAC algorithm 14.117) */ int ltc_ecc_fp_mulmod(void *k, ecc_point *G, ecc_point *R, void *modulus, int map); + +/* functions for saving/loading/freeing/adding to fixed point cache */ int ltc_ecc_fp_save_state(unsigned char **out, unsigned long *outlen); int ltc_ecc_fp_restore_state(unsigned char *in, unsigned long inlen); void ltc_ecc_fp_free(void); +int ltc_ecc_fp_add_point(ecc_point *g, void *modulus, int lock); + +/* lock/unlock all points currently in fixed point cache */ +void ltc_ecc_fp_tablelock(int lock); #endif /* R = kG */ @@ -276,7 +283,8 @@ int ltc_ecc_mul2add(ecc_point *A, void *kA, ecc_point *C, void *modulus); -#ifdef MECC_FP +#ifdef LTC_MECC_FP +/* Shamir's trick with optimized point multiplication using fixed point cache */ int ltc_ecc_fp_mul2add(ecc_point *A, void *kA, ecc_point *B, void *kB, ecc_point *C, void *modulus); @@ -290,13 +298,13 @@ int ltc_ecc_map(ecc_point *P, void *modulus, void *mp); #endif -#ifdef MDSA +#ifdef LTC_MDSA /* Max diff between group and modulus size in bytes */ -#define MDSA_DELTA 512 +#define LTC_MDSA_DELTA 512 /* Max DSA group size in bytes (default allows 4k-bit groups) */ -#define MDSA_MAX_GROUP 512 +#define LTC_MDSA_MAX_GROUP 512 /** DSA key structure */ typedef struct { @@ -496,7 +504,7 @@ int der_printable_char_encode(int c); int der_printable_value_decode(int v); /* UTF-8 */ -#if (defined(SIZE_MAX) || __STDC_VERSION__ >= 199901L || defined(WCHAR_MAX) || defined(_WCHAR_T) || defined(_WCHAR_T_DEFINED)) && !defined(LTC_NO_WCHAR) +#if (defined(SIZE_MAX) || __STDC_VERSION__ >= 199901L || defined(WCHAR_MAX) || defined(_WCHAR_T) || defined(_WCHAR_T_DEFINED) || defined (__WCHAR_TYPE__)) && !defined(LTC_NO_WCHAR) #include #else typedef ulong32 wchar_t; diff --git a/src/headers/tomcrypt_pkcs.h b/src/headers/tomcrypt_pkcs.h index 2d7ebf2a2..8c8c7e438 100644 --- a/src/headers/tomcrypt_pkcs.h +++ b/src/headers/tomcrypt_pkcs.h @@ -1,19 +1,19 @@ -/* PKCS Header Info */ +/* LTC_PKCS Header Info */ -/* ===> PKCS #1 -- RSA Cryptography <=== */ -#ifdef PKCS_1 +/* ===> LTC_PKCS #1 -- RSA Cryptography <=== */ +#ifdef LTC_PKCS_1 enum ltc_pkcs_1_v1_5_blocks { - LTC_PKCS_1_EMSA = 1, /* Block type 1 (PKCS #1 v1.5 signature padding) */ - LTC_PKCS_1_EME = 2 /* Block type 2 (PKCS #1 v1.5 encryption padding) */ + LTC_LTC_PKCS_1_EMSA = 1, /* Block type 1 (LTC_PKCS #1 v1.5 signature padding) */ + LTC_LTC_PKCS_1_EME = 2 /* Block type 2 (LTC_PKCS #1 v1.5 encryption padding) */ }; enum ltc_pkcs_1_paddings { - LTC_PKCS_1_V1_5 = 1, /* PKCS #1 v1.5 padding (\sa ltc_pkcs_1_v1_5_blocks) */ - LTC_PKCS_1_OAEP = 2, /* PKCS #1 v2.0 encryption padding */ - LTC_PKCS_1_PSS = 3 /* PKCS #1 v2.1 signature padding */ + LTC_LTC_PKCS_1_V1_5 = 1, /* LTC_PKCS #1 v1.5 padding (\sa ltc_pkcs_1_v1_5_blocks) */ + LTC_LTC_PKCS_1_OAEP = 2, /* LTC_PKCS #1 v2.0 encryption padding */ + LTC_LTC_PKCS_1_PSS = 3 /* LTC_PKCS #1 v2.1 signature padding */ }; int pkcs_1_mgf1( int hash_idx, @@ -65,10 +65,10 @@ int pkcs_1_pss_decode(const unsigned char *msghash, unsigned long msghashlen, unsigned long saltlen, int hash_idx, unsigned long modulus_bitlen, int *res); -#endif /* PKCS_1 */ +#endif /* LTC_PKCS_1 */ -/* ===> PKCS #5 -- Password Based Cryptography <=== */ -#ifdef PKCS_5 +/* ===> LTC_PKCS #5 -- Password Based Cryptography <=== */ +#ifdef LTC_PKCS_5 /* Algorithm #1 (old) */ int pkcs_5_alg1(const unsigned char *password, unsigned long password_len, @@ -82,7 +82,7 @@ int pkcs_5_alg2(const unsigned char *password, unsigned long password_len, int iteration_count, int hash_idx, unsigned char *out, unsigned long *outlen); -#endif /* PKCS_5 */ +#endif /* LTC_PKCS_5 */ /* $Source$ */ /* $Revision$ */ diff --git a/src/headers/tomcrypt_prng.h b/src/headers/tomcrypt_prng.h index 01382c9c5..508159d20 100644 --- a/src/headers/tomcrypt_prng.h +++ b/src/headers/tomcrypt_prng.h @@ -1,5 +1,5 @@ /* ---- PRNG Stuff ---- */ -#ifdef YARROW +#ifdef LTC_YARROW struct yarrow_prng { int cipher, hash; unsigned char pool[MAXBLOCKSIZE]; @@ -8,16 +8,16 @@ struct yarrow_prng { }; #endif -#ifdef RC4 +#ifdef LTC_RC4 struct rc4_prng { int x, y; unsigned char buf[256]; }; #endif -#ifdef FORTUNA +#ifdef LTC_FORTUNA struct fortuna_prng { - hash_state pool[FORTUNA_POOLS]; /* the pools */ + hash_state pool[LTC_FORTUNA_POOLS]; /* the pools */ symmetric_key skey; @@ -33,7 +33,7 @@ struct fortuna_prng { }; #endif -#ifdef SOBER128 +#ifdef LTC_SOBER128 struct sober128_prng { ulong32 R[17], /* Working storage for the shift register */ initR[17], /* saved register contents */ @@ -49,16 +49,16 @@ struct sober128_prng { typedef union Prng_state { char dummy[1]; -#ifdef YARROW +#ifdef LTC_YARROW struct yarrow_prng yarrow; #endif -#ifdef RC4 +#ifdef LTC_RC4 struct rc4_prng rc4; #endif -#ifdef FORTUNA +#ifdef LTC_FORTUNA struct fortuna_prng fortuna; #endif -#ifdef SOBER128 +#ifdef LTC_SOBER128 struct sober128_prng sober128; #endif } prng_state; @@ -118,7 +118,7 @@ extern struct ltc_prng_descriptor { int (*test)(void); } prng_descriptor[]; -#ifdef YARROW +#ifdef LTC_YARROW int yarrow_start(prng_state *prng); int yarrow_add_entropy(const unsigned char *in, unsigned long inlen, prng_state *prng); int yarrow_ready(prng_state *prng); @@ -130,7 +130,7 @@ int yarrow_test(void); extern const struct ltc_prng_descriptor yarrow_desc; #endif -#ifdef FORTUNA +#ifdef LTC_FORTUNA int fortuna_start(prng_state *prng); int fortuna_add_entropy(const unsigned char *in, unsigned long inlen, prng_state *prng); int fortuna_ready(prng_state *prng); @@ -142,7 +142,7 @@ int fortuna_test(void); extern const struct ltc_prng_descriptor fortuna_desc; #endif -#ifdef RC4 +#ifdef LTC_RC4 int rc4_start(prng_state *prng); int rc4_add_entropy(const unsigned char *in, unsigned long inlen, prng_state *prng); int rc4_ready(prng_state *prng); @@ -154,7 +154,7 @@ int rc4_test(void); extern const struct ltc_prng_descriptor rc4_desc; #endif -#ifdef SPRNG +#ifdef LTC_SPRNG int sprng_start(prng_state *prng); int sprng_add_entropy(const unsigned char *in, unsigned long inlen, prng_state *prng); int sprng_ready(prng_state *prng); @@ -166,7 +166,7 @@ int sprng_test(void); extern const struct ltc_prng_descriptor sprng_desc; #endif -#ifdef SOBER128 +#ifdef LTC_SOBER128 int sober128_start(prng_state *prng); int sober128_add_entropy(const unsigned char *in, unsigned long inlen, prng_state *prng); int sober128_ready(prng_state *prng); diff --git a/src/mac/f9/f9_done.c b/src/mac/f9/f9_done.c index 68e77beec..8da4c7325 100644 --- a/src/mac/f9/f9_done.c +++ b/src/mac/f9/f9_done.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/mac/f9/f9_file.c b/src/mac/f9/f9_file.c index 0fe37f9d7..88216a945 100644 --- a/src/mac/f9/f9_file.c +++ b/src/mac/f9/f9_file.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/mac/f9/f9_init.c b/src/mac/f9/f9_init.c index 15cf41c33..b6b878f4e 100644 --- a/src/mac/f9/f9_init.c +++ b/src/mac/f9/f9_init.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/mac/f9/f9_memory.c b/src/mac/f9/f9_memory.c index 246127f31..0850dc342 100644 --- a/src/mac/f9/f9_memory.c +++ b/src/mac/f9/f9_memory.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/mac/f9/f9_memory_multi.c b/src/mac/f9/f9_memory_multi.c index cab6a24ff..7a13ff953 100644 --- a/src/mac/f9/f9_memory_multi.c +++ b/src/mac/f9/f9_memory_multi.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" #include diff --git a/src/mac/f9/f9_process.c b/src/mac/f9/f9_process.c index b15e18fc4..bf54d715c 100644 --- a/src/mac/f9/f9_process.c +++ b/src/mac/f9/f9_process.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/mac/f9/f9_test.c b/src/mac/f9/f9_test.c index ff9d5fdf7..b92c63064 100644 --- a/src/mac/f9/f9_test.c +++ b/src/mac/f9/f9_test.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/mac/hmac/hmac_done.c b/src/mac/hmac/hmac_done.c index a0f816129..da5f31a91 100644 --- a/src/mac/hmac/hmac_done.c +++ b/src/mac/hmac/hmac_done.c @@ -6,24 +6,24 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" /** @file hmac_done.c - HMAC support, terminate stream, Tom St Denis/Dobes Vandermeer + LTC_HMAC support, terminate stream, Tom St Denis/Dobes Vandermeer */ #ifdef LTC_HMAC -#define HMAC_BLOCKSIZE hash_descriptor[hash].blocksize +#define LTC_HMAC_BLOCKSIZE hash_descriptor[hash].blocksize /** - Terminate an HMAC session - @param hmac The HMAC state - @param out [out] The destination of the HMAC authentication tag - @param outlen [in/out] The max size and resulting size of the HMAC authentication tag + Terminate an LTC_HMAC session + @param hmac The LTC_HMAC state + @param out [out] The destination of the LTC_HMAC authentication tag + @param outlen [in/out] The max size and resulting size of the LTC_HMAC authentication tag @return CRYPT_OK if successful */ int hmac_done(hmac_state *hmac, unsigned char *out, unsigned long *outlen) @@ -45,7 +45,7 @@ int hmac_done(hmac_state *hmac, unsigned char *out, unsigned long *outlen) hashsize = hash_descriptor[hash].hashsize; /* allocate buffers */ - buf = XMALLOC(HMAC_BLOCKSIZE); + buf = XMALLOC(LTC_HMAC_BLOCKSIZE); isha = XMALLOC(hashsize); if (buf == NULL || isha == NULL) { if (buf != NULL) { @@ -57,13 +57,13 @@ int hmac_done(hmac_state *hmac, unsigned char *out, unsigned long *outlen) return CRYPT_MEM; } - /* Get the hash of the first HMAC vector plus the data */ + /* Get the hash of the first LTC_HMAC vector plus the data */ if ((err = hash_descriptor[hash].done(&hmac->md, isha)) != CRYPT_OK) { goto LBL_ERR; } - /* Create the second HMAC vector vector for step (3) */ - for(i=0; i < HMAC_BLOCKSIZE; i++) { + /* Create the second LTC_HMAC vector vector for step (3) */ + for(i=0; i < LTC_HMAC_BLOCKSIZE; i++) { buf[i] = hmac->key[i] ^ 0x5C; } @@ -71,7 +71,7 @@ int hmac_done(hmac_state *hmac, unsigned char *out, unsigned long *outlen) if ((err = hash_descriptor[hash].init(&hmac->md)) != CRYPT_OK) { goto LBL_ERR; } - if ((err = hash_descriptor[hash].process(&hmac->md, buf, HMAC_BLOCKSIZE)) != CRYPT_OK) { + if ((err = hash_descriptor[hash].process(&hmac->md, buf, LTC_HMAC_BLOCKSIZE)) != CRYPT_OK) { goto LBL_ERR; } if ((err = hash_descriptor[hash].process(&hmac->md, isha, hashsize)) != CRYPT_OK) { diff --git a/src/mac/hmac/hmac_file.c b/src/mac/hmac/hmac_file.c index 2d397c9d6..b1d94389d 100644 --- a/src/mac/hmac/hmac_file.c +++ b/src/mac/hmac/hmac_file.c @@ -6,24 +6,24 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" /** @file hmac_file.c - HMAC support, process a file, Tom St Denis/Dobes Vandermeer + LTC_HMAC support, process a file, Tom St Denis/Dobes Vandermeer */ #ifdef LTC_HMAC /** - HMAC a file + LTC_HMAC a file @param hash The index of the hash you wish to use - @param fname The name of the file you wish to HMAC + @param fname The name of the file you wish to LTC_HMAC @param key The secret key @param keylen The length of the secret key - @param out [out] The HMAC authentication tag + @param out [out] The LTC_HMAC authentication tag @param outlen [in/out] The max size and resulting size of the authentication tag @return CRYPT_OK if successful, CRYPT_NOP if file support has been disabled */ diff --git a/src/mac/hmac/hmac_init.c b/src/mac/hmac/hmac_init.c index 05e067b51..684fb2851 100644 --- a/src/mac/hmac/hmac_init.c +++ b/src/mac/hmac/hmac_init.c @@ -6,22 +6,22 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" /** @file hmac_init.c - HMAC support, initialize state, Tom St Denis/Dobes Vandermeer + LTC_HMAC support, initialize state, Tom St Denis/Dobes Vandermeer */ #ifdef LTC_HMAC -#define HMAC_BLOCKSIZE hash_descriptor[hash].blocksize +#define LTC_HMAC_BLOCKSIZE hash_descriptor[hash].blocksize /** - Initialize an HMAC context. - @param hmac The HMAC state + Initialize an LTC_HMAC context. + @param hmac The LTC_HMAC state @param hash The index of the hash you want to use @param key The secret key @param keylen The length of the secret key (octets) @@ -50,37 +50,37 @@ int hmac_init(hmac_state *hmac, int hash, const unsigned char *key, unsigned lon } /* allocate ram for buf */ - buf = XMALLOC(HMAC_BLOCKSIZE); + buf = XMALLOC(LTC_HMAC_BLOCKSIZE); if (buf == NULL) { return CRYPT_MEM; } /* allocate memory for key */ - hmac->key = XMALLOC(HMAC_BLOCKSIZE); + hmac->key = XMALLOC(LTC_HMAC_BLOCKSIZE); if (hmac->key == NULL) { XFREE(buf); return CRYPT_MEM; } /* (1) make sure we have a large enough key */ - if(keylen > HMAC_BLOCKSIZE) { - z = HMAC_BLOCKSIZE; + if(keylen > LTC_HMAC_BLOCKSIZE) { + z = LTC_HMAC_BLOCKSIZE; if ((err = hash_memory(hash, key, keylen, hmac->key, &z)) != CRYPT_OK) { goto LBL_ERR; } - if(hashsize < HMAC_BLOCKSIZE) { - zeromem((hmac->key) + hashsize, (size_t)(HMAC_BLOCKSIZE - hashsize)); + if(hashsize < LTC_HMAC_BLOCKSIZE) { + zeromem((hmac->key) + hashsize, (size_t)(LTC_HMAC_BLOCKSIZE - hashsize)); } keylen = hashsize; } else { XMEMCPY(hmac->key, key, (size_t)keylen); - if(keylen < HMAC_BLOCKSIZE) { - zeromem((hmac->key) + keylen, (size_t)(HMAC_BLOCKSIZE - keylen)); + if(keylen < LTC_HMAC_BLOCKSIZE) { + zeromem((hmac->key) + keylen, (size_t)(LTC_HMAC_BLOCKSIZE - keylen)); } } /* Create the initial vector for step (3) */ - for(i=0; i < HMAC_BLOCKSIZE; i++) { + for(i=0; i < LTC_HMAC_BLOCKSIZE; i++) { buf[i] = hmac->key[i] ^ 0x36; } @@ -89,7 +89,7 @@ int hmac_init(hmac_state *hmac, int hash, const unsigned char *key, unsigned lon goto LBL_ERR; } - if ((err = hash_descriptor[hash].process(&hmac->md, buf, HMAC_BLOCKSIZE)) != CRYPT_OK) { + if ((err = hash_descriptor[hash].process(&hmac->md, buf, LTC_HMAC_BLOCKSIZE)) != CRYPT_OK) { goto LBL_ERR; } goto done; @@ -98,7 +98,7 @@ int hmac_init(hmac_state *hmac, int hash, const unsigned char *key, unsigned lon XFREE(hmac->key); done: #ifdef LTC_CLEAN_STACK - zeromem(buf, HMAC_BLOCKSIZE); + zeromem(buf, LTC_HMAC_BLOCKSIZE); #endif XFREE(buf); diff --git a/src/mac/hmac/hmac_memory.c b/src/mac/hmac/hmac_memory.c index 994e5dbd1..9df80eaa3 100644 --- a/src/mac/hmac/hmac_memory.c +++ b/src/mac/hmac/hmac_memory.c @@ -6,24 +6,24 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" /** @file hmac_memory.c - HMAC support, process a block of memory, Tom St Denis/Dobes Vandermeer + LTC_HMAC support, process a block of memory, Tom St Denis/Dobes Vandermeer */ #ifdef LTC_HMAC /** - HMAC a block of memory to produce the authentication tag + LTC_HMAC a block of memory to produce the authentication tag @param hash The index of the hash to use @param key The secret key @param keylen The length of the secret key (octets) - @param in The data to HMAC - @param inlen The length of the data to HMAC (octets) + @param in The data to LTC_HMAC + @param inlen The length of the data to LTC_HMAC (octets) @param out [out] Destination of the authentication tag @param outlen [in/out] Max size and resulting size of authentication tag @return CRYPT_OK if successful diff --git a/src/mac/hmac/hmac_memory_multi.c b/src/mac/hmac/hmac_memory_multi.c index f393c0b2e..c3d461b82 100644 --- a/src/mac/hmac/hmac_memory_multi.c +++ b/src/mac/hmac/hmac_memory_multi.c @@ -6,28 +6,28 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" #include /** @file hmac_memory_multi.c - HMAC support, process multiple blocks of memory, Tom St Denis/Dobes Vandermeer + LTC_HMAC support, process multiple blocks of memory, Tom St Denis/Dobes Vandermeer */ #ifdef LTC_HMAC /** - HMAC multiple blocks of memory to produce the authentication tag + LTC_HMAC multiple blocks of memory to produce the authentication tag @param hash The index of the hash to use @param key The secret key @param keylen The length of the secret key (octets) @param out [out] Destination of the authentication tag @param outlen [in/out] Max size and resulting size of authentication tag - @param in The data to HMAC - @param inlen The length of the data to HMAC (octets) - @param ... tuples of (data,len) pairs to HMAC, terminated with a (NULL,x) (x=don't care) + @param in The data to LTC_HMAC + @param inlen The length of the data to LTC_HMAC (octets) + @param ... tuples of (data,len) pairs to LTC_HMAC, terminated with a (NULL,x) (x=don't care) @return CRYPT_OK if successful */ int hmac_memory_multi(int hash, diff --git a/src/mac/hmac/hmac_process.c b/src/mac/hmac/hmac_process.c index ebe64711e..802de1fb5 100644 --- a/src/mac/hmac/hmac_process.c +++ b/src/mac/hmac/hmac_process.c @@ -6,22 +6,22 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" /** @file hmac_process.c - HMAC support, process data, Tom St Denis/Dobes Vandermeer + LTC_HMAC support, process data, Tom St Denis/Dobes Vandermeer */ #ifdef LTC_HMAC /** - Process data through HMAC + Process data through LTC_HMAC @param hmac The hmac state - @param in The data to send through HMAC - @param inlen The length of the data to HMAC (octets) + @param in The data to send through LTC_HMAC + @param inlen The length of the data to LTC_HMAC (octets) @return CRYPT_OK if successful */ int hmac_process(hmac_state *hmac, const unsigned char *in, unsigned long inlen) diff --git a/src/mac/hmac/hmac_test.c b/src/mac/hmac/hmac_test.c index 1c588ce25..af43da6ae 100644 --- a/src/mac/hmac/hmac_test.c +++ b/src/mac/hmac/hmac_test.c @@ -6,18 +6,18 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" /** @file hmac_test.c - HMAC support, self-test, Tom St Denis/Dobes Vandermeer + LTC_HMAC support, self-test, Tom St Denis/Dobes Vandermeer */ #ifdef LTC_HMAC -#define HMAC_BLOCKSIZE hash_descriptor[hash].blocksize +#define LTC_HMAC_BLOCKSIZE hash_descriptor[hash].blocksize /* TEST CASES SOURCE: @@ -27,11 +27,11 @@ Request for Comments: 2202 IBM Category: Informational R. Glenn NIST September 1997 - Test Cases for HMAC-MD5 and HMAC-SHA-1 + Test Cases for LTC_HMAC-LTC_MD5 and LTC_HMAC-LTC_SHA-1 */ /** - HMAC self-test + LTC_HMAC self-test @return CRYPT_OK if successful, CRYPT_NOP if tests have been disabled. */ int hmac_test(void) @@ -52,7 +52,7 @@ int hmac_test(void) unsigned char digest[MAXBLOCKSIZE]; } cases[] = { /* - 3. Test Cases for HMAC-SHA-1 + 3. Test Cases for LTC_HMAC-LTC_SHA-1 test_case = 1 key = 0x0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c @@ -118,7 +118,7 @@ int hmac_test(void) 0x6b, 0xba, 0xa7, 0x96, 0x5c, 0x78, 0x08, 0xbb, 0xff, 0x1a, 0x91} }, /* - 2. Test Cases for HMAC-MD5 + 2. Test Cases for LTC_HMAC-LTC_MD5 test_case = 1 key = 0x0b 0b 0b 0b @@ -272,7 +272,7 @@ Key First" outlen = sizeof(digest); if((err = hmac_memory(hash, cases[i].key, cases[i].keylen, cases[i].data, cases[i].datalen, digest, &outlen)) != CRYPT_OK) { #if 0 - printf("HMAC-%s test #%d, %s\n", cases[i].algo, cases[i].num, error_to_string(err)); + printf("LTC_HMAC-%s test #%d, %s\n", cases[i].algo, cases[i].num, error_to_string(err)); #endif return err; } @@ -281,7 +281,7 @@ Key First" failed++; #if 0 unsigned int j; - printf("\nHMAC-%s test #%d:\n", cases[i].algo, cases[i].num); + printf("\nLTC_HMAC-%s test #%d:\n", cases[i].algo, cases[i].num); printf( "Result: 0x"); for(j=0; j < hash_descriptor[hash].hashsize; j++) { printf("%2x ", digest[j]); @@ -294,7 +294,7 @@ Key First" return CRYPT_ERROR; #endif } else { - /* printf("HMAC-%s test #%d: Passed\n", cases[i].algo, cases[i].num); */ + /* printf("LTC_HMAC-%s test #%d: Passed\n", cases[i].algo, cases[i].num); */ } } diff --git a/src/mac/omac/omac_done.c b/src/mac/omac/omac_done.c index 6f3c41bd1..796bdf9b2 100644 --- a/src/mac/omac/omac_done.c +++ b/src/mac/omac/omac_done.c @@ -6,20 +6,20 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" /** @file omac_done.c - OMAC1 support, terminate a stream, Tom St Denis + LTC_OMAC1 support, terminate a stream, Tom St Denis */ #ifdef LTC_OMAC /** - Terminate an OMAC stream - @param omac The OMAC state + Terminate an LTC_OMAC stream + @param omac The LTC_OMAC state @param out [out] Destination for the authentication tag @param outlen [in/out] The max size and resulting size of the authentication tag @return CRYPT_OK if successful diff --git a/src/mac/omac/omac_file.c b/src/mac/omac/omac_file.c index 475248814..54871e0b2 100644 --- a/src/mac/omac/omac_file.c +++ b/src/mac/omac/omac_file.c @@ -6,23 +6,23 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" /** @file omac_file.c - OMAC1 support, process a file, Tom St Denis + LTC_OMAC1 support, process a file, Tom St Denis */ #ifdef LTC_OMAC /** - OMAC a file + LTC_OMAC a file @param cipher The index of the cipher desired @param key The secret key @param keylen The length of the secret key (octets) - @param filename The name of the file you wish to OMAC + @param filename The name of the file you wish to LTC_OMAC @param out [out] Where the authentication tag is to be stored @param outlen [in/out] The max size and resulting size of the authentication tag @return CRYPT_OK if successful, CRYPT_NOP if file support has been disabled diff --git a/src/mac/omac/omac_init.c b/src/mac/omac/omac_init.c index 8d1d24570..36a4a3d9a 100644 --- a/src/mac/omac/omac_init.c +++ b/src/mac/omac/omac_init.c @@ -6,21 +6,21 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" /** @file omac_init.c - OMAC1 support, initialize state, by Tom St Denis + LTC_OMAC1 support, initialize state, by Tom St Denis */ #ifdef LTC_OMAC /** - Initialize an OMAC state - @param omac The OMAC state to initialize + Initialize an LTC_OMAC state + @param omac The LTC_OMAC state to initialize @param cipher The index of the desired cipher @param key The secret key @param keylen The length of the secret key (octets) diff --git a/src/mac/omac/omac_memory.c b/src/mac/omac/omac_memory.c index c60d3be9b..c9f339295 100644 --- a/src/mac/omac/omac_memory.c +++ b/src/mac/omac/omac_memory.c @@ -6,24 +6,24 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" /** @file omac_memory.c - OMAC1 support, process a block of memory, Tom St Denis + LTC_OMAC1 support, process a block of memory, Tom St Denis */ #ifdef LTC_OMAC /** - OMAC a block of memory + LTC_OMAC a block of memory @param cipher The index of the desired cipher @param key The secret key @param keylen The length of the secret key (octets) - @param in The data to send through OMAC - @param inlen The length of the data to send through OMAC (octets) + @param in The data to send through LTC_OMAC + @param inlen The length of the data to send through LTC_OMAC (octets) @param out [out] The destination of the authentication tag @param outlen [in/out] The max size and resulting size of the authentication tag (octets) @return CRYPT_OK if successful diff --git a/src/mac/omac/omac_memory_multi.c b/src/mac/omac/omac_memory_multi.c index bb03ca61d..3db827041 100644 --- a/src/mac/omac/omac_memory_multi.c +++ b/src/mac/omac/omac_memory_multi.c @@ -6,28 +6,28 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" #include /** @file omac_memory_multi.c - OMAC1 support, process multiple blocks of memory, Tom St Denis + LTC_OMAC1 support, process multiple blocks of memory, Tom St Denis */ #ifdef LTC_OMAC /** - OMAC multiple blocks of memory + LTC_OMAC multiple blocks of memory @param cipher The index of the desired cipher @param key The secret key @param keylen The length of the secret key (octets) @param out [out] The destination of the authentication tag @param outlen [in/out] The max size and resulting size of the authentication tag (octets) - @param in The data to send through OMAC - @param inlen The length of the data to send through OMAC (octets) - @param ... tuples of (data,len) pairs to OMAC, terminated with a (NULL,x) (x=don't care) + @param in The data to send through LTC_OMAC + @param inlen The length of the data to send through LTC_OMAC (octets) + @param ... tuples of (data,len) pairs to LTC_OMAC, terminated with a (NULL,x) (x=don't care) @return CRYPT_OK if successful */ int omac_memory_multi(int cipher, diff --git a/src/mac/omac/omac_process.c b/src/mac/omac/omac_process.c index b8e2fed10..a70b179b5 100644 --- a/src/mac/omac/omac_process.c +++ b/src/mac/omac/omac_process.c @@ -6,28 +6,28 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" /** @file omac_process.c - OMAC1 support, process data, Tom St Denis + LTC_OMAC1 support, process data, Tom St Denis */ #ifdef LTC_OMAC /** - Process data through OMAC - @param omac The OMAC state - @param in The input data to send through OMAC + Process data through LTC_OMAC + @param omac The LTC_OMAC state + @param in The input data to send through LTC_OMAC @param inlen The length of the input (octets) @return CRYPT_OK if successful */ int omac_process(omac_state *omac, const unsigned char *in, unsigned long inlen) { - unsigned long n, x; + unsigned long n, x, blklen; int err; LTC_ARGCHK(omac != NULL); @@ -42,13 +42,14 @@ int omac_process(omac_state *omac, const unsigned char *in, unsigned long inlen) } #ifdef LTC_FAST - if (omac->buflen == 0 && inlen > 16) { - int y; - for (x = 0; x < (inlen - 16); x += 16) { - for (y = 0; y < 16; y += sizeof(LTC_FAST_TYPE)) { + blklen = cipher_descriptor[omac->cipher_idx].block_length; + if (omac->buflen == 0 && inlen > blklen) { + unsigned long y; + for (x = 0; x < (inlen - blklen); x += blklen) { + for (y = 0; y < blklen; y += sizeof(LTC_FAST_TYPE)) { *((LTC_FAST_TYPE*)(&omac->prev[y])) ^= *((LTC_FAST_TYPE*)(&in[y])); } - in += 16; + in += blklen; if ((err = cipher_descriptor[omac->cipher_idx].ecb_encrypt(omac->prev, omac->prev, &omac->key)) != CRYPT_OK) { return err; } diff --git a/src/mac/omac/omac_test.c b/src/mac/omac/omac_test.c index df3f31785..10f572563 100644 --- a/src/mac/omac/omac_test.c +++ b/src/mac/omac/omac_test.c @@ -6,19 +6,19 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" /** @file omac_test.c - OMAC1 support, self-test, by Tom St Denis + LTC_OMAC1 support, self-test, by Tom St Denis */ #ifdef LTC_OMAC /** - Test the OMAC setup + Test the LTC_OMAC setup @return CRYPT_OK if successful, CRYPT_NOP if tests have been disabled */ int omac_test(void) diff --git a/src/mac/pelican/pelican.c b/src/mac/pelican/pelican.c index 518fc132c..47640a335 100644 --- a/src/mac/pelican/pelican.c +++ b/src/mac/pelican/pelican.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" @@ -15,7 +15,7 @@ Pelican MAC, initialize state, by Tom St Denis */ -#ifdef PELICAN +#ifdef LTC_PELICAN #define ENCRYPT_ONLY #define PELI_TAB diff --git a/src/mac/pelican/pelican_memory.c b/src/mac/pelican/pelican_memory.c index 3bef6ac52..6eabaa16a 100644 --- a/src/mac/pelican/pelican_memory.c +++ b/src/mac/pelican/pelican_memory.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" @@ -15,7 +15,7 @@ Pelican MAC, MAC a block of memory, by Tom St Denis */ -#ifdef PELICAN +#ifdef LTC_PELICAN /** Pelican block of memory diff --git a/src/mac/pelican/pelican_test.c b/src/mac/pelican/pelican_test.c index d51df8521..e743faa77 100644 --- a/src/mac/pelican/pelican_test.c +++ b/src/mac/pelican/pelican_test.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" @@ -15,7 +15,7 @@ Pelican MAC, test, by Tom St Denis */ -#ifdef PELICAN +#ifdef LTC_PELICAN int pelican_test(void) { diff --git a/src/mac/pmac/pmac_done.c b/src/mac/pmac/pmac_done.c index 7f8002fc2..88076c68e 100644 --- a/src/mac/pmac/pmac_done.c +++ b/src/mac/pmac/pmac_done.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/mac/pmac/pmac_file.c b/src/mac/pmac/pmac_file.c index 851373420..c7a9f74dc 100644 --- a/src/mac/pmac/pmac_file.c +++ b/src/mac/pmac/pmac_file.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/mac/pmac/pmac_init.c b/src/mac/pmac/pmac_init.c index c39b20d91..e4cf57139 100644 --- a/src/mac/pmac/pmac_init.c +++ b/src/mac/pmac/pmac_init.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/mac/pmac/pmac_memory.c b/src/mac/pmac/pmac_memory.c index 5bcc3c68f..70b961641 100644 --- a/src/mac/pmac/pmac_memory.c +++ b/src/mac/pmac/pmac_memory.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/mac/pmac/pmac_memory_multi.c b/src/mac/pmac/pmac_memory_multi.c index cb73d1a03..36783d3ba 100644 --- a/src/mac/pmac/pmac_memory_multi.c +++ b/src/mac/pmac/pmac_memory_multi.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" #include diff --git a/src/mac/pmac/pmac_ntz.c b/src/mac/pmac/pmac_ntz.c index e0dfd815f..b5137da3c 100644 --- a/src/mac/pmac/pmac_ntz.c +++ b/src/mac/pmac/pmac_ntz.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/mac/pmac/pmac_process.c b/src/mac/pmac/pmac_process.c index 686a7ce72..e32e65f21 100644 --- a/src/mac/pmac/pmac_process.c +++ b/src/mac/pmac/pmac_process.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/mac/pmac/pmac_shift_xor.c b/src/mac/pmac/pmac_shift_xor.c index 5d33d7d44..122cadb53 100644 --- a/src/mac/pmac/pmac_shift_xor.c +++ b/src/mac/pmac/pmac_shift_xor.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/mac/pmac/pmac_test.c b/src/mac/pmac/pmac_test.c index ac7c87bdd..5d2e42a0c 100644 --- a/src/mac/pmac/pmac_test.c +++ b/src/mac/pmac/pmac_test.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" @@ -19,7 +19,7 @@ #ifdef LTC_PMAC /** - Test the OMAC implementation + Test the LTC_OMAC implementation @return CRYPT_OK if successful, CRYPT_NOP if testing has been disabled */ int pmac_test(void) diff --git a/src/mac/xcbc/xcbc_done.c b/src/mac/xcbc/xcbc_done.c index 81e6c479a..6640eeb16 100644 --- a/src/mac/xcbc/xcbc_done.c +++ b/src/mac/xcbc/xcbc_done.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/mac/xcbc/xcbc_file.c b/src/mac/xcbc/xcbc_file.c index 6c6dcbe79..3d75b4ec3 100644 --- a/src/mac/xcbc/xcbc_file.c +++ b/src/mac/xcbc/xcbc_file.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/mac/xcbc/xcbc_init.c b/src/mac/xcbc/xcbc_init.c index 93eaf1dec..94c9d79f1 100644 --- a/src/mac/xcbc/xcbc_init.c +++ b/src/mac/xcbc/xcbc_init.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" @@ -28,6 +28,7 @@ int xcbc_init(xcbc_state *xcbc, int cipher, const unsigned char *key, unsigned l { int x, y, err; symmetric_key *skey; + unsigned long k1; LTC_ARGCHK(xcbc != NULL); LTC_ARGCHK(key != NULL); @@ -43,26 +44,45 @@ int xcbc_init(xcbc_state *xcbc, int cipher, const unsigned char *key, unsigned l } #endif - /* schedule the user key */ - skey = XCALLOC(1, sizeof(*skey)); - if (skey == NULL) { - return CRYPT_MEM; - } + skey = NULL; - if ((err = cipher_descriptor[cipher].setup(key, keylen, 0, skey)) != CRYPT_OK) { - goto done; - } + /* are we in pure XCBC mode with three keys? */ + if (keylen & LTC_XCBC_PURE) { + keylen &= ~LTC_XCBC_PURE; + + if (keylen < 2UL*cipher_descriptor[cipher].block_length) { + return CRYPT_INVALID_ARG; + } + + k1 = keylen - 2*cipher_descriptor[cipher].block_length; + XMEMCPY(xcbc->K[0], key, k1); + XMEMCPY(xcbc->K[1], key+k1, cipher_descriptor[cipher].block_length); + XMEMCPY(xcbc->K[2], key+k1 + cipher_descriptor[cipher].block_length, cipher_descriptor[cipher].block_length); + } else { + /* use the key expansion */ + k1 = cipher_descriptor[cipher].block_length; + + /* schedule the user key */ + skey = XCALLOC(1, sizeof(*skey)); + if (skey == NULL) { + return CRYPT_MEM; + } + + if ((err = cipher_descriptor[cipher].setup(key, keylen, 0, skey)) != CRYPT_OK) { + goto done; + } - /* make the three keys */ - for (y = 0; y < 3; y++) { - for (x = 0; x < cipher_descriptor[cipher].block_length; x++) { - xcbc->K[y][x] = y + 1; - } - cipher_descriptor[cipher].ecb_encrypt(xcbc->K[y], xcbc->K[y], skey); + /* make the three keys */ + for (y = 0; y < 3; y++) { + for (x = 0; x < cipher_descriptor[cipher].block_length; x++) { + xcbc->K[y][x] = y + 1; + } + cipher_descriptor[cipher].ecb_encrypt(xcbc->K[y], xcbc->K[y], skey); + } } - + /* setup K1 */ - err = cipher_descriptor[cipher].setup(xcbc->K[0], cipher_descriptor[cipher].block_length, 0, &xcbc->key); + err = cipher_descriptor[cipher].setup(xcbc->K[0], k1, 0, &xcbc->key); /* setup struct */ zeromem(xcbc->IV, cipher_descriptor[cipher].block_length); @@ -71,10 +91,12 @@ int xcbc_init(xcbc_state *xcbc, int cipher, const unsigned char *key, unsigned l xcbc->buflen = 0; done: cipher_descriptor[cipher].done(skey); + if (skey != NULL) { #ifdef LTC_CLEAN_STACK - zeromem(skey, sizeof(*skey)); + zeromem(skey, sizeof(*skey)); #endif - XFREE(skey); + XFREE(skey); + } return err; } diff --git a/src/mac/xcbc/xcbc_memory.c b/src/mac/xcbc/xcbc_memory.c index daf6778c9..124817ac2 100644 --- a/src/mac/xcbc/xcbc_memory.c +++ b/src/mac/xcbc/xcbc_memory.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/mac/xcbc/xcbc_memory_multi.c b/src/mac/xcbc/xcbc_memory_multi.c index 695996e2a..a23790704 100644 --- a/src/mac/xcbc/xcbc_memory_multi.c +++ b/src/mac/xcbc/xcbc_memory_multi.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" #include diff --git a/src/mac/xcbc/xcbc_process.c b/src/mac/xcbc/xcbc_process.c index a5a8f38c4..46ab4a075 100644 --- a/src/mac/xcbc/xcbc_process.c +++ b/src/mac/xcbc/xcbc_process.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/mac/xcbc/xcbc_test.c b/src/mac/xcbc/xcbc_test.c index cb1d62f5e..1bd584083 100644 --- a/src/mac/xcbc/xcbc_test.c +++ b/src/mac/xcbc/xcbc_test.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/math/fp/ltc_ecc_fp_mulmod.c b/src/math/fp/ltc_ecc_fp_mulmod.c index 77c0d2af5..b9819e370 100644 --- a/src/math/fp/ltc_ecc_fp_mulmod.c +++ b/src/math/fp/ltc_ecc_fp_mulmod.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" @@ -15,7 +15,7 @@ ECC Crypto, Tom St Denis */ -#if defined(MECC) && defined(MECC_FP) +#if defined(LTC_MECC) && defined(LTC_MECC_FP) #include /* number of entries in the cache */ @@ -38,6 +38,7 @@ static struct { *LUT[1U<= 0 && fp_cache[z].g) { if (fp_cache[z].mu != NULL) { mp_clear(fp_cache[z].mu); fp_cache[z].mu = NULL; @@ -1100,13 +1101,15 @@ static int accel_fp_mul2add(int idx1, int idx2, } /** ECC Fixed Point mulmod global - @param k The multiplicand - @param G Base point to multiply - @param R [out] Destination of product - @param modulus The modulus for the curve - @param map [boolean] If non-zero maps the point back to affine co-ordinates, otherwise it's left in jacobian-montgomery form - @return CRYPT_OK if successful -*/ + Computes kA*A + kB*B = C using Shamir's Trick + @param A First point to multiply + @param kA What to multiple A by + @param B Second point to multiply + @param kB What to multiple B by + @param C [out] Destination point (can overlap with A or B) + @param modulus Modulus for curve + @return CRYPT_OK on success +*/ int ltc_ecc_fp_mul2add(ecc_point *A, void *kA, ecc_point *B, void *kB, ecc_point *C, void *modulus) @@ -1123,34 +1126,36 @@ int ltc_ecc_fp_mul2add(ecc_point *A, void *kA, /* no entry? */ if (idx1 == -1) { /* find hole and add it */ - idx1 = find_hole(); - - if ((err = add_entry(idx1, A)) != CRYPT_OK) { - goto LBL_ERR; + if ((idx1 = find_hole()) >= 0) { + if ((err = add_entry(idx1, A)) != CRYPT_OK) { + goto LBL_ERR; + } } } + if (idx1 != -1) { + /* increment LRU */ + ++(fp_cache[idx1].lru_count); + } - /* increment LRU */ - ++(fp_cache[idx1].lru_count); - /* find point */ idx2 = find_base(B); /* no entry? */ if (idx2 == -1) { /* find hole and add it */ - idx2 = find_hole(); - - if ((err = add_entry(idx2, B)) != CRYPT_OK) { - goto LBL_ERR; + if ((idx2 = find_hole()) >= 0) { + if ((err = add_entry(idx2, B)) != CRYPT_OK) { + goto LBL_ERR; + } } } - - /* increment LRU */ - ++(fp_cache[idx2].lru_count); + if (idx2 != -1) { + /* increment LRU */ + ++(fp_cache[idx2].lru_count); + } /* if it's 2 build the LUT, if it's higher just use the LUT */ - if (fp_cache[idx1].lru_count == 2) { + if (idx1 >= 0 && fp_cache[idx1].lru_count == 2) { /* compute mp */ if ((err = mp_montgomery_setup(modulus, &mp)) != CRYPT_OK) { goto LBL_ERR; } @@ -1169,7 +1174,7 @@ int ltc_ecc_fp_mul2add(ecc_point *A, void *kA, } /* if it's 2 build the LUT, if it's higher just use the LUT */ - if (fp_cache[idx2].lru_count == 2) { + if (idx2 >= 0 && fp_cache[idx2].lru_count == 2) { if (mp == NULL) { /* compute mp */ if ((err = mp_montgomery_setup(modulus, &mp)) != CRYPT_OK) { goto LBL_ERR; } @@ -1190,7 +1195,7 @@ int ltc_ecc_fp_mul2add(ecc_point *A, void *kA, } - if (fp_cache[idx1].lru_count >= 2 && fp_cache[idx2].lru_count >= 2) { + if (idx1 >=0 && idx2 >= 0 && fp_cache[idx1].lru_count >= 2 && fp_cache[idx2].lru_count >= 2) { if (mp == NULL) { /* compute mp */ if ((err = mp_montgomery_setup(modulus, &mp)) != CRYPT_OK) { goto LBL_ERR; } @@ -1235,16 +1240,20 @@ int ltc_ecc_fp_mulmod(void *k, ecc_point *G, ecc_point *R, void *modulus, int ma /* find hole and add it */ idx = find_hole(); - if ((err = add_entry(idx, G)) != CRYPT_OK) { - goto LBL_ERR; + if (idx >= 0) { + if ((err = add_entry(idx, G)) != CRYPT_OK) { + goto LBL_ERR; + } } } + if (idx != -1) { + /* increment LRU */ + ++(fp_cache[idx].lru_count); + } - /* increment LRU */ - ++(fp_cache[idx].lru_count); /* if it's 2 build the LUT, if it's higher just use the LUT */ - if (fp_cache[idx].lru_count == 2) { + if (idx >= 0 && fp_cache[idx].lru_count == 2) { /* compute mp */ if ((err = mp_montgomery_setup(modulus, &mp)) != CRYPT_OK) { goto LBL_ERR; } @@ -1262,7 +1271,7 @@ int ltc_ecc_fp_mulmod(void *k, ecc_point *G, ecc_point *R, void *modulus, int ma } } - if (fp_cache[idx].lru_count >= 2) { + if (idx >= 0 && fp_cache[idx].lru_count >= 2) { if (mp == NULL) { /* compute mp */ if ((err = mp_montgomery_setup(modulus, &mp)) != CRYPT_OK) { goto LBL_ERR; } @@ -1282,11 +1291,10 @@ int ltc_ecc_fp_mulmod(void *k, ecc_point *G, ecc_point *R, void *modulus, int ma return err; } -/** Free the Fixed Point tables */ -void ltc_ecc_fp_free(void) +/* helper function for freeing the cache ... must be called with the cache mutex locked */ +static void ltc_ecc_fp_free_cache(void) { unsigned x, y; - LTC_MUTEX_LOCK(<c_ecc_fp_lock); for (x = 0; x < FP_ENTRIES; x++) { if (fp_cache[x].g != NULL) { for (y = 0; y < (1U<= 0) { + /* it is already in the cache ... just check that the LUT is initialized */ + if(fp_cache[idx].lru_count >= 2) { + LTC_MUTEX_UNLOCK(<c_ecc_fp_lock); + return CRYPT_OK; + } + } + + if(idx == -1 && (idx = find_hole()) == -1) { + err = CRYPT_BUFFER_OVERFLOW; + goto LBL_ERR; + } + if ((err = add_entry(idx, g)) != CRYPT_OK) { + goto LBL_ERR; + } + /* compute mp */ + if ((err = mp_montgomery_setup(modulus, &mp)) != CRYPT_OK) { + goto LBL_ERR; + } + + /* compute mu */ + if ((err = mp_init(&mu)) != CRYPT_OK) { + goto LBL_ERR; + } + if ((err = mp_montgomery_normalization(mu, modulus)) != CRYPT_OK) { + goto LBL_ERR; + } + + /* build the LUT */ + if ((err = build_lut(idx, modulus, mp, mu)) != CRYPT_OK) { + goto LBL_ERR; + } + fp_cache[idx].lru_count = 2; + fp_cache[idx].lock = lock; +LBL_ERR: + LTC_MUTEX_UNLOCK(<c_ecc_fp_lock); + if (mp != NULL) { + mp_montgomery_free(mp); + } + if (mu != NULL) { + mp_clear(mu); + } + return err; +} + +/** Prevent/permit the FP cache from being updated + @param flag If flag is 0, remove cache lock (unlock), otherwise lock it +*/ +void ltc_ecc_fp_tablelock(int lock) +{ + int i; + + LTC_MUTEX_LOCK(<c_ecc_fp_lock); + for (i = 0; i < FP_ENTRIES; i++) { + fp_cache[i].lock = lock; + } + LTC_MUTEX_UNLOCK(<c_ecc_fp_lock); +} + +/** Export the current cache as a binary packet + @param out [out] pointer to malloc'ed space containing the packet + @param outlen [out] size of exported packet + @return CRYPT_OK if successful +*/ +int ltc_ecc_fp_save_state(unsigned char **out, unsigned long *outlen) +{ + ltc_asn1_list *cache_entry; + unsigned int i, j, k; + unsigned long fp_entries, fp_lut, num_entries; + int err; + + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(outlen != NULL); + + fp_entries = FP_ENTRIES; + fp_lut = FP_LUT; + num_entries = 0; + + LTC_MUTEX_LOCK(<c_ecc_fp_lock); + /* + * build the list; + Cache DEFINITIONS ::= + BEGIN + CacheDump ::= SEQUENCE { + numEntries SHORTINTEGER, + maxEntries SHORTINTEGER, + numLUT SHORTINTEGER, + cache SEQUENCE OF INTEGER + } + END + * + */ + /* + * The cache itself is a point (3 INTEGERS), + * the LUT as pairs of INTEGERS (2 * 1<x, 1); + LTC_SET_ASN1(cache_entry, j++, LTC_ASN1_INTEGER, fp_cache[i].g->y, 1); + LTC_SET_ASN1(cache_entry, j++, LTC_ASN1_INTEGER, fp_cache[i].g->z, 1); + for (k = 0; k < (1U<x, 1); + LTC_SET_ASN1(cache_entry, j++, LTC_ASN1_INTEGER, fp_cache[i].LUT[k]->y, 1); + } + LTC_SET_ASN1(cache_entry, j++, LTC_ASN1_INTEGER, fp_cache[i].mu, 1); + } + LTC_SET_ASN1(cache_entry, j++, LTC_ASN1_EOL, 0, 0); + + LTC_SET_ASN1(cache_entry, 0, LTC_ASN1_SHORT_INTEGER, &num_entries, 1); + + if ((err = der_length_sequence(cache_entry, j, outlen)) != CRYPT_OK) { + goto save_err; + } + if ((*out = XMALLOC(*outlen)) == NULL) { + err = CRYPT_MEM; + goto save_err; + } + err = der_encode_sequence(cache_entry, j, *out, outlen); +save_err: + XFREE(cache_entry); + LTC_MUTEX_UNLOCK(<c_ecc_fp_lock); + return err; +} + +/** Import a binary packet into the current cache + @param in [in] pointer to packet + @param inlen [in] size of packet (bytes) + @return CRYPT_OK if successful +*/ +int ltc_ecc_fp_restore_state(unsigned char *in, unsigned long inlen) +{ + int err; + ltc_asn1_list *asn1_list; + unsigned long num_entries, fp_entries, fp_lut; + unsigned long i, j; + unsigned int x; + + LTC_ARGCHK(in != NULL); + if (inlen == 0) { + return CRYPT_INVALID_ARG; + } + + /* zero indecies */ + i = 0; + j = 0; + asn1_list = NULL; + + LTC_MUTEX_LOCK(<c_ecc_fp_lock); + /* + * start with an empty cache + */ + ltc_ecc_fp_free_cache(); + + /* + * decode the input packet: It consists of a sequence with a few + * integers (including the FP_ENTRIES and FP_LUT sizes), followed by a + * SEQUENCE which is the cache itself. + * + * use standard decoding for the first part, then flexible for the second + */ + if((err = der_decode_sequence_multi(in, inlen, + LTC_ASN1_SHORT_INTEGER, 1, &num_entries, + LTC_ASN1_SHORT_INTEGER, 1, &fp_entries, + LTC_ASN1_SHORT_INTEGER, 1, &fp_lut, + LTC_ASN1_EOL, 0, 0)) != CRYPT_OK) { + goto ERR_OUT; + } + if (fp_entries != FP_ENTRIES || fp_lut != FP_LUT || num_entries > fp_entries) { + err = CRYPT_INVALID_PACKET; + goto ERR_OUT; + } + if ((asn1_list = XCALLOC(3+num_entries*(4+2*(1<x, 1); + LTC_SET_ASN1(asn1_list, j++, LTC_ASN1_INTEGER, fp_cache[i].g->y, 1); + LTC_SET_ASN1(asn1_list, j++, LTC_ASN1_INTEGER, fp_cache[i].g->z, 1); + for (x = 0; x < (1U<x, &p->y, NULL)) != CRYPT_OK) { + goto ERR_OUT; + } + p->z = NULL; + LTC_SET_ASN1(asn1_list, j++, LTC_ASN1_INTEGER, p->x, 1); + LTC_SET_ASN1(asn1_list, j++, LTC_ASN1_INTEGER, p->y, 1); + } + if((err = mp_init(&fp_cache[i].mu)) != CRYPT_OK) { + goto ERR_OUT; + } + LTC_SET_ASN1(asn1_list, j++, LTC_ASN1_INTEGER, fp_cache[i].mu, 1); + fp_cache[i].lru_count = 3; + fp_cache[i].lock = 1; + } + + if ((err = der_decode_sequence(in, inlen, asn1_list, j)) != CRYPT_OK) { + goto ERR_OUT; + } + XFREE(asn1_list); + LTC_MUTEX_UNLOCK(<c_ecc_fp_lock); + return CRYPT_OK; +ERR_OUT: + if(asn1_list) + XFREE(asn1_list); + ltc_ecc_fp_free_cache(); + LTC_MUTEX_UNLOCK(<c_ecc_fp_lock); + return err; +} + #endif diff --git a/src/math/gmp_desc.c b/src/math/gmp_desc.c index 2f30c2e99..c61bafe1e 100644 --- a/src/math/gmp_desc.c +++ b/src/math/gmp_desc.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #define DESC_DEF_ONLY @@ -439,29 +439,29 @@ const ltc_math_descriptor gmp_desc = { &exptmod, &isprime, -#ifdef MECC -#ifdef MECC_FP +#ifdef LTC_MECC +#ifdef LTC_MECC_FP <c_ecc_fp_mulmod, #else <c_ecc_mulmod, -#endif /* MECC_FP */ +#endif /* LTC_MECC_FP */ <c_ecc_projective_add_point, <c_ecc_projective_dbl_point, <c_ecc_map, #ifdef LTC_ECC_SHAMIR -#ifdef MECC_FP +#ifdef LTC_MECC_FP <c_ecc_fp_mul2add, #else <c_ecc_mul2add, -#endif /* MECC_FP */ +#endif /* LTC_MECC_FP */ #else NULL, #endif /* LTC_ECC_SHAMIR */ #else NULL, NULL, NULL, NULL, NULL -#endif /* MECC */ +#endif /* LTC_MECC */ -#ifdef MRSA +#ifdef LTC_MRSA &rsa_make_key, &rsa_exptmod, #else diff --git a/src/math/ltm_desc.c b/src/math/ltm_desc.c index 763841113..de0d89844 100644 --- a/src/math/ltm_desc.c +++ b/src/math/ltm_desc.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #define DESC_DEF_ONLY @@ -445,8 +445,8 @@ const ltc_math_descriptor ltm_desc = { &exptmod, &isprime, -#ifdef MECC -#ifdef MECC_FP +#ifdef LTC_MECC +#ifdef LTC_MECC_FP <c_ecc_fp_mulmod, #else <c_ecc_mulmod, @@ -455,19 +455,19 @@ const ltc_math_descriptor ltm_desc = { <c_ecc_projective_dbl_point, <c_ecc_map, #ifdef LTC_ECC_SHAMIR -#ifdef MECC_FP +#ifdef LTC_MECC_FP <c_ecc_fp_mul2add, #else <c_ecc_mul2add, -#endif /* MECC_FP */ +#endif /* LTC_MECC_FP */ #else NULL, #endif /* LTC_ECC_SHAMIR */ #else NULL, NULL, NULL, NULL, NULL, -#endif /* MECC */ +#endif /* LTC_MECC */ -#ifdef MRSA +#ifdef LTC_MRSA &rsa_make_key, &rsa_exptmod, #else diff --git a/src/math/multi.c b/src/math/multi.c index 7d27f8785..593f3536e 100644 --- a/src/math/multi.c +++ b/src/math/multi.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/math/rand_prime.c b/src/math/rand_prime.c index ad25cf5e3..f2284295a 100644 --- a/src/math/rand_prime.c +++ b/src/math/rand_prime.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/math/tfm_desc.c b/src/math/tfm_desc.c index 791a72132..f5680446d 100644 --- a/src/math/tfm_desc.c +++ b/src/math/tfm_desc.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #define DESC_DEF_ONLY @@ -403,7 +403,7 @@ static int isprime(void *a, int *b) return CRYPT_OK; } -#if defined(MECC) && defined(MECC_ACCEL) +#if defined(LTC_MECC) && defined(LTC_MECC_ACCEL) static int tfm_ecc_projective_dbl_point(ecc_point *P, ecc_point *R, void *modulus, void *Mp) { @@ -733,34 +733,34 @@ const ltc_math_descriptor tfm_desc = { &exptmod, &isprime, -#ifdef MECC -#ifdef MECC_FP +#ifdef LTC_MECC +#ifdef LTC_MECC_FP <c_ecc_fp_mulmod, #else <c_ecc_mulmod, -#endif /* MECC_FP */ -#ifdef MECC_ACCEL +#endif /* LTC_MECC_FP */ +#ifdef LTC_MECC_ACCEL &tfm_ecc_projective_add_point, &tfm_ecc_projective_dbl_point, #else <c_ecc_projective_add_point, <c_ecc_projective_dbl_point, -#endif /* MECC_ACCEL */ +#endif /* LTC_MECC_ACCEL */ <c_ecc_map, #ifdef LTC_ECC_SHAMIR -#ifdef MECC_FP +#ifdef LTC_MECC_FP <c_ecc_fp_mul2add, #else <c_ecc_mul2add, -#endif /* MECC_FP */ +#endif /* LTC_MECC_FP */ #else NULL, #endif /* LTC_ECC_SHAMIR */ #else NULL, NULL, NULL, NULL, NULL, -#endif /* MECC */ +#endif /* LTC_MECC */ -#ifdef MRSA +#ifdef LTC_MRSA &rsa_make_key, &rsa_exptmod, #else diff --git a/src/misc/base64/base64_decode.c b/src/misc/base64/base64_decode.c index 60aedcfbf..6fd0ba2af 100644 --- a/src/misc/base64/base64_decode.c +++ b/src/misc/base64/base64_decode.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" @@ -16,7 +16,7 @@ */ -#ifdef BASE64 +#ifdef LTC_BASE64 static const unsigned char map[256] = { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, diff --git a/src/misc/base64/base64_encode.c b/src/misc/base64/base64_encode.c index 7f4b11d80..58a82df47 100644 --- a/src/misc/base64/base64_encode.c +++ b/src/misc/base64/base64_encode.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" @@ -16,7 +16,7 @@ */ -#ifdef BASE64 +#ifdef LTC_BASE64 static const char *codes = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; diff --git a/src/misc/burn_stack.c b/src/misc/burn_stack.c index 0f51a186f..2610c060d 100644 --- a/src/misc/burn_stack.c +++ b/src/misc/burn_stack.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/misc/crypt/crypt.c b/src/misc/crypt/crypt.c index c52cfee15..3d485727c 100644 --- a/src/misc/crypt/crypt.c +++ b/src/misc/crypt/crypt.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" @@ -44,118 +44,124 @@ const char *crypt_build_settings = "disabled\n" #endif "Ciphers built-in:\n" -#if defined(BLOWFISH) +#if defined(LTC_BLOWFISH) " Blowfish\n" #endif -#if defined(RC2) - " RC2\n" +#if defined(LTC_RC2) + " LTC_RC2\n" #endif -#if defined(RC5) - " RC5\n" +#if defined(LTC_RC5) + " LTC_RC5\n" #endif -#if defined(RC6) - " RC6\n" +#if defined(LTC_RC6) + " LTC_RC6\n" #endif -#if defined(SAFERP) +#if defined(LTC_SAFERP) " Safer+\n" #endif -#if defined(SAFER) +#if defined(LTC_SAFER) " Safer\n" #endif -#if defined(RIJNDAEL) +#if defined(LTC_RIJNDAEL) " Rijndael\n" #endif -#if defined(XTEA) - " XTEA\n" +#if defined(LTC_XTEA) + " LTC_XTEA\n" #endif -#if defined(TWOFISH) +#if defined(LTC_TWOFISH) " Twofish " - #if defined(TWOFISH_SMALL) && defined(TWOFISH_TABLES) && defined(TWOFISH_ALL_TABLES) + #if defined(LTC_TWOFISH_SMALL) && defined(LTC_TWOFISH_TABLES) && defined(LTC_TWOFISH_ALL_TABLES) "(small, tables, all_tables)\n" - #elif defined(TWOFISH_SMALL) && defined(TWOFISH_TABLES) + #elif defined(LTC_TWOFISH_SMALL) && defined(LTC_TWOFISH_TABLES) "(small, tables)\n" - #elif defined(TWOFISH_SMALL) && defined(TWOFISH_ALL_TABLES) + #elif defined(LTC_TWOFISH_SMALL) && defined(LTC_TWOFISH_ALL_TABLES) "(small, all_tables)\n" - #elif defined(TWOFISH_TABLES) && defined(TWOFISH_ALL_TABLES) + #elif defined(LTC_TWOFISH_TABLES) && defined(LTC_TWOFISH_ALL_TABLES) "(tables, all_tables)\n" - #elif defined(TWOFISH_SMALL) + #elif defined(LTC_TWOFISH_SMALL) "(small)\n" - #elif defined(TWOFISH_TABLES) + #elif defined(LTC_TWOFISH_TABLES) "(tables)\n" - #elif defined(TWOFISH_ALL_TABLES) + #elif defined(LTC_TWOFISH_ALL_TABLES) "(all_tables)\n" #else "\n" #endif #endif -#if defined(DES) - " DES\n" +#if defined(LTC_DES) + " LTC_DES\n" #endif -#if defined(CAST5) - " CAST5\n" +#if defined(LTC_CAST5) + " LTC_CAST5\n" #endif -#if defined(NOEKEON) +#if defined(LTC_NOEKEON) " Noekeon\n" #endif -#if defined(SKIPJACK) +#if defined(LTC_SKIPJACK) " Skipjack\n" #endif -#if defined(KHAZAD) +#if defined(LTC_KHAZAD) " Khazad\n" #endif -#if defined(ANUBIS) +#if defined(LTC_ANUBIS) " Anubis " #endif -#if defined(ANUBIS_TWEAK) +#if defined(LTC_ANUBIS_TWEAK) " (tweaked)" #endif "\n" -#if defined(KSEED) - " KSEED\n" +#if defined(LTC_KSEED) + " LTC_KSEED\n" #endif #if defined(LTC_KASUMI) " KASUMI\n" #endif "\nHashes built-in:\n" -#if defined(SHA512) - " SHA-512\n" +#if defined(LTC_SHA512) + " LTC_SHA-512\n" #endif -#if defined(SHA384) - " SHA-384\n" +#if defined(LTC_SHA384) + " LTC_SHA-384\n" #endif -#if defined(SHA256) - " SHA-256\n" +#if defined(LTC_SHA256) + " LTC_SHA-256\n" #endif -#if defined(SHA224) - " SHA-224\n" +#if defined(LTC_SHA224) + " LTC_SHA-224\n" #endif -#if defined(TIGER) - " TIGER\n" +#if defined(LTC_TIGER) + " LTC_TIGER\n" #endif -#if defined(SHA1) - " SHA1\n" +#if defined(LTC_SHA1) + " LTC_SHA1\n" #endif -#if defined(MD5) - " MD5\n" +#if defined(LTC_MD5) + " LTC_MD5\n" #endif -#if defined(MD4) - " MD4\n" +#if defined(LTC_MD4) + " LTC_MD4\n" #endif -#if defined(MD2) - " MD2\n" +#if defined(LTC_MD2) + " LTC_MD2\n" #endif -#if defined(RIPEMD128) - " RIPEMD128\n" +#if defined(LTC_RIPEMD128) + " LTC_RIPEMD128\n" #endif -#if defined(RIPEMD160) - " RIPEMD160\n" +#if defined(LTC_RIPEMD160) + " LTC_RIPEMD160\n" #endif -#if defined(WHIRLPOOL) - " WHIRLPOOL\n" +#if defined(LTC_RIPEMD256) + " LTC_RIPEMD256\n" #endif -#if defined(CHC_HASH) - " CHC_HASH \n" +#if defined(LTC_RIPEMD320) + " LTC_RIPEMD320\n" +#endif +#if defined(LTC_WHIRLPOOL) + " LTC_WHIRLPOOL\n" +#endif +#if defined(LTC_CHC_HASH) + " LTC_CHC_HASH \n" #endif "\nBlock Chaining Modes:\n" @@ -188,19 +194,22 @@ const char *crypt_build_settings = #if defined(LTC_F8_MODE) " F8 MODE\n" #endif +#if defined(LTC_XTS_MODE) + " LTC_XTS_MODE\n" +#endif "\nMACs:\n" #if defined(LTC_HMAC) - " HMAC\n" + " LTC_HMAC\n" #endif #if defined(LTC_OMAC) - " OMAC\n" + " LTC_OMAC\n" #endif #if defined(LTC_PMAC) " PMAC\n" #endif -#if defined(PELICAN) - " PELICAN\n" +#if defined(LTC_PELICAN) + " LTC_PELICAN\n" #endif #if defined(LTC_XCBC) " XCBC-MAC\n" @@ -210,48 +219,48 @@ const char *crypt_build_settings = #endif "\nENC + AUTH modes:\n" -#if defined(EAX_MODE) - " EAX_MODE\n" +#if defined(LTC_EAX_MODE) + " LTC_EAX_MODE\n" #endif -#if defined(OCB_MODE) - " OCB_MODE\n" +#if defined(LTC_OCB_MODE) + " LTC_OCB_MODE\n" #endif -#if defined(CCM_MODE) - " CCM_MODE\n" +#if defined(LTC_CCM_MODE) + " LTC_CCM_MODE\n" #endif -#if defined(GCM_MODE) - " GCM_MODE " +#if defined(LTC_GCM_MODE) + " LTC_GCM_MODE " #endif -#if defined(GCM_TABLES) - " (GCM_TABLES) " +#if defined(LTC_GCM_TABLES) + " (LTC_GCM_TABLES) " #endif "\n" "\nPRNG:\n" -#if defined(YARROW) +#if defined(LTC_YARROW) " Yarrow\n" #endif -#if defined(SPRNG) - " SPRNG\n" +#if defined(LTC_SPRNG) + " LTC_SPRNG\n" #endif -#if defined(RC4) - " RC4\n" +#if defined(LTC_RC4) + " LTC_RC4\n" #endif -#if defined(FORTUNA) +#if defined(LTC_FORTUNA) " Fortuna\n" #endif -#if defined(SOBER128) - " SOBER128\n" +#if defined(LTC_SOBER128) + " LTC_SOBER128\n" #endif "\nPK Algs:\n" -#if defined(MRSA) +#if defined(LTC_MRSA) " RSA \n" #endif -#if defined(MECC) +#if defined(LTC_MECC) " ECC\n" #endif -#if defined(MDSA) +#if defined(LTC_MDSA) " DSA\n" #endif #if defined(MKAT) @@ -285,8 +294,8 @@ const char *crypt_build_settings = #endif "\nVarious others: " -#if defined(BASE64) - " BASE64 " +#if defined(LTC_BASE64) + " LTC_BASE64 " #endif #if defined(MPI) " MPI " @@ -297,11 +306,11 @@ const char *crypt_build_settings = #if defined(LTC_TEST) " LTC_TEST " #endif -#if defined(PKCS_1) - " PKCS#1 " +#if defined(LTC_PKCS_1) + " LTC_PKCS#1 " #endif -#if defined(PKCS_5) - " PKCS#5 " +#if defined(LTC_PKCS_5) + " LTC_PKCS#5 " #endif #if defined(LTC_SMALL_CODE) " LTC_SMALL_CODE " @@ -333,23 +342,23 @@ const char *crypt_build_settings = #if defined(LTC_PTHREAD) " LTC_PTHREAD " #endif -#if defined(LTM_DESC) +#if defined(LTM_LTC_DESC) " LTM_DESC " #endif -#if defined(TFM_DESC) +#if defined(TFM_LTC_DESC) " TFM_DESC " #endif -#if defined(MECC_ACCEL) - " MECC_ACCEL " +#if defined(LTC_MECC_ACCEL) + " LTC_MECC_ACCEL " #endif -#if defined(GMP_DESC) +#if defined(GMP_LTC_DESC) " GMP_DESC " #endif #if defined(LTC_EASY) " (easy) " #endif -#if defined(MECC_FP) - " MECC_FP " +#if defined(LTC_MECC_FP) + " LTC_MECC_FP " #endif #if defined(LTC_ECC_SHAMIR) " LTC_ECC_SHAMIR " diff --git a/src/misc/crypt/crypt_argchk.c b/src/misc/crypt/crypt_argchk.c index 1ad271451..c86f08625 100644 --- a/src/misc/crypt/crypt_argchk.c +++ b/src/misc/crypt/crypt_argchk.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" #include diff --git a/src/misc/crypt/crypt_cipher_descriptor.c b/src/misc/crypt/crypt_cipher_descriptor.c index 767d4616b..20aac578a 100644 --- a/src/misc/crypt/crypt_cipher_descriptor.c +++ b/src/misc/crypt/crypt_cipher_descriptor.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/misc/crypt/crypt_cipher_is_valid.c b/src/misc/crypt/crypt_cipher_is_valid.c index 983186b17..35f1ace83 100644 --- a/src/misc/crypt/crypt_cipher_is_valid.c +++ b/src/misc/crypt/crypt_cipher_is_valid.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/misc/crypt/crypt_find_cipher.c b/src/misc/crypt/crypt_find_cipher.c index b9607d3fd..0c563b0d7 100644 --- a/src/misc/crypt/crypt_find_cipher.c +++ b/src/misc/crypt/crypt_find_cipher.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/misc/crypt/crypt_find_cipher_any.c b/src/misc/crypt/crypt_find_cipher_any.c index e3eefc282..c528e6e6d 100644 --- a/src/misc/crypt/crypt_find_cipher_any.c +++ b/src/misc/crypt/crypt_find_cipher_any.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/misc/crypt/crypt_find_cipher_id.c b/src/misc/crypt/crypt_find_cipher_id.c index 145f44bef..be4e0fa9a 100644 --- a/src/misc/crypt/crypt_find_cipher_id.c +++ b/src/misc/crypt/crypt_find_cipher_id.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/misc/crypt/crypt_find_hash.c b/src/misc/crypt/crypt_find_hash.c index f04001a36..12ef320ec 100644 --- a/src/misc/crypt/crypt_find_hash.c +++ b/src/misc/crypt/crypt_find_hash.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/misc/crypt/crypt_find_hash_any.c b/src/misc/crypt/crypt_find_hash_any.c index 3063e844a..65ecce792 100644 --- a/src/misc/crypt/crypt_find_hash_any.c +++ b/src/misc/crypt/crypt_find_hash_any.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/misc/crypt/crypt_find_hash_id.c b/src/misc/crypt/crypt_find_hash_id.c index 951fca036..f8e75fcbf 100644 --- a/src/misc/crypt/crypt_find_hash_id.c +++ b/src/misc/crypt/crypt_find_hash_id.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/misc/crypt/crypt_find_hash_oid.c b/src/misc/crypt/crypt_find_hash_oid.c index 57489a868..19aece78c 100644 --- a/src/misc/crypt/crypt_find_hash_oid.c +++ b/src/misc/crypt/crypt_find_hash_oid.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/misc/crypt/crypt_find_prng.c b/src/misc/crypt/crypt_find_prng.c index c5f4a61ae..af3f7b699 100644 --- a/src/misc/crypt/crypt_find_prng.c +++ b/src/misc/crypt/crypt_find_prng.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/misc/crypt/crypt_fsa.c b/src/misc/crypt/crypt_fsa.c index 620659aa1..3d6d86d2a 100644 --- a/src/misc/crypt/crypt_fsa.c +++ b/src/misc/crypt/crypt_fsa.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" #include diff --git a/src/misc/crypt/crypt_hash_descriptor.c b/src/misc/crypt/crypt_hash_descriptor.c index 619cdf372..a0c3c1a4f 100644 --- a/src/misc/crypt/crypt_hash_descriptor.c +++ b/src/misc/crypt/crypt_hash_descriptor.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/misc/crypt/crypt_hash_is_valid.c b/src/misc/crypt/crypt_hash_is_valid.c index 5ef3bd547..011f829a5 100644 --- a/src/misc/crypt/crypt_hash_is_valid.c +++ b/src/misc/crypt/crypt_hash_is_valid.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/misc/crypt/crypt_ltc_mp_descriptor.c b/src/misc/crypt/crypt_ltc_mp_descriptor.c index 907862f94..0577d1dfb 100644 --- a/src/misc/crypt/crypt_ltc_mp_descriptor.c +++ b/src/misc/crypt/crypt_ltc_mp_descriptor.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/misc/crypt/crypt_prng_descriptor.c b/src/misc/crypt/crypt_prng_descriptor.c index 3c6d2086d..3af9df542 100644 --- a/src/misc/crypt/crypt_prng_descriptor.c +++ b/src/misc/crypt/crypt_prng_descriptor.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/misc/crypt/crypt_prng_is_valid.c b/src/misc/crypt/crypt_prng_is_valid.c index dac9847d7..ccc6e0483 100644 --- a/src/misc/crypt/crypt_prng_is_valid.c +++ b/src/misc/crypt/crypt_prng_is_valid.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/misc/crypt/crypt_register_cipher.c b/src/misc/crypt/crypt_register_cipher.c index c5e8c5517..d7feedfe9 100644 --- a/src/misc/crypt/crypt_register_cipher.c +++ b/src/misc/crypt/crypt_register_cipher.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/misc/crypt/crypt_register_hash.c b/src/misc/crypt/crypt_register_hash.c index cfe35ef0e..10ccee433 100644 --- a/src/misc/crypt/crypt_register_hash.c +++ b/src/misc/crypt/crypt_register_hash.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/misc/crypt/crypt_register_prng.c b/src/misc/crypt/crypt_register_prng.c index 679e2576a..1724df0a0 100644 --- a/src/misc/crypt/crypt_register_prng.c +++ b/src/misc/crypt/crypt_register_prng.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/misc/crypt/crypt_unregister_cipher.c b/src/misc/crypt/crypt_unregister_cipher.c index 1f85d76e2..b75785f3a 100644 --- a/src/misc/crypt/crypt_unregister_cipher.c +++ b/src/misc/crypt/crypt_unregister_cipher.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/misc/crypt/crypt_unregister_hash.c b/src/misc/crypt/crypt_unregister_hash.c index 09caf5ab0..ac95d2dc5 100644 --- a/src/misc/crypt/crypt_unregister_hash.c +++ b/src/misc/crypt/crypt_unregister_hash.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/misc/crypt/crypt_unregister_prng.c b/src/misc/crypt/crypt_unregister_prng.c index fcc23dcd6..bb34501a7 100644 --- a/src/misc/crypt/crypt_unregister_prng.c +++ b/src/misc/crypt/crypt_unregister_prng.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/misc/error_to_string.c b/src/misc/error_to_string.c index a6ddb3e4e..034cd18a1 100644 --- a/src/misc/error_to_string.c +++ b/src/misc/error_to_string.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/misc/pkcs5/pkcs_5_1.c b/src/misc/pkcs5/pkcs_5_1.c index 20ae9e134..519e7aa1b 100644 --- a/src/misc/pkcs5/pkcs_5_1.c +++ b/src/misc/pkcs5/pkcs_5_1.c @@ -6,21 +6,21 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include /** @file pkcs_5_1.c - PKCS #5, Algorithm #1, Tom St Denis + LTC_PKCS #5, Algorithm #1, Tom St Denis */ -#ifdef PKCS_5 +#ifdef LTC_PKCS_5 /** - Execute PKCS #5 v1 + Execute LTC_PKCS #5 v1 @param password The password (or key) @param password_len The length of the password (octet) @param salt The salt (or nonce) which is 8 octets long - @param iteration_count The PKCS #5 v1 iteration count + @param iteration_count The LTC_PKCS #5 v1 iteration count @param hash_idx The index of the hash desired @param out [out] The destination for this algorithm @param outlen [in/out] The max size and resulting size of the algorithm output diff --git a/src/misc/pkcs5/pkcs_5_2.c b/src/misc/pkcs5/pkcs_5_2.c index 34fef2b91..0d76d6295 100644 --- a/src/misc/pkcs5/pkcs_5_2.c +++ b/src/misc/pkcs5/pkcs_5_2.c @@ -6,23 +6,23 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include /** @file pkcs_5_2.c - PKCS #5, Algorithm #2, Tom St Denis + LTC_PKCS #5, Algorithm #2, Tom St Denis */ -#ifdef PKCS_5 +#ifdef LTC_PKCS_5 /** - Execute PKCS #5 v2 + Execute LTC_PKCS #5 v2 @param password The input password (or key) @param password_len The length of the password (octets) @param salt The salt (or nonce) @param salt_len The length of the salt (octets) - @param iteration_count # of iterations desired for PKCS #5 v2 [read specs for more] + @param iteration_count # of iterations desired for LTC_PKCS #5 v2 [read specs for more] @param hash_idx The index of the hash desired @param out [out] The destination for this algorithm @param outlen [in/out] The max size and resulting size of the algorithm output diff --git a/src/misc/zeromem.c b/src/misc/zeromem.c index 09b702358..9dff602ab 100644 --- a/src/misc/zeromem.c +++ b/src/misc/zeromem.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/modes/cbc/cbc_decrypt.c b/src/modes/cbc/cbc_decrypt.c index 8941c1782..3751f140e 100644 --- a/src/modes/cbc/cbc_decrypt.c +++ b/src/modes/cbc/cbc_decrypt.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/modes/cbc/cbc_done.c b/src/modes/cbc/cbc_done.c index af815f476..75b974237 100644 --- a/src/modes/cbc/cbc_done.c +++ b/src/modes/cbc/cbc_done.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/modes/cbc/cbc_encrypt.c b/src/modes/cbc/cbc_encrypt.c index 5da424288..1f282040a 100644 --- a/src/modes/cbc/cbc_encrypt.c +++ b/src/modes/cbc/cbc_encrypt.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/modes/cbc/cbc_getiv.c b/src/modes/cbc/cbc_getiv.c index 28b74c786..65877434c 100644 --- a/src/modes/cbc/cbc_getiv.c +++ b/src/modes/cbc/cbc_getiv.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/modes/cbc/cbc_setiv.c b/src/modes/cbc/cbc_setiv.c index 74d62b6d6..cd2e32eaa 100644 --- a/src/modes/cbc/cbc_setiv.c +++ b/src/modes/cbc/cbc_setiv.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/modes/cbc/cbc_start.c b/src/modes/cbc/cbc_start.c index 47999228d..832e77afa 100644 --- a/src/modes/cbc/cbc_start.c +++ b/src/modes/cbc/cbc_start.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/modes/cfb/cfb_decrypt.c b/src/modes/cfb/cfb_decrypt.c index fd34b9141..13ac5a698 100644 --- a/src/modes/cfb/cfb_decrypt.c +++ b/src/modes/cfb/cfb_decrypt.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/modes/cfb/cfb_done.c b/src/modes/cfb/cfb_done.c index 63181a22d..1ee9a9800 100644 --- a/src/modes/cfb/cfb_done.c +++ b/src/modes/cfb/cfb_done.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/modes/cfb/cfb_encrypt.c b/src/modes/cfb/cfb_encrypt.c index 83f87d833..8ac5f5c06 100644 --- a/src/modes/cfb/cfb_encrypt.c +++ b/src/modes/cfb/cfb_encrypt.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/modes/cfb/cfb_getiv.c b/src/modes/cfb/cfb_getiv.c index b8e8b9814..b6786e15e 100644 --- a/src/modes/cfb/cfb_getiv.c +++ b/src/modes/cfb/cfb_getiv.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/modes/cfb/cfb_setiv.c b/src/modes/cfb/cfb_setiv.c index 31ecd11ee..0fc87573d 100644 --- a/src/modes/cfb/cfb_setiv.c +++ b/src/modes/cfb/cfb_setiv.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/modes/cfb/cfb_start.c b/src/modes/cfb/cfb_start.c index dc2def4fc..a8e5b8bc6 100644 --- a/src/modes/cfb/cfb_start.c +++ b/src/modes/cfb/cfb_start.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/modes/ctr/ctr_decrypt.c b/src/modes/ctr/ctr_decrypt.c index a3052a3e5..953724904 100644 --- a/src/modes/ctr/ctr_decrypt.c +++ b/src/modes/ctr/ctr_decrypt.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/modes/ctr/ctr_done.c b/src/modes/ctr/ctr_done.c index 091837d32..26391fdfa 100644 --- a/src/modes/ctr/ctr_done.c +++ b/src/modes/ctr/ctr_done.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/modes/ctr/ctr_encrypt.c b/src/modes/ctr/ctr_encrypt.c index 3f3f95449..0b08359d6 100644 --- a/src/modes/ctr/ctr_encrypt.c +++ b/src/modes/ctr/ctr_encrypt.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" @@ -64,7 +64,7 @@ int ctr_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, s /* increment counter */ if (ctr->mode == CTR_COUNTER_LITTLE_ENDIAN) { /* little-endian */ - for (x = 0; x < ctr->blocklen; x++) { + for (x = 0; x < ctr->ctrlen; x++) { ctr->ctr[x] = (ctr->ctr[x] + (unsigned char)1) & (unsigned char)255; if (ctr->ctr[x] != (unsigned char)0) { break; @@ -72,7 +72,7 @@ int ctr_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, s } } else { /* big-endian */ - for (x = ctr->blocklen-1; x >= 0; x--) { + for (x = ctr->blocklen-1; x >= ctr->ctrlen; x--) { ctr->ctr[x] = (ctr->ctr[x] + (unsigned char)1) & (unsigned char)255; if (ctr->ctr[x] != (unsigned char)0) { break; diff --git a/src/modes/ctr/ctr_getiv.c b/src/modes/ctr/ctr_getiv.c index a11e4ffe1..624232351 100644 --- a/src/modes/ctr/ctr_getiv.c +++ b/src/modes/ctr/ctr_getiv.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/modes/ctr/ctr_setiv.c b/src/modes/ctr/ctr_setiv.c index d9c025423..56a3c9793 100644 --- a/src/modes/ctr/ctr_setiv.c +++ b/src/modes/ctr/ctr_setiv.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/modes/ctr/ctr_start.c b/src/modes/ctr/ctr_start.c index 5e0a326c9..b27bed03b 100644 --- a/src/modes/ctr/ctr_start.c +++ b/src/modes/ctr/ctr_start.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" @@ -46,6 +46,16 @@ int ctr_start( int cipher, return err; } + /* ctrlen == counter width */ + ctr->ctrlen = (ctr_mode & 255) ? (ctr_mode & 255) : cipher_descriptor[cipher].block_length; + if (ctr->ctrlen > cipher_descriptor[cipher].block_length) { + return CRYPT_INVALID_ARG; + } + + if ((ctr_mode & 0x1000) == CTR_COUNTER_BIG_ENDIAN) { + ctr->ctrlen = cipher_descriptor[cipher].block_length - ctr->ctrlen; + } + /* setup cipher */ if ((err = cipher_descriptor[cipher].setup(key, keylen, num_rounds, &ctr->key)) != CRYPT_OK) { return err; @@ -55,7 +65,7 @@ int ctr_start( int cipher, ctr->blocklen = cipher_descriptor[cipher].block_length; ctr->cipher = cipher; ctr->padlen = 0; - ctr->mode = ctr_mode & 1; + ctr->mode = ctr_mode & 0x1000; for (x = 0; x < ctr->blocklen; x++) { ctr->ctr[x] = IV[x]; } @@ -64,7 +74,7 @@ int ctr_start( int cipher, /* increment the IV as per RFC 3686 */ if (ctr->mode == CTR_COUNTER_LITTLE_ENDIAN) { /* little-endian */ - for (x = 0; x < ctr->blocklen; x++) { + for (x = 0; x < ctr->ctrlen; x++) { ctr->ctr[x] = (ctr->ctr[x] + (unsigned char)1) & (unsigned char)255; if (ctr->ctr[x] != (unsigned char)0) { break; @@ -72,7 +82,7 @@ int ctr_start( int cipher, } } else { /* big-endian */ - for (x = ctr->blocklen-1; x >= 0; x--) { + for (x = ctr->blocklen-1; x >= ctr->ctrlen; x--) { ctr->ctr[x] = (ctr->ctr[x] + (unsigned char)1) & (unsigned char)255; if (ctr->ctr[x] != (unsigned char)0) { break; diff --git a/src/modes/ctr/ctr_test.c b/src/modes/ctr/ctr_test.c index 5cf447dd5..9962afd5a 100644 --- a/src/modes/ctr/ctr_test.c +++ b/src/modes/ctr/ctr_test.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/modes/ecb/ecb_decrypt.c b/src/modes/ecb/ecb_decrypt.c index bae4dbe00..84842c20f 100644 --- a/src/modes/ecb/ecb_decrypt.c +++ b/src/modes/ecb/ecb_decrypt.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/modes/ecb/ecb_done.c b/src/modes/ecb/ecb_done.c index c837625db..961ec97be 100644 --- a/src/modes/ecb/ecb_done.c +++ b/src/modes/ecb/ecb_done.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/modes/ecb/ecb_encrypt.c b/src/modes/ecb/ecb_encrypt.c index 07a3c6349..801e0fdb6 100644 --- a/src/modes/ecb/ecb_encrypt.c +++ b/src/modes/ecb/ecb_encrypt.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/modes/ecb/ecb_start.c b/src/modes/ecb/ecb_start.c index d5bb89faf..cec583a05 100644 --- a/src/modes/ecb/ecb_start.c +++ b/src/modes/ecb/ecb_start.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/modes/f8/f8_decrypt.c b/src/modes/f8/f8_decrypt.c index 0fbe3c041..9c4525d36 100644 --- a/src/modes/f8/f8_decrypt.c +++ b/src/modes/f8/f8_decrypt.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/modes/f8/f8_done.c b/src/modes/f8/f8_done.c index 14a54d0a9..867d6032e 100644 --- a/src/modes/f8/f8_done.c +++ b/src/modes/f8/f8_done.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/modes/f8/f8_encrypt.c b/src/modes/f8/f8_encrypt.c index b44731275..d1a96df06 100644 --- a/src/modes/f8/f8_encrypt.c +++ b/src/modes/f8/f8_encrypt.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/modes/f8/f8_getiv.c b/src/modes/f8/f8_getiv.c index ddf9a72ac..ff7cb9105 100644 --- a/src/modes/f8/f8_getiv.c +++ b/src/modes/f8/f8_getiv.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/modes/f8/f8_setiv.c b/src/modes/f8/f8_setiv.c index f1bbe2a6c..d1cafcf06 100644 --- a/src/modes/f8/f8_setiv.c +++ b/src/modes/f8/f8_setiv.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/modes/f8/f8_start.c b/src/modes/f8/f8_start.c index 7e0d6f437..4cd58de2c 100644 --- a/src/modes/f8/f8_start.c +++ b/src/modes/f8/f8_start.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/modes/f8/f8_test_mode.c b/src/modes/f8/f8_test_mode.c index 48da1f544..5cc391bc1 100644 --- a/src/modes/f8/f8_test_mode.c +++ b/src/modes/f8/f8_test_mode.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/modes/lrw/lrw_decrypt.c b/src/modes/lrw/lrw_decrypt.c index 1eb32ba47..e2858c04b 100644 --- a/src/modes/lrw/lrw_decrypt.c +++ b/src/modes/lrw/lrw_decrypt.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/modes/lrw/lrw_done.c b/src/modes/lrw/lrw_done.c index dd52714f2..e123d28f3 100644 --- a/src/modes/lrw/lrw_done.c +++ b/src/modes/lrw/lrw_done.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/modes/lrw/lrw_encrypt.c b/src/modes/lrw/lrw_encrypt.c index 31770099c..d84cbdd92 100644 --- a/src/modes/lrw/lrw_encrypt.c +++ b/src/modes/lrw/lrw_encrypt.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/modes/lrw/lrw_getiv.c b/src/modes/lrw/lrw_getiv.c index b14bee4b6..575e3224f 100644 --- a/src/modes/lrw/lrw_getiv.c +++ b/src/modes/lrw/lrw_getiv.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/modes/lrw/lrw_process.c b/src/modes/lrw/lrw_process.c index 9afaeecc6..25661e7d8 100644 --- a/src/modes/lrw/lrw_process.c +++ b/src/modes/lrw/lrw_process.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/modes/lrw/lrw_setiv.c b/src/modes/lrw/lrw_setiv.c index 5216da11c..2ff9a8062 100644 --- a/src/modes/lrw/lrw_setiv.c +++ b/src/modes/lrw/lrw_setiv.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/modes/lrw/lrw_start.c b/src/modes/lrw/lrw_start.c index a09cfecc2..f378789a4 100644 --- a/src/modes/lrw/lrw_start.c +++ b/src/modes/lrw/lrw_start.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/modes/lrw/lrw_test.c b/src/modes/lrw/lrw_test.c index 35fcf1adb..63e014a3b 100644 --- a/src/modes/lrw/lrw_test.c +++ b/src/modes/lrw/lrw_test.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/modes/ofb/ofb_decrypt.c b/src/modes/ofb/ofb_decrypt.c index dd9a384ef..2c8780ef5 100644 --- a/src/modes/ofb/ofb_decrypt.c +++ b/src/modes/ofb/ofb_decrypt.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/modes/ofb/ofb_done.c b/src/modes/ofb/ofb_done.c index 07162a09f..10506b39b 100644 --- a/src/modes/ofb/ofb_done.c +++ b/src/modes/ofb/ofb_done.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/modes/ofb/ofb_encrypt.c b/src/modes/ofb/ofb_encrypt.c index d025d83ee..8c97a4d08 100644 --- a/src/modes/ofb/ofb_encrypt.c +++ b/src/modes/ofb/ofb_encrypt.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/modes/ofb/ofb_getiv.c b/src/modes/ofb/ofb_getiv.c index 3c91e56c9..c009e330f 100644 --- a/src/modes/ofb/ofb_getiv.c +++ b/src/modes/ofb/ofb_getiv.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/modes/ofb/ofb_setiv.c b/src/modes/ofb/ofb_setiv.c index fdff5e32b..826caa900 100644 --- a/src/modes/ofb/ofb_setiv.c +++ b/src/modes/ofb/ofb_setiv.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/modes/ofb/ofb_start.c b/src/modes/ofb/ofb_start.c index 4590493c8..cf875456f 100644 --- a/src/modes/ofb/ofb_start.c +++ b/src/modes/ofb/ofb_start.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/modes/xts/xts_decrypt.c b/src/modes/xts/xts_decrypt.c new file mode 100644 index 000000000..3e46c535b --- /dev/null +++ b/src/modes/xts/xts_decrypt.c @@ -0,0 +1,141 @@ +/* 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://libtom.org + */ +#include "tomcrypt.h" + +/** + Source donated by Elliptic Semiconductor Inc (www.ellipticsemi.com) to the LibTom Projects +*/ + +#ifdef LTC_XTS_MODE + +static int tweak_uncrypt(const unsigned char *C, unsigned char *P, unsigned char *T, symmetric_xts *xts) +{ + unsigned long x; + int err; + + /* tweak encrypt block i */ +#ifdef LTC_FAST + for (x = 0; x < 16; x += sizeof(LTC_FAST_TYPE)) { + *((LTC_FAST_TYPE*)&P[x]) = *((LTC_FAST_TYPE*)&C[x]) ^ *((LTC_FAST_TYPE*)&T[x]); + } +#else + for (x = 0; x < 16; x++) { + P[x] = C[x] ^ T[x]; + } +#endif + + err = cipher_descriptor[xts->cipher].ecb_decrypt(P, P, &xts->key1); + +#ifdef LTC_FAST + for (x = 0; x < 16; x += sizeof(LTC_FAST_TYPE)) { + *((LTC_FAST_TYPE*)&P[x]) ^= *((LTC_FAST_TYPE*)&T[x]); + } +#else + for (x = 0; x < 16; x++) { + P[x] = P[x] ^ T[x]; + } +#endif + + /* LFSR the tweak */ + xts_mult_x(T); + + return err; +} + +/** XTS Decryption + @param ct [in] Ciphertext + @param ptlen Length of plaintext (and ciphertext) + @param pt [out] Plaintext + @param tweak [in] The 128--bit encryption tweak (e.g. sector number) + @param xts The XTS structure + Returns CRYPT_OK upon success +*/int xts_decrypt( + const unsigned char *ct, unsigned long ptlen, + unsigned char *pt, + const unsigned char *tweak, + symmetric_xts *xts) +{ + unsigned char PP[16], CC[16], T[16]; + unsigned long i, m, mo, lim; + int err; + + /* check inputs */ + LTC_ARGCHK(pt != NULL); + LTC_ARGCHK(ct != NULL); + LTC_ARGCHK(tweak != NULL); + LTC_ARGCHK(xts != NULL); + + /* check if valid */ + if ((err = cipher_is_valid(xts->cipher)) != CRYPT_OK) { + return err; + } + + /* get number of blocks */ + m = ptlen >> 4; + mo = ptlen & 15; + + /* must have at least one full block */ + if (m == 0) { + return CRYPT_INVALID_ARG; + } + + /* encrypt the tweak */ + if ((err = cipher_descriptor[xts->cipher].ecb_encrypt(tweak, T, &xts->key2)) != CRYPT_OK) { + return err; + } + + /* for i = 0 to m-2 do */ + if (mo == 0) { + lim = m; + } else { + lim = m - 1; + } + + for (i = 0; i < lim; i++) { + err = tweak_uncrypt(ct, pt, T, xts); + ct += 16; + pt += 16; + } + + /* if ptlen not divide 16 then */ + if (mo > 0) { + XMEMCPY(CC, T, 16); + xts_mult_x(CC); + + /* PP = tweak decrypt block m-1 */ + if ((err = tweak_uncrypt(ct, PP, CC, xts)) != CRYPT_OK) { + return err; + } + + /* Pm = first ptlen % 16 bytes of PP */ + for (i = 0; i < mo; i++) { + CC[i] = ct[16+i]; + pt[16+i] = PP[i]; + } + for (; i < 16; i++) { + CC[i] = PP[i]; + } + + /* Pm-1 = Tweak uncrypt CC */ + if ((err = tweak_uncrypt(CC, pt, T, xts)) != CRYPT_OK) { + return err; + } + } + + return CRYPT_OK; +} + +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + diff --git a/src/modes/xts/xts_done.c b/src/modes/xts/xts_done.c new file mode 100644 index 000000000..7c04277a6 --- /dev/null +++ b/src/modes/xts/xts_done.c @@ -0,0 +1,34 @@ +/* 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://libtom.org + */ +#include "tomcrypt.h" + +/** + Source donated by Elliptic Semiconductor Inc (www.ellipticsemi.com) to the LibTom Projects +*/ + +#ifdef LTC_XTS_MODE + +/** Terminate XTS state + @param XTS The state to terminate +*/ +void xts_done(symmetric_xts *xts) +{ + LTC_ARGCHKVD(xts != NULL); + cipher_descriptor[xts->cipher].done(&xts->key1); + cipher_descriptor[xts->cipher].done(&xts->key2); +} + +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + diff --git a/src/modes/xts/xts_encrypt.c b/src/modes/xts/xts_encrypt.c new file mode 100644 index 000000000..ab53d3c99 --- /dev/null +++ b/src/modes/xts/xts_encrypt.c @@ -0,0 +1,142 @@ +/* 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://libtom.org + */ +#include "tomcrypt.h" + +/** + Source donated by Elliptic Semiconductor Inc (www.ellipticsemi.com) to the LibTom Projects +*/ + +#ifdef LTC_XTS_MODE + +static int tweak_crypt(const unsigned char *P, unsigned char *C, unsigned char *T, symmetric_xts *xts) +{ + unsigned long x; + int err; + + /* tweak encrypt block i */ +#ifdef LTC_FAST + for (x = 0; x < 16; x += sizeof(LTC_FAST_TYPE)) { + *((LTC_FAST_TYPE*)&C[x]) = *((LTC_FAST_TYPE*)&P[x]) ^ *((LTC_FAST_TYPE*)&T[x]); + } +#else + for (x = 0; x < 16; x++) { + C[x] = P[x] ^ T[x]; + } +#endif + + if ((err = cipher_descriptor[xts->cipher].ecb_encrypt(C, C, &xts->key1)) != CRYPT_OK) { + return err; + } + +#ifdef LTC_FAST + for (x = 0; x < 16; x += sizeof(LTC_FAST_TYPE)) { + *((LTC_FAST_TYPE*)&C[x]) ^= *((LTC_FAST_TYPE*)&T[x]); + } +#else + for (x = 0; x < 16; x++) { + C[x] = C[x] ^ T[x]; + } +#endif + + /* LFSR the tweak */ + xts_mult_x(T); + + return CRYPT_OK; +} + +/** XTS Encryption + @param pt [in] Plaintext + @param ptlen Length of plaintext (and ciphertext) + @param ct [out] Ciphertext + @param tweak [in] The 128--bit encryption tweak (e.g. sector number) + @param xts The XTS structure + Returns CRYPT_OK upon success +*/ +int xts_encrypt( + const unsigned char *pt, unsigned long ptlen, + unsigned char *ct, + const unsigned char *tweak, + symmetric_xts *xts) +{ + unsigned char PP[16], CC[16], T[16]; + unsigned long i, m, mo, lim; + int err; + + /* check inputs */ + LTC_ARGCHK(pt != NULL); + LTC_ARGCHK(ct != NULL); + LTC_ARGCHK(tweak != NULL); + LTC_ARGCHK(xts != NULL); + + /* check if valid */ + if ((err = cipher_is_valid(xts->cipher)) != CRYPT_OK) { + return err; + } + + /* get number of blocks */ + m = ptlen >> 4; + mo = ptlen & 15; + + /* must have at least one full block */ + if (m == 0) { + return CRYPT_INVALID_ARG; + } + + /* encrypt the tweak */ + if ((err = cipher_descriptor[xts->cipher].ecb_encrypt(tweak, T, &xts->key2)) != CRYPT_OK) { + return err; + } + + /* for i = 0 to m-2 do */ + if (mo == 0) { + lim = m; + } else { + lim = m - 1; + } + + for (i = 0; i < lim; i++) { + err = tweak_crypt(pt, ct, T, xts); + ct += 16; + pt += 16; + } + + /* if ptlen not divide 16 then */ + if (mo > 0) { + /* CC = tweak encrypt block m-1 */ + if ((err = tweak_crypt(pt, CC, T, xts)) != CRYPT_OK) { + return err; + } + + /* Cm = first ptlen % 16 bytes of CC */ + for (i = 0; i < mo; i++) { + PP[i] = pt[16+i]; + ct[16+i] = CC[i]; + } + + for (; i < 16; i++) { + PP[i] = CC[i]; + } + + /* Cm-1 = Tweak encrypt PP */ + if ((err = tweak_crypt(PP, ct, T, xts)) != CRYPT_OK) { + return err; + } + } + + return err; +} + +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + diff --git a/src/modes/xts/xts_init.c b/src/modes/xts/xts_init.c new file mode 100644 index 000000000..f38c01e93 --- /dev/null +++ b/src/modes/xts/xts_init.c @@ -0,0 +1,69 @@ +/* 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://libtom.org + */ +#include "tomcrypt.h" + +/** + Source donated by Elliptic Semiconductor Inc (www.ellipticsemi.com) to the LibTom Projects +*/ + +#ifdef LTC_XTS_MODE + + +/** Start XTS mode + @param cipher The index of the cipher to use + @param key1 The encrypt key + @param key2 The tweak encrypt key + @param keylen The length of the keys (each) in octets + @param num_rounds The number of rounds for the cipher (0 == default) + @param xts [out] XTS structure + Returns CRYPT_OK upon success. +*/ +int xts_start( int cipher, + const unsigned char *key1, + const unsigned char *key2, + unsigned long keylen, + int num_rounds, + symmetric_xts *xts) +{ + int err; + + /* check inputs */ + LTC_ARGCHK(key1 != NULL); + LTC_ARGCHK(key2 != NULL); + LTC_ARGCHK(xts != NULL); + + /* check if valid */ + if ((err = cipher_is_valid(cipher)) != CRYPT_OK) { + return err; + } + + if (cipher_descriptor[cipher].block_length != 16) { + return CRYPT_INVALID_ARG; + } + + /* schedule the two ciphers */ + if ((err = cipher_descriptor[cipher].setup(key1, keylen, num_rounds, &xts->key1)) != CRYPT_OK) { + return err; + } + if ((err = cipher_descriptor[cipher].setup(key2, keylen, num_rounds, &xts->key2)) != CRYPT_OK) { + return err; + } + xts->cipher = cipher; + + return err; +} + +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + diff --git a/src/modes/xts/xts_mult_x.c b/src/modes/xts/xts_mult_x.c new file mode 100644 index 000000000..e5b7c11f9 --- /dev/null +++ b/src/modes/xts/xts_mult_x.c @@ -0,0 +1,42 @@ +/* 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://libtom.org + */ +#include "tomcrypt.h" + +/** + Source donated by Elliptic Semiconductor Inc (www.ellipticsemi.com) to the LibTom Projects +*/ + +#ifdef LTC_XTS_MODE + +/** multiply by x + @param I The value to multiply by x (LFSR shift) +*/ +void xts_mult_x(unsigned char *I) +{ + int x; + unsigned char t, tt; + + for (x = t = 0; x < 16; x++) { + tt = I[x] >> 7; + I[x] = ((I[x] << 1) | t) & 0xFF; + t = tt; + } + if (tt) { + I[0] ^= 0x87; + } +} + +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + diff --git a/src/modes/xts/xts_test.c b/src/modes/xts/xts_test.c new file mode 100644 index 000000000..b91e0f419 --- /dev/null +++ b/src/modes/xts/xts_test.c @@ -0,0 +1,199 @@ +/* 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://libtom.org + */ +#include "tomcrypt.h" + +#ifdef LTC_XTS_MODE + +/** + Source donated by Elliptic Semiconductor Inc (www.ellipticsemi.com) to the LibTom Projects + Returns CRYPT_OK upon success. +*/ +int xts_test(void) +{ +#ifdef LTC_NO_TEST + return CRYPT_NOP; +#else + static const struct { + int keylen; + unsigned char key1[32]; + unsigned char key2[32]; + ulong64 seqnum; + unsigned long PTLEN; + unsigned char PTX[512], CTX[512]; + } tests[] = { + +/* #1 32 byte key, 32 byte PTX */ +{ + 32, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + 0, + 32, + { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, + { 0x91,0x7c,0xf6,0x9e,0xbd,0x68,0xb2,0xec,0x9b,0x9f,0xe9,0xa3,0xea,0xdd,0xa6,0x92,0xcd,0x43,0xd2,0xf5,0x95,0x98,0xed,0x85,0x8c,0x02,0xc2,0x65,0x2f,0xbf,0x92,0x2e }, +}, + +/* #2, 32 byte key, 32 byte PTX */ +{ + 32, + { 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11 }, + { 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22 }, + CONST64(0x3333333333), + 32, + { 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44 }, + { 0xc4,0x54,0x18,0x5e,0x6a,0x16,0x93,0x6e,0x39,0x33,0x40,0x38,0xac,0xef,0x83,0x8b,0xfb,0x18,0x6f,0xff,0x74,0x80,0xad,0xc4,0x28,0x93,0x82,0xec,0xd6,0xd3,0x94,0xf0 }, +}, + +/* #5 from xts.7, 32 byte key, 32 byte PTX */ +{ + 32, + { 0xff,0xfe,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf3,0xf2,0xf1,0xf0 }, + { 0xbf,0xbe,0xbd,0xbc,0xbb,0xba,0xb9,0xb8,0xb7,0xb6,0xb5,0xb4,0xb3,0xb2,0xb1,0xb0 }, + CONST64(0x123456789a), + 32, + { 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44 }, + { 0xb0,0x1f,0x86,0xf8,0xed,0xc1,0x86,0x37,0x06,0xfa,0x8a,0x42,0x53,0xe3,0x4f,0x28,0xaf,0x31,0x9d,0xe3,0x83,0x34,0x87,0x0f,0x4d,0xd1,0xf9,0x4c,0xbe,0x98,0x32,0xf1 }, +}, + +/* #4, 32 byte key, 512 byte PTX */ +{ + 32, + { 0x27,0x18,0x28,0x18,0x28,0x45,0x90,0x45,0x23,0x53,0x60,0x28,0x74,0x71,0x35,0x26 }, + { 0x31,0x41,0x59,0x26,0x53,0x58,0x97,0x93,0x23,0x84,0x62,0x64,0x33,0x83,0x27,0x95 }, + 0, + 512, + { +0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f, +0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f, +0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f, +0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f, +0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f, +0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0xbe,0xbf, +0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xdb,0xdc,0xdd,0xde,0xdf, +0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xeb,0xec,0xed,0xee,0xef,0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff, +0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f, +0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f, +0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f, +0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f, +0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f, +0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0xbe,0xbf, +0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xdb,0xdc,0xdd,0xde,0xdf, +0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xeb,0xec,0xed,0xee,0xef,0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff, + }, + { +0x27,0xa7,0x47,0x9b,0xef,0xa1,0xd4,0x76,0x48,0x9f,0x30,0x8c,0xd4,0xcf,0xa6,0xe2,0xa9,0x6e,0x4b,0xbe,0x32,0x08,0xff,0x25,0x28,0x7d,0xd3,0x81,0x96,0x16,0xe8,0x9c, +0xc7,0x8c,0xf7,0xf5,0xe5,0x43,0x44,0x5f,0x83,0x33,0xd8,0xfa,0x7f,0x56,0x00,0x00,0x05,0x27,0x9f,0xa5,0xd8,0xb5,0xe4,0xad,0x40,0xe7,0x36,0xdd,0xb4,0xd3,0x54,0x12, +0x32,0x80,0x63,0xfd,0x2a,0xab,0x53,0xe5,0xea,0x1e,0x0a,0x9f,0x33,0x25,0x00,0xa5,0xdf,0x94,0x87,0xd0,0x7a,0x5c,0x92,0xcc,0x51,0x2c,0x88,0x66,0xc7,0xe8,0x60,0xce, +0x93,0xfd,0xf1,0x66,0xa2,0x49,0x12,0xb4,0x22,0x97,0x61,0x46,0xae,0x20,0xce,0x84,0x6b,0xb7,0xdc,0x9b,0xa9,0x4a,0x76,0x7a,0xae,0xf2,0x0c,0x0d,0x61,0xad,0x02,0x65, +0x5e,0xa9,0x2d,0xc4,0xc4,0xe4,0x1a,0x89,0x52,0xc6,0x51,0xd3,0x31,0x74,0xbe,0x51,0xa1,0x0c,0x42,0x11,0x10,0xe6,0xd8,0x15,0x88,0xed,0xe8,0x21,0x03,0xa2,0x52,0xd8, +0xa7,0x50,0xe8,0x76,0x8d,0xef,0xff,0xed,0x91,0x22,0x81,0x0a,0xae,0xb9,0x9f,0x91,0x72,0xaf,0x82,0xb6,0x04,0xdc,0x4b,0x8e,0x51,0xbc,0xb0,0x82,0x35,0xa6,0xf4,0x34, +0x13,0x32,0xe4,0xca,0x60,0x48,0x2a,0x4b,0xa1,0xa0,0x3b,0x3e,0x65,0x00,0x8f,0xc5,0xda,0x76,0xb7,0x0b,0xf1,0x69,0x0d,0xb4,0xea,0xe2,0x9c,0x5f,0x1b,0xad,0xd0,0x3c, +0x5c,0xcf,0x2a,0x55,0xd7,0x05,0xdd,0xcd,0x86,0xd4,0x49,0x51,0x1c,0xeb,0x7e,0xc3,0x0b,0xf1,0x2b,0x1f,0xa3,0x5b,0x91,0x3f,0x9f,0x74,0x7a,0x8a,0xfd,0x1b,0x13,0x0e, +0x94,0xbf,0xf9,0x4e,0xff,0xd0,0x1a,0x91,0x73,0x5c,0xa1,0x72,0x6a,0xcd,0x0b,0x19,0x7c,0x4e,0x5b,0x03,0x39,0x36,0x97,0xe1,0x26,0x82,0x6f,0xb6,0xbb,0xde,0x8e,0xcc, +0x1e,0x08,0x29,0x85,0x16,0xe2,0xc9,0xed,0x03,0xff,0x3c,0x1b,0x78,0x60,0xf6,0xde,0x76,0xd4,0xce,0xcd,0x94,0xc8,0x11,0x98,0x55,0xef,0x52,0x97,0xca,0x67,0xe9,0xf3, +0xe7,0xff,0x72,0xb1,0xe9,0x97,0x85,0xca,0x0a,0x7e,0x77,0x20,0xc5,0xb3,0x6d,0xc6,0xd7,0x2c,0xac,0x95,0x74,0xc8,0xcb,0xbc,0x2f,0x80,0x1e,0x23,0xe5,0x6f,0xd3,0x44, +0xb0,0x7f,0x22,0x15,0x4b,0xeb,0xa0,0xf0,0x8c,0xe8,0x89,0x1e,0x64,0x3e,0xd9,0x95,0xc9,0x4d,0x9a,0x69,0xc9,0xf1,0xb5,0xf4,0x99,0x02,0x7a,0x78,0x57,0x2a,0xee,0xbd, +0x74,0xd2,0x0c,0xc3,0x98,0x81,0xc2,0x13,0xee,0x77,0x0b,0x10,0x10,0xe4,0xbe,0xa7,0x18,0x84,0x69,0x77,0xae,0x11,0x9f,0x7a,0x02,0x3a,0xb5,0x8c,0xca,0x0a,0xd7,0x52, +0xaf,0xe6,0x56,0xbb,0x3c,0x17,0x25,0x6a,0x9f,0x6e,0x9b,0xf1,0x9f,0xdd,0x5a,0x38,0xfc,0x82,0xbb,0xe8,0x72,0xc5,0x53,0x9e,0xdb,0x60,0x9e,0xf4,0xf7,0x9c,0x20,0x3e, +0xbb,0x14,0x0f,0x2e,0x58,0x3c,0xb2,0xad,0x15,0xb4,0xaa,0x5b,0x65,0x50,0x16,0xa8,0x44,0x92,0x77,0xdb,0xd4,0x77,0xef,0x2c,0x8d,0x6c,0x01,0x7d,0xb7,0x38,0xb1,0x8d, +0xeb,0x4a,0x42,0x7d,0x19,0x23,0xce,0x3f,0xf2,0x62,0x73,0x57,0x79,0xa4,0x18,0xf2,0x0a,0x28,0x2d,0xf9,0x20,0x14,0x7b,0xea,0xbe,0x42,0x1e,0xe5,0x31,0x9d,0x05,0x68, + } +}, + +/* #7, 32 byte key, 17 byte PTX */ +{ + 32, + { 0xff,0xfe,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf3,0xf2,0xf1,0xf0 }, + { 0xbf,0xbe,0xbd,0xbc,0xbb,0xba,0xb9,0xb8,0xb7,0xb6,0xb5,0xb4,0xb3,0xb2,0xb1,0xb0 }, + CONST64(0x123456789a), + 17, + { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10 }, + { 0x6c,0x16,0x25,0xdb,0x46,0x71,0x52,0x2d,0x3d,0x75,0x99,0x60,0x1d,0xe7,0xca,0x09,0xed }, +}, + +/* #15, 32 byte key, 25 byte PTX */ +{ + 32, + { 0xff,0xfe,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf3,0xf2,0xf1,0xf0 }, + { 0xbf,0xbe,0xbd,0xbc,0xbb,0xba,0xb9,0xb8,0xb7,0xb6,0xb5,0xb4,0xb3,0xb2,0xb1,0xb0 }, + CONST64(0x123456789a), + 25, + { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18 }, + { 0x8f,0x4d,0xcb,0xad,0x55,0x55,0x8d,0x7b,0x4e,0x01,0xd9,0x37,0x9c,0xd4,0xea,0x22,0xed,0xbf,0x9d,0xac,0xe4,0x5d,0x6f,0x6a,0x73 }, +}, + +/* #21, 32 byte key, 31 byte PTX */ +{ + 32, + { 0xff,0xfe,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf3,0xf2,0xf1,0xf0 }, + { 0xbf,0xbe,0xbd,0xbc,0xbb,0xba,0xb9,0xb8,0xb7,0xb6,0xb5,0xb4,0xb3,0xb2,0xb1,0xb0 }, + CONST64(0x123456789a), + 31, + { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e }, + { 0xd0,0x5b,0xc0,0x90,0xa8,0xe0,0x4f,0x1b,0x3d,0x3e,0xcd,0xd5,0xba,0xec,0x0f,0xd4,0xed,0xbf,0x9d,0xac,0xe4,0x5d,0x6f,0x6a,0x73,0x06,0xe6,0x4b,0xe5,0xdd,0x82 }, +}, + +}; + unsigned char OUT[512], T[16]; + ulong64 seq; + symmetric_xts xts; + int i, err, idx; + + /* AES can be under rijndael or aes... try to find it */ + if ((idx = find_cipher("aes")) == -1) { + if ((idx = find_cipher("rijndael")) == -1) { + return CRYPT_NOP; + } + } + + for (i = 0; i < (int)(sizeof(tests)/sizeof(tests[0])); i++) { + err = xts_start(idx, tests[i].key1, tests[i].key2, tests[i].keylen/2, 0, &xts); + if (err != CRYPT_OK) { + return err; + } + + seq = tests[i].seqnum; + STORE64L(seq,T); + XMEMSET(T+8, 0, 8); + + err = xts_encrypt(tests[i].PTX, tests[i].PTLEN, OUT, T, &xts); + if (err != CRYPT_OK) { + xts_done(&xts); + return err; + } + + if (XMEMCMP(OUT, tests[i].CTX, tests[i].PTLEN)) { + xts_done(&xts); + return CRYPT_FAIL_TESTVECTOR; + } + + err = xts_decrypt(tests[i].CTX, tests[i].PTLEN, OUT, T, &xts); + if (err != CRYPT_OK) { + xts_done(&xts); + return err; + } + + if (XMEMCMP(OUT, tests[i].PTX, tests[i].PTLEN)) { + xts_done(&xts); + return CRYPT_FAIL_TESTVECTOR; + } + xts_done(&xts); + } + return CRYPT_OK; +#endif +} + +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ + 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 a1c849ae8..bace8c8dc 100644 --- a/src/pk/asn1/der/bit/der_decode_bit_string.c +++ b/src/pk/asn1/der/bit/der_decode_bit_string.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/pk/asn1/der/bit/der_encode_bit_string.c b/src/pk/asn1/der/bit/der_encode_bit_string.c index 862048c46..e64bd1fec 100644 --- a/src/pk/asn1/der/bit/der_encode_bit_string.c +++ b/src/pk/asn1/der/bit/der_encode_bit_string.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/pk/asn1/der/bit/der_length_bit_string.c b/src/pk/asn1/der/bit/der_length_bit_string.c index 8e5a7751e..3ec5f5870 100644 --- a/src/pk/asn1/der/bit/der_length_bit_string.c +++ b/src/pk/asn1/der/bit/der_length_bit_string.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/pk/asn1/der/boolean/der_decode_boolean.c b/src/pk/asn1/der/boolean/der_decode_boolean.c index d9d69058f..e7c56990f 100644 --- a/src/pk/asn1/der/boolean/der_decode_boolean.c +++ b/src/pk/asn1/der/boolean/der_decode_boolean.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/pk/asn1/der/boolean/der_encode_boolean.c b/src/pk/asn1/der/boolean/der_encode_boolean.c index 783377588..b40fae614 100644 --- a/src/pk/asn1/der/boolean/der_encode_boolean.c +++ b/src/pk/asn1/der/boolean/der_encode_boolean.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/pk/asn1/der/boolean/der_length_boolean.c b/src/pk/asn1/der/boolean/der_length_boolean.c index 5c42f25ee..543703152 100644 --- a/src/pk/asn1/der/boolean/der_length_boolean.c +++ b/src/pk/asn1/der/boolean/der_length_boolean.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/pk/asn1/der/choice/der_decode_choice.c b/src/pk/asn1/der/choice/der_decode_choice.c index aafdf42ba..1220b37d6 100644 --- a/src/pk/asn1/der/choice/der_decode_choice.c +++ b/src/pk/asn1/der/choice/der_decode_choice.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/pk/asn1/der/ia5/der_decode_ia5_string.c b/src/pk/asn1/der/ia5/der_decode_ia5_string.c index 98404f882..1880ada64 100644 --- a/src/pk/asn1/der/ia5/der_decode_ia5_string.c +++ b/src/pk/asn1/der/ia5/der_decode_ia5_string.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/pk/asn1/der/ia5/der_encode_ia5_string.c b/src/pk/asn1/der/ia5/der_encode_ia5_string.c index 1ef955c44..6009dbc98 100644 --- a/src/pk/asn1/der/ia5/der_encode_ia5_string.c +++ b/src/pk/asn1/der/ia5/der_encode_ia5_string.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/pk/asn1/der/ia5/der_length_ia5_string.c b/src/pk/asn1/der/ia5/der_length_ia5_string.c index 9ea17d237..f10c1b849 100644 --- a/src/pk/asn1/der/ia5/der_length_ia5_string.c +++ b/src/pk/asn1/der/ia5/der_length_ia5_string.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/pk/asn1/der/integer/der_decode_integer.c b/src/pk/asn1/der/integer/der_decode_integer.c index cab54f1a8..0ed8ad77a 100644 --- a/src/pk/asn1/der/integer/der_decode_integer.c +++ b/src/pk/asn1/der/integer/der_decode_integer.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/pk/asn1/der/integer/der_encode_integer.c b/src/pk/asn1/der/integer/der_encode_integer.c index ee3968fbe..e80bb3ced 100644 --- a/src/pk/asn1/der/integer/der_encode_integer.c +++ b/src/pk/asn1/der/integer/der_encode_integer.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/pk/asn1/der/integer/der_length_integer.c b/src/pk/asn1/der/integer/der_length_integer.c index 4b8286c81..9d4968392 100644 --- a/src/pk/asn1/der/integer/der_length_integer.c +++ b/src/pk/asn1/der/integer/der_length_integer.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/pk/asn1/der/object_identifier/der_decode_object_identifier.c b/src/pk/asn1/der/object_identifier/der_decode_object_identifier.c index c821259b2..406acdc6e 100644 --- a/src/pk/asn1/der/object_identifier/der_decode_object_identifier.c +++ b/src/pk/asn1/der/object_identifier/der_decode_object_identifier.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/pk/asn1/der/object_identifier/der_encode_object_identifier.c b/src/pk/asn1/der/object_identifier/der_encode_object_identifier.c index 844729c11..f018ba978 100644 --- a/src/pk/asn1/der/object_identifier/der_encode_object_identifier.c +++ b/src/pk/asn1/der/object_identifier/der_encode_object_identifier.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/pk/asn1/der/object_identifier/der_length_object_identifier.c b/src/pk/asn1/der/object_identifier/der_length_object_identifier.c index 6ca8cf1aa..ccb1e6dd1 100644 --- a/src/pk/asn1/der/object_identifier/der_length_object_identifier.c +++ b/src/pk/asn1/der/object_identifier/der_length_object_identifier.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/pk/asn1/der/octet/der_decode_octet_string.c b/src/pk/asn1/der/octet/der_decode_octet_string.c index 2b7401b04..952d73995 100644 --- a/src/pk/asn1/der/octet/der_decode_octet_string.c +++ b/src/pk/asn1/der/octet/der_decode_octet_string.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/pk/asn1/der/octet/der_encode_octet_string.c b/src/pk/asn1/der/octet/der_encode_octet_string.c index b8559649c..9a16c3b5b 100644 --- a/src/pk/asn1/der/octet/der_encode_octet_string.c +++ b/src/pk/asn1/der/octet/der_encode_octet_string.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/pk/asn1/der/octet/der_length_octet_string.c b/src/pk/asn1/der/octet/der_length_octet_string.c index 6cf1ad0e3..07da0587d 100644 --- a/src/pk/asn1/der/octet/der_length_octet_string.c +++ b/src/pk/asn1/der/octet/der_length_octet_string.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/pk/asn1/der/printable_string/der_decode_printable_string.c b/src/pk/asn1/der/printable_string/der_decode_printable_string.c index 932b5abf4..56bf3762a 100644 --- a/src/pk/asn1/der/printable_string/der_decode_printable_string.c +++ b/src/pk/asn1/der/printable_string/der_decode_printable_string.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/pk/asn1/der/printable_string/der_encode_printable_string.c b/src/pk/asn1/der/printable_string/der_encode_printable_string.c index f3040d3ed..7d7cfd2a6 100644 --- a/src/pk/asn1/der/printable_string/der_encode_printable_string.c +++ b/src/pk/asn1/der/printable_string/der_encode_printable_string.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/pk/asn1/der/printable_string/der_length_printable_string.c b/src/pk/asn1/der/printable_string/der_length_printable_string.c index 80bf79022..9f78f20e5 100644 --- a/src/pk/asn1/der/printable_string/der_length_printable_string.c +++ b/src/pk/asn1/der/printable_string/der_length_printable_string.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/pk/asn1/der/sequence/der_decode_sequence_ex.c b/src/pk/asn1/der/sequence/der_decode_sequence_ex.c index 2b9172fe6..5042b18b4 100644 --- a/src/pk/asn1/der/sequence/der_decode_sequence_ex.c +++ b/src/pk/asn1/der/sequence/der_decode_sequence_ex.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" #include diff --git a/src/pk/asn1/der/sequence/der_decode_sequence_flexi.c b/src/pk/asn1/der/sequence/der_decode_sequence_flexi.c index d55b1cd89..4fd3aaad4 100644 --- a/src/pk/asn1/der/sequence/der_decode_sequence_flexi.c +++ b/src/pk/asn1/der/sequence/der_decode_sequence_flexi.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/pk/asn1/der/sequence/der_decode_sequence_multi.c b/src/pk/asn1/der/sequence/der_decode_sequence_multi.c index 4c376d282..4202eb3b3 100644 --- a/src/pk/asn1/der/sequence/der_decode_sequence_multi.c +++ b/src/pk/asn1/der/sequence/der_decode_sequence_multi.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" #include diff --git a/src/pk/asn1/der/sequence/der_encode_sequence_ex.c b/src/pk/asn1/der/sequence/der_encode_sequence_ex.c index cdb4f1eba..e92f7c310 100644 --- a/src/pk/asn1/der/sequence/der_encode_sequence_ex.c +++ b/src/pk/asn1/der/sequence/der_encode_sequence_ex.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" #include diff --git a/src/pk/asn1/der/sequence/der_encode_sequence_multi.c b/src/pk/asn1/der/sequence/der_encode_sequence_multi.c index 4ac2fa057..659f029a3 100644 --- a/src/pk/asn1/der/sequence/der_encode_sequence_multi.c +++ b/src/pk/asn1/der/sequence/der_encode_sequence_multi.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" #include diff --git a/src/pk/asn1/der/sequence/der_length_sequence.c b/src/pk/asn1/der/sequence/der_length_sequence.c index 8e6e2bb15..7221f9970 100644 --- a/src/pk/asn1/der/sequence/der_length_sequence.c +++ b/src/pk/asn1/der/sequence/der_length_sequence.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/pk/asn1/der/sequence/der_sequence_free.c b/src/pk/asn1/der/sequence/der_sequence_free.c index 5658661dd..c933f5893 100644 --- a/src/pk/asn1/der/sequence/der_sequence_free.c +++ b/src/pk/asn1/der/sequence/der_sequence_free.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/pk/asn1/der/set/der_encode_set.c b/src/pk/asn1/der/set/der_encode_set.c index c09ee9fe1..a2d01287d 100644 --- a/src/pk/asn1/der/set/der_encode_set.c +++ b/src/pk/asn1/der/set/der_encode_set.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/pk/asn1/der/set/der_encode_setof.c b/src/pk/asn1/der/set/der_encode_setof.c index e06df9112..8e87f84a6 100644 --- a/src/pk/asn1/der/set/der_encode_setof.c +++ b/src/pk/asn1/der/set/der_encode_setof.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/pk/asn1/der/short_integer/der_decode_short_integer.c b/src/pk/asn1/der/short_integer/der_decode_short_integer.c index 67ba02bcb..a1747400f 100644 --- a/src/pk/asn1/der/short_integer/der_decode_short_integer.c +++ b/src/pk/asn1/der/short_integer/der_decode_short_integer.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/pk/asn1/der/short_integer/der_encode_short_integer.c b/src/pk/asn1/der/short_integer/der_encode_short_integer.c index 09b843cca..903ceb49e 100644 --- a/src/pk/asn1/der/short_integer/der_encode_short_integer.c +++ b/src/pk/asn1/der/short_integer/der_encode_short_integer.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/pk/asn1/der/short_integer/der_length_short_integer.c b/src/pk/asn1/der/short_integer/der_length_short_integer.c index 8adeb1aa4..0b8fdcf80 100644 --- a/src/pk/asn1/der/short_integer/der_length_short_integer.c +++ b/src/pk/asn1/der/short_integer/der_length_short_integer.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/pk/asn1/der/utctime/der_decode_utctime.c b/src/pk/asn1/der/utctime/der_decode_utctime.c index fa9f3c2ab..c86bc752f 100644 --- a/src/pk/asn1/der/utctime/der_decode_utctime.c +++ b/src/pk/asn1/der/utctime/der_decode_utctime.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/pk/asn1/der/utctime/der_encode_utctime.c b/src/pk/asn1/der/utctime/der_encode_utctime.c index 31f1ba97a..f8d0c5658 100644 --- a/src/pk/asn1/der/utctime/der_encode_utctime.c +++ b/src/pk/asn1/der/utctime/der_encode_utctime.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/pk/asn1/der/utctime/der_length_utctime.c b/src/pk/asn1/der/utctime/der_length_utctime.c index ec4651997..e33c4f33a 100644 --- a/src/pk/asn1/der/utctime/der_length_utctime.c +++ b/src/pk/asn1/der/utctime/der_length_utctime.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/pk/asn1/der/utf8/der_decode_utf8_string.c b/src/pk/asn1/der/utf8/der_decode_utf8_string.c index beb326f94..d9cbdaf39 100644 --- a/src/pk/asn1/der/utf8/der_decode_utf8_string.c +++ b/src/pk/asn1/der/utf8/der_decode_utf8_string.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/pk/asn1/der/utf8/der_encode_utf8_string.c b/src/pk/asn1/der/utf8/der_encode_utf8_string.c index b0d3302ea..847a726e7 100644 --- a/src/pk/asn1/der/utf8/der_encode_utf8_string.c +++ b/src/pk/asn1/der/utf8/der_encode_utf8_string.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" @@ -65,19 +65,19 @@ int der_encode_utf8_string(const wchar_t *in, unsigned long inlen, x = 0; out[x++] = 0x0C; if (len < 128) { - out[x++] = len; + out[x++] = (unsigned char)len; } else if (len < 256) { out[x++] = 0x81; - out[x++] = len; + out[x++] = (unsigned char)len; } else if (len < 65536UL) { out[x++] = 0x82; - out[x++] = (len>>8)&255; - out[x++] = len&255; + out[x++] = (unsigned char)((len>>8)&255); + out[x++] = (unsigned char)(len&255); } else if (len < 16777216UL) { out[x++] = 0x83; - out[x++] = (len>>16)&255; - out[x++] = (len>>8)&255; - out[x++] = len&255; + out[x++] = (unsigned char)((len>>16)&255); + out[x++] = (unsigned char)((len>>8)&255); + out[x++] = (unsigned char)(len&255); } else { return CRYPT_INVALID_ARG; } @@ -85,7 +85,7 @@ int der_encode_utf8_string(const wchar_t *in, unsigned long inlen, /* store UTF8 */ for (y = 0; y < inlen; y++) { switch (der_utf8_charsize(in[y])) { - case 1: out[x++] = in[y]; break; + case 1: out[x++] = (unsigned char)in[y]; break; case 2: out[x++] = 0xC0 | ((in[y] >> 6) & 0x1F); out[x++] = 0x80 | (in[y] & 0x3F); break; case 3: out[x++] = 0xE0 | ((in[y] >> 12) & 0x0F); out[x++] = 0x80 | ((in[y] >> 6) & 0x3F); out[x++] = 0x80 | (in[y] & 0x3F); break; case 4: out[x++] = 0xF0 | ((in[y] >> 18) & 0x07); out[x++] = 0x80 | ((in[y] >> 12) & 0x3F); out[x++] = 0x80 | ((in[y] >> 6) & 0x3F); out[x++] = 0x80 | (in[y] & 0x3F); break; diff --git a/src/pk/asn1/der/utf8/der_length_utf8_string.c b/src/pk/asn1/der/utf8/der_length_utf8_string.c index 81af32712..3321f945e 100644 --- a/src/pk/asn1/der/utf8/der_length_utf8_string.c +++ b/src/pk/asn1/der/utf8/der_length_utf8_string.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/pk/dsa/dsa_decrypt_key.c b/src/pk/dsa/dsa_decrypt_key.c index 338eda911..c622c78d2 100644 --- a/src/pk/dsa/dsa_decrypt_key.c +++ b/src/pk/dsa/dsa_decrypt_key.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" @@ -15,7 +15,7 @@ DSA Crypto, Tom St Denis */ -#ifdef MDSA +#ifdef LTC_MDSA /** Decrypt an DSA encrypted key diff --git a/src/pk/dsa/dsa_encrypt_key.c b/src/pk/dsa/dsa_encrypt_key.c index 0ff60baa6..a0829699a 100644 --- a/src/pk/dsa/dsa_encrypt_key.c +++ b/src/pk/dsa/dsa_encrypt_key.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" @@ -15,7 +15,7 @@ DSA Crypto, Tom St Denis */ -#ifdef MDSA +#ifdef LTC_MDSA /** Encrypt a symmetric key with DSA diff --git a/src/pk/dsa/dsa_export.c b/src/pk/dsa/dsa_export.c index 793eecc4e..e4c450887 100644 --- a/src/pk/dsa/dsa_export.c +++ b/src/pk/dsa/dsa_export.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" @@ -15,7 +15,7 @@ DSA implementation, export key, Tom St Denis */ -#ifdef MDSA +#ifdef LTC_MDSA /** Export a DSA key to a binary packet diff --git a/src/pk/dsa/dsa_free.c b/src/pk/dsa/dsa_free.c index 9a6d4f996..5f5ce7244 100644 --- a/src/pk/dsa/dsa_free.c +++ b/src/pk/dsa/dsa_free.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" @@ -15,7 +15,7 @@ DSA implementation, free a DSA key, Tom St Denis */ -#ifdef MDSA +#ifdef LTC_MDSA /** Free a DSA key diff --git a/src/pk/dsa/dsa_import.c b/src/pk/dsa/dsa_import.c index 81cccd11f..47a68ca07 100644 --- a/src/pk/dsa/dsa_import.c +++ b/src/pk/dsa/dsa_import.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" @@ -15,7 +15,7 @@ DSA implementation, import a DSA key, Tom St Denis */ -#ifdef MDSA +#ifdef LTC_MDSA /** Import a DSA key @@ -71,8 +71,8 @@ int dsa_import(const unsigned char *in, unsigned long inlen, dsa_key *key) } key->qord = mp_unsigned_bin_size(key->q); - if (key->qord >= MDSA_MAX_GROUP || key->qord <= 15 || - (unsigned long)key->qord >= mp_unsigned_bin_size(key->p) || (mp_unsigned_bin_size(key->p) - key->qord) >= MDSA_DELTA) { + if (key->qord >= LTC_MDSA_MAX_GROUP || key->qord <= 15 || + (unsigned long)key->qord >= mp_unsigned_bin_size(key->p) || (mp_unsigned_bin_size(key->p) - key->qord) >= LTC_MDSA_DELTA) { err = CRYPT_INVALID_PACKET; goto error; } diff --git a/src/pk/dsa/dsa_make_key.c b/src/pk/dsa/dsa_make_key.c index 5052df960..1c16d032f 100644 --- a/src/pk/dsa/dsa_make_key.c +++ b/src/pk/dsa/dsa_make_key.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" @@ -15,7 +15,7 @@ DSA implementation, generate a DSA key, Tom St Denis */ -#ifdef MDSA +#ifdef LTC_MDSA /** Create a DSA key @@ -41,13 +41,13 @@ int dsa_make_key(prng_state *prng, int wprng, int group_size, int modulus_size, } /* check size */ - if (group_size >= MDSA_MAX_GROUP || group_size <= 15 || - group_size >= modulus_size || (modulus_size - group_size) >= MDSA_DELTA) { + if (group_size >= LTC_MDSA_MAX_GROUP || group_size <= 15 || + group_size >= modulus_size || (modulus_size - group_size) >= LTC_MDSA_DELTA) { return CRYPT_INVALID_ARG; } /* allocate ram */ - buf = XMALLOC(MDSA_DELTA); + buf = XMALLOC(LTC_MDSA_DELTA); if (buf == NULL) { return CRYPT_MEM; } @@ -117,7 +117,7 @@ int dsa_make_key(prng_state *prng, int wprng, int group_size, int modulus_size, key->qord = group_size; #ifdef LTC_CLEAN_STACK - zeromem(buf, MDSA_DELTA); + zeromem(buf, LTC_MDSA_DELTA); #endif err = CRYPT_OK; diff --git a/src/pk/dsa/dsa_shared_secret.c b/src/pk/dsa/dsa_shared_secret.c index 25a30e72e..5adaa5fbd 100644 --- a/src/pk/dsa/dsa_shared_secret.c +++ b/src/pk/dsa/dsa_shared_secret.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" @@ -15,7 +15,7 @@ DSA Crypto, Tom St Denis */ -#ifdef MDSA +#ifdef LTC_MDSA /** Create a DSA shared secret between two keys diff --git a/src/pk/dsa/dsa_sign_hash.c b/src/pk/dsa/dsa_sign_hash.c index 5cb8df92d..3fc7e99d0 100644 --- a/src/pk/dsa/dsa_sign_hash.c +++ b/src/pk/dsa/dsa_sign_hash.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" @@ -15,7 +15,7 @@ DSA implementation, sign a hash, Tom St Denis */ -#ifdef MDSA +#ifdef LTC_MDSA /** Sign a hash with DSA @@ -49,11 +49,11 @@ int dsa_sign_hash_raw(const unsigned char *in, unsigned long inlen, } /* check group order size */ - if (key->qord >= MDSA_MAX_GROUP) { + if (key->qord >= LTC_MDSA_MAX_GROUP) { return CRYPT_INVALID_ARG; } - buf = XMALLOC(MDSA_MAX_GROUP); + buf = XMALLOC(LTC_MDSA_MAX_GROUP); if (buf == NULL) { return CRYPT_MEM; } @@ -102,7 +102,7 @@ int dsa_sign_hash_raw(const unsigned char *in, unsigned long inlen, mp_clear_multi(k, kinv, tmp, NULL); ERRBUF: #ifdef LTC_CLEAN_STACK - zeromem(buf, MDSA_MAX_GROUP); + zeromem(buf, LTC_MDSA_MAX_GROUP); #endif XFREE(buf); return err; diff --git a/src/pk/dsa/dsa_verify_hash.c b/src/pk/dsa/dsa_verify_hash.c index f58a53baf..59beec24e 100644 --- a/src/pk/dsa/dsa_verify_hash.c +++ b/src/pk/dsa/dsa_verify_hash.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" @@ -16,7 +16,7 @@ */ -#ifdef MDSA +#ifdef LTC_MDSA /** Verify a DSA signature diff --git a/src/pk/dsa/dsa_verify_key.c b/src/pk/dsa/dsa_verify_key.c index 3c6adcc66..fa839ef6a 100644 --- a/src/pk/dsa/dsa_verify_key.c +++ b/src/pk/dsa/dsa_verify_key.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" @@ -15,7 +15,7 @@ DSA implementation, verify a key, Tom St Denis */ -#ifdef MDSA +#ifdef LTC_MDSA /** Verify a DSA key for validity diff --git a/src/pk/ecc/ecc.c b/src/pk/ecc/ecc.c index 2b213ce29..56ed526e2 100644 --- a/src/pk/ecc/ecc.c +++ b/src/pk/ecc/ecc.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b @@ -21,7 +21,7 @@ ECC Crypto, Tom St Denis */ -#ifdef MECC +#ifdef LTC_MECC /* This holds the key settings. ***MUST*** be organized by size from smallest to largest. */ const ltc_ecc_set_type ltc_ecc_sets[] = { diff --git a/src/pk/ecc/ecc_ansi_x963_export.c b/src/pk/ecc/ecc_ansi_x963_export.c index 1921512fb..09dae070e 100644 --- a/src/pk/ecc/ecc_ansi_x963_export.c +++ b/src/pk/ecc/ecc_ansi_x963_export.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b @@ -21,7 +21,7 @@ ECC Crypto, Tom St Denis */ -#ifdef MECC +#ifdef LTC_MECC /** ECC X9.63 (Sec. 4.3.6) uncompressed export @param key Key to export diff --git a/src/pk/ecc/ecc_ansi_x963_import.c b/src/pk/ecc/ecc_ansi_x963_import.c index c0ba18a3b..ec34245f8 100644 --- a/src/pk/ecc/ecc_ansi_x963_import.c +++ b/src/pk/ecc/ecc_ansi_x963_import.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b @@ -21,7 +21,7 @@ ECC Crypto, Tom St Denis */ -#ifdef MECC +#ifdef LTC_MECC /** Import an ANSI X9.63 format public key @param in The input data to read diff --git a/src/pk/ecc/ecc_decrypt_key.c b/src/pk/ecc/ecc_decrypt_key.c index 6f5dccd1a..6e09e6165 100644 --- a/src/pk/ecc/ecc_decrypt_key.c +++ b/src/pk/ecc/ecc_decrypt_key.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b @@ -21,7 +21,7 @@ ECC Crypto, Tom St Denis */ -#ifdef MECC +#ifdef LTC_MECC /** Decrypt an ECC encrypted key diff --git a/src/pk/ecc/ecc_encrypt_key.c b/src/pk/ecc/ecc_encrypt_key.c index 30ba9a46d..a74d50f21 100644 --- a/src/pk/ecc/ecc_encrypt_key.c +++ b/src/pk/ecc/ecc_encrypt_key.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b @@ -21,7 +21,7 @@ ECC Crypto, Tom St Denis */ -#ifdef MECC +#ifdef LTC_MECC /** Encrypt a symmetric key with ECC diff --git a/src/pk/ecc/ecc_export.c b/src/pk/ecc/ecc_export.c index 5e4260c70..b6c34853b 100644 --- a/src/pk/ecc/ecc_export.c +++ b/src/pk/ecc/ecc_export.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b @@ -21,7 +21,7 @@ ECC Crypto, Tom St Denis */ -#ifdef MECC +#ifdef LTC_MECC /** Export an ECC key as a binary packet diff --git a/src/pk/ecc/ecc_free.c b/src/pk/ecc/ecc_free.c index 5d8b7c2ba..c9e5d6cd0 100644 --- a/src/pk/ecc/ecc_free.c +++ b/src/pk/ecc/ecc_free.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b @@ -21,7 +21,7 @@ ECC Crypto, Tom St Denis */ -#ifdef MECC +#ifdef LTC_MECC /** Free an ECC key from memory diff --git a/src/pk/ecc/ecc_get_size.c b/src/pk/ecc/ecc_get_size.c index b4c15ad60..a824aa494 100644 --- a/src/pk/ecc/ecc_get_size.c +++ b/src/pk/ecc/ecc_get_size.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b @@ -21,7 +21,7 @@ ECC Crypto, Tom St Denis */ -#ifdef MECC +#ifdef LTC_MECC /** Get the size of an ECC key diff --git a/src/pk/ecc/ecc_import.c b/src/pk/ecc/ecc_import.c index f33245d5d..efb1d7062 100644 --- a/src/pk/ecc/ecc_import.c +++ b/src/pk/ecc/ecc_import.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b @@ -21,7 +21,7 @@ ECC Crypto, Tom St Denis */ -#ifdef MECC +#ifdef LTC_MECC static int is_point(ecc_key *key) { diff --git a/src/pk/ecc/ecc_make_key.c b/src/pk/ecc/ecc_make_key.c index e7617a602..9bbeb44d6 100644 --- a/src/pk/ecc/ecc_make_key.c +++ b/src/pk/ecc/ecc_make_key.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b @@ -21,7 +21,7 @@ ECC Crypto, Tom St Denis */ -#ifdef MECC +#ifdef LTC_MECC /** Make a new ECC key @@ -51,7 +51,7 @@ int ecc_make_key_ex(prng_state *prng, int wprng, ecc_key *key, const ltc_ecc_set { int err; ecc_point *base; - void *prime; + void *prime, *order; unsigned char *buf; int keysize; @@ -82,7 +82,7 @@ int ecc_make_key_ex(prng_state *prng, int wprng, ecc_key *key, const ltc_ecc_set } /* setup the key variables */ - if ((err = mp_init_multi(&key->pubkey.x, &key->pubkey.y, &key->pubkey.z, &key->k, &prime, NULL)) != CRYPT_OK) { + if ((err = mp_init_multi(&key->pubkey.x, &key->pubkey.y, &key->pubkey.z, &key->k, &prime, &order, NULL)) != CRYPT_OK) { goto ERR_BUF; } base = ltc_ecc_new_point(); @@ -93,11 +93,16 @@ int ecc_make_key_ex(prng_state *prng, int wprng, ecc_key *key, const ltc_ecc_set /* read in the specs for this key */ if ((err = mp_read_radix(prime, (char *)key->dp->prime, 16)) != CRYPT_OK) { goto errkey; } + if ((err = mp_read_radix(order, (char *)key->dp->order, 16)) != CRYPT_OK) { goto errkey; } if ((err = mp_read_radix(base->x, (char *)key->dp->Gx, 16)) != CRYPT_OK) { goto errkey; } if ((err = mp_read_radix(base->y, (char *)key->dp->Gy, 16)) != CRYPT_OK) { goto errkey; } if ((err = mp_set(base->z, 1)) != CRYPT_OK) { goto errkey; } if ((err = mp_read_unsigned_bin(key->k, (unsigned char *)buf, keysize)) != CRYPT_OK) { goto errkey; } + /* the key should be smaller than the order of base point */ + if (mp_cmp(key->k, order) != LTC_MP_LT) { + if((err = mp_mod(key->k, order, key->k)) != CRYPT_OK) { goto errkey; } + } /* make the public key */ if ((err = ltc_mp.ecc_ptmul(key->k, base, &key->pubkey, prime, 1)) != CRYPT_OK) { goto errkey; } key->type = PK_PRIVATE; @@ -109,7 +114,7 @@ int ecc_make_key_ex(prng_state *prng, int wprng, ecc_key *key, const ltc_ecc_set mp_clear_multi(key->pubkey.x, key->pubkey.y, key->pubkey.z, key->k, NULL); cleanup: ltc_ecc_del_point(base); - mp_clear(prime); + mp_clear_multi(prime, order, NULL); ERR_BUF: #ifdef LTC_CLEAN_STACK zeromem(buf, ECC_MAXSIZE); diff --git a/src/pk/ecc/ecc_shared_secret.c b/src/pk/ecc/ecc_shared_secret.c index 36fd05850..5aece5e34 100644 --- a/src/pk/ecc/ecc_shared_secret.c +++ b/src/pk/ecc/ecc_shared_secret.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b @@ -21,7 +21,7 @@ ECC Crypto, Tom St Denis */ -#ifdef MECC +#ifdef LTC_MECC /** Create an ECC shared secret between two keys diff --git a/src/pk/ecc/ecc_sign_hash.c b/src/pk/ecc/ecc_sign_hash.c index 5e7a325e0..a01dfad37 100644 --- a/src/pk/ecc/ecc_sign_hash.c +++ b/src/pk/ecc/ecc_sign_hash.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b @@ -21,7 +21,7 @@ ECC Crypto, Tom St Denis */ -#ifdef MECC +#ifdef LTC_MECC /** Sign a message digest diff --git a/src/pk/ecc/ecc_sizes.c b/src/pk/ecc/ecc_sizes.c index c673bfc56..b02a9f9ea 100644 --- a/src/pk/ecc/ecc_sizes.c +++ b/src/pk/ecc/ecc_sizes.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b @@ -21,7 +21,7 @@ ECC Crypto, Tom St Denis */ -#ifdef MECC +#ifdef LTC_MECC void ecc_sizes(int *low, int *high) { diff --git a/src/pk/ecc/ecc_test.c b/src/pk/ecc/ecc_test.c index de2ca02bc..873e70b06 100644 --- a/src/pk/ecc/ecc_test.c +++ b/src/pk/ecc/ecc_test.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b @@ -21,7 +21,7 @@ ECC Crypto, Tom St Denis */ -#ifdef MECC +#ifdef LTC_MECC /** Perform on the ECC system diff --git a/src/pk/ecc/ecc_verify_hash.c b/src/pk/ecc/ecc_verify_hash.c index 92f689a8c..ba7bba554 100644 --- a/src/pk/ecc/ecc_verify_hash.c +++ b/src/pk/ecc/ecc_verify_hash.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b @@ -21,7 +21,7 @@ ECC Crypto, Tom St Denis */ -#ifdef MECC +#ifdef LTC_MECC /* verify * diff --git a/src/pk/ecc/ltc_ecc_is_valid_idx.c b/src/pk/ecc/ltc_ecc_is_valid_idx.c index 9335555d3..4a0206888 100644 --- a/src/pk/ecc/ltc_ecc_is_valid_idx.c +++ b/src/pk/ecc/ltc_ecc_is_valid_idx.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b @@ -21,7 +21,7 @@ ECC Crypto, Tom St Denis */ -#ifdef MECC +#ifdef LTC_MECC /** Returns whether an ECC idx is valid or not @param n The idx number to check @@ -33,7 +33,7 @@ int ltc_ecc_is_valid_idx(int n) for (x = 0; ltc_ecc_sets[x].size != 0; x++); /* -1 is a valid index --- indicating that the domain params were supplied by the user */ - if ((n >= -1) || (n < x)) { + if ((n >= -1) && (n < x)) { return 1; } return 0; diff --git a/src/pk/ecc/ltc_ecc_map.c b/src/pk/ecc/ltc_ecc_map.c index 97df5cbec..4f3ec09c7 100644 --- a/src/pk/ecc/ltc_ecc_map.c +++ b/src/pk/ecc/ltc_ecc_map.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b @@ -21,7 +21,7 @@ ECC Crypto, Tom St Denis */ -#ifdef MECC +#ifdef LTC_MECC /** Map a projective jacbobian point back to affine space diff --git a/src/pk/ecc/ltc_ecc_mul2add.c b/src/pk/ecc/ltc_ecc_mul2add.c index 2236b8884..a6d1aab8a 100644 --- a/src/pk/ecc/ltc_ecc_mul2add.c +++ b/src/pk/ecc/ltc_ecc_mul2add.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b @@ -21,7 +21,7 @@ ECC Crypto, Shamir's Trick, Tom St Denis */ -#ifdef MECC +#ifdef LTC_MECC #ifdef LTC_ECC_SHAMIR diff --git a/src/pk/ecc/ltc_ecc_mulmod.c b/src/pk/ecc/ltc_ecc_mulmod.c index 324220752..4b11392ea 100644 --- a/src/pk/ecc/ltc_ecc_mulmod.c +++ b/src/pk/ecc/ltc_ecc_mulmod.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b @@ -21,7 +21,7 @@ ECC Crypto, Tom St Denis */ -#ifdef MECC +#ifdef LTC_MECC #ifndef LTC_ECC_TIMING_RESISTANT /* size of sliding window, don't change this! */ diff --git a/src/pk/ecc/ltc_ecc_mulmod_timing.c b/src/pk/ecc/ltc_ecc_mulmod_timing.c index 8eb35ca2e..863ed07c8 100644 --- a/src/pk/ecc/ltc_ecc_mulmod_timing.c +++ b/src/pk/ecc/ltc_ecc_mulmod_timing.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b @@ -21,7 +21,7 @@ ECC Crypto, Tom St Denis */ -#ifdef MECC +#ifdef LTC_MECC #ifdef LTC_ECC_TIMING_RESISTANT diff --git a/src/pk/ecc/ltc_ecc_points.c b/src/pk/ecc/ltc_ecc_points.c index fa928769a..9be9eff72 100644 --- a/src/pk/ecc/ltc_ecc_points.c +++ b/src/pk/ecc/ltc_ecc_points.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b @@ -21,7 +21,7 @@ ECC Crypto, Tom St Denis */ -#ifdef MECC +#ifdef LTC_MECC /** Allocate a new ECC point diff --git a/src/pk/ecc/ltc_ecc_projective_add_point.c b/src/pk/ecc/ltc_ecc_projective_add_point.c index d2a547649..c45a47b50 100644 --- a/src/pk/ecc/ltc_ecc_projective_add_point.c +++ b/src/pk/ecc/ltc_ecc_projective_add_point.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b @@ -21,7 +21,7 @@ ECC Crypto, Tom St Denis */ -#if defined(MECC) && (!defined(MECC_ACCEL) || defined(LTM_DESC)) +#if defined(LTC_MECC) && (!defined(LTC_MECC_ACCEL) || defined(LTM_LTC_DESC)) /** Add two ECC points diff --git a/src/pk/ecc/ltc_ecc_projective_dbl_point.c b/src/pk/ecc/ltc_ecc_projective_dbl_point.c index d4577eac9..ce31ccc28 100644 --- a/src/pk/ecc/ltc_ecc_projective_dbl_point.c +++ b/src/pk/ecc/ltc_ecc_projective_dbl_point.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ /* Implements ECC over Z/pZ for curve y^2 = x^3 - 3x + b @@ -21,7 +21,7 @@ ECC Crypto, Tom St Denis */ -#if defined(MECC) && (!defined(MECC_ACCEL) || defined(LTM_DESC)) +#if defined(LTC_MECC) && (!defined(LTC_MECC_ACCEL) || defined(LTM_LTC_DESC)) /** Double an ECC point diff --git a/src/pk/katja/katja_decrypt_key.c b/src/pk/katja/katja_decrypt_key.c index 266fece44..e8819d94b 100644 --- a/src/pk/katja/katja_decrypt_key.c +++ b/src/pk/katja/katja_decrypt_key.c @@ -6,19 +6,19 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" /** @file katja_decrypt_key.c - Katja PKCS #1 OAEP Decryption, Tom St Denis + Katja LTC_PKCS #1 OAEP Decryption, Tom St Denis */ #ifdef MKAT /** - (PKCS #1 v2.0) decrypt then OAEP depad + (LTC_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 @@ -94,7 +94,7 @@ int katja_decrypt_key(const unsigned char *in, unsigned long inlen, return err; } -#endif /* MRSA */ +#endif /* LTC_MRSA */ diff --git a/src/pk/katja/katja_encrypt_key.c b/src/pk/katja/katja_encrypt_key.c index fada96610..ef59e92e2 100644 --- a/src/pk/katja/katja_encrypt_key.c +++ b/src/pk/katja/katja_encrypt_key.c @@ -6,19 +6,19 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" /** @file katja_encrypt_key.c - Katja PKCS-style OAEP encryption, Tom St Denis + Katja LTC_PKCS-style OAEP encryption, Tom St Denis */ #ifdef MKAT /** - (PKCS #1 v2.0) OAEP pad then encrypt + (LTC_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 @@ -80,7 +80,7 @@ int katja_encrypt_key(const unsigned char *in, unsigned long inlen, return katja_exptmod(out, x, out, outlen, PK_PUBLIC, key); } -#endif /* MRSA */ +#endif /* LTC_MRSA */ /* $Source$ */ /* $Revision$ */ diff --git a/src/pk/katja/katja_export.c b/src/pk/katja/katja_export.c index 62cf53f65..5f4d32727 100644 --- a/src/pk/katja/katja_export.c +++ b/src/pk/katja/katja_export.c @@ -6,13 +6,13 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" /** @file katja_export.c - Export Katja PKCS-style keys, Tom St Denis + Export Katja LTC_PKCS-style keys, Tom St Denis */ #ifdef MKAT @@ -68,7 +68,7 @@ int katja_export(unsigned char *out, unsigned long *outlen, int type, katja_key } } -#endif /* MRSA */ +#endif /* LTC_MRSA */ /* $Source$ */ /* $Revision$ */ diff --git a/src/pk/katja/katja_exptmod.c b/src/pk/katja/katja_exptmod.c index 4f4bf4c96..5df89082d 100644 --- a/src/pk/katja/katja_exptmod.c +++ b/src/pk/katja/katja_exptmod.c @@ -6,13 +6,13 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" /** @file katja_exptmod.c - Katja PKCS-style exptmod, Tom St Denis + Katja LTC_PKCS-style exptmod, Tom St Denis */ #ifdef MKAT diff --git a/src/pk/katja/katja_free.c b/src/pk/katja/katja_free.c index d50e3d45d..c5a46af81 100644 --- a/src/pk/katja/katja_free.c +++ b/src/pk/katja/katja_free.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/pk/katja/katja_import.c b/src/pk/katja/katja_import.c index 6db24a675..425f49819 100644 --- a/src/pk/katja/katja_import.c +++ b/src/pk/katja/katja_import.c @@ -6,19 +6,19 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" /** @file katja_import.c - Import a PKCS-style Katja key, Tom St Denis + Import a LTC_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] + Import an KatjaPublicKey or KatjaPrivateKey [two-prime only, only support >= 1024-bit keys, defined in LTC_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 @@ -73,7 +73,7 @@ int katja_import(const unsigned char *in, unsigned long inlen, katja_key *key) return err; } -#endif /* MRSA */ +#endif /* LTC_MRSA */ /* $Source$ */ diff --git a/src/pk/katja/katja_make_key.c b/src/pk/katja/katja_make_key.c index b508e013f..eec8e9868 100644 --- a/src/pk/katja/katja_make_key.c +++ b/src/pk/katja/katja_make_key.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/pk/pkcs1/pkcs_1_i2osp.c b/src/pk/pkcs1/pkcs_1_i2osp.c index 4b4579744..2d9df7569 100644 --- a/src/pk/pkcs1/pkcs_1_i2osp.c +++ b/src/pk/pkcs1/pkcs_1_i2osp.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" @@ -15,14 +15,14 @@ Integer to Octet I2OSP, Tom St Denis */ -#ifdef PKCS_1 +#ifdef LTC_PKCS_1 /* always stores the same # of bytes, pads with leading zero bytes as required */ /** - PKCS #1 Integer to binary + LTC_PKCS #1 Integer to binary @param n The integer to store @param modulus_len The length of the RSA modulus @param out [out] The destination for the integer @@ -43,7 +43,7 @@ int pkcs_1_i2osp(void *n, unsigned long modulus_len, unsigned char *out) return mp_to_unsigned_bin(n, out+(modulus_len-size)); } -#endif /* PKCS_1 */ +#endif /* LTC_PKCS_1 */ /* $Source$ */ diff --git a/src/pk/pkcs1/pkcs_1_mgf1.c b/src/pk/pkcs1/pkcs_1_mgf1.c index b969a101f..af8f7e215 100644 --- a/src/pk/pkcs1/pkcs_1_mgf1.c +++ b/src/pk/pkcs1/pkcs_1_mgf1.c @@ -6,19 +6,19 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" /** @file pkcs_1_mgf1.c - The Mask Generation Function (MGF1) for PKCS #1, Tom St Denis + The Mask Generation Function (MGF1) for LTC_PKCS #1, Tom St Denis */ -#ifdef PKCS_1 +#ifdef LTC_PKCS_1 /** - Perform PKCS #1 MGF1 (internal) + Perform LTC_PKCS #1 MGF1 (internal) @param seed The seed for MGF1 @param seedlen The length of the seed @param hash_idx The index of the hash desired @@ -101,7 +101,7 @@ int pkcs_1_mgf1(int hash_idx, return err; } -#endif /* PKCS_1 */ +#endif /* LTC_PKCS_1 */ /* $Source$ */ /* $Revision$ */ diff --git a/src/pk/pkcs1/pkcs_1_oaep_decode.c b/src/pk/pkcs1/pkcs_1_oaep_decode.c index 6abf02f4e..9ac9976e9 100644 --- a/src/pk/pkcs1/pkcs_1_oaep_decode.c +++ b/src/pk/pkcs1/pkcs_1_oaep_decode.c @@ -6,19 +6,19 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" /** @file pkcs_1_oaep_decode.c - OAEP Padding for PKCS #1, Tom St Denis + OAEP Padding for LTC_PKCS #1, Tom St Denis */ -#ifdef PKCS_1 +#ifdef LTC_PKCS_1 /** - PKCS #1 v2.00 OAEP decode + LTC_PKCS #1 v2.00 OAEP decode @param msg The encoded data to decode @param msglen The length of the encoded data (octets) @param lparam The session or system data (can be NULL) @@ -182,7 +182,7 @@ int pkcs_1_oaep_decode(const unsigned char *msg, unsigned long msglen, return err; } -#endif /* PKCS_1 */ +#endif /* LTC_PKCS_1 */ /* $Source$ */ /* $Revision$ */ diff --git a/src/pk/pkcs1/pkcs_1_oaep_encode.c b/src/pk/pkcs1/pkcs_1_oaep_encode.c index 842f0b98e..4403477b9 100644 --- a/src/pk/pkcs1/pkcs_1_oaep_encode.c +++ b/src/pk/pkcs1/pkcs_1_oaep_encode.c @@ -6,19 +6,19 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" /** @file pkcs_1_oaep_encode.c - OAEP Padding for PKCS #1, Tom St Denis + OAEP Padding for LTC_PKCS #1, Tom St Denis */ -#ifdef PKCS_1 +#ifdef LTC_PKCS_1 /** - PKCS #1 v2.00 OAEP encode + LTC_PKCS #1 v2.00 OAEP encode @param msg The data to encode @param msglen The length of the data to encode (octets) @param lparam A session or system parameter (can be NULL) @@ -165,7 +165,7 @@ int pkcs_1_oaep_encode(const unsigned char *msg, unsigned long msglen, return err; } -#endif /* PKCS_1 */ +#endif /* LTC_PKCS_1 */ /* $Source$ */ diff --git a/src/pk/pkcs1/pkcs_1_os2ip.c b/src/pk/pkcs1/pkcs_1_os2ip.c index cc29dd712..2df757487 100644 --- a/src/pk/pkcs1/pkcs_1_os2ip.c +++ b/src/pk/pkcs1/pkcs_1_os2ip.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" @@ -14,7 +14,7 @@ @file pkcs_1_os2ip.c Octet to Integer OS2IP, Tom St Denis */ -#ifdef PKCS_1 +#ifdef LTC_PKCS_1 /** Read a binary string into an mp_int @@ -28,7 +28,7 @@ int pkcs_1_os2ip(void *n, unsigned char *in, unsigned long inlen) return mp_read_unsigned_bin(n, in, inlen); } -#endif /* PKCS_1 */ +#endif /* LTC_PKCS_1 */ /* $Source$ */ diff --git a/src/pk/pkcs1/pkcs_1_pss_decode.c b/src/pk/pkcs1/pkcs_1_pss_decode.c index 49dcc7ed0..222048c44 100644 --- a/src/pk/pkcs1/pkcs_1_pss_decode.c +++ b/src/pk/pkcs1/pkcs_1_pss_decode.c @@ -6,19 +6,19 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" /** @file pkcs_1_pss_decode.c - PKCS #1 PSS Signature Padding, Tom St Denis + LTC_PKCS #1 PSS Signature Padding, Tom St Denis */ -#ifdef PKCS_1 +#ifdef LTC_PKCS_1 /** - PKCS #1 v2.00 PSS decode + LTC_PKCS #1 v2.00 PSS decode @param msghash The hash to verify @param msghashlen The length of the hash (octets) @param sig The signature data (encoded data) @@ -170,7 +170,7 @@ int pkcs_1_pss_decode(const unsigned char *msghash, unsigned long msghashlen, return err; } -#endif /* PKCS_1 */ +#endif /* LTC_PKCS_1 */ /* $Source$ */ /* $Revision$ */ diff --git a/src/pk/pkcs1/pkcs_1_pss_encode.c b/src/pk/pkcs1/pkcs_1_pss_encode.c index e435d3d91..b22a99f1f 100644 --- a/src/pk/pkcs1/pkcs_1_pss_encode.c +++ b/src/pk/pkcs1/pkcs_1_pss_encode.c @@ -6,19 +6,19 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" /** @file pkcs_1_pss_encode.c - PKCS #1 PSS Signature Padding, Tom St Denis + LTC_PKCS #1 PSS Signature Padding, Tom St Denis */ -#ifdef PKCS_1 +#ifdef LTC_PKCS_1 /** - PKCS #1 v2.00 Signature Encoding + LTC_PKCS #1 v2.00 Signature Encoding @param msghash The hash to encode @param msghashlen The length of the hash (octets) @param saltlen The length of the salt desired (octets) @@ -168,7 +168,7 @@ int pkcs_1_pss_encode(const unsigned char *msghash, unsigned long msghashlen, return err; } -#endif /* PKCS_1 */ +#endif /* LTC_PKCS_1 */ /* $Source$ */ /* $Revision$ */ diff --git a/src/pk/pkcs1/pkcs_1_v1_5_decode.c b/src/pk/pkcs1/pkcs_1_v1_5_decode.c index 5d2a2f489..83456017d 100644 --- a/src/pk/pkcs1/pkcs_1_v1_5_decode.c +++ b/src/pk/pkcs1/pkcs_1_v1_5_decode.c @@ -6,18 +6,18 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" /** @file pkcs_1_v1_5_decode.c * - * PKCS #1 v1.5 Padding. (Andreas Lange) + * LTC_PKCS #1 v1.5 Padding. (Andreas Lange) */ -#ifdef PKCS_1 +#ifdef LTC_PKCS_1 -/** @brief PKCS #1 v1.5 decode. +/** @brief LTC_PKCS #1 v1.5 decode. * * @param msg The encoded data to decode * @param msglen The length of the encoded data (octets) @@ -58,7 +58,7 @@ int pkcs_1_v1_5_decode(const unsigned char *msg, goto bail; } - if (block_type == LTC_PKCS_1_EME) { + if (block_type == LTC_LTC_PKCS_1_EME) { for (i = 2; i < modulus_len; i++) { /* separator */ if (msg[i] == 0x00) { break; } @@ -103,7 +103,7 @@ int pkcs_1_v1_5_decode(const unsigned char *msg, return result; } /* pkcs_1_v1_5_decode */ -#endif /* #ifdef PKCS_1 */ +#endif /* #ifdef LTC_PKCS_1 */ /* $Source$ */ /* $Revision$ */ diff --git a/src/pk/pkcs1/pkcs_1_v1_5_encode.c b/src/pk/pkcs1/pkcs_1_v1_5_encode.c index d63608bdd..1c3506966 100644 --- a/src/pk/pkcs1/pkcs_1_v1_5_encode.c +++ b/src/pk/pkcs1/pkcs_1_v1_5_encode.c @@ -6,25 +6,25 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" /*! \file pkcs_1_v1_5_encode.c * - * PKCS #1 v1.5 Padding (Andreas Lange) + * LTC_PKCS #1 v1.5 Padding (Andreas Lange) */ -#ifdef PKCS_1 +#ifdef LTC_PKCS_1 -/*! \brief PKCS #1 v1.5 encode. +/*! \brief LTC_PKCS #1 v1.5 encode. * * \param msg The data to encode * \param msglen The length of the data to encode (octets) * \param block_type Block type to use in padding (\sa ltc_pkcs_1_v1_5_blocks) * \param modulus_bitlen The bit length of the RSA modulus - * \param prng An active PRNG state (only for LTC_PKCS_1_EME) - * \param prng_idx The index of the PRNG desired (only for LTC_PKCS_1_EME) + * \param prng An active PRNG state (only for LTC_LTC_PKCS_1_EME) + * \param prng_idx The index of the PRNG desired (only for LTC_LTC_PKCS_1_EME) * \param out [out] The destination for the encoded data * \param outlen [in/out] The max size and resulting size of the encoded data * @@ -44,12 +44,12 @@ int pkcs_1_v1_5_encode(const unsigned char *msg, int result; /* valid block_type? */ - if ((block_type != LTC_PKCS_1_EMSA) && - (block_type != LTC_PKCS_1_EME)) { + if ((block_type != LTC_LTC_PKCS_1_EMSA) && + (block_type != LTC_LTC_PKCS_1_EME)) { return CRYPT_PK_INVALID_PADDING; } - if (block_type == LTC_PKCS_1_EME) { /* encryption padding, we need a valid PRNG */ + if (block_type == LTC_LTC_PKCS_1_EME) { /* encryption padding, we need a valid PRNG */ if ((result = prng_is_valid(prng_idx)) != CRYPT_OK) { return result; } @@ -72,7 +72,7 @@ int pkcs_1_v1_5_encode(const unsigned char *msg, ps = &out[2]; ps_len = modulus_len - msglen - 3; - if (block_type == LTC_PKCS_1_EME) { + if (block_type == LTC_LTC_PKCS_1_EME) { /* now choose a random ps */ if (prng_descriptor[prng_idx].read(ps, ps_len, prng) != ps_len) { result = CRYPT_ERROR_READPRNG; @@ -104,7 +104,7 @@ int pkcs_1_v1_5_encode(const unsigned char *msg, return result; } /* pkcs_1_v1_5_encode */ -#endif /* #ifdef PKCS_1 */ +#endif /* #ifdef LTC_PKCS_1 */ /* $Source$ */ /* $Revision$ */ diff --git a/src/pk/rsa/rsa_decrypt_key.c b/src/pk/rsa/rsa_decrypt_key.c index b31538f74..31d841fe5 100644 --- a/src/pk/rsa/rsa_decrypt_key.c +++ b/src/pk/rsa/rsa_decrypt_key.c @@ -6,19 +6,19 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" /** @file rsa_decrypt_key.c - RSA PKCS #1 Decryption, Tom St Denis and Andreas Lange + RSA LTC_PKCS #1 Decryption, Tom St Denis and Andreas Lange */ -#ifdef MRSA +#ifdef LTC_MRSA /** - PKCS #1 decrypt then v1.5 or OAEP depad + LTC_PKCS #1 decrypt then v1.5 or OAEP depad @param in The ciphertext @param inlen The length of the ciphertext (octets) @param out [out] The plaintext @@ -26,7 +26,7 @@ @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 padding Type of padding (LTC_PKCS_1_OAEP or LTC_PKCS_1_V1_5) + @param padding Type of padding (LTC_LTC_PKCS_1_OAEP or LTC_LTC_PKCS_1_V1_5) @param stat [out] Result of the decryption, 1==valid, 0==invalid @param key The corresponding private RSA key @return CRYPT_OK if succcessul (even if invalid) @@ -51,12 +51,12 @@ int rsa_decrypt_key_ex(const unsigned char *in, unsigned long inlen, /* valid padding? */ - if ((padding != LTC_PKCS_1_V1_5) && - (padding != LTC_PKCS_1_OAEP)) { + if ((padding != LTC_LTC_PKCS_1_V1_5) && + (padding != LTC_LTC_PKCS_1_OAEP)) { return CRYPT_PK_INVALID_PADDING; } - if (padding == LTC_PKCS_1_OAEP) { + if (padding == LTC_LTC_PKCS_1_OAEP) { /* valid hash ? */ if ((err = hash_is_valid(hash_idx)) != CRYPT_OK) { return err; @@ -85,20 +85,20 @@ int rsa_decrypt_key_ex(const unsigned char *in, unsigned long inlen, return err; } - if (padding == LTC_PKCS_1_OAEP) { + if (padding == LTC_LTC_PKCS_1_OAEP) { /* now OAEP decode the packet */ err = pkcs_1_oaep_decode(tmp, x, lparam, lparamlen, modulus_bitlen, hash_idx, out, outlen, stat); } else { - /* now PKCS #1 v1.5 depad the packet */ - err = pkcs_1_v1_5_decode(tmp, x, LTC_PKCS_1_EME, modulus_bitlen, out, outlen, stat); + /* now LTC_PKCS #1 v1.5 depad the packet */ + err = pkcs_1_v1_5_decode(tmp, x, LTC_LTC_PKCS_1_EME, modulus_bitlen, out, outlen, stat); } XFREE(tmp); return err; } -#endif /* MRSA */ +#endif /* LTC_MRSA */ /* $Source$ */ /* $Revision$ */ diff --git a/src/pk/rsa/rsa_encrypt_key.c b/src/pk/rsa/rsa_encrypt_key.c index 3bc210997..edb7e6567 100644 --- a/src/pk/rsa/rsa_encrypt_key.c +++ b/src/pk/rsa/rsa_encrypt_key.c @@ -6,19 +6,19 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" /** @file rsa_encrypt_key.c - RSA PKCS #1 encryption, Tom St Denis and Andreas Lange + RSA LTC_PKCS #1 encryption, Tom St Denis and Andreas Lange */ -#ifdef MRSA +#ifdef LTC_MRSA /** - (PKCS #1 v2.0) OAEP pad then encrypt + (LTC_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 @@ -28,7 +28,7 @@ @param prng An active PRNG @param prng_idx The index of the desired prng @param hash_idx The index of the desired hash - @param padding Type of padding (LTC_PKCS_1_OAEP or LTC_PKCS_1_V1_5) + @param padding Type of padding (LTC_LTC_PKCS_1_OAEP or LTC_LTC_PKCS_1_V1_5) @param key The RSA key to encrypt to @return CRYPT_OK if successful */ @@ -46,8 +46,8 @@ int rsa_encrypt_key_ex(const unsigned char *in, unsigned long inlen, LTC_ARGCHK(key != NULL); /* valid padding? */ - if ((padding != LTC_PKCS_1_V1_5) && - (padding != LTC_PKCS_1_OAEP)) { + if ((padding != LTC_LTC_PKCS_1_V1_5) && + (padding != LTC_LTC_PKCS_1_OAEP)) { return CRYPT_PK_INVALID_PADDING; } @@ -56,7 +56,7 @@ int rsa_encrypt_key_ex(const unsigned char *in, unsigned long inlen, return err; } - if (padding == LTC_PKCS_1_OAEP) { + if (padding == LTC_LTC_PKCS_1_OAEP) { /* valid hash? */ if ((err = hash_is_valid(hash_idx)) != CRYPT_OK) { return err; @@ -73,7 +73,7 @@ int rsa_encrypt_key_ex(const unsigned char *in, unsigned long inlen, return CRYPT_BUFFER_OVERFLOW; } - if (padding == LTC_PKCS_1_OAEP) { + if (padding == LTC_LTC_PKCS_1_OAEP) { /* OAEP pad the key */ x = *outlen; if ((err = pkcs_1_oaep_encode(in, inlen, lparam, @@ -82,20 +82,20 @@ int rsa_encrypt_key_ex(const unsigned char *in, unsigned long inlen, return err; } } else { - /* PKCS #1 v1.5 pad the key */ + /* LTC_PKCS #1 v1.5 pad the key */ x = *outlen; - if ((err = pkcs_1_v1_5_encode(in, inlen, LTC_PKCS_1_EME, + if ((err = pkcs_1_v1_5_encode(in, inlen, LTC_LTC_PKCS_1_EME, modulus_bitlen, prng, prng_idx, out, &x)) != CRYPT_OK) { return err; } } - /* rsa exptmod the OAEP or PKCS #1 v1.5 pad */ + /* rsa exptmod the OAEP or LTC_PKCS #1 v1.5 pad */ return ltc_mp.rsa_me(out, x, out, outlen, PK_PUBLIC, key); } -#endif /* MRSA */ +#endif /* LTC_MRSA */ /* $Source$ */ /* $Revision$ */ diff --git a/src/pk/rsa/rsa_export.c b/src/pk/rsa/rsa_export.c index cc5e9aa23..40cb06608 100644 --- a/src/pk/rsa/rsa_export.c +++ b/src/pk/rsa/rsa_export.c @@ -6,19 +6,19 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" /** @file rsa_export.c - Export RSA PKCS keys, Tom St Denis + Export RSA LTC_PKCS keys, Tom St Denis */ -#ifdef MRSA +#ifdef LTC_MRSA /** - This will export either an RSAPublicKey or RSAPrivateKey [defined in PKCS #1 v2.1] + This will export either an RSAPublicKey or RSAPrivateKey [defined in LTC_PKCS #1 v2.1] @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) @@ -62,7 +62,7 @@ int rsa_export(unsigned char *out, unsigned long *outlen, int type, rsa_key *key } } -#endif /* MRSA */ +#endif /* LTC_MRSA */ /* $Source$ */ /* $Revision$ */ diff --git a/src/pk/rsa/rsa_exptmod.c b/src/pk/rsa/rsa_exptmod.c index b4b1b3f28..101a7660b 100644 --- a/src/pk/rsa/rsa_exptmod.c +++ b/src/pk/rsa/rsa_exptmod.c @@ -6,16 +6,16 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" /** @file rsa_exptmod.c - RSA PKCS exptmod, Tom St Denis + RSA LTC_PKCS exptmod, Tom St Denis */ -#ifdef MRSA +#ifdef LTC_MRSA /** Compute an RSA modular exponentiation diff --git a/src/pk/rsa/rsa_free.c b/src/pk/rsa/rsa_free.c index 3d0baf6f1..bb6daefcd 100644 --- a/src/pk/rsa/rsa_free.c +++ b/src/pk/rsa/rsa_free.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" @@ -15,7 +15,7 @@ Free an RSA key, Tom St Denis */ -#ifdef MRSA +#ifdef LTC_MRSA /** Free an RSA key from memory diff --git a/src/pk/rsa/rsa_import.c b/src/pk/rsa/rsa_import.c index 4a9f36c03..85c676ba3 100644 --- a/src/pk/rsa/rsa_import.c +++ b/src/pk/rsa/rsa_import.c @@ -6,19 +6,19 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" /** @file rsa_import.c - Import a PKCS RSA key, Tom St Denis + Import a LTC_PKCS RSA key, Tom St Denis */ -#ifdef MRSA +#ifdef LTC_MRSA /** - Import an RSAPublicKey or RSAPrivateKey [two-prime only, only support >= 1024-bit keys, defined in PKCS #1 v2.1] + Import an RSAPublicKey or RSAPrivateKey [two-prime only, only support >= 1024-bit keys, defined in LTC_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 @@ -87,7 +87,7 @@ int rsa_import(const unsigned char *in, unsigned long inlen, rsa_key *key) } XFREE(tmpbuf); - /* not SSL public key, try to match against PKCS #1 standards */ + /* not SSL public key, try to match against LTC_PKCS #1 standards */ if ((err = der_decode_sequence_multi(in, inlen, LTC_ASN1_INTEGER, 1UL, key->N, LTC_ASN1_EOL, 0UL, NULL)) != CRYPT_OK) { @@ -135,7 +135,7 @@ int rsa_import(const unsigned char *in, unsigned long inlen, rsa_key *key) return err; } -#endif /* MRSA */ +#endif /* LTC_MRSA */ /* $Source$ */ diff --git a/src/pk/rsa/rsa_make_key.c b/src/pk/rsa/rsa_make_key.c index 8caf83c24..d62e37e99 100644 --- a/src/pk/rsa/rsa_make_key.c +++ b/src/pk/rsa/rsa_make_key.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" @@ -15,7 +15,7 @@ RSA key generation, Tom St Denis */ -#ifdef MRSA +#ifdef LTC_MRSA /** Create an RSA key diff --git a/src/pk/rsa/rsa_sign_hash.c b/src/pk/rsa/rsa_sign_hash.c index ba59de484..3b64095a3 100644 --- a/src/pk/rsa/rsa_sign_hash.c +++ b/src/pk/rsa/rsa_sign_hash.c @@ -6,24 +6,24 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" /** @file rsa_sign_hash.c - RSA PKCS #1 v1.5 and v2 PSS sign hash, Tom St Denis and Andreas Lange + RSA LTC_PKCS #1 v1.5 and v2 PSS sign hash, Tom St Denis and Andreas Lange */ -#ifdef MRSA +#ifdef LTC_MRSA /** - PKCS #1 pad then sign + LTC_PKCS #1 pad then sign @param in The hash to sign @param inlen The length of the hash to sign (octets) @param out [out] The signature @param outlen [in/out] The max size and resulting size of the signature - @param padding Type of padding (LTC_PKCS_1_PSS or LTC_PKCS_1_V1_5) + @param padding Type of padding (LTC_LTC_PKCS_1_PSS or LTC_LTC_PKCS_1_V1_5) @param prng An active PRNG state @param prng_idx The index of the PRNG desired @param hash_idx The index of the hash desired @@ -47,11 +47,11 @@ int rsa_sign_hash_ex(const unsigned char *in, unsigned long inlen, LTC_ARGCHK(key != NULL); /* valid padding? */ - if ((padding != LTC_PKCS_1_V1_5) && (padding != LTC_PKCS_1_PSS)) { + if ((padding != LTC_LTC_PKCS_1_V1_5) && (padding != LTC_LTC_PKCS_1_PSS)) { return CRYPT_PK_INVALID_PADDING; } - if (padding == LTC_PKCS_1_PSS) { + if (padding == LTC_LTC_PKCS_1_PSS) { /* valid prng and hash ? */ if ((err = prng_is_valid(prng_idx)) != CRYPT_OK) { return err; @@ -71,7 +71,7 @@ int rsa_sign_hash_ex(const unsigned char *in, unsigned long inlen, return CRYPT_BUFFER_OVERFLOW; } - if (padding == LTC_PKCS_1_PSS) { + if (padding == LTC_LTC_PKCS_1_PSS) { /* PSS pad the key */ x = *outlen; if ((err = pkcs_1_pss_encode(in, inlen, saltlen, prng, prng_idx, @@ -79,7 +79,7 @@ int rsa_sign_hash_ex(const unsigned char *in, unsigned long inlen, return err; } } else { - /* PKCS #1 v1.5 pad the hash */ + /* LTC_PKCS #1 v1.5 pad the hash */ unsigned char *tmpin; ltc_asn1_list digestinfo[2], siginfo[2]; @@ -114,7 +114,7 @@ int rsa_sign_hash_ex(const unsigned char *in, unsigned long inlen, } x = *outlen; - if ((err = pkcs_1_v1_5_encode(tmpin, y, LTC_PKCS_1_EMSA, + if ((err = pkcs_1_v1_5_encode(tmpin, y, LTC_LTC_PKCS_1_EMSA, modulus_bitlen, NULL, 0, out, &x)) != CRYPT_OK) { XFREE(tmpin); @@ -127,7 +127,7 @@ int rsa_sign_hash_ex(const unsigned char *in, unsigned long inlen, return ltc_mp.rsa_me(out, x, out, outlen, PK_PRIVATE, key); } -#endif /* MRSA */ +#endif /* LTC_MRSA */ /* $Source$ */ /* $Revision$ */ diff --git a/src/pk/rsa/rsa_verify_hash.c b/src/pk/rsa/rsa_verify_hash.c index aec7135cb..fe836901c 100644 --- a/src/pk/rsa/rsa_verify_hash.c +++ b/src/pk/rsa/rsa_verify_hash.c @@ -6,24 +6,24 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" /** @file rsa_verify_hash.c - RSA PKCS #1 v1.5 or v2 PSS signature verification, Tom St Denis and Andreas Lange + RSA LTC_PKCS #1 v1.5 or v2 PSS signature verification, Tom St Denis and Andreas Lange */ -#ifdef MRSA +#ifdef LTC_MRSA /** - PKCS #1 de-sign then v1.5 or PSS depad + LTC_PKCS #1 de-sign then v1.5 or PSS depad @param sig The signature data @param siglen The length of the signature data (octets) @param hash The hash of the message that was signed @param hashlen The length of the hash of the message that was signed (octets) - @param padding Type of padding (LTC_PKCS_1_PSS or LTC_PKCS_1_V1_5) + @param padding Type of padding (LTC_LTC_PKCS_1_PSS or LTC_LTC_PKCS_1_V1_5) @param hash_idx The index of the desired hash @param saltlen The length of the salt used during signature @param stat [out] The result of the signature comparison, 1==valid, 0==invalid @@ -50,12 +50,12 @@ int rsa_verify_hash_ex(const unsigned char *sig, unsigned long siglen, /* valid padding? */ - if ((padding != LTC_PKCS_1_V1_5) && - (padding != LTC_PKCS_1_PSS)) { + if ((padding != LTC_LTC_PKCS_1_V1_5) && + (padding != LTC_LTC_PKCS_1_PSS)) { return CRYPT_PK_INVALID_PADDING; } - if (padding == LTC_PKCS_1_PSS) { + if (padding == LTC_LTC_PKCS_1_PSS) { /* valid hash ? */ if ((err = hash_is_valid(hash_idx)) != CRYPT_OK) { return err; @@ -90,11 +90,11 @@ int rsa_verify_hash_ex(const unsigned char *sig, unsigned long siglen, return CRYPT_INVALID_PACKET; } - if (padding == LTC_PKCS_1_PSS) { + if (padding == LTC_LTC_PKCS_1_PSS) { /* PSS decode and verify it */ err = pkcs_1_pss_decode(hash, hashlen, tmpbuf, x, saltlen, hash_idx, modulus_bitlen, stat); } else { - /* PKCS #1 v1.5 decode it */ + /* LTC_PKCS #1 v1.5 decode it */ unsigned char *out; unsigned long outlen, loid[16]; int decoded; @@ -114,7 +114,7 @@ int rsa_verify_hash_ex(const unsigned char *sig, unsigned long siglen, goto bail_2; } - if ((err = pkcs_1_v1_5_decode(tmpbuf, x, LTC_PKCS_1_EMSA, modulus_bitlen, out, &outlen, &decoded)) != CRYPT_OK) { + if ((err = pkcs_1_v1_5_decode(tmpbuf, x, LTC_LTC_PKCS_1_EMSA, modulus_bitlen, out, &outlen, &decoded)) != CRYPT_OK) { XFREE(out); goto bail_2; } @@ -160,7 +160,7 @@ int rsa_verify_hash_ex(const unsigned char *sig, unsigned long siglen, return err; } -#endif /* MRSA */ +#endif /* LTC_MRSA */ /* $Source$ */ /* $Revision$ */ diff --git a/src/prngs/fortuna.c b/src/prngs/fortuna.c index 61365b426..d262a0be2 100644 --- a/src/prngs/fortuna.c +++ b/src/prngs/fortuna.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" @@ -19,22 +19,22 @@ We deviate slightly here for reasons of simplicity [and to fit in the API]. First all "sources" in the AddEntropy function are fixed to 0. Second since no reliable timer is provided -we reseed automatically when len(pool0) >= 64 or every FORTUNA_WD calls to the read function */ +we reseed automatically when len(pool0) >= 64 or every LTC_FORTUNA_WD calls to the read function */ -#ifdef FORTUNA +#ifdef LTC_FORTUNA -/* requries SHA256 and AES */ -#if !(defined(RIJNDAEL) && defined(SHA256)) - #error FORTUNA requires SHA256 and RIJNDAEL (AES) +/* requries LTC_SHA256 and AES */ +#if !(defined(LTC_RIJNDAEL) && defined(LTC_SHA256)) + #error LTC_FORTUNA requires LTC_SHA256 and LTC_RIJNDAEL (AES) #endif -#ifndef FORTUNA_POOLS - #warning FORTUNA_POOLS was not previously defined (old headers?) - #define FORTUNA_POOLS 32 +#ifndef LTC_FORTUNA_POOLS + #warning LTC_FORTUNA_POOLS was not previously defined (old headers?) + #define LTC_FORTUNA_POOLS 32 #endif -#if FORTUNA_POOLS < 4 || FORTUNA_POOLS > 32 - #error FORTUNA_POOLS must be in [4..32] +#if LTC_FORTUNA_POOLS < 4 || LTC_FORTUNA_POOLS > 32 + #error LTC_FORTUNA_POOLS must be in [4..32] #endif const struct ltc_prng_descriptor fortuna_desc = { @@ -71,14 +71,14 @@ static int fortuna_reseed(prng_state *prng) ++prng->fortuna.reset_cnt; - /* new K == SHA256(K || s) where s == SHA256(P0) || SHA256(P1) ... */ + /* new K == LTC_SHA256(K || s) where s == LTC_SHA256(P0) || LTC_SHA256(P1) ... */ sha256_init(&md); if ((err = sha256_process(&md, prng->fortuna.K, 32)) != CRYPT_OK) { sha256_done(&md, tmp); return err; } - for (x = 0; x < FORTUNA_POOLS; x++) { + for (x = 0; x < LTC_FORTUNA_POOLS; x++) { if (x == 0 || ((prng->fortuna.reset_cnt >> (x-1)) & 1) == 0) { /* terminate this hash */ if ((err = sha256_done(&prng->fortuna.pool[x], tmp)) != CRYPT_OK) { @@ -135,7 +135,7 @@ int fortuna_start(prng_state *prng) LTC_ARGCHK(prng != NULL); /* initialize the pools */ - for (x = 0; x < FORTUNA_POOLS; x++) { + for (x = 0; x < LTC_FORTUNA_POOLS; x++) { if ((err = sha256_init(&prng->fortuna.pool[x])) != CRYPT_OK) { for (y = 0; y < x; y++) { sha256_done(&prng->fortuna.pool[y], tmp); @@ -149,7 +149,7 @@ int fortuna_start(prng_state *prng) /* reset bufs */ zeromem(prng->fortuna.K, 32); if ((err = rijndael_setup(prng->fortuna.K, 32, 0, &prng->fortuna.skey)) != CRYPT_OK) { - for (x = 0; x < FORTUNA_POOLS; x++) { + for (x = 0; x < LTC_FORTUNA_POOLS; x++) { sha256_done(&prng->fortuna.pool[x], tmp); } return err; @@ -198,7 +198,7 @@ int fortuna_add_entropy(const unsigned char *in, unsigned long inlen, prng_state if (prng->fortuna.pool_idx == 0) { prng->fortuna.pool0_len += inlen; } - if (++(prng->fortuna.pool_idx) == FORTUNA_POOLS) { + if (++(prng->fortuna.pool_idx) == LTC_FORTUNA_POOLS) { prng->fortuna.pool_idx = 0; } @@ -235,7 +235,7 @@ unsigned long fortuna_read(unsigned char *out, unsigned long outlen, prng_state LTC_MUTEX_LOCK(&prng->fortuna.prng_lock); /* do we have to reseed? */ - if (++prng->fortuna.wd == FORTUNA_WD || prng->fortuna.pool0_len >= 64) { + if (++prng->fortuna.wd == LTC_FORTUNA_WD || prng->fortuna.pool0_len >= 64) { if ((err = fortuna_reseed(prng)) != CRYPT_OK) { LTC_MUTEX_UNLOCK(&prng->fortuna.prng_lock); return 0; @@ -290,7 +290,7 @@ int fortuna_done(prng_state *prng) LTC_MUTEX_LOCK(&prng->fortuna.prng_lock); /* terminate all the hashes */ - for (x = 0; x < FORTUNA_POOLS; x++) { + for (x = 0; x < LTC_FORTUNA_POOLS; x++) { if ((err = sha256_done(&(prng->fortuna.pool[x]), tmp)) != CRYPT_OK) { LTC_MUTEX_UNLOCK(&prng->fortuna.prng_lock); return err; @@ -325,9 +325,9 @@ int fortuna_export(unsigned char *out, unsigned long *outlen, prng_state *prng) LTC_MUTEX_LOCK(&prng->fortuna.prng_lock); /* we'll write bytes for s&g's */ - if (*outlen < 32*FORTUNA_POOLS) { + if (*outlen < 32*LTC_FORTUNA_POOLS) { LTC_MUTEX_UNLOCK(&prng->fortuna.prng_lock); - *outlen = 32*FORTUNA_POOLS; + *outlen = 32*LTC_FORTUNA_POOLS; return CRYPT_BUFFER_OVERFLOW; } @@ -340,7 +340,7 @@ int fortuna_export(unsigned char *out, unsigned long *outlen, prng_state *prng) /* to emit the state we copy each pool, terminate it then hash it again so * an attacker who sees the state can't determine the current state of the PRNG */ - for (x = 0; x < FORTUNA_POOLS; x++) { + for (x = 0; x < LTC_FORTUNA_POOLS; x++) { /* copy the PRNG */ XMEMCPY(md, &(prng->fortuna.pool[x]), sizeof(*md)); @@ -360,7 +360,7 @@ int fortuna_export(unsigned char *out, unsigned long *outlen, prng_state *prng) goto LBL_ERR; } } - *outlen = 32*FORTUNA_POOLS; + *outlen = 32*LTC_FORTUNA_POOLS; err = CRYPT_OK; LBL_ERR: @@ -386,14 +386,14 @@ int fortuna_import(const unsigned char *in, unsigned long inlen, prng_state *prn LTC_ARGCHK(in != NULL); LTC_ARGCHK(prng != NULL); - if (inlen != 32*FORTUNA_POOLS) { + if (inlen != 32*LTC_FORTUNA_POOLS) { return CRYPT_INVALID_ARG; } if ((err = fortuna_start(prng)) != CRYPT_OK) { return err; } - for (x = 0; x < FORTUNA_POOLS; x++) { + for (x = 0; x < LTC_FORTUNA_POOLS; x++) { if ((err = fortuna_add_entropy(in+x*32, 32, prng)) != CRYPT_OK) { return err; } diff --git a/src/prngs/rc4.c b/src/prngs/rc4.c index 833622094..15c74e31d 100644 --- a/src/prngs/rc4.c +++ b/src/prngs/rc4.c @@ -6,16 +6,16 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" /** @file rc4.c - RC4 PRNG, Tom St Denis + LTC_RC4 PRNG, Tom St Denis */ -#ifdef RC4 +#ifdef LTC_RC4 const struct ltc_prng_descriptor rc4_desc = { @@ -93,7 +93,7 @@ int rc4_ready(prng_state *prng) XMEMCPY(key, s, 256); keylen = prng->rc4.x; - /* make RC4 perm and shuffle */ + /* make LTC_RC4 perm and shuffle */ for (x = 0; x < 256; x++) { s[x] = x; } @@ -250,7 +250,7 @@ int rc4_test(void) if (XMEMCMP(dst, tests[x].ct, 8)) { #if 0 int y; - printf("\n\nRC4 failed, I got:\n"); + printf("\n\nLTC_RC4 failed, I got:\n"); for (y = 0; y < 8; y++) printf("%02x ", dst[y]); printf("\n"); #endif diff --git a/src/prngs/rng_get_bytes.c b/src/prngs/rng_get_bytes.c index 9041e356e..b8cc6f560 100644 --- a/src/prngs/rng_get_bytes.c +++ b/src/prngs/rng_get_bytes.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" @@ -15,7 +15,7 @@ portable way to get secure random bits to feed a PRNG (Tom St Denis) */ -#ifdef DEVRANDOM +#ifdef LTC_DEVRANDOM /* on *NIX read /dev/random */ static unsigned long rng_nix(unsigned char *buf, unsigned long len, void (*callback)(void)) @@ -47,7 +47,7 @@ static unsigned long rng_nix(unsigned char *buf, unsigned long len, #endif /* LTC_NO_FILE */ } -#endif /* DEVRANDOM */ +#endif /* LTC_DEVRANDOM */ /* on ANSI C platforms with 100 < CLOCKS_PER_SEC < 10000 */ #if defined(CLOCKS_PER_SEC) && !defined(WINCE) @@ -131,7 +131,7 @@ unsigned long rng_get_bytes(unsigned char *out, unsigned long outlen, LTC_ARGCHK(out != NULL); -#if defined(DEVRANDOM) +#if defined(LTC_DEVRANDOM) x = rng_nix(out, outlen, callback); if (x != 0) { return x; } #endif #ifdef WIN32 diff --git a/src/prngs/rng_make_prng.c b/src/prngs/rng_make_prng.c index 7f1236062..6ba2cbeaa 100644 --- a/src/prngs/rng_make_prng.c +++ b/src/prngs/rng_make_prng.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" diff --git a/src/prngs/sober128.c b/src/prngs/sober128.c index 4bd8de284..9bc7727c9 100644 --- a/src/prngs/sober128.c +++ b/src/prngs/sober128.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" @@ -16,7 +16,7 @@ Based on s128fast.c reference code supplied by Greg Rose of QUALCOMM. */ -#ifdef SOBER128 +#ifdef LTC_SOBER128 #include "sober128tab.c" @@ -481,7 +481,7 @@ int sober128_test(void) sober128_done(&prng); if (XMEMCMP(dst, tests[x].out, tests[x].len)) { #if 0 - printf("\n\nSOBER128 failed, I got:\n"); + printf("\n\nLTC_SOBER128 failed, I got:\n"); for (y = 0; y < tests[x].len; y++) printf("%02x ", dst[y]); printf("\n"); #endif diff --git a/src/prngs/sprng.c b/src/prngs/sprng.c index 940af2785..d86b08113 100644 --- a/src/prngs/sprng.c +++ b/src/prngs/sprng.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" @@ -20,7 +20,7 @@ * in the various other functions. */ -#ifdef SPRNG +#ifdef LTC_SPRNG const struct ltc_prng_descriptor sprng_desc = { diff --git a/src/prngs/yarrow.c b/src/prngs/yarrow.c index b4854211f..c94671ffd 100644 --- a/src/prngs/yarrow.c +++ b/src/prngs/yarrow.c @@ -6,7 +6,7 @@ * The library is free for all purposes without any express * guarantee it works. * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + * Tom St Denis, tomstdenis@gmail.com, http://libtom.org */ #include "tomcrypt.h" @@ -15,7 +15,7 @@ Yarrow PRNG, Tom St Denis */ -#ifdef YARROW +#ifdef LTC_YARROW const struct ltc_prng_descriptor yarrow_desc = { @@ -42,77 +42,77 @@ int yarrow_start(prng_state *prng) LTC_ARGCHK(prng != NULL); /* these are the default hash/cipher combo used */ -#ifdef RIJNDAEL -#if YARROW_AES==0 +#ifdef LTC_RIJNDAEL +#if LTC_YARROW_AES==0 prng->yarrow.cipher = register_cipher(&rijndael_enc_desc); -#elif YARROW_AES==1 +#elif LTC_YARROW_AES==1 prng->yarrow.cipher = register_cipher(&aes_enc_desc); -#elif YARROW_AES==2 +#elif LTC_YARROW_AES==2 prng->yarrow.cipher = register_cipher(&rijndael_desc); -#elif YARROW_AES==3 +#elif LTC_YARROW_AES==3 prng->yarrow.cipher = register_cipher(&aes_desc); #endif -#elif defined(BLOWFISH) +#elif defined(LTC_BLOWFISH) prng->yarrow.cipher = register_cipher(&blowfish_desc); -#elif defined(TWOFISH) +#elif defined(LTC_TWOFISH) prng->yarrow.cipher = register_cipher(&twofish_desc); -#elif defined(RC6) +#elif defined(LTC_RC6) prng->yarrow.cipher = register_cipher(&rc6_desc); -#elif defined(RC5) +#elif defined(LTC_RC5) prng->yarrow.cipher = register_cipher(&rc5_desc); -#elif defined(SAFERP) +#elif defined(LTC_SAFERP) prng->yarrow.cipher = register_cipher(&saferp_desc); -#elif defined(RC2) +#elif defined(LTC_RC2) prng->yarrow.cipher = register_cipher(&rc2_desc); -#elif defined(NOEKEON) +#elif defined(LTC_NOEKEON) prng->yarrow.cipher = register_cipher(&noekeon_desc); -#elif defined(ANUBIS) +#elif defined(LTC_ANUBIS) prng->yarrow.cipher = register_cipher(&anubis_desc); -#elif defined(KSEED) +#elif defined(LTC_KSEED) prng->yarrow.cipher = register_cipher(&kseed_desc); -#elif defined(KHAZAD) +#elif defined(LTC_KHAZAD) prng->yarrow.cipher = register_cipher(&khazad_desc); -#elif defined(CAST5) +#elif defined(LTC_CAST5) prng->yarrow.cipher = register_cipher(&cast5_desc); -#elif defined(XTEA) +#elif defined(LTC_XTEA) prng->yarrow.cipher = register_cipher(&xtea_desc); -#elif defined(SAFER) +#elif defined(LTC_SAFER) prng->yarrow.cipher = register_cipher(&safer_sk128_desc); -#elif defined(DES) +#elif defined(LTC_DES) prng->yarrow.cipher = register_cipher(&des3_desc); #else - #error YARROW needs at least one CIPHER + #error LTC_YARROW needs at least one CIPHER #endif if ((err = cipher_is_valid(prng->yarrow.cipher)) != CRYPT_OK) { return err; } -#ifdef SHA256 +#ifdef LTC_SHA256 prng->yarrow.hash = register_hash(&sha256_desc); -#elif defined(SHA512) +#elif defined(LTC_SHA512) prng->yarrow.hash = register_hash(&sha512_desc); -#elif defined(TIGER) +#elif defined(LTC_TIGER) prng->yarrow.hash = register_hash(&tiger_desc); -#elif defined(SHA1) +#elif defined(LTC_SHA1) prng->yarrow.hash = register_hash(&sha1_desc); -#elif defined(RIPEMD320) +#elif defined(LTC_RIPEMD320) prng->yarrow.hash = register_hash(&rmd320_desc); -#elif defined(RIPEMD256) +#elif defined(LTC_RIPEMD256) prng->yarrow.hash = register_hash(&rmd256_desc); -#elif defined(RIPEMD160) +#elif defined(LTC_RIPEMD160) prng->yarrow.hash = register_hash(&rmd160_desc); -#elif defined(RIPEMD128) +#elif defined(LTC_RIPEMD128) prng->yarrow.hash = register_hash(&rmd128_desc); -#elif defined(MD5) +#elif defined(LTC_MD5) prng->yarrow.hash = register_hash(&md5_desc); -#elif defined(MD4) +#elif defined(LTC_MD4) prng->yarrow.hash = register_hash(&md4_desc); -#elif defined(MD2) +#elif defined(LTC_MD2) prng->yarrow.hash = register_hash(&md2_desc); -#elif defined(WHIRLPOOL) +#elif defined(LTC_WHIRLPOOL) prng->yarrow.hash = register_hash(&whirlpool_desc); #else - #error YARROW needs at least one HASH + #error LTC_YARROW needs at least one HASH #endif if ((err = hash_is_valid(prng->yarrow.hash)) != CRYPT_OK) { return err; diff --git a/testprof/der_tests.c b/testprof/der_tests.c index 002290227..2778d508c 100644 --- a/testprof/der_tests.c +++ b/testprof/der_tests.c @@ -1,5 +1,5 @@ #include -#if defined(GMP_DESC) || defined(USE_GMP) +#if defined(GMP_LTC_DESC) || defined(USE_GMP) #include #endif diff --git a/testprof/dsa_test.c b/testprof/dsa_test.c index 7d0f271fc..2398ba2d2 100644 --- a/testprof/dsa_test.c +++ b/testprof/dsa_test.c @@ -1,6 +1,6 @@ #include -#ifdef MDSA +#ifdef LTC_MDSA int dsa_test(void) { diff --git a/testprof/ecc_test.c b/testprof/ecc_test.c index 58d7c0723..d623af3b8 100644 --- a/testprof/ecc_test.c +++ b/testprof/ecc_test.c @@ -1,6 +1,6 @@ #include -#ifdef MECC +#ifdef LTC_MECC static int sizes[] = { #ifdef ECC112 diff --git a/testprof/katja_test.c b/testprof/katja_test.c index 47d01feb3..86fe6b099 100644 --- a/testprof/katja_test.c +++ b/testprof/katja_test.c @@ -13,7 +13,7 @@ int katja_test(void) 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"); + fprintf(stderr, "katja_test requires LTC_SHA1 and yarrow"); return 1; } diff --git a/testprof/mac_test.c b/testprof/mac_test.c index 908deca65..c09bb1d5e 100644 --- a/testprof/mac_test.c +++ b/testprof/mac_test.c @@ -18,19 +18,19 @@ int mac_test(void) #ifdef LTC_F9_MODE DO(f9_test()); #endif -#ifdef EAX_MODE +#ifdef LTC_EAX_MODE DO(eax_test()); #endif -#ifdef OCB_MODE +#ifdef LTC_OCB_MODE DO(ocb_test()); #endif -#ifdef CCM_MODE +#ifdef LTC_CCM_MODE DO(ccm_test()); #endif -#ifdef GCM_MODE +#ifdef LTC_GCM_MODE DO(gcm_test()); #endif -#ifdef PELICAN +#ifdef LTC_PELICAN DO(pelican_test()); #endif return 0; diff --git a/testprof/modes_test.c b/testprof/modes_test.c index 6d307c5f6..c1cd1c4d6 100644 --- a/testprof/modes_test.c +++ b/testprof/modes_test.c @@ -106,6 +106,10 @@ int modes_test(void) #ifdef LTC_CTR_MODE DO(ctr_test()); #endif + +#ifdef LTC_XTS_MODE + DO(xts_test()); +#endif return 0; } diff --git a/testprof/pkcs_1_test.c b/testprof/pkcs_1_test.c index 420fae009..6f59ce9ab 100644 --- a/testprof/pkcs_1_test.c +++ b/testprof/pkcs_1_test.c @@ -1,6 +1,6 @@ #include -#ifdef PKCS_1 +#ifdef LTC_PKCS_1 int pkcs_1_test(void) { @@ -33,7 +33,7 @@ int pkcs_1_test(void) /* pick a random saltlen 0..16 */ saltlen = abs(rand()) % 17; - /* PKCS #1 v2.0 supports modlens not multiple of 8 */ + /* LTC_PKCS #1 v2.0 supports modlens not multiple of 8 */ modlen = 800 + (abs(rand()) % 224); /* encode it */ diff --git a/testprof/rsa_test.c b/testprof/rsa_test.c index a47ec7d09..2d5c063e7 100644 --- a/testprof/rsa_test.c +++ b/testprof/rsa_test.c @@ -1,6 +1,6 @@ #include -#ifdef MRSA +#ifdef LTC_MRSA #define RSA_MSGSIZE 78 @@ -137,7 +137,7 @@ int rsa_test(void) hash_idx = find_hash("sha1"); prng_idx = find_prng("yarrow"); if (hash_idx == -1 || prng_idx == -1) { - fprintf(stderr, "rsa_test requires SHA1 and yarrow"); + fprintf(stderr, "rsa_test requires LTC_SHA1 and yarrow"); return 1; } @@ -257,14 +257,14 @@ for (cnt = 0; cnt < len; ) { } } - /* encrypt the key PKCS #1 v1.5 (payload from 1 to 117 bytes) */ + /* encrypt the key LTC_PKCS #1 v1.5 (payload from 1 to 117 bytes) */ for (rsa_msgsize = 1; rsa_msgsize <= 117; rsa_msgsize++) { len = sizeof(out); len2 = rsa_msgsize; - DO(rsa_encrypt_key_ex(in, rsa_msgsize, out, &len, NULL, 0, &yarrow_prng, prng_idx, 0, LTC_PKCS_1_V1_5, &key)); + DO(rsa_encrypt_key_ex(in, rsa_msgsize, out, &len, NULL, 0, &yarrow_prng, prng_idx, 0, LTC_LTC_PKCS_1_V1_5, &key)); len2 = rsa_msgsize; - DO(rsa_decrypt_key_ex(out, len, tmp, &len2, NULL, 0, 0, LTC_PKCS_1_V1_5, &stat, &key)); + DO(rsa_decrypt_key_ex(out, len, tmp, &len2, NULL, 0, 0, LTC_LTC_PKCS_1_V1_5, &stat, &key)); if (!(stat == 1 && stat2 == 0)) { fprintf(stderr, "rsa_decrypt_key_ex failed, %d, %d", stat, stat2); return 1; @@ -349,13 +349,13 @@ for (cnt = 0; cnt < len; ) { return 1; } - /* sign a message with PKCS #1 v1.5 */ + /* sign a message with LTC_PKCS #1 v1.5 */ len = sizeof(out); - DO(rsa_sign_hash_ex(in, 20, out, &len, LTC_PKCS_1_V1_5, &yarrow_prng, prng_idx, hash_idx, 8, &privKey)); - DO(rsa_verify_hash_ex(out, len, in, 20, LTC_PKCS_1_V1_5, hash_idx, 8, &stat, &pubKey)); + DO(rsa_sign_hash_ex(in, 20, out, &len, LTC_LTC_PKCS_1_V1_5, &yarrow_prng, prng_idx, hash_idx, 8, &privKey)); + DO(rsa_verify_hash_ex(out, len, in, 20, LTC_LTC_PKCS_1_V1_5, hash_idx, 8, &stat, &pubKey)); /* change a byte */ in[0] ^= 1; - DO(rsa_verify_hash_ex(out, len, in, 20, LTC_PKCS_1_V1_5, hash_idx, 8, &stat2, &pubKey)); + DO(rsa_verify_hash_ex(out, len, in, 20, LTC_LTC_PKCS_1_V1_5, hash_idx, 8, &stat2, &pubKey)); if (!(stat == 1 && stat2 == 0)) { fprintf(stderr, "rsa_verify_hash_ex failed, %d, %d", stat, stat2); diff --git a/testprof/x86_prof.c b/testprof/x86_prof.c index b9e95091c..a9a898598 100644 --- a/testprof/x86_prof.c +++ b/testprof/x86_prof.c @@ -124,105 +124,108 @@ void init_timer(void) void reg_algs(void) { int err; -#ifdef RIJNDAEL +#ifdef LTC_RIJNDAEL register_cipher (&aes_desc); #endif -#ifdef BLOWFISH +#ifdef LTC_BLOWFISH register_cipher (&blowfish_desc); #endif -#ifdef XTEA +#ifdef LTC_XTEA register_cipher (&xtea_desc); #endif -#ifdef RC5 +#ifdef LTC_RC5 register_cipher (&rc5_desc); #endif -#ifdef RC6 +#ifdef LTC_RC6 register_cipher (&rc6_desc); #endif -#ifdef SAFERP +#ifdef LTC_SAFERP register_cipher (&saferp_desc); #endif -#ifdef TWOFISH +#ifdef LTC_TWOFISH register_cipher (&twofish_desc); #endif -#ifdef SAFER +#ifdef LTC_SAFER register_cipher (&safer_k64_desc); register_cipher (&safer_sk64_desc); register_cipher (&safer_k128_desc); register_cipher (&safer_sk128_desc); #endif -#ifdef RC2 +#ifdef LTC_RC2 register_cipher (&rc2_desc); #endif -#ifdef DES +#ifdef LTC_DES register_cipher (&des_desc); register_cipher (&des3_desc); #endif -#ifdef CAST5 +#ifdef LTC_CAST5 register_cipher (&cast5_desc); #endif -#ifdef NOEKEON +#ifdef LTC_NOEKEON register_cipher (&noekeon_desc); #endif -#ifdef SKIPJACK +#ifdef LTC_SKIPJACK register_cipher (&skipjack_desc); #endif -#ifdef KHAZAD +#ifdef LTC_KHAZAD register_cipher (&khazad_desc); #endif -#ifdef ANUBIS +#ifdef LTC_ANUBIS register_cipher (&anubis_desc); #endif -#ifdef KSEED +#ifdef LTC_KSEED register_cipher (&kseed_desc); #endif #ifdef LTC_KASUMI register_cipher (&kasumi_desc); #endif +#ifdef LTC_MULTI2 + register_cipher (&multi2_desc); +#endif -#ifdef TIGER +#ifdef LTC_TIGER register_hash (&tiger_desc); #endif -#ifdef MD2 +#ifdef LTC_MD2 register_hash (&md2_desc); #endif -#ifdef MD4 +#ifdef LTC_MD4 register_hash (&md4_desc); #endif -#ifdef MD5 +#ifdef LTC_MD5 register_hash (&md5_desc); #endif -#ifdef SHA1 +#ifdef LTC_SHA1 register_hash (&sha1_desc); #endif -#ifdef SHA224 +#ifdef LTC_SHA224 register_hash (&sha224_desc); #endif -#ifdef SHA256 +#ifdef LTC_SHA256 register_hash (&sha256_desc); #endif -#ifdef SHA384 +#ifdef LTC_SHA384 register_hash (&sha384_desc); #endif -#ifdef SHA512 +#ifdef LTC_SHA512 register_hash (&sha512_desc); #endif -#ifdef RIPEMD128 +#ifdef LTC_RIPEMD128 register_hash (&rmd128_desc); #endif -#ifdef RIPEMD160 +#ifdef LTC_RIPEMD160 register_hash (&rmd160_desc); #endif -#ifdef RIPEMD256 +#ifdef LTC_RIPEMD256 register_hash (&rmd256_desc); #endif -#ifdef RIPEMD320 +#ifdef LTC_RIPEMD320 register_hash (&rmd320_desc); #endif -#ifdef WHIRLPOOL +#ifdef LTC_WHIRLPOOL register_hash (&whirlpool_desc); #endif -#ifdef CHC_HASH +#ifdef LTC_CHC_HASH register_hash(&chc_desc); if ((err = chc_register(register_cipher(&aes_desc))) != CRYPT_OK) { fprintf(stderr, "chc_register error: %s\n", error_to_string(err)); @@ -231,17 +234,17 @@ void reg_algs(void) #endif -#ifndef YARROW +#ifndef LTC_YARROW #error This demo requires Yarrow. #endif register_prng(&yarrow_desc); -#ifdef FORTUNA +#ifdef LTC_FORTUNA register_prng(&fortuna_desc); #endif -#ifdef RC4 +#ifdef LTC_RC4 register_prng(&rc4_desc); #endif -#ifdef SOBER128 +#ifdef LTC_SOBER128 register_prng(&sober128_desc); #endif @@ -759,7 +762,7 @@ void time_prng(void) } } -#ifdef MDSA +#ifdef LTC_MDSA /* time various DSA operations */ void time_dsa(void) { @@ -804,7 +807,7 @@ static const struct { #endif -#ifdef MRSA +#ifdef LTC_MRSA /* time various RSA operations */ void time_rsa(void) { @@ -998,7 +1001,7 @@ void time_katja(void) void time_katja(void) { fprintf(stderr, "NO Katja\n"); } #endif -#ifdef MECC +#ifdef LTC_MECC /* time various ECC operations */ void time_ecc(void) { @@ -1166,7 +1169,7 @@ void time_macs_(unsigned long MAC_SIZE) hash_idx = find_hash("sha1"); if (cipher_idx == -1 || hash_idx == -1) { - fprintf(stderr, "Warning the MAC tests requires AES and SHA1 to operate... so sorry\n"); + fprintf(stderr, "Warning the MAC tests requires AES and LTC_SHA1 to operate... so sorry\n"); return; } @@ -1186,7 +1189,7 @@ void time_macs_(unsigned long MAC_SIZE) t1 = t_read() - t1; if (t1 < t2) t2 = t1; } - fprintf(stderr, "OMAC-%s\t\t%9llu\n", cipher_descriptor[cipher_idx].name, t2/(ulong64)(MAC_SIZE*1024)); + fprintf(stderr, "LTC_OMAC-%s\t\t%9llu\n", cipher_descriptor[cipher_idx].name, t2/(ulong64)(MAC_SIZE*1024)); #endif #ifdef LTC_XCBC @@ -1237,7 +1240,7 @@ void time_macs_(unsigned long MAC_SIZE) fprintf(stderr, "PMAC-AES\t\t%9llu\n", t2/(ulong64)(MAC_SIZE*1024)); #endif -#ifdef PELICAN +#ifdef LTC_PELICAN t2 = -1; for (x = 0; x < 10000; x++) { t_start(); @@ -1250,7 +1253,7 @@ void time_macs_(unsigned long MAC_SIZE) t1 = t_read() - t1; if (t1 < t2) t2 = t1; } - fprintf(stderr, "PELICAN \t\t%9llu\n", t2/(ulong64)(MAC_SIZE*1024)); + fprintf(stderr, "LTC_PELICAN \t\t%9llu\n", t2/(ulong64)(MAC_SIZE*1024)); #endif #ifdef LTC_HMAC @@ -1266,7 +1269,7 @@ void time_macs_(unsigned long MAC_SIZE) t1 = t_read() - t1; if (t1 < t2) t2 = t1; } - fprintf(stderr, "HMAC-%s\t\t%9llu\n", hash_descriptor[hash_idx].name, t2/(ulong64)(MAC_SIZE*1024)); + fprintf(stderr, "LTC_HMAC-%s\t\t%9llu\n", hash_descriptor[hash_idx].name, t2/(ulong64)(MAC_SIZE*1024)); #endif XFREE(buf); @@ -1301,7 +1304,7 @@ void time_encmacs_(unsigned long MAC_SIZE) yarrow_read(key, 16, &yarrow_prng); yarrow_read(IV, 16, &yarrow_prng); -#ifdef EAX_MODE +#ifdef LTC_EAX_MODE t2 = -1; for (x = 0; x < 10000; x++) { t_start(); @@ -1317,7 +1320,7 @@ void time_encmacs_(unsigned long MAC_SIZE) fprintf(stderr, "EAX \t\t\t%9llu\n", t2/(ulong64)(MAC_SIZE*1024)); #endif -#ifdef OCB_MODE +#ifdef LTC_OCB_MODE t2 = -1; for (x = 0; x < 10000; x++) { t_start(); @@ -1333,7 +1336,7 @@ void time_encmacs_(unsigned long MAC_SIZE) fprintf(stderr, "OCB \t\t\t%9llu\n", t2/(ulong64)(MAC_SIZE*1024)); #endif -#ifdef CCM_MODE +#ifdef LTC_CCM_MODE t2 = -1; for (x = 0; x < 10000; x++) { t_start(); @@ -1365,7 +1368,7 @@ void time_encmacs_(unsigned long MAC_SIZE) cipher_descriptor[cipher_idx].done(&skey); #endif -#ifdef GCM_MODE +#ifdef LTC_GCM_MODE t2 = -1; for (x = 0; x < 100; x++) { t_start(); @@ -1382,7 +1385,7 @@ void time_encmacs_(unsigned long MAC_SIZE) { gcm_state gcm -#ifdef GCM_TABLES_SSE2 +#ifdef LTC_GCM_TABLES_SSE2 __attribute__ ((aligned (16))) #endif ;