1
1
use ff:: PrimeFieldRepr ;
2
2
use fil_sapling_crypto:: jubjub:: JubjubBls12 ;
3
- use fil_sapling_crypto:: pedersen_hash:: { pedersen_hash , Personalization } ;
3
+ use fil_sapling_crypto:: pedersen_hash:: Personalization ;
4
4
use paired:: bls12_381:: { Bls12 , Fr , FrRepr } ;
5
5
6
6
use crate :: error:: Result ;
@@ -24,9 +24,15 @@ pub fn pedersen(data: &[u8]) -> Fr {
24
24
}
25
25
26
26
pub fn pedersen_bits < ' a , S : Iterator < Item = & ' a [ u8 ] > > ( data : Bits < & ' a [ u8 ] , S > ) -> Fr {
27
- pedersen_hash :: < Bls12 , _ > ( Personalization :: None , data, & JJ_PARAMS )
28
- . into_xy ( )
29
- . 0
27
+ let digest = if cfg ! ( target_arch = "x86_64" ) {
28
+ use fil_sapling_crypto:: pedersen_hash:: pedersen_hash_bls12_381_with_precomp;
29
+ pedersen_hash_bls12_381_with_precomp :: < _ > ( Personalization :: None , data, & JJ_PARAMS )
30
+ } else {
31
+ use fil_sapling_crypto:: pedersen_hash:: pedersen_hash;
32
+ pedersen_hash :: < Bls12 , _ > ( Personalization :: None , data, & JJ_PARAMS )
33
+ } ;
34
+
35
+ digest. into_xy ( ) . 0
30
36
}
31
37
32
38
/// Pedersen hashing for inputs that have length mulitple of the block size `256`. Based on pedersen hashes and a Merkle-Damgard construction.
@@ -62,8 +68,15 @@ fn pedersen_compression_bits<T>(bits: T) -> FrRepr
62
68
where
63
69
T : IntoIterator < Item = bool > ,
64
70
{
65
- let ( x, _) = pedersen_hash :: < Bls12 , _ > ( Personalization :: None , bits, & JJ_PARAMS ) . into_xy ( ) ;
66
- x. into ( )
71
+ let digest = if cfg ! ( target_arch = "x86_64" ) {
72
+ use fil_sapling_crypto:: pedersen_hash:: pedersen_hash_bls12_381_with_precomp;
73
+ pedersen_hash_bls12_381_with_precomp :: < _ > ( Personalization :: None , bits, & JJ_PARAMS )
74
+ } else {
75
+ use fil_sapling_crypto:: pedersen_hash:: pedersen_hash;
76
+ pedersen_hash :: < Bls12 , _ > ( Personalization :: None , bits, & JJ_PARAMS )
77
+ } ;
78
+
79
+ digest. into_xy ( ) . 0 . into ( )
67
80
}
68
81
69
82
#[ derive( Debug , Clone ) ]
0 commit comments