]> zoso.dev Git - libnemo.git/commitdiff
Export keyPair as proper object and update its original implementation as a function...
authorChris Duncan <chris@zoso.dev>
Mon, 25 Nov 2024 22:37:21 +0000 (14:37 -0800)
committerChris Duncan <chris@zoso.dev>
Mon, 25 Nov 2024 22:37:21 +0000 (14:37 -0800)
src/lib/account.ts
src/lib/block.ts
src/lib/tools.ts
src/lib/workers/nacl-nano.ts

index 0fde3e87c4e83d975466acbf4ab9ad647d720456..9ad147b09b50a4f87e8ae3ea32bcbc79eb8fc870 100644 (file)
@@ -6,7 +6,7 @@ import { ACCOUNT_KEY_LENGTH, ALPHABET, PREFIX, PREFIX_LEGACY } from './constants
 import { base32, bytes, hex } from './convert.js'\r
 import { Rpc } from './rpc.js'\r
 import { Safe } from './safe.js'\r
-import * as Ed25519 from './workers/nacl-nano.js'\r
+import { nacl } from './workers/nacl-nano.js'\r
 \r
 /**\r
 * Represents a single Nano address and the associated public key. To include the\r
@@ -87,7 +87,7 @@ export class Account {
        */\r
        static async fromPrivateKey (key: string, index?: number): Promise<Account> {\r
                Account.#validateKey(key)\r
-               const { publicKey } = Ed25519.keyPair.fromSeed(hex.toBytes(key))\r
+               const { publicKey } = nacl.keyPair.fromSeed(hex.toBytes(key))\r
                const account = await Account.fromPublicKey(bytes.toHex(publicKey), index)\r
                account.#prv = key.toUpperCase()\r
                return account\r
index af96d8abd802e99fd69ccf5fc3ac3725a6bb560c..7084c76cb3c6910cffaa37f02c1d2dd551ddf722 100644 (file)
@@ -6,7 +6,7 @@ import { Account } from './account.js'
 import { bytes, dec, hex } from './convert.js'
 import { Rpc } from './rpc.js'
 import Tools from './tools.js'
-import * as Ed25519 from './workers/nacl-nano.js'
+import { nacl } from './workers/nacl-nano.js'
 
 /**
 * Represents a block as defined by the Nano cryptocurrency protocol. The Block
@@ -141,7 +141,7 @@ abstract class Block {
                        }
                        const account = await Account.fromPrivateKey(key)
                        try {
-                               const signature = Ed25519.sign(
+                               const signature = nacl.sign(
                                        hex.toBytes(await this.hash()),
                                        hex.toBytes(`${account.privateKey}${account.publicKey}`)
                                )
@@ -201,7 +201,7 @@ abstract class Block {
                        this.link
                ]
                const hash = await Tools.hash(data, 'hex')
-               return Ed25519.verify(
+               return nacl.verify(
                        hex.toBytes(hash),
                        hex.toBytes(this.signature ?? ''),
                        hex.toBytes(key)
index 854e3537bd900c3e428206d0ef835b1bafb1cf30..b70fad166ccdba4b072632d84f40a250ef10d64f 100644 (file)
@@ -8,7 +8,7 @@ import { bytes, hex } from './convert.js'
 import { Rpc } from './rpc.js'
 import { Bip44Wallet, Blake2bWallet, LedgerWallet } from './wallet.js'
 import { SendBlock } from './block.js'
-import * as Ed25519 from './workers/nacl-nano.js'
+import { nacl } from './workers/nacl-nano.js'
 
 /**
 * Converts a decimal amount of nano from one unit divider to another.
@@ -88,7 +88,7 @@ export async function hash (data: string | string[], encoding?: 'hex'): Promise<
 export async function sign (key: string, ...input: string[]): Promise<string> {
        const account = await Account.fromPrivateKey(key)
        const data = await hash(input)
-       const signature = Ed25519.sign(
+       const signature = nacl.sign(
                hex.toBytes(data),
                hex.toBytes(`${account.privateKey}${account.publicKey}`))
        return bytes.toHex(signature.subarray(0, 64))
@@ -159,7 +159,7 @@ export async function sweep (rpc: Rpc | string | URL, wallet: Blake2bWallet | Bi
 */
 export async function verify (key: string, signature: string, ...input: string[]): Promise<boolean> {
        const data = await hash(input)
-       return Ed25519.verify(
+       return nacl.verify(
                hex.toBytes(data),
                hex.toBytes(signature),
                hex.toBytes(key))
index 15e13db388106b021c7bdc536f2a75fe817010ae..7bac2400c54021029e214cb88f8fd7bd40df7941 100644 (file)
@@ -770,64 +770,65 @@ function cleanup(arr) {
 }\r
 \r
 export const sign = function(msg, secretKey) {\r
-               checkArrayTypes(msg, secretKey);\r
-               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
-               return signedMsg;\r
+       checkArrayTypes(msg, secretKey);\r
+       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
+       return signedMsg;\r
 };\r
 \r
 export const open = function(signedMsg, publicKey) {\r
-               checkArrayTypes(signedMsg, publicKey);\r
-               if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\r
-                       throw new Error('bad public key size');\r
-               var tmp = new Uint8Array(signedMsg.length);\r
-               var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey);\r
-               if (mlen < 0) return null;\r
-               var m = new Uint8Array(mlen);\r
-               for (var i = 0; i < m.length; i++) m[i] = tmp[i];\r
-               return m;\r
+       checkArrayTypes(signedMsg, publicKey);\r
+       if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\r
+               throw new Error('bad public key size');\r
+       var tmp = new Uint8Array(signedMsg.length);\r
+       var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey);\r
+       if (mlen < 0) return null;\r
+       var m = new Uint8Array(mlen);\r
+       for (var i = 0; i < m.length; i++) m[i] = tmp[i];\r
+       return m;\r
 };\r
 \r
 export const detached = function(msg, secretKey) {\r
-               var signedMsg = sign(msg, secretKey);\r
-               var sig = new Uint8Array(crypto_sign_BYTES);\r
-               for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i];\r
-               return sig;\r
+       var signedMsg = sign(msg, secretKey);\r
+       var sig = new Uint8Array(crypto_sign_BYTES);\r
+       for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i];\r
+       return sig;\r
 };\r
 \r
 export const verify = function(msg, sig, publicKey) {\r
-               checkArrayTypes(msg, sig, publicKey);\r
-               if (sig.length !== crypto_sign_BYTES)\r
-                       throw new Error('bad signature size');\r
-               if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\r
-                       throw new Error('bad public key size');\r
-               var sm = new Uint8Array(crypto_sign_BYTES + msg.length);\r
-               var m = new Uint8Array(crypto_sign_BYTES + msg.length);\r
-               var i;\r
-               for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i];\r
-               for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i];\r
-               return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0);\r
+       checkArrayTypes(msg, sig, publicKey);\r
+       if (sig.length !== crypto_sign_BYTES)\r
+               throw new Error('bad signature size');\r
+       if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\r
+               throw new Error('bad public key size');\r
+       var sm = new Uint8Array(crypto_sign_BYTES + msg.length);\r
+       var m = new Uint8Array(crypto_sign_BYTES + msg.length);\r
+       var i;\r
+       for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i];\r
+       for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i];\r
+       return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0);\r
 };\r
 \r
-export const keyPair = function() {\r
+export const keyPair = {\r
+       create() {\r
                var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\r
                var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\r
                crypto_sign_keypair(pk, sk);\r
                return {publicKey: pk, secretKey: sk};\r
-};\r
+       },\r
 \r
-keyPair.fromSecretKey = function(secretKey) {\r
+       fromSecretKey(secretKey) {\r
                checkArrayTypes(secretKey);\r
                if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\r
                throw new Error('bad secret key size');\r
                var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\r
                for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i];\r
                return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\r
-};\r
+       },\r
 \r
-keyPair.fromSeed = function(seed) {\r
+       fromSeed(seed) {\r
                checkArrayTypes(seed);\r
                if (seed.length !== crypto_sign_SEEDBYTES)\r
                        throw new Error('bad seed size');\r
@@ -836,7 +837,8 @@ keyPair.fromSeed = function(seed) {
                for (var i = 0; i < 32; i++) sk[i] = seed[i];\r
                crypto_sign_keypair(pk, sk, true);\r
                return {publicKey: pk, secretKey: sk};\r
-};\r
+       }\r
+}\r
 \r
 export const publicKeyLength = crypto_sign_PUBLICKEYBYTES;\r
 export const secretKeyLength = crypto_sign_SECRETKEYBYTES;\r
@@ -874,3 +876,5 @@ const setPRNG = function(fn) {
                }\r
        }\r
 })();\r
+\r
+export const nacl = { sign, open, detached, verify, keyPair, publicKeyLength, secretKeyLength, seedLength, signatureLength }
\ No newline at end of file