Files
Ignacio HagopianandGitHub 5db3436bda API and code improvements (#55)
* ci: add staticcheck job

Signed-off-by: Ignacio Hagopian <[email protected]>

* golangcilint: add config file

Signed-off-by: Ignacio Hagopian <[email protected]>

* fix lints

Signed-off-by: Ignacio Hagopian <[email protected]>

* banderwagon: general API improvements

Signed-off-by: Ignacio Hagopian <[email protected]>

* multiexp: use batched normalization

Signed-off-by: Ignacio Hagopian <[email protected]>

* remove comments

Signed-off-by: Ignacio Hagopian <[email protected]>

* ipa: improvements and documentation

Signed-off-by: Ignacio Hagopian <[email protected]>

* proof: add documentation

Signed-off-by: Ignacio Hagopian <[email protected]>

* readme: add readme

Signed-off-by: Ignacio Hagopian <[email protected]>

* improve linting

Signed-off-by: Ignacio Hagopian <[email protected]>

* add extra comment

Signed-off-by: Ignacio Hagopian <[email protected]>

* remove test check

Signed-off-by: Ignacio Hagopian <[email protected]>

---------

Signed-off-by: Ignacio Hagopian <[email protected]>
2023-09-04 19:57:59 +01:00

30 lines
1.0 KiB
Go

package banderwagon
import (
"github.com/crate-crypto/go-ipa/bandersnatch"
"github.com/crate-crypto/go-ipa/bandersnatch/fr"
)
// MultiExpConfig enables to set optional configuration attribute to a call to MultiExp
type MultiExpConfig struct {
NbTasks int // go routines to be used in the multiexp. can be larger than num cpus.
ScalarsMont bool // indicates if the scalars are in montgomery form. Default to false.
}
// MultiExp calculates the multi exponentiation of points and scalars.
func (p *Element) MultiExp(points []Element, scalars []fr.Element, config MultiExpConfig) (*Element, error) {
var projPoints = make([]bandersnatch.PointProj, len(points))
for i := range points {
projPoints[i] = points[i].inner
}
affinePoints := batchProjToAffine(projPoints)
// NOTE: This is fine as long MultiExp does not use Equal functionality
_, err := bandersnatch.MultiExp(&p.inner, affinePoints, scalars, bandersnatch.MultiExpConfig{
NbTasks: config.NbTasks,
ScalarsMont: config.ScalarsMont,
})
return p, err
}