]> git.codecow.com Git - libnemo.git/commitdiff
Avoid string conversion when casting bigint to 32-byte buffer.
authorChris Duncan <chris@zoso.dev>
Fri, 5 Dec 2025 14:49:03 +0000 (06:49 -0800)
committerChris Duncan <chris@zoso.dev>
Fri, 5 Dec 2025 14:49:03 +0000 (06:49 -0800)
src/lib/crypto/secp256k1.ts

index 98577604c1533dbb2ca52e04fff99402670aab66..9c95e4d4009946b5c2b8978ccffcfdc43f065d8b 100644 (file)
@@ -310,11 +310,13 @@ export class Secp256k1 {
 
        /** Number to 32b. Must be 0 <= num < 2²⁵⁶. validate, pad, to bytes. */
        static bigintTo32Bytes (num: bigint): Bytes {
-               return this.hexToBytes(this
-                       .bigintInRange(num, 0n, 2n ** 256n) // secp256k1 is weierstrass curve. Equation is x³ + ax + b.
-                       .toString(16)
-                       .padStart(this.L2, '0')
-               )
+               this.bigintInRange(num, 0n, 2n ** 256n) // secp256k1 is weierstrass curve. Equation is x³ + ax + b.
+               let len = this.L, bytes = new Uint8Array(len)
+               for (let i = len - 1; i >= 0; i--) {
+                       bytes[i] = Number(num & 0xffn)
+                       num >>= 8n
+               }
+               return bytes
        }
 
        /** Normalize private key to scalar (bigint). Verifies scalar is in range 1<s<N */