]> zoso.dev Git - libnemo.git/commitdiff
Fix public key aspect of signing function, specific to Nano.
authorChris Duncan <chris@zoso.dev>
Wed, 4 Dec 2024 20:24:01 +0000 (12:24 -0800)
committerChris Duncan <chris@zoso.dev>
Thu, 5 Dec 2024 13:27:10 +0000 (05:27 -0800)
src/lib/block.ts
src/lib/nano-nacl.ts
src/lib/tools.ts

index ccb7cfd6d4e5d6d249b1b43d602fa5bbfca6c4df..58ee6fda375a534c33d20dd7bb03f62cbd9f7ccb 100644 (file)
@@ -143,7 +143,7 @@ abstract class Block {
                        try {
                                const signature = NanoNaCl.detached(
                                        hex.toBytes(await this.hash()),
-                                       hex.toBytes(`${account.privateKey}${account.publicKey}`)
+                                       hex.toBytes(`${account.privateKey}`)
                                )
                                this.signature = signature
                        } catch (err) {
index c39597485482e7120913bd2047471c937fa9f1d9..dffd50ed366329664b95ff6e2d2ed6d583cfd968 100644 (file)
@@ -659,7 +659,7 @@ const n = () => {
        }\r
 \r
        // Note: difference from C - smlen returned, not passed as argument.\r
-       function crypto_sign (sm: Uint8Array, m: Uint8Array, n: number, sk: Uint8Array): number {\r
+       function crypto_sign (sm: Uint8Array, m: Uint8Array, n: number, sk: Uint8Array, pk: Uint8Array): number {\r
                const d = new Uint8Array(64)\r
                const h = new Uint8Array(64)\r
                const r = new Uint8Array(64)\r
@@ -680,7 +680,7 @@ const n = () => {
                scalarbase(p, r)\r
                pack(sm, p)\r
 \r
-               for (let i = 32; i < 64; i++) sm[i] = sk[i]\r
+               for (let i = 0; i < 32; i++) sm[i + 32] = pk[i]\r
                crypto_hash(h, sm, n + 64)\r
                reduce(h)\r
 \r
@@ -770,7 +770,7 @@ const n = () => {
 \r
        const crypto_sign_BYTES = 64\r
        const crypto_sign_PUBLICKEYBYTES = 32\r
-       const crypto_sign_SECRETKEYBYTES = 64\r
+       const crypto_sign_SECRETKEYBYTES = 32\r
        const crypto_sign_SEEDBYTES = 32\r
 \r
        /* High-level API */\r
@@ -805,7 +805,8 @@ const n = () => {
                if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\r
                        throw new Error('bad secret key size')\r
                var signedMsg = new Uint8Array(crypto_sign_BYTES + msg.length)\r
-               crypto_sign(signedMsg, msg, msg.length, secretKey)\r
+               const publicKey = parseHex(convert(secretKey))\r
+               crypto_sign(signedMsg, msg, msg.length, secretKey, publicKey)\r
                return signedMsg\r
        }\r
 \r
index 5db26194713b3a4e0bdd34ce3f2a4dd3ad88da0e..0fa8a7ad952ff2276f1ad80daa859d51956b17fd 100644 (file)
@@ -82,9 +82,10 @@ export async function convert (amount: bigint | string, inputUnit: string, outpu
 export async function sign (key: string, ...input: string[]): Promise<string> {
        const account = await Account.fromPrivateKey(key)
        const data = hash(input)
-       return NanoNaCl.detached(
+       const signature = NanoNaCl.detached(
                hex.toBytes(data),
-               hex.toBytes(`${account.privateKey}${account.publicKey}`))
+               hex.toBytes(`${account.privateKey}`))
+       return signature
 }
 
 /**