]> git.codecow.com Git - nano25519.git/commitdiff
Avoid writing seed to output buffer of derive since the private key bytes are discard...
authorChris Duncan <chris@codecow.com>
Fri, 14 Aug 2026 23:29:17 +0000 (16:29 -0700)
committerChris Duncan <chris@codecow.com>
Fri, 14 Aug 2026 23:29:17 +0000 (16:29 -0700)
src/assembly/index.ts
src/lib/nano25519.ts

index 51e1b6df214b006192759864c723baf3960c5e7b..da1d0ee786454d9b80df8aaf567754611c2040b1 100644 (file)
@@ -36,8 +36,7 @@ function crypto_derive (sk: StaticArray<u8>, seed: StaticArray<u8>): void {
        clamp(sk)\r
 \r
        ge_scalarmult_base_tobytes(pk, sk)\r
-       memory.copy(changetype<usize>(sk), changetype<usize>(seed), PRIVATEKEY_BYTES)\r
-       memory.copy(changetype<usize>(sk) + 32, changetype<usize>(pk), PUBLICKEY_BYTES)\r
+       memory.copy(changetype<usize>(sk), changetype<usize>(pk), PUBLICKEY_BYTES)\r
 }\r
 \r
 const crypto_sign_az = new StaticArray<u8>(64)\r
@@ -137,16 +136,14 @@ export function getMessagePointer (): usize {
 }\r
 \r
 /**\r
- * Derives a Nano public key from a private key and writes it to the static\r
- * output buffer. This mirrors the functionality of\r
- * `nacl.sign.keyPair.fromSeed()`, returning both private and public keys as a\r
- * concatenated `secretKey` property.\r
+ * Uses a private key to derive a Nano public key which is then written to the\r
+ * static output buffer.\r
  */\r
 export function derive (): void {\r
-       const sk = changetype<StaticArray<u8>>(OUTPUT_BUFFER)\r
+       const pk = changetype<StaticArray<u8>>(OUTPUT_BUFFER)\r
        const seed = changetype<StaticArray<u8>>(INPUT_BUFFER)\r
        memory.fill(OUTPUT_BUFFER, 0, SECRETKEY_BYTES)\r
-       crypto_derive(sk, seed)\r
+       crypto_derive(pk, seed)\r
        memory.fill(INPUT_BUFFER, 0, PRIVATEKEY_BYTES)\r
 }\r
 \r
index da2def55341a8b0d3b0c957575091f0026468697..ca2fe32b137b37cfc0e832629cb9650142650dc1 100644 (file)
@@ -85,7 +85,7 @@ export const nano25519_init = (bytes: number[]): { derive: typeof derive, sign:
                        const outPtr = exports.getOutputPointer()
                        buffer = new DataView(exports.memory.buffer)
                        for (let i = 0; i < 32; i++) {
-                               out[i] = buffer.getUint8(outPtr + i + 32)
+                               out[i] = buffer.getUint8(outPtr + i)
                        }
                        clear(buffer)
                        if (typeof k === 'string') {