Skip to content
This repository has been archived by the owner on Nov 15, 2023. It is now read-only.

Commit

Permalink
collect as vec
Browse files Browse the repository at this point in the history
  • Loading branch information
Achim Schneider committed Mar 18, 2023
1 parent 9167d59 commit dd3f809
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 14 deletions.
20 changes: 15 additions & 5 deletions primitives/arkworks/src/ed_on_bls12_377.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,19 +20,29 @@
#![warn(missing_docs)]

use crate::utils::{deserialize_argument, serialize_result};
use ark_ec::{models::CurveConfig, twisted_edwards, VariableBaseMSM};
use ark_ec::{models::CurveConfig, twisted_edwards, Group, VariableBaseMSM};
use ark_ed_on_bls12_377::{EdwardsConfig, EdwardsProjective};
use ark_ff::Zero;
use ark_serialize::{CanonicalSerialize, Compress};
use sp_std::vec::Vec;

/// Compute a multi scalar multiplication on G! through arkworks
pub fn msm(bases: Vec<u8>, scalars: Vec<u8>) -> Vec<u8> {
let bases: Vec<_> = bases
.iter()
.map(|a| deserialize_argument::<twisted_edwards::Affine<EdwardsConfig>>(a))
.chunks(twisted_edwards::Affine::<EdwardsConfig>::generator().serialized_size(Compress::No))
.into_iter()
.map(|a| {
deserialize_argument::<twisted_edwards::Affine<EdwardsConfig>>(a.collect::<Vec<_>>())
})
.collect();
let scalars: Vec<_> = scalars
.iter()
.map(|a| deserialize_argument::<<EdwardsConfig as CurveConfig>::ScalarField>(a))
.chunks(<EdwardsConfig as CurveConfig>::ScalarField::zero().serialized_size(Compress::No))
.into_iter()
.map(|a| {
deserialize_argument::<<EdwardsConfig as CurveConfig>::ScalarField>(
a.collect::<Vec<_>>(),
)
})
.collect();

let result = <EdwardsProjective as VariableBaseMSM>::msm(&bases, &scalars).unwrap();
Expand Down
32 changes: 23 additions & 9 deletions primitives/arkworks/src/ed_on_bls12_381.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,20 +22,28 @@
use crate::utils::{deserialize_argument, serialize_result};
use ark_ec::{
models::CurveConfig, short_weierstrass::Affine as SWAffine,
twisted_edwards::Affine as TEAffine, VariableBaseMSM,
twisted_edwards::Affine as TEAffine, Group, VariableBaseMSM,
};
use ark_ed_on_bls12_381::{EdwardsProjective, JubjubConfig, SWProjective};
use ark_ff::Zero;
use ark_serialize::{CanonicalSerialize, Compress};
use sp_std::vec::Vec;

/// Compute a multi scalar multiplication on G! through arkworks
pub fn te_msm(bases: Vec<u8>, scalars: Vec<u8>) -> Vec<u8> {
let bases: Vec<_> = bases
.iter()
.map(|a| deserialize_argument::<TEAffine<JubjubConfig>>(a))
.chunks(TEAffine::<JubjubConfig>::generator().serialized_size(Compress::No))
.into_iter()
.map(|a| deserialize_argument::<TEAffine<JubjubConfig>>(a.collect::<Vec<_>>()))
.collect();
let scalars: Vec<_> = scalars
.iter()
.map(|a| deserialize_argument::<<JubjubConfig as CurveConfig>::ScalarField>(a))
.chunks(<JubjubConfig as CurveConfig>::ScalarField::zero().serialized_size(Compress::No))
.into_iter()
.map(|a| {
deserialize_argument::<<JubjubConfig as CurveConfig>::ScalarField>(
a.collect::<Vec<_>>(),
)
})
.collect();

let result = <EdwardsProjective as VariableBaseMSM>::msm(&bases, &scalars).unwrap();
Expand All @@ -46,12 +54,18 @@ pub fn te_msm(bases: Vec<u8>, scalars: Vec<u8>) -> Vec<u8> {
/// Compute a multi scalar multiplication on G! through arkworks
pub fn sw_msm(bases: Vec<u8>, scalars: Vec<u8>) -> Vec<u8> {
let bases: Vec<_> = bases
.iter()
.map(|a| deserialize_argument::<SWAffine<JubjubConfig>>(a))
.chunks(SWAffine::<JubjubConfig>::genrator().serialized_size(Compress::No))
.into_iter()
.map(|a| deserialize_argument::<SWAffine<JubjubConfig>>(a.collect::<Vec<_>>()))
.collect();
let scalars: Vec<_> = scalars
.iter()
.map(|a| deserialize_argument::<<JubjubConfig as CurveConfig>::ScalarField>(a))
.chunks(<JubjubConfig as CurveConfig>::ScalarField::zero().serialized_size(Compress::No))
.into_iter()
.map(|a| {
deserialize_argument::<<JubjubConfig as CurveConfig>::ScalarField>(
a.collect::<Vec<_>>(),
)
})
.collect();

let result = <SWProjective as VariableBaseMSM>::msm(&bases, &scalars).unwrap();
Expand Down

0 comments on commit dd3f809

Please sign in to comment.