From f3068f82f3ba5f9f8680af33a1081a9d6e92810d Mon Sep 17 00:00:00 2001 From: Laan Tungir Date: Mon, 27 Oct 2025 13:16:06 -0400 Subject: [PATCH] Rollback of nip44 changes, and added ability to modify timestamps in giftwraps. --- VERSION | 2 +- nostr_core/nostr_core.h | 4 ++-- tests/nip17_test | Bin 190792 -> 190792 bytes tests/nip44_test | Bin 131744 -> 131744 bytes tests/nip44_test.c | 26 +++++++++++++------------- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/VERSION b/VERSION index f9056827..cb498ab2 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.4.7 +0.4.8 diff --git a/nostr_core/nostr_core.h b/nostr_core/nostr_core.h index 0a79808e..4fe9bbef 100644 --- a/nostr_core/nostr_core.h +++ b/nostr_core/nostr_core.h @@ -2,10 +2,10 @@ #define NOSTR_CORE_H // Version information (auto-updated by increment_and_push.sh) -#define VERSION "v0.4.7" +#define VERSION "v0.4.8" #define VERSION_MAJOR 0 #define VERSION_MINOR 4 -#define VERSION_PATCH 7 +#define VERSION_PATCH 8 /* * NOSTR Core Library - Complete API Reference diff --git a/tests/nip17_test b/tests/nip17_test index 36f099ceb95c8d8125ed7eba270d85166e7e7329..3a9e80a89c34c1f9da4cd621233c878763ff1afe 100755 GIT binary patch delta 2301 zcmZ`)eM}Tb6yKR6=1}5-MHH!U9t(&u@?lj}q@0{}k6SEJnzVkj#n;GQI<0I6dD@4ZmWso9P%TvW{CGz!d$HB66Nds zKEGIVk>A&3?%-?Qg5|OrKkt<^+b5zNp|P2&DlSr0j^lS1F*jd@P%g=Rk{lA{3c*6n zJ5&{XYDO^m+>d6VAUW?xtF0R`*n+<^LscE}h3611=>!2z4651r6a_ z7G_R0m31-@?JCf zstM(qGZ>0*#S(I<3C*06ZsQXw(`JjEy`nE>KVWd;Lc0*p?_NgYn^EG7y<5PV#W1Kv z9HJ8#EZpQ+knBdWrmHkcmNlcK)T01V7bA$f0tGNzwZ^vEw#N3Z?Y(9fpJwNXyBQ_B zPw{Cx0gbaYSYbSCfgybLsj9Zd2r7K{_QPa=P4znD2}HeP16H# zfds>6U>IHt!^>kK1sX`9DtM4W}`N(=!VrROt}N=Y;)0`!d2V%{D?W zfnT!rlhhERi^J z>jGMYZj#g%l!BVcf)=Rt3bLUE6}cB`?P6GKEjil!I&>G_o6ZUmx{G&;wg~;Cn;r&i z(c?FXjTDQ%!eY8L6&8%L`wZ+L)kV35c2?pI)2A;c)Ja?`q~GivK7t9tT)tr0CD)1+%!smIz2k| zMgIwqbIf)Odrm0k>1A@iB>yS;&I!LjI_N2Kc)N~!p2P*wtTe5c$TubEhXr&ZU`cf_ z)4D(l@BM_l6GX4&pM~laJ&#R%Z9CxDcqQpHD@IpiliAKIQI{ub`Lysf>jzM{UJx8n z0DK}A=QnTO?C|_uQZ_%brPASZBf5%2gD4fPCdn63itQNOAWKj4tL!Etlmp3n;z){~ zD*YhuWoqpJZZ|}4fzIr1X#2yogKWNtic+ByN8v_jHo%2TRUNb1u&pAUK;?cL)K&g@FT!tcK438Z(dAAM)YgD5$?c z83om?sa3*scFZ174BYf9+B`((83E^vCRhmst}m6`Hq?O8WfEyex6ys2^D@dod;K`R zz61Ho^9GNos*uNV-XB!;W03aasu}=!5abPzi6>O`KFA7?Tt4W^fCaZ@qu zkzG!lG=AwgND>i#aWgnBNMfDXIVNr!94Lkq&Bf_4er(EMmRZ?b-Kx5Rr4)Se@biO1 z0M=aEioSLY)-0sciC;kyx$DI9&^2YMgj3!`0cHL-IFtl(+6g>tf+&*faaQcw7M83~ z62wuDL#Tt~DfnmH-$ouNxDQ#B+o$n*gmM+f8Qg8c{q2gi0cT>gQ*rolS_bPKcX3W^ P;IfVqP!8P1hfMzfN)JW& delta 2369 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 delta 3595 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, "1MB payload test") == 0) { - // Generate exactly 1MB (1,048,576 bytes) of predictable content - const size_t payload_size = 1048576; + if (strcmp(tv->name, "64KB payload test") == 0) { + // Generate exactly 64KB (65,535 bytes) of predictable content - max NIP-44 size + const size_t payload_size = 65535; test_plaintext = malloc(payload_size + 1); if (!test_plaintext) { - printf(" FAIL: Memory allocation failed for 1MB test payload\n"); + printf(" FAIL: Memory allocation failed for 64KB test payload\n"); return -1; } @@ -118,7 +118,7 @@ static int test_nip44_round_trip(const nip44_test_vector_t* tv) { } test_plaintext[payload_size] = '\0'; - printf(" Generated 1MB test payload (%zu bytes)\n", payload_size); + printf(" Generated 64KB test payload (%zu bytes)\n", payload_size); printf(" Pattern: \"%s\" repeated\n", pattern); printf(" First 64 chars: \"%.64s...\"\n", test_plaintext); printf(" Last 64 chars: \"...%.64s\"\n", test_plaintext + payload_size - 64); @@ -158,10 +158,10 @@ static int test_nip44_round_trip(const nip44_test_vector_t* tv) { } // Test decryption - use recipient private key + sender public key - char* decrypted = malloc(1048576 + 1); // 1MB + 1 for null terminator + char* decrypted = malloc(65536 + 1); // 64KB + 1 for null terminator if (!decrypted) { printf(" FAIL: Memory allocation failed for decrypted buffer\n"); - if (strcmp(tv->name, "1MB payload test") == 0) free(test_plaintext); + if (strcmp(tv->name, "64KB payload test") == 0) free(test_plaintext); free(encrypted); return -1; } @@ -170,7 +170,7 @@ static int test_nip44_round_trip(const nip44_test_vector_t* tv) { sender_public_key, encrypted, decrypted, - 1048576 + 1 + 65536 + 1 ); if (decrypt_result != NOSTR_SUCCESS) { @@ -192,17 +192,17 @@ static int test_nip44_round_trip(const nip44_test_vector_t* tv) { return -1; } - if (strcmp(tv->name, "1MB payload test") == 0) { - printf(" ✅ 1MB payload round-trip: PASS\n"); + if (strcmp(tv->name, "64KB payload test") == 0) { + printf(" ✅ 64KB payload round-trip: PASS\n"); printf(" ✅ Content verification: All %zu bytes match perfectly!\n", strlen(test_plaintext)); printf(" Encrypted length: %zu bytes\n", strlen(encrypted)); - printf(" 🎉 1MB NIP-44 STRESS TEST COMPLETED SUCCESSFULLY! 🎉\n"); + printf(" 🎉 64KB NIP-44 STRESS TEST COMPLETED SUCCESSFULLY! 🎉\n"); } else { printf(" PASS: Expected: \"%s\", Actual: \"%s\"\n", test_plaintext, decrypted); printf(" Encrypted output: %s\n", encrypted); } - if (strcmp(tv->name, "1MB payload test") == 0) free(test_plaintext); + if (strcmp(tv->name, "64KB payload test") == 0) free(test_plaintext); free(encrypted); free(decrypted);