diff --git a/CMakeLists.txt b/CMakeLists.txt index ddec7ae..906c715 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -199,6 +199,8 @@ target_link_libraries(n2n-benchmark n2n) add_executable(n2n-keygen tools/n2n-keygen.c) target_link_libraries(n2n-keygen n2n) +add_executable(tests-auth tools/tests-auth.c) +target_link_libraries(tests-auth n2n) add_executable(tests-compress tools/tests-compress.c) target_link_libraries(tests-compress n2n) add_executable(tests-elliptic tools/tests-elliptic.c) diff --git a/Makefile.in b/Makefile.in index ae6e68b..5f4bd95 100644 --- a/Makefile.in +++ b/Makefile.in @@ -95,6 +95,7 @@ LINT_CCODE=\ src/transform_cc20.c \ src/tuntap_linux.c \ src/wire.c \ + tools/tests-auth.c \ tools/tests-compress.c \ tools/tests-elliptic.c \ tools/tests-hashing.c \ diff --git a/scripts/test_harness.sh b/scripts/test_harness.sh index 5f52075..5193297 100755 --- a/scripts/test_harness.sh +++ b/scripts/test_harness.sh @@ -4,6 +4,7 @@ # in the tests dir. TESTS=" + tests-auth tests-compress tests-elliptic tests-hashing diff --git a/tests/tests-auth.expected b/tests/tests-auth.expected new file mode 100644 index 0000000..51f6637 --- /dev/null +++ b/tests/tests-auth.expected @@ -0,0 +1,31 @@ +bin_to_ascii: input size = 0x10 +000: 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f | | +bin_to_ascii: output: 00420mG51WS82GeB30qE3m + +ascii_to_bin: input = 00420mG51WS82GeB30qE3m +ascii_to_bin: output: +000: 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f | | +010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | | + +generate_private_key: input = 00420mG51WS82GeB30qE3m +generate_private_key: output: +000: a4 f4 b5 1c 8a 0a 09 f9 7e 98 22 ca 8a cc b3 f9 | ~ " | +010: 4d 5a 0d 02 0b 9d 08 ea 03 9b 46 41 8e 3c 0d 49 |MZ FA < I| + +generate_public_key: input: +000: a4 f4 b5 1c 8a 0a 09 f9 7e 98 22 ca 8a cc b3 f9 | ~ " | +010: 4d 5a 0d 02 0b 9d 08 ea 03 9b 46 41 8e 3c 0d 49 |MZ FA < I| +generate_public_key: output: +000: ca 58 61 6f f9 25 d0 cd 1d a5 62 48 a0 15 5e ad | Xao % bH ^ | +010: a9 f3 5c 10 5f 20 b6 42 b0 a9 7c 1e 0e d7 e9 4b | \ _ B | K| + +generate_shared_secret: input: prv +000: a4 f4 b5 1c 8a 0a 09 f9 7e 98 22 ca 8a cc b3 f9 | ~ " | +010: 4d 5a 0d 02 0b 9d 08 ea 03 9b 46 41 8e 3c 0d 49 |MZ FA < I| +generate_shared_secret: input: pub +000: ca 58 61 6f f9 25 d0 cd 1d a5 62 48 a0 15 5e ad | Xao % bH ^ | +010: a9 f3 5c 10 5f 20 b6 42 b0 a9 7c 1e 0e d7 e9 4b | \ _ B | K| +generate_shared_secret: output: +000: 5d 94 7b 0b db 54 e8 70 8a 09 b0 db 6f 0b 0d 31 |] { T p o 1| +010: 1b b8 5f ba 57 74 34 bd 3b c5 c4 6c d5 ae a4 84 | _ Wt4 ; l | + diff --git a/tests/tests-hashing.expected b/tests/tests-hashing.expected index 1f29fa9..ed2eac0 100644 --- a/tests/tests-hashing.expected +++ b/tests/tests-hashing.expected @@ -32,5 +32,16 @@ environment: input size = 0x200 1e0: 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f | | 1f0: 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f | | -pearson: output = 0xb2d98fa82ea108be +pearson_hash_256: output: +000: 40 09 5c ca 28 6b fb 93 4c 4a f7 c0 79 a8 04 5a |@ \ (k LJ y Z| +010: b5 3d cf b3 a7 ed 18 56 b2 d9 8f a8 2e a1 08 be | = V . | + +pearson_hash_128: output: +000: b5 3d cf b3 a7 ed 18 56 b2 d9 8f a8 2e a1 08 be | = V . | + +pearson_hash_64: output = 0xb2d98fa82ea108be + +pearson_hash_32: output = 0x2ea108be + +pearson_hash_16: output = 0x8be diff --git a/tools/Makefile.in b/tools/Makefile.in index d7bb734..4241c15 100644 --- a/tools/Makefile.in +++ b/tools/Makefile.in @@ -19,6 +19,7 @@ TOOLS+=@ADDITIONAL_TOOLS@ TESTS=tests-compress tests-elliptic tests-hashing tests-transform TESTS+=tests-wire +TESTS+=tests-auth .PHONY: all clean install all: $(TOOLS) $(TESTS) diff --git a/tools/tests-auth.c b/tools/tests-auth.c new file mode 100644 index 0000000..15452a2 --- /dev/null +++ b/tools/tests-auth.c @@ -0,0 +1,128 @@ +/* + * (C) 2007-21 - ntop.org and contributors + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see + * + */ + +#include + +#include "n2n.h" +#include "hexdump.h" + + +uint8_t PKT_CONTENT1[]={ + 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, +}; + +char *PKT_CONTENT2 = "00420mG51WS82GeB30qE3m"; + +void test_bin_to_ascii (void *buf, unsigned int bufsize) { + char *test_name = "bin_to_ascii"; + char out[32]; + + printf("%s: input size = 0x%x\n", test_name, bufsize); + fhexdump(0, buf, bufsize, stdout); + + bin_to_ascii(out, buf, bufsize); + + printf("%s: output: %s\n", test_name, out); + + fprintf(stderr, "%s: tested\n", test_name); + printf("\n"); +} + +void test_ascii_to_bin (char *buf) { + char *test_name = "ascii_to_bin"; + uint8_t out[32]; + memset(out, 0, sizeof(out)); + + printf("%s: input = %s\n", test_name, buf); + + ascii_to_bin(out, buf); + // TODO: + // - it would be nice if the function returned the bufsize, + // - or took an allocation size as input + + printf("%s: output:\n", test_name); + fhexdump(0, out, sizeof(out), stdout); + + fprintf(stderr, "%s: tested\n", test_name); + printf("\n"); +} + +void test_generate_private_key (char *in, n2n_private_public_key_t prv) { + char *test_name = "generate_private_key"; + + printf("%s: input = %s\n", test_name, in); + + generate_private_key(prv, in); + + printf("%s: output:\n", test_name); + fhexdump(0, prv, sizeof(n2n_private_public_key_t), stdout); + + fprintf(stderr, "%s: tested\n", test_name); + printf("\n"); +} + +void test_generate_public_key (n2n_private_public_key_t prv, n2n_private_public_key_t pub) { + char *test_name = "generate_public_key"; + + printf("%s: input:\n", test_name); + fhexdump(0, prv, sizeof(n2n_private_public_key_t), stdout); + + generate_public_key(pub, prv); + + printf("%s: output:\n", test_name); + fhexdump(0, pub, sizeof(n2n_private_public_key_t), stdout); + + fprintf(stderr, "%s: tested\n", test_name); + printf("\n"); +} + +void test_generate_shared_secret (n2n_private_public_key_t prv, n2n_private_public_key_t pub) { + char *test_name = "generate_shared_secret"; + n2n_private_public_key_t out; + + printf("%s: input: prv\n", test_name); + fhexdump(0, prv, sizeof(n2n_private_public_key_t), stdout); + printf("%s: input: pub\n", test_name); + fhexdump(0, pub, sizeof(n2n_private_public_key_t), stdout); + + generate_shared_secret(out, prv, pub); + + printf("%s: output:\n", test_name); + fhexdump(0, out, sizeof(out), stdout); + + fprintf(stderr, "%s: tested\n", test_name); + printf("\n"); +} + +int main (int argc, char * argv[]) { + + test_bin_to_ascii(PKT_CONTENT1, sizeof(PKT_CONTENT1)); + test_ascii_to_bin(PKT_CONTENT2); + + n2n_private_public_key_t prv; + memset(prv, 0, sizeof(prv)); + n2n_private_public_key_t pub; + memset(pub, 0, sizeof(pub)); + + test_generate_private_key(PKT_CONTENT2, prv); + test_generate_public_key(prv, pub); + test_generate_shared_secret(prv, pub); + + return 0; +} + diff --git a/tools/tests-hashing.c b/tools/tests-hashing.c index 51efbeb..9455b9b 100644 --- a/tools/tests-hashing.c +++ b/tools/tests-hashing.c @@ -41,8 +41,30 @@ uint8_t PKT_CONTENT[]={ 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 }; -void test_pearson (void *buf, unsigned int bufsize) { - char *test_name = "pearson"; +void test_pearson_16 (void *buf, unsigned int bufsize) { + char *test_name = "pearson_hash_16"; + + uint16_t hash = pearson_hash_16(buf, bufsize); + + printf("%s: output = 0x%" PRIx16 "\n", test_name, hash); + + fprintf(stderr, "%s: tested\n", test_name); + printf("\n"); +} + +void test_pearson_32 (void *buf, unsigned int bufsize) { + char *test_name = "pearson_hash_32"; + + uint32_t hash = pearson_hash_32(buf, bufsize); + + printf("%s: output = 0x%" PRIx32 "\n", test_name, hash); + + fprintf(stderr, "%s: tested\n", test_name); + printf("\n"); +} + +void test_pearson_64 (void *buf, unsigned int bufsize) { + char *test_name = "pearson_hash_64"; uint64_t hash = pearson_hash_64(buf, bufsize); @@ -52,6 +74,32 @@ void test_pearson (void *buf, unsigned int bufsize) { printf("\n"); } +void test_pearson_128 (void *buf, unsigned int bufsize) { + char *test_name = "pearson_hash_128"; + + uint8_t hash[16]; + pearson_hash_128(hash, buf, bufsize); + + printf("%s: output:\n", test_name); + fhexdump(0, hash, sizeof(hash), stdout); + + fprintf(stderr, "%s: tested\n", test_name); + printf("\n"); +} + +void test_pearson_256 (void *buf, unsigned int bufsize) { + char *test_name = "pearson_hash_256"; + + uint8_t hash[32]; + pearson_hash_256(hash, buf, bufsize); + + printf("%s: output:\n", test_name); + fhexdump(0, hash, sizeof(hash), stdout); + + fprintf(stderr, "%s: tested\n", test_name); + printf("\n"); +} + int main (int argc, char * argv[]) { pearson_hash_init(); @@ -60,7 +108,11 @@ int main (int argc, char * argv[]) { fhexdump(0, PKT_CONTENT, sizeof(PKT_CONTENT), stdout); printf("\n"); - test_pearson(PKT_CONTENT, sizeof(PKT_CONTENT)); + test_pearson_256(PKT_CONTENT, sizeof(PKT_CONTENT)); + test_pearson_128(PKT_CONTENT, sizeof(PKT_CONTENT)); + test_pearson_64(PKT_CONTENT, sizeof(PKT_CONTENT)); + test_pearson_32(PKT_CONTENT, sizeof(PKT_CONTENT)); + test_pearson_16(PKT_CONTENT, sizeof(PKT_CONTENT)); return 0; }