@@ -3,6 +3,7 @@ const BN = require('bn.js'); // TODO: remove? see changelog bn.js
3
3
const ANNEX_PREFIX = 0x50 ;
4
4
const EC_P = Buffer . from ( 'fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f' , 'hex' ) ;
5
5
const P = new BN ( EC_P ) ;
6
+ const P_REDUCTION = BN . red ( P ) ;
6
7
const P_QUADRATIC_RESIDUE = P . addn ( 1 ) . divn ( 4 ) ;
7
8
const BN_3 = new BN ( 3 ) ;
8
9
const BN_7 = new BN ( 7 ) ;
@@ -54,15 +55,16 @@ const leafVersion = controlBlock[0] & 0xfe;
54
55
55
56
56
57
function liftX ( b ) {
57
- console . log ( 'liftX IN' ) ;
58
58
// check if x instance of buffer and length 32
59
- const x = new BN ( b ) ;
59
+ const x = new BN ( b ) . toRed ( P_REDUCTION ) ;
60
60
if ( x . gte ( P ) ) return null ;
61
- const yy = x . pow ( BN_3 ) . add ( BN_7 ) . mod ( P ) ;
62
- // const y = yy.pow (P_QUADRATIC_RESIDUE).mod(P);
61
+ const ySq = x . redPow ( BN_3 ) . add ( BN_7 ) . mod ( P ) ;
62
+ const y = ySq . redPow ( P_QUADRATIC_RESIDUE ) . mod ( P ) ;
63
63
64
- console . log ( 'liftX OUT' ) ;
65
- return yy ;
64
+ console . log ( 'ySq' , ySq . toJSON ( ) ) ;
65
+ console . log ( 'y2' , y . redPow ( new BN ( 2 ) ) . mod ( P ) . toJSON ( ) ) ;
66
+ console . log ( 'y' , y . toJSON ( ) ) ;
67
+ return y ;
66
68
}
67
69
68
70
@@ -77,12 +79,11 @@ function liftX(b) {
77
79
// if (x >= p) return null;
78
80
// const yy = (x ** 3n + 7n) % p;
79
81
// // const y = (yy ** q) % p;
80
-
82
+
81
83
82
84
// console.log('liftX OUT');
83
85
// return yy;
84
86
// }
85
87
86
88
const x = '0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798' ;
87
- const y = liftX ( x ) ;
88
- console . log ( 'y' , y . toJSON ( ) ) ;
89
+ const y = liftX ( x ) ;
0 commit comments