]> git.codecow.com Git - nano25519.git/commitdiff
Add libsodium to test comparisons.
authorChris Duncan <chris@zoso.dev>
Thu, 26 Feb 2026 03:31:25 +0000 (19:31 -0800)
committerChris Duncan <chris@zoso.dev>
Thu, 26 Feb 2026 03:31:25 +0000 (19:31 -0800)
index.html

index 874de6e4227020edbfdfe6de42c937eff6675f5e..581c3d4db1f680689d0a8a8f922cfe19cadfd0ef 100644 (file)
@@ -8,9 +8,13 @@ SPDX-License-Identifier: GPL-3.0-or-later
 <head>
        <meta charset="utf-8">
        <link rel="icon" href="data:,">
+       <script src="https://unpkg.com/libsodium@0.8.2/dist/modules/libsodium.js"></script>
+       <script src="https://unpkg.com/libsodium-wrappers@0.8.2/dist/modules/libsodium-wrappers.js"></script>
        <script src="https://unpkg.com/nanocurrency-web@1.4.3/dist/index.min.js"></script>
        <script src="https://unpkg.com/tweetnacl@1.0.3/nacl-fast.js"></script>
        <script type="module">
+               await libsodium.ready
+               await sodium.ready
                let NanoNaCl, TEST_VECTORS
                try {
                        NanoNaCl = await import('./dist/browser.js')
@@ -120,6 +124,10 @@ SPDX-License-Identifier: GPL-3.0-or-later
                                        case 'NanocurrencyWeb': {
                                                return NanocurrencyWeb.wallet.legacyAccounts(sk)[0].publicKey
                                        }
+                                       case 'Sodium': {
+                                               const sk8 = sk.match(/.{2}/g).map(b => parseInt(b, 16))
+                                               return sodium.crypto_sign_seed_keypair(new Uint8Array(sk8), 'hex').publicKey
+                                       }
                                        case 'TweetNaCl.js': {
                                                const sk8 = sk.match(/.{2}/g).map(b => parseInt(b, 16))
                                                const pk8 = nacl.sign.keyPair.fromSeed(new Uint8Array(sk8)).publicKey
@@ -139,6 +147,12 @@ SPDX-License-Identifier: GPL-3.0-or-later
                                                const { privateKey } = NanocurrencyWeb.wallet.legacyAccounts(sk)[0]
                                                return NanocurrencyWeb.tools.sign(privateKey, h)
                                        }
+                                       case 'Sodium': {
+                                               sk = sk + pk
+                                               const h8 = h.match(/.{2}/g).map(b => parseInt(b, 16))
+                                               const sk8 = sk.match(/.{2}/g).map(b => parseInt(b, 16))
+                                               return sodium.crypto_sign_detached(new Uint8Array(h8), new Uint8Array(sk8), 'hex')
+                                       }
                                        case 'TweetNaCl.js': {
                                                sk = sk + pk
                                                const h8 = h.match(/.{2}/g).map(b => parseInt(b, 16))
@@ -159,6 +173,12 @@ SPDX-License-Identifier: GPL-3.0-or-later
                                        case 'NanocurrencyWeb': {
                                                return NanocurrencyWeb.tools.verify(pk, s, h)
                                        }
+                                       case 'Sodium': {
+                                               const h8 = h.match(/.{2}/g).map(b => parseInt(b, 16))
+                                               const s8 = s.match(/.{2}/g).map(b => parseInt(b, 16))
+                                               const pk8 = pk.match(/.{2}/g).map(b => parseInt(b, 16))
+                                               return sodium.crypto_sign_verify_detached(new Uint8Array(s8), new Uint8Array(h8), new Uint8Array(pk8))
+                                       }
                                        case 'TweetNaCl.js': {
                                                const h8 = h.match(/.{2}/g).map(b => parseInt(b, 16))
                                                const s8 = s.match(/.{2}/g).map(b => parseInt(b, 16))
@@ -353,6 +373,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
                <select id="api">
                        <option>NanoNaCl</option>
                        <option>NanocurrencyWeb</option>
+                       <option>Sodium</option>
                        <option>TweetNaCl.js</option>
                </select>
        </span>