mirror of
https://github.com/logos-storage/nim-groth16.git
synced 2026-01-05 23:23:08 +00:00
commit
7379bc04ae
46
bn128.nim
46
bn128.nim
@ -17,6 +17,9 @@ import std/sequtils
|
||||
import std/streams
|
||||
import std/random
|
||||
|
||||
import constantine/platforms/abstractions
|
||||
import constantine/math/isogenies/frobenius
|
||||
|
||||
import constantine/math/arithmetic
|
||||
import constantine/math/io/io_fields
|
||||
import constantine/math/io/io_bigints
|
||||
@ -28,7 +31,7 @@ import constantine/math/elliptic/ec_shortweierstrass_affine as aff
|
||||
import constantine/math/elliptic/ec_shortweierstrass_projective as prj
|
||||
import constantine/math/pairings/pairings_bn as ate
|
||||
import constantine/math/elliptic/ec_scalar_mul as scl
|
||||
# import constantine/math/elliptic/ec_multi_scalar_mul as msm
|
||||
import constantine/math/elliptic/ec_multi_scalar_mul as msm
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
@ -659,8 +662,7 @@ func `-=`*(p: var G2, q: G2) = p = addG2(p,negG2(q))
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
#[
|
||||
func msmG1( coeffs: seq[Fr] , points: seq[G1] ): G1 =
|
||||
func msmG1*( coeffs: openArray[Fr] , points: openArray[G1] ): G1 =
|
||||
|
||||
let N = coeffs.len
|
||||
assert( N == points.len, "incompatible sequence lengths" )
|
||||
@ -672,15 +674,38 @@ func msmG1( coeffs: seq[Fr] , points: seq[G1] ): G1 =
|
||||
for x in coeffs:
|
||||
bigcfs.add( x.toBig() )
|
||||
|
||||
var r : G1
|
||||
var r : ProjG1
|
||||
|
||||
# [Fp,aff.G1]
|
||||
msm.multiScalarMul_vartime( r,
|
||||
toOpenArray(bigcfs, 0, N-1),
|
||||
toOpenArray(points, 0, N-1) )
|
||||
|
||||
return r
|
||||
]#
|
||||
var rAff: G1
|
||||
prj.affine(rAff, r)
|
||||
|
||||
return rAff
|
||||
|
||||
func msmG2*( coeffs: openArray[Fr] , points: openArray[G2] ): G2 =
|
||||
|
||||
let N = coeffs.len
|
||||
assert( N == points.len, "incompatible sequence lengths" )
|
||||
|
||||
var bigcfs : seq[BigInt[254]]
|
||||
for x in coeffs:
|
||||
bigcfs.add( x.toBig() )
|
||||
|
||||
var r : ProjG2
|
||||
|
||||
# [Fp,aff.G1]
|
||||
msm.multiScalarMul_vartime( r,
|
||||
toOpenArray(bigcfs, 0, N-1),
|
||||
toOpenArray(points, 0, N-1) )
|
||||
|
||||
var rAff: G2
|
||||
prj.affine(rAff, r)
|
||||
|
||||
return rAff
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
#
|
||||
@ -763,15 +788,6 @@ func msmNaiveG2( coeffs: seq[Fr] , points: seq[G2] ): G2 =
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
# TODO: proper MSM implementation (couldn't make constantine work at first...)
|
||||
func msmG1*( coeffs: seq[Fr] , points: seq[G1] ): G1 =
|
||||
return msmNaiveG1( coeffs, points )
|
||||
|
||||
func msmG2*( coeffs: seq[Fr] , points: seq[G2] ): G2 =
|
||||
return msmNaiveG2( coeffs, points )
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
proc sanityCheckGroupGen*() =
|
||||
echo( "gen1 on the curve = ", checkCurveEqG1(gen1.x,gen1.y) )
|
||||
echo( "gen2 on the curve = ", checkCurveEqG2(gen2.x,gen2.y) )
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user