diff --git a/Cargo.lock b/Cargo.lock index ae938b2016643..4524d28b8ab49 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -514,16 +514,28 @@ dependencies = [ "ark-std 0.4.0", ] +[[package]] +name = "ark-bls12-377" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfedac3173d12820a5e0d6cd4de31b49719a74f4a41dc09b6652d0276a3b2cd4" +dependencies = [ + "ark-ec 0.5.0", + "ark-ff 0.5.0", + "ark-std 0.5.0", +] + [[package]] name = "ark-bls12-377-ext" -version = "0.4.1" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20c7021f180a0cbea0380eba97c2af3c57074cdaffe0eef7e840e1c9f2841e55" +checksum = "e47f3bb6e4ef3c0edb795769fc11469767ce807ed1ccdc979ab101aea2dbf4b5" dependencies = [ - "ark-bls12-377", - "ark-ec 0.4.2", + "ark-bls12-377 0.5.0", + "ark-ec 0.5.0", + "ark-ff 0.5.0", "ark-models-ext", - "ark-std 0.4.0", + "ark-std 0.5.0", ] [[package]] @@ -552,16 +564,16 @@ dependencies = [ [[package]] name = "ark-bls12-381-ext" -version = "0.4.1" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1dc4b3d08f19e8ec06e949712f95b8361e43f1391d94f65e4234df03480631c" +checksum = "0f1dbb23366825700828d373d5fc9c07b7f92253ffed47ab455003b7590d786d" dependencies = [ - "ark-bls12-381 0.4.0", - "ark-ec 0.4.2", - "ark-ff 0.4.2", + "ark-bls12-381 0.5.0", + "ark-ec 0.5.0", + "ark-ff 0.5.0", "ark-models-ext", - "ark-serialize 0.4.2", - "ark-std 0.4.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", ] [[package]] @@ -578,27 +590,27 @@ dependencies = [ [[package]] name = "ark-bw6-761" -version = "0.4.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e0605daf0cc5aa2034b78d008aaf159f56901d92a52ee4f6ecdfdac4f426700" +checksum = "1cc9cae367e0c3c0b52e3ef13371122752654f45d0212ec7306fb0c1c012cd98" dependencies = [ - "ark-bls12-377", - "ark-ec 0.4.2", - "ark-ff 0.4.2", - "ark-std 0.4.0", + "ark-bls12-377 0.5.0", + "ark-ec 0.5.0", + "ark-ff 0.5.0", + "ark-std 0.5.0", ] [[package]] name = "ark-bw6-761-ext" -version = "0.4.1" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccee5fba47266f460067588ee1bf070a9c760bf2050c1c509982c5719aadb4f2" +checksum = "c6e1216f968e21c72fdaba53dbc9e547a8a60cc87b1dc74ac589727e906f9297" dependencies = [ "ark-bw6-761", - "ark-ec 0.4.2", - "ark-ff 0.4.2", + "ark-ec 0.5.0", + "ark-ff 0.5.0", "ark-models-ext", - "ark-std 0.4.0", + "ark-std 0.5.0", ] [[package]] @@ -615,7 +627,6 @@ dependencies = [ "hashbrown 0.13.2", "itertools 0.10.5", "num-traits", - "rayon", "zeroize", ] @@ -643,39 +654,27 @@ dependencies = [ [[package]] name = "ark-ed-on-bls12-377" -version = "0.4.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b10d901b9ac4b38f9c32beacedfadcdd64e46f8d7f8e88c1ae1060022cf6f6c6" +checksum = "ebbf817b2db27d2787009b2ff76304a5b90b4b01bb16aa8351701fd40f5f37b2" dependencies = [ - "ark-bls12-377", - "ark-ec 0.4.2", - "ark-ff 0.4.2", - "ark-std 0.4.0", + "ark-bls12-377 0.5.0", + "ark-ec 0.5.0", + "ark-ff 0.5.0", + "ark-std 0.5.0", ] [[package]] name = "ark-ed-on-bls12-377-ext" -version = "0.4.1" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524a4fb7540df2e1a8c2e67a83ba1d1e6c3947f4f9342cc2359fc2e789ad731d" +checksum = "05093aa26f017411708e1271047852cc5f58686336f1f1a56fb2df747c3e173a" dependencies = [ - "ark-ec 0.4.2", + "ark-ec 0.5.0", "ark-ed-on-bls12-377", - "ark-ff 0.4.2", + "ark-ff 0.5.0", "ark-models-ext", - "ark-std 0.4.0", -] - -[[package]] -name = "ark-ed-on-bls12-381-bandersnatch" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9cde0f2aa063a2a5c28d39b47761aa102bda7c13c84fc118a61b87c7b2f785c" -dependencies = [ - "ark-bls12-381 0.4.0", - "ark-ec 0.4.2", - "ark-ff 0.4.2", - "ark-std 0.4.0", + "ark-std 0.5.0", ] [[package]] @@ -692,15 +691,15 @@ dependencies = [ [[package]] name = "ark-ed-on-bls12-381-bandersnatch-ext" -version = "0.4.1" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d15185f1acb49a07ff8cbe5f11a1adc5a93b19e211e325d826ae98e98e124346" +checksum = "5e6dce0c47def6f25cf01022acded4f32732f577187dfcd1268510093ef16ea6" dependencies = [ - "ark-ec 0.4.2", - "ark-ed-on-bls12-381-bandersnatch 0.4.0", - "ark-ff 0.4.2", + "ark-ec 0.5.0", + "ark-ed-on-bls12-381-bandersnatch", + "ark-ff 0.5.0", "ark-models-ext", - "ark-std 0.4.0", + "ark-std 0.5.0", ] [[package]] @@ -832,14 +831,14 @@ dependencies = [ [[package]] name = "ark-models-ext" -version = "0.4.1" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e9eab5d4b5ff2f228b763d38442adc9b084b0a465409b059fac5c2308835ec2" +checksum = "ff772c552d00e9c092eab0608632342c553abbf6bca984008b55100a9a78a3a6" dependencies = [ - "ark-ec 0.4.2", - "ark-ff 0.4.2", - "ark-serialize 0.4.2", - "ark-std 0.4.0", + "ark-ec 0.5.0", + "ark-ff 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", "derivative", ] @@ -901,26 +900,14 @@ dependencies = [ "tracing-subscriber 0.2.25", ] -[[package]] -name = "ark-scale" -version = "0.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f69c00b3b529be29528a6f2fd5fa7b1790f8bed81b9cdca17e326538545a179" -dependencies = [ - "ark-ec 0.4.2", - "ark-ff 0.4.2", - "ark-serialize 0.4.2", - "ark-std 0.4.0", - "parity-scale-codec", - "scale-info", -] - [[package]] name = "ark-scale" version = "0.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "985c81a9c7b23a72f62b7b20686d5326d2a9956806f37de9ee35cb1238faf0c0" dependencies = [ + "ark-ec 0.5.0", + "ark-ff 0.5.0", "ark-serialize 0.5.0", "ark-std 0.5.0", "parity-scale-codec", @@ -1003,7 +990,6 @@ checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" dependencies = [ "num-traits", "rand 0.8.5", - "rayon", ] [[package]] @@ -1039,7 +1025,7 @@ checksum = "9501da18569b2afe0eb934fb7afd5a247d238b94116155af4dd068f319adfe6d" dependencies = [ "ark-bls12-381 0.5.0", "ark-ec 0.5.0", - "ark-ed-on-bls12-381-bandersnatch 0.5.0", + "ark-ed-on-bls12-381-bandersnatch", "ark-ff 0.5.0", "ark-serialize 0.5.0", "ark-std 0.5.0", @@ -23277,18 +23263,18 @@ dependencies = [ name = "sp-crypto-ec-utils" version = "0.10.0" dependencies = [ - "ark-bls12-377", + "ark-bls12-377 0.5.0", "ark-bls12-377-ext", - "ark-bls12-381 0.4.0", + "ark-bls12-381 0.5.0", "ark-bls12-381-ext", "ark-bw6-761", "ark-bw6-761-ext", - "ark-ec 0.4.2", + "ark-ec 0.5.0", "ark-ed-on-bls12-377", "ark-ed-on-bls12-377-ext", - "ark-ed-on-bls12-381-bandersnatch 0.4.0", + "ark-ed-on-bls12-381-bandersnatch", "ark-ed-on-bls12-381-bandersnatch-ext", - "ark-scale 0.0.12", + "ark-scale", "sp-runtime-interface 24.0.0", ] @@ -26738,7 +26724,7 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "225eaa083192400abfe78838e3089c539a361e0dd9b6884f61b5c6237676ec01" dependencies = [ - "ark-scale 0.0.13", + "ark-scale", "ark-serialize 0.5.0", "ark-vrf", "bounded-collections 0.1.9", @@ -26767,7 +26753,7 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6bfb937b3d12077654a9e43e32a4e9c20177dd9fea0f3aba673e7840bb54f32" dependencies = [ - "ark-bls12-377", + "ark-bls12-377 0.4.0", "ark-bls12-381 0.4.0", "ark-ec 0.4.2", "ark-ff 0.4.2", diff --git a/Cargo.toml b/Cargo.toml index 28a426d2480a5..07969484b51d9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -648,18 +648,18 @@ anyhow = { version = "1.0.81", default-features = false } approx = { version = "0.5.1" } aquamarine = { version = "0.5.0" } arbitrary = { version = "1.3.2" } -ark-bls12-377 = { version = "0.4.0", default-features = false } -ark-bls12-377-ext = { version = "0.4.1", default-features = false } -ark-bls12-381 = { version = "0.4.0", default-features = false } -ark-bls12-381-ext = { version = "0.4.1", default-features = false } -ark-bw6-761 = { version = "0.4.0", default-features = false } -ark-bw6-761-ext = { version = "0.4.1", default-features = false } -ark-ec = { version = "0.4.2", default-features = false } -ark-ed-on-bls12-377 = { version = "0.4.0", default-features = false } -ark-ed-on-bls12-377-ext = { version = "0.4.1", default-features = false } -ark-ed-on-bls12-381-bandersnatch = { version = "0.4.0", default-features = false } -ark-ed-on-bls12-381-bandersnatch-ext = { version = "0.4.1", default-features = false } -ark-scale = { version = "0.0.12", default-features = false } +ark-bls12-377 = { version = "0.5.0", default-features = false } +ark-bls12-377-ext = { version = "0.5.0", default-features = false } +ark-bls12-381 = { version = "0.5.0", default-features = false } +ark-bls12-381-ext = { version = "0.5.0", default-features = false } +ark-bw6-761 = { version = "0.5.0", default-features = false } +ark-bw6-761-ext = { version = "0.5.0", default-features = false } +ark-ec = { version = "0.5.0", default-features = false } +ark-ed-on-bls12-377 = { version = "0.5.0", default-features = false } +ark-ed-on-bls12-377-ext = { version = "0.5.0", default-features = false } +ark-ed-on-bls12-381-bandersnatch = { version = "0.5.0", default-features = false } +ark-ed-on-bls12-381-bandersnatch-ext = { version = "0.5.0", default-features = false } +ark-scale = { version = "0.0.13", default-features = false } ark-vrf = { version = "0.1.0", default-features = false } array-bytes = { version = "6.2.2", default-features = false } arrayvec = { version = "0.7.4" } diff --git a/prdoc/pr_10147.prdoc b/prdoc/pr_10147.prdoc new file mode 100644 index 0000000000000..6b184cdbf0ea0 --- /dev/null +++ b/prdoc/pr_10147.prdoc @@ -0,0 +1,7 @@ +title: Upgrade arkworks 0.4.1 -> 0.5.0 +doc: +- audience: Node Dev + description: Arkworks minor upgrade and some refactory. +crates: +- name: sp-crypto-ec-utils + bump: minor diff --git a/substrate/primitives/crypto/ec-utils/src/bls12_377.rs b/substrate/primitives/crypto/ec-utils/src/bls12_377.rs index 0413ae7ff96cf..dda3aef5035f9 100644 --- a/substrate/primitives/crypto/ec-utils/src/bls12_377.rs +++ b/substrate/primitives/crypto/ec-utils/src/bls12_377.rs @@ -79,62 +79,51 @@ pub type Config = ark_bls12_377_ext::Config; pub type Bls12_377 = ark_bls12_377_ext::Bls12_377; impl CurveHooks for HostHooks { - fn bls12_377_multi_miller_loop( + fn multi_miller_loop( g1: impl Iterator::G1Prepared>, g2: impl Iterator::G2Prepared>, - ) -> Result<::TargetField, ()> { - let g1 = utils::encode(g1.collect::>()); - let g2 = utils::encode(g2.collect::>()); - let res = host_calls::bls12_377_multi_miller_loop(g1, g2).unwrap_or_default(); - utils::decode(res) + ) -> ::TargetField { + host_calls::bls12_377_multi_miller_loop(utils::encode_iter(g1), utils::encode_iter(g2)) + .and_then(|res| utils::decode(res)) + .unwrap_or_default() } - fn bls12_377_final_exponentiation( + fn final_exponentiation( target: ::TargetField, - ) -> Result<::TargetField, ()> { - let target = utils::encode(target); - let res = host_calls::bls12_377_final_exponentiation(target).unwrap_or_default(); - utils::decode(res) + ) -> ::TargetField { + host_calls::bls12_377_final_exponentiation(utils::encode(target)) + .and_then(|res| utils::decode(res)) + .unwrap_or_default() } - fn bls12_377_msm_g1( + fn msm_g1( bases: &[G1Affine], scalars: &[::ScalarField], - ) -> Result { - let bases = utils::encode(bases); - let scalars = utils::encode(scalars); - let res = host_calls::bls12_377_msm_g1(bases, scalars).unwrap_or_default(); - utils::decode_proj_sw(res) + ) -> G1Projective { + host_calls::bls12_377_msm_g1(utils::encode(bases), utils::encode(scalars)) + .and_then(|res| utils::decode_proj_sw(res)) + .unwrap_or_default() } - fn bls12_377_msm_g2( + fn msm_g2( bases: &[G2Affine], scalars: &[::ScalarField], - ) -> Result { - let bases = utils::encode(bases); - let scalars = utils::encode(scalars); - let res = host_calls::bls12_377_msm_g2(bases, scalars).unwrap_or_default(); - utils::decode_proj_sw(res) + ) -> G2Projective { + host_calls::bls12_377_msm_g2(utils::encode(bases), utils::encode(scalars)) + .and_then(|res| utils::decode_proj_sw(res)) + .unwrap_or_default() } - fn bls12_377_mul_projective_g1( - base: &G1Projective, - scalar: &[u64], - ) -> Result { - let base = utils::encode_proj_sw(base); - let scalar = utils::encode(scalar); - let res = host_calls::bls12_377_mul_projective_g1(base, scalar).unwrap_or_default(); - utils::decode_proj_sw(res) + fn mul_projective_g1(base: &G1Projective, scalar: &[u64]) -> G1Projective { + host_calls::bls12_377_mul_projective_g1(utils::encode_proj_sw(base), utils::encode(scalar)) + .and_then(|res| utils::decode_proj_sw(res)) + .unwrap_or_default() } - fn bls12_377_mul_projective_g2( - base: &G2Projective, - scalar: &[u64], - ) -> Result { - let base = utils::encode_proj_sw(base); - let scalar = utils::encode(scalar); - let res = host_calls::bls12_377_mul_projective_g2(base, scalar).unwrap_or_default(); - utils::decode_proj_sw(res) + fn mul_projective_g2(base: &G2Projective, scalar: &[u64]) -> G2Projective { + host_calls::bls12_377_mul_projective_g2(utils::encode_proj_sw(base), utils::encode(scalar)) + .and_then(|res| utils::decode_proj_sw(res)) + .unwrap_or_default() } } diff --git a/substrate/primitives/crypto/ec-utils/src/bls12_381.rs b/substrate/primitives/crypto/ec-utils/src/bls12_381.rs index 573322d6ce8c9..cabb494ab3e0f 100644 --- a/substrate/primitives/crypto/ec-utils/src/bls12_381.rs +++ b/substrate/primitives/crypto/ec-utils/src/bls12_381.rs @@ -69,62 +69,51 @@ pub type Config = ark_bls12_381_ext::Config; pub type Bls12_381 = ark_bls12_381_ext::Bls12_381; impl CurveHooks for HostHooks { - fn bls12_381_multi_miller_loop( + fn multi_miller_loop( g1: impl Iterator::G1Prepared>, g2: impl Iterator::G2Prepared>, - ) -> Result<::TargetField, ()> { - let g1 = utils::encode(g1.collect::>()); - let g2 = utils::encode(g2.collect::>()); - let res = host_calls::bls12_381_multi_miller_loop(g1, g2).unwrap_or_default(); - utils::decode(res) + ) -> ::TargetField { + host_calls::bls12_381_multi_miller_loop(utils::encode_iter(g1), utils::encode_iter(g2)) + .and_then(|res| utils::decode(res)) + .unwrap_or_default() } - fn bls12_381_final_exponentiation( + fn final_exponentiation( target: ::TargetField, - ) -> Result<::TargetField, ()> { - let target = utils::encode(target); - let res = host_calls::bls12_381_final_exponentiation(target).unwrap_or_default(); - utils::decode(res) + ) -> ::TargetField { + host_calls::bls12_381_final_exponentiation(utils::encode(target)) + .and_then(|res| utils::decode(res)) + .unwrap_or_default() } - fn bls12_381_msm_g1( + fn msm_g1( bases: &[G1Affine], scalars: &[::ScalarField], - ) -> Result { - let bases = utils::encode(bases); - let scalars = utils::encode(scalars); - let res = host_calls::bls12_381_msm_g1(bases, scalars).unwrap_or_default(); - utils::decode_proj_sw(res) + ) -> G1Projective { + host_calls::bls12_381_msm_g1(utils::encode(bases), utils::encode(scalars)) + .and_then(|res| utils::decode_proj_sw(res)) + .unwrap_or_default() } - fn bls12_381_msm_g2( + fn msm_g2( bases: &[G2Affine], scalars: &[::ScalarField], - ) -> Result { - let bases = utils::encode(bases); - let scalars = utils::encode(scalars); - let res = host_calls::bls12_381_msm_g2(bases, scalars).unwrap_or_default(); - utils::decode_proj_sw(res) + ) -> G2Projective { + host_calls::bls12_381_msm_g2(utils::encode(bases), utils::encode(scalars)) + .and_then(|res| utils::decode_proj_sw(res)) + .unwrap_or_default() } - fn bls12_381_mul_projective_g1( - base: &G1Projective, - scalar: &[u64], - ) -> Result { - let base = utils::encode_proj_sw(base); - let scalar = utils::encode(scalar); - let res = host_calls::bls12_381_mul_projective_g1(base, scalar).unwrap_or_default(); - utils::decode_proj_sw(res) + fn mul_projective_g1(base: &G1Projective, scalar: &[u64]) -> G1Projective { + host_calls::bls12_381_mul_projective_g1(utils::encode_proj_sw(base), utils::encode(scalar)) + .and_then(|res| utils::decode_proj_sw(res)) + .unwrap_or_default() } - fn bls12_381_mul_projective_g2( - base: &G2Projective, - scalar: &[u64], - ) -> Result { - let base = utils::encode_proj_sw(base); - let scalar = utils::encode(scalar); - let res = host_calls::bls12_381_mul_projective_g2(base, scalar).unwrap_or_default(); - utils::decode_proj_sw(res) + fn mul_projective_g2(base: &G2Projective, scalar: &[u64]) -> G2Projective { + host_calls::bls12_381_mul_projective_g2(utils::encode_proj_sw(base), utils::encode(scalar)) + .and_then(|res| utils::decode_proj_sw(res)) + .unwrap_or_default() } } diff --git a/substrate/primitives/crypto/ec-utils/src/bw6_761.rs b/substrate/primitives/crypto/ec-utils/src/bw6_761.rs index 399ededbedf66..58fdb4d31be0f 100644 --- a/substrate/primitives/crypto/ec-utils/src/bw6_761.rs +++ b/substrate/primitives/crypto/ec-utils/src/bw6_761.rs @@ -66,56 +66,51 @@ pub type Config = ark_bw6_761_ext::Config; pub type BW6_761 = ark_bw6_761_ext::BW6_761; impl CurveHooks for HostHooks { - fn bw6_761_multi_miller_loop( + fn multi_miller_loop( g1: impl Iterator::G1Prepared>, g2: impl Iterator::G2Prepared>, - ) -> Result<::TargetField, ()> { - let g1 = utils::encode(g1.collect::>()); - let g2 = utils::encode(g2.collect::>()); - let res = host_calls::bw6_761_multi_miller_loop(g1, g2).unwrap_or_default(); - utils::decode(res) + ) -> ::TargetField { + host_calls::bw6_761_multi_miller_loop(utils::encode_iter(g1), utils::encode_iter(g2)) + .and_then(|res| utils::decode(res)) + .unwrap_or_default() } - fn bw6_761_final_exponentiation( + fn final_exponentiation( target: ::TargetField, - ) -> Result<::TargetField, ()> { - let target = utils::encode(target); - let res = host_calls::bw6_761_final_exponentiation(target).unwrap_or_default(); - utils::decode(res) + ) -> ::TargetField { + host_calls::bw6_761_final_exponentiation(utils::encode(target)) + .and_then(|res| utils::decode(res)) + .unwrap_or_default() } - fn bw6_761_msm_g1( + fn msm_g1( bases: &[G1Affine], scalars: &[::ScalarField], - ) -> Result { - let bases = utils::encode(bases); - let scalars = utils::encode(scalars); - let res = host_calls::bw6_761_msm_g1(bases, scalars).unwrap_or_default(); - utils::decode_proj_sw(res) + ) -> G1Projective { + host_calls::bw6_761_msm_g1(utils::encode(bases), utils::encode(scalars)) + .and_then(|res| utils::decode_proj_sw(res)) + .unwrap_or_default() } - fn bw6_761_msm_g2( + fn msm_g2( bases: &[G2Affine], scalars: &[::ScalarField], - ) -> Result { - let bases = utils::encode(bases); - let scalars = utils::encode(scalars); - let res = host_calls::bw6_761_msm_g2(bases, scalars).unwrap_or_default(); - utils::decode_proj_sw(res) + ) -> G2Projective { + host_calls::bw6_761_msm_g2(utils::encode(bases), utils::encode(scalars)) + .and_then(|res| utils::decode_proj_sw(res)) + .unwrap_or_default() } - fn bw6_761_mul_projective_g1(base: &G1Projective, scalar: &[u64]) -> Result { - let base = utils::encode_proj_sw(base); - let scalar = utils::encode(scalar); - let res = host_calls::bw6_761_mul_projective_g1(base, scalar).unwrap_or_default(); - utils::decode_proj_sw(res) + fn mul_projective_g1(base: &G1Projective, scalar: &[u64]) -> G1Projective { + host_calls::bw6_761_mul_projective_g1(utils::encode_proj_sw(base), utils::encode(scalar)) + .and_then(|res| utils::decode_proj_sw(res)) + .unwrap_or_default() } - fn bw6_761_mul_projective_g2(base: &G2Projective, scalar: &[u64]) -> Result { - let base = utils::encode_proj_sw(base); - let scalar = utils::encode(scalar); - let res = host_calls::bw6_761_mul_projective_g2(base, scalar).unwrap_or_default(); - utils::decode_proj_sw(res) + fn mul_projective_g2(base: &G2Projective, scalar: &[u64]) -> G2Projective { + host_calls::bw6_761_mul_projective_g2(utils::encode_proj_sw(base), utils::encode(scalar)) + .and_then(|res| utils::decode_proj_sw(res)) + .unwrap_or_default() } } diff --git a/substrate/primitives/crypto/ec-utils/src/ed_on_bls12_377.rs b/substrate/primitives/crypto/ec-utils/src/ed_on_bls12_377.rs index 11ddfcdb9b2e3..fc31a26c01ead 100644 --- a/substrate/primitives/crypto/ec-utils/src/ed_on_bls12_377.rs +++ b/substrate/primitives/crypto/ec-utils/src/ed_on_bls12_377.rs @@ -38,24 +38,22 @@ pub type EdwardsAffine = ark_ed_on_bls12_377_ext::EdwardsAffine; pub type EdwardsProjective = ark_ed_on_bls12_377_ext::EdwardsProjective; impl CurveHooks for HostHooks { - fn ed_on_bls12_377_msm( + fn msm( bases: &[EdwardsAffine], scalars: &[::ScalarField], - ) -> Result { - let bases = utils::encode(bases); - let scalars = utils::encode(scalars); - let res = host_calls::ed_on_bls12_377_te_msm(bases, scalars).unwrap_or_default(); - utils::decode_proj_te(res) + ) -> EdwardsProjective { + host_calls::ed_on_bls12_377_te_msm(utils::encode(bases), utils::encode(scalars)) + .and_then(|res| utils::decode_proj_te(res)) + .unwrap_or_default() } - fn ed_on_bls12_377_mul_projective( - base: &EdwardsProjective, - scalar: &[u64], - ) -> Result { - let base = utils::encode_proj_te(base); - let scalar = utils::encode(scalar); - let res = host_calls::ed_on_bls12_377_te_mul_projective(base, scalar).unwrap_or_default(); - utils::decode_proj_te(res) + fn mul_projective(base: &EdwardsProjective, scalar: &[u64]) -> EdwardsProjective { + host_calls::ed_on_bls12_377_te_mul_projective( + utils::encode_proj_te(base), + utils::encode(scalar), + ) + .and_then(|res| utils::decode_proj_te(res)) + .unwrap_or_default() } } diff --git a/substrate/primitives/crypto/ec-utils/src/ed_on_bls12_381_bandersnatch.rs b/substrate/primitives/crypto/ec-utils/src/ed_on_bls12_381_bandersnatch.rs index 7b25d1fbecf56..bc3061cace6a2 100644 --- a/substrate/primitives/crypto/ec-utils/src/ed_on_bls12_381_bandersnatch.rs +++ b/substrate/primitives/crypto/ec-utils/src/ed_on_bls12_381_bandersnatch.rs @@ -47,48 +47,46 @@ pub type SWAffine = ark_ed_on_bls12_381_bandersnatch_ext::SWAffine; pub type SWProjective = ark_ed_on_bls12_381_bandersnatch_ext::SWProjective; impl CurveHooks for HostHooks { - fn ed_on_bls12_381_bandersnatch_te_msm( + fn msm_te( bases: &[EdwardsAffine], scalars: &[::ScalarField], - ) -> Result { - let bases = utils::encode(bases); - let scalars = utils::encode(scalars); - let res = - host_calls::ed_on_bls12_381_bandersnatch_te_msm(bases, scalars).unwrap_or_default(); - utils::decode_proj_te(res) + ) -> EdwardsProjective { + host_calls::ed_on_bls12_381_bandersnatch_te_msm( + utils::encode(bases), + utils::encode(scalars), + ) + .and_then(|res| utils::decode_proj_te(res)) + .unwrap_or_default() } - fn ed_on_bls12_381_bandersnatch_te_mul_projective( - base: &EdwardsProjective, - scalar: &[u64], - ) -> Result { - let base = utils::encode_proj_te(base); - let scalar = utils::encode(scalar); - let res = host_calls::ed_on_bls12_381_bandersnatch_te_mul_projective(base, scalar) - .unwrap_or_default(); - utils::decode_proj_te(res) + fn mul_projective_te(base: &EdwardsProjective, scalar: &[u64]) -> EdwardsProjective { + host_calls::ed_on_bls12_381_bandersnatch_te_mul_projective( + utils::encode_proj_te(base), + utils::encode(scalar), + ) + .and_then(|res| utils::decode_proj_te(res)) + .unwrap_or_default() } - fn ed_on_bls12_381_bandersnatch_sw_msm( + fn msm_sw( bases: &[SWAffine], scalars: &[::ScalarField], - ) -> Result { - let bases = utils::encode(bases); - let scalars = utils::encode(scalars); - let res = - host_calls::ed_on_bls12_381_bandersnatch_sw_msm(bases, scalars).unwrap_or_default(); - utils::decode_proj_sw(res) + ) -> SWProjective { + host_calls::ed_on_bls12_381_bandersnatch_sw_msm( + utils::encode(bases), + utils::encode(scalars), + ) + .and_then(|res| utils::decode_proj_sw(res)) + .unwrap_or_default() } - fn ed_on_bls12_381_bandersnatch_sw_mul_projective( - base: &SWProjective, - scalar: &[u64], - ) -> Result { - let base = utils::encode_proj_sw(base); - let scalar = utils::encode(scalar); - let res = host_calls::ed_on_bls12_381_bandersnatch_sw_mul_projective(base, scalar) - .unwrap_or_default(); - utils::decode_proj_sw(res) + fn mul_projective_sw(base: &SWProjective, scalar: &[u64]) -> SWProjective { + host_calls::ed_on_bls12_381_bandersnatch_sw_mul_projective( + utils::encode_proj_sw(base), + utils::encode(scalar), + ) + .and_then(|res| utils::decode_proj_sw(res)) + .unwrap_or_default() } } diff --git a/substrate/primitives/crypto/ec-utils/src/utils.rs b/substrate/primitives/crypto/ec-utils/src/utils.rs index 47a49fe16cc24..b259b986bd451 100644 --- a/substrate/primitives/crypto/ec-utils/src/utils.rs +++ b/substrate/primitives/crypto/ec-utils/src/utils.rs @@ -38,6 +38,12 @@ const SCALE_USAGE: u8 = ark_scale::make_usage(Compress::No, Validate::No); type ArkScale = ark_scale::ArkScale; type ArkScaleProjective = ark_scale::hazmat::ArkScaleProjective; +#[inline(always)] +#[allow(unused)] +pub fn encode_iter(iter: impl Iterator) -> Vec { + encode(iter.collect::>()) +} + #[inline(always)] pub fn encode(val: T) -> Vec { ArkScale::from(val).encode()