mirror of
https://github.com/onsonr/sonr.git
synced 2025-03-10 13:07:09 +00:00
* feat: add docs and CI workflow for publishing to onsonr.dev * (refactor): Move hway,motr executables to their own repos * feat: simplify devnet and testnet configurations * refactor: update import path for didcrypto package * docs(networks): Add README with project overview, architecture, and community links * refactor: Move network configurations to deploy directory * build: update golang version to 1.23 * refactor: move logger interface to appropriate package * refactor: Move devnet configuration to networks/devnet * chore: improve release process with date variable * (chore): Move Crypto Library * refactor: improve code structure and readability in DID module * feat: integrate Trunk CI checks * ci: optimize CI workflow by removing redundant build jobs --------- Co-authored-by: Darp Alakun <i@prad.nu>
405 lines
10 KiB
Go
Executable File
405 lines
10 KiB
Go
Executable File
//
|
|
// Copyright Coinbase, Inc. All Rights Reserved.
|
|
//
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
//
|
|
|
|
package accumulator
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/onsonr/sonr/crypto/core/curves"
|
|
)
|
|
|
|
func TestEvaluatePolyG1(t *testing.T) {
|
|
curve := curves.BLS12381(&curves.PointBls12381G1{})
|
|
poly := polynomialPoint{
|
|
curve.PointG1.Generator().Mul(curve.Scalar.New(3)),
|
|
curve.PointG1.Generator().Mul(curve.Scalar.New(2)),
|
|
curve.PointG1.Generator().Mul(curve.Scalar.New(1)),
|
|
}
|
|
output1, err := poly.evaluate(curve.Scalar.New(1))
|
|
require.NoError(t, err)
|
|
require.NotNil(t, output1)
|
|
result1 := curve.PointG1.Generator().Mul(curve.Scalar.New(6))
|
|
require.Equal(t, output1.ToAffineCompressed(), result1.ToAffineCompressed())
|
|
|
|
output2, err := poly.evaluate(curve.Scalar.New(2))
|
|
require.NoError(t, err)
|
|
require.NotNil(t, output2)
|
|
result2 := curve.PointG1.Generator().Mul(curve.Scalar.New(11))
|
|
require.Equal(t, output2.ToAffineCompressed(), result2.ToAffineCompressed())
|
|
}
|
|
|
|
func TestEvaluatePolyG1Error(t *testing.T) {
|
|
curve := curves.BLS12381(&curves.PointBls12381G1{})
|
|
poly := polynomialPoint{
|
|
nil,
|
|
curve.PointG1.Generator().Mul(curve.Scalar.New(2)),
|
|
curve.PointG1.Generator().Mul(curve.Scalar.New(1)),
|
|
}
|
|
_, err := poly.evaluate(curve.Scalar.New(1))
|
|
require.Error(t, err)
|
|
}
|
|
|
|
func TestAddAssignPolyG1(t *testing.T) {
|
|
curve := curves.BLS12381(&curves.PointBls12381G1{})
|
|
// Test polynomial with equal length
|
|
poly1 := polynomialPoint{
|
|
curve.PointG1.Generator().Mul(curve.Scalar.New(3)),
|
|
curve.PointG1.Generator().Mul(curve.Scalar.New(2)),
|
|
curve.PointG1.Generator().Mul(curve.Scalar.New(1)),
|
|
}
|
|
poly2 := polynomialPoint{
|
|
curve.PointG1.Generator().Mul(curve.Scalar.New(1)),
|
|
curve.PointG1.Generator().Mul(curve.Scalar.New(2)),
|
|
curve.PointG1.Generator().Mul(curve.Scalar.New(3)),
|
|
}
|
|
|
|
output, err := poly1.Add(poly2)
|
|
require.NoError(t, err)
|
|
require.NotNil(t, output)
|
|
result := polynomialPoint{
|
|
curve.PointG1.Generator().Mul(curve.Scalar.New(4)),
|
|
curve.PointG1.Generator().Mul(curve.Scalar.New(4)),
|
|
curve.PointG1.Generator().Mul(curve.Scalar.New(4)),
|
|
}
|
|
for i := 0; i < len(output); i++ {
|
|
require.Equal(t, output[i].ToAffineCompressed(), result[i].ToAffineCompressed())
|
|
}
|
|
|
|
// Test polynomials with unequal length
|
|
poly3 := polynomialPoint{
|
|
curve.PointG1.Generator().Mul(curve.Scalar.New(1)),
|
|
curve.PointG1.Generator().Mul(curve.Scalar.New(2)),
|
|
}
|
|
output2, err := poly1.Add(poly3)
|
|
require.NoError(t, err)
|
|
require.NotNil(t, output2)
|
|
result2 := polynomialPoint{
|
|
curve.PointG1.Generator().Mul(curve.Scalar.New(4)),
|
|
curve.PointG1.Generator().Mul(curve.Scalar.New(4)),
|
|
curve.PointG1.Generator().Mul(curve.Scalar.New(1)),
|
|
}
|
|
require.Equal(t, len(output2), len(result2))
|
|
for i := 0; i < len(output2); i++ {
|
|
require.Equal(t, output2[i].ToAffineCompressed(), result2[i].ToAffineCompressed())
|
|
}
|
|
|
|
// Test polynomial with Capacity
|
|
poly4 := make(polynomialPoint, 0, 3)
|
|
poly5, err := poly4.Add(poly1)
|
|
require.NoError(t, err)
|
|
require.Equal(t, len(poly5), len(poly1))
|
|
for i := 0; i < len(poly5); i++ {
|
|
require.Equal(t, poly5[i].ToAffineCompressed(), poly1[i].ToAffineCompressed())
|
|
}
|
|
}
|
|
|
|
func TestAddAssignPolyG1Error(t *testing.T) {
|
|
curve := curves.BLS12381(&curves.PointBls12381G1{})
|
|
poly1 := polynomialPoint{
|
|
nil,
|
|
curve.PointG1.Generator().Mul(curve.Scalar.New(2)),
|
|
curve.PointG1.Generator().Mul(curve.Scalar.New(1)),
|
|
}
|
|
poly2 := polynomialPoint{
|
|
curve.PointG1.Generator().Mul(curve.Scalar.New(1)),
|
|
curve.PointG1.Generator().Mul(curve.Scalar.New(2)),
|
|
curve.PointG1.Generator().Mul(curve.Scalar.New(3)),
|
|
}
|
|
output, err := poly1.Add(poly2)
|
|
require.Error(t, err)
|
|
require.Nil(t, output)
|
|
}
|
|
|
|
func TestMulAssignPolyG1(t *testing.T) {
|
|
curve := curves.BLS12381(&curves.PointBls12381G1{})
|
|
poly := polynomialPoint{
|
|
curve.PointG1.Generator().Mul(curve.Scalar.New(3)),
|
|
curve.PointG1.Generator().Mul(curve.Scalar.New(2)),
|
|
curve.PointG1.Generator().Mul(curve.Scalar.New(1)),
|
|
}
|
|
rhs := curve.Scalar.New(3)
|
|
output, err := poly.Mul(rhs)
|
|
require.NoError(t, err)
|
|
require.NotNil(t, output)
|
|
poly2 := polynomialPoint{
|
|
curve.PointG1.Generator().Mul(curve.Scalar.New(9)),
|
|
curve.PointG1.Generator().Mul(curve.Scalar.New(6)),
|
|
curve.PointG1.Generator().Mul(curve.Scalar.New(3)),
|
|
}
|
|
for i := 0; i < len(poly2); i++ {
|
|
require.Equal(t, output[i].ToAffineCompressed(), poly2[i].ToAffineCompressed())
|
|
}
|
|
}
|
|
|
|
func TestMulAssignPolyG1Error(t *testing.T) {
|
|
curve := curves.BLS12381(&curves.PointBls12381G1{})
|
|
poly := polynomialPoint{
|
|
nil,
|
|
curve.PointG1.Generator().Mul(curve.Scalar.New(2)),
|
|
curve.PointG1.Generator().Mul(curve.Scalar.New(1)),
|
|
}
|
|
rhs := curve.Scalar.New(3)
|
|
output, err := poly.Mul(rhs)
|
|
require.Error(t, err)
|
|
require.Nil(t, output)
|
|
}
|
|
|
|
func TestPushPoly(t *testing.T) {
|
|
curve := curves.BLS12381(&curves.PointBls12381G1{})
|
|
poly := polynomial{
|
|
curve.Scalar.New(3),
|
|
curve.Scalar.New(2),
|
|
curve.Scalar.New(1),
|
|
}
|
|
scalar := curve.Scalar.New(4)
|
|
result := append(poly, scalar)
|
|
require.Equal(t, result[3], scalar)
|
|
|
|
// Push one more
|
|
scalar2 := curve.Scalar.New(5)
|
|
result2 := append(result, scalar2)
|
|
require.Equal(t, result2[4], scalar2)
|
|
|
|
// Push to a new polynomial
|
|
newPoly := polynomial{}
|
|
newPoly = append(newPoly, scalar)
|
|
require.Equal(t, newPoly[0], scalar)
|
|
newPoly = append(newPoly, scalar2)
|
|
require.Equal(t, newPoly[1], scalar2)
|
|
}
|
|
|
|
func TestAddAssignPoly(t *testing.T) {
|
|
curve := curves.BLS12381(&curves.PointBls12381G1{})
|
|
// Test polynomial with equal length
|
|
poly1 := polynomial{
|
|
curve.Scalar.New(3),
|
|
curve.Scalar.New(2),
|
|
curve.Scalar.New(1),
|
|
}
|
|
poly2 := polynomial{
|
|
curve.Scalar.New(1),
|
|
curve.Scalar.New(2),
|
|
curve.Scalar.New(3),
|
|
}
|
|
|
|
output, err := poly1.Add(poly2)
|
|
require.NoError(t, err)
|
|
require.NotNil(t, output)
|
|
result := []curves.Scalar{
|
|
curve.Scalar.New(4),
|
|
curve.Scalar.New(4),
|
|
curve.Scalar.New(4),
|
|
}
|
|
for i := 0; i < len(output); i++ {
|
|
require.Equal(t, output[i], result[i])
|
|
}
|
|
|
|
// Test polynomials with unequal length
|
|
poly3 := polynomial{
|
|
curve.Scalar.New(1),
|
|
curve.Scalar.New(2),
|
|
}
|
|
output2, err := poly1.Add(poly3)
|
|
require.NoError(t, err)
|
|
require.NotNil(t, output2)
|
|
result2 := []curves.Scalar{
|
|
curve.Scalar.New(4),
|
|
curve.Scalar.New(4),
|
|
curve.Scalar.New(1),
|
|
}
|
|
require.Equal(t, len(output2), len(result2))
|
|
for i := 0; i < len(output2); i++ {
|
|
require.Equal(t, output2[i], result2[i])
|
|
}
|
|
}
|
|
|
|
func TestAddAssignPolyError(t *testing.T) {
|
|
curve := curves.BLS12381(&curves.PointBls12381G1{})
|
|
// Test polynomial with equal length
|
|
poly1 := polynomial{
|
|
nil,
|
|
curve.Scalar.New(2),
|
|
curve.Scalar.New(1),
|
|
}
|
|
poly2 := polynomial{
|
|
curve.Scalar.New(1),
|
|
curve.Scalar.New(2),
|
|
curve.Scalar.New(3),
|
|
}
|
|
|
|
output, err := poly1.Add(poly2)
|
|
require.Error(t, err)
|
|
require.Nil(t, output)
|
|
}
|
|
|
|
func TestSubAssignPoly(t *testing.T) {
|
|
curve := curves.BLS12381(&curves.PointBls12381G1{})
|
|
// Test polynomial with equal length
|
|
poly1 := polynomial{
|
|
curve.Scalar.New(3),
|
|
curve.Scalar.New(2),
|
|
curve.Scalar.New(1),
|
|
}
|
|
poly2 := polynomial{
|
|
curve.Scalar.New(1),
|
|
curve.Scalar.New(2),
|
|
curve.Scalar.New(3),
|
|
}
|
|
|
|
output, err := poly1.Sub(poly2)
|
|
require.NoError(t, err)
|
|
require.NotNil(t, output)
|
|
result := []curves.Scalar{
|
|
curve.Scalar.New(2),
|
|
curve.Scalar.New(0),
|
|
curve.Scalar.New(-2),
|
|
}
|
|
for i := 0; i < len(output); i++ {
|
|
require.Equal(t, output[i].Bytes(), result[i].Bytes())
|
|
}
|
|
|
|
// Test polynomials with unequal length
|
|
poly3 := polynomial{
|
|
curve.Scalar.New(1),
|
|
curve.Scalar.New(2),
|
|
curve.Scalar.New(3),
|
|
curve.Scalar.New(4),
|
|
}
|
|
output2, err := poly1.Sub(poly3)
|
|
require.NoError(t, err)
|
|
require.NotNil(t, output2)
|
|
result2 := []curves.Scalar{
|
|
curve.Scalar.New(2),
|
|
curve.Scalar.New(0),
|
|
curve.Scalar.New(-2),
|
|
curve.Scalar.New(-4),
|
|
}
|
|
require.Equal(t, len(output2), len(result2))
|
|
for i := 0; i < len(output2); i++ {
|
|
require.Equal(t, output2[i].Bytes(), result2[i].Bytes())
|
|
}
|
|
}
|
|
|
|
func TestSubAssignPolyError(t *testing.T) {
|
|
curve := curves.BLS12381(&curves.PointBls12381G1{})
|
|
poly1 := polynomial{
|
|
nil,
|
|
curve.Scalar.New(2),
|
|
curve.Scalar.New(1),
|
|
}
|
|
poly2 := polynomial{
|
|
curve.Scalar.New(1),
|
|
curve.Scalar.New(2),
|
|
curve.Scalar.New(3),
|
|
}
|
|
|
|
output, err := poly1.Sub(poly2)
|
|
require.Error(t, err)
|
|
require.Nil(t, output)
|
|
}
|
|
|
|
func TestMulAssignPoly(t *testing.T) {
|
|
curve := curves.BLS12381(&curves.PointBls12381G1{})
|
|
// Test polynomial with equal length
|
|
poly1 := polynomial{
|
|
curve.Scalar.New(3),
|
|
curve.Scalar.New(2),
|
|
curve.Scalar.New(1),
|
|
}
|
|
poly2 := polynomial{
|
|
curve.Scalar.New(1),
|
|
curve.Scalar.New(2),
|
|
curve.Scalar.New(3),
|
|
}
|
|
|
|
output, err := poly1.Mul(poly2)
|
|
require.NoError(t, err)
|
|
require.NotNil(t, output)
|
|
result := []curves.Scalar{
|
|
curve.Scalar.New(3),
|
|
curve.Scalar.New(8),
|
|
curve.Scalar.New(14),
|
|
curve.Scalar.New(8),
|
|
curve.Scalar.New(3),
|
|
}
|
|
for i := 0; i < len(result); i++ {
|
|
require.Equal(t, output[i].Bytes(), result[i].Bytes())
|
|
}
|
|
|
|
// Test polynomials with unequal length
|
|
poly3 := polynomial{
|
|
curve.Scalar.New(1),
|
|
curve.Scalar.New(2),
|
|
}
|
|
output2, err := poly1.Mul(poly3)
|
|
require.NoError(t, err)
|
|
require.NotNil(t, output2)
|
|
result2 := []curves.Scalar{
|
|
curve.Scalar.New(3),
|
|
curve.Scalar.New(8),
|
|
curve.Scalar.New(5),
|
|
curve.Scalar.New(2),
|
|
}
|
|
require.Equal(t, len(output2), 4)
|
|
for i := 0; i < len(output2); i++ {
|
|
require.Equal(t, output2[i].Bytes(), result2[i].Bytes())
|
|
}
|
|
}
|
|
|
|
func TestMulAssignPolyError(t *testing.T) {
|
|
curve := curves.BLS12381(&curves.PointBls12381G1{})
|
|
poly1 := polynomial{
|
|
nil,
|
|
curve.Scalar.New(2),
|
|
curve.Scalar.New(1),
|
|
}
|
|
poly2 := polynomial{
|
|
curve.Scalar.New(1),
|
|
curve.Scalar.New(2),
|
|
curve.Scalar.New(3),
|
|
}
|
|
output, err := poly1.Mul(poly2)
|
|
require.Error(t, err)
|
|
require.Nil(t, output)
|
|
}
|
|
|
|
func TestMulValueAssignPoly(t *testing.T) {
|
|
curve := curves.BLS12381(&curves.PointBls12381G1{})
|
|
poly := polynomial{
|
|
curve.Scalar.New(3),
|
|
curve.Scalar.New(2),
|
|
curve.Scalar.New(1),
|
|
}
|
|
rhs := curve.Scalar.New(3)
|
|
output, err := poly.MulScalar(rhs)
|
|
require.NoError(t, err)
|
|
require.NotNil(t, output)
|
|
coefficients2 := []curves.Scalar{
|
|
curve.Scalar.New(9),
|
|
curve.Scalar.New(6),
|
|
curve.Scalar.New(3),
|
|
}
|
|
for i := 0; i < len(coefficients2); i++ {
|
|
require.Equal(t, output[i].Bytes(), coefficients2[i].Bytes())
|
|
}
|
|
}
|
|
|
|
func TestMulValueAssignPolyError(t *testing.T) {
|
|
curve := curves.BLS12381(&curves.PointBls12381G1{})
|
|
poly := polynomial{
|
|
nil,
|
|
curve.Scalar.New(2),
|
|
curve.Scalar.New(1),
|
|
}
|
|
rhs := curve.Scalar.New(3)
|
|
output, err := poly.MulScalar(rhs)
|
|
require.Error(t, err)
|
|
require.Nil(t, output)
|
|
}
|