--- a/test/crypto.c Tue Oct 14 21:02:26 2025 +0200 +++ b/test/crypto.c Sat Nov 08 23:06:11 2025 +0100 @@ -191,138 +191,146 @@ } } -CX_TEST(test_util_decrypt_str_k) { +UCX_TEST(test_util_decrypt_str_k) { create_keys(); DavContext *ctx = dav_context_new(); DavSession *sn = dav_session_new(ctx, "http://localhost/"); - CX_TEST_DO { - for(int k=0;k<2;k++) { - for(int i=0;i<20;i++) { - char *c1; - char *c2; - if(k == 0) { - c1 = cryptkey0aes128strings[i]; - c2 = cryptkey0aes256strings[i]; - } else { - c1 = cryptkey1aes128strings[i]; - c2 = cryptkey1aes256strings[i]; - } - - char *s128 = util_decrypt_str_k(sn, c1, &keys128[k]); - char *s256 = util_decrypt_str_k(sn, c2, &keys256[k]); - - CX_TEST_ASSERT(!strcmp(s128, strings[i])); - CX_TEST_ASSERT(!strcmp(s256, strings[i])); + UCX_TEST_BEGIN; + + for(int k=0;k<2;k++) { + for(int i=0;i<20;i++) { + char *c1; + char *c2; + if(k == 0) { + c1 = cryptkey0aes128strings[i]; + c2 = cryptkey0aes256strings[i]; + } else { + c1 = cryptkey1aes128strings[i]; + c2 = cryptkey1aes256strings[i]; } + + char *s128 = util_decrypt_str_k(sn, c1, &keys128[k]); + char *s256 = util_decrypt_str_k(sn, c2, &keys256[k]); + + UCX_TEST_ASSERT(!strcmp(s128, strings[i]), "s128 wrong"); + UCX_TEST_ASSERT(!strcmp(s256, strings[i]), "s256 wrong"); } } + UCX_TEST_END; + dav_context_destroy(ctx); } -CX_TEST(test_util_encrypt_str_k) { +UCX_TEST(test_util_encrypt_str_k) { DavContext *ctx = dav_context_new(); DavSession *sn = dav_session_new(ctx, "http://localhost/"); - CX_TEST_DO { - for(int k=0;k<16;k++) { - for(int i=0;i<20;i++) { - char *aes128 = util_encrypt_str_k(sn, strings[i], &keys128[k]); - char *aes256 = util_encrypt_str_k(sn, strings[i], &keys256[k]); - - char *dec1 = util_decrypt_str_k(sn, aes128, &keys128[k]); - char *dec2 = util_decrypt_str_k(sn, aes256, &keys256[k]); - - CX_TEST_ASSERT(!strcmp(dec1, strings[i])); - CX_TEST_ASSERT(!strcmp(dec2, strings[i])); - } + UCX_TEST_BEGIN; + + for(int k=0;k<16;k++) { + for(int i=0;i<20;i++) { + char *aes128 = util_encrypt_str_k(sn, strings[i], &keys128[k]); + char *aes256 = util_encrypt_str_k(sn, strings[i], &keys256[k]); + + char *dec1 = util_decrypt_str_k(sn, aes128, &keys128[k]); + char *dec2 = util_decrypt_str_k(sn, aes256, &keys256[k]); + + UCX_TEST_ASSERT(!strcmp(dec1, strings[i]), "aes128 encrypt failed"); + UCX_TEST_ASSERT(!strcmp(dec2, strings[i]), "aes256 encrypt failed"); } } + + UCX_TEST_END; } -CX_TEST(test_crypto_buffer) { - CX_TEST_DO { - for(int i=0;i<32;i++) { - DavKey *key = i < 16 ? &keys256[i] : &keys128[i%16]; - - for(int j=0;j<20;j++) { - CxBuffer *content = cxBufferCreate(NULL, 256, cxDefaultAllocator, CX_BUFFER_FREE_CONTENTS|CX_BUFFER_AUTO_EXTEND); - cxBufferPutString(content, strings[j]); - content->pos = 0; - - CxBuffer *enc = aes_encrypt_buffer(content, key); - CX_TEST_ASSERT(enc->size >= content->size + 16); - - char *base64 = util_base64encode(enc->space, enc->size); - size_t plainlen = 0; - char *plain = aes_decrypt(base64, &plainlen, key); - - CX_TEST_ASSERT(plain); - CX_TEST_ASSERT(plainlen == content->size); - CX_TEST_ASSERT(!memcmp(plain, content->space, plainlen)); - - CxBuffer *dec = aes_decrypt_buffer(enc, key); - CX_TEST_ASSERT(dec->size == content->size); - - CX_TEST_ASSERT(!memcmp(content->space, dec->space, dec->size)); - - cxBufferFree(content); - cxBufferFree(enc); - cxBufferFree(dec); - free(base64); - free(plain); - } +UCX_TEST(test_crypto_buffer) { + UCX_TEST_BEGIN; + + for(int i=0;i<32;i++) { + DavKey *key = i < 16 ? &keys256[i] : &keys128[i%16]; + + for(int j=0;j<20;j++) { + CxBuffer *content = cxBufferCreate(NULL, 256, cxDefaultAllocator, CX_BUFFER_FREE_CONTENTS|CX_BUFFER_AUTO_EXTEND); + cxBufferPutString(content, strings[j]); + content->pos = 0; + + CxBuffer *enc = aes_encrypt_buffer(content, key); + UCX_TEST_ASSERT(enc->size >= content->size + 16, "aes_encrypt_buffer failed"); + + char *base64 = util_base64encode(enc->space, enc->size); + size_t plainlen = 0; + char *plain = aes_decrypt(base64, &plainlen, key); + + UCX_TEST_ASSERT(plain, "aes_decrypt failed"); + UCX_TEST_ASSERT(plainlen == content->size, "aes_decrypt: wrong length"); + UCX_TEST_ASSERT(!memcmp(plain, content->space, plainlen), "aes_decrypt: wrong content"); + + CxBuffer *dec = aes_decrypt_buffer(enc, key); + UCX_TEST_ASSERT(dec->size == content->size, "aes_decrypt_buffer failed"); + + UCX_TEST_ASSERT(!memcmp(content->space, dec->space, dec->size), "decrypted buffer has wrong content"); + + cxBufferFree(content); + cxBufferFree(enc); + cxBufferFree(dec); + free(base64); + free(plain); } } + + UCX_TEST_END; } -CX_TEST(test_crypto_stream) { +UCX_TEST(test_crypto_stream) { CxBuffer *data = cxBufferCreate(NULL, 1024, cxDefaultAllocator, CX_BUFFER_FREE_CONTENTS|CX_BUFFER_AUTO_EXTEND); CxBuffer *cbuf = cxBufferCreate(NULL, 1024, cxDefaultAllocator, CX_BUFFER_FREE_CONTENTS|CX_BUFFER_AUTO_EXTEND); CxBuffer *pbuf = cxBufferCreate(NULL, 1024, cxDefaultAllocator, CX_BUFFER_FREE_CONTENTS|CX_BUFFER_AUTO_EXTEND); - CX_TEST_DO { - for(int i=0;i<32;i++) { - DavKey *key = i < 16 ? &keys256[i] : &keys128[i%16]; - for(int j=0;j<20;j++) { - data->pos = 0; - data->size = 0; - size_t slen = strlen(strings[j]); - cxBufferWrite(strings[j], 1, slen, data); - cxBufferSeek(data, 0, SEEK_SET); + UCX_TEST_BEGIN; + + for(int i=0;i<32;i++) { + DavKey *key = i < 16 ? &keys256[i] : &keys128[i%16]; + for(int j=0;j<20;j++) { + data->pos = 0; + data->size = 0; + size_t slen = strlen(strings[j]); + cxBufferWrite(strings[j], 1, slen, data); + cxBufferSeek(data, 0, SEEK_SET); - cbuf->pos = 0; - cbuf->size = 0; - pbuf->pos = 0; - pbuf->size = 0; + cbuf->pos = 0; + cbuf->size = 0; + pbuf->pos = 0; + pbuf->size = 0; - AESEncrypter *enc = aes_encrypter_new(key, data, (dav_read_func)cxBufferRead, NULL); - char buf[1024]; - size_t r = 0; - while((r = aes_read(buf, 1, 1024, enc)) != 0) { - cxBufferWrite(buf, 1, r, cbuf); - } - aes_encrypter_close(enc); + AESEncrypter *enc = aes_encrypter_new(key, data, (dav_read_func)cxBufferRead, NULL); + char buf[1024]; + size_t r = 0; + while((r = aes_read(buf, 1, 1024, enc)) != 0) { + cxBufferWrite(buf, 1, r, cbuf); + } + aes_encrypter_close(enc); - AESDecrypter *dec = aes_decrypter_new(key, pbuf, (dav_write_func)cxBufferWrite); - aes_write(cbuf->space, 1, cbuf->pos, dec); - aes_decrypter_shutdown(dec); - aes_decrypter_close(dec); - - CX_TEST_ASSERT(slen == pbuf->pos); - CX_TEST_ASSERT(!memcmp(strings[j], pbuf->space, slen)); + AESDecrypter *dec = aes_decrypter_new(key, pbuf, (dav_write_func)cxBufferWrite); + aes_write(cbuf->space, 1, cbuf->pos, dec); + aes_decrypter_shutdown(dec); + aes_decrypter_close(dec); - data->pos = 0; - CxBuffer *enc2 = aes_encrypt_buffer(data, key); - CxBuffer *dec2 = aes_decrypt_buffer(enc2, key); - - CX_TEST_ASSERT(dec2->size == data->size); - CX_TEST_ASSERT(!memcmp(strings[j], dec2->space, dec2->size)); - } + UCX_TEST_ASSERT(slen == pbuf->pos, "wrong length after enc-dec"); + UCX_TEST_ASSERT(!memcmp(strings[j], pbuf->space, slen), "wrong content after enc-dec"); + + data->pos = 0; + CxBuffer *enc2 = aes_encrypt_buffer(data, key); + CxBuffer *dec2 = aes_decrypt_buffer(enc2, key); + + UCX_TEST_ASSERT(dec2->size == data->size, "dec2 has wrong size"); + UCX_TEST_ASSERT(!memcmp(strings[j], dec2->space, dec2->size), "dec2 has wrong content"); } } + + UCX_TEST_END; } static char *pws[] = { @@ -409,50 +417,51 @@ }; -CX_TEST(test_dav_pw2key) { +UCX_TEST(test_dav_pw2key) { - CX_TEST_DO { + + UCX_TEST_BEGIN; - for(int p=0;p<4;p++) { - for(int s=0;s<4;s++) { - DavKey *keys[4]; - keys[0] = dav_pw2key( - pws[p], - salt[s], - saltlen[s], - DAV_PWFUNC_PBKDF2_SHA256, - DAV_KEY_AES128); - keys[1] = dav_pw2key( - pws[p], - salt[s], - saltlen[s], - DAV_PWFUNC_PBKDF2_SHA256, - DAV_KEY_AES256); - keys[2] = dav_pw2key( - pws[p], - salt[s], - saltlen[s], - DAV_PWFUNC_PBKDF2_SHA512, - DAV_KEY_AES128); - keys[3] = dav_pw2key( - pws[p], - salt[s], - saltlen[s], - DAV_PWFUNC_PBKDF2_SHA512, - DAV_KEY_AES256); - - for(int i=0;i<4;i++) { - DavKey *key = keys[i]; - - int index = 16*p + 4*s + i; - int keylen = index % 2 == 0 ? 16 : 32; - - CX_TEST_ASSERT(key); - CX_TEST_ASSERT(keylen == key->length); - CX_TEST_ASSERT(!memcmp(key->data, pwgenkeys[index], keylen)); - } + for(int p=0;p<4;p++) { + for(int s=0;s<4;s++) { + DavKey *keys[4]; + keys[0] = dav_pw2key( + pws[p], + salt[s], + saltlen[s], + DAV_PWFUNC_PBKDF2_SHA256, + DAV_KEY_AES128); + keys[1] = dav_pw2key( + pws[p], + salt[s], + saltlen[s], + DAV_PWFUNC_PBKDF2_SHA256, + DAV_KEY_AES256); + keys[2] = dav_pw2key( + pws[p], + salt[s], + saltlen[s], + DAV_PWFUNC_PBKDF2_SHA512, + DAV_KEY_AES128); + keys[3] = dav_pw2key( + pws[p], + salt[s], + saltlen[s], + DAV_PWFUNC_PBKDF2_SHA512, + DAV_KEY_AES256); + + for(int i=0;i<4;i++) { + DavKey *key = keys[i]; + + int index = 16*p + 4*s + i; + int keylen = index % 2 == 0 ? 16 : 32; + + UCX_TEST_ASSERT(key, "no key"); + UCX_TEST_ASSERT(keylen == key->length, "wrong key length"); + UCX_TEST_ASSERT(!memcmp(key->data, pwgenkeys[index], keylen), "wrong key data"); } } + } - } + UCX_TEST_END; }