Skip to content

Commit 6ebaa9b

Browse files
authored
feat: double method for FieldElement (#547)
1 parent 3b89b73 commit 6ebaa9b

File tree

5 files changed

+14
-14
lines changed

5 files changed

+14
-14
lines changed

starknet-accounts/tests/single_owner_account.rs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -298,11 +298,7 @@ async fn can_execute_tst_mint_inner<P: Provider + Send + Sync>(provider: P, addr
298298
Call {
299299
to: tst_token_address,
300300
selector: get_selector_from_name("mint").unwrap(),
301-
calldata: vec![
302-
address,
303-
random_amount * FieldElement::TWO,
304-
FieldElement::ZERO,
305-
],
301+
calldata: vec![address, random_amount.double(), FieldElement::ZERO],
306302
},
307303
])
308304
.send()

starknet-crypto-codegen/src/poseidon/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,8 @@ pub fn compress_roundkeys_partial(rcs: &[[FieldElement; 3]]) -> Vec<FieldElement
7575

7676
// MixLayer
7777
let t = state[0] + state[1] + state[2];
78-
state[0] = t + FieldElement::TWO * state[0];
79-
state[1] = t - FieldElement::TWO * state[1];
78+
state[0] = t + state[0].double();
79+
state[1] = t - state[1].double();
8080
state[2] = t - FieldElement::THREE * state[2];
8181

8282
idx += 1;

starknet-crypto/src/poseidon_hash.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,8 +119,8 @@ pub fn poseidon_permute_comp(state: &mut [FieldElement; 3]) {
119119
#[inline(always)]
120120
fn mix(state: &mut [FieldElement; 3]) {
121121
let t = state[0] + state[1] + state[2];
122-
state[0] = t + FieldElement::TWO * state[0];
123-
state[1] = t - FieldElement::TWO * state[1];
122+
state[0] = t + state[0].double();
123+
state[1] = t - state[1].double();
124124
state[2] = t - FieldElement::THREE * state[2];
125125
}
126126

starknet-curve/src/ec_point.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ impl AffinePoint {
4646
// l = (3x^2+a)/2y with a=1 from stark curve
4747
let lambda = {
4848
let dividend = FieldElement::THREE * (self.x * self.x) + FieldElement::ONE;
49-
let divisor_inv = (FieldElement::TWO * self.y).invert().unwrap();
49+
let divisor_inv = self.y.double().invert().unwrap();
5050
dividend * divisor_inv
5151
};
5252

@@ -167,14 +167,14 @@ impl ProjectivePoint {
167167

168168
// t=3x^2+az^2 with a=1 from stark curve
169169
let t = FieldElement::THREE * self.x * self.x + self.z * self.z;
170-
let u = FieldElement::TWO * self.y * self.z;
171-
let v = FieldElement::TWO * u * self.x * self.y;
172-
let w = t * t - FieldElement::TWO * v;
170+
let u = self.y.double() * self.z;
171+
let v = u.double() * self.x * self.y;
172+
let w = t * t - v.double();
173173

174174
let uy = u * self.y;
175175

176176
let x = u * w;
177-
let y = t * (v - w) - FieldElement::TWO * uy * uy;
177+
let y = t * (v - w) - (uy * uy).double();
178178
let z = u * u * u;
179179

180180
self.x = x;

starknet-ff/src/lib.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,10 @@ impl FieldElement {
268268
self.inner.sqrt().map(|inner| Self { inner })
269269
}
270270

271+
pub fn double(&self) -> FieldElement {
272+
*self + *self
273+
}
274+
271275
/// Performs a floor division. It's not implemented as the `Div` trait on purpose to
272276
/// distinguish from the "felt division".
273277
pub fn floor_div(&self, rhs: FieldElement) -> FieldElement {

0 commit comments

Comments
 (0)