mirror of
https://github.com/onsonr/sonr.git
synced 2025-03-10 21:09:11 +00:00
- **refactor: remove unused auth components** - **refactor: improve devbox configuration and deployment process** - **refactor: improve devnet and testnet setup** - **fix: update templ version to v0.2.778** - **refactor: rename pkl/net.matrix to pkl/matrix.net** - **refactor: migrate webapp components to nebula** - **refactor: protobuf types** - **chore: update dependencies for improved security and stability** - **feat: implement landing page and vault gateway servers** - **refactor: Migrate data models to new module structure and update related files** - **feature/1121-implement-ucan-validation** - **refactor: Replace hardcoded constants with model types in attns.go** - **feature/1121-implement-ucan-validation** - **chore: add origin Host struct and update main function to handle multiple hosts** - **build: remove unused static files from dwn module** - **build: remove unused static files from dwn module** - **refactor: Move DWN models to common package** - **refactor: move models to pkg/common** - **refactor: move vault web app assets to embed module** - **refactor: update session middleware import path** - **chore: configure port labels and auto-forwarding behavior** - **feat: enhance devcontainer configuration** - **feat: Add UCAN middleware for Echo with flexible token validation** - **feat: add JWT middleware for UCAN authentication** - **refactor: update package URI and versioning in PklProject files** - **fix: correct sonr.pkl import path** - **refactor: move JWT related code to auth package** - **feat: introduce vault configuration retrieval and management** - **refactor: Move vault components to gateway module and update file paths** - **refactor: remove Dexie and SQLite database implementations** - **feat: enhance frontend with PWA features and WASM integration** - **feat: add Devbox features and streamline Dockerfile** - **chore: update dependencies to include TigerBeetle** - **chore(deps): update go version to 1.23** - **feat: enhance devnet setup with PATH environment variable and updated PWA manifest** - **fix: upgrade tigerbeetle-go dependency and remove indirect dependency** - **feat: add PostgreSQL support to devnet and testnet deployments** - **refactor: rename keyshare cookie to token cookie** - **feat: upgrade Go version to 1.23.3 and update dependencies** - **refactor: update devnet and testnet configurations** - **feat: add IPFS configuration for devnet** - **I'll help you update the ipfs.config.pkl to include all the peers from the shell script. Here's the updated configuration:** - **refactor: move mpc package to crypto directory** - **feat: add BIP32 support for various cryptocurrencies** - **feat: enhance ATN.pkl with additional capabilities** - **refactor: simplify smart account and vault attenuation creation** - **feat: add new capabilities to the Attenuation type** - **refactor: Rename MPC files for clarity and consistency** - **feat: add DIDKey support for cryptographic operations** - **feat: add devnet and testnet deployment configurations** - **fix: correct key derivation in bip32 package** - **refactor: rename crypto/bip32 package to crypto/accaddr** - **fix: remove duplicate indirect dependency** - **refactor: move vault package to root directory** - **refactor: update routes for gateway and vault** - **refactor: remove obsolete web configuration file** - **refactor: remove unused TigerBeetle imports and update host configuration** - **refactor: adjust styles directory path** - **feat: add broadcastTx and simulateTx functions to gateway** - **feat: add PinVault handler**
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)
|
|
}
|