@@ -3,118 +3,89 @@ use lambdaworks_math::elliptic_curve::short_weierstrass::curves::bls12_381::fiel
3
3
use lambdaworks_math:: elliptic_curve:: short_weierstrass:: curves:: bn_254:: field_extension:: BN254PrimeField ;
4
4
use lambdaworks_math:: field:: element:: FieldElement ;
5
5
use lambdaworks_math:: field:: traits:: IsPrimeField ;
6
- use lambdaworks_math:: traits:: ByteConversion ;
7
6
8
7
use crate :: ecip:: curve:: { SECP256K1PrimeField , SECP256R1PrimeField , X25519PrimeField } ;
9
8
use crate :: ecip:: ff:: FF ;
10
9
use crate :: ecip:: g1point:: G1Point ;
11
10
use crate :: ecip:: rational_function:: FunctionFelt ;
12
11
use crate :: ecip:: rational_function:: RationalFunction ;
12
+ use crate :: io:: parse_field_elements_from_list;
13
13
14
14
use num_bigint:: { BigInt , BigUint , ToBigInt } ;
15
15
16
16
use super :: curve:: CurveParamsProvider ;
17
17
18
18
pub fn zk_ecip_hint (
19
- list_bytes : Vec < Vec < u8 > > ,
19
+ list_values : Vec < BigUint > ,
20
20
list_scalars : Vec < BigUint > ,
21
21
curve_id : usize ,
22
22
) -> Result < [ Vec < String > ; 5 ] , String > {
23
23
match curve_id {
24
24
0 => {
25
- let list_felts: Vec < FieldElement < BN254PrimeField > > = list_bytes
26
- . into_iter ( )
27
- . map ( |x| {
28
- FieldElement :: < BN254PrimeField > :: from_bytes_be ( & x)
29
- . map_err ( |e| format ! ( "Byte conversion error: {:?}" , e) )
30
- } )
31
- . collect :: < Result < Vec < FieldElement < BN254PrimeField > > , _ > > ( ) ?;
25
+ let list_felts = parse_field_elements_from_list :: < BN254PrimeField > ( & list_values) ?;
32
26
33
27
let points: Vec < G1Point < BN254PrimeField > > = list_felts
34
28
. chunks ( 2 )
35
29
. map ( |chunk| G1Point :: new ( chunk[ 0 ] . clone ( ) , chunk[ 1 ] . clone ( ) ) )
36
30
. collect ( ) ;
37
31
38
- let scalars : Vec < Vec < i8 > > = extract_scalars :: < BN254PrimeField > ( list_scalars) ;
39
- Ok ( run_ecip :: < BN254PrimeField > ( points, scalars ) )
32
+ let dss : Vec < Vec < i8 > > = construct_digits_vectors :: < BN254PrimeField > ( list_scalars) ;
33
+ Ok ( run_ecip :: < BN254PrimeField > ( points, dss ) )
40
34
}
41
35
1 => {
42
- let list_felts: Vec < FieldElement < BLS12381PrimeField > > = list_bytes
43
- . into_iter ( )
44
- . map ( |x| {
45
- FieldElement :: < BLS12381PrimeField > :: from_bytes_be ( & x)
46
- . map_err ( |e| format ! ( "Byte conversion error: {:?}" , e) )
47
- } )
48
- . collect :: < Result < Vec < FieldElement < BLS12381PrimeField > > , _ > > ( ) ?;
36
+ let list_felts = parse_field_elements_from_list :: < BLS12381PrimeField > ( & list_values) ?;
49
37
50
38
let points: Vec < G1Point < BLS12381PrimeField > > = list_felts
51
39
. chunks ( 2 )
52
40
. map ( |chunk| G1Point :: new ( chunk[ 0 ] . clone ( ) , chunk[ 1 ] . clone ( ) ) )
53
41
. collect ( ) ;
54
42
55
- let scalars : Vec < Vec < i8 > > = extract_scalars :: < BLS12381PrimeField > ( list_scalars) ;
56
- Ok ( run_ecip :: < BLS12381PrimeField > ( points, scalars ) )
43
+ let dss : Vec < Vec < i8 > > = construct_digits_vectors :: < BLS12381PrimeField > ( list_scalars) ;
44
+ Ok ( run_ecip :: < BLS12381PrimeField > ( points, dss ) )
57
45
}
58
46
2 => {
59
- let list_felts: Vec < FieldElement < SECP256K1PrimeField > > = list_bytes
60
- . into_iter ( )
61
- . map ( |x| {
62
- FieldElement :: < SECP256K1PrimeField > :: from_bytes_be ( & x)
63
- . map_err ( |e| format ! ( "Byte conversion error: {:?}" , e) )
64
- } )
65
- . collect :: < Result < Vec < FieldElement < SECP256K1PrimeField > > , _ > > ( ) ?;
47
+ let list_felts = parse_field_elements_from_list :: < SECP256K1PrimeField > ( & list_values) ?;
66
48
67
49
let points: Vec < G1Point < SECP256K1PrimeField > > = list_felts
68
50
. chunks ( 2 )
69
51
. map ( |chunk| G1Point :: new ( chunk[ 0 ] . clone ( ) , chunk[ 1 ] . clone ( ) ) )
70
52
. collect ( ) ;
71
53
72
- let scalars : Vec < Vec < i8 > > = extract_scalars :: < SECP256K1PrimeField > ( list_scalars) ;
73
- Ok ( run_ecip :: < SECP256K1PrimeField > ( points, scalars ) )
54
+ let dss : Vec < Vec < i8 > > = construct_digits_vectors :: < SECP256K1PrimeField > ( list_scalars) ;
55
+ Ok ( run_ecip :: < SECP256K1PrimeField > ( points, dss ) )
74
56
}
75
57
3 => {
76
- let list_felts: Vec < FieldElement < SECP256R1PrimeField > > = list_bytes
77
- . into_iter ( )
78
- . map ( |x| {
79
- FieldElement :: < SECP256R1PrimeField > :: from_bytes_be ( & x)
80
- . map_err ( |e| format ! ( "Byte conversion error: {:?}" , e) )
81
- } )
82
- . collect :: < Result < Vec < FieldElement < SECP256R1PrimeField > > , _ > > ( ) ?;
58
+ let list_felts = parse_field_elements_from_list :: < SECP256R1PrimeField > ( & list_values) ?;
83
59
84
60
let points: Vec < G1Point < SECP256R1PrimeField > > = list_felts
85
61
. chunks ( 2 )
86
62
. map ( |chunk| G1Point :: new ( chunk[ 0 ] . clone ( ) , chunk[ 1 ] . clone ( ) ) )
87
63
. collect ( ) ;
88
64
89
- let scalars : Vec < Vec < i8 > > = extract_scalars :: < SECP256R1PrimeField > ( list_scalars) ;
90
- Ok ( run_ecip :: < SECP256R1PrimeField > ( points, scalars ) )
65
+ let dss : Vec < Vec < i8 > > = construct_digits_vectors :: < SECP256R1PrimeField > ( list_scalars) ;
66
+ Ok ( run_ecip :: < SECP256R1PrimeField > ( points, dss ) )
91
67
}
92
68
4 => {
93
- let list_felts: Vec < FieldElement < X25519PrimeField > > = list_bytes
94
- . into_iter ( )
95
- . map ( |x| {
96
- FieldElement :: < X25519PrimeField > :: from_bytes_be ( & x)
97
- . map_err ( |e| format ! ( "Byte conversion error: {:?}" , e) )
98
- } )
99
- . collect :: < Result < Vec < FieldElement < X25519PrimeField > > , _ > > ( ) ?;
69
+ let list_felts = parse_field_elements_from_list :: < X25519PrimeField > ( & list_values) ?;
100
70
101
71
let points: Vec < G1Point < X25519PrimeField > > = list_felts
102
72
. chunks ( 2 )
103
73
. map ( |chunk| G1Point :: new ( chunk[ 0 ] . clone ( ) , chunk[ 1 ] . clone ( ) ) )
104
74
. collect ( ) ;
105
75
106
- let scalars : Vec < Vec < i8 > > = extract_scalars :: < X25519PrimeField > ( list_scalars) ;
107
- Ok ( run_ecip :: < X25519PrimeField > ( points, scalars ) )
76
+ let dss : Vec < Vec < i8 > > = construct_digits_vectors :: < X25519PrimeField > ( list_scalars) ;
77
+ Ok ( run_ecip :: < X25519PrimeField > ( points, dss ) )
108
78
}
109
79
_ => Err ( String :: from ( "Invalid curve ID" ) ) ,
110
80
}
111
81
}
112
82
113
- fn extract_scalars < F : IsPrimeField + CurveParamsProvider < F > > ( list : Vec < BigUint > ) -> Vec < Vec < i8 > > {
83
+ fn construct_digits_vectors < F : IsPrimeField + CurveParamsProvider < F > > (
84
+ list : Vec < BigUint > ,
85
+ ) -> Vec < Vec < i8 > > {
114
86
let mut dss_ = Vec :: new ( ) ;
115
87
116
- for i in 0 ..list. len ( ) {
117
- let scalar_biguint = list[ i] . clone ( ) ;
88
+ for scalar_biguint in list {
118
89
let neg_3_digits = neg_3_base_le ( scalar_biguint) ;
119
90
dss_. push ( neg_3_digits) ;
120
91
}
0 commit comments