mirror of
https://github.com/sonr-io/sonr.git
synced 2026-08-02 17:31:39 +00:00
- **refactor: move session-related code to middleware package** - **refactor: update PKL build process and adjust related configurations** - **feat: integrate base.cosmos.v1 Genesis module** - **refactor: pass session context to modal rendering functions** - **refactor: move nebula package to app directory and update templ version** - **refactor: Move home section video view to dedicated directory** - **refactor: remove unused views file** - **refactor: move styles and UI components to global scope** - **refactor: Rename images.go to cdn.go** - **feat: Add Empty State Illustrations** - **refactor: Consolidate Vault Index Logic** - **fix: References to App.wasm and remove Vault Directory embedded CDN files** - **refactor: Move CDN types to Models** - **fix: Correct line numbers in templ error messages for arch_templ.go** - **refactor: use common types for peer roles** - **refactor: move common types and ORM to a shared package** - **fix: Config import dwn** - **refactor: move nebula directory to app** - **feat: Rebuild nebula** - **fix: correct file paths in panels templates** - **feat: Remove duplicate types** - **refactor: Move dwn to pkg/core** - **refactor: Binary Structure** - **feat: Introduce Crypto Pkg** - **fix: Broken Process Start** - **feat: Update pkg/* structure** - **feat: Refactor PKL Structure** - **build: update pkl build process** - **chore: Remove Empty Files** - **refactor: remove unused macaroon package** - **feat: Add WebAwesome Components** - **refactor: consolidate build and generation tasks into a single taskfile, remove redundant makefile targets** - **refactor: refactor server and move components to pkg/core/dwn** - **build: update go modules** - **refactor: move gateway logic into dedicated hway command** - **feat: Add KSS (Krawczyk-Song-Song) MPC cryptography module** - **feat: Implement MPC-based JWT signing and UCAN token generation** - **feat: add support for MPC-based JWT signing** - **feat: Implement MPC-based UCAN capabilities for smart accounts** - **feat: add address field to keyshareSource** - **feat: Add comprehensive MPC test suite for keyshares, UCAN tokens, and token attenuations** - **refactor: improve MPC keyshare management and signing process** - **feat: enhance MPC capability hierarchy documentation** - **refactor: rename GenerateKeyshares function to NewKeyshareSource for clarity** - **refactor: remove unused Ethereum address computation** - **feat: Add HasHandle and IsAuthenticated methods to HTTPContext** - **refactor: Add context.Context support to session HTTPContext** - **refactor: Resolve context interface conflicts in HTTPContext** - **feat: Add session ID context key and helper functions** - **feat: Update WebApp Page Rendering** - **refactor: Simplify context management by using single HTTPContext key** - **refactor: Simplify HTTPContext creation and context management in session middleware** - **refactor: refactor session middleware to use a single data structure** - **refactor: Simplify HTTPContext implementation and session data handling** - **refactor: Improve session context handling and prevent nil pointer errors** - **refactor: Improve session context handling with nil safety and type support** - **refactor: improve session data injection** - **feat: add full-screen modal component and update registration flow** - **chore: add .air.toml to .gitignore** - **feat: add Air to devbox and update dependencies**
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/pkg/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)
|
|
}
|