@@ -19,7 +19,7 @@ use crate::{BignP256, FieldBytes, NonZeroScalar, ProjectivePoint, PublicKey, Sca
1919use belt_hash:: { BeltHash , Digest } ;
2020use core:: fmt:: { self , Debug } ;
2121use elliptic_curve:: {
22- Curve , Field , FieldBytesEncoding , Generate , Group , PrimeField ,
22+ Curve , Field , FieldBytesEncoding , Generate , Group ,
2323 array:: { Array , sizes:: U32 , typenum:: Unsigned } ,
2424 ops:: Reduce ,
2525 point:: AffineCoordinates ,
@@ -109,39 +109,38 @@ impl PrehashSigner<Signature> for SigningKey {
109109 if prehash. len ( ) != <BignP256 as Curve >:: FieldBytesSize :: USIZE {
110110 return Err ( Error :: new ( ) ) ;
111111 }
112- let mut h_word: Array < u8 , U32 > = Array :: try_from ( prehash) . map_err ( |_| Error :: new ( ) ) ?;
113- h_word. reverse ( ) ;
112+ let h_word: Array < u8 , U32 > = Array :: try_from ( prehash) . map_err ( |_| Error :: new ( ) ) ?;
114113
115114 let h = Scalar :: reduce ( & h_word) ;
116115
117- //2. Generate 𝑘 ← rand(1,..,𝑞-1)
118- let k = Scalar :: from_repr ( rfc6979 :: generate_k :: < BeltHash , _ > (
119- & self . secret_scalar . to_repr ( ) ,
116+ // // 2. Generate 𝑘 ← rand(1,..,𝑞-1)
117+ let k = bign_genk :: generate_k :: < BeltHash , belt_block :: BeltBlock , _ > (
118+ & self . secret_scalar . to_bytes ( ) ,
120119 & FieldBytesEncoding :: < BignP256 > :: encode_field_bytes ( BignP256 :: ORDER . as_ref ( ) ) ,
121120 & h. to_bytes ( ) ,
122121 & [ ] ,
123- ) )
124- . unwrap ( ) ;
122+ ) ;
123+
124+ let k = Scalar :: from_bytes ( & k) . unwrap ( ) ;
125125
126126 // 3. Set 𝑅 ← 𝑘𝐺.
127- let mut R : Array < u8 , _ > = ProjectivePoint :: mul_by_generator ( & k) . to_affine ( ) . x ( ) ;
128- R . reverse ( ) ;
127+ let R = ProjectivePoint :: mul_by_generator ( & k) . to_affine ( ) ;
128+ let Rx = R . x ( ) ;
129129
130130 // 4. Set 𝑆0 ← ⟨︀belt-hash(OID(ℎ) ‖ ⟨𝑅⟩2𝑙 ‖ 𝐻)⟩︀_𝑙.
131131 let mut hasher = BeltHash :: new ( ) ;
132132 hasher. update ( BELT_OID ) ;
133- hasher. update ( R ) ;
133+ hasher. update ( Rx ) ;
134134 hasher. update ( prehash) ;
135135
136136 let mut s0 = hasher. finalize ( ) ;
137137 s0[ 16 ..] . fill ( 0x00 ) ;
138- s0. reverse ( ) ;
139138
140139 let s0_scalar = Scalar :: from_slice ( & s0) . ok_or_else ( Error :: new) ?;
141140
142141 let right = s0_scalar
143142 . add ( & Scalar :: from_u64 ( 2 ) . pow ( [ 128 , 0 , 0 , 0 ] ) )
144- . multiply ( self . as_nonzero_scalar ( ) ) ;
143+ . multiply ( & self . secret_scalar ) ;
145144
146145 // 5. Set 𝑆1 ← ⟨︀(𝑘 − 𝐻 − (𝑆0 + 2^𝑙)𝑑) mod 𝑞⟩︀_2𝑙.
147146 let s1 = k. sub ( & h) . sub ( & right) ;
0 commit comments