From 3964a6523a4d4b2e441bc86fd17bcf9c29bf2b45 Mon Sep 17 00:00:00 2001 From: Tom St Denis <tomstdenis@gmail.com> Date: Thu, 9 Jun 2005 00:08:13 +0000 Subject: [PATCH] added libtomcrypt-1.03 --- Doxyfile | 2 +- TODO | 8 + build.sh | 20 + changes | 60 ++ crypt.tex | 521 +++++++++++++----- demos/encrypt.c | 4 + demos/hashsum.c | 4 + demos/multi.c | 4 + demos/small.c | 4 + demos/test.c | 27 +- demos/timing.c | 5 +- demos/tv_gen.c | 4 + doc/crypt.pdf | Bin 457121 -> 477606 bytes doc/footer.html | 6 + doc/header.html | 6 + genlist.sh | 4 + makefile | 92 +++- makefile.icc | 58 +- makefile.msvc | 51 +- makefile.shared | 88 ++- mess.sh | 4 + notes/etc/saferp_optimizer.c | 4 + notes/etc/whirlgen.c | 4 + notes/etc/whirltest.c | 4 + notes/tech0005.txt | 18 + parsenames.pl | 4 + run.sh | 35 ++ src/ciphers/aes/aes.c | 6 +- src/ciphers/aes/aes_tab.c | 4 + src/ciphers/anubis.c | 4 + src/ciphers/blowfish.c | 4 + src/ciphers/cast5.c | 4 + src/ciphers/des.c | 4 + src/ciphers/khazad.c | 4 + src/ciphers/noekeon.c | 4 + src/ciphers/rc2.c | 4 + src/ciphers/rc5.c | 4 + src/ciphers/rc6.c | 4 + src/ciphers/safer/safer.c | 4 + src/ciphers/safer/safer_tab.c | 4 + src/ciphers/safer/saferp.c | 4 + src/ciphers/skipjack.c | 4 + src/ciphers/twofish/twofish.c | 6 +- src/ciphers/twofish/twofish_tab.c | 4 + src/ciphers/xtea.c | 4 + src/encauth/ccm/ccm_memory.c | 5 +- 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 | 8 +- src/encauth/eax/eax_test.c | 4 + src/encauth/gcm/gcm_add_aad.c | 9 +- src/encauth/gcm/gcm_add_iv.c | 4 + src/encauth/gcm/gcm_done.c | 4 + src/encauth/gcm/gcm_gf_mult.c | 5 + src/encauth/gcm/gcm_init.c | 71 ++- src/encauth/gcm/gcm_memory.c | 4 + src/encauth/gcm/gcm_process.c | 4 + src/encauth/gcm/gcm_reset.c | 4 + src/encauth/gcm/gcm_test.c | 5 +- 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 | 4 + src/encauth/ocb/s_ocb_done.c | 4 + src/hashes/chc/chc.c | 4 + src/hashes/helper/hash_file.c | 4 + src/hashes/helper/hash_filehandle.c | 4 + src/hashes/helper/hash_memory.c | 4 + src/hashes/helper/hash_memory_multi.c | 4 + src/hashes/md2.c | 12 +- src/hashes/md4.c | 10 +- src/hashes/md5.c | 12 +- src/hashes/rmd128.c | 10 +- src/hashes/rmd160.c | 11 +- src/hashes/sha1.c | 11 +- src/hashes/sha2/sha224.c | 10 +- src/hashes/sha2/sha256.c | 12 +- src/hashes/sha2/sha384.c | 12 +- src/hashes/sha2/sha512.c | 12 +- src/hashes/tiger.c | 12 +- src/hashes/whirl/whirl.c | 10 +- src/hashes/whirl/whirltab.c | 4 + src/headers/ltc_tommath.h | 4 + src/headers/tomcrypt.h | 8 +- src/headers/tomcrypt_argchk.h | 4 + src/headers/tomcrypt_cfg.h | 4 + src/headers/tomcrypt_cipher.h | 17 +- src/headers/tomcrypt_custom.h | 54 +- src/headers/tomcrypt_hash.h | 43 +- src/headers/tomcrypt_mac.h | 4 + src/headers/tomcrypt_macros.h | 12 +- src/headers/tomcrypt_misc.h | 4 + src/headers/tomcrypt_pk.h | 133 ++++- src/headers/tomcrypt_pkcs.h | 32 +- src/headers/tomcrypt_prng.h | 4 + src/headers/tommath_class.h | 4 + src/headers/tommath_superclass.h | 10 +- src/mac/hmac/hmac_done.c | 4 + src/mac/hmac/hmac_file.c | 4 + src/mac/hmac/hmac_init.c | 4 + src/mac/hmac/hmac_memory.c | 4 + src/mac/hmac/hmac_memory_multi.c | 4 + src/mac/hmac/hmac_process.c | 4 + src/mac/hmac/hmac_test.c | 4 + src/mac/omac/omac_done.c | 4 + src/mac/omac/omac_file.c | 4 + src/mac/omac/omac_init.c | 6 +- src/mac/omac/omac_memory.c | 4 + src/mac/omac/omac_memory_multi.c | 4 + src/mac/omac/omac_process.c | 9 +- src/mac/omac/omac_test.c | 4 + src/mac/pelican/pelican.c | 16 + src/mac/pelican/pelican_memory.c | 4 + src/mac/pelican/pelican_test.c | 4 + src/mac/pmac/pmac_done.c | 4 + src/mac/pmac/pmac_file.c | 4 + src/mac/pmac/pmac_init.c | 4 + src/mac/pmac/pmac_memory.c | 4 + src/mac/pmac/pmac_memory_multi.c | 4 + src/mac/pmac/pmac_ntz.c | 4 + src/mac/pmac/pmac_process.c | 4 + src/mac/pmac/pmac_shift_xor.c | 4 + src/mac/pmac/pmac_test.c | 4 + src/misc/base64/base64_decode.c | 4 + src/misc/base64/base64_encode.c | 4 + src/misc/burn_stack.c | 4 + src/misc/crypt/crypt.c | 10 + src/misc/crypt/crypt_argchk.c | 4 + src/misc/crypt/crypt_cipher_descriptor.c | 4 + src/misc/crypt/crypt_cipher_is_valid.c | 4 + src/misc/crypt/crypt_find_cipher.c | 4 + src/misc/crypt/crypt_find_cipher_any.c | 4 + src/misc/crypt/crypt_find_cipher_id.c | 4 + src/misc/crypt/crypt_find_hash.c | 4 + src/misc/crypt/crypt_find_hash_any.c | 4 + src/misc/crypt/crypt_find_hash_id.c | 4 + src/misc/crypt/crypt_find_prng.c | 4 + src/misc/crypt/crypt_hash_descriptor.c | 4 + src/misc/crypt/crypt_hash_is_valid.c | 4 + src/misc/crypt/crypt_prng_descriptor.c | 4 + src/misc/crypt/crypt_prng_is_valid.c | 4 + src/misc/crypt/crypt_register_cipher.c | 4 + src/misc/crypt/crypt_register_hash.c | 4 + src/misc/crypt/crypt_register_prng.c | 4 + src/misc/crypt/crypt_unregister_cipher.c | 4 + src/misc/crypt/crypt_unregister_hash.c | 4 + src/misc/crypt/crypt_unregister_prng.c | 4 + src/misc/error_to_string.c | 4 + src/misc/mpi/is_prime.c | 4 + src/misc/mpi/mpi.c | 4 + src/misc/mpi/mpi_to_ltc_error.c | 4 + src/misc/mpi/rand_prime.c | 4 + src/misc/pkcs5/pkcs_5_1.c | 4 + src/misc/pkcs5/pkcs_5_2.c | 4 + src/misc/zeromem.c | 4 + src/modes/cbc/cbc_decrypt.c | 4 + src/modes/cbc/cbc_done.c | 4 + src/modes/cbc/cbc_encrypt.c | 4 + src/modes/cbc/cbc_getiv.c | 4 + src/modes/cbc/cbc_setiv.c | 4 + src/modes/cbc/cbc_start.c | 4 + src/modes/cfb/cfb_decrypt.c | 4 + src/modes/cfb/cfb_done.c | 4 + src/modes/cfb/cfb_encrypt.c | 4 + src/modes/cfb/cfb_getiv.c | 4 + src/modes/cfb/cfb_setiv.c | 4 + src/modes/cfb/cfb_start.c | 4 + src/modes/ctr/ctr_decrypt.c | 4 + src/modes/ctr/ctr_done.c | 4 + src/modes/ctr/ctr_encrypt.c | 6 +- src/modes/ctr/ctr_getiv.c | 4 + src/modes/ctr/ctr_setiv.c | 4 + src/modes/ctr/ctr_start.c | 20 +- src/modes/ecb/ecb_decrypt.c | 4 + src/modes/ecb/ecb_done.c | 6 +- src/modes/ecb/ecb_encrypt.c | 4 + src/modes/ecb/ecb_start.c | 4 + src/modes/ofb/ofb_decrypt.c | 4 + src/modes/ofb/ofb_done.c | 4 + src/modes/ofb/ofb_encrypt.c | 4 + src/modes/ofb/ofb_getiv.c | 4 + src/modes/ofb/ofb_setiv.c | 4 + src/modes/ofb/ofb_start.c | 4 + src/pk/asn1/der/bit/der_decode_bit_string.c | 101 ++++ src/pk/asn1/der/bit/der_encode_bit_string.c | 87 +++ src/pk/asn1/der/bit/der_length_bit_string.c | 54 ++ src/pk/asn1/der/der_get_multi_integer.c | 67 --- src/pk/asn1/der/der_put_multi_integer.c | 67 --- src/pk/asn1/der/ia5/der_decode_ia5_string.c | 95 ++++ src/pk/asn1/der/ia5/der_encode_ia5_string.c | 84 +++ src/pk/asn1/der/ia5/der_length_ia5_string.c | 194 +++++++ .../der/{ => integer}/der_decode_integer.c | 68 ++- .../der/{ => integer}/der_encode_integer.c | 87 +-- .../der/{ => integer}/der_length_integer.c | 36 +- .../der_decode_object_identifier.c | 99 ++++ .../der_encode_object_identifier.c | 103 ++++ .../der_length_object_identifier.c | 84 +++ .../asn1/der/octet/der_decode_octet_string.c | 90 +++ .../asn1/der/octet/der_encode_octet_string.c | 85 +++ .../asn1/der/octet/der_length_octet_string.c | 53 ++ .../der_decode_printable_string.c | 95 ++++ .../der_encode_printable_string.c | 84 +++ .../der_length_printable_string.c | 166 ++++++ .../asn1/der/sequence/der_decode_sequence.c | 215 ++++++++ .../der/sequence/der_decode_sequence_multi.c | 120 ++++ .../asn1/der/sequence/der_encode_sequence.c | 265 +++++++++ .../der/sequence/der_encode_sequence_multi.c | 121 ++++ .../asn1/der/sequence/der_length_sequence.c | 144 +++++ .../short_integer/der_decode_short_integer.c | 68 +++ .../short_integer/der_encode_short_integer.c | 97 ++++ .../short_integer/der_length_short_integer.c | 69 +++ src/pk/dh/dh.c | 4 + src/pk/dh/dh_sys.c | 4 + src/pk/dsa/dsa_export.c | 47 +- src/pk/dsa/dsa_free.c | 4 + src/pk/dsa/dsa_import.c | 68 ++- src/pk/dsa/dsa_make_key.c | 4 + src/pk/dsa/dsa_sign_hash.c | 97 ++-- src/pk/dsa/dsa_verify_hash.c | 128 +++-- src/pk/dsa/dsa_verify_key.c | 4 + src/pk/ecc/ecc.c | 385 ++++++------- src/pk/ecc/ecc_sys.c | 436 ++++++--------- src/pk/packet_store_header.c | 4 + src/pk/packet_valid_header.c | 4 + src/pk/pkcs1/pkcs_1_i2osp.c | 4 + src/pk/pkcs1/pkcs_1_mgf1.c | 4 + src/pk/pkcs1/pkcs_1_oaep_decode.c | 24 +- src/pk/pkcs1/pkcs_1_oaep_encode.c | 34 +- src/pk/pkcs1/pkcs_1_os2ip.c | 4 + src/pk/pkcs1/pkcs_1_pss_decode.c | 15 +- src/pk/pkcs1/pkcs_1_pss_encode.c | 30 +- src/pk/pkcs1/pkcs_1_v15_es_decode.c | 74 --- src/pk/pkcs1/pkcs_1_v15_es_encode.c | 69 --- src/pk/pkcs1/pkcs_1_v15_sa_decode.c | 91 --- src/pk/pkcs1/pkcs_1_v15_sa_encode.c | 84 --- src/pk/rsa/rsa_decrypt_key.c | 4 + src/pk/rsa/rsa_encrypt_key.c | 4 + src/pk/rsa/rsa_export.c | 64 +-- src/pk/rsa/rsa_exptmod.c | 4 + src/pk/rsa/rsa_free.c | 4 + src/pk/rsa/rsa_import.c | 76 +-- src/pk/rsa/rsa_make_key.c | 4 + src/pk/rsa/rsa_sign_hash.c | 4 + src/pk/rsa/rsa_v15_decrypt_key.c | 73 --- src/pk/rsa/rsa_v15_encrypt_key.c | 68 --- src/pk/rsa/rsa_v15_sign_hash.c | 66 --- src/pk/rsa/rsa_v15_verify_hash.c | 81 --- src/pk/rsa/rsa_verify_hash.c | 4 + src/prngs/fortuna.c | 4 + src/prngs/rc4.c | 4 + src/prngs/rng_get_bytes.c | 4 + src/prngs/rng_make_prng.c | 4 + src/prngs/sober128.c | 4 + src/prngs/sober128tab.c | 4 + src/prngs/sprng.c | 4 + src/prngs/yarrow.c | 5 + testbuild.sh | 11 + testme.sh | 52 ++ testprof/base64_test.c | 6 +- testprof/cipher_hash_test.c | 4 + testprof/der_tests.c | 236 ++++++-- testprof/dh_tests.c | 20 +- testprof/dsa_test.c | 15 +- testprof/ecc_test.c | 195 ++++--- testprof/mac_test.c | 4 + testprof/makefile.icc | 2 +- testprof/modes_test.c | 24 +- testprof/pkcs_1_test.c | 46 +- testprof/rsa_test.c | 210 ++++--- testprof/store_test.c | 40 +- testprof/test.c | 4 + testprof/test.key | 15 + testprof/tomcrypt_test.h | 4 + testprof/x86_prof.c | 110 ++-- 285 files changed, 5920 insertions(+), 2287 deletions(-) create mode 100644 build.sh create mode 100644 mess.sh create mode 100644 notes/tech0005.txt create mode 100644 run.sh create mode 100644 src/pk/asn1/der/bit/der_decode_bit_string.c create mode 100644 src/pk/asn1/der/bit/der_encode_bit_string.c create mode 100644 src/pk/asn1/der/bit/der_length_bit_string.c delete mode 100644 src/pk/asn1/der/der_get_multi_integer.c delete mode 100644 src/pk/asn1/der/der_put_multi_integer.c create mode 100644 src/pk/asn1/der/ia5/der_decode_ia5_string.c create mode 100644 src/pk/asn1/der/ia5/der_encode_ia5_string.c create mode 100644 src/pk/asn1/der/ia5/der_length_ia5_string.c rename src/pk/asn1/der/{ => integer}/der_decode_integer.c (54%) rename src/pk/asn1/der/{ => integer}/der_encode_integer.c (55%) rename src/pk/asn1/der/{ => integer}/der_length_integer.c (60%) create mode 100644 src/pk/asn1/der/object_identifier/der_decode_object_identifier.c create mode 100644 src/pk/asn1/der/object_identifier/der_encode_object_identifier.c create mode 100644 src/pk/asn1/der/object_identifier/der_length_object_identifier.c create mode 100644 src/pk/asn1/der/octet/der_decode_octet_string.c create mode 100644 src/pk/asn1/der/octet/der_encode_octet_string.c create mode 100644 src/pk/asn1/der/octet/der_length_octet_string.c create mode 100644 src/pk/asn1/der/printable_string/der_decode_printable_string.c create mode 100644 src/pk/asn1/der/printable_string/der_encode_printable_string.c create mode 100644 src/pk/asn1/der/printable_string/der_length_printable_string.c create mode 100644 src/pk/asn1/der/sequence/der_decode_sequence.c create mode 100644 src/pk/asn1/der/sequence/der_decode_sequence_multi.c create mode 100644 src/pk/asn1/der/sequence/der_encode_sequence.c create mode 100644 src/pk/asn1/der/sequence/der_encode_sequence_multi.c create mode 100644 src/pk/asn1/der/sequence/der_length_sequence.c create mode 100644 src/pk/asn1/der/short_integer/der_decode_short_integer.c create mode 100644 src/pk/asn1/der/short_integer/der_encode_short_integer.c create mode 100644 src/pk/asn1/der/short_integer/der_length_short_integer.c delete mode 100644 src/pk/pkcs1/pkcs_1_v15_es_decode.c delete mode 100644 src/pk/pkcs1/pkcs_1_v15_es_encode.c delete mode 100644 src/pk/pkcs1/pkcs_1_v15_sa_decode.c delete mode 100644 src/pk/pkcs1/pkcs_1_v15_sa_encode.c delete mode 100644 src/pk/rsa/rsa_v15_decrypt_key.c delete mode 100644 src/pk/rsa/rsa_v15_encrypt_key.c delete mode 100644 src/pk/rsa/rsa_v15_sign_hash.c delete mode 100644 src/pk/rsa/rsa_v15_verify_hash.c create mode 100644 testbuild.sh create mode 100644 testme.sh create mode 100644 testprof/test.key diff --git a/Doxyfile b/Doxyfile index d42b778..9e2eccc 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.02 +PROJECT_NUMBER = 1.03 # 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 8b13789..c93ef6f 100644 --- a/TODO +++ b/TODO @@ -1 +1,9 @@ +Things ideal for 1.04 + +- ASN.1 SET and UTCtime +- Start working towards making the bignum code plugable +- Add OID for ciphers and PRNGs to their descriptors +- Document the ASN.1 a bit more verbosely ;-) +- Some ASN.1 demo programs [for now read the source code!] +- Look into other ECC point muls and consider a "precomp" interface diff --git a/build.sh b/build.sh new file mode 100644 index 0000000..6867c2a --- /dev/null +++ b/build.sh @@ -0,0 +1,20 @@ +#!/bin/bash +echo "$1 ($2, $3)..." +make clean 1>/dev/null 2>/dev/null +echo -n "building..." +CFLAGS="$2 $CFLAGS" make -f $3 test tv_gen 1>gcc_1.txt 2>gcc_2.txt || (echo "build $1 failed see gcc_2.txt for more information" && cat gcc_2.txt && exit 1) +echo -n "testing..." +if [ -a test ] && [ -f test ] && [ -x test ]; then + ((./test >test_std.txt 2>test_err.txt && ./tv_gen > tv.txt) && echo "$1 test passed." && echo "y" > testok.txt) || (echo "$1 test failed" && cat test_err.txt && exit 1) + if find *_tv.txt -type f 1>/dev/null 2>/dev/null ; then + for f in *_tv.txt; do if (diff $f notes/$f) then true; else (echo "tv_gen $f failed" && rm -f testok.txt && exit 1); fi; done + fi +fi +if [ -a testok.txt ] && [ -f testok.txt ]; then + exit 0 +fi +exit 1 + +# $Source: /cvs/libtom/libtomcrypt/build.sh,v $ +# $Revision: 1.4 $ +# $Date: 2005/05/05 14:49:27 $ diff --git a/changes b/changes index 54480cf..5e56f67 100644 --- a/changes +++ b/changes @@ -1,3 +1,58 @@ +June 9th, 2005 +v1.03 + -- Users may want to note that on a P4/GCC3.4 platform "-fno-regmove" greatly accelerates the ciphers/hashes. + -------------------------------------------------------------------------------------------------------------- + -- Made it install the testing library in the icc/static makefiles + -- Found bug in ccm_memory.c which would fail to compile when LTC_CLEAN_STACK was enabled + -- Simon Johnson proposed I do a fully automated test suite. Hence "testme.sh" was born + -- Added LTC_NO_TEST which forces test vectors off (regardless of what tomcrypt_custom.h has) + -- Added LTC_NO_TABLES which disables large tables (where possible, regardless of what tomcrypt_custom.h has) + -- New test script found a bug in twofish.c when TABLES was disabled. Yeah testing! + -- Added a LTC_FAST specific test to the testing software. + -- Updated test driver to actually halt on errors and just print them out (useful for say... automated testing...) + -- Added bounds checking to Pelican MAC + -- Added BIT and OCTET STRING to the ASN.1 side of things. + -- Pekka Riikonen pointed out that my ctr_start() function should accept the counter mode. + -- Cleaned up warnings in testprof + -- Removed redundant mu and point mapping in ecc_verify_hash() so it should be a bit faster now + -- Pekka pointed out that the AES key structure was using 32 bytes more than it ought to. + -- Added quick defines to remove entire classes of algorithms. This makes it easier if you want to build with just + one algorithm (say AES or SHA-256). Defines are LTC_NO_CIPHERS, LTC_NO_MODES, LTC_NO_HASHES, LTC_NO_MACS, + LTC_NO_PRNGS, LTC_NO_PK, LTC_NO_PKCS + -- As part of the move for ECC to X9.62 I've changed the signature algorithm to EC DSA. No API changes. + -- Pekka helped me clean up the PKCS #1 v2.1 [OAEP/PSS] code + -- Wrote new DER SEQUENCE coder/decoder + -- RSA, DSA and ECDSA now use the DER SEQUENCE code (saves a lot of code!) + -- DSA output is now a DER SEQUENCE (so not compatible with previous releases). + -- Added Technote #5 which shows how to build LTC on an AMD64 to have a variety of algorithms in only ~80KB of code. + -- Changed temp variable in LOAD/STORE macros to "ulong32" for 32-bit ops. Makes it safer on Big endian platforms + -- Added INSTALL_GROUP and INSTALL_USER which you can specify on the build to override the default USER/GROUP the library + is to be installed as + -- Removed "testprof" from the default build. + -- Added IA5, NULL and Object Identifier to the list of ASN.1 DER supported types + -- The "no_oops" target (part of zipup) now scans for non-cvs files. This helps prevent temp/scratch files from appearing in releases ;-) + -- Added DERs for missing hashes, but just the OID not the PKCS #1 v1.5 additions. + -- Removed PKCS #1 v1.5 from the tree since it's taking up space and you ought to use v2.1 anyways + -- Kevin Kenny pointed out a few stray // comments + -- INTEGER code properly supports negatives and zero padding [Pekka!] + -- Sorted asn1/der/ directory ... less of a mess now ;-) + -- Added PRINTABLE STRING type + -- Removed ECC-160 as it wasn't a standard curve + -- Made ecc_shared_secret() ANSI X9.63 compliant + -- Changed "printf" to "fprintf(stderr, " in the testbench... ;-) + -- Optimized the GCM table creation. On 1KB packets [with key switching] the new GCM is 12.7x faster than before. + -- Changed OID representation for hashes to be just a list of unsigned longs (so you can compare against them nicely after decoding a sequence) + -- ECC code now uses Montgomery reduction ... it's even faster [ECC-256 make key down from 37.4M to 4.6M cycles on an Athlon64] + -- Added SHORT_INTEGER so users can easily store DER encoded INTEGER types without using the bignum math library + -- Fixed OMAC code so that with LTC_FAST it doesn't require that LTC_FAST_TYPE divides 16 [it has to divide the block size instead] + -- ECC key export is now a simple [and documented] SEQUENCE, the "encrypt_key" also uses a new SEQUENCE format. + -- Thanks goes to the following testers + Michael Brown - Solaris 10/uSPARCII + Richard Outerbridge - MacOS + Martin Carpenter - Solaris 8/uSPARCII [Thanks for cleaning up the scripts] + Greg Rose - ... SunOS 5.8/SPARC [... what's with the SPARCS?] + Matt Johnston - MacOS X [Thanks for pointing out GCC 4 problems with -Os] + April 19th, 2005 v1.02 -- Added LTC_TEST support to gcm_test() @@ -1243,3 +1298,8 @@ v0.02 -- Changed RC5 to only allow 12 to 24 rounds -- Added more to the manual. v0.01 -- We will call this the first version. + +/* $Source: /cvs/libtom/libtomcrypt/changes,v $ */ +/* $Revision: 1.92 $ */ +/* $Date: 2005/06/09 01:06:59 $ */ + diff --git a/crypt.tex b/crypt.tex index c785e83..9e17fe2 100644 --- a/crypt.tex +++ b/crypt.tex @@ -47,7 +47,7 @@ \def\gap{\vspace{0.5ex}} \makeindex \begin{document} -\title{LibTomCrypt \\ Version 1.02} +\title{LibTomCrypt \\ Version 1.03} \author{Tom St Denis \\ \\ tomstdenis@gmail.com \\ @@ -57,7 +57,7 @@ http://libtomcrypt.org This text and source code library are both hereby placed in the public domain. This book has been formatted for A4 paper using the \LaTeX{} {\em book} macro package. -\vspace{10cm} +\vspace{15cm} \begin{flushright}Open Source. Open Academia. Open Minds. @@ -771,13 +771,19 @@ other modes. \index{OFB Mode} \index{CFB Mode} The library provides simple support routines for handling CBC, CTR, CFB, OFB and ECB encoded messages. Assuming the mode you want is XXX there is a structure called ``symmetric\_XXX'' that will contain the information required to -use that mode. They have identical setup routines (except ECB mode for obvious reasons): +use that mode. They have identical setup routines (except CTR and ECB mode): \index{ecb\_start()} \index{cfb\_start()} \index{cbc\_start()} \index{ofb\_start()} \index{ctr\_start()} \begin{verbatim} int XXX_start(int cipher, const unsigned char *IV, const unsigned char *key, int keylen, int num_rounds, symmetric_XXX *XXX); +int ctr_start( int cipher, + const unsigned char *IV, + const unsigned char *key, int keylen, + int num_rounds, int ctr_mode, + symmetric_CTR *ctr); + int ecb_start(int cipher, const unsigned char *key, int keylen, int num_rounds, symmetric_ECB *ecb); \end{verbatim} @@ -789,7 +795,12 @@ of the cipher you choose. It is important that the IV be random for each uniqu parameters ``key'', ``keylen'' and ``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. -Both routines return {\bf CRYPT\_OK} if the cipher initialized correctly, otherwise they return an error code. + +In the case of CTR mode there is an additional parameter ``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. + +The routines return {\bf CRYPT\_OK} if the cipher initialized correctly, otherwise they return an error code. \subsection{Encryption and Decryption} To actually encrypt or decrypt the following routines are provided: @@ -867,6 +878,7 @@ int main(void) key, /* the secret key */ 16, /* length of secret key (16 bytes, 128 bits) */ 0, /* 0 == default # of rounds */ + CTR_COUNTER_LITTLE_ENDIAN, /* Little endian counter */ &ctr) /* where to store initialized CTR state */ ) != CRYPT_OK) { printf("ctr_start error: %s\n", error_to_string(err)); @@ -1349,7 +1361,7 @@ int send_packet(const unsigned char *pt, unsigned long ptlen, } /* process the plaintext */ - if ((err = gcm_add_process(gcm, pt, ptlen, pt, GCM_ENCRYPT)) != CRYPT_OK) { + if ((err = gcm_process(gcm, pt, ptlen, pt, GCM_ENCRYPT)) != CRYPT_OK) { return err; } @@ -1359,6 +1371,8 @@ int send_packet(const unsigned char *pt, unsigned long ptlen, return err; } + /* ... send a header describing the lengths ... */ + /* depending on the protocol and how IV is generated you may have to send it too... */ send(socket, iv, ivlen, 0); @@ -2452,8 +2466,8 @@ int main(void) \section{Introduction} RSA wrote the PKCS \#1 specifications which detail RSA Public Key Cryptography. In the specifications are -padding algorithms for encryption and signatures. The standard includes ``v1.5'' and ``v2.0'' algorithms. -To simplify matters a little the v2.0 encryption and signature padding algorithms are called OAEP and PSS +padding algorithms for encryption and signatures. The standard includes the ``v2.1'' algorithms. +To simplify matters a little the v2.1 encryption and signature padding algorithms are called OAEP and PSS respectively. \section{PKCS \#1 Encryption} @@ -2509,33 +2523,6 @@ If the function succeeds it decodes the OAEP encoded message into ``out'' of len $1$ in ``res''. If the packet is invalid it stores $0$ in ``res'' and if the function fails for another reason it returns an error code. -\subsection{PKCS \#1 v1.5 Encoding} - -\index{pkcs\_1\_v15\_es\_encode()} -\begin{verbatim} -int pkcs_1_v15_es_encode(const unsigned char *msg, unsigned long msglen, - unsigned long modulus_bitlen, - prng_state *prng, int prng_idx, - unsigned char *out, unsigned long *outlen); -\end{verbatim} - -This will PKCS v1.5 encode the data in ``msg'' of length ``msglen''. Pass the length (in bits) of your -RSA modulus in ``modulus\_bitlen''. The encoded data will be stored in ``out'' of length ``outlen''. - -\subsection{PKCS \#1 v1.5 Decoding} -\index{pkcs\_1\_v15\_es\_decode()} -\begin{verbatim} -int pkcs_1_v15_es_decode(const unsigned char *msg, unsigned long msglen, - unsigned long modulus_bitlen, - unsigned char *out, unsigned long outlen, - int *res); -\end{verbatim} - -This will PKCS v1.5 decode the message in ``msg'' of length ``msglen''. It will store the output in ``out''. Note -that the length of the output ``outlen'' is a constant. This decoder cannot determine the original message -length. If the data in ``msg'' is a valid packet then a $1$ is stored in ``res'', otherwise a $0$ is -stored. - \section{PKCS \#1 Digital Signatures} \subsection{PSS Encoding} @@ -2577,34 +2564,6 @@ it is set to zero. The rest of the parameters are as in the PSS encode call. It's important to use the same ``saltlen'' and hash for both encoding and decoding as otherwise the procedure will not work. -\subsection{PKCS \#1 v1.5 Encoding} - -\index{pkcs\_1\_v15\_sa\_encode()} -\begin{verbatim} -int pkcs_1_v15_sa_encode(const unsigned char *msghash, unsigned long msghashlen, - int hash_idx, unsigned long modulus_bitlen, - unsigned char *out, unsigned long *outlen); -\end{verbatim} - -This will PKCS \#1 v1.5 signature encode the message hash ``msghash'' of length ``msghashlen''. You have -to tell this routine which hash produced the message hash in ``hash\_idx''. The encoded hash is stored -in ``out'' of length ``outlen''. - -\subsection{PKCS \#1 v1.5 Decoding} - -\index{pkcs\_1\_v15\_sa\_decode()} -\begin{verbatim} -int pkcs_1_v15_sa_decode(const unsigned char *msghash, unsigned long msghashlen, - const unsigned char *sig, unsigned long siglen, - int hash_idx, unsigned long modulus_bitlen, - int *res); -\end{verbatim} - -This will PKCS \#1 v1.5 signature decode the data in ``sig'' of length ``siglen'' and compare the extracted -hash against ``msghash'' of length ``msghashlen''. You have to tell this routine which hash produced the -message digest in ``hash\_idx''. If the packet is valid and the hashes match ``res'' is set to $1$. Otherwise, -it is set to $0$. - \section{RSA Operations} \subsection{Background} @@ -2698,15 +2657,14 @@ to pkcs\_1\_oaep\_encode(). int rsa_decrypt_key(const unsigned char *in, unsigned long inlen, unsigned char *out, unsigned long *outlen, const unsigned char *lparam, unsigned long lparamlen, - prng_state *prng, int prng_idx, - int hash_idx, int *res, + int hash_idx, int *stat, rsa_key *key); \end{verbatim} This function will RSA decrypt ``in'' of length ``inlen'' then OAEP depad the resulting data and store it in ``out'' of length ``outlen''. The ``lparam'' and ``lparamlen'' are the same parameters you would pass to pkcs\_1\_oaep\_decode(). -If the RSA decrypted data isn't a valid OAEP packet then ``res'' is set to $0$. Otherwise, it is set to $1$. +If the RSA decrypted data isn't a valid OAEP packet then ``stat'' is set to $0$. Otherwise, it is set to $1$. \subsection{RSA Hash Signatures} Similar to RSA key encryption RSA is also used to ``digitally sign'' message digests (hashes). To facilitate this @@ -2729,7 +2687,6 @@ the output is stored in ``out'' of length ``outlen''. \begin{verbatim} int rsa_verify_hash(const unsigned char *sig, unsigned long siglen, const unsigned char *msghash, unsigned long msghashlen, - prng_state *prng, int prng_idx, int hash_idx, unsigned long saltlen, int *stat, rsa_key *key); \end{verbatim} @@ -2799,8 +2756,6 @@ int main(void) &l2, /* plaintext length */ "TestApp", /* lparam for this program */ 7, /* lparam is 7 bytes long */ - NULL, /* PRNG state */ - prng_idx, /* prng idx */ hash_idx, /* hash idx */ &res, /* validity of data */ &key) /* our RSA key */ @@ -3060,6 +3015,34 @@ provided are very close to $p$ that is $\vert \vert \phi(\beta) \vert \vert \app range in order from $\approx 2^{192}$ points to $\approx 2^{521}$. According to the source document any key size greater than or equal to 256-bits is sufficient for long term security. +\section{Key Format} +LibTomCrypt uses it's own format for ECC public and private keys. While ANSI X9.62 partially specifies key formats (it covers public keys) it does it in a less +than ideally simple manner. In the case of LibTomCrypt it is meant \textbf{solely} for NIST $GF(p)$ curves. The format of the keys is as follows: + +\begin{small} +\begin{verbatim} +ECCPublicKey ::= SEQUENCE { + flags BIT STRING(2), -- public/private flag (always zero), + -- compressed point + keySize INTEGER, -- Curve size (in bits) divided by eight + -- and rounded down, e.g. 521 => 65 + pubkey.x INTEGER, -- The X co-ordinate of the public key point +} + +ECCPrivateKey ::= SEQUENCE { + flags BIT STRING(2), -- public/private flag (always one), + -- compressed point + keySize INTEGER, -- Curve size (in bits) divided by eight + -- and rounded down, e.g. 521 => 65 + pubkey.x INTEGER, -- The X co-ordinate of the public key point + secret.k INTEGER, -- The secret key scalar +} +\end{verbatim} +\end{small} + +The first flags bit denotes whether the key is public (zero) or private (one). The compressed point bit is equal to zero if $(x^3 - 3x + b)^{(p+1)/4} \mbox{ mod }p$ is +congruent to the keys $y$ co-ordinate. The bit is one if the $y$ co-ordinate is the negative of the computed square root. + \section{Core Functions} Like the DH routines there is a key structure ``ecc\_key'' used by the functions. There is a function to make a key: @@ -3129,11 +3112,23 @@ int ecc_decrypt_key(const unsigned char *in, unsigned long inlen, ecc_key *key); \end{verbatim} -Where ``in'' is an input symmetric key of no more than 32 bytes. Essentially these routines created a random public key +Where ``in'' is an input symmetric key of no more than 64 bytes. Essentially these routines created a random public key and find the hash of the shared secret. The message digest is than XOR'ed against the symmetric key. All of the required data is placed in ``out'' by ``ecc\_encrypt\_key()''. The hash chosen must produce a message digest at least as large as the symmetric key you are trying to share. +\subsection{Encrypt Packet Format} + +The packet format for the encrypted keys is the following ASN.1 SEQUENCE: + +\begin{verbatim} +ECCEncrypt ::= SEQUENCE { + hashID OBJECT IDENTIFIER, -- OID of hash used + pubkey OCTET STRING , -- Encapsulated ECCPublicKey (see above) + skey OCTET STRING -- xor of plaintext and "hash of shared secret" +} +\end{verbatim} + There are also functions to sign and verify the hash of a message. \index{ecc\_sign\_hash()} \index{ecc\_verify\_hash()} \begin{verbatim} @@ -3150,6 +3145,8 @@ The ``ecc\_sign\_hash'' function signs the message hash in ``in'' of length ``in The ``ecc\_verify\_hash'' function verifies the ECC signature in ``sig'' against the hash in ``hash''. It sets ``stat'' to non-zero if the signature passes or zero if it fails. +\subsection{Signature Format} +The signature code is an implementation of X9.62 EC-DSA and the output is comformant for GF(p) curves. \section{ECC Keysizes} With ECC if you try and sign a hash that is bigger than your ECC key you can run into problems. The math will still work @@ -3170,6 +3167,38 @@ would require at least 256 bytes where as the DSA signature would require only a The API for the DSA is essentially the same as the other PK algorithms. Except in the case of DSA no encryption or decryption routines are provided. +\section{Key Format} +Since no useful public standard for DSA key storage was presented to me during the course of this development I made my own ASN.1 SEQUENCE which I document +now so that others can interoperate with this library. + +\begin{verbatim} +DSAPublicKey ::= SEQUENCE { + publicFlags BIT STRING(1), -- must be 0 + g INTEGER , -- base generator, check that g^q mod p == 1 + -- and that 1 < g < p - 1 + p INTEGER , -- prime modulus + q INTEGER , -- order of sub-group (must be prime) + y INTEGER , -- public key, specifically, g^x mod p, + -- check that y^q mod p == 1 + -- and that 1 < y < p - 1 +} + +DSAPrivateKey ::= SEQUENCE { + publicFlags BIT STRING(1), -- must be 1 + g INTEGER , -- base generator, check that g^q mod p == 1 + -- and that 1 < g < p - 1 + p INTEGER , -- prime modulus + q INTEGER , -- order of sub-group (must be prime) + y INTEGER , -- public key, specifically, g^x mod p, + -- check that y^q mod p == 1 + -- and that 1 < y < p - 1 + x INTEGER -- private key +} +\end{verbatim} + +The leading BIT STRING has a single bit in it which is zero for public keys and one for private keys. This makes the structure uniquely decodable and easy +to work with. + \section{Key Generation} To make a DSA key you must call the following function \begin{verbatim} @@ -3291,79 +3320,289 @@ This will import the DSA key from the buffer ``in'' of length ``inlen'' to the ` will automatically free all of the heap allocated in the process (you don't have to call dsa\_free()). \chapter{Standards Support} -\section{DER Support} -DER or ``Distinguished Encoding Rules'' is a subset of the ASN.1 encoding rules that is fully deterministic and -ideal for cryptography. In particular ASN.1 specifies an INTEGER type for storing arbitrary sized integers. DER -further limits the ASN.1 specifications to a deterministic encoding. +\section{ASN.1 Formats} +LibTomCrypt supports a variety of ASN.1 data types encoded with the Distinguished Encoding Rules (DER) suitable for various cryptographic protocols. The data types +are all provided with three basic functions with \textit{similar} prototypes. One function has been dedicated to calculate the length in octets of a given +format and two functions have been dedicated to encoding and decoding the format. -\subsection{Storing INTEGER types} -\index{der\_encode\_integer()} -\begin{alltt} -int der_encode_integer(mp_int *num, unsigned char *out, unsigned long *outlen); -\end{alltt} +On top of the basic data types are the SEQUENCE and\footnote{Planned for LTC 1.04} SET data types which are collections of other ASN.1 types. They are provided +in the same manner as the other data types except they use list of objects known as the \textbf{ltc\_asn1\_list} structure. It is defined as -This will store the integer in ``num'' to the output buffer ``out'' of length ``outlen''. It only stores -non--negative numbers. It stores the number of octets used back in ``outlen''. +\index{ltc\_asn1\_list structure} +\begin{verbatim} +typedef struct { + int type; + void *data; + unsigned long size; +} ltc_asn1_list; +\end{verbatim} -\subsection{Reading INTEGER types} -\index{der\_decode\_integer()} -\begin{alltt} -int der_decode_integer(const unsigned char *in, unsigned long *inlen, mp_int *num); -\end{alltt} -This will decode the DER encoded INTEGER in ``in'' of length ``inlen'' and store the resulting integer -in ``num''. It will store the bytes read in ``inlen'' which is handy if you have to parse multiple -data items out of a binary packet. +The ``type'' field is one of the following ASN.1 field definitions. The ``data'' pointer is a void pointer to the data to be encoded (or the destination) and the +``size'' field is specific to what you are encoding (e.g. number of bits in the BIT STRING data type). To help build the lists in an orderly fashion the macro +``LTC\_SET\_ASN1(list, index, Type, Data, Size)'' has been provided. -\subsection{INTEGER length} -\index{der\_length\_integer()} -\begin{alltt} -int der_length_integer(mp_int *num, unsigned long *len); -\end{alltt} -This will determine the length of the DER encoding of the integer ``num'' and store it in ``len''. +It will assign to the ``index''th position in the ``list'' the tripplet (Type, Data, Size). An example usage would be: -\subsection{Multiple INTEGER types} -To simplify the DER encoding/decoding there are two functions two handle multple types at once. +\begin{small} +\begin{verbatim} +... +ltc_asn1_list sequence[3]; +unsigned long three=3; -\index{der\_put\_multi\_integer()} -\index{der\_get\_multi\_integer()} -\begin{alltt} -int der_put_multi_integer(unsigned char *dst, unsigned long *outlen, mp_int *num, ...); -int der_get_multi_integer(const unsigned char *src, unsigned long *inlen, mp_int *num, ...); -\end{alltt} +LTC_SET_ASN1(sequence, 0, LTC_ASN1_IA5_STRING, "hello", 5); +LTC_SET_ASN1(sequence, 1, LTC_ASN1_SHORT_INTEGER, &three, 1); +LTC_SET_ASN1(sequence, 2, LTC_ASN1_NULL, NULL, 0); +\end{verbatim} +\end{small} -These will handle multiple encodings/decodings at once. They work like their single operand counterparts -except they handle a \textbf{NULL} terminated list of operands. +The macro is relatively safe with respect to modifying variables, for instance the following code is equivalent. + +\begin{small} +\begin{verbatim} +... +ltc_asn1_list sequence[3]; +unsigned long three=3; +int x=0; +LTC_SET_ASN1(sequence, x++, LTC_ASN1_IA5_STRING, "hello", 5); +LTC_SET_ASN1(sequence, x++, LTC_ASN1_SHORT_INTEGER, &three, 1); +LTC_SET_ASN1(sequence, x++, LTC_ASN1_NULL, NULL, 0); +\end{verbatim} +\end{small} + +\begin{figure}[here] +\begin{center} +\begin{small} +\begin{tabular}{|l|l|} +\hline \textbf{Definition} & \textbf{ASN.1 Type} \\ +\hline LTC\_ASN1\_EOL & End of a ASN.1 list structure. \\ +\hline LTC\_ASN1\_INTEGER & INTEGER (uses mp\_int) \\ +\hline LTC\_ASN1\_SHORT\_INTEGER & INTEGER (32--bit using unsigned long) \\ +\hline LTC\_ASN1\_BIT\_STRING & BIT STRING (one bit per char) \\ +\hline LTC\_ASN1\_OCTET\_STRING & OCTET STRING (one octet per char) \\ +\hline LTC\_ASN1\_NULL & NULL \\ +\hline LTC\_ASN1\_OBJECT\_IDENTIFIER & OBJECT IDENTIFIER (words are in unsigned long) \\ +\hline LTC\_ASN1\_IA5\_STRING & IA5 STRING (one octet per char) \\ +\hline LTC\_ASN1\_PRINTABLE\_STRING & PRINTABLE STIRNG (one octet per char) \\ +\hline LTC\_ASN1\_SEQUENCE & SEQUENCE OF \\ +\hline +\end{tabular} +\caption{List of ASN.1 Supported Types} +\end{small} +\end{center} +\end{figure} + +\subsection{SEQUENCE Type} +The SEQUENCE data type is a collection of other ASN.1 data types encapsulated with a small header which is a useful way of sending multiple data types in one packet. + +\subsubsection{SEUQNECE Encoding} +To encode a sequence a \textbf{ltc\_asn1\_list} array must be initialized with the members of the sequence and their respective pointers. The encoding is performed +with the following function. + +\index{der\_encode\_sequence()} +\begin{verbatim} +int der_encode_sequence(ltc_asn1_list *list, unsigned long inlen, + unsigned char *out, unsigned long *outlen); +\end{verbatim} +This encodes a sequence of items pointed to by ``list'' where the list has ``inlen'' items in it. The SEQUENCE will be encoded to ``out'' and of length ``outlen''. The +function will terminate when it reads all the items out of the list (upto ``inlen'') or it encounters an item in the list with a type of \textbf{LTC\_ASN1\_EOL}. + +The ``data'' pointer in the list would be the same pointer you would pass to the respective ASN.1 encoder (e.g. der\_encode\_bit\_string()) and it is simply passed on +verbatim to the dependent encoder. The list can contain other SEQUENCE or SET types which enables you to have nested SEQUENCE and SET definitions. In these cases +the ``data'' pointer is simply a pointer to another \textbf{ltc\_asn1\_list}. + +\subsubsection{SEQUENCE Decoding} + +\index{der\_decode\_sequence()} + +Decoding a SEQUENCE is similar to encoding. You set up an array of \textbf{ltc\_asn1\_list} where in this case the ``size'' member is the maximum size +(in certain cases). For types such as IA5 STRING, BIT STRING, OCTET STRING (etc) the ``size'' field is updated after successful decoding to reflect how many +units of the respective type has been loaded. \begin{verbatim} -#include <tomcrypt.h> -int main(void) -{ - mp_int a, b, c, d; - unsigned char buffer[1000]; - unsigned long len; - int err; - - /* init a,b,c,d with some values ... */ - - /* ok we want to store them now... */ - len = sizeof(buffer); - if ((err = der_put_multi_integer(buffer, &len, - &a, &b, &c, &d, NULL)) != CRYPT_OK) { - // error - } - printf("I stored %lu bytes in buf\n", len); - - /* ok say we want to get them back for fun */ - /* len set previously...otherwise set it to the size of the packet */ - if ((err = der_get_multi_integer(buffer, &len, - &a, &b, &c, &d, NULL)) != CRYPT_OK) { - // error - } - printf("I read %lu bytes from buf\n", len); -} +int der_decode_sequence(const unsigned char *in, unsigned long inlen, + ltc_asn1_list *list, unsigned long outlen); \end{verbatim} + +This will decode upto ``outlen'' items from the input buffer ``in'' of length ``inlen'' octets. The function will stop (gracefully) when it runs out of items to decode. +It will fail (for among other reasons) when it runs out of input bytes to read, a data type is invalid or a heap failure occured. + +For the following types the ``size'' field will be updated to reflect the number of units read of the given type. +\begin{enumerate} + \item BIT STRING + \item OCTET STRING + \item OBJECT IDENTIFIER + \item IA5 STRING + \item PRINTABLE STRING +\end{enumerate} + +\subsubsection{SEQUENCE Length} + +The length of a SEQUENCE can be determined with the following function. + +\index{der\_length\_sequence()} +\begin{verbatim} +int der_length_sequence(ltc_asn1_list *list, unsigned long inlen, + unsigned long *outlen); +\end{verbatim} + +This will get the encoding size for the given ``list'' of length ``inlen'' and store it in ``outlen''. + +\subsubsection{SEQUENCE Multiple Argument Lists} + +For small or simple sequences an encoding or decoding can be performed with one of the following two functions. + +\index{der\_encode\_sequence\_multi()} +\index{der\_decode\_sequence\_multi()} + +\begin{verbatim} +int der_encode_sequence_multi(unsigned char *out, unsigned long *outlen, ...); +int der_decode_sequence_multi(const unsigned char *in, unsigned long inlen, ...); +\end{verbatim} + +These either encode or decode (respectively) a SEQUENCE data type where the items in the sequence are specified after the length parameter. + +The list of items are specified as a triple of the form ``(type, size, data)'' where ``type'' is an \textbf{int}, ``size'' is a \textbf{unsigned long} +and ``data'' is \textbf{void} pointer. The list of items must be terminated with an item with the type \textbf{LTC\_ASN1\_EOL}. + +It's ideal that you cast the ``size'' values to unsigned long to ensure that the proper data type is passed to the function. Constants such as ``1'' without +a cast or prototype are of type \textbf{int} by default. Appending \textit{UL} or prepending \textit{(unsigned long)} is enough to cast it to the correct type. + +\subsubsection{ASN.1 INTEGER} + +To encode or decode INTEGER data types use the following functions. + +\index{der\_encode\_integer()} +\index{der\_decode\_integer()} +\index{der\_length\_integer()} +\begin{verbatim} +int der_encode_integer(mp_int *num, unsigned char *out, unsigned long *outlen); +int der_decode_integer(const unsigned char *in, unsigned long inlen, mp_int *num); +int der_length_integer(mp_int *num, unsigned long *len); +\end{verbatim} + +These will encode or decode a signed INTEGER data type using the ``mp\_int'' data type to store the large INTEGER. To encode smaller values without allocating +an mp\_int to store the value the ``short'' INTEGER functions were made available. + +\index{der\_encode\_short\_integer()} +\index{der\_decode\_short\_integer()} +\index{der\_length\_short\_integer()} +\begin{verbatim} +int der_encode_short_integer(unsigned long num, + unsigned char *out, unsigned long *outlen); + +int der_decode_short_integer(const unsigned char *in, unsigned long inlen, + unsigned long *num); + +int der_length_short_integer(unsigned long num, unsigned long *outlen); +\end{verbatim} + +These will encode or decode an unsigned \textbf{unsigned long} type (only reads upto 32--bits). For values in the range $0 \dots 2^{32} - 1$ the integer +and short integer functions can encode and decode each others outputs. + +\subsubsection{ASN.1 BIT STRING} + +\index{der\_encode\_bit\_string()} +\index{der\_decode\_bit\_string()} +\index{der\_length\_bit\_string()} +\begin{verbatim} +int der_encode_bit_string(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen); + +int der_decode_bit_string(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen); + +int der_length_bit_string(unsigned long nbits, unsigned long *outlen); +\end{verbatim} + +These will encode or decode a BIT STRING data type. The bits are passed in (or read out) using one \textbf{char} per bit. A non--zero value will be interpretted +as a one bit and a zero value a zero bit. + +\subsubsection{ASN.1 OCTET STRING} + +\index{der\_encode\_octet\_string()} +\index{der\_decode\_octet\_string()} +\index{der\_length\_octet\_string()} +\begin{verbatim} +int der_encode_octet_string(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen); + +int der_decode_octet_string(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen); + +int der_length_octet_string(unsigned long noctets, unsigned long *outlen); +\end{verbatim} + +These will encode or decode an OCTET STRING data type. The octets are stored using one \textbf{char} each. + +\subsubsection{ASN.1 OBJECT IDENTIFIER} + +\index{der\_encode\_object\_identifier()} +\index{der\_decode\_object\_identifier()} +\index{der\_length\_object\_identifier()} +\begin{verbatim} +int der_encode_object_identifier(unsigned long *words, unsigned long nwords, + unsigned char *out, unsigned long *outlen); + +int der_decode_object_identifier(const unsigned char *in, unsigned long inlen, + unsigned long *words, unsigned long *outlen); + +int der_length_object_identifier(unsigned long *words, unsigned long nwords, + unsigned long *outlen); +\end{verbatim} + +These will encode or decode an OBJECT IDENTIFIER object. The words of the OID are stored in individual \textbf{unsigned long} elements and must be in the range +$0 \ldots 2^{32} - 1$. + +\subsubsection{ASN.1 IA5 STRING} + +\index{der\_encode\_ia5\_string()} +\index{der\_decode\_ia5\_string()} +\index{der\_length\_ia5\_string()} +\begin{verbatim} +int der_encode_ia5_string(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen); + +int der_decode_ia5_string(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen); + +int der_length_ia5_string(const unsigned char *octets, unsigned long noctets, + unsigned long *outlen); +\end{verbatim} + +These will encode or decode an IA5 STRING. The characters are read or stored in individual \textbf{char} elements. This functions performs internal character +to numerical conversions based on the conventions of the compiler being used. For instance, on an x86\_32 machine 'A' == 65 but the same may not be true on +say a SPARC machine. Internally these functions have a table of literal characters and their numerical ASCII values. This provides a stable conversion provided +that the build platform honours the runtime platforms character conventions. + +If you're worried try building the test suite and running it. It has hard coded test vectors to ensure it is operating properly. + +\subsubsection{ASN.1 PRINTABLE STRING} + +\index{der\_encode\_printable\_string()} +\index{der\_decode\_printable\_string()} +\index{der\_length\_printable\_string()} +\begin{verbatim} +int der_encode_printable_string(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen); + +int der_decode_printable_string(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen); + +int der_length_printable_string(const unsigned char *octets, unsigned long noctets, + unsigned long *outlen); +\end{verbatim} + +These will encode or decode an PRINTABLE STRING. The characters are read or stored in individual \textbf{char} elements. This functions performs internal character +to numerical conversions based on the conventions of the compiler being used. For instance, on an x86\_32 machine 'A' == 65 but the same may not be true on +say a SPARC machine. Internally these functions have a table of literal characters and their numerical ASCII values. This provides a stable conversion provided +that the build platform honours the runtime platforms character conventions. + +If you're worried try building the test suite and running it. It has hard coded test vectors to ensure it is operating properly. + + \section{Password Based Cryptography} \subsection{PKCS \#5} +\index{PKCS \#5} In order to securely handle user passwords for the purposes of creating session keys and chaining IVs the PKCS \#5 was drafted. PKCS \#5 is made up of two algorithms, Algorithm One and Algorithm Two. Algorithm One is the older fairly limited algorithm which has been implemented for completeness. Algorithm Two is a bit more modern and more flexible to work with. @@ -3436,7 +3675,6 @@ int main(void) \} \end{alltt} - \chapter{Miscellaneous} \section{Base64 Encoding and Decoding} The library provides functions to encode and decode a RFC1521 base64 coding scheme. This means that it can decode what it @@ -4030,8 +4268,8 @@ To initialize a cipher (for ECB mode) the function setup() was provided. It acc can specify the number of rounds they want through ``num\_rounds'' where $num\_rounds = 0$ means use the default. The destination of a scheduled key is stored in ``skey''. -This is where things get tricky. Currently there is no provision to allocate memory during initialization since there is no ``cipher done'' function. So you have -to either use an existing member of the symmetric\_key union or alias your own structure over top of it provided symmetric\_key is not smaller. +Inside the ``symmetric\_key'' union there is a ``void *data'' which you can use to allocate data if you need a data structure that doesn't fit with the existing +ones provided. Just make sure in your ``done()'' function that you free the allocated memory. \subsection{Single block ECB} To process a single block in ECB mode the ecb\_encrypt() and ecb\_decrypt() functions were provided. The plaintext and ciphertext buffers are allowed to overlap so you @@ -4062,7 +4300,8 @@ updated by the function before returning. \subsubsection{Accelerated CTR} This function is meant for accelerated CTR encryption. It is accessible through the accel\_ctr\_encrypt pointer. The ``blocks'' value is the number of complete blocks to process. The ``IV'' is the CTR counter vector. It is an input upon calling this function and must be -updated by the function before returning. The ``mode'' value indicates whether the counter is big ($mode = 1$) or little ($mode = 0$) endian. +updated by the function before returning. The ``mode'' value indicates whether the counter is big (mode = CTR\_COUNTER\_BIG\_ENDIAN) or +little (mode = CTR\_COUNTER\_LITTLE\_ENDIAN) endian. This function (and the way it's called) differs from the other two since ctr\_encrypt() allows any size input plaintext. The accelerator will only be called if the following conditions are met. @@ -4101,10 +4340,10 @@ struct ltc_hash_descriptor { unsigned long hashsize; /** Input block size in octets */ unsigned long blocksize; - /** ASN.1 DER identifier */ - unsigned char DER[64]; + /** ASN.1 OID */ + unsigned long OID[16]; /** Length of DER encoding */ - unsigned long DERlen; + unsigned long OIDlen; /** Init a hash state @param hash The hash to initialize @return CRYPT_OK if successful @@ -4144,8 +4383,8 @@ The ``hashsize'' variable indicates the length of the output in octets. The `blocksize'' variable indicates the length of input (in octets) that the hash processes in a given invokation. -\subsection{DER Identifier} -This is the DER identifier (including the SEQUENCE header). This is used solely for PKCS \#1 style signatures. +\subsection{OID Identifier} +This is the universal ASN.1 Object Identifier for the hash. \subsection{Initialization} The init function initializes the hash and prepares it to process message bytes. @@ -4251,3 +4490,7 @@ but should at least maintain the same level of state entropy. \input{crypt.ind} \end{document} + +% $Source: /cvs/libtom/libtomcrypt/crypt.tex,v $ +% $Revision: 1.32 $ +% $Date: 2005/06/09 00:36:17 $ diff --git a/demos/encrypt.c b/demos/encrypt.c index 67627f7..1f4d746 100644 --- a/demos/encrypt.c +++ b/demos/encrypt.c @@ -235,3 +235,7 @@ int main(int argc, char *argv[]) } return 0; } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/demos/hashsum.c b/demos/hashsum.c index 23946cc..4e9b0fb 100644 --- a/demos/hashsum.c +++ b/demos/hashsum.c @@ -113,3 +113,7 @@ void register_algs(void) #endif } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/demos/multi.c b/demos/multi.c index fdc8dc6..33d17a2 100644 --- a/demos/multi.c +++ b/demos/multi.c @@ -104,3 +104,7 @@ int main(void) return EXIT_SUCCESS; } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/demos/small.c b/demos/small.c index bc9793b..f320424 100644 --- a/demos/small.c +++ b/demos/small.c @@ -8,3 +8,7 @@ int main(void) register_hash(&sha256_desc); return 0; } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/demos/test.c b/demos/test.c index 290861d..b1e3966 100644 --- a/demos/test.c +++ b/demos/test.c @@ -2,18 +2,23 @@ int main(void) { + int x; reg_algs(); printf("build == \n%s\n", crypt_build_settings); - printf("\ncipher_test..."); fflush(stdout); printf(cipher_hash_test() ? "failed" : "passed"); - printf("\nmodes_test..."); fflush(stdout); printf(modes_test() ? "failed" : "passed"); - printf("\nmac_test..."); fflush(stdout); printf(mac_test() ? "failed" : "passed"); - printf("\npkcs_1_test..."); fflush(stdout); printf(pkcs_1_test() ? "failed" : "passed"); - printf("\nstore_test..."); fflush(stdout); printf(store_test() ? "failed" : "passed"); - printf("\nrsa_test..."); fflush(stdout); printf(rsa_test() ? "failed" : "passed"); - printf("\necc_test..."); fflush(stdout); printf(ecc_tests() ? "failed" : "passed"); - printf("\ndsa_test..."); fflush(stdout); printf(dsa_test() ? "failed" : "passed"); - printf("\ndh_test..."); fflush(stdout); printf(dh_tests() ? "failed" : "passed"); - printf("\nder_test..."); fflush(stdout); printf(der_tests() ? "failed" : "passed"); - + printf("\nstore_test...."); fflush(stdout); x = store_test(); printf(x ? "failed" : "passed");if (x) exit(EXIT_FAILURE); + printf("\ncipher_test..."); fflush(stdout); x = cipher_hash_test(); printf(x ? "failed" : "passed");if (x) exit(EXIT_FAILURE); + printf("\nmodes_test...."); fflush(stdout); x = modes_test(); printf(x ? "failed" : "passed");if (x) exit(EXIT_FAILURE); + printf("\nmac_test......"); fflush(stdout); x = mac_test(); printf(x ? "failed" : "passed");if (x) exit(EXIT_FAILURE); + printf("\nder_test......"); fflush(stdout); x = der_tests(); printf(x ? "failed" : "passed");if (x) exit(EXIT_FAILURE); + printf("\npkcs_1_test..."); fflush(stdout); x = pkcs_1_test(); printf(x ? "failed" : "passed");if (x) exit(EXIT_FAILURE); + printf("\nrsa_test......"); fflush(stdout); x = rsa_test(); printf(x ? "failed" : "passed");if (x) exit(EXIT_FAILURE); + printf("\necc_test......"); fflush(stdout); x = ecc_tests(); printf(x ? "failed" : "passed");if (x) exit(EXIT_FAILURE); + printf("\ndsa_test......"); fflush(stdout); x = dsa_test(); printf(x ? "failed" : "passed");if (x) exit(EXIT_FAILURE); + printf("\ndh_test......."); fflush(stdout); x = dh_tests(); printf(x ? "failed" : "passed");if (x) exit(EXIT_FAILURE); + printf("\n"); return EXIT_SUCCESS; } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/demos/timing.c b/demos/timing.c index 54c0462..444d08d 100644 --- a/demos/timing.c +++ b/demos/timing.c @@ -17,7 +17,10 @@ time_sqr(); time_rsa(); time_ecc(); time_dh(); - return EXIT_SUCCESS; } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/demos/tv_gen.c b/demos/tv_gen.c index c37d1af..e8ef4e5 100644 --- a/demos/tv_gen.c +++ b/demos/tv_gen.c @@ -664,3 +664,7 @@ int main(void) + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/doc/crypt.pdf b/doc/crypt.pdf index 9eb60c6cbab9ccb3269caec6440559309afe833b..a50ea929e45e2daca85c5d84b4a1eb7ceb06f354 100644 GIT binary patch delta 252222 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�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≶3}jES7`G?LA&7_29bH_*6PBx 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­t%cM6X(#=~ ze-vmw6XQGs%0&W00y4&F(KrufAr*C2D!hf^RT%UK6GB^!cM+VJU<JJ1CTa|gNnTpu z_osdT*Q&q|`n|mKD0sbr;y;iOn#H^mfgz!b4#b2P0}#>)H_>qC$w0FrjE(oG$MGLL zav)q;<HDfb4k}dd|K0-PzJo7}CL#!!0KgGNpvi*Z1?aGnX@sf<h{2P1iD8Uz2Mz*4 z=bCpO@Eg}|>}cb(X!Qf}4azA5{{cf5YA#?%INLb!Ul1{xW+8kKnpeP&7zv?R9Phx7 z;Xg1I*q>JuxK#q&$~%TLMDG$nKtcx|r$zhGxb@Lv%z?xCrxgC{tq?!PTkzv11Y)!u z1F}HV2NjSBI0qSn${&3_g405*z~kTFg<%kV<pZggNk%WKKtMtV9;Zbi7X)u2@Pxs? zNP7(bLBu44U?4{G0aU1j+cgjnIy?l8;Wm<Y45vk#mJ|-OV+dIcW}*v&#zYu~w{p<H z#e@zGa&kaGLY4)7BYo=;`;YH25Tp1HF2JGn#j6R<5IygZpa~s#3KVRpFz~qIp9Z($ zDE<S6giCs02<MY`VVoEZ!4%jK^lk$95uzjTgDipa<3NNX48kKY#H_#&jtMU@Fa!|C zI|lE^SZG;JfmQ+$&ckgTPK(=r%>2NRK@f%w{YfMrK(h!s$-E1LfY6CR#-PJM*iQV! z{*zHh_8;)a|LNy4*=Vo;0SOTfr$y^McuhrkT?7KcOjJN72ZAB*AWlp$D}K3#njaXV zzJR|rMZpHVpM(s<y9WODa?~+F|8eu<ZvapU;dvsOw*gfU&M}T4&{q7&dkJ)5s0w+I zHg12YwOIt9$bwbSJ%)F0Xpq8R5)m#u+4yTtL}SPrXzLb#lfyydHw`XO(S9zxB!MW! z%MdpfT3q1o4A6iCkBgwJL21W*>o5L;O=t5!W3UW<n}K>iyhni4fiMI_gW^9x0fdKK jFb3ZBmv&<)*L@J1hCh}L8pPB^@CGnVNLAI)+DPbs_m%UZ delta 232377 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%0AM4jAUe$<h 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 Xi`WQfVIOTMIOXv1AY%vjf3*GwLc<^H diff --git a/doc/footer.html b/doc/footer.html index fe5338c..a1895ac 100644 --- a/doc/footer.html +++ b/doc/footer.html @@ -2,3 +2,9 @@ Code by <a href="http://www.libtomcrypt.org/">Tom</a><br> Docs using <img src="doxygen.png" alt="doxygen" align="middle" border=0> <a href="http://jlcooke.ca/tom/hidden_image.png"> + +<!-- +/* $Source: /cvs/libtom/libtomcrypt/doc/footer.html,v $ */ +/* $Revision: 1.3 $ */ +/* $Date: 2005/05/07 10:09:20 $ */ +--> diff --git a/doc/header.html b/doc/header.html index 426d4e3..231475d 100644 --- a/doc/header.html +++ b/doc/header.html @@ -4,3 +4,9 @@ <link href="doxygen.css" rel="stylesheet" type="text/css"> </head><body> <!-- Generated by Doxygen 1.3.8 --> + +<!-- +/* $Source: /cvs/libtom/libtomcrypt/doc/header.html,v $ */ +/* $Revision: 1.3 $ */ +/* $Date: 2005/05/07 10:09:20 $ */ +--> diff --git a/genlist.sh b/genlist.sh index 73daa1d..832e8e7 100644 --- a/genlist.sh +++ b/genlist.sh @@ -4,3 +4,7 @@ export a=`echo -n "src/ciphers/aes/aes_enc.o *(MPIOBJECT) " ; find . -type f | s perl ./parsenames.pl OBJECTS "$a" export a=`find . -type f | grep [.]/src | grep [.]h | sed -e 'se\./ee' | xargs` perl ./parsenames.pl HEADERS "$a" + +# $Source: /cvs/libtom/libtomcrypt/genlist.sh,v $ +# $Revision: 1.3 $ +# $Date: 2005/05/05 14:49:27 $ diff --git a/makefile b/makefile index b38aa17..d3681f2 100644 --- a/makefile +++ b/makefile @@ -4,7 +4,7 @@ # Modified by Clay Culver # The version -VERSION=1.02 +VERSION=1.03 # Compiler and Linker Names #CC=gcc @@ -21,6 +21,8 @@ CFLAGS += -c -I./testprof/ -I./src/headers/ -Wall -Wsign-compare -W -Wshadow -Wn #CFLAGS += -Wsystem-headers -Wdeclaration-after-statement -Wbad-function-cast -Wcast-align -Wstrict-prototypes -Wmissing-prototypes \ # -Wmissing-declarations -Wpointer-arith +ifndef IGNORE_SPEED + # optimize for SPEED CFLAGS += -O3 -funroll-loops @@ -30,6 +32,8 @@ CFLAGS += -fomit-frame-pointer # optimize for SIZE #CFLAGS += -Os -DLTC_SMALL_CODE +endif + # older GCCs can't handle the "rotate with immediate" ROLc/RORc/etc macros # define this to help #CFLAGS += -DLTC_NO_ROLC @@ -58,13 +62,24 @@ INCPATH=/usr/include DATAPATH=/usr/share/doc/libtomcrypt/pdf #Who do we install as? +ifdef INSTALL_USER +USER=$(INSTALL_USER) +else USER=root +endif + +ifdef INSTALL_GROUP +GROUP=$(INSTALL_GROUP) +else GROUP=wheel +endif #List of objects to compile. #Leave MPI built-in or force developer to link against libtommath? +ifndef IGNORE_MPI MPIOBJECT=src/misc/mpi/mpi.o +endif OBJECTS=src/ciphers/aes/aes_enc.o $(MPIOBJECT) src/ciphers/aes/aes.o src/ciphers/anubis.o \ src/ciphers/blowfish.o src/ciphers/cast5.o src/ciphers/des.o src/ciphers/khazad.o src/ciphers/noekeon.o \ @@ -115,29 +130,40 @@ src/modes/ctr/ctr_getiv.o src/modes/ctr/ctr_setiv.o src/modes/ctr/ctr_start.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/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/der_decode_integer.o src/pk/asn1/der/der_encode_integer.o \ -src/pk/asn1/der/der_get_multi_integer.o src/pk/asn1/der/der_length_integer.o \ -src/pk/asn1/der/der_put_multi_integer.o src/pk/dh/dh.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_sign_hash.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/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 \ +src/pk/asn1/der/octet/der_decode_octet_string.o src/pk/asn1/der/octet/der_encode_octet_string.o \ +src/pk/asn1/der/octet/der_length_octet_string.o \ +src/pk/asn1/der/printable_string/der_decode_printable_string.o \ +src/pk/asn1/der/printable_string/der_encode_printable_string.o \ +src/pk/asn1/der/printable_string/der_length_printable_string.o \ +src/pk/asn1/der/sequence/der_decode_sequence.o src/pk/asn1/der/sequence/der_decode_sequence_multi.o \ +src/pk/asn1/der/sequence/der_encode_sequence.o src/pk/asn1/der/sequence/der_encode_sequence_multi.o \ +src/pk/asn1/der/sequence/der_length_sequence.o \ +src/pk/asn1/der/short_integer/der_decode_short_integer.o \ +src/pk/asn1/der/short_integer/der_encode_short_integer.o \ +src/pk/asn1/der/short_integer/der_length_short_integer.o src/pk/dh/dh.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_sign_hash.o \ src/pk/dsa/dsa_verify_hash.o src/pk/dsa/dsa_verify_key.o src/pk/ecc/ecc.o src/pk/packet_store_header.o \ src/pk/packet_valid_header.o src/pk/pkcs1/pkcs_1_i2osp.o src/pk/pkcs1/pkcs_1_mgf1.o \ src/pk/pkcs1/pkcs_1_oaep_decode.o src/pk/pkcs1/pkcs_1_oaep_encode.o src/pk/pkcs1/pkcs_1_os2ip.o \ -src/pk/pkcs1/pkcs_1_pss_decode.o src/pk/pkcs1/pkcs_1_pss_encode.o src/pk/pkcs1/pkcs_1_v15_es_decode.o \ -src/pk/pkcs1/pkcs_1_v15_es_encode.o src/pk/pkcs1/pkcs_1_v15_sa_decode.o \ -src/pk/pkcs1/pkcs_1_v15_sa_encode.o src/pk/rsa/rsa_decrypt_key.o src/pk/rsa/rsa_encrypt_key.o \ -src/pk/rsa/rsa_export.o src/pk/rsa/rsa_exptmod.o src/pk/rsa/rsa_free.o src/pk/rsa/rsa_import.o \ -src/pk/rsa/rsa_make_key.o src/pk/rsa/rsa_sign_hash.o src/pk/rsa/rsa_v15_decrypt_key.o \ -src/pk/rsa/rsa_v15_encrypt_key.o src/pk/rsa/rsa_v15_sign_hash.o src/pk/rsa/rsa_v15_verify_hash.o \ +src/pk/pkcs1/pkcs_1_pss_decode.o src/pk/pkcs1/pkcs_1_pss_encode.o src/pk/rsa/rsa_decrypt_key.o \ +src/pk/rsa/rsa_encrypt_key.o src/pk/rsa/rsa_export.o src/pk/rsa/rsa_exptmod.o src/pk/rsa/rsa_free.o \ +src/pk/rsa/rsa_import.o src/pk/rsa/rsa_make_key.o src/pk/rsa/rsa_sign_hash.o \ src/pk/rsa/rsa_verify_hash.o src/prngs/fortuna.o src/prngs/rc4.o src/prngs/rng_get_bytes.o \ src/prngs/rng_make_prng.o src/prngs/sober128.o src/prngs/sprng.o src/prngs/yarrow.o -HEADERS=src/headers/tommath_superclass.h src/headers/tomcrypt_cfg.h \ -src/headers/tomcrypt_mac.h src/headers/tomcrypt_macros.h \ -src/headers/tomcrypt_custom.h src/headers/tomcrypt_argchk.h \ -src/headers/tomcrypt_cipher.h src/headers/tomcrypt_pk.h \ -src/headers/tommath_class.h src/headers/ltc_tommath.h src/headers/tomcrypt_hash.h \ -src/headers/tomcrypt_misc.h src/headers/tomcrypt.h src/headers/tomcrypt_pkcs.h \ -src/headers/tomcrypt_prng.h testprof/tomcrypt_test.h +HEADERS=src/headers/tommath_superclass.h src/headers/tomcrypt_cfg.h src/headers/tomcrypt_mac.h \ +src/headers/tomcrypt_macros.h src/headers/tomcrypt_custom.h src/headers/tomcrypt_argchk.h \ +src/headers/tomcrypt_cipher.h src/headers/tomcrypt_pk.h src/headers/tommath_class.h \ +src/headers/ltc_tommath.h src/headers/tomcrypt_hash.h src/headers/tomcrypt_misc.h \ +src/headers/tomcrypt.h src/headers/tomcrypt_pkcs.h src/headers/tomcrypt_prng.h testprof/tomcrypt_test.h TESTOBJECTS=demos/test.o HASHOBJECTS=demos/hashsum.o @@ -171,7 +197,7 @@ src/hashes/sha2/sha512.o: src/hashes/sha2/sha512.c src/hashes/sha2/sha384.c src/hashes/sha2/sha256.o: src/hashes/sha2/sha256.c src/hashes/sha2/sha224.c #This rule makes the libtomcrypt library. -library: $(LIBTEST) $(LIBNAME) +library: $(LIBNAME) $(LIBTEST): cd testprof ; CFLAGS="$(CFLAGS)" make @@ -193,15 +219,15 @@ small: library $(SMALLOBJECTS) $(CC) $(SMALLOBJECTS) $(LIBNAME) -o $(SMALL) $(WARN) tv_gen: library $(TVS) - $(CC) $(TVS) $(LIBNAME) $(EXTRALIBS) -o $(TV) + $(CC) $(TVS) $(LIBNAME) -o $(TV) multi: library $(MULTIS) $(CC) $(MULTIS) $(LIBNAME) -o $(MULTI) -timing: library $(TIMINGS) - $(CC) $(TIMINGS) $(LIBTEST) $(LIBNAME) -o $(TIMING) +timing: library $(LIBTEST) $(TIMINGS) + $(CC) $(TIMINGS) $(LIBTEST) $(LIBNAME) $(EXTRALIBS) -o $(TIMING) -test: library $(TESTS) +test: library $(LIBTEST) $(TESTS) $(CC) $(TESTS) $(LIBTEST) $(LIBNAME) -o $(TEST) @@ -216,11 +242,17 @@ install: library docs install -g $(GROUP) -o $(USER) $(HEADERS) $(DESTDIR)$(INCPATH) install -g $(GROUP) -o $(USER) doc/crypt.pdf $(DESTDIR)$(DATAPATH) -install_lib: library +install_test: $(LIBTEST) install -d -g $(GROUP) -o $(USER) $(DESTDIR)$(LIBPATH) install -d -g $(GROUP) -o $(USER) $(DESTDIR)$(INCPATH) - install -g $(GROUP) -o $(USER) $(LIBNAME) $(DESTDIR)$(LIBPATH) - install -g $(GROUP) -o $(USER) $(HEADERS) $(DESTDIR)$(INCPATH) + install -g $(GROUP) -o $(USER) $(LIBTEST) $(DESTDIR)$(LIBPATH) + +profile: + CFLAGS="$(CFLAGS) -fprofile-generate" make timing EXTRALIBS=-lgcov + ./timing + rm -f timing `find . -type f | grep [.][ao] | xargs` + CFLAGS="$(CFLAGS) -fprofile-use" make timing EXTRALIBS=-lgcov + #This rule cleans the source tree of all compiled code, not including the pdf #documentation. @@ -242,6 +274,7 @@ clean: rm -f $(TV) $(PROF) $(SMALL) $(CRYPT) $(HASHSUM) $(MULTI) $(TIMING) $(TEST) rm -rf doc/doxygen rm -f doc/*.pdf + rm -f *.txt #build the doxy files (requires Doxygen, tetex and patience) doxy: @@ -274,6 +307,8 @@ docdvi: crypt.tex #zipup the project (take that!) no_oops: clean cd .. ; cvs commit + echo Scanning for scratch/dirty files + find . -type f | grep -v CVS | xargs -n 1 bash mess.sh zipup: no_oops docs cd .. ; rm -rf crypt* libtomcrypt-$(VERSION) ; mkdir libtomcrypt-$(VERSION) ; \ @@ -283,3 +318,8 @@ zipup: no_oops docs zip -9r crypt-$(VERSION).zip libtomcrypt-$(VERSION) ; \ gpg -b -a crypt-$(VERSION).tar.bz2 ; gpg -b -a crypt-$(VERSION).zip ; \ mv -fv crypt* ~ ; rm -rf libtomcrypt-$(VERSION) + + +# $Source: /cvs/libtom/libtomcrypt/makefile,v $ +# $Revision: 1.67 $ +# $Date: 2005/06/09 00:39:26 $ diff --git a/makefile.icc b/makefile.icc index 41848dc..e7fcc1a 100644 --- a/makefile.icc +++ b/makefile.icc @@ -22,7 +22,7 @@ CC=icc #ARFLAGS=r # Compilation flags. Note the += does not write over the user's CFLAGS! -CFLAGS += -c -I./src/headers/ -DINTEL_CC +CFLAGS += -c -Isrc/headers/ -Itestprof/ -DINTEL_CC #The default rule for make builds the libtomcrypt library. default:library @@ -41,7 +41,13 @@ default:library # B - Blend of P4 and PM [mobile] # # Default to just generic max opts +ifdef LTC_SMALL +CFLAGS += -O2 -xP -ip +endif + +ifndef IGNORE_SPEED CFLAGS += -O3 -xP -ip +endif # want to see stuff? #CFLAGS += -opt_report @@ -122,29 +128,40 @@ src/modes/ctr/ctr_getiv.o src/modes/ctr/ctr_setiv.o src/modes/ctr/ctr_start.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/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/der_decode_integer.o src/pk/asn1/der/der_encode_integer.o \ -src/pk/asn1/der/der_get_multi_integer.o src/pk/asn1/der/der_length_integer.o \ -src/pk/asn1/der/der_put_multi_integer.o src/pk/dh/dh.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_sign_hash.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/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 \ +src/pk/asn1/der/octet/der_decode_octet_string.o src/pk/asn1/der/octet/der_encode_octet_string.o \ +src/pk/asn1/der/octet/der_length_octet_string.o \ +src/pk/asn1/der/printable_string/der_decode_printable_string.o \ +src/pk/asn1/der/printable_string/der_encode_printable_string.o \ +src/pk/asn1/der/printable_string/der_length_printable_string.o \ +src/pk/asn1/der/sequence/der_decode_sequence.o src/pk/asn1/der/sequence/der_decode_sequence_multi.o \ +src/pk/asn1/der/sequence/der_encode_sequence.o src/pk/asn1/der/sequence/der_encode_sequence_multi.o \ +src/pk/asn1/der/sequence/der_length_sequence.o \ +src/pk/asn1/der/short_integer/der_decode_short_integer.o \ +src/pk/asn1/der/short_integer/der_encode_short_integer.o \ +src/pk/asn1/der/short_integer/der_length_short_integer.o src/pk/dh/dh.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_sign_hash.o \ src/pk/dsa/dsa_verify_hash.o src/pk/dsa/dsa_verify_key.o src/pk/ecc/ecc.o src/pk/packet_store_header.o \ src/pk/packet_valid_header.o src/pk/pkcs1/pkcs_1_i2osp.o src/pk/pkcs1/pkcs_1_mgf1.o \ src/pk/pkcs1/pkcs_1_oaep_decode.o src/pk/pkcs1/pkcs_1_oaep_encode.o src/pk/pkcs1/pkcs_1_os2ip.o \ -src/pk/pkcs1/pkcs_1_pss_decode.o src/pk/pkcs1/pkcs_1_pss_encode.o src/pk/pkcs1/pkcs_1_v15_es_decode.o \ -src/pk/pkcs1/pkcs_1_v15_es_encode.o src/pk/pkcs1/pkcs_1_v15_sa_decode.o \ -src/pk/pkcs1/pkcs_1_v15_sa_encode.o src/pk/rsa/rsa_decrypt_key.o src/pk/rsa/rsa_encrypt_key.o \ -src/pk/rsa/rsa_export.o src/pk/rsa/rsa_exptmod.o src/pk/rsa/rsa_free.o src/pk/rsa/rsa_import.o \ -src/pk/rsa/rsa_make_key.o src/pk/rsa/rsa_sign_hash.o src/pk/rsa/rsa_v15_decrypt_key.o \ -src/pk/rsa/rsa_v15_encrypt_key.o src/pk/rsa/rsa_v15_sign_hash.o src/pk/rsa/rsa_v15_verify_hash.o \ +src/pk/pkcs1/pkcs_1_pss_decode.o src/pk/pkcs1/pkcs_1_pss_encode.o src/pk/rsa/rsa_decrypt_key.o \ +src/pk/rsa/rsa_encrypt_key.o src/pk/rsa/rsa_export.o src/pk/rsa/rsa_exptmod.o src/pk/rsa/rsa_free.o \ +src/pk/rsa/rsa_import.o src/pk/rsa/rsa_make_key.o src/pk/rsa/rsa_sign_hash.o \ src/pk/rsa/rsa_verify_hash.o src/prngs/fortuna.o src/prngs/rc4.o src/prngs/rng_get_bytes.o \ src/prngs/rng_make_prng.o src/prngs/sober128.o src/prngs/sprng.o src/prngs/yarrow.o -HEADERS=src/headers/tommath_superclass.h src/headers/tomcrypt_cfg.h \ -src/headers/tomcrypt_mac.h src/headers/tomcrypt_macros.h \ -src/headers/tomcrypt_custom.h src/headers/tomcrypt_argchk.h \ -src/headers/tomcrypt_cipher.h src/headers/tomcrypt_pk.h \ -src/headers/tommath_class.h src/headers/ltc_tommath.h src/headers/tomcrypt_hash.h \ -src/headers/tomcrypt_misc.h src/headers/tomcrypt.h src/headers/tomcrypt_pkcs.h \ -src/headers/tomcrypt_prng.h testprof/tomcrypt_test.h +HEADERS=src/headers/tommath_superclass.h src/headers/tomcrypt_cfg.h src/headers/tomcrypt_mac.h \ +src/headers/tomcrypt_macros.h src/headers/tomcrypt_custom.h src/headers/tomcrypt_argchk.h \ +src/headers/tomcrypt_cipher.h src/headers/tomcrypt_pk.h src/headers/tommath_class.h \ +src/headers/ltc_tommath.h src/headers/tomcrypt_hash.h src/headers/tomcrypt_misc.h \ +src/headers/tomcrypt.h src/headers/tomcrypt_pkcs.h src/headers/tomcrypt_prng.h testprof/tomcrypt_test.h #ciphers come in two flavours... enc+dec and enc aes_enc.o: aes.c aes_tab.c @@ -214,4 +231,9 @@ install: library install -d -g root -o root $(DESTDIR)$(LIBPATH) install -d -g root -o root $(DESTDIR)$(INCPATH) install -g root -o root $(LIBNAME) $(DESTDIR)$(LIBPATH) + install -g root -o root $(LIBTEST) $(DESTDIR)$(LIBPATH) install -g root -o root $(HEADERS) $(DESTDIR)$(INCPATH) + +# $Source: /cvs/libtom/libtomcrypt/makefile.icc,v $ +# $Revision: 1.32 $ +# $Date: 2005/05/23 03:12:44 $ diff --git a/makefile.msvc b/makefile.msvc index 16d4b8d..9db1e8f 100644 --- a/makefile.msvc +++ b/makefile.msvc @@ -57,29 +57,42 @@ src/modes/ctr/ctr_getiv.obj src/modes/ctr/ctr_setiv.obj src/modes/ctr/ctr_start. 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/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/der_decode_integer.obj src/pk/asn1/der/der_encode_integer.obj \ -src/pk/asn1/der/der_get_multi_integer.obj src/pk/asn1/der/der_length_integer.obj \ -src/pk/asn1/der/der_put_multi_integer.obj src/pk/dh/dh.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_sign_hash.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/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 \ +src/pk/asn1/der/octet/der_decode_octet_string.obj src/pk/asn1/der/octet/der_encode_octet_string.obj \ +src/pk/asn1/der/octet/der_length_octet_string.obj \ +src/pk/asn1/der/printable_string/der_decode_printable_string.obj \ +src/pk/asn1/der/printable_string/der_encode_printable_string.obj \ +src/pk/asn1/der/printable_string/der_length_printable_string.obj \ +src/pk/asn1/der/sequence/der_decode_sequence.obj src/pk/asn1/der/sequence/der_decode_sequence_multi.obj \ +src/pk/asn1/der/sequence/der_encode_sequence.obj src/pk/asn1/der/sequence/der_encode_sequence_multi.obj \ +src/pk/asn1/der/sequence/der_length_sequence.obj \ +src/pk/asn1/der/short_integer/der_decode_short_integer.obj \ +src/pk/asn1/der/short_integer/der_encode_short_integer.obj \ +src/pk/asn1/der/short_integer/der_length_short_integer.obj src/pk/dh/dh.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_sign_hash.obj \ src/pk/dsa/dsa_verify_hash.obj src/pk/dsa/dsa_verify_key.obj src/pk/ecc/ecc.obj src/pk/packet_store_header.obj \ src/pk/packet_valid_header.obj src/pk/pkcs1/pkcs_1_i2osp.obj src/pk/pkcs1/pkcs_1_mgf1.obj \ src/pk/pkcs1/pkcs_1_oaep_decode.obj src/pk/pkcs1/pkcs_1_oaep_encode.obj src/pk/pkcs1/pkcs_1_os2ip.obj \ -src/pk/pkcs1/pkcs_1_pss_decode.obj src/pk/pkcs1/pkcs_1_pss_encode.obj src/pk/pkcs1/pkcs_1_v15_es_decode.obj \ -src/pk/pkcs1/pkcs_1_v15_es_encode.obj src/pk/pkcs1/pkcs_1_v15_sa_decode.obj \ -src/pk/pkcs1/pkcs_1_v15_sa_encode.obj src/pk/rsa/rsa_decrypt_key.obj src/pk/rsa/rsa_encrypt_key.obj \ -src/pk/rsa/rsa_export.obj src/pk/rsa/rsa_exptmod.obj src/pk/rsa/rsa_free.obj src/pk/rsa/rsa_import.obj \ -src/pk/rsa/rsa_make_key.obj src/pk/rsa/rsa_sign_hash.obj src/pk/rsa/rsa_v15_decrypt_key.obj \ -src/pk/rsa/rsa_v15_encrypt_key.obj src/pk/rsa/rsa_v15_sign_hash.obj src/pk/rsa/rsa_v15_verify_hash.obj \ +src/pk/pkcs1/pkcs_1_pss_decode.obj src/pk/pkcs1/pkcs_1_pss_encode.obj src/pk/rsa/rsa_decrypt_key.obj \ +src/pk/rsa/rsa_encrypt_key.obj src/pk/rsa/rsa_export.obj src/pk/rsa/rsa_exptmod.obj src/pk/rsa/rsa_free.obj \ +src/pk/rsa/rsa_import.obj src/pk/rsa/rsa_make_key.obj src/pk/rsa/rsa_sign_hash.obj \ src/pk/rsa/rsa_verify_hash.obj src/prngs/fortuna.obj src/prngs/rc4.obj src/prngs/rng_get_bytes.obj \ src/prngs/rng_make_prng.obj src/prngs/sober128.obj src/prngs/sprng.obj src/prngs/yarrow.obj -HEADERS=src/headers/tommath_superclass.h src/headers/tomcrypt_cfg.h \ -src/headers/tomcrypt_mac.h src/headers/tomcrypt_macros.h \ -src/headers/tomcrypt_custom.h src/headers/tomcrypt_argchk.h \ -src/headers/tomcrypt_cipher.h src/headers/tomcrypt_pk.h \ -src/headers/tommath_class.h src/headers/ltc_tommath.h src/headers/tomcrypt_hash.h \ -src/headers/tomcrypt_misc.h src/headers/tomcrypt.h src/headers/tomcrypt_pkcs.h \ -src/headers/tomcrypt_prng.h testprof/tomcrypt_test.h +HEADERS=src/headers/tommath_superclass.h src/headers/tomcrypt_cfg.h src/headers/tomcrypt_mac.h \ +src/headers/tomcrypt_macros.h src/headers/tomcrypt_custom.h src/headers/tomcrypt_argchk.h \ +src/headers/tomcrypt_cipher.h src/headers/tomcrypt_pk.h src/headers/tommath_class.h \ +src/headers/ltc_tommath.h src/headers/tomcrypt_hash.h src/headers/tomcrypt_misc.h \ +src/headers/tomcrypt.h src/headers/tomcrypt_pkcs.h src/headers/tomcrypt_prng.h testprof/tomcrypt_test.h + + #ciphers come in two flavours... enc+dec and enc src/ciphers/aes/aes_enc.obj: src/ciphers/aes/aes.c src/ciphers/aes/aes_tab.c @@ -102,3 +115,7 @@ test: demos/test.c library timing: demos/timing.c library cl $(CFLAGS) demos/timing.c testprof/tomcrypt_prof.lib tomcrypt.lib advapi32.lib + +# $Source: /cvs/libtom/libtomcrypt/makefile.msvc,v $ +# $Revision: 1.14 $ +# $Date: 2005/06/08 23:37:40 $ diff --git a/makefile.shared b/makefile.shared index 207ceea..aa653da 100644 --- a/makefile.shared +++ b/makefile.shared @@ -6,7 +6,7 @@ # Tom St Denis # The version -VERSION=0:102 +VERSION=0:103 # Compiler and Linker Names CC=libtool --mode=compile gcc @@ -18,14 +18,18 @@ CFLAGS += -c -I./src/headers/ -Wall -Wsign-compare -W -Wshadow #CFLAGS += -Wsystem-headers -Wdeclaration-after-statement -Wbad-function-cast -Wcast-align -Wstrict-prototypes -Wmissing-prototypes \ # -Wmissing-declarations -Wpointer-arith +ifndef IGNORE_SPEED + # optimize for SPEED -CFLAGS += -O3 -funroll-all-loops +CFLAGS += -O3 -funroll-loops # add -fomit-frame-pointer. hinders debugging! CFLAGS += -fomit-frame-pointer # optimize for SIZE -#CFLAGS += -Os +#CFLAGS += -Os -DLTC_SMALL_CODE + +endif # compile for DEBUGING (required for ccmalloc checking!!!) #CFLAGS += -g3 @@ -45,7 +49,6 @@ TV=tv_gen TEST=test TIMING=timing - #LIBPATH-The directory for libtomcrypt to be installed to. #INCPATH-The directory to install the header files for libtomcrypt. #DATAPATH-The directory to install the pdf docs. @@ -55,16 +58,27 @@ INCPATH=/usr/include DATAPATH=/usr/share/doc/libtomcrypt/pdf #Who do we install as? +ifdef INSTALL_USER +USER=$(INSTALL_USER) +else USER=root -GROUP=wheel +endif + +ifdef INSTALL_GROUP +GROUP=$(INSTALL_GROUP) +else +GROUP=wheel +endif #List of objects to compile. #Leave MPI built-in or force developer to link against libtommath? +ifndef IGNORE_MPI MPIOBJECT=src/misc/mpi/mpi.o - +else #If you don't want mpi.o then add this -#MPISHARED=$(LIBPATH)/libtommath.la +MPISHARED=$(LIBPATH)/libtommath.la +endif OBJECTS=src/ciphers/aes/aes_enc.o $(MPIOBJECT) src/ciphers/aes/aes.o src/ciphers/anubis.o \ src/ciphers/blowfish.o src/ciphers/cast5.o src/ciphers/des.o src/ciphers/khazad.o src/ciphers/noekeon.o \ @@ -115,29 +129,40 @@ src/modes/ctr/ctr_getiv.o src/modes/ctr/ctr_setiv.o src/modes/ctr/ctr_start.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/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/der_decode_integer.o src/pk/asn1/der/der_encode_integer.o \ -src/pk/asn1/der/der_get_multi_integer.o src/pk/asn1/der/der_length_integer.o \ -src/pk/asn1/der/der_put_multi_integer.o src/pk/dh/dh.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_sign_hash.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/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 \ +src/pk/asn1/der/octet/der_decode_octet_string.o src/pk/asn1/der/octet/der_encode_octet_string.o \ +src/pk/asn1/der/octet/der_length_octet_string.o \ +src/pk/asn1/der/printable_string/der_decode_printable_string.o \ +src/pk/asn1/der/printable_string/der_encode_printable_string.o \ +src/pk/asn1/der/printable_string/der_length_printable_string.o \ +src/pk/asn1/der/sequence/der_decode_sequence.o src/pk/asn1/der/sequence/der_decode_sequence_multi.o \ +src/pk/asn1/der/sequence/der_encode_sequence.o src/pk/asn1/der/sequence/der_encode_sequence_multi.o \ +src/pk/asn1/der/sequence/der_length_sequence.o \ +src/pk/asn1/der/short_integer/der_decode_short_integer.o \ +src/pk/asn1/der/short_integer/der_encode_short_integer.o \ +src/pk/asn1/der/short_integer/der_length_short_integer.o src/pk/dh/dh.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_sign_hash.o \ src/pk/dsa/dsa_verify_hash.o src/pk/dsa/dsa_verify_key.o src/pk/ecc/ecc.o src/pk/packet_store_header.o \ src/pk/packet_valid_header.o src/pk/pkcs1/pkcs_1_i2osp.o src/pk/pkcs1/pkcs_1_mgf1.o \ src/pk/pkcs1/pkcs_1_oaep_decode.o src/pk/pkcs1/pkcs_1_oaep_encode.o src/pk/pkcs1/pkcs_1_os2ip.o \ -src/pk/pkcs1/pkcs_1_pss_decode.o src/pk/pkcs1/pkcs_1_pss_encode.o src/pk/pkcs1/pkcs_1_v15_es_decode.o \ -src/pk/pkcs1/pkcs_1_v15_es_encode.o src/pk/pkcs1/pkcs_1_v15_sa_decode.o \ -src/pk/pkcs1/pkcs_1_v15_sa_encode.o src/pk/rsa/rsa_decrypt_key.o src/pk/rsa/rsa_encrypt_key.o \ -src/pk/rsa/rsa_export.o src/pk/rsa/rsa_exptmod.o src/pk/rsa/rsa_free.o src/pk/rsa/rsa_import.o \ -src/pk/rsa/rsa_make_key.o src/pk/rsa/rsa_sign_hash.o src/pk/rsa/rsa_v15_decrypt_key.o \ -src/pk/rsa/rsa_v15_encrypt_key.o src/pk/rsa/rsa_v15_sign_hash.o src/pk/rsa/rsa_v15_verify_hash.o \ +src/pk/pkcs1/pkcs_1_pss_decode.o src/pk/pkcs1/pkcs_1_pss_encode.o src/pk/rsa/rsa_decrypt_key.o \ +src/pk/rsa/rsa_encrypt_key.o src/pk/rsa/rsa_export.o src/pk/rsa/rsa_exptmod.o src/pk/rsa/rsa_free.o \ +src/pk/rsa/rsa_import.o src/pk/rsa/rsa_make_key.o src/pk/rsa/rsa_sign_hash.o \ src/pk/rsa/rsa_verify_hash.o src/prngs/fortuna.o src/prngs/rc4.o src/prngs/rng_get_bytes.o \ src/prngs/rng_make_prng.o src/prngs/sober128.o src/prngs/sprng.o src/prngs/yarrow.o -HEADERS=src/headers/tommath_superclass.h src/headers/tomcrypt_cfg.h \ -src/headers/tomcrypt_mac.h src/headers/tomcrypt_macros.h \ -src/headers/tomcrypt_custom.h src/headers/tomcrypt_argchk.h \ -src/headers/tomcrypt_cipher.h src/headers/tomcrypt_pk.h \ -src/headers/tommath_class.h src/headers/ltc_tommath.h src/headers/tomcrypt_hash.h \ -src/headers/tomcrypt_misc.h src/headers/tomcrypt.h src/headers/tomcrypt_pkcs.h \ -src/headers/tomcrypt_prng.h testprof/tomcrypt_test.h +HEADERS=src/headers/tommath_superclass.h src/headers/tomcrypt_cfg.h src/headers/tomcrypt_mac.h \ +src/headers/tomcrypt_macros.h src/headers/tomcrypt_custom.h src/headers/tomcrypt_argchk.h \ +src/headers/tomcrypt_cipher.h src/headers/tomcrypt_pk.h src/headers/tommath_class.h \ +src/headers/ltc_tommath.h src/headers/tomcrypt_hash.h src/headers/tomcrypt_misc.h \ +src/headers/tomcrypt.h src/headers/tomcrypt_pkcs.h src/headers/tomcrypt_prng.h testprof/tomcrypt_test.h TESTOBJECTS=demos/test.o HASHOBJECTS=demos/hashsum.o @@ -164,7 +189,7 @@ src/hashes/sha2/sha512.o: src/hashes/sha2/sha512.c src/hashes/sha2/sha384.c src/hashes/sha2/sha256.o: src/hashes/sha2/sha256.c src/hashes/sha2/sha224.c #This rule makes the libtomcrypt library. -library: $(LIBTEST) $(LIBNAME) +library: $(LIBNAME) $(LIBTEST): cd testprof ; CFLAGS="$(CFLAGS)" GROUP=$(GROUP) USER=$(USER) VERSION=$(VERSION) LIBPATH=$(LIBPATH) LIBNAME=$(LIBTEST) make -f makefile.shared @@ -180,19 +205,22 @@ $(LIBNAME): $(OBJECTS) #This rule makes the hash program included with libtomcrypt hashsum: library gcc $(CFLAGS) demos/hashsum.c -o hashsum.o - gcc -o hashsum hashsum.o -ltomcrypt_prof -ltomcrypt $(MPISHARED) + gcc -o hashsum hashsum.o -ltomcrypt $(MPISHARED) #makes the crypt program crypt: library gcc $(CFLAGS) demos/encrypt.c -o encrypt.o - gcc -o crypt encrypt.o -ltomcrypt_prof -ltomcrypt $(MPISHARED) + gcc -o crypt encrypt.o -ltomcrypt $(MPISHARED) tv_gen: library $(TVS) - gcc -o tv_gen $(TVS) -ltomcrypt_prof -ltomcrypt $(MPISHARED) + gcc -o tv_gen $(TVS) -ltomcrypt $(MPISHARED) -test: library $(TESTS) +test: library $(LIBTEST) $(TESTS) gcc -o $(TEST) $(TESTS) -ltomcrypt_prof -ltomcrypt $(MPISHARED) -timing: library $(TIMINGS) +timing: library $(LIBTEST) $(TIMINGS) gcc -o $(TIMING) $(TIMINGS) -ltomcrypt_prof -ltomcrypt $(MPISHARED) +# $Source: /cvs/libtom/libtomcrypt/makefile.shared,v $ +# $Revision: 1.16 $ +# $Date: 2005/06/08 23:37:40 $ diff --git a/mess.sh b/mess.sh new file mode 100644 index 0000000..bf639ce --- /dev/null +++ b/mess.sh @@ -0,0 +1,4 @@ +#!/bin/bash +if cvs log $1 >/dev/null 2>/dev/null; then exit 0; else echo "$1 shouldn't be here" ; exit 1; fi + + diff --git a/notes/etc/saferp_optimizer.c b/notes/etc/saferp_optimizer.c index 664661a..feb58bc 100644 --- a/notes/etc/saferp_optimizer.c +++ b/notes/etc/saferp_optimizer.c @@ -171,3 +171,7 @@ printf(" }\n}\n\n"); return 0; } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/notes/etc/whirlgen.c b/notes/etc/whirlgen.c index 2880d3f..f64650b 100644 --- a/notes/etc/whirlgen.c +++ b/notes/etc/whirlgen.c @@ -89,3 +89,7 @@ int main(void) } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/notes/etc/whirltest.c b/notes/etc/whirltest.c index 9184f77..cf2e87c 100644 --- a/notes/etc/whirltest.c +++ b/notes/etc/whirltest.c @@ -13,3 +13,7 @@ int main(void) } } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/notes/tech0005.txt b/notes/tech0005.txt new file mode 100644 index 0000000..8f393d5 --- /dev/null +++ b/notes/tech0005.txt @@ -0,0 +1,18 @@ +Tech Note 0005 +Minimizing Code Space +Tom St Denis + +Introduction +------------ + +Tweaking... + +You can disable whole classes of algorithms on the command line with the LTC_NO_* defines. From there you can manually turn on what you want to enable. + +The following build with GCC 3.4.3 on an AMD64 box gets you AES, CTR mode, SHA-256, HMAC, Yarrow, full RSA PKCS #1, PKCS #5, ASN.1 DER and MPI in +roughly 80KB of code. + +CFLAGS="-DSC_RSA_1 -DLTC_NO_CIPHERS -DLTC_NO_HASHES -DLTC_NO_PRNGS -DLTC_NO_MACS -DLTC_NO_MODES -DLTC_NO_PK -DRIJNDAEL -DCTR -DSHA256 \ +-DHMAC -DYARROW -DMRSA -DMPI -Os -fomit-frame-pointer" make IGNORE_SPEED=1 + +Neato eh? diff --git a/parsenames.pl b/parsenames.pl index d6466c5..761f036 100644 --- a/parsenames.pl +++ b/parsenames.pl @@ -20,3 +20,7 @@ foreach my $obj (@a) { if ($ARGV[0] eq "HEADERS") { print "testprof/tomcrypt_test.h"; } print "\n\n"; + +# $Source: /cvs/libtom/libtomcrypt/parsenames.pl,v $ +# $Revision: 1.3 $ +# $Date: 2005/05/05 14:49:27 $ diff --git a/run.sh b/run.sh new file mode 100644 index 0000000..b652110 --- /dev/null +++ b/run.sh @@ -0,0 +1,35 @@ +#!/bin/bash +bash build.sh " $1" "$2 -O2" "$3 IGNORE_SPEED=1" +if [ -a testok.txt ] && [ -f testok.txt ]; then + echo +else + echo + echo "Test failed" + exit 1 +fi + +rm -f testok.txt +bash build.sh " $1" "$2 -Os" " $3 IGNORE_SPEED=1 LTC_SMALL=1" +if [ -a testok.txt ] && [ -f testok.txt ]; then + echo +else + echo + echo "Test failed" + exit 1 +fi + +rm -f testok.txt +bash build.sh " $1" " $2" " $3" +if [ -a testok.txt ] && [ -f testok.txt ]; then + echo +else + echo + echo "Test failed" + exit 1 +fi + +exit 0 + +# $Source: /cvs/libtom/libtomcrypt/run.sh,v $ +# $Revision: 1.13 $ +# $Date: 2005/05/11 18:59:53 $ diff --git a/src/ciphers/aes/aes.c b/src/ciphers/aes/aes.c index e698efd..584cd1e 100644 --- a/src/ciphers/aes/aes.c +++ b/src/ciphers/aes/aes.c @@ -127,7 +127,7 @@ int SETUP(const unsigned char *key, int keylen, int num_rounds, symmetric_key *s #endif LTC_ARGCHK(key != NULL); LTC_ARGCHK(skey != NULL); - + if (keylen != 16 && keylen != 24 && keylen != 32) { return CRYPT_INVALID_KEYSIZE; } @@ -747,3 +747,7 @@ int ECB_KS(int *keysize) #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/ciphers/aes/aes_tab.c b/src/ciphers/aes/aes_tab.c index 0ad1dfe..ee639d8 100644 --- a/src/ciphers/aes/aes_tab.c +++ b/src/ciphers/aes/aes_tab.c @@ -1018,3 +1018,7 @@ static const ulong32 rcon[] = { 0x10000000UL, 0x20000000UL, 0x40000000UL, 0x80000000UL, 0x1B000000UL, 0x36000000UL, /* for 128-bit blocks, Rijndael never uses more than 10 rcon values */ }; + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/ciphers/anubis.c b/src/ciphers/anubis.c index 7e2af60..84f7ae1 100644 --- a/src/ciphers/anubis.c +++ b/src/ciphers/anubis.c @@ -1548,3 +1548,7 @@ int anubis_keysize(int *keysize) #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/ciphers/blowfish.c b/src/ciphers/blowfish.c index 2f0385d..44189b2 100644 --- a/src/ciphers/blowfish.c +++ b/src/ciphers/blowfish.c @@ -581,3 +581,7 @@ int blowfish_keysize(int *keysize) #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/ciphers/cast5.c b/src/ciphers/cast5.c index 2b8e4a5..654b6ef 100644 --- a/src/ciphers/cast5.c +++ b/src/ciphers/cast5.c @@ -709,3 +709,7 @@ int cast5_keysize(int *keysize) } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/ciphers/des.c b/src/ciphers/des.c index d42c5fa..4d3629b 100644 --- a/src/ciphers/des.c +++ b/src/ciphers/des.c @@ -1888,3 +1888,7 @@ int des3_keysize(int *keysize) #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/ciphers/khazad.c b/src/ciphers/khazad.c index 4626923..d8e6902 100644 --- a/src/ciphers/khazad.c +++ b/src/ciphers/khazad.c @@ -845,3 +845,7 @@ int khazad_keysize(int *keysize) } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/ciphers/noekeon.c b/src/ciphers/noekeon.c index 194cdbe..0a54a22 100644 --- a/src/ciphers/noekeon.c +++ b/src/ciphers/noekeon.c @@ -290,3 +290,7 @@ int noekeon_keysize(int *keysize) #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/ciphers/rc2.c b/src/ciphers/rc2.c index 6382941..47b7276 100644 --- a/src/ciphers/rc2.c +++ b/src/ciphers/rc2.c @@ -348,3 +348,7 @@ int rc2_keysize(int *keysize) + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/ciphers/rc5.c b/src/ciphers/rc5.c index 32f666f..070ff5a 100644 --- a/src/ciphers/rc5.c +++ b/src/ciphers/rc5.c @@ -308,3 +308,7 @@ int rc5_keysize(int *keysize) + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/ciphers/rc6.c b/src/ciphers/rc6.c index 996c015..7a4558e 100644 --- a/src/ciphers/rc6.c +++ b/src/ciphers/rc6.c @@ -337,3 +337,7 @@ int rc6_keysize(int *keysize) #endif /*RC6*/ + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/ciphers/safer/safer.c b/src/ciphers/safer/safer.c index e6e073a..6c27679 100644 --- a/src/ciphers/safer/safer.c +++ b/src/ciphers/safer/safer.c @@ -481,3 +481,7 @@ int safer_sk128_test(void) + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/ciphers/safer/safer_tab.c b/src/ciphers/safer/safer_tab.c index f63ba6c..6c9abe9 100644 --- a/src/ciphers/safer/safer_tab.c +++ b/src/ciphers/safer/safer_tab.c @@ -62,3 +62,7 @@ const unsigned char safer_lbox[256] = { #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/ciphers/safer/saferp.c b/src/ciphers/safer/saferp.c index 17112f4..8474784 100644 --- a/src/ciphers/safer/saferp.c +++ b/src/ciphers/safer/saferp.c @@ -549,3 +549,7 @@ int saferp_keysize(int *keysize) #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/ciphers/skipjack.c b/src/ciphers/skipjack.c index e2431af..7635042 100644 --- a/src/ciphers/skipjack.c +++ b/src/ciphers/skipjack.c @@ -329,3 +329,7 @@ int skipjack_keysize(int *keysize) } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/ciphers/twofish/twofish.c b/src/ciphers/twofish/twofish.c index 7dbe9b7..bd71d03 100644 --- a/src/ciphers/twofish/twofish.c +++ b/src/ciphers/twofish/twofish.c @@ -576,7 +576,7 @@ void twofish_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_k b = RORc(b ^ (t2 + t1 + k[3]), 1); t2 = g1_func(b, skey); - t1 = g_func(a, key) + t2; + t1 = g_func(a, skey) + t2; c = ROLc(c, 1) ^ (t1 + k[0]); d = RORc(d ^ (t2 + t1 + k[1]), 1); k -= 4; @@ -700,3 +700,7 @@ int twofish_keysize(int *keysize) + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/ciphers/twofish/twofish_tab.c b/src/ciphers/twofish/twofish_tab.c index 0bffade..b3d0272 100644 --- a/src/ciphers/twofish/twofish_tab.c +++ b/src/ciphers/twofish/twofish_tab.c @@ -490,3 +490,7 @@ static const ulong32 rs_tab7[256] = { #endif /* TWOFISH_ALL_TABLES */ #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/ciphers/xtea.c b/src/ciphers/xtea.c index 98546df..2712f87 100644 --- a/src/ciphers/xtea.c +++ b/src/ciphers/xtea.c @@ -201,3 +201,7 @@ int xtea_keysize(int *keysize) + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/encauth/ccm/ccm_memory.c b/src/encauth/ccm/ccm_memory.c index 34a254d..abca36a 100644 --- a/src/encauth/ccm/ccm_memory.c +++ b/src/encauth/ccm/ccm_memory.c @@ -293,7 +293,6 @@ int ccm_memory(int cipher, #ifdef LTC_CLEAN_STACK zeromem(skey, sizeof(*skey)); - zeromem(B, sizeof(B)); zeromem(PAD, sizeof(PAD)); zeromem(CTRPAD, sizeof(CTRPAD)); #endif @@ -304,3 +303,7 @@ int ccm_memory(int cipher, } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/encauth/ccm/ccm_test.c b/src/encauth/ccm/ccm_test.c index ee78523..fb8e9a1 100644 --- a/src/encauth/ccm/ccm_test.c +++ b/src/encauth/ccm/ccm_test.c @@ -168,3 +168,7 @@ int ccm_test(void) } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/encauth/eax/eax_addheader.c b/src/encauth/eax/eax_addheader.c index 3004025..8323258 100644 --- a/src/encauth/eax/eax_addheader.c +++ b/src/encauth/eax/eax_addheader.c @@ -32,3 +32,7 @@ int eax_addheader(eax_state *eax, const unsigned char *header, } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/encauth/eax/eax_decrypt.c b/src/encauth/eax/eax_decrypt.c index 8711d2d..c7af001 100644 --- a/src/encauth/eax/eax_decrypt.c +++ b/src/encauth/eax/eax_decrypt.c @@ -44,3 +44,7 @@ int eax_decrypt(eax_state *eax, const unsigned char *ct, unsigned char *pt, } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/encauth/eax/eax_decrypt_verify_memory.c b/src/encauth/eax/eax_decrypt_verify_memory.c index 3fcab46..34fba82 100644 --- a/src/encauth/eax/eax_decrypt_verify_memory.c +++ b/src/encauth/eax/eax_decrypt_verify_memory.c @@ -102,3 +102,7 @@ LBL_ERR: } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/encauth/eax/eax_done.c b/src/encauth/eax/eax_done.c index 1d43651..50b0957 100644 --- a/src/encauth/eax/eax_done.c +++ b/src/encauth/eax/eax_done.c @@ -88,3 +88,7 @@ LBL_ERR: } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/encauth/eax/eax_encrypt.c b/src/encauth/eax/eax_encrypt.c index da23a8c..19014e3 100644 --- a/src/encauth/eax/eax_encrypt.c +++ b/src/encauth/eax/eax_encrypt.c @@ -45,3 +45,7 @@ int eax_encrypt(eax_state *eax, const unsigned char *pt, unsigned char *ct, #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/encauth/eax/eax_encrypt_authenticate_memory.c b/src/encauth/eax/eax_encrypt_authenticate_memory.c index 8a601cf..67c1ee2 100644 --- a/src/encauth/eax/eax_encrypt_authenticate_memory.c +++ b/src/encauth/eax/eax_encrypt_authenticate_memory.c @@ -76,3 +76,7 @@ LBL_ERR: } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/encauth/eax/eax_init.c b/src/encauth/eax/eax_init.c index 5a20db0..517f239 100644 --- a/src/encauth/eax/eax_init.c +++ b/src/encauth/eax/eax_init.c @@ -108,11 +108,9 @@ int eax_init(eax_state *eax, int cipher, /* note we don't finish the headeromac, this allows us to add more header later */ /* setup the CTR mode */ - if ((err = ctr_start(cipher, eax->N, key, keylen, 0, &eax->ctr)) != CRYPT_OK) { + if ((err = ctr_start(cipher, eax->N, key, keylen, 0, CTR_COUNTER_BIG_ENDIAN, &eax->ctr)) != CRYPT_OK) { goto LBL_ERR; } - /* use big-endian counter */ - eax->ctr.mode = 1; /* setup the OMAC for the ciphertext */ if ((err = omac_init(&eax->ctomac, cipher, key, keylen)) != CRYPT_OK) { @@ -140,3 +138,7 @@ LBL_ERR: } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/encauth/eax/eax_test.c b/src/encauth/eax/eax_test.c index 777dea1..879d43e 100644 --- a/src/encauth/eax/eax_test.c +++ b/src/encauth/eax/eax_test.c @@ -276,3 +276,7 @@ int eax_test(void) } #endif /* EAX_MODE */ + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/encauth/gcm/gcm_add_aad.c b/src/encauth/gcm/gcm_add_aad.c index cdcc0d9..585dd87 100644 --- a/src/encauth/gcm/gcm_add_aad.c +++ b/src/encauth/gcm/gcm_add_aad.c @@ -27,8 +27,11 @@ int gcm_add_aad(gcm_state *gcm, const unsigned char *adata, unsigned long adatalen) { - unsigned long x, y; + unsigned long x; int err; +#ifdef LTC_FAST + unsigned long y; +#endif LTC_ARGCHK(gcm != NULL); if (adatalen > 0) { @@ -115,3 +118,7 @@ int gcm_add_aad(gcm_state *gcm, } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/encauth/gcm/gcm_add_iv.c b/src/encauth/gcm/gcm_add_iv.c index 7faf4c0..7b7633f 100644 --- a/src/encauth/gcm/gcm_add_iv.c +++ b/src/encauth/gcm/gcm_add_iv.c @@ -88,3 +88,7 @@ int gcm_add_iv(gcm_state *gcm, #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/encauth/gcm/gcm_done.c b/src/encauth/gcm/gcm_done.c index 8b3a6dd..c0656f5 100644 --- a/src/encauth/gcm/gcm_done.c +++ b/src/encauth/gcm/gcm_done.c @@ -75,3 +75,7 @@ int gcm_done(gcm_state *gcm, #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/encauth/gcm/gcm_gf_mult.c b/src/encauth/gcm/gcm_gf_mult.c index a870c91..f48e664 100644 --- a/src/encauth/gcm/gcm_gf_mult.c +++ b/src/encauth/gcm/gcm_gf_mult.c @@ -31,6 +31,7 @@ static void gcm_rightshift(unsigned char *a) static const unsigned char mask[] = { 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01 }; static const unsigned char poly[] = { 0x00, 0xE1 }; + /** GCM GF multiplier (internal use only) @param a First value @@ -87,3 +88,7 @@ void gcm_mult_h(gcm_state *gcm, unsigned char *I) #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/encauth/gcm/gcm_init.c b/src/encauth/gcm/gcm_init.c index 35a5ab8..417532f 100644 --- a/src/encauth/gcm/gcm_init.c +++ b/src/encauth/gcm/gcm_init.c @@ -17,6 +17,46 @@ #ifdef GCM_MODE +#ifdef GCM_TABLES + +/* 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 */ +static const unsigned char gcm_shift_table[256*2] = { +0x00, 0x00, 0x01, 0xc2, 0x03, 0x84, 0x02, 0x46, 0x07, 0x08, 0x06, 0xca, 0x04, 0x8c, 0x05, 0x4e, +0x0e, 0x10, 0x0f, 0xd2, 0x0d, 0x94, 0x0c, 0x56, 0x09, 0x18, 0x08, 0xda, 0x0a, 0x9c, 0x0b, 0x5e, +0x1c, 0x20, 0x1d, 0xe2, 0x1f, 0xa4, 0x1e, 0x66, 0x1b, 0x28, 0x1a, 0xea, 0x18, 0xac, 0x19, 0x6e, +0x12, 0x30, 0x13, 0xf2, 0x11, 0xb4, 0x10, 0x76, 0x15, 0x38, 0x14, 0xfa, 0x16, 0xbc, 0x17, 0x7e, +0x38, 0x40, 0x39, 0x82, 0x3b, 0xc4, 0x3a, 0x06, 0x3f, 0x48, 0x3e, 0x8a, 0x3c, 0xcc, 0x3d, 0x0e, +0x36, 0x50, 0x37, 0x92, 0x35, 0xd4, 0x34, 0x16, 0x31, 0x58, 0x30, 0x9a, 0x32, 0xdc, 0x33, 0x1e, +0x24, 0x60, 0x25, 0xa2, 0x27, 0xe4, 0x26, 0x26, 0x23, 0x68, 0x22, 0xaa, 0x20, 0xec, 0x21, 0x2e, +0x2a, 0x70, 0x2b, 0xb2, 0x29, 0xf4, 0x28, 0x36, 0x2d, 0x78, 0x2c, 0xba, 0x2e, 0xfc, 0x2f, 0x3e, +0x70, 0x80, 0x71, 0x42, 0x73, 0x04, 0x72, 0xc6, 0x77, 0x88, 0x76, 0x4a, 0x74, 0x0c, 0x75, 0xce, +0x7e, 0x90, 0x7f, 0x52, 0x7d, 0x14, 0x7c, 0xd6, 0x79, 0x98, 0x78, 0x5a, 0x7a, 0x1c, 0x7b, 0xde, +0x6c, 0xa0, 0x6d, 0x62, 0x6f, 0x24, 0x6e, 0xe6, 0x6b, 0xa8, 0x6a, 0x6a, 0x68, 0x2c, 0x69, 0xee, +0x62, 0xb0, 0x63, 0x72, 0x61, 0x34, 0x60, 0xf6, 0x65, 0xb8, 0x64, 0x7a, 0x66, 0x3c, 0x67, 0xfe, +0x48, 0xc0, 0x49, 0x02, 0x4b, 0x44, 0x4a, 0x86, 0x4f, 0xc8, 0x4e, 0x0a, 0x4c, 0x4c, 0x4d, 0x8e, +0x46, 0xd0, 0x47, 0x12, 0x45, 0x54, 0x44, 0x96, 0x41, 0xd8, 0x40, 0x1a, 0x42, 0x5c, 0x43, 0x9e, +0x54, 0xe0, 0x55, 0x22, 0x57, 0x64, 0x56, 0xa6, 0x53, 0xe8, 0x52, 0x2a, 0x50, 0x6c, 0x51, 0xae, +0x5a, 0xf0, 0x5b, 0x32, 0x59, 0x74, 0x58, 0xb6, 0x5d, 0xf8, 0x5c, 0x3a, 0x5e, 0x7c, 0x5f, 0xbe, +0xe1, 0x00, 0xe0, 0xc2, 0xe2, 0x84, 0xe3, 0x46, 0xe6, 0x08, 0xe7, 0xca, 0xe5, 0x8c, 0xe4, 0x4e, +0xef, 0x10, 0xee, 0xd2, 0xec, 0x94, 0xed, 0x56, 0xe8, 0x18, 0xe9, 0xda, 0xeb, 0x9c, 0xea, 0x5e, +0xfd, 0x20, 0xfc, 0xe2, 0xfe, 0xa4, 0xff, 0x66, 0xfa, 0x28, 0xfb, 0xea, 0xf9, 0xac, 0xf8, 0x6e, +0xf3, 0x30, 0xf2, 0xf2, 0xf0, 0xb4, 0xf1, 0x76, 0xf4, 0x38, 0xf5, 0xfa, 0xf7, 0xbc, 0xf6, 0x7e, +0xd9, 0x40, 0xd8, 0x82, 0xda, 0xc4, 0xdb, 0x06, 0xde, 0x48, 0xdf, 0x8a, 0xdd, 0xcc, 0xdc, 0x0e, +0xd7, 0x50, 0xd6, 0x92, 0xd4, 0xd4, 0xd5, 0x16, 0xd0, 0x58, 0xd1, 0x9a, 0xd3, 0xdc, 0xd2, 0x1e, +0xc5, 0x60, 0xc4, 0xa2, 0xc6, 0xe4, 0xc7, 0x26, 0xc2, 0x68, 0xc3, 0xaa, 0xc1, 0xec, 0xc0, 0x2e, +0xcb, 0x70, 0xca, 0xb2, 0xc8, 0xf4, 0xc9, 0x36, 0xcc, 0x78, 0xcd, 0xba, 0xcf, 0xfc, 0xce, 0x3e, +0x91, 0x80, 0x90, 0x42, 0x92, 0x04, 0x93, 0xc6, 0x96, 0x88, 0x97, 0x4a, 0x95, 0x0c, 0x94, 0xce, +0x9f, 0x90, 0x9e, 0x52, 0x9c, 0x14, 0x9d, 0xd6, 0x98, 0x98, 0x99, 0x5a, 0x9b, 0x1c, 0x9a, 0xde, +0x8d, 0xa0, 0x8c, 0x62, 0x8e, 0x24, 0x8f, 0xe6, 0x8a, 0xa8, 0x8b, 0x6a, 0x89, 0x2c, 0x88, 0xee, +0x83, 0xb0, 0x82, 0x72, 0x80, 0x34, 0x81, 0xf6, 0x84, 0xb8, 0x85, 0x7a, 0x87, 0x3c, 0x86, 0xfe, +0xa9, 0xc0, 0xa8, 0x02, 0xaa, 0x44, 0xab, 0x86, 0xae, 0xc8, 0xaf, 0x0a, 0xad, 0x4c, 0xac, 0x8e, +0xa7, 0xd0, 0xa6, 0x12, 0xa4, 0x54, 0xa5, 0x96, 0xa0, 0xd8, 0xa1, 0x1a, 0xa3, 0x5c, 0xa2, 0x9e, +0xb5, 0xe0, 0xb4, 0x22, 0xb6, 0x64, 0xb7, 0xa6, 0xb2, 0xe8, 0xb3, 0x2a, 0xb1, 0x6c, 0xb0, 0xae, +0xbb, 0xf0, 0xba, 0x32, 0xb8, 0x74, 0xb9, 0xb6, 0xbc, 0xf8, 0xbd, 0x3a, 0xbf, 0x7c, 0xbe, 0xbe }; + +#endif + /** Initialize a GCM state @param gcm The GCM state to initialize @@ -31,7 +71,7 @@ int gcm_init(gcm_state *gcm, int cipher, int err; unsigned char B[16]; #ifdef GCM_TABLES - int x, y; + int x, y, z, t; #endif LTC_ARGCHK(gcm != NULL); @@ -72,17 +112,34 @@ int gcm_init(gcm_state *gcm, int cipher, #ifdef GCM_TABLES /* setup tables */ + + /* generate the first table as it has no shifting (from which we make the other tables) */ zeromem(B, 16); - for (x = 0; x < 16; x++) { - for (y = 0; y < 256; y++) { - B[x] = y; - gcm_gf_mult(gcm->H, B, &gcm->PC[x][y][0]); - } - B[x] = 0; + for (y = 0; y < 256; y++) { + B[0] = y; + gcm_gf_mult(gcm->H, B, &gcm->PC[0][y][0]); } + + /* now generate the rest of the tables based the previous table */ + for (x = 1; x < 16; x++) { + for (y = 0; y < 256; y++) { + /* now shift it right by 8 bits */ + t = gcm->PC[x-1][y][15]; + for (z = 15; z > 0; z--) { + gcm->PC[x][y][z] = gcm->PC[x-1][y][z-1]; + } + gcm->PC[x][y][0] = gcm_shift_table[t<<1]; + gcm->PC[x][y][1] ^= gcm_shift_table[(t<<1)+1]; + } + } + #endif return CRYPT_OK; } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/encauth/gcm/gcm_memory.c b/src/encauth/gcm/gcm_memory.c index e062413..47b7206 100644 --- a/src/encauth/gcm/gcm_memory.c +++ b/src/encauth/gcm/gcm_memory.c @@ -87,3 +87,7 @@ LTC_ERR: } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/encauth/gcm/gcm_process.c b/src/encauth/gcm/gcm_process.c index 577967b..a24eefb 100644 --- a/src/encauth/gcm/gcm_process.c +++ b/src/encauth/gcm/gcm_process.c @@ -141,3 +141,7 @@ int gcm_process(gcm_state *gcm, #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/encauth/gcm/gcm_reset.c b/src/encauth/gcm/gcm_reset.c index e73bf66..affdc1b 100644 --- a/src/encauth/gcm/gcm_reset.c +++ b/src/encauth/gcm/gcm_reset.c @@ -38,3 +38,7 @@ int gcm_reset(gcm_state *gcm) } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/encauth/gcm/gcm_test.c b/src/encauth/gcm/gcm_test.c index bc6ad7e..3e45705 100644 --- a/src/encauth/gcm/gcm_test.c +++ b/src/encauth/gcm/gcm_test.c @@ -281,7 +281,6 @@ int gcm_test(void) }; int idx, err; unsigned long x, y; - gcm_state gcm; unsigned char out[2][64], T[2][16]; /* find aes */ @@ -363,3 +362,7 @@ int gcm_test(void) #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/encauth/ocb/ocb_decrypt.c b/src/encauth/ocb/ocb_decrypt.c index d3bf480..9551aa7 100644 --- a/src/encauth/ocb/ocb_decrypt.c +++ b/src/encauth/ocb/ocb_decrypt.c @@ -71,3 +71,7 @@ int ocb_decrypt(ocb_state *ocb, const unsigned char *ct, unsigned char *pt) #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/encauth/ocb/ocb_decrypt_verify_memory.c b/src/encauth/ocb/ocb_decrypt_verify_memory.c index 378a8af..d33550a 100644 --- a/src/encauth/ocb/ocb_decrypt_verify_memory.c +++ b/src/encauth/ocb/ocb_decrypt_verify_memory.c @@ -80,3 +80,7 @@ LBL_ERR: } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/encauth/ocb/ocb_done_decrypt.c b/src/encauth/ocb/ocb_done_decrypt.c index 9f8b1b9..a28909c 100644 --- a/src/encauth/ocb/ocb_done_decrypt.c +++ b/src/encauth/ocb/ocb_done_decrypt.c @@ -74,3 +74,7 @@ LBL_ERR: #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/encauth/ocb/ocb_done_encrypt.c b/src/encauth/ocb/ocb_done_encrypt.c index 1a07569..10062fe 100644 --- a/src/encauth/ocb/ocb_done_encrypt.c +++ b/src/encauth/ocb/ocb_done_encrypt.c @@ -40,3 +40,7 @@ int ocb_done_encrypt(ocb_state *ocb, const unsigned char *pt, unsigned long ptle #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/encauth/ocb/ocb_encrypt.c b/src/encauth/ocb/ocb_encrypt.c index ba39c60..a3356c6 100644 --- a/src/encauth/ocb/ocb_encrypt.c +++ b/src/encauth/ocb/ocb_encrypt.c @@ -64,3 +64,7 @@ int ocb_encrypt(ocb_state *ocb, const unsigned char *pt, unsigned char *ct) } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/encauth/ocb/ocb_encrypt_authenticate_memory.c b/src/encauth/ocb/ocb_encrypt_authenticate_memory.c index bcc9cfb..e963267 100644 --- a/src/encauth/ocb/ocb_encrypt_authenticate_memory.c +++ b/src/encauth/ocb/ocb_encrypt_authenticate_memory.c @@ -78,3 +78,7 @@ LBL_ERR: } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/encauth/ocb/ocb_init.c b/src/encauth/ocb/ocb_init.c index 57e04af..84f113a 100644 --- a/src/encauth/ocb/ocb_init.c +++ b/src/encauth/ocb/ocb_init.c @@ -127,3 +127,7 @@ int ocb_init(ocb_state *ocb, int cipher, } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/encauth/ocb/ocb_ntz.c b/src/encauth/ocb/ocb_ntz.c index 4ffe7e8..3862579 100644 --- a/src/encauth/ocb/ocb_ntz.c +++ b/src/encauth/ocb/ocb_ntz.c @@ -36,3 +36,7 @@ int ocb_ntz(unsigned long x) } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/encauth/ocb/ocb_shift_xor.c b/src/encauth/ocb/ocb_shift_xor.c index b63b022..2b9364b 100644 --- a/src/encauth/ocb/ocb_shift_xor.c +++ b/src/encauth/ocb/ocb_shift_xor.c @@ -33,3 +33,7 @@ void ocb_shift_xor(ocb_state *ocb, unsigned char *Z) } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/encauth/ocb/ocb_test.c b/src/encauth/ocb/ocb_test.c index d6cb14b..a6ac51b 100644 --- a/src/encauth/ocb/ocb_test.c +++ b/src/encauth/ocb/ocb_test.c @@ -231,3 +231,7 @@ int ocb_test(void) -- hard to stream [you can't emit ciphertext until full block] -- The setup is somewhat complicated... */ + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/encauth/ocb/s_ocb_done.c b/src/encauth/ocb/s_ocb_done.c index 6f6e63d..4a0d5be 100644 --- a/src/encauth/ocb/s_ocb_done.c +++ b/src/encauth/ocb/s_ocb_done.c @@ -138,3 +138,7 @@ int s_ocb_done(ocb_state *ocb, const unsigned char *pt, unsigned long ptlen, #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/hashes/chc/chc.c b/src/hashes/chc/chc.c index 67dd090..cb7fde4 100644 --- a/src/hashes/chc/chc.c +++ b/src/hashes/chc/chc.c @@ -291,3 +291,7 @@ int chc_test(void) } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/hashes/helper/hash_file.c b/src/hashes/helper/hash_file.c index 78c290a..8354d8d 100644 --- a/src/hashes/helper/hash_file.c +++ b/src/hashes/helper/hash_file.c @@ -51,3 +51,7 @@ int hash_file(int hash, const char *fname, unsigned char *out, unsigned long *ou #endif } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/hashes/helper/hash_filehandle.c b/src/hashes/helper/hash_filehandle.c index c02c5a7..db85063 100644 --- a/src/hashes/helper/hash_filehandle.c +++ b/src/hashes/helper/hash_filehandle.c @@ -64,3 +64,7 @@ int hash_filehandle(int hash, FILE *in, unsigned char *out, unsigned long *outle #endif } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/hashes/helper/hash_memory.c b/src/hashes/helper/hash_memory.c index 9786948..37eaf19 100644 --- a/src/hashes/helper/hash_memory.c +++ b/src/hashes/helper/hash_memory.c @@ -62,3 +62,7 @@ LBL_ERR: return err; } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/hashes/helper/hash_memory_multi.c b/src/hashes/helper/hash_memory_multi.c index ce22283..bd23d61 100644 --- a/src/hashes/helper/hash_memory_multi.c +++ b/src/hashes/helper/hash_memory_multi.c @@ -80,3 +80,7 @@ LBL_ERR: va_end(args); return err; } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/hashes/md2.c b/src/hashes/md2.c index 5381771..82640b6 100644 --- a/src/hashes/md2.c +++ b/src/hashes/md2.c @@ -24,11 +24,9 @@ const struct ltc_hash_descriptor md2_desc = 16, 16, - /* DER encoding */ - { 0x30, 0x20, 0x30, 0x0C, 0x06, 0x08, 0x2A, 0x86, - 0x48, 0x86, 0xF7, 0x0D, 0x02, 0x02, 0x05, 0x00, - 0x04, 0x10 }, - 18, + /* OID */ + { 1, 2, 840, 113549, 2, 2, }, + 6, &md2_init, &md2_process, @@ -246,3 +244,7 @@ int md2_test(void) #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/hashes/md4.c b/src/hashes/md4.c index 477f5b0..790729a 100644 --- a/src/hashes/md4.c +++ b/src/hashes/md4.c @@ -24,9 +24,9 @@ const struct ltc_hash_descriptor md4_desc = 16, 64, - /* DER encoding (not yet supported) */ - { 0x00 }, - 0, + /* OID */ + { 1, 2, 840, 113549, 2, 4, }, + 6, &md4_init, &md4_process, @@ -300,3 +300,7 @@ int md4_test(void) #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/hashes/md5.c b/src/hashes/md5.c index e2e5c74..6595076 100644 --- a/src/hashes/md5.c +++ b/src/hashes/md5.c @@ -25,11 +25,9 @@ const struct ltc_hash_descriptor md5_desc = 16, 64, - /* DER identifier */ - { 0x30, 0x20, 0x30, 0x0C, 0x06, 0x08, 0x2A, 0x86, - 0x48, 0x86, 0xF7, 0x0D, 0x02, 0x05, 0x05, 0x00, - 0x04, 0x10 }, - 18, + /* OID */ + { 1, 2, 840, 113549, 2, 5, }, + 6, &md5_init, &md5_process, @@ -363,3 +361,7 @@ int md5_test(void) #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/hashes/rmd128.c b/src/hashes/rmd128.c index 1c304a1..d4f90e2 100644 --- a/src/hashes/rmd128.c +++ b/src/hashes/rmd128.c @@ -30,9 +30,9 @@ const struct ltc_hash_descriptor rmd128_desc = 16, 64, - /* DER identifier (not supported) */ - { 0x00 }, - 0, + /* OID */ + { 1, 0, 10118, 3, 0, 50 }, + 6, &rmd128_init, &rmd128_process, @@ -403,3 +403,7 @@ int rmd128_test(void) #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/hashes/rmd160.c b/src/hashes/rmd160.c index a617152..bdd1265 100644 --- a/src/hashes/rmd160.c +++ b/src/hashes/rmd160.c @@ -30,10 +30,9 @@ const struct ltc_hash_descriptor rmd160_desc = 20, 64, - /* DER identifier */ - { 0x30, 0x21, 0x30, 0x09, 0x06, 0x05, 0x2B, 0x24, - 0x03, 0x02, 0x01, 0x05, 0x00, 0x04, 0x14 }, - 15, + /* OID */ + { 1, 3, 36, 3, 2, 1, }, + 6, &rmd160_init, &rmd160_process, @@ -463,3 +462,7 @@ int rmd160_test(void) #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/hashes/sha1.c b/src/hashes/sha1.c index 267729b..b297c99 100644 --- a/src/hashes/sha1.c +++ b/src/hashes/sha1.c @@ -25,10 +25,9 @@ const struct ltc_hash_descriptor sha1_desc = 20, 64, - /* DER identifier */ - { 0x30, 0x21, 0x30, 0x09, 0x06, 0x05, 0x2B, 0x0E, - 0x03, 0x02, 0x1A, 0x05, 0x00, 0x04, 0x14 }, - 15, + /* OID */ + { 1, 3, 14, 3, 2, 26, }, + 6, &sha1_init, &sha1_process, @@ -282,3 +281,7 @@ int sha1_test(void) #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/hashes/sha2/sha224.c b/src/hashes/sha2/sha224.c index 8c0dcde..639c5ec 100644 --- a/src/hashes/sha2/sha224.c +++ b/src/hashes/sha2/sha224.c @@ -20,9 +20,9 @@ const struct ltc_hash_descriptor sha224_desc = 28, 64, - /* DER identifier (not supported) */ - { 0x00 }, - 0, + /* OID */ + { 2, 16, 840, 1, 101, 3, 4, 2, 4, }, + 9, &sha224_init, &sha256_process, @@ -118,3 +118,7 @@ int sha224_test(void) #endif } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/hashes/sha2/sha256.c b/src/hashes/sha2/sha256.c index 85eba2a..59c211e 100644 --- a/src/hashes/sha2/sha256.c +++ b/src/hashes/sha2/sha256.c @@ -24,11 +24,9 @@ const struct ltc_hash_descriptor sha256_desc = 32, 64, - /* DER identifier */ - { 0x30, 0x31, 0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, - 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, - 0x00, 0x04, 0x20 }, - 19, + /* OID */ + { 2, 16, 840, 1, 101, 3, 4, 2, 1, }, + 9, &sha256_init, &sha256_process, @@ -335,3 +333,7 @@ int sha256_test(void) #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/hashes/sha2/sha384.c b/src/hashes/sha2/sha384.c index 912145c..78bda80 100644 --- a/src/hashes/sha2/sha384.c +++ b/src/hashes/sha2/sha384.c @@ -20,11 +20,9 @@ const struct ltc_hash_descriptor sha384_desc = 48, 128, - /* DER identifier */ - { 0x30, 0x41, 0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, - 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x02, 0x05, - 0x00, 0x04, 0x30 }, - 19, + /* OID */ + { 2, 16, 840, 1, 101, 3, 4, 2, 2, }, + 9, &sha384_init, &sha512_process, @@ -130,3 +128,7 @@ int sha384_test(void) + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/hashes/sha2/sha512.c b/src/hashes/sha2/sha512.c index 3238f2b..346a1b0 100644 --- a/src/hashes/sha2/sha512.c +++ b/src/hashes/sha2/sha512.c @@ -24,11 +24,9 @@ const struct ltc_hash_descriptor sha512_desc = 64, 128, - /* DER identifier */ - { 0x30, 0x51, 0x30, 0x0D, 0x06, 0x09, 0x60, 0x86, - 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x03, 0x05, - 0x00, 0x04, 0x40 }, - 19, + /* OID */ + { 2, 16, 840, 1, 101, 3, 4, 2, 3, }, + 9, &sha512_init, &sha512_process, @@ -314,3 +312,7 @@ int sha512_test(void) + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/hashes/tiger.c b/src/hashes/tiger.c index a1cd888..978cd71 100644 --- a/src/hashes/tiger.c +++ b/src/hashes/tiger.c @@ -25,11 +25,9 @@ const struct ltc_hash_descriptor tiger_desc = 24, 64, - /* DER identifier */ - { 0x30, 0x29, 0x30, 0x0D, 0x06, 0x09, 0x2B, 0x06, - 0x01, 0x04, 0x01, 0xDA, 0x47, 0x0C, 0x02, 0x05, - 0x00, 0x04, 0x18 }, - 19, + /* OID */ + { 1, 3, 6, 1, 4, 1, 11591, 12, 2, }, + 9, &tiger_init, &tiger_process, @@ -809,3 +807,7 @@ Hash of "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-ABCDEFG + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/hashes/whirl/whirl.c b/src/hashes/whirl/whirl.c index ff0b436..3cd946e 100644 --- a/src/hashes/whirl/whirl.c +++ b/src/hashes/whirl/whirl.c @@ -25,9 +25,9 @@ const struct ltc_hash_descriptor whirlpool_desc = 64, 64, - /* DER encoding (not yet supported) */ - { 0x00 }, - 0, + /* OID */ + { 1, 0, 10118, 3, 0, 55 }, + 6, &whirlpool_init, &whirlpool_process, @@ -307,3 +307,7 @@ int whirlpool_test(void) #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/hashes/whirl/whirltab.c b/src/hashes/whirl/whirltab.c index fb99bea..d38ef7c 100644 --- a/src/hashes/whirl/whirltab.c +++ b/src/hashes/whirl/whirltab.c @@ -577,3 +577,7 @@ CONST64(0xca2dbf07ad5a8333), CONST64(0x6302aa71c81949d9), }; + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/headers/ltc_tommath.h b/src/headers/ltc_tommath.h index 05212e5..07d439e 100644 --- a/src/headers/ltc_tommath.h +++ b/src/headers/ltc_tommath.h @@ -575,3 +575,7 @@ extern const char *mp_s_rmap; #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/headers/tomcrypt.h b/src/headers/tomcrypt.h index 0d34c74..a5c1548 100644 --- a/src/headers/tomcrypt.h +++ b/src/headers/tomcrypt.h @@ -16,8 +16,8 @@ extern "C" { #endif /* version */ -#define CRYPT 0x0102 -#define SCRYPT "1.02" +#define CRYPT 0x0103 +#define SCRYPT "1.03" /* max size of either a cipher/hash block or symmetric key [largest of the two] */ #define MAXBLOCKSIZE 128 @@ -79,3 +79,7 @@ enum { #endif /* TOMCRYPT_H_ */ + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/headers/tomcrypt_argchk.h b/src/headers/tomcrypt_argchk.h index 5c8759d..8de8af3 100644 --- a/src/headers/tomcrypt_argchk.h +++ b/src/headers/tomcrypt_argchk.h @@ -19,3 +19,7 @@ void crypt_argchk(char *v, char *s, int d); #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/headers/tomcrypt_cfg.h b/src/headers/tomcrypt_cfg.h index a0022d1..3b198fe 100644 --- a/src/headers/tomcrypt_cfg.h +++ b/src/headers/tomcrypt_cfg.h @@ -106,3 +106,7 @@ int XMEMCMP(const void *s1, const void *s2, size_t n); #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/headers/tomcrypt_cipher.h b/src/headers/tomcrypt_cipher.h index af184c2..d162a2a 100644 --- a/src/headers/tomcrypt_cipher.h +++ b/src/headers/tomcrypt_cipher.h @@ -32,7 +32,7 @@ struct saferp_key { #ifdef RIJNDAEL struct rijndael_key { - ulong32 eK[64], dK[64]; + ulong32 eK[60], dK[60]; int Nr; }; #endif @@ -599,8 +599,15 @@ int cbc_done(symmetric_CBC *cbc); #endif #ifdef CTR -int ctr_start(int cipher, const unsigned char *IV, const unsigned char *key, - int keylen, int num_rounds, symmetric_CTR *ctr); + +#define CTR_COUNTER_LITTLE_ENDIAN 0 +#define CTR_COUNTER_BIG_ENDIAN 1 + +int ctr_start( int cipher, + const unsigned char *IV, + const unsigned char *key, int keylen, + int num_rounds, int ctr_mode, + symmetric_CTR *ctr); int ctr_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, symmetric_CTR *ctr); int ctr_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, symmetric_CTR *ctr); int ctr_getiv(unsigned char *IV, unsigned long *len, symmetric_CTR *ctr); @@ -617,3 +624,7 @@ int unregister_cipher(const struct ltc_cipher_descriptor *cipher); int cipher_is_valid(int idx); + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/headers/tomcrypt_custom.h b/src/headers/tomcrypt_custom.h index d786f0b..abf5bc2 100644 --- a/src/headers/tomcrypt_custom.h +++ b/src/headers/tomcrypt_custom.h @@ -1,6 +1,3 @@ -/* This header is meant to be included before mycrypt.h in projects where - * you don't want to throw all the defines in a makefile. - */ #ifndef TOMCRYPT_CUSTOM_H_ #define TOMCRYPT_CUSTOM_H_ @@ -20,7 +17,9 @@ /* #define LTC_SMALL_CODE */ /* Enable self-test test vector checking */ -#define LTC_TEST +#ifndef LTC_NO_TEST + #define LTC_TEST +#endif /* clean the stack of functions which put private information on stack */ /* #define LTC_CLEAN_STACK */ @@ -38,6 +37,8 @@ /* #define LTC_NO_BSWAP */ /* ---> Symmetric Block Ciphers <--- */ +#ifndef LTC_NO_CIPHERS + #define BLOWFISH #define RC2 #define RC5 @@ -48,8 +49,12 @@ /* _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 TWOFISH_TABLES -/* #define TWOFISH_ALL_TABLES */ +#ifndef LTC_NO_TABLES + #define TWOFISH_TABLES + /* #define TWOFISH_ALL_TABLES */ +#else + #define TWOFISH_SMALL +#endif /* #define TWOFISH_SMALL */ /* DES includes EDE triple-DES */ #define DES @@ -61,15 +66,23 @@ #define ANUBIS #define ANUBIS_TWEAK +#endif /* LTC_NO_CIPHERS */ + /* ---> Block Cipher Modes of Operation <--- */ +#ifndef LTC_NO_MODES + #define CFB #define OFB #define ECB #define CBC #define CTR +#endif /* LTC_NO_MODES */ + /* ---> One-Way Hash Functions <--- */ +#ifndef LTC_NO_HASHES + #define CHC_HASH #define WHIRLPOOL #define SHA512 @@ -84,7 +97,11 @@ #define RIPEMD128 #define RIPEMD160 +#endif /* LTC_NO_HASHES */ + /* ---> MAC functions <--- */ +#ifndef LTC_NO_MACS + #define HMAC #define OMAC #define PMAC @@ -95,6 +112,7 @@ #endif /* ---> Encrypt + Authenticate Modes <--- */ + #define EAX_MODE #if defined(EAX_MODE) && !(defined(CTR) && defined(OMAC)) #error EAX_MODE requires CTR and OMAC mode @@ -104,13 +122,20 @@ #define CCM_MODE #define GCM_MODE + /* Use 64KiB tables */ -#define GCM_TABLES +#ifndef LTC_NO_TABLES + #define GCM_TABLES +#endif + +#endif /* LTC_NO_MACS */ /* Various tidbits of modern neatoness */ #define BASE64 /* --> Pseudo Random Number Generators <--- */ +#ifndef LTC_NO_PRNGS + /* Yarrow */ #define YARROW /* which descriptor of AES to use? */ @@ -142,7 +167,11 @@ /* try /dev/urandom before trying /dev/random */ #define TRY_URANDOM_FIRST +#endif /* LTC_NO_PRNGS */ + /* ---> Public Key Crypto <--- */ +#ifndef LTC_NO_PK + #define MRSA /* Digital Signature Algorithm */ @@ -168,7 +197,6 @@ /* ECC */ #define MECC /* Supported Key Sizes */ -#define ECC160 #define ECC192 #define ECC224 #define ECC256 @@ -178,7 +206,11 @@ /* Include the MPI functionality? (required by the PK algorithms) */ #define MPI +#endif /* LTC_NO_PK */ + /* PKCS #1 (RSA) and #5 (Password Handling) stuff */ +#ifndef LTC_NO_PKCS + #define PKCS_1 #define PKCS_5 @@ -192,5 +224,11 @@ #error RSA/DSA requires ASN.1 DER functionality, make sure LTC_DER is enabled #endif +#endif /* LTC_NO_PKCS */ + #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/headers/tomcrypt_hash.h b/src/headers/tomcrypt_hash.h index d295a59..f92f2d6 100644 --- a/src/headers/tomcrypt_hash.h +++ b/src/headers/tomcrypt_hash.h @@ -132,10 +132,11 @@ extern struct ltc_hash_descriptor { unsigned long hashsize; /** Input block size in octets */ unsigned long blocksize; - /** ASN.1 DER identifier */ - unsigned char DER[64]; + /** ASN.1 OID */ + unsigned long OID[16]; /** Length of DER encoding */ - unsigned long DERlen; + unsigned long OIDlen; + /** Init a hash state @param hash The hash to initialize @return CRYPT_OK if successful @@ -292,29 +293,29 @@ int func_name (hash_state * md, const unsigned char *in, unsigned long inlen) { \ unsigned long n; \ int err; \ - LTC_ARGCHK(md != NULL); \ - LTC_ARGCHK(in != NULL); \ + LTC_ARGCHK(md != NULL); \ + LTC_ARGCHK(in != NULL); \ if (md-> state_var .curlen > sizeof(md-> state_var .buf)) { \ return CRYPT_INVALID_ARG; \ } \ - while (inlen > 0) { \ - if (md-> state_var .curlen == 0 && inlen >= block_size) { \ - if ((err = compress_name (md, (unsigned char *)in)) != CRYPT_OK) { \ - return err; \ - } \ + while (inlen > 0) { \ + if (md-> state_var .curlen == 0 && inlen >= block_size) { \ + if ((err = compress_name (md, (unsigned char *)in)) != CRYPT_OK) { \ + return err; \ + } \ md-> state_var .length += block_size * 8; \ - in += block_size; \ - inlen -= block_size; \ + in += block_size; \ + inlen -= block_size; \ } else { \ - n = MIN(inlen, (block_size - md-> state_var .curlen)); \ - memcpy(md-> state_var .buf + md-> state_var.curlen, in, (size_t)n); \ + n = MIN(inlen, (block_size - md-> state_var .curlen)); \ + memcpy(md-> state_var .buf + md-> state_var.curlen, in, (size_t)n); \ md-> state_var .curlen += n; \ - in += n; \ - inlen -= n; \ + in += n; \ + inlen -= n; \ if (md-> state_var .curlen == block_size) { \ - if ((err = compress_name (md, md-> state_var .buf)) != CRYPT_OK) {\ - return err; \ - } \ + if ((err = compress_name (md, md-> state_var .buf)) != CRYPT_OK) { \ + return err; \ + } \ md-> state_var .length += 8*block_size; \ md-> state_var .curlen = 0; \ } \ @@ -322,3 +323,7 @@ int func_name (hash_state * md, const unsigned char *in, unsigned long inlen) } \ return CRYPT_OK; \ } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/headers/tomcrypt_mac.h b/src/headers/tomcrypt_mac.h index 6b5e1ce..0ffbd45 100644 --- a/src/headers/tomcrypt_mac.h +++ b/src/headers/tomcrypt_mac.h @@ -295,3 +295,7 @@ int pelican_memory(const unsigned char *key, unsigned long keylen, unsigned char *out); #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/headers/tomcrypt_macros.h b/src/headers/tomcrypt_macros.h index f083984..b0d1533 100644 --- a/src/headers/tomcrypt_macros.h +++ b/src/headers/tomcrypt_macros.h @@ -132,7 +132,7 @@ asm __volatile__ ( \ #ifdef ENDIAN_32BITWORD #define STORE32L(x, y) \ - { unsigned long __t = (x); memcpy(y, &__t, 4); } + { ulong32 __t = (x); memcpy(y, &__t, 4); } #define LOAD32L(x, y) \ memcpy(&(x), y, 4); @@ -152,7 +152,7 @@ asm __volatile__ ( \ #else /* 64-bit words then */ #define STORE32L(x, y) \ - { unsigned long __t = (x); memcpy(y, &__t, 4); } + { ulong32 __t = (x); memcpy(y, &__t, 4); } #define LOAD32L(x, y) \ { memcpy(&(x), y, 4); x &= 0xFFFFFFFF; } @@ -193,7 +193,7 @@ asm __volatile__ ( \ #ifdef ENDIAN_32BITWORD #define STORE32H(x, y) \ - { unsigned long __t = (x); memcpy(y, &__t, 4); } + { ulong32 __t = (x); memcpy(y, &__t, 4); } #define LOAD32H(x, y) \ memcpy(&(x), y, 4); @@ -213,7 +213,7 @@ asm __volatile__ ( \ #else /* 64-bit words then */ #define STORE32H(x, y) \ - { unsigned long __t = (x); memcpy(y, &__t, 4); } + { ulong32 __t = (x); memcpy(y, &__t, 4); } #define LOAD32H(x, y) \ { memcpy(&(x), y, 4); x &= 0xFFFFFFFF; } @@ -371,3 +371,7 @@ static inline unsigned long ROR64c(unsigned long word, const int i) #else #define byte(x, n) (((x) >> (8 * (n))) & 255) #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/headers/tomcrypt_misc.h b/src/headers/tomcrypt_misc.h index bed5015..358e80e 100644 --- a/src/headers/tomcrypt_misc.h +++ b/src/headers/tomcrypt_misc.h @@ -15,3 +15,7 @@ const char *error_to_string(int err); int mpi_to_ltc_error(int err); extern const char *crypt_build_settings; + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/headers/tomcrypt_pk.h b/src/headers/tomcrypt_pk.h index 065ca99..08b16ff 100644 --- a/src/headers/tomcrypt_pk.h +++ b/src/headers/tomcrypt_pk.h @@ -84,9 +84,6 @@ int packet_valid_header(unsigned char *src, int section, int subsection); #define MIN_RSA_SIZE 1024 #define MAX_RSA_SIZE 4096 -/* Stack required for temps (plus padding) */ -// #define RSA_STACK (8 + (MAX_RSA_SIZE/8)) - typedef struct Rsa_key { int type; mp_int e, d, N, p, q, qP, dP, dQ; @@ -123,26 +120,6 @@ int rsa_verify_hash(const unsigned char *sig, unsigned long siglen, int hash_idx, unsigned long saltlen, int *stat, rsa_key *key); -/* these use PKCS #1 v1.5 padding */ -int rsa_v15_encrypt_key(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen, - prng_state *prng, int prng_idx, - rsa_key *key); - -int rsa_v15_decrypt_key(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long outlen, - int *stat, rsa_key *key); - -int rsa_v15_sign_hash(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *siglen, - int hash_idx, rsa_key *key); - -int rsa_v15_verify_hash(const unsigned char *sig, unsigned long siglen, - const unsigned char *hash, unsigned long hashlen, - int hash_idx, int *stat, - rsa_key *key); - - /* 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); @@ -244,10 +221,19 @@ typedef struct { int dsa_make_key(prng_state *prng, int wprng, int group_size, int modulus_size, dsa_key *key); void dsa_free(dsa_key *key); + +int dsa_sign_hash_raw(const unsigned char *in, unsigned long inlen, + mp_int *r, mp_int *s, + prng_state *prng, int wprng, dsa_key *key); + int dsa_sign_hash(const unsigned char *in, unsigned long inlen, unsigned char *out, unsigned long *outlen, prng_state *prng, int wprng, dsa_key *key); +int dsa_verify_hash_raw( mp_int *r, mp_int *s, + const unsigned char *hash, unsigned long hashlen, + int *stat, dsa_key *key); + int dsa_verify_hash(const unsigned char *sig, unsigned long siglen, const unsigned char *hash, unsigned long hashlen, int *stat, dsa_key *key); @@ -262,9 +248,104 @@ int dsa_verify_key(dsa_key *key, int *stat); #ifdef LTC_DER /* DER handling */ + +enum { + LTC_ASN1_EOL, + LTC_ASN1_INTEGER, + LTC_ASN1_SHORT_INTEGER, + LTC_ASN1_BIT_STRING, + LTC_ASN1_OCTET_STRING, + LTC_ASN1_NULL, + LTC_ASN1_OBJECT_IDENTIFIER, + LTC_ASN1_IA5_STRING, + LTC_ASN1_PRINTABLE_STRING, + + LTC_ASN1_SEQUENCE +}; + +typedef struct { + int type; + void *data; + unsigned long size; +} ltc_asn1_list; + +#define LTC_SET_ASN1(list, index, Type, Data, Size) \ + do { \ + int LTC_MACRO_temp = (index); \ + ltc_asn1_list *LTC_MACRO_list = (list); \ + LTC_MACRO_list[LTC_MACRO_temp].type = (Type); \ + LTC_MACRO_list[LTC_MACRO_temp].data = (Data); \ + LTC_MACRO_list[LTC_MACRO_temp].size = (Size); \ + } while (0); + +/* SEQUENCE */ +int der_encode_sequence(ltc_asn1_list *list, unsigned long inlen, + unsigned char *out, unsigned long *outlen); + +int der_decode_sequence(const unsigned char *in, unsigned long inlen, + ltc_asn1_list *list, unsigned long outlen); + +int der_length_sequence(ltc_asn1_list *list, unsigned long inlen, + unsigned long *outlen); + +/* VA list handy helpers */ +int der_encode_sequence_multi(unsigned char *out, unsigned long *outlen, ...); +int der_decode_sequence_multi(const unsigned char *in, unsigned long inlen, ...); + +/* INTEGER */ int der_encode_integer(mp_int *num, unsigned char *out, unsigned long *outlen); -int der_decode_integer(const unsigned char *in, unsigned long *inlen, mp_int *num); +int der_decode_integer(const unsigned char *in, unsigned long inlen, mp_int *num); int der_length_integer(mp_int *num, unsigned long *len); -int der_put_multi_integer(unsigned char *dst, unsigned long *outlen, mp_int *num, ...); -int der_get_multi_integer(const unsigned char *src, unsigned long *inlen, mp_int *num, ...); + +/* INTEGER -- handy for 0..2^32-1 values */ +int der_decode_short_integer(const unsigned char *in, unsigned long inlen, unsigned long *num); +int der_encode_short_integer(unsigned long num, unsigned char *out, unsigned long *outlen); +int der_length_short_integer(unsigned long num, unsigned long *outlen); + +/* BIT STRING */ +int der_encode_bit_string(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen); +int der_decode_bit_string(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen); +int der_length_bit_string(unsigned long nbits, unsigned long *outlen); + +/* OCTET STRING */ +int der_encode_octet_string(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen); +int der_decode_octet_string(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen); +int der_length_octet_string(unsigned long noctets, unsigned long *outlen); + +/* OBJECT IDENTIFIER */ +int der_encode_object_identifier(unsigned long *words, unsigned long nwords, + unsigned char *out, unsigned long *outlen); +int der_decode_object_identifier(const unsigned char *in, unsigned long inlen, + unsigned long *words, unsigned long *outlen); +int der_length_object_identifier(unsigned long *words, unsigned long nwords, unsigned long *outlen); +unsigned long der_object_identifier_bits(unsigned long x); + +/* IA5 STRING */ +int der_encode_ia5_string(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen); +int der_decode_ia5_string(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen); +int der_length_ia5_string(const unsigned char *octets, unsigned long noctets, unsigned long *outlen); + +int der_ia5_char_encode(int c); +int der_ia5_value_decode(int v); + +/* Printable STRING */ +int der_encode_printable_string(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen); +int der_decode_printable_string(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen); +int der_length_printable_string(const unsigned char *octets, unsigned long noctets, unsigned long *outlen); + +int der_printable_char_encode(int c); +int der_printable_value_decode(int v); + #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/headers/tomcrypt_pkcs.h b/src/headers/tomcrypt_pkcs.h index 9fd0581..b44544a 100644 --- a/src/headers/tomcrypt_pkcs.h +++ b/src/headers/tomcrypt_pkcs.h @@ -10,7 +10,7 @@ int pkcs_1_mgf1(const unsigned char *seed, unsigned long seedlen, int pkcs_1_i2osp(mp_int *n, unsigned long modulus_len, unsigned char *out); int pkcs_1_os2ip(mp_int *n, unsigned char *in, unsigned long inlen); -/* *** v2.0 padding */ +/* *** v2.1 padding */ int pkcs_1_oaep_encode(const unsigned char *msg, unsigned long msglen, const unsigned char *lparam, unsigned long lparamlen, unsigned long modulus_bitlen, prng_state *prng, @@ -34,32 +34,6 @@ int pkcs_1_pss_decode(const unsigned char *msghash, unsigned long msghashlen, unsigned long saltlen, int hash_idx, unsigned long modulus_bitlen, int *res); -/* *** v1.5 padding */ -/* encryption padding */ -int pkcs_1_v15_es_encode(const unsigned char *msg, unsigned long msglen, - unsigned long modulus_bitlen, - prng_state *prng, int prng_idx, - unsigned char *out, unsigned long *outlen); - -/* note "outlen" is fixed, you have to tell this decoder how big - * the original message was. Unlike the OAEP decoder it cannot auto-detect it. - */ -int pkcs_1_v15_es_decode(const unsigned char *msg, unsigned long msglen, - unsigned long modulus_bitlen, - unsigned char *out, unsigned long outlen, - int *res); - -/* signature padding */ -int pkcs_1_v15_sa_encode(const unsigned char *msghash, unsigned long msghashlen, - int hash_idx, unsigned long modulus_bitlen, - unsigned char *out, unsigned long *outlen); - -int pkcs_1_v15_sa_decode(const unsigned char *msghash, unsigned long msghashlen, - const unsigned char *sig, unsigned long siglen, - int hash_idx, unsigned long modulus_bitlen, - int *res); - - #endif /* PKCS_1 */ /* ===> PKCS #5 -- Password Based Cryptography <=== */ @@ -78,3 +52,7 @@ int pkcs_5_alg2(const unsigned char *password, unsigned long password_len, unsigned char *out, unsigned long *outlen); #endif /* PKCS_5 */ + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/headers/tomcrypt_prng.h b/src/headers/tomcrypt_prng.h index 2ae5749..a257f4c 100644 --- a/src/headers/tomcrypt_prng.h +++ b/src/headers/tomcrypt_prng.h @@ -188,3 +188,7 @@ unsigned long rng_get_bytes(unsigned char *out, int rng_make_prng(int bits, int wprng, prng_state *prng, void (*callback)(void)); + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/headers/tommath_class.h b/src/headers/tommath_class.h index 6d05b7b..653e311 100644 --- a/src/headers/tommath_class.h +++ b/src/headers/tommath_class.h @@ -992,3 +992,7 @@ #else #define LTM_LAST #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/headers/tommath_superclass.h b/src/headers/tommath_superclass.h index b50ecb0..eb8b862 100644 --- a/src/headers/tommath_superclass.h +++ b/src/headers/tommath_superclass.h @@ -1,10 +1,14 @@ /* super class file for PK algos */ /* default ... include all MPI */ +#ifndef SC_RSA_1 + #define LTM_ALL +#endif + /* RSA only (does not support DH/DSA/ECC) */ -// #define SC_RSA_1 +/* #define SC_RSA_1 */ /* For reference.... On an Athlon64 optimizing for speed... @@ -70,3 +74,7 @@ #endif #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/mac/hmac/hmac_done.c b/src/mac/hmac/hmac_done.c index fdf20be..3803ab4 100644 --- a/src/mac/hmac/hmac_done.c +++ b/src/mac/hmac/hmac_done.c @@ -103,3 +103,7 @@ LBL_ERR: } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/mac/hmac/hmac_file.c b/src/mac/hmac/hmac_file.c index edbb6a6..b7b3914 100644 --- a/src/mac/hmac/hmac_file.c +++ b/src/mac/hmac/hmac_file.c @@ -87,3 +87,7 @@ int hmac_file(int hash, const char *fname, #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/mac/hmac/hmac_init.c b/src/mac/hmac/hmac_init.c index d060a5b..e5d7f90 100644 --- a/src/mac/hmac/hmac_init.c +++ b/src/mac/hmac/hmac_init.c @@ -106,3 +106,7 @@ done: } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/mac/hmac/hmac_memory.c b/src/mac/hmac/hmac_memory.c index 036ee36..2a84745 100644 --- a/src/mac/hmac/hmac_memory.c +++ b/src/mac/hmac/hmac_memory.c @@ -71,3 +71,7 @@ LBL_ERR: #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/mac/hmac/hmac_memory_multi.c b/src/mac/hmac/hmac_memory_multi.c index 4a5b9be..13f0e43 100644 --- a/src/mac/hmac/hmac_memory_multi.c +++ b/src/mac/hmac/hmac_memory_multi.c @@ -86,3 +86,7 @@ LBL_ERR: #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/mac/hmac/hmac_process.c b/src/mac/hmac/hmac_process.c index 30e64c3..dd4a3b2 100644 --- a/src/mac/hmac/hmac_process.c +++ b/src/mac/hmac/hmac_process.c @@ -37,3 +37,7 @@ int hmac_process(hmac_state *hmac, const unsigned char *in, unsigned long inlen) #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/mac/hmac/hmac_test.c b/src/mac/hmac/hmac_test.c index 0d542d4..44c6156 100644 --- a/src/mac/hmac/hmac_test.c +++ b/src/mac/hmac/hmac_test.c @@ -310,3 +310,7 @@ Key First" #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/mac/omac/omac_done.c b/src/mac/omac/omac_done.c index 0a91a14..7291884 100644 --- a/src/mac/omac/omac_done.c +++ b/src/mac/omac/omac_done.c @@ -78,3 +78,7 @@ int omac_done(omac_state *omac, unsigned char *out, unsigned long *outlen) #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/mac/omac/omac_file.c b/src/mac/omac/omac_file.c index 1e3d2f6..4f0cdc0 100644 --- a/src/mac/omac/omac_file.c +++ b/src/mac/omac/omac_file.c @@ -77,3 +77,7 @@ int omac_file(int cipher, } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/mac/omac/omac_init.c b/src/mac/omac/omac_init.c index d39219d..dc0678b 100644 --- a/src/mac/omac/omac_init.c +++ b/src/mac/omac/omac_init.c @@ -39,7 +39,7 @@ int omac_init(omac_state *omac, int cipher, const unsigned char *key, unsigned l } #ifdef LTC_FAST - if (16 % sizeof(LTC_FAST_TYPE)) { + if (cipher_descriptor[cipher].block_length % sizeof(LTC_FAST_TYPE)) { return CRYPT_INVALID_ARG; } #endif @@ -93,3 +93,7 @@ int omac_init(omac_state *omac, int cipher, const unsigned char *key, unsigned l } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/mac/omac/omac_memory.c b/src/mac/omac/omac_memory.c index 51d0ce2..ff3315a 100644 --- a/src/mac/omac/omac_memory.c +++ b/src/mac/omac/omac_memory.c @@ -69,3 +69,7 @@ LBL_ERR: } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/mac/omac/omac_memory_multi.c b/src/mac/omac/omac_memory_multi.c index 76e4eb0..5278fe8 100644 --- a/src/mac/omac/omac_memory_multi.c +++ b/src/mac/omac/omac_memory_multi.c @@ -84,3 +84,7 @@ LBL_ERR: } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/mac/omac/omac_process.c b/src/mac/omac/omac_process.c index 6b603f7..6491165 100644 --- a/src/mac/omac/omac_process.c +++ b/src/mac/omac/omac_process.c @@ -27,7 +27,8 @@ */ int omac_process(omac_state *omac, const unsigned char *in, unsigned long inlen) { - int err, n, x; + unsigned long n, x; + int err; LTC_ARGCHK(omac != NULL); LTC_ARGCHK(in != NULL); @@ -57,7 +58,7 @@ int omac_process(omac_state *omac, const unsigned char *in, unsigned long inlen) while (inlen != 0) { /* ok if the block is full we xor in prev, encrypt and replace prev */ if (omac->buflen == omac->blklen) { - for (x = 0; x < omac->blklen; x++) { + for (x = 0; x < (unsigned long)omac->blklen; x++) { omac->block[x] ^= omac->prev[x]; } cipher_descriptor[omac->cipher_idx].ecb_encrypt(omac->block, omac->prev, &omac->key); @@ -77,3 +78,7 @@ int omac_process(omac_state *omac, const unsigned char *in, unsigned long inlen) #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/mac/omac/omac_test.c b/src/mac/omac/omac_test.c index 42e42bd..da9a2de 100644 --- a/src/mac/omac/omac_test.c +++ b/src/mac/omac/omac_test.c @@ -104,3 +104,7 @@ int omac_test(void) } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/mac/pelican/pelican.c b/src/mac/pelican/pelican.c index fb7ce58..45ed7e8 100644 --- a/src/mac/pelican/pelican.c +++ b/src/mac/pelican/pelican.c @@ -102,6 +102,12 @@ int pelican_process(pelican_state *pelmac, const unsigned char *in, unsigned lon LTC_ARGCHK(pelmac != NULL); LTC_ARGCHK(in != NULL); + + /* check range */ + if (pelmac->buflen < 0 || pelmac->buflen > 15) { + return CRYPT_INVALID_ARG; + } + #ifdef LTC_FAST if (pelmac->buflen == 0) { while (inlen & ~15) { @@ -136,6 +142,12 @@ int pelican_done(pelican_state *pelmac, unsigned char *out) { LTC_ARGCHK(pelmac != NULL); LTC_ARGCHK(out != NULL); + + /* check range */ + if (pelmac->buflen < 0 || pelmac->buflen > 16) { + return CRYPT_INVALID_ARG; + } + if (pelmac->buflen == 16) { four_rounds(pelmac); pelmac->buflen = 0; @@ -147,3 +159,7 @@ int pelican_done(pelican_state *pelmac, unsigned char *out) } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/mac/pelican/pelican_memory.c b/src/mac/pelican/pelican_memory.c index 9e0fc7b..1924031 100644 --- a/src/mac/pelican/pelican_memory.c +++ b/src/mac/pelican/pelican_memory.c @@ -53,3 +53,7 @@ int pelican_memory(const unsigned char *key, unsigned long keylen, #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/mac/pelican/pelican_test.c b/src/mac/pelican/pelican_test.c index e694f61..9024803 100644 --- a/src/mac/pelican/pelican_test.c +++ b/src/mac/pelican/pelican_test.c @@ -114,3 +114,7 @@ int pelican_test(void) #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/mac/pmac/pmac_done.c b/src/mac/pmac/pmac_done.c index 610e433..f6a08ce 100644 --- a/src/mac/pmac/pmac_done.c +++ b/src/mac/pmac/pmac_done.c @@ -66,3 +66,7 @@ int pmac_done(pmac_state *state, unsigned char *out, unsigned long *outlen) #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/mac/pmac/pmac_file.c b/src/mac/pmac/pmac_file.c index 5b7dd24..79cc2e2 100644 --- a/src/mac/pmac/pmac_file.c +++ b/src/mac/pmac/pmac_file.c @@ -78,3 +78,7 @@ int pmac_file(int cipher, } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/mac/pmac/pmac_init.c b/src/mac/pmac/pmac_init.c index a02b20c..1b21e50 100644 --- a/src/mac/pmac/pmac_init.c +++ b/src/mac/pmac/pmac_init.c @@ -138,3 +138,7 @@ int pmac_init(pmac_state *pmac, int cipher, const unsigned char *key, unsigned l } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/mac/pmac/pmac_memory.c b/src/mac/pmac/pmac_memory.c index a04cd78..88036ec 100644 --- a/src/mac/pmac/pmac_memory.c +++ b/src/mac/pmac/pmac_memory.c @@ -68,3 +68,7 @@ LBL_ERR: } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/mac/pmac/pmac_memory_multi.c b/src/mac/pmac/pmac_memory_multi.c index 289d2e0..bc42b8c 100644 --- a/src/mac/pmac/pmac_memory_multi.c +++ b/src/mac/pmac/pmac_memory_multi.c @@ -83,3 +83,7 @@ LBL_ERR: } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/mac/pmac/pmac_ntz.c b/src/mac/pmac/pmac_ntz.c index 97f0a15..2c16648 100644 --- a/src/mac/pmac/pmac_ntz.c +++ b/src/mac/pmac/pmac_ntz.c @@ -33,3 +33,7 @@ int pmac_ntz(unsigned long x) } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/mac/pmac/pmac_process.c b/src/mac/pmac/pmac_process.c index 5cee5ec..81fbc8c 100644 --- a/src/mac/pmac/pmac_process.c +++ b/src/mac/pmac/pmac_process.c @@ -90,3 +90,7 @@ int pmac_process(pmac_state *pmac, const unsigned char *in, unsigned long inlen) } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/mac/pmac/pmac_shift_xor.c b/src/mac/pmac/pmac_shift_xor.c index 18c6141..f0c367e 100644 --- a/src/mac/pmac/pmac_shift_xor.c +++ b/src/mac/pmac/pmac_shift_xor.c @@ -38,3 +38,7 @@ void pmac_shift_xor(pmac_state *pmac) } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/mac/pmac/pmac_test.c b/src/mac/pmac/pmac_test.c index 6c610f9..30f606c 100644 --- a/src/mac/pmac/pmac_test.c +++ b/src/mac/pmac/pmac_test.c @@ -159,3 +159,7 @@ int pmac_test(void) + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/misc/base64/base64_decode.c b/src/misc/base64/base64_decode.c index ac6db57..320f201 100644 --- a/src/misc/base64/base64_decode.c +++ b/src/misc/base64/base64_decode.c @@ -98,3 +98,7 @@ int base64_decode(const unsigned char *in, unsigned long inlen, #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/misc/base64/base64_encode.c b/src/misc/base64/base64_encode.c index 047980c..6173cb9 100644 --- a/src/misc/base64/base64_encode.c +++ b/src/misc/base64/base64_encode.c @@ -74,3 +74,7 @@ int base64_encode(const unsigned char *in, unsigned long inlen, #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/misc/burn_stack.c b/src/misc/burn_stack.c index 3bc69ab..c7edc03 100644 --- a/src/misc/burn_stack.c +++ b/src/misc/burn_stack.c @@ -28,3 +28,7 @@ void burn_stack(unsigned long len) } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/misc/crypt/crypt.c b/src/misc/crypt/crypt.c index 83f1414..99c07a8 100644 --- a/src/misc/crypt/crypt.c +++ b/src/misc/crypt/crypt.c @@ -295,8 +295,18 @@ const char *crypt_build_settings = #endif #if defined(LTC_NO_ASM) " LTC_NO_ASM " +#endif +#if defined(LTC_NO_TEST) + " LTC_NO_TEST " +#endif +#if defined(LTC_NO_TABLES) + " LTC_NO_TABLES " #endif "\n" "\n\n\n" ; + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/misc/crypt/crypt_argchk.c b/src/misc/crypt/crypt_argchk.c index d345c8d..2ba8a85 100644 --- a/src/misc/crypt/crypt_argchk.c +++ b/src/misc/crypt/crypt_argchk.c @@ -24,3 +24,7 @@ void crypt_argchk(char *v, char *s, int d) (void)raise(SIGABRT); } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/misc/crypt/crypt_cipher_descriptor.c b/src/misc/crypt/crypt_cipher_descriptor.c index e274449..a255ec6 100644 --- a/src/misc/crypt/crypt_cipher_descriptor.c +++ b/src/misc/crypt/crypt_cipher_descriptor.c @@ -19,3 +19,7 @@ struct ltc_cipher_descriptor cipher_descriptor[TAB_SIZE] = { { NULL, 0, 0, 0, 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL } }; + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/misc/crypt/crypt_cipher_is_valid.c b/src/misc/crypt/crypt_cipher_is_valid.c index b179402..d5db7bc 100644 --- a/src/misc/crypt/crypt_cipher_is_valid.c +++ b/src/misc/crypt/crypt_cipher_is_valid.c @@ -27,3 +27,7 @@ int cipher_is_valid(int idx) } return CRYPT_OK; } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/misc/crypt/crypt_find_cipher.c b/src/misc/crypt/crypt_find_cipher.c index b83109c..230b908 100644 --- a/src/misc/crypt/crypt_find_cipher.c +++ b/src/misc/crypt/crypt_find_cipher.c @@ -32,3 +32,7 @@ int find_cipher(const char *name) return -1; } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/misc/crypt/crypt_find_cipher_any.c b/src/misc/crypt/crypt_find_cipher_any.c index 42e59c0..fe669f3 100644 --- a/src/misc/crypt/crypt_find_cipher_any.c +++ b/src/misc/crypt/crypt_find_cipher_any.c @@ -41,3 +41,7 @@ int find_cipher_any(const char *name, int blocklen, int keylen) } return -1; } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/misc/crypt/crypt_find_cipher_id.c b/src/misc/crypt/crypt_find_cipher_id.c index 986baf5..766fb01 100644 --- a/src/misc/crypt/crypt_find_cipher_id.c +++ b/src/misc/crypt/crypt_find_cipher_id.c @@ -30,3 +30,7 @@ int find_cipher_id(unsigned char ID) } return -1; } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/misc/crypt/crypt_find_hash.c b/src/misc/crypt/crypt_find_hash.c index d66201c..c580103 100644 --- a/src/misc/crypt/crypt_find_hash.c +++ b/src/misc/crypt/crypt_find_hash.c @@ -31,3 +31,7 @@ int find_hash(const char *name) } return -1; } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/misc/crypt/crypt_find_hash_any.c b/src/misc/crypt/crypt_find_hash_any.c index 0d6d430..98c277e 100644 --- a/src/misc/crypt/crypt_find_hash_any.c +++ b/src/misc/crypt/crypt_find_hash_any.c @@ -41,3 +41,7 @@ } return z; } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/misc/crypt/crypt_find_hash_id.c b/src/misc/crypt/crypt_find_hash_id.c index 8628d53..7c23864 100644 --- a/src/misc/crypt/crypt_find_hash_id.c +++ b/src/misc/crypt/crypt_find_hash_id.c @@ -30,3 +30,7 @@ int find_hash_id(unsigned char ID) } return -1; } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/misc/crypt/crypt_find_prng.c b/src/misc/crypt/crypt_find_prng.c index c01a023..554083e 100644 --- a/src/misc/crypt/crypt_find_prng.c +++ b/src/misc/crypt/crypt_find_prng.c @@ -32,3 +32,7 @@ int find_prng(const char *name) return -1; } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/misc/crypt/crypt_hash_descriptor.c b/src/misc/crypt/crypt_hash_descriptor.c index cbd6d03..969ff83 100644 --- a/src/misc/crypt/crypt_hash_descriptor.c +++ b/src/misc/crypt/crypt_hash_descriptor.c @@ -18,3 +18,7 @@ struct ltc_hash_descriptor hash_descriptor[TAB_SIZE] = { { NULL, 0, 0, 0, { 0 }, 0, NULL, NULL, NULL, NULL } }; + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/misc/crypt/crypt_hash_is_valid.c b/src/misc/crypt/crypt_hash_is_valid.c index c9784b8..103f71b 100644 --- a/src/misc/crypt/crypt_hash_is_valid.c +++ b/src/misc/crypt/crypt_hash_is_valid.c @@ -27,3 +27,7 @@ int hash_is_valid(int idx) } return CRYPT_OK; } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/misc/crypt/crypt_prng_descriptor.c b/src/misc/crypt/crypt_prng_descriptor.c index 8a99510..8b8ad34 100644 --- a/src/misc/crypt/crypt_prng_descriptor.c +++ b/src/misc/crypt/crypt_prng_descriptor.c @@ -17,3 +17,7 @@ struct ltc_prng_descriptor prng_descriptor[TAB_SIZE] = { { NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL } }; + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/misc/crypt/crypt_prng_is_valid.c b/src/misc/crypt/crypt_prng_is_valid.c index 7795bbb..f8ccbcf 100644 --- a/src/misc/crypt/crypt_prng_is_valid.c +++ b/src/misc/crypt/crypt_prng_is_valid.c @@ -27,3 +27,7 @@ int prng_is_valid(int idx) } return CRYPT_OK; } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/misc/crypt/crypt_register_cipher.c b/src/misc/crypt/crypt_register_cipher.c index 74349e6..4fea824 100644 --- a/src/misc/crypt/crypt_register_cipher.c +++ b/src/misc/crypt/crypt_register_cipher.c @@ -44,3 +44,7 @@ int register_cipher(const struct ltc_cipher_descriptor *cipher) /* no spot */ return -1; } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/misc/crypt/crypt_register_hash.c b/src/misc/crypt/crypt_register_hash.c index d5cf5b8..3ece4f7 100644 --- a/src/misc/crypt/crypt_register_hash.c +++ b/src/misc/crypt/crypt_register_hash.c @@ -44,3 +44,7 @@ int register_hash(const struct ltc_hash_descriptor *hash) /* no spot */ return -1; } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/misc/crypt/crypt_register_prng.c b/src/misc/crypt/crypt_register_prng.c index 6a1be77..59eb456 100644 --- a/src/misc/crypt/crypt_register_prng.c +++ b/src/misc/crypt/crypt_register_prng.c @@ -44,3 +44,7 @@ int register_prng(const struct ltc_prng_descriptor *prng) /* no spot */ return -1; } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/misc/crypt/crypt_unregister_cipher.c b/src/misc/crypt/crypt_unregister_cipher.c index 0511de5..f8fdac9 100644 --- a/src/misc/crypt/crypt_unregister_cipher.c +++ b/src/misc/crypt/crypt_unregister_cipher.c @@ -36,3 +36,7 @@ int unregister_cipher(const struct ltc_cipher_descriptor *cipher) } return CRYPT_ERROR; } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/misc/crypt/crypt_unregister_hash.c b/src/misc/crypt/crypt_unregister_hash.c index 25e36f2..51f3eac 100644 --- a/src/misc/crypt/crypt_unregister_hash.c +++ b/src/misc/crypt/crypt_unregister_hash.c @@ -35,3 +35,7 @@ int unregister_hash(const struct ltc_hash_descriptor *hash) } return CRYPT_ERROR; } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/misc/crypt/crypt_unregister_prng.c b/src/misc/crypt/crypt_unregister_prng.c index 55cc554..5e90832 100644 --- a/src/misc/crypt/crypt_unregister_prng.c +++ b/src/misc/crypt/crypt_unregister_prng.c @@ -35,3 +35,7 @@ int unregister_prng(const struct ltc_prng_descriptor *prng) } return CRYPT_ERROR; } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/misc/error_to_string.c b/src/misc/error_to_string.c index 3a325a2..4958b5d 100644 --- a/src/misc/error_to_string.c +++ b/src/misc/error_to_string.c @@ -68,3 +68,7 @@ const char *error_to_string(int err) } } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/misc/mpi/is_prime.c b/src/misc/mpi/is_prime.c index f58391f..2fb7be5 100644 --- a/src/misc/mpi/is_prime.c +++ b/src/misc/mpi/is_prime.c @@ -30,3 +30,7 @@ int is_prime(mp_int *N, int *result) } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/misc/mpi/mpi.c b/src/misc/mpi/mpi.c index ba3a7ed..8348650 100644 --- a/src/misc/mpi/mpi.c +++ b/src/misc/mpi/mpi.c @@ -9042,3 +9042,7 @@ int KARATSUBA_MUL_CUTOFF = 74, /* Min. number of digits before Karatsub /* EOF */ + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/misc/mpi/mpi_to_ltc_error.c b/src/misc/mpi/mpi_to_ltc_error.c index 3a4ea17..c0a55f2 100644 --- a/src/misc/mpi/mpi_to_ltc_error.c +++ b/src/misc/mpi/mpi_to_ltc_error.c @@ -42,3 +42,7 @@ int mpi_to_ltc_error(int err) } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/misc/mpi/rand_prime.c b/src/misc/mpi/rand_prime.c index 97ddf73..90d9ac1 100644 --- a/src/misc/mpi/rand_prime.c +++ b/src/misc/mpi/rand_prime.c @@ -64,3 +64,7 @@ int rand_prime(mp_int *N, long len, prng_state *prng, int wprng) #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/misc/pkcs5/pkcs_5_1.c b/src/misc/pkcs5/pkcs_5_1.c index ec47372..fd1a80f 100644 --- a/src/misc/pkcs5/pkcs_5_1.c +++ b/src/misc/pkcs5/pkcs_5_1.c @@ -100,3 +100,7 @@ LBL_ERR: } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/misc/pkcs5/pkcs_5_2.c b/src/misc/pkcs5/pkcs_5_2.c index aac811b..aad0ae3 100644 --- a/src/misc/pkcs5/pkcs_5_2.c +++ b/src/misc/pkcs5/pkcs_5_2.c @@ -123,3 +123,7 @@ LBL_ERR: #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/misc/zeromem.c b/src/misc/zeromem.c index c640bb4..9145f82 100644 --- a/src/misc/zeromem.c +++ b/src/misc/zeromem.c @@ -28,3 +28,7 @@ void zeromem(void *out, size_t outlen) *mem++ = 0; } } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/cbc/cbc_decrypt.c b/src/modes/cbc/cbc_decrypt.c index c79631c..509c4b3 100644 --- a/src/modes/cbc/cbc_decrypt.c +++ b/src/modes/cbc/cbc_decrypt.c @@ -89,3 +89,7 @@ int cbc_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, s } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/cbc/cbc_done.c b/src/modes/cbc/cbc_done.c index daa9110..8efe10a 100644 --- a/src/modes/cbc/cbc_done.c +++ b/src/modes/cbc/cbc_done.c @@ -36,3 +36,7 @@ int cbc_done(symmetric_CBC *cbc) #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/cbc/cbc_encrypt.c b/src/modes/cbc/cbc_encrypt.c index 00ca05f..3266488 100644 --- a/src/modes/cbc/cbc_encrypt.c +++ b/src/modes/cbc/cbc_encrypt.c @@ -90,3 +90,7 @@ int cbc_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, s } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/cbc/cbc_getiv.c b/src/modes/cbc/cbc_getiv.c index 0f5c3e4..952a75e 100644 --- a/src/modes/cbc/cbc_getiv.c +++ b/src/modes/cbc/cbc_getiv.c @@ -39,3 +39,7 @@ int cbc_getiv(unsigned char *IV, unsigned long *len, symmetric_CBC *cbc) } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/cbc/cbc_setiv.c b/src/modes/cbc/cbc_setiv.c index f2e8b31..7dcae1f 100644 --- a/src/modes/cbc/cbc_setiv.c +++ b/src/modes/cbc/cbc_setiv.c @@ -38,3 +38,7 @@ int cbc_setiv(const unsigned char *IV, unsigned long len, symmetric_CBC *cbc) #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/cbc/cbc_start.c b/src/modes/cbc/cbc_start.c index 680faab..79c7555 100644 --- a/src/modes/cbc/cbc_start.c +++ b/src/modes/cbc/cbc_start.c @@ -56,3 +56,7 @@ int cbc_start(int cipher, const unsigned char *IV, const unsigned char *key, } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/cfb/cfb_decrypt.c b/src/modes/cfb/cfb_decrypt.c index 8b78898..6675df1 100644 --- a/src/modes/cfb/cfb_decrypt.c +++ b/src/modes/cfb/cfb_decrypt.c @@ -59,3 +59,7 @@ int cfb_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, s #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/cfb/cfb_done.c b/src/modes/cfb/cfb_done.c index 04e775c..804a7be 100644 --- a/src/modes/cfb/cfb_done.c +++ b/src/modes/cfb/cfb_done.c @@ -36,3 +36,7 @@ int cfb_done(symmetric_CFB *cfb) #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/cfb/cfb_encrypt.c b/src/modes/cfb/cfb_encrypt.c index b960368..681d8cd 100644 --- a/src/modes/cfb/cfb_encrypt.c +++ b/src/modes/cfb/cfb_encrypt.c @@ -57,3 +57,7 @@ int cfb_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, s } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/cfb/cfb_getiv.c b/src/modes/cfb/cfb_getiv.c index e59c1e4..73d1a82 100644 --- a/src/modes/cfb/cfb_getiv.c +++ b/src/modes/cfb/cfb_getiv.c @@ -39,3 +39,7 @@ int cfb_getiv(unsigned char *IV, unsigned long *len, symmetric_CFB *cfb) } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/cfb/cfb_setiv.c b/src/modes/cfb/cfb_setiv.c index e475ad9..4eedaa8 100644 --- a/src/modes/cfb/cfb_setiv.c +++ b/src/modes/cfb/cfb_setiv.c @@ -47,3 +47,7 @@ int cfb_setiv(const unsigned char *IV, unsigned long len, symmetric_CFB *cfb) #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/cfb/cfb_start.c b/src/modes/cfb/cfb_start.c index 7157fc3..e07fc0c 100644 --- a/src/modes/cfb/cfb_start.c +++ b/src/modes/cfb/cfb_start.c @@ -61,3 +61,7 @@ int cfb_start(int cipher, const unsigned char *IV, const unsigned char *key, } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/ctr/ctr_decrypt.c b/src/modes/ctr/ctr_decrypt.c index daa78a8..8e5c6f7 100644 --- a/src/modes/ctr/ctr_decrypt.c +++ b/src/modes/ctr/ctr_decrypt.c @@ -36,3 +36,7 @@ int ctr_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, s #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/ctr/ctr_done.c b/src/modes/ctr/ctr_done.c index 88508ba..b87baad 100644 --- a/src/modes/ctr/ctr_done.c +++ b/src/modes/ctr/ctr_done.c @@ -36,3 +36,7 @@ int ctr_done(symmetric_CTR *ctr) #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/ctr/ctr_encrypt.c b/src/modes/ctr/ctr_encrypt.c index a96b806..cf46216 100644 --- a/src/modes/ctr/ctr_encrypt.c +++ b/src/modes/ctr/ctr_encrypt.c @@ -60,7 +60,7 @@ int ctr_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, s /* is the pad empty? */ if (ctr->padlen == ctr->blocklen) { /* increment counter */ - if (ctr->mode == 0) { + if (ctr->mode == CTR_COUNTER_LITTLE_ENDIAN) { /* little-endian */ for (x = 0; x < ctr->blocklen; x++) { ctr->ctr[x] = (ctr->ctr[x] + (unsigned char)1) & (unsigned char)255; @@ -102,3 +102,7 @@ int ctr_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, s } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/ctr/ctr_getiv.c b/src/modes/ctr/ctr_getiv.c index 3997033..10cdf8e 100644 --- a/src/modes/ctr/ctr_getiv.c +++ b/src/modes/ctr/ctr_getiv.c @@ -39,3 +39,7 @@ int ctr_getiv(unsigned char *IV, unsigned long *len, symmetric_CTR *ctr) } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/ctr/ctr_setiv.c b/src/modes/ctr/ctr_setiv.c index 2aab190..e533b6e 100644 --- a/src/modes/ctr/ctr_setiv.c +++ b/src/modes/ctr/ctr_setiv.c @@ -52,3 +52,7 @@ int ctr_setiv(const unsigned char *IV, unsigned long len, symmetric_CTR *ctr) #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/ctr/ctr_start.c b/src/modes/ctr/ctr_start.c index db8c464..47431d2 100644 --- a/src/modes/ctr/ctr_start.c +++ b/src/modes/ctr/ctr_start.c @@ -21,19 +21,23 @@ /** Initialize a CTR context @param cipher The index of the cipher desired - @param count The initial vector + @param IV The initial vector @param key The secret key @param keylen The length of the secret key (octets) @param num_rounds Number of rounds in the cipher desired (0 for default) + @param ctr_mode The counter mode (CTR_COUNTER_LITTLE_ENDIAN or CTR_COUNTER_BIG_ENDIAN) @param ctr The CTR state to initialize @return CRYPT_OK if successful */ -int ctr_start(int cipher, const unsigned char *count, const unsigned char *key, int keylen, - int num_rounds, symmetric_CTR *ctr) +int ctr_start( int cipher, + const unsigned char *IV, + const unsigned char *key, int keylen, + int num_rounds, int ctr_mode, + symmetric_CTR *ctr) { int x, err; - LTC_ARGCHK(count != NULL); + LTC_ARGCHK(IV != NULL); LTC_ARGCHK(key != NULL); LTC_ARGCHK(ctr != NULL); @@ -51,12 +55,16 @@ int ctr_start(int cipher, const unsigned char *count, const unsigned char *key, ctr->blocklen = cipher_descriptor[cipher].block_length; ctr->cipher = cipher; ctr->padlen = 0; - ctr->mode = 0; + ctr->mode = ctr_mode; for (x = 0; x < ctr->blocklen; x++) { - ctr->ctr[x] = count[x]; + ctr->ctr[x] = IV[x]; } cipher_descriptor[ctr->cipher].ecb_encrypt(ctr->ctr, ctr->pad, &ctr->key); return CRYPT_OK; } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/ecb/ecb_decrypt.c b/src/modes/ecb/ecb_decrypt.c index 8db4d37..97eeb70 100644 --- a/src/modes/ecb/ecb_decrypt.c +++ b/src/modes/ecb/ecb_decrypt.c @@ -53,3 +53,7 @@ int ecb_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, s } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/ecb/ecb_done.c b/src/modes/ecb/ecb_done.c index 31a42fa..a52be38 100644 --- a/src/modes/ecb/ecb_done.c +++ b/src/modes/ecb/ecb_done.c @@ -18,7 +18,7 @@ #ifdef ECB /** Terminate the chain - @param rcb The ECB chain to terminate + @param ecb The ECB chain to terminate @return CRYPT_OK on success */ int ecb_done(symmetric_ECB *ecb) @@ -36,3 +36,7 @@ int ecb_done(symmetric_ECB *ecb) #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/ecb/ecb_encrypt.c b/src/modes/ecb/ecb_encrypt.c index dc045e9..74adb0b 100644 --- a/src/modes/ecb/ecb_encrypt.c +++ b/src/modes/ecb/ecb_encrypt.c @@ -53,3 +53,7 @@ int ecb_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, s } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/ecb/ecb_start.c b/src/modes/ecb/ecb_start.c index a8b6d45..0bae3fe 100644 --- a/src/modes/ecb/ecb_start.c +++ b/src/modes/ecb/ecb_start.c @@ -42,3 +42,7 @@ int ecb_start(int cipher, const unsigned char *key, int keylen, int num_rounds, } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/ofb/ofb_decrypt.c b/src/modes/ofb/ofb_decrypt.c index f725410..c69caba 100644 --- a/src/modes/ofb/ofb_decrypt.c +++ b/src/modes/ofb/ofb_decrypt.c @@ -37,3 +37,7 @@ int ofb_decrypt(const unsigned char *ct, unsigned char *pt, unsigned long len, s #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/ofb/ofb_done.c b/src/modes/ofb/ofb_done.c index ff72ddc..169832f 100644 --- a/src/modes/ofb/ofb_done.c +++ b/src/modes/ofb/ofb_done.c @@ -36,3 +36,7 @@ int ofb_done(symmetric_OFB *ofb) #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/ofb/ofb_encrypt.c b/src/modes/ofb/ofb_encrypt.c index 4409ac8..78e254d 100644 --- a/src/modes/ofb/ofb_encrypt.c +++ b/src/modes/ofb/ofb_encrypt.c @@ -52,3 +52,7 @@ int ofb_encrypt(const unsigned char *pt, unsigned char *ct, unsigned long len, s } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/ofb/ofb_getiv.c b/src/modes/ofb/ofb_getiv.c index eb8ef1e..4cb75fd 100644 --- a/src/modes/ofb/ofb_getiv.c +++ b/src/modes/ofb/ofb_getiv.c @@ -39,3 +39,7 @@ int ofb_getiv(unsigned char *IV, unsigned long *len, symmetric_OFB *ofb) } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/ofb/ofb_setiv.c b/src/modes/ofb/ofb_setiv.c index 96b3f1c..bf42222 100644 --- a/src/modes/ofb/ofb_setiv.c +++ b/src/modes/ofb/ofb_setiv.c @@ -47,3 +47,7 @@ int ofb_setiv(const unsigned char *IV, unsigned long len, symmetric_OFB *ofb) #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/modes/ofb/ofb_start.c b/src/modes/ofb/ofb_start.c index 977e6a3..9a40a44 100644 --- a/src/modes/ofb/ofb_start.c +++ b/src/modes/ofb/ofb_start.c @@ -54,3 +54,7 @@ int ofb_start(int cipher, const unsigned char *IV, const unsigned char *key, } #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 new file mode 100644 index 0000000..133d743 --- /dev/null +++ b/src/pk/asn1/der/bit/der_decode_bit_string.c @@ -0,0 +1,101 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org + */ +#include "tomcrypt.h" + +/** + @file der_decode_bit_string.c + ASN.1 DER, encode a BIT STRING, Tom St Denis +*/ + + +#ifdef LTC_DER + +/** + Store a BIT STRING + @param in The DER encoded BIT STRING + @param inlen The size of the DER BIT STRING + @param out [out] The array of bits stored (one per char) + @param outlen [in/out] The number of bits stored + @return CRYPT_OK if successful +*/ +int der_decode_bit_string(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen) +{ + unsigned long dlen, blen, x, y; + + LTC_ARGCHK(in != NULL); + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(outlen != NULL); + + /* packet must be at least 4 bytes */ + if (inlen < 4) { + return CRYPT_INVALID_ARG; + } + + /* check for 0x03 */ + if ((in[0]&0x1F) != 0x03) { + return CRYPT_INVALID_PACKET; + } + + /* offset in the data */ + x = 1; + + /* get the length of the data */ + if (in[x] & 0x80) { + /* long format get number of length bytes */ + y = in[x++] & 127; + + /* invalid if 0 or > 2 */ + if (y == 0 || y > 2) { + return CRYPT_INVALID_PACKET; + } + + /* read the data len */ + dlen = 0; + while (y--) { + dlen = (dlen << 8) | (unsigned long)in[x++]; + } + } else { + /* short format */ + dlen = in[x++] & 127; + } + + /* is the data len too long or too short? */ + if ((dlen == 0) || (dlen + x > inlen)) { + return CRYPT_INVALID_PACKET; + } + + /* get padding count */ + blen = ((dlen - 1) << 3) - (in[x++] & 7); + + /* too many bits? */ + if (blen > *outlen) { + return CRYPT_BUFFER_OVERFLOW; + } + + /* decode/store the bits */ + for (y = 0; y < blen; y++) { + out[y] = (in[x] & (1 << (7 - (y & 7)))) ? 1 : 0; + if ((y & 7) == 7) { + ++x; + } + } + + /* we done */ + *outlen = blen; + return CRYPT_OK; +} + +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/asn1/der/bit/der_encode_bit_string.c b/src/pk/asn1/der/bit/der_encode_bit_string.c new file mode 100644 index 0000000..497b317 --- /dev/null +++ b/src/pk/asn1/der/bit/der_encode_bit_string.c @@ -0,0 +1,87 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org + */ +#include "tomcrypt.h" + +/** + @file der_encode_bit_string.c + ASN.1 DER, encode a BIT STRING, Tom St Denis +*/ + + +#ifdef LTC_DER + +/** + Store a BIT STRING + @param in The array of bits to store (one per char) + @param inlen The number of bits tostore + @param out [out] The destination for the DER encoded BIT STRING + @param outlen [in/out] The max size and resulting size of the DER BIT STRING + @return CRYPT_OK if successful +*/ +int der_encode_bit_string(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen) +{ + unsigned long len, x, y, buf; + int err; + + LTC_ARGCHK(in != NULL); + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(outlen != NULL); + + /* avoid overflows */ + if ((err = der_length_bit_string(inlen, &len)) != CRYPT_OK) { + return err; + } + + if (len > *outlen) { + return CRYPT_BUFFER_OVERFLOW; + } + + /* store header (include bit padding count in length) */ + x = 0; + y = (inlen >> 3) + ((inlen&7) ? 1 : 0) + 1; + + out[x++] = 0x03; + if (y < 128) { + out[x++] = y; + } else if (y < 256) { + out[x++] = 0x81; + out[x++] = y; + } else if (y < 65536) { + out[x++] = 0x82; + out[x++] = (y>>8)&255; + out[x++] = y&255; + } + + /* store number of zero padding bits */ + out[x++] = (8 - inlen) & 7; + + /* store the bits in big endian format */ + for (y = buf = 0; y < inlen; y++) { + buf |= (in[y] ? 1 : 0) << (7 - (y & 7)); + if ((y & 7) == 7) { + out[x++] = buf; + buf = 0; + } + } + /* store last byte */ + if (inlen & 7) { + out[x++] = buf; + } + *outlen = x; + return CRYPT_OK; +} + +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/asn1/der/bit/der_length_bit_string.c b/src/pk/asn1/der/bit/der_length_bit_string.c new file mode 100644 index 0000000..bf3a614 --- /dev/null +++ b/src/pk/asn1/der/bit/der_length_bit_string.c @@ -0,0 +1,54 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org + */ +#include "tomcrypt.h" + +/** + @file der_length_bit_string.c + ASN.1 DER, get length of BIT STRING, Tom St Denis +*/ + +#ifdef LTC_DER +/** + Gets length of DER encoding of BIT STRING + @param nbits The number of bits in the string to encode + @param outlen [out] The length of the DER encoding for the given string + @return CRYPT_OK if successful +*/ +int der_length_bit_string(unsigned long nbits, unsigned long *outlen) +{ + unsigned long nbytes; + LTC_ARGCHK(outlen != NULL); + + /* get the number of the bytes */ + nbytes = (nbits >> 3) + ((nbits & 7) ? 1 : 0) + 1; + + if (nbytes < 128) { + /* 03 LL PP DD DD DD ... */ + *outlen = 2 + nbytes; + } else if (nbytes < 256) { + /* 03 81 LL PP DD DD DD ... */ + *outlen = 3 + nbytes; + } else if (nbytes < 65536) { + /* 03 82 LL LL PP DD DD DD ... */ + *outlen = 4 + nbytes; + } else { + return CRYPT_INVALID_ARG; + } + + return CRYPT_OK; +} + +#endif + + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/asn1/der/der_get_multi_integer.c b/src/pk/asn1/der/der_get_multi_integer.c deleted file mode 100644 index 75ae0bc..0000000 --- a/src/pk/asn1/der/der_get_multi_integer.c +++ /dev/null @@ -1,67 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis - * - * LibTomCrypt is a library that provides various cryptographic - * algorithms in a highly modular and flexible manner. - * - * The library is free for all purposes without any express - * guarantee it works. - * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org - */ -#include <stdarg.h> -#include "tomcrypt.h" - -/** - @file der_get_multi_integer.c - ASN.1 DER, read multiple integers, Tom St Denis -*/ - - -#ifdef LTC_DER - -/* will read multiple DER INTEGER encoded mp_ints from src - * of upto [inlen] bytes. It will store the number of bytes - * read back into [inlen]. - */ -/** - Read multiple mp_int integers one after another - @param src The DER encoded integers - @param inlen [in] The length of the src buffer, [out] the amount of bytes read - @param num The first mp_int to decode - @param ... A NULL terminated list of mp_ints to decode - @return CRYPT_OK if successful -*/ -int der_get_multi_integer(const unsigned char *src, unsigned long *inlen, - mp_int *num, ...) -{ - va_list args; - mp_int *next; - unsigned long wrote, len; - int err; - - LTC_ARGCHK(src != NULL); - LTC_ARGCHK(inlen != NULL); - - /* setup va list */ - next = num; - len = *inlen; - wrote = 0; - va_start(args, num); - - while (next != NULL) { - if ((err = der_decode_integer(src, inlen, next)) != CRYPT_OK) { - va_end(args); - return err; - } - wrote += *inlen; - src += *inlen; - len -= *inlen; - *inlen = len; - next = va_arg(args, mp_int*); - } - va_end(args); - *inlen = wrote; - return CRYPT_OK; -} - -#endif diff --git a/src/pk/asn1/der/der_put_multi_integer.c b/src/pk/asn1/der/der_put_multi_integer.c deleted file mode 100644 index af2ca88..0000000 --- a/src/pk/asn1/der/der_put_multi_integer.c +++ /dev/null @@ -1,67 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis - * - * LibTomCrypt is a library that provides various cryptographic - * algorithms in a highly modular and flexible manner. - * - * The library is free for all purposes without any express - * guarantee it works. - * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org - */ -#include <stdarg.h> -#include "tomcrypt.h" - -/** - @file der_put_multi_integer.c - ASN.1 DER, store multiple integers, Tom St Denis -*/ - - -#ifdef LTC_DER - -/* store multiple mp_ints in DER INTEGER format to the out, will not - * overflow the length you give it [outlen] and store the number of - * bytes used in [outlen] - */ -/** - Store multiple mp_int integers one after another - @param out [out] The destination for the DER encoded integers - @param outlen [in/out] The max size and resulting size of the DER encoded integers - @param num The first mp_int to encode - @param ... A NULL terminated list of mp_ints to encode - @return CRYPT_OK if successful -*/ -int der_put_multi_integer(unsigned char *out, unsigned long *outlen, - mp_int *num, ...) -{ - va_list args; - mp_int *next; - unsigned long wrote, len; - int err; - - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - /* setup va list */ - next = num; - len = *outlen; - wrote = 0; - va_start(args, num); - - while (next != NULL) { - if ((err = der_encode_integer(next, out, outlen)) != CRYPT_OK) { - va_end(args); - return err; - } - wrote += *outlen; - out += *outlen; - len -= *outlen; - *outlen = len; - next = va_arg(args, mp_int*); - } - va_end(args); - *outlen = wrote; - return CRYPT_OK; -} - -#endif diff --git a/src/pk/asn1/der/ia5/der_decode_ia5_string.c b/src/pk/asn1/der/ia5/der_decode_ia5_string.c new file mode 100644 index 0000000..3f9870d --- /dev/null +++ b/src/pk/asn1/der/ia5/der_decode_ia5_string.c @@ -0,0 +1,95 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org + */ +#include "tomcrypt.h" + +/** + @file der_decode_ia5_string.c + ASN.1 DER, encode a IA5 STRING, Tom St Denis +*/ + + +#ifdef LTC_DER + +/** + Store a IA5 STRING + @param in The DER encoded IA5 STRING + @param inlen The size of the DER IA5 STRING + @param out [out] The array of octets stored (one per char) + @param outlen [in/out] The number of octets stored + @return CRYPT_OK if successful +*/ +int der_decode_ia5_string(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen) +{ + unsigned long x, y, len; + int t; + + LTC_ARGCHK(in != NULL); + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(outlen != NULL); + + /* must have header at least */ + if (inlen < 2) { + return CRYPT_INVALID_PACKET; + } + + /* check for 0x16 */ + if ((in[0] & 0x1F) != 0x16) { + return CRYPT_INVALID_PACKET; + } + x = 1; + + /* decode the length */ + if (in[x] & 0x80) { + /* valid # of bytes in length are 1,2,3 */ + y = in[x] & 0x7F; + if ((y == 0) || (y > 3) || ((x + y) > inlen)) { + return CRYPT_INVALID_PACKET; + } + + /* read the length in */ + len = 0; + ++x; + while (y--) { + len = (len << 8) | in[x++]; + } + } else { + len = in[x++] & 0x7F; + } + + /* is it too long? */ + if (len > *outlen) { + return CRYPT_BUFFER_OVERFLOW; + } + + if (len + x > inlen) { + return CRYPT_INVALID_PACKET; + } + + /* read the data */ + for (y = 0; y < len; y++) { + t = der_ia5_value_decode(in[x++]); + if (t == -1) { + return CRYPT_INVALID_ARG; + } + out[y] = t; + } + + *outlen = y; + + return CRYPT_OK; +} + +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/asn1/der/ia5/der_encode_ia5_string.c b/src/pk/asn1/der/ia5/der_encode_ia5_string.c new file mode 100644 index 0000000..bf25b20 --- /dev/null +++ b/src/pk/asn1/der/ia5/der_encode_ia5_string.c @@ -0,0 +1,84 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org + */ +#include "tomcrypt.h" + +/** + @file der_encode_ia5_string.c + ASN.1 DER, encode a IA5 STRING, Tom St Denis +*/ + +#ifdef LTC_DER + +/** + Store an IA5 STRING + @param in The array of IA5 to store (one per char) + @param inlen The number of IA5 to store + @param out [out] The destination for the DER encoded IA5 STRING + @param outlen [in/out] The max size and resulting size of the DER IA5 STRING + @return CRYPT_OK if successful +*/ +int der_encode_ia5_string(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen) +{ + unsigned long x, y, len; + int err; + + LTC_ARGCHK(in != NULL); + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(outlen != NULL); + + /* get the size */ + if ((err = der_length_ia5_string(in, inlen, &len)) != CRYPT_OK) { + return err; + } + + /* too big? */ + if (len > *outlen) { + return CRYPT_BUFFER_OVERFLOW; + } + + /* encode the header+len */ + x = 0; + out[x++] = 0x16; + if (inlen < 128) { + out[x++] = inlen; + } else if (inlen < 256) { + out[x++] = 0x81; + out[x++] = inlen; + } else if (inlen < 65536UL) { + out[x++] = 0x82; + out[x++] = (inlen>>8)&255; + out[x++] = inlen&255; + } else if (inlen < 16777216UL) { + out[x++] = 0x83; + out[x++] = (inlen>>16)&255; + out[x++] = (inlen>>8)&255; + out[x++] = inlen&255; + } else { + return CRYPT_INVALID_ARG; + } + + /* store octets */ + for (y = 0; y < inlen; y++) { + out[x++] = der_ia5_char_encode(in[y]); + } + + /* retun length */ + *outlen = x; + + return CRYPT_OK; +} + +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/asn1/der/ia5/der_length_ia5_string.c b/src/pk/asn1/der/ia5/der_length_ia5_string.c new file mode 100644 index 0000000..40e6b97 --- /dev/null +++ b/src/pk/asn1/der/ia5/der_length_ia5_string.c @@ -0,0 +1,194 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org + */ +#include "tomcrypt.h" + +/** + @file der_length_ia5_string.c + ASN.1 DER, get length of IA5 STRING, Tom St Denis +*/ + +#ifdef LTC_DER + +static const struct { + int code, value; +} ia5_table[] = { +{ '\0', 0 }, +{ '\a', 7 }, +{ '\b', 8 }, +{ '\t', 9 }, +{ '\n', 10 }, +{ '\f', 12 }, +{ '\r', 13 }, +{ ' ', 32 }, +{ '!', 33 }, +{ '"', 34 }, +{ '#', 35 }, +{ '$', 36 }, +{ '%', 37 }, +{ '&', 38 }, +{ '\'', 39 }, +{ '(', 40 }, +{ ')', 41 }, +{ '*', 42 }, +{ '+', 43 }, +{ ',', 44 }, +{ '-', 45 }, +{ '.', 46 }, +{ '/', 47 }, +{ '0', 48 }, +{ '1', 49 }, +{ '2', 50 }, +{ '3', 51 }, +{ '4', 52 }, +{ '5', 53 }, +{ '6', 54 }, +{ '7', 55 }, +{ '8', 56 }, +{ '9', 57 }, +{ ':', 58 }, +{ ';', 59 }, +{ '<', 60 }, +{ '=', 61 }, +{ '>', 62 }, +{ '?', 63 }, +{ '@', 64 }, +{ 'A', 65 }, +{ 'B', 66 }, +{ 'C', 67 }, +{ 'D', 68 }, +{ 'E', 69 }, +{ 'F', 70 }, +{ 'G', 71 }, +{ 'H', 72 }, +{ 'I', 73 }, +{ 'J', 74 }, +{ 'K', 75 }, +{ 'L', 76 }, +{ 'M', 77 }, +{ 'N', 78 }, +{ 'O', 79 }, +{ 'P', 80 }, +{ 'Q', 81 }, +{ 'R', 82 }, +{ 'S', 83 }, +{ 'T', 84 }, +{ 'U', 85 }, +{ 'V', 86 }, +{ 'W', 87 }, +{ 'X', 88 }, +{ 'Y', 89 }, +{ 'Z', 90 }, +{ '[', 91 }, +{ '\\', 92 }, +{ ']', 93 }, +{ '^', 94 }, +{ '_', 95 }, +{ '`', 96 }, +{ 'a', 97 }, +{ 'b', 98 }, +{ 'c', 99 }, +{ 'd', 100 }, +{ 'e', 101 }, +{ 'f', 102 }, +{ 'g', 103 }, +{ 'h', 104 }, +{ 'i', 105 }, +{ 'j', 106 }, +{ 'k', 107 }, +{ 'l', 108 }, +{ 'm', 109 }, +{ 'n', 110 }, +{ 'o', 111 }, +{ 'p', 112 }, +{ 'q', 113 }, +{ 'r', 114 }, +{ 's', 115 }, +{ 't', 116 }, +{ 'u', 117 }, +{ 'v', 118 }, +{ 'w', 119 }, +{ 'x', 120 }, +{ 'y', 121 }, +{ 'z', 122 }, +{ '{', 123 }, +{ '|', 124 }, +{ '}', 125 }, +{ '~', 126 } +}; + +int der_ia5_char_encode(int c) +{ + int x; + for (x = 0; x < (int)(sizeof(ia5_table)/sizeof(ia5_table[0])); x++) { + if (ia5_table[x].code == c) { + return ia5_table[x].value; + } + } + return -1; +} + +int der_ia5_value_decode(int v) +{ + int x; + for (x = 0; x < (int)(sizeof(ia5_table)/sizeof(ia5_table[0])); x++) { + if (ia5_table[x].value == v) { + return ia5_table[x].code; + } + } + return -1; +} + +/** + Gets length of DER encoding of IA5 STRING + @param octets The values you want to encode + @param noctets The number of octets in the string to encode + @param outlen [out] The length of the DER encoding for the given string + @return CRYPT_OK if successful +*/ +int der_length_ia5_string(const unsigned char *octets, unsigned long noctets, unsigned long *outlen) +{ + unsigned long x; + + LTC_ARGCHK(outlen != NULL); + LTC_ARGCHK(octets != NULL); + + /* scan string for validity */ + for (x = 0; x < noctets; x++) { + if (der_ia5_char_encode(octets[x]) == -1) { + return CRYPT_INVALID_ARG; + } + } + + if (noctets < 128) { + /* 16 LL DD DD DD ... */ + *outlen = 2 + noctets; + } else if (noctets < 256) { + /* 16 81 LL DD DD DD ... */ + *outlen = 3 + noctets; + } else if (noctets < 65536UL) { + /* 16 82 LL LL DD DD DD ... */ + *outlen = 4 + noctets; + } else if (noctets < 16777216UL) { + /* 16 83 LL LL LL DD DD DD ... */ + *outlen = 5 + noctets; + } else { + return CRYPT_INVALID_ARG; + } + + return CRYPT_OK; +} + +#endif + + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/asn1/der/der_decode_integer.c b/src/pk/asn1/der/integer/der_decode_integer.c similarity index 54% rename from src/pk/asn1/der/der_decode_integer.c rename to src/pk/asn1/der/integer/der_decode_integer.c index b798bd4..c8d6999 100644 --- a/src/pk/asn1/der/der_decode_integer.c +++ b/src/pk/asn1/der/integer/der_decode_integer.c @@ -18,81 +18,93 @@ #ifdef LTC_DER -/* decodes a DER INTEGER in [in]. You have to tell this function - * how many bytes are available [inlen]. It will then attempt to - * read the INTEGER. If all goes well it stores the number of bytes - * read in [inlen] and the number in [num]. - */ /** Read a mp_int integer @param in The DER encoded data - @param inlen [in] Size of the in data, [out] number of bytes read + @param inlen Size of DER encoded data @param num The first mp_int to decode @return CRYPT_OK if successful */ -int der_decode_integer(const unsigned char *in, unsigned long *inlen, mp_int *num) +int der_decode_integer(const unsigned char *in, unsigned long inlen, mp_int *num) { - unsigned long tmplen, y, z; + unsigned long x, y, z; + int err; LTC_ARGCHK(num != NULL); LTC_ARGCHK(in != NULL); - LTC_ARGCHK(inlen != NULL); - - /* save copy of max output size */ - tmplen = *inlen; - *inlen = 0; /* min DER INTEGER is 0x02 01 00 == 0 */ - if (tmplen < (1 + 1 + 1)) { + if (inlen < (1 + 1 + 1)) { return CRYPT_INVALID_PACKET; } - /* ok expect 0x02 when we AND with 0011 1111 [3F] */ - if ((*in++ & 0x3F) != 0x02) { + /* ok expect 0x02 when we AND with 0001 1111 [1F] */ + x = 0; + if ((in[x++] & 0x1F) != 0x02) { return CRYPT_INVALID_PACKET; } - ++(*inlen); /* now decode the len stuff */ - z = *in++; - ++(*inlen); + z = in[x++]; if ((z & 0x80) == 0x00) { /* short form */ /* will it overflow? */ - if (*inlen + z > tmplen) { + if (x + z > inlen) { return CRYPT_INVALID_PACKET; } /* no so read it */ - (*inlen) += z; - return mpi_to_ltc_error(mp_read_unsigned_bin(num, (unsigned char *)in, z)); + if ((err = mpi_to_ltc_error(mp_read_unsigned_bin(num, (unsigned char *)in + x, z))) != CRYPT_OK) { + return err; + } } else { /* long form */ z &= 0x7F; /* will number of length bytes overflow? (or > 4) */ - if (((*inlen + z) > tmplen) || (z > 4)) { + if (((x + z) > inlen) || (z > 4) || (z == 0)) { return CRYPT_INVALID_PACKET; } /* now read it in */ y = 0; while (z--) { - y = ((unsigned long)(*in++)) | (y << 8); - ++(*inlen); + y = ((unsigned long)(in[x++])) | (y << 8); } /* now will reading y bytes overrun? */ - if ((*inlen + y) > tmplen) { + if ((x + y) > inlen) { return CRYPT_INVALID_PACKET; } /* no so read it */ - (*inlen) += y; - return mpi_to_ltc_error(mp_read_unsigned_bin(num, (unsigned char *)in, y)); + if ((err = mpi_to_ltc_error(mp_read_unsigned_bin(num, (unsigned char *)in + x, y))) != CRYPT_OK) { + return err; + } } + + /* see if it's negative */ + if (in[x] & 0x80) { + mp_int tmp; + if (mp_init(&tmp) != MP_OKAY) { + return CRYPT_MEM; + } + + if (mp_2expt(&tmp, mp_count_bits(num)) != MP_OKAY || mp_sub(num, &tmp, num) != MP_OKAY) { + mp_clear(&tmp); + return CRYPT_MEM; + } + mp_clear(&tmp); + } + + return CRYPT_OK; + } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/asn1/der/der_encode_integer.c b/src/pk/asn1/der/integer/der_encode_integer.c similarity index 55% rename from src/pk/asn1/der/der_encode_integer.c rename to src/pk/asn1/der/integer/der_encode_integer.c index c5c5267..2b44fe5 100644 --- a/src/pk/asn1/der/der_encode_integer.c +++ b/src/pk/asn1/der/integer/der_encode_integer.c @@ -28,7 +28,7 @@ */ int der_encode_integer(mp_int *num, unsigned char *out, unsigned long *outlen) { - unsigned long tmplen, x, y, z; + unsigned long tmplen, y; int err, leading_zero; LTC_ARGCHK(num != NULL); @@ -44,48 +44,43 @@ int der_encode_integer(mp_int *num, unsigned char *out, unsigned long *outlen) return CRYPT_BUFFER_OVERFLOW; } - /* we only need a leading zero if the msb of the first byte is one */ - if ((mp_count_bits(num) & 7) == 7 || mp_iszero(num) == MP_YES) { - leading_zero = 1; + if (mp_cmp_d(num, 0) != MP_LT) { + /* we only need a leading zero if the msb of the first byte is one */ + if ((mp_count_bits(num) & 7) == 0 || mp_iszero(num) == MP_YES) { + leading_zero = 1; + } else { + leading_zero = 0; + } + + /* get length of num in bytes (plus 1 since we force the msbyte to zero) */ + y = mp_unsigned_bin_size(num) + leading_zero; } else { leading_zero = 0; - } + y = mp_count_bits(num); + y = y + (8 - (y & 7)); + y = y >> 3; - /* get length of num in bytes (plus 1 since we force the msbyte to zero) */ - y = mp_unsigned_bin_size(num) + leading_zero; + } /* now store initial data */ *out++ = 0x02; if (y < 128) { /* short form */ *out++ = (unsigned char)y; + } else if (y < 256) { + *out++ = 0x81; + *out++ = y; + } else if (y < 65536UL) { + *out++ = 0x82; + *out++ = (y>>8)&255; + *out++ = y; + } else if (y < 16777216UL) { + *out++ = 0x83; + *out++ = (y>>16)&255; + *out++ = (y>>8)&255; + *out++ = y; } else { - /* long form (relies on y != 0) */ - - /* get length of length... ;-) */ - x = y; - z = 0; - while (x) { - ++z; - x >>= 8; - } - - /* store length of length */ - *out++ = 0x80 | ((unsigned char)z); - - /* now store length */ - - /* first shift length up so msbyte != 0 */ - x = y; - while ((x & 0xFF000000) == 0) { - x <<= 8; - } - - /* now store length */ - while (z--) { - *out++ = (unsigned char)((x >> 24) & 0xFF); - x <<= 8; - } + return CRYPT_INVALID_ARG; } /* now store msbyte of zero if num is non-zero */ @@ -94,11 +89,31 @@ int der_encode_integer(mp_int *num, unsigned char *out, unsigned long *outlen) } /* if it's not zero store it as big endian */ - if (mp_iszero(num) == MP_NO) { + if (mp_cmp_d(num, 0) == MP_GT) { /* now store the mpint */ if ((err = mp_to_unsigned_bin(num, out)) != MP_OKAY) { return mpi_to_ltc_error(err); } + } else if (mp_iszero(num) != MP_YES) { + mp_int tmp; + /* negative */ + if (mp_init(&tmp) != MP_OKAY) { + return CRYPT_MEM; + } + + /* 2^roundup and subtract */ + y = mp_count_bits(num); + y = y + (8 - (y & 7)); + if (mp_2expt(&tmp, y) != MP_OKAY || mp_add(&tmp, num, &tmp) != MP_OKAY) { + mp_clear(&tmp); + return CRYPT_MEM; + } + + if ((err = mp_to_unsigned_bin(&tmp, out)) != MP_OKAY) { + mp_clear(&tmp); + return mpi_to_ltc_error(err); + } + mp_clear(&tmp); } /* we good */ @@ -107,3 +122,7 @@ int der_encode_integer(mp_int *num, unsigned char *out, unsigned long *outlen) } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/asn1/der/der_length_integer.c b/src/pk/asn1/der/integer/der_length_integer.c similarity index 60% rename from src/pk/asn1/der/der_length_integer.c rename to src/pk/asn1/der/integer/der_length_integer.c index f86738a..4d9960e 100644 --- a/src/pk/asn1/der/der_length_integer.c +++ b/src/pk/asn1/der/integer/der_length_integer.c @@ -31,25 +31,33 @@ int der_length_integer(mp_int *num, unsigned long *outlen) LTC_ARGCHK(num != NULL); LTC_ARGCHK(outlen != NULL); - /* we only need a leading zero if the msb of the first byte is one */ - if ((mp_count_bits(num) & 7) == 7 || mp_iszero(num) == MP_YES) { - leading_zero = 1; + if (mp_cmp_d(num, 0) != MP_LT) { + /* positive */ + + /* we only need a leading zero if the msb of the first byte is one */ + if ((mp_count_bits(num) & 7) == 0 || mp_iszero(num) == MP_YES) { + leading_zero = 1; + } else { + leading_zero = 0; + } + + /* size for bignum */ + z = len = leading_zero + mp_unsigned_bin_size(num); } else { + /* it's negative */ + /* find power of 2 that is a multiple of eight and greater than count bits */ leading_zero = 0; + z = mp_count_bits(num); + z = z + (8 - (z & 7)); + len = z = z >> 3; } - /* size for bignum */ - z = len = leading_zero + mp_unsigned_bin_size(num); - - /* we need a 0x02 */ - ++len; - /* now we need a length */ if (z < 128) { /* short form */ ++len; } else { - /* long form (relies on z != 0) */ + /* long form (relies on z != 0), assumes length bytes < 128 */ ++len; while (z) { @@ -58,8 +66,16 @@ int der_length_integer(mp_int *num, unsigned long *outlen) } } + /* we need a 0x02 to indicate it's INTEGER */ + ++len; + + /* return length */ *outlen = len; return CRYPT_OK; } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 new file mode 100644 index 0000000..7c6db26 --- /dev/null +++ b/src/pk/asn1/der/object_identifier/der_decode_object_identifier.c @@ -0,0 +1,99 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org + */ +#include "tomcrypt.h" + +/** + @file der_decode_object_identifier.c + ASN.1 DER, Decode Object Identifier, Tom St Denis +*/ + +#ifdef LTC_DER +/** + Decode OID data and store the array of integers in words + @param in The OID DER encoded data + @param inlen The length of the OID data + @param words [out] The destination of the OID words + @param outlen [in/out] The number of OID words + @return CRYPT_OK if successful +*/ +int der_decode_object_identifier(const unsigned char *in, unsigned long inlen, + unsigned long *words, unsigned long *outlen) +{ + unsigned long x, y, t, len; + + LTC_ARGCHK(in != NULL); + LTC_ARGCHK(words != NULL); + LTC_ARGCHK(outlen != NULL); + + /* header is at least 3 bytes */ + if (inlen < 3) { + return CRYPT_INVALID_PACKET; + } + + /* must be room for at least two words */ + if (*outlen < 2) { + return CRYPT_BUFFER_OVERFLOW; + } + + /* decode the packet header */ + x = 0; + if ((in[x++] & 0x1F) != 0x06) { + return CRYPT_INVALID_PACKET; + } + + /* get the length */ + if (in[x] < 128) { + len = in[x++]; + } else { + if (in[x] < 0x81 || in[x] > 0x82) { + return CRYPT_INVALID_PACKET; + } + y = in[x++] & 0x7F; + len = 0; + while (y--) { + len = (len << 8) | (unsigned long)in[x++]; + } + } + + if (len < 1 || (len + x) > inlen) { + return CRYPT_INVALID_PACKET; + } + + /* decode word1 and word2 */ + --len; + t = in[x++]; + words[0] = t/40; + words[1] = t%40; + + /* decode rest */ + y = 2; + t = 0; + while (len--) { + t = (t << 7) | (in[x] & 0x7F); + if (!(in[x++] & 0x80)) { + /* store t */ + if (y >= *outlen) { + return CRYPT_BUFFER_OVERFLOW; + } + words[y++] = t; + t = 0; + } + } + + *outlen = y; + return CRYPT_OK; +} + +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 new file mode 100644 index 0000000..4247d78 --- /dev/null +++ b/src/pk/asn1/der/object_identifier/der_encode_object_identifier.c @@ -0,0 +1,103 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org + */ +#include "tomcrypt.h" + +/** + @file der_encode_object_identifier.c + ASN.1 DER, Encode Object Identifier, Tom St Denis +*/ + +#ifdef LTC_DER +/** + Encode an OID + @param words The words to encode (upto 32-bits each) + @param nwords The number of words in the OID + @param out [out] Destination of OID data + @param outlen [in/out] The max and resulting size of the OID + @return CRYPT_OK if successful +*/ +int der_encode_object_identifier(unsigned long *words, unsigned long nwords, + unsigned char *out, unsigned long *outlen) +{ + unsigned long i, x, y, z, t, mask; + int err; + + LTC_ARGCHK(words != NULL); + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(outlen != NULL); + + /* check length */ + if ((err = der_length_object_identifier(words, nwords, &x)) != CRYPT_OK) { + return err; + } + if (x > *outlen) { + return CRYPT_BUFFER_OVERFLOW; + } + + /* compute length to store OID data */ + z = 1; + for (y = 2; y < nwords; y++) { + t = der_object_identifier_bits(words[y]); + z += t/7 + ((t%7) ? 1 : 0); + } + + /* store header + length */ + x = 0; + out[x++] = 0x06; + if (z < 128) { + out[x++] = z; + } else if (z < 256) { + out[x++] = 0x81; + out[x++] = z; + } else if (z < 65536UL) { + out[x++] = 0x82; + out[x++] = (z>>8)&255; + out[x++] = z&255; + } else { + return CRYPT_INVALID_ARG; + } + + /* store first byte */ + out[x++] = words[0] * 40 + words[1]; + + for (i = 2; i < nwords; i++) { + /* store 7 bit words in little endian */ + t = words[i] & 0xFFFFFFFF; + if (t) { + y = x; + mask = 0; + while (t) { + out[x++] = (t & 0x7F) | mask; + t >>= 7; + mask |= 0x80; /* upper bit is set on all but the last byte */ + } + /* now swap bytes y...x-1 */ + z = x - 1; + while (y < z) { + t = out[y]; out[y] = out[z]; out[z] = t; + ++y; + --z; + } + } else { + /* zero word */ + out[x++] = 0x00; + } + } + + *outlen = x; + return CRYPT_OK; +} + +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 new file mode 100644 index 0000000..5c07bc2 --- /dev/null +++ b/src/pk/asn1/der/object_identifier/der_length_object_identifier.c @@ -0,0 +1,84 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org + */ +#include "tomcrypt.h" + +/** + @file der_length_object_identifier.c + ASN.1 DER, get length of Object Identifier, Tom St Denis +*/ + +#ifdef LTC_DER + +unsigned long der_object_identifier_bits(unsigned long x) +{ + unsigned long c; + x &= 0xFFFFFFFF; + c = 0; + while (x) { + ++c; + x >>= 1; + } + return c; +} + + +/** + Gets length of DER encoding of Object Identifier + @param nwords The number of OID words + @param words The actual OID words to get the size of + @param outlen [out] The length of the DER encoding for the given string + @return CRYPT_OK if successful +*/ +int der_length_object_identifier(unsigned long *words, unsigned long nwords, unsigned long *outlen) +{ + unsigned long y, z, t; + + LTC_ARGCHK(words != NULL); + LTC_ARGCHK(outlen != NULL); + + + /* must be >= 2 words */ + if (nwords < 2) { + return CRYPT_INVALID_ARG; + } + + /* word1 = 0,1,2 and word2 0..39 */ + if (words[0] > 2 || words[1] > 39) { + return CRYPT_INVALID_ARG; + } + + /* leading byte of first two words */ + z = 1; + for (y = 2; y < nwords; y++) { + t = der_object_identifier_bits(words[y]); + z += t/7 + ((t%7) ? 1 : 0); + } + + /* now depending on the length our length encoding changes */ + if (z < 128) { + z += 2; + } else if (z < 256) { + z += 3; + } else if (z < 65536UL) { + z += 4; + } else { + return CRYPT_INVALID_ARG; + } + + *outlen = z; + return CRYPT_OK; +} + +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/asn1/der/octet/der_decode_octet_string.c b/src/pk/asn1/der/octet/der_decode_octet_string.c new file mode 100644 index 0000000..185e6de --- /dev/null +++ b/src/pk/asn1/der/octet/der_decode_octet_string.c @@ -0,0 +1,90 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org + */ +#include "tomcrypt.h" + +/** + @file der_decode_octet_string.c + ASN.1 DER, encode a OCTET STRING, Tom St Denis +*/ + + +#ifdef LTC_DER + +/** + Store a OCTET STRING + @param in The DER encoded OCTET STRING + @param inlen The size of the DER OCTET STRING + @param out [out] The array of octets stored (one per char) + @param outlen [in/out] The number of octets stored + @return CRYPT_OK if successful +*/ +int der_decode_octet_string(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen) +{ + unsigned long x, y, len; + + LTC_ARGCHK(in != NULL); + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(outlen != NULL); + + /* must have header at least */ + if (inlen < 2) { + return CRYPT_INVALID_PACKET; + } + + /* check for 0x04 */ + if ((in[0] & 0x1F) != 0x04) { + return CRYPT_INVALID_PACKET; + } + x = 1; + + /* decode the length */ + if (in[x] & 0x80) { + /* valid # of bytes in length are 1,2,3 */ + y = in[x] & 0x7F; + if ((y == 0) || (y > 3) || ((x + y) > inlen)) { + return CRYPT_INVALID_PACKET; + } + + /* read the length in */ + len = 0; + ++x; + while (y--) { + len = (len << 8) | in[x++]; + } + } else { + len = in[x++] & 0x7F; + } + + /* is it too long? */ + if (len > *outlen) { + return CRYPT_BUFFER_OVERFLOW; + } + + if (len + x > inlen) { + return CRYPT_INVALID_PACKET; + } + + /* read the data */ + for (y = 0; y < len; y++) { + out[y] = in[x++]; + } + + *outlen = y; + + return CRYPT_OK; +} + +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/asn1/der/octet/der_encode_octet_string.c b/src/pk/asn1/der/octet/der_encode_octet_string.c new file mode 100644 index 0000000..bd882b6 --- /dev/null +++ b/src/pk/asn1/der/octet/der_encode_octet_string.c @@ -0,0 +1,85 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org + */ +#include "tomcrypt.h" + +/** + @file der_encode_octet_string.c + ASN.1 DER, encode a OCTET STRING, Tom St Denis +*/ + + +#ifdef LTC_DER + +/** + Store an OCTET STRING + @param in The array of OCTETS to store (one per char) + @param inlen The number of OCTETS to store + @param out [out] The destination for the DER encoded OCTET STRING + @param outlen [in/out] The max size and resulting size of the DER OCTET STRING + @return CRYPT_OK if successful +*/ +int der_encode_octet_string(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen) +{ + unsigned long x, y, len; + int err; + + LTC_ARGCHK(in != NULL); + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(outlen != NULL); + + /* get the size */ + if ((err = der_length_octet_string(inlen, &len)) != CRYPT_OK) { + return err; + } + + /* too big? */ + if (len > *outlen) { + return CRYPT_BUFFER_OVERFLOW; + } + + /* encode the header+len */ + x = 0; + out[x++] = 0x04; + if (inlen < 128) { + out[x++] = inlen; + } else if (inlen < 256) { + out[x++] = 0x81; + out[x++] = inlen; + } else if (inlen < 65536UL) { + out[x++] = 0x82; + out[x++] = (inlen>>8)&255; + out[x++] = inlen&255; + } else if (inlen < 16777216UL) { + out[x++] = 0x83; + out[x++] = (inlen>>16)&255; + out[x++] = (inlen>>8)&255; + out[x++] = inlen&255; + } else { + return CRYPT_INVALID_ARG; + } + + /* store octets */ + for (y = 0; y < inlen; y++) { + out[x++] = in[y]; + } + + /* retun length */ + *outlen = x; + + return CRYPT_OK; +} + +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/asn1/der/octet/der_length_octet_string.c b/src/pk/asn1/der/octet/der_length_octet_string.c new file mode 100644 index 0000000..7287454 --- /dev/null +++ b/src/pk/asn1/der/octet/der_length_octet_string.c @@ -0,0 +1,53 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org + */ +#include "tomcrypt.h" + +/** + @file der_length_octet_string.c + ASN.1 DER, get length of OCTET STRING, Tom St Denis +*/ + +#ifdef LTC_DER +/** + Gets length of DER encoding of OCTET STRING + @param noctets The number of octets in the string to encode + @param outlen [out] The length of the DER encoding for the given string + @return CRYPT_OK if successful +*/ +int der_length_octet_string(unsigned long noctets, unsigned long *outlen) +{ + LTC_ARGCHK(outlen != NULL); + + if (noctets < 128) { + /* 04 LL DD DD DD ... */ + *outlen = 2 + noctets; + } else if (noctets < 256) { + /* 04 81 LL DD DD DD ... */ + *outlen = 3 + noctets; + } else if (noctets < 65536UL) { + /* 04 82 LL LL DD DD DD ... */ + *outlen = 4 + noctets; + } else if (noctets < 16777216UL) { + /* 04 83 LL LL LL DD DD DD ... */ + *outlen = 5 + noctets; + } else { + return CRYPT_INVALID_ARG; + } + + return CRYPT_OK; +} + +#endif + + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 new file mode 100644 index 0000000..e967740 --- /dev/null +++ b/src/pk/asn1/der/printable_string/der_decode_printable_string.c @@ -0,0 +1,95 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org + */ +#include "tomcrypt.h" + +/** + @file der_decode_printable_string.c + ASN.1 DER, encode a printable STRING, Tom St Denis +*/ + + +#ifdef LTC_DER + +/** + Store a printable STRING + @param in The DER encoded printable STRING + @param inlen The size of the DER printable STRING + @param out [out] The array of octets stored (one per char) + @param outlen [in/out] The number of octets stored + @return CRYPT_OK if successful +*/ +int der_decode_printable_string(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen) +{ + unsigned long x, y, len; + int t; + + LTC_ARGCHK(in != NULL); + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(outlen != NULL); + + /* must have header at least */ + if (inlen < 2) { + return CRYPT_INVALID_PACKET; + } + + /* check for 0x13 */ + if ((in[0] & 0x1F) != 0x13) { + return CRYPT_INVALID_PACKET; + } + x = 1; + + /* decode the length */ + if (in[x] & 0x80) { + /* valid # of bytes in length are 1,2,3 */ + y = in[x] & 0x7F; + if ((y == 0) || (y > 3) || ((x + y) > inlen)) { + return CRYPT_INVALID_PACKET; + } + + /* read the length in */ + len = 0; + ++x; + while (y--) { + len = (len << 8) | in[x++]; + } + } else { + len = in[x++] & 0x7F; + } + + /* is it too long? */ + if (len > *outlen) { + return CRYPT_BUFFER_OVERFLOW; + } + + if (len + x > inlen) { + return CRYPT_INVALID_PACKET; + } + + /* read the data */ + for (y = 0; y < len; y++) { + t = der_printable_value_decode(in[x++]); + if (t == -1) { + return CRYPT_INVALID_ARG; + } + out[y] = t; + } + + *outlen = y; + + return CRYPT_OK; +} + +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 new file mode 100644 index 0000000..82bab8e --- /dev/null +++ b/src/pk/asn1/der/printable_string/der_encode_printable_string.c @@ -0,0 +1,84 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org + */ +#include "tomcrypt.h" + +/** + @file der_encode_printable_string.c + ASN.1 DER, encode a printable STRING, Tom St Denis +*/ + +#ifdef LTC_DER + +/** + Store an printable STRING + @param in The array of printable to store (one per char) + @param inlen The number of printable to store + @param out [out] The destination for the DER encoded printable STRING + @param outlen [in/out] The max size and resulting size of the DER printable STRING + @return CRYPT_OK if successful +*/ +int der_encode_printable_string(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen) +{ + unsigned long x, y, len; + int err; + + LTC_ARGCHK(in != NULL); + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(outlen != NULL); + + /* get the size */ + if ((err = der_length_printable_string(in, inlen, &len)) != CRYPT_OK) { + return err; + } + + /* too big? */ + if (len > *outlen) { + return CRYPT_BUFFER_OVERFLOW; + } + + /* encode the header+len */ + x = 0; + out[x++] = 0x13; + if (inlen < 128) { + out[x++] = inlen; + } else if (inlen < 256) { + out[x++] = 0x81; + out[x++] = inlen; + } else if (inlen < 65536UL) { + out[x++] = 0x82; + out[x++] = (inlen>>8)&255; + out[x++] = inlen&255; + } else if (inlen < 16777216UL) { + out[x++] = 0x83; + out[x++] = (inlen>>16)&255; + out[x++] = (inlen>>8)&255; + out[x++] = inlen&255; + } else { + return CRYPT_INVALID_ARG; + } + + /* store octets */ + for (y = 0; y < inlen; y++) { + out[x++] = der_printable_char_encode(in[y]); + } + + /* retun length */ + *outlen = x; + + return CRYPT_OK; +} + +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 new file mode 100644 index 0000000..b8aaab3 --- /dev/null +++ b/src/pk/asn1/der/printable_string/der_length_printable_string.c @@ -0,0 +1,166 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org + */ +#include "tomcrypt.h" + +/** + @file der_length_printable_string.c + ASN.1 DER, get length of Printable STRING, Tom St Denis +*/ + +#ifdef LTC_DER + +static const struct { + int code, value; +} printable_table[] = { +{ ' ', 32 }, +{ '\'', 39 }, +{ '(', 40 }, +{ ')', 41 }, +{ '+', 43 }, +{ ',', 44 }, +{ '-', 45 }, +{ '.', 46 }, +{ '/', 47 }, +{ '0', 48 }, +{ '1', 49 }, +{ '2', 50 }, +{ '3', 51 }, +{ '4', 52 }, +{ '5', 53 }, +{ '6', 54 }, +{ '7', 55 }, +{ '8', 56 }, +{ '9', 57 }, +{ ':', 58 }, +{ '=', 61 }, +{ '?', 63 }, +{ 'A', 65 }, +{ 'B', 66 }, +{ 'C', 67 }, +{ 'D', 68 }, +{ 'E', 69 }, +{ 'F', 70 }, +{ 'G', 71 }, +{ 'H', 72 }, +{ 'I', 73 }, +{ 'J', 74 }, +{ 'K', 75 }, +{ 'L', 76 }, +{ 'M', 77 }, +{ 'N', 78 }, +{ 'O', 79 }, +{ 'P', 80 }, +{ 'Q', 81 }, +{ 'R', 82 }, +{ 'S', 83 }, +{ 'T', 84 }, +{ 'U', 85 }, +{ 'V', 86 }, +{ 'W', 87 }, +{ 'X', 88 }, +{ 'Y', 89 }, +{ 'Z', 90 }, +{ 'a', 97 }, +{ 'b', 98 }, +{ 'c', 99 }, +{ 'd', 100 }, +{ 'e', 101 }, +{ 'f', 102 }, +{ 'g', 103 }, +{ 'h', 104 }, +{ 'i', 105 }, +{ 'j', 106 }, +{ 'k', 107 }, +{ 'l', 108 }, +{ 'm', 109 }, +{ 'n', 110 }, +{ 'o', 111 }, +{ 'p', 112 }, +{ 'q', 113 }, +{ 'r', 114 }, +{ 's', 115 }, +{ 't', 116 }, +{ 'u', 117 }, +{ 'v', 118 }, +{ 'w', 119 }, +{ 'x', 120 }, +{ 'y', 121 }, +{ 'z', 122 }, +}; + +int der_printable_char_encode(int c) +{ + int x; + for (x = 0; x < (int)(sizeof(printable_table)/sizeof(printable_table[0])); x++) { + if (printable_table[x].code == c) { + return printable_table[x].value; + } + } + return -1; +} + +int der_printable_value_decode(int v) +{ + int x; + for (x = 0; x < (int)(sizeof(printable_table)/sizeof(printable_table[0])); x++) { + if (printable_table[x].value == v) { + return printable_table[x].code; + } + } + return -1; +} + +/** + Gets length of DER encoding of Printable STRING + @param octets The values you want to encode + @param noctets The number of octets in the string to encode + @param outlen [out] The length of the DER encoding for the given string + @return CRYPT_OK if successful +*/ +int der_length_printable_string(const unsigned char *octets, unsigned long noctets, unsigned long *outlen) +{ + unsigned long x; + + LTC_ARGCHK(outlen != NULL); + LTC_ARGCHK(octets != NULL); + + /* scan string for validity */ + for (x = 0; x < noctets; x++) { + if (der_printable_char_encode(octets[x]) == -1) { + return CRYPT_INVALID_ARG; + } + } + + if (noctets < 128) { + /* 16 LL DD DD DD ... */ + *outlen = 2 + noctets; + } else if (noctets < 256) { + /* 16 81 LL DD DD DD ... */ + *outlen = 3 + noctets; + } else if (noctets < 65536UL) { + /* 16 82 LL LL DD DD DD ... */ + *outlen = 4 + noctets; + } else if (noctets < 16777216UL) { + /* 16 83 LL LL LL DD DD DD ... */ + *outlen = 5 + noctets; + } else { + return CRYPT_INVALID_ARG; + } + + return CRYPT_OK; +} + +#endif + + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/asn1/der/sequence/der_decode_sequence.c b/src/pk/asn1/der/sequence/der_decode_sequence.c new file mode 100644 index 0000000..7228497 --- /dev/null +++ b/src/pk/asn1/der/sequence/der_decode_sequence.c @@ -0,0 +1,215 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org + */ +#include "tomcrypt.h" +#include <stdarg.h> + + +/** + @file der_decode_sequence.c + ASN.1 DER, decode a SEQUENCE, Tom St Denis +*/ + +#ifdef LTC_DER + +/** + Decode a SEQUENCE + @param in The DER encoded input + @param inlen The size of the input + @param list The list of items to decode + @param outlen The number of items in the list + @return CRYPT_OK on success +*/ +int der_decode_sequence(const unsigned char *in, unsigned long inlen, + ltc_asn1_list *list, unsigned long outlen) +{ + int err, type; + unsigned long size, x, y, z, i, blksize; + void *data; + + LTC_ARGCHK(in != NULL); + LTC_ARGCHK(list != NULL); + + /* get blk size */ + if (inlen < 2) { + return CRYPT_INVALID_PACKET; + } + + /* sequence type? */ + x = 0; + if (in[x++] != 0x30) { + return CRYPT_INVALID_PACKET; + } + + if (in[x] < 128) { + blksize = in[x++]; + } else if (in[x] & 0x80) { + if (in[x] < 0x81 || in[x] > 0x83) { + return CRYPT_INVALID_PACKET; + } + y = in[x++] & 0x7F; + + /* would reading the len bytes overrun? */ + if (x + y > inlen) { + return CRYPT_INVALID_PACKET; + } + + /* read len */ + blksize = 0; + while (y--) { + blksize = (blksize << 8) | (unsigned long)in[x++]; + } + } + + /* would this blksize overflow? */ + if (x + blksize > inlen) { + return CRYPT_INVALID_PACKET; + } + + /* ok read data */ + inlen = blksize; + for (i = 0; i < outlen; i++) { + type = list[i].type; + size = list[i].size; + data = list[i].data; + + if (type == LTC_ASN1_EOL) { + break; + } + + switch (type) { + case LTC_ASN1_INTEGER: + z = inlen; + if ((err = der_decode_integer(in + x, z, data)) != CRYPT_OK) { + goto LBL_ERR; + } + if ((err = der_length_integer(data, &z)) != CRYPT_OK) { + goto LBL_ERR; + } + x += z; + inlen -= z; + break; + + + case LTC_ASN1_SHORT_INTEGER: + z = inlen; + if ((err = der_decode_short_integer(in + x, z, data)) != CRYPT_OK) { + goto LBL_ERR; + } + if ((err = der_length_short_integer(size, &z)) != CRYPT_OK) { + goto LBL_ERR; + } + x += z; + inlen -= z; + break; + + case LTC_ASN1_BIT_STRING: + z = inlen; + if ((err = der_decode_bit_string(in + x, z, data, &size)) != CRYPT_OK) { + goto LBL_ERR; + } + list[i].size = size; + if ((err = der_length_bit_string(size, &z)) != CRYPT_OK) { + goto LBL_ERR; + } + x += z; + inlen -= z; + break; + + case LTC_ASN1_OCTET_STRING: + z = inlen; + if ((err = der_decode_octet_string(in + x, z, data, &size)) != CRYPT_OK) { + goto LBL_ERR; + } + list[i].size = size; + if ((err = der_length_octet_string(size, &z)) != CRYPT_OK) { + goto LBL_ERR; + } + x += z; + inlen -= z; + break; + + case LTC_ASN1_NULL: + if (inlen < 2 || in[x] != 0x05 || in[x+1] != 0x00) { + err = CRYPT_INVALID_PACKET; + goto LBL_ERR; + } + x += 2; + inlen -= 2; + break; + + case LTC_ASN1_OBJECT_IDENTIFIER: + z = inlen; + if ((err = der_decode_object_identifier(in + x, z, data, &size)) != CRYPT_OK) { + goto LBL_ERR; + } + list[i].size = size; + if ((err = der_length_object_identifier(data, size, &z)) != CRYPT_OK) { + goto LBL_ERR; + } + x += z; + inlen -= z; + break; + + case LTC_ASN1_IA5_STRING: + z = inlen; + if ((err = der_decode_ia5_string(in + x, z, data, &size)) != CRYPT_OK) { + goto LBL_ERR; + } + list[i].size = size; + if ((err = der_length_ia5_string(data, size, &z)) != CRYPT_OK) { + goto LBL_ERR; + } + x += z; + inlen -= z; + break; + + + case LTC_ASN1_PRINTABLE_STRING: + z = inlen; + if ((err = der_decode_printable_string(in + x, z, data, &size)) != CRYPT_OK) { + goto LBL_ERR; + } + list[i].size = size; + if ((err = der_length_printable_string(data, size, &z)) != CRYPT_OK) { + goto LBL_ERR; + } + x += z; + inlen -= z; + break; + + case LTC_ASN1_SEQUENCE: + z = inlen; + if ((err = der_decode_sequence(in + x, z, data, size)) != CRYPT_OK) { + goto LBL_ERR; + } + if ((err = der_length_sequence(data, size, &z)) != CRYPT_OK) { + goto LBL_ERR; + } + x += z; + inlen -= z; + break; + + default: + err = CRYPT_INVALID_ARG; + goto LBL_ERR; + } + } + err = CRYPT_OK; + +LBL_ERR: + return err; +} + +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/asn1/der/sequence/der_decode_sequence_multi.c b/src/pk/asn1/der/sequence/der_decode_sequence_multi.c new file mode 100644 index 0000000..539f310 --- /dev/null +++ b/src/pk/asn1/der/sequence/der_decode_sequence_multi.c @@ -0,0 +1,120 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org + */ +#include "tomcrypt.h" +#include <stdarg.h> + + +/** + @file der_decode_sequence_multi.c + ASN.1 DER, decode a SEQUENCE, Tom St Denis +*/ + +#ifdef LTC_DER + +int der_decode_sequence_multi(const unsigned char *in, unsigned long inlen, ...) +{ + int err, type; + unsigned long size, x; + void *data; + va_list args; + ltc_asn1_list *list; + + LTC_ARGCHK(in != NULL); + + /* get size of output that will be required */ + va_start(args, inlen); + x = 0; + for (;;) { + type = va_arg(args, int); + size = va_arg(args, unsigned long); + data = va_arg(args, void*); + + if (type == LTC_ASN1_EOL) { + break; + } + + switch (type) { + case LTC_ASN1_INTEGER: + case LTC_ASN1_SHORT_INTEGER: + case LTC_ASN1_BIT_STRING: + case LTC_ASN1_OCTET_STRING: + case LTC_ASN1_NULL: + case LTC_ASN1_OBJECT_IDENTIFIER: + case LTC_ASN1_IA5_STRING: + case LTC_ASN1_PRINTABLE_STRING: + case LTC_ASN1_SEQUENCE: + ++x; + break; + + default: + va_end(args); + return CRYPT_INVALID_ARG; + } + } + va_end(args); + + /* allocate structure for x elements */ + if (x == 0) { + return CRYPT_NOP; + } + + list = XCALLOC(sizeof(*list), x); + if (list == NULL) { + return CRYPT_MEM; + } + + /* fill in the structure */ + va_start(args, inlen); + x = 0; + for (;;) { + type = va_arg(args, int); + size = va_arg(args, unsigned long); + data = va_arg(args, void*); + + if (type == LTC_ASN1_EOL) { + break; + } + + switch (type) { + case LTC_ASN1_INTEGER: + case LTC_ASN1_SHORT_INTEGER: + case LTC_ASN1_BIT_STRING: + case LTC_ASN1_OCTET_STRING: + case LTC_ASN1_NULL: + case LTC_ASN1_OBJECT_IDENTIFIER: + case LTC_ASN1_IA5_STRING: + case LTC_ASN1_PRINTABLE_STRING: + case LTC_ASN1_SEQUENCE: + list[x].type = type; + list[x].size = size; + list[x++].data = data; + break; + + default: + va_end(args); + err = CRYPT_INVALID_ARG; + goto LBL_ERR; + } + } + va_end(args); + + err = der_decode_sequence(in, inlen, list, x); +LBL_ERR: + XFREE(list); + return err; +} + +#endif + + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/asn1/der/sequence/der_encode_sequence.c b/src/pk/asn1/der/sequence/der_encode_sequence.c new file mode 100644 index 0000000..6f86a4a --- /dev/null +++ b/src/pk/asn1/der/sequence/der_encode_sequence.c @@ -0,0 +1,265 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org + */ +#include "tomcrypt.h" +#include <stdarg.h> + + +/** + @file der_encode_sequence.c + ASN.1 DER, encode a SEQUENCE, Tom St Denis +*/ + +#ifdef LTC_DER + +/** + Encode a SEQUENCE + @param list The list of items to encode + @param inlen The number of items in the list + @param out [out] The destination + @param outlen [in/out] The size of the output + @return CRYPT_OK on success +*/ +int der_encode_sequence(ltc_asn1_list *list, unsigned long inlen, + unsigned char *out, unsigned long *outlen) +{ + int err, type; + unsigned long size, x, y, z, i; + void *data; + + LTC_ARGCHK(list != NULL); + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(outlen != NULL); + + /* get size of output that will be required */ + y = 0; + for (i = 0; i < inlen; i++) { + type = list[i].type; + size = list[i].size; + data = list[i].data; + + if (type == LTC_ASN1_EOL) { + break; + } + + switch (type) { + case LTC_ASN1_INTEGER: + if ((err = der_length_integer(data, &x)) != CRYPT_OK) { + goto LBL_ERR; + } + y += x; + break; + + case LTC_ASN1_SHORT_INTEGER: + if ((err = der_length_short_integer(*((unsigned long*)data), &x)) != CRYPT_OK) { + goto LBL_ERR; + } + y += x; + break; + + case LTC_ASN1_BIT_STRING: + if ((err = der_length_bit_string(size, &x)) != CRYPT_OK) { + goto LBL_ERR; + } + y += x; + break; + + case LTC_ASN1_OCTET_STRING: + if ((err = der_length_octet_string(size, &x)) != CRYPT_OK) { + goto LBL_ERR; + } + y += x; + break; + + case LTC_ASN1_NULL: + y += 2; + break; + + case LTC_ASN1_OBJECT_IDENTIFIER: + if ((err = der_length_object_identifier(data, size, &x)) != CRYPT_OK) { + goto LBL_ERR; + } + y += x; + break; + + case LTC_ASN1_IA5_STRING: + if ((err = der_length_ia5_string(data, size, &x)) != CRYPT_OK) { + goto LBL_ERR; + } + y += x; + break; + + case LTC_ASN1_PRINTABLE_STRING: + if ((err = der_length_printable_string(data, size, &x)) != CRYPT_OK) { + goto LBL_ERR; + } + y += x; + break; + + case LTC_ASN1_SEQUENCE: + if ((err = der_length_sequence(data, size, &x)) != CRYPT_OK) { + goto LBL_ERR; + } + y += x; + break; + + + default: + err = CRYPT_INVALID_ARG; + goto LBL_ERR; + } + } + + /* calc header size */ + z = y; + if (y < 128) { + y += 2; + } else if (y < 256) { + /* 0x30 0x81 LL */ + y += 3; + } else if (y < 65536UL) { + /* 0x30 0x82 LL LL */ + y += 4; + } else if (y < 16777216UL) { + /* 0x30 0x83 LL LL LL */ + y += 5; + } else { + err = CRYPT_INVALID_ARG; + goto LBL_ERR; + } + + /* too big ? */ + if (*outlen < y) { + err = CRYPT_BUFFER_OVERFLOW; + goto LBL_ERR; + } + + /* store header */ + x = 0; + out[x++] = 0x30; + if (z < 128) { + out[x++] = z; + } else if (z < 256) { + out[x++] = 0x81; + out[x++] = z; + } else if (z < 65536UL) { + out[x++] = 0x82; + out[x++] = (z>>8UL)&255; + out[x++] = z&255; + } else if (z < 16777216UL) { + out[x++] = 0x83; + out[x++] = (z>>16UL)&255; + out[x++] = (z>>8UL)&255; + out[x++] = z&255; + } + + /* store data */ + *outlen -= x; + for (i = 0; i < inlen; i++) { + type = list[i].type; + size = list[i].size; + data = list[i].data; + + if (type == LTC_ASN1_EOL) { + break; + } + + switch (type) { + case LTC_ASN1_INTEGER: + z = *outlen; + if ((err = der_encode_integer(data, out + x, &z)) != CRYPT_OK) { + goto LBL_ERR; + } + x += z; + *outlen -= z; + break; + + case LTC_ASN1_SHORT_INTEGER: + z = *outlen; + if ((err = der_encode_short_integer(*((unsigned long*)data), out + x, &z)) != CRYPT_OK) { + goto LBL_ERR; + } + x += z; + *outlen -= z; + break; + + case LTC_ASN1_BIT_STRING: + z = *outlen; + if ((err = der_encode_bit_string(data, size, out + x, &z)) != CRYPT_OK) { + goto LBL_ERR; + } + x += z; + *outlen -= z; + break; + + case LTC_ASN1_OCTET_STRING: + z = *outlen; + if ((err = der_encode_octet_string(data, size, out + x, &z)) != CRYPT_OK) { + goto LBL_ERR; + } + x += z; + *outlen -= z; + break; + + case LTC_ASN1_NULL: + out[x++] = 0x05; + out[x++] = 0x00; + *outlen -= 2; + break; + + case LTC_ASN1_OBJECT_IDENTIFIER: + z = *outlen; + if ((err = der_encode_object_identifier(data, size, out + x, &z)) != CRYPT_OK) { + goto LBL_ERR; + } + x += z; + *outlen -= z; + break; + + case LTC_ASN1_IA5_STRING: + z = *outlen; + if ((err = der_encode_ia5_string(data, size, out + x, &z)) != CRYPT_OK) { + goto LBL_ERR; + } + x += z; + *outlen -= z; + break; + + case LTC_ASN1_PRINTABLE_STRING: + z = *outlen; + if ((err = der_encode_printable_string(data, size, out + x, &z)) != CRYPT_OK) { + goto LBL_ERR; + } + x += z; + *outlen -= z; + break; + + case LTC_ASN1_SEQUENCE: + z = *outlen; + if ((err = der_encode_sequence(data, size, out + x, &z)) != CRYPT_OK) { + goto LBL_ERR; + } + x += z; + *outlen -= z; + break; + + default: + err = CRYPT_INVALID_ARG; + goto LBL_ERR; + } + } + *outlen = x; + err = CRYPT_OK; + +LBL_ERR: + return err; +} + +#endif diff --git a/src/pk/asn1/der/sequence/der_encode_sequence_multi.c b/src/pk/asn1/der/sequence/der_encode_sequence_multi.c new file mode 100644 index 0000000..1b7fccb --- /dev/null +++ b/src/pk/asn1/der/sequence/der_encode_sequence_multi.c @@ -0,0 +1,121 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org + */ +#include "tomcrypt.h" +#include <stdarg.h> + + +/** + @file der_encode_sequence_multi.c + ASN.1 DER, encode a SEQUENCE, Tom St Denis +*/ + +#ifdef LTC_DER + +int der_encode_sequence_multi(unsigned char *out, unsigned long *outlen, ...) +{ + int err, type; + unsigned long size, x; + void *data; + va_list args; + ltc_asn1_list *list; + + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(outlen != NULL); + + /* get size of output that will be required */ + va_start(args, outlen); + x = 0; + for (;;) { + type = va_arg(args, int); + size = va_arg(args, unsigned long); + data = va_arg(args, void*); + + if (type == LTC_ASN1_EOL) { + break; + } + + switch (type) { + case LTC_ASN1_INTEGER: + case LTC_ASN1_SHORT_INTEGER: + case LTC_ASN1_BIT_STRING: + case LTC_ASN1_OCTET_STRING: + case LTC_ASN1_NULL: + case LTC_ASN1_OBJECT_IDENTIFIER: + case LTC_ASN1_IA5_STRING: + case LTC_ASN1_PRINTABLE_STRING: + case LTC_ASN1_SEQUENCE: + ++x; + break; + + default: + va_end(args); + return CRYPT_INVALID_ARG; + } + } + va_end(args); + + /* allocate structure for x elements */ + if (x == 0) { + return CRYPT_NOP; + } + + list = XCALLOC(sizeof(*list), x); + if (list == NULL) { + return CRYPT_MEM; + } + + /* fill in the structure */ + va_start(args, outlen); + x = 0; + for (;;) { + type = va_arg(args, int); + size = va_arg(args, unsigned long); + data = va_arg(args, void*); + + if (type == LTC_ASN1_EOL) { + break; + } + + switch (type) { + case LTC_ASN1_INTEGER: + case LTC_ASN1_SHORT_INTEGER: + case LTC_ASN1_BIT_STRING: + case LTC_ASN1_OCTET_STRING: + case LTC_ASN1_NULL: + case LTC_ASN1_OBJECT_IDENTIFIER: + case LTC_ASN1_IA5_STRING: + case LTC_ASN1_PRINTABLE_STRING: + case LTC_ASN1_SEQUENCE: + list[x].type = type; + list[x].size = size; + list[x++].data = data; + break; + + default: + va_end(args); + err = CRYPT_INVALID_ARG; + goto LBL_ERR; + } + } + va_end(args); + + err = der_encode_sequence(list, x, out, outlen); +LBL_ERR: + XFREE(list); + return err; +} + +#endif + + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/asn1/der/sequence/der_length_sequence.c b/src/pk/asn1/der/sequence/der_length_sequence.c new file mode 100644 index 0000000..9120451 --- /dev/null +++ b/src/pk/asn1/der/sequence/der_length_sequence.c @@ -0,0 +1,144 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org + */ +#include "tomcrypt.h" +#include <stdarg.h> + + +/** + @file der_length_sequence.c + ASN.1 DER, length a SEQUENCE, Tom St Denis +*/ + +#ifdef LTC_DER + +/** + Get the length of a DER sequence + @param list The sequences of items in the SEQUENCE + @param inlen The number of items + @param outlen [out] The length required in octets to store it + @return CRYPT_OK on success +*/ +int der_length_sequence(ltc_asn1_list *list, unsigned long inlen, + unsigned long *outlen) +{ + int err, type; + unsigned long size, x, y, z, i; + void *data; + + LTC_ARGCHK(list != NULL); + LTC_ARGCHK(outlen != NULL); + + /* get size of output that will be required */ + y = 0; + for (i = 0; i < inlen; i++) { + type = list[i].type; + size = list[i].size; + data = list[i].data; + + if (type == LTC_ASN1_EOL) { + break; + } + + switch (type) { + case LTC_ASN1_INTEGER: + if ((err = der_length_integer(data, &x)) != CRYPT_OK) { + goto LBL_ERR; + } + y += x; + break; + + case LTC_ASN1_SHORT_INTEGER: + if ((err = der_length_short_integer(*((unsigned long *)data), &x)) != CRYPT_OK) { + goto LBL_ERR; + } + y += x; + break; + + case LTC_ASN1_BIT_STRING: + if ((err = der_length_bit_string(size, &x)) != CRYPT_OK) { + goto LBL_ERR; + } + y += x; + break; + + case LTC_ASN1_OCTET_STRING: + if ((err = der_length_octet_string(size, &x)) != CRYPT_OK) { + goto LBL_ERR; + } + y += x; + break; + + case LTC_ASN1_NULL: + y += 2; + break; + + case LTC_ASN1_OBJECT_IDENTIFIER: + if ((err = der_length_object_identifier(data, size, &x)) != CRYPT_OK) { + goto LBL_ERR; + } + y += x; + break; + + case LTC_ASN1_IA5_STRING: + if ((err = der_length_ia5_string(data, size, &x)) != CRYPT_OK) { + goto LBL_ERR; + } + y += x; + break; + + case LTC_ASN1_PRINTABLE_STRING: + if ((err = der_length_printable_string(data, size, &x)) != CRYPT_OK) { + goto LBL_ERR; + } + y += x; + break; + + case LTC_ASN1_SEQUENCE: + if ((err = der_length_sequence(data, size, &x)) != CRYPT_OK) { + goto LBL_ERR; + } + y += x; + break; + + + default: + err = CRYPT_INVALID_ARG; + goto LBL_ERR; + } + } + + /* calc header size */ + z = y; + if (y < 128) { + y += 2; + } else if (y < 256) { + /* 0x30 0x81 LL */ + y += 3; + } else if (y < 65536UL) { + /* 0x30 0x82 LL LL */ + y += 4; + } else if (y < 16777216UL) { + /* 0x30 0x83 LL LL LL */ + y += 5; + } else { + err = CRYPT_INVALID_ARG; + goto LBL_ERR; + } + + /* store size */ + *outlen = y; + err = CRYPT_OK; + +LBL_ERR: + return err; +} + +#endif 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 new file mode 100644 index 0000000..6e731e1 --- /dev/null +++ b/src/pk/asn1/der/short_integer/der_decode_short_integer.c @@ -0,0 +1,68 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org + */ +#include "tomcrypt.h" + +/** + @file der_decode_short_integer.c + ASN.1 DER, decode an integer, Tom St Denis +*/ + + +#ifdef LTC_DER + +/** + Read a mp_int integer + @param in The DER encoded data + @param inlen Size of data + @param num [out] The integer to decode + @return CRYPT_OK if successful +*/ +int der_decode_short_integer(const unsigned char *in, unsigned long inlen, unsigned long *num) +{ + unsigned long len, x, y; + + LTC_ARGCHK(num != NULL); + LTC_ARGCHK(in != NULL); + + /* check length */ + if (inlen < 2) { + return CRYPT_INVALID_PACKET; + } + + /* check header */ + x = 0; + if ((in[x++] & 0x1F) != 0x02) { + return CRYPT_INVALID_PACKET; + } + + /* get the packet len */ + len = in[x++]; + + if (x + len > inlen) { + return CRYPT_INVALID_PACKET; + } + + /* read number */ + y = 0; + while (len--) { + y = (y<<8) | (unsigned long)in[x++]; + } + *num = y; + + return CRYPT_OK; + +} + +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 new file mode 100644 index 0000000..51f45f7 --- /dev/null +++ b/src/pk/asn1/der/short_integer/der_encode_short_integer.c @@ -0,0 +1,97 @@ +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org + */ +#include "tomcrypt.h" + +/** + @file der_encode_short_integer.c + ASN.1 DER, encode an integer, Tom St Denis +*/ + + +#ifdef LTC_DER + +/* Exports a positive integer as DER format (upto 32-bits in size) */ +/** + Store a mp_int integer + @param num The integer to encode + @param out [out] The destination for the DER encoded integers + @param outlen [in/out] The max size and resulting size of the DER encoded integers + @return CRYPT_OK if successful +*/ +int der_encode_short_integer(unsigned long num, unsigned char *out, unsigned long *outlen) +{ + unsigned long len, x, y, z; + int err; + + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(outlen != NULL); + + /* force to 32 bits */ + num &= 0xFFFFFFFFUL; + + /* find out how big this will be */ + if ((err = der_length_short_integer(num, &len)) != CRYPT_OK) { + return err; + } + + if (*outlen < len) { + return CRYPT_BUFFER_OVERFLOW; + } + + /* get len of output */ + z = 0; + y = num; + while (y) { + ++z; + y >>= 8; + } + + /* handle zero */ + if (z == 0) { + z = 1; + } + + /* see if msb is set */ + z += (num&(1UL<<((z<<3) - 1))) ? 1 : 0; + + /* adjust the number so the msB is non-zero */ + for (x = 0; (z <= 4) && (x < (4 - z)); x++) { + num <<= 8; + } + + /* store header */ + x = 0; + out[x++] = 0x02; + out[x++] = z; + + /* if 31st bit is set output a leading zero and decrement count */ + if (z == 5) { + out[x++] = 0; + --z; + } + + /* store values */ + for (y = 0; y < z; y++) { + out[x++] = (num >> 24) & 0xFF; + num <<= 8; + } + + /* we good */ + *outlen = x; + + return CRYPT_OK; +} + +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ 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 new file mode 100644 index 0000000..4d7f4ab --- /dev/null +++ b/src/pk/asn1/der/short_integer/der_length_short_integer.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://libtomcrypt.org + */ +#include "tomcrypt.h" + +/** + @file der_length_short_integer.c + ASN.1 DER, get length of encoding, Tom St Denis +*/ + + +#ifdef LTC_DER +/** + Gets length of DER encoding of num + @param num The integer to get the size of + @param outlen [out] The length of the DER encoding for the given integer + @return CRYPT_OK if successful +*/ +int der_length_short_integer(unsigned long num, unsigned long *outlen) +{ + unsigned long z, y, len; + + LTC_ARGCHK(outlen != NULL); + + /* force to 32 bits */ + num &= 0xFFFFFFFFUL; + + /* get the number of bytes */ + z = 0; + y = num; + while (y) { + ++z; + y >>= 8; + } + + /* handle zero */ + if (z == 0) { + z = 1; + } + + /* we need a 0x02 to indicate it's INTEGER */ + len = 1; + + /* length byte */ + ++len; + + /* bytes in value */ + len += z; + + /* see if msb is set */ + len += (num&(1UL<<((z<<3) - 1))) ? 1 : 0; + + /* return length */ + *outlen = len; + return CRYPT_OK; +} + +#endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/dh/dh.c b/src/pk/dh/dh.c index c2085a6..9782f4f 100644 --- a/src/pk/dh/dh.c +++ b/src/pk/dh/dh.c @@ -518,3 +518,7 @@ done: #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/dh/dh_sys.c b/src/pk/dh/dh_sys.c index 801f85a..a6614d7 100644 --- a/src/pk/dh/dh_sys.c +++ b/src/pk/dh/dh_sys.c @@ -493,3 +493,7 @@ done: return err; } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/dsa/dsa_export.c b/src/pk/dsa/dsa_export.c index 773023e..ee785b7 100644 --- a/src/pk/dsa/dsa_export.c +++ b/src/pk/dsa/dsa_export.c @@ -27,18 +27,13 @@ */ int dsa_export(unsigned char *out, unsigned long *outlen, int type, dsa_key *key) { - unsigned long y, z; - int err; + unsigned char flags[1]; LTC_ARGCHK(out != NULL); LTC_ARGCHK(outlen != NULL); LTC_ARGCHK(key != NULL); /* can we store the static header? */ - if (*outlen < (PACKET_SIZE + 1 + 2)) { - return CRYPT_BUFFER_OVERFLOW; - } - if (type == PK_PRIVATE && key->type != PK_PRIVATE) { return CRYPT_PK_TYPE_MISMATCH; } @@ -47,29 +42,31 @@ int dsa_export(unsigned char *out, unsigned long *outlen, int type, dsa_key *key return CRYPT_INVALID_ARG; } - /* store header */ - packet_store_header(out, PACKET_SECT_DSA, PACKET_SUB_KEY); - y = PACKET_SIZE; + flags[0] = (type != PK_PUBLIC) ? 1 : 0; - /* store g, p, q, qord */ - out[y++] = type; - out[y++] = (key->qord>>8)&255; - out[y++] = key->qord & 255; - - OUTPUT_BIGNUM(&key->g,out,y,z); - OUTPUT_BIGNUM(&key->p,out,y,z); - OUTPUT_BIGNUM(&key->q,out,y,z); - - /* public exponent */ - OUTPUT_BIGNUM(&key->y,out,y,z); - if (type == PK_PRIVATE) { - OUTPUT_BIGNUM(&key->x,out,y,z); + return der_encode_sequence_multi(out, outlen, + LTC_ASN1_BIT_STRING, 1UL, flags, + LTC_ASN1_INTEGER, 1UL, &key->g, + LTC_ASN1_INTEGER, 1UL, &key->p, + LTC_ASN1_INTEGER, 1UL, &key->q, + LTC_ASN1_INTEGER, 1UL, &key->y, + LTC_ASN1_INTEGER, 1UL, &key->x, + LTC_ASN1_EOL, 0UL, NULL); + } else { + return der_encode_sequence_multi(out, outlen, + LTC_ASN1_BIT_STRING, 1UL, flags, + LTC_ASN1_INTEGER, 1UL, &key->g, + LTC_ASN1_INTEGER, 1UL, &key->p, + LTC_ASN1_INTEGER, 1UL, &key->q, + LTC_ASN1_INTEGER, 1UL, &key->y, + LTC_ASN1_EOL, 0UL, NULL); } - - *outlen = y; - return CRYPT_OK; } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/dsa/dsa_free.c b/src/pk/dsa/dsa_free.c index 862a2dd..0bde19f 100644 --- a/src/pk/dsa/dsa_free.c +++ b/src/pk/dsa/dsa_free.c @@ -28,3 +28,7 @@ void dsa_free(dsa_key *key) } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/dsa/dsa_import.c b/src/pk/dsa/dsa_import.c index 6de56e3..b2e1776 100644 --- a/src/pk/dsa/dsa_import.c +++ b/src/pk/dsa/dsa_import.c @@ -26,46 +26,64 @@ */ int dsa_import(const unsigned char *in, unsigned long inlen, dsa_key *key) { - unsigned long x, y; + unsigned char flags[1]; int err; LTC_ARGCHK(in != NULL); LTC_ARGCHK(key != NULL); - /* check length */ - if ((1+2+PACKET_SIZE) > inlen) { - return CRYPT_INVALID_PACKET; - } - - /* check type */ - if ((err = packet_valid_header((unsigned char *)in, PACKET_SECT_DSA, PACKET_SUB_KEY)) != CRYPT_OK) { - return err; - } - y = PACKET_SIZE; - /* init key */ if (mp_init_multi(&key->p, &key->g, &key->q, &key->x, &key->y, NULL) != MP_OKAY) { return CRYPT_MEM; } - /* read type/qord */ - key->type = in[y++]; - key->qord = ((unsigned)in[y]<<8)|((unsigned)in[y+1]); - y += 2; - - /* input publics */ - INPUT_BIGNUM(&key->g,in,x,y, inlen); - INPUT_BIGNUM(&key->p,in,x,y, inlen); - INPUT_BIGNUM(&key->q,in,x,y, inlen); - INPUT_BIGNUM(&key->y,in,x,y, inlen); - if (key->type == PK_PRIVATE) { - INPUT_BIGNUM(&key->x,in,x,y, inlen); + /* get key type */ + if ((err = der_decode_sequence_multi(in, inlen, + LTC_ASN1_BIT_STRING, 1UL, flags, + LTC_ASN1_EOL, 0UL, NULL)) != CRYPT_OK) { + goto error; } - return CRYPT_OK; + if (flags[0] == 1) { + if ((err = der_decode_sequence_multi(in, inlen, + LTC_ASN1_BIT_STRING, 1UL, flags, + LTC_ASN1_INTEGER, 1UL, &key->g, + LTC_ASN1_INTEGER, 1UL, &key->p, + LTC_ASN1_INTEGER, 1UL, &key->q, + LTC_ASN1_INTEGER, 1UL, &key->y, + LTC_ASN1_INTEGER, 1UL, &key->x, + LTC_ASN1_EOL, 0UL, NULL)) != CRYPT_OK) { + goto error; + } + key->type = PK_PRIVATE; + } else { + if ((err = der_decode_sequence_multi(in, inlen, + LTC_ASN1_BIT_STRING, 1UL, flags, + LTC_ASN1_INTEGER, 1UL, &key->g, + LTC_ASN1_INTEGER, 1UL, &key->p, + LTC_ASN1_INTEGER, 1UL, &key->q, + LTC_ASN1_INTEGER, 1UL, &key->y, + LTC_ASN1_EOL, 0UL, NULL)) != CRYPT_OK) { + goto error; + } + key->type = PK_PUBLIC; + } + key->qord = mp_unsigned_bin_size(&key->q); + + if (key->qord >= MDSA_MAX_GROUP || key->qord <= 15 || + key->qord >= mp_unsigned_bin_size(&key->p) || (mp_unsigned_bin_size(&key->p) - key->qord) >= MDSA_DELTA) { + err = CRYPT_INVALID_PACKET; + goto error; + } + + return CRYPT_OK; error: mp_clear_multi(&key->p, &key->g, &key->q, &key->x, &key->y, NULL); return err; } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/dsa/dsa_make_key.c b/src/pk/dsa/dsa_make_key.c index 60683a0..a43da12 100644 --- a/src/pk/dsa/dsa_make_key.c +++ b/src/pk/dsa/dsa_make_key.c @@ -140,3 +140,7 @@ done: } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/dsa/dsa_sign_hash.c b/src/pk/dsa/dsa_sign_hash.c index da92a82..05e11ca 100644 --- a/src/pk/dsa/dsa_sign_hash.c +++ b/src/pk/dsa/dsa_sign_hash.c @@ -21,26 +21,25 @@ Sign a hash with DSA @param in The hash to sign @param inlen The length of the hash to sign - @param out [out] Where to store the signature - @param outlen [in/out] The max size and resulting size of the signature + @param r The "r" integer of the signature (caller must initialize with mp_init() first) + @param s The "s" integer of the signature (caller must initialize with mp_init() first) @param prng An active PRNG state @param wprng The index of the PRNG desired @param key A private DSA key @return CRYPT_OK if successful */ -int dsa_sign_hash(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen, - prng_state *prng, int wprng, dsa_key *key) +int dsa_sign_hash_raw(const unsigned char *in, unsigned long inlen, + mp_int *r, mp_int *s, + prng_state *prng, int wprng, dsa_key *key) { - mp_int k, kinv, tmp, r, s; + mp_int k, kinv, tmp; unsigned char *buf; int err; - unsigned long out1, out2; - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - LTC_ARGCHK(key != NULL); + LTC_ARGCHK(in != NULL); + LTC_ARGCHK(r != NULL); + LTC_ARGCHK(s != NULL); + LTC_ARGCHK(key != NULL); if ((err = prng_is_valid(wprng)) != CRYPT_OK) { return err; @@ -60,7 +59,7 @@ int dsa_sign_hash(const unsigned char *in, unsigned long inlen, } /* Init our temps */ - if ((err = mp_init_multi(&k, &kinv, &r, &s, &tmp, NULL)) != MP_OKAY) { goto error; } + if ((err = mp_init_multi(&k, &kinv, &tmp, NULL)) != MP_OKAY) { goto error; } retry: @@ -85,37 +84,26 @@ retry: if ((err = mp_invmod(&k, &key->q, &kinv)) != MP_OKAY) { goto error; } /* now find r = g^k mod p mod q */ - if ((err = mp_exptmod(&key->g, &k, &key->p, &r)) != MP_OKAY) { goto error; } - if ((err = mp_mod(&r, &key->q, &r)) != MP_OKAY) { goto error; } + if ((err = mp_exptmod(&key->g, &k, &key->p, r)) != MP_OKAY) { goto error; } + if ((err = mp_mod(r, &key->q, r)) != MP_OKAY) { goto error; } - if (mp_iszero(&r) == MP_YES) { goto retry; } + if (mp_iszero(r) == MP_YES) { goto retry; } /* now find s = (in + xr)/k mod q */ if ((err = mp_read_unsigned_bin(&tmp, (unsigned char *)in, inlen)) != MP_OKAY) { goto error; } - if ((err = mp_mul(&key->x, &r, &s)) != MP_OKAY) { goto error; } - if ((err = mp_add(&s, &tmp, &s)) != MP_OKAY) { goto error; } - if ((err = mp_mulmod(&s, &kinv, &key->q, &s)) != MP_OKAY) { goto error; } + if ((err = mp_mul(&key->x, r, s)) != MP_OKAY) { goto error; } + if ((err = mp_add(s, &tmp, s)) != MP_OKAY) { goto error; } + if ((err = mp_mulmod(s, &kinv, &key->q, s)) != MP_OKAY) { goto error; } - if (mp_iszero(&s) == MP_YES) { goto retry; } + if (mp_iszero(s) == MP_YES) { goto retry; } - /* now store em both */ - - /* first check that we have enough room */ - if ((err = der_length_integer(&s, &out1)) != CRYPT_OK) { goto LBL_ERR; } - if ((err = der_length_integer(&r, &out2)) != CRYPT_OK) { goto LBL_ERR; } - if (*outlen < (out1+out2)) { - err = CRYPT_BUFFER_OVERFLOW; - goto LBL_ERR; - } - - /* store ints */ - err = der_put_multi_integer(out, outlen, &r, &s, NULL); + err = CRYPT_OK; goto LBL_ERR; error: err = mpi_to_ltc_error(err); LBL_ERR: - mp_clear_multi(&k, &kinv, &r, &s, &tmp, NULL); + mp_clear_multi(&k, &kinv, &tmp, NULL); #ifdef LTC_CLEAN_STACK zeromem(buf, MDSA_MAX_GROUP); #endif @@ -123,4 +111,49 @@ LBL_ERR: return err; } +/** + Sign a hash with DSA + @param in The hash to sign + @param inlen The length of the hash to sign + @param out [out] Where to store the signature + @param outlen [in/out] The max size and resulting size of the signature + @param prng An active PRNG state + @param wprng The index of the PRNG desired + @param key A private DSA key + @return CRYPT_OK if successful +*/ +int dsa_sign_hash(const unsigned char *in, unsigned long inlen, + unsigned char *out, unsigned long *outlen, + prng_state *prng, int wprng, dsa_key *key) +{ + mp_int r, s; + int err; + + LTC_ARGCHK(in != NULL); + LTC_ARGCHK(out != NULL); + LTC_ARGCHK(outlen != NULL); + LTC_ARGCHK(key != NULL); + + if (mp_init_multi(&r, &s, NULL) != MP_OKAY) { + return CRYPT_MEM; + } + + if ((err = dsa_sign_hash_raw(in, inlen, &r, &s, prng, wprng, key)) != CRYPT_OK) { + goto LBL_ERR; + } + + err = der_encode_sequence_multi(out, outlen, + LTC_ASN1_INTEGER, 1UL, &r, + LTC_ASN1_INTEGER, 1UL, &s, + LTC_ASN1_EOL, 0UL, NULL); + +LBL_ERR: + mp_clear_multi(&r, &s, NULL); + return err; +} + #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/dsa/dsa_verify_hash.c b/src/pk/dsa/dsa_verify_hash.c index 140f0e2..1d7ed56 100644 --- a/src/pk/dsa/dsa_verify_hash.c +++ b/src/pk/dsa/dsa_verify_hash.c @@ -18,6 +18,71 @@ #ifdef MDSA +/** + Verify a DSA signature + @param r DSA "r" parameter + @param s DSA "s" parameter + @param hash The hash that was signed + @param hashlen The length of the hash that was signed + @param stat [out] The result of the signature verification, 1==valid, 0==invalid + @param key The corresponding public DH key + @return CRYPT_OK if successful (even if the signature is invalid) +*/ +int dsa_verify_hash_raw( mp_int *r, mp_int *s, + const unsigned char *hash, unsigned long hashlen, + int *stat, dsa_key *key) +{ + mp_int w, v, u1, u2; + int err; + + LTC_ARGCHK(r != NULL); + LTC_ARGCHK(s != NULL); + LTC_ARGCHK(stat != NULL); + LTC_ARGCHK(key != NULL); + + /* default to invalid signature */ + *stat = 0; + + /* init our variables */ + if ((err = mp_init_multi(&w, &v, &u1, &u2, NULL)) != MP_OKAY) { + return mpi_to_ltc_error(err); + } + + /* neither r or s can be null or >q*/ + if (mp_iszero(r) == MP_YES || mp_iszero(s) == MP_YES || mp_cmp(r, &key->q) != MP_LT || mp_cmp(s, &key->q) != MP_LT) { + err = CRYPT_INVALID_PACKET; + goto done; + } + + /* w = 1/s mod q */ + if ((err = mp_invmod(s, &key->q, &w)) != MP_OKAY) { goto error; } + + /* u1 = m * w mod q */ + if ((err = mp_read_unsigned_bin(&u1, (unsigned char *)hash, hashlen)) != MP_OKAY) { goto error; } + if ((err = mp_mulmod(&u1, &w, &key->q, &u1)) != MP_OKAY) { goto error; } + + /* u2 = r*w mod q */ + if ((err = mp_mulmod(r, &w, &key->q, &u2)) != MP_OKAY) { goto error; } + + /* v = g^u1 * y^u2 mod p mod q */ + if ((err = mp_exptmod(&key->g, &u1, &key->p, &u1)) != MP_OKAY) { goto error; } + if ((err = mp_exptmod(&key->y, &u2, &key->p, &u2)) != MP_OKAY) { goto error; } + if ((err = mp_mulmod(&u1, &u2, &key->p, &v)) != MP_OKAY) { goto error; } + if ((err = mp_mod(&v, &key->q, &v)) != MP_OKAY) { goto error; } + + /* if r = v then we're set */ + if (mp_cmp(r, &v) == MP_EQ) { + *stat = 1; + } + + err = CRYPT_OK; + goto done; + +error : err = mpi_to_ltc_error(err); +done : mp_clear_multi(&w, &v, &u1, &u2, NULL); + return err; +} + /** Verify a DSA signature @param sig The signature @@ -32,59 +97,32 @@ int dsa_verify_hash(const unsigned char *sig, unsigned long siglen, const unsigned char *hash, unsigned long hashlen, int *stat, dsa_key *key) { - mp_int r, s, w, v, u1, u2; - int err; + int err; + mp_int r, s; - LTC_ARGCHK(sig != NULL); - LTC_ARGCHK(hash != NULL); - LTC_ARGCHK(stat != NULL); - LTC_ARGCHK(key != NULL); - - /* default to invalid signature */ - *stat = 0; - - /* init our variables */ - if ((err = mp_init_multi(&r, &s, &w, &v, &u1, &u2, NULL)) != MP_OKAY) { - return mpi_to_ltc_error(err); + if ((err = mp_init_multi(&r, &s, NULL)) != CRYPT_OK) { + return CRYPT_MEM; } - /* read in r followed by s */ - if ((err = der_get_multi_integer(sig, &siglen, &r, &s, NULL)) != CRYPT_OK) { goto done; } - - /* neither r or s can be null */ - if (mp_iszero(&r) == MP_YES || mp_iszero(&s) == MP_YES) { - err = CRYPT_INVALID_PACKET; - goto done; - } - - /* w = 1/s mod q */ - if ((err = mp_invmod(&s, &key->q, &w)) != MP_OKAY) { goto error; } - - /* u1 = m * w mod q */ - if ((err = mp_read_unsigned_bin(&u1, (unsigned char *)hash, hashlen)) != MP_OKAY) { goto error; } - if ((err = mp_mulmod(&u1, &w, &key->q, &u1)) != MP_OKAY) { goto error; } - - /* u2 = r*w mod q */ - if ((err = mp_mulmod(&r, &w, &key->q, &u2)) != MP_OKAY) { goto error; } - - /* v = g^u1 * y^u2 mod p mod q */ - if ((err = mp_exptmod(&key->g, &u1, &key->p, &u1)) != MP_OKAY) { goto error; } - if ((err = mp_exptmod(&key->y, &u2, &key->p, &u2)) != MP_OKAY) { goto error; } - if ((err = mp_mulmod(&u1, &u2, &key->p, &v)) != MP_OKAY) { goto error; } - if ((err = mp_mod(&v, &key->q, &v)) != MP_OKAY) { goto error; } - - /* if r = v then we're set */ - if (mp_cmp(&r, &v) == MP_EQ) { - *stat = 1; + /* decode the sequence */ + if ((err = der_decode_sequence_multi(sig, siglen, + LTC_ASN1_INTEGER, 1UL, &r, + LTC_ASN1_INTEGER, 1UL, &s, + LTC_ASN1_EOL, 0UL, NULL)) != CRYPT_OK) { + goto LBL_ERR; } - err = CRYPT_OK; - goto done; + /* do the op */ + err = dsa_verify_hash_raw(&r, &s, hash, hashlen, stat, key); -error : err = mpi_to_ltc_error(err); -done : mp_clear_multi(&r, &s, &w, &v, &u1, &u2, NULL); +LBL_ERR: + mp_clear_multi(&r, &s, NULL); return err; } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/dsa/dsa_verify_key.c b/src/pk/dsa/dsa_verify_key.c index 3e84261..8eed7f1 100644 --- a/src/pk/dsa/dsa_verify_key.c +++ b/src/pk/dsa/dsa_verify_key.c @@ -96,3 +96,7 @@ done : mp_clear_multi(&tmp, &tmp2, NULL); return err; } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/ecc/ecc.c b/src/pk/ecc/ecc.c index b5e088b..605b0fb 100644 --- a/src/pk/ecc/ecc.c +++ b/src/pk/ecc/ecc.c @@ -24,7 +24,7 @@ #ifdef MECC /* size of our temp buffers for exported keys */ -#define ECC_BUF_SIZE 160 +#define ECC_BUF_SIZE 256 /* max private key size */ #define ECC_MAXSIZE 66 @@ -34,22 +34,6 @@ static const struct { int size; char *name, *prime, *B, *order, *Gx, *Gy; } sets[] = { -#ifdef ECC160 -{ - 20, - "ECC-160", - /* prime */ - "G00000000000000000000000007", - /* B */ - "1oUV2vOaSlWbxr6", - /* order */ - "G0000000000004sCQUtDxaqDUN5", - /* Gx */ - "jpqOf1BHus6Yd/pyhyVpP", - /* Gy */ - "D/wykuuIFfr+vPyx7kQEPu8MixO", -}, -#endif #ifdef ECC192 { 24, @@ -165,70 +149,6 @@ static const struct { } }; -#if 0 - -/* you plug in a prime and B value and it finds a pseudo-random base point */ -void ecc_find_base(void) -{ - static char *prime = "26959946667150639794667015087019630673637144422540572481103610249951"; - static char *order = "26959946667150639794667015087019637467111563745054605861463538557247"; - static char *b = "9538957348957353489587"; - mp_int pp, p, r, B, tmp1, tmp2, tx, ty, x, y; - char buf[4096]; - int i; - - mp_init_multi(&tx, &ty, &x, &y, &p, &pp, &r, &B, &tmp1, &tmp2, NULL); - mp_read_radix(&p, prime, 10); - mp_read_radix(&r, order, 10); - mp_read_radix(&B, b, 10); - - /* get (p+1)/4 */ - mp_add_d(&p, 1, &pp); - mp_div_2(&pp, &pp); - mp_div_2(&pp, &pp); - - buf[0] = 0; - do { - printf("."); fflush(stdout); - /* make a random value of x */ - for (i = 0; i < 16; i++) buf[i+1] = rand() & 255; - mp_read_raw(&x, buf, 17); - mp_copy(&x, &tx); - - /* now compute x^3 - 3x + b */ - mp_expt_d(&x, 3, &tmp1); - mp_mul_d(&x, 3, &tmp2); - mp_sub(&tmp1, &tmp2, &tmp1); - mp_add(&tmp1, &B, &tmp1); - mp_mod(&tmp1, &p, &tmp1); - - /* now compute sqrt via x^((p+1)/4) */ - mp_exptmod(&tmp1, &pp, &p, &tmp2); - mp_copy(&tmp2, &ty); - - /* now square it */ - mp_sqrmod(&tmp2, &p, &tmp2); - - /* tmp2 should equal tmp1 */ - } while (mp_cmp(&tmp1, &tmp2)); - - /* now output values in way that libtomcrypt wants */ - mp_todecimal(&p, buf); - printf("\n\np==%s\n", buf); - mp_tohex(&B, buf); - printf("b==%s\n", buf); - mp_todecimal(&r, buf); - printf("r==%s\n", buf); - mp_tohex(&tx, buf); - printf("Gx==%s\n", buf); - mp_tohex(&ty, buf); - printf("Gy==%s\n", buf); - - mp_clear_multi(&tx, &ty, &x, &y, &p, &pp, &r, &B, &tmp1, &tmp2, NULL); -} - -#endif - static int is_valid_idx(int n) { int x; @@ -263,7 +183,7 @@ static void del_point(ecc_point *p) } } -static int ecc_map(ecc_point *P, mp_int *modulus, mp_int *mu) +static int ecc_map(ecc_point *P, mp_int *modulus, mp_digit mp) { mp_int t1, t2; int err; @@ -272,20 +192,23 @@ static int ecc_map(ecc_point *P, mp_int *modulus, mp_int *mu) return CRYPT_MEM; } + /* first map z back to normal */ + if ((err = mp_montgomery_reduce(&P->z, modulus, mp)) != MP_OKAY) { goto error; } + /* get 1/z */ - if ((err = mp_invmod(&P->z, modulus, &t1)) != MP_OKAY) { goto error; } + if ((err = mp_invmod(&P->z, modulus, &t1)) != MP_OKAY) { goto error; } /* get 1/z^2 and 1/z^3 */ - if ((err = mp_sqr(&t1, &t2)) != MP_OKAY) { goto error; } - if ((err = mp_reduce(&t2, modulus, mu)) != MP_OKAY) { goto error; } - if ((err = mp_mul(&t1, &t2, &t1)) != MP_OKAY) { goto error; } - if ((err = mp_reduce(&t1, modulus, mu)) != MP_OKAY) { goto error; } + if ((err = mp_sqr(&t1, &t2)) != MP_OKAY) { goto error; } + if ((err = mp_mod(&t2, modulus, &t2)) != MP_OKAY) { goto error; } + if ((err = mp_mul(&t1, &t2, &t1)) != MP_OKAY) { goto error; } + if ((err = mp_mod(&t1, modulus, &t1)) != MP_OKAY) { goto error; } /* multiply against x/y */ - if ((err = mp_mul(&P->x, &t2, &P->x)) != MP_OKAY) { goto error; } - if ((err = mp_reduce(&P->x, modulus, mu)) != MP_OKAY) { goto error; } - if ((err = mp_mul(&P->y, &t1, &P->y)) != MP_OKAY) { goto error; } - if ((err = mp_reduce(&P->y, modulus, mu)) != MP_OKAY) { goto error; } + if ((err = mp_mul(&P->x, &t2, &P->x)) != MP_OKAY) { goto error; } + if ((err = mp_montgomery_reduce(&P->x, modulus, mp)) != MP_OKAY) { goto error; } + if ((err = mp_mul(&P->y, &t1, &P->y)) != MP_OKAY) { goto error; } + if ((err = mp_montgomery_reduce(&P->y, modulus, mp)) != MP_OKAY) { goto error; } mp_set(&P->z, 1); err = CRYPT_OK; @@ -298,9 +221,8 @@ done: } - /* double a point R = 2P, R can be P*/ -static int dbl_point(ecc_point *P, ecc_point *R, mp_int *modulus, mp_int *mu) +static int dbl_point(ecc_point *P, ecc_point *R, mp_int *modulus, mp_digit mp) { mp_int t1, t2; int err; @@ -315,10 +237,10 @@ static int dbl_point(ecc_point *P, ecc_point *R, mp_int *modulus, mp_int *mu) /* t1 = Z * Z */ if ((err = mp_sqr(&R->z, &t1)) != MP_OKAY) { goto error; } - if ((err = mp_reduce(&t1, modulus, mu)) != MP_OKAY) { goto error; } + if ((err = mp_montgomery_reduce(&t1, modulus, mp)) != MP_OKAY) { goto error; } /* Z = Y * Z */ if ((err = mp_mul(&R->z, &R->y, &R->z)) != MP_OKAY) { goto error; } - if ((err = mp_reduce(&R->z, modulus, mu)) != MP_OKAY) { goto error; } + if ((err = mp_montgomery_reduce(&R->z, modulus, mp)) != MP_OKAY) { goto error; } /* Z = 2Z */ if ((err = mp_mul_2(&R->z, &R->z)) != MP_OKAY) { goto error; } if (mp_cmp(&R->z, modulus) != MP_LT) { @@ -337,7 +259,7 @@ static int dbl_point(ecc_point *P, ecc_point *R, mp_int *modulus, mp_int *mu) } /* T2 = T1 * T2 */ if ((err = mp_mul(&t1, &t2, &t2)) != MP_OKAY) { goto error; } - if ((err = mp_reduce(&t2, modulus, mu)) != MP_OKAY) { goto error; } + if ((err = mp_montgomery_reduce(&t2, modulus, mp)) != MP_OKAY) { goto error; } /* T1 = 2T2 */ if ((err = mp_mul_2(&t2, &t1)) != MP_OKAY) { goto error; } if (mp_cmp(&t1, modulus) != MP_LT) { @@ -356,10 +278,10 @@ static int dbl_point(ecc_point *P, ecc_point *R, mp_int *modulus, mp_int *mu) } /* Y = Y * Y */ if ((err = mp_sqr(&R->y, &R->y)) != MP_OKAY) { goto error; } - if ((err = mp_reduce(&R->y, modulus, mu)) != MP_OKAY) { goto error; } + if ((err = mp_montgomery_reduce(&R->y, modulus, mp)) != MP_OKAY) { goto error; } /* T2 = Y * Y */ if ((err = mp_sqr(&R->y, &t2)) != MP_OKAY) { goto error; } - if ((err = mp_reduce(&t2, modulus, mu)) != MP_OKAY) { goto error; } + if ((err = mp_montgomery_reduce(&t2, modulus, mp)) != MP_OKAY) { goto error; } /* T2 = T2/2 */ if (mp_isodd(&t2)) { if ((err = mp_add(&t2, modulus, &t2)) != MP_OKAY) { goto error; } @@ -367,11 +289,11 @@ static int dbl_point(ecc_point *P, ecc_point *R, mp_int *modulus, mp_int *mu) if ((err = mp_div_2(&t2, &t2)) != MP_OKAY) { goto error; } /* Y = Y * X */ if ((err = mp_mul(&R->y, &R->x, &R->y)) != MP_OKAY) { goto error; } - if ((err = mp_reduce(&R->y, modulus, mu)) != MP_OKAY) { goto error; } + if ((err = mp_montgomery_reduce(&R->y, modulus, mp)) != MP_OKAY) { goto error; } /* X = T1 * T1 */ if ((err = mp_sqr(&t1, &R->x)) != MP_OKAY) { goto error; } - if ((err = mp_reduce(&R->x, modulus, mu)) != MP_OKAY) { goto error; } + if ((err = mp_montgomery_reduce(&R->x, modulus, mp)) != MP_OKAY) { goto error; } /* X = X - Y */ if ((err = mp_sub(&R->x, &R->y, &R->x)) != MP_OKAY) { goto error; } if (mp_cmp_d(&R->x, 0) == MP_LT) { @@ -390,7 +312,7 @@ static int dbl_point(ecc_point *P, ecc_point *R, mp_int *modulus, mp_int *mu) } /* Y = Y * T1 */ if ((err = mp_mul(&R->y, &t1, &R->y)) != MP_OKAY) { goto error; } - if ((err = mp_reduce(&R->y, modulus, mu)) != MP_OKAY) { goto error; } + if ((err = mp_montgomery_reduce(&R->y, modulus, mp)) != MP_OKAY) { goto error; } /* Y = Y - T2 */ if ((err = mp_sub(&R->y, &t2, &R->y)) != MP_OKAY) { goto error; } if (mp_cmp_d(&R->y, 0) == MP_LT) { @@ -407,7 +329,7 @@ done: } /* add two different points over Z/pZ, R = P + Q, note R can equal either P or Q */ -static int add_point(ecc_point *P, ecc_point *Q, ecc_point *R, mp_int *modulus, mp_int *mu) +static int add_point(ecc_point *P, ecc_point *Q, ecc_point *R, mp_int *modulus, mp_digit mp) { mp_int t1, t2, x, y, z; int err; @@ -420,34 +342,31 @@ static int add_point(ecc_point *P, ecc_point *Q, ecc_point *R, mp_int *modulus, if ((err = mp_copy(&P->y, &y)) != MP_OKAY) { goto error; } if ((err = mp_copy(&P->z, &z)) != MP_OKAY) { goto error; } - /* if Z' != 1 */ - if (mp_cmp_d(&Q->z, 1) != MP_EQ) { /* T1 = Z' * Z' */ if ((err = mp_sqr(&Q->z, &t1)) != MP_OKAY) { goto error; } - if ((err = mp_reduce(&t1, modulus, mu)) != MP_OKAY) { goto error; } + if ((err = mp_montgomery_reduce(&t1, modulus, mp)) != MP_OKAY) { goto error; } /* X = X * T1 */ if ((err = mp_mul(&t1, &x, &x)) != MP_OKAY) { goto error; } - if ((err = mp_reduce(&x, modulus, mu)) != MP_OKAY) { goto error; } + if ((err = mp_montgomery_reduce(&x, modulus, mp)) != MP_OKAY) { goto error; } /* T1 = Z' * T1 */ if ((err = mp_mul(&Q->z, &t1, &t1)) != MP_OKAY) { goto error; } - if ((err = mp_reduce(&t1, modulus, mu)) != MP_OKAY) { goto error; } + if ((err = mp_montgomery_reduce(&t1, modulus, mp)) != MP_OKAY) { goto error; } /* Y = Y * T1 */ if ((err = mp_mul(&t1, &y, &y)) != MP_OKAY) { goto error; } - if ((err = mp_reduce(&y, modulus, mu)) != MP_OKAY) { goto error; } - } + if ((err = mp_montgomery_reduce(&y, modulus, mp)) != MP_OKAY) { goto error; } /* T1 = Z*Z */ if ((err = mp_sqr(&z, &t1)) != MP_OKAY) { goto error; } - if ((err = mp_reduce(&t1, modulus, mu)) != MP_OKAY) { goto error; } + if ((err = mp_montgomery_reduce(&t1, modulus, mp)) != MP_OKAY) { goto error; } /* T2 = X' * T1 */ if ((err = mp_mul(&Q->x, &t1, &t2)) != MP_OKAY) { goto error; } - if ((err = mp_reduce(&t2, modulus, mu)) != MP_OKAY) { goto error; } + if ((err = mp_montgomery_reduce(&t2, modulus, mp)) != MP_OKAY) { goto error; } /* T1 = Z * T1 */ if ((err = mp_mul(&z, &t1, &t1)) != MP_OKAY) { goto error; } - if ((err = mp_reduce(&t1, modulus, mu)) != MP_OKAY) { goto error; } + if ((err = mp_montgomery_reduce(&t1, modulus, mp)) != MP_OKAY) { goto error; } /* T1 = Y' * T1 */ if ((err = mp_mul(&Q->y, &t1, &t1)) != MP_OKAY) { goto error; } - if ((err = mp_reduce(&t1, modulus, mu)) != MP_OKAY) { goto error; } + if ((err = mp_montgomery_reduce(&t1, modulus, mp)) != MP_OKAY) { goto error; } /* Y = Y - T1 */ if ((err = mp_sub(&y, &t1, &y)) != MP_OKAY) { goto error; } @@ -484,28 +403,28 @@ static int add_point(ecc_point *P, ecc_point *Q, ecc_point *R, mp_int *modulus, if (mp_cmp_d(&Q->z, 1) != MP_EQ) { /* Z = Z * Z' */ if ((err = mp_mul(&z, &Q->z, &z)) != MP_OKAY) { goto error; } - if ((err = mp_reduce(&z, modulus, mu)) != MP_OKAY) { goto error; } + if ((err = mp_montgomery_reduce(&z, modulus, mp)) != MP_OKAY) { goto error; } } /* Z = Z * X */ if ((err = mp_mul(&z, &x, &z)) != MP_OKAY) { goto error; } - if ((err = mp_reduce(&z, modulus, mu)) != MP_OKAY) { goto error; } + if ((err = mp_montgomery_reduce(&z, modulus, mp)) != MP_OKAY) { goto error; } /* T1 = T1 * X */ if ((err = mp_mul(&t1, &x, &t1)) != MP_OKAY) { goto error; } - if ((err = mp_reduce(&t1, modulus, mu)) != MP_OKAY) { goto error; } + if ((err = mp_montgomery_reduce(&t1, modulus, mp)) != MP_OKAY) { goto error; } /* X = X * X */ if ((err = mp_sqr(&x, &x)) != MP_OKAY) { goto error; } - if ((err = mp_reduce(&x, modulus, mu)) != MP_OKAY) { goto error; } + if ((err = mp_montgomery_reduce(&x, modulus, mp)) != MP_OKAY) { goto error; } /* T2 = T2 * x */ if ((err = mp_mul(&t2, &x, &t2)) != MP_OKAY) { goto error; } - if ((err = mp_reduce(&t2, modulus, mu)) != MP_OKAY) { goto error; } + if ((err = mp_montgomery_reduce(&t2, modulus, mp)) != MP_OKAY) { goto error; } /* T1 = T1 * X */ if ((err = mp_mul(&t1, &x, &t1)) != MP_OKAY) { goto error; } - if ((err = mp_reduce(&t1, modulus, mu)) != MP_OKAY) { goto error; } + if ((err = mp_montgomery_reduce(&t1, modulus, mp)) != MP_OKAY) { goto error; } /* X = Y*Y */ if ((err = mp_sqr(&y, &x)) != MP_OKAY) { goto error; } - if ((err = mp_reduce(&x, modulus, mu)) != MP_OKAY) { goto error; } + if ((err = mp_montgomery_reduce(&x, modulus, mp)) != MP_OKAY) { goto error; } /* X = X - T2 */ if ((err = mp_sub(&x, &t2, &x)) != MP_OKAY) { goto error; } if (mp_cmp_d(&x, 0) == MP_LT) { @@ -524,7 +443,7 @@ static int add_point(ecc_point *P, ecc_point *Q, ecc_point *R, mp_int *modulus, } /* T2 = T2 * Y */ if ((err = mp_mul(&t2, &y, &t2)) != MP_OKAY) { goto error; } - if ((err = mp_reduce(&t2, modulus, mu)) != MP_OKAY) { goto error; } + if ((err = mp_montgomery_reduce(&t2, modulus, mp)) != MP_OKAY) { goto error; } /* Y = T2 - T1 */ if ((err = mp_sub(&t2, &t1, &y)) != MP_OKAY) { goto error; } if (mp_cmp_d(&y, 0) == MP_LT) { @@ -553,22 +472,25 @@ done: #define WINSIZE 4 /* perform R = kG where k == integer and G == ecc_point */ -static int ecc_mulmod(mp_int *k, ecc_point *G, ecc_point *R, mp_int *modulus) +static int ecc_mulmod(mp_int *k, ecc_point *G, ecc_point *R, mp_int *modulus, int map) { ecc_point *tG, *M[8]; int i, j, err; mp_int mu; - mp_digit buf; + mp_digit buf, mp; int first, bitbuf, bitcpy, bitcnt, mode, digidx; - /* init barrett reduction */ - if ((err = mp_init(&mu)) != MP_OKAY) { - return mpi_to_ltc_error(err); - } - if ((err = mp_reduce_setup(&mu, modulus)) != MP_OKAY) { + /* init montgomery reduction */ + if ((err = mp_montgomery_setup(modulus, &mp)) != MP_OKAY) { + return CRYPT_INVALID_ARG; + } + if ((err = mp_init(&mu)) != MP_OKAY) { + return CRYPT_MEM; + } + if ((err = mp_montgomery_calc_normalization(&mu, modulus)) != MP_OKAY) { mp_clear(&mu); - return mpi_to_ltc_error(err); - } + return CRYPT_INVALID_ARG; + } /* alloc ram for window temps */ for (i = 0; i < 8; i++) { @@ -586,20 +508,21 @@ static int ecc_mulmod(mp_int *k, ecc_point *G, ecc_point *R, mp_int *modulus) tG = new_point(); if (tG == NULL) { err = CRYPT_MEM; goto done; } - /* tG = G */ - if ((err = mp_copy(&G->x, &tG->x)) != MP_OKAY) { goto error; } - if ((err = mp_copy(&G->y, &tG->y)) != MP_OKAY) { goto error; } - if ((err = mp_copy(&G->z, &tG->z)) != MP_OKAY) { goto error; } + /* tG = G and convert to montgomery */ + if ((err = mp_mulmod(&G->x, &mu, modulus, &tG->x)) != MP_OKAY) { goto error; } + if ((err = mp_mulmod(&G->y, &mu, modulus, &tG->y)) != MP_OKAY) { goto error; } + if ((err = mp_mulmod(&G->z, &mu, modulus, &tG->z)) != MP_OKAY) { goto error; } + mp_clear(&mu); /* calc the M tab, which holds kG for k==8..15 */ /* M[0] == 8G */ - if ((err = dbl_point(G, M[0], modulus, &mu)) != CRYPT_OK) { goto done; } - if ((err = dbl_point(M[0], M[0], modulus, &mu)) != CRYPT_OK) { goto done; } - if ((err = dbl_point(M[0], M[0], modulus, &mu)) != CRYPT_OK) { goto done; } + if ((err = dbl_point(tG, M[0], modulus, mp)) != CRYPT_OK) { goto done; } + if ((err = dbl_point(M[0], M[0], modulus, mp)) != CRYPT_OK) { goto done; } + if ((err = dbl_point(M[0], M[0], modulus, mp)) != CRYPT_OK) { goto done; } /* now find (8+k)G for k=1..7 */ for (j = 9; j < 16; j++) { - if ((err = add_point(M[j-9], G, M[j-8], modulus, &mu)) != CRYPT_OK) { goto done; } + if ((err = add_point(M[j-9], tG, M[j-8], modulus, mp)) != CRYPT_OK) { goto done; } } /* setup sliding window */ @@ -621,7 +544,7 @@ static int ecc_mulmod(mp_int *k, ecc_point *G, ecc_point *R, mp_int *modulus) bitcnt = (int) DIGIT_BIT; } - /* grab the next msb from the multiplicand */ + /* grab the next msb from the ltiplicand */ i = (buf >> (DIGIT_BIT - 1)) & 1; buf <<= 1; @@ -632,7 +555,7 @@ static int ecc_mulmod(mp_int *k, ecc_point *G, ecc_point *R, mp_int *modulus) /* if the bit is zero and mode == 1 then we double */ if (mode == 1 && i == 0) { - if ((err = dbl_point(R, R, modulus, &mu)) != CRYPT_OK) { goto done; } + if ((err = dbl_point(R, R, modulus, mp)) != CRYPT_OK) { goto done; } continue; } @@ -653,11 +576,11 @@ static int ecc_mulmod(mp_int *k, ecc_point *G, ecc_point *R, mp_int *modulus) /* ok window is filled so double as required and add */ /* double first */ for (j = 0; j < WINSIZE; j++) { - if ((err = dbl_point(R, R, modulus, &mu)) != CRYPT_OK) { goto done; } + if ((err = dbl_point(R, R, modulus, mp)) != CRYPT_OK) { goto done; } } /* then add, bitbuf will be 8..15 [8..2^WINSIZE] guaranteed */ - if ((err = add_point(R, M[bitbuf-8], R, modulus, &mu)) != CRYPT_OK) { goto done; } + if ((err = add_point(R, M[bitbuf-8], R, modulus, mp)) != CRYPT_OK) { goto done; } } /* empty window and reset */ bitcpy = bitbuf = 0; @@ -671,7 +594,7 @@ static int ecc_mulmod(mp_int *k, ecc_point *G, ecc_point *R, mp_int *modulus) for (j = 0; j < bitcpy; j++) { /* only double if we have had at least one add first */ if (first == 0) { - if ((err = dbl_point(R, R, modulus, &mu)) != CRYPT_OK) { goto done; } + if ((err = dbl_point(R, R, modulus, mp)) != CRYPT_OK) { goto done; } } bitbuf <<= 1; @@ -684,14 +607,19 @@ static int ecc_mulmod(mp_int *k, ecc_point *G, ecc_point *R, mp_int *modulus) first = 0; } else { /* then add */ - if ((err = add_point(R, tG, R, modulus, &mu)) != CRYPT_OK) { goto done; } + if ((err = add_point(R, tG, R, modulus, mp)) != CRYPT_OK) { goto done; } } } } } /* map R back from projective space */ - err = ecc_map(R, modulus, &mu); + if (map) { + err = ecc_map(R, modulus, mp); + } else { + err = CRYPT_OK; + } + goto done; error: err = mpi_to_ltc_error(err); @@ -700,7 +628,6 @@ done: for (i = 0; i < 8; i++) { del_point(M[i]); } - mp_clear(&mu); return err; } @@ -756,7 +683,7 @@ int ecc_test(void) /* then we should have G == (order + 1)G */ if ((err = mp_add_d(&order, 1, &order)) != MP_OKAY) { goto error; } - if ((err = ecc_mulmod(&order, G, GG, &modulus)) != CRYPT_OK) { goto done; } + if ((err = ecc_mulmod(&order, G, GG, &modulus, 1)) != CRYPT_OK) { goto done; } if (mp_cmp(&G->x, &GG->x) != 0 || mp_cmp(&G->y, &GG->y) != 0) { err = CRYPT_FAIL_TESTVECTOR; goto done; @@ -855,7 +782,7 @@ int ecc_make_key(prng_state *prng, int wprng, int keysize, ecc_key *key) if ((err = mp_read_unsigned_bin(&key->k, (unsigned char *)buf, keysize)) != MP_OKAY) { goto error; } /* make the public key */ - if ((err = ecc_mulmod(&key->k, base, &key->pubkey, &prime)) != CRYPT_OK) { goto LBL_ERR; } + if ((err = ecc_mulmod(&key->k, base, &key->pubkey, &prime, 1)) != CRYPT_OK) { goto LBL_ERR; } key->type = PK_PRIVATE; /* shrink key */ @@ -985,46 +912,50 @@ done: */ int ecc_export(unsigned char *out, unsigned long *outlen, int type, ecc_key *key) { - unsigned long y, z; - int cp, err; + int cp, err; + unsigned char flags[2]; + unsigned long key_size; LTC_ARGCHK(out != NULL); LTC_ARGCHK(outlen != NULL); LTC_ARGCHK(key != NULL); - /* can we store the static header? */ - if (*outlen < (PACKET_SIZE + 3)) { - return CRYPT_BUFFER_OVERFLOW; - } - /* type valid? */ if (key->type != PK_PRIVATE && type == PK_PRIVATE) { return CRYPT_PK_TYPE_MISMATCH; } - /* output type and magic byte */ - y = PACKET_SIZE; - out[y++] = (unsigned char)type; - out[y++] = (unsigned char)sets[key->idx].size; + if (is_valid_idx(key->idx) == 0) { + return CRYPT_INVALID_ARG; + } - /* output x coordinate */ - OUTPUT_BIGNUM(&(key->pubkey.x), out, y, z); - - /* compress y and output it */ + /* compress the y part */ if ((err = compress_y_point(&key->pubkey, key->idx, &cp)) != CRYPT_OK) { return err; } - out[y++] = (unsigned char)cp; + flags[1] = cp; + + /* we store the NIST byte size */ + key_size = sets[key->idx].size; if (type == PK_PRIVATE) { - OUTPUT_BIGNUM(&key->k, out, y, z); + flags[0] = 1; + err = der_encode_sequence_multi(out, outlen, + LTC_ASN1_BIT_STRING, 2UL, flags, + LTC_ASN1_SHORT_INTEGER, 1UL, &key_size, + LTC_ASN1_INTEGER, 1UL, &key->pubkey.x, + LTC_ASN1_INTEGER, 1UL, &key->k, + LTC_ASN1_EOL, 0UL, NULL); + } else { + flags[0] = 0; + err = der_encode_sequence_multi(out, outlen, + LTC_ASN1_BIT_STRING, 2UL, flags, + LTC_ASN1_SHORT_INTEGER, 1UL, &key_size, + LTC_ASN1_INTEGER, 1UL, &key->pubkey.x, + LTC_ASN1_EOL, 0UL, NULL); } - /* store header */ - packet_store_header(out, PACKET_SECT_ECC, PACKET_SUB_KEY); - *outlen = y; - - return CRYPT_OK; + return err; } /** @@ -1036,72 +967,66 @@ int ecc_export(unsigned char *out, unsigned long *outlen, int type, ecc_key *key */ int ecc_import(const unsigned char *in, unsigned long inlen, ecc_key *key) { - unsigned long x, y, s; - int err; + unsigned long key_size; + unsigned char flags[2]; + int err; LTC_ARGCHK(in != NULL); LTC_ARGCHK(key != NULL); - /* check length */ - if ((3+PACKET_SIZE) > inlen) { - return CRYPT_INVALID_PACKET; - } - - /* check type */ - if ((err = packet_valid_header((unsigned char *)in, PACKET_SECT_ECC, PACKET_SUB_KEY)) != CRYPT_OK) { - return err; - } - /* init key */ if (mp_init_multi(&key->pubkey.x, &key->pubkey.y, &key->pubkey.z, &key->k, NULL) != MP_OKAY) { return CRYPT_MEM; } - y = PACKET_SIZE; - key->type = (int)in[y++]; - s = (unsigned long)in[y++]; - - for (x = 0; (s > (unsigned long)sets[x].size) && (sets[x].size != 0); x++); - if (sets[x].size == 0) { - err = CRYPT_INVALID_KEYSIZE; + /* find out what type of key it is */ + if ((err = der_decode_sequence_multi(in, inlen, + LTC_ASN1_BIT_STRING, 2UL, &flags, + LTC_ASN1_EOL, 0UL, NULL)) != CRYPT_OK) { goto error; } - key->idx = (int)x; - /* type check both values */ - if ((key->type != PK_PUBLIC) && (key->type != PK_PRIVATE)) { + + if (flags[0] == 1) { + /* private key */ + key->type = PK_PRIVATE; + if ((err = der_decode_sequence_multi(in, inlen, + LTC_ASN1_BIT_STRING, 2UL, flags, + LTC_ASN1_SHORT_INTEGER, 1UL, &key_size, + LTC_ASN1_INTEGER, 1UL, &key->pubkey.x, + LTC_ASN1_INTEGER, 1UL, &key->k, + LTC_ASN1_EOL, 0UL, NULL)) != CRYPT_OK) { + goto error; + } + } else { + /* public key */ + /* private key */ + key->type = PK_PUBLIC; + if ((err = der_decode_sequence_multi(in, inlen, + LTC_ASN1_BIT_STRING, 2UL, flags, + LTC_ASN1_SHORT_INTEGER, 1UL, &key_size, + LTC_ASN1_INTEGER, 1UL, &key->pubkey.x, + LTC_ASN1_EOL, 0UL, NULL)) != CRYPT_OK) { + goto error; + } + } + + /* find the idx */ + for (key->idx = 0; sets[key->idx].size && (unsigned long)sets[key->idx].size != key_size; ++key->idx); + if (sets[key->idx].size == 0) { err = CRYPT_INVALID_PACKET; goto error; } - /* is the key idx valid? */ - if (is_valid_idx(key->idx) != 1) { - err = CRYPT_INVALID_PACKET; + /* compute y */ + if ((err = expand_y_point(&key->pubkey, key->idx, flags[1])) != CRYPT_OK) { goto error; } - /* load x coordinate */ - INPUT_BIGNUM(&key->pubkey.x, in, x, y, inlen); - - /* load y */ - x = (unsigned long)in[y++]; - if ((err = expand_y_point(&key->pubkey, key->idx, (int)x)) != CRYPT_OK) { - goto error; - } - - if (key->type == PK_PRIVATE) { - /* load private key */ - INPUT_BIGNUM(&key->k, in, x, y, inlen); - } - - /* eliminate private key if public */ - if (key->type == PK_PUBLIC) { - mp_clear(&key->k); - } - - /* z is always 1 */ + /* set z */ mp_set(&key->pubkey.z, 1); + /* we're good */ return CRYPT_OK; error: mp_clear_multi(&key->pubkey.x, &key->pubkey.y, &key->pubkey.z, &key->k, NULL); @@ -1112,14 +1037,14 @@ error: Create an ECC shared secret between two keys @param private_key The private ECC key @param public_key The public key - @param out [out] Destination of the shared secret + @param out [out] Destination of the shared secret (Conforms to EC-DH from ANSI X9.63) @param outlen [in/out] The max size and resulting size of the shared secret @return CRYPT_OK if successful */ int ecc_shared_secret(ecc_key *private_key, ecc_key *public_key, unsigned char *out, unsigned long *outlen) { - unsigned long x, y; + unsigned long x; ecc_point *result; mp_int prime; int err; @@ -1134,6 +1059,10 @@ int ecc_shared_secret(ecc_key *private_key, ecc_key *public_key, return CRYPT_PK_NOT_PRIVATE; } + if (is_valid_idx(private_key->idx) == 0) { + return CRYPT_INVALID_ARG; + } + if (private_key->idx != public_key->idx) { return CRYPT_PK_TYPE_MISMATCH; } @@ -1149,21 +1078,19 @@ int ecc_shared_secret(ecc_key *private_key, ecc_key *public_key, return mpi_to_ltc_error(err); } - if ((err = mp_read_radix(&prime, (char *)sets[private_key->idx].prime, 64)) != MP_OKAY) { goto error; } - if ((err = ecc_mulmod(&private_key->k, &public_key->pubkey, result, &prime)) != CRYPT_OK) { goto done1; } + if ((err = mp_read_radix(&prime, (char *)sets[private_key->idx].prime, 64)) != MP_OKAY) { goto error; } + if ((err = ecc_mulmod(&private_key->k, &public_key->pubkey, result, &prime, 1)) != CRYPT_OK) { goto done1; } - x = (unsigned long)mp_unsigned_bin_size(&result->x); - y = (unsigned long)mp_unsigned_bin_size(&result->y); - - if (*outlen < (x+y)) { + x = (unsigned long)mp_unsigned_bin_size(&prime); + if (*outlen < x) { err = CRYPT_BUFFER_OVERFLOW; goto done1; } - *outlen = x+y; - if ((err = mp_to_unsigned_bin(&result->x, out)) != MP_OKAY) { goto error; } - if ((err = mp_to_unsigned_bin(&result->y, out+x)) != MP_OKAY) { goto error; } + zeromem(out, x); + if ((err = mp_to_unsigned_bin(&result->x, out + (x - mp_unsigned_bin_size(&result->x)))) != MP_OKAY) { goto error; } - err = CRYPT_OK; + err = CRYPT_OK; + *outlen = x; goto done1; error: err = mpi_to_ltc_error(err); @@ -1192,3 +1119,7 @@ int ecc_get_size(ecc_key *key) #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/ecc/ecc_sys.c b/src/pk/ecc/ecc_sys.c index d5576f6..3cdc241 100644 --- a/src/pk/ecc/ecc_sys.c +++ b/src/pk/ecc/ecc_sys.c @@ -33,7 +33,7 @@ int ecc_encrypt_key(const unsigned char *in, unsigned long inlen, { unsigned char *pub_expt, *ecc_shared, *skey; ecc_key pubkey; - unsigned long x, y, z, hashsize, pubkeysize; + unsigned long x, y, pubkeysize; int err; LTC_ARGCHK(in != NULL); @@ -82,53 +82,29 @@ int ecc_encrypt_key(const unsigned char *in, unsigned long inlen, goto LBL_ERR; } - /* now check if the out buffer is big enough */ - if (*outlen < (9 + PACKET_SIZE + pubkeysize + hash_descriptor[hash].hashsize)) { - ecc_free(&pubkey); - err = CRYPT_BUFFER_OVERFLOW; - goto LBL_ERR; - } - /* make random key */ - hashsize = hash_descriptor[hash].hashsize; - x = ECC_BUF_SIZE; + x = ECC_BUF_SIZE; if ((err = ecc_shared_secret(&pubkey, key, ecc_shared, &x)) != CRYPT_OK) { ecc_free(&pubkey); goto LBL_ERR; } ecc_free(&pubkey); - z = MAXBLOCKSIZE; - if ((err = hash_memory(hash, ecc_shared, x, skey, &z)) != CRYPT_OK) { + y = MAXBLOCKSIZE; + if ((err = hash_memory(hash, ecc_shared, x, skey, &y)) != CRYPT_OK) { goto LBL_ERR; } - /* store header */ - packet_store_header(out, PACKET_SECT_ECC, PACKET_SUB_ENC_KEY); - - /* output header */ - y = PACKET_SIZE; - - /* size of hash name and the name itself */ - out[y++] = hash_descriptor[hash].ID; - - /* length of ECC pubkey and the key itself */ - STORE32L(pubkeysize, out+y); - y += 4; - - for (x = 0; x < pubkeysize; x++, y++) { - out[y] = pub_expt[x]; + /* Encrypt key */ + for (x = 0; x < inlen; x++) { + skey[x] ^= in[x]; } - STORE32L(inlen, out+y); - y += 4; + err = der_encode_sequence_multi(out, outlen, + LTC_ASN1_OBJECT_IDENTIFIER, hash_descriptor[hash].OIDlen, hash_descriptor[hash].OID, + LTC_ASN1_OCTET_STRING, pubkeysize, pub_expt, + LTC_ASN1_OCTET_STRING, inlen, skey, + LTC_ASN1_EOL, 0UL, NULL); - /* Encrypt/Store the encrypted key */ - for (x = 0; x < inlen; x++, y++) { - out[y] = skey[x] ^ in[x]; - } - *outlen = y; - - err = CRYPT_OK; LBL_ERR: #ifdef LTC_CLEAN_STACK /* clean up */ @@ -157,10 +133,11 @@ int ecc_decrypt_key(const unsigned char *in, unsigned long inlen, unsigned char *out, unsigned long *outlen, ecc_key *key) { - unsigned char *shared_secret, *skey; - unsigned long x, y, z, hashsize, keysize; + unsigned char *ecc_shared, *skey, *pub_expt; + unsigned long x, y, hashOID[32]; int hash, err; ecc_key pubkey; + ltc_asn1_list decode[3]; LTC_ARGCHK(in != NULL); LTC_ARGCHK(out != NULL); @@ -172,98 +149,93 @@ int ecc_decrypt_key(const unsigned char *in, unsigned long inlen, return CRYPT_PK_NOT_PRIVATE; } - /* correct length ? */ - if (inlen < PACKET_SIZE+1+4+4) { - return CRYPT_INVALID_PACKET; - } else { - inlen -= PACKET_SIZE+1+4+4; - } - - /* is header correct? */ - if ((err = packet_valid_header((unsigned char *)in, PACKET_SECT_ECC, PACKET_SUB_ENC_KEY)) != CRYPT_OK) { + /* decode to find out hash */ + LTC_SET_ASN1(decode, 0, LTC_ASN1_OBJECT_IDENTIFIER, hashOID, sizeof(hashOID)/sizeof(hashOID[0])); + + if ((err = der_decode_sequence(in, inlen, decode, 1)) != CRYPT_OK) { return err; } + for (hash = 0; hash_descriptor[hash].name != NULL && + (hash_descriptor[hash].OIDlen != decode[0].size || + memcmp(hash_descriptor[hash].OID, hashOID, sizeof(unsigned long)*decode[0].size)); hash++); - /* now lets get the hash name */ - y = PACKET_SIZE; - hash = find_hash_id(in[y++]); - if (hash == -1) { - return CRYPT_INVALID_HASH; - } - - /* common values */ - hashsize = hash_descriptor[hash].hashsize; - - /* get public key */ - LOAD32L(x, in+y); - if (inlen < x) { + if (hash_descriptor[hash].name == NULL) { return CRYPT_INVALID_PACKET; - } else { - inlen -= x; } - y += 4; - if ((err = ecc_import(in+y, x, &pubkey)) != CRYPT_OK) { - return err; - } - y += x; + + /* we now have the hash! */ /* allocate memory */ - shared_secret = XMALLOC(ECC_BUF_SIZE); - skey = XMALLOC(MAXBLOCKSIZE); - if (shared_secret == NULL || skey == NULL) { - if (shared_secret != NULL) { - XFREE(shared_secret); + pub_expt = XMALLOC(ECC_BUF_SIZE); + ecc_shared = XMALLOC(ECC_BUF_SIZE); + skey = XMALLOC(MAXBLOCKSIZE); + if (pub_expt == NULL || ecc_shared == NULL || skey == NULL) { + if (pub_expt != NULL) { + XFREE(pub_expt); + } + if (ecc_shared != NULL) { + XFREE(ecc_shared); } if (skey != NULL) { XFREE(skey); } - ecc_free(&pubkey); return CRYPT_MEM; } + LTC_SET_ASN1(decode, 1, LTC_ASN1_OCTET_STRING, pub_expt, ECC_BUF_SIZE); + LTC_SET_ASN1(decode, 2, LTC_ASN1_OCTET_STRING, skey, MAXBLOCKSIZE); + + /* read the structure in now */ + if ((err = der_decode_sequence(in, inlen, decode, 3)) != CRYPT_OK) { + goto LBL_ERR; + } + + /* import ECC key from packet */ + if ((err = ecc_import(decode[1].data, decode[1].size, &pubkey)) != CRYPT_OK) { + goto LBL_ERR; + } /* make shared key */ x = ECC_BUF_SIZE; - if ((err = ecc_shared_secret(key, &pubkey, shared_secret, &x)) != CRYPT_OK) { + if ((err = ecc_shared_secret(key, &pubkey, ecc_shared, &x)) != CRYPT_OK) { ecc_free(&pubkey); goto LBL_ERR; } ecc_free(&pubkey); - z = MAXBLOCKSIZE; - if ((err = hash_memory(hash, shared_secret, x, skey, &z)) != CRYPT_OK) { + y = MAXBLOCKSIZE; + if ((err = hash_memory(hash, ecc_shared, x, ecc_shared, &y)) != CRYPT_OK) { goto LBL_ERR; } - LOAD32L(keysize, in+y); - if (inlen < keysize) { + /* ensure the hash of the shared secret is at least as big as the encrypt itself */ + if (decode[2].size > y) { err = CRYPT_INVALID_PACKET; goto LBL_ERR; - } else { - inlen -= keysize; } - y += 4; - if (*outlen < keysize) { - err = CRYPT_BUFFER_OVERFLOW; - goto LBL_ERR; + /* avoid buffer overflow */ + if (*outlen < decode[2].size) { + err = CRYPT_BUFFER_OVERFLOW; + goto LBL_ERR; } /* Decrypt the key */ - for (x = 0; x < keysize; x++, y++) { - out[x] = skey[x] ^ in[y]; + for (x = 0; x < decode[2].size; x++) { + out[x] = skey[x] ^ ecc_shared[x]; } - - *outlen = keysize; + *outlen = x; err = CRYPT_OK; LBL_ERR: #ifdef LTC_CLEAN_STACK - zeromem(shared_secret, ECC_BUF_SIZE); - zeromem(skey, MAXBLOCKSIZE); + zeromem(pub_expt, ECC_BUF_SIZE); + zeromem(ecc_shared, ECC_BUF_SIZE); + zeromem(skey, MAXBLOCKSIZE); #endif + XFREE(pub_expt); + XFREE(ecc_shared); XFREE(skey); - XFREE(shared_secret); return err; } @@ -284,9 +256,7 @@ int ecc_sign_hash(const unsigned char *in, unsigned long inlen, prng_state *prng, int wprng, ecc_key *key) { ecc_key pubkey; - mp_int b, p; - unsigned char *epubkey, *er; - unsigned long x, y, pubkeysize, rsize; + mp_int r, s, e, p; int err; LTC_ARGCHK(in != NULL); @@ -308,116 +278,65 @@ int ecc_sign_hash(const unsigned char *in, unsigned long inlen, return err; } - /* make up a key and export the public copy */ - if ((err = ecc_make_key(prng, wprng, ecc_get_size(key), &pubkey)) != CRYPT_OK) { - return err; - } - - /* allocate ram */ - epubkey = XMALLOC(ECC_BUF_SIZE); - er = XMALLOC(ECC_BUF_SIZE); - if (epubkey == NULL || er == NULL) { - if (epubkey != NULL) { - XFREE(epubkey); - } - if (er != NULL) { - XFREE(er); - } - ecc_free(&pubkey); - return CRYPT_MEM; - } - - pubkeysize = ECC_BUF_SIZE; - if ((err = ecc_export(epubkey, &pubkeysize, PK_PUBLIC, &pubkey)) != CRYPT_OK) { - ecc_free(&pubkey); - goto LBL_ERR; - } - - /* get the hash and load it as a bignum into 'b' */ + /* get the hash and load it as a bignum into 'e' */ /* init the bignums */ - if ((err = mp_init_multi(&b, &p, NULL)) != MP_OKAY) { + if ((err = mp_init_multi(&r, &s, &p, &e, NULL)) != MP_OKAY) { ecc_free(&pubkey); err = mpi_to_ltc_error(err); goto LBL_ERR; } if ((err = mp_read_radix(&p, (char *)sets[key->idx].order, 64)) != MP_OKAY) { goto error; } - if ((err = mp_read_unsigned_bin(&b, (unsigned char *)in, (int)inlen)) != MP_OKAY) { goto error; } + if ((err = mp_read_unsigned_bin(&e, (unsigned char *)in, (int)inlen)) != MP_OKAY) { goto error; } - /* find b = (m - x)/k */ - if ((err = mp_invmod(&pubkey.k, &p, &pubkey.k)) != MP_OKAY) { goto error; } /* k = 1/k */ - if ((err = mp_submod(&b, &key->k, &p, &b)) != MP_OKAY) { goto error; } /* b = m - x */ - if ((err = mp_mulmod(&b, &pubkey.k, &p, &b)) != MP_OKAY) { goto error; } /* b = (m - x)/k */ + /* make up a key and export the public copy */ + for (;;) { + if ((err = ecc_make_key(prng, wprng, ecc_get_size(key), &pubkey)) != CRYPT_OK) { + return err; + } - /* export it */ - rsize = (unsigned long)mp_unsigned_bin_size(&b); - if (rsize > ECC_BUF_SIZE) { - err = CRYPT_BUFFER_OVERFLOW; - goto error; - } - if ((err = mp_to_unsigned_bin(&b, er)) != MP_OKAY) { goto error; } + /* find r = x1 mod n */ + if ((err = mp_mod(&pubkey.pubkey.x, &p, &r)) != MP_OKAY) { goto error; } - /* now lets check the outlen before we write */ - if (*outlen < (12 + rsize + pubkeysize)) { - err = CRYPT_BUFFER_OVERFLOW; - goto LBL_ERR; + if (mp_iszero(&r)) { + ecc_free(&pubkey); + } else { + /* find s = (e + xr)/k */ + if ((err = mp_invmod(&pubkey.k, &p, &pubkey.k)) != MP_OKAY) { goto error; } /* k = 1/k */ + if ((err = mp_mulmod(&key->k, &r, &p, &s)) != MP_OKAY) { goto error; } /* s = xr */ + if ((err = mp_addmod(&e, &s, &p, &s)) != MP_OKAY) { goto error; } /* s = e + xr */ + if ((err = mp_mulmod(&s, &pubkey.k, &p, &s)) != MP_OKAY) { goto error; } /* s = (e + xr)/k */ + + if (mp_iszero(&s)) { + ecc_free(&pubkey); + } else { + break; + } + } } - /* lets output */ - y = PACKET_SIZE; - - /* size of public key */ - STORE32L(pubkeysize, out+y); - y += 4; - - /* copy the public key */ - for (x = 0; x < pubkeysize; x++, y++) { - out[y] = epubkey[x]; - } - - /* size of 'r' */ - STORE32L(rsize, out+y); - y += 4; - - /* copy r */ - for (x = 0; x < rsize; x++, y++) { - out[y] = er[x]; - } - - /* store header */ - packet_store_header(out, PACKET_SECT_ECC, PACKET_SUB_SIGNED); - *outlen = y; - - /* all ok */ - err = CRYPT_OK; + /* store as SEQUENCE { r, s -- integer } */ + err = der_encode_sequence_multi(out, outlen, + LTC_ASN1_INTEGER, 1UL, &r, + LTC_ASN1_INTEGER, 1UL, &s, + LTC_ASN1_EOL, 0UL, NULL); goto LBL_ERR; error: err = mpi_to_ltc_error(err); LBL_ERR: - mp_clear_multi(&b, &p, NULL); + mp_clear_multi(&r, &s, &p, &e, NULL); ecc_free(&pubkey); -#ifdef LTC_CLEAN_STACK - zeromem(er, ECC_BUF_SIZE); - zeromem(epubkey, ECC_BUF_SIZE); -#endif - - XFREE(epubkey); - XFREE(er); return err; } -/* verify that mG = (bA + Y) +/* verify * - * The signatures work by making up a fresh key "a" with a public key "A". Now we want to sign so the - * public key Y = xG can verify it. - * - * b = (m - x)/k, A is the public key embedded and Y is the users public key [who signed it] - * A = kG therefore bA == ((m-x)/k)kG == (m-x)G - * - * Adding Y = xG to the bA gives us (m-x)G + xG == mG - * - * The user given only xG, kG and b cannot determine k or x which means they can't find the private key. - * + * w = s^-1 mod n + * u1 = xw + * u2 = rw + * X = u1*G + u2*Q + * v = X_x1 mod n + * accept if v == r */ /** @@ -434,10 +353,9 @@ int ecc_verify_hash(const unsigned char *sig, unsigned long siglen, const unsigned char *hash, unsigned long hashlen, int *stat, ecc_key *key) { - ecc_point *mG; - ecc_key pubkey; - mp_int b, p, m, mu; - unsigned long x, y; + ecc_point *mG, *mQ; + mp_int r, s, v, w, u1, u2, e, p, m; + mp_digit mp; int err; LTC_ARGCHK(sig != NULL); @@ -448,89 +366,81 @@ int ecc_verify_hash(const unsigned char *sig, unsigned long siglen, /* default to invalid signature */ *stat = 0; - if (siglen < PACKET_SIZE+4+4) { - return CRYPT_INVALID_PACKET; - } else { - siglen -= PACKET_SIZE+4+4; + /* is the IDX valid ? */ + if (is_valid_idx(key->idx) != 1) { + return CRYPT_PK_INVALID_TYPE; } - /* is the message format correct? */ - if ((err = packet_valid_header((unsigned char *)sig, PACKET_SECT_ECC, PACKET_SUB_SIGNED)) != CRYPT_OK) { - return err; - } - - /* get hash name */ - y = PACKET_SIZE; - - /* get size of public key */ - LOAD32L(x, sig+y); - if (siglen < x) { - return CRYPT_INVALID_PACKET; - } else { - siglen -= x; - } - y += 4; - - /* load the public key */ - if ((err = ecc_import((unsigned char*)sig+y, x, &pubkey)) != CRYPT_OK) { - return err; - } - y += x; - - /* load size of 'b' */ - LOAD32L(x, sig+y); - if (siglen < x) { - return CRYPT_INVALID_PACKET; - } else { - siglen -= x; - } - y += 4; - - /* init values */ - if ((err = mp_init_multi(&b, &m, &p, &mu, NULL)) != MP_OKAY) { - ecc_free(&pubkey); - return mpi_to_ltc_error(err); - } - - mG = new_point(); - if (mG == NULL) { - mp_clear_multi(&b, &m, &p, &mu, NULL); - ecc_free(&pubkey); + /* allocate ints */ + if ((err = mp_init_multi(&r, &s, &v, &w, &u1, &u2, &p, &e, &m, NULL)) != MP_OKAY) { return CRYPT_MEM; - } + } - /* load b */ - if ((err = mp_read_unsigned_bin(&b, (unsigned char *)sig+y, (int)x)) != MP_OKAY) { goto error; } - y += x; + /* allocate points */ + mG = new_point(); + mQ = new_point(); + if (mQ == NULL || mG == NULL) { + err = CRYPT_MEM; + goto done; + } - /* get m in binary a bignum */ - if ((err = mp_read_unsigned_bin(&m, (unsigned char *)hash, (int)hashlen)) != MP_OKAY) { goto error; } - - /* load prime */ - if ((err = mp_read_radix(&p, (char *)sets[key->idx].prime, 64)) != MP_OKAY) { goto error; } - - /* calculate barrett stuff */ - mp_set(&mu, 1); - mp_lshd(&mu, 2 * USED(&p)); - if ((err = mp_div(&mu, &p, &mu, NULL)) != MP_OKAY) { goto error; } + /* parse header */ + if ((err = der_decode_sequence_multi(sig, siglen, + LTC_ASN1_INTEGER, 1UL, &r, + LTC_ASN1_INTEGER, 1UL, &s, + LTC_ASN1_EOL, 0UL, NULL)) != CRYPT_OK) { + goto done; + } - /* get bA */ - if ((err = ecc_mulmod(&b, &pubkey.pubkey, &pubkey.pubkey, &p)) != CRYPT_OK) { goto done; } - - /* get bA + Y */ - if ((err = add_point(&pubkey.pubkey, &key->pubkey, &pubkey.pubkey, &p, &mu)) != CRYPT_OK) { goto done; } + /* get the order */ + if ((err = mp_read_radix(&p, (char *)sets[key->idx].order, 64)) != MP_OKAY) { goto error; } - /* we have to transform it */ - if ((err = ecc_map(&pubkey.pubkey, &p, &mu)) != CRYPT_OK) { goto done; } + /* get the modulus */ + if ((err = mp_read_radix(&m, (char *)sets[key->idx].prime, 64)) != MP_OKAY) { goto error; } - /* get mG */ + /* check for zero */ + if (mp_iszero(&r) || mp_iszero(&s) || mp_cmp(&r, &p) != MP_LT || mp_cmp(&s, &p) != MP_LT) { + err = CRYPT_INVALID_PACKET; + goto done; + } + + /* read hash */ + if ((err = mp_read_unsigned_bin(&e, (unsigned char *)hash, (int)hashlen)) != MP_OKAY) { goto error; } + + /* w = s^-1 mod n */ + if ((err = mp_invmod(&s, &p, &w)) != MP_OKAY) { goto error; } + + /* u1 = ew */ + if ((err = mp_mulmod(&e, &w, &p, &u1)) != MP_OKAY) { goto error; } + + /* u2 = rw */ + if ((err = mp_mulmod(&r, &w, &p, &u2)) != MP_OKAY) { goto error; } + + /* find mG = u1*G */ if ((err = mp_read_radix(&mG->x, (char *)sets[key->idx].Gx, 64)) != MP_OKAY) { goto error; } if ((err = mp_read_radix(&mG->y, (char *)sets[key->idx].Gy, 64)) != MP_OKAY) { goto error; } - mp_set(&mG->z, 1); - if ((err = ecc_mulmod(&m, mG, mG, &p)) != CRYPT_OK) { goto done; } + mp_set(&mG->z, 1); + if ((err = ecc_mulmod(&u1, mG, mG, &m, 0)) != CRYPT_OK) { goto done; } - /* compare mG to bA + Y */ - if (mp_cmp(&mG->x, &pubkey.pubkey.x) == MP_EQ && mp_cmp(&mG->y, &pubkey.pubkey.y) == MP_EQ) { + /* find mQ = u2*Q */ + if ((err = mp_copy(&key->pubkey.x, &mQ->x)) != MP_OKAY) { goto error; } + if ((err = mp_copy(&key->pubkey.y, &mQ->y)) != MP_OKAY) { goto error; } + if ((err = mp_copy(&key->pubkey.z, &mQ->z)) != MP_OKAY) { goto error; } + if ((err = ecc_mulmod(&u2, mQ, mQ, &m, 0)) != CRYPT_OK) { goto done; } + + /* find the montgomery mp */ + if ((err = mp_montgomery_setup(&m, &mp)) != MP_OKAY) { goto error; } + /* add them */ + if ((err = add_point(mQ, mG, mG, &m, mp)) != CRYPT_OK) { goto done; } + + /* reduce */ + if ((err = ecc_map(mG, &m, mp)) != CRYPT_OK) { goto done; } + + /* v = X_x1 mod n */ + if ((err = mp_mod(&mG->x, &p, &v)) != CRYPT_OK) { goto done; } + + /* does v == r */ + if (mp_cmp(&v, &r) == MP_EQ) { *stat = 1; } @@ -541,8 +451,12 @@ error: err = mpi_to_ltc_error(err); done: del_point(mG); - ecc_free(&pubkey); - mp_clear_multi(&p, &m, &b, &mu, NULL); + del_point(mQ); + mp_clear_multi(&r, &s, &v, &w, &u1, &u2, &p, &e, &m, NULL); return err; } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/packet_store_header.c b/src/pk/packet_store_header.c index a2442cc..ca09a76 100644 --- a/src/pk/packet_store_header.c +++ b/src/pk/packet_store_header.c @@ -27,3 +27,7 @@ void packet_store_header(unsigned char *dst, int section, int subsection) } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/packet_valid_header.c b/src/pk/packet_valid_header.c index b2eb9c9..8ac8375 100644 --- a/src/pk/packet_valid_header.c +++ b/src/pk/packet_valid_header.c @@ -35,3 +35,7 @@ int packet_valid_header(unsigned char *src, int section, int subsection) #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/pkcs1/pkcs_1_i2osp.c b/src/pk/pkcs1/pkcs_1_i2osp.c index 7f13626..8ec251d 100644 --- a/src/pk/pkcs1/pkcs_1_i2osp.c +++ b/src/pk/pkcs1/pkcs_1_i2osp.c @@ -49,3 +49,7 @@ int pkcs_1_i2osp(mp_int *n, unsigned long modulus_len, unsigned char *out) #endif /* PKCS_1 */ + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/pkcs1/pkcs_1_mgf1.c b/src/pk/pkcs1/pkcs_1_mgf1.c index 0fe177f..233d7bc 100644 --- a/src/pk/pkcs1/pkcs_1_mgf1.c +++ b/src/pk/pkcs1/pkcs_1_mgf1.c @@ -102,3 +102,7 @@ LBL_ERR: } #endif /* PKCS_1 */ + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/pkcs1/pkcs_1_oaep_decode.c b/src/pk/pkcs1/pkcs_1_oaep_decode.c index 82862c1..fd368e6 100644 --- a/src/pk/pkcs1/pkcs_1_oaep_decode.c +++ b/src/pk/pkcs1/pkcs_1_oaep_decode.c @@ -63,7 +63,7 @@ int pkcs_1_oaep_decode(const unsigned char *msg, unsigned long msglen, /* allocate ram for DB/mask/salt of size modulus_len */ DB = XMALLOC(modulus_len); mask = XMALLOC(modulus_len); - seed = XMALLOC(modulus_len); + seed = XMALLOC(hLen); if (DB == NULL || mask == NULL || seed == NULL) { if (DB != NULL) { XFREE(DB); @@ -92,14 +92,13 @@ int pkcs_1_oaep_decode(const unsigned char *msg, unsigned long msglen, } /* now read the masked seed */ - for (x = 1, y = 0; y < hLen; y++) { - seed[y] = msg[x++]; - } + x = 1; + XMEMCPY(seed, msg + x, hLen); + x += hLen; /* now read the masked DB */ - for (y = 0; y < modulus_len - hLen - 1; y++) { - DB[y] = msg[x++]; - } + XMEMCPY(DB, msg + x, modulus_len - hLen - 1); + x += modulus_len - hLen - 1; /* compute MGF1 of maskedDB (hLen) */ if ((err = pkcs_1_mgf1(DB, modulus_len - hLen - 1, hash_idx, mask, hLen)) != CRYPT_OK) { @@ -161,9 +160,8 @@ int pkcs_1_oaep_decode(const unsigned char *msg, unsigned long msglen, /* copy message */ *outlen = (modulus_len - hLen - 1) - x; - for (y = 0; x != (modulus_len - hLen - 1); ) { - out[y++] = DB[x++]; - } + XMEMCPY(out, DB + x, modulus_len - hLen - 1); + x += modulus_len - hLen - 1; /* valid packet */ *res = 1; @@ -172,7 +170,7 @@ int pkcs_1_oaep_decode(const unsigned char *msg, unsigned long msglen, LBL_ERR: #ifdef LTC_CLEAN_STACK zeromem(DB, modulus_len); - zeromem(seed, modulus_len); + zeromem(seed, hLen); zeromem(mask, modulus_len); #endif @@ -184,3 +182,7 @@ LBL_ERR: } #endif /* PKCS_1 */ + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/pkcs1/pkcs_1_oaep_encode.c b/src/pk/pkcs1/pkcs_1_oaep_encode.c index 7afea60..525158c 100644 --- a/src/pk/pkcs1/pkcs_1_oaep_encode.c +++ b/src/pk/pkcs1/pkcs_1_oaep_encode.c @@ -66,7 +66,7 @@ int pkcs_1_oaep_encode(const unsigned char *msg, unsigned long msglen, /* allocate ram for DB/mask/salt of size modulus_len */ DB = XMALLOC(modulus_len); mask = XMALLOC(modulus_len); - seed = XMALLOC(modulus_len); + seed = XMALLOC(hLen); if (DB == NULL || mask == NULL || seed == NULL) { if (DB != NULL) { XFREE(DB); @@ -97,16 +97,15 @@ int pkcs_1_oaep_encode(const unsigned char *msg, unsigned long msglen, /* append PS then 0x01 (to lhash) */ x = hLen; y = modulus_len - msglen - 2*hLen - 2; - while (y--) { - DB[x++] = 0x00; - } + XMEMSET(DB+x, 0, y); + x += y; + + /* 0x01 byte */ DB[x++] = 0x01; - /* message */ - y = msglen; - while (y--) { - DB[x++] = *msg++; - } + /* message (length = msglen) */ + XMEMCPY(DB+x, msg, msglen); + x += msglen; /* now choose a random seed */ if (prng_descriptor[prng_idx].read(seed, hLen, prng) != hLen) { @@ -143,19 +142,18 @@ int pkcs_1_oaep_encode(const unsigned char *msg, unsigned long msglen, /* start output which is 0x00 || maskedSeed || maskedDB */ x = 0; out[x++] = 0x00; - for (y = 0; y < hLen; y++) { - out[x++] = seed[y]; - } - for (y = 0; y < modulus_len - hLen - 1; y++) { - out[x++] = DB[y]; - } + XMEMCPY(out+x, seed, hLen); + x += hLen; + XMEMCPY(out+x, DB, modulus_len - hLen - 1); + x += modulus_len - hLen - 1; + *outlen = x; err = CRYPT_OK; LBL_ERR: #ifdef LTC_CLEAN_STACK zeromem(DB, modulus_len); - zeromem(seed, modulus_len); + zeromem(seed, hLen); zeromem(mask, modulus_len); #endif @@ -168,3 +166,7 @@ LBL_ERR: #endif /* PKCS_1 */ + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/pkcs1/pkcs_1_os2ip.c b/src/pk/pkcs1/pkcs_1_os2ip.c index db6b58c..42627ca 100644 --- a/src/pk/pkcs1/pkcs_1_os2ip.c +++ b/src/pk/pkcs1/pkcs_1_os2ip.c @@ -35,3 +35,7 @@ int pkcs_1_os2ip(mp_int *n, unsigned char *in, unsigned long inlen) #endif /* PKCS_1 */ + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/pkcs1/pkcs_1_pss_decode.c b/src/pk/pkcs1/pkcs_1_pss_decode.c index a19e7d8..98c7160 100644 --- a/src/pk/pkcs1/pkcs_1_pss_decode.c +++ b/src/pk/pkcs1/pkcs_1_pss_decode.c @@ -87,14 +87,13 @@ int pkcs_1_pss_decode(const unsigned char *msghash, unsigned long msghashlen, } /* copy out the DB */ - for (x = 0; x < modulus_len - hLen - 1; x++) { - DB[x] = sig[x]; - } + x = 0; + XMEMCPY(DB, sig + x, modulus_len - hLen - 1); + x += modulus_len - hLen - 1; /* copy out the hash */ - for (y = 0; y < hLen; y++) { - hash[y] = sig[x++]; - } + XMEMCPY(hash, sig + x, hLen); + x += hLen; /* check the MSB */ if ((sig[0] & ~(0xFF >> ((modulus_len<<3) - (modulus_bitlen-1)))) != 0) { @@ -172,3 +171,7 @@ LBL_ERR: } #endif /* PKCS_1 */ + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/pkcs1/pkcs_1_pss_encode.c b/src/pk/pkcs1/pkcs_1_pss_encode.c index 58a03d5..a086e38 100644 --- a/src/pk/pkcs1/pkcs_1_pss_encode.c +++ b/src/pk/pkcs1/pkcs_1_pss_encode.c @@ -110,13 +110,12 @@ int pkcs_1_pss_encode(const unsigned char *msghash, unsigned long msghashlen, } /* generate DB = PS || 0x01 || salt, PS == modulus_len - saltlen - hLen - 2 zero bytes */ - for (x = 0; x < (modulus_len - saltlen - hLen - 2); x++) { - DB[x] = 0x00; - } + x = 0; + XMEMSET(DB + x, 0, modulus_len - saltlen - hLen - 2); + x += modulus_len - saltlen - hLen - 2; DB[x++] = 0x01; - for (y = 0; y < saltlen; y++) { - DB[x++] = salt[y]; - } + XMEMCPY(DB + x, salt, saltlen); + x += saltlen; /* generate mask of length modulus_len - hLen - 1 from hash */ if ((err = pkcs_1_mgf1(hash, hLen, hash_idx, mask, modulus_len - hLen - 1)) != CRYPT_OK) { @@ -134,14 +133,15 @@ int pkcs_1_pss_encode(const unsigned char *msghash, unsigned long msghashlen, goto LBL_ERR; } - /* DB */ - for (y = x = 0; x < modulus_len - hLen - 1; x++) { - out[y++] = DB[x]; - } + /* DB len = modulus_len - hLen - 1 */ + y = 0; + XMEMCPY(out + y, DB, modulus_len - hLen - 1); + y += modulus_len - hLen - 1; + /* hash */ - for (x = 0; x < hLen; x++) { - out[y++] = hash[x]; - } + XMEMCPY(out + y, hash, hLen); + y += hLen; + /* 0xBC */ out[y] = 0xBC; @@ -168,3 +168,7 @@ LBL_ERR: } #endif /* PKCS_1 */ + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/pkcs1/pkcs_1_v15_es_decode.c b/src/pk/pkcs1/pkcs_1_v15_es_decode.c deleted file mode 100644 index fc54845..0000000 --- a/src/pk/pkcs1/pkcs_1_v15_es_decode.c +++ /dev/null @@ -1,74 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis - * - * LibTomCrypt is a library that provides various cryptographic - * algorithms in a highly modular and flexible manner. - * - * The library is free for all purposes without any express - * guarantee it works. - * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org - */ -#include "tomcrypt.h" - -/** - @file pkcs_1_v15_es_decode.c - PKCS #1 v1.5 Encryption Padding, Tom St Denis -*/ - -#ifdef PKCS_1 - -/** - PKCS #1 v1.5 Encryption Decoding - @param msg The padded data - @param msglen The length of the padded data (octets) - @param modulus_bitlen The bit length of the RSA modulus - @param out [out] Where to store the decoded data - @param outlen The length of the decoded data - @param res [out] Result of the decoding, 1==valid, 0==invalid - @return CRYPT_OK if successful -*/ -int pkcs_1_v15_es_decode(const unsigned char *msg, unsigned long msglen, - unsigned long modulus_bitlen, - unsigned char *out, unsigned long outlen, - int *res) -{ - unsigned long x, modulus_bytelen; - - LTC_ARGCHK(msg != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(res != NULL); - - /* default to failed */ - *res = 0; - - modulus_bytelen = (modulus_bitlen>>3) + (modulus_bitlen & 7 ? 1 : 0); - - /* must be at least modulus_bytelen bytes long */ - if (msglen != modulus_bytelen) { - return CRYPT_INVALID_ARG; - } - - /* should start with 0x00 0x02 */ - if (msg[0] != 0x00 || msg[1] != 0x02) { - return CRYPT_OK; - } - - /* skip over PS */ - x = 2 + (modulus_bytelen - outlen - 3); - - /* should be 0x00 */ - if (msg[x++] != 0x00) { - return CRYPT_OK; - } - - /* the message is left */ - if (x + outlen > modulus_bytelen) { - return CRYPT_PK_INVALID_SIZE; - } - XMEMCPY(out, msg + x, outlen); - *res = 1; - return CRYPT_OK; -} - -#endif - diff --git a/src/pk/pkcs1/pkcs_1_v15_es_encode.c b/src/pk/pkcs1/pkcs_1_v15_es_encode.c deleted file mode 100644 index b6ac429..0000000 --- a/src/pk/pkcs1/pkcs_1_v15_es_encode.c +++ /dev/null @@ -1,69 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis - * - * LibTomCrypt is a library that provides various cryptographic - * algorithms in a highly modular and flexible manner. - * - * The library is free for all purposes without any express - * guarantee it works. - * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org - */ -#include "tomcrypt.h" - -/** - @file pkcs_1_v15_es_encode.c - v1.5 Encryption Padding for PKCS #1, Tom St Denis -*/ - -#ifdef PKCS_1 - -/** - PKCS #1 v1.5 Encryption Padding - @param msg The data to encode - @param msglen The length of the data (octets) - @param modulus_bitlen The bit length of the RSA modulus - @param prng An active PRNG - @param prng_idx The index of the PRNG desired - @param out [out] The destination of the padding - @param outlen [in/out] The max size and resulting size of the padding - @return CRYPT_OK if successful -*/ -int pkcs_1_v15_es_encode(const unsigned char *msg, unsigned long msglen, - unsigned long modulus_bitlen, - prng_state *prng, int prng_idx, - unsigned char *out, unsigned long *outlen) -{ - unsigned long modulus_bytelen, x, y; - - LTC_ARGCHK(msg != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - /* get modulus len */ - modulus_bytelen = (modulus_bitlen >> 3) + (modulus_bitlen & 7 ? 1 : 0); - if (modulus_bytelen < 12) { - return CRYPT_INVALID_ARG; - } - - /* verify length */ - if (msglen > (modulus_bytelen - 11) || *outlen < modulus_bytelen) { - return CRYPT_PK_INVALID_SIZE; - } - - /* 0x00 0x02 PS 0x00 M */ - x = 0; - out[x++] = 0x00; - out[x++] = 0x02; - y = modulus_bytelen - msglen - 3; - if (prng_descriptor[prng_idx].read(out+x, y, prng) != y) { - return CRYPT_ERROR_READPRNG; - } - x += y; - out[x++] = 0x00; - XMEMCPY(out+x, msg, msglen); - *outlen = modulus_bytelen; - - return CRYPT_OK; -} - -#endif /* PKCS_1 */ diff --git a/src/pk/pkcs1/pkcs_1_v15_sa_decode.c b/src/pk/pkcs1/pkcs_1_v15_sa_decode.c deleted file mode 100644 index 7cad021..0000000 --- a/src/pk/pkcs1/pkcs_1_v15_sa_decode.c +++ /dev/null @@ -1,91 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis - * - * LibTomCrypt is a library that provides various cryptographic - * algorithms in a highly modular and flexible manner. - * - * The library is free for all purposes without any express - * guarantee it works. - * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org - */ -#include "tomcrypt.h" - -/** - @file pkcs_1_v15_sa_decode.c - PKCS #1 v1.5 Signature Padding, Tom St Denis -*/ - -#ifdef PKCS_1 - -/** - Perform PKCS #1 v1.5 Signature Decoding - @param msghash The hash that was signed - @param msghashlen The length of the hash - @param sig The signature [padded data] - @param siglen The length of the signature - @param hash_idx The index of the hash used - @param modulus_bitlen The bit length of the RSA modulus - @param res [out] Result of comparison, 1==valid, 0==invalid - @return CRYPT_OK if successful -*/ -int pkcs_1_v15_sa_decode(const unsigned char *msghash, unsigned long msghashlen, - const unsigned char *sig, unsigned long siglen, - int hash_idx, unsigned long modulus_bitlen, - int *res) -{ - unsigned long x, y, modulus_bytelen, derlen; - int err; - - LTC_ARGCHK(msghash != NULL); - LTC_ARGCHK(sig != NULL); - LTC_ARGCHK(res != NULL); - - /* default to invalid */ - *res = 0; - - /* valid hash ? */ - if ((err = hash_is_valid(hash_idx)) != CRYPT_OK) { - return err; - } - - /* get derlen */ - derlen = hash_descriptor[hash_idx].DERlen; - - /* get modulus len */ - modulus_bytelen = (modulus_bitlen>>3) + (modulus_bitlen & 7 ? 1 : 0); - - /* valid sizes? */ - if ((msghashlen + 3 + derlen > modulus_bytelen) || (siglen != modulus_bytelen)) { - return CRYPT_PK_INVALID_SIZE; - } - - /* packet is 0x00 0x01 PS 0x00 T, where PS == 0xFF repeated modulus_bytelen - 3 - derlen - msghashlen times, T == DER || hash */ - x = 0; - if (sig[x++] != 0x00 || sig[x++] != 0x01) { - return CRYPT_OK; - } - - /* now follows (modulus_bytelen - 3 - derlen - msghashlen) 0xFF bytes */ - for (y = 0; y < (modulus_bytelen - 3 - derlen - msghashlen); y++) { - if (sig[x++] != 0xFF) { - return CRYPT_OK; - } - } - - if (sig[x++] != 0x00) { - return CRYPT_OK; - } - - for (y = 0; y < derlen; y++) { - if (sig[x++] != hash_descriptor[hash_idx].DER[y]) { - return CRYPT_OK; - } - } - - if (memcmp(msghash, sig+x, msghashlen) == 0) { - *res = 1; - } - return CRYPT_OK; -} - -#endif diff --git a/src/pk/pkcs1/pkcs_1_v15_sa_encode.c b/src/pk/pkcs1/pkcs_1_v15_sa_encode.c deleted file mode 100644 index 60c77ef..0000000 --- a/src/pk/pkcs1/pkcs_1_v15_sa_encode.c +++ /dev/null @@ -1,84 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis - * - * LibTomCrypt is a library that provides various cryptographic - * algorithms in a highly modular and flexible manner. - * - * The library is free for all purposes without any express - * guarantee it works. - * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org - */ -#include "tomcrypt.h" - -/** - @file pkcs_1_v15_sa_encode.c - PKCS #1 v1.5 Signature Padding, Tom St Denis -*/ - -#ifdef PKCS_1 - -/** - Perform PKCS #1 v1.5 Signature Padding - @param msghash The hash you wish to incorporate in the padding - @param msghashlen The length of the hash - @param hash_idx The index of the hash used - @param modulus_bitlen The length of the RSA modulus that will sign this (bits) - @param out [out] Where to store the padded data - @param outlen [in/out] Max size and resulting size of the padded data - @return CRYPT_OK if successful -*/ -int pkcs_1_v15_sa_encode(const unsigned char *msghash, unsigned long msghashlen, - int hash_idx, unsigned long modulus_bitlen, - unsigned char *out, unsigned long *outlen) -{ - unsigned long derlen, modulus_bytelen, x, y; - int err; - - LTC_ARGCHK(msghash != NULL) - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - - if ((err = hash_is_valid(hash_idx)) != CRYPT_OK) { - return err; - } - - /* hack, to detect any hash without a DER OID */ - if (hash_descriptor[hash_idx].DERlen == 0) { - return CRYPT_INVALID_ARG; - } - - /* get modulus len */ - modulus_bytelen = (modulus_bitlen>>3) + (modulus_bitlen & 7 ? 1 : 0); - - /* get der len ok? Forgive my lame German accent.... */ - derlen = hash_descriptor[hash_idx].DERlen; - - /* valid sizes? */ - if (msghashlen + 3 + derlen > modulus_bytelen) { - return CRYPT_PK_INVALID_SIZE; - } - - if (*outlen < modulus_bytelen) { - return CRYPT_BUFFER_OVERFLOW; - } - - /* packet is 0x00 0x01 PS 0x00 T, where PS == 0xFF repeated modulus_bytelen - 3 - derlen - msghashlen times, T == DER || hash */ - x = 0; - out[x++] = 0x00; - out[x++] = 0x01; - for (y = 0; y < (modulus_bytelen - 3 - derlen - msghashlen); y++) { - out[x++] = 0xFF; - } - out[x++] = 0x00; - for (y = 0; y < derlen; y++) { - out[x++] = hash_descriptor[hash_idx].DER[y]; - } - for (y = 0; y < msghashlen; y++) { - out[x++] = msghash[y]; - } - - *outlen = modulus_bytelen; - return CRYPT_OK; -} - -#endif /* PKCS_1 */ diff --git a/src/pk/rsa/rsa_decrypt_key.c b/src/pk/rsa/rsa_decrypt_key.c index 3117715..ba2a076 100644 --- a/src/pk/rsa/rsa_decrypt_key.c +++ b/src/pk/rsa/rsa_decrypt_key.c @@ -87,3 +87,7 @@ int rsa_decrypt_key(const unsigned char *in, unsigned long inlen, + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/rsa/rsa_encrypt_key.c b/src/pk/rsa/rsa_encrypt_key.c index 891b43e..88efb3d 100644 --- a/src/pk/rsa/rsa_encrypt_key.c +++ b/src/pk/rsa/rsa_encrypt_key.c @@ -74,3 +74,7 @@ int rsa_encrypt_key(const unsigned char *in, unsigned long inlen, } #endif /* MRSA */ + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/rsa/rsa_export.c b/src/pk/rsa/rsa_export.c index 951be70..f7f42bf 100644 --- a/src/pk/rsa/rsa_export.c +++ b/src/pk/rsa/rsa_export.c @@ -27,7 +27,8 @@ */ int rsa_export(unsigned char *out, unsigned long *outlen, int type, rsa_key *key) { - int err, x; + int err; + unsigned long zero=0; LTC_ARGCHK(out != NULL); LTC_ARGCHK(outlen != NULL); @@ -37,62 +38,39 @@ int rsa_export(unsigned char *out, unsigned long *outlen, int type, rsa_key *key if (!(key->type == PK_PRIVATE) && (type == PK_PRIVATE)) { return CRYPT_PK_INVALID_TYPE; } - if (*outlen < 4) { - return CRYPT_BUFFER_OVERFLOW; - } - - /* Mental Note: push space for the header 0x30 0x82 LL LL (LL = length of packet EXcluding 4 bytes) - * we assume LL > 255 which is true since the smallest RSA key has a 128-byte modulus (1024-bit) - */ - *outlen -= 4; if (type == PK_PRIVATE) { /* private key */ - mp_int zero; - - /* first INTEGER == 0 to signify two-prime RSA */ - if ((err = mp_init(&zero)) != MP_OKAY) { - return mpi_to_ltc_error(err); - } - /* output is Version, n, e, d, p, q, d mod (p-1), d mod (q - 1), 1/q mod p */ - if ((err = der_put_multi_integer( - out+4, outlen, &zero, &key->N, &key->e, - &key->d, &key->p, &key->q, &key->dP, - &key->dQ, &key->qP, NULL)) != CRYPT_OK) { - mp_clear(&zero); + if ((err = der_encode_sequence_multi(out, outlen, + LTC_ASN1_SHORT_INTEGER, 1UL, &zero, + LTC_ASN1_INTEGER, 1UL, &key->N, + LTC_ASN1_INTEGER, 1UL, &key->e, + LTC_ASN1_INTEGER, 1UL, &key->d, + LTC_ASN1_INTEGER, 1UL, &key->p, + LTC_ASN1_INTEGER, 1UL, &key->q, + LTC_ASN1_INTEGER, 1UL, &key->dP, + LTC_ASN1_INTEGER, 1UL, &key->dQ, + LTC_ASN1_INTEGER, 1UL, &key->qP, + LTC_ASN1_EOL, 0UL, NULL)) != CRYPT_OK) { return err; } /* clear zero and return */ - mp_clear(&zero); + return CRYPT_OK; } else { /* public key */ - if ((err = der_put_multi_integer(out+4, outlen, &key->N, &key->e, NULL)) != CRYPT_OK) { - return err; - } + return der_encode_sequence_multi(out, outlen, + LTC_ASN1_INTEGER, 1UL, &key->N, + LTC_ASN1_INTEGER, 1UL, &key->e, + LTC_ASN1_EOL, 0UL, NULL); } - - /* store the header */ - out[0] = 0x30; - if (*outlen < 256) { - /* shift the output up one byte if the header is only 3 bytes */ - for (x = 0; x < *outlen; x++) { - out[x+3] = out[x+4]; - } - out[1] = 0x81; - out[2] = (*outlen & 255); - *outlen += 3; - } else { - out[1] = 0x82; - out[2] = (*outlen >> 8) & 255; - out[3] = (*outlen & 255); - *outlen += 4; - } - return err; } #endif /* MRSA */ +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/rsa/rsa_exptmod.c b/src/pk/rsa/rsa_exptmod.c index fda6cbb..b7bfebd 100644 --- a/src/pk/rsa/rsa_exptmod.c +++ b/src/pk/rsa/rsa_exptmod.c @@ -103,3 +103,7 @@ done: } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/rsa/rsa_free.c b/src/pk/rsa/rsa_free.c index 85ade97..a611460 100644 --- a/src/pk/rsa/rsa_free.c +++ b/src/pk/rsa/rsa_free.c @@ -29,3 +29,7 @@ void rsa_free(rsa_key *key) } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/rsa/rsa_import.c b/src/pk/rsa/rsa_import.c index 5408df0..d89ed97 100644 --- a/src/pk/rsa/rsa_import.c +++ b/src/pk/rsa/rsa_import.c @@ -18,7 +18,7 @@ #ifdef MRSA /** - Import an RSAPublicKey or RSAPrivateKey [two-prime only, defined in PKCS #1 v2.1] + Import an RSAPublicKey or RSAPrivateKey [two-prime only, only support >= 1024-bit keys, defined in PKCS #1 v2.1] @param in The packet to import from @param inlen It's length (octets) @param key [out] Destination for newly imported key @@ -26,65 +26,39 @@ */ int rsa_import(const unsigned char *in, unsigned long inlen, rsa_key *key) { - unsigned long x, y; - int err; + int err; + mp_int zero; LTC_ARGCHK(in != NULL); LTC_ARGCHK(key != NULL); /* init key */ - if ((err = mp_init_multi(&key->e, &key->d, &key->N, &key->dQ, &key->dP, &key->qP, - &key->p, &key->q, NULL)) != MP_OKAY) { + if ((err = mp_init_multi(&zero, &key->e, &key->d, &key->N, &key->dQ, + &key->dP, &key->qP, &key->p, &key->q, NULL)) != MP_OKAY) { return mpi_to_ltc_error(err); } - /* check the header */ - if (inlen < 4) { - return CRYPT_INVALID_PACKET; - } - - /* should be 0x30 0x8{1|2} LL LL */ - if ((in[0] != 0x30) || ((in[1] != 0x81) && (in[1] != 0x82))) { - return CRYPT_INVALID_PACKET; - } - - /* ok all the ASN.1 params are fine so far, let's move up */ - x = ((unsigned long)in[2]); - y = 0; - if ((in[1] & ~0x80) == 2) { - x = (x << 8) + ((unsigned long)in[3]) + 1; - in += 1; - y = 1; - } - in += 3; /* advance input */ - x += 3; /* size of packet according to header */ - y += 3; /* used input */ - - if (x != inlen) { - return CRYPT_INVALID_PACKET; - } - - /* decrement inlen by the header size */ - inlen -= y; - - /* read first number, it's either N or 0 [0 == private key] */ - x = inlen; - if ((err = der_get_multi_integer(in, &x, &key->N, NULL)) != CRYPT_OK) { + if ((err = der_decode_sequence_multi(in, inlen, + LTC_ASN1_INTEGER, 1UL, &key->N, + LTC_ASN1_EOL, 0UL, NULL)) != CRYPT_OK) { goto LBL_ERR; } - /* advance */ - inlen -= x; - in += x; - if (mp_cmp_d(&key->N, 0) == MP_EQ) { /* it's a private key */ - if ((err = der_get_multi_integer(in, &inlen, &key->N, &key->e, - &key->d, &key->p, &key->q, &key->dP, - &key->dQ, &key->qP, NULL)) != CRYPT_OK) { + if ((err = der_decode_sequence_multi(in, inlen, + LTC_ASN1_INTEGER, 1UL, &zero, + LTC_ASN1_INTEGER, 1UL, &key->N, + LTC_ASN1_INTEGER, 1UL, &key->e, + LTC_ASN1_INTEGER, 1UL, &key->d, + LTC_ASN1_INTEGER, 1UL, &key->p, + LTC_ASN1_INTEGER, 1UL, &key->q, + LTC_ASN1_INTEGER, 1UL, &key->dP, + LTC_ASN1_INTEGER, 1UL, &key->dQ, + LTC_ASN1_INTEGER, 1UL, &key->qP, + LTC_ASN1_EOL, 0UL, NULL)) != CRYPT_OK) { goto LBL_ERR; } - key->type = PK_PRIVATE; } else if (mp_cmp_d(&key->N, 1) == MP_EQ) { /* we don't support multi-prime RSA */ @@ -92,21 +66,27 @@ int rsa_import(const unsigned char *in, unsigned long inlen, rsa_key *key) goto LBL_ERR; } else { /* it's a public key and we lack e */ - if ((err = der_get_multi_integer(in, &inlen, &key->e, NULL)) != CRYPT_OK) { + if ((err = der_decode_sequence_multi(in, inlen, + LTC_ASN1_INTEGER, 1UL, &key->N, + LTC_ASN1_INTEGER, 1UL, &key->e, + LTC_ASN1_EOL, 0UL, NULL)) != CRYPT_OK) { goto LBL_ERR; } /* free up some ram */ mp_clear_multi(&key->p, &key->q, &key->qP, &key->dP, &key->dQ, NULL); - key->type = PK_PUBLIC; } return CRYPT_OK; LBL_ERR: - mp_clear_multi(&key->d, &key->e, &key->N, &key->dQ, &key->dP, + mp_clear_multi(&zero, &key->d, &key->e, &key->N, &key->dQ, &key->dP, &key->qP, &key->p, &key->q, NULL); return err; } #endif /* MRSA */ + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/rsa/rsa_make_key.c b/src/pk/rsa/rsa_make_key.c index 9d49e3c..34a94d3 100644 --- a/src/pk/rsa/rsa_make_key.c +++ b/src/pk/rsa/rsa_make_key.c @@ -119,3 +119,7 @@ done: } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/rsa/rsa_sign_hash.c b/src/pk/rsa/rsa_sign_hash.c index b86ad64..010ee3c 100644 --- a/src/pk/rsa/rsa_sign_hash.c +++ b/src/pk/rsa/rsa_sign_hash.c @@ -73,3 +73,7 @@ int rsa_sign_hash(const unsigned char *in, unsigned long inlen, } #endif /* MRSA */ + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/pk/rsa/rsa_v15_decrypt_key.c b/src/pk/rsa/rsa_v15_decrypt_key.c deleted file mode 100644 index eb5fe7d..0000000 --- a/src/pk/rsa/rsa_v15_decrypt_key.c +++ /dev/null @@ -1,73 +0,0 @@ - /* LibTomCrypt, modular cryptographic library -- Tom St Denis - * - * LibTomCrypt is a library that provides various cryptographic - * algorithms in a highly modular and flexible manner. - * - * The library is free for all purposes without any express - * guarantee it works. - * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org - */ -#include "tomcrypt.h" - -/** - @file rsa_v15_decrypt_key.c - RSA PKCS v1.5 Decryption, Tom St Denis -*/ - -#ifdef MRSA - -/** - RSA decrypt then PKCS #1 v1.5 depad - @param in The ciphertext - @param inlen The length of the ciphertext (octets) - @param out [out] The plaintext - @param outlen The length of the plaintext (you have to tell this function as it's not part of PKCS #1 v1.0 padding!) - @param stat [out] Status of decryption, 1==valid, 0==invalid - @param key The corresponding private RSA key - @return CRYPT_OK if successful (even if invalid) -*/ -int rsa_v15_decrypt_key(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long outlen, - int *stat, rsa_key *key) -{ - unsigned long modulus_bitlen, modulus_bytelen, x; - int err; - unsigned char *tmp; - - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(key != NULL); - LTC_ARGCHK(stat != NULL); - - /* default to invalid */ - *stat = 0; - - /* get modulus len in bits */ - modulus_bitlen = mp_count_bits(&(key->N)); - - /* outlen must be at least the size of the modulus */ - modulus_bytelen = mp_unsigned_bin_size(&(key->N)); - if (modulus_bytelen != inlen) { - return CRYPT_INVALID_PACKET; - } - - /* allocate ram */ - tmp = XMALLOC(inlen); - if (tmp == NULL) { - return CRYPT_MEM; - } - - /* rsa decode the packet */ - x = inlen; - if ((err = rsa_exptmod(in, inlen, tmp, &x, PK_PRIVATE, key)) != CRYPT_OK) { - XFREE(tmp); - return err; - } - - /* PKCS #1 v1.5 depad */ - err = pkcs_1_v15_es_decode(tmp, x, modulus_bitlen, out, outlen, stat); - XFREE(tmp); - return err; -} - -#endif diff --git a/src/pk/rsa/rsa_v15_encrypt_key.c b/src/pk/rsa/rsa_v15_encrypt_key.c deleted file mode 100644 index d422f67..0000000 --- a/src/pk/rsa/rsa_v15_encrypt_key.c +++ /dev/null @@ -1,68 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis - * - * LibTomCrypt is a library that provides various cryptographic - * algorithms in a highly modular and flexible manner. - * - * The library is free for all purposes without any express - * guarantee it works. - * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org - */ -#include "tomcrypt.h" - -/** - @file rsa_v15_encrypt_key.c - RSA PKCS v1.5 Encryption, Tom St Denis -*/ - -#ifdef MRSA - -/** - PKCS #1 v1.5 pad then encrypt - @param in The plaintext - @param inlen The length of the plaintext (octets) - @param out [out] The ciphertext - @param outlen [in/out] The max size and resulting size of the ciphertext - @param prng An active PRNG - @param prng_idx The index of the desired PRNG - @param key The public RSA key - @return CRYPT_OK if successful -*/ -int rsa_v15_encrypt_key(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *outlen, - prng_state *prng, int prng_idx, - rsa_key *key) -{ - unsigned long modulus_bitlen, modulus_bytelen, x; - int err; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(outlen != NULL); - LTC_ARGCHK(key != NULL); - - /* valid prng? */ - if ((err = prng_is_valid(prng_idx)) != CRYPT_OK) { - return err; - } - - /* get modulus len in bits */ - modulus_bitlen = mp_count_bits(&(key->N)); - - /* outlen must be at least the size of the modulus */ - modulus_bytelen = mp_unsigned_bin_size(&(key->N)); - if (modulus_bytelen > *outlen) { - return CRYPT_BUFFER_OVERFLOW; - } - - /* pad it */ - x = *outlen; - if ((err = pkcs_1_v15_es_encode(in, inlen, modulus_bitlen, prng, prng_idx, out, &x)) != CRYPT_OK) { - return err; - } - - /* encrypt it */ - return rsa_exptmod(out, x, out, outlen, PK_PUBLIC, key); -} - -#endif diff --git a/src/pk/rsa/rsa_v15_sign_hash.c b/src/pk/rsa/rsa_v15_sign_hash.c deleted file mode 100644 index 7e9b350..0000000 --- a/src/pk/rsa/rsa_v15_sign_hash.c +++ /dev/null @@ -1,66 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis - * - * LibTomCrypt is a library that provides various cryptographic - * algorithms in a highly modular and flexible manner. - * - * The library is free for all purposes without any express - * guarantee it works. - * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org - */ -#include "tomcrypt.h" - -/** - @file rsa_v15_sign_hash.c - RSA PKCS v1.5 Signature, Tom St Denis -*/ - -#ifdef MRSA - -/** - PKCS #1 v1.5 pad then sign - @param in The hash to sign - @param inlen The length of the message hash (octets) - @param out [out] The signature - @param siglen [in/out] The max size and resulting size of the signature - @param hash_idx The index of the hash desired - @param key The private RSA key to perform the signature with - @return CRYPT_OK if successful -*/ -int rsa_v15_sign_hash(const unsigned char *in, unsigned long inlen, - unsigned char *out, unsigned long *siglen, - int hash_idx, rsa_key *key) -{ - unsigned long modulus_bitlen, modulus_bytelen, x; - int err; - - LTC_ARGCHK(in != NULL); - LTC_ARGCHK(out != NULL); - LTC_ARGCHK(siglen != NULL); - LTC_ARGCHK(key != NULL); - - /* valid hash ? */ - if ((err = hash_is_valid(hash_idx)) != CRYPT_OK) { - return err; - } - - /* get modulus len in bits */ - modulus_bitlen = mp_count_bits(&(key->N)); - - /* outlen must be at least the size of the modulus */ - modulus_bytelen = mp_unsigned_bin_size(&(key->N)); - if (modulus_bytelen > *siglen) { - return CRYPT_BUFFER_OVERFLOW; - } - - /* PKCS #1 v1.5 pad the key */ - x = *siglen; - if ((err = pkcs_1_v15_sa_encode(in, inlen, hash_idx, modulus_bitlen, out, &x)) != CRYPT_OK) { - return err; - } - - /* RSA encode it */ - return rsa_exptmod(out, x, out, siglen, PK_PRIVATE, key); -} - -#endif diff --git a/src/pk/rsa/rsa_v15_verify_hash.c b/src/pk/rsa/rsa_v15_verify_hash.c deleted file mode 100644 index e742cba..0000000 --- a/src/pk/rsa/rsa_v15_verify_hash.c +++ /dev/null @@ -1,81 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis - * - * LibTomCrypt is a library that provides various cryptographic - * algorithms in a highly modular and flexible manner. - * - * The library is free for all purposes without any express - * guarantee it works. - * - * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.org - */ -#include "tomcrypt.h" - -/** - @file rsa_v15_verify_hash.c - RSA PKCS v1.5 Signature verification, Tom St Denis -*/ - -#ifdef MRSA - -/** - RSA de-sign then PKCS v1.5 signature depad - @param sig The signature data - @param siglen The length of the signature (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 hash_idx The index of the desired hash - @param stat [out] The result of the signature comparison, 1==valid, 0==invalid - @param key The corresponding public RSA key that performed the signature - @return CRYPT_OK if successful (even if the signature is invalid) -*/ -int rsa_v15_verify_hash(const unsigned char *sig, unsigned long siglen, - const unsigned char *hash, unsigned long hashlen, - int hash_idx, int *stat, - rsa_key *key) -{ - unsigned long modulus_bitlen, modulus_bytelen, x; - int err; - unsigned char *tmpbuf; - - LTC_ARGCHK(hash != NULL); - LTC_ARGCHK(sig != NULL); - LTC_ARGCHK(stat != NULL); - LTC_ARGCHK(key != NULL); - - /* default to invalid */ - *stat = 0; - - /* valid hash ? */ - if ((err = hash_is_valid(hash_idx)) != CRYPT_OK) { - return err; - } - - /* get modulus len in bits */ - modulus_bitlen = mp_count_bits(&(key->N)); - - /* outlen must be at least the size of the modulus */ - modulus_bytelen = mp_unsigned_bin_size(&(key->N)); - if (modulus_bytelen != siglen) { - return CRYPT_INVALID_PACKET; - } - - /* allocate temp buffer for decoded sig */ - tmpbuf = XMALLOC(siglen); - if (tmpbuf == NULL) { - return CRYPT_MEM; - } - - /* RSA decode it */ - x = siglen; - if ((err = rsa_exptmod(sig, siglen, tmpbuf, &x, PK_PUBLIC, key)) != CRYPT_OK) { - XFREE(tmpbuf); - return err; - } - - /* PSS decode it */ - err = pkcs_1_v15_sa_decode(hash, hashlen, tmpbuf, x, hash_idx, modulus_bitlen, stat); - XFREE(tmpbuf); - return err; -} - -#endif diff --git a/src/pk/rsa/rsa_verify_hash.c b/src/pk/rsa/rsa_verify_hash.c index 7072083..ab5b2f8 100644 --- a/src/pk/rsa/rsa_verify_hash.c +++ b/src/pk/rsa/rsa_verify_hash.c @@ -80,3 +80,7 @@ int rsa_verify_hash(const unsigned char *sig, unsigned long siglen, } #endif /* MRSA */ + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/prngs/fortuna.c b/src/prngs/fortuna.c index 4548a90..cdb67bf 100644 --- a/src/prngs/fortuna.c +++ b/src/prngs/fortuna.c @@ -384,3 +384,7 @@ int fortuna_test(void) #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/prngs/rc4.c b/src/prngs/rc4.c index 750c38b..feddf1c 100644 --- a/src/prngs/rc4.c +++ b/src/prngs/rc4.c @@ -258,3 +258,7 @@ int rc4_test(void) #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/prngs/rng_get_bytes.c b/src/prngs/rng_get_bytes.c index 8519e0a..bd0972c 100644 --- a/src/prngs/rng_get_bytes.c +++ b/src/prngs/rng_get_bytes.c @@ -138,3 +138,7 @@ unsigned long rng_get_bytes(unsigned char *out, unsigned long outlen, #endif return 0; } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/prngs/rng_make_prng.c b/src/prngs/rng_make_prng.c index 94132e7..ce410e6 100644 --- a/src/prngs/rng_make_prng.c +++ b/src/prngs/rng_make_prng.c @@ -63,3 +63,7 @@ int rng_make_prng(int bits, int wprng, prng_state *prng, return CRYPT_OK; } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/prngs/sober128.c b/src/prngs/sober128.c index 48667bd..f509474 100644 --- a/src/prngs/sober128.c +++ b/src/prngs/sober128.c @@ -489,3 +489,7 @@ int sober128_test(void) #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/prngs/sober128tab.c b/src/prngs/sober128tab.c index e25e271..a5754c7 100644 --- a/src/prngs/sober128tab.c +++ b/src/prngs/sober128tab.c @@ -156,3 +156,7 @@ static const ulong32 Sbox[256] = { 0x45f0b24f, 0x51fda998, 0xc0d52d71, 0xfa0896a8, 0xf9e6053f, 0xa4b0d300, 0xd499cbcc, 0xb95e3d40, }; + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/prngs/sprng.c b/src/prngs/sprng.c index dce8347..dc82667 100644 --- a/src/prngs/sprng.c +++ b/src/prngs/sprng.c @@ -130,3 +130,7 @@ int sprng_test(void) + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/src/prngs/yarrow.c b/src/prngs/yarrow.c index 1582856..4abaf73 100644 --- a/src/prngs/yarrow.c +++ b/src/prngs/yarrow.c @@ -186,6 +186,7 @@ int yarrow_ready(prng_state *prng) prng->yarrow.pool, /* IV */ prng->yarrow.pool, ks, /* KEY and key size */ 0, /* number of rounds */ + CTR_COUNTER_LITTLE_ENDIAN, /* little endian counter */ &prng->yarrow.ctr)) != CRYPT_OK) { return err; } @@ -310,3 +311,7 @@ int yarrow_test(void) #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/testbuild.sh b/testbuild.sh new file mode 100644 index 0000000..a17c677 --- /dev/null +++ b/testbuild.sh @@ -0,0 +1,11 @@ +#!/bin/bash +echo "$1 (Build Only, $2, $3)..." +make clean 1>/dev/null 2>/dev/null +echo -n "building..." +touch testok.txt +CFLAGS="$2" make -f $3 test tv_gen 1>gcc_1.txt 2>gcc_2.txt || (echo "build $1 failed see gcc_2.txt for more information" && cat gcc_2.txt && rm -f testok.txt && exit 1) +if find testok.txt -type f 1>/dev/null 2>/dev/null ; then + echo "successful" + exit 0 +fi +exit 1 diff --git a/testme.sh b/testme.sh new file mode 100644 index 0000000..da0f97b --- /dev/null +++ b/testme.sh @@ -0,0 +1,52 @@ +#!/bin/bash + +# date +echo "date="`date` + +# output version +echo "Testing verion" `grep "^VERSION=" makefile | sed "s/.*=//"` +#grep "VERSION=" makefile | perl -e "@a = split('=', <>); print @a[1];"` + +# get uname +echo "uname="`uname -a` +echo + +# stock build +bash run.sh "STOCK" " " $1 || exit 1 + +# SMALL code +bash run.sh "SMALL" "-DLTC_SMALL_CODE" $1 || exit 1 + +# NOTABLES +bash run.sh "NOTABLES" "-DLTC_NO_TABLES" $1 || exit 1 + +# SMALL+NOTABLES +bash run.sh "SMALL+NOTABLES" "-DLTC_SMALL_CODE -DLTC_NO_TABLES" $1 || exit 1 + +# CLEANSTACK +bash run.sh "CLEANSTACK" "-DLTC_CLEAN_STACK" $1 || exit 1 + +# CLEANSTACK + SMALL +bash run.sh "CLEANSTACK+SMALL" "-DLTC_SMALL_CODE -DLTC_CLEAN_STACK" $1 || exit 1 + +# CLEANSTACK + NOTABLES +bash run.sh "CLEANSTACK+NOTABLES" "-DLTC_NO_TABLES -DLTC_CLEAN_STACK" $1 || exit 1 + +# CLEANSTACK + NOTABLES + SMALL +bash run.sh "CLEANSTACK+NOTABLES+SMALL" "-DLTC_NO_TABLES -DLTC_CLEAN_STACK -DLTC_SMALL_CODE" $1 || exit 1 + +# NO_FAST +bash run.sh "NO_FAST" "-DLTC_NO_FAST" $1 || exit 1 + +# NO_ASM +bash run.sh "NO_ASM" "-DLTC_NO_ASM" $1 || exit 1 + +# test build with no testing +bash testbuild.sh "NOTEST" "-DLTC_NO_TEST" $1 || exit 1 + +# test build with no file routines +bash testbuild.sh "NOFILE" "-DLTC_NO_FILE" $1 || exit 1 + +# $Source: /cvs/libtom/libtomcrypt/testme.sh,v $ +# $Revision: 1.16 $ +# $Date: 2005/05/11 18:59:53 $ diff --git a/testprof/base64_test.c b/testprof/base64_test.c index e93ebef..5ce55dd 100644 --- a/testprof/base64_test.c +++ b/testprof/base64_test.c @@ -12,9 +12,13 @@ int base64_test(void) l2 = sizeof(tmp); DO(base64_decode(out, l1, tmp, &l2)); if (l2 != x || memcmp(tmp, in, x)) { - printf("base64 failed %lu %lu %lu", x, l1, l2); + fprintf(stderr, "base64 failed %lu %lu %lu", x, l1, l2); return 1; } } return 0; } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/testprof/cipher_hash_test.c b/testprof/cipher_hash_test.c index d2f3bfc..666d913 100644 --- a/testprof/cipher_hash_test.c +++ b/testprof/cipher_hash_test.c @@ -39,3 +39,7 @@ int cipher_hash_test(void) return 0; } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/testprof/der_tests.c b/testprof/der_tests.c index fe8eb00..95f3348 100644 --- a/testprof/der_tests.c +++ b/testprof/der_tests.c @@ -4,7 +4,7 @@ int der_tests(void) { - printf("NOP"); + fprintf(stderr, "NOP"); return 0; } @@ -12,83 +12,219 @@ int der_tests(void) int der_tests(void) { - unsigned long x, y, z, zz; - unsigned char buf[2][4096]; + unsigned long x, y, z, zz, oid[2][32]; + unsigned char buf[3][2048]; mp_int a, b, c, d, e, f, g; + static const unsigned char rsa_oid_der[] = { 0x06, 0x06, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d }; + static const unsigned long rsa_oid[] = { 1, 2, 840, 113549 }; + + static const unsigned char rsa_ia5[] = "test1@rsa.com"; + static const unsigned char rsa_ia5_der[] = { 0x16, 0x0d, 0x74, 0x65, 0x73, 0x74, 0x31, + 0x40, 0x72, 0x73, 0x61, 0x2e, 0x63, 0x6f, 0x6d }; + + static const unsigned char rsa_printable[] = "Test User 1"; + static const unsigned char rsa_printable_der[] = { 0x13, 0x0b, 0x54, 0x65, 0x73, 0x74, 0x20, 0x55, + 0x73, 0x65, 0x72, 0x20, 0x31 }; + DO(mpi_to_ltc_error(mp_init_multi(&a, &b, &c, &d, &e, &f, &g, NULL))); for (zz = 0; zz < 16; zz++) { for (z = 0; z < 1024; z++) { if (yarrow_read(buf[0], z, &yarrow_prng) != z) { - printf("Failed to read %lu bytes from yarrow\n", z); + fprintf(stderr, "Failed to read %lu bytes from yarrow\n", z); return 1; } DO(mpi_to_ltc_error(mp_read_unsigned_bin(&a, buf[0], z))); + if (mp_iszero(&a) == MP_NO) { a.sign = buf[0][0] & 1 ? MP_ZPOS : MP_NEG; } x = sizeof(buf[0]); DO(der_encode_integer(&a, buf[0], &x)); - y = x; + DO(der_length_integer(&a, &y)); + if (y != x) { fprintf(stderr, "DER INTEGER size mismatch\n"); return 1; } mp_zero(&b); - DO(der_decode_integer(buf[0], &y, &b)); + DO(der_decode_integer(buf[0], y, &b)); if (y != x || mp_cmp(&a, &b) != MP_EQ) { - printf("%lu: %lu vs %lu\n", z, x, y); + fprintf(stderr, "%lu: %lu vs %lu\n", z, x, y); #ifdef BN_MP_TORADIX_C mp_todecimal(&a, buf[0]); mp_todecimal(&b, buf[1]); - printf("a == %s\nb == %s\n", buf[0], buf[1]); + fprintf(stderr, "a == %s\nb == %s\n", buf[0], buf[1]); #endif mp_clear_multi(&a, &b, &c, &d, &e, &f, &g, NULL); return 1; } } } - -/* test the multi */ - mp_set(&a, 1); - x = sizeof(buf[0]); - DO(der_put_multi_integer(buf[0], &x, &a, NULL)); - y = x; - mp_zero(&a); - DO(der_get_multi_integer(buf[0], &y, &a, NULL)); - if (x != y || mp_cmp_d(&a, 1)) { - printf("%lu, %lu, %d\n", x, y, mp_cmp_d(&a, 1)); - mp_clear_multi(&a, &b, &c, &d, &e, &f, &g, NULL); - return 1; - } +/* test short integer */ + for (zz = 0; zz < 256; zz++) { + for (z = 1; z < 4; z++) { + if (yarrow_read(buf[0], z, &yarrow_prng) != z) { + fprintf(stderr, "Failed to read %lu bytes from yarrow\n", z); + return 1; + } + /* encode with normal */ + DO(mpi_to_ltc_error(mp_read_unsigned_bin(&a, buf[0], z))); - mp_set(&a, 1); - mp_set(&b, 2); - x = sizeof(buf[0]); - DO(der_put_multi_integer(buf[0], &x, &a, &b, NULL)); - y = x; - mp_zero(&a); - mp_zero(&b); - DO(der_get_multi_integer(buf[0], &y, &a, &b, NULL)); - if (x != y || mp_cmp_d(&a, 1) || mp_cmp_d(&b, 2)) { - printf("%lu, %lu, %d, %d\n", x, y, mp_cmp_d(&a, 1), mp_cmp_d(&b, 2)); - mp_clear_multi(&a, &b, &c, &d, &e, &f, &g, NULL); - return 1; - } - - mp_set(&a, 1); - mp_set(&b, 2); - mp_set(&c, 3); - x = sizeof(buf[0]); - DO(der_put_multi_integer(buf[0], &x, &a, &b, &c, NULL)); - y = x; - mp_zero(&a); - mp_zero(&b); - mp_zero(&c); - DO(der_get_multi_integer(buf[0], &y, &a, &b, &c, NULL)); - if (x != y || mp_cmp_d(&a, 1) || mp_cmp_d(&b, 2) || mp_cmp_d(&c, 3)) { - printf("%lu, %lu, %d, %d, %d\n", x, y, mp_cmp_d(&a, 1), mp_cmp_d(&b, 2), mp_cmp_d(&c, 3)); - mp_clear_multi(&a, &b, &c, &d, &e, &f, &g, NULL); - return 1; - } + x = sizeof(buf[0]); + DO(der_encode_integer(&a, buf[0], &x)); + /* encode with short */ + y = sizeof(buf[1]); + DO(der_encode_short_integer(mp_get_int(&a), buf[1], &y)); + if (x != y || memcmp(buf[0], buf[1], x)) { + fprintf(stderr, "DER INTEGER short encoding failed, %lu, %lu\n", x, y); + for (z = 0; z < x; z++) fprintf(stderr, "%02x ", buf[0][z]); fprintf(stderr, "\n"); + for (z = 0; z < y; z++) fprintf(stderr, "%02x ", buf[1][z]); fprintf(stderr, "\n"); + mp_clear_multi(&a, &b, &c, &d, &e, &f, &g, NULL); + return 1; + } + /* decode it */ + x = 0; + DO(der_decode_short_integer(buf[1], y, &x)); + if (x != mp_get_int(&a)) { + fprintf(stderr, "DER INTEGER short decoding failed, %lu, %lu\n", x, mp_get_int(&a)); + mp_clear_multi(&a, &b, &c, &d, &e, &f, &g, NULL); + return 1; + } + } + } mp_clear_multi(&a, &b, &c, &d, &e, &f, &g, NULL); + + +/* Test bit string */ + for (zz = 1; zz < 1536; zz++) { + yarrow_read(buf[0], zz, &yarrow_prng); + for (z = 0; z < zz; z++) { + buf[0][z] &= 0x01; + } + x = sizeof(buf[1]); + DO(der_encode_bit_string(buf[0], zz, buf[1], &x)); + DO(der_length_bit_string(zz, &y)); + if (y != x) { + fprintf(stderr, "\nDER BIT STRING length of encoded not match expected : %lu, %lu, %lu\n", z, x, y); + return 1; + } + + y = sizeof(buf[2]); + DO(der_decode_bit_string(buf[1], x, buf[2], &y)); + if (y != zz || memcmp(buf[0], buf[2], zz)) { + fprintf(stderr, "%lu, %lu, %d\n", y, zz, memcmp(buf[0], buf[2], zz)); + return 1; + } + } + +/* Test octet string */ + for (zz = 1; zz < 1536; zz++) { + yarrow_read(buf[0], zz, &yarrow_prng); + x = sizeof(buf[1]); + DO(der_encode_octet_string(buf[0], zz, buf[1], &x)); + DO(der_length_octet_string(zz, &y)); + if (y != x) { + fprintf(stderr, "\nDER OCTET STRING length of encoded not match expected : %lu, %lu, %lu\n", z, x, y); + return 1; + } + y = sizeof(buf[2]); + DO(der_decode_octet_string(buf[1], x, buf[2], &y)); + if (y != zz || memcmp(buf[0], buf[2], zz)) { + fprintf(stderr, "%lu, %lu, %d\n", y, zz, memcmp(buf[0], buf[2], zz)); + return 1; + } + } + +/* test OID */ + x = sizeof(buf[0]); + DO(der_encode_object_identifier(rsa_oid, sizeof(rsa_oid)/sizeof(rsa_oid[0]), buf[0], &x)); + if (x != sizeof(rsa_oid_der) || memcmp(rsa_oid_der, buf[0], x)) { + fprintf(stderr, "rsa_oid_der encode failed to match, %lu, ", x); + for (y = 0; y < x; y++) fprintf(stderr, "%02x ", buf[0][y]); + fprintf(stderr, "\n"); + return 1; + } + + y = sizeof(oid[0])/sizeof(oid[0][0]); + DO(der_decode_object_identifier(buf[0], x, oid[0], &y)); + if (y != sizeof(rsa_oid)/sizeof(rsa_oid[0]) || memcmp(rsa_oid, oid[0], sizeof(rsa_oid))) { + fprintf(stderr, "rsa_oid_der decode failed to match, %lu, ", y); + for (z = 0; z < y; z++) fprintf(stderr, "%lu ", oid[0][z]); + fprintf(stderr, "\n"); + return 1; + } + + /* do random strings */ + for (zz = 0; zz < 5000; zz++) { + /* pick a random number of words */ + yarrow_read(buf[0], 4, &yarrow_prng); + LOAD32L(z, buf[0]); + z = 2 + (z % ((sizeof(oid[0])/sizeof(oid[0][0])) - 2)); + + /* fill them in */ + oid[0][0] = buf[0][0] % 3; + oid[0][1] = buf[0][1] % 40; + + for (y = 2; y < z; y++) { + yarrow_read(buf[0], 4, &yarrow_prng); + LOAD32L(oid[0][y], buf[0]); + } + + /* encode it */ + x = sizeof(buf[0]); + DO(der_encode_object_identifier(oid[0], z, buf[0], &x)); + DO(der_length_object_identifier(oid[0], z, &y)); + if (x != y) { + fprintf(stderr, "Random OID %lu test failed, length mismatch: %lu, %lu\n", z, x, y); + for (x = 0; x < z; x++) fprintf(stderr, "%lu\n", oid[0][x]); + return 1; + } + + /* decode it */ + y = sizeof(oid[0])/sizeof(oid[0][0]); + DO(der_decode_object_identifier(buf[0], x, oid[1], &y)); + if (y != z) { + fprintf(stderr, "Random OID %lu test failed, decode length mismatch: %lu, %lu\n", z, x, y); + return 1; + } + if (memcmp(oid[0], oid[1], sizeof(oid[0][0]) * z)) { + fprintf(stderr, "Random OID %lu test failed, decoded values wrong\n", z); + for (x = 0; x < z; x++) fprintf(stderr, "%lu\n", oid[0][x]); fprintf(stderr, "\n\n Got \n\n"); + for (x = 0; x < z; x++) fprintf(stderr, "%lu\n", oid[1][x]); + return 1; + } + } + +/* IA5 string */ + x = sizeof(buf[0]); + DO(der_encode_ia5_string(rsa_ia5, strlen(rsa_ia5), buf[0], &x)); + if (x != sizeof(rsa_ia5_der) || memcmp(buf[0], rsa_ia5_der, x)) { + fprintf(stderr, "IA5 encode failed: %lu, %lu\n", x, (unsigned long)sizeof(rsa_ia5_der)); + return 1; + } + y = sizeof(buf[1]); + DO(der_decode_ia5_string(buf[0], x, buf[1], &y)); + if (y != strlen(rsa_ia5) || memcmp(buf[1], rsa_ia5, strlen(rsa_ia5))) { + fprintf(stderr, "DER IA5 failed test vector\n"); + return 1; + } + +/* Printable string */ + x = sizeof(buf[0]); + DO(der_encode_printable_string(rsa_printable, strlen(rsa_printable), buf[0], &x)); + if (x != sizeof(rsa_printable_der) || memcmp(buf[0], rsa_printable_der, x)) { + fprintf(stderr, "PRINTABLE encode failed: %lu, %lu\n", x, (unsigned long)sizeof(rsa_printable_der)); + return 1; + } + y = sizeof(buf[1]); + DO(der_decode_printable_string(buf[0], x, buf[1], &y)); + if (y != strlen(rsa_printable) || memcmp(buf[1], rsa_printable, strlen(rsa_printable))) { + fprintf(stderr, "DER printable failed test vector\n"); + return 1; + } + return 0; } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/testprof/dh_tests.c b/testprof/dh_tests.c index feb74ac..e644b06 100644 --- a/testprof/dh_tests.c +++ b/testprof/dh_tests.c @@ -22,11 +22,11 @@ int dh_tests (void) y = 4096; DO(dh_shared_secret (&userb, &usera, buf[1], &y)); if (y != x) { - printf ("DH Shared keys are not same size.\n"); + fprintf(stderr, "DH Shared keys are not same size.\n"); return 1; } if (memcmp (buf[0], buf[1], x)) { - printf ("DH Shared keys not same contents.\n"); + fprintf(stderr, "DH Shared keys not same contents.\n"); return 1; } @@ -41,11 +41,11 @@ int dh_tests (void) DO(dh_shared_secret (&usera, &userb, buf[2], &z)); if (z != x) { - printf ("failed. Size don't match?\n"); + fprintf(stderr, "failed. Size don't match?\n"); return 1; } if (memcmp (buf[0], buf[2], x)) { - printf ("Failed. Content didn't match.\n"); + fprintf(stderr, "Failed. Content didn't match.\n"); return 1; } dh_free (&usera); @@ -62,12 +62,12 @@ int dh_tests (void) x = sizeof (buf[0]); DO(dh_decrypt_key (buf[1], y, buf[0], &x, &usera)); if (x != 16) { - printf ("Failed (length)\n"); + fprintf(stderr, "Failed (length)\n"); return 1; } for (x = 0; x < 16; x++) if (buf[0][x] != x) { - printf ("Failed (contents)\n"); + fprintf(stderr, "Failed (contents)\n"); return 1; } @@ -81,7 +81,7 @@ int dh_tests (void) buf[0][0] ^= 1; DO(dh_verify_hash (buf[1], x, buf[0], 16, &stat2, &usera)); if (!(stat == 1 && stat2 == 0)) { - printf("dh_sign/verify_hash %d %d", stat, stat2); + fprintf(stderr, "dh_sign/verify_hash %d %d", stat, stat2); return 1; } dh_free (&usera); @@ -92,8 +92,12 @@ int dh_tests (void) int dh_tests(void) { - printf("NOP"); + fprintf(stderr, "NOP"); return 0; } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/testprof/dsa_test.c b/testprof/dsa_test.c index cd2e89a..6724feb 100644 --- a/testprof/dsa_test.c +++ b/testprof/dsa_test.c @@ -14,7 +14,7 @@ int dsa_test(void) /* verify it */ DO(dsa_verify_key(&key, &stat1)); - if (stat1 == 0) { printf("dsa_verify_key "); return 1; } + if (stat1 == 0) { fprintf(stderr, "dsa_verify_key "); return 1; } /* sign the message */ x = sizeof(out); @@ -27,7 +27,7 @@ int dsa_test(void) msg[0] ^= 1; DO(dsa_verify_hash(out, x, msg, sizeof(msg), &stat2, &key)); msg[0] ^= 1; - if (!(stat1 == 1 && stat2 == 0)) { printf("dsa_verify %d %d", stat1, stat2); return 1; } + if (!(stat1 == 1 && stat2 == 0)) { fprintf(stderr, "dsa_verify %d %d", stat1, stat2); return 1; } /* test exporting it */ x = sizeof(out2); @@ -36,16 +36,17 @@ int dsa_test(void) /* verify a signature with it */ DO(dsa_verify_hash(out, x, msg, sizeof(msg), &stat1, &key2)); - if (stat1 == 0) { printf("dsa_verify (import private) %d ", stat1); return 1; } + if (stat1 == 0) { fprintf(stderr, "dsa_verify (import private) %d ", stat1); return 1; } dsa_free(&key2); /* export as public now */ x = sizeof(out2); DO(dsa_export(out2, &x, PK_PUBLIC, &key)); + DO(dsa_import(out2, x, &key2)); /* verify a signature with it */ DO(dsa_verify_hash(out, x, msg, sizeof(msg), &stat1, &key2)); - if (stat1 == 0) { printf("dsa_verify (import public) %d ", stat1); return 1; } + if (stat1 == 0) { fprintf(stderr, "dsa_verify (import public) %d ", stat1); return 1; } dsa_free(&key2); dsa_free(&key); @@ -56,8 +57,12 @@ int dsa_test(void) int dsa_test(void) { - printf("NOP"); + fprintf(stderr, "NOP"); return 0; } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/testprof/ecc_test.c b/testprof/ecc_test.c index 0b37ba2..4ec3e8a 100644 --- a/testprof/ecc_test.c +++ b/testprof/ecc_test.c @@ -2,102 +2,123 @@ #ifdef MECC +static int sizes[] = { +#ifdef ECC192 +24, +#endif +#ifdef ECC224 +28, +#endif +#ifdef ECC256 +32, +#endif +#ifdef ECC384 +48, +#endif +#ifdef ECC512 +65 +#endif +}; + int ecc_tests (void) { unsigned char buf[4][4096]; - unsigned long x, y, z; + unsigned long x, y, z, s; int stat, stat2; ecc_key usera, userb, pubKey, privKey; DO(ecc_test ()); - /* make up two keys */ - DO(ecc_make_key (&yarrow_prng, find_prng ("yarrow"), 65, &usera)); - DO(ecc_make_key (&yarrow_prng, find_prng ("yarrow"), 65, &userb)); + for (s = 0; s < (int)(sizeof(sizes)/sizeof(sizes[0])); s++) { + /* make up two keys */ + DO(ecc_make_key (&yarrow_prng, find_prng ("yarrow"), sizes[s], &usera)); + DO(ecc_make_key (&yarrow_prng, find_prng ("yarrow"), sizes[s], &userb)); - /* make the shared secret */ - x = 4096; - DO(ecc_shared_secret (&usera, &userb, buf[0], &x)); + /* make the shared secret */ + x = 4096; + DO(ecc_shared_secret (&usera, &userb, buf[0], &x)); - y = 4096; - DO(ecc_shared_secret (&userb, &usera, buf[1], &y)); + y = 4096; + DO(ecc_shared_secret (&userb, &usera, buf[1], &y)); - if (y != x) { - printf ("ecc Shared keys are not same size."); - return 1; + if (y != x) { + fprintf(stderr, "ecc Shared keys are not same size."); + return 1; + } + + if (memcmp (buf[0], buf[1], x)) { + fprintf(stderr, "ecc Shared keys not same contents."); + return 1; + } + + /* now export userb */ + y = 4096; + DO(ecc_export (buf[1], &y, PK_PUBLIC, &userb)); + ecc_free (&userb); + + /* import and make the shared secret again */ + DO(ecc_import (buf[1], y, &userb)); + + z = 4096; + DO(ecc_shared_secret (&usera, &userb, buf[2], &z)); + + if (z != x) { + fprintf(stderr, "failed. Size don't match?"); + return 1; + } + if (memcmp (buf[0], buf[2], x)) { + fprintf(stderr, "Failed. Content didn't match."); + return 1; + } + ecc_free (&usera); + ecc_free (&userb); + + /* test encrypt_key */ + DO(ecc_make_key (&yarrow_prng, find_prng ("yarrow"), sizes[s], &usera)); + + /* export key */ + x = sizeof(buf[0]); + DO(ecc_export(buf[0], &x, PK_PUBLIC, &usera)); + DO(ecc_import(buf[0], x, &pubKey)); + x = sizeof(buf[0]); + DO(ecc_export(buf[0], &x, PK_PRIVATE, &usera)); + DO(ecc_import(buf[0], x, &privKey)); + + for (x = 0; x < 32; x++) { + buf[0][x] = x; + } + y = sizeof (buf[1]); + DO(ecc_encrypt_key (buf[0], 32, buf[1], &y, &yarrow_prng, find_prng ("yarrow"), find_hash ("sha256"), &pubKey)); + zeromem (buf[0], sizeof (buf[0])); + x = sizeof (buf[0]); + DO(ecc_decrypt_key (buf[1], y, buf[0], &x, &privKey)); + if (x != 32) { + fprintf(stderr, "Failed (length)"); + return 1; + } + for (x = 0; x < 32; x++) { + if (buf[0][x] != x) { + fprintf(stderr, "Failed (contents)"); + return 1; + } + } + /* test sign_hash */ + for (x = 0; x < 16; x++) { + buf[0][x] = x; + } + x = sizeof (buf[1]); + DO(ecc_sign_hash (buf[0], 16, buf[1], &x, &yarrow_prng, find_prng ("yarrow"), &privKey)); + DO(ecc_verify_hash (buf[1], x, buf[0], 16, &stat, &pubKey)); + buf[0][0] ^= 1; + DO(ecc_verify_hash (buf[1], x, buf[0], 16, &stat2, &privKey)); + if (!(stat == 1 && stat2 == 0)) { + fprintf(stderr, "ecc_verify_hash failed %d, %d, ", stat, stat2); + return 1; + } + ecc_free (&usera); + ecc_free (&pubKey); + ecc_free (&privKey); } - - if (memcmp (buf[0], buf[1], x)) { - printf ("ecc Shared keys not same contents."); - return 1; - } - - /* now export userb */ - y = 4096; - DO(ecc_export (buf[1], &y, PK_PUBLIC, &userb)); - ecc_free (&userb); - - /* import and make the shared secret again */ - DO(ecc_import (buf[1], y, &userb)); - - z = 4096; - DO(ecc_shared_secret (&usera, &userb, buf[2], &z)); - - if (z != x) { - printf ("failed. Size don't match?"); - return 1; - } - if (memcmp (buf[0], buf[2], x)) { - printf ("Failed. Content didn't match."); - return 1; - } - ecc_free (&usera); - ecc_free (&userb); - -/* test encrypt_key */ - DO(ecc_make_key (&yarrow_prng, find_prng ("yarrow"), 65, &usera)); - -/* export key */ - x = sizeof(buf[0]); - DO(ecc_export(buf[0], &x, PK_PUBLIC, &usera)); - DO(ecc_import(buf[0], x, &pubKey)); - x = sizeof(buf[0]); - DO(ecc_export(buf[0], &x, PK_PRIVATE, &usera)); - DO(ecc_import(buf[0], x, &privKey)); - - for (x = 0; x < 32; x++) { - buf[0][x] = x; - } - y = sizeof (buf[1]); - DO(ecc_encrypt_key (buf[0], 32, buf[1], &y, &yarrow_prng, find_prng ("yarrow"), find_hash ("sha256"), &pubKey)); - zeromem (buf[0], sizeof (buf[0])); - x = sizeof (buf[0]); - DO(ecc_decrypt_key (buf[1], y, buf[0], &x, &privKey)); - if (x != 32) { - printf ("Failed (length)"); - return 1; - } - for (x = 0; x < 32; x++) - if (buf[0][x] != x) { - printf ("Failed (contents)"); - return 1; - } -/* test sign_hash */ - for (x = 0; x < 16; x++) { - buf[0][x] = x; - } - x = sizeof (buf[1]); - DO(ecc_sign_hash (buf[0], 16, buf[1], &x, &yarrow_prng, find_prng ("yarrow"), &privKey)); - DO(ecc_verify_hash (buf[1], x, buf[0], 16, &stat, &pubKey)); - buf[0][0] ^= 1; - DO(ecc_verify_hash (buf[1], x, buf[0], 16, &stat2, &privKey)); - if (!(stat == 1 && stat2 == 0)) { - printf("ecc_verify_hash failed %d, %d, ", stat, stat2); - return 1; - } - ecc_free (&usera); - ecc_free (&pubKey); - ecc_free (&privKey); return 0; } @@ -105,8 +126,12 @@ int ecc_tests (void) int ecc_tests(void) { - printf("NOP"); + fprintf(stderr, "NOP"); return 0; } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/testprof/mac_test.c b/testprof/mac_test.c index b076d7b..e22a72a 100644 --- a/testprof/mac_test.c +++ b/testprof/mac_test.c @@ -29,3 +29,7 @@ int mac_test(void) #endif return 0; } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/testprof/makefile.icc b/testprof/makefile.icc index c9226fb..ff87660 100644 --- a/testprof/makefile.icc +++ b/testprof/makefile.icc @@ -1,4 +1,4 @@ -CFLAGS += -I../src/headers -I./ -O3 -xP -ip +CFLAGS += -I../src/headers -I./ CC=icc OBJECTS = base64_test.o cipher_hash_test.o der_tests.o dh_tests.o \ diff --git a/testprof/modes_test.c b/testprof/modes_test.c index 46beb8a..da25f85 100644 --- a/testprof/modes_test.c +++ b/testprof/modes_test.c @@ -19,7 +19,7 @@ int modes_test(void) /* get idx of AES handy */ cipher_idx = find_cipher("aes"); if (cipher_idx == -1) { - printf("test requires AES"); + fprintf(stderr, "test requires AES"); return 1; } @@ -30,7 +30,7 @@ int modes_test(void) l = sizeof(iv2); DO(cbc_getiv(iv2, &l, &cbc)); if (l != 16 || memcmp(iv2, iv, 16)) { - printf("cbc_getiv failed"); + fprintf(stderr, "cbc_getiv failed"); return 1; } DO(cbc_encrypt(pt, ct, 64, &cbc)); @@ -40,7 +40,7 @@ int modes_test(void) zeromem(tmp, sizeof(tmp)); DO(cbc_decrypt(ct, tmp, 64, &cbc)); if (memcmp(tmp, pt, 64) != 0) { - printf("CBC failed"); + fprintf(stderr, "CBC failed"); return 1; } #endif @@ -53,7 +53,7 @@ int modes_test(void) DO(cfb_getiv(iv2, &l, &cfb)); /* note we don't memcmp iv2/iv since cfb_start processes the IV for the first block */ if (l != 16) { - printf("cfb_getiv failed"); + fprintf(stderr, "cfb_getiv failed"); return 1; } DO(cfb_encrypt(pt, ct, 64, &cfb)); @@ -63,7 +63,7 @@ int modes_test(void) zeromem(tmp, sizeof(tmp)); DO(cfb_decrypt(ct, tmp, 64, &cfb)); if (memcmp(tmp, pt, 64) != 0) { - printf("CFB failed"); + fprintf(stderr, "CFB failed"); return 1; } #endif @@ -75,7 +75,7 @@ int modes_test(void) l = sizeof(iv2); DO(ofb_getiv(iv2, &l, &ofb)); if (l != 16 || memcmp(iv2, iv, 16)) { - printf("ofb_getiv failed"); + fprintf(stderr, "ofb_getiv failed"); return 1; } DO(ofb_encrypt(pt, ct, 64, &ofb)); @@ -85,7 +85,7 @@ int modes_test(void) zeromem(tmp, sizeof(tmp)); DO(ofb_decrypt(ct, tmp, 64, &ofb)); if (memcmp(tmp, pt, 64) != 0) { - printf("OFB failed"); + fprintf(stderr, "OFB failed"); return 1; } #endif @@ -93,11 +93,11 @@ int modes_test(void) #ifdef CTR /* test CTR mode */ /* encode the block */ - DO(ctr_start(cipher_idx, iv, key, 16, 0, &ctr)); + DO(ctr_start(cipher_idx, iv, key, 16, 0, CTR_COUNTER_LITTLE_ENDIAN, &ctr)); l = sizeof(iv2); DO(ctr_getiv(iv2, &l, &ctr)); if (l != 16 || memcmp(iv2, iv, 16)) { - printf("ctr_getiv failed"); + fprintf(stderr, "ctr_getiv failed"); return 1; } DO(ctr_encrypt(pt, ct, 57, &ctr)); @@ -107,10 +107,14 @@ int modes_test(void) zeromem(tmp, sizeof(tmp)); DO(ctr_decrypt(ct, tmp, 57, &ctr)); if (memcmp(tmp, pt, 57) != 0) { - printf("CTR failed"); + fprintf(stderr, "CTR failed"); return 1; } #endif return 0; } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/testprof/pkcs_1_test.c b/testprof/pkcs_1_test.c index 40cf630..aabf30b 100644 --- a/testprof/pkcs_1_test.c +++ b/testprof/pkcs_1_test.c @@ -14,7 +14,7 @@ int pkcs_1_test(void) prng_idx = find_prng("yarrow"); if (hash_idx == -1 || prng_idx == -1) { - printf("pkcs_1 tests require sha1/yarrow"); + fprintf(stderr, "pkcs_1 tests require sha1/yarrow"); return 1; } @@ -29,30 +29,6 @@ int pkcs_1_test(void) /* random modulus len (v1.5 must be multiple of 8 though arbitrary sizes seem to work) */ modlen = 800 + 8 * (abs(rand()) % 28); - /* PKCS v1.5 testing (encryption) */ - l1 = sizeof(buf[1]); - DO(pkcs_1_v15_es_encode(buf[0], l3, modlen, &yarrow_prng, prng_idx, buf[1], &l1)); - DO(pkcs_1_v15_es_decode(buf[1], l1, modlen, buf[2], l3, &res1)); - if (res1 != 1 || memcmp(buf[0], buf[2], l3)) { - printf("pkcs v1.5 encrypt failed %d, %lu, %lu ", res1, l1, l3); - return 1; - } - - /* PKCS v1.5 testing (signatures) */ - l1 = sizeof(buf[1]); - DO(pkcs_1_v15_sa_encode(buf[0], l3, hash_idx, modlen, buf[1], &l1)); - DO(pkcs_1_v15_sa_decode(buf[0], l3, buf[1], l1, hash_idx, modlen, &res1)); - buf[0][i1 = abs(rand()) % l3] ^= 1; - DO(pkcs_1_v15_sa_decode(buf[0], l3, buf[1], l1, hash_idx, modlen, &res2)); - buf[0][i1] ^= 1; - buf[1][i2 = abs(rand()) % l1] ^= 1; - DO(pkcs_1_v15_sa_decode(buf[0], l3, buf[1], l1, hash_idx, modlen, &res3)); - - if (!(res1 == 1 && res2 == 0 && res3 == 0)) { - printf("pkcs v1.5 sign failed %d %d %d ", res1, res2, res3); - return 1; - } - /* pick a random lparam len [0..16] */ lparamlen = abs(rand()) % 17; @@ -71,16 +47,16 @@ int pkcs_1_test(void) DO(pkcs_1_oaep_decode(buf[1], l1, lparam, lparamlen, modlen, hash_idx, buf[2], &l2, &res1)); if (res1 != 1 || l2 != l3 || memcmp(buf[2], buf[0], l3) != 0) { - printf("Outsize == %lu, should have been %lu, res1 = %d, lparamlen = %lu, msg contents follow.\n", l2, l3, res1, lparamlen); - printf("ORIGINAL:\n"); + fprintf(stderr, "Outsize == %lu, should have been %lu, res1 = %d, lparamlen = %lu, msg contents follow.\n", l2, l3, res1, lparamlen); + fprintf(stderr, "ORIGINAL:\n"); for (x = 0; x < l3; x++) { - printf("%02x ", buf[0][x]); + fprintf(stderr, "%02x ", buf[0][x]); } - printf("\nRESULT:\n"); + fprintf(stderr, "\nRESULT:\n"); for (x = 0; x < l2; x++) { - printf("%02x ", buf[2][x]); + fprintf(stderr, "%02x ", buf[2][x]); } - printf("\n\n"); + fprintf(stderr, "\n\n"); return 1; } @@ -97,7 +73,7 @@ int pkcs_1_test(void) DO(pkcs_1_pss_decode(buf[0], l3, buf[1], l1, saltlen, hash_idx, modlen, &res3)); if (!(res1 == 1 && res2 == 0 && res3 == 0)) { - printf("PSS failed: %d, %d, %d, %lu, %lu\n", res1, res2, res3, l3, saltlen); + fprintf(stderr, "PSS failed: %d, %d, %d, %lu, %lu\n", res1, res2, res3, l3, saltlen); return 1; } } @@ -108,9 +84,13 @@ int pkcs_1_test(void) int pkcs_1_test(void) { - printf("NOP"); + fprintf(stderr, "NOP"); return 0; } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/testprof/rsa_test.c b/testprof/rsa_test.c index f114e49..f2893ee 100644 --- a/testprof/rsa_test.c +++ b/testprof/rsa_test.c @@ -4,18 +4,125 @@ #define RSA_MSGSIZE 78 +/* These are test keys [see file test.key] that I use to test my import/export against */ +static const unsigned char openssl_private_rsa[] = { + 0x30, 0x82, 0x02, 0x5e, 0x02, 0x01, 0x00, 0x02, 0x81, 0x81, 0x00, 0xcf, 0x9a, 0xde, 0x64, 0x8a, + 0xda, 0xc8, 0x33, 0x20, 0xa9, 0xd7, 0x83, 0x31, 0x19, 0x54, 0xb2, 0x9a, 0x85, 0xa7, 0xa1, 0xb7, + 0x75, 0x33, 0xb6, 0xa9, 0xac, 0x84, 0x24, 0xb3, 0xde, 0xdb, 0x7d, 0x85, 0x2d, 0x96, 0x65, 0xe5, + 0x3f, 0x72, 0x95, 0x24, 0x9f, 0x28, 0x68, 0xca, 0x4f, 0xdb, 0x44, 0x1c, 0x3e, 0x60, 0x12, 0x8a, + 0xdd, 0x26, 0xa5, 0xeb, 0xff, 0x0b, 0x5e, 0xd4, 0x88, 0x38, 0x49, 0x2a, 0x6e, 0x5b, 0xbf, 0x12, + 0x37, 0x47, 0xbd, 0x05, 0x6b, 0xbc, 0xdb, 0xf3, 0xee, 0xe4, 0x11, 0x8e, 0x41, 0x68, 0x7c, 0x61, + 0x13, 0xd7, 0x42, 0xc8, 0x80, 0xbe, 0x36, 0x8f, 0xdc, 0x08, 0x8b, 0x4f, 0xac, 0xa4, 0xe2, 0x76, + 0x0c, 0xc9, 0x63, 0x6c, 0x49, 0x58, 0x93, 0xed, 0xcc, 0xaa, 0xdc, 0x25, 0x3b, 0x0a, 0x60, 0x3f, + 0x8b, 0x54, 0x3a, 0xc3, 0x4d, 0x31, 0xe7, 0x94, 0xa4, 0x44, 0xfd, 0x02, 0x03, 0x01, 0x00, 0x01, + 0x02, 0x81, 0x81, 0x00, 0xc8, 0x62, 0xb9, 0xea, 0xde, 0x44, 0x53, 0x1d, 0x56, 0x97, 0xd9, 0x97, + 0x9e, 0x1a, 0xcf, 0x30, 0x1e, 0x0a, 0x88, 0x45, 0x86, 0x29, 0x30, 0xa3, 0x4d, 0x9f, 0x61, 0x65, + 0x73, 0xe0, 0xd6, 0x87, 0x8f, 0xb6, 0xf3, 0x06, 0xa3, 0x82, 0xdc, 0x7c, 0xac, 0xfe, 0x9b, 0x28, + 0x9a, 0xae, 0xfd, 0xfb, 0xfe, 0x2f, 0x0e, 0xd8, 0x97, 0x04, 0xe3, 0xbb, 0x1f, 0xd1, 0xec, 0x0d, + 0xba, 0xa3, 0x49, 0x7f, 0x47, 0xac, 0x8a, 0x44, 0x04, 0x7e, 0x86, 0xb7, 0x39, 0x42, 0x3f, 0xad, + 0x1e, 0xb7, 0x0e, 0xa5, 0x51, 0xf4, 0x40, 0x63, 0x1e, 0xfd, 0xbd, 0xea, 0x9f, 0x41, 0x9f, 0xa8, + 0x90, 0x1d, 0x6f, 0x0a, 0x5a, 0x95, 0x13, 0x11, 0x0d, 0x80, 0xaf, 0x5f, 0x64, 0x98, 0x8a, 0x2c, + 0x78, 0x68, 0x65, 0xb0, 0x2b, 0x8b, 0xa2, 0x53, 0x87, 0xca, 0xf1, 0x64, 0x04, 0xab, 0xf2, 0x7b, + 0xdb, 0x83, 0xc8, 0x81, 0x02, 0x41, 0x00, 0xf7, 0xbe, 0x5e, 0x23, 0xc3, 0x32, 0x3f, 0xbf, 0x8b, + 0x8e, 0x3a, 0xee, 0xfc, 0xfc, 0xcb, 0xe5, 0xf7, 0xf1, 0x0b, 0xbc, 0x42, 0x82, 0xae, 0xd5, 0x7a, + 0x3e, 0xca, 0xf7, 0xd5, 0x69, 0x3f, 0x64, 0x25, 0xa2, 0x1f, 0xb7, 0x75, 0x75, 0x05, 0x92, 0x42, + 0xeb, 0xb8, 0xf1, 0xf3, 0x0a, 0x05, 0xe3, 0x94, 0xd1, 0x55, 0x78, 0x35, 0xa0, 0x36, 0xa0, 0x9b, + 0x7c, 0x92, 0x84, 0x6c, 0xdd, 0xdc, 0x4d, 0x02, 0x41, 0x00, 0xd6, 0x86, 0x0e, 0x85, 0x42, 0x0b, + 0x04, 0x08, 0x84, 0x21, 0x60, 0xf0, 0x0e, 0x0d, 0x88, 0xfd, 0x1e, 0x36, 0x10, 0x65, 0x4f, 0x1e, + 0x53, 0xb4, 0x08, 0x72, 0x80, 0x5c, 0x3f, 0x59, 0x66, 0x17, 0xe6, 0x98, 0xf2, 0xe9, 0x6c, 0x7a, + 0x06, 0x4c, 0xac, 0x76, 0x3d, 0xed, 0x8c, 0xa1, 0xce, 0xad, 0x1b, 0xbd, 0xb4, 0x7d, 0x28, 0xbc, + 0xe3, 0x0e, 0x38, 0x8d, 0x99, 0xd8, 0x05, 0xb5, 0xa3, 0x71, 0x02, 0x40, 0x6d, 0xeb, 0xc3, 0x2d, + 0x2e, 0xf0, 0x5e, 0xa4, 0x88, 0x31, 0x05, 0x29, 0x00, 0x8a, 0xd1, 0x95, 0x29, 0x9b, 0x83, 0xcf, + 0x75, 0xdb, 0x31, 0xe3, 0x7a, 0x27, 0xde, 0x3a, 0x74, 0x30, 0x0c, 0x76, 0x4c, 0xd4, 0x50, 0x2a, + 0x40, 0x2d, 0x39, 0xd9, 0x99, 0x63, 0xa9, 0x5d, 0x80, 0xae, 0x53, 0xca, 0x94, 0x3f, 0x05, 0x23, + 0x1e, 0xf8, 0x05, 0x04, 0xe1, 0xb8, 0x35, 0xf2, 0x17, 0xb3, 0xa0, 0x89, 0x02, 0x41, 0x00, 0xab, + 0x90, 0x88, 0xfa, 0x60, 0x08, 0x29, 0x50, 0x9a, 0x43, 0x8b, 0xa0, 0x50, 0xcc, 0xd8, 0x5a, 0xfe, + 0x97, 0x64, 0x63, 0x71, 0x74, 0x22, 0xa3, 0x20, 0x02, 0x5a, 0xcf, 0xeb, 0xc6, 0x16, 0x95, 0x54, + 0xd1, 0xcb, 0xab, 0x8d, 0x1a, 0xc6, 0x00, 0xfa, 0x08, 0x92, 0x9c, 0x71, 0xd5, 0x52, 0x52, 0x35, + 0x96, 0x71, 0x4b, 0x8b, 0x92, 0x0c, 0xd0, 0xe9, 0xbf, 0xad, 0x63, 0x0b, 0xa5, 0xe9, 0xb1, 0x02, + 0x41, 0x00, 0xdc, 0xcc, 0x27, 0xc8, 0xe4, 0xdc, 0x62, 0x48, 0xd5, 0x9b, 0xaf, 0xf5, 0xab, 0x60, + 0xf6, 0x21, 0xfd, 0x53, 0xe2, 0xb7, 0x5d, 0x09, 0xc9, 0x1a, 0xa1, 0x04, 0xa9, 0xfc, 0x61, 0x2c, + 0x5d, 0x04, 0x58, 0x3a, 0x5a, 0x39, 0xf1, 0x4a, 0x21, 0x56, 0x67, 0xfd, 0xcc, 0x20, 0xa3, 0x8f, + 0x78, 0x18, 0x5a, 0x79, 0x3d, 0x2e, 0x8e, 0x7e, 0x86, 0x0a, 0xe6, 0xa8, 0x33, 0xc1, 0x04, 0x17, + 0x4a, 0x9f, }; + + +/*** NOTE: OpenSSL seems to have more to their public key format. I've stripped the extra headers... */ +static const unsigned char openssl_public_rsa[] = { + 0x30, 0x81, 0x89, 0x02, 0x81, 0x81, 0x00, 0xcf, 0x9a, 0xde, + 0x64, 0x8a, 0xda, 0xc8, 0x33, 0x20, 0xa9, 0xd7, 0x83, 0x31, 0x19, 0x54, 0xb2, 0x9a, 0x85, 0xa7, + 0xa1, 0xb7, 0x75, 0x33, 0xb6, 0xa9, 0xac, 0x84, 0x24, 0xb3, 0xde, 0xdb, 0x7d, 0x85, 0x2d, 0x96, + 0x65, 0xe5, 0x3f, 0x72, 0x95, 0x24, 0x9f, 0x28, 0x68, 0xca, 0x4f, 0xdb, 0x44, 0x1c, 0x3e, 0x60, + 0x12, 0x8a, 0xdd, 0x26, 0xa5, 0xeb, 0xff, 0x0b, 0x5e, 0xd4, 0x88, 0x38, 0x49, 0x2a, 0x6e, 0x5b, + 0xbf, 0x12, 0x37, 0x47, 0xbd, 0x05, 0x6b, 0xbc, 0xdb, 0xf3, 0xee, 0xe4, 0x11, 0x8e, 0x41, 0x68, + 0x7c, 0x61, 0x13, 0xd7, 0x42, 0xc8, 0x80, 0xbe, 0x36, 0x8f, 0xdc, 0x08, 0x8b, 0x4f, 0xac, 0xa4, + 0xe2, 0x76, 0x0c, 0xc9, 0x63, 0x6c, 0x49, 0x58, 0x93, 0xed, 0xcc, 0xaa, 0xdc, 0x25, 0x3b, 0x0a, + 0x60, 0x3f, 0x8b, 0x54, 0x3a, 0xc3, 0x4d, 0x31, 0xe7, 0x94, 0xa4, 0x44, 0xfd, 0x02, 0x03, 0x01, + 0x00, 0x01, }; + +static int rsa_compat_test(void) +{ + rsa_key key; + unsigned char buf[1024]; + unsigned long len; + + /* try reading the key */ + DO(rsa_import(openssl_private_rsa, sizeof(openssl_private_rsa), &key)); + + /* now try to export private/public and compare */ + len = sizeof(buf); + DO(rsa_export(buf, &len, PK_PRIVATE, &key)); + if (len != sizeof(openssl_private_rsa) || memcmp(buf, openssl_private_rsa, len)) { + fprintf(stderr, "RSA private export failed to match OpenSSL output, %lu, %lu\n", len, sizeof(openssl_private_rsa)); + + +{ +int x; +printf("\n\n"); +for (x = 0; x < len; ) { if (buf[x] == openssl_private_rsa[x]) printf("-- "); else printf("%02x ", buf[x]^openssl_private_rsa[x]); if (!(++x & 15)) printf("\n"); } +} +printf("\n\n"); + + return 1; + } + + len = sizeof(buf); + DO(rsa_export(buf, &len, PK_PUBLIC, &key)); + if (len != sizeof(openssl_public_rsa) || memcmp(buf, openssl_public_rsa, len)) { + fprintf(stderr, "RSA(private) public export failed to match OpenSSL output\n"); + return 1; + } + rsa_free(&key); + + /* try reading the public key */ + DO(rsa_import(openssl_public_rsa, sizeof(openssl_public_rsa), &key)); + len = sizeof(buf); + DO(rsa_export(buf, &len, PK_PUBLIC, &key)); + if (len != sizeof(openssl_public_rsa) || memcmp(buf, openssl_public_rsa, len)) { + fprintf(stderr, "RSA(public) public export failed to match OpenSSL output\n"); + return 1; + } + rsa_free(&key); + + return 0; +} + int rsa_test(void) { unsigned char in[1024], out[1024], tmp[1024]; rsa_key key, privKey, pubKey; - int hash_idx, prng_idx, stat, stat2, cnt; - unsigned long rsa_msgsize, len, len2; + int hash_idx, prng_idx, stat, stat2; + unsigned long rsa_msgsize, len, len2, cnt; static unsigned char lparam[] = { 0x01, 0x02, 0x03, 0x04 }; + + if (rsa_compat_test() != 0) { + return 1; + } hash_idx = find_hash("sha1"); prng_idx = find_prng("yarrow"); if (hash_idx == -1 || prng_idx == -1) { - printf("rsa_test requires SHA1 and yarrow"); + fprintf(stderr, "rsa_test requires SHA1 and yarrow"); return 1; } @@ -23,32 +130,32 @@ int rsa_test(void) for (cnt = 0; cnt < 10; cnt++) { DO(rsa_make_key(&yarrow_prng, prng_idx, 1024/8, 65537, &key)); if (mp_count_bits(&key.N) != 1024) { - printf("rsa_1024 key modulus has %d bits\n", mp_count_bits(&key.N)); + fprintf(stderr, "rsa_1024 key modulus has %d bits\n", mp_count_bits(&key.N)); len = mp_unsigned_bin_size(&key.N); mp_to_unsigned_bin(&key.N, tmp); -printf("N == \n"); + fprintf(stderr, "N == \n"); for (cnt = 0; cnt < len; ) { - printf("%02x ", tmp[cnt]); - if (!(++cnt & 15)) printf("\n"); + fprintf(stderr, "%02x ", tmp[cnt]); + if (!(++cnt & 15)) fprintf(stderr, "\n"); } len = mp_unsigned_bin_size(&key.p); mp_to_unsigned_bin(&key.p, tmp); -printf("p == \n"); + fprintf(stderr, "p == \n"); for (cnt = 0; cnt < len; ) { - printf("%02x ", tmp[cnt]); - if (!(++cnt & 15)) printf("\n"); + fprintf(stderr, "%02x ", tmp[cnt]); + if (!(++cnt & 15)) fprintf(stderr, "\n"); } len = mp_unsigned_bin_size(&key.q); mp_to_unsigned_bin(&key.q, tmp); -printf("\nq == \n"); + fprintf(stderr, "\nq == \n"); for (cnt = 0; cnt < len; ) { - printf("%02x ", tmp[cnt]); - if (!(++cnt & 15)) printf("\n"); + fprintf(stderr, "%02x ", tmp[cnt]); + if (!(++cnt & 15)) fprintf(stderr, "\n"); } -printf("\n"); + fprintf(stderr, "\n"); return 1; @@ -57,38 +164,7 @@ printf("\n"); rsa_free(&key); } } - - /* test PKCS #1 v1.5 */ - for (cnt = 0; cnt < 4; cnt++) { - for (rsa_msgsize = 1; rsa_msgsize <= 117; rsa_msgsize++) { - /* make a random key/msg */ - yarrow_read(in, rsa_msgsize, &yarrow_prng); - - len = sizeof(out); - len2 = rsa_msgsize; - - /* encrypt */ - DO(rsa_v15_encrypt_key(in, rsa_msgsize, out, &len, &yarrow_prng, prng_idx, &key)); - DO(rsa_v15_decrypt_key(out, len, tmp, rsa_msgsize, &stat, &key)); - if (stat != 1 || memcmp(tmp, in, rsa_msgsize)) { - printf("PKCS #1 v1.5 encrypt/decrypt failure (rsa_msgsize: %lu, stat: %d)\n", rsa_msgsize, stat); - return 1; - } - } - } - - /* signature */ - len = sizeof(out); - DO(rsa_v15_sign_hash(in, 20, out, &len, hash_idx, &key)); - in[1] ^= 1; - DO(rsa_v15_verify_hash(out, len, in, 20, hash_idx, &stat, &key)); - in[1] ^= 1; - DO(rsa_v15_verify_hash(out, len, in, 20, hash_idx, &stat2, &key)); - if (!(stat == 0 && stat2 == 1)) { - printf("PKCS #1 v1.5 sign/verify failure (stat %d, stat2 %d)\n", stat, stat2); - return 1; - } - + /* encrypt the key (without lparam) */ for (cnt = 0; cnt < 4; cnt++) { for (rsa_msgsize = 1; rsa_msgsize <= 86; rsa_msgsize++) { @@ -105,35 +181,35 @@ printf("\n"); /* change a byte back */ out[8] ^= 1; if (len2 != rsa_msgsize) { - printf("\nrsa_decrypt_key mismatch len %lu (first decrypt)", len2); + fprintf(stderr, "\nrsa_decrypt_key mismatch len %lu (first decrypt)", len2); return 1; } len2 = rsa_msgsize; DO(rsa_decrypt_key(out, len, tmp, &len2, NULL, 0, hash_idx, &stat, &key)); if (!(stat == 1 && stat2 == 0)) { - printf("rsa_decrypt_key failed"); + fprintf(stderr, "rsa_decrypt_key failed"); return 1; } if (len2 != rsa_msgsize || memcmp(tmp, in, rsa_msgsize)) { unsigned long x; - printf("\nrsa_decrypt_key mismatch, len %lu (second decrypt)\n", len2); - printf("Original contents: \n"); + fprintf(stderr, "\nrsa_decrypt_key mismatch, len %lu (second decrypt)\n", len2); + fprintf(stderr, "Original contents: \n"); for (x = 0; x < rsa_msgsize; ) { - printf("%02x ", in[x]); + fprintf(stderr, "%02x ", in[x]); if (!(++x % 16)) { - printf("\n"); + fprintf(stderr, "\n"); } } - printf("\n"); - printf("Output contents: \n"); + fprintf(stderr, "\n"); + fprintf(stderr, "Output contents: \n"); for (x = 0; x < rsa_msgsize; ) { - printf("%02x ", out[x]); + fprintf(stderr, "%02x ", out[x]); if (!(++x % 16)) { - printf("\n"); + fprintf(stderr, "\n"); } } - printf("\n"); + fprintf(stderr, "\n"); return 1; } } @@ -148,7 +224,7 @@ printf("\n"); out[8] ^= 1; DO(rsa_decrypt_key(out, len, tmp, &len2, lparam, sizeof(lparam), hash_idx, &stat2, &key)); if (len2 != rsa_msgsize) { - printf("\nrsa_decrypt_key mismatch len %lu (first decrypt)", len2); + fprintf(stderr, "\nrsa_decrypt_key mismatch len %lu (first decrypt)", len2); return 1; } /* change a byte back */ @@ -157,11 +233,11 @@ printf("\n"); len2 = rsa_msgsize; DO(rsa_decrypt_key(out, len, tmp, &len2, lparam, sizeof(lparam), hash_idx, &stat, &key)); if (!(stat == 1 && stat2 == 0)) { - printf("rsa_decrypt_key failed"); + fprintf(stderr, "rsa_decrypt_key failed"); return 1; } if (len2 != rsa_msgsize || memcmp(tmp, in, rsa_msgsize)) { - printf("rsa_decrypt_key mismatch len %lu", len2); + fprintf(stderr, "rsa_decrypt_key mismatch len %lu", len2); return 1; } } @@ -185,7 +261,7 @@ printf("\n"); DO(rsa_verify_hash(out, len, in, 20, hash_idx, 0, &stat2, &key)); if (!(stat == 1 && stat2 == 0)) { - printf("rsa_verify_hash (unsalted, origKey) failed, %d, %d", stat, stat2); + fprintf(stderr, "rsa_verify_hash (unsalted, origKey) failed, %d, %d", stat, stat2); rsa_free(&key); rsa_free(&pubKey); rsa_free(&privKey); @@ -201,7 +277,7 @@ printf("\n"); DO(rsa_verify_hash(out, len, in, 20, hash_idx, 0, &stat2, &privKey)); if (!(stat == 1 && stat2 == 0)) { - printf("rsa_verify_hash (unsalted, privKey) failed, %d, %d", stat, stat2); + fprintf(stderr, "rsa_verify_hash (unsalted, privKey) failed, %d, %d", stat, stat2); rsa_free(&key); rsa_free(&pubKey); rsa_free(&privKey); @@ -217,7 +293,7 @@ printf("\n"); DO(rsa_verify_hash(out, len, in, 20, hash_idx, 0, &stat2, &pubKey)); if (!(stat == 1 && stat2 == 0)) { - printf("rsa_verify_hash (unsalted, pubkey) failed, %d, %d", stat, stat2); + fprintf(stderr, "rsa_verify_hash (unsalted, pubkey) failed, %d, %d", stat, stat2); rsa_free(&key); rsa_free(&pubKey); rsa_free(&privKey); @@ -233,7 +309,7 @@ printf("\n"); DO(rsa_verify_hash(out, len, in, 20, hash_idx, 8, &stat2, &pubKey)); if (!(stat == 1 && stat2 == 0)) { - printf("rsa_verify_hash (salted) failed, %d, %d", stat, stat2); + fprintf(stderr, "rsa_verify_hash (salted) failed, %d, %d", stat, stat2); rsa_free(&key); rsa_free(&pubKey); rsa_free(&privKey); @@ -251,8 +327,12 @@ printf("\n"); int rsa_test(void) { - printf("NOP"); + fprintf(stderr, "NOP"); return 0; } #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/testprof/store_test.c b/testprof/store_test.c index 41b2f92..71666ba 100644 --- a/testprof/store_test.c +++ b/testprof/store_test.c @@ -3,13 +3,17 @@ /* Test store/load macros with offsets */ int store_test(void) { - unsigned char buf[24]; + unsigned char buf[256]; int y; ulong32 L, L1; ulong64 LL, LL1; +#ifdef LTC_FAST + int x, z; +#endif - L = 0x12345678UL; for (y = 0; y < 4; y++) { + L = 0x12345678UL; + L1 = 0; STORE32L(L, buf + y); LOAD32L(L1, buf + y); if (L1 != L) { @@ -24,8 +28,9 @@ int store_test(void) } } - LL = CONST64 (0x01020304050607); for (y = 0; y < 8; y++) { + LL = CONST64 (0x01020304050607); + LL1 = 0; STORE64L(LL, buf + y); LOAD64L(LL1, buf + y); if (LL1 != LL) { @@ -40,5 +45,34 @@ int store_test(void) } } +/* test LTC_FAST */ +#ifdef LTC_FAST + y = 16; + + for (z = 0; z < y; z++) { + /* fill y bytes with random */ + yarrow_read(buf+z, y, &yarrow_prng); + yarrow_read(buf+z+y, y, &yarrow_prng); + + /* now XOR it byte for byte */ + for (x = 0; x < y; x++) { + buf[2*y+z+x] = buf[z+x] ^ buf[z+y+x]; + } + + /* now XOR it word for word */ + for (x = 0; x < y; x += sizeof(LTC_FAST_TYPE)) { + *((LTC_FAST_TYPE*)(&buf[3*y+z+x])) = *((LTC_FAST_TYPE*)(&buf[z+x])) ^ *((LTC_FAST_TYPE*)(&buf[z+y+x])); + } + + if (memcmp(&buf[2*y+z], &buf[3*y+z], y)) { + fprintf(stderr, "\nLTC_FAST failed at offset %d\n", z); + return 1; + } + } +#endif return 0; } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/testprof/test.c b/testprof/test.c index 9f6df71..721a992 100644 --- a/testprof/test.c +++ b/testprof/test.c @@ -7,3 +7,7 @@ void run_cmd(int res, int line, char *file, char *cmd) exit(EXIT_FAILURE); } } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/testprof/test.key b/testprof/test.key new file mode 100644 index 0000000..e4996c3 --- /dev/null +++ b/testprof/test.key @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICXgIBAAKBgQDPmt5kitrIMyCp14MxGVSymoWnobd1M7aprIQks97bfYUtlmXl +P3KVJJ8oaMpP20QcPmASit0mpev/C17UiDhJKm5bvxI3R70Fa7zb8+7kEY5BaHxh +E9dCyIC+No/cCItPrKTidgzJY2xJWJPtzKrcJTsKYD+LVDrDTTHnlKRE/QIDAQAB +AoGBAMhiuereRFMdVpfZl54azzAeCohFhikwo02fYWVz4NaHj7bzBqOC3Hys/pso +mq79+/4vDtiXBOO7H9HsDbqjSX9HrIpEBH6GtzlCP60etw6lUfRAYx79veqfQZ+o +kB1vClqVExENgK9fZJiKLHhoZbAri6JTh8rxZASr8nvbg8iBAkEA975eI8MyP7+L +jjru/PzL5ffxC7xCgq7Vej7K99VpP2Qloh+3dXUFkkLruPHzCgXjlNFVeDWgNqCb +fJKEbN3cTQJBANaGDoVCCwQIhCFg8A4NiP0eNhBlTx5TtAhygFw/WWYX5pjy6Wx6 +Bkysdj3tjKHOrRu9tH0ovOMOOI2Z2AW1o3ECQG3rwy0u8F6kiDEFKQCK0ZUpm4PP +ddsx43on3jp0MAx2TNRQKkAtOdmZY6ldgK5TypQ/BSMe+AUE4bg18hezoIkCQQCr +kIj6YAgpUJpDi6BQzNha/pdkY3F0IqMgAlrP68YWlVTRy6uNGsYA+giSnHHVUlI1 +lnFLi5IM0Om/rWMLpemxAkEA3MwnyOTcYkjVm6/1q2D2If1T4rddCckaoQSp/GEs +XQRYOlo58UohVmf9zCCjj3gYWnk9Lo5+hgrmqDPBBBdKnw== +-----END RSA PRIVATE KEY----- diff --git a/testprof/tomcrypt_test.h b/testprof/tomcrypt_test.h index fc28430..6503b7c 100644 --- a/testprof/tomcrypt_test.h +++ b/testprof/tomcrypt_test.h @@ -71,3 +71,7 @@ void time_encmacs(void); #endif + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */ diff --git a/testprof/x86_prof.c b/testprof/x86_prof.c index bcc25f4..7fbe8e1 100644 --- a/testprof/x86_prof.c +++ b/testprof/x86_prof.c @@ -21,10 +21,10 @@ void tally_results(int type) // qsort the results qsort(results, no_results, sizeof(struct list), &sorter); - printf("\n"); + fprintf(stderr, "\n"); if (type == 0) { for (x = 0; x < no_results; x++) { - printf("%-20s: Schedule at %6lu\n", cipher_descriptor[results[x].id].name, (unsigned long)results[x].spd1); + fprintf(stderr, "%-20s: Schedule at %6lu\n", cipher_descriptor[results[x].id].name, (unsigned long)results[x].spd1); } } else if (type == 1) { for (x = 0; x < no_results; x++) { @@ -42,7 +42,7 @@ void tally_results(int type) /* RDTSC from Scott Duplichan */ ulong64 rdtsc (void) { - #if defined __GNUC__ + #if defined __GNUC__ && !defined(LTC_NO_ASM) #ifdef INTEL_CC ulong64 a; asm ( " rdtsc ":"=A"(a)); @@ -62,11 +62,11 @@ ulong64 rdtsc (void) #endif // Microsoft and Intel Windows compilers - #elif defined _M_IX86 + #elif defined _M_IX86 && !defined(LTC_NO_ASM) __asm rdtsc - #elif defined _M_AMD64 + #elif defined _M_AMD64 && !defined(LTC_NO_ASM) return __rdtsc (); - #elif defined _M_IA64 + #elif defined _M_IA64 && !defined(LTC_NO_ASM) #if defined __INTEL_COMPILER #include <ia64intrin.h> #endif @@ -104,7 +104,7 @@ void init_timer(void) c2 = (t2 > c2) ? t2 : c2; } skew = c2 - c1; - printf("Clock Skew: %lu\n", (unsigned long)skew); + fprintf(stderr, "Clock Skew: %lu\n", (unsigned long)skew); } void reg_algs(void) @@ -199,7 +199,7 @@ void reg_algs(void) #ifdef 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)); + fprintf(stderr, "chc_register error: %s\n", error_to_string(err)); exit(EXIT_FAILURE); } #endif @@ -231,7 +231,7 @@ int time_keysched(void) int (*func) (const unsigned char *, int , int , symmetric_key *); unsigned char key[MAXBLOCKSIZE]; - printf ("\n\nKey Schedule Time Trials for the Symmetric Ciphers:\n(Times are cycles per key)\n"); + fprintf(stderr, "\n\nKey Schedule Time Trials for the Symmetric Ciphers:\n(Times are cycles per key)\n"); no_results = 0; for (x = 0; cipher_descriptor[x].name != NULL; x++) { #define DO1(k) func(k, kl, 0, &skey); @@ -249,7 +249,7 @@ int time_keysched(void) t1 = c1 - skew; results[no_results].spd1 = results[no_results].avg = t1; results[no_results++].id = x; - printf("."); fflush(stdout); + fprintf(stderr, "."); fflush(stdout); #undef DO1 } @@ -266,7 +266,7 @@ int time_cipher(void) unsigned char key[MAXBLOCKSIZE], pt[4096]; int err; - printf ("\n\nECB Time Trials for the Symmetric Ciphers:\n"); + fprintf(stderr, "\n\nECB Time Trials for the Symmetric Ciphers:\n"); no_results = 0; for (x = 0; cipher_descriptor[x].name != NULL; x++) { ecb_start(x, key, cipher_descriptor[x].min_key_length, 0, &ecb); @@ -318,7 +318,7 @@ int time_cipher(void) results[no_results].spd2 = a2/(sizeof(pt)/cipher_descriptor[x].block_length); results[no_results].avg = (results[no_results].spd1 + results[no_results].spd2+1)/2; ++no_results; - printf("."); fflush(stdout); + fprintf(stderr, "."); fflush(stdout); #undef DO2 #undef DO1 @@ -337,7 +337,7 @@ int time_cipher2(void) unsigned char key[MAXBLOCKSIZE], pt[4096]; int err; - printf ("\n\nCBC Time Trials for the Symmetric Ciphers:\n"); + fprintf(stderr, "\n\nCBC Time Trials for the Symmetric Ciphers:\n"); no_results = 0; for (x = 0; cipher_descriptor[x].name != NULL; x++) { cbc_start(x, pt, key, cipher_descriptor[x].min_key_length, 0, &cbc); @@ -389,7 +389,7 @@ int time_cipher2(void) results[no_results].spd2 = a2/(sizeof(pt)/cipher_descriptor[x].block_length); results[no_results].avg = (results[no_results].spd1 + results[no_results].spd2+1)/2; ++no_results; - printf("."); fflush(stdout); + fprintf(stderr, "."); fflush(stdout); #undef DO2 #undef DO1 @@ -399,7 +399,7 @@ int time_cipher2(void) return 0; } #else -int time_cipher2(void) { printf("NO CBC\n"); return 0; } +int time_cipher2(void) { fprintf(stderr, "NO CBC\n"); return 0; } #endif #ifdef CTR @@ -411,10 +411,10 @@ int time_cipher3(void) unsigned char key[MAXBLOCKSIZE], pt[4096]; int err; - printf ("\n\nCTR Time Trials for the Symmetric Ciphers:\n"); + fprintf(stderr, "\n\nCTR Time Trials for the Symmetric Ciphers:\n"); no_results = 0; for (x = 0; cipher_descriptor[x].name != NULL; x++) { - ctr_start(x, pt, key, cipher_descriptor[x].min_key_length, 0, &ctr); + ctr_start(x, pt, key, cipher_descriptor[x].min_key_length, 0, CTR_COUNTER_LITTLE_ENDIAN, &ctr); /* sanity check on cipher */ if ((err = cipher_descriptor[x].test()) != CRYPT_OK) { @@ -463,7 +463,7 @@ int time_cipher3(void) results[no_results].spd2 = a2/(sizeof(pt)/cipher_descriptor[x].block_length); results[no_results].avg = (results[no_results].spd1 + results[no_results].spd2+1)/2; ++no_results; - printf("."); fflush(stdout); + fprintf(stderr, "."); fflush(stdout); #undef DO2 #undef DO1 @@ -473,7 +473,7 @@ int time_cipher3(void) return 0; } #else -int time_cipher3(void) { printf("NO CTR\n"); return 0; } +int time_cipher3(void) { fprintf(stderr, "NO CTR\n"); return 0; } #endif int time_hash(void) @@ -485,7 +485,7 @@ int time_hash(void) unsigned char pt[MAXBLOCKSIZE]; - printf ("\n\nHASH Time Trials for:\n"); + fprintf(stderr, "\n\nHASH Time Trials for:\n"); no_results = 0; for (x = 0; hash_descriptor[x].name != NULL; x++) { @@ -518,7 +518,7 @@ int time_hash(void) results[no_results].id = x; results[no_results].spd1 = results[no_results].avg = t1; ++no_results; - printf("."); fflush(stdout); + fprintf(stderr, "."); fflush(stdout); #undef DO2 #undef DO1 } @@ -534,7 +534,7 @@ void time_mult(void) unsigned long x, y; mp_int a, b, c; - printf("Timing Multiplying:\n"); + fprintf(stderr, "Timing Multiplying:\n"); mp_init_multi(&a,&b,&c,NULL); for (x = 128/DIGIT_BIT; x <= 1536/DIGIT_BIT; x += 128/DIGIT_BIT) { mp_rand(&a, x); @@ -551,7 +551,7 @@ void time_mult(void) t1 = (t_read() - t1)>>1; if (t1 < t2) t2 = t1; } - printf("%4lu bits: %9llu cycles\n", x*DIGIT_BIT, t2); + fprintf(stderr, "%4lu bits: %9llu cycles\n", x*DIGIT_BIT, t2); } mp_clear_multi(&a,&b,&c,NULL); @@ -565,7 +565,7 @@ void time_sqr(void) unsigned long x, y; mp_int a, b; - printf("Timing Squaring:\n"); + fprintf(stderr, "Timing Squaring:\n"); mp_init_multi(&a,&b,NULL); for (x = 128/DIGIT_BIT; x <= 1536/DIGIT_BIT; x += 128/DIGIT_BIT) { mp_rand(&a, x); @@ -581,7 +581,7 @@ void time_sqr(void) t1 = (t_read() - t1)>>1; if (t1 < t2) t2 = t1; } - printf("%4lu bits: %9llu cycles\n", x*DIGIT_BIT, t2); + fprintf(stderr, "%4lu bits: %9llu cycles\n", x*DIGIT_BIT, t2); } mp_clear_multi(&a,&b,NULL); @@ -589,8 +589,8 @@ void time_sqr(void) #undef DO2 } #else -void time_mult(void) { printf("NO MULT\n"); } -void time_sqr(void) { printf("NO SQR\n"); } +void time_mult(void) { fprintf(stderr, "NO MULT\n"); } +void time_sqr(void) { fprintf(stderr, "NO SQR\n"); } #endif void time_prng(void) @@ -601,7 +601,7 @@ void time_prng(void) unsigned long x, y; int err; - printf("Timing PRNGs (cycles/byte output, cycles add_entropy (32 bytes) :\n"); + fprintf(stderr, "Timing PRNGs (cycles/byte output, cycles add_entropy (32 bytes) :\n"); for (x = 0; prng_descriptor[x].name != NULL; x++) { /* sanity check on prng */ @@ -616,7 +616,7 @@ void time_prng(void) prng_descriptor[x].ready(&tprng); t2 = -1; -#define DO1 if (prng_descriptor[x].read(buf, 4096, &tprng) != 4096) { printf("\n\nERROR READ != 4096\n\n"); exit(EXIT_FAILURE); } +#define DO1 if (prng_descriptor[x].read(buf, 4096, &tprng) != 4096) { fprintf(stderr, "\n\nERROR READ != 4096\n\n"); exit(EXIT_FAILURE); } #define DO2 DO1 DO1 for (y = 0; y < 10000; y++) { t_start(); @@ -625,7 +625,7 @@ void time_prng(void) t1 = (t_read() - t1)>>1; if (t1 < t2) t2 = t1; } - printf("%20s: %5llu ", prng_descriptor[x].name, t2>>12); + fprintf(stderr, "%20s: %5llu ", prng_descriptor[x].name, t2>>12); #undef DO2 #undef DO1 @@ -638,7 +638,7 @@ void time_prng(void) t1 = (t_read() - t1)>>1; if (t1 < t2) t2 = t1; } - printf("%5llu\n", t2); + fprintf(stderr, "%5llu\n", t2); #undef DO2 #undef DO1 @@ -672,7 +672,7 @@ void time_rsa(void) } } t2 >>= 4; - printf("RSA-%lu make_key took %15llu cycles\n", x, t2); + fprintf(stderr, "RSA-%lu make_key took %15llu cycles\n", x, t2); t2 = 0; for (y = 0; y < 16; y++) { @@ -689,7 +689,7 @@ void time_rsa(void) t2 += t1; } t2 >>= 4; - printf("RSA-%lu encrypt_key took %15llu cycles\n", x, t2); + fprintf(stderr, "RSA-%lu encrypt_key took %15llu cycles\n", x, t2); t2 = 0; for (y = 0; y < 16; y++) { @@ -705,14 +705,14 @@ void time_rsa(void) t2 += t1; } t2 >>= 4; - printf("RSA-%lu decrypt_key took %15llu cycles\n", x, t2); + fprintf(stderr, "RSA-%lu decrypt_key took %15llu cycles\n", x, t2); rsa_free(&key); } } #else -void time_rsa(void) { printf("NO RSA\n"); } +void time_rsa(void) { fprintf(stderr, "NO RSA\n"); } #endif #ifdef MECC @@ -743,7 +743,7 @@ void time_ecc(void) } } t2 >>= 4; - printf("ECC-%lu make_key took %15llu cycles\n", x*8, t2); + fprintf(stderr, "ECC-%lu make_key took %15llu cycles\n", x*8, t2); t2 = 0; for (y = 0; y < 16; y++) { @@ -759,12 +759,12 @@ void time_ecc(void) t2 += t1; } t2 >>= 4; - printf("ECC-%lu encrypt_key took %15llu cycles\n", x*8, t2); + fprintf(stderr, "ECC-%lu encrypt_key took %15llu cycles\n", x*8, t2); ecc_free(&key); } } #else -void time_ecc(void) { printf("NO ECC\n"); } +void time_ecc(void) { fprintf(stderr, "NO ECC\n"); } #endif #ifdef MDH @@ -795,7 +795,7 @@ void time_dh(void) } } t2 >>= 4; - printf("DH-%4lu make_key took %15llu cycles\n", x*8, t2); + fprintf(stderr, "DH-%4lu make_key took %15llu cycles\n", x*8, t2); t2 = 0; for (y = 0; y < 16; y++) { @@ -811,12 +811,12 @@ void time_dh(void) t2 += t1; } t2 >>= 4; - printf("DH-%4lu encrypt_key took %15llu cycles\n", x*8, t2); + fprintf(stderr, "DH-%4lu encrypt_key took %15llu cycles\n", x*8, t2); dh_free(&key); } } #else -void time_dh(void) { printf("NO DH\n"); } +void time_dh(void) { fprintf(stderr, "NO DH\n"); } #endif void time_macs_(unsigned long MAC_SIZE) @@ -826,7 +826,7 @@ void time_macs_(unsigned long MAC_SIZE) unsigned long x, z; int err, cipher_idx, hash_idx; - printf("\nMAC Timings (cycles/byte on %dKB blocks):\n", MAC_SIZE); + fprintf(stderr, "\nMAC Timings (cycles/byte on %luKB blocks):\n", MAC_SIZE); buf = XMALLOC(MAC_SIZE*1024); if (buf == NULL) { @@ -853,7 +853,7 @@ void time_macs_(unsigned long MAC_SIZE) t1 = t_read() - t1; if (t1 < t2) t2 = t1; } - printf("OMAC-AES\t\t%9llu\n", t2/(MAC_SIZE*1024)); + fprintf(stderr, "OMAC-AES\t\t%9llu\n", t2/(ulong64)(MAC_SIZE*1024)); #endif #ifdef PMAC @@ -869,7 +869,7 @@ void time_macs_(unsigned long MAC_SIZE) t1 = t_read() - t1; if (t1 < t2) t2 = t1; } - printf("PMAC-AES\t\t%9llu\n", t2/(MAC_SIZE*1024)); + fprintf(stderr, "PMAC-AES\t\t%9llu\n", t2/(ulong64)(MAC_SIZE*1024)); #endif #ifdef PELICAN @@ -885,7 +885,7 @@ void time_macs_(unsigned long MAC_SIZE) t1 = t_read() - t1; if (t1 < t2) t2 = t1; } - printf("PELICAN \t\t%9llu\n", t2/(MAC_SIZE*1024)); + fprintf(stderr, "PELICAN \t\t%9llu\n", t2/(ulong64)(MAC_SIZE*1024)); #endif #ifdef HMAC @@ -901,7 +901,7 @@ void time_macs_(unsigned long MAC_SIZE) t1 = t_read() - t1; if (t1 < t2) t2 = t1; } - printf("HMAC-MD5\t\t%9llu\n", t2/(MAC_SIZE*1024)); + fprintf(stderr, "HMAC-MD5\t\t%9llu\n", t2/(ulong64)(MAC_SIZE*1024)); #endif XFREE(buf); @@ -921,7 +921,7 @@ void time_encmacs_(unsigned long MAC_SIZE) unsigned long x, z; int err, cipher_idx; - printf("\nENC+MAC Timings (zero byte AAD, 16 byte IV, cycles/byte on %dKB blocks):\n", MAC_SIZE); + fprintf(stderr, "\nENC+MAC Timings (zero byte AAD, 16 byte IV, cycles/byte on %luKB blocks):\n", MAC_SIZE); buf = XMALLOC(MAC_SIZE*1024); if (buf == NULL) { @@ -948,7 +948,7 @@ void time_encmacs_(unsigned long MAC_SIZE) t1 = t_read() - t1; if (t1 < t2) t2 = t1; } - printf("EAX \t\t%9llu\n", t2/(MAC_SIZE*1024)); + fprintf(stderr, "EAX \t\t%9llu\n", t2/(ulong64)(MAC_SIZE*1024)); #endif #ifdef OCB_MODE @@ -964,7 +964,7 @@ void time_encmacs_(unsigned long MAC_SIZE) t1 = t_read() - t1; if (t1 < t2) t2 = t1; } - printf("OCB \t\t%9llu\n", t2/(MAC_SIZE*1024)); + fprintf(stderr, "OCB \t\t%9llu\n", t2/(ulong64)(MAC_SIZE*1024)); #endif #ifdef CCM_MODE @@ -980,7 +980,7 @@ void time_encmacs_(unsigned long MAC_SIZE) t1 = t_read() - t1; if (t1 < t2) t2 = t1; } - printf("CCM \t\t%9llu\n", t2/(MAC_SIZE*1024)); + fprintf(stderr, "CCM \t\t%9llu\n", t2/(ulong64)(MAC_SIZE*1024)); #endif #ifdef GCM_MODE @@ -996,12 +996,12 @@ void time_encmacs_(unsigned long MAC_SIZE) t1 = t_read() - t1; if (t1 < t2) t2 = t1; } - printf("GCM (no-precomp)\t%9llu\n", t2/(MAC_SIZE*1024)); + fprintf(stderr, "GCM (no-precomp)\t%9llu\n", t2/(ulong64)(MAC_SIZE*1024)); { gcm_state gcm; - if ((err = gcm_init(&gcm, cipher_idx, key, 16)) != CRYPT_OK) { printf("gcm_init: %s\n", error_to_string(err)); exit(EXIT_FAILURE); } + if ((err = gcm_init(&gcm, cipher_idx, key, 16)) != CRYPT_OK) { fprintf(stderr, "gcm_init: %s\n", error_to_string(err)); exit(EXIT_FAILURE); } t2 = -1; for (x = 0; x < 10000; x++) { t_start(); @@ -1031,7 +1031,7 @@ void time_encmacs_(unsigned long MAC_SIZE) t1 = t_read() - t1; if (t1 < t2) t2 = t1; } - printf("GCM (precomp)\t%9llu\n", t2/(MAC_SIZE*1024)); + fprintf(stderr, "GCM (precomp)\t%9llu\n", t2/(ulong64)(MAC_SIZE*1024)); } #endif @@ -1044,3 +1044,7 @@ void time_encmacs(void) time_encmacs_(4); time_encmacs_(32); } + +/* $Source$ */ +/* $Revision$ */ +/* $Date$ */