@@ -5,24 +5,20 @@ import { assertBool, assertBytes, hexToBytes, toHex } from "./utils";
5
5
// Use `secp256k1` module directly.
6
6
// This is a legacy compatibility layer for the npm package `secp256k1` via noble-secp256k1
7
7
8
- // Copy-paste from secp256k1, maybe export it?
9
- const bytesToNumber = ( bytes : Uint8Array ) => hexToNumber ( toHex ( bytes ) ) ;
10
- const numberToHex = ( num : number | bigint ) =>
11
- num . toString ( 16 ) . padStart ( 64 , "0" ) ;
12
- const numberToBytes = ( num : number | bigint ) => hexToBytes ( numberToHex ( num ) ) ;
13
-
14
8
function hexToNumber ( hex : string ) : bigint {
15
9
if ( typeof hex !== "string" ) {
16
10
throw new TypeError ( "hexToNumber: expected string, got " + typeof hex ) ;
17
11
}
18
12
return BigInt ( `0x${ hex } ` ) ;
19
13
}
20
14
21
- // Calculates a modulo b
22
- function mod ( a : bigint , b : bigint = secp . CURVE . P ) : bigint {
23
- const result = a % b ;
24
- return result >= 0 ? result : b + result ;
25
- }
15
+ // Copy-paste from secp256k1, maybe export it?
16
+ const bytesToNumber = ( bytes : Uint8Array ) => hexToNumber ( toHex ( bytes ) ) ;
17
+ const numberToHex = ( num : number | bigint ) =>
18
+ num . toString ( 16 ) . padStart ( 64 , "0" ) ;
19
+ const numberToBytes = ( num : number | bigint ) => hexToBytes ( numberToHex ( num ) ) ;
20
+ const { mod } = secp . utils ;
21
+
26
22
const ORDER = secp . CURVE . n ;
27
23
28
24
type Output = Uint8Array | ( ( len : number ) => Uint8Array ) ;
@@ -165,23 +161,23 @@ export function privateKeyTweakAdd(
165
161
) : Uint8Array {
166
162
assertBytes ( privateKey , 32 ) ;
167
163
assertBytes ( tweak , 32 ) ;
168
- let bn = bytesToNumber ( tweak ) ;
169
- if ( bn === 0n ) {
164
+ let t = bytesToNumber ( tweak ) ;
165
+ if ( t === 0n ) {
170
166
throw new Error ( "Tweak must not be zero" ) ;
171
167
}
172
- if ( bn >= ORDER ) {
168
+ if ( t >= ORDER ) {
173
169
throw new Error ( "Tweak bigger than curve order" ) ;
174
170
}
175
- bn += bytesToNumber ( privateKey ) ;
176
- if ( bn >= ORDER ) {
177
- bn -= ORDER ;
171
+ t += bytesToNumber ( privateKey ) ;
172
+ if ( t >= ORDER ) {
173
+ t -= ORDER ;
178
174
}
179
- if ( bn === 0n ) {
175
+ if ( t === 0n ) {
180
176
throw new Error (
181
177
"The tweak was out of range or the resulted private key is invalid"
182
178
) ;
183
179
}
184
- privateKey . set ( hexToBytes ( numberToHex ( bn ) ) ) ;
180
+ privateKey . set ( hexToBytes ( numberToHex ( t ) ) ) ;
185
181
return privateKey ;
186
182
}
187
183
0 commit comments