@pinkparrot/qsafe-mayo-wasm 0.0.11 → 0.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,20 +5,17 @@
5
5
 
6
6
  extern void randombytes_set_seed(const unsigned char *seed, size_t len);
7
7
 
8
- // -- Persistent WASM heap buffers --
9
- // Allocated once at init, reused across all sign/verify calls.
10
- // Max message size: 1 MB. Adjust if needed.
11
- #define MAX_MSG_SIZE (1024 * 1024)
12
-
13
- static unsigned char *_msg_buf = NULL;
14
- static unsigned char *_sig_buf = NULL;
15
- static unsigned char *_sk_buf = NULL;
16
- static unsigned char *_pk_buf = NULL;
17
-
18
- // Must be called once before any sign/verify. Returns 0 on success.
19
- int mayo_init_buffers(void) {
20
- if (_msg_buf) return 0; // already initialized
21
- _msg_buf = (unsigned char *)malloc(MAX_MSG_SIZE);
8
+ static size_t _max_msg_size = 0;
9
+ static unsigned char *_msg_buf = NULL;
10
+ static unsigned char *_sig_buf = NULL;
11
+ static unsigned char *_sk_buf = NULL;
12
+ static unsigned char *_pk_buf = NULL;
13
+ static size_t _sig_len = 0; // written by sign(), read by JS
14
+
15
+ int mayo_init_buffers(size_t max_msg_size) {
16
+ if (_msg_buf) return 0;
17
+ _max_msg_size = max_msg_size;
18
+ _msg_buf = (unsigned char *)malloc(max_msg_size);
22
19
  _sig_buf = (unsigned char *)malloc(CRYPTO_BYTES);
23
20
  _sk_buf = (unsigned char *)malloc(CRYPTO_SECRETKEYBYTES);
24
21
  _pk_buf = (unsigned char *)malloc(CRYPTO_PUBLICKEYBYTES);
@@ -26,33 +23,31 @@ int mayo_init_buffers(void) {
26
23
  return 0;
27
24
  }
28
25
 
26
+ // Pointer accessors — called once at init by JS, then cached.
27
+ unsigned char *get_msg_buf(void) { return _msg_buf; }
28
+ unsigned char *get_sig_buf(void) { return _sig_buf; }
29
+ unsigned char *get_sk_buf(void) { return _sk_buf; }
30
+ unsigned char *get_pk_buf(void) { return _pk_buf; }
31
+ size_t get_sig_len(void) { return _sig_len; }
32
+
29
33
  int keypair_from_seed(const unsigned char *seed,
30
34
  unsigned char *cpk, unsigned char *csk) {
31
35
  randombytes_set_seed(seed, CRYPTO_SECRETKEYBYTES);
32
36
  return crypto_sign_keypair(cpk, csk);
33
37
  }
34
38
 
35
- // Uses pre-allocated buffers — no malloc/free on hot path.
36
- // Returns 1 if msg is too large or buffers not initialized.
37
- int sign(const unsigned char *msg, size_t msglen,
38
- const unsigned char *csk,
39
- unsigned char *sig, size_t *siglen) {
40
- if (!_msg_buf) return 1;
41
- if (msglen > MAX_MSG_SIZE) return 1;
42
- memcpy(_msg_buf, msg, msglen);
43
- memcpy(_sk_buf, csk, CRYPTO_SECRETKEYBYTES);
44
- int ret = crypto_sign_signature(_sig_buf, siglen, _msg_buf, msglen, _sk_buf);
45
- if (ret == 0) memcpy(sig, _sig_buf, *siglen);
46
- return ret;
39
+ // Return codes for sign/verify
40
+ #define MAYO_ERR_MSG_TOO_LARGE 2
41
+ #define MAYO_ERR_NOT_INIT 3
42
+
43
+ int sign(size_t msglen) {
44
+ if (!_msg_buf) return MAYO_ERR_NOT_INIT;
45
+ if (msglen > _max_msg_size) return MAYO_ERR_MSG_TOO_LARGE;
46
+ return crypto_sign_signature(_sig_buf, &_sig_len, _msg_buf, msglen, _sk_buf);
47
47
  }
48
48
 
49
- int verify(const unsigned char *msg, size_t msglen,
50
- const unsigned char *sig,
51
- const unsigned char *cpk) {
52
- if (!_msg_buf) return 1;
53
- if (msglen > MAX_MSG_SIZE) return 1;
54
- memcpy(_msg_buf, msg, msglen);
55
- memcpy(_sig_buf, sig, CRYPTO_BYTES);
56
- memcpy(_pk_buf, cpk, CRYPTO_PUBLICKEYBYTES);
49
+ int verify(size_t msglen) {
50
+ if (!_msg_buf) return MAYO_ERR_NOT_INIT;
51
+ if (msglen > _max_msg_size) return MAYO_ERR_MSG_TOO_LARGE;
57
52
  return crypto_sign_verify(_sig_buf, CRYPTO_BYTES, _msg_buf, msglen, _pk_buf);
58
53
  }
@@ -5,20 +5,17 @@
5
5
 
6
6
  extern void randombytes_set_seed(const unsigned char *seed, size_t len);
7
7
 
8
- // -- Persistent WASM heap buffers --
9
- // Allocated once at init, reused across all sign/verify calls.
10
- // Max message size: 1 MB. Adjust if needed.
11
- #define MAX_MSG_SIZE (1024 * 1024)
12
-
13
- static unsigned char *_msg_buf = NULL;
14
- static unsigned char *_sig_buf = NULL;
15
- static unsigned char *_sk_buf = NULL;
16
- static unsigned char *_pk_buf = NULL;
17
-
18
- // Must be called once before any sign/verify. Returns 0 on success.
19
- int mayo_init_buffers(void) {
20
- if (_msg_buf) return 0; // already initialized
21
- _msg_buf = (unsigned char *)malloc(MAX_MSG_SIZE);
8
+ static size_t _max_msg_size = 0;
9
+ static unsigned char *_msg_buf = NULL;
10
+ static unsigned char *_sig_buf = NULL;
11
+ static unsigned char *_sk_buf = NULL;
12
+ static unsigned char *_pk_buf = NULL;
13
+ static size_t _sig_len = 0; // written by sign(), read by JS
14
+
15
+ int mayo_init_buffers(size_t max_msg_size) {
16
+ if (_msg_buf) return 0;
17
+ _max_msg_size = max_msg_size;
18
+ _msg_buf = (unsigned char *)malloc(max_msg_size);
22
19
  _sig_buf = (unsigned char *)malloc(CRYPTO_BYTES);
23
20
  _sk_buf = (unsigned char *)malloc(CRYPTO_SECRETKEYBYTES);
24
21
  _pk_buf = (unsigned char *)malloc(CRYPTO_PUBLICKEYBYTES);
@@ -26,33 +23,31 @@ int mayo_init_buffers(void) {
26
23
  return 0;
27
24
  }
28
25
 
26
+ // Pointer accessors — called once at init by JS, then cached.
27
+ unsigned char *get_msg_buf(void) { return _msg_buf; }
28
+ unsigned char *get_sig_buf(void) { return _sig_buf; }
29
+ unsigned char *get_sk_buf(void) { return _sk_buf; }
30
+ unsigned char *get_pk_buf(void) { return _pk_buf; }
31
+ size_t get_sig_len(void) { return _sig_len; }
32
+
29
33
  int keypair_from_seed(const unsigned char *seed,
30
34
  unsigned char *cpk, unsigned char *csk) {
31
35
  randombytes_set_seed(seed, CRYPTO_SECRETKEYBYTES);
32
36
  return crypto_sign_keypair(cpk, csk);
33
37
  }
34
38
 
35
- // Uses pre-allocated buffers — no malloc/free on hot path.
36
- // Returns 1 if msg is too large or buffers not initialized.
37
- int sign(const unsigned char *msg, size_t msglen,
38
- const unsigned char *csk,
39
- unsigned char *sig, size_t *siglen) {
40
- if (!_msg_buf) return 1;
41
- if (msglen > MAX_MSG_SIZE) return 1;
42
- memcpy(_msg_buf, msg, msglen);
43
- memcpy(_sk_buf, csk, CRYPTO_SECRETKEYBYTES);
44
- int ret = crypto_sign_signature(_sig_buf, siglen, _msg_buf, msglen, _sk_buf);
45
- if (ret == 0) memcpy(sig, _sig_buf, *siglen);
46
- return ret;
39
+ // Return codes for sign/verify
40
+ #define MAYO_ERR_MSG_TOO_LARGE 2
41
+ #define MAYO_ERR_NOT_INIT 3
42
+
43
+ int sign(size_t msglen) {
44
+ if (!_msg_buf) return MAYO_ERR_NOT_INIT;
45
+ if (msglen > _max_msg_size) return MAYO_ERR_MSG_TOO_LARGE;
46
+ return crypto_sign_signature(_sig_buf, &_sig_len, _msg_buf, msglen, _sk_buf);
47
47
  }
48
48
 
49
- int verify(const unsigned char *msg, size_t msglen,
50
- const unsigned char *sig,
51
- const unsigned char *cpk) {
52
- if (!_msg_buf) return 1;
53
- if (msglen > MAX_MSG_SIZE) return 1;
54
- memcpy(_msg_buf, msg, msglen);
55
- memcpy(_sig_buf, sig, CRYPTO_BYTES);
56
- memcpy(_pk_buf, cpk, CRYPTO_PUBLICKEYBYTES);
49
+ int verify(size_t msglen) {
50
+ if (!_msg_buf) return MAYO_ERR_NOT_INIT;
51
+ if (msglen > _max_msg_size) return MAYO_ERR_MSG_TOO_LARGE;
57
52
  return crypto_sign_verify(_sig_buf, CRYPTO_BYTES, _msg_buf, msglen, _pk_buf);
58
53
  }
package/build_mayo1.ps1 CHANGED
@@ -26,8 +26,9 @@ emcc `
26
26
  -flto `
27
27
  -o ./dist/mayo1.cjs `
28
28
  -s WASM=1 `
29
- -s "EXPORTED_FUNCTIONS=['_mayo_init_buffers','_keypair_from_seed','_sign','_verify','_malloc','_free']" `
30
- -s "EXPORTED_RUNTIME_METHODS=['ccall','cwrap','HEAPU8']" `
29
+ -s "EXPORTED_FUNCTIONS=['_mayo_init_buffers','_keypair_from_seed','_sign','_verify','_malloc','_free','_get_msg_buf','_get_sig_buf','_get_sk_buf','_get_pk_buf','_get_sig_len']" `
30
+ -s "EXPORTED_RUNTIME_METHODS=['HEAPU8']" `
31
+ -s FILESYSTEM=0 `
31
32
  -s MODULARIZE=1 `
32
33
  -s EXPORT_NAME="Mayo1Module" `
33
34
  -s SINGLE_FILE=1 `
package/build_mayo2.ps1 CHANGED
@@ -25,8 +25,9 @@ emcc `
25
25
  -flto `
26
26
  -o ./dist/mayo2.cjs `
27
27
  -s WASM=1 `
28
- -s "EXPORTED_FUNCTIONS=['_mayo_init_buffers','_keypair_from_seed','_sign','_verify','_malloc','_free']" `
29
- -s "EXPORTED_RUNTIME_METHODS=['ccall','cwrap','HEAPU8']" `
28
+ -s "EXPORTED_FUNCTIONS=['_mayo_init_buffers','_keypair_from_seed','_sign','_verify','_malloc','_free','_get_msg_buf','_get_sig_buf','_get_sk_buf','_get_pk_buf','_get_sig_len']" `
29
+ -s "EXPORTED_RUNTIME_METHODS=['HEAPU8']" `
30
+ -s FILESYSTEM=0 `
30
31
  -s MODULARIZE=1 `
31
32
  -s EXPORT_NAME="Mayo2Module" `
32
33
  -s SINGLE_FILE=1 `