86
86
* GLOBAL VARIABLES
87
87
*****************************************************************************/
88
88
stark_curve stark256 = {
89
- .P = /* .prime */ {/*.val =*/ {0x3ffffc2f ,
90
- 0x3ffffffb ,
91
- 0x3fffffff ,
92
- 0x3fffffff ,
93
- 0x3fffffff ,
94
- 0x3fffffff ,
95
- 0x3fffffff ,
96
- 0x3fffffff ,
97
- 0xffff }},
89
+ .prime = /* .prime */ {/*.val =*/ {0x3ffffc2f ,
90
+ 0x3ffffffb ,
91
+ 0x3fffffff ,
92
+ 0x3fffffff ,
93
+ 0x3fffffff ,
94
+ 0x3fffffff ,
95
+ 0x3fffffff ,
96
+ 0x3fffffff ,
97
+ 0xffff }},
98
98
99
99
// /* G */
100
100
// {/*.x =*/{/*.val =*/{0x16f81798,
@@ -144,14 +144,16 @@ stark_curve stark256 = {
144
144
// /* b */ {/*.val =*/{7}}
145
145
};
146
146
147
+ stark_pedersen pedersen ;
148
+
147
149
/*****************************************************************************
148
150
* STATIC FUNCTIONS
149
151
*****************************************************************************/
150
152
151
153
/*****************************************************************************
152
154
* GLOBAL FUNCTIONS
153
155
*****************************************************************************/
154
- void stark_curve_init () {
156
+ void starknet_curve_init () {
155
157
char str [65 ] = "" ;
156
158
157
159
/* stark_curve_params ref:
@@ -208,55 +210,74 @@ void stark_curve_init() {
208
210
"06f21413efbe40de150e596d72f7a8c5609ad26c15c915c1f4cdfcb99cee9e89" ,
209
211
STARK_BN_LEN );
210
212
213
+ print_stark_curve ();
214
+ }
215
+
216
+ void starknet_pedersen_init () {
217
+ // Ref: https://docs.starkware.co/starkex/crypto/pedersen-hash-function.html
218
+ char str [65 ] = "" ;
219
+
211
220
// Shift_point
212
221
// x
213
222
bignum_from_string (
214
- & stark256 . S .x ,
215
- "0234287dcbaffe7f969c748655fca9e58fa8120b6d56eb0c1080d17957ebe47b " ,
223
+ & pedersen . P [ 0 ] .x ,
224
+ "049ee3eba8c1600700ee1b87eb599f16716b0b1022947733551fde4050ca6804 " ,
216
225
STARK_BN_LEN );
217
226
// y
218
227
bignum_from_string (
219
- & stark256 . S .y ,
220
- "03b056f100f96fb21e889527d41f4e39940135dd7a6c94cc6ed0268ee89e5615 " ,
228
+ & pedersen . P [ 0 ] .y ,
229
+ "3ca0cfe4b3bc6ddf346d49d06ea0ed34e621062c0e056c1d0405d266e10268a " ,
221
230
STARK_BN_LEN );
222
231
223
232
// Perderen_point_1
224
233
// x
225
234
bignum_from_string (
226
- & stark256 .P [0 ].x ,
227
- "04fa56f376c83db33f9dab2656558f3399099ec1de5e3018b7a6932dba8aa378 " ,
235
+ & pedersen .P [1 ].x ,
236
+ "0234287dcbaffe7f969c748655fca9e58fa8120b6d56eb0c1080d17957ebe47b " ,
228
237
STARK_BN_LEN );
229
238
// y
230
239
bignum_from_string (
231
- & stark256 .P [0 ].y ,
232
- "03fa0984c931c9e38113e0c0e47e4401562761f92a7a23b45168f4e80ff5b54d " ,
240
+ & pedersen .P [1 ].y ,
241
+ "03b056f100f96fb21e889527d41f4e39940135dd7a6c94cc6ed0268ee89e5615 " ,
233
242
STARK_BN_LEN );
234
243
235
244
// Perderen_point_2
236
245
// x
237
246
bignum_from_string (
238
- & stark256 .P [1 ].x ,
247
+ & pedersen .P [2 ].x ,
239
248
"04ba4cc166be8dec764910f75b45f74b40c690c74709e90f3aa372f0bd2d6997" ,
240
249
STARK_BN_LEN );
241
250
// y
242
251
bignum_from_string (
243
- & stark256 .P [1 ].y ,
252
+ & pedersen .P [2 ].y ,
244
253
"0040301cf5c1751f4b971e46c4ede85fcac5c59a5ce5ae7c48151f27b24b219c" ,
245
254
STARK_BN_LEN );
246
255
247
256
// Perderen_point_3
248
257
// x
249
258
bignum_from_string (
250
- & stark256 .P [2 ].x ,
259
+ & pedersen .P [3 ].x ,
251
260
"054302dcb0e6cc1c6e44cca8f61a63bb2ca65048d53fb325d36ff12c49a58202" ,
252
261
STARK_BN_LEN );
253
262
// y
254
263
bignum_from_string (
255
- & stark256 .P [2 ].y ,
264
+ & pedersen .P [3 ].y ,
256
265
"01b77b3e37d13504b348046268d8ae25ce98ad783c25561a879dcc77e99c2426" ,
257
266
STARK_BN_LEN );
258
267
259
- print_stark_curve ();
268
+ // Perderen_point_4
269
+ // x
270
+ bignum_from_string (
271
+ & pedersen .P [4 ].x ,
272
+ "004FA56F376C83DB33F9DAB2656558F3399099EC1DE5E3018B7A6932DBA8AA378" ,
273
+ STARK_BN_LEN );
274
+ // y
275
+ bignum_from_string (
276
+ & pedersen .P [4 ].y ,
277
+ "003FA0984C931C9E38113E0C0E47E4401562761F92A7A23B45168F4E80FF5B54D" ,
278
+ STARK_BN_LEN );
279
+
280
+ print_stark_perdersen ();
260
281
}
261
282
262
283
void print_stark_curve () {
@@ -281,17 +302,16 @@ void print_stark_curve() {
281
302
282
303
bignum_to_string (& stark256 .b , str , STARK_BN_LEN );
283
304
print_hex_array ("Beta" , str , STARK_BN_LEN / 2 );
305
+ }
284
306
285
- bignum_to_string (& stark256 .S .x , str , STARK_BN_LEN );
286
- print_hex_array ("S (Shift Point) x" , str , STARK_BN_LEN / 2 );
287
- bignum_to_string (& stark256 .S .y , str , STARK_BN_LEN );
288
- print_hex_array ("S (Shift Point) y" , str , STARK_BN_LEN / 2 );
307
+ void print_stark_perdersen () {
308
+ char str [STARK_BN_LEN ];
289
309
290
- for (int i = 0 ; i < 3 ; i ++ ) {
291
- bignum_to_string (& stark256 .P [i ].x , str , STARK_BN_LEN );
310
+ for (int i = 0 ; i < 5 ; i ++ ) {
311
+ bignum_to_string (& pedersen .P [i ].x , str , STARK_BN_LEN );
292
312
print_hex_array ("P (Pedersen Point) x" , str , STARK_BN_LEN / 2 );
293
313
294
- bignum_to_string (& stark256 .P [i ].y , str , STARK_BN_LEN );
314
+ bignum_to_string (& pedersen .P [i ].y , str , STARK_BN_LEN );
295
315
print_hex_array ("P (Pedersen Point) y" , str , STARK_BN_LEN / 2 );
296
316
}
297
317
}
@@ -304,7 +324,8 @@ void stark_point_copy(const stark_point *cp1, stark_point *cp2) {
304
324
// cp2 = cp1 + cp2
305
325
void stark_point_add (const stark_curve * curve ,
306
326
const stark_point * cp1 ,
307
- stark_point * cp2 ) {
327
+ stark_point * cp2 ,
328
+ stark_point * res ) {
308
329
struct bn lambda = {0 }, inv = {0 }, xr = {0 }, yr = {0 };
309
330
310
331
if (stark_point_is_infinity (cp1 )) {
@@ -341,6 +362,8 @@ void stark_point_add(const stark_curve *curve,
341
362
342
363
cp2 -> x = xr ;
343
364
cp2 -> y = yr ;
365
+
366
+ stark_point_copy (cp2 , res );
344
367
}
345
368
346
369
// set point to internal representation of point at infinity
@@ -390,7 +413,7 @@ void private_to_public_key(const uint8_t *private, uint8_t *public_65) {
390
413
int bit = 7 - (i % 8 );
391
414
if (private [offset ] & (1 << bit )) {
392
415
// bit is set; do add current doubled value to result
393
- stark_point_add (curve , & temp , & R );
416
+ stark_point_add (curve , & temp , & R , & R );
394
417
}
395
418
// stark_point_double(curve, &temp);
396
419
}
0 commit comments