diff --git a/src/se050_chacha20_poly1305.c b/src/se050_chacha20_poly1305.c index 3b0fe19..85a38f4 100644 --- a/src/se050_chacha20_poly1305.c +++ b/src/se050_chacha20_poly1305.c @@ -8,6 +8,7 @@ #include "se050_chacha20_poly1305.h" #include "se050_crypto_utils.h" #include +#include /* ESP32 detection */ #if defined(ESP_PLATFORM) || defined(__XTENSA__) || defined(__riscv) @@ -694,6 +695,12 @@ int se050_chacha20_poly1305_decrypt(se050_chacha20_poly1305_ctx_t *ctx, /* Constant-time comparison */ int ret = 0; if (crypto_memneq(expected_tag, tag, 16) != 0) { + fprintf(stderr, "DEBUG: tag mismatch\n"); + fprintf(stderr, "Expected: "); + for(int i=0; i<16; i++) fprintf(stderr, "%02x", expected_tag[i]); + fprintf(stderr, "\nGot: "); + for(int i=0; i<16; i++) fprintf(stderr, "%02x", tag[i]); + fprintf(stderr, "\n"); ret = -1; } diff --git a/src/se050_wireguard.c b/src/se050_wireguard.c index 3f510c5..361d5f0 100644 --- a/src/se050_wireguard.c +++ b/src/se050_wireguard.c @@ -23,6 +23,7 @@ #include #include #include +#include /* ========================================================================= * WireGuard Protocol Constants @@ -322,6 +323,8 @@ int se050_wireguard_decrypt_packet(se050_wireguard_session_t *session, memzero_explicit(tag, 16); if (ret < 0) { + fprintf(stderr, "DEBUG: decrypt failed, ciphertext_len=%zu, packet_len=%zu, aad_len=16\n", + ciphertext_len, packet_len); return -1; } diff --git a/tests/test_debug_wg.c b/tests/test_debug_wg.c new file mode 100644 index 0000000..5b86698 --- /dev/null +++ b/tests/test_debug_wg.c @@ -0,0 +1,54 @@ +#define X25519_SW_TEST 1 +#include "se050_wireguard.h" +#include "se050_x25519_sw.h" +#include "se050_chacha20_poly1305.h" +#include +#include + +int main() { + printf("=== Debug WireGuard Encrypt/Decrypt ===\n\n"); + + uint8_t priv[32], peer_pub[32]; + for(int i=0; i<32; i++) { priv[i] = i+1; peer_pub[i] = i+2; } + + se050_wireguard_session_t session; + se050_wireguard_session_init(&session, priv, peer_pub); + + uint8_t ss[32] = {0}; + for(int i=0; i<32; i++) ss[i] = i; + se050_wireguard_derive_keys(&session, ss); + + printf("Sending key (first 8): "); + for(int i=0; i<8; i++) printf("%02x", session.sending_key[i]); + printf("\n"); + + printf("Receiving key (first 8): "); + for(int i=0; i<8; i++) printf("%02x", session.receiving_key[i]); + printf("\n\n"); + + const char *plaintext = "test"; + uint8_t encrypted[100]; + size_t enc_len; + + printf("=== Encrypt ===\n"); + int ret = se050_wireguard_encrypt_packet(&session, encrypted, &enc_len, (uint8_t*)plaintext, 4); + printf("Encrypt result: %d\n", ret); + printf("Encrypted length: %zu\n", enc_len); + printf("Encrypted (hex): "); + for(size_t i=0; i