X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Flibcollectdclient%2Fserver_test.c;h=53e6b8a2418e7ddc9b6d8646a58411615d1a9f07;hb=c3eb1f9dd670b0d112820ed2894e6d5ecb09c286;hp=bdcfbc60f6ee560a90df81acb322be4f517d0607;hpb=10d95b0cf8d2ffe1472cc65a4d403c9c1ca4118d;p=collectd.git diff --git a/src/libcollectdclient/server_test.c b/src/libcollectdclient/server_test.c index bdcfbc60..53e6b8a2 100644 --- a/src/libcollectdclient/server_test.c +++ b/src/libcollectdclient/server_test.c @@ -27,6 +27,7 @@ #include "collectd/network_buffer.h" +#include #include #include #include @@ -255,7 +256,10 @@ static int test_network_parse() { return -1; } - int status = lcc_network_parse(buffer, buffer_size, nop_writer); + int status = + lcc_network_parse(buffer, buffer_size, (lcc_network_parse_options_t){ + .writer = nop_writer, + }); if (status != 0) { fprintf(stderr, "lcc_network_parse(raw_packet_data[%zu]) = %d, want 0\n", i, status); @@ -412,6 +416,75 @@ static int test_parse_values() { return ret; } +static int test_verify_sha256() { + int ret = 0; + + int status = verify_sha256( + (char[]){'c', 'o', 'l', 'l', 'e', 'c', 't', 'd'}, 8, "admin", "admin", + (uint8_t[]){ + 0xcd, 0xa5, 0x9a, 0x37, 0xb0, 0x81, 0xc2, 0x31, 0x24, 0x2a, 0x6d, + 0xbd, 0xfb, 0x44, 0xdb, 0xd7, 0x41, 0x2a, 0xf4, 0x29, 0x83, 0xde, + 0xa5, 0x11, 0x96, 0xd2, 0xe9, 0x30, 0x21, 0xae, 0xc5, 0x45, + }); + if (status != 0) { + fprintf(stderr, "verify_sha256() = %d, want 0\n", status); + ret = -1; + } + + status = verify_sha256( + (char[]){'c', 'o', 'l', 'l', 'E', 'c', 't', 'd'}, 8, "admin", "admin", + (uint8_t[]){ + 0xcd, 0xa5, 0x9a, 0x37, 0xb0, 0x81, 0xc2, 0x31, 0x24, 0x2a, 0x6d, + 0xbd, 0xfb, 0x44, 0xdb, 0xd7, 0x41, 0x2a, 0xf4, 0x29, 0x83, 0xde, + 0xa5, 0x11, 0x96, 0xd2, 0xe9, 0x30, 0x21, 0xae, 0xc5, 0x45, + }); + if (status != 1) { + fprintf(stderr, "verify_sha256() = %d, want 1\n", status); + ret = -1; + } + + return ret; +} + +static int test_decrypt_aes256() { + char const *iv_str = "4cbe2a747c9f9dcfa0e66f0c2fa74875"; + uint8_t iv[16] = {0}; + size_t iv_len = sizeof(iv); + + char const *ciphertext_str = + "8f023b0b15178f8428da1221a5f653e840f065db4aff032c22e5a3df"; + uint8_t ciphertext[28] = {0}; + size_t ciphertext_len = sizeof(ciphertext); + + if (decode_string(iv_str, iv, &iv_len) || + decode_string(ciphertext_str, ciphertext, &ciphertext_len)) { + fprintf(stderr, "test_decrypt_aes256: decode_string failed.\n"); + return -1; + } + assert(iv_len == sizeof(iv)); + assert(ciphertext_len == sizeof(ciphertext)); + + int status = decrypt_aes256( + &(buffer_t){ + .data = ciphertext, .len = ciphertext_len, + }, + iv, iv_len, "admin"); + if (status != 0) { + fprintf(stderr, "decrypt_aes256() = %d, want 0\n", status); + return -1; + } + + char const *want = "collectd"; + char got[9] = {0}; + memmove(got, &ciphertext[20], sizeof(got) - 1); + if (strcmp(got, want) != 0) { + fprintf(stderr, "decrypt_aes256() = \"%s\", want \"%s\"\n", got, want); + return -1; + } + + return 0; +} + int main(void) { int ret = 0; @@ -431,5 +504,12 @@ int main(void) { ret = status; } + if ((status = test_verify_sha256())) { + ret = status; + } + if ((status = test_decrypt_aes256())) { + ret = status; + } + return ret; }