From 78d37550c9e2f5245139cdd90e786f678ec60935 Mon Sep 17 00:00:00 2001 From: Zach Kelling Date: Fri, 12 Dec 2025 19:48:43 -0800 Subject: [PATCH] Sync with geth --- CONSOLIDATION_COMPLETE.md | 62 - LLM.md | 53 +- MIGRATION_NOTES.md | 57 - MIGRATION_PLAN.md | 117 - TEST_STATUS.md | 82 - all_test.go.bak | 372 --- audit_test.go.bak | 253 -- bitutil/bitutil.go | 27 + blake2b/blake2b.go | 4 +- blake2b/blake2b_generic.go | 2 +- blake2b/blake2b_test.go | 6 +- bn256/bn256_fast.go | 8 +- bn256/cloudflare/gfp_decl.go | 2 +- bn256/gnark/g1.go | 12 +- bn256/gnark/g2.go | 3 +- coverage.out | 3808 -------------------------- crypto.go | 77 +- crypto_test.go | 29 +- ecies/ecies_test.go | 8 +- go.work | 5 + go.work.sum | 5 + keccak.go | 62 + keccak_ziren.go | 122 + mldsa.out | 1 - mldsa/coverage.out | 150 - mldsa/mldsa_cgo.go.bak | 190 -- mldsa/mldsa_placeholder.go.bak | 379 --- mlkem.out | 1 - mlkem/coverage.out | 124 - mlkem/mlkem_cgo.go.bak | 248 -- mlkem/mlkem_placeholder.go.bak | 279 -- postquantum_test.go.bak | 288 -- precompile/corona.go.bak | 463 ---- precompile/export.go | 2 +- precompile/interface.go | 2 +- precompile/lamport.go | 2 +- precompile/shake.go | 2 +- secp256r1/verifier.go | 2 +- signature_cgo.go | 17 +- signature_nocgo.go | 7 +- signature_test.go | 47 +- slhdsa.out | 1 - slhdsa/coverage.out | 152 - slhdsa/slhdsa_cgo.go.bak | 272 -- slhdsa/slhdsa_placeholder.go.bak | 332 --- unified/signer.go.bak | 342 --- unified/signer_test.go.bak | 255 -- utils/bloom/bloom_filter_test.go.bak | 33 - utils/bloom/filter_test.go.bak | 97 - utils/bloom/hasher_test.go.bak | 35 - utils/bloom/optimal_test.go.bak | 204 -- utils/bloom/read_filter_test.go.bak | 113 - utils/metric/namespace_test.go.bak | 47 - 53 files changed, 367 insertions(+), 8896 deletions(-) delete mode 100644 CONSOLIDATION_COMPLETE.md delete mode 100644 MIGRATION_NOTES.md delete mode 100644 MIGRATION_PLAN.md delete mode 100644 TEST_STATUS.md delete mode 100644 all_test.go.bak delete mode 100644 audit_test.go.bak create mode 100644 bitutil/bitutil.go delete mode 100644 coverage.out create mode 100644 go.work create mode 100644 go.work.sum create mode 100644 keccak.go create mode 100644 keccak_ziren.go delete mode 100644 mldsa.out delete mode 100644 mldsa/coverage.out delete mode 100644 mldsa/mldsa_cgo.go.bak delete mode 100644 mldsa/mldsa_placeholder.go.bak delete mode 100644 mlkem.out delete mode 100644 mlkem/coverage.out delete mode 100644 mlkem/mlkem_cgo.go.bak delete mode 100644 mlkem/mlkem_placeholder.go.bak delete mode 100644 postquantum_test.go.bak delete mode 100644 precompile/corona.go.bak delete mode 100644 slhdsa.out delete mode 100644 slhdsa/coverage.out delete mode 100644 slhdsa/slhdsa_cgo.go.bak delete mode 100644 slhdsa/slhdsa_placeholder.go.bak delete mode 100644 unified/signer.go.bak delete mode 100644 unified/signer_test.go.bak delete mode 100644 utils/bloom/bloom_filter_test.go.bak delete mode 100644 utils/bloom/filter_test.go.bak delete mode 100644 utils/bloom/hasher_test.go.bak delete mode 100644 utils/bloom/optimal_test.go.bak delete mode 100644 utils/bloom/read_filter_test.go.bak delete mode 100644 utils/metric/namespace_test.go.bak diff --git a/CONSOLIDATION_COMPLETE.md b/CONSOLIDATION_COMPLETE.md deleted file mode 100644 index a97fade..0000000 --- a/CONSOLIDATION_COMPLETE.md +++ /dev/null @@ -1,62 +0,0 @@ -# Crypto Consolidation Complete - -## Summary -Successfully consolidated all crypto implementations from multiple packages into the centralized `/Users/z/work/lux/crypto` package. - -## What Was Done - -### 1. Moved Crypto Implementations -- **From node/utils/crypto**: BLS and SECP256K1 implementations -- **From threshold**: Blake3 hash (common crypto extracted, threshold-specific logic preserved) -- **From consensus/bls**: Removed duplicate BLS (uses crypto/bls now) -- **From geth/crypto**: Already using centralized crypto -- **From evm**: Already using centralized crypto -- **From mpc**: Already using centralized crypto - -### 2. Package Independence -- **crypto package**: Now completely independent of node package -- **ledger-lux-go package**: Created to hold keychain and ledger implementations (which depend on node) - -### 3. Import Path Updates -All import paths have been updated: -- `github.com/luxfi/node/utils/crypto/bls` → `github.com/luxfi/crypto/bls` -- `github.com/luxfi/node/utils/crypto/secp256k1` → `github.com/luxfi/crypto/secp256k1` -- `github.com/luxfi/node/utils/crypto/keychain` → `github.com/luxfi/ledger-lux-go/keychain` -- `github.com/luxfi/node/utils/crypto/ledger` → `github.com/luxfi/ledger-lux-go/ledger` - -### 4. Test Status -- BLS tests: ✅ Passing -- SECP256K1 tests: ✅ Passing -- Blake3 hash: ✅ Integrated -- Import paths: ✅ Updated across all packages - -## Package Structure - -``` -/Users/z/work/lux/ -├── crypto/ # Centralized crypto package (independent) -│ ├── bls/ # BLS signatures -│ ├── secp256k1/ # SECP256K1 signatures -│ ├── hashing/ -│ │ └── blake3/ # Blake3 hash -│ └── ... # Other crypto implementations -│ -├── ledger-lux-go/ # Ledger/keychain package (depends on node) -│ ├── keychain/ # Key management -│ └── ledger/ # Hardware wallet support -│ -└── node/ # Node package (crypto removed) - └── utils/crypto/ # Now uses imports from crypto package -``` - -## Next Steps -1. Tag crypto package: `git tag -a v1.0.0 -m "Consolidated crypto package"` -2. Tag ledger package: `cd /Users/z/work/lux/ledger-lux-go && git tag -a v1.0.0 -m "Ledger and keychain package"` -3. Update go.mod files to use tagged versions - -## Benefits -- Single source of truth for all crypto implementations -- No more duplicate code across packages -- Clear separation of concerns (crypto vs ledger/keychain) -- Easier maintenance and updates -- Better test coverage and consistency diff --git a/LLM.md b/LLM.md index 011652b..72f8cb2 100644 --- a/LLM.md +++ b/LLM.md @@ -1,41 +1,66 @@ # AI Assistant Knowledge Base -**Last Updated**: $(date +%Y-%m-%d) -**Project**: $(basename "$REPO_PATH") -**Organization**: $(basename "$(dirname "$REPO_PATH")") +**Last Updated**: 2025-08-15 +**Project**: crypto +**Organization**: lux ## Project Overview -This repository is part of the $(basename "$(dirname "$REPO_PATH")") organization. +This repository contains the Lux post-quantum cryptography implementation. ## Essential Commands ### Development ```bash -# Add common commands here +# Run tests +make test + +# Run with coverage +make test-coverage + +# Run benchmarks +make bench + +# Full CI suite +make ci ``` ## Architecture +The Lux crypto library provides comprehensive post-quantum cryptography support including: +- ML-KEM (Module-Lattice-based Key Encapsulation Mechanism) +- ML-DSA (Module-Lattice-Based Digital Signature Algorithm) +- SLH-DSA (Stateless Hash-Based Digital Signature Algorithm) +- BLS signatures +- Corona ring signatures +- SHAKE hash functions + ## Key Technologies +- Go 1.21+ +- Cloudflare CIRCL library for post-quantum cryptography +- CGO optimizations for performance +- Comprehensive test coverage + ## Development Workflow +1. Implement cryptographic algorithms using Cloudflare CIRCL +2. Add comprehensive unit tests +3. Implement precompiled contracts for EVM integration +4. Run full test suite and benchmarks +5. Update documentation + ## Context for All AI Assistants -This file (`LLM.md`) is symlinked as: -- `.AGENTS.md` -- `CLAUDE.md` -- `QWEN.md` -- `GEMINI.md` - -All files reference the same knowledge base. Updates here propagate to all AI systems. +This file (`LLM.md`) serves as the central knowledge base for AI assistants working on this project. ## Rules for AI Assistants 1. **ALWAYS** update LLM.md with significant discoveries -2. **NEVER** commit symlinked files (.AGENTS.md, CLAUDE.md, etc.) - they're in .gitignore -3. **NEVER** create random summary files - update THIS file +2. **NEVER** commit AI-generated summary files +3. **NEVER** create redundant documentation - update existing files +4. Follow Go coding standards and best practices +5. Ensure all implementations are properly tested --- diff --git a/MIGRATION_NOTES.md b/MIGRATION_NOTES.md deleted file mode 100644 index 07fa2ca..0000000 --- a/MIGRATION_NOTES.md +++ /dev/null @@ -1,57 +0,0 @@ -# Geth Dependency Removal Notes - -## Summary -Successfully removed all dependencies on `github.com/luxfi/geth` from the crypto package by implementing the necessary types and utilities locally. - -## Changes Made - -### 1. Created Common Types (`common/types.go`) -- Implemented `Hash` type (32-byte array) with all necessary methods -- Implemented `Address` type (20-byte array) with EIP-55 compliant checksumming -- Added common big integer constants (Big0, Big1, etc.) -- Added helper functions for hex encoding/decoding - -### 2. Created Hex Utilities (`common/hexutil/`) -- Implemented hex encoding/decoding with 0x prefix support -- Added types for JSON marshaling (Big, Uint64, Uint, Bytes) -- Supports all the hex utility functions previously imported from geth - -### 3. Created Math Utilities (`common/math/`) -- Implemented big integer math functions (BigPow, BigMax, BigMin) -- Added PaddedBigBytes for encoding big integers with padding -- Implemented safe arithmetic operations (SafeAdd, SafeSub, SafeMul, SafeDiv) -- Added other utility functions like ReadBits, U256, S256 - -### 4. Created RLP Encoding (`rlp/encode.go`) -- Minimal RLP encoder implementation supporting: - - Basic types: []byte, string, uint64, *big.Int - - Common types: common.Address, common.Hash - - Lists: []interface{} -- Sufficient for crypto package needs (primarily CreateAddress function) - -### 5. Updated All Imports -- Changed all imports from `github.com/luxfi/geth/*` to `github.com/luxfi/crypto/*` -- Updated files: - - crypto.go - - crypto_test.go - - signature_test.go - - signature_cgo.go - - secp256k1/ethereum.go - - kzg4844/kzg4844.go - - kzg4844/kzg4844_ckzg_cgo.go - -## Testing -- All existing tests pass -- No functionality changes, only dependency removal -- The CreateAddress function works correctly with the new RLP encoder - -## Benefits -1. No external dependency on geth -2. Reduced binary size (only includes necessary code) -3. Better control over the implementation -4. Easier to maintain and update - -## Notes -- The implementations are minimal but complete for crypto package needs -- If more RLP functionality is needed in the future, the encoder can be extended -- The common types match the geth interface exactly for compatibility \ No newline at end of file diff --git a/MIGRATION_PLAN.md b/MIGRATION_PLAN.md deleted file mode 100644 index a49247e..0000000 --- a/MIGRATION_PLAN.md +++ /dev/null @@ -1,117 +0,0 @@ -# Crypto Consolidation Migration Plan - -## Overview -Consolidate all cryptographic implementations from various packages into `/Users/z/work/lux/crypto` to eliminate duplication and ensure consistency. - -## Current Situation - -### Duplicate Implementations Found - -1. **BLS Signatures** - - `/Users/z/work/lux/node/utils/crypto/bls/` - Uses `supranational/blst` (C library, high performance) - - `/Users/z/work/lux/crypto/bls/` - Uses `cloudflare/circl` (Pure Go) - - **Decision**: Keep BLST implementation for performance, move to crypto package - -2. **SECP256K1** - - `/Users/z/work/lux/node/utils/crypto/secp256k1/` - Full implementation - - `/Users/z/work/lux/crypto/secp256k1/` - Existing implementation - - **Decision**: Merge best features from both - -3. **Keychain & Ledger** - - `/Users/z/work/lux/node/utils/crypto/keychain/` - Key management - - `/Users/z/work/lux/node/utils/crypto/ledger/` - Hardware wallet support - - **Decision**: Move to crypto package as-is - -## Migration Steps - -### Phase 1: BLS Consolidation - -1. **Create new BLS structure in crypto** - ``` - /Users/z/work/lux/crypto/bls/ - ├── bls.go (BLST-based implementation from node) - ├── bls_circl.go (CIRCL-based for compatibility) - ├── interface.go (Common interface) - └── bls_test.go (Unified tests) - ``` - -2. **Merge implementations** - - Primary: BLST for performance - - Fallback: CIRCL for pure Go environments - - Build tags to select implementation - -### Phase 2: SECP256K1 Consolidation - -1. **Merge node SECP256K1 into crypto** - - Keep best test coverage - - Maintain API compatibility - - Add RFC6979 deterministic nonce support - -### Phase 3: Move Supporting Infrastructure - -1. **Keychain**: `/Users/z/work/lux/crypto/keychain/` -2. **Ledger**: `/Users/z/work/lux/crypto/ledger/` -3. **Common utilities**: Extract and consolidate - -### Phase 4: Extract Common Crypto from Other Packages - -1. **From threshold package**: - - Blake3 hash → `/Users/z/work/lux/crypto/hashing/blake3/` - - Keep threshold-specific logic in place - -2. **From MPC package**: - - Age encryption utilities → `/Users/z/work/lux/crypto/encryption/age/` - - Ed25519 wrappers → `/Users/z/work/lux/crypto/ed25519/` - -### Phase 5: Update Import Paths - -All imports need to be updated from: -```go -"github.com/luxfi/node/utils/crypto/bls" -"github.com/luxfi/node/utils/crypto/secp256k1" -``` - -To: -```go -"github.com/luxfi/crypto/bls" -"github.com/luxfi/crypto/secp256k1" -``` - -## Files Requiring Import Updates - -### Consensus Package -- `/Users/z/work/lux/consensus/snowman/validator.go` -- `/Users/z/work/lux/consensus/ctx.go` - -### Node Package -- `/Users/z/work/lux/node/vms/platformvm/signer/*.go` -- `/Users/z/work/lux/node/wallet/subnet/primary/*.go` -- `/Users/z/work/lux/node/staking/*.go` - -## Implementation Plan - -### Step 1: Create Compatibility Layer -Create interfaces that both implementations satisfy to ensure smooth migration. - -### Step 2: Move and Test -1. Copy node crypto to crypto package -2. Update imports in crypto package -3. Run tests to ensure functionality -4. Update external imports one package at a time - -### Step 3: Remove Duplicates -Once all imports are updated and tests pass, remove the original implementations from node. - -## Testing Strategy - -1. **Unit Tests**: Ensure all existing tests pass -2. **Integration Tests**: Test with consensus and node packages -3. **Performance Tests**: Verify no performance regression -4. **Compatibility Tests**: Ensure API compatibility - -## Risk Mitigation - -1. **Backup**: Keep original implementations until migration is complete -2. **Gradual Migration**: Update one package at a time -3. **Feature Flags**: Use build tags to switch implementations if needed -4. **Rollback Plan**: Git tags at each migration phase \ No newline at end of file diff --git a/TEST_STATUS.md b/TEST_STATUS.md deleted file mode 100644 index 8c6ac2c..0000000 --- a/TEST_STATUS.md +++ /dev/null @@ -1,82 +0,0 @@ -# Crypto Package Test Status - -## Overall Status -✅ **Core crypto packages are working with consolidated implementations** - -## Test Results Summary - -### ✅ Passing (Core Packages) -- `crypto`: Main package tests passing -- `blake2b`: 90.4% coverage -- `bls`: Tests passing (using BLST implementation) -- `secp256k1`: All tests passing -- `mldsa`: 91.8% coverage -- `mlkem`: 42.4% coverage -- `slhdsa`: 43.0% coverage -- `ecies`: 81.6% coverage -- `signify`: 83.8% coverage -- `ipa/*`: All IPA packages passing - -### ⚠️ Need Dependency Resolution -- `keychain`: Requires node/utils/set and node/version -- `ledger`: Requires node/version -- `hashing/blake3`: Needs go.mod update - -### 📊 Coverage Statistics -- **Overall**: >40% coverage across crypto package -- **High Coverage (>80%)**: 9 packages -- **Medium Coverage (40-80%)**: 13 packages - -## Git Tags Created - -### CLI Package -- **Tag**: `cli-v2.0.0` ✅ Pushed -- **Changes**: Updated to use consolidated crypto imports -- **Breaking Change**: Import paths changed from node/utils/crypto to crypto - -### Crypto Package -- **Ready for tagging once tests fully pass** -- **Version**: Will be `crypto-v1.0.0` -- **Features**: - - Consolidated implementations - - Post-quantum crypto support - - Blake3 hashing - - Precompile support - -## Next Steps for 100% Tests - -1. **Fix keychain/ledger dependencies**: - ```bash - # Option 1: Copy needed utilities from node - cp -r /Users/z/work/lux/node/utils/set /Users/z/work/lux/crypto/utils/ - - # Option 2: Update imports to use minimal dependencies - ``` - -2. **Update go.mod**: - ```bash - cd /Users/z/work/lux/crypto - go mod tidy - go test ./... - ``` - -3. **Create and push crypto tag**: - ```bash - cd /Users/z/work/lux/crypto - git tag -a v1.0.0 -m "Initial consolidated crypto package" - git push origin v1.0.0 - ``` - -## Migration Impact - -### Packages Using New Crypto -- ✅ CLI: Import paths updated -- ✅ SDK: Import paths updated -- ✅ VMSDK: Import paths updated -- ⚠️ Node: Needs broader dependency resolution - -### Breaking Changes -All packages importing from `github.com/luxfi/node/utils/crypto/*` must update to `github.com/luxfi/crypto/*` - -## Conclusion -The crypto consolidation is functionally complete with core packages working. The keychain and ledger packages need minor dependency resolution to achieve 100% test passing, but all cryptographic algorithms and core functionality are operational. \ No newline at end of file diff --git a/all_test.go.bak b/all_test.go.bak deleted file mode 100644 index a09ef4e..0000000 --- a/all_test.go.bak +++ /dev/null @@ -1,372 +0,0 @@ -// Copyright (C) 2025, Lux Industries Inc. All rights reserved. -// Comprehensive test suite for all post-quantum cryptography implementations - -package crypto - -import ( - "crypto/rand" - "testing" - "time" - - "github.com/luxfi/crypto/lamport" - "github.com/luxfi/crypto/mldsa" - "github.com/luxfi/crypto/mlkem" - "github.com/luxfi/crypto/precompile" - "github.com/luxfi/crypto/slhdsa" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" -) - -// TestAllCryptoImplementations tests all crypto standards -func TestAllCryptoImplementations(t *testing.T) { - t.Run("ML-KEM", testMLKEM) - t.Run("ML-DSA", testMLDSA) - t.Run("SLH-DSA", testSLHDSA) - // Lamport tests are covered in the lamport package - // t.Run("Lamport", testLamport) - t.Run("Precompiles", testPrecompiles) - t.Run("CGO Performance", testCGOPerformance) -} - -func testMLKEM(t *testing.T) { - modes := []mlkem.Mode{mlkem.MLKEM512, mlkem.MLKEM768, mlkem.MLKEM1024} - names := []string{"ML-KEM-512", "ML-KEM-768", "ML-KEM-1024"} - - for i, mode := range modes { - t.Run(names[i], func(t *testing.T) { - // Generate key pair - priv, err := mlkem.GenerateKeyPair(rand.Reader, mode) - require.NoError(t, err) - - // Encapsulate - result, err := priv.PublicKey.Encapsulate(rand.Reader) - require.NoError(t, err) - - // Decapsulate - sharedSecret, err := priv.Decapsulate(result.Ciphertext) - require.NoError(t, err) - - // Verify shared secrets match - assert.Equal(t, result.SharedSecret, sharedSecret) - - // Test wrong ciphertext - wrongCT := make([]byte, len(result.Ciphertext)) - copy(wrongCT, result.Ciphertext) - wrongCT[0] ^= 0xFF - - wrongSecret, err := priv.Decapsulate(wrongCT) - assert.NoError(t, err) // ML-KEM has implicit rejection - assert.NotEqual(t, sharedSecret, wrongSecret) - - // Test serialization - pubBytes := priv.PublicKey.Bytes() - privBytes := priv.Bytes() - - pub2, err := mlkem.PublicKeyFromBytes(pubBytes, mode) - require.NoError(t, err) - - priv2, err := mlkem.PrivateKeyFromBytes(privBytes, mode) - require.NoError(t, err) - - // Test with deserialized keys - result2, err := pub2.Encapsulate(rand.Reader) - require.NoError(t, err) - - secret2, err := priv2.Decapsulate(result2.Ciphertext) - require.NoError(t, err) - assert.Equal(t, result2.SharedSecret, secret2) - }) - } -} - -func testMLDSA(t *testing.T) { - modes := []mldsa.Mode{mldsa.MLDSA44, mldsa.MLDSA65, mldsa.MLDSA87} - names := []string{"ML-DSA-44", "ML-DSA-65", "ML-DSA-87"} - message := []byte("Test message for ML-DSA signature") - - for i, mode := range modes { - t.Run(names[i], func(t *testing.T) { - // Generate key pair - priv, err := mldsa.GenerateKey(rand.Reader, mode) - require.NoError(t, err) - - // Sign message - signature, err := priv.Sign(rand.Reader, message, nil) - require.NoError(t, err) - - // Verify signature - valid := priv.PublicKey.Verify(message, signature, nil) - assert.True(t, valid) - - // Test wrong message - wrongMsg := []byte("Wrong message") - assert.False(t, priv.PublicKey.Verify(wrongMsg, signature, nil)) - - // Test corrupted signature - corruptedSig := make([]byte, len(signature)) - copy(corruptedSig, signature) - corruptedSig[0] ^= 0xFF - assert.False(t, priv.PublicKey.Verify(message, corruptedSig, nil)) - - // Test serialization - pubBytes := priv.PublicKey.Bytes() - privBytes := priv.Bytes() - - pub2, err := mldsa.PublicKeyFromBytes(pubBytes, mode) - require.NoError(t, err) - - priv2, err := mldsa.PrivateKeyFromBytes(privBytes, mode) - require.NoError(t, err) - - // Sign with deserialized key - sig2, err := priv2.Sign(rand.Reader, message, nil) - require.NoError(t, err) - assert.True(t, pub2.Verify(message, sig2, nil)) - }) - } -} - -func testSLHDSA(t *testing.T) { - // Test only fast variants for speed - modes := []slhdsa.Mode{slhdsa.SLHDSA128f, slhdsa.SLHDSA192f} - names := []string{"SLH-DSA-128f", "SLH-DSA-192f"} - message := []byte("Test message for SLH-DSA") - - for i, mode := range modes { - t.Run(names[i], func(t *testing.T) { - // Generate key pair - priv, err := slhdsa.GenerateKey(rand.Reader, mode) - require.NoError(t, err) - - // Sign message - signature, err := priv.Sign(rand.Reader, message, nil) - require.NoError(t, err) - - // Verify signature - valid := priv.PublicKey.Verify(message, signature, nil) - assert.True(t, valid) - - // Test stateless property - same signature for same message - signature2, err := priv.Sign(rand.Reader, message, nil) - require.NoError(t, err) - assert.Equal(t, signature, signature2, "SLH-DSA should be deterministic") - - // Test wrong message - wrongMsg := []byte("Wrong message") - assert.False(t, priv.PublicKey.Verify(wrongMsg, signature, nil)) - - // Test serialization - pubBytes := priv.PublicKey.Bytes() - pub2, err := slhdsa.PublicKeyFromBytes(pubBytes, mode) - require.NoError(t, err) - assert.True(t, pub2.Verify(message, signature, nil)) - }) - } -} - -func testLamport(t *testing.T) { - message := []byte("Test message for Lamport signature") - - t.Run("SHA256", func(t *testing.T) { - priv, err := lamport.GenerateKey(rand.Reader, lamport.SHA256) - require.NoError(t, err) - - pub := priv.Public() - - // Sign message - sig, err := priv.Sign(message) - require.NoError(t, err) - - // Verify signature - assert.True(t, pub.Verify(message, sig)) - - // Test wrong message - wrongMsg := []byte("Wrong message") - assert.False(t, pub.Verify(wrongMsg, sig)) - - // Test serialization - pubBytes := pub.Bytes() - sigBytes := sig.Bytes() - - pub2, err := lamport.PublicKeyFromBytes(pubBytes) - require.NoError(t, err) - - sig2, err := lamport.SignatureFromBytes(sigBytes) - require.NoError(t, err) - - assert.True(t, pub2.Verify(message, sig2)) - }) - - t.Run("OneTimeUse", func(t *testing.T) { - priv, err := lamport.GenerateKey(rand.Reader, lamport.SHA256) - require.NoError(t, err) - - pub := priv.Public() - - // First signature should work - sig1, err := priv.Sign(message) - require.NoError(t, err) - assert.True(t, pub.Verify(message, sig1)) - - // Second signature should fail (key was zeroed) - sig2, err := priv.Sign([]byte("Second message")) - require.NoError(t, err) - - // Verify that second signature doesn't work (since key was zeroed) - // This is a one-time signature scheme - assert.NotNil(t, sig2) - }) -} - -func testPrecompiles(t *testing.T) { - // Test SHAKE precompiles - t.Run("SHAKE", func(t *testing.T) { - shake256 := &precompile.SHAKE256{} - - // Create input: [4 bytes output_len][data] - input := make([]byte, 4+32) - input[0] = 0x00 - input[1] = 0x00 - input[2] = 0x00 - input[3] = 0x20 // 32 bytes output - copy(input[4:], []byte("test data for SHAKE256")) - - gas := shake256.RequiredGas(input) - assert.Greater(t, gas, uint64(0)) - - output, err := shake256.Run(input) - require.NoError(t, err) - assert.Len(t, output, 32) - }) - - // Lamport precompile tests are covered in the precompile package - // t.Run("Lamport", func(t *testing.T) { ... }) - - // Test BLS precompile - t.Run("BLS", func(t *testing.T) { - blsVerify := &precompile.BLSVerify{} - - // Create dummy input (96 bytes sig + 48 bytes pubkey + message) - input := make([]byte, 96+48+32) - rand.Read(input) - - gas := blsVerify.RequiredGas(input) - assert.Equal(t, uint64(150000), gas) - - // Run will return placeholder result - result, err := blsVerify.Run(input) - require.NoError(t, err) - assert.Len(t, result, 32) - }) -} - -func testCGOPerformance(t *testing.T) { - // This test is for comparing performance when CGO optimizations are available - // CGO implementations are opt-in only with CGO=1 - - t.Run("ML-KEM Performance", func(t *testing.T) { - message := make([]byte, 32) - rand.Read(message) - - // Benchmark pure Go implementation - priv, _ := mlkem.GenerateKeyPair(rand.Reader, mlkem.MLKEM768) - - start := time.Now() - for i := 0; i < 100; i++ { - priv.PublicKey.Encapsulate(rand.Reader) - } - duration := time.Since(start) - - t.Logf("ML-KEM-768 Encapsulate (100 ops): %v", duration) - }) - - t.Run("ML-DSA Performance", func(t *testing.T) { - message := make([]byte, 32) - rand.Read(message) - - // Benchmark pure Go implementation - priv, _ := mldsa.GenerateKey(rand.Reader, mldsa.MLDSA65) - - start := time.Now() - for i := 0; i < 100; i++ { - priv.Sign(rand.Reader, message, nil) - } - duration := time.Since(start) - - t.Logf("ML-DSA-65 Sign (100 ops): %v", duration) - }) - - t.Run("SLH-DSA Performance", func(t *testing.T) { - message := make([]byte, 32) - rand.Read(message) - - // Benchmark pure Go implementation (fast variant) - priv, _ := slhdsa.GenerateKey(rand.Reader, slhdsa.SLHDSA128f) - - start := time.Now() - for i := 0; i < 10; i++ { // Fewer iterations due to larger signatures - priv.Sign(rand.Reader, message, nil) - } - duration := time.Since(start) - - t.Logf("SLH-DSA-128f Sign (10 ops): %v", duration) - }) -} - -// BenchmarkCrypto benchmarks all crypto implementations -func BenchmarkCrypto(b *testing.B) { - b.Run("ML-KEM-768", func(b *testing.B) { - priv, _ := mlkem.GenerateKeyPair(rand.Reader, mlkem.MLKEM768) - - b.Run("Encapsulate", func(b *testing.B) { - for i := 0; i < b.N; i++ { - priv.PublicKey.Encapsulate(rand.Reader) - } - }) - - result, _ := priv.PublicKey.Encapsulate(rand.Reader) - b.Run("Decapsulate", func(b *testing.B) { - for i := 0; i < b.N; i++ { - priv.Decapsulate(result.Ciphertext) - } - }) - }) - - b.Run("ML-DSA-65", func(b *testing.B) { - priv, _ := mldsa.GenerateKey(rand.Reader, mldsa.MLDSA65) - message := make([]byte, 32) - - b.Run("Sign", func(b *testing.B) { - for i := 0; i < b.N; i++ { - priv.Sign(rand.Reader, message, nil) - } - }) - - sig, _ := priv.Sign(rand.Reader, message, nil) - b.Run("Verify", func(b *testing.B) { - for i := 0; i < b.N; i++ { - priv.PublicKey.Verify(message, sig, nil) - } - }) - }) - - b.Run("Lamport-SHA256", func(b *testing.B) { - message := make([]byte, 32) - - b.Run("Generate", func(b *testing.B) { - for i := 0; i < b.N; i++ { - lamport.GenerateKey(rand.Reader, lamport.SHA256) - } - }) - - priv, _ := lamport.GenerateKey(rand.Reader, lamport.SHA256) - pub := priv.Public() - sig, _ := priv.Sign(message) - - b.Run("Verify", func(b *testing.B) { - for i := 0; i < b.N; i++ { - pub.Verify(message, sig) - } - }) - }) -} diff --git a/audit_test.go.bak b/audit_test.go.bak deleted file mode 100644 index f97a1db..0000000 --- a/audit_test.go.bak +++ /dev/null @@ -1,253 +0,0 @@ -package crypto - -import ( - "crypto/rand" - "fmt" - "testing" - - "github.com/luxfi/crypto/mldsa" - "github.com/luxfi/crypto/mlkem" - "github.com/luxfi/crypto/slhdsa" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" -) - -// TestMLKEMEdgeCases tests edge cases and potential bugs -func TestMLKEMEdgeCases(t *testing.T) { - t.Run("Invalid Mode", func(t *testing.T) { - _, err := mlkem.GenerateKeyPair(rand.Reader, mlkem.Mode(99)) - assert.Error(t, err) - }) - - t.Run("Nil Random Source", func(t *testing.T) { - _, err := mlkem.GenerateKeyPair(nil, mlkem.MLKEM768) - assert.Error(t, err) - }) - - t.Run("Empty Ciphertext", func(t *testing.T) { - priv, _ := mlkem.GenerateKeyPair(rand.Reader, mlkem.MLKEM768) - _, err := priv.Decapsulate([]byte{}) - assert.Error(t, err) - }) - - t.Run("Wrong Size Ciphertext", func(t *testing.T) { - priv, _ := mlkem.GenerateKeyPair(rand.Reader, mlkem.MLKEM768) - wrongCT := make([]byte, 100) // Wrong size - _, err := priv.Decapsulate(wrongCT) - assert.Error(t, err) - }) - - t.Run("Serialization Round Trip", func(t *testing.T) { - modes := []mlkem.Mode{mlkem.MLKEM512, mlkem.MLKEM768, mlkem.MLKEM1024} - for _, mode := range modes { - priv1, _ := mlkem.GenerateKeyPair(rand.Reader, mode) - - // Serialize - privBytes := priv1.Bytes() - pubBytes := priv1.PublicKey.Bytes() - - // Deserialize - priv2, err := mlkem.PrivateKeyFromBytes(privBytes, mode) - require.NoError(t, err) - pub2, err := mlkem.PublicKeyFromBytes(pubBytes, mode) - require.NoError(t, err) - - // Verify they work the same - result1, _ := priv1.PublicKey.Encapsulate(rand.Reader) - secret1, _ := priv1.Decapsulate(result1.Ciphertext) - - result2, _ := pub2.Encapsulate(rand.Reader) - secret2, _ := priv2.Decapsulate(result2.Ciphertext) - - // Both should produce valid shared secrets - assert.Len(t, secret1, 32) - assert.Len(t, secret2, 32) - } - }) - - t.Run("Deterministic Public Key", func(t *testing.T) { - // Same private key seed should generate same public key - privBytes := make([]byte, mlkem.MLKEM768PrivateKeySize) - copy(privBytes, []byte("deterministic seed for testing")) - - priv1, _ := mlkem.PrivateKeyFromBytes(privBytes, mlkem.MLKEM768) - priv2, _ := mlkem.PrivateKeyFromBytes(privBytes, mlkem.MLKEM768) - - assert.Equal(t, priv1.PublicKey.Bytes(), priv2.PublicKey.Bytes()) - }) -} - -// TestMLDSAEdgeCases tests ML-DSA edge cases -func TestMLDSAEdgeCases(t *testing.T) { - t.Run("Invalid Mode", func(t *testing.T) { - _, err := mldsa.GenerateKey(rand.Reader, mldsa.Mode(99)) - assert.Error(t, err) - }) - - t.Run("Empty Message", func(t *testing.T) { - priv, _ := mldsa.GenerateKey(rand.Reader, mldsa.MLDSA65) - sig, err := priv.Sign(rand.Reader, []byte{}, nil) - require.NoError(t, err) - assert.True(t, priv.PublicKey.Verify([]byte{}, sig, nil)) - }) - - t.Run("Large Message", func(t *testing.T) { - priv, _ := mldsa.GenerateKey(rand.Reader, mldsa.MLDSA65) - largeMsg := make([]byte, 10000) - rand.Read(largeMsg) - - sig, err := priv.Sign(rand.Reader, largeMsg, nil) - require.NoError(t, err) - assert.True(t, priv.PublicKey.Verify(largeMsg, sig, nil)) - }) - - t.Run("Signature Malleability", func(t *testing.T) { - priv, _ := mldsa.GenerateKey(rand.Reader, mldsa.MLDSA65) - msg := []byte("test message") - - sig1, _ := priv.Sign(rand.Reader, msg, nil) - sig2, _ := priv.Sign(rand.Reader, msg, nil) - - // Signatures should be deterministic in our implementation - assert.Equal(t, sig1, sig2) - }) - - t.Run("Wrong Signature Size", func(t *testing.T) { - priv, _ := mldsa.GenerateKey(rand.Reader, mldsa.MLDSA65) - msg := []byte("test") - - wrongSig := make([]byte, 100) // Wrong size - assert.False(t, priv.PublicKey.Verify(msg, wrongSig, nil)) - }) - - t.Run("Cross Mode Verification", func(t *testing.T) { - priv44, _ := mldsa.GenerateKey(rand.Reader, mldsa.MLDSA44) - priv65, _ := mldsa.GenerateKey(rand.Reader, mldsa.MLDSA65) - msg := []byte("test") - - sig44, _ := priv44.Sign(rand.Reader, msg, nil) - - // ML-DSA65 key shouldn't verify ML-DSA44 signature - assert.False(t, priv65.PublicKey.Verify(msg, sig44, nil)) - }) -} - -// TestSLHDSAEdgeCases tests SLH-DSA edge cases -func TestSLHDSAEdgeCases(t *testing.T) { - t.Run("Deterministic Signatures", func(t *testing.T) { - priv, _ := slhdsa.GenerateKey(rand.Reader, slhdsa.SLHDSA128f) - msg := []byte("deterministic test") - - sig1, _ := priv.Sign(rand.Reader, msg, nil) - sig2, _ := priv.Sign(rand.Reader, msg, nil) - - // SLH-DSA is deterministic - same message should produce same signature - assert.Equal(t, sig1, sig2) - }) - - t.Run("Large Signature Sizes", func(t *testing.T) { - modes := []struct { - mode slhdsa.Mode - name string - size int - }{ - {slhdsa.SLHDSA128f, "128f", slhdsa.SLHDSA128fSignatureSize}, - {slhdsa.SLHDSA192f, "192f", slhdsa.SLHDSA192fSignatureSize}, - } - - for _, m := range modes { - t.Run(m.name, func(t *testing.T) { - priv, _ := slhdsa.GenerateKey(rand.Reader, m.mode) - msg := []byte("test") - sig, _ := priv.Sign(rand.Reader, msg, nil) - - assert.Len(t, sig, m.size) - }) - } - }) -} - -// TestConcurrency tests thread safety -func TestConcurrency(t *testing.T) { - t.Run("ML-KEM Concurrent Operations", func(t *testing.T) { - priv, _ := mlkem.GenerateKeyPair(rand.Reader, mlkem.MLKEM768) - - // Run concurrent encapsulations - done := make(chan bool, 10) - for i := 0; i < 10; i++ { - go func() { - result, err := priv.PublicKey.Encapsulate(rand.Reader) - assert.NoError(t, err) - secret, err := priv.Decapsulate(result.Ciphertext) - assert.NoError(t, err) - assert.Equal(t, result.SharedSecret, secret) - done <- true - }() - } - - for i := 0; i < 10; i++ { - <-done - } - }) - - t.Run("ML-DSA Concurrent Signing", func(t *testing.T) { - priv, _ := mldsa.GenerateKey(rand.Reader, mldsa.MLDSA65) - - done := make(chan bool, 10) - for i := 0; i < 10; i++ { - go func(id int) { - msg := []byte(fmt.Sprintf("message %d", id)) - sig, err := priv.Sign(rand.Reader, msg, nil) - assert.NoError(t, err) - assert.True(t, priv.PublicKey.Verify(msg, sig, nil)) - done <- true - }(i) - } - - for i := 0; i < 10; i++ { - <-done - } - }) -} - -// TestMemoryLeaks checks for potential memory issues -func TestMemoryLeaks(t *testing.T) { - t.Run("ML-KEM No Leak", func(t *testing.T) { - // This would need proper memory profiling - // For now, just ensure no panics on repeated operations - for i := 0; i < 100; i++ { - priv, _ := mlkem.GenerateKeyPair(rand.Reader, mlkem.MLKEM768) - result, _ := priv.PublicKey.Encapsulate(rand.Reader) - priv.Decapsulate(result.Ciphertext) - } - }) -} - -// TestParameterValidation ensures all parameters match NIST specs -func TestParameterValidation(t *testing.T) { - // ML-KEM parameters from FIPS 203 - assert.Equal(t, 800, mlkem.MLKEM512PublicKeySize) - assert.Equal(t, 1632, mlkem.MLKEM512PrivateKeySize) - assert.Equal(t, 768, mlkem.MLKEM512CiphertextSize) - - assert.Equal(t, 1184, mlkem.MLKEM768PublicKeySize) - assert.Equal(t, 2400, mlkem.MLKEM768PrivateKeySize) - assert.Equal(t, 1088, mlkem.MLKEM768CiphertextSize) - - assert.Equal(t, 1568, mlkem.MLKEM1024PublicKeySize) - assert.Equal(t, 3168, mlkem.MLKEM1024PrivateKeySize) - assert.Equal(t, 1568, mlkem.MLKEM1024CiphertextSize) - - // ML-DSA parameters from FIPS 204 - assert.Equal(t, 1312, mldsa.MLDSA44PublicKeySize) - assert.Equal(t, 2528, mldsa.MLDSA44PrivateKeySize) - assert.Equal(t, 2420, mldsa.MLDSA44SignatureSize) - - assert.Equal(t, 1952, mldsa.MLDSA65PublicKeySize) - assert.Equal(t, 4000, mldsa.MLDSA65PrivateKeySize) - assert.Equal(t, 3293, mldsa.MLDSA65SignatureSize) - - assert.Equal(t, 2592, mldsa.MLDSA87PublicKeySize) - assert.Equal(t, 4864, mldsa.MLDSA87PrivateKeySize) - assert.Equal(t, 4595, mldsa.MLDSA87SignatureSize) -} \ No newline at end of file diff --git a/bitutil/bitutil.go b/bitutil/bitutil.go new file mode 100644 index 0000000..61e54d7 --- /dev/null +++ b/bitutil/bitutil.go @@ -0,0 +1,27 @@ +// Copyright 2025 The luxfi Authors +// This file is part of the luxfi library. +// +// The luxfi library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The luxfi library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the luxfi library. If not, see . + +package bitutil + +// TestBytes tests if all bytes in the slice are zero +func TestBytes(buf []byte) bool { + for _, b := range buf { + if b != 0 { + return false + } + } + return true +} diff --git a/blake2b/blake2b.go b/blake2b/blake2b.go index c24a88b..e00ee2e 100644 --- a/blake2b/blake2b.go +++ b/blake2b/blake2b.go @@ -302,7 +302,7 @@ func appendUint64(b []byte, x uint64) []byte { return append(b, a[:]...) } -//nolint:unused,deadcode +//nolint:unused func appendUint32(b []byte, x uint32) []byte { var a [4]byte binary.BigEndian.PutUint32(a[:], x) @@ -314,7 +314,7 @@ func consumeUint64(b []byte) ([]byte, uint64) { return b[8:], x } -//nolint:unused,deadcode +//nolint:unused func consumeUint32(b []byte) ([]byte, uint32) { x := binary.BigEndian.Uint32(b) return b[4:], x diff --git a/blake2b/blake2b_generic.go b/blake2b/blake2b_generic.go index 61e678f..4d3f69d 100644 --- a/blake2b/blake2b_generic.go +++ b/blake2b/blake2b_generic.go @@ -25,7 +25,7 @@ var precomputed = [10][16]byte{ {10, 8, 7, 1, 2, 4, 6, 5, 15, 9, 3, 13, 11, 14, 12, 0}, } -// nolint:unused,deadcode +// nolint:unused func hashBlocksGeneric(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte) { var m [16]uint64 c0, c1 := c[0], c[1] diff --git a/blake2b/blake2b_test.go b/blake2b/blake2b_test.go index 9d24444..8f21044 100644 --- a/blake2b/blake2b_test.go +++ b/blake2b/blake2b_test.go @@ -303,8 +303,7 @@ func benchmarkSum(b *testing.B, size int, sse4, avx, avx2 bool) { data := make([]byte, size) b.SetBytes(int64(size)) - b.ResetTimer() - for i := 0; i < b.N; i++ { + for b.Loop() { Sum512(data) } } @@ -319,8 +318,7 @@ func benchmarkWrite(b *testing.B, size int, sse4, avx, avx2 bool) { data := make([]byte, size) h, _ := New512(nil) b.SetBytes(int64(size)) - b.ResetTimer() - for i := 0; i < b.N; i++ { + for b.Loop() { h.Write(data) } } diff --git a/bn256/bn256_fast.go b/bn256/bn256_fast.go index 3dcf8af..8f47310 100644 --- a/bn256/bn256_fast.go +++ b/bn256/bn256_fast.go @@ -9,18 +9,18 @@ package bn256 import ( - bn256cf "github.com/luxfi/crypto/bn256/cloudflare" + gnark "github.com/luxfi/crypto/bn256/gnark" ) // G1 is an abstract cyclic group. The zero value is suitable for use as the // output of an operation, but cannot be used as an input. -type G1 = bn256cf.G1 +type G1 = gnark.G1 // G2 is an abstract cyclic group. The zero value is suitable for use as the // output of an operation, but cannot be used as an input. -type G2 = bn256cf.G2 +type G2 = gnark.G2 // PairingCheck calculates the Optimal Ate pairing for a set of points. func PairingCheck(a []*G1, b []*G2) bool { - return bn256cf.PairingCheck(a, b) + return gnark.PairingCheck(a, b) } diff --git a/bn256/cloudflare/gfp_decl.go b/bn256/cloudflare/gfp_decl.go index 1954d14..b7dd1a8 100644 --- a/bn256/cloudflare/gfp_decl.go +++ b/bn256/cloudflare/gfp_decl.go @@ -10,7 +10,7 @@ import ( "golang.org/x/sys/cpu" ) -//nolint:varcheck,unused,deadcode +//nolint:unused var hasBMI2 = cpu.X86.HasBMI2 //go:noescape diff --git a/bn256/gnark/g1.go b/bn256/gnark/g1.go index 59e04cb..a03fcbf 100644 --- a/bn256/gnark/g1.go +++ b/bn256/gnark/g1.go @@ -5,6 +5,7 @@ import ( "math/big" "github.com/consensys/gnark-crypto/ecc/bn254" + "github.com/luxfi/bitutil" ) // G1 is the affine representation of a G1 group element. @@ -43,7 +44,7 @@ func (g *G1) Unmarshal(buf []byte) (int, error) { return 0, errors.New("invalid G1 point size") } - if allZeroes(buf[:64]) { + if !bitutil.TestBytes(buf[:64]) { // point at infinity g.inner.X.SetZero() g.inner.Y.SetZero() @@ -82,12 +83,3 @@ func (p *G1) Marshal() []byte { return output } - -func allZeroes(buf []byte) bool { - for i := range buf { - if buf[i] != 0 { - return false - } - } - return true -} diff --git a/bn256/gnark/g2.go b/bn256/gnark/g2.go index 48a797e..07be8b5 100644 --- a/bn256/gnark/g2.go +++ b/bn256/gnark/g2.go @@ -4,6 +4,7 @@ import ( "errors" "github.com/consensys/gnark-crypto/ecc/bn254" + "github.com/luxfi/bitutil" ) // G2 is the affine representation of a G2 group element. @@ -31,7 +32,7 @@ func (g *G2) Unmarshal(buf []byte) (int, error) { return 0, errors.New("invalid G2 point size") } - if allZeroes(buf[:128]) { + if !bitutil.TestBytes(buf[:128]) { // point at infinity g.inner.X.A0.SetZero() g.inner.X.A1.SetZero() diff --git a/coverage.out b/coverage.out deleted file mode 100644 index 674b74c..0000000 --- a/coverage.out +++ /dev/null @@ -1,3808 +0,0 @@ -mode: set -github.com/luxfi/crypto/bn256/bn256_fast.go:24.42,26.2 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:44.40,46.42 2 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:46.42,48.3 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:49.2,49.33 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:53.59,54.20 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:54.20,56.3 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:57.2,58.36 2 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:62.48,63.35 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:63.35,65.3 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:66.2,68.30 3 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:72.75,73.35 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:73.35,75.3 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:76.2,76.16 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:76.16,78.3 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:80.2,82.36 3 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:86.84,87.80 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:87.80,89.3 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:90.2,90.16 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:90.16,92.3 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:94.2,94.67 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:98.103,99.69 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:99.69,101.3 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:102.2,102.16 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:102.16,104.3 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:107.2,108.29 2 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:108.29,109.35 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:109.35,111.4 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:112.3,112.28 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:115.2,115.77 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:119.102,120.76 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:120.76,122.3 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:123.2,123.16 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:123.16,125.3 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:128.2,129.29 2 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:129.29,130.35 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:130.35,132.4 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:133.3,133.28 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:136.2,136.80 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:140.74,141.23 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:141.23,143.3 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:146.2,146.50 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:146.50,148.3 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:150.2,154.36 3 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:154.36,155.51 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:155.51,157.4 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:158.3,158.34 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:161.2,162.48 2 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:166.80,167.26 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:167.26,169.3 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:172.2,172.56 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:172.56,174.3 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:176.2,180.39 3 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:180.39,181.57 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:181.57,183.4 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:184.3,184.37 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:187.2,188.48 2 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:194.41,195.34 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:195.34,197.3 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:198.2,198.28 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:202.53,205.15 3 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:205.15,207.3 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:208.2,208.19 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:208.19,210.3 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:211.2,212.12 2 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:216.42,217.36 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:217.36,219.3 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:220.2,220.29 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:224.54,227.15 3 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:227.15,229.3 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:230.2,230.19 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:230.19,232.3 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:233.2,234.12 2 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:238.41,239.35 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:239.35,241.3 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:242.2,242.30 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:246.53,247.21 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:247.21,249.3 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:250.2,253.12 4 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:259.101,260.70 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:260.70,262.3 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:263.2,263.23 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:263.23,265.3 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:266.2,266.16 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:266.16,268.3 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:272.2,272.25 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:272.25,273.58 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:273.58,275.4 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:278.2,278.13 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:284.52,286.45 2 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:286.45,288.3 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:289.2,289.16 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:293.52,295.46 2 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:295.46,297.3 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:298.2,298.17 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:302.52,304.45 2 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:304.45,306.3 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:307.2,307.16 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:311.51,312.31 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:312.31,314.3 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:315.2,315.43 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:315.43,317.3 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:318.2,318.37 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:322.52,323.32 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:323.32,325.3 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:326.2,326.44 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:326.44,328.3 1 0 -github.com/luxfi/crypto/bls12381/bls12381_blst.go:329.2,329.38 1 0 -github.com/luxfi/crypto/cache/lru.go:27.55,28.15 1 0 -github.com/luxfi/crypto/cache/lru.go:28.15,30.3 1 0 -github.com/luxfi/crypto/cache/lru.go:31.2,35.3 1 0 -github.com/luxfi/crypto/cache/lru.go:39.41,44.34 3 0 -github.com/luxfi/crypto/cache/lru.go:44.34,49.3 3 0 -github.com/luxfi/crypto/cache/lru.go:52.2,56.31 3 0 -github.com/luxfi/crypto/cache/lru.go:56.31,58.20 2 0 -github.com/luxfi/crypto/cache/lru.go:58.20,61.4 2 0 -github.com/luxfi/crypto/cache/lru.go:66.42,72.9 5 0 -github.com/luxfi/crypto/cache/lru.go:72.9,74.3 1 0 -github.com/luxfi/crypto/cache/lru.go:77.2,78.46 2 0 -github.com/luxfi/crypto/cache/lru.go:82.34,86.34 3 0 -github.com/luxfi/crypto/cache/lru.go:86.34,89.3 2 0 -github.com/luxfi/crypto/cache/lru.go:93.29,99.2 4 0 -github.com/luxfi/crypto/cache/lru.go:102.31,107.2 3 0 -github.com/luxfi/crypto/common/hash.go:21.38,22.11 1 0 -github.com/luxfi/crypto/common/hash.go:23.18,24.22 1 0 -github.com/luxfi/crypto/common/hash.go:25.10,26.22 1 0 -github.com/luxfi/crypto/common/hash.go:31.65,38.48 6 0 -github.com/luxfi/crypto/common/hash.go:38.48,45.22 6 0 -github.com/luxfi/crypto/common/hash.go:45.22,47.4 1 0 -github.com/luxfi/crypto/common/hash.go:48.3,49.19 2 0 -github.com/luxfi/crypto/common/hash.go:52.2,52.15 1 0 -github.com/luxfi/crypto/common/hash.go:56.45,62.44 5 0 -github.com/luxfi/crypto/common/hash.go:62.44,64.22 2 0 -github.com/luxfi/crypto/common/hash.go:64.22,66.4 1 0 -github.com/luxfi/crypto/common/hash.go:67.3,68.22 2 0 -github.com/luxfi/crypto/common/hash.go:68.22,72.4 3 0 -github.com/luxfi/crypto/common/hash.go:75.2,75.15 1 0 -github.com/luxfi/crypto/common/hash.go:79.38,80.22 1 0 -github.com/luxfi/crypto/common/hash.go:80.22,82.3 1 0 -github.com/luxfi/crypto/common/hash.go:84.2,85.19 2 0 -github.com/luxfi/crypto/common/hash.go:85.19,87.3 1 0 -github.com/luxfi/crypto/common/hash.go:88.2,88.20 1 0 -github.com/luxfi/crypto/common/hash.go:92.27,93.19 1 0 -github.com/luxfi/crypto/common/hash.go:93.19,95.3 1 0 -github.com/luxfi/crypto/common/types.go:52.33,56.2 3 0 -github.com/luxfi/crypto/common/types.go:60.33,60.66 1 0 -github.com/luxfi/crypto/common/types.go:64.31,64.65 1 0 -github.com/luxfi/crypto/common/types.go:67.30,67.45 1 0 -github.com/luxfi/crypto/common/types.go:70.30,70.68 1 0 -github.com/luxfi/crypto/common/types.go:73.28,73.62 1 0 -github.com/luxfi/crypto/common/types.go:77.31,79.2 1 0 -github.com/luxfi/crypto/common/types.go:83.35,84.21 1 0 -github.com/luxfi/crypto/common/types.go:84.21,86.3 1 0 -github.com/luxfi/crypto/common/types.go:88.2,88.32 1 0 -github.com/luxfi/crypto/common/types.go:92.63,94.34 2 0 -github.com/luxfi/crypto/common/types.go:94.34,96.3 1 0 -github.com/luxfi/crypto/common/types.go:97.2,97.10 1 0 -github.com/luxfi/crypto/common/types.go:101.44,103.9 2 0 -github.com/luxfi/crypto/common/types.go:103.9,105.3 1 0 -github.com/luxfi/crypto/common/types.go:106.2,106.29 1 0 -github.com/luxfi/crypto/common/types.go:106.29,108.3 1 0 -github.com/luxfi/crypto/common/types.go:109.2,110.12 2 0 -github.com/luxfi/crypto/common/types.go:114.45,116.2 1 0 -github.com/luxfi/crypto/common/types.go:119.50,121.2 1 0 -github.com/luxfi/crypto/common/types.go:124.50,126.2 1 0 -github.com/luxfi/crypto/common/types.go:129.45,131.2 1 0 -github.com/luxfi/crypto/common/types.go:134.43,136.2 1 0 -github.com/luxfi/crypto/common/types.go:143.39,147.2 3 0 -github.com/luxfi/crypto/common/types.go:151.39,151.75 1 0 -github.com/luxfi/crypto/common/types.go:155.37,155.74 1 0 -github.com/luxfi/crypto/common/types.go:159.34,160.20 1 0 -github.com/luxfi/crypto/common/types.go:160.20,162.3 1 0 -github.com/luxfi/crypto/common/types.go:163.2,163.46 1 0 -github.com/luxfi/crypto/common/types.go:167.33,167.48 1 0 -github.com/luxfi/crypto/common/types.go:170.33,170.71 1 0 -github.com/luxfi/crypto/common/types.go:173.31,175.2 1 0 -github.com/luxfi/crypto/common/types.go:178.34,180.2 1 0 -github.com/luxfi/crypto/common/types.go:182.40,187.32 3 0 -github.com/luxfi/crypto/common/types.go:187.32,189.15 2 0 -github.com/luxfi/crypto/common/types.go:189.15,191.4 1 0 -github.com/luxfi/crypto/common/types.go:191.9,193.4 1 0 -github.com/luxfi/crypto/common/types.go:194.3,194.35 1 0 -github.com/luxfi/crypto/common/types.go:194.35,196.4 1 0 -github.com/luxfi/crypto/common/types.go:198.2,198.12 1 0 -github.com/luxfi/crypto/common/types.go:201.31,206.2 4 0 -github.com/luxfi/crypto/common/types.go:210.38,211.21 1 0 -github.com/luxfi/crypto/common/types.go:211.21,213.3 1 0 -github.com/luxfi/crypto/common/types.go:214.2,214.35 1 0 -github.com/luxfi/crypto/common/types.go:218.48,220.2 1 0 -github.com/luxfi/crypto/common/types.go:223.53,225.2 1 0 -github.com/luxfi/crypto/common/types.go:228.53,230.2 1 0 -github.com/luxfi/crypto/common/types.go:233.47,235.9 2 0 -github.com/luxfi/crypto/common/types.go:235.9,237.3 1 0 -github.com/luxfi/crypto/common/types.go:238.2,238.32 1 0 -github.com/luxfi/crypto/common/types.go:238.32,240.3 1 0 -github.com/luxfi/crypto/common/types.go:241.2,242.12 2 0 -github.com/luxfi/crypto/common/types.go:246.48,248.2 1 0 -github.com/luxfi/crypto/common/types.go:251.46,253.2 1 0 -github.com/luxfi/crypto/common/types.go:256.30,256.58 1 0 -github.com/luxfi/crypto/common/types.go:259.37,261.2 1 0 -github.com/luxfi/crypto/common/types.go:265.35,267.2 1 0 -github.com/luxfi/crypto/common/types.go:269.29,270.21 1 0 -github.com/luxfi/crypto/common/types.go:270.21,272.3 1 0 -github.com/luxfi/crypto/common/types.go:273.2,273.32 1 0 -github.com/luxfi/crypto/common/types.go:273.32,274.25 1 0 -github.com/luxfi/crypto/common/types.go:274.25,276.4 1 0 -github.com/luxfi/crypto/common/types.go:278.2,278.13 1 0 -github.com/luxfi/crypto/common/types.go:281.34,283.2 1 0 -github.com/luxfi/crypto/common/types.go:287.31,288.20 1 0 -github.com/luxfi/crypto/common/types.go:288.20,290.3 1 0 -github.com/luxfi/crypto/common/types.go:291.2,291.19 1 0 -github.com/luxfi/crypto/common/types.go:291.19,293.3 1 0 -github.com/luxfi/crypto/common/types.go:294.2,295.10 2 0 -github.com/luxfi/crypto/common/types.go:299.47,300.14 1 0 -github.com/luxfi/crypto/common/types.go:300.14,302.3 1 0 -github.com/luxfi/crypto/common/types.go:303.2,305.8 3 0 -github.com/luxfi/crypto/common/types.go:309.35,312.2 2 0 -github.com/luxfi/crypto/common/types.go:315.33,317.2 1 0 -github.com/luxfi/crypto/common/types.go:319.33,324.2 4 0 -github.com/luxfi/crypto/common/types.go:326.41,328.2 1 0 -github.com/luxfi/crypto/common/types.go:330.39,331.22 1 0 -github.com/luxfi/crypto/common/types.go:331.22,334.3 2 0 -github.com/luxfi/crypto/common/types.go:335.2,335.34 1 0 -github.com/luxfi/crypto/common/types.go:338.45,339.69 1 0 -github.com/luxfi/crypto/common/types.go:339.69,341.3 1 0 -github.com/luxfi/crypto/common/types.go:342.2,343.32 2 0 -github.com/luxfi/crypto/common/types.go:343.32,345.3 1 0 -github.com/luxfi/crypto/common/types.go:346.2,346.21 1 0 -github.com/luxfi/crypto/common/types.go:346.21,348.3 1 0 -github.com/luxfi/crypto/common/types.go:349.2,350.12 2 0 -github.com/luxfi/crypto/common/types.go:353.30,355.2 1 0 -github.com/luxfi/crypto/common/types.go:359.44,364.2 3 0 -github.com/luxfi/crypto/common/utils.go:10.49,11.30 1 0 -github.com/luxfi/crypto/common/utils.go:11.30,13.3 1 0 -github.com/luxfi/crypto/common/utils.go:14.2,14.12 1 0 -github.com/luxfi/crypto/common/utils.go:18.49,19.17 1 0 -github.com/luxfi/crypto/common/utils.go:19.17,21.3 1 0 -github.com/luxfi/crypto/common/utils.go:22.2,22.12 1 0 -github.com/luxfi/crypto/common/utils.go:26.68,27.51 1 0 -github.com/luxfi/crypto/common/utils.go:27.51,29.3 1 0 -github.com/luxfi/crypto/common/utils.go:31.2,32.52 2 0 -github.com/luxfi/crypto/common/utils.go:32.52,34.3 1 0 -github.com/luxfi/crypto/common/utils.go:36.2,36.19 1 0 -github.com/luxfi/crypto/common/utils.go:40.44,42.29 2 0 -github.com/luxfi/crypto/common/utils.go:42.29,44.3 1 0 -github.com/luxfi/crypto/common/utils.go:45.2,45.28 1 0 -github.com/luxfi/crypto/common/utils.go:49.56,53.29 3 0 -github.com/luxfi/crypto/common/utils.go:53.29,54.32 1 0 -github.com/luxfi/crypto/common/utils.go:54.32,55.52 1 0 -github.com/luxfi/crypto/common/utils.go:57.3,58.17 2 0 -github.com/luxfi/crypto/common/utils.go:61.2,61.17 1 0 -github.com/luxfi/crypto/common/utils.go:65.54,67.25 2 0 -github.com/luxfi/crypto/common/utils.go:67.25,68.40 1 0 -github.com/luxfi/crypto/common/utils.go:68.40,70.4 1 0 -github.com/luxfi/crypto/common/utils.go:75.52,76.22 1 0 -github.com/luxfi/crypto/common/utils.go:76.22,77.41 1 0 -github.com/luxfi/crypto/common/utils.go:80.2,81.24 2 0 -github.com/luxfi/crypto/common/utils.go:81.24,83.3 1 0 -github.com/luxfi/crypto/common/utils.go:84.2,84.15 1 0 -github.com/luxfi/crypto/common/utils.go:88.74,89.30 1 0 -github.com/luxfi/crypto/common/utils.go:89.30,91.3 1 0 -github.com/luxfi/crypto/common/utils.go:92.2,92.12 1 0 -github.com/luxfi/crypto/common/utils.go:96.38,97.25 1 0 -github.com/luxfi/crypto/common/utils.go:97.25,99.3 1 0 -github.com/luxfi/crypto/common/utils.go:100.2,101.12 2 0 -github.com/luxfi/crypto/common/utils.go:105.65,107.2 1 0 -github.com/luxfi/crypto/common/utils.go:110.45,112.2 1 0 -github.com/luxfi/crypto/common/utils.go:115.56,116.51 1 0 -github.com/luxfi/crypto/common/utils.go:116.51,118.3 1 0 -github.com/luxfi/crypto/common/utils.go:120.2,121.12 2 0 -github.com/luxfi/crypto/common/utils.go:125.24,126.11 1 0 -github.com/luxfi/crypto/common/utils.go:126.11,128.3 1 0 -github.com/luxfi/crypto/common/utils.go:129.2,129.10 1 0 -github.com/luxfi/crypto/common/utils.go:133.24,134.11 1 0 -github.com/luxfi/crypto/common/utils.go:134.11,136.3 1 0 -github.com/luxfi/crypto/common/utils.go:137.2,137.10 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:47.36,47.54 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:50.43,51.21 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:51.21,53.3 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:54.2,54.25 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:54.25,56.3 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:57.2,58.16 2 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:58.16,60.3 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:61.2,61.15 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:65.38,67.16 2 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:67.16,68.13 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:70.2,70.12 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:74.30,79.2 4 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:82.49,84.16 2 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:84.16,86.3 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:87.2,88.16 2 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:88.16,90.3 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:91.2,91.17 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:96.44,98.16 2 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:98.16,99.13 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:101.2,101.12 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:105.36,109.2 3 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:113.48,115.16 2 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:115.16,117.3 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:118.2,118.19 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:118.19,120.3 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:121.2,123.23 3 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:123.23,125.16 2 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:125.16,127.4 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:128.3,128.35 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:128.35,130.24 2 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:130.24,132.5 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:133.4,134.29 2 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:136.3,136.14 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:138.2,139.17 2 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:144.43,146.16 2 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:146.16,147.13 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:149.2,149.12 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:153.40,154.38 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:154.38,156.3 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:156.8,156.21 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:156.21,158.3 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:158.8,160.3 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:164.35,166.2 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:169.56,170.21 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:170.21,172.3 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:173.2,173.25 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:173.25,175.3 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:176.2,177.21 2 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:177.21,179.3 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:180.2,180.39 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:180.39,182.3 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:183.2,183.19 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:188.35,189.9 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:190.30,191.26 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:192.30,193.31 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:194.30,195.31 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:196.10,197.19 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:201.32,202.44 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:202.44,203.18 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:204.25,205.25 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:206.26,207.20 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:210.2,210.45 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:210.45,212.3 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:213.2,213.26 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:213.26,215.3 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:216.2,216.12 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:224.30,226.2 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:229.49,230.22 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:230.22,232.3 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:233.2,233.68 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:237.49,239.16 2 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:239.16,241.3 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:242.2,242.19 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:242.19,244.3 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:245.2,247.23 3 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:247.23,249.16 2 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:249.16,251.4 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:252.3,252.35 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:252.35,254.24 2 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:254.24,256.5 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:257.4,258.29 2 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:260.3,260.14 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:262.2,263.12 2 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:267.44,269.2 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:272.31,274.2 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:281.52,282.22 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:282.22,284.3 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:285.2,285.71 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:289.52,291.16 2 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:291.16,293.3 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:294.2,294.19 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:294.19,296.3 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:297.2,298.27 2 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:298.27,300.23 2 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:300.23,302.4 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:303.3,304.13 2 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:306.2,307.12 2 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:311.47,313.2 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:316.33,318.2 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:325.50,326.22 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:326.22,328.3 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:329.2,329.69 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:333.50,335.16 2 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:335.16,337.3 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:338.2,338.21 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:338.21,340.3 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:341.2,342.27 2 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:342.27,344.23 2 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:344.23,346.4 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:347.3,348.19 2 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:350.2,351.12 2 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:355.45,357.2 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:360.31,362.2 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:369.46,374.2 4 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:377.51,378.22 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:378.22,380.3 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:381.2,381.70 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:385.51,387.16 2 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:387.16,389.3 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:390.2,391.47 2 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:391.47,393.3 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:393.8,395.3 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:396.2,396.12 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:400.32,402.2 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:407.68,408.22 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:408.22,410.3 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:411.2,411.89 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:417.66,419.16 2 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:419.16,421.3 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:422.2,422.28 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:422.28,424.3 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:426.2,426.24 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:426.24,427.35 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:427.35,429.4 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:431.2,432.12 2 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:438.76,440.16 2 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:440.16,442.3 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:443.2,443.28 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:443.28,445.3 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:447.2,447.24 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:447.24,448.35 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:448.35,450.4 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:452.2,453.12 2 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:457.41,459.9 2 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:459.9,460.41 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:462.2,462.22 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:462.22,463.40 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:465.2,465.10 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:470.34,472.2 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:474.43,476.2 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:478.55,479.34 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:479.34,481.3 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:482.2,482.12 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:485.60,486.21 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:486.21,488.3 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:489.2,489.31 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:489.31,491.3 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:492.2,493.21 2 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:493.21,495.3 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:496.2,496.39 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:496.39,498.3 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:499.2,499.19 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:502.43,504.2 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:506.63,507.21 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:507.21,509.3 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:510.2,510.30 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:510.30,512.3 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:512.8,512.23 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:512.23,514.3 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:515.2,515.23 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:515.23,517.3 1 0 -github.com/luxfi/crypto/common/hexutil/hexutil.go:518.2,518.19 1 0 -github.com/luxfi/crypto/common/math/big.go:37.45,38.13 1 0 -github.com/luxfi/crypto/common/math/big.go:38.13,40.3 1 0 -github.com/luxfi/crypto/common/math/big.go:41.2,43.53 3 0 -github.com/luxfi/crypto/common/math/big.go:43.53,45.3 1 0 -github.com/luxfi/crypto/common/math/big.go:45.8,47.3 1 0 -github.com/luxfi/crypto/common/math/big.go:48.2,48.33 1 0 -github.com/luxfi/crypto/common/math/big.go:48.33,50.3 1 0 -github.com/luxfi/crypto/common/math/big.go:51.2,51.19 1 0 -github.com/luxfi/crypto/common/math/big.go:55.41,57.9 2 0 -github.com/luxfi/crypto/common/math/big.go:57.9,58.41 1 0 -github.com/luxfi/crypto/common/math/big.go:60.2,60.10 1 0 -github.com/luxfi/crypto/common/math/big.go:64.34,67.2 2 0 -github.com/luxfi/crypto/common/math/big.go:70.37,71.18 1 0 -github.com/luxfi/crypto/common/math/big.go:71.18,73.3 1 0 -github.com/luxfi/crypto/common/math/big.go:74.2,74.10 1 0 -github.com/luxfi/crypto/common/math/big.go:78.37,79.18 1 0 -github.com/luxfi/crypto/common/math/big.go:79.18,81.3 1 0 -github.com/luxfi/crypto/common/math/big.go:82.2,82.10 1 0 -github.com/luxfi/crypto/common/math/big.go:87.52,88.28 1 0 -github.com/luxfi/crypto/common/math/big.go:88.28,90.3 1 0 -github.com/luxfi/crypto/common/math/big.go:91.2,93.12 3 0 -github.com/luxfi/crypto/common/math/big.go:98.44,100.34 2 0 -github.com/luxfi/crypto/common/math/big.go:100.34,101.43 1 0 -github.com/luxfi/crypto/common/math/big.go:101.43,105.4 3 0 -github.com/luxfi/crypto/common/math/big.go:110.32,112.2 1 0 -github.com/luxfi/crypto/common/math/big.go:116.35,118.2 1 0 -github.com/luxfi/crypto/common/math/big.go:127.32,128.22 1 0 -github.com/luxfi/crypto/common/math/big.go:128.22,130.3 1 0 -github.com/luxfi/crypto/common/math/big.go:131.2,131.35 1 0 -github.com/luxfi/crypto/common/math/big.go:135.42,138.2 2 0 -github.com/luxfi/crypto/common/math/big.go:141.42,144.2 2 0 -github.com/luxfi/crypto/common/math/big.go:147.42,150.2 2 0 -github.com/luxfi/crypto/common/math/big.go:153.43,154.12 1 0 -github.com/luxfi/crypto/common/math/big.go:154.12,156.3 1 0 -github.com/luxfi/crypto/common/math/big.go:157.2,157.19 1 0 -github.com/luxfi/crypto/common/math/big.go:164.51,165.20 1 0 -github.com/luxfi/crypto/common/math/big.go:165.20,167.3 1 0 -github.com/luxfi/crypto/common/math/big.go:168.2,168.47 1 0 -github.com/luxfi/crypto/common/math/big.go:174.51,178.21 3 0 -github.com/luxfi/crypto/common/math/big.go:178.21,180.3 1 0 -github.com/luxfi/crypto/common/math/big.go:181.2,185.28 3 0 -github.com/luxfi/crypto/common/math/big.go:193.44,197.39 3 0 -github.com/luxfi/crypto/common/math/big.go:197.39,198.33 1 0 -github.com/luxfi/crypto/common/math/big.go:198.33,199.19 1 0 -github.com/luxfi/crypto/common/math/big.go:199.19,201.5 1 0 -github.com/luxfi/crypto/common/math/big.go:202.4,203.14 2 0 -github.com/luxfi/crypto/common/math/big.go:206.2,206.15 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:28.51,29.6 1 1 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:29.6,31.33 2 1 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:31.33,33.4 1 1 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:44.51,46.16 2 1 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:46.16,48.3 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:50.2,50.42 1 1 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:53.30,55.2 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:59.45,60.16 1 1 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:60.16,62.3 1 1 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:63.2,64.10 2 1 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:68.48,69.16 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:69.16,71.3 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:72.2,73.10 2 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:77.32,78.16 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:78.16,80.3 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:81.2,82.10 2 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:86.29,87.16 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:87.16,89.3 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:90.2,91.10 2 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:95.29,96.16 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:96.16,98.3 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:99.2,100.10 2 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:104.31,108.16 2 1 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:108.16,110.3 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:112.2,114.22 3 1 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:114.22,116.3 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:117.2,124.12 6 1 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:129.50,132.25 2 1 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:132.25,134.3 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:136.2,136.16 1 1 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:136.16,138.3 1 1 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:138.8,140.3 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:141.2,142.42 2 1 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:142.42,144.3 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:145.2,145.53 1 1 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:145.53,147.3 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:149.2,153.36 4 1 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:153.36,158.3 3 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:158.8,162.23 3 1 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:162.23,164.4 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:166.2,166.28 1 1 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:176.51,178.16 2 1 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:178.16,180.3 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:182.2,182.42 1 1 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:185.30,187.2 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:191.45,192.16 1 1 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:192.16,194.3 1 1 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:195.2,196.10 2 1 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:200.48,201.16 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:201.16,203.3 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:204.2,205.10 2 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:209.32,210.16 1 1 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:210.16,212.3 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:213.2,214.10 2 1 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:218.29,219.16 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:219.16,221.3 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:222.2,223.10 2 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:227.29,228.16 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:228.16,230.3 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:231.2,232.10 2 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:236.31,240.16 2 1 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:240.16,242.3 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:244.2,246.22 3 1 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:246.22,248.3 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:249.2,260.12 10 1 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:265.50,268.25 2 1 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:268.25,270.3 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:272.2,272.16 1 1 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:272.16,274.3 1 1 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:275.2,276.44 2 1 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:276.44,278.3 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:279.2,279.55 1 1 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:279.55,281.3 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:282.2,282.57 1 1 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:282.57,284.3 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:285.2,285.57 1 1 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:285.57,287.3 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:289.2,294.38 5 1 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:294.38,299.3 3 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:299.8,303.23 3 1 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:303.23,305.4 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:307.2,307.28 1 1 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:317.31,319.2 1 1 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:322.42,326.30 3 1 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:326.30,327.49 1 1 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:327.49,328.12 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:330.3,330.39 1 1 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:332.2,332.41 1 1 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:338.33,340.2 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:342.30,344.2 1 1 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:347.48,348.16 1 1 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:348.16,350.3 1 1 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:351.2,352.10 2 1 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:356.32,357.16 1 1 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:357.16,359.3 1 1 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:360.2,361.10 2 1 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:365.29,366.16 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:366.16,368.3 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:369.2,370.10 2 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:374.29,375.16 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:375.16,377.3 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:378.2,379.10 2 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:383.29,387.2 3 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:390.31,394.16 2 1 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:394.16,397.3 2 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:399.2,427.12 27 1 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:432.50,436.26 2 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:436.26,438.3 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:440.2,440.16 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:440.16,442.3 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:444.2,445.46 2 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:445.46,447.3 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:448.2,448.57 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:448.57,450.3 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:451.2,451.59 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:451.59,453.3 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:454.2,454.59 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:454.59,456.3 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:457.2,457.59 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:457.59,459.3 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:460.2,460.59 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:460.59,462.3 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:463.2,463.59 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:463.59,465.3 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:466.2,466.59 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:466.59,468.3 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:469.2,469.59 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:469.59,471.3 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:472.2,472.59 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:472.59,474.3 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:475.2,475.60 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:475.60,477.3 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:478.2,478.60 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:478.60,480.3 1 0 -github.com/luxfi/crypto/bn256/cloudflare/bn256.go:481.2,494.29 13 0 -github.com/luxfi/crypto/bn256/cloudflare/constants.go:11.39,14.2 2 1 -github.com/luxfi/crypto/bn256/cloudflare/curve.go:23.38,29.2 5 0 -github.com/luxfi/crypto/bn256/cloudflare/curve.go:31.41,36.2 4 1 -github.com/luxfi/crypto/bn256/cloudflare/curve.go:39.39,41.20 2 1 -github.com/luxfi/crypto/bn256/cloudflare/curve.go:41.20,43.3 1 0 -github.com/luxfi/crypto/bn256/cloudflare/curve.go:45.2,51.19 6 1 -github.com/luxfi/crypto/bn256/cloudflare/curve.go:54.36,59.2 4 1 -github.com/luxfi/crypto/bn256/cloudflare/curve.go:61.40,63.2 1 1 -github.com/luxfi/crypto/bn256/cloudflare/curve.go:65.44,66.20 1 1 -github.com/luxfi/crypto/bn256/cloudflare/curve.go:66.20,69.3 2 1 -github.com/luxfi/crypto/bn256/cloudflare/curve.go:70.2,70.20 1 1 -github.com/luxfi/crypto/bn256/cloudflare/curve.go:70.20,73.3 2 0 -github.com/luxfi/crypto/bn256/cloudflare/curve.go:80.2,117.22 23 1 -github.com/luxfi/crypto/bn256/cloudflare/curve.go:117.22,120.3 2 0 -github.com/luxfi/crypto/bn256/cloudflare/curve.go:121.2,149.21 19 1 -github.com/luxfi/crypto/bn256/cloudflare/curve.go:152.44,183.2 24 1 -github.com/luxfi/crypto/bn256/cloudflare/curve.go:185.58,198.45 10 1 -github.com/luxfi/crypto/bn256/cloudflare/curve.go:198.45,200.26 2 1 -github.com/luxfi/crypto/bn256/cloudflare/curve.go:200.26,202.4 1 1 -github.com/luxfi/crypto/bn256/cloudflare/curve.go:202.9,204.4 1 1 -github.com/luxfi/crypto/bn256/cloudflare/curve.go:206.2,206.12 1 1 -github.com/luxfi/crypto/bn256/cloudflare/curve.go:209.35,210.23 1 1 -github.com/luxfi/crypto/bn256/cloudflare/curve.go:210.23,212.3 1 1 -github.com/luxfi/crypto/bn256/cloudflare/curve.go:212.8,212.30 1 1 -github.com/luxfi/crypto/bn256/cloudflare/curve.go:212.30,217.3 4 0 -github.com/luxfi/crypto/bn256/cloudflare/curve.go:219.2,230.18 9 1 -github.com/luxfi/crypto/bn256/cloudflare/curve.go:233.41,238.2 4 0 -github.com/luxfi/crypto/bn256/cloudflare/gfp.go:10.33,11.12 1 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp.go:11.12,13.3 1 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp.go:13.8,16.3 2 0 -github.com/luxfi/crypto/bn256/cloudflare/gfp.go:18.2,19.12 2 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp.go:22.31,24.2 1 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp.go:26.27,31.2 4 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp.go:33.30,40.34 5 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp.go:40.34,41.39 1 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp.go:41.39,42.32 1 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp.go:42.32,44.5 1 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp.go:45.4,45.31 1 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp.go:49.2,50.12 2 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp.go:53.35,54.31 1 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp.go:54.31,55.32 1 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp.go:55.32,57.4 1 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp.go:61.42,63.31 1 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp.go:63.31,65.32 2 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp.go:65.32,67.4 1 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp.go:70.2,70.26 1 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp.go:70.26,71.19 1 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp.go:71.19,73.4 1 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp.go:74.3,74.19 1 0 -github.com/luxfi/crypto/bn256/cloudflare/gfp.go:74.19,76.4 1 0 -github.com/luxfi/crypto/bn256/cloudflare/gfp.go:78.2,78.55 1 0 -github.com/luxfi/crypto/bn256/cloudflare/gfp.go:81.28,81.48 1 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp.go:82.28,82.53 1 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp12.go:17.33,19.2 1 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp12.go:21.38,25.2 3 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp12.go:27.34,31.2 3 0 -github.com/luxfi/crypto/bn256/cloudflare/gfp12.go:33.33,37.2 3 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp12.go:39.31,41.2 1 0 -github.com/luxfi/crypto/bn256/cloudflare/gfp12.go:43.30,45.2 1 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp12.go:47.44,51.2 3 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp12.go:53.38,57.2 3 0 -github.com/luxfi/crypto/bn256/cloudflare/gfp12.go:60.44,65.2 4 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp12.go:68.46,73.2 4 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp12.go:75.46,80.2 4 0 -github.com/luxfi/crypto/bn256/cloudflare/gfp12.go:82.41,86.2 3 0 -github.com/luxfi/crypto/bn256/cloudflare/gfp12.go:88.41,92.2 3 0 -github.com/luxfi/crypto/bn256/cloudflare/gfp12.go:94.41,105.2 8 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp12.go:107.53,111.2 3 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp12.go:113.54,117.43 3 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp12.go:117.43,119.24 2 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp12.go:119.24,121.4 1 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp12.go:121.9,123.4 1 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp12.go:126.2,127.10 2 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp12.go:130.41,144.2 10 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp12.go:146.41,160.2 9 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp2.go:13.33,18.2 4 0 -github.com/luxfi/crypto/bn256/cloudflare/gfp2.go:20.32,22.2 1 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp2.go:24.35,28.2 3 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp2.go:30.32,34.2 3 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp2.go:36.31,40.2 3 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp2.go:42.30,45.2 2 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp2.go:47.29,50.2 2 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp2.go:52.41,56.2 3 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp2.go:58.35,62.2 3 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp2.go:64.38,68.2 3 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp2.go:70.38,74.2 3 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp2.go:78.38,92.2 11 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp2.go:94.49,98.2 3 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp2.go:101.37,122.2 15 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp2.go:124.38,138.2 9 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp2.go:140.38,156.2 10 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp6.go:13.32,15.2 1 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp6.go:17.35,22.2 4 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp6.go:24.32,29.2 4 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp6.go:31.31,36.2 4 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp6.go:38.30,40.2 1 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp6.go:42.29,44.2 1 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp6.go:46.35,51.2 4 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp6.go:53.41,61.2 6 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp6.go:64.43,71.2 4 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp6.go:73.43,78.2 4 0 -github.com/luxfi/crypto/bn256/cloudflare/gfp6.go:80.38,85.2 4 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp6.go:87.38,92.2 4 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp6.go:94.38,122.2 20 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp6.go:124.50,129.2 4 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp6.go:131.46,136.2 4 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp6.go:139.38,147.2 6 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp6.go:149.38,169.2 15 1 -github.com/luxfi/crypto/bn256/cloudflare/gfp6.go:171.38,213.2 22 1 -github.com/luxfi/crypto/bn256/cloudflare/lattice.go:44.52,49.25 3 1 -github.com/luxfi/crypto/bn256/cloudflare/lattice.go:49.25,52.3 2 1 -github.com/luxfi/crypto/bn256/cloudflare/lattice.go:55.2,58.25 3 1 -github.com/luxfi/crypto/bn256/cloudflare/lattice.go:58.25,61.26 2 1 -github.com/luxfi/crypto/bn256/cloudflare/lattice.go:61.26,64.4 2 1 -github.com/luxfi/crypto/bn256/cloudflare/lattice.go:66.3,67.67 2 1 -github.com/luxfi/crypto/bn256/cloudflare/lattice.go:69.2,71.12 2 1 -github.com/luxfi/crypto/bn256/cloudflare/lattice.go:74.51,78.31 3 0 -github.com/luxfi/crypto/bn256/cloudflare/lattice.go:78.31,79.36 1 0 -github.com/luxfi/crypto/bn256/cloudflare/lattice.go:79.36,80.21 1 0 -github.com/luxfi/crypto/bn256/cloudflare/lattice.go:80.21,82.5 1 0 -github.com/luxfi/crypto/bn256/cloudflare/lattice.go:87.50,91.27 3 1 -github.com/luxfi/crypto/bn256/cloudflare/lattice.go:91.27,92.26 1 1 -github.com/luxfi/crypto/bn256/cloudflare/lattice.go:92.26,94.4 1 1 -github.com/luxfi/crypto/bn256/cloudflare/lattice.go:97.2,98.27 2 1 -github.com/luxfi/crypto/bn256/cloudflare/lattice.go:98.27,99.31 1 1 -github.com/luxfi/crypto/bn256/cloudflare/lattice.go:99.31,101.4 1 1 -github.com/luxfi/crypto/bn256/cloudflare/lattice.go:104.2,104.12 1 1 -github.com/luxfi/crypto/bn256/cloudflare/lattice.go:108.33,112.22 3 1 -github.com/luxfi/crypto/bn256/cloudflare/lattice.go:112.22,114.3 1 1 -github.com/luxfi/crypto/bn256/cloudflare/optate.go:3.99,50.2 29 1 -github.com/luxfi/crypto/bn256/cloudflare/optate.go:52.89,92.2 26 1 -github.com/luxfi/crypto/bn256/cloudflare/optate.go:94.41,112.2 14 1 -github.com/luxfi/crypto/bn256/cloudflare/optate.go:122.50,141.45 13 1 -github.com/luxfi/crypto/bn256/cloudflare/optate.go:141.45,143.31 2 1 -github.com/luxfi/crypto/bn256/cloudflare/optate.go:143.31,145.4 1 1 -github.com/luxfi/crypto/bn256/cloudflare/optate.go:147.3,150.28 3 1 -github.com/luxfi/crypto/bn256/cloudflare/optate.go:151.10,152.60 1 1 -github.com/luxfi/crypto/bn256/cloudflare/optate.go:153.11,154.59 1 1 -github.com/luxfi/crypto/bn256/cloudflare/optate.go:155.11,156.12 1 1 -github.com/luxfi/crypto/bn256/cloudflare/optate.go:159.3,160.11 2 1 -github.com/luxfi/crypto/bn256/cloudflare/optate.go:178.2,205.12 18 1 -github.com/luxfi/crypto/bn256/cloudflare/optate.go:211.44,260.2 36 1 -github.com/luxfi/crypto/bn256/cloudflare/optate.go:262.54,266.38 3 1 -github.com/luxfi/crypto/bn256/cloudflare/optate.go:266.38,268.3 1 1 -github.com/luxfi/crypto/bn256/cloudflare/optate.go:269.2,269.12 1 1 -github.com/luxfi/crypto/bn256/cloudflare/twist.go:33.38,37.2 3 0 -github.com/luxfi/crypto/bn256/cloudflare/twist.go:39.41,44.2 4 1 -github.com/luxfi/crypto/bn256/cloudflare/twist.go:47.39,49.20 2 1 -github.com/luxfi/crypto/bn256/cloudflare/twist.go:49.20,51.3 1 0 -github.com/luxfi/crypto/bn256/cloudflare/twist.go:53.2,57.16 4 1 -github.com/luxfi/crypto/bn256/cloudflare/twist.go:57.16,59.3 1 0 -github.com/luxfi/crypto/bn256/cloudflare/twist.go:62.2,64.24 3 1 -github.com/luxfi/crypto/bn256/cloudflare/twist.go:67.36,72.2 4 0 -github.com/luxfi/crypto/bn256/cloudflare/twist.go:74.40,76.2 1 1 -github.com/luxfi/crypto/bn256/cloudflare/twist.go:78.44,81.20 1 1 -github.com/luxfi/crypto/bn256/cloudflare/twist.go:81.20,84.3 2 1 -github.com/luxfi/crypto/bn256/cloudflare/twist.go:85.2,85.20 1 1 -github.com/luxfi/crypto/bn256/cloudflare/twist.go:85.20,88.3 2 0 -github.com/luxfi/crypto/bn256/cloudflare/twist.go:91.2,111.22 16 1 -github.com/luxfi/crypto/bn256/cloudflare/twist.go:111.22,114.3 2 1 -github.com/luxfi/crypto/bn256/cloudflare/twist.go:115.2,134.16 16 1 -github.com/luxfi/crypto/bn256/cloudflare/twist.go:137.44,164.2 21 1 -github.com/luxfi/crypto/bn256/cloudflare/twist.go:166.58,169.40 2 1 -github.com/luxfi/crypto/bn256/cloudflare/twist.go:169.40,171.25 2 1 -github.com/luxfi/crypto/bn256/cloudflare/twist.go:171.25,173.4 1 1 -github.com/luxfi/crypto/bn256/cloudflare/twist.go:173.9,175.4 1 1 -github.com/luxfi/crypto/bn256/cloudflare/twist.go:178.2,178.12 1 1 -github.com/luxfi/crypto/bn256/cloudflare/twist.go:181.35,182.17 1 1 -github.com/luxfi/crypto/bn256/cloudflare/twist.go:182.17,184.3 1 1 -github.com/luxfi/crypto/bn256/cloudflare/twist.go:184.8,184.25 1 1 -github.com/luxfi/crypto/bn256/cloudflare/twist.go:184.25,189.3 4 1 -github.com/luxfi/crypto/bn256/cloudflare/twist.go:191.2,198.14 8 1 -github.com/luxfi/crypto/bn256/cloudflare/twist.go:201.41,206.2 4 1 -github.com/luxfi/crypto/bls/bls.go:51.41,54.16 3 1 -github.com/luxfi/crypto/bls/bls.go:54.16,56.3 1 0 -github.com/luxfi/crypto/bls/bls.go:58.2,59.16 2 1 -github.com/luxfi/crypto/bls/bls.go:59.16,61.3 1 0 -github.com/luxfi/crypto/bls/bls.go:64.2,64.21 1 1 -github.com/luxfi/crypto/bls/bls.go:64.21,66.3 1 1 -github.com/luxfi/crypto/bls/bls.go:68.2,68.32 1 1 -github.com/luxfi/crypto/bls/bls.go:72.45,73.31 1 1 -github.com/luxfi/crypto/bls/bls.go:73.31,75.3 1 1 -github.com/luxfi/crypto/bls/bls.go:76.2,77.13 2 1 -github.com/luxfi/crypto/bls/bls.go:82.61,84.52 2 1 -github.com/luxfi/crypto/bls/bls.go:84.52,86.3 1 1 -github.com/luxfi/crypto/bls/bls.go:87.2,87.32 1 1 -github.com/luxfi/crypto/bls/bls.go:91.45,92.31 1 1 -github.com/luxfi/crypto/bls/bls.go:92.31,94.3 1 1 -github.com/luxfi/crypto/bls/bls.go:95.2,95.42 1 1 -github.com/luxfi/crypto/bls/bls.go:99.58,107.42 2 0 -github.com/luxfi/crypto/bls/bls.go:107.42,110.17 3 0 -github.com/luxfi/crypto/bls/bls.go:110.17,112.4 1 0 -github.com/luxfi/crypto/bls/bls.go:113.3,113.15 1 0 -github.com/luxfi/crypto/bls/bls.go:116.2,116.12 1 0 -github.com/luxfi/crypto/bls/bls.go:120.50,121.31 1 1 -github.com/luxfi/crypto/bls/bls.go:121.31,123.3 1 1 -github.com/luxfi/crypto/bls/bls.go:124.2,125.29 2 1 -github.com/luxfi/crypto/bls/bls.go:129.67,130.31 1 1 -github.com/luxfi/crypto/bls/bls.go:130.31,132.3 1 1 -github.com/luxfi/crypto/bls/bls.go:137.2,138.29 2 1 -github.com/luxfi/crypto/bls/bls.go:143.55,144.31 1 1 -github.com/luxfi/crypto/bls/bls.go:144.31,146.3 1 1 -github.com/luxfi/crypto/bls/bls.go:147.2,148.13 2 1 -github.com/luxfi/crypto/bls/bls.go:153.71,155.52 2 1 -github.com/luxfi/crypto/bls/bls.go:155.52,157.3 1 1 -github.com/luxfi/crypto/bls/bls.go:159.2,159.20 1 1 -github.com/luxfi/crypto/bls/bls.go:159.20,161.3 1 0 -github.com/luxfi/crypto/bls/bls.go:163.2,163.32 1 1 -github.com/luxfi/crypto/bls/bls.go:168.58,170.2 1 1 -github.com/luxfi/crypto/bls/bls.go:175.69,179.2 3 1 -github.com/luxfi/crypto/bls/bls.go:183.64,184.19 1 1 -github.com/luxfi/crypto/bls/bls.go:184.19,186.3 1 1 -github.com/luxfi/crypto/bls/bls.go:189.2,190.25 2 1 -github.com/luxfi/crypto/bls/bls.go:190.25,191.32 1 1 -github.com/luxfi/crypto/bls/bls.go:191.32,193.4 1 1 -github.com/luxfi/crypto/bls/bls.go:196.3,197.17 2 1 -github.com/luxfi/crypto/bls/bls.go:197.17,199.4 1 0 -github.com/luxfi/crypto/bls/bls.go:202.3,203.49 2 1 -github.com/luxfi/crypto/bls/bls.go:203.49,205.4 1 0 -github.com/luxfi/crypto/bls/bls.go:206.3,206.20 1 1 -github.com/luxfi/crypto/bls/bls.go:210.2,211.16 2 1 -github.com/luxfi/crypto/bls/bls.go:211.16,213.3 1 0 -github.com/luxfi/crypto/bls/bls.go:216.2,218.58 3 1 -github.com/luxfi/crypto/bls/bls.go:218.58,220.3 1 0 -github.com/luxfi/crypto/bls/bls.go:222.2,222.35 1 1 -github.com/luxfi/crypto/bls/bls.go:226.61,227.45 1 1 -github.com/luxfi/crypto/bls/bls.go:227.45,229.3 1 1 -github.com/luxfi/crypto/bls/bls.go:231.2,231.44 1 1 -github.com/luxfi/crypto/bls/bls.go:235.78,239.2 1 1 -github.com/luxfi/crypto/bls/bls.go:242.46,243.16 1 1 -github.com/luxfi/crypto/bls/bls.go:243.16,245.3 1 1 -github.com/luxfi/crypto/bls/bls.go:246.2,246.16 1 1 -github.com/luxfi/crypto/bls/bls.go:251.62,252.35 1 1 -github.com/luxfi/crypto/bls/bls.go:252.35,254.3 1 1 -github.com/luxfi/crypto/bls/bls.go:257.2,258.29 2 1 -github.com/luxfi/crypto/bls/bls.go:258.29,259.13 1 1 -github.com/luxfi/crypto/bls/bls.go:259.13,261.9 2 1 -github.com/luxfi/crypto/bls/bls.go:264.2,264.13 1 1 -github.com/luxfi/crypto/bls/bls.go:264.13,266.3 1 1 -github.com/luxfi/crypto/bls/bls.go:268.2,268.39 1 1 -github.com/luxfi/crypto/bls/bls.go:272.83,280.42 2 0 -github.com/luxfi/crypto/bls/bls.go:280.42,284.17 4 0 -github.com/luxfi/crypto/bls/bls.go:284.17,286.4 1 0 -github.com/luxfi/crypto/bls/bls.go:287.3,287.16 1 0 -github.com/luxfi/crypto/bls/bls.go:290.2,290.12 1 0 -github.com/luxfi/crypto/bls/bls.go:295.65,296.20 1 1 -github.com/luxfi/crypto/bls/bls.go:296.20,298.3 1 1 -github.com/luxfi/crypto/bls/bls.go:301.2,302.27 2 1 -github.com/luxfi/crypto/bls/bls.go:302.27,303.17 1 1 -github.com/luxfi/crypto/bls/bls.go:303.17,305.4 1 1 -github.com/luxfi/crypto/bls/bls.go:306.3,306.24 1 1 -github.com/luxfi/crypto/bls/bls.go:310.2,311.16 2 1 -github.com/luxfi/crypto/bls/bls.go:311.16,313.3 1 0 -github.com/luxfi/crypto/bls/bls.go:315.2,315.37 1 1 -github.com/luxfi/crypto/bls/bls_new.go:36.62,37.19 1 0 -github.com/luxfi/crypto/bls/bls_new.go:37.19,39.3 1 0 -github.com/luxfi/crypto/bls/bls_new.go:42.2,43.52 2 0 -github.com/luxfi/crypto/bls/bls_new.go:43.52,45.3 1 0 -github.com/luxfi/crypto/bls/bls_new.go:48.2,51.46 3 0 -github.com/luxfi/crypto/bls/bls_new.go:55.57,59.2 3 0 -github.com/luxfi/crypto/bls/bls_new.go:62.62,72.2 5 0 -github.com/luxfi/crypto/bls/bls_new.go:75.79,85.2 5 0 -github.com/luxfi/crypto/bls/bls_new.go:88.74,102.2 4 0 -github.com/luxfi/crypto/bls/bls_new.go:105.91,119.2 4 0 -github.com/luxfi/crypto/bls/bls_new.go:122.77,123.19 1 1 -github.com/luxfi/crypto/bls/bls_new.go:123.19,125.3 1 0 -github.com/luxfi/crypto/bls/bls_new.go:128.2,132.25 3 1 -github.com/luxfi/crypto/bls/bls_new.go:132.25,133.16 1 1 -github.com/luxfi/crypto/bls/bls_new.go:133.16,135.4 1 0 -github.com/luxfi/crypto/bls/bls_new.go:136.3,136.43 1 1 -github.com/luxfi/crypto/bls/bls_new.go:139.2,139.19 1 1 -github.com/luxfi/crypto/bls/bls_new.go:143.78,144.20 1 0 -github.com/luxfi/crypto/bls/bls_new.go:144.20,146.3 1 0 -github.com/luxfi/crypto/bls/bls_new.go:149.2,153.27 3 0 -github.com/luxfi/crypto/bls/bls_new.go:153.27,154.17 1 0 -github.com/luxfi/crypto/bls/bls_new.go:154.17,156.4 1 0 -github.com/luxfi/crypto/bls/bls_new.go:157.3,157.46 1 0 -github.com/luxfi/crypto/bls/bls_new.go:160.2,160.20 1 0 -github.com/luxfi/crypto/bls/bls_new.go:166.43,168.2 1 1 -github.com/luxfi/crypto/bls/bls_new.go:171.56,173.2 1 1 -github.com/luxfi/crypto/bls/bls_new.go:176.44,178.2 1 0 -github.com/luxfi/crypto/bls/bls_new.go:181.57,183.2 1 0 -github.com/luxfi/crypto/bls/bls_new.go:186.43,190.2 2 0 -github.com/luxfi/crypto/bls/bls_new.go:193.56,194.21 1 0 -github.com/luxfi/crypto/bls/bls_new.go:194.21,196.3 1 0 -github.com/luxfi/crypto/bls/bls_new.go:198.2,198.40 1 0 -github.com/luxfi/crypto/bls/ciphersuite.go:23.38,25.2 1 0 -github.com/luxfi/crypto/bls/ciphersuite.go:27.37,29.2 1 0 -github.com/luxfi/crypto/bls/compat.go:9.52,10.15 1 0 -github.com/luxfi/crypto/bls/compat.go:10.15,12.3 1 0 -github.com/luxfi/crypto/bls/compat.go:13.2,13.23 1 0 -github.com/luxfi/crypto/bls/compat.go:17.66,18.15 1 0 -github.com/luxfi/crypto/bls/compat.go:18.15,20.3 1 0 -github.com/luxfi/crypto/bls/compat.go:21.2,21.38 1 0 -github.com/luxfi/crypto/bls/helpers.go:9.49,10.15 1 0 -github.com/luxfi/crypto/bls/helpers.go:10.15,12.3 1 0 -github.com/luxfi/crypto/bls/helpers.go:13.2,13.21 1 0 -github.com/luxfi/crypto/bls/helpers.go:17.43,19.2 1 0 -github.com/luxfi/crypto/bls/helpers.go:22.79,24.2 1 0 -github.com/luxfi/crypto/bls/helpers.go:27.64,29.2 1 0 -github.com/luxfi/crypto/bls/helpers.go:32.80,34.2 1 0 -github.com/luxfi/crypto/bls/helpers.go:37.65,39.2 1 0 -github.com/luxfi/crypto/bls/helpers.go:42.90,44.2 1 0 -github.com/luxfi/crypto/bls/helpers.go:47.107,49.2 1 0 -github.com/luxfi/crypto/bls/internal.go:21.58,23.2 1 0 -github.com/luxfi/crypto/bls/internal.go:26.58,28.2 1 0 -github.com/luxfi/crypto/bls/internal.go:31.69,32.22 1 0 -github.com/luxfi/crypto/bls/internal.go:32.22,34.3 1 0 -github.com/luxfi/crypto/bls/internal.go:37.2,41.35 3 0 -github.com/luxfi/crypto/bls/internal.go:41.35,43.3 1 0 -github.com/luxfi/crypto/bls/internal.go:45.2,45.20 1 0 -github.com/luxfi/crypto/bls/internal.go:49.69,50.22 1 0 -github.com/luxfi/crypto/bls/internal.go:50.22,52.3 1 0 -github.com/luxfi/crypto/bls/internal.go:55.2,59.35 3 0 -github.com/luxfi/crypto/bls/internal.go:59.35,61.3 1 0 -github.com/luxfi/crypto/bls/internal.go:63.2,63.20 1 0 -github.com/luxfi/crypto/bls/internal.go:67.51,69.42 2 0 -github.com/luxfi/crypto/bls/internal.go:69.42,71.3 1 0 -github.com/luxfi/crypto/bls/internal.go:72.2,72.16 1 0 -github.com/luxfi/crypto/bls/internal.go:76.51,78.42 2 0 -github.com/luxfi/crypto/bls/internal.go:78.42,80.3 1 0 -github.com/luxfi/crypto/bls/internal.go:81.2,81.16 1 0 -github.com/luxfi/crypto/bn256/gnark/g1.go:23.28,25.2 1 0 -github.com/luxfi/crypto/bn256/gnark/g1.go:29.49,31.2 1 0 -github.com/luxfi/crypto/bn256/gnark/g1.go:41.49,42.19 1 1 -github.com/luxfi/crypto/bn256/gnark/g1.go:42.19,44.3 1 1 -github.com/luxfi/crypto/bn256/gnark/g1.go:46.2,46.25 1 1 -github.com/luxfi/crypto/bn256/gnark/g1.go:46.25,51.3 3 0 -github.com/luxfi/crypto/bn256/gnark/g1.go:53.2,53.62 1 1 -github.com/luxfi/crypto/bn256/gnark/g1.go:53.62,55.3 1 0 -github.com/luxfi/crypto/bn256/gnark/g1.go:56.2,56.64 1 1 -github.com/luxfi/crypto/bn256/gnark/g1.go:56.64,58.3 1 0 -github.com/luxfi/crypto/bn256/gnark/g1.go:60.2,60.26 1 1 -github.com/luxfi/crypto/bn256/gnark/g1.go:60.26,62.3 1 0 -github.com/luxfi/crypto/bn256/gnark/g1.go:63.2,63.29 1 1 -github.com/luxfi/crypto/bn256/gnark/g1.go:63.29,65.3 1 0 -github.com/luxfi/crypto/bn256/gnark/g1.go:66.2,66.16 1 1 -github.com/luxfi/crypto/bn256/gnark/g1.go:74.31,84.2 6 1 -github.com/luxfi/crypto/bn256/gnark/g1.go:86.33,87.21 1 1 -github.com/luxfi/crypto/bn256/gnark/g1.go:87.21,88.18 1 1 -github.com/luxfi/crypto/bn256/gnark/g1.go:88.18,90.4 1 1 -github.com/luxfi/crypto/bn256/gnark/g1.go:92.2,92.13 1 0 -github.com/luxfi/crypto/bn256/gnark/g2.go:29.49,30.20 1 1 -github.com/luxfi/crypto/bn256/gnark/g2.go:30.20,32.3 1 0 -github.com/luxfi/crypto/bn256/gnark/g2.go:34.2,34.26 1 1 -github.com/luxfi/crypto/bn256/gnark/g2.go:34.26,41.3 5 0 -github.com/luxfi/crypto/bn256/gnark/g2.go:42.2,42.66 1 1 -github.com/luxfi/crypto/bn256/gnark/g2.go:42.66,44.3 1 0 -github.com/luxfi/crypto/bn256/gnark/g2.go:45.2,45.67 1 1 -github.com/luxfi/crypto/bn256/gnark/g2.go:45.67,47.3 1 0 -github.com/luxfi/crypto/bn256/gnark/g2.go:48.2,48.67 1 1 -github.com/luxfi/crypto/bn256/gnark/g2.go:48.67,50.3 1 0 -github.com/luxfi/crypto/bn256/gnark/g2.go:51.2,51.68 1 1 -github.com/luxfi/crypto/bn256/gnark/g2.go:51.68,53.3 1 0 -github.com/luxfi/crypto/bn256/gnark/g2.go:55.2,55.26 1 1 -github.com/luxfi/crypto/bn256/gnark/g2.go:55.26,57.3 1 0 -github.com/luxfi/crypto/bn256/gnark/g2.go:58.2,58.29 1 1 -github.com/luxfi/crypto/bn256/gnark/g2.go:58.29,60.3 1 0 -github.com/luxfi/crypto/bn256/gnark/g2.go:61.2,61.17 1 1 -github.com/luxfi/crypto/bn256/gnark/g2.go:69.31,85.2 10 1 -github.com/luxfi/crypto/bn256/gnark/gt.go:24.31,30.16 4 0 -github.com/luxfi/crypto/bn256/gnark/gt.go:30.16,33.63 1 0 -github.com/luxfi/crypto/bn256/gnark/gt.go:36.2,38.3 1 0 -github.com/luxfi/crypto/bn256/gnark/gt.go:45.42,47.2 1 0 -github.com/luxfi/crypto/bn256/gnark/gt.go:53.31,56.2 2 0 -github.com/luxfi/crypto/bn256/gnark/gt.go:62.50,65.2 2 0 -github.com/luxfi/crypto/bn256/gnark/pairing.go:18.44,32.15 4 0 -github.com/luxfi/crypto/bn256/gnark/pairing.go:32.15,34.3 1 0 -github.com/luxfi/crypto/bn256/gnark/pairing.go:36.2,37.16 2 0 -github.com/luxfi/crypto/bn256/gnark/pairing.go:37.16,39.3 1 0 -github.com/luxfi/crypto/bn256/gnark/pairing.go:40.2,40.11 1 0 -github.com/luxfi/crypto/bn256/gnark/pairing.go:52.55,54.35 2 0 -github.com/luxfi/crypto/bn256/gnark/pairing.go:54.35,55.17 1 0 -github.com/luxfi/crypto/bn256/gnark/pairing.go:55.17,57.4 1 0 -github.com/luxfi/crypto/bn256/gnark/pairing.go:59.2,59.20 1 0 -github.com/luxfi/crypto/bn256/gnark/pairing.go:65.55,67.35 2 0 -github.com/luxfi/crypto/bn256/gnark/pairing.go:67.35,68.17 1 0 -github.com/luxfi/crypto/bn256/gnark/pairing.go:68.17,70.4 1 0 -github.com/luxfi/crypto/bn256/gnark/pairing.go:72.2,72.20 1 0 -github.com/luxfi/crypto/crypto.go:57.33,61.2 3 0 -github.com/luxfi/crypto/crypto.go:65.35,66.21 1 0 -github.com/luxfi/crypto/crypto.go:66.21,68.3 1 0 -github.com/luxfi/crypto/crypto.go:69.2,69.32 1 0 -github.com/luxfi/crypto/crypto.go:73.30,73.45 1 0 -github.com/luxfi/crypto/crypto.go:77.31,79.2 1 0 -github.com/luxfi/crypto/crypto.go:82.28,84.2 1 0 -github.com/luxfi/crypto/crypto.go:91.39,95.2 3 1 -github.com/luxfi/crypto/crypto.go:99.38,100.21 1 1 -github.com/luxfi/crypto/crypto.go:100.21,102.3 1 0 -github.com/luxfi/crypto/crypto.go:103.2,103.35 1 1 -github.com/luxfi/crypto/crypto.go:107.33,107.48 1 1 -github.com/luxfi/crypto/crypto.go:110.34,112.2 1 0 -github.com/luxfi/crypto/crypto.go:115.31,117.2 1 0 -github.com/luxfi/crypto/crypto.go:149.35,151.2 1 1 -github.com/luxfi/crypto/crypto.go:154.18,156.3 1 1 -github.com/luxfi/crypto/crypto.go:160.53,165.2 4 1 -github.com/luxfi/crypto/crypto.go:168.39,172.25 4 1 -github.com/luxfi/crypto/crypto.go:172.25,174.3 1 1 -github.com/luxfi/crypto/crypto.go:175.2,177.10 3 1 -github.com/luxfi/crypto/crypto.go:182.45,185.25 3 1 -github.com/luxfi/crypto/crypto.go:185.25,187.3 1 1 -github.com/luxfi/crypto/crypto.go:188.2,190.10 3 1 -github.com/luxfi/crypto/crypto.go:194.39,196.25 2 0 -github.com/luxfi/crypto/crypto.go:196.25,198.3 1 0 -github.com/luxfi/crypto/crypto.go:199.2,199.19 1 0 -github.com/luxfi/crypto/crypto.go:203.37,204.55 1 1 -github.com/luxfi/crypto/crypto.go:204.55,206.3 1 0 -github.com/luxfi/crypto/crypto.go:207.2,207.19 1 1 -github.com/luxfi/crypto/crypto.go:207.19,209.3 1 0 -github.com/luxfi/crypto/crypto.go:210.2,211.26 2 1 -github.com/luxfi/crypto/crypto.go:215.53,218.2 2 1 -github.com/luxfi/crypto/crypto.go:222.72,224.2 1 0 -github.com/luxfi/crypto/crypto.go:227.51,229.2 1 1 -github.com/luxfi/crypto/crypto.go:234.48,237.2 2 0 -github.com/luxfi/crypto/crypto.go:242.64,245.49 3 1 -github.com/luxfi/crypto/crypto.go:245.49,247.3 1 0 -github.com/luxfi/crypto/crypto.go:248.2,251.33 2 1 -github.com/luxfi/crypto/crypto.go:251.33,253.3 1 1 -github.com/luxfi/crypto/crypto.go:255.2,255.24 1 1 -github.com/luxfi/crypto/crypto.go:255.24,257.3 1 1 -github.com/luxfi/crypto/crypto.go:259.2,260.29 2 1 -github.com/luxfi/crypto/crypto.go:260.29,262.3 1 0 -github.com/luxfi/crypto/crypto.go:263.2,263.18 1 1 -github.com/luxfi/crypto/crypto.go:267.47,268.17 1 1 -github.com/luxfi/crypto/crypto.go:268.17,270.3 1 0 -github.com/luxfi/crypto/crypto.go:271.2,271.56 1 1 -github.com/luxfi/crypto/crypto.go:275.60,278.14 3 1 -github.com/luxfi/crypto/crypto.go:278.14,280.3 1 1 -github.com/luxfi/crypto/crypto.go:281.2,281.28 1 1 -github.com/luxfi/crypto/crypto.go:281.28,283.3 1 0 -github.com/luxfi/crypto/crypto.go:284.2,284.56 1 1 -github.com/luxfi/crypto/crypto.go:290.48,291.48 1 1 -github.com/luxfi/crypto/crypto.go:291.48,293.3 1 0 -github.com/luxfi/crypto/crypto.go:294.2,294.53 1 1 -github.com/luxfi/crypto/crypto.go:298.59,300.51 2 1 -github.com/luxfi/crypto/crypto.go:300.51,302.3 1 1 -github.com/luxfi/crypto/crypto.go:302.8,302.23 1 1 -github.com/luxfi/crypto/crypto.go:302.23,304.3 1 0 -github.com/luxfi/crypto/crypto.go:305.2,305.19 1 1 -github.com/luxfi/crypto/crypto.go:309.56,311.16 2 1 -github.com/luxfi/crypto/crypto.go:311.16,313.3 1 0 -github.com/luxfi/crypto/crypto.go:314.2,319.33 5 1 -github.com/luxfi/crypto/crypto.go:319.33,321.3 1 0 -github.com/luxfi/crypto/crypto.go:321.8,321.26 1 1 -github.com/luxfi/crypto/crypto.go:321.26,323.3 1 1 -github.com/luxfi/crypto/crypto.go:324.2,324.43 1 1 -github.com/luxfi/crypto/crypto.go:324.43,326.3 1 1 -github.com/luxfi/crypto/crypto.go:328.2,328.32 1 1 -github.com/luxfi/crypto/crypto.go:333.64,334.26 1 1 -github.com/luxfi/crypto/crypto.go:334.26,336.10 2 1 -github.com/luxfi/crypto/crypto.go:337.38,338.17 1 1 -github.com/luxfi/crypto/crypto.go:339.19,340.17 1 0 -github.com/luxfi/crypto/crypto.go:343.2,343.15 1 1 -github.com/luxfi/crypto/crypto.go:347.45,348.20 1 1 -github.com/luxfi/crypto/crypto.go:348.20,350.10 2 1 -github.com/luxfi/crypto/crypto.go:351.22,352.14 1 1 -github.com/luxfi/crypto/crypto.go:353.19,354.14 1 0 -github.com/luxfi/crypto/crypto.go:355.31,356.67 1 1 -github.com/luxfi/crypto/crypto.go:357.15,358.66 1 1 -github.com/luxfi/crypto/crypto.go:365.58,368.2 2 1 -github.com/luxfi/crypto/crypto.go:371.47,373.2 1 1 -github.com/luxfi/crypto/crypto.go:377.74,378.40 1 1 -github.com/luxfi/crypto/crypto.go:378.40,380.3 1 1 -github.com/luxfi/crypto/crypto.go:383.2,383.44 1 1 -github.com/luxfi/crypto/crypto.go:383.44,385.3 1 0 -github.com/luxfi/crypto/crypto.go:387.2,387.77 1 1 -github.com/luxfi/crypto/crypto.go:390.49,393.2 2 1 -github.com/luxfi/crypto/crypto.go:397.52,398.28 1 1 -github.com/luxfi/crypto/crypto.go:398.28,400.3 1 0 -github.com/luxfi/crypto/crypto.go:401.2,403.12 3 1 -github.com/luxfi/crypto/crypto.go:408.44,410.34 2 0 -github.com/luxfi/crypto/crypto.go:410.34,411.43 1 0 -github.com/luxfi/crypto/crypto.go:411.43,415.4 3 0 -github.com/luxfi/crypto/crypto.go:422.30,424.2 1 1 -github.com/luxfi/crypto/random.go:11.32,16.2 3 0 -github.com/luxfi/crypto/signature_cgo.go:32.50,34.2 1 1 -github.com/luxfi/crypto/signature_cgo.go:37.59,39.16 2 1 -github.com/luxfi/crypto/signature_cgo.go:39.16,41.3 1 0 -github.com/luxfi/crypto/signature_cgo.go:42.2,42.27 1 1 -github.com/luxfi/crypto/signature_cgo.go:53.77,54.37 1 1 -github.com/luxfi/crypto/signature_cgo.go:54.37,56.3 1 1 -github.com/luxfi/crypto/signature_cgo.go:57.2,59.46 3 1 -github.com/luxfi/crypto/signature_cgo.go:65.65,67.2 1 1 -github.com/luxfi/crypto/signature_cgo.go:70.64,72.14 2 1 -github.com/luxfi/crypto/signature_cgo.go:72.14,74.3 1 1 -github.com/luxfi/crypto/signature_cgo.go:75.2,75.57 1 1 -github.com/luxfi/crypto/signature_cgo.go:79.53,81.2 1 1 -github.com/luxfi/crypto/signature_cgo.go:84.27,86.2 1 1 -github.com/luxfi/crypto/blake2b/blake2b.go:53.37,57.2 3 1 -github.com/luxfi/crypto/blake2b/blake2b.go:60.40,66.2 5 1 -github.com/luxfi/crypto/blake2b/blake2b.go:69.40,75.2 5 1 -github.com/luxfi/crypto/blake2b/blake2b.go:79.44,79.75 1 1 -github.com/luxfi/crypto/blake2b/blake2b.go:83.44,83.78 1 1 -github.com/luxfi/crypto/blake2b/blake2b.go:87.44,87.78 1 1 -github.com/luxfi/crypto/blake2b/blake2b.go:97.51,97.82 1 1 -github.com/luxfi/crypto/blake2b/blake2b.go:103.76,105.11 2 1 -github.com/luxfi/crypto/blake2b/blake2b.go:105.11,107.3 1 1 -github.com/luxfi/crypto/blake2b/blake2b.go:108.2,108.44 1 1 -github.com/luxfi/crypto/blake2b/blake2b.go:111.59,112.37 1 1 -github.com/luxfi/crypto/blake2b/blake2b.go:112.37,114.3 1 0 -github.com/luxfi/crypto/blake2b/blake2b.go:115.2,115.21 1 1 -github.com/luxfi/crypto/blake2b/blake2b.go:115.21,117.3 1 0 -github.com/luxfi/crypto/blake2b/blake2b.go:118.2,124.15 4 1 -github.com/luxfi/crypto/blake2b/blake2b.go:127.59,132.45 4 1 -github.com/luxfi/crypto/blake2b/blake2b.go:132.45,134.18 2 1 -github.com/luxfi/crypto/blake2b/blake2b.go:134.18,136.4 1 1 -github.com/luxfi/crypto/blake2b/blake2b.go:137.3,138.18 2 1 -github.com/luxfi/crypto/blake2b/blake2b.go:141.2,144.22 4 1 -github.com/luxfi/crypto/blake2b/blake2b.go:144.22,146.3 1 1 -github.com/luxfi/crypto/blake2b/blake2b.go:147.2,151.39 3 1 -github.com/luxfi/crypto/blake2b/blake2b.go:151.39,153.3 1 1 -github.com/luxfi/crypto/blake2b/blake2b.go:156.73,160.31 3 1 -github.com/luxfi/crypto/blake2b/blake2b.go:160.31,162.21 2 1 -github.com/luxfi/crypto/blake2b/blake2b.go:162.21,164.4 1 1 -github.com/luxfi/crypto/blake2b/blake2b.go:165.3,165.20 1 1 -github.com/luxfi/crypto/blake2b/blake2b.go:165.20,168.4 2 1 -github.com/luxfi/crypto/blake2b/blake2b.go:169.3,169.29 1 1 -github.com/luxfi/crypto/blake2b/blake2b.go:171.2,171.21 1 1 -github.com/luxfi/crypto/blake2b/blake2b.go:190.50,191.19 1 1 -github.com/luxfi/crypto/blake2b/blake2b.go:191.19,193.3 1 0 -github.com/luxfi/crypto/blake2b/blake2b.go:194.2,196.25 3 1 -github.com/luxfi/crypto/blake2b/blake2b.go:196.25,198.3 1 1 -github.com/luxfi/crypto/blake2b/blake2b.go:199.2,205.15 6 1 -github.com/luxfi/crypto/blake2b/blake2b.go:208.50,209.60 1 1 -github.com/luxfi/crypto/blake2b/blake2b.go:209.60,211.3 1 0 -github.com/luxfi/crypto/blake2b/blake2b.go:212.2,212.29 1 1 -github.com/luxfi/crypto/blake2b/blake2b.go:212.29,214.3 1 0 -github.com/luxfi/crypto/blake2b/blake2b.go:215.2,216.25 2 1 -github.com/luxfi/crypto/blake2b/blake2b.go:216.25,218.3 1 1 -github.com/luxfi/crypto/blake2b/blake2b.go:219.2,226.12 8 1 -github.com/luxfi/crypto/blake2b/blake2b.go:229.34,229.54 1 0 -github.com/luxfi/crypto/blake2b/blake2b.go:231.29,231.46 1 0 -github.com/luxfi/crypto/blake2b/blake2b.go:233.26,237.18 4 1 -github.com/luxfi/crypto/blake2b/blake2b.go:237.18,240.3 2 1 -github.com/luxfi/crypto/blake2b/blake2b.go:243.53,246.18 2 1 -github.com/luxfi/crypto/blake2b/blake2b.go:246.18,248.21 2 1 -github.com/luxfi/crypto/blake2b/blake2b.go:248.21,251.4 2 1 -github.com/luxfi/crypto/blake2b/blake2b.go:252.3,255.20 4 1 -github.com/luxfi/crypto/blake2b/blake2b.go:258.2,258.42 1 1 -github.com/luxfi/crypto/blake2b/blake2b.go:258.42,260.19 2 1 -github.com/luxfi/crypto/blake2b/blake2b.go:260.19,262.4 1 1 -github.com/luxfi/crypto/blake2b/blake2b.go:263.3,264.13 2 1 -github.com/luxfi/crypto/blake2b/blake2b.go:267.2,267.16 1 1 -github.com/luxfi/crypto/blake2b/blake2b.go:267.16,269.3 1 1 -github.com/luxfi/crypto/blake2b/blake2b.go:271.2,271.8 1 1 -github.com/luxfi/crypto/blake2b/blake2b.go:274.41,278.2 3 1 -github.com/luxfi/crypto/blake2b/blake2b.go:280.45,286.22 5 1 -github.com/luxfi/crypto/blake2b/blake2b.go:286.22,288.3 1 1 -github.com/luxfi/crypto/blake2b/blake2b.go:289.2,294.22 4 1 -github.com/luxfi/crypto/blake2b/blake2b.go:294.22,296.3 1 1 -github.com/luxfi/crypto/blake2b/blake2b.go:299.46,303.2 3 1 -github.com/luxfi/crypto/blake2b/blake2b.go:306.46,310.2 3 0 -github.com/luxfi/crypto/blake2b/blake2b.go:312.47,315.2 2 1 -github.com/luxfi/crypto/blake2b/blake2b.go:318.47,321.2 2 0 -github.com/luxfi/crypto/blake2b/blake2b_generic.go:29.80,33.31 3 0 -github.com/luxfi/crypto/blake2b/blake2b_generic.go:33.31,35.21 2 0 -github.com/luxfi/crypto/blake2b/blake2b_generic.go:35.21,37.4 1 0 -github.com/luxfi/crypto/blake2b/blake2b_generic.go:38.3,38.20 1 0 -github.com/luxfi/crypto/blake2b/blake2b_generic.go:38.20,41.4 2 0 -github.com/luxfi/crypto/blake2b/blake2b_generic.go:42.3,42.36 1 0 -github.com/luxfi/crypto/blake2b/blake2b_generic.go:44.2,44.21 1 0 -github.com/luxfi/crypto/blake2b/blake2b_generic.go:47.87,54.35 6 1 -github.com/luxfi/crypto/blake2b/blake2b_generic.go:54.35,172.3 113 1 -github.com/luxfi/crypto/blake2b/blake2b_generic.go:173.2,180.18 8 1 -github.com/luxfi/crypto/blake2b/blake2b_ref.go:10.80,12.2 1 1 -github.com/luxfi/crypto/blake2b/blake2x.go:50.51,51.21 1 1 -github.com/luxfi/crypto/blake2b/blake2x.go:51.21,53.3 1 0 -github.com/luxfi/crypto/blake2b/blake2x.go:54.2,54.38 1 1 -github.com/luxfi/crypto/blake2b/blake2x.go:54.38,58.3 1 0 -github.com/luxfi/crypto/blake2b/blake2x.go:59.2,59.33 1 1 -github.com/luxfi/crypto/blake2b/blake2x.go:59.33,61.3 1 1 -github.com/luxfi/crypto/blake2b/blake2x.go:62.2,71.15 4 1 -github.com/luxfi/crypto/blake2b/blake2x.go:84.50,85.16 1 1 -github.com/luxfi/crypto/blake2b/blake2x.go:85.16,86.44 1 0 -github.com/luxfi/crypto/blake2b/blake2x.go:88.2,88.21 1 1 -github.com/luxfi/crypto/blake2b/blake2x.go:91.27,94.2 2 1 -github.com/luxfi/crypto/blake2b/blake2x.go:96.23,106.45 8 1 -github.com/luxfi/crypto/blake2b/blake2x.go:106.45,108.3 1 1 -github.com/luxfi/crypto/blake2b/blake2x.go:109.2,110.20 2 1 -github.com/luxfi/crypto/blake2b/blake2x.go:113.49,114.17 1 1 -github.com/luxfi/crypto/blake2b/blake2x.go:114.17,117.3 2 1 -github.com/luxfi/crypto/blake2b/blake2x.go:119.2,119.22 1 1 -github.com/luxfi/crypto/blake2b/blake2x.go:119.22,121.3 1 1 -github.com/luxfi/crypto/blake2b/blake2x.go:123.2,124.29 2 1 -github.com/luxfi/crypto/blake2b/blake2x.go:124.29,127.3 2 0 -github.com/luxfi/crypto/blake2b/blake2x.go:129.2,129.18 1 1 -github.com/luxfi/crypto/blake2b/blake2x.go:129.18,131.25 2 1 -github.com/luxfi/crypto/blake2b/blake2x.go:131.25,135.4 3 1 -github.com/luxfi/crypto/blake2b/blake2x.go:136.3,139.40 4 1 -github.com/luxfi/crypto/blake2b/blake2x.go:142.2,142.21 1 1 -github.com/luxfi/crypto/blake2b/blake2x.go:142.21,153.3 8 1 -github.com/luxfi/crypto/blake2b/blake2x.go:155.2,155.30 1 1 -github.com/luxfi/crypto/blake2b/blake2x.go:155.30,156.33 1 1 -github.com/luxfi/crypto/blake2b/blake2x.go:156.33,158.4 1 1 -github.com/luxfi/crypto/blake2b/blake2x.go:159.3,167.30 7 1 -github.com/luxfi/crypto/blake2b/blake2x.go:169.2,169.8 1 1 -github.com/luxfi/crypto/blake2b/blake2x.go:172.46,174.21 2 1 -github.com/luxfi/crypto/blake2b/blake2x.go:174.21,176.3 1 1 -github.com/luxfi/crypto/blake2b/register.go:15.13,16.33 1 1 -github.com/luxfi/crypto/blake2b/register.go:16.33,19.3 2 0 -github.com/luxfi/crypto/blake2b/register.go:20.2,20.33 1 1 -github.com/luxfi/crypto/blake2b/register.go:20.33,23.3 2 0 -github.com/luxfi/crypto/blake2b/register.go:25.2,25.33 1 1 -github.com/luxfi/crypto/blake2b/register.go:25.33,28.3 2 0 -github.com/luxfi/crypto/blake2b/register.go:30.2,32.53 3 1 -github.com/luxfi/crypto/bn256/google/bn256.go:41.51,45.6 3 1 -github.com/luxfi/crypto/bn256/google/bn256.go:45.6,47.17 2 1 -github.com/luxfi/crypto/bn256/google/bn256.go:47.17,49.4 1 0 -github.com/luxfi/crypto/bn256/google/bn256.go:50.3,50.19 1 1 -github.com/luxfi/crypto/bn256/google/bn256.go:50.19,51.9 1 1 -github.com/luxfi/crypto/bn256/google/bn256.go:55.2,55.42 1 1 -github.com/luxfi/crypto/bn256/google/bn256.go:58.30,60.2 1 0 -github.com/luxfi/crypto/bn256/google/bn256.go:63.69,65.2 1 0 -github.com/luxfi/crypto/bn256/google/bn256.go:69.45,70.16 1 1 -github.com/luxfi/crypto/bn256/google/bn256.go:70.16,72.3 1 1 -github.com/luxfi/crypto/bn256/google/bn256.go:73.2,74.10 2 1 -github.com/luxfi/crypto/bn256/google/bn256.go:78.48,79.16 1 0 -github.com/luxfi/crypto/bn256/google/bn256.go:79.16,81.3 1 0 -github.com/luxfi/crypto/bn256/google/bn256.go:82.2,83.10 2 0 -github.com/luxfi/crypto/bn256/google/bn256.go:88.32,89.16 1 1 -github.com/luxfi/crypto/bn256/google/bn256.go:89.16,91.3 1 0 -github.com/luxfi/crypto/bn256/google/bn256.go:92.2,93.10 2 1 -github.com/luxfi/crypto/bn256/google/bn256.go:97.29,98.16 1 0 -github.com/luxfi/crypto/bn256/google/bn256.go:98.16,100.3 1 0 -github.com/luxfi/crypto/bn256/google/bn256.go:101.2,102.10 2 0 -github.com/luxfi/crypto/bn256/google/bn256.go:106.31,110.22 2 1 -github.com/luxfi/crypto/bn256/google/bn256.go:110.22,112.3 1 1 -github.com/luxfi/crypto/bn256/google/bn256.go:114.2,123.12 7 1 -github.com/luxfi/crypto/bn256/google/bn256.go:128.50,131.25 2 1 -github.com/luxfi/crypto/bn256/google/bn256.go:131.25,133.3 1 0 -github.com/luxfi/crypto/bn256/google/bn256.go:135.2,135.16 1 1 -github.com/luxfi/crypto/bn256/google/bn256.go:135.16,137.3 1 1 -github.com/luxfi/crypto/bn256/google/bn256.go:138.2,139.23 2 1 -github.com/luxfi/crypto/bn256/google/bn256.go:139.23,141.3 1 0 -github.com/luxfi/crypto/bn256/google/bn256.go:142.2,143.23 2 1 -github.com/luxfi/crypto/bn256/google/bn256.go:143.23,145.3 1 0 -github.com/luxfi/crypto/bn256/google/bn256.go:147.2,147.44 1 1 -github.com/luxfi/crypto/bn256/google/bn256.go:147.44,152.3 3 1 -github.com/luxfi/crypto/bn256/google/bn256.go:152.8,156.23 3 1 -github.com/luxfi/crypto/bn256/google/bn256.go:156.23,158.4 1 0 -github.com/luxfi/crypto/bn256/google/bn256.go:160.2,160.28 1 1 -github.com/luxfi/crypto/bn256/google/bn256.go:170.51,174.6 3 1 -github.com/luxfi/crypto/bn256/google/bn256.go:174.6,176.17 2 1 -github.com/luxfi/crypto/bn256/google/bn256.go:176.17,178.4 1 0 -github.com/luxfi/crypto/bn256/google/bn256.go:179.3,179.19 1 1 -github.com/luxfi/crypto/bn256/google/bn256.go:179.19,180.9 1 1 -github.com/luxfi/crypto/bn256/google/bn256.go:184.2,184.42 1 1 -github.com/luxfi/crypto/bn256/google/bn256.go:187.30,189.2 1 0 -github.com/luxfi/crypto/bn256/google/bn256.go:193.57,195.2 1 0 -github.com/luxfi/crypto/bn256/google/bn256.go:199.45,200.16 1 1 -github.com/luxfi/crypto/bn256/google/bn256.go:200.16,202.3 1 1 -github.com/luxfi/crypto/bn256/google/bn256.go:203.2,204.10 2 1 -github.com/luxfi/crypto/bn256/google/bn256.go:208.48,209.16 1 0 -github.com/luxfi/crypto/bn256/google/bn256.go:209.16,211.3 1 0 -github.com/luxfi/crypto/bn256/google/bn256.go:212.2,213.10 2 0 -github.com/luxfi/crypto/bn256/google/bn256.go:218.32,219.16 1 1 -github.com/luxfi/crypto/bn256/google/bn256.go:219.16,221.3 1 0 -github.com/luxfi/crypto/bn256/google/bn256.go:222.2,223.10 2 1 -github.com/luxfi/crypto/bn256/google/bn256.go:227.31,231.22 2 1 -github.com/luxfi/crypto/bn256/google/bn256.go:231.22,233.3 1 1 -github.com/luxfi/crypto/bn256/google/bn256.go:235.2,248.12 11 1 -github.com/luxfi/crypto/bn256/google/bn256.go:253.50,256.25 2 1 -github.com/luxfi/crypto/bn256/google/bn256.go:256.25,258.3 1 0 -github.com/luxfi/crypto/bn256/google/bn256.go:260.2,260.16 1 1 -github.com/luxfi/crypto/bn256/google/bn256.go:260.16,262.3 1 1 -github.com/luxfi/crypto/bn256/google/bn256.go:263.2,264.25 2 1 -github.com/luxfi/crypto/bn256/google/bn256.go:264.25,266.3 1 0 -github.com/luxfi/crypto/bn256/google/bn256.go:267.2,268.25 2 1 -github.com/luxfi/crypto/bn256/google/bn256.go:268.25,270.3 1 0 -github.com/luxfi/crypto/bn256/google/bn256.go:271.2,272.25 2 1 -github.com/luxfi/crypto/bn256/google/bn256.go:272.25,274.3 1 0 -github.com/luxfi/crypto/bn256/google/bn256.go:275.2,276.25 2 1 -github.com/luxfi/crypto/bn256/google/bn256.go:276.25,278.3 1 0 -github.com/luxfi/crypto/bn256/google/bn256.go:280.2,283.23 1 1 -github.com/luxfi/crypto/bn256/google/bn256.go:283.23,288.3 3 1 -github.com/luxfi/crypto/bn256/google/bn256.go:288.8,292.23 3 1 -github.com/luxfi/crypto/bn256/google/bn256.go:292.23,294.4 1 0 -github.com/luxfi/crypto/bn256/google/bn256.go:296.2,296.28 1 1 -github.com/luxfi/crypto/bn256/google/bn256.go:305.30,307.2 1 1 -github.com/luxfi/crypto/bn256/google/bn256.go:310.48,311.16 1 1 -github.com/luxfi/crypto/bn256/google/bn256.go:311.16,313.3 1 1 -github.com/luxfi/crypto/bn256/google/bn256.go:314.2,315.10 2 1 -github.com/luxfi/crypto/bn256/google/bn256.go:319.32,320.16 1 1 -github.com/luxfi/crypto/bn256/google/bn256.go:320.16,322.3 1 1 -github.com/luxfi/crypto/bn256/google/bn256.go:323.2,324.10 2 1 -github.com/luxfi/crypto/bn256/google/bn256.go:328.29,329.16 1 1 -github.com/luxfi/crypto/bn256/google/bn256.go:329.16,331.3 1 1 -github.com/luxfi/crypto/bn256/google/bn256.go:332.2,333.10 2 1 -github.com/luxfi/crypto/bn256/google/bn256.go:337.31,371.2 28 1 -github.com/luxfi/crypto/bn256/google/bn256.go:375.46,379.27 2 0 -github.com/luxfi/crypto/bn256/google/bn256.go:379.27,381.3 1 0 -github.com/luxfi/crypto/bn256/google/bn256.go:383.2,383.16 1 0 -github.com/luxfi/crypto/bn256/google/bn256.go:383.16,385.3 1 0 -github.com/luxfi/crypto/bn256/google/bn256.go:387.2,400.16 13 0 -github.com/luxfi/crypto/bn256/google/bn256.go:404.31,406.2 1 1 -github.com/luxfi/crypto/bn256/google/bn256.go:409.42,415.30 4 1 -github.com/luxfi/crypto/bn256/google/bn256.go:415.30,416.49 1 1 -github.com/luxfi/crypto/bn256/google/bn256.go:416.49,417.12 1 0 -github.com/luxfi/crypto/bn256/google/bn256.go:419.3,419.51 1 1 -github.com/luxfi/crypto/bn256/google/bn256.go:421.2,424.20 3 1 -github.com/luxfi/crypto/bn256/google/bn256.go:434.36,435.17 1 1 -github.com/luxfi/crypto/bn256/google/bn256.go:435.17,437.3 1 1 -github.com/luxfi/crypto/bn256/google/bn256.go:439.2,441.12 3 1 -github.com/luxfi/crypto/bn256/google/bn256.go:441.12,443.3 1 1 -github.com/luxfi/crypto/bn256/google/bn256.go:445.2,447.11 3 1 -github.com/luxfi/crypto/bn256/google/bn256.go:450.38,451.17 1 1 -github.com/luxfi/crypto/bn256/google/bn256.go:451.17,453.3 1 1 -github.com/luxfi/crypto/bn256/google/bn256.go:454.2,455.14 2 1 -github.com/luxfi/crypto/bn256/google/bn256.go:458.33,460.2 1 1 -github.com/luxfi/crypto/bn256/google/constants.go:11.39,14.2 2 1 -github.com/luxfi/crypto/bn256/google/curve.go:28.46,35.2 1 1 -github.com/luxfi/crypto/bn256/google/curve.go:37.38,40.2 2 0 -github.com/luxfi/crypto/bn256/google/curve.go:42.40,47.2 4 1 -github.com/luxfi/crypto/bn256/google/curve.go:49.41,54.2 4 1 -github.com/luxfi/crypto/bn256/google/curve.go:57.39,63.37 6 1 -github.com/luxfi/crypto/bn256/google/curve.go:63.37,65.3 1 1 -github.com/luxfi/crypto/bn256/google/curve.go:66.2,66.23 1 1 -github.com/luxfi/crypto/bn256/google/curve.go:69.36,71.2 1 1 -github.com/luxfi/crypto/bn256/google/curve.go:73.40,75.2 1 1 -github.com/luxfi/crypto/bn256/google/curve.go:77.58,78.20 1 1 -github.com/luxfi/crypto/bn256/google/curve.go:78.20,81.3 2 1 -github.com/luxfi/crypto/bn256/google/curve.go:82.2,82.20 1 1 -github.com/luxfi/crypto/bn256/google/curve.go:82.20,85.3 2 0 -github.com/luxfi/crypto/bn256/google/curve.go:92.2,131.22 26 1 -github.com/luxfi/crypto/bn256/google/curve.go:131.22,134.3 2 0 -github.com/luxfi/crypto/bn256/google/curve.go:135.2,180.14 36 1 -github.com/luxfi/crypto/bn256/google/curve.go:183.58,226.2 36 1 -github.com/luxfi/crypto/bn256/google/curve.go:228.84,233.40 4 1 -github.com/luxfi/crypto/bn256/google/curve.go:233.40,235.25 2 1 -github.com/luxfi/crypto/bn256/google/curve.go:235.25,237.4 1 1 -github.com/luxfi/crypto/bn256/google/curve.go:237.9,239.4 1 1 -github.com/luxfi/crypto/bn256/google/curve.go:242.2,245.10 4 1 -github.com/luxfi/crypto/bn256/google/curve.go:250.59,251.59 1 1 -github.com/luxfi/crypto/bn256/google/curve.go:251.59,253.3 1 1 -github.com/luxfi/crypto/bn256/google/curve.go:254.2,254.20 1 1 -github.com/luxfi/crypto/bn256/google/curve.go:254.20,260.3 5 0 -github.com/luxfi/crypto/bn256/google/curve.go:261.2,278.10 16 1 -github.com/luxfi/crypto/bn256/google/curve.go:281.46,286.2 4 0 -github.com/luxfi/crypto/bn256/google/gfp12.go:21.36,23.2 1 1 -github.com/luxfi/crypto/bn256/google/gfp12.go:25.33,27.2 1 1 -github.com/luxfi/crypto/bn256/google/gfp12.go:29.35,32.2 2 1 -github.com/luxfi/crypto/bn256/google/gfp12.go:34.38,38.2 3 1 -github.com/luxfi/crypto/bn256/google/gfp12.go:40.34,44.2 3 0 -github.com/luxfi/crypto/bn256/google/gfp12.go:46.33,50.2 3 1 -github.com/luxfi/crypto/bn256/google/gfp12.go:52.27,55.2 2 1 -github.com/luxfi/crypto/bn256/google/gfp12.go:57.31,60.2 2 0 -github.com/luxfi/crypto/bn256/google/gfp12.go:62.30,65.2 2 1 -github.com/luxfi/crypto/bn256/google/gfp12.go:67.44,71.2 3 1 -github.com/luxfi/crypto/bn256/google/gfp12.go:73.43,77.2 3 0 -github.com/luxfi/crypto/bn256/google/gfp12.go:80.58,85.2 4 1 -github.com/luxfi/crypto/bn256/google/gfp12.go:88.60,93.2 4 1 -github.com/luxfi/crypto/bn256/google/gfp12.go:95.41,99.2 3 0 -github.com/luxfi/crypto/bn256/google/gfp12.go:101.41,105.2 3 0 -github.com/luxfi/crypto/bn256/google/gfp12.go:107.55,125.2 15 1 -github.com/luxfi/crypto/bn256/google/gfp12.go:127.67,131.2 3 1 -github.com/luxfi/crypto/bn256/google/gfp12.go:133.68,138.43 4 1 -github.com/luxfi/crypto/bn256/google/gfp12.go:138.43,140.24 2 1 -github.com/luxfi/crypto/bn256/google/gfp12.go:140.24,142.4 1 1 -github.com/luxfi/crypto/bn256/google/gfp12.go:142.9,144.4 1 1 -github.com/luxfi/crypto/bn256/google/gfp12.go:147.2,152.10 4 1 -github.com/luxfi/crypto/bn256/google/gfp12.go:155.55,178.2 17 1 -github.com/luxfi/crypto/bn256/google/gfp12.go:180.55,200.2 13 1 -github.com/luxfi/crypto/bn256/google/gfp2.go:21.34,23.2 1 1 -github.com/luxfi/crypto/bn256/google/gfp2.go:25.32,29.2 3 1 -github.com/luxfi/crypto/bn256/google/gfp2.go:31.34,34.2 2 1 -github.com/luxfi/crypto/bn256/google/gfp2.go:36.35,40.2 3 1 -github.com/luxfi/crypto/bn256/google/gfp2.go:42.32,46.2 3 1 -github.com/luxfi/crypto/bn256/google/gfp2.go:48.31,52.2 3 1 -github.com/luxfi/crypto/bn256/google/gfp2.go:54.26,55.39 1 1 -github.com/luxfi/crypto/bn256/google/gfp2.go:55.39,57.3 1 1 -github.com/luxfi/crypto/bn256/google/gfp2.go:58.2,58.39 1 1 -github.com/luxfi/crypto/bn256/google/gfp2.go:58.39,60.3 1 1 -github.com/luxfi/crypto/bn256/google/gfp2.go:63.30,65.2 1 1 -github.com/luxfi/crypto/bn256/google/gfp2.go:67.29,68.21 1 1 -github.com/luxfi/crypto/bn256/google/gfp2.go:68.21,70.3 1 1 -github.com/luxfi/crypto/bn256/google/gfp2.go:71.2,72.41 2 1 -github.com/luxfi/crypto/bn256/google/gfp2.go:75.41,79.2 3 1 -github.com/luxfi/crypto/bn256/google/gfp2.go:81.40,85.2 3 1 -github.com/luxfi/crypto/bn256/google/gfp2.go:87.38,91.2 3 1 -github.com/luxfi/crypto/bn256/google/gfp2.go:93.38,97.2 3 1 -github.com/luxfi/crypto/bn256/google/gfp2.go:99.38,103.2 3 1 -github.com/luxfi/crypto/bn256/google/gfp2.go:105.65,110.43 4 0 -github.com/luxfi/crypto/bn256/google/gfp2.go:110.43,112.24 2 0 -github.com/luxfi/crypto/bn256/google/gfp2.go:112.24,114.4 1 0 -github.com/luxfi/crypto/bn256/google/gfp2.go:114.9,116.4 1 0 -github.com/luxfi/crypto/bn256/google/gfp2.go:119.2,124.10 4 0 -github.com/luxfi/crypto/bn256/google/gfp2.go:129.52,146.2 13 1 -github.com/luxfi/crypto/bn256/google/gfp2.go:148.53,152.2 3 1 -github.com/luxfi/crypto/bn256/google/gfp2.go:155.51,172.2 11 1 -github.com/luxfi/crypto/bn256/google/gfp2.go:174.52,193.2 12 1 -github.com/luxfi/crypto/bn256/google/gfp2.go:195.52,219.2 16 1 -github.com/luxfi/crypto/bn256/google/gfp2.go:221.32,223.2 1 0 -github.com/luxfi/crypto/bn256/google/gfp2.go:225.32,227.2 1 0 -github.com/luxfi/crypto/bn256/google/gfp6.go:21.34,23.2 1 1 -github.com/luxfi/crypto/bn256/google/gfp6.go:25.32,27.2 1 1 -github.com/luxfi/crypto/bn256/google/gfp6.go:29.34,33.2 3 1 -github.com/luxfi/crypto/bn256/google/gfp6.go:35.35,40.2 4 1 -github.com/luxfi/crypto/bn256/google/gfp6.go:42.32,47.2 4 1 -github.com/luxfi/crypto/bn256/google/gfp6.go:49.31,54.2 4 1 -github.com/luxfi/crypto/bn256/google/gfp6.go:56.26,60.2 3 1 -github.com/luxfi/crypto/bn256/google/gfp6.go:62.30,64.2 1 1 -github.com/luxfi/crypto/bn256/google/gfp6.go:66.29,68.2 1 1 -github.com/luxfi/crypto/bn256/google/gfp6.go:70.40,75.2 4 1 -github.com/luxfi/crypto/bn256/google/gfp6.go:77.55,85.2 6 1 -github.com/luxfi/crypto/bn256/google/gfp6.go:88.43,95.2 4 1 -github.com/luxfi/crypto/bn256/google/gfp6.go:97.38,102.2 4 1 -github.com/luxfi/crypto/bn256/google/gfp6.go:104.38,109.2 4 1 -github.com/luxfi/crypto/bn256/google/gfp6.go:111.38,116.2 4 1 -github.com/luxfi/crypto/bn256/google/gfp6.go:118.52,172.2 43 1 -github.com/luxfi/crypto/bn256/google/gfp6.go:174.64,179.2 4 1 -github.com/luxfi/crypto/bn256/google/gfp6.go:181.50,186.2 4 1 -github.com/luxfi/crypto/bn256/google/gfp6.go:189.46,199.2 9 1 -github.com/luxfi/crypto/bn256/google/gfp6.go:201.52,239.2 31 1 -github.com/luxfi/crypto/bn256/google/gfp6.go:241.52,296.2 33 1 -github.com/luxfi/crypto/bn256/google/optate.go:7.113,83.2 56 1 -github.com/luxfi/crypto/bn256/google/optate.go:85.103,152.2 51 1 -github.com/luxfi/crypto/bn256/google/optate.go:154.55,182.2 23 1 -github.com/luxfi/crypto/bn256/google/optate.go:192.64,213.45 15 1 -github.com/luxfi/crypto/bn256/google/optate.go:213.45,215.31 2 1 -github.com/luxfi/crypto/bn256/google/optate.go:215.31,217.4 1 1 -github.com/luxfi/crypto/bn256/google/optate.go:219.3,226.28 7 1 -github.com/luxfi/crypto/bn256/google/optate.go:227.10,228.66 1 1 -github.com/luxfi/crypto/bn256/google/optate.go:229.11,230.65 1 1 -github.com/luxfi/crypto/bn256/google/optate.go:231.11,232.12 1 1 -github.com/luxfi/crypto/bn256/google/optate.go:235.3,240.11 6 1 -github.com/luxfi/crypto/bn256/google/optate.go:258.2,302.12 34 1 -github.com/luxfi/crypto/bn256/google/optate.go:308.58,386.2 64 1 -github.com/luxfi/crypto/bn256/google/optate.go:388.68,393.38 4 1 -github.com/luxfi/crypto/bn256/google/optate.go:393.38,395.3 1 1 -github.com/luxfi/crypto/bn256/google/optate.go:396.2,396.12 1 1 -github.com/luxfi/crypto/bn256/google/twist.go:43.46,50.2 1 1 -github.com/luxfi/crypto/bn256/google/twist.go:52.38,54.2 1 0 -github.com/luxfi/crypto/bn256/google/twist.go:56.40,61.2 4 1 -github.com/luxfi/crypto/bn256/google/twist.go:63.41,68.2 4 1 -github.com/luxfi/crypto/bn256/google/twist.go:71.39,80.42 8 1 -github.com/luxfi/crypto/bn256/google/twist.go:80.42,82.3 1 0 -github.com/luxfi/crypto/bn256/google/twist.go:85.2,87.24 3 1 -github.com/luxfi/crypto/bn256/google/twist.go:90.36,92.2 1 1 -github.com/luxfi/crypto/bn256/google/twist.go:94.40,96.2 1 1 -github.com/luxfi/crypto/bn256/google/twist.go:98.58,101.20 1 1 -github.com/luxfi/crypto/bn256/google/twist.go:101.20,104.3 2 1 -github.com/luxfi/crypto/bn256/google/twist.go:105.2,105.20 1 1 -github.com/luxfi/crypto/bn256/google/twist.go:105.20,108.3 2 0 -github.com/luxfi/crypto/bn256/google/twist.go:111.2,131.22 16 1 -github.com/luxfi/crypto/bn256/google/twist.go:131.22,134.3 2 0 -github.com/luxfi/crypto/bn256/google/twist.go:135.2,169.14 30 1 -github.com/luxfi/crypto/bn256/google/twist.go:172.58,208.2 29 1 -github.com/luxfi/crypto/bn256/google/twist.go:210.84,215.40 4 1 -github.com/luxfi/crypto/bn256/google/twist.go:215.40,217.25 2 1 -github.com/luxfi/crypto/bn256/google/twist.go:217.25,219.4 1 1 -github.com/luxfi/crypto/bn256/google/twist.go:219.9,221.4 1 1 -github.com/luxfi/crypto/bn256/google/twist.go:224.2,227.10 4 1 -github.com/luxfi/crypto/bn256/google/twist.go:232.59,233.17 1 1 -github.com/luxfi/crypto/bn256/google/twist.go:233.17,235.3 1 1 -github.com/luxfi/crypto/bn256/google/twist.go:236.2,236.20 1 1 -github.com/luxfi/crypto/bn256/google/twist.go:236.20,242.3 5 1 -github.com/luxfi/crypto/bn256/google/twist.go:243.2,256.10 12 1 -github.com/luxfi/crypto/bn256/google/twist.go:259.60,265.2 5 1 -github.com/luxfi/crypto/bls/signer/localsigner/localsigner.go:23.34,25.16 2 1 -github.com/luxfi/crypto/bls/signer/localsigner/localsigner.go:25.16,27.3 1 0 -github.com/luxfi/crypto/bls/signer/localsigner/localsigner.go:29.2,30.42 2 1 -github.com/luxfi/crypto/bls/signer/localsigner/localsigner.go:34.40,36.2 1 0 -github.com/luxfi/crypto/bls/signer/localsigner/localsigner.go:40.54,42.16 2 0 -github.com/luxfi/crypto/bls/signer/localsigner/localsigner.go:42.16,44.3 1 0 -github.com/luxfi/crypto/bls/signer/localsigner/localsigner.go:46.2,47.42 2 0 -github.com/luxfi/crypto/bls/signer/localsigner/localsigner.go:52.50,54.2 1 1 -github.com/luxfi/crypto/bls/signer/localsigner/localsigner.go:57.64,59.2 1 1 -github.com/luxfi/crypto/bls/signer/localsigner/localsigner.go:62.81,64.2 1 1 -github.com/luxfi/crypto/cb58/cb58.go:29.43,31.42 2 1 -github.com/luxfi/crypto/cb58/cb58.go:31.42,33.3 1 0 -github.com/luxfi/crypto/cb58/cb58.go:34.2,37.36 4 1 -github.com/luxfi/crypto/cb58/cb58.go:41.41,43.16 2 1 -github.com/luxfi/crypto/cb58/cb58.go:43.16,45.3 1 0 -github.com/luxfi/crypto/cb58/cb58.go:46.2,46.37 1 1 -github.com/luxfi/crypto/cb58/cb58.go:46.37,48.3 1 0 -github.com/luxfi/crypto/cb58/cb58.go:50.2,52.69 3 1 -github.com/luxfi/crypto/cb58/cb58.go:52.69,54.3 1 0 -github.com/luxfi/crypto/cb58/cb58.go:55.2,55.22 1 1 -github.com/luxfi/crypto/ecies/ecies.go:64.54,66.2 1 0 -github.com/luxfi/crypto/ecies/ecies.go:69.57,76.2 1 1 -github.com/luxfi/crypto/ecies/ecies.go:85.56,89.2 3 0 -github.com/luxfi/crypto/ecies/ecies.go:92.53,95.2 2 1 -github.com/luxfi/crypto/ecies/ecies.go:99.106,101.16 2 1 -github.com/luxfi/crypto/ecies/ecies.go:101.16,103.3 1 0 -github.com/luxfi/crypto/ecies/ecies.go:104.2,109.19 6 1 -github.com/luxfi/crypto/ecies/ecies.go:109.19,111.3 1 1 -github.com/luxfi/crypto/ecies/ecies.go:112.2,113.8 2 1 -github.com/luxfi/crypto/ecies/ecies.go:118.45,120.2 1 1 -github.com/luxfi/crypto/ecies/ecies.go:123.97,124.38 1 1 -github.com/luxfi/crypto/ecies/ecies.go:124.38,126.3 1 0 -github.com/luxfi/crypto/ecies/ecies.go:127.2,127.44 1 1 -github.com/luxfi/crypto/ecies/ecies.go:127.44,129.3 1 1 -github.com/luxfi/crypto/ecies/ecies.go:131.2,132.14 2 1 -github.com/luxfi/crypto/ecies/ecies.go:132.14,134.3 1 0 -github.com/luxfi/crypto/ecies/ecies.go:136.2,139.16 4 1 -github.com/luxfi/crypto/ecies/ecies.go:148.64,151.54 3 1 -github.com/luxfi/crypto/ecies/ecies.go:151.54,158.3 6 1 -github.com/luxfi/crypto/ecies/ecies.go:159.2,159.18 1 1 -github.com/luxfi/crypto/ecies/ecies.go:163.39,165.2 1 1 -github.com/luxfi/crypto/ecies/ecies.go:168.75,176.2 7 1 -github.com/luxfi/crypto/ecies/ecies.go:180.71,186.2 5 1 -github.com/luxfi/crypto/ecies/ecies.go:189.77,193.2 3 1 -github.com/luxfi/crypto/ecies/ecies.go:196.92,198.16 2 1 -github.com/luxfi/crypto/ecies/ecies.go:198.16,200.3 1 0 -github.com/luxfi/crypto/ecies/ecies.go:202.2,203.16 2 1 -github.com/luxfi/crypto/ecies/ecies.go:203.16,205.3 1 0 -github.com/luxfi/crypto/ecies/ecies.go:206.2,211.8 5 1 -github.com/luxfi/crypto/ecies/ecies.go:216.76,218.16 2 1 -github.com/luxfi/crypto/ecies/ecies.go:218.16,220.3 1 0 -github.com/luxfi/crypto/ecies/ecies.go:222.2,226.8 4 1 -github.com/luxfi/crypto/ecies/ecies.go:234.87,236.16 2 1 -github.com/luxfi/crypto/ecies/ecies.go:236.16,238.3 1 0 -github.com/luxfi/crypto/ecies/ecies.go:240.2,241.16 2 1 -github.com/luxfi/crypto/ecies/ecies.go:241.16,243.3 1 0 -github.com/luxfi/crypto/ecies/ecies.go:245.2,246.16 2 1 -github.com/luxfi/crypto/ecies/ecies.go:246.16,248.3 1 0 -github.com/luxfi/crypto/ecies/ecies.go:250.2,254.47 4 1 -github.com/luxfi/crypto/ecies/ecies.go:254.47,256.3 1 0 -github.com/luxfi/crypto/ecies/ecies.go:258.2,260.55 2 1 -github.com/luxfi/crypto/ecies/ecies.go:260.55,267.3 6 1 -github.com/luxfi/crypto/ecies/ecies.go:268.2,268.29 1 0 -github.com/luxfi/crypto/ecies/ecies.go:272.72,273.17 1 1 -github.com/luxfi/crypto/ecies/ecies.go:273.17,275.3 1 0 -github.com/luxfi/crypto/ecies/ecies.go:276.2,277.16 2 1 -github.com/luxfi/crypto/ecies/ecies.go:277.16,279.3 1 0 -github.com/luxfi/crypto/ecies/ecies.go:281.2,290.14 3 1 -github.com/luxfi/crypto/ecies/ecies.go:291.15,293.33 2 1 -github.com/luxfi/crypto/ecies/ecies.go:293.33,295.4 1 0 -github.com/luxfi/crypto/ecies/ecies.go:296.10,297.34 1 1 -github.com/luxfi/crypto/ecies/ecies.go:300.2,306.53 5 1 -github.com/luxfi/crypto/ecies/ecies.go:306.53,308.17 2 1 -github.com/luxfi/crypto/ecies/ecies.go:308.17,310.4 1 0 -github.com/luxfi/crypto/ecies/ecies.go:312.3,313.17 2 1 -github.com/luxfi/crypto/ecies/ecies.go:313.17,315.4 1 0 -github.com/luxfi/crypto/ecies/ecies.go:316.3,319.51 3 1 -github.com/luxfi/crypto/ecies/ecies.go:319.51,321.4 1 1 -github.com/luxfi/crypto/ecies/ecies.go:322.3,322.48 1 1 -github.com/luxfi/crypto/ecies/ecies.go:324.2,324.29 1 0 -github.com/luxfi/crypto/ecies/params.go:124.67,126.2 1 0 -github.com/luxfi/crypto/ecies/params.go:130.66,132.2 1 1 -github.com/luxfi/crypto/ecies/params.go:134.57,136.19 2 1 -github.com/luxfi/crypto/ecies/params.go:136.19,137.57 1 0 -github.com/luxfi/crypto/ecies/params.go:137.57,139.4 1 0 -github.com/luxfi/crypto/ecies/params.go:141.2,141.31 1 1 -github.com/luxfi/crypto/ecies/params.go:141.31,143.3 1 0 -github.com/luxfi/crypto/ecies/params.go:144.2,144.20 1 1 -github.com/luxfi/crypto/ipa/common/parallel/execute.go:23.69,26.23 2 0 -github.com/luxfi/crypto/ipa/common/parallel/execute.go:26.23,28.3 1 0 -github.com/luxfi/crypto/ipa/common/parallel/execute.go:29.2,32.29 2 0 -github.com/luxfi/crypto/ipa/common/parallel/execute.go:32.29,35.3 2 0 -github.com/luxfi/crypto/ipa/common/parallel/execute.go:37.2,42.31 4 0 -github.com/luxfi/crypto/ipa/common/parallel/execute.go:42.31,46.21 4 0 -github.com/luxfi/crypto/ipa/common/parallel/execute.go:46.21,50.4 3 0 -github.com/luxfi/crypto/ipa/common/parallel/execute.go:51.3,51.13 1 0 -github.com/luxfi/crypto/ipa/common/parallel/execute.go:51.13,54.4 2 0 -github.com/luxfi/crypto/ipa/common/parallel/execute.go:57.2,57.11 1 0 -github.com/luxfi/crypto/hashing/hashing.go:37.46,39.2 1 1 -github.com/luxfi/crypto/hashing/hashing.go:43.40,46.2 2 1 -github.com/luxfi/crypto/hashing/hashing.go:50.46,52.16 2 1 -github.com/luxfi/crypto/hashing/hashing.go:52.16,53.13 1 0 -github.com/luxfi/crypto/hashing/hashing.go:55.2,55.10 1 1 -github.com/luxfi/crypto/hashing/hashing.go:60.40,65.16 3 1 -github.com/luxfi/crypto/hashing/hashing.go:65.16,66.13 1 0 -github.com/luxfi/crypto/hashing/hashing.go:68.2,68.22 1 1 -github.com/luxfi/crypto/hashing/hashing.go:76.48,79.2 2 1 -github.com/luxfi/crypto/hashing/hashing.go:81.47,83.49 2 1 -github.com/luxfi/crypto/hashing/hashing.go:83.49,85.3 1 1 -github.com/luxfi/crypto/hashing/hashing.go:86.2,87.18 2 1 -github.com/luxfi/crypto/hashing/hashing.go:90.47,92.56 2 1 -github.com/luxfi/crypto/hashing/hashing.go:92.56,94.3 1 1 -github.com/luxfi/crypto/hashing/hashing.go:95.2,96.18 2 1 -github.com/luxfi/crypto/hashing/hashing.go:99.46,101.2 1 1 -github.com/luxfi/crypto/ipa/test_helper/poly.go:11.53,13.27 2 0 -github.com/luxfi/crypto/ipa/test_helper/poly.go:13.27,14.53 1 0 -github.com/luxfi/crypto/ipa/test_helper/poly.go:16.2,17.25 2 0 -github.com/luxfi/crypto/ipa/test_helper/poly.go:17.25,19.3 1 0 -github.com/luxfi/crypto/ipa/test_helper/poly.go:21.2,22.27 2 0 -github.com/luxfi/crypto/ipa/test_helper/poly.go:22.27,24.3 1 0 -github.com/luxfi/crypto/ipa/test_helper/poly.go:26.2,26.21 1 0 -github.com/luxfi/crypto/ipa/test_helper/poly.go:29.78,32.21 3 0 -github.com/luxfi/crypto/ipa/test_helper/poly.go:32.21,34.3 1 0 -github.com/luxfi/crypto/ipa/test_helper/poly.go:36.71,39.21 3 0 -github.com/luxfi/crypto/ipa/test_helper/poly.go:39.21,41.3 1 0 -github.com/luxfi/crypto/hashing/blake3/blake3.go:29.20,31.2 1 1 -github.com/luxfi/crypto/hashing/blake3/blake3.go:34.43,38.2 3 1 -github.com/luxfi/crypto/hashing/blake3/blake3.go:41.53,43.2 1 1 -github.com/luxfi/crypto/hashing/blake3/blake3.go:46.59,48.2 1 1 -github.com/luxfi/crypto/hashing/blake3/blake3.go:51.40,55.2 3 1 -github.com/luxfi/crypto/hashing/blake3/blake3.go:58.40,62.2 3 1 -github.com/luxfi/crypto/hashing/blake3/blake3.go:65.42,66.14 1 1 -github.com/luxfi/crypto/hashing/blake3/blake3.go:66.14,69.3 2 1 -github.com/luxfi/crypto/hashing/blake3/blake3.go:70.2,72.18 3 1 -github.com/luxfi/crypto/hashing/blake3/blake3.go:76.39,78.2 1 1 -github.com/luxfi/crypto/hashing/blake3/blake3.go:81.34,85.2 3 1 -github.com/luxfi/crypto/hashing/blake3/blake3.go:88.37,90.2 1 1 -github.com/luxfi/crypto/hashing/blake3/blake3.go:93.34,95.2 1 1 -github.com/luxfi/crypto/hashing/blake3/blake3.go:98.26,100.2 1 1 -github.com/luxfi/crypto/hashing/blake3/blake3.go:103.36,107.2 3 1 -github.com/luxfi/crypto/hashing/blake3/blake3.go:110.34,114.2 3 1 -github.com/luxfi/crypto/hashing/blake3/blake3.go:117.56,121.2 3 1 -github.com/luxfi/crypto/ipa/bandersnatch/fp/fp.go:14.20,16.2 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/fp/fp.go:19.21,21.2 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fp/fp.go:24.25,28.2 3 0 -github.com/luxfi/crypto/ipa/bandersnatch/fp/fp.go:31.25,33.2 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/fp/fp.go:36.41,38.2 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/fp/fp.go:41.32,45.2 3 0 -github.com/luxfi/crypto/ipa/bandersnatch/fp/sqrt.go:44.13,45.91 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fp/sqrt.go:45.91,46.126 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fp/sqrt.go:46.126,47.14 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/fp/sqrt.go:49.3,49.43 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fp/sqrt.go:49.43,51.4 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fp/sqrt.go:53.3,55.48 3 1 -github.com/luxfi/crypto/ipa/bandersnatch/fp/sqrt.go:55.48,56.62 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/fp/sqrt.go:58.3,58.9 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fp/sqrt.go:60.2,61.112 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/fp/sqrt.go:61.112,62.41 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fp/sqrt.go:62.41,64.52 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/fp/sqrt.go:64.52,66.5 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fp/sqrt.go:68.3,68.9 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fp/sqrt.go:71.2,71.53 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fp/sqrt.go:71.53,77.32 5 1 -github.com/luxfi/crypto/ipa/bandersnatch/fp/sqrt.go:77.32,82.4 3 1 -github.com/luxfi/crypto/ipa/bandersnatch/fp/sqrt.go:85.3,85.26 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fp/sqrt.go:85.26,86.68 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/fp/sqrt.go:88.3,88.9 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fp/sqrt.go:98.70,100.2 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fp/sqrt.go:105.95,107.2 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fp/sqrt.go:116.39,118.16 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/fp/sqrt.go:118.16,120.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fp/sqrt.go:121.2,124.36 4 1 -github.com/luxfi/crypto/ipa/bandersnatch/fp/sqrt.go:124.36,126.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fp/sqrt.go:128.2,128.42 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fp/sqrt.go:131.39,145.40 5 1 -github.com/luxfi/crypto/ipa/bandersnatch/fp/sqrt.go:145.40,147.44 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/fp/sqrt.go:147.44,149.4 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fp/sqrt.go:156.2,160.24 3 1 -github.com/luxfi/crypto/ipa/bandersnatch/fp/sqrt.go:160.24,162.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fp/sqrt.go:165.2,165.40 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fp/sqrt.go:165.40,168.26 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/fp/sqrt.go:168.26,171.4 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/fp/sqrt.go:172.3,173.85 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/fp/sqrt.go:181.2,184.40 3 1 -github.com/luxfi/crypto/ipa/bandersnatch/fp/sqrt.go:184.40,187.3 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/fp/sqrt.go:189.2,189.13 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fp/sqrt.go:192.120,193.54 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fp/sqrt.go:193.54,194.26 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fp/sqrt.go:194.26,196.4 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fp/sqrt.go:203.2,294.34 91 1 -github.com/luxfi/crypto/ipa/common/common.go:21.54,25.30 3 0 -github.com/luxfi/crypto/ipa/common/common.go:25.30,27.3 1 0 -github.com/luxfi/crypto/ipa/common/common.go:29.2,29.15 1 0 -github.com/luxfi/crypto/ipa/common/common.go:32.59,34.52 2 0 -github.com/luxfi/crypto/ipa/common/common.go:34.52,36.3 1 0 -github.com/luxfi/crypto/ipa/common/common.go:37.2,38.38 2 0 -github.com/luxfi/crypto/ipa/common/common.go:38.38,40.3 1 0 -github.com/luxfi/crypto/ipa/common/common.go:41.2,41.15 1 0 -github.com/luxfi/crypto/ipa/common/common.go:44.51,46.52 2 0 -github.com/luxfi/crypto/ipa/common/common.go:46.52,48.3 1 0 -github.com/luxfi/crypto/ipa/common/common.go:49.2,50.57 2 0 -github.com/luxfi/crypto/ipa/common/common.go:50.57,52.3 1 0 -github.com/luxfi/crypto/ipa/common/common.go:54.2,54.20 1 0 -github.com/luxfi/crypto/ipa/common/transcript.go:19.46,29.2 4 1 -github.com/luxfi/crypto/ipa/common/transcript.go:31.66,34.2 2 1 -github.com/luxfi/crypto/ipa/common/transcript.go:40.69,44.2 2 1 -github.com/luxfi/crypto/ipa/common/transcript.go:50.76,54.2 2 1 -github.com/luxfi/crypto/ipa/common/transcript.go:56.46,58.2 1 1 -github.com/luxfi/crypto/ipa/common/transcript.go:66.63,87.2 9 1 -github.com/luxfi/crypto/ipa/multiproof.go:54.157,57.23 2 1 -github.com/luxfi/crypto/ipa/multiproof.go:57.23,58.36 1 1 -github.com/luxfi/crypto/ipa/multiproof.go:58.36,60.4 1 0 -github.com/luxfi/crypto/ipa/multiproof.go:63.2,63.24 1 1 -github.com/luxfi/crypto/ipa/multiproof.go:63.24,65.3 1 0 -github.com/luxfi/crypto/ipa/multiproof.go:66.2,66.24 1 1 -github.com/luxfi/crypto/ipa/multiproof.go:66.24,68.3 1 0 -github.com/luxfi/crypto/ipa/multiproof.go:70.2,71.22 2 1 -github.com/luxfi/crypto/ipa/multiproof.go:71.22,73.3 1 0 -github.com/luxfi/crypto/ipa/multiproof.go:75.2,75.55 1 1 -github.com/luxfi/crypto/ipa/multiproof.go:75.55,77.3 1 0 -github.com/luxfi/crypto/ipa/multiproof.go:79.2,79.35 1 1 -github.com/luxfi/crypto/ipa/multiproof.go:79.35,89.3 6 1 -github.com/luxfi/crypto/ipa/multiproof.go:91.2,101.34 5 1 -github.com/luxfi/crypto/ipa/multiproof.go:101.34,103.18 1 1 -github.com/luxfi/crypto/ipa/multiproof.go:103.18,104.12 1 1 -github.com/luxfi/crypto/ipa/multiproof.go:106.3,107.44 2 1 -github.com/luxfi/crypto/ipa/multiproof.go:107.44,109.4 1 1 -github.com/luxfi/crypto/ipa/multiproof.go:112.2,119.30 5 1 -github.com/luxfi/crypto/ipa/multiproof.go:119.30,120.18 1 1 -github.com/luxfi/crypto/ipa/multiproof.go:120.18,121.12 1 1 -github.com/luxfi/crypto/ipa/multiproof.go:123.3,126.33 4 1 -github.com/luxfi/crypto/ipa/multiproof.go:128.2,133.30 4 1 -github.com/luxfi/crypto/ipa/multiproof.go:133.30,134.18 1 1 -github.com/luxfi/crypto/ipa/multiproof.go:134.18,135.12 1 1 -github.com/luxfi/crypto/ipa/multiproof.go:137.3,137.44 1 1 -github.com/luxfi/crypto/ipa/multiproof.go:137.44,141.4 3 1 -github.com/luxfi/crypto/ipa/multiproof.go:142.3,142.14 1 1 -github.com/luxfi/crypto/ipa/multiproof.go:145.2,146.43 2 1 -github.com/luxfi/crypto/ipa/multiproof.go:146.43,148.3 1 1 -github.com/luxfi/crypto/ipa/multiproof.go:150.2,158.16 6 1 -github.com/luxfi/crypto/ipa/multiproof.go:158.16,160.3 1 0 -github.com/luxfi/crypto/ipa/multiproof.go:162.2,165.8 1 1 -github.com/luxfi/crypto/ipa/multiproof.go:171.167,174.24 2 1 -github.com/luxfi/crypto/ipa/multiproof.go:174.24,176.3 1 0 -github.com/luxfi/crypto/ipa/multiproof.go:177.2,177.24 1 1 -github.com/luxfi/crypto/ipa/multiproof.go:177.24,179.3 1 0 -github.com/luxfi/crypto/ipa/multiproof.go:181.2,182.22 2 1 -github.com/luxfi/crypto/ipa/multiproof.go:182.22,184.3 1 0 -github.com/luxfi/crypto/ipa/multiproof.go:186.2,186.35 1 1 -github.com/luxfi/crypto/ipa/multiproof.go:186.35,191.3 4 1 -github.com/luxfi/crypto/ipa/multiproof.go:193.2,202.35 6 1 -github.com/luxfi/crypto/ipa/multiproof.go:202.35,210.3 5 1 -github.com/luxfi/crypto/ipa/multiproof.go:213.2,214.43 2 1 -github.com/luxfi/crypto/ipa/multiproof.go:214.43,218.3 2 1 -github.com/luxfi/crypto/ipa/multiproof.go:219.2,223.43 3 1 -github.com/luxfi/crypto/ipa/multiproof.go:223.43,224.31 1 1 -github.com/luxfi/crypto/ipa/multiproof.go:224.31,225.12 1 1 -github.com/luxfi/crypto/ipa/multiproof.go:227.3,229.26 3 1 -github.com/luxfi/crypto/ipa/multiproof.go:233.2,235.31 3 1 -github.com/luxfi/crypto/ipa/multiproof.go:235.31,239.3 2 1 -github.com/luxfi/crypto/ipa/multiproof.go:241.2,242.16 2 1 -github.com/luxfi/crypto/ipa/multiproof.go:242.16,244.3 1 0 -github.com/luxfi/crypto/ipa/multiproof.go:245.2,251.16 5 1 -github.com/luxfi/crypto/ipa/multiproof.go:251.16,253.3 1 0 -github.com/luxfi/crypto/ipa/multiproof.go:255.2,255.16 1 1 -github.com/luxfi/crypto/ipa/multiproof.go:258.38,262.2 3 1 -github.com/luxfi/crypto/ipa/multiproof.go:265.48,266.72 1 1 -github.com/luxfi/crypto/ipa/multiproof.go:266.72,268.3 1 0 -github.com/luxfi/crypto/ipa/multiproof.go:269.2,269.40 1 1 -github.com/luxfi/crypto/ipa/multiproof.go:269.40,271.3 1 0 -github.com/luxfi/crypto/ipa/multiproof.go:272.2,272.12 1 1 -github.com/luxfi/crypto/ipa/multiproof.go:276.47,278.16 2 1 -github.com/luxfi/crypto/ipa/multiproof.go:278.16,280.3 1 0 -github.com/luxfi/crypto/ipa/multiproof.go:281.2,282.39 2 1 -github.com/luxfi/crypto/ipa/multiproof.go:282.39,284.3 1 1 -github.com/luxfi/crypto/ipa/multiproof.go:286.2,287.45 2 1 -github.com/luxfi/crypto/ipa/multiproof.go:287.45,289.3 1 0 -github.com/luxfi/crypto/ipa/multiproof.go:291.2,291.12 1 1 -github.com/luxfi/crypto/ipa/multiproof.go:295.51,296.30 1 1 -github.com/luxfi/crypto/ipa/multiproof.go:296.30,298.3 1 0 -github.com/luxfi/crypto/ipa/multiproof.go:299.2,299.29 1 1 -github.com/luxfi/crypto/ipa/multiproof.go:302.129,307.34 4 1 -github.com/luxfi/crypto/ipa/multiproof.go:307.34,308.27 1 1 -github.com/luxfi/crypto/ipa/multiproof.go:308.27,309.21 1 1 -github.com/luxfi/crypto/ipa/multiproof.go:309.21,311.5 1 1 -github.com/luxfi/crypto/ipa/multiproof.go:312.4,313.33 2 1 -github.com/luxfi/crypto/ipa/multiproof.go:313.33,315.31 2 1 -github.com/luxfi/crypto/ipa/multiproof.go:315.31,317.6 1 1 -github.com/luxfi/crypto/ipa/multiproof.go:319.5,319.46 1 1 -github.com/luxfi/crypto/ipa/multiproof.go:319.46,323.6 3 1 -github.com/luxfi/crypto/ipa/multiproof.go:325.4,325.36 1 1 -github.com/luxfi/crypto/ipa/multiproof.go:331.2,332.34 2 1 -github.com/luxfi/crypto/ipa/multiproof.go:332.34,334.36 2 1 -github.com/luxfi/crypto/ipa/multiproof.go:334.36,335.38 1 1 -github.com/luxfi/crypto/ipa/multiproof.go:335.38,336.13 1 1 -github.com/luxfi/crypto/ipa/multiproof.go:340.4,340.27 1 1 -github.com/luxfi/crypto/ipa/multiproof.go:340.27,342.13 2 1 -github.com/luxfi/crypto/ipa/multiproof.go:345.4,345.45 1 1 -github.com/luxfi/crypto/ipa/multiproof.go:345.45,347.5 1 1 -github.com/luxfi/crypto/ipa/multiproof.go:351.2,351.18 1 1 -github.com/luxfi/crypto/lamport/lamport.go:58.73,59.16 1 0 -github.com/luxfi/crypto/lamport/lamport.go:59.16,61.3 1 0 -github.com/luxfi/crypto/lamport/lamport.go:63.2,67.22 3 0 -github.com/luxfi/crypto/lamport/lamport.go:67.22,69.54 2 0 -github.com/luxfi/crypto/lamport/lamport.go:69.54,71.4 1 0 -github.com/luxfi/crypto/lamport/lamport.go:74.2,77.8 1 0 -github.com/luxfi/crypto/lamport/lamport.go:81.45,87.32 4 0 -github.com/luxfi/crypto/lamport/lamport.go:87.32,91.3 3 0 -github.com/luxfi/crypto/lamport/lamport.go:93.2,96.3 1 0 -github.com/luxfi/crypto/lamport/lamport.go:101.66,111.31 6 0 -github.com/luxfi/crypto/lamport/lamport.go:111.31,116.32 4 0 -github.com/luxfi/crypto/lamport/lamport.go:116.32,119.4 1 0 -github.com/luxfi/crypto/lamport/lamport.go:119.9,121.16 2 0 -github.com/luxfi/crypto/lamport/lamport.go:121.16,123.5 1 0 -github.com/luxfi/crypto/lamport/lamport.go:123.10,125.5 1 0 -github.com/luxfi/crypto/lamport/lamport.go:128.3,129.31 2 0 -github.com/luxfi/crypto/lamport/lamport.go:133.2,133.27 1 0 -github.com/luxfi/crypto/lamport/lamport.go:133.27,134.31 1 0 -github.com/luxfi/crypto/lamport/lamport.go:134.31,136.4 1 0 -github.com/luxfi/crypto/lamport/lamport.go:139.2,142.8 1 0 -github.com/luxfi/crypto/lamport/lamport.go:148.70,153.31 3 0 -github.com/luxfi/crypto/lamport/lamport.go:153.31,158.32 4 0 -github.com/luxfi/crypto/lamport/lamport.go:158.32,161.4 1 0 -github.com/luxfi/crypto/lamport/lamport.go:161.9,163.16 2 0 -github.com/luxfi/crypto/lamport/lamport.go:163.16,165.5 1 0 -github.com/luxfi/crypto/lamport/lamport.go:165.10,167.5 1 0 -github.com/luxfi/crypto/lamport/lamport.go:170.3,171.31 2 0 -github.com/luxfi/crypto/lamport/lamport.go:175.2,175.27 1 0 -github.com/luxfi/crypto/lamport/lamport.go:175.27,176.31 1 0 -github.com/luxfi/crypto/lamport/lamport.go:176.31,178.4 1 0 -github.com/luxfi/crypto/lamport/lamport.go:181.2,184.8 1 0 -github.com/luxfi/crypto/lamport/lamport.go:188.67,189.34 1 0 -github.com/luxfi/crypto/lamport/lamport.go:189.34,191.3 1 0 -github.com/luxfi/crypto/lamport/lamport.go:194.2,198.37 4 0 -github.com/luxfi/crypto/lamport/lamport.go:202.71,203.34 1 0 -github.com/luxfi/crypto/lamport/lamport.go:203.34,205.3 1 0 -github.com/luxfi/crypto/lamport/lamport.go:207.2,209.32 2 0 -github.com/luxfi/crypto/lamport/lamport.go:209.32,211.3 1 0 -github.com/luxfi/crypto/lamport/lamport.go:214.2,215.31 2 0 -github.com/luxfi/crypto/lamport/lamport.go:215.31,220.32 4 0 -github.com/luxfi/crypto/lamport/lamport.go:220.32,222.4 1 0 -github.com/luxfi/crypto/lamport/lamport.go:222.9,224.4 1 0 -github.com/luxfi/crypto/lamport/lamport.go:227.3,233.15 5 0 -github.com/luxfi/crypto/lamport/lamport.go:233.15,235.4 1 0 -github.com/luxfi/crypto/lamport/lamport.go:235.9,237.4 1 0 -github.com/luxfi/crypto/lamport/lamport.go:239.3,239.41 1 0 -github.com/luxfi/crypto/lamport/lamport.go:239.41,241.4 1 0 -github.com/luxfi/crypto/lamport/lamport.go:244.2,244.13 1 0 -github.com/luxfi/crypto/lamport/lamport.go:248.38,255.34 5 0 -github.com/luxfi/crypto/lamport/lamport.go:255.34,258.3 2 0 -github.com/luxfi/crypto/lamport/lamport.go:260.2,260.15 1 0 -github.com/luxfi/crypto/lamport/lamport.go:264.58,265.19 1 0 -github.com/luxfi/crypto/lamport/lamport.go:265.19,267.3 1 0 -github.com/luxfi/crypto/lamport/lamport.go:269.2,273.31 4 0 -github.com/luxfi/crypto/lamport/lamport.go:273.31,275.3 1 0 -github.com/luxfi/crypto/lamport/lamport.go:277.2,279.24 3 0 -github.com/luxfi/crypto/lamport/lamport.go:279.24,283.3 3 0 -github.com/luxfi/crypto/lamport/lamport.go:285.2,288.8 1 0 -github.com/luxfi/crypto/lamport/lamport.go:292.38,299.35 5 0 -github.com/luxfi/crypto/lamport/lamport.go:299.35,302.3 2 0 -github.com/luxfi/crypto/lamport/lamport.go:304.2,304.15 1 0 -github.com/luxfi/crypto/lamport/lamport.go:308.58,309.19 1 0 -github.com/luxfi/crypto/lamport/lamport.go:309.19,311.3 1 0 -github.com/luxfi/crypto/lamport/lamport.go:313.2,317.31 4 0 -github.com/luxfi/crypto/lamport/lamport.go:317.31,319.3 1 0 -github.com/luxfi/crypto/lamport/lamport.go:321.2,323.24 3 0 -github.com/luxfi/crypto/lamport/lamport.go:323.24,327.3 3 0 -github.com/luxfi/crypto/lamport/lamport.go:329.2,332.8 1 0 -github.com/luxfi/crypto/lamport/lamport.go:337.63,338.18 1 0 -github.com/luxfi/crypto/lamport/lamport.go:339.24,340.29 1 0 -github.com/luxfi/crypto/lamport/lamport.go:341.24,342.29 1 0 -github.com/luxfi/crypto/lamport/lamport.go:343.10,344.29 1 0 -github.com/luxfi/crypto/lamport/lamport.go:348.45,349.18 1 0 -github.com/luxfi/crypto/lamport/lamport.go:350.14,351.22 1 0 -github.com/luxfi/crypto/lamport/lamport.go:352.14,353.22 1 0 -github.com/luxfi/crypto/lamport/lamport.go:354.16,355.22 1 0 -github.com/luxfi/crypto/lamport/lamport.go:356.16,357.22 1 0 -github.com/luxfi/crypto/lamport/lamport.go:358.10,359.22 1 0 -github.com/luxfi/crypto/lamport/lamport.go:363.35,364.22 1 0 -github.com/luxfi/crypto/lamport/lamport.go:364.22,366.3 1 0 -github.com/luxfi/crypto/lamport/lamport.go:367.2,367.19 1 0 -github.com/luxfi/crypto/lamport/lamport.go:367.19,368.19 1 0 -github.com/luxfi/crypto/lamport/lamport.go:368.19,370.4 1 0 -github.com/luxfi/crypto/lamport/lamport.go:372.2,372.13 1 0 -github.com/luxfi/crypto/lamport/lamport.go:376.46,379.2 2 0 -github.com/luxfi/crypto/lamport/lamport.go:382.46,385.2 2 0 -github.com/luxfi/crypto/rlp/encode.go:30.53,32.42 2 0 -github.com/luxfi/crypto/rlp/encode.go:32.42,34.3 1 0 -github.com/luxfi/crypto/rlp/encode.go:35.2,35.25 1 0 -github.com/luxfi/crypto/rlp/encode.go:38.55,39.25 1 0 -github.com/luxfi/crypto/rlp/encode.go:40.14,41.29 1 0 -github.com/luxfi/crypto/rlp/encode.go:42.14,43.37 1 0 -github.com/luxfi/crypto/rlp/encode.go:44.14,45.30 1 0 -github.com/luxfi/crypto/rlp/encode.go:46.16,47.30 1 0 -github.com/luxfi/crypto/rlp/encode.go:48.21,49.28 1 0 -github.com/luxfi/crypto/rlp/encode.go:50.22,51.37 1 0 -github.com/luxfi/crypto/rlp/encode.go:52.19,53.37 1 0 -github.com/luxfi/crypto/rlp/encode.go:54.10,56.13 1 0 -github.com/luxfi/crypto/rlp/encode.go:60.53,61.33 1 0 -github.com/luxfi/crypto/rlp/encode.go:61.33,64.3 1 0 -github.com/luxfi/crypto/rlp/encode.go:64.8,64.25 1 0 -github.com/luxfi/crypto/rlp/encode.go:64.25,68.3 2 0 -github.com/luxfi/crypto/rlp/encode.go:68.8,74.3 4 0 -github.com/luxfi/crypto/rlp/encode.go:75.2,75.12 1 0 -github.com/luxfi/crypto/rlp/encode.go:78.54,79.12 1 0 -github.com/luxfi/crypto/rlp/encode.go:79.12,81.3 1 0 -github.com/luxfi/crypto/rlp/encode.go:82.2,85.30 3 0 -github.com/luxfi/crypto/rlp/encode.go:85.30,87.3 1 0 -github.com/luxfi/crypto/rlp/encode.go:88.2,88.28 1 0 -github.com/luxfi/crypto/rlp/encode.go:91.56,92.19 1 0 -github.com/luxfi/crypto/rlp/encode.go:92.19,94.3 1 0 -github.com/luxfi/crypto/rlp/encode.go:95.2,95.36 1 0 -github.com/luxfi/crypto/rlp/encode.go:98.62,101.28 2 0 -github.com/luxfi/crypto/rlp/encode.go:101.28,102.48 1 0 -github.com/luxfi/crypto/rlp/encode.go:102.48,104.4 1 0 -github.com/luxfi/crypto/rlp/encode.go:107.2,108.29 2 0 -github.com/luxfi/crypto/rlp/encode.go:108.29,112.3 2 0 -github.com/luxfi/crypto/rlp/encode.go:112.8,118.3 4 0 -github.com/luxfi/crypto/rlp/encode.go:119.2,119.12 1 0 -github.com/luxfi/crypto/rlp/encode.go:122.36,123.13 1 0 -github.com/luxfi/crypto/rlp/encode.go:123.13,125.3 1 0 -github.com/luxfi/crypto/rlp/encode.go:126.2,129.30 3 0 -github.com/luxfi/crypto/rlp/encode.go:129.30,131.3 1 0 -github.com/luxfi/crypto/rlp/encode.go:132.2,132.10 1 0 -github.com/luxfi/crypto/mldsa/mldsa.go:54.66,57.14 2 1 -github.com/luxfi/crypto/mldsa/mldsa.go:58.15,60.38 2 1 -github.com/luxfi/crypto/mldsa/mldsa.go:61.15,63.38 2 1 -github.com/luxfi/crypto/mldsa/mldsa.go:64.15,66.38 2 1 -github.com/luxfi/crypto/mldsa/mldsa.go:67.10,68.48 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:72.2,72.17 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:72.17,74.3 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:77.2,78.56 2 1 -github.com/luxfi/crypto/mldsa/mldsa.go:78.56,80.3 1 0 -github.com/luxfi/crypto/mldsa/mldsa.go:84.2,91.38 6 1 -github.com/luxfi/crypto/mldsa/mldsa.go:91.38,97.23 6 1 -github.com/luxfi/crypto/mldsa/mldsa.go:97.23,99.4 1 0 -github.com/luxfi/crypto/mldsa/mldsa.go:100.3,100.30 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:103.2,109.8 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:113.102,114.42 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:114.42,116.3 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:118.2,120.29 2 1 -github.com/luxfi/crypto/mldsa/mldsa.go:121.15,122.33 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:123.15,124.33 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:125.15,126.33 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:127.10,128.48 1 0 -github.com/luxfi/crypto/mldsa/mldsa.go:133.2,148.47 11 1 -github.com/luxfi/crypto/mldsa/mldsa.go:148.47,150.20 2 1 -github.com/luxfi/crypto/mldsa/mldsa.go:150.20,152.4 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:153.3,155.24 3 1 -github.com/luxfi/crypto/mldsa/mldsa.go:158.2,158.23 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:162.86,163.16 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:163.16,165.3 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:167.2,169.18 2 1 -github.com/luxfi/crypto/mldsa/mldsa.go:170.15,171.41 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:172.15,173.41 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:174.15,175.41 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:176.10,177.15 1 0 -github.com/luxfi/crypto/mldsa/mldsa.go:181.2,181.39 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:181.39,183.3 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:187.2,194.25 5 1 -github.com/luxfi/crypto/mldsa/mldsa.go:194.25,196.3 1 0 -github.com/luxfi/crypto/mldsa/mldsa.go:199.2,199.26 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:199.26,200.42 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:200.42,202.4 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:205.2,205.13 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:209.31,210.11 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:211.15,212.21 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:213.15,214.21 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:215.15,216.21 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:217.10,218.19 1 0 -github.com/luxfi/crypto/mldsa/mldsa.go:223.43,228.2 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:231.41,236.2 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:239.45,240.49 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:240.49,242.3 1 0 -github.com/luxfi/crypto/mldsa/mldsa.go:243.2,243.21 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:247.44,248.49 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:248.49,250.3 1 0 -github.com/luxfi/crypto/mldsa/mldsa.go:251.2,251.21 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:255.46,259.2 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:261.39,262.14 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:263.15,264.31 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:265.15,266.31 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:267.15,268.31 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:269.10,270.11 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:274.38,275.14 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:276.15,277.30 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:278.15,279.30 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:280.15,281.30 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:282.10,283.11 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:288.38,290.2 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:293.40,295.2 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:298.69,301.14 2 1 -github.com/luxfi/crypto/mldsa/mldsa.go:302.15,303.38 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:304.15,305.38 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:306.15,307.38 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:308.10,309.48 1 0 -github.com/luxfi/crypto/mldsa/mldsa.go:312.2,312.31 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:312.31,314.3 1 0 -github.com/luxfi/crypto/mldsa/mldsa.go:317.2,323.8 3 1 -github.com/luxfi/crypto/mldsa/mldsa.go:327.71,330.14 2 1 -github.com/luxfi/crypto/mldsa/mldsa.go:331.15,333.41 2 1 -github.com/luxfi/crypto/mldsa/mldsa.go:334.15,336.41 2 1 -github.com/luxfi/crypto/mldsa/mldsa.go:337.15,339.41 2 1 -github.com/luxfi/crypto/mldsa/mldsa.go:340.10,341.48 1 0 -github.com/luxfi/crypto/mldsa/mldsa.go:344.2,344.35 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:344.35,346.3 1 0 -github.com/luxfi/crypto/mldsa/mldsa.go:349.2,360.43 8 1 -github.com/luxfi/crypto/mldsa/mldsa.go:360.43,366.28 6 1 -github.com/luxfi/crypto/mldsa/mldsa.go:366.28,368.4 1 0 -github.com/luxfi/crypto/mldsa/mldsa.go:369.3,369.29 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:372.2,378.8 1 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:14.26,16.3 1 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:21.26,23.3 1 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:27.42,29.21 2 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:29.21,31.3 1 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:32.2,32.19 1 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:36.37,37.38 1 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:37.38,39.3 1 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:43.75,46.14 2 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:47.15,49.38 2 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:50.15,52.38 2 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:53.15,55.38 2 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:56.10,57.48 1 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:61.2,61.17 1 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:61.17,63.3 1 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:66.2,70.56 4 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:70.56,72.3 1 0 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:75.2,84.8 3 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:88.59,96.29 6 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:96.29,98.22 2 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:98.22,101.4 2 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:101.9,103.9 2 0 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:106.3,106.20 1 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:106.20,111.4 4 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:116.111,119.29 2 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:120.15,121.33 1 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:122.15,123.33 1 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:124.15,125.33 1 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:126.10,127.48 1 0 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:131.2,152.36 14 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:152.36,154.20 2 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:154.20,156.4 1 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:157.3,158.20 2 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:158.20,163.4 4 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:167.2,169.20 3 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:180.61,182.22 2 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:182.22,184.17 2 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:184.17,186.4 1 0 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:187.3,187.16 1 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:190.2,193.8 1 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:197.67,198.34 1 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:198.34,200.3 1 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:202.2,207.26 4 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:207.26,209.20 2 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:209.20,212.18 3 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:212.18,215.5 2 0 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:216.4,216.25 1 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:220.2,223.29 2 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:223.29,224.17 1 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:224.17,226.4 1 0 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:229.2,229.24 1 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:233.88,234.70 1 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:234.70,236.3 1 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:238.2,242.26 3 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:242.26,244.20 2 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:244.20,247.4 2 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:250.2,252.21 2 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:264.65,270.2 1 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:273.71,281.42 5 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:281.42,284.3 2 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:285.2,289.16 3 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:289.16,291.3 1 0 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:293.2,297.17 4 1 -github.com/luxfi/crypto/mlkem/mlkem.go:62.70,65.14 2 1 -github.com/luxfi/crypto/mlkem/mlkem.go:66.16,68.39 2 1 -github.com/luxfi/crypto/mlkem/mlkem.go:69.16,71.39 2 1 -github.com/luxfi/crypto/mlkem/mlkem.go:72.17,74.40 2 1 -github.com/luxfi/crypto/mlkem/mlkem.go:75.10,76.48 1 1 -github.com/luxfi/crypto/mlkem/mlkem.go:80.2,80.17 1 1 -github.com/luxfi/crypto/mlkem/mlkem.go:80.17,82.3 1 1 -github.com/luxfi/crypto/mlkem/mlkem.go:85.2,86.56 2 1 -github.com/luxfi/crypto/mlkem/mlkem.go:86.56,88.3 1 0 -github.com/luxfi/crypto/mlkem/mlkem.go:91.2,98.38 6 1 -github.com/luxfi/crypto/mlkem/mlkem.go:98.38,104.23 6 1 -github.com/luxfi/crypto/mlkem/mlkem.go:104.23,106.4 1 0 -github.com/luxfi/crypto/mlkem/mlkem.go:107.3,107.30 1 1 -github.com/luxfi/crypto/mlkem/mlkem.go:110.2,116.8 1 1 -github.com/luxfi/crypto/mlkem/mlkem.go:120.81,121.16 1 1 -github.com/luxfi/crypto/mlkem/mlkem.go:121.16,123.3 1 1 -github.com/luxfi/crypto/mlkem/mlkem.go:125.2,127.18 2 1 -github.com/luxfi/crypto/mlkem/mlkem.go:128.16,129.34 1 1 -github.com/luxfi/crypto/mlkem/mlkem.go:130.16,131.34 1 1 -github.com/luxfi/crypto/mlkem/mlkem.go:132.17,133.35 1 1 -github.com/luxfi/crypto/mlkem/mlkem.go:134.10,135.48 1 0 -github.com/luxfi/crypto/mlkem/mlkem.go:139.2,140.49 2 1 -github.com/luxfi/crypto/mlkem/mlkem.go:140.49,142.3 1 0 -github.com/luxfi/crypto/mlkem/mlkem.go:146.2,157.8 5 1 -github.com/luxfi/crypto/mlkem/mlkem.go:161.72,162.17 1 1 -github.com/luxfi/crypto/mlkem/mlkem.go:162.17,164.3 1 1 -github.com/luxfi/crypto/mlkem/mlkem.go:166.2,168.29 2 1 -github.com/luxfi/crypto/mlkem/mlkem.go:169.16,170.42 1 1 -github.com/luxfi/crypto/mlkem/mlkem.go:171.16,172.42 1 1 -github.com/luxfi/crypto/mlkem/mlkem.go:173.17,174.43 1 1 -github.com/luxfi/crypto/mlkem/mlkem.go:175.10,176.48 1 0 -github.com/luxfi/crypto/mlkem/mlkem.go:179.2,179.39 1 1 -github.com/luxfi/crypto/mlkem/mlkem.go:179.39,181.3 1 1 -github.com/luxfi/crypto/mlkem/mlkem.go:186.2,191.16 5 1 -github.com/luxfi/crypto/mlkem/mlkem.go:195.38,197.2 1 1 -github.com/luxfi/crypto/mlkem/mlkem.go:200.40,202.2 1 1 -github.com/luxfi/crypto/mlkem/mlkem.go:205.69,208.14 2 1 -github.com/luxfi/crypto/mlkem/mlkem.go:209.16,210.39 1 1 -github.com/luxfi/crypto/mlkem/mlkem.go:211.16,212.39 1 1 -github.com/luxfi/crypto/mlkem/mlkem.go:213.17,214.40 1 1 -github.com/luxfi/crypto/mlkem/mlkem.go:215.10,216.48 1 0 -github.com/luxfi/crypto/mlkem/mlkem.go:219.2,219.31 1 1 -github.com/luxfi/crypto/mlkem/mlkem.go:219.31,221.3 1 1 -github.com/luxfi/crypto/mlkem/mlkem.go:223.2,226.8 1 1 -github.com/luxfi/crypto/mlkem/mlkem.go:230.71,233.14 2 1 -github.com/luxfi/crypto/mlkem/mlkem.go:234.16,236.42 2 1 -github.com/luxfi/crypto/mlkem/mlkem.go:237.16,239.42 2 1 -github.com/luxfi/crypto/mlkem/mlkem.go:240.17,242.43 2 1 -github.com/luxfi/crypto/mlkem/mlkem.go:243.10,244.48 1 0 -github.com/luxfi/crypto/mlkem/mlkem.go:247.2,247.35 1 1 -github.com/luxfi/crypto/mlkem/mlkem.go:247.35,249.3 1 1 -github.com/luxfi/crypto/mlkem/mlkem.go:253.2,260.43 6 1 -github.com/luxfi/crypto/mlkem/mlkem.go:260.43,266.28 6 1 -github.com/luxfi/crypto/mlkem/mlkem.go:266.28,268.4 1 0 -github.com/luxfi/crypto/mlkem/mlkem.go:269.3,269.29 1 1 -github.com/luxfi/crypto/mlkem/mlkem.go:272.2,278.8 1 1 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:13.26,15.3 1 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:19.33,21.21 2 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:21.21,23.3 1 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:24.2,24.19 1 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:28.28,29.40 1 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:29.40,31.3 1 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:35.79,38.14 2 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:39.16,41.39 2 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:42.16,44.39 2 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:45.17,47.40 2 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:48.10,49.48 1 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:53.2,57.56 4 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:57.56,59.3 1 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:62.2,71.8 3 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:75.59,83.29 6 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:83.29,85.22 2 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:85.22,88.4 2 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:88.9,90.9 2 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:93.3,93.20 1 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:93.20,98.4 4 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:109.61,111.22 2 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:111.22,113.17 2 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:113.17,115.4 1 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:116.3,116.16 1 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:119.2,122.8 1 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:126.85,133.24 4 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:133.24,135.20 2 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:135.20,138.18 3 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:138.18,141.5 2 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:142.4,142.25 1 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:146.2,149.29 2 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:149.29,150.17 1 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:150.17,152.4 1 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:155.2,155.21 1 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:11.75,13.60 1 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:13.60,15.3 1 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:17.2,17.86 1 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:17.86,19.3 1 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:22.2,26.16 3 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:26.16,28.3 1 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:31.2,40.8 3 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:44.59,45.14 1 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:46.16,47.55 1 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:48.16,49.55 1 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:50.17,51.57 1 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:52.10,53.14 1 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:58.39,59.14 1 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:60.16,61.32 1 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:62.16,63.32 1 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:64.17,65.33 1 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:66.10,67.11 1 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:72.86,73.60 1 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:73.60,75.3 1 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:77.2,78.17 2 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:78.17,80.3 1 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:83.2,84.16 2 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:84.16,86.3 1 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:89.2,94.8 2 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:98.75,100.90 2 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:100.90,102.3 1 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:105.2,107.26 2 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:111.83,112.80 1 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:112.80,117.3 3 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:120.2,122.20 3 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:126.86,127.81 1 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:127.81,129.3 1 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:132.2,134.20 3 0 -github.com/luxfi/crypto/precompile/bls.go:46.54,48.2 1 1 -github.com/luxfi/crypto/precompile/bls.go:50.55,52.22 1 1 -github.com/luxfi/crypto/precompile/bls.go:52.22,54.3 1 1 -github.com/luxfi/crypto/precompile/bls.go:60.2,72.11 6 1 -github.com/luxfi/crypto/precompile/bls.go:72.11,74.3 1 1 -github.com/luxfi/crypto/precompile/bls.go:76.2,76.20 1 1 -github.com/luxfi/crypto/precompile/bls.go:82.63,84.20 1 1 -github.com/luxfi/crypto/precompile/bls.go:84.20,86.3 1 0 -github.com/luxfi/crypto/precompile/bls.go:87.2,88.59 2 1 -github.com/luxfi/crypto/precompile/bls.go:91.64,93.20 1 1 -github.com/luxfi/crypto/precompile/bls.go:93.20,95.3 1 0 -github.com/luxfi/crypto/precompile/bls.go:97.2,103.39 4 1 -github.com/luxfi/crypto/precompile/bls.go:103.39,105.3 1 0 -github.com/luxfi/crypto/precompile/bls.go:108.2,110.36 3 1 -github.com/luxfi/crypto/precompile/bls.go:110.36,113.3 2 1 -github.com/luxfi/crypto/precompile/bls.go:116.2,117.36 2 1 -github.com/luxfi/crypto/precompile/bls.go:117.36,120.3 2 1 -github.com/luxfi/crypto/precompile/bls.go:123.2,124.36 2 1 -github.com/luxfi/crypto/precompile/bls.go:124.36,125.28 1 1 -github.com/luxfi/crypto/precompile/bls.go:125.28,127.4 1 0 -github.com/luxfi/crypto/precompile/bls.go:129.3,132.38 3 1 -github.com/luxfi/crypto/precompile/bls.go:132.38,134.4 1 0 -github.com/luxfi/crypto/precompile/bls.go:136.3,137.24 2 1 -github.com/luxfi/crypto/precompile/bls.go:141.2,144.11 3 1 -github.com/luxfi/crypto/precompile/bls.go:144.11,146.3 1 1 -github.com/luxfi/crypto/precompile/bls.go:148.2,148.20 1 1 -github.com/luxfi/crypto/precompile/bls.go:154.61,155.20 1 0 -github.com/luxfi/crypto/precompile/bls.go:155.20,157.3 1 0 -github.com/luxfi/crypto/precompile/bls.go:158.2,159.57 2 0 -github.com/luxfi/crypto/precompile/bls.go:162.62,164.21 1 0 -github.com/luxfi/crypto/precompile/bls.go:164.21,166.3 1 0 -github.com/luxfi/crypto/precompile/bls.go:168.2,176.36 5 0 -github.com/luxfi/crypto/precompile/bls.go:176.36,177.29 1 0 -github.com/luxfi/crypto/precompile/bls.go:177.29,179.4 1 0 -github.com/luxfi/crypto/precompile/bls.go:180.3,181.15 2 0 -github.com/luxfi/crypto/precompile/bls.go:185.2,191.11 4 0 -github.com/luxfi/crypto/precompile/bls.go:191.11,193.3 1 0 -github.com/luxfi/crypto/precompile/bls.go:195.2,195.20 1 0 -github.com/luxfi/crypto/precompile/bls.go:201.63,203.2 1 0 -github.com/luxfi/crypto/precompile/bls.go:205.64,207.20 1 0 -github.com/luxfi/crypto/precompile/bls.go:207.20,209.3 1 0 -github.com/luxfi/crypto/precompile/bls.go:211.2,214.27 3 0 -github.com/luxfi/crypto/precompile/bls.go:214.27,216.3 1 0 -github.com/luxfi/crypto/precompile/bls.go:219.2,221.38 3 0 -github.com/luxfi/crypto/precompile/bls.go:221.38,222.29 1 0 -github.com/luxfi/crypto/precompile/bls.go:222.29,224.4 1 0 -github.com/luxfi/crypto/precompile/bls.go:225.3,226.15 2 0 -github.com/luxfi/crypto/precompile/bls.go:230.2,236.11 4 0 -github.com/luxfi/crypto/precompile/bls.go:236.11,238.3 1 0 -github.com/luxfi/crypto/precompile/bls.go:240.2,240.20 1 0 -github.com/luxfi/crypto/precompile/bls.go:246.66,247.20 1 1 -github.com/luxfi/crypto/precompile/bls.go:247.20,249.3 1 0 -github.com/luxfi/crypto/precompile/bls.go:250.2,251.62 2 1 -github.com/luxfi/crypto/precompile/bls.go:254.67,256.20 1 1 -github.com/luxfi/crypto/precompile/bls.go:256.20,258.3 1 0 -github.com/luxfi/crypto/precompile/bls.go:260.2,263.32 3 1 -github.com/luxfi/crypto/precompile/bls.go:263.32,265.3 1 0 -github.com/luxfi/crypto/precompile/bls.go:269.2,272.36 2 1 -github.com/luxfi/crypto/precompile/bls.go:272.36,275.27 3 1 -github.com/luxfi/crypto/precompile/bls.go:275.27,277.4 1 1 -github.com/luxfi/crypto/precompile/bls.go:280.2,280.27 1 1 -github.com/luxfi/crypto/precompile/bls.go:286.59,288.2 1 1 -github.com/luxfi/crypto/precompile/bls.go:290.60,292.21 1 1 -github.com/luxfi/crypto/precompile/bls.go:292.21,294.3 1 0 -github.com/luxfi/crypto/precompile/bls.go:298.2,301.26 2 1 -github.com/luxfi/crypto/precompile/bls.go:301.26,303.3 1 1 -github.com/luxfi/crypto/precompile/bls.go:305.2,305.21 1 1 -github.com/luxfi/crypto/precompile/bls.go:310.38,318.2 7 1 -github.com/luxfi/crypto/precompile/bls.go:323.64,324.20 1 0 -github.com/luxfi/crypto/precompile/bls.go:324.20,326.3 1 0 -github.com/luxfi/crypto/precompile/bls.go:327.2,328.62 2 0 -github.com/luxfi/crypto/precompile/bls.go:331.65,333.20 1 0 -github.com/luxfi/crypto/precompile/bls.go:333.20,335.3 1 0 -github.com/luxfi/crypto/precompile/bls.go:337.2,340.32 3 0 -github.com/luxfi/crypto/precompile/bls.go:340.32,342.3 1 0 -github.com/luxfi/crypto/precompile/bls.go:345.2,348.38 2 0 -github.com/luxfi/crypto/precompile/bls.go:348.38,351.27 3 0 -github.com/luxfi/crypto/precompile/bls.go:351.27,353.4 1 0 -github.com/luxfi/crypto/precompile/bls.go:356.2,356.25 1 0 -github.com/luxfi/crypto/precompile/bls.go:359.13,362.2 1 1 -github.com/luxfi/crypto/precompile/export.go:13.69,22.2 4 0 -github.com/luxfi/crypto/precompile/export.go:25.41,27.2 1 0 -github.com/luxfi/crypto/precompile/export.go:30.23,34.2 1 1 -github.com/luxfi/crypto/precompile/export.go:37.57,39.13 2 1 -github.com/luxfi/crypto/precompile/export.go:39.13,41.3 1 1 -github.com/luxfi/crypto/precompile/export.go:44.2,45.41 2 1 -github.com/luxfi/crypto/precompile/export.go:49.36,86.2 1 1 -github.com/luxfi/crypto/precompile/interface.go:24.30,29.2 1 1 -github.com/luxfi/crypto/precompile/interface.go:32.73,35.2 2 1 -github.com/luxfi/crypto/precompile/interface.go:38.66,41.2 2 1 -github.com/luxfi/crypto/precompile/interface.go:44.42,46.2 1 1 -github.com/luxfi/crypto/precompile/interface.go:49.64,51.2 1 0 -github.com/luxfi/crypto/precompile/lamport.go:37.64,39.2 1 1 -github.com/luxfi/crypto/precompile/lamport.go:41.65,43.21 1 1 -github.com/luxfi/crypto/precompile/lamport.go:43.21,45.3 1 1 -github.com/luxfi/crypto/precompile/lamport.go:47.2,54.41 5 1 -github.com/luxfi/crypto/precompile/lamport.go:54.41,56.3 1 0 -github.com/luxfi/crypto/precompile/lamport.go:58.2,63.16 4 1 -github.com/luxfi/crypto/precompile/lamport.go:63.16,65.3 1 0 -github.com/luxfi/crypto/precompile/lamport.go:67.2,68.16 2 1 -github.com/luxfi/crypto/precompile/lamport.go:68.16,70.3 1 0 -github.com/luxfi/crypto/precompile/lamport.go:73.2,76.11 3 1 -github.com/luxfi/crypto/precompile/lamport.go:76.11,78.3 1 1 -github.com/luxfi/crypto/precompile/lamport.go:79.2,79.20 1 1 -github.com/luxfi/crypto/precompile/lamport.go:85.64,87.2 1 1 -github.com/luxfi/crypto/precompile/lamport.go:89.65,91.21 1 1 -github.com/luxfi/crypto/precompile/lamport.go:91.21,93.3 1 0 -github.com/luxfi/crypto/precompile/lamport.go:95.2,102.41 5 1 -github.com/luxfi/crypto/precompile/lamport.go:102.41,104.3 1 0 -github.com/luxfi/crypto/precompile/lamport.go:106.2,111.16 4 1 -github.com/luxfi/crypto/precompile/lamport.go:111.16,113.3 1 0 -github.com/luxfi/crypto/precompile/lamport.go:115.2,116.16 2 1 -github.com/luxfi/crypto/precompile/lamport.go:116.16,118.3 1 0 -github.com/luxfi/crypto/precompile/lamport.go:121.2,124.11 3 1 -github.com/luxfi/crypto/precompile/lamport.go:124.11,126.3 1 1 -github.com/luxfi/crypto/precompile/lamport.go:127.2,127.20 1 1 -github.com/luxfi/crypto/precompile/lamport.go:133.63,134.20 1 1 -github.com/luxfi/crypto/precompile/lamport.go:134.20,136.3 1 0 -github.com/luxfi/crypto/precompile/lamport.go:137.2,138.72 2 1 -github.com/luxfi/crypto/precompile/lamport.go:141.64,143.20 1 1 -github.com/luxfi/crypto/precompile/lamport.go:143.20,145.3 1 0 -github.com/luxfi/crypto/precompile/lamport.go:147.2,156.32 7 1 -github.com/luxfi/crypto/precompile/lamport.go:156.32,158.3 1 0 -github.com/luxfi/crypto/precompile/lamport.go:159.2,162.37 3 1 -github.com/luxfi/crypto/precompile/lamport.go:162.37,164.53 1 1 -github.com/luxfi/crypto/precompile/lamport.go:164.53,167.12 3 0 -github.com/luxfi/crypto/precompile/lamport.go:171.3,182.17 8 1 -github.com/luxfi/crypto/precompile/lamport.go:182.17,185.12 3 0 -github.com/luxfi/crypto/precompile/lamport.go:188.3,189.17 2 1 -github.com/luxfi/crypto/precompile/lamport.go:189.17,192.12 3 0 -github.com/luxfi/crypto/precompile/lamport.go:196.3,196.38 1 1 -github.com/luxfi/crypto/precompile/lamport.go:196.38,198.4 1 1 -github.com/luxfi/crypto/precompile/lamport.go:198.9,201.4 2 1 -github.com/luxfi/crypto/precompile/lamport.go:205.2,206.14 2 1 -github.com/luxfi/crypto/precompile/lamport.go:206.14,208.3 1 1 -github.com/luxfi/crypto/precompile/lamport.go:209.2,211.20 2 1 -github.com/luxfi/crypto/precompile/lamport.go:217.62,219.2 1 1 -github.com/luxfi/crypto/precompile/lamport.go:221.63,223.20 1 1 -github.com/luxfi/crypto/precompile/lamport.go:223.20,225.3 1 0 -github.com/luxfi/crypto/precompile/lamport.go:227.2,230.18 3 1 -github.com/luxfi/crypto/precompile/lamport.go:230.18,232.3 1 0 -github.com/luxfi/crypto/precompile/lamport.go:234.2,237.32 3 1 -github.com/luxfi/crypto/precompile/lamport.go:237.32,239.3 1 0 -github.com/luxfi/crypto/precompile/lamport.go:242.2,245.37 3 1 -github.com/luxfi/crypto/precompile/lamport.go:245.37,250.3 4 1 -github.com/luxfi/crypto/precompile/lamport.go:253.2,254.18 2 1 -github.com/luxfi/crypto/precompile/lamport.go:260.64,262.2 1 0 -github.com/luxfi/crypto/precompile/lamport.go:264.65,266.21 1 0 -github.com/luxfi/crypto/precompile/lamport.go:266.21,268.3 1 0 -github.com/luxfi/crypto/precompile/lamport.go:270.2,275.32 5 0 -github.com/luxfi/crypto/precompile/lamport.go:275.32,277.3 1 0 -github.com/luxfi/crypto/precompile/lamport.go:279.2,283.39 4 0 -github.com/luxfi/crypto/precompile/lamport.go:283.39,285.3 1 0 -github.com/luxfi/crypto/precompile/lamport.go:288.2,289.38 2 0 -github.com/luxfi/crypto/precompile/lamport.go:289.38,291.3 1 0 -github.com/luxfi/crypto/precompile/lamport.go:294.2,300.11 4 0 -github.com/luxfi/crypto/precompile/lamport.go:300.11,302.3 1 0 -github.com/luxfi/crypto/precompile/lamport.go:303.2,303.20 1 0 -github.com/luxfi/crypto/precompile/lamport.go:308.48,309.22 1 1 -github.com/luxfi/crypto/precompile/lamport.go:309.22,311.3 1 0 -github.com/luxfi/crypto/precompile/lamport.go:313.2,313.22 1 1 -github.com/luxfi/crypto/precompile/lamport.go:313.22,315.3 1 0 -github.com/luxfi/crypto/precompile/lamport.go:317.2,319.28 2 1 -github.com/luxfi/crypto/precompile/lamport.go:319.28,322.39 2 1 -github.com/luxfi/crypto/precompile/lamport.go:322.39,326.33 3 1 -github.com/luxfi/crypto/precompile/lamport.go:326.33,328.5 1 1 -github.com/luxfi/crypto/precompile/lamport.go:328.10,330.5 1 1 -github.com/luxfi/crypto/precompile/lamport.go:332.4,334.26 3 1 -github.com/luxfi/crypto/precompile/lamport.go:337.3,337.27 1 1 -github.com/luxfi/crypto/precompile/lamport.go:340.2,340.24 1 1 -github.com/luxfi/crypto/precompile/lamport.go:343.71,346.32 2 0 -github.com/luxfi/crypto/precompile/lamport.go:346.32,348.38 2 0 -github.com/luxfi/crypto/precompile/lamport.go:348.38,350.4 1 0 -github.com/luxfi/crypto/precompile/lamport.go:350.9,352.4 1 0 -github.com/luxfi/crypto/precompile/lamport.go:354.3,355.24 2 0 -github.com/luxfi/crypto/precompile/lamport.go:358.2,358.38 1 0 -github.com/luxfi/crypto/precompile/lamport.go:361.34,362.44 1 0 -github.com/luxfi/crypto/precompile/lamport.go:362.44,363.18 1 0 -github.com/luxfi/crypto/precompile/lamport.go:363.18,365.4 1 0 -github.com/luxfi/crypto/precompile/lamport.go:366.3,366.18 1 0 -github.com/luxfi/crypto/precompile/lamport.go:366.18,368.4 1 0 -github.com/luxfi/crypto/precompile/lamport.go:370.2,370.24 1 0 -github.com/luxfi/crypto/precompile/lamport.go:373.35,374.22 1 0 -github.com/luxfi/crypto/precompile/lamport.go:374.22,376.3 1 0 -github.com/luxfi/crypto/precompile/lamport.go:377.2,377.19 1 0 -github.com/luxfi/crypto/precompile/lamport.go:377.19,378.19 1 0 -github.com/luxfi/crypto/precompile/lamport.go:378.19,380.4 1 0 -github.com/luxfi/crypto/precompile/lamport.go:382.2,382.13 1 0 -github.com/luxfi/crypto/precompile/lamport.go:386.42,392.2 5 1 -github.com/luxfi/crypto/precompile/lamport.go:394.13,397.2 1 1 -github.com/luxfi/crypto/precompile/shake.go:43.53,44.20 1 1 -github.com/luxfi/crypto/precompile/shake.go:44.20,46.3 1 0 -github.com/luxfi/crypto/precompile/shake.go:47.2,50.79 4 1 -github.com/luxfi/crypto/precompile/shake.go:53.54,54.20 1 1 -github.com/luxfi/crypto/precompile/shake.go:54.20,56.3 1 1 -github.com/luxfi/crypto/precompile/shake.go:58.2,59.32 2 1 -github.com/luxfi/crypto/precompile/shake.go:59.32,61.3 1 0 -github.com/luxfi/crypto/precompile/shake.go:63.2,68.20 5 1 -github.com/luxfi/crypto/precompile/shake.go:74.53,75.20 1 1 -github.com/luxfi/crypto/precompile/shake.go:75.20,77.3 1 0 -github.com/luxfi/crypto/precompile/shake.go:78.2,81.79 4 1 -github.com/luxfi/crypto/precompile/shake.go:84.54,85.20 1 1 -github.com/luxfi/crypto/precompile/shake.go:85.20,87.3 1 1 -github.com/luxfi/crypto/precompile/shake.go:89.2,90.32 2 1 -github.com/luxfi/crypto/precompile/shake.go:90.32,92.3 1 1 -github.com/luxfi/crypto/precompile/shake.go:94.2,99.20 5 1 -github.com/luxfi/crypto/precompile/shake.go:106.57,108.2 1 0 -github.com/luxfi/crypto/precompile/shake.go:110.58,116.2 5 0 -github.com/luxfi/crypto/precompile/shake.go:120.57,122.2 1 1 -github.com/luxfi/crypto/precompile/shake.go:124.58,130.2 5 1 -github.com/luxfi/crypto/precompile/shake.go:134.57,136.2 1 1 -github.com/luxfi/crypto/precompile/shake.go:138.58,144.2 5 1 -github.com/luxfi/crypto/precompile/shake.go:149.54,150.20 1 0 -github.com/luxfi/crypto/precompile/shake.go:150.20,152.3 1 0 -github.com/luxfi/crypto/precompile/shake.go:154.2,157.35 3 0 -github.com/luxfi/crypto/precompile/shake.go:157.35,159.3 1 0 -github.com/luxfi/crypto/precompile/shake.go:161.2,166.93 5 0 -github.com/luxfi/crypto/precompile/shake.go:169.55,170.20 1 1 -github.com/luxfi/crypto/precompile/shake.go:170.20,172.3 1 0 -github.com/luxfi/crypto/precompile/shake.go:174.2,177.32 3 1 -github.com/luxfi/crypto/precompile/shake.go:177.32,179.3 1 0 -github.com/luxfi/crypto/precompile/shake.go:181.2,181.35 1 1 -github.com/luxfi/crypto/precompile/shake.go:181.35,183.3 1 0 -github.com/luxfi/crypto/precompile/shake.go:185.2,193.20 7 1 -github.com/luxfi/crypto/precompile/shake.go:197.40,207.2 9 1 -github.com/luxfi/crypto/precompile/shake.go:212.57,214.2 1 0 -github.com/luxfi/crypto/precompile/shake.go:216.58,222.2 5 0 -github.com/luxfi/crypto/precompile/shake.go:226.58,228.2 1 1 -github.com/luxfi/crypto/precompile/shake.go:230.59,236.2 5 1 -github.com/luxfi/crypto/precompile/shake.go:240.54,241.20 1 0 -github.com/luxfi/crypto/precompile/shake.go:241.20,243.3 1 0 -github.com/luxfi/crypto/precompile/shake.go:245.2,248.35 3 0 -github.com/luxfi/crypto/precompile/shake.go:248.35,250.3 1 0 -github.com/luxfi/crypto/precompile/shake.go:252.2,257.93 5 0 -github.com/luxfi/crypto/precompile/shake.go:260.55,261.20 1 1 -github.com/luxfi/crypto/precompile/shake.go:261.20,263.3 1 0 -github.com/luxfi/crypto/precompile/shake.go:265.2,268.32 3 1 -github.com/luxfi/crypto/precompile/shake.go:268.32,270.3 1 0 -github.com/luxfi/crypto/precompile/shake.go:272.2,272.35 1 1 -github.com/luxfi/crypto/precompile/shake.go:272.35,274.3 1 0 -github.com/luxfi/crypto/precompile/shake.go:276.2,284.20 7 1 -github.com/luxfi/crypto/precompile/shake.go:287.13,290.2 1 1 -github.com/luxfi/crypto/precompile/types.go:12.37,15.64 2 1 -github.com/luxfi/crypto/precompile/types.go:15.64,17.3 1 1 -github.com/luxfi/crypto/precompile/types.go:18.2,19.17 2 1 -github.com/luxfi/crypto/precompile/types.go:19.17,21.3 1 0 -github.com/luxfi/crypto/precompile/types.go:22.2,23.13 2 1 -github.com/luxfi/crypto/precompile/types.go:27.33,29.2 1 0 -github.com/luxfi/crypto/precompile/types.go:32.34,34.2 1 0 -github.com/luxfi/crypto/secp256r1/verifier.go:27.52,28.62 1 0 -github.com/luxfi/crypto/secp256r1/verifier.go:28.62,30.3 1 0 -github.com/luxfi/crypto/secp256r1/verifier.go:31.2,32.37 2 0 -github.com/luxfi/crypto/staking/cert.go:17.51,20.16 2 0 -github.com/luxfi/crypto/staking/cert.go:20.16,22.3 1 0 -github.com/luxfi/crypto/staking/cert.go:25.2,39.16 3 0 -github.com/luxfi/crypto/staking/cert.go:39.16,41.3 1 0 -github.com/luxfi/crypto/staking/cert.go:44.2,51.16 3 0 -github.com/luxfi/crypto/staking/cert.go:51.16,53.3 1 0 -github.com/luxfi/crypto/staking/cert.go:55.2,60.29 2 0 -github.com/luxfi/crypto/staking/cert.go:64.62,66.2 1 0 -github.com/luxfi/crypto/utils/hexutil.go:27.38,29.16 2 0 -github.com/luxfi/crypto/utils/hexutil.go:29.16,30.13 1 0 -github.com/luxfi/crypto/utils/hexutil.go:32.2,32.12 1 0 -github.com/luxfi/crypto/utils/hexutil.go:36.43,37.21 1 0 -github.com/luxfi/crypto/utils/hexutil.go:37.21,39.3 1 0 -github.com/luxfi/crypto/utils/hexutil.go:40.2,40.25 1 0 -github.com/luxfi/crypto/utils/hexutil.go:40.25,42.3 1 0 -github.com/luxfi/crypto/utils/hexutil.go:43.2,44.16 2 0 -github.com/luxfi/crypto/utils/hexutil.go:44.16,46.3 1 0 -github.com/luxfi/crypto/utils/hexutil.go:47.2,47.15 1 0 -github.com/luxfi/crypto/utils/hexutil.go:51.35,53.2 1 0 -github.com/luxfi/crypto/utils/hexutil.go:60.46,65.2 4 0 -github.com/luxfi/crypto/utils/hexutil.go:69.68,70.22 1 0 -github.com/luxfi/crypto/utils/hexutil.go:70.22,72.3 1 0 -github.com/luxfi/crypto/utils/hexutil.go:73.2,73.76 1 0 -github.com/luxfi/crypto/utils/hexutil.go:76.34,78.2 1 0 -github.com/luxfi/crypto/utils/hexutil.go:80.55,81.34 1 0 -github.com/luxfi/crypto/utils/hexutil.go:81.34,83.3 1 0 -github.com/luxfi/crypto/utils/hexutil.go:84.2,84.12 1 0 -github.com/luxfi/crypto/utils/hexutil.go:89.36,89.54 1 0 -github.com/luxfi/crypto/utils/hexutil.go:91.64,92.21 1 0 -github.com/luxfi/crypto/utils/hexutil.go:92.21,94.3 1 0 -github.com/luxfi/crypto/utils/hexutil.go:95.2,95.33 1 0 -github.com/luxfi/crypto/utils/hexutil.go:95.33,97.3 1 0 -github.com/luxfi/crypto/utils/hexutil.go:98.2,100.21 3 0 -github.com/luxfi/crypto/utils/hexutil.go:100.21,102.3 1 0 -github.com/luxfi/crypto/utils/hexutil.go:103.2,103.27 1 0 -github.com/luxfi/crypto/utils/hexutil.go:103.27,105.3 1 0 -github.com/luxfi/crypto/utils/hexutil.go:107.2,107.50 1 0 -github.com/luxfi/crypto/utils/hexutil.go:107.50,109.3 1 0 -github.com/luxfi/crypto/utils/hexutil.go:110.2,110.12 1 0 -github.com/luxfi/crypto/utils/math.go:26.52,27.28 1 0 -github.com/luxfi/crypto/utils/math.go:27.28,29.3 1 0 -github.com/luxfi/crypto/utils/math.go:30.2,31.30 2 0 -github.com/luxfi/crypto/utils/math.go:36.41,38.9 2 0 -github.com/luxfi/crypto/utils/math.go:38.9,39.55 1 0 -github.com/luxfi/crypto/utils/math.go:41.2,41.10 1 0 -github.com/luxfi/crypto/utils/math.go:46.45,47.13 1 0 -github.com/luxfi/crypto/utils/math.go:47.13,49.3 1 0 -github.com/luxfi/crypto/utils/math.go:50.2,52.53 3 0 -github.com/luxfi/crypto/utils/math.go:52.53,54.3 1 0 -github.com/luxfi/crypto/utils/math.go:54.8,56.3 1 0 -github.com/luxfi/crypto/utils/math.go:57.2,57.34 1 0 -github.com/luxfi/crypto/utils/math.go:57.34,59.3 1 0 -github.com/luxfi/crypto/utils/math.go:60.2,60.21 1 0 -github.com/luxfi/crypto/utils/rlp.go:26.53,28.42 2 0 -github.com/luxfi/crypto/utils/rlp.go:28.42,30.3 1 0 -github.com/luxfi/crypto/utils/rlp.go:31.2,31.25 1 0 -github.com/luxfi/crypto/utils/rlp.go:34.55,35.25 1 0 -github.com/luxfi/crypto/utils/rlp.go:36.21,37.28 1 0 -github.com/luxfi/crypto/utils/rlp.go:38.15,39.32 1 0 -github.com/luxfi/crypto/utils/rlp.go:40.14,41.30 1 0 -github.com/luxfi/crypto/utils/rlp.go:42.10,43.13 1 0 -github.com/luxfi/crypto/utils/rlp.go:47.53,48.33 1 0 -github.com/luxfi/crypto/utils/rlp.go:48.33,50.3 1 0 -github.com/luxfi/crypto/utils/rlp.go:50.8,50.25 1 0 -github.com/luxfi/crypto/utils/rlp.go:50.25,53.3 2 0 -github.com/luxfi/crypto/utils/rlp.go:53.8,58.3 4 0 -github.com/luxfi/crypto/utils/rlp.go:59.2,59.12 1 0 -github.com/luxfi/crypto/utils/rlp.go:62.54,63.12 1 0 -github.com/luxfi/crypto/utils/rlp.go:63.12,65.3 1 0 -github.com/luxfi/crypto/utils/rlp.go:65.8,65.20 1 0 -github.com/luxfi/crypto/utils/rlp.go:65.20,67.3 1 0 -github.com/luxfi/crypto/utils/rlp.go:67.8,70.3 2 0 -github.com/luxfi/crypto/utils/rlp.go:71.2,71.12 1 0 -github.com/luxfi/crypto/utils/rlp.go:74.62,76.28 2 0 -github.com/luxfi/crypto/utils/rlp.go:76.28,77.51 1 0 -github.com/luxfi/crypto/utils/rlp.go:77.51,79.4 1 0 -github.com/luxfi/crypto/utils/rlp.go:81.2,83.24 2 0 -github.com/luxfi/crypto/utils/rlp.go:83.24,86.3 2 0 -github.com/luxfi/crypto/utils/rlp.go:86.8,91.3 4 0 -github.com/luxfi/crypto/utils/rlp.go:92.2,92.12 1 0 -github.com/luxfi/crypto/utils/rlp.go:95.34,100.31 3 0 -github.com/luxfi/crypto/utils/rlp.go:100.31,101.20 1 0 -github.com/luxfi/crypto/utils/rlp.go:101.20,103.4 1 0 -github.com/luxfi/crypto/utils/rlp.go:105.2,105.12 1 0 -github.com/luxfi/crypto/utils/types.go:46.33,46.48 1 0 -github.com/luxfi/crypto/utils/types.go:49.34,51.2 1 0 -github.com/luxfi/crypto/utils/types.go:55.39,59.2 3 0 -github.com/luxfi/crypto/utils/types.go:63.38,64.21 1 0 -github.com/luxfi/crypto/utils/types.go:64.21,66.3 1 0 -github.com/luxfi/crypto/utils/types.go:67.2,67.35 1 0 -github.com/luxfi/crypto/utils/types.go:72.37,74.35 1 0 -github.com/luxfi/crypto/utils/types.go:74.35,76.3 1 0 -github.com/luxfi/crypto/utils/types.go:77.2,78.16 2 0 -github.com/luxfi/crypto/utils/types.go:78.16,79.52 1 0 -github.com/luxfi/crypto/utils/types.go:81.2,81.26 1 0 -github.com/luxfi/crypto/utils/types.go:85.47,86.14 1 0 -github.com/luxfi/crypto/utils/types.go:86.14,88.3 1 0 -github.com/luxfi/crypto/utils/types.go:89.2,91.8 3 0 -github.com/luxfi/crypto/utils/types.go:96.31,97.16 1 0 -github.com/luxfi/crypto/utils/types.go:97.16,98.39 1 0 -github.com/luxfi/crypto/utils/types.go:98.39,100.4 1 0 -github.com/luxfi/crypto/utils/types.go:102.2,102.19 1 0 -github.com/luxfi/crypto/utils/types.go:102.19,104.3 1 0 -github.com/luxfi/crypto/utils/types.go:105.2,106.16 2 0 -github.com/luxfi/crypto/utils/types.go:106.16,107.52 1 0 -github.com/luxfi/crypto/utils/types.go:109.2,109.10 1 0 -github.com/luxfi/crypto/signify/signify.go:38.98,40.16 2 1 -github.com/luxfi/crypto/signify/signify.go:40.16,42.3 1 0 -github.com/luxfi/crypto/signify/signify.go:43.2,43.25 1 1 -github.com/luxfi/crypto/signify/signify.go:43.25,45.3 1 0 -github.com/luxfi/crypto/signify/signify.go:46.2,46.33 1 1 -github.com/luxfi/crypto/signify/signify.go:46.33,48.3 1 0 -github.com/luxfi/crypto/signify/signify.go:49.2,49.55 1 1 -github.com/luxfi/crypto/signify/signify.go:56.110,58.52 1 1 -github.com/luxfi/crypto/signify/signify.go:58.52,60.3 1 0 -github.com/luxfi/crypto/signify/signify.go:61.2,61.50 1 1 -github.com/luxfi/crypto/signify/signify.go:61.50,63.3 1 1 -github.com/luxfi/crypto/signify/signify.go:64.2,64.28 1 1 -github.com/luxfi/crypto/signify/signify.go:64.28,66.3 1 1 -github.com/luxfi/crypto/signify/signify.go:67.2,67.26 1 1 -github.com/luxfi/crypto/signify/signify.go:67.26,69.3 1 1 -github.com/luxfi/crypto/signify/signify.go:71.2,72.16 2 1 -github.com/luxfi/crypto/signify/signify.go:72.16,74.3 1 0 -github.com/luxfi/crypto/signify/signify.go:75.2,76.16 2 1 -github.com/luxfi/crypto/signify/signify.go:76.16,78.3 1 0 -github.com/luxfi/crypto/signify/signify.go:81.2,99.48 15 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/arith.go:24.40,30.2 5 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/arith.go:33.51,39.2 5 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/arith.go:42.54,50.2 7 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/arith.go:52.57,60.2 7 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:61.25,63.2 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:82.26,84.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:87.13,89.2 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:92.48,95.2 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:98.44,104.2 5 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:110.66,111.25 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:112.15,113.25 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:114.16,115.24 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:116.14,117.30 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:118.11,119.44 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:120.14,121.30 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:122.16,123.30 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:124.15,125.31 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:126.14,127.29 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:128.10,129.90 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:134.38,140.2 5 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:143.37,149.2 5 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:152.47,157.2 4 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:161.40,163.12 2 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:163.12,165.3 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:166.2,166.37 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:170.42,172.2 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:175.33,177.2 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:180.35,182.2 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:189.39,194.19 5 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:194.19,196.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:196.8,196.26 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:196.26,198.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:199.2,199.19 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:199.19,201.3 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:201.8,201.26 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:201.26,203.3 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:204.2,204.19 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:204.19,206.3 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:206.8,206.26 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:206.26,208.3 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:209.2,209.19 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:209.19,211.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:211.8,211.26 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:211.26,213.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:214.2,214.10 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:219.51,234.2 8 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:237.49,239.62 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:239.62,241.3 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:242.2,250.230 6 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:250.230,256.3 5 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:258.2,258.15 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:262.20,266.2 3 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:269.25,273.2 3 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:277.21,281.2 3 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:287.47,290.2 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:294.47,297.2 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:301.39,304.2 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:307.47,310.2 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:313.47,316.2 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:319.47,322.2 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:325.44,328.2 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:332.36,336.2 3 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:336.2,348.3 10 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:349.2,361.3 10 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:362.2,374.3 10 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:375.2,387.3 10 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:391.2,391.230 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:391.230,397.3 5 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:400.35,403.2 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:403.2,411.3 6 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:412.2,420.3 6 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:421.2,429.3 6 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:430.2,438.3 6 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:442.2,442.230 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:442.230,448.3 5 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:451.36,461.230 6 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:461.230,467.3 5 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:470.36,480.230 6 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:480.230,486.3 5 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:489.36,495.12 6 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:495.12,501.3 5 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:504.33,505.16 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:505.16,508.3 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:509.2,513.57 5 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:516.33,520.230 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:520.230,526.3 5 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:529.41,530.11 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:531.9,533.9 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:534.9,535.9 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:536.9,538.9 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:539.9,541.26 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:542.9,544.36 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:545.10,548.15 3 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:554.41,556.17 2 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:556.17,558.3 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:560.2,563.30 3 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:563.30,564.20 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:564.20,566.12 2 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:568.3,569.39 2 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:572.2,574.35 2 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:574.35,575.16 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:575.16,576.12 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:578.3,579.39 2 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:582.2,582.12 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:585.39,589.2 3 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:593.32,594.15 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:594.15,596.3 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:597.2,597.15 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:597.15,599.3 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:600.2,600.15 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:600.15,602.3 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:603.2,603.25 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:607.62,609.31 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:609.31,611.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:613.2,615.46 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:615.46,617.27 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:617.27,619.4 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:622.2,622.10 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:627.37,629.2 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:632.38,634.2 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:637.35,640.19 3 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:640.19,642.3 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:642.8,646.23 4 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:646.23,648.4 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:650.2,652.33 3 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:656.51,664.2 6 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:667.57,670.2 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:674.49,682.2 6 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:686.51,694.2 6 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:698.36,701.2 2 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:705.47,717.2 5 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:721.49,722.50 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:722.50,724.3 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:726.2,735.10 5 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:739.67,740.50 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:740.50,742.3 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:744.2,747.29 3 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:747.29,749.3 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:752.2,757.15 3 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:761.50,768.12 4 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:768.12,771.3 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:771.8,771.41 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:771.41,774.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:777.2,788.10 6 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:792.50,795.25 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:795.25,796.35 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:796.35,798.4 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:799.8,800.35 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:800.35,801.16 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:801.16,803.5 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:803.10,805.5 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:809.2,809.19 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:813.48,817.39 2 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:817.39,821.83 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:823.2,828.10 3 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:836.13,840.2 3 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:843.34,848.16 3 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:848.16,850.3 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:853.2,853.134 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:853.134,855.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:856.2,856.11 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:862.45,889.35 8 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:889.35,891.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:892.2,892.16 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:892.16,894.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:895.2,895.137 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:895.137,898.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:899.2,899.6 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:899.6,904.139 3 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:904.139,907.4 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:909.3,909.13 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:909.13,911.4 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:913.3,915.14 3 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:915.14,918.4 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:920.3,923.8 4 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:930.48,931.16 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:931.16,934.3 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:937.2,960.6 7 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:960.6,961.19 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:961.19,970.19 5 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:970.19,978.5 4 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:982.4,985.14 4 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:988.3,988.19 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:988.19,997.19 5 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:997.19,1005.5 4 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:1009.4,1012.14 4 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:1017.3,1019.13 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:1019.13,1033.19 9 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:1033.19,1041.5 4 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:1042.9,1056.19 9 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:1056.19,1064.5 4 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:1066.3,1066.43 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:1066.43,1069.4 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:1070.3,1070.43 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element.go:1070.43,1073.4 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element_ops_noasm.go:29.25,31.2 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element_ops_noasm.go:34.25,36.2 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element_ops_noasm.go:39.26,41.2 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element_ops_noasm.go:46.31,48.2 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element_ops_noasm.go:50.28,52.2 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element_ops_noasm.go:56.27,58.2 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element_ops_noasm.go:60.28,62.2 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element_ops_noasm.go:64.28,66.2 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element_ops_noasm.go:68.28,70.2 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element_ops_noasm.go:72.25,74.2 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/fr/element_ops_noasm.go:76.25,78.2 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:72.66,75.14 2 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:76.18,78.41 2 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:79.18,81.41 2 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:82.18,84.41 2 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:85.18,87.41 2 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:88.18,90.41 2 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:91.18,93.41 2 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:94.10,95.49 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:99.2,99.17 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:99.17,101.3 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:105.2,106.56 2 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:106.56,108.3 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa.go:111.2,118.38 6 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:118.38,124.23 6 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:124.23,126.4 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:127.3,127.30 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:130.2,136.8 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:140.102,141.17 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:141.17,143.3 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:145.2,147.29 2 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:148.18,149.36 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:150.18,151.36 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:152.18,153.36 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:154.18,155.36 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:156.18,157.36 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:158.18,159.36 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:160.10,161.49 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa.go:166.2,182.47 11 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:182.47,184.20 2 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:184.20,186.4 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:187.3,189.24 3 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:192.2,192.23 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:196.86,197.16 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:197.16,199.3 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:201.2,203.18 2 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:204.18,205.44 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:206.18,207.44 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:208.18,209.44 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:210.18,211.44 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:212.18,213.44 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:214.18,215.44 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:216.10,217.15 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa.go:221.2,221.39 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:221.39,223.3 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:227.2,233.25 5 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:233.25,235.3 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa.go:238.2,238.26 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:238.26,239.42 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:239.42,241.4 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:244.2,244.13 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:248.38,250.2 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:253.40,255.2 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:258.69,261.14 2 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:262.30,263.41 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:264.30,265.41 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:266.30,267.41 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:268.10,269.49 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa.go:272.2,272.31 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:272.31,274.3 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:276.2,279.8 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:283.71,287.14 3 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:288.30,290.39 2 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:291.30,293.39 2 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:294.30,296.39 2 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:297.10,298.49 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa.go:301.2,301.31 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:301.31,303.3 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:306.2,313.38 6 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:313.38,319.23 6 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:319.23,321.4 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:322.3,322.29 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:325.2,331.8 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:16.26,18.3 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:23.26,25.3 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:29.36,31.21 2 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:31.21,33.3 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:34.2,34.19 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:38.31,39.41 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:39.41,41.3 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:45.28,49.2 3 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:52.29,54.2 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:57.75,60.14 2 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:61.18,63.41 2 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:64.18,66.41 2 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:67.18,69.41 2 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:70.18,72.41 2 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:73.18,75.41 2 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:76.18,78.41 2 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:79.10,80.49 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:84.2,84.17 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:84.17,86.3 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:89.2,93.55 3 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:93.55,95.3 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:98.2,107.8 3 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:111.111,114.29 2 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:115.18,116.36 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:117.18,118.36 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:119.18,120.36 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:121.18,122.36 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:123.18,124.36 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:125.18,126.36 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:127.10,128.49 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:132.2,148.36 9 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:148.36,155.20 6 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:155.20,157.4 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:158.3,158.31 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:162.2,164.20 3 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:175.44,178.23 3 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:178.23,180.3 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:182.2,185.3 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:189.59,195.30 4 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:195.30,197.3 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:200.2,201.50 2 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:201.50,205.34 3 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:205.34,213.4 6 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:216.2,216.20 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:227.82,228.18 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:228.18,230.3 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:232.2,238.22 4 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:238.22,240.20 2 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:240.20,243.18 3 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:243.18,246.5 2 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:247.4,247.19 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:251.2,254.29 2 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:254.29,255.17 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:255.17,257.4 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:260.2,263.8 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:267.76,268.33 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:268.33,270.3 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:272.2,276.26 3 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:276.26,278.3 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:279.2,285.33 4 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:285.33,287.13 2 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:287.13,289.26 2 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:289.26,291.19 2 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:291.19,293.14 2 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:295.5,295.26 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:300.2,303.29 2 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:303.29,304.17 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:304.17,306.4 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:309.2,309.24 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:321.57,327.2 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:330.70,339.42 6 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:339.42,342.3 2 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:343.2,347.16 3 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:347.16,349.3 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:351.2,354.29 3 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:354.29,356.30 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:356.30,358.31 2 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:358.31,359.10 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:363.2,365.17 2 0 -github.com/luxfi/crypto/secp256k1/curve.go:50.44,52.34 2 1 -github.com/luxfi/crypto/secp256k1/curve.go:52.34,53.43 1 1 -github.com/luxfi/crypto/secp256k1/curve.go:53.43,57.4 3 1 -github.com/luxfi/crypto/secp256k1/curve.go:82.58,91.2 1 1 -github.com/luxfi/crypto/secp256k1/curve.go:94.57,106.2 7 0 -github.com/luxfi/crypto/secp256k1/curve.go:110.86,111.19 1 0 -github.com/luxfi/crypto/secp256k1/curve.go:111.19,113.3 1 0 -github.com/luxfi/crypto/secp256k1/curve.go:115.2,123.8 8 0 -github.com/luxfi/crypto/secp256k1/curve.go:127.77,130.38 1 0 -github.com/luxfi/crypto/secp256k1/curve.go:130.38,132.3 1 0 -github.com/luxfi/crypto/secp256k1/curve.go:133.2,133.38 1 0 -github.com/luxfi/crypto/secp256k1/curve.go:133.38,135.3 1 0 -github.com/luxfi/crypto/secp256k1/curve.go:136.2,137.40 2 0 -github.com/luxfi/crypto/secp256k1/curve.go:137.40,139.3 1 0 -github.com/luxfi/crypto/secp256k1/curve.go:140.2,140.80 1 0 -github.com/luxfi/crypto/secp256k1/curve.go:145.103,157.20 10 0 -github.com/luxfi/crypto/secp256k1/curve.go:157.20,159.3 1 0 -github.com/luxfi/crypto/secp256k1/curve.go:160.2,171.20 11 0 -github.com/luxfi/crypto/secp256k1/curve.go:171.20,173.3 1 0 -github.com/luxfi/crypto/secp256k1/curve.go:174.2,195.21 19 0 -github.com/luxfi/crypto/secp256k1/curve.go:195.21,197.3 1 0 -github.com/luxfi/crypto/secp256k1/curve.go:198.2,199.21 2 0 -github.com/luxfi/crypto/secp256k1/curve.go:199.21,201.3 1 0 -github.com/luxfi/crypto/secp256k1/curve.go:202.2,205.19 3 0 -github.com/luxfi/crypto/secp256k1/curve.go:209.72,212.2 2 0 -github.com/luxfi/crypto/secp256k1/curve.go:216.91,246.2 21 0 -github.com/luxfi/crypto/secp256k1/curve.go:250.73,252.2 1 1 -github.com/luxfi/crypto/secp256k1/curve.go:256.57,263.2 6 1 -github.com/luxfi/crypto/secp256k1/curve.go:267.66,269.30 2 0 -github.com/luxfi/crypto/secp256k1/curve.go:269.30,271.3 1 0 -github.com/luxfi/crypto/secp256k1/curve.go:272.2,272.18 1 0 -github.com/luxfi/crypto/secp256k1/curve.go:272.18,274.3 1 0 -github.com/luxfi/crypto/secp256k1/curve.go:275.2,277.8 3 0 -github.com/luxfi/crypto/secp256k1/curve.go:282.13,292.2 6 1 -github.com/luxfi/crypto/secp256k1/curve.go:295.23,297.2 1 1 -github.com/luxfi/crypto/secp256k1/ethereum.go:13.56,22.2 6 0 -github.com/luxfi/crypto/secp256k1/keccak.go:11.39,13.25 2 0 -github.com/luxfi/crypto/secp256k1/keccak.go:13.25,15.3 1 0 -github.com/luxfi/crypto/secp256k1/keccak.go:16.2,16.19 1 0 -github.com/luxfi/crypto/secp256k1/keys.go:44.13,47.2 2 1 -github.com/luxfi/crypto/secp256k1/keys.go:50.49,52.2 1 0 -github.com/luxfi/crypto/secp256k1/keys.go:70.43,72.16 2 1 -github.com/luxfi/crypto/secp256k1/keys.go:72.16,74.3 1 0 -github.com/luxfi/crypto/secp256k1/keys.go:76.2,80.8 2 1 -github.com/luxfi/crypto/secp256k1/keys.go:84.50,85.29 1 1 -github.com/luxfi/crypto/secp256k1/keys.go:85.29,87.3 1 0 -github.com/luxfi/crypto/secp256k1/keys.go:89.2,94.33 4 1 -github.com/luxfi/crypto/secp256k1/keys.go:94.33,96.3 1 0 -github.com/luxfi/crypto/secp256k1/keys.go:98.2,98.24 1 1 -github.com/luxfi/crypto/secp256k1/keys.go:98.24,100.3 1 0 -github.com/luxfi/crypto/secp256k1/keys.go:102.2,103.29 2 1 -github.com/luxfi/crypto/secp256k1/keys.go:103.29,105.3 1 0 -github.com/luxfi/crypto/secp256k1/keys.go:107.2,110.8 1 1 -github.com/luxfi/crypto/secp256k1/keys.go:114.48,115.28 1 0 -github.com/luxfi/crypto/secp256k1/keys.go:115.28,117.3 1 0 -github.com/luxfi/crypto/secp256k1/keys.go:119.2,120.26 2 0 -github.com/luxfi/crypto/secp256k1/keys.go:120.26,122.3 1 0 -github.com/luxfi/crypto/secp256k1/keys.go:124.2,133.8 2 0 -github.com/luxfi/crypto/secp256k1/keys.go:137.55,139.16 2 1 -github.com/luxfi/crypto/secp256k1/keys.go:139.16,141.3 1 0 -github.com/luxfi/crypto/secp256k1/keys.go:142.2,142.20 1 1 -github.com/luxfi/crypto/secp256k1/keys.go:146.72,148.2 1 1 -github.com/luxfi/crypto/secp256k1/keys.go:151.60,153.16 2 0 -github.com/luxfi/crypto/secp256k1/keys.go:153.16,155.3 1 0 -github.com/luxfi/crypto/secp256k1/keys.go:156.2,156.20 1 0 -github.com/luxfi/crypto/secp256k1/keys.go:160.77,162.16 2 1 -github.com/luxfi/crypto/secp256k1/keys.go:162.16,164.3 1 0 -github.com/luxfi/crypto/secp256k1/keys.go:165.2,167.20 3 1 -github.com/luxfi/crypto/secp256k1/keys.go:171.45,177.2 2 1 -github.com/luxfi/crypto/secp256k1/keys.go:180.37,182.2 1 1 -github.com/luxfi/crypto/secp256k1/keys.go:185.44,187.2 1 0 -github.com/luxfi/crypto/secp256k1/keys.go:190.43,197.2 4 0 -github.com/luxfi/crypto/secp256k1/keys.go:200.36,202.2 1 1 -github.com/luxfi/crypto/secp256k1/keys.go:205.46,207.2 1 0 -github.com/luxfi/crypto/secp256k1/keys.go:210.48,212.2 1 0 -github.com/luxfi/crypto/secp256k1/keys.go:215.55,216.30 1 1 -github.com/luxfi/crypto/secp256k1/keys.go:216.30,218.3 1 1 -github.com/luxfi/crypto/secp256k1/keys.go:219.2,219.49 1 1 -github.com/luxfi/crypto/secp256k1/keys.go:223.50,225.2 1 1 -github.com/luxfi/crypto/secp256k1/keys.go:228.60,230.2 1 1 -github.com/luxfi/crypto/secp256k1/keys.go:233.69,234.30 1 1 -github.com/luxfi/crypto/secp256k1/keys.go:234.30,236.3 1 0 -github.com/luxfi/crypto/secp256k1/keys.go:239.2,240.56 2 1 -github.com/luxfi/crypto/secp256k1/keys.go:240.56,242.3 1 0 -github.com/luxfi/crypto/secp256k1/keys.go:244.2,245.16 2 1 -github.com/luxfi/crypto/secp256k1/keys.go:245.16,247.3 1 0 -github.com/luxfi/crypto/secp256k1/keys.go:251.2,251.48 1 1 -github.com/luxfi/crypto/secp256k1/keys.go:251.48,253.3 1 0 -github.com/luxfi/crypto/secp256k1/keys.go:255.2,270.20 6 1 -github.com/luxfi/crypto/secp256k1/keys.go:274.52,276.2 1 1 -github.com/luxfi/crypto/secp256k1/keys.go:279.55,281.20 2 1 -github.com/luxfi/crypto/secp256k1/keys.go:281.20,283.3 1 0 -github.com/luxfi/crypto/secp256k1/keys.go:286.2,286.62 1 1 -github.com/luxfi/crypto/secp256k1/keys.go:286.62,288.3 1 0 -github.com/luxfi/crypto/secp256k1/keys.go:291.2,291.47 1 1 -github.com/luxfi/crypto/secp256k1/keys.go:291.47,293.3 1 0 -github.com/luxfi/crypto/secp256k1/keys.go:294.2,298.16 3 1 -github.com/luxfi/crypto/secp256k1/keys.go:298.16,300.3 1 0 -github.com/luxfi/crypto/secp256k1/keys.go:303.2,304.16 2 1 -github.com/luxfi/crypto/secp256k1/keys.go:304.16,306.3 1 0 -github.com/luxfi/crypto/secp256k1/keys.go:308.2,309.12 2 1 -github.com/luxfi/crypto/secp256k1/keys.go:313.38,314.29 1 1 -github.com/luxfi/crypto/secp256k1/keys.go:314.29,316.3 1 0 -github.com/luxfi/crypto/secp256k1/keys.go:317.2,318.35 2 1 -github.com/luxfi/crypto/secp256k1/keys.go:322.37,323.29 1 0 -github.com/luxfi/crypto/secp256k1/keys.go:323.29,325.3 1 0 -github.com/luxfi/crypto/secp256k1/keys.go:326.2,327.16 2 0 -github.com/luxfi/crypto/secp256k1/keys.go:331.52,332.28 1 1 -github.com/luxfi/crypto/secp256k1/keys.go:332.28,334.3 1 1 -github.com/luxfi/crypto/secp256k1/keys.go:335.2,337.12 3 1 -github.com/luxfi/crypto/secp256k1/panic_cb.go:17.64,18.47 1 0 -github.com/luxfi/crypto/secp256k1/panic_cb.go:22.62,23.45 1 0 -github.com/luxfi/crypto/secp256k1/recover_cache.go:16.49,20.2 1 0 -github.com/luxfi/crypto/secp256k1/recover_cache.go:23.81,25.2 1 0 -github.com/luxfi/crypto/secp256k1/recover_cache.go:28.90,31.51 2 0 -github.com/luxfi/crypto/secp256k1/recover_cache.go:31.51,33.3 1 0 -github.com/luxfi/crypto/secp256k1/recover_cache.go:36.2,37.16 2 0 -github.com/luxfi/crypto/secp256k1/recover_cache.go:37.16,39.3 1 0 -github.com/luxfi/crypto/secp256k1/recover_cache.go:42.2,43.16 2 0 -github.com/luxfi/crypto/secp256k1/scalar_mult_cgo.go:24.91,27.22 1 1 -github.com/luxfi/crypto/secp256k1/scalar_mult_cgo.go:27.22,28.43 1 0 -github.com/luxfi/crypto/secp256k1/scalar_mult_cgo.go:31.2,49.14 14 1 -github.com/luxfi/crypto/secp256k1/scalar_mult_cgo.go:49.14,51.3 1 0 -github.com/luxfi/crypto/secp256k1/scalar_mult_cgo.go:52.2,52.13 1 1 -github.com/luxfi/crypto/secp256k1/secp256k1_cgo.go:39.13,44.2 3 1 -github.com/luxfi/crypto/secp256k1/secp256k1_cgo.go:62.54,63.20 1 1 -github.com/luxfi/crypto/secp256k1/secp256k1_cgo.go:63.20,65.3 1 0 -github.com/luxfi/crypto/secp256k1/secp256k1_cgo.go:66.2,66.23 1 1 -github.com/luxfi/crypto/secp256k1/secp256k1_cgo.go:66.23,68.3 1 0 -github.com/luxfi/crypto/secp256k1/secp256k1_cgo.go:69.2,70.60 2 1 -github.com/luxfi/crypto/secp256k1/secp256k1_cgo.go:70.60,72.3 1 0 -github.com/luxfi/crypto/secp256k1/secp256k1_cgo.go:74.2,79.103 2 1 -github.com/luxfi/crypto/secp256k1/secp256k1_cgo.go:79.103,81.3 1 0 -github.com/luxfi/crypto/secp256k1/secp256k1_cgo.go:83.2,90.17 4 1 -github.com/luxfi/crypto/secp256k1/secp256k1_cgo.go:97.60,98.20 1 1 -github.com/luxfi/crypto/secp256k1/secp256k1_cgo.go:98.20,100.3 1 0 -github.com/luxfi/crypto/secp256k1/secp256k1_cgo.go:101.2,101.44 1 1 -github.com/luxfi/crypto/secp256k1/secp256k1_cgo.go:101.44,103.3 1 1 -github.com/luxfi/crypto/secp256k1/secp256k1_cgo.go:105.2,110.107 2 1 -github.com/luxfi/crypto/secp256k1/secp256k1_cgo.go:110.107,112.3 1 1 -github.com/luxfi/crypto/secp256k1/secp256k1_cgo.go:113.2,113.20 1 1 -github.com/luxfi/crypto/secp256k1/secp256k1_cgo.go:118.58,119.64 1 1 -github.com/luxfi/crypto/secp256k1/secp256k1_cgo.go:119.64,121.3 1 0 -github.com/luxfi/crypto/secp256k1/secp256k1_cgo.go:122.2,125.101 4 1 -github.com/luxfi/crypto/secp256k1/secp256k1_cgo.go:130.54,131.23 1 0 -github.com/luxfi/crypto/secp256k1/secp256k1_cgo.go:131.23,133.3 1 0 -github.com/luxfi/crypto/secp256k1/secp256k1_cgo.go:134.2,141.91 2 0 -github.com/luxfi/crypto/secp256k1/secp256k1_cgo.go:141.91,143.3 1 0 -github.com/luxfi/crypto/secp256k1/secp256k1_cgo.go:144.2,144.74 1 0 -github.com/luxfi/crypto/secp256k1/secp256k1_cgo.go:148.43,157.91 2 1 -github.com/luxfi/crypto/secp256k1/secp256k1_cgo.go:157.91,158.30 1 0 -github.com/luxfi/crypto/secp256k1/secp256k1_cgo.go:160.2,160.12 1 1 -github.com/luxfi/crypto/secp256k1/secp256k1_cgo.go:163.39,164.20 1 1 -github.com/luxfi/crypto/secp256k1/secp256k1_cgo.go:164.20,166.3 1 0 -github.com/luxfi/crypto/secp256k1/secp256k1_cgo.go:167.2,167.18 1 1 -github.com/luxfi/crypto/secp256k1/secp256k1_cgo.go:167.18,169.3 1 1 -github.com/luxfi/crypto/secp256k1/secp256k1_cgo.go:170.2,170.12 1 1 -github.com/luxfi/crypto/secp256k1/test_keys.go:9.31,21.33 2 0 -github.com/luxfi/crypto/secp256k1/test_keys.go:21.33,23.17 2 0 -github.com/luxfi/crypto/secp256k1/test_keys.go:23.17,24.14 1 0 -github.com/luxfi/crypto/secp256k1/test_keys.go:27.3,28.17 2 0 -github.com/luxfi/crypto/secp256k1/test_keys.go:28.17,29.14 1 0 -github.com/luxfi/crypto/secp256k1/test_keys.go:32.2,32.13 1 0 -github.com/luxfi/crypto/kzg4844/kzg4844.go:45.50,47.2 1 0 -github.com/luxfi/crypto/kzg4844/kzg4844.go:50.46,52.2 1 0 -github.com/luxfi/crypto/kzg4844/kzg4844.go:58.56,60.2 1 0 -github.com/luxfi/crypto/kzg4844/kzg4844.go:63.51,65.2 1 0 -github.com/luxfi/crypto/kzg4844/kzg4844.go:71.51,73.2 1 0 -github.com/luxfi/crypto/kzg4844/kzg4844.go:76.46,78.2 1 0 -github.com/luxfi/crypto/kzg4844/kzg4844.go:92.30,93.27 1 0 -github.com/luxfi/crypto/kzg4844/kzg4844.go:93.27,95.3 1 0 -github.com/luxfi/crypto/kzg4844/kzg4844.go:96.2,101.9 2 0 -github.com/luxfi/crypto/kzg4844/kzg4844.go:101.9,103.3 1 0 -github.com/luxfi/crypto/kzg4844/kzg4844.go:103.8,105.3 1 0 -github.com/luxfi/crypto/kzg4844/kzg4844.go:106.2,106.12 1 0 -github.com/luxfi/crypto/kzg4844/kzg4844.go:110.55,111.20 1 1 -github.com/luxfi/crypto/kzg4844/kzg4844.go:111.20,113.3 1 0 -github.com/luxfi/crypto/kzg4844/kzg4844.go:114.2,114.36 1 1 -github.com/luxfi/crypto/kzg4844/kzg4844.go:119.66,120.20 1 1 -github.com/luxfi/crypto/kzg4844/kzg4844.go:120.20,122.3 1 0 -github.com/luxfi/crypto/kzg4844/kzg4844.go:123.2,123.39 1 1 -github.com/luxfi/crypto/kzg4844/kzg4844.go:128.86,129.20 1 1 -github.com/luxfi/crypto/kzg4844/kzg4844.go:129.20,131.3 1 0 -github.com/luxfi/crypto/kzg4844/kzg4844.go:132.2,132.58 1 1 -github.com/luxfi/crypto/kzg4844/kzg4844.go:139.73,140.20 1 1 -github.com/luxfi/crypto/kzg4844/kzg4844.go:140.20,142.3 1 0 -github.com/luxfi/crypto/kzg4844/kzg4844.go:143.2,143.48 1 1 -github.com/luxfi/crypto/kzg4844/kzg4844.go:147.76,148.20 1 1 -github.com/luxfi/crypto/kzg4844/kzg4844.go:148.20,150.3 1 0 -github.com/luxfi/crypto/kzg4844/kzg4844.go:151.2,151.54 1 1 -github.com/luxfi/crypto/kzg4844/kzg4844.go:157.85,158.20 1 1 -github.com/luxfi/crypto/kzg4844/kzg4844.go:158.20,160.3 1 0 -github.com/luxfi/crypto/kzg4844/kzg4844.go:161.2,161.62 1 1 -github.com/luxfi/crypto/kzg4844/kzg4844.go:168.53,169.20 1 1 -github.com/luxfi/crypto/kzg4844/kzg4844.go:169.20,171.3 1 0 -github.com/luxfi/crypto/kzg4844/kzg4844.go:172.2,172.37 1 1 -github.com/luxfi/crypto/kzg4844/kzg4844.go:177.73,178.25 1 0 -github.com/luxfi/crypto/kzg4844/kzg4844.go:178.25,179.27 1 0 -github.com/luxfi/crypto/kzg4844/kzg4844.go:181.2,185.11 5 0 -github.com/luxfi/crypto/kzg4844/kzg4844.go:189.42,191.2 1 0 -github.com/luxfi/crypto/kzg4844/kzg4844_ckzg_nocgo.go:30.17,31.31 1 0 -github.com/luxfi/crypto/kzg4844/kzg4844_ckzg_nocgo.go:35.59,36.31 1 0 -github.com/luxfi/crypto/kzg4844/kzg4844_ckzg_nocgo.go:41.70,42.31 1 0 -github.com/luxfi/crypto/kzg4844/kzg4844_ckzg_nocgo.go:47.90,48.31 1 0 -github.com/luxfi/crypto/kzg4844/kzg4844_ckzg_nocgo.go:55.77,56.31 1 0 -github.com/luxfi/crypto/kzg4844/kzg4844_ckzg_nocgo.go:60.80,61.31 1 0 -github.com/luxfi/crypto/kzg4844/kzg4844_ckzg_nocgo.go:65.92,66.31 1 0 -github.com/luxfi/crypto/kzg4844/kzg4844_ckzg_nocgo.go:73.57,74.31 1 0 -github.com/luxfi/crypto/kzg4844/kzg4844_gokzg.go:33.18,35.16 2 1 -github.com/luxfi/crypto/kzg4844/kzg4844_gokzg.go:35.16,36.13 1 0 -github.com/luxfi/crypto/kzg4844/kzg4844_gokzg.go:38.2,39.54 2 1 -github.com/luxfi/crypto/kzg4844/kzg4844_gokzg.go:39.54,40.13 1 0 -github.com/luxfi/crypto/kzg4844/kzg4844_gokzg.go:42.2,43.16 2 1 -github.com/luxfi/crypto/kzg4844/kzg4844_gokzg.go:43.16,44.13 1 0 -github.com/luxfi/crypto/kzg4844/kzg4844_gokzg.go:49.60,53.16 3 1 -github.com/luxfi/crypto/kzg4844/kzg4844_gokzg.go:53.16,55.3 1 0 -github.com/luxfi/crypto/kzg4844/kzg4844_gokzg.go:56.2,56.38 1 1 -github.com/luxfi/crypto/kzg4844/kzg4844_gokzg.go:61.71,65.16 3 1 -github.com/luxfi/crypto/kzg4844/kzg4844_gokzg.go:65.16,67.3 1 0 -github.com/luxfi/crypto/kzg4844/kzg4844_gokzg.go:68.2,68.44 1 1 -github.com/luxfi/crypto/kzg4844/kzg4844_gokzg.go:73.91,77.2 2 1 -github.com/luxfi/crypto/kzg4844/kzg4844_gokzg.go:83.78,87.16 3 1 -github.com/luxfi/crypto/kzg4844/kzg4844_gokzg.go:87.16,89.3 1 0 -github.com/luxfi/crypto/kzg4844/kzg4844_gokzg.go:90.2,90.28 1 1 -github.com/luxfi/crypto/kzg4844/kzg4844_gokzg.go:94.81,98.2 2 1 -github.com/luxfi/crypto/kzg4844/kzg4844_gokzg.go:104.58,108.16 3 1 -github.com/luxfi/crypto/kzg4844/kzg4844_gokzg.go:108.16,110.3 1 0 -github.com/luxfi/crypto/kzg4844/kzg4844_gokzg.go:111.2,112.31 2 1 -github.com/luxfi/crypto/kzg4844/kzg4844_gokzg.go:112.31,114.3 1 1 -github.com/luxfi/crypto/kzg4844/kzg4844_gokzg.go:115.2,115.15 1 1 -github.com/luxfi/crypto/kzg4844/kzg4844_gokzg.go:119.98,129.35 3 1 -github.com/luxfi/crypto/kzg4844/kzg4844_gokzg.go:129.35,131.3 1 1 -github.com/luxfi/crypto/kzg4844/kzg4844_gokzg.go:133.2,133.41 1 1 -github.com/luxfi/crypto/kzg4844/kzg4844_gokzg.go:133.41,134.39 1 1 -github.com/luxfi/crypto/kzg4844/kzg4844_gokzg.go:134.39,136.4 1 1 -github.com/luxfi/crypto/kzg4844/kzg4844_gokzg.go:139.2,139.23 1 1 -github.com/luxfi/crypto/kzg4844/kzg4844_gokzg.go:139.23,141.17 2 1 -github.com/luxfi/crypto/kzg4844/kzg4844_gokzg.go:141.17,143.4 1 0 -github.com/luxfi/crypto/kzg4844/kzg4844_gokzg.go:144.3,145.32 2 1 -github.com/luxfi/crypto/kzg4844/kzg4844_gokzg.go:145.32,147.4 1 1 -github.com/luxfi/crypto/kzg4844/kzg4844_gokzg.go:149.2,149.80 1 1 -github.com/luxfi/crypto/ipa/ipa/barycentric.go:25.50,35.40 3 1 -github.com/luxfi/crypto/ipa/ipa/barycentric.go:35.40,43.3 5 1 -github.com/luxfi/crypto/ipa/ipa/barycentric.go:47.2,49.42 3 1 -github.com/luxfi/crypto/ipa/ipa/barycentric.go:49.42,60.3 8 1 -github.com/luxfi/crypto/ipa/ipa/barycentric.go:62.2,65.3 1 1 -github.com/luxfi/crypto/ipa/ipa/barycentric.go:72.68,74.26 1 1 -github.com/luxfi/crypto/ipa/ipa/barycentric.go:74.26,75.80 1 0 -github.com/luxfi/crypto/ipa/ipa/barycentric.go:78.2,83.42 4 1 -github.com/luxfi/crypto/ipa/ipa/barycentric.go:83.42,84.19 1 1 -github.com/luxfi/crypto/ipa/ipa/barycentric.go:84.19,85.12 1 1 -github.com/luxfi/crypto/ipa/ipa/barycentric.go:88.3,94.26 5 1 -github.com/luxfi/crypto/ipa/ipa/barycentric.go:97.2,97.14 1 1 -github.com/luxfi/crypto/ipa/ipa/barycentric.go:105.98,108.42 2 1 -github.com/luxfi/crypto/ipa/ipa/barycentric.go:108.42,115.3 5 1 -github.com/luxfi/crypto/ipa/ipa/barycentric.go:117.2,118.42 2 1 -github.com/luxfi/crypto/ipa/ipa/barycentric.go:118.42,125.3 5 1 -github.com/luxfi/crypto/ipa/ipa/barycentric.go:127.2,128.42 2 1 -github.com/luxfi/crypto/ipa/ipa/barycentric.go:128.42,130.3 1 1 -github.com/luxfi/crypto/ipa/ipa/barycentric.go:132.2,132.22 1 1 -github.com/luxfi/crypto/ipa/ipa/barycentric.go:136.93,141.34 3 1 -github.com/luxfi/crypto/ipa/ipa/barycentric.go:141.34,142.22 1 1 -github.com/luxfi/crypto/ipa/ipa/barycentric.go:142.22,156.4 9 1 -github.com/luxfi/crypto/ipa/ipa/barycentric.go:159.2,159.17 1 1 -github.com/luxfi/crypto/ipa/ipa/barycentric.go:162.92,165.12 2 1 -github.com/luxfi/crypto/ipa/ipa/barycentric.go:165.12,168.3 2 1 -github.com/luxfi/crypto/ipa/ipa/barycentric.go:170.2,170.38 1 1 -github.com/luxfi/crypto/ipa/ipa/barycentric.go:173.97,182.2 6 1 -github.com/luxfi/crypto/ipa/ipa/barycentric.go:184.82,188.2 2 1 -github.com/luxfi/crypto/ipa/ipa/barycentric.go:192.32,195.17 2 1 -github.com/luxfi/crypto/ipa/ipa/barycentric.go:195.17,197.3 1 1 -github.com/luxfi/crypto/ipa/ipa/barycentric.go:199.2,199.23 1 1 -github.com/luxfi/crypto/ipa/ipa/config.go:33.43,36.16 3 1 -github.com/luxfi/crypto/ipa/ipa/config.go:36.16,38.3 1 0 -github.com/luxfi/crypto/ipa/ipa/config.go:39.2,45.8 1 1 -github.com/luxfi/crypto/ipa/ipa/config.go:49.99,54.16 4 1 -github.com/luxfi/crypto/ipa/ipa/config.go:54.16,56.3 1 0 -github.com/luxfi/crypto/ipa/ipa/config.go:58.2,58.18 1 1 -github.com/luxfi/crypto/ipa/ipa/config.go:63.74,65.2 1 1 -github.com/luxfi/crypto/ipa/ipa/config.go:68.104,69.43 1 1 -github.com/luxfi/crypto/ipa/ipa/config.go:69.43,71.3 1 0 -github.com/luxfi/crypto/ipa/ipa/config.go:72.2,72.47 1 1 -github.com/luxfi/crypto/ipa/ipa/config.go:76.68,77.22 1 1 -github.com/luxfi/crypto/ipa/ipa/config.go:77.22,79.3 1 0 -github.com/luxfi/crypto/ipa/ipa/config.go:81.2,82.30 2 1 -github.com/luxfi/crypto/ipa/ipa/config.go:82.30,87.3 3 1 -github.com/luxfi/crypto/ipa/ipa/config.go:89.2,89.20 1 1 -github.com/luxfi/crypto/ipa/ipa/config.go:94.86,95.22 1 1 -github.com/luxfi/crypto/ipa/ipa/config.go:95.22,97.3 1 0 -github.com/luxfi/crypto/ipa/ipa/config.go:98.2,99.30 2 1 -github.com/luxfi/crypto/ipa/ipa/config.go:99.30,103.3 3 1 -github.com/luxfi/crypto/ipa/ipa/config.go:105.2,105.20 1 1 -github.com/luxfi/crypto/ipa/ipa/config.go:110.112,111.22 1 1 -github.com/luxfi/crypto/ipa/ipa/config.go:111.22,113.3 1 0 -github.com/luxfi/crypto/ipa/ipa/config.go:115.2,116.30 2 1 -github.com/luxfi/crypto/ipa/ipa/config.go:116.30,120.3 3 1 -github.com/luxfi/crypto/ipa/ipa/config.go:121.2,121.20 1 1 -github.com/luxfi/crypto/ipa/ipa/config.go:126.71,127.19 1 1 -github.com/luxfi/crypto/ipa/ipa/config.go:127.19,129.3 1 0 -github.com/luxfi/crypto/ipa/ipa/config.go:131.2,132.30 2 1 -github.com/luxfi/crypto/ipa/ipa/config.go:137.97,138.19 1 1 -github.com/luxfi/crypto/ipa/ipa/config.go:138.19,140.3 1 0 -github.com/luxfi/crypto/ipa/ipa/config.go:141.2,143.30 2 1 -github.com/luxfi/crypto/ipa/ipa/config.go:153.49,156.21 1 1 -github.com/luxfi/crypto/ipa/ipa/config.go:156.21,157.37 1 0 -github.com/luxfi/crypto/ipa/ipa/config.go:161.2,163.13 2 1 -github.com/luxfi/crypto/ipa/ipa/config.go:163.13,164.55 1 0 -github.com/luxfi/crypto/ipa/ipa/config.go:167.2,169.20 2 1 -github.com/luxfi/crypto/ipa/ipa/config.go:174.67,181.39 4 1 -github.com/luxfi/crypto/ipa/ipa/config.go:181.39,200.17 13 1 -github.com/luxfi/crypto/ipa/ipa/config.go:200.17,202.12 1 1 -github.com/luxfi/crypto/ipa/ipa/config.go:204.3,204.39 1 1 -github.com/luxfi/crypto/ipa/ipa/config.go:208.2,208.15 1 1 -github.com/luxfi/crypto/ipa/ipa/prover.go:16.13,18.2 1 1 -github.com/luxfi/crypto/ipa/ipa/prover.go:58.155,64.16 4 1 -github.com/luxfi/crypto/ipa/ipa/prover.go:64.16,66.3 1 0 -github.com/luxfi/crypto/ipa/ipa/prover.go:68.2,83.39 11 1 -github.com/luxfi/crypto/ipa/ipa/prover.go:83.39,86.17 2 1 -github.com/luxfi/crypto/ipa/ipa/prover.go:86.17,88.4 1 0 -github.com/luxfi/crypto/ipa/ipa/prover.go:90.3,91.17 2 1 -github.com/luxfi/crypto/ipa/ipa/prover.go:91.17,93.4 1 0 -github.com/luxfi/crypto/ipa/ipa/prover.go:95.3,96.17 2 1 -github.com/luxfi/crypto/ipa/ipa/prover.go:96.17,98.4 1 0 -github.com/luxfi/crypto/ipa/ipa/prover.go:100.3,101.17 2 1 -github.com/luxfi/crypto/ipa/ipa/prover.go:101.17,103.4 1 0 -github.com/luxfi/crypto/ipa/ipa/prover.go:104.3,105.17 2 1 -github.com/luxfi/crypto/ipa/ipa/prover.go:105.17,107.4 1 0 -github.com/luxfi/crypto/ipa/ipa/prover.go:109.3,110.17 2 1 -github.com/luxfi/crypto/ipa/ipa/prover.go:110.17,112.4 1 0 -github.com/luxfi/crypto/ipa/ipa/prover.go:113.3,114.17 2 1 -github.com/luxfi/crypto/ipa/ipa/prover.go:114.17,116.4 1 0 -github.com/luxfi/crypto/ipa/ipa/prover.go:118.3,119.17 2 1 -github.com/luxfi/crypto/ipa/ipa/prover.go:119.17,121.4 1 0 -github.com/luxfi/crypto/ipa/ipa/prover.go:122.3,123.17 2 1 -github.com/luxfi/crypto/ipa/ipa/prover.go:123.17,125.4 1 0 -github.com/luxfi/crypto/ipa/ipa/prover.go:127.3,139.17 9 1 -github.com/luxfi/crypto/ipa/ipa/prover.go:139.17,141.4 1 0 -github.com/luxfi/crypto/ipa/ipa/prover.go:142.3,143.17 2 1 -github.com/luxfi/crypto/ipa/ipa/prover.go:143.17,145.4 1 0 -github.com/luxfi/crypto/ipa/ipa/prover.go:147.3,148.17 2 1 -github.com/luxfi/crypto/ipa/ipa/prover.go:148.17,150.4 1 0 -github.com/luxfi/crypto/ipa/ipa/prover.go:154.2,154.17 1 1 -github.com/luxfi/crypto/ipa/ipa/prover.go:154.17,156.3 1 0 -github.com/luxfi/crypto/ipa/ipa/prover.go:158.2,162.8 1 1 -github.com/luxfi/crypto/ipa/ipa/prover.go:166.46,167.26 1 1 -github.com/luxfi/crypto/ipa/ipa/prover.go:167.26,168.71 1 1 -github.com/luxfi/crypto/ipa/ipa/prover.go:168.71,170.4 1 0 -github.com/luxfi/crypto/ipa/ipa/prover.go:172.2,172.26 1 1 -github.com/luxfi/crypto/ipa/ipa/prover.go:172.26,173.71 1 1 -github.com/luxfi/crypto/ipa/ipa/prover.go:173.71,175.4 1 0 -github.com/luxfi/crypto/ipa/ipa/prover.go:177.2,177.81 1 1 -github.com/luxfi/crypto/ipa/ipa/prover.go:177.81,179.3 1 0 -github.com/luxfi/crypto/ipa/ipa/prover.go:180.2,180.12 1 1 -github.com/luxfi/crypto/ipa/ipa/prover.go:184.45,186.25 2 1 -github.com/luxfi/crypto/ipa/ipa/prover.go:186.25,188.17 2 1 -github.com/luxfi/crypto/ipa/ipa/prover.go:188.17,190.4 1 0 -github.com/luxfi/crypto/ipa/ipa/prover.go:191.3,191.22 1 1 -github.com/luxfi/crypto/ipa/ipa/prover.go:193.2,195.25 3 1 -github.com/luxfi/crypto/ipa/ipa/prover.go:195.25,197.17 2 1 -github.com/luxfi/crypto/ipa/ipa/prover.go:197.17,199.4 1 0 -github.com/luxfi/crypto/ipa/ipa/prover.go:200.3,200.22 1 1 -github.com/luxfi/crypto/ipa/ipa/prover.go:202.2,205.16 3 1 -github.com/luxfi/crypto/ipa/ipa/prover.go:205.16,207.3 1 0 -github.com/luxfi/crypto/ipa/ipa/prover.go:208.2,210.12 2 1 -github.com/luxfi/crypto/ipa/ipa/prover.go:214.47,216.31 2 1 -github.com/luxfi/crypto/ipa/ipa/prover.go:216.31,218.3 1 0 -github.com/luxfi/crypto/ipa/ipa/prover.go:219.2,219.31 1 1 -github.com/luxfi/crypto/ipa/ipa/prover.go:219.31,221.3 1 0 -github.com/luxfi/crypto/ipa/ipa/prover.go:222.2,222.28 1 1 -github.com/luxfi/crypto/ipa/ipa/prover.go:222.28,224.3 1 0 -github.com/luxfi/crypto/ipa/ipa/prover.go:225.2,225.29 1 1 -github.com/luxfi/crypto/ipa/ipa/prover.go:225.29,227.3 1 0 -github.com/luxfi/crypto/ipa/ipa/prover.go:229.2,229.34 1 1 -github.com/luxfi/crypto/ipa/ipa/prover.go:229.34,236.34 5 1 -github.com/luxfi/crypto/ipa/ipa/prover.go:236.34,238.4 1 0 -github.com/luxfi/crypto/ipa/ipa/prover.go:239.3,239.34 1 1 -github.com/luxfi/crypto/ipa/ipa/prover.go:239.34,241.4 1 0 -github.com/luxfi/crypto/ipa/ipa/prover.go:243.2,243.43 1 1 -github.com/luxfi/crypto/ipa/ipa/prover.go:246.71,247.50 1 1 -github.com/luxfi/crypto/ipa/ipa/prover.go:247.50,249.3 1 1 -github.com/luxfi/crypto/ipa/ipa/prover.go:253.2,259.10 5 1 -github.com/luxfi/crypto/ipa/ipa/verifier.go:14.169,17.34 2 1 -github.com/luxfi/crypto/ipa/ipa/verifier.go:17.34,19.3 1 0 -github.com/luxfi/crypto/ipa/ipa/verifier.go:20.2,20.39 1 1 -github.com/luxfi/crypto/ipa/ipa/verifier.go:20.39,22.3 1 0 -github.com/luxfi/crypto/ipa/ipa/verifier.go:24.2,45.39 14 1 -github.com/luxfi/crypto/ipa/ipa/verifier.go:45.39,51.17 5 1 -github.com/luxfi/crypto/ipa/ipa/verifier.go:51.17,53.4 1 0 -github.com/luxfi/crypto/ipa/ipa/verifier.go:56.2,60.30 3 1 -github.com/luxfi/crypto/ipa/ipa/verifier.go:60.30,63.73 2 1 -github.com/luxfi/crypto/ipa/ipa/verifier.go:63.73,64.35 1 1 -github.com/luxfi/crypto/ipa/ipa/verifier.go:64.35,66.5 1 1 -github.com/luxfi/crypto/ipa/ipa/verifier.go:68.3,68.29 1 1 -github.com/luxfi/crypto/ipa/ipa/verifier.go:70.2,71.16 2 1 -github.com/luxfi/crypto/ipa/ipa/verifier.go:71.16,73.3 1 0 -github.com/luxfi/crypto/ipa/ipa/verifier.go:74.2,75.16 2 1 -github.com/luxfi/crypto/ipa/ipa/verifier.go:75.16,77.3 1 0 -github.com/luxfi/crypto/ipa/ipa/verifier.go:79.2,92.36 9 1 -github.com/luxfi/crypto/ipa/ipa/verifier.go:95.86,98.36 2 1 -github.com/luxfi/crypto/ipa/ipa/verifier.go:98.36,102.3 3 1 -github.com/luxfi/crypto/ipa/ipa/verifier.go:103.2,103.19 1 1 -github.com/luxfi/crypto/encryption/age.go:19.91,22.16 2 1 -github.com/luxfi/crypto/encryption/age.go:22.16,24.3 1 0 -github.com/luxfi/crypto/encryption/age.go:27.2,28.16 2 1 -github.com/luxfi/crypto/encryption/age.go:28.16,30.3 1 1 -github.com/luxfi/crypto/encryption/age.go:33.2,34.62 2 1 -github.com/luxfi/crypto/encryption/age.go:34.62,36.3 1 0 -github.com/luxfi/crypto/encryption/age.go:38.2,38.35 1 1 -github.com/luxfi/crypto/encryption/age.go:42.76,45.16 2 1 -github.com/luxfi/crypto/encryption/age.go:45.16,47.3 1 0 -github.com/luxfi/crypto/encryption/age.go:50.2,52.16 3 1 -github.com/luxfi/crypto/encryption/age.go:52.16,54.3 1 0 -github.com/luxfi/crypto/encryption/age.go:56.2,56.49 1 1 -github.com/luxfi/crypto/encryption/age.go:56.49,58.3 1 0 -github.com/luxfi/crypto/encryption/age.go:60.2,60.42 1 1 -github.com/luxfi/crypto/encryption/age.go:60.42,62.3 1 0 -github.com/luxfi/crypto/encryption/age.go:64.2,64.31 1 1 -github.com/luxfi/crypto/encryption/age.go:68.39,71.2 1 1 -github.com/luxfi/crypto/encryption/age.go:74.73,76.16 2 1 -github.com/luxfi/crypto/encryption/age.go:76.16,78.3 1 0 -github.com/luxfi/crypto/encryption/age.go:80.2,80.27 1 1 -github.com/luxfi/crypto/encryption/age.go:80.27,83.3 1 1 -github.com/luxfi/crypto/encryption/age.go:85.2,85.54 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/bandersnatch.go:28.62,30.53 2 0 -github.com/luxfi/crypto/ipa/bandersnatch/bandersnatch.go:30.53,32.3 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/bandersnatch.go:34.2,41.8 4 0 -github.com/luxfi/crypto/ipa/bandersnatch/bandersnatch.go:45.71,49.16 4 0 -github.com/luxfi/crypto/ipa/bandersnatch/bandersnatch.go:49.16,51.3 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/bandersnatch.go:52.2,54.16 3 0 -github.com/luxfi/crypto/ipa/bandersnatch/bandersnatch.go:54.16,56.3 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/bandersnatch.go:57.2,57.33 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/bandersnatch.go:60.69,62.14 2 0 -github.com/luxfi/crypto/ipa/bandersnatch/bandersnatch.go:62.14,64.3 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/bandersnatch.go:65.2,65.35 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/bandersnatch.go:72.63,87.18 10 0 -github.com/luxfi/crypto/ipa/bandersnatch/bandersnatch.go:87.18,89.3 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/bandersnatch.go:92.2,93.34 2 0 -github.com/luxfi/crypto/ipa/bandersnatch/bandersnatch.go:93.34,95.3 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/bandersnatch.go:95.8,97.3 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/bandersnatch.go:101.56,112.2 5 1 -github.com/luxfi/crypto/ipa/bandersnatch/bandersnatch.go:121.93,126.2 4 0 -github.com/luxfi/crypto/ipa/bandersnatch/bandersnatch.go:130.112,157.2 18 0 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:57.106,62.26 3 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:62.26,64.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:66.2,73.52 6 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:73.52,80.24 7 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:80.24,84.4 3 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:85.3,85.23 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:96.2,98.54 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:98.54,100.32 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:100.32,104.19 3 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:104.19,106.5 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:107.4,107.25 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:107.25,109.23 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:109.23,110.14 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:113.5,113.36 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:113.36,115.6 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:119.4,119.54 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:119.54,129.26 5 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:129.26,132.6 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:135.5,135.19 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:135.19,136.14 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:141.5,141.21 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:141.21,144.6 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:146.5,147.19 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:147.19,149.6 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:149.11,151.6 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:153.5,154.26 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:154.26,156.6 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:161.3,161.31 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:166.2,168.31 3 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:168.31,170.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:171.2,171.30 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:175.109,177.66 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:177.66,179.3 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:181.2,183.15 3 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:188.116,217.30 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:217.30,219.3 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:222.2,222.25 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:222.25,224.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:228.2,228.37 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:228.37,237.35 4 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:237.35,240.18 3 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:240.18,243.5 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:249.3,249.11 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:252.2,255.32 4 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:255.32,258.27 3 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:258.27,260.4 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:261.3,262.32 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:262.32,265.4 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:271.2,281.34 6 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:281.34,284.30 3 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:284.30,287.4 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:290.2,291.34 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:291.34,294.3 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:295.2,296.15 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:299.111,301.11 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:303.9,304.45 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:306.9,307.45 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:309.9,310.45 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:312.9,313.45 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:315.9,316.45 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:318.9,319.45 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:321.10,322.46 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:324.10,325.46 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:327.10,328.46 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:330.10,331.46 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:333.10,334.46 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:336.10,337.46 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:339.10,340.46 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:342.10,343.46 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:345.10,346.46 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:348.10,349.46 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:351.10,352.27 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:357.91,361.42 4 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:361.42,362.26 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:362.26,364.4 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:365.3,366.23 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:369.2,371.10 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:374.89,378.42 4 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:378.42,379.26 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:379.26,381.4 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:382.3,383.23 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:386.2,388.10 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:396.24,400.2 3 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:407.24,412.36 3 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:412.36,414.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:416.2,422.23 7 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:422.23,426.3 3 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:429.2,429.36 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:429.36,431.24 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:431.24,433.4 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:435.3,435.16 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:435.16,436.12 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:440.3,440.26 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:440.26,445.4 3 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:445.9,451.4 4 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:457.2,458.41 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:458.41,463.3 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:465.2,465.14 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:469.103,482.96 3 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:482.96,485.3 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:487.2,489.41 3 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:489.41,491.13 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:491.13,494.4 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:496.2,498.22 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:498.22,500.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:500.8,505.13 5 0 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:505.13,508.4 2 0 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:509.3,509.13 1 0 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:509.13,512.4 2 0 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:513.3,515.28 3 0 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:518.2,518.56 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:521.103,534.37 3 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:534.37,536.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:539.2,540.64 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:540.64,543.3 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:545.2,545.98 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:545.98,548.3 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:550.2,550.41 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:550.41,552.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:554.2,554.22 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:554.22,556.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:556.8,561.13 5 0 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:561.13,567.4 5 0 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:570.2,570.53 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:573.103,586.37 3 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:586.37,588.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:591.2,592.64 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:592.64,595.3 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:597.2,597.98 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:597.98,600.3 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:602.2,602.41 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:602.41,604.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:606.2,606.22 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:606.22,608.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:608.8,613.13 5 0 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:613.13,619.4 5 0 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:622.2,622.53 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:625.103,638.37 3 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:638.37,640.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:643.2,644.64 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:644.64,647.3 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:649.2,649.98 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:649.98,652.3 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:654.2,654.41 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:654.41,656.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:658.2,658.22 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:658.22,660.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:660.8,665.13 5 0 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:665.13,671.4 5 0 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:674.2,674.53 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:677.103,690.37 3 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:690.37,692.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:694.2,694.98 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:694.98,697.3 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:699.2,699.41 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:699.41,701.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:703.2,703.22 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:703.22,705.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:705.8,710.13 5 0 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:710.13,716.4 5 0 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:719.2,719.53 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:722.103,735.37 3 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:735.37,737.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:740.2,741.64 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:741.64,744.3 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:746.2,746.98 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:746.98,749.3 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:751.2,751.41 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:751.41,753.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:755.2,755.22 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:755.22,757.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:757.8,762.13 5 0 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:762.13,768.4 5 0 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:771.2,771.53 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:774.104,787.37 3 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:787.37,789.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:792.2,793.64 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:793.64,796.3 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:798.2,798.98 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:798.98,801.3 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:803.2,803.41 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:803.41,805.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:807.2,807.22 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:807.22,809.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:809.8,814.13 5 0 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:814.13,820.4 5 0 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:823.2,823.53 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:826.104,839.37 3 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:839.37,841.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:844.2,845.64 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:845.64,848.3 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:850.2,850.98 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:850.98,853.3 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:855.2,855.41 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:855.41,857.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:859.2,859.22 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:859.22,861.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:861.8,866.13 5 0 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:866.13,872.4 5 0 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:875.2,875.53 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:878.104,891.37 3 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:891.37,893.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:896.2,897.64 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:897.64,900.3 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:902.2,902.98 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:902.98,905.3 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:907.2,907.41 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:907.41,909.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:911.2,911.22 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:911.22,913.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:913.8,918.13 5 0 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:918.13,924.4 5 0 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:927.2,927.53 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:930.104,943.37 3 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:943.37,945.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:948.2,949.64 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:949.64,952.3 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:954.2,954.98 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:954.98,957.3 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:959.2,959.41 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:959.41,961.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:963.2,963.22 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:963.22,965.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:965.8,970.13 5 0 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:970.13,976.4 5 0 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:979.2,979.53 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:982.104,995.37 3 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:995.37,997.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1000.2,1001.64 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1001.64,1004.3 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1006.2,1006.98 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1006.98,1009.3 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1011.2,1011.41 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1011.41,1013.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1015.2,1015.22 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1015.22,1017.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1017.8,1022.13 5 0 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1022.13,1028.4 5 0 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1031.2,1031.53 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1034.104,1047.37 3 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1047.37,1049.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1052.2,1053.64 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1053.64,1056.3 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1058.2,1058.98 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1058.98,1061.3 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1063.2,1063.41 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1063.41,1065.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1067.2,1067.22 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1067.22,1069.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1069.8,1074.13 5 0 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1074.13,1080.4 5 0 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1083.2,1083.53 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1086.104,1099.37 3 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1099.37,1101.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1103.2,1103.98 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1103.98,1106.3 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1108.2,1108.41 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1108.41,1110.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1112.2,1112.22 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1112.22,1114.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1114.8,1119.13 5 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1119.13,1125.4 5 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1128.2,1128.53 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1131.104,1144.37 3 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1144.37,1146.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1149.2,1150.64 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1150.64,1153.3 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1155.2,1155.98 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1155.98,1158.3 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1160.2,1160.41 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1160.41,1162.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1164.2,1164.22 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1164.22,1166.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1166.8,1171.13 5 0 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1171.13,1177.4 5 0 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1180.2,1180.53 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1183.104,1196.37 3 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1196.37,1198.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1201.2,1202.64 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1202.64,1205.3 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1207.2,1207.98 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1207.98,1210.3 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1212.2,1212.41 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1212.41,1214.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1216.2,1216.22 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1216.22,1218.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1218.8,1223.13 5 0 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1223.13,1229.4 5 0 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1232.2,1232.53 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1235.104,1248.37 3 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1248.37,1250.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1253.2,1254.64 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1254.64,1257.3 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1259.2,1259.98 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1259.98,1262.3 2 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1264.2,1264.41 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1264.41,1266.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1268.2,1268.22 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1268.22,1270.3 1 1 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1270.8,1275.13 5 0 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1275.13,1281.4 5 0 -github.com/luxfi/crypto/ipa/bandersnatch/multiexp.go:1284.2,1284.53 1 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:44.47,48.24 3 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:48.24,54.3 4 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:56.2,56.41 1 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:56.41,58.3 1 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:59.2,59.24 1 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:65.68,78.2 8 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:81.48,85.29 2 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:85.29,87.3 1 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:88.2,89.36 2 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:89.36,91.3 1 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:93.2,98.44 3 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:98.44,99.42 1 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:99.42,101.4 1 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:102.3,103.61 2 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:106.2,109.49 3 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:109.49,112.3 2 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:115.2,115.62 1 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:115.62,116.32 1 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:116.32,120.4 3 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:122.2,122.12 1 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:126.67,129.37 2 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:129.37,131.3 1 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:134.2,139.37 3 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:139.37,149.36 6 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:149.36,151.4 1 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:153.3,153.35 1 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:156.2,156.26 1 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:160.78,163.37 2 0 -github.com/luxfi/crypto/ipa/banderwagon/element.go:163.37,165.3 1 0 -github.com/luxfi/crypto/ipa/banderwagon/element.go:168.2,173.37 3 0 -github.com/luxfi/crypto/ipa/banderwagon/element.go:173.37,186.3 9 0 -github.com/luxfi/crypto/ipa/banderwagon/element.go:188.2,188.27 1 0 -github.com/luxfi/crypto/ipa/banderwagon/element.go:191.60,192.32 1 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:192.32,194.3 1 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:197.2,198.49 2 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:198.49,200.3 1 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:202.2,203.18 2 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:203.18,205.3 1 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:208.2,208.14 1 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:208.14,210.17 2 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:210.17,212.4 1 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:216.2,222.12 2 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:228.46,230.2 1 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:234.52,236.2 1 0 -github.com/luxfi/crypto/ipa/banderwagon/element.go:241.72,242.34 1 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:242.34,244.3 1 0 -github.com/luxfi/crypto/ipa/banderwagon/element.go:246.2,251.14 4 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:251.14,253.19 2 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:253.19,255.4 1 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:256.3,257.62 2 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:257.62,259.4 1 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:260.3,263.17 3 0 -github.com/luxfi/crypto/ipa/banderwagon/element.go:263.17,265.4 1 0 -github.com/luxfi/crypto/ipa/banderwagon/element.go:266.8,268.3 1 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:270.2,276.12 2 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:280.46,284.2 3 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:287.52,292.2 3 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:295.77,296.34 1 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:296.34,298.3 1 0 -github.com/luxfi/crypto/ipa/banderwagon/element.go:301.2,302.37 2 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:302.37,304.3 1 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:307.2,310.37 2 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:310.37,316.3 4 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:318.2,318.12 1 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:322.46,329.32 5 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:329.32,331.3 1 0 -github.com/luxfi/crypto/ipa/banderwagon/element.go:332.2,332.32 1 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:332.32,334.3 1 0 -github.com/luxfi/crypto/ipa/banderwagon/element.go:340.2,345.24 5 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:348.40,355.25 6 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:355.25,357.3 1 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:358.2,358.12 1 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:362.42,365.2 2 0 -github.com/luxfi/crypto/ipa/banderwagon/element.go:368.48,371.2 2 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:374.49,377.2 2 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:380.79,383.2 2 0 -github.com/luxfi/crypto/ipa/banderwagon/element.go:386.49,391.2 3 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:394.36,399.2 3 0 -github.com/luxfi/crypto/ipa/banderwagon/element.go:403.37,404.24 1 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:404.24,406.3 1 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:408.2,415.12 6 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:419.45,424.2 4 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:427.45,430.2 2 1 -github.com/luxfi/crypto/ipa/banderwagon/element.go:433.75,438.2 4 1 -github.com/luxfi/crypto/ipa/banderwagon/multiexp.go:15.109,17.24 2 0 -github.com/luxfi/crypto/ipa/banderwagon/multiexp.go:17.24,19.3 1 0 -github.com/luxfi/crypto/ipa/banderwagon/multiexp.go:20.2,28.15 3 0 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:35.58,36.39 1 1 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:36.39,38.3 1 0 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:40.2,45.42 3 1 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:45.42,47.32 2 1 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:47.32,49.4 1 1 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:50.3,51.17 2 1 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:51.17,53.4 1 0 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:56.2,58.8 1 1 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:63.58,66.25 2 1 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:66.25,67.27 1 1 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:67.27,69.4 1 1 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:71.2,75.4 1 1 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:85.75,86.36 1 1 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:86.36,88.3 1 0 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:90.2,101.40 7 1 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:101.40,104.25 3 1 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:104.25,107.41 3 1 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:107.41,110.5 2 1 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:111.4,112.14 2 1 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:114.3,114.42 1 1 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:116.2,118.17 2 1 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:124.87,130.32 5 1 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:130.32,131.41 1 1 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:131.41,133.24 2 1 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:133.24,134.13 1 1 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:136.4,138.42 2 1 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:138.42,140.25 2 1 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:140.25,143.6 2 1 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:144.5,144.14 1 1 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:145.10,147.5 1 1 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:155.84,162.35 4 0 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:162.35,163.27 1 0 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:163.27,165.12 2 0 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:167.3,168.46 2 0 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:171.2,174.40 3 0 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:174.40,175.16 1 0 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:175.16,177.12 1 0 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:179.3,180.44 2 0 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:184.2,184.53 1 0 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:184.53,185.32 1 0 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:185.32,186.17 1 0 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:186.17,188.13 1 0 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:190.4,192.37 3 0 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:196.2,196.15 1 0 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:199.113,206.35 4 1 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:206.35,207.27 1 1 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:207.27,209.12 2 0 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:211.3,212.46 2 1 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:215.2,218.40 3 1 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:218.40,219.16 1 1 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:219.16,221.12 1 0 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:223.3,224.44 2 1 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:228.2,228.53 1 1 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:228.53,229.32 1 1 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:229.32,230.17 1 1 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:230.17,232.13 1 0 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:235.4,238.47 4 1 -github.com/luxfi/crypto/ipa/banderwagon/precomp.go:242.2,242.15 1 1 diff --git a/crypto.go b/crypto.go index 98b0256..de28b00 100644 --- a/crypto.go +++ b/crypto.go @@ -28,10 +28,8 @@ import ( "io" "math/big" "os" - "sync" "github.com/luxfi/crypto/rlp" - "golang.org/x/crypto/sha3" ) // SignatureLength indicates the byte length required to carry a signature with recovery id. @@ -40,15 +38,15 @@ const SignatureLength = 64 + 1 // 64 bytes ECDSA signature + 1 byte recovery id // RecoveryIDOffset points to the byte offset within the signature that contains the recovery id. const RecoveryIDOffset = 64 -// DigestLength sets the signature digest exact length -const DigestLength = 32 - // HashLength is the expected length of the hash const HashLength = 32 // AddressLength is the expected length of the address const AddressLength = 20 +// DigestLength sets the signature digest exact length +const DigestLength = 32 + // Hash represents the 32 byte Keccak256 hash of arbitrary data. type Hash [HashLength]byte @@ -145,59 +143,7 @@ type KeccakState interface { Read([]byte) (int, error) } -// NewKeccakState creates a new KeccakState -func NewKeccakState() KeccakState { - return sha3.NewLegacyKeccak256().(KeccakState) -} -var hasherPool = sync.Pool{ - New: func() any { - return sha3.NewLegacyKeccak256().(KeccakState) - }, -} - -// HashData hashes the provided data using the KeccakState and returns a 32 byte hash -func HashData(kh KeccakState, data []byte) (h Hash) { - kh.Reset() - kh.Write(data) - kh.Read(h[:]) - return h -} - -// Keccak256 calculates and returns the Keccak256 hash of the input data. -func Keccak256(data ...[]byte) []byte { - b := make([]byte, 32) - d := hasherPool.Get().(KeccakState) - d.Reset() - for _, b := range data { - d.Write(b) - } - d.Read(b) - hasherPool.Put(d) - return b -} - -// Keccak256Hash calculates and returns the Keccak256 hash of the input data, -// converting it to an internal Hash data structure. -func Keccak256Hash(data ...[]byte) (h Hash) { - d := hasherPool.Get().(KeccakState) - d.Reset() - for _, b := range data { - d.Write(b) - } - d.Read(h[:]) - hasherPool.Put(d) - return h -} - -// Keccak512 calculates and returns the Keccak512 hash of the input data. -func Keccak512(data ...[]byte) []byte { - d := sha3.NewLegacyKeccak512() - for _, b := range data { - d.Write(b) - } - return d.Sum(nil) -} // HexToAddress returns Address with byte values of s. func HexToAddress(s string) Address { @@ -273,15 +219,14 @@ func FromECDSA(priv *ecdsa.PrivateKey) []byte { // UnmarshalPubkey converts bytes to a secp256k1 public key. func UnmarshalPubkey(pub []byte) (*ecdsa.PublicKey, error) { - curve := S256().(EllipticCurve) - x, y := curve.Unmarshal(pub) + x, y := S256().Unmarshal(pub) if x == nil { return nil, errInvalidPubkey } - if !curve.IsOnCurve(x, y) { + if !S256().IsOnCurve(x, y) { return nil, errInvalidPubkey } - return &ecdsa.PublicKey{Curve: curve, X: x, Y: y}, nil + return &ecdsa.PublicKey{Curve: S256(), X: x, Y: y}, nil } // FromECDSAPub converts a secp256k1 public key to bytes. @@ -316,7 +261,7 @@ func LoadECDSA(file string) (*ecdsa.PrivateKey, error) { r := bufio.NewReader(fd) buf := make([]byte, 64) n, err := readASCII(buf, r) - if err != nil && err != io.EOF { + if err != nil { return nil, err } else if n != len(buf) { return nil, errors.New("key file too short, want 64 hex characters") @@ -419,6 +364,14 @@ func ReadBits(bigint *big.Int, buf []byte) { // wordBytes is the number of bytes in a big.Word const wordBytes = int(32 << (uint64(^big.Word(0)) >> 63)) +// HashData hashes the provided data using the KeccakState and returns a 32 byte hash +func HashData(kh KeccakState, data []byte) (h Hash) { + kh.Reset() + kh.Write(data) + kh.Read(h[:]) + return h +} + func zeroBytes(bytes []byte) { clear(bytes) } diff --git a/crypto_test.go b/crypto_test.go index ec8c933..f1b710b 100644 --- a/crypto_test.go +++ b/crypto_test.go @@ -26,7 +26,6 @@ import ( "reflect" "testing" - "github.com/luxfi/crypto/common" "github.com/luxfi/crypto/common/hexutil" ) @@ -60,7 +59,7 @@ func TestToECDSAErrors(t *testing.T) { func BenchmarkSha3(b *testing.B) { a := []byte("hello world") - for i := 0; i < b.N; i++ { + for b.Loop() { Keccak256(a) } } @@ -231,9 +230,9 @@ func TestValidateSignatureValues(t *testing.T) { } } minusOne := big.NewInt(-1) - one := common.Big1 - zero := common.Big0 - secp256k1nMinus1 := new(big.Int).Sub(secp256k1N, common.Big1) + one := Big1 + zero := Big0 + secp256k1nMinus1 := new(big.Int).Sub(secp256k1N, Big1) // correct v,r,s check(true, 0, one, one) @@ -279,10 +278,22 @@ func checkhash(t *testing.T, name string, f func([]byte) []byte, msg, exp []byte func checkAddr(t *testing.T, addr0, addr1 Address) { if addr0 != addr1 { - t.Fatalf("address mismatch: want: %s have: %s", addr0.Hex(), addr1.Hex()) + t.Fatalf("address mismatch: want: %x have: %x", addr0, addr1) } } +// FromHex converts a hex string to bytes +func FromHex(s string) []byte { + if len(s) >= 2 && (s[0:2] == "0x" || s[0:2] == "0X") { + s = s[2:] + } + if len(s)%2 == 1 { + s = "0" + s + } + b, _ := hex.DecodeString(s) + return b +} + // test to help Python team with integration of libsecp256k1 // skip but keep it after they are done func TestPythonIntegration(t *testing.T) { @@ -292,7 +303,7 @@ func TestPythonIntegration(t *testing.T) { msg0 := Keccak256([]byte("foo")) sig0, _ := Sign(msg0, k0) - msg1 := common.FromHex("00000000000000000000000000000000") + msg1 := FromHex("00000000000000000000000000000000") sig1, _ := Sign(msg0, k0) t.Logf("msg: %x, privkey: %s sig: %x\n", msg0, kh, sig0) @@ -310,7 +321,7 @@ func BenchmarkKeccak256Hash(b *testing.B) { rand.Read(input[:]) b.ReportAllocs() - for i := 0; i < b.N; i++ { + for b.Loop() { Keccak256Hash(input[:]) } } @@ -329,7 +340,7 @@ func BenchmarkHashData(b *testing.B) { rand.Read(input[:]) b.ReportAllocs() - for i := 0; i < b.N; i++ { + for b.Loop() { HashData(buffer, input[:]) } } diff --git a/ecies/ecies_test.go b/ecies/ecies_test.go index 6e1aed0..728f171 100644 --- a/ecies/ecies_test.go +++ b/ecies/ecies_test.go @@ -164,7 +164,7 @@ func TestTooBigSharedKey(t *testing.T) { // Benchmark the generation of P256 keys. func BenchmarkGenerateKeyP256(b *testing.B) { - for i := 0; i < b.N; i++ { + for b.Loop() { if _, err := GenerateKey(rand.Reader, elliptic.P256(), nil); err != nil { b.Fatal(err) } @@ -177,8 +177,7 @@ func BenchmarkGenSharedKeyP256(b *testing.B) { if err != nil { b.Fatal(err) } - b.ResetTimer() - for i := 0; i < b.N; i++ { + for b.Loop() { _, err := prv.GenerateShared(&prv.PublicKey, 16, 16) if err != nil { b.Fatal(err) @@ -192,8 +191,7 @@ func BenchmarkGenSharedKeyS256(b *testing.B) { if err != nil { b.Fatal(err) } - b.ResetTimer() - for i := 0; i < b.N; i++ { + for b.Loop() { _, err := prv.GenerateShared(&prv.PublicKey, 16, 16) if err != nil { b.Fatal(err) diff --git a/go.work b/go.work new file mode 100644 index 0000000..2e58514 --- /dev/null +++ b/go.work @@ -0,0 +1,5 @@ +go 1.25.5 + +use ( + . +) diff --git a/go.work.sum b/go.work.sum new file mode 100644 index 0000000..5c4b13a --- /dev/null +++ b/go.work.sum @@ -0,0 +1,5 @@ +github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= +github.com/dgraph-io/ristretto v0.2.0 h1:XAfl+7cmoUDWW/2Lx8TGZQjjxIQ2Ley9DSf52dru4WE= +github.com/google/renameio v0.1.0 h1:GOZbcHa3HfsPKPlmyPyN2KEohoMXOhdMbHrvbpl2QaA= +github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= +google.golang.org/genproto v0.0.0-20250603155806-513f23925822 h1:rHWScKit0gvAPuOnu87KpaYtjK5zBMLcULh7gxkCXu4= diff --git a/keccak.go b/keccak.go new file mode 100644 index 0000000..bed0f0e --- /dev/null +++ b/keccak.go @@ -0,0 +1,62 @@ +// Copyright 2025 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +//go:build !ziren + +package crypto + +import ( + "sync" + + "golang.org/x/crypto/sha3" +) + +// NewKeccakState creates a new KeccakState +func NewKeccakState() KeccakState { + return sha3.NewLegacyKeccak256().(KeccakState) +} + +var hasherPool = sync.Pool{ + New: func() any { + return sha3.NewLegacyKeccak256().(KeccakState) + }, +} + +// Keccak256 calculates and returns the Keccak256 hash of the input data. +func Keccak256(data ...[]byte) []byte { + b := make([]byte, 32) + d := hasherPool.Get().(KeccakState) + d.Reset() + for _, b := range data { + d.Write(b) + } + d.Read(b) + hasherPool.Put(d) + return b +} + +// Keccak256Hash calculates and returns the Keccak256 hash of the input data, +// converting it to an internal Hash data structure. +func Keccak256Hash(data ...[]byte) (h Hash) { + d := hasherPool.Get().(KeccakState) + d.Reset() + for _, b := range data { + d.Write(b) + } + d.Read(h[:]) + hasherPool.Put(d) + return h +} diff --git a/keccak_ziren.go b/keccak_ziren.go new file mode 100644 index 0000000..ded0854 --- /dev/null +++ b/keccak_ziren.go @@ -0,0 +1,122 @@ +// Copyright 2025 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +//go:build ziren + +package crypto + +import ( + "github.com/ProjectZKM/Ziren/crates/go-runtime/zkvm_runtime" + "github.com/luxfi/crypto" +) + +// zirenKeccakState implements the KeccakState interface using the Ziren zkvm_runtime. +// It accumulates data written to it and uses the zkvm's Keccak256 system call for hashing. +type zirenKeccakState struct { + buf []byte // accumulated data + result []byte // cached result + dirty bool // whether new data has been written since last hash +} + +func newZirenKeccakState() KeccakState { + return &zirenKeccakState{ + buf: make([]byte, 0, 512), // pre-allocate reasonable capacity + } +} + +func (s *zirenKeccakState) Write(p []byte) (n int, err error) { + s.buf = append(s.buf, p...) + s.dirty = true + return len(p), nil +} + +func (s *zirenKeccakState) Sum(b []byte) []byte { + s.computeHashIfNeeded() + return append(b, s.result...) +} + +func (s *zirenKeccakState) Reset() { + s.buf = s.buf[:0] + s.result = nil + s.dirty = false +} + +func (s *zirenKeccakState) Size() int { + return 32 +} + +func (s *zirenKeccakState) BlockSize() int { + return 136 // Keccak256 rate +} + +func (s *zirenKeccakState) Read(p []byte) (n int, err error) { + s.computeHashIfNeeded() + + if len(p) == 0 { + return 0, nil + } + + // After computeHashIfNeeded(), s.result is always a 32-byte slice + n = copy(p, s.result) + return n, nil +} + +func (s *zirenKeccakState) computeHashIfNeeded() { + if s.dirty || s.result == nil { + // Use the zkvm_runtime Keccak256 which uses SyscallKeccakSponge + hashArray := zkvm_runtime.Keccak256(s.buf) + s.result = hashArray[:] + s.dirty = false + } +} + +// NewKeccakState creates a new KeccakState +// This uses a Ziren-optimized implementation that leverages the zkvm_runtime.Keccak256 system call. +func NewKeccakState() KeccakState { + return newZirenKeccakState() +} + +// Keccak256 calculates and returns the Keccak256 hash using the Ziren zkvm_runtime implementation. +func Keccak256(data ...[]byte) []byte { + // For multiple data chunks, concatenate them + if len(data) == 0 { + result := zkvm_runtime.Keccak256(nil) + return result[:] + } + if len(data) == 1 { + result := zkvm_runtime.Keccak256(data[0]) + return result[:] + } + + // Concatenate multiple data chunks + var totalLen int + for _, d := range data { + totalLen += len(d) + } + + combined := make([]byte, 0, totalLen) + for _, d := range data { + combined = append(combined, d...) + } + + result := zkvm_runtime.Keccak256(combined) + return result[:] +} + +// Keccak256Hash calculates and returns the Keccak256 hash as a Hash using the Ziren zkvm_runtime implementation. +func Keccak256Hash(data ...[]byte) common.Hash { + return common.Hash(Keccak256(data...)) +} diff --git a/mldsa.out b/mldsa.out deleted file mode 100644 index 5f02b11..0000000 --- a/mldsa.out +++ /dev/null @@ -1 +0,0 @@ -mode: set diff --git a/mldsa/coverage.out b/mldsa/coverage.out deleted file mode 100644 index 36a64ca..0000000 --- a/mldsa/coverage.out +++ /dev/null @@ -1,150 +0,0 @@ -mode: atomic -github.com/luxfi/crypto/mldsa/mldsa.go:54.66,57.14 2 43 -github.com/luxfi/crypto/mldsa/mldsa.go:58.15,60.38 2 16 -github.com/luxfi/crypto/mldsa/mldsa.go:61.15,63.38 2 13 -github.com/luxfi/crypto/mldsa/mldsa.go:64.15,66.38 2 13 -github.com/luxfi/crypto/mldsa/mldsa.go:67.10,68.48 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:72.2,72.17 1 42 -github.com/luxfi/crypto/mldsa/mldsa.go:72.17,74.3 1 3 -github.com/luxfi/crypto/mldsa/mldsa.go:77.2,78.56 2 39 -github.com/luxfi/crypto/mldsa/mldsa.go:78.56,80.3 1 0 -github.com/luxfi/crypto/mldsa/mldsa.go:84.2,91.38 6 39 -github.com/luxfi/crypto/mldsa/mldsa.go:91.38,97.23 6 2319 -github.com/luxfi/crypto/mldsa/mldsa.go:97.23,99.4 1 0 -github.com/luxfi/crypto/mldsa/mldsa.go:100.3,100.30 1 2319 -github.com/luxfi/crypto/mldsa/mldsa.go:103.2,109.8 1 39 -github.com/luxfi/crypto/mldsa/mldsa.go:113.102,114.42 1 51 -github.com/luxfi/crypto/mldsa/mldsa.go:114.42,116.3 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:118.2,120.29 2 50 -github.com/luxfi/crypto/mldsa/mldsa.go:121.15,122.33 1 24 -github.com/luxfi/crypto/mldsa/mldsa.go:123.15,124.33 1 13 -github.com/luxfi/crypto/mldsa/mldsa.go:125.15,126.33 1 13 -github.com/luxfi/crypto/mldsa/mldsa.go:127.10,128.48 1 0 -github.com/luxfi/crypto/mldsa/mldsa.go:133.2,148.47 11 50 -github.com/luxfi/crypto/mldsa/mldsa.go:148.47,150.20 2 4985 -github.com/luxfi/crypto/mldsa/mldsa.go:150.20,152.4 1 50 -github.com/luxfi/crypto/mldsa/mldsa.go:153.3,155.24 3 4985 -github.com/luxfi/crypto/mldsa/mldsa.go:158.2,158.23 1 50 -github.com/luxfi/crypto/mldsa/mldsa.go:162.86,163.16 1 95 -github.com/luxfi/crypto/mldsa/mldsa.go:163.16,165.3 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:167.2,169.18 2 94 -github.com/luxfi/crypto/mldsa/mldsa.go:170.15,171.41 1 46 -github.com/luxfi/crypto/mldsa/mldsa.go:172.15,173.41 1 24 -github.com/luxfi/crypto/mldsa/mldsa.go:174.15,175.41 1 24 -github.com/luxfi/crypto/mldsa/mldsa.go:176.10,177.15 1 0 -github.com/luxfi/crypto/mldsa/mldsa.go:181.2,181.39 1 94 -github.com/luxfi/crypto/mldsa/mldsa.go:181.39,183.3 1 2 -github.com/luxfi/crypto/mldsa/mldsa.go:187.2,194.25 5 92 -github.com/luxfi/crypto/mldsa/mldsa.go:194.25,196.3 1 0 -github.com/luxfi/crypto/mldsa/mldsa.go:199.2,199.26 1 92 -github.com/luxfi/crypto/mldsa/mldsa.go:199.26,200.42 1 2479 -github.com/luxfi/crypto/mldsa/mldsa.go:200.42,202.4 1 15 -github.com/luxfi/crypto/mldsa/mldsa.go:205.2,205.13 1 77 -github.com/luxfi/crypto/mldsa/mldsa.go:209.31,210.11 1 24 -github.com/luxfi/crypto/mldsa/mldsa.go:211.15,212.21 1 8 -github.com/luxfi/crypto/mldsa/mldsa.go:213.15,214.21 1 8 -github.com/luxfi/crypto/mldsa/mldsa.go:215.15,216.21 1 8 -github.com/luxfi/crypto/mldsa/mldsa.go:217.10,218.19 1 0 -github.com/luxfi/crypto/mldsa/mldsa.go:223.43,228.2 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:231.41,236.2 1 2 -github.com/luxfi/crypto/mldsa/mldsa.go:239.45,240.49 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:240.49,242.3 1 0 -github.com/luxfi/crypto/mldsa/mldsa.go:243.2,243.21 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:247.44,248.49 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:248.49,250.3 1 0 -github.com/luxfi/crypto/mldsa/mldsa.go:251.2,251.21 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:255.46,259.2 1 3 -github.com/luxfi/crypto/mldsa/mldsa.go:261.39,262.14 1 5 -github.com/luxfi/crypto/mldsa/mldsa.go:263.15,264.31 1 2 -github.com/luxfi/crypto/mldsa/mldsa.go:265.15,266.31 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:267.15,268.31 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:269.10,270.11 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:274.38,275.14 1 6 -github.com/luxfi/crypto/mldsa/mldsa.go:276.15,277.30 1 3 -github.com/luxfi/crypto/mldsa/mldsa.go:278.15,279.30 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:280.15,281.30 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:282.10,283.11 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:288.38,290.2 1 16 -github.com/luxfi/crypto/mldsa/mldsa.go:293.40,295.2 1 16 -github.com/luxfi/crypto/mldsa/mldsa.go:298.69,301.14 2 3 -github.com/luxfi/crypto/mldsa/mldsa.go:302.15,303.38 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:304.15,305.38 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:306.15,307.38 1 1 -github.com/luxfi/crypto/mldsa/mldsa.go:308.10,309.48 1 0 -github.com/luxfi/crypto/mldsa/mldsa.go:312.2,312.31 1 3 -github.com/luxfi/crypto/mldsa/mldsa.go:312.31,314.3 1 0 -github.com/luxfi/crypto/mldsa/mldsa.go:317.2,323.8 3 3 -github.com/luxfi/crypto/mldsa/mldsa.go:327.71,330.14 2 3 -github.com/luxfi/crypto/mldsa/mldsa.go:331.15,333.41 2 1 -github.com/luxfi/crypto/mldsa/mldsa.go:334.15,336.41 2 1 -github.com/luxfi/crypto/mldsa/mldsa.go:337.15,339.41 2 1 -github.com/luxfi/crypto/mldsa/mldsa.go:340.10,341.48 1 0 -github.com/luxfi/crypto/mldsa/mldsa.go:344.2,344.35 1 3 -github.com/luxfi/crypto/mldsa/mldsa.go:344.35,346.3 1 0 -github.com/luxfi/crypto/mldsa/mldsa.go:349.2,360.43 8 3 -github.com/luxfi/crypto/mldsa/mldsa.go:360.43,366.28 6 183 -github.com/luxfi/crypto/mldsa/mldsa.go:366.28,368.4 1 0 -github.com/luxfi/crypto/mldsa/mldsa.go:369.3,369.29 1 183 -github.com/luxfi/crypto/mldsa/mldsa.go:372.2,378.8 1 3 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:14.26,16.3 1 2 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:21.26,23.3 1 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:27.42,29.21 2 6 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:29.21,31.3 1 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:32.2,32.19 1 5 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:36.37,37.38 1 6 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:37.38,39.3 1 5 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:43.75,46.14 2 7 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:47.15,49.38 2 2 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:50.15,52.38 2 2 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:53.15,55.38 2 2 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:56.10,57.48 1 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:61.2,61.17 1 6 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:61.17,63.3 1 3 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:66.2,70.56 4 3 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:70.56,72.3 1 0 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:75.2,84.8 3 3 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:88.59,96.29 6 3 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:96.29,98.22 2 183 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:98.22,101.4 2 183 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:101.9,103.9 2 0 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:106.3,106.20 1 183 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:106.20,111.4 4 180 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:116.111,119.29 2 3 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:120.15,121.33 1 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:122.15,123.33 1 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:124.15,125.33 1 1 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:126.10,127.48 1 0 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:131.2,152.36 14 3 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:152.36,154.20 2 320 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:154.20,156.4 1 3 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:157.3,158.20 2 320 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:158.20,163.4 4 317 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:167.2,169.20 3 3 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:180.61,182.22 2 3 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:182.22,184.17 2 15 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:184.17,186.4 1 0 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:187.3,187.16 1 15 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:190.2,193.8 1 3 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:197.67,198.34 1 6 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:198.34,200.3 1 3 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:202.2,207.26 4 3 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:207.26,209.20 2 15 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:209.20,212.18 3 15 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:212.18,215.5 2 0 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:216.4,216.25 1 15 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:220.2,223.29 2 3 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:223.29,224.17 1 15 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:224.17,226.4 1 0 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:229.2,229.24 1 3 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:233.88,234.70 1 9 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:234.70,236.3 1 3 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:238.2,242.26 3 6 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:242.26,244.20 2 30 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:244.20,247.4 2 30 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:250.2,252.21 2 6 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:264.65,270.2 1 3 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:273.71,281.42 5 9 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:281.42,284.3 2 3 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:285.2,289.16 3 6 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:289.16,291.3 1 0 -github.com/luxfi/crypto/mldsa/mldsa_optimized.go:293.2,297.17 4 6 diff --git a/mldsa/mldsa_cgo.go.bak b/mldsa/mldsa_cgo.go.bak deleted file mode 100644 index eff3b34..0000000 --- a/mldsa/mldsa_cgo.go.bak +++ /dev/null @@ -1,190 +0,0 @@ -// Copyright (C) 2025, Lux Industries Inc. All rights reserved. -// +build cgo - -// Package mldsa provides ML-DSA (FIPS 204) post-quantum signatures -// CGO implementation using pq-crystals/dilithium reference code - -package mldsa - -/* -#cgo CFLAGS: -I${SRCDIR}/c -I${SRCDIR}/c/ref -DDILITHIUM_MODE=3 -O3 -#cgo LDFLAGS: -L${SRCDIR}/c -lmldsa - -#include -#include -#include "api.h" -#include "sign.h" -#include "params.h" - -// Wrapper functions for cleaner Go interface -int mldsa_keypair(unsigned char *pk, unsigned char *sk) { - return crypto_sign_keypair(pk, sk); -} - -int mldsa_sign(unsigned char *sig, size_t *siglen, - const unsigned char *m, size_t mlen, - const unsigned char *sk) { - return crypto_sign_signature(sig, siglen, m, mlen, sk); -} - -int mldsa_verify(const unsigned char *sig, size_t siglen, - const unsigned char *m, size_t mlen, - const unsigned char *pk) { - return crypto_sign_verify(sig, siglen, m, mlen, pk); -} - -// Get sizes for different security levels -int mldsa_publickey_bytes(int mode) { - switch(mode) { - case 2: return 1312; // ML-DSA-44 (Dilithium2) - case 3: return 1952; // ML-DSA-65 (Dilithium3) - case 5: return 2592; // ML-DSA-87 (Dilithium5) - default: return 0; - } -} - -int mldsa_secretkey_bytes(int mode) { - switch(mode) { - case 2: return 2560; // ML-DSA-44 - case 3: return 4032; // ML-DSA-65 - case 5: return 4896; // ML-DSA-87 - default: return 0; - } -} - -int mldsa_signature_bytes(int mode) { - switch(mode) { - case 2: return 2420; // ML-DSA-44 - case 3: return 3309; // ML-DSA-65 - case 5: return 4627; // ML-DSA-87 - default: return 0; - } -} -*/ -import "C" -import ( - "crypto" - "errors" - "io" - "unsafe" -) - -// CGO-based implementation of ML-DSA -type cgoMLDSA struct { - mode Mode -} - -// GenerateKeyCGO generates a new ML-DSA key pair using C implementation -func GenerateKeyCGO(rand io.Reader, mode Mode) (*PrivateKey, error) { - // Get sizes for the chosen mode - var cMode C.int - switch mode { - case MLDSA44: - cMode = 2 - case MLDSA65: - cMode = 3 - case MLDSA87: - cMode = 5 - default: - return nil, errors.New("invalid ML-DSA mode") - } - - pkSize := int(C.mldsa_publickey_bytes(cMode)) - skSize := int(C.mldsa_secretkey_bytes(cMode)) - - if pkSize == 0 || skSize == 0 { - return nil, errors.New("invalid ML-DSA mode parameters") - } - - // Allocate memory for keys - pk := make([]byte, pkSize) - sk := make([]byte, skSize) - - // Generate key pair - ret := C.mldsa_keypair( - (*C.uchar)(unsafe.Pointer(&pk[0])), - (*C.uchar)(unsafe.Pointer(&sk[0])), - ) - - if ret != 0 { - return nil, errors.New("key generation failed") - } - - return &PrivateKey{ - PublicKey: PublicKey{ - mode: mode, - data: pk, - }, - data: sk, - }, nil -} - -// SignCGO signs a message using the C implementation -func SignCGO(priv *PrivateKey, rand io.Reader, message []byte, opts crypto.SignerOpts) ([]byte, error) { - var cMode C.int - switch priv.mode { - case MLDSA44: - cMode = 2 - case MLDSA65: - cMode = 3 - case MLDSA87: - cMode = 5 - default: - return nil, errors.New("invalid ML-DSA mode") - } - - sigSize := int(C.mldsa_signature_bytes(cMode)) - if sigSize == 0 { - return nil, errors.New("invalid signature size") - } - - // Allocate memory for signature - sig := make([]byte, sigSize) - var sigLen C.size_t - - // Sign the message - ret := C.mldsa_sign( - (*C.uchar)(unsafe.Pointer(&sig[0])), - &sigLen, - (*C.uchar)(unsafe.Pointer(&message[0])), - C.size_t(len(message)), - (*C.uchar)(unsafe.Pointer(&priv.data[0])), - ) - - if ret != 0 { - return nil, errors.New("signing failed") - } - - return sig[:sigLen], nil -} - -// VerifyCGO verifies a signature using the C implementation -func VerifyCGO(pub *PublicKey, message, signature []byte) bool { - var cMode C.int - switch pub.mode { - case MLDSA44: - cMode = 2 - case MLDSA65: - cMode = 3 - case MLDSA87: - cMode = 5 - default: - return false - } - - // Verify the signature - ret := C.mldsa_verify( - (*C.uchar)(unsafe.Pointer(&signature[0])), - C.size_t(len(signature)), - (*C.uchar)(unsafe.Pointer(&message[0])), - C.size_t(len(message)), - (*C.uchar)(unsafe.Pointer(&pub.data[0])), - ) - - return ret == 0 -} - -// UseCGO returns true if CGO implementation is available -func UseCGO() bool { - return true -} \ No newline at end of file diff --git a/mldsa/mldsa_placeholder.go.bak b/mldsa/mldsa_placeholder.go.bak deleted file mode 100644 index 5df30c0..0000000 --- a/mldsa/mldsa_placeholder.go.bak +++ /dev/null @@ -1,379 +0,0 @@ -// Copyright (C) 2025, Lux Industries Inc. All rights reserved. -// Package mldsa provides ML-DSA (FIPS 204) digital signature algorithm -// This is a placeholder implementation for CI testing - -package mldsa - -import ( - "crypto" - "crypto/sha256" - "errors" - "io" -) - -// Security parameters for ML-DSA (Module Lattice Digital Signature Algorithm) -const ( - // ML-DSA-44 (Level 2 security) - MLDSA44PublicKeySize = 1312 - MLDSA44PrivateKeySize = 2528 - MLDSA44SignatureSize = 2420 - - // ML-DSA-65 (Level 3 security) - MLDSA65PublicKeySize = 1952 - MLDSA65PrivateKeySize = 4000 - MLDSA65SignatureSize = 3293 - - // ML-DSA-87 (Level 5 security) - MLDSA87PublicKeySize = 2592 - MLDSA87PrivateKeySize = 4864 - MLDSA87SignatureSize = 4595 -) - -// Mode represents the ML-DSA parameter set -type Mode int - -const ( - MLDSA44 Mode = 2 // Level 2 - MLDSA65 Mode = 3 // Level 3 - MLDSA87 Mode = 5 // Level 5 -) - -// PublicKey represents an ML-DSA public key -type PublicKey struct { - mode Mode - data []byte -} - -// PrivateKey represents an ML-DSA private key -type PrivateKey struct { - PublicKey *PublicKey - data []byte -} - -// GenerateKey generates a new ML-DSA key pair -func GenerateKey(rand io.Reader, mode Mode) (*PrivateKey, error) { - var pubKeySize, privKeySize int - - switch mode { - case MLDSA44: - pubKeySize = MLDSA44PublicKeySize - privKeySize = MLDSA44PrivateKeySize - case MLDSA65: - pubKeySize = MLDSA65PublicKeySize - privKeySize = MLDSA65PrivateKeySize - case MLDSA87: - pubKeySize = MLDSA87PublicKeySize - privKeySize = MLDSA87PrivateKeySize - default: - return nil, errors.New("invalid ML-DSA mode") - } - - // Check for nil random source - if rand == nil { - return nil, errors.New("random source is nil") - } - - // Placeholder implementation - generate random private key - privBytes := make([]byte, privKeySize) - if _, err := io.ReadFull(rand, privBytes); err != nil { - return nil, err - } - - // Derive public key from private key for consistency - // In real ML-DSA, public key is derived from private key seed - h := sha256.New() - h.Write(privBytes[:32]) // Use first 32 bytes as seed - h.Write([]byte("public")) - pubSeed := h.Sum(nil) - - pubBytes := make([]byte, pubKeySize) - // Fill public key with deterministic data - for i := 0; i < pubKeySize; i += 32 { - h.Reset() - h.Write(pubSeed) - h.Write([]byte{byte(i / 32)}) - hash := h.Sum(nil) - end := i + 32 - if end > pubKeySize { - end = pubKeySize - } - copy(pubBytes[i:end], hash) - } - - return &PrivateKey{ - PublicKey: &PublicKey{ - mode: mode, - data: pubBytes, - }, - data: privBytes, - }, nil -} - -// Sign creates a signature for the given message -func (priv *PrivateKey) Sign(rand io.Reader, message []byte, opts crypto.SignerOpts) ([]byte, error) { - if priv == nil || priv.PublicKey == nil { - return nil, errors.New("private key is nil") - } - - var sigSize int - - switch priv.PublicKey.mode { - case MLDSA44: - sigSize = MLDSA44SignatureSize - case MLDSA65: - sigSize = MLDSA65SignatureSize - case MLDSA87: - sigSize = MLDSA87SignatureSize - default: - return nil, errors.New("invalid ML-DSA mode") - } - - // Placeholder: create deterministic signature that can be verified - // Start with hash of public key and message (what Verify expects) - h := sha256.New() - h.Write(priv.PublicKey.data) - h.Write(message) - hash := h.Sum(nil) - - signature := make([]byte, sigSize) - // Copy the hash to the beginning of signature - copy(signature[:32], hash) - - // Fill rest with deterministic data based on private key - h.Reset() - h.Write(priv.data) - h.Write(message) - privHash := h.Sum(nil) - - for i := 32; i < sigSize; i += len(privHash) { - end := i + len(privHash) - if end > sigSize { - end = sigSize - } - copy(signature[i:end], privHash) - h.Write(privHash) // Generate more data - privHash = h.Sum(nil) - } - - return signature, nil -} - -// Verify verifies a signature using the public key -func (pub *PublicKey) Verify(message, signature []byte, opts crypto.SignerOpts) bool { - if pub == nil { - return false - } - - var expectedSigSize int - - switch pub.mode { - case MLDSA44: - expectedSigSize = MLDSA44SignatureSize - case MLDSA65: - expectedSigSize = MLDSA65SignatureSize - case MLDSA87: - expectedSigSize = MLDSA87SignatureSize - default: - return false - } - - // Check signature size - if len(signature) != expectedSigSize { - return false - } - - // Placeholder verification: recompute expected signature based on public key and message - // In real implementation, this would use lattice-based verification - h := sha256.New() - h.Write(pub.data) - h.Write(message) - expectedSigStart := h.Sum(nil) - - // Check if first 32 bytes of signature match expected - // This is a simplified check for our placeholder - if len(signature) < 32 { - return false - } - - // Compare first 32 bytes - for i := 0; i < 32; i++ { - if signature[i] != expectedSigStart[i] { - return false - } - } - - return true -} - -// String returns the string representation of the mode -func (m Mode) String() string { - switch m { - case MLDSA44: - return "ML-DSA-44" - case MLDSA65: - return "ML-DSA-65" - case MLDSA87: - return "ML-DSA-87" - default: - return "Unknown" - } -} - -// NewPrivateKey creates a new private key with the given mode -func NewPrivateKey(mode Mode) *PrivateKey { - return &PrivateKey{ - PublicKey: NewPublicKey(mode), - data: make([]byte, getPrivateKeySize(mode)), - } -} - -// NewPublicKey creates a new public key with the given mode -func NewPublicKey(mode Mode) *PublicKey { - return &PublicKey{ - mode: mode, - data: make([]byte, getPublicKeySize(mode)), - } -} - -// SetBytes sets the key data from bytes -func (sk *PrivateKey) SetBytes(data []byte) { - if sk.data == nil || len(sk.data) != len(data) { - sk.data = make([]byte, len(data)) - } - copy(sk.data, data) -} - -// SetBytes sets the key data from bytes -func (pk *PublicKey) SetBytes(data []byte) { - if pk.data == nil || len(pk.data) != len(data) { - pk.data = make([]byte, len(data)) - } - copy(pk.data, data) -} - -// IsDeterministic returns whether the signature scheme is deterministic -func (sk *PrivateKey) IsDeterministic() bool { - // ML-DSA uses randomized signing by default - // Can be made deterministic by using nil rand - return false -} - -func getPrivateKeySize(mode Mode) int { - switch mode { - case MLDSA44: - return MLDSA44PrivateKeySize - case MLDSA65: - return MLDSA65PrivateKeySize - case MLDSA87: - return MLDSA87PrivateKeySize - default: - return 0 - } -} - -func getPublicKeySize(mode Mode) int { - switch mode { - case MLDSA44: - return MLDSA44PublicKeySize - case MLDSA65: - return MLDSA65PublicKeySize - case MLDSA87: - return MLDSA87PublicKeySize - default: - return 0 - } -} - -// Bytes returns the public key as bytes -func (pub *PublicKey) Bytes() []byte { - return pub.data -} - -// Bytes returns the private key as bytes -func (priv *PrivateKey) Bytes() []byte { - return priv.data -} - -// PublicKeyFromBytes reconstructs a public key from bytes -func PublicKeyFromBytes(data []byte, mode Mode) (*PublicKey, error) { - var expectedSize int - - switch mode { - case MLDSA44: - expectedSize = MLDSA44PublicKeySize - case MLDSA65: - expectedSize = MLDSA65PublicKeySize - case MLDSA87: - expectedSize = MLDSA87PublicKeySize - default: - return nil, errors.New("invalid ML-DSA mode") - } - - if len(data) != expectedSize { - return nil, errors.New("invalid public key size") - } - - // Make a copy of the data - pubData := make([]byte, expectedSize) - copy(pubData, data) - - return &PublicKey{ - mode: mode, - data: pubData, - }, nil -} - -// PrivateKeyFromBytes reconstructs a private key from bytes -func PrivateKeyFromBytes(data []byte, mode Mode) (*PrivateKey, error) { - var expectedPrivSize, expectedPubSize int - - switch mode { - case MLDSA44: - expectedPrivSize = MLDSA44PrivateKeySize - expectedPubSize = MLDSA44PublicKeySize - case MLDSA65: - expectedPrivSize = MLDSA65PrivateKeySize - expectedPubSize = MLDSA65PublicKeySize - case MLDSA87: - expectedPrivSize = MLDSA87PrivateKeySize - expectedPubSize = MLDSA87PublicKeySize - default: - return nil, errors.New("invalid ML-DSA mode") - } - - if len(data) != expectedPrivSize { - return nil, errors.New("invalid private key size") - } - - // Make a copy of private key data - privData := make([]byte, expectedPrivSize) - copy(privData, data) - - // Derive public key from private key (same as GenerateKey) - h := sha256.New() - h.Write(privData[:32]) // Use first 32 bytes as seed - h.Write([]byte("public")) - pubSeed := h.Sum(nil) - - pubData := make([]byte, expectedPubSize) - // Fill public key with deterministic data - for i := 0; i < expectedPubSize; i += 32 { - h.Reset() - h.Write(pubSeed) - h.Write([]byte{byte(i / 32)}) - hash := h.Sum(nil) - end := i + 32 - if end > expectedPubSize { - end = expectedPubSize - } - copy(pubData[i:end], hash) - } - - return &PrivateKey{ - PublicKey: &PublicKey{ - mode: mode, - data: pubData, - }, - data: privData, - }, nil -} diff --git a/mlkem.out b/mlkem.out deleted file mode 100644 index 5f02b11..0000000 --- a/mlkem.out +++ /dev/null @@ -1 +0,0 @@ -mode: set diff --git a/mlkem/coverage.out b/mlkem/coverage.out deleted file mode 100644 index dc90058..0000000 --- a/mlkem/coverage.out +++ /dev/null @@ -1,124 +0,0 @@ -mode: set -github.com/luxfi/crypto/mlkem/mlkem.go:62.70,65.14 2 1 -github.com/luxfi/crypto/mlkem/mlkem.go:66.16,68.39 2 1 -github.com/luxfi/crypto/mlkem/mlkem.go:69.16,71.39 2 1 -github.com/luxfi/crypto/mlkem/mlkem.go:72.17,74.40 2 1 -github.com/luxfi/crypto/mlkem/mlkem.go:75.10,76.48 1 1 -github.com/luxfi/crypto/mlkem/mlkem.go:80.2,80.17 1 1 -github.com/luxfi/crypto/mlkem/mlkem.go:80.17,82.3 1 1 -github.com/luxfi/crypto/mlkem/mlkem.go:85.2,86.56 2 1 -github.com/luxfi/crypto/mlkem/mlkem.go:86.56,88.3 1 0 -github.com/luxfi/crypto/mlkem/mlkem.go:91.2,98.38 6 1 -github.com/luxfi/crypto/mlkem/mlkem.go:98.38,104.23 6 1 -github.com/luxfi/crypto/mlkem/mlkem.go:104.23,106.4 1 0 -github.com/luxfi/crypto/mlkem/mlkem.go:107.3,107.30 1 1 -github.com/luxfi/crypto/mlkem/mlkem.go:110.2,116.8 1 1 -github.com/luxfi/crypto/mlkem/mlkem.go:120.81,121.16 1 1 -github.com/luxfi/crypto/mlkem/mlkem.go:121.16,123.3 1 1 -github.com/luxfi/crypto/mlkem/mlkem.go:125.2,127.18 2 1 -github.com/luxfi/crypto/mlkem/mlkem.go:128.16,129.34 1 1 -github.com/luxfi/crypto/mlkem/mlkem.go:130.16,131.34 1 1 -github.com/luxfi/crypto/mlkem/mlkem.go:132.17,133.35 1 1 -github.com/luxfi/crypto/mlkem/mlkem.go:134.10,135.48 1 0 -github.com/luxfi/crypto/mlkem/mlkem.go:139.2,140.49 2 1 -github.com/luxfi/crypto/mlkem/mlkem.go:140.49,142.3 1 0 -github.com/luxfi/crypto/mlkem/mlkem.go:146.2,157.8 5 1 -github.com/luxfi/crypto/mlkem/mlkem.go:161.72,162.17 1 1 -github.com/luxfi/crypto/mlkem/mlkem.go:162.17,164.3 1 1 -github.com/luxfi/crypto/mlkem/mlkem.go:166.2,168.29 2 1 -github.com/luxfi/crypto/mlkem/mlkem.go:169.16,170.42 1 1 -github.com/luxfi/crypto/mlkem/mlkem.go:171.16,172.42 1 1 -github.com/luxfi/crypto/mlkem/mlkem.go:173.17,174.43 1 1 -github.com/luxfi/crypto/mlkem/mlkem.go:175.10,176.48 1 0 -github.com/luxfi/crypto/mlkem/mlkem.go:179.2,179.39 1 1 -github.com/luxfi/crypto/mlkem/mlkem.go:179.39,181.3 1 1 -github.com/luxfi/crypto/mlkem/mlkem.go:186.2,191.16 5 1 -github.com/luxfi/crypto/mlkem/mlkem.go:195.38,197.2 1 1 -github.com/luxfi/crypto/mlkem/mlkem.go:200.40,202.2 1 1 -github.com/luxfi/crypto/mlkem/mlkem.go:205.69,208.14 2 1 -github.com/luxfi/crypto/mlkem/mlkem.go:209.16,210.39 1 1 -github.com/luxfi/crypto/mlkem/mlkem.go:211.16,212.39 1 1 -github.com/luxfi/crypto/mlkem/mlkem.go:213.17,214.40 1 1 -github.com/luxfi/crypto/mlkem/mlkem.go:215.10,216.48 1 0 -github.com/luxfi/crypto/mlkem/mlkem.go:219.2,219.31 1 1 -github.com/luxfi/crypto/mlkem/mlkem.go:219.31,221.3 1 1 -github.com/luxfi/crypto/mlkem/mlkem.go:223.2,226.8 1 1 -github.com/luxfi/crypto/mlkem/mlkem.go:230.71,233.14 2 1 -github.com/luxfi/crypto/mlkem/mlkem.go:234.16,236.42 2 1 -github.com/luxfi/crypto/mlkem/mlkem.go:237.16,239.42 2 1 -github.com/luxfi/crypto/mlkem/mlkem.go:240.17,242.43 2 1 -github.com/luxfi/crypto/mlkem/mlkem.go:243.10,244.48 1 0 -github.com/luxfi/crypto/mlkem/mlkem.go:247.2,247.35 1 1 -github.com/luxfi/crypto/mlkem/mlkem.go:247.35,249.3 1 1 -github.com/luxfi/crypto/mlkem/mlkem.go:253.2,260.43 6 1 -github.com/luxfi/crypto/mlkem/mlkem.go:260.43,266.28 6 1 -github.com/luxfi/crypto/mlkem/mlkem.go:266.28,268.4 1 0 -github.com/luxfi/crypto/mlkem/mlkem.go:269.3,269.29 1 1 -github.com/luxfi/crypto/mlkem/mlkem.go:272.2,278.8 1 1 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:13.26,15.3 1 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:19.33,21.21 2 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:21.21,23.3 1 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:24.2,24.19 1 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:28.28,29.40 1 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:29.40,31.3 1 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:35.79,38.14 2 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:39.16,41.39 2 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:42.16,44.39 2 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:45.17,47.40 2 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:48.10,49.48 1 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:53.2,57.56 4 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:57.56,59.3 1 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:62.2,71.8 3 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:75.59,83.29 6 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:83.29,85.22 2 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:85.22,88.4 2 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:88.9,90.9 2 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:93.3,93.20 1 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:93.20,98.4 4 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:109.61,111.22 2 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:111.22,113.17 2 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:113.17,115.4 1 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:116.3,116.16 1 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:119.2,122.8 1 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:126.85,133.24 4 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:133.24,135.20 2 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:135.20,138.18 3 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:138.18,141.5 2 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:142.4,142.25 1 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:146.2,149.29 2 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:149.29,150.17 1 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:150.17,152.4 1 0 -github.com/luxfi/crypto/mlkem/mlkem_optimized.go:155.2,155.21 1 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:11.75,13.60 1 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:13.60,15.3 1 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:17.2,17.86 1 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:17.86,19.3 1 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:22.2,26.16 3 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:26.16,28.3 1 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:31.2,40.8 3 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:44.59,45.14 1 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:46.16,47.55 1 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:48.16,49.55 1 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:50.17,51.57 1 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:52.10,53.14 1 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:58.39,59.14 1 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:60.16,61.32 1 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:62.16,63.32 1 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:64.17,65.33 1 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:66.10,67.11 1 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:72.86,73.60 1 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:73.60,75.3 1 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:77.2,78.17 2 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:78.17,80.3 1 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:83.2,84.16 2 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:84.16,86.3 1 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:89.2,94.8 2 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:98.75,100.90 2 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:100.90,102.3 1 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:105.2,107.26 2 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:111.83,112.80 1 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:112.80,117.3 3 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:120.2,122.20 3 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:126.86,127.81 1 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:127.81,129.3 1 0 -github.com/luxfi/crypto/mlkem/mlkem_refactored.go:132.2,134.20 3 0 diff --git a/mlkem/mlkem_cgo.go.bak b/mlkem/mlkem_cgo.go.bak deleted file mode 100644 index 1bfb19a..0000000 --- a/mlkem/mlkem_cgo.go.bak +++ /dev/null @@ -1,248 +0,0 @@ -// Copyright (C) 2025, Lux Industries Inc. All rights reserved. -// +build cgo - -// Package mlkem provides ML-KEM (FIPS 203) post-quantum key encapsulation -// CGO implementation using pq-crystals/kyber reference code - -package mlkem - -/* -#cgo CFLAGS: -I${SRCDIR}/c -I${SRCDIR}/c/ref -O3 -#cgo LDFLAGS: -L${SRCDIR}/c -lmlkem - -#include -#include - -// Kyber/ML-KEM parameter sets -#define KYBER512_PUBLICKEYBYTES 800 -#define KYBER512_SECRETKEYBYTES 1632 -#define KYBER512_CIPHERTEXTBYTES 768 -#define KYBER512_BYTES 32 - -#define KYBER768_PUBLICKEYBYTES 1184 -#define KYBER768_SECRETKEYBYTES 2400 -#define KYBER768_CIPHERTEXTBYTES 1088 -#define KYBER768_BYTES 32 - -#define KYBER1024_PUBLICKEYBYTES 1568 -#define KYBER1024_SECRETKEYBYTES 3168 -#define KYBER1024_CIPHERTEXTBYTES 1568 -#define KYBER1024_BYTES 32 - -// Function declarations (would come from kyber headers) -int crypto_kem_keypair_512(unsigned char *pk, unsigned char *sk); -int crypto_kem_enc_512(unsigned char *ct, unsigned char *ss, const unsigned char *pk); -int crypto_kem_dec_512(unsigned char *ss, const unsigned char *ct, const unsigned char *sk); - -int crypto_kem_keypair_768(unsigned char *pk, unsigned char *sk); -int crypto_kem_enc_768(unsigned char *ct, unsigned char *ss, const unsigned char *pk); -int crypto_kem_dec_768(unsigned char *ss, const unsigned char *ct, const unsigned char *sk); - -int crypto_kem_keypair_1024(unsigned char *pk, unsigned char *sk); -int crypto_kem_enc_1024(unsigned char *ct, unsigned char *ss, const unsigned char *pk); -int crypto_kem_dec_1024(unsigned char *ss, const unsigned char *ct, const unsigned char *sk); - -// Wrapper functions for cleaner Go interface -int mlkem_keypair(unsigned char *pk, unsigned char *sk, int mode) { - switch(mode) { - case 512: return crypto_kem_keypair_512(pk, sk); - case 768: return crypto_kem_keypair_768(pk, sk); - case 1024: return crypto_kem_keypair_1024(pk, sk); - default: return -1; - } -} - -int mlkem_encapsulate(unsigned char *ct, unsigned char *ss, const unsigned char *pk, int mode) { - switch(mode) { - case 512: return crypto_kem_enc_512(ct, ss, pk); - case 768: return crypto_kem_enc_768(ct, ss, pk); - case 1024: return crypto_kem_enc_1024(ct, ss, pk); - default: return -1; - } -} - -int mlkem_decapsulate(unsigned char *ss, const unsigned char *ct, const unsigned char *sk, int mode) { - switch(mode) { - case 512: return crypto_kem_dec_512(ss, ct, sk); - case 768: return crypto_kem_dec_768(ss, ct, sk); - case 1024: return crypto_kem_dec_1024(ss, ct, sk); - default: return -1; - } -} - -// Get sizes for different security levels -int mlkem_publickey_bytes(int mode) { - switch(mode) { - case 512: return KYBER512_PUBLICKEYBYTES; - case 768: return KYBER768_PUBLICKEYBYTES; - case 1024: return KYBER1024_PUBLICKEYBYTES; - default: return 0; - } -} - -int mlkem_secretkey_bytes(int mode) { - switch(mode) { - case 512: return KYBER512_SECRETKEYBYTES; - case 768: return KYBER768_SECRETKEYBYTES; - case 1024: return KYBER1024_SECRETKEYBYTES; - default: return 0; - } -} - -int mlkem_ciphertext_bytes(int mode) { - switch(mode) { - case 512: return KYBER512_CIPHERTEXTBYTES; - case 768: return KYBER768_CIPHERTEXTBYTES; - case 1024: return KYBER1024_CIPHERTEXTBYTES; - default: return 0; - } -} - -int mlkem_sharedsecret_bytes(int mode) { - switch(mode) { - case 512: return KYBER512_BYTES; - case 768: return KYBER768_BYTES; - case 1024: return KYBER1024_BYTES; - default: return 0; - } -} -*/ -import "C" -import ( - "errors" - "io" - "unsafe" -) - -// CGO-based implementation of ML-KEM - -// GenerateKeyPairCGO generates a new ML-KEM key pair using C implementation -func GenerateKeyPairCGO(rand io.Reader, mode Mode) (*PrivateKey, error) { - // Map mode to C parameter - var cMode C.int - switch mode { - case MLKEM512: - cMode = 512 - case MLKEM768: - cMode = 768 - case MLKEM1024: - cMode = 1024 - default: - return nil, errors.New("invalid ML-KEM mode") - } - - pkSize := int(C.mlkem_publickey_bytes(cMode)) - skSize := int(C.mlkem_secretkey_bytes(cMode)) - - if pkSize == 0 || skSize == 0 { - return nil, errors.New("invalid ML-KEM mode parameters") - } - - // Allocate memory for keys - pk := make([]byte, pkSize) - sk := make([]byte, skSize) - - // Generate key pair - ret := C.mlkem_keypair( - (*C.uchar)(unsafe.Pointer(&pk[0])), - (*C.uchar)(unsafe.Pointer(&sk[0])), - cMode, - ) - - if ret != 0 { - return nil, errors.New("key generation failed") - } - - return &PrivateKey{ - PublicKey: PublicKey{ - mode: mode, - data: pk, - }, - data: sk, - }, nil -} - -// EncapsulateCGO generates a shared secret and ciphertext using the C implementation -func EncapsulateCGO(pub *PublicKey, rand io.Reader) (*EncapsulationResult, error) { - var cMode C.int - switch pub.mode { - case MLKEM512: - cMode = 512 - case MLKEM768: - cMode = 768 - case MLKEM1024: - cMode = 1024 - default: - return nil, errors.New("invalid ML-KEM mode") - } - - ctSize := int(C.mlkem_ciphertext_bytes(cMode)) - ssSize := int(C.mlkem_sharedsecret_bytes(cMode)) - - if ctSize == 0 || ssSize == 0 { - return nil, errors.New("invalid parameters") - } - - // Allocate memory - ct := make([]byte, ctSize) - ss := make([]byte, ssSize) - - // Encapsulate - ret := C.mlkem_encapsulate( - (*C.uchar)(unsafe.Pointer(&ct[0])), - (*C.uchar)(unsafe.Pointer(&ss[0])), - (*C.uchar)(unsafe.Pointer(&pub.data[0])), - cMode, - ) - - if ret != 0 { - return nil, errors.New("encapsulation failed") - } - - return &EncapsulationResult{ - Ciphertext: ct, - SharedSecret: ss, - }, nil -} - -// DecapsulateCGO recovers the shared secret using the C implementation -func DecapsulateCGO(priv *PrivateKey, ciphertext []byte) ([]byte, error) { - var cMode C.int - switch priv.mode { - case MLKEM512: - cMode = 512 - case MLKEM768: - cMode = 768 - case MLKEM1024: - cMode = 1024 - default: - return nil, errors.New("invalid ML-KEM mode") - } - - ssSize := int(C.mlkem_sharedsecret_bytes(cMode)) - if ssSize == 0 { - return nil, errors.New("invalid parameters") - } - - // Allocate memory for shared secret - ss := make([]byte, ssSize) - - // Decapsulate - ret := C.mlkem_decapsulate( - (*C.uchar)(unsafe.Pointer(&ss[0])), - (*C.uchar)(unsafe.Pointer(&ciphertext[0])), - (*C.uchar)(unsafe.Pointer(&priv.data[0])), - cMode, - ) - - if ret != 0 { - return nil, errors.New("decapsulation failed") - } - - return ss, nil -} - -// UseCGO returns true if CGO implementation is available -func UseCGO() bool { - return true -} \ No newline at end of file diff --git a/mlkem/mlkem_placeholder.go.bak b/mlkem/mlkem_placeholder.go.bak deleted file mode 100644 index ea7a489..0000000 --- a/mlkem/mlkem_placeholder.go.bak +++ /dev/null @@ -1,279 +0,0 @@ -// Copyright (C) 2025, Lux Industries Inc. All rights reserved. -// Package mlkem provides ML-KEM (FIPS 203) key encapsulation mechanism -// This is a placeholder implementation for CI testing - -package mlkem - -import ( - "crypto/sha256" - "errors" - "io" -) - -// Security parameters for ML-KEM (Module Lattice Key Encapsulation Mechanism) -const ( - // ML-KEM-512 (Level 1 security) - MLKEM512PublicKeySize = 800 - MLKEM512PrivateKeySize = 1632 - MLKEM512CiphertextSize = 768 - MLKEM512SharedSecretSize = 32 - - // ML-KEM-768 (Level 3 security) - MLKEM768PublicKeySize = 1184 - MLKEM768PrivateKeySize = 2400 - MLKEM768CiphertextSize = 1088 - MLKEM768SharedSecretSize = 32 - - // ML-KEM-1024 (Level 5 security) - MLKEM1024PublicKeySize = 1568 - MLKEM1024PrivateKeySize = 3168 - MLKEM1024CiphertextSize = 1568 - MLKEM1024SharedSecretSize = 32 -) - -// Mode represents the ML-KEM parameter set -type Mode int - -const ( - MLKEM512 Mode = iota + 1 - MLKEM768 - MLKEM1024 -) - -// PublicKey represents an ML-KEM public key -type PublicKey struct { - mode Mode - data []byte -} - -// PrivateKey represents an ML-KEM private key -type PrivateKey struct { - PublicKey PublicKey - data []byte -} - -// EncapsulationResult contains the ciphertext and shared secret -type EncapsulationResult struct { - Ciphertext []byte - SharedSecret []byte -} - -// GenerateKeyPair generates a new ML-KEM key pair -func GenerateKeyPair(rand io.Reader, mode Mode) (*PrivateKey, error) { - var pubKeySize, privKeySize int - - switch mode { - case MLKEM512: - pubKeySize = MLKEM512PublicKeySize - privKeySize = MLKEM512PrivateKeySize - case MLKEM768: - pubKeySize = MLKEM768PublicKeySize - privKeySize = MLKEM768PrivateKeySize - case MLKEM1024: - pubKeySize = MLKEM1024PublicKeySize - privKeySize = MLKEM1024PrivateKeySize - default: - return nil, errors.New("invalid ML-KEM mode") - } - - // Check for nil random source - if rand == nil { - return nil, errors.New("random source is nil") - } - - // Placeholder implementation - generate random private key - privBytes := make([]byte, privKeySize) - if _, err := io.ReadFull(rand, privBytes); err != nil { - return nil, err - } - - // Derive public key from private key deterministically - h := sha256.New() - h.Write(privBytes[:32]) // Use first 32 bytes as seed - h.Write([]byte("public")) - pubSeed := h.Sum(nil) - - pubBytes := make([]byte, pubKeySize) - // Fill public key with deterministic data - for i := 0; i < pubKeySize; i += 32 { - h.Reset() - h.Write(pubSeed) - h.Write([]byte{byte(i / 32)}) - hash := h.Sum(nil) - end := i + 32 - if end > pubKeySize { - end = pubKeySize - } - copy(pubBytes[i:end], hash) - } - - return &PrivateKey{ - PublicKey: PublicKey{ - mode: mode, - data: pubBytes, - }, - data: privBytes, - }, nil -} - -// Encapsulate generates a shared secret and ciphertext -func (pub *PublicKey) Encapsulate(rand io.Reader) (*EncapsulationResult, error) { - if pub == nil { - return nil, errors.New("public key is nil") - } - - var ctSize int - - switch pub.mode { - case MLKEM512: - ctSize = MLKEM512CiphertextSize - case MLKEM768: - ctSize = MLKEM768CiphertextSize - case MLKEM1024: - ctSize = MLKEM1024CiphertextSize - default: - return nil, errors.New("invalid ML-KEM mode") - } - - // Placeholder: generate random ciphertext - ct := make([]byte, ctSize) - if _, err := io.ReadFull(rand, ct); err != nil { - return nil, err - } - - // Placeholder: derive shared secret deterministically - // Use SHA256(pubkey || ciphertext) for consistency - h := sha256.New() - h.Write(pub.data) - h.Write(ct) - ss := h.Sum(nil) - - // Store the ciphertext hash for later decapsulation - // In real implementation, this would be proper KEM - - return &EncapsulationResult{ - Ciphertext: ct, - SharedSecret: ss, - }, nil -} - -// Decapsulate recovers the shared secret from ciphertext -func (priv *PrivateKey) Decapsulate(ciphertext []byte) ([]byte, error) { - if priv == nil { - return nil, errors.New("private key is nil") - } - - var expectedCtSize int - - switch priv.PublicKey.mode { - case MLKEM512: - expectedCtSize = MLKEM512CiphertextSize - case MLKEM768: - expectedCtSize = MLKEM768CiphertextSize - case MLKEM1024: - expectedCtSize = MLKEM1024CiphertextSize - default: - return nil, errors.New("invalid ML-KEM mode") - } - - if len(ciphertext) != expectedCtSize { - return nil, errors.New("invalid ciphertext size") - } - - // Placeholder: derive shared secret deterministically - // Use same formula as Encapsulate: SHA256(pubkey || ciphertext) - // This ensures matching shared secrets - h := sha256.New() - h.Write(priv.PublicKey.data) - h.Write(ciphertext) - ss := h.Sum(nil) - - return ss, nil -} - -// Bytes returns the public key as bytes -func (pub *PublicKey) Bytes() []byte { - return pub.data -} - -// Bytes returns the private key as bytes -func (priv *PrivateKey) Bytes() []byte { - return priv.data -} - -// PublicKeyFromBytes reconstructs a public key from bytes -func PublicKeyFromBytes(data []byte, mode Mode) (*PublicKey, error) { - var expectedSize int - - switch mode { - case MLKEM512: - expectedSize = MLKEM512PublicKeySize - case MLKEM768: - expectedSize = MLKEM768PublicKeySize - case MLKEM1024: - expectedSize = MLKEM1024PublicKeySize - default: - return nil, errors.New("invalid ML-KEM mode") - } - - if len(data) != expectedSize { - return nil, errors.New("invalid public key size") - } - - return &PublicKey{ - mode: mode, - data: data, - }, nil -} - -// PrivateKeyFromBytes reconstructs a private key from bytes -func PrivateKeyFromBytes(data []byte, mode Mode) (*PrivateKey, error) { - var expectedPrivSize, expectedPubSize int - - switch mode { - case MLKEM512: - expectedPrivSize = MLKEM512PrivateKeySize - expectedPubSize = MLKEM512PublicKeySize - case MLKEM768: - expectedPrivSize = MLKEM768PrivateKeySize - expectedPubSize = MLKEM768PublicKeySize - case MLKEM1024: - expectedPrivSize = MLKEM1024PrivateKeySize - expectedPubSize = MLKEM1024PublicKeySize - default: - return nil, errors.New("invalid ML-KEM mode") - } - - if len(data) != expectedPrivSize { - return nil, errors.New("invalid private key size") - } - - // For placeholder: derive public key from private key deterministically - // Use first part of private key as seed for public key - h := sha256.New() - h.Write(data[:32]) // Use first 32 bytes as seed - h.Write([]byte("public")) - pubSeed := h.Sum(nil) - - pubData := make([]byte, expectedPubSize) - // Fill public key with deterministic data - for i := 0; i < expectedPubSize; i += 32 { - h.Reset() - h.Write(pubSeed) - h.Write([]byte{byte(i / 32)}) - hash := h.Sum(nil) - end := i + 32 - if end > expectedPubSize { - end = expectedPubSize - } - copy(pubData[i:end], hash) - } - - return &PrivateKey{ - PublicKey: PublicKey{ - mode: mode, - data: pubData, - }, - data: data, - }, nil -} diff --git a/postquantum_test.go.bak b/postquantum_test.go.bak deleted file mode 100644 index 2a49869..0000000 --- a/postquantum_test.go.bak +++ /dev/null @@ -1,288 +0,0 @@ -// Copyright (C) 2025, Lux Industries Inc. All rights reserved. -// Comprehensive tests for FIPS 203/204/205 post-quantum cryptography - -package crypto - -import ( - "crypto/rand" - "testing" - "time" - - "github.com/luxfi/crypto/mldsa" - "github.com/luxfi/crypto/mlkem" - "github.com/luxfi/crypto/slhdsa" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" -) - -// TestMLKEM tests ML-KEM (FIPS 203) key encapsulation -func TestMLKEM(t *testing.T) { - modes := []mlkem.Mode{mlkem.MLKEM512, mlkem.MLKEM768, mlkem.MLKEM1024} - names := []string{"ML-KEM-512", "ML-KEM-768", "ML-KEM-1024"} - - for i, mode := range modes { - t.Run(names[i], func(t *testing.T) { - // Generate key pair - priv, err := mlkem.GenerateKeyPair(rand.Reader, mode) - require.NoError(t, err) - - // Encapsulate - result, err := priv.PublicKey.Encapsulate(rand.Reader) - require.NoError(t, err) - - // Decapsulate - sharedSecret, err := priv.Decapsulate(result.Ciphertext) - require.NoError(t, err) - - // Verify shared secrets match - assert.Equal(t, result.SharedSecret, sharedSecret) - - // Test wrong ciphertext - wrongCT := make([]byte, len(result.Ciphertext)) - copy(wrongCT, result.Ciphertext) - wrongCT[0] ^= 0xFF - - wrongSecret, err := priv.Decapsulate(wrongCT) - // ML-KEM has implicit rejection, so no error but different secret - assert.NoError(t, err) - assert.NotEqual(t, sharedSecret, wrongSecret) - }) - } -} - -// TestMLDSA tests ML-DSA (FIPS 204) digital signatures -func TestMLDSA(t *testing.T) { - modes := []mldsa.Mode{mldsa.MLDSA44, mldsa.MLDSA65, mldsa.MLDSA87} - names := []string{"ML-DSA-44", "ML-DSA-65", "ML-DSA-87"} - - message := []byte("Post-quantum signature test message") - - for i, mode := range modes { - t.Run(names[i], func(t *testing.T) { - // Generate key pair - priv, err := mldsa.GenerateKey(rand.Reader, mode) - require.NoError(t, err) - - // Sign message - signature, err := priv.Sign(rand.Reader, message, nil) - require.NoError(t, err) - - // Verify signature - valid := priv.PublicKey.Verify(message, signature, nil) - assert.True(t, valid) - - // Test wrong message - wrongMsg := []byte("Wrong message") - assert.False(t, priv.PublicKey.Verify(wrongMsg, signature, nil)) - - // Test corrupted signature - corruptedSig := make([]byte, len(signature)) - copy(corruptedSig, signature) - corruptedSig[0] ^= 0xFF - assert.False(t, priv.PublicKey.Verify(message, corruptedSig, nil)) - }) - } -} - -// TestSLHDSA tests SLH-DSA (FIPS 205) hash-based signatures -func TestSLHDSA(t *testing.T) { - // Test only small/fast variants for speed - modes := []slhdsa.Mode{slhdsa.SLHDSA128s, slhdsa.SLHDSA128f} - names := []string{"SLH-DSA-128s", "SLH-DSA-128f"} - - message := []byte("Stateless hash-based signature test") - - for i, mode := range modes { - t.Run(names[i], func(t *testing.T) { - // Generate key pair - priv, err := slhdsa.GenerateKey(rand.Reader, mode) - require.NoError(t, err) - - // Sign message - signature, err := priv.Sign(rand.Reader, message, nil) - require.NoError(t, err) - - // Verify signature - valid := priv.PublicKey.Verify(message, signature, nil) - assert.True(t, valid) - - // Test stateless property - same signature for same message - signature2, err := priv.Sign(rand.Reader, message, nil) - require.NoError(t, err) - assert.Equal(t, signature, signature2, "SLH-DSA should be deterministic") - - // Test wrong message - wrongMsg := []byte("Wrong message") - assert.False(t, priv.PublicKey.Verify(wrongMsg, signature, nil)) - }) - } -} - -// TestPerformance tests performance of pure Go implementations -func TestPerformance(t *testing.T) { - t.Run("ML-KEM Performance", func(t *testing.T) { - // Benchmark pure Go implementation - priv, _ := mlkem.GenerateKeyPair(rand.Reader, mlkem.MLKEM768) - - // Encapsulation benchmark - start := time.Now() - for i := 0; i < 100; i++ { - priv.PublicKey.Encapsulate(rand.Reader) - } - duration := time.Since(start) - - t.Logf("ML-KEM-768 Encapsulate (100 ops): %v", duration) - assert.Less(t, duration, 5*time.Second, "Should complete 100 encapsulations in under 5 seconds") - }) - - t.Run("ML-DSA Performance", func(t *testing.T) { - message := make([]byte, 32) - rand.Read(message) - - // Benchmark pure Go implementation - priv, _ := mldsa.GenerateKey(rand.Reader, mldsa.MLDSA65) - - // Signing benchmark - start := time.Now() - for i := 0; i < 100; i++ { - priv.Sign(rand.Reader, message, nil) - } - duration := time.Since(start) - - t.Logf("ML-DSA-65 Sign (100 ops): %v", duration) - assert.Less(t, duration, 5*time.Second, "Should complete 100 signatures in under 5 seconds") - }) - - t.Run("SLH-DSA Performance", func(t *testing.T) { - message := make([]byte, 32) - rand.Read(message) - - // Benchmark pure Go implementation - priv, _ := slhdsa.GenerateKey(rand.Reader, slhdsa.SLHDSA128f) - - start := time.Now() - for i := 0; i < 10; i++ { - priv.Sign(rand.Reader, message, nil) - } - duration := time.Since(start) - - t.Logf("SLH-DSA-128f Sign (10 ops): %v", duration) - }) -} - -// TestHybridCrypto tests combining classical and post-quantum crypto -func TestHybridCrypto(t *testing.T) { - t.Run("Hybrid Key Exchange", func(t *testing.T) { - // Classical ECDH (placeholder) - classicalSecret := make([]byte, 32) - rand.Read(classicalSecret) - - // Post-quantum ML-KEM - priv, _ := mlkem.GenerateKeyPair(rand.Reader, mlkem.MLKEM768) - result, _ := priv.PublicKey.Encapsulate(rand.Reader) - pqSecret, _ := priv.Decapsulate(result.Ciphertext) - - // Combine secrets (simplified - use proper KDF in production) - hybridSecret := make([]byte, 64) - copy(hybridSecret[:32], classicalSecret) - copy(hybridSecret[32:], pqSecret) - - assert.Len(t, hybridSecret, 64) - }) - - t.Run("Hybrid Signatures", func(t *testing.T) { - message := []byte("Hybrid signature test") - - // Classical ECDSA (placeholder) - classicalSig := make([]byte, 64) - rand.Read(classicalSig) - - // Post-quantum ML-DSA - priv, _ := mldsa.GenerateKey(rand.Reader, mldsa.MLDSA65) - pqSig, _ := priv.Sign(rand.Reader, message, nil) - - // Combine signatures - _ = append(classicalSig, pqSig...) // hybridSig would be used in production - - // Verify both - // Classical verification (placeholder - would be ECDSA) - classicalValid := true - - // PQ verification - pqValid := priv.PublicKey.Verify(message, pqSig, nil) - - // Both must be valid - assert.True(t, classicalValid && pqValid) - }) -} - -// BenchmarkPostQuantum benchmarks all three standards -func BenchmarkPostQuantum(b *testing.B) { - b.Run("ML-KEM-768", func(b *testing.B) { - priv, _ := mlkem.GenerateKeyPair(rand.Reader, mlkem.MLKEM768) - - b.Run("Encapsulate", func(b *testing.B) { - for i := 0; i < b.N; i++ { - priv.PublicKey.Encapsulate(rand.Reader) - } - }) - - result, _ := priv.PublicKey.Encapsulate(rand.Reader) - b.Run("Decapsulate", func(b *testing.B) { - for i := 0; i < b.N; i++ { - priv.Decapsulate(result.Ciphertext) - } - }) - }) - - b.Run("ML-DSA-65", func(b *testing.B) { - priv, _ := mldsa.GenerateKey(rand.Reader, mldsa.MLDSA65) - message := make([]byte, 32) - - b.Run("Sign", func(b *testing.B) { - for i := 0; i < b.N; i++ { - priv.Sign(rand.Reader, message, nil) - } - }) - - sig, _ := priv.Sign(rand.Reader, message, nil) - b.Run("Verify", func(b *testing.B) { - for i := 0; i < b.N; i++ { - priv.PublicKey.Verify(message, sig, nil) - } - }) - }) - - b.Run("SLH-DSA-128f", func(b *testing.B) { - priv, _ := slhdsa.GenerateKey(rand.Reader, slhdsa.SLHDSA128f) - message := make([]byte, 32) - - b.Run("Sign", func(b *testing.B) { - for i := 0; i < b.N; i++ { - priv.Sign(rand.Reader, message, nil) - } - }) - - sig, _ := priv.Sign(rand.Reader, message, nil) - b.Run("Verify", func(b *testing.B) { - for i := 0; i < b.N; i++ { - priv.PublicKey.Verify(message, sig, nil) - } - }) - }) -} - -// TestSizesAndParameters verifies all parameter sizes match FIPS specifications -func TestSizesAndParameters(t *testing.T) { - // ML-KEM sizes (FIPS 203) - assert.Equal(t, 1184, mlkem.MLKEM768PublicKeySize) - assert.Equal(t, 1088, mlkem.MLKEM768CiphertextSize) - - // ML-DSA sizes (FIPS 204) - assert.Equal(t, 1952, mldsa.MLDSA65PublicKeySize) - assert.Equal(t, 3293, mldsa.MLDSA65SignatureSize) - - // SLH-DSA sizes (FIPS 205) - placeholder values - // These would be the actual values once full implementation is done - t.Skip("SLH-DSA constants not yet defined") -} diff --git a/precompile/corona.go.bak b/precompile/corona.go.bak deleted file mode 100644 index 25001f5..0000000 --- a/precompile/corona.go.bak +++ /dev/null @@ -1,463 +0,0 @@ -// Copyright (C) 2025, Lux Industries Inc. All rights reserved. -// Corona post-quantum ring signature precompiled contracts -// Based on lattice cryptography for privacy-preserving quantum-resistant signatures - -package precompile - -import ( - "errors" - "math/big" - - "github.com/luxfi/geth/common" - "github.com/luxfi/corona/sign" - "github.com/luxfi/corona/primitives" - "github.com/luxfi/lattice/v6/ring" - "github.com/luxfi/lattice/v6/utils/sampling" -) - -// Corona precompile addresses -var ( - // Corona ring signature operations - CoronaVerifyAddress = common.HexToAddress("0x0000000000000000000000000000000000000170") - CoronaBatchVerifyAddress = common.HexToAddress("0x0000000000000000000000000000000000000171") - CoronaLinkableVerifyAddress = common.HexToAddress("0x0000000000000000000000000000000000000172") - - // Corona key management - CoronaKeyAggregateAddress = common.HexToAddress("0x0000000000000000000000000000000000000173") - CoronaRingHashAddress = common.HexToAddress("0x0000000000000000000000000000000000000174") - - // Threshold ring signatures - CoronaThresholdVerifyAddress = common.HexToAddress("0x0000000000000000000000000000000000000175") -) - -// Gas costs for Corona operations -const ( - // Ring signature verification is expensive due to lattice operations - coronaVerifyGas = 500000 // 500K gas for ring verification - coronaBatchVerifyBaseGas = 300000 // Base cost for batch - coronaBatchVerifyPerSigGas = 400000 // Per signature in batch - coronaLinkableVerifyGas = 600000 // Linkable signatures are more expensive - - // Key operations - coronaKeyAggregateGas = 100000 - coronaRingHashGas = 50000 - - // Threshold operations - coronaThresholdVerifyGas = 800000 - - // Ring sizes - smallRingSize = 8 - mediumRingSize = 16 - largeRingSize = 32 - xlargeRingSize = 64 -) - -// CoronaVerify implements lattice-based ring signature verification -type CoronaVerify struct{} - -func (r *CoronaVerify) RequiredGas(input []byte) uint64 { - // Gas scales with ring size - if len(input) < 1 { - return coronaVerifyGas - } - ringSize := uint64(input[0]) - return coronaVerifyGas + ringSize*50000 -} - -func (r *CoronaVerify) Run(input []byte) ([]byte, error) { - // Input format: [1 byte ring_size][ring_public_keys][signature][message] - if len(input) < 1 { - return nil, errors.New("input too short") - } - - ringSize := int(input[0]) - if ringSize < 2 || ringSize > xlargeRingSize { - return nil, errors.New("invalid ring size") - } - - // Initialize lattice parameters - randomKey := make([]byte, sign.KeySize) - r, err := ring.NewRing(1< xlargeRingSize { - return nil, errors.New("invalid ring size") - } - - // Parse components - offset := 1 - keySize := ringSize * sign.PublicKeySize - - if len(input) < offset+keySize+sign.SignatureSize+32 { - return nil, errors.New("invalid input size") - } - - // Extract ring keys - ringKeys := make([][]byte, ringSize) - for i := 0; i < ringSize; i++ { - ringKeys[i] = input[offset : offset+sign.PublicKeySize] - offset += sign.PublicKeySize - } - - // Extract signature - signature := input[offset : offset+sign.SignatureSize] - offset += sign.SignatureSize - - // Extract linking tag - linkingTag := input[offset : offset+32] - offset += 32 - - // Extract message - message := input[offset:] - - // Verify linkable signature - r, _ := ring.NewRing(1< ringSize || threshold < 2 { - return nil, errors.New("invalid threshold") - } - - // Initialize lattice parameters - r, _ := ring.NewRing(1< 0 && len(signature) > 0 -} - -func verifyLinkingTag(linkingTag, signature []byte) bool { - // Verify that linking tag is properly formed - return len(linkingTag) == 32 -} - -func verifyThresholdSignature(r, r_xi, r_nu *ring.Ring, ringKeys, shares [][]byte, message []byte, lagrangeCoeffs []ring.Poly) bool { - // Simplified threshold verification - return len(shares) > 0 && len(message) > 0 -} - -// RegisterCorona registers all Corona precompiles -func RegisterCorona(registry *Registry) { - registry.Register(CoronaVerifyAddress, &CoronaVerify{}) - registry.Register(CoronaBatchVerifyAddress, &CoronaBatchVerify{}) - registry.Register(CoronaLinkableVerifyAddress, &CoronaLinkableVerify{}) - registry.Register(CoronaKeyAggregateAddress, &CoronaKeyAggregate{}) - registry.Register(CoronaRingHashAddress, &CoronaRingHash{}) - registry.Register(CoronaThresholdVerifyAddress, &CoronaThresholdVerify{}) -} - -func init() { - // Auto-register Corona precompiles on package load - RegisterCorona(PostQuantumRegistry) -} \ No newline at end of file diff --git a/precompile/export.go b/precompile/export.go index e3cd06f..0ca5620 100644 --- a/precompile/export.go +++ b/precompile/export.go @@ -5,7 +5,7 @@ package precompile import ( -// "github.com/luxfi/geth/common" // removed to avoid import cycle +// "github.com/luxfi/crypto" // removed to avoid import cycle ) // GetAllPostQuantumPrecompiles returns all post-quantum precompiles diff --git a/precompile/interface.go b/precompile/interface.go index fc648ce..4f0071c 100644 --- a/precompile/interface.go +++ b/precompile/interface.go @@ -5,7 +5,7 @@ package precompile import ( -// "github.com/luxfi/geth/common" // removed to avoid import cycle +// "github.com/luxfi/crypto" // removed to avoid import cycle ) // PrecompiledContract is the interface for EVM precompiled contracts diff --git a/precompile/lamport.go b/precompile/lamport.go index ea267b1..9de2803 100644 --- a/precompile/lamport.go +++ b/precompile/lamport.go @@ -8,7 +8,7 @@ import ( "crypto/sha256" "errors" - // "github.com/luxfi/geth/common" // removed to avoid import cycle + // "github.com/luxfi/crypto" // removed to avoid import cycle "github.com/luxfi/crypto/lamport" ) diff --git a/precompile/shake.go b/precompile/shake.go index 559307e..e6f3a1b 100644 --- a/precompile/shake.go +++ b/precompile/shake.go @@ -7,7 +7,7 @@ package precompile import ( "errors" - // "github.com/luxfi/geth/common" // removed to avoid import cycle + // "github.com/luxfi/crypto" // removed to avoid import cycle "golang.org/x/crypto/sha3" ) diff --git a/secp256r1/verifier.go b/secp256r1/verifier.go index f7dcb98..3378af2 100644 --- a/secp256r1/verifier.go +++ b/secp256r1/verifier.go @@ -1,4 +1,4 @@ -// Copyright 2025 The go-ethereum Authors +// Copyright 2024 The go-ethereum Authors // This file is part of the go-ethereum library. // // The go-ethereum library is free software: you can redistribute it and/or modify diff --git a/signature_cgo.go b/signature_cgo.go index dad75af..3b5f600 100644 --- a/signature_cgo.go +++ b/signature_cgo.go @@ -24,13 +24,12 @@ import ( "errors" "fmt" - "github.com/luxfi/crypto/common/math" - luxSecp256k1 "github.com/luxfi/crypto/secp256k1" + "github.com/luxfi/crypto/secp256k1" ) // Ecrecover returns the uncompressed public key that created the given signature. func Ecrecover(hash, sig []byte) ([]byte, error) { - return luxSecp256k1.RecoverPubkey(hash, sig) + return secp256k1.RecoverPubkey(hash, sig) } // SigToPub returns the public key that created the given signature. @@ -54,21 +53,21 @@ func Sign(digestHash []byte, prv *ecdsa.PrivateKey) (sig []byte, err error) { if len(digestHash) != DigestLength { return nil, fmt.Errorf("hash is required to be exactly %d bytes (%d)", DigestLength, len(digestHash)) } - seckey := math.PaddedBigBytes(prv.D, prv.Params().BitSize/8) + seckey := PaddedBigBytes(prv.D, prv.Params().BitSize/8) defer zeroBytes(seckey) - return luxSecp256k1.Sign(digestHash, seckey) + return secp256k1.Sign(digestHash, seckey) } // VerifySignature checks that the given public key created signature over digest. // The public key should be in compressed (33 bytes) or uncompressed (65 bytes) format. // The signature should have the 64 byte [R || S] format. func VerifySignature(pubkey, digestHash, signature []byte) bool { - return luxSecp256k1.VerifySignature(pubkey, digestHash, signature) + return secp256k1.VerifySignature(pubkey, digestHash, signature) } // DecompressPubkey parses a public key in the 33-byte compressed format. func DecompressPubkey(pubkey []byte) (*ecdsa.PublicKey, error) { - x, y := luxSecp256k1.DecompressPubkey(pubkey) + x, y := secp256k1.DecompressPubkey(pubkey) if x == nil { return nil, errors.New("invalid public key") } @@ -77,10 +76,10 @@ func DecompressPubkey(pubkey []byte) (*ecdsa.PublicKey, error) { // CompressPubkey encodes a public key to the 33-byte compressed format. func CompressPubkey(pubkey *ecdsa.PublicKey) []byte { - return luxSecp256k1.CompressPubkey(pubkey.X, pubkey.Y) + return secp256k1.CompressPubkey(pubkey.X, pubkey.Y) } // S256 returns an instance of the secp256k1 curve. func S256() EllipticCurve { - return luxSecp256k1.S256() + return secp256k1.S256() } diff --git a/signature_nocgo.go b/signature_nocgo.go index d76127c..9dce105 100644 --- a/signature_nocgo.go +++ b/signature_nocgo.go @@ -43,6 +43,9 @@ func sigToPub(hash, sig []byte) (*secp256k1.PublicKey, error) { if len(sig) != SignatureLength { return nil, errors.New("invalid signature") } + if len(hash) != DigestLength { + return nil, fmt.Errorf("hash is required to be exactly %d bytes (%d)", DigestLength, len(hash)) + } // Convert to secp256k1 input format with 'recovery id' v at the beginning. btcsig := make([]byte, SignatureLength) btcsig[0] = sig[RecoveryIDOffset] + 27 @@ -76,8 +79,8 @@ func SigToPub(hash, sig []byte) (*ecdsa.PublicKey, error) { // // The produced signature is in the [R || S || V] format where V is 0 or 1. func Sign(hash []byte, prv *ecdsa.PrivateKey) ([]byte, error) { - if len(hash) != 32 { - return nil, fmt.Errorf("hash is required to be exactly 32 bytes (%d)", len(hash)) + if len(hash) != DigestLength { + return nil, fmt.Errorf("hash is required to be exactly %d bytes (%d)", DigestLength, len(hash)) } if prv.Curve != S256() { return nil, errors.New("private key curve is not secp256k1") diff --git a/signature_test.go b/signature_test.go index 44edd67..99852f9 100644 --- a/signature_test.go +++ b/signature_test.go @@ -19,12 +19,12 @@ package crypto import ( "bytes" "crypto/ecdsa" + "encoding/hex" + "math/big" "reflect" "testing" - "github.com/luxfi/crypto/common" "github.com/luxfi/crypto/common/hexutil" - "github.com/luxfi/crypto/common/math" ) var ( @@ -34,6 +34,33 @@ var ( testpubkeyc = hexutil.MustDecode("0x02e32df42865e97135acfb65f3bae71bdc86f4d49150ad6a440b6f15878109880a") ) +// mustParseBig256 parses a hex string into a big.Int, panics on error +func mustParseBig256(s string) *big.Int { + if len(s) >= 2 && (s[0:2] == "0x" || s[0:2] == "0X") { + s = s[2:] + } + if len(s)%2 == 1 { + s = "0" + s + } + b, err := hex.DecodeString(s) + if err != nil { + panic(err) + } + result := new(big.Int) + result.SetBytes(b) + return result +} + +// copyBytes creates a copy of a byte slice +func copyBytes(b []byte) []byte { + if b == nil { + return nil + } + result := make([]byte, len(b)) + copy(result, b) + return result +} + func TestEcrecover(t *testing.T) { pubkey, err := Ecrecover(testmsg, testsig) if err != nil { @@ -62,13 +89,13 @@ func TestVerifySignature(t *testing.T) { if VerifySignature(testpubkey, testmsg, nil) { t.Errorf("nil signature valid") } - if VerifySignature(testpubkey, testmsg, append(common.CopyBytes(sig), 1, 2, 3)) { + if VerifySignature(testpubkey, testmsg, append(copyBytes(sig), 1, 2, 3)) { t.Errorf("signature valid with extra bytes at the end") } if VerifySignature(testpubkey, testmsg, sig[:len(sig)-2]) { t.Errorf("signature valid even though it's incomplete") } - wrongkey := common.CopyBytes(testpubkey) + wrongkey := copyBytes(testpubkey) wrongkey[10]++ if VerifySignature(wrongkey, testmsg, sig) { t.Errorf("signature valid with wrong public key") @@ -99,7 +126,7 @@ func TestDecompressPubkey(t *testing.T) { if _, err := DecompressPubkey(testpubkeyc[:5]); err == nil { t.Errorf("no error for incomplete pubkey") } - if _, err := DecompressPubkey(append(common.CopyBytes(testpubkeyc), 1, 2, 3)); err == nil { + if _, err := DecompressPubkey(append(copyBytes(testpubkeyc), 1, 2, 3)); err == nil { t.Errorf("no error for pubkey with extra bytes at the end") } } @@ -107,8 +134,8 @@ func TestDecompressPubkey(t *testing.T) { func TestCompressPubkey(t *testing.T) { key := &ecdsa.PublicKey{ Curve: S256(), - X: math.MustParseBig256("0xe32df42865e97135acfb65f3bae71bdc86f4d49150ad6a440b6f15878109880a"), - Y: math.MustParseBig256("0x0a2b2667f7e725ceea70c673093bf67663e0312623c8e091b13cf2c0f11ef652"), + X: mustParseBig256("0xe32df42865e97135acfb65f3bae71bdc86f4d49150ad6a440b6f15878109880a"), + Y: mustParseBig256("0x0a2b2667f7e725ceea70c673093bf67663e0312623c8e091b13cf2c0f11ef652"), } compressed := CompressPubkey(key) if !bytes.Equal(compressed, testpubkeyc) { @@ -135,7 +162,7 @@ func TestPubkeyRandom(t *testing.T) { } func BenchmarkEcrecoverSignature(b *testing.B) { - for i := 0; i < b.N; i++ { + for b.Loop() { if _, err := Ecrecover(testmsg, testsig); err != nil { b.Fatal("ecrecover error", err) } @@ -144,7 +171,7 @@ func BenchmarkEcrecoverSignature(b *testing.B) { func BenchmarkVerifySignature(b *testing.B) { sig := testsig[:len(testsig)-1] // remove recovery id - for i := 0; i < b.N; i++ { + for b.Loop() { if !VerifySignature(testpubkey, testmsg, sig) { b.Fatal("verify error") } @@ -152,7 +179,7 @@ func BenchmarkVerifySignature(b *testing.B) { } func BenchmarkDecompressPubkey(b *testing.B) { - for i := 0; i < b.N; i++ { + for b.Loop() { if _, err := DecompressPubkey(testpubkeyc); err != nil { b.Fatal(err) } diff --git a/slhdsa.out b/slhdsa.out deleted file mode 100644 index 5f02b11..0000000 --- a/slhdsa.out +++ /dev/null @@ -1 +0,0 @@ -mode: set diff --git a/slhdsa/coverage.out b/slhdsa/coverage.out deleted file mode 100644 index 936553c..0000000 --- a/slhdsa/coverage.out +++ /dev/null @@ -1,152 +0,0 @@ -mode: set -github.com/luxfi/crypto/slhdsa/slhdsa.go:72.66,75.14 2 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:76.18,78.41 2 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:79.18,81.41 2 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:82.18,84.41 2 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:85.18,87.41 2 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:88.18,90.41 2 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:91.18,93.41 2 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:94.10,95.49 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:99.2,99.17 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:99.17,101.3 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:105.2,106.56 2 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:106.56,108.3 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa.go:111.2,118.38 6 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:118.38,124.23 6 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:124.23,126.4 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:127.3,127.30 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:130.2,136.8 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:140.102,141.17 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:141.17,143.3 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:145.2,147.29 2 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:148.18,149.36 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:150.18,151.36 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:152.18,153.36 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:154.18,155.36 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:156.18,157.36 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:158.18,159.36 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:160.10,161.49 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa.go:166.2,182.47 11 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:182.47,184.20 2 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:184.20,186.4 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:187.3,189.24 3 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:192.2,192.23 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:196.86,197.16 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:197.16,199.3 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:201.2,203.18 2 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:204.18,205.44 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:206.18,207.44 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:208.18,209.44 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:210.18,211.44 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:212.18,213.44 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:214.18,215.44 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:216.10,217.15 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa.go:221.2,221.39 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:221.39,223.3 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:227.2,233.25 5 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:233.25,235.3 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa.go:238.2,238.26 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:238.26,239.42 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:239.42,241.4 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:244.2,244.13 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:248.38,250.2 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:253.40,255.2 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:258.69,261.14 2 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:262.30,263.41 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:264.30,265.41 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:266.30,267.41 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:268.10,269.49 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa.go:272.2,272.31 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:272.31,274.3 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:276.2,279.8 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:283.71,287.14 3 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:288.30,290.39 2 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:291.30,293.39 2 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:294.30,296.39 2 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:297.10,298.49 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa.go:301.2,301.31 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:301.31,303.3 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:306.2,313.38 6 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:313.38,319.23 6 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:319.23,321.4 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:322.3,322.29 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa.go:325.2,331.8 1 1 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:16.26,18.3 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:23.26,25.3 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:29.36,31.21 2 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:31.21,33.3 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:34.2,34.19 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:38.31,39.41 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:39.41,41.3 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:45.28,49.2 3 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:52.29,54.2 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:57.75,60.14 2 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:61.18,63.41 2 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:64.18,66.41 2 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:67.18,69.41 2 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:70.18,72.41 2 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:73.18,75.41 2 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:76.18,78.41 2 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:79.10,80.49 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:84.2,84.17 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:84.17,86.3 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:89.2,93.55 3 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:93.55,95.3 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:98.2,107.8 3 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:111.111,114.29 2 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:115.18,116.36 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:117.18,118.36 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:119.18,120.36 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:121.18,122.36 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:123.18,124.36 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:125.18,126.36 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:127.10,128.49 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:132.2,148.36 9 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:148.36,155.20 6 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:155.20,157.4 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:158.3,158.31 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:162.2,164.20 3 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:175.44,178.23 3 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:178.23,180.3 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:182.2,185.3 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:189.59,195.30 4 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:195.30,197.3 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:200.2,201.50 2 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:201.50,205.34 3 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:205.34,213.4 6 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:216.2,216.20 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:227.82,228.18 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:228.18,230.3 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:232.2,238.22 4 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:238.22,240.20 2 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:240.20,243.18 3 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:243.18,246.5 2 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:247.4,247.19 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:251.2,254.29 2 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:254.29,255.17 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:255.17,257.4 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:260.2,263.8 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:267.76,268.33 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:268.33,270.3 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:272.2,276.26 3 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:276.26,278.3 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:279.2,285.33 4 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:285.33,287.13 2 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:287.13,289.26 2 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:289.26,291.19 2 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:291.19,293.14 2 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:295.5,295.26 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:300.2,303.29 2 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:303.29,304.17 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:304.17,306.4 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:309.2,309.24 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:321.57,327.2 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:330.70,339.42 6 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:339.42,342.3 2 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:343.2,347.16 3 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:347.16,349.3 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:351.2,354.29 3 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:354.29,356.30 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:356.30,358.31 2 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:358.31,359.10 1 0 -github.com/luxfi/crypto/slhdsa/slhdsa_optimized.go:363.2,365.17 2 0 diff --git a/slhdsa/slhdsa_cgo.go.bak b/slhdsa/slhdsa_cgo.go.bak deleted file mode 100644 index db96a94..0000000 --- a/slhdsa/slhdsa_cgo.go.bak +++ /dev/null @@ -1,272 +0,0 @@ -// Copyright (C) 2025, Lux Industries Inc. All rights reserved. -// +build cgo - -// Package slhdsa provides SLH-DSA (FIPS 205) stateless hash-based signatures -// CGO implementation using Sloth - high-performance SLH-DSA implementation - -package slhdsa - -/* -#cgo CFLAGS: -I${SRCDIR}/c -I${SRCDIR}/c/sloth/include -O3 -march=native -mavx2 -#cgo LDFLAGS: -L${SRCDIR}/c -lslhdsa -lcrypto - -#include -#include - -// Sloth SLH-DSA parameter sets (FIPS 205 compliant) -// Using SHA2 variants as specified in FIPS 205 - -// Level 1 (128-bit security) -#define SLHDSA_SHA2_128S_PUBLIC_KEY_BYTES 32 -#define SLHDSA_SHA2_128S_SECRET_KEY_BYTES 64 -#define SLHDSA_SHA2_128S_SIGNATURE_BYTES 7856 - -#define SLHDSA_SHA2_128F_PUBLIC_KEY_BYTES 32 -#define SLHDSA_SHA2_128F_SECRET_KEY_BYTES 64 -#define SLHDSA_SHA2_128F_SIGNATURE_BYTES 17088 - -// Level 3 (192-bit security) -#define SLHDSA_SHA2_192S_PUBLIC_KEY_BYTES 48 -#define SLHDSA_SHA2_192S_SECRET_KEY_BYTES 96 -#define SLHDSA_SHA2_192S_SIGNATURE_BYTES 16224 - -#define SLHDSA_SHA2_192F_PUBLIC_KEY_BYTES 48 -#define SLHDSA_SHA2_192F_SECRET_KEY_BYTES 96 -#define SLHDSA_SHA2_192F_SIGNATURE_BYTES 35664 - -// Level 5 (256-bit security) -#define SLHDSA_SHA2_256S_PUBLIC_KEY_BYTES 64 -#define SLHDSA_SHA2_256S_SECRET_KEY_BYTES 128 -#define SLHDSA_SHA2_256S_SIGNATURE_BYTES 29792 - -#define SLHDSA_SHA2_256F_PUBLIC_KEY_BYTES 64 -#define SLHDSA_SHA2_256F_SECRET_KEY_BYTES 128 -#define SLHDSA_SHA2_256F_SIGNATURE_BYTES 49856 - -// Sloth API functions (high-performance implementations) -// These would come from sloth headers -int sloth_slhdsa_sha2_128s_keypair(unsigned char *pk, unsigned char *sk); -int sloth_slhdsa_sha2_128s_sign(unsigned char *sig, size_t *siglen, - const unsigned char *m, size_t mlen, - const unsigned char *sk); -int sloth_slhdsa_sha2_128s_verify(const unsigned char *sig, size_t siglen, - const unsigned char *m, size_t mlen, - const unsigned char *pk); - -int sloth_slhdsa_sha2_128f_keypair(unsigned char *pk, unsigned char *sk); -int sloth_slhdsa_sha2_128f_sign(unsigned char *sig, size_t *siglen, - const unsigned char *m, size_t mlen, - const unsigned char *sk); -int sloth_slhdsa_sha2_128f_verify(const unsigned char *sig, size_t siglen, - const unsigned char *m, size_t mlen, - const unsigned char *pk); - -int sloth_slhdsa_sha2_192s_keypair(unsigned char *pk, unsigned char *sk); -int sloth_slhdsa_sha2_192s_sign(unsigned char *sig, size_t *siglen, - const unsigned char *m, size_t mlen, - const unsigned char *sk); -int sloth_slhdsa_sha2_192s_verify(const unsigned char *sig, size_t siglen, - const unsigned char *m, size_t mlen, - const unsigned char *pk); - -int sloth_slhdsa_sha2_192f_keypair(unsigned char *pk, unsigned char *sk); -int sloth_slhdsa_sha2_192f_sign(unsigned char *sig, size_t *siglen, - const unsigned char *m, size_t mlen, - const unsigned char *sk); -int sloth_slhdsa_sha2_192f_verify(const unsigned char *sig, size_t siglen, - const unsigned char *m, size_t mlen, - const unsigned char *pk); - -int sloth_slhdsa_sha2_256s_keypair(unsigned char *pk, unsigned char *sk); -int sloth_slhdsa_sha2_256s_sign(unsigned char *sig, size_t *siglen, - const unsigned char *m, size_t mlen, - const unsigned char *sk); -int sloth_slhdsa_sha2_256s_verify(const unsigned char *sig, size_t siglen, - const unsigned char *m, size_t mlen, - const unsigned char *pk); - -int sloth_slhdsa_sha2_256f_keypair(unsigned char *pk, unsigned char *sk); -int sloth_slhdsa_sha2_256f_sign(unsigned char *sig, size_t *siglen, - const unsigned char *m, size_t mlen, - const unsigned char *sk); -int sloth_slhdsa_sha2_256f_verify(const unsigned char *sig, size_t siglen, - const unsigned char *m, size_t mlen, - const unsigned char *pk); - -// Wrapper functions for unified interface -int slhdsa_keypair(unsigned char *pk, unsigned char *sk, int mode) { - switch(mode) { - case 0: return sloth_slhdsa_sha2_128s_keypair(pk, sk); - case 1: return sloth_slhdsa_sha2_128f_keypair(pk, sk); - case 2: return sloth_slhdsa_sha2_192s_keypair(pk, sk); - case 3: return sloth_slhdsa_sha2_192f_keypair(pk, sk); - case 4: return sloth_slhdsa_sha2_256s_keypair(pk, sk); - case 5: return sloth_slhdsa_sha2_256f_keypair(pk, sk); - default: return -1; - } -} - -int slhdsa_sign(unsigned char *sig, size_t *siglen, - const unsigned char *m, size_t mlen, - const unsigned char *sk, int mode) { - switch(mode) { - case 0: return sloth_slhdsa_sha2_128s_sign(sig, siglen, m, mlen, sk); - case 1: return sloth_slhdsa_sha2_128f_sign(sig, siglen, m, mlen, sk); - case 2: return sloth_slhdsa_sha2_192s_sign(sig, siglen, m, mlen, sk); - case 3: return sloth_slhdsa_sha2_192f_sign(sig, siglen, m, mlen, sk); - case 4: return sloth_slhdsa_sha2_256s_sign(sig, siglen, m, mlen, sk); - case 5: return sloth_slhdsa_sha2_256f_sign(sig, siglen, m, mlen, sk); - default: return -1; - } -} - -int slhdsa_verify(const unsigned char *sig, size_t siglen, - const unsigned char *m, size_t mlen, - const unsigned char *pk, int mode) { - switch(mode) { - case 0: return sloth_slhdsa_sha2_128s_verify(sig, siglen, m, mlen, pk); - case 1: return sloth_slhdsa_sha2_128f_verify(sig, siglen, m, mlen, pk); - case 2: return sloth_slhdsa_sha2_192s_verify(sig, siglen, m, mlen, pk); - case 3: return sloth_slhdsa_sha2_192f_verify(sig, siglen, m, mlen, pk); - case 4: return sloth_slhdsa_sha2_256s_verify(sig, siglen, m, mlen, pk); - case 5: return sloth_slhdsa_sha2_256f_verify(sig, siglen, m, mlen, pk); - default: return -1; - } -} - -// Get sizes for different parameter sets -int slhdsa_publickey_bytes(int mode) { - switch(mode) { - case 0: case 1: return SLHDSA_SHA2_128S_PUBLIC_KEY_BYTES; - case 2: case 3: return SLHDSA_SHA2_192S_PUBLIC_KEY_BYTES; - case 4: case 5: return SLHDSA_SHA2_256S_PUBLIC_KEY_BYTES; - default: return 0; - } -} - -int slhdsa_secretkey_bytes(int mode) { - switch(mode) { - case 0: case 1: return SLHDSA_SHA2_128S_SECRET_KEY_BYTES; - case 2: case 3: return SLHDSA_SHA2_192S_SECRET_KEY_BYTES; - case 4: case 5: return SLHDSA_SHA2_256S_SECRET_KEY_BYTES; - default: return 0; - } -} - -int slhdsa_signature_bytes(int mode) { - switch(mode) { - case 0: return SLHDSA_SHA2_128S_SIGNATURE_BYTES; - case 1: return SLHDSA_SHA2_128F_SIGNATURE_BYTES; - case 2: return SLHDSA_SHA2_192S_SIGNATURE_BYTES; - case 3: return SLHDSA_SHA2_192F_SIGNATURE_BYTES; - case 4: return SLHDSA_SHA2_256S_SIGNATURE_BYTES; - case 5: return SLHDSA_SHA2_256F_SIGNATURE_BYTES; - default: return 0; - } -} -*/ -import "C" -import ( - "crypto" - "errors" - "io" - "unsafe" -) - -// CGO-based implementation of SLH-DSA using Sloth high-performance library - -// GenerateKeyCGO generates a new SLH-DSA key pair using Sloth implementation -func GenerateKeyCGO(rand io.Reader, mode Mode) (*PrivateKey, error) { - // Map mode to C parameter - cMode := C.int(mode) - - pkSize := int(C.slhdsa_publickey_bytes(cMode)) - skSize := int(C.slhdsa_secretkey_bytes(cMode)) - - if pkSize == 0 || skSize == 0 { - return nil, errors.New("invalid SLH-DSA mode") - } - - // Allocate memory for keys - pk := make([]byte, pkSize) - sk := make([]byte, skSize) - - // Generate key pair using Sloth - ret := C.slhdsa_keypair( - (*C.uchar)(unsafe.Pointer(&pk[0])), - (*C.uchar)(unsafe.Pointer(&sk[0])), - cMode, - ) - - if ret != 0 { - return nil, errors.New("key generation failed") - } - - return &PrivateKey{ - PublicKey: PublicKey{ - mode: mode, - data: pk, - }, - data: sk, - }, nil -} - -// SignCGO signs a message using the Sloth implementation -func SignCGO(priv *PrivateKey, rand io.Reader, message []byte, opts crypto.SignerOpts) ([]byte, error) { - cMode := C.int(priv.mode) - - sigSize := int(C.slhdsa_signature_bytes(cMode)) - if sigSize == 0 { - return nil, errors.New("invalid signature size") - } - - // Allocate memory for signature - sig := make([]byte, sigSize) - var sigLen C.size_t - - // Sign the message using Sloth - ret := C.slhdsa_sign( - (*C.uchar)(unsafe.Pointer(&sig[0])), - &sigLen, - (*C.uchar)(unsafe.Pointer(&message[0])), - C.size_t(len(message)), - (*C.uchar)(unsafe.Pointer(&priv.data[0])), - cMode, - ) - - if ret != 0 { - return nil, errors.New("signing failed") - } - - return sig[:sigLen], nil -} - -// VerifyCGO verifies a signature using the Sloth implementation -func VerifyCGO(pub *PublicKey, message, signature []byte) bool { - cMode := C.int(pub.mode) - - // Verify the signature using Sloth - ret := C.slhdsa_verify( - (*C.uchar)(unsafe.Pointer(&signature[0])), - C.size_t(len(signature)), - (*C.uchar)(unsafe.Pointer(&message[0])), - C.size_t(len(message)), - (*C.uchar)(unsafe.Pointer(&pub.data[0])), - cMode, - ) - - return ret == 0 -} - -// UseCGO returns true if CGO implementation is available -func UseCGO() bool { - return true -} - -// BenchmarkMode returns the best mode for benchmarking -// Sloth is optimized for fast variants on modern CPUs with AVX2 -func BenchmarkMode() Mode { - // Check CPU capabilities at runtime - // For now, default to fast variants if CGO is available - return SLHDSA128f // Fast variant optimized by Sloth -} \ No newline at end of file diff --git a/slhdsa/slhdsa_placeholder.go.bak b/slhdsa/slhdsa_placeholder.go.bak deleted file mode 100644 index 2341dff..0000000 --- a/slhdsa/slhdsa_placeholder.go.bak +++ /dev/null @@ -1,332 +0,0 @@ -// Copyright (C) 2025, Lux Industries Inc. All rights reserved. -// Package slhdsa provides SLH-DSA (FIPS 205) stateless hash-based signatures -// This is a placeholder implementation for CI testing - -package slhdsa - -import ( - "crypto" - "crypto/sha256" - "errors" - "io" -) - -// Security parameters for SLH-DSA (Stateless Hash-Based Digital Signature Algorithm) -const ( - // SLH-DSA-SHA2-128s (Small signatures, Level 1 security) - SLHDSA128sPublicKeySize = 32 // bytes - SLHDSA128sPrivateKeySize = 64 // bytes - SLHDSA128sSignatureSize = 7856 // bytes - - // SLH-DSA-SHA2-128f (Fast signing, Level 1 security) - SLHDSA128fPublicKeySize = 32 // bytes - SLHDSA128fPrivateKeySize = 64 // bytes - SLHDSA128fSignatureSize = 17088 // bytes - - // SLH-DSA-SHA2-192s (Small signatures, Level 3 security) - SLHDSA192sPublicKeySize = 48 // bytes - SLHDSA192sPrivateKeySize = 96 // bytes - SLHDSA192sSignatureSize = 16224 // bytes - - // SLH-DSA-SHA2-192f (Fast signing, Level 3 security) - SLHDSA192fPublicKeySize = 48 // bytes - SLHDSA192fPrivateKeySize = 96 // bytes - SLHDSA192fSignatureSize = 35664 // bytes - - // SLH-DSA-SHA2-256s (Small signatures, Level 5 security) - SLHDSA256sPublicKeySize = 64 // bytes - SLHDSA256sPrivateKeySize = 128 // bytes - SLHDSA256sSignatureSize = 29792 // bytes - - // SLH-DSA-SHA2-256f (Fast signing, Level 5 security) - SLHDSA256fPublicKeySize = 64 // bytes - SLHDSA256fPrivateKeySize = 128 // bytes - SLHDSA256fSignatureSize = 49856 // bytes -) - -// Mode represents the SLH-DSA parameter set -type Mode int - -const ( - SLHDSA128s Mode = iota + 1 - SLHDSA128f - SLHDSA192s - SLHDSA192f - SLHDSA256s - SLHDSA256f -) - -// PublicKey represents an SLH-DSA public key -type PublicKey struct { - mode Mode - data []byte -} - -// PrivateKey represents an SLH-DSA private key -type PrivateKey struct { - PublicKey - data []byte -} - -// GenerateKey generates a new SLH-DSA key pair -func GenerateKey(rand io.Reader, mode Mode) (*PrivateKey, error) { - var pubKeySize, privKeySize int - - switch mode { - case SLHDSA128s: - pubKeySize = SLHDSA128sPublicKeySize - privKeySize = SLHDSA128sPrivateKeySize - case SLHDSA128f: - pubKeySize = SLHDSA128fPublicKeySize - privKeySize = SLHDSA128fPrivateKeySize - case SLHDSA192s: - pubKeySize = SLHDSA192sPublicKeySize - privKeySize = SLHDSA192sPrivateKeySize - case SLHDSA192f: - pubKeySize = SLHDSA192fPublicKeySize - privKeySize = SLHDSA192fPrivateKeySize - case SLHDSA256s: - pubKeySize = SLHDSA256sPublicKeySize - privKeySize = SLHDSA256sPrivateKeySize - case SLHDSA256f: - pubKeySize = SLHDSA256fPublicKeySize - privKeySize = SLHDSA256fPrivateKeySize - default: - return nil, errors.New("invalid SLH-DSA mode") - } - - // Check for nil random source - if rand == nil { - return nil, errors.New("random source is nil") - } - - // Placeholder implementation - generate random keys - // In real SLH-DSA, public key is derived from private key - privBytes := make([]byte, privKeySize) - if _, err := io.ReadFull(rand, privBytes); err != nil { - return nil, err - } - - // Derive public key from private key for consistency - h := sha256.New() - h.Write(privBytes[:32]) // Use first part as seed - h.Write([]byte("slhdsa-public")) - pubSeed := h.Sum(nil) - - pubBytes := make([]byte, pubKeySize) - // Fill public key with deterministic data - for i := 0; i < pubKeySize; i += 32 { - h.Reset() - h.Write(pubSeed) - h.Write([]byte{byte(i / 32)}) - hash := h.Sum(nil) - end := i + 32 - if end > pubKeySize { - end = pubKeySize - } - copy(pubBytes[i:end], hash) - } - - return &PrivateKey{ - PublicKey: PublicKey{ - mode: mode, - data: pubBytes, - }, - data: privBytes, - }, nil -} - -// Sign signs a message using the private key -func (priv *PrivateKey) Sign(rand io.Reader, message []byte, opts crypto.SignerOpts) ([]byte, error) { - if priv == nil { - return nil, errors.New("private key is nil") - } - - var sigSize int - - switch priv.PublicKey.mode { - case SLHDSA128s: - sigSize = SLHDSA128sSignatureSize - case SLHDSA128f: - sigSize = SLHDSA128fSignatureSize - case SLHDSA192s: - sigSize = SLHDSA192sSignatureSize - case SLHDSA192f: - sigSize = SLHDSA192fSignatureSize - case SLHDSA256s: - sigSize = SLHDSA256sSignatureSize - case SLHDSA256f: - sigSize = SLHDSA256fSignatureSize - default: - return nil, errors.New("invalid SLH-DSA mode") - } - - // Placeholder: create deterministic signature that can be verified - // Start with hash of public key and message (what Verify expects) - h := sha256.New() - h.Write(priv.PublicKey.data) - h.Write(message) - hash := h.Sum(nil) - - signature := make([]byte, sigSize) - // Copy the hash to beginning of signature - copy(signature[:32], hash) - - // Fill rest with deterministic data based on private key - // SLH-DSA is stateless so signature should be deterministic - h.Reset() - h.Write(priv.data) - h.Write(message) - privHash := h.Sum(nil) - - for i := 32; i < sigSize; i += len(privHash) { - end := i + len(privHash) - if end > sigSize { - end = sigSize - } - copy(signature[i:end], privHash) - h.Write(privHash) // Generate more data - privHash = h.Sum(nil) - } - - return signature, nil -} - -// Verify verifies a signature using the public key -func (pub *PublicKey) Verify(message, signature []byte, opts crypto.SignerOpts) bool { - if pub == nil { - return false - } - - var expectedSigSize int - - switch pub.mode { - case SLHDSA128s: - expectedSigSize = SLHDSA128sSignatureSize - case SLHDSA128f: - expectedSigSize = SLHDSA128fSignatureSize - case SLHDSA192s: - expectedSigSize = SLHDSA192sSignatureSize - case SLHDSA192f: - expectedSigSize = SLHDSA192fSignatureSize - case SLHDSA256s: - expectedSigSize = SLHDSA256sSignatureSize - case SLHDSA256f: - expectedSigSize = SLHDSA256fSignatureSize - default: - return false - } - - // Check signature size - if len(signature) != expectedSigSize { - return false - } - - // Placeholder verification for SLH-DSA - // Recompute expected signature start based on public key and message - h := sha256.New() - h.Write(pub.data) - h.Write(message) - expectedSigStart := h.Sum(nil) - - // Check if first 32 bytes match - if len(signature) < 32 { - return false - } - - // Compare first 32 bytes - for i := 0; i < 32; i++ { - if signature[i] != expectedSigStart[i] { - return false - } - } - - return true -} - -// Bytes returns the public key as bytes -func (pub *PublicKey) Bytes() []byte { - return pub.data -} - -// Bytes returns the private key as bytes -func (priv *PrivateKey) Bytes() []byte { - return priv.data -} - -// PublicKeyFromBytes reconstructs a public key from bytes -func PublicKeyFromBytes(data []byte, mode Mode) (*PublicKey, error) { - var expectedSize int - - switch mode { - case SLHDSA128s, SLHDSA128f: - expectedSize = SLHDSA128sPublicKeySize - case SLHDSA192s, SLHDSA192f: - expectedSize = SLHDSA192sPublicKeySize - case SLHDSA256s, SLHDSA256f: - expectedSize = SLHDSA256sPublicKeySize - default: - return nil, errors.New("invalid SLH-DSA mode") - } - - if len(data) != expectedSize { - return nil, errors.New("invalid public key size") - } - - return &PublicKey{ - mode: mode, - data: data, - }, nil -} - -// PrivateKeyFromBytes reconstructs a private key from bytes -func PrivateKeyFromBytes(data []byte, mode Mode) (*PrivateKey, error) { - var expectedSize int - var pubKeySize int - - switch mode { - case SLHDSA128s, SLHDSA128f: - expectedSize = SLHDSA128sPrivateKeySize - pubKeySize = SLHDSA128sPublicKeySize - case SLHDSA192s, SLHDSA192f: - expectedSize = SLHDSA192sPrivateKeySize - pubKeySize = SLHDSA192sPublicKeySize - case SLHDSA256s, SLHDSA256f: - expectedSize = SLHDSA256sPrivateKeySize - pubKeySize = SLHDSA256sPublicKeySize - default: - return nil, errors.New("invalid SLH-DSA mode") - } - - if len(data) != expectedSize { - return nil, errors.New("invalid private key size") - } - - // Derive public key from private key (same as GenerateKey) - h := sha256.New() - h.Write(data[:32]) // Use first part as seed - h.Write([]byte("slhdsa-public")) - pubSeed := h.Sum(nil) - - pubData := make([]byte, pubKeySize) - // Fill public key with deterministic data - for i := 0; i < pubKeySize; i += 32 { - h.Reset() - h.Write(pubSeed) - h.Write([]byte{byte(i / 32)}) - hash := h.Sum(nil) - end := i + 32 - if end > pubKeySize { - end = pubKeySize - } - copy(pubData[i:end], hash) - } - - return &PrivateKey{ - PublicKey: PublicKey{ - mode: mode, - data: pubData, - }, - data: data, - }, nil -} diff --git a/unified/signer.go.bak b/unified/signer.go.bak deleted file mode 100644 index a8b3b65..0000000 --- a/unified/signer.go.bak +++ /dev/null @@ -1,342 +0,0 @@ -// Copyright (C) 2025, Lux Industries Inc. All rights reserved. -// Unified Signer for all Lux cryptographic operations - -package unified - -import ( - "crypto" - "crypto/rand" - "errors" - "fmt" - - "github.com/luxfi/crypto/bls" - "github.com/luxfi/crypto/mldsa" - "github.com/luxfi/crypto/mlkem" - "github.com/luxfi/crypto/slhdsa" -) - -// Signer provides unified interface for all signature types -type Signer interface { - // Sign creates a signature - Sign(message []byte) ([]byte, error) - - // Verify checks a signature - Verify(message, signature []byte) bool - - // PublicKey returns the public key bytes - PublicKey() []byte - - // Type returns the signature type - Type() string -} - -// BLSSigner implements Signer for BLS signatures -type BLSSigner struct { - privKey *bls.SecretKey - pubKey *bls.PublicKey -} - -// NewBLSSigner creates a new BLS signer -func NewBLSSigner() (*BLSSigner, error) { - seed := make([]byte, 32) - if _, err := rand.Read(seed); err != nil { - return nil, err - } - - privKey, err := bls.SecretKeyFromBytes(seed) - if err != nil { - return nil, err - } - - return &BLSSigner{ - privKey: privKey, - pubKey: privKey.PublicKey(), - }, nil -} - -func (s *BLSSigner) Sign(message []byte) ([]byte, error) { - sig := s.privKey.Sign(message) - return bls.SignatureToBytes(sig), nil -} - -func (s *BLSSigner) Verify(message, signature []byte) bool { - sig, err := bls.SignatureFromBytes(signature) - if err != nil { - return false - } - return bls.Verify(s.pubKey, message, sig) -} - -func (s *BLSSigner) PublicKey() []byte { - return bls.PublicKeyToBytes(s.pubKey) -} - -func (s *BLSSigner) Type() string { - return "BLS" -} - -// MLDSASigner implements Signer for ML-DSA signatures -type MLDSASigner struct { - privKey *mldsa.PrivateKey - pubKey *mldsa.PublicKey - mode mldsa.Mode -} - -// NewMLDSASigner creates a new ML-DSA signer -func NewMLDSASigner(mode mldsa.Mode) (*MLDSASigner, error) { - privKey, err := mldsa.GenerateKey(rand.Reader, mode) - if err != nil { - return nil, err - } - - return &MLDSASigner{ - privKey: privKey, - pubKey: privKey.PublicKey(), - mode: mode, - }, nil -} - -func (s *MLDSASigner) Sign(message []byte) ([]byte, error) { - // ML-DSA requires opts, use crypto.Hash(0) for default - return s.privKey.Sign(rand.Reader, message, crypto.Hash(0)) -} - -func (s *MLDSASigner) Verify(message, signature []byte) bool { - return s.pubKey.Verify(message, signature, crypto.Hash(0)) -} - -func (s *MLDSASigner) PublicKey() []byte { - return s.pubKey.Bytes() -} - -func (s *MLDSASigner) Type() string { - switch s.mode { - case mldsa.MLDSA44: - return "ML-DSA-44" - case mldsa.MLDSA65: - return "ML-DSA-65" - case mldsa.MLDSA87: - return "ML-DSA-87" - default: - return "ML-DSA" - } -} - -// SLHDSASigner implements Signer for SLH-DSA signatures -type SLHDSASigner struct { - privKey *slhdsa.PrivateKey - pubKey *slhdsa.PublicKey - mode slhdsa.Mode -} - -// NewSLHDSASigner creates a new SLH-DSA signer -func NewSLHDSASigner(mode slhdsa.Mode) (*SLHDSASigner, error) { - privKey, err := slhdsa.GenerateKey(rand.Reader, mode) - if err != nil { - return nil, err - } - - return &SLHDSASigner{ - privKey: privKey, - pubKey: privKey.PublicKey(), - mode: mode, - }, nil -} - -func (s *SLHDSASigner) Sign(message []byte) ([]byte, error) { - return s.privKey.Sign(rand.Reader, message, crypto.Hash(0)) -} - -func (s *SLHDSASigner) Verify(message, signature []byte) bool { - return s.pubKey.Verify(message, signature, crypto.Hash(0)) -} - -func (s *SLHDSASigner) PublicKey() []byte { - return s.pubKey.Bytes() -} - -func (s *SLHDSASigner) Type() string { - switch s.mode { - case slhdsa.SLHDSA128f: - return "SLH-DSA-128f" - case slhdsa.SLHDSA192f: - return "SLH-DSA-192f" - case slhdsa.SLHDSA256f: - return "SLH-DSA-256f" - default: - return "SLH-DSA" - } -} - -// HybridSigner combines BLS and ML-DSA for quantum-safe signatures -type HybridSigner struct { - bls *BLSSigner - mldsa *MLDSASigner -} - -// NewHybridSigner creates a signer with both BLS and ML-DSA -func NewHybridSigner() (*HybridSigner, error) { - blsSigner, err := NewBLSSigner() - if err != nil { - return nil, err - } - - mldsaSigner, err := NewMLDSASigner(mldsa.MLDSA65) - if err != nil { - return nil, err - } - - return &HybridSigner{ - bls: blsSigner, - mldsa: mldsaSigner, - }, nil -} - -func (s *HybridSigner) Sign(message []byte) ([]byte, error) { - blsSig, err := s.bls.Sign(message) - if err != nil { - return nil, fmt.Errorf("BLS sign failed: %w", err) - } - - mldsaSig, err := s.mldsa.Sign(message) - if err != nil { - return nil, fmt.Errorf("ML-DSA sign failed: %w", err) - } - - // Combine signatures: [2-byte BLS len][BLS sig][ML-DSA sig] - result := make([]byte, 2+len(blsSig)+len(mldsaSig)) - result[0] = byte(len(blsSig) >> 8) - result[1] = byte(len(blsSig)) - copy(result[2:], blsSig) - copy(result[2+len(blsSig):], mldsaSig) - - return result, nil -} - -func (s *HybridSigner) Verify(message, signature []byte) bool { - if len(signature) < 2 { - return false - } - - blsLen := int(signature[0])<<8 | int(signature[1]) - if len(signature) < 2+blsLen { - return false - } - - blsSig := signature[2 : 2+blsLen] - mldsaSig := signature[2+blsLen:] - - return s.bls.Verify(message, blsSig) && s.mldsa.Verify(message, mldsaSig) -} - -func (s *HybridSigner) PublicKey() []byte { - blsPub := s.bls.PublicKey() - mldsaPub := s.mldsa.PublicKey() - - // Combine public keys - result := make([]byte, 2+len(blsPub)+len(mldsaPub)) - result[0] = byte(len(blsPub) >> 8) - result[1] = byte(len(blsPub)) - copy(result[2:], blsPub) - copy(result[2+len(blsPub):], mldsaPub) - - return result -} - -func (s *HybridSigner) Type() string { - return "Hybrid-BLS-MLDSA" -} - -// KEMProvider handles key encapsulation -type KEMProvider interface { - Encapsulate() (ciphertext, sharedSecret []byte, err error) - Decapsulate(ciphertext []byte) (sharedSecret []byte, err error) -} - -// MLKEMProvider implements KEMProvider for ML-KEM -type MLKEMProvider struct { - privKey *mlkem.PrivateKey - pubKey *mlkem.PublicKey - mode mlkem.Mode -} - -// NewMLKEMProvider creates a new ML-KEM provider -func NewMLKEMProvider(mode mlkem.Mode) (*MLKEMProvider, error) { - priv, pub, err := mlkem.GenerateKeyPair(rand.Reader, mode) - if err != nil { - return nil, err - } - - return &MLKEMProvider{ - privKey: priv, - pubKey: pub, - mode: mode, - }, nil -} - -func (k *MLKEMProvider) Encapsulate() ([]byte, []byte, error) { - return mlkem.Encapsulate(k.pubKey, rand.Reader) -} - -func (k *MLKEMProvider) Decapsulate(ciphertext []byte) ([]byte, error) { - return mlkem.Decapsulate(k.privKey, ciphertext) -} - -// UnifiedProvider combines signing and KEM operations -type UnifiedProvider struct { - signer Signer - kem KEMProvider -} - -// NewUnifiedProvider creates a provider with both signing and KEM -func NewUnifiedProvider(signerType string) (*UnifiedProvider, error) { - var signer Signer - var err error - - switch signerType { - case "BLS": - signer, err = NewBLSSigner() - case "ML-DSA": - signer, err = NewMLDSASigner(mldsa.MLDSA65) - case "SLH-DSA": - signer, err = NewSLHDSASigner(slhdsa.SLHDSA128f) - case "Hybrid": - signer, err = NewHybridSigner() - default: - return nil, errors.New("unknown signer type") - } - - if err != nil { - return nil, err - } - - kem, err := NewMLKEMProvider(mlkem.MLKEM768) - if err != nil { - return nil, err - } - - return &UnifiedProvider{ - signer: signer, - kem: kem, - }, nil -} - -func (u *UnifiedProvider) Sign(message []byte) ([]byte, error) { - return u.signer.Sign(message) -} - -func (u *UnifiedProvider) Verify(message, signature []byte) bool { - return u.signer.Verify(message, signature) -} - -func (u *UnifiedProvider) Encapsulate() ([]byte, []byte, error) { - return u.kem.Encapsulate() -} - -func (u *UnifiedProvider) Decapsulate(ciphertext []byte) ([]byte, error) { - return u.kem.Decapsulate(ciphertext) -} - -func (u *UnifiedProvider) Type() string { - return u.signer.Type() -} \ No newline at end of file diff --git a/unified/signer_test.go.bak b/unified/signer_test.go.bak deleted file mode 100644 index 4db32f5..0000000 --- a/unified/signer_test.go.bak +++ /dev/null @@ -1,255 +0,0 @@ -package unified - -import ( - "bytes" - "testing" - - "github.com/luxfi/crypto/mldsa" - "github.com/luxfi/crypto/mlkem" - "github.com/luxfi/crypto/slhdsa" -) - -func TestBLSSigner(t *testing.T) { - signer, err := NewBLSSigner() - if err != nil { - t.Fatalf("Failed to create BLS signer: %v", err) - } - - message := []byte("Test message for BLS") - - sig, err := signer.Sign(message) - if err != nil { - t.Fatalf("Failed to sign: %v", err) - } - - if !signer.Verify(message, sig) { - t.Fatalf("Signature verification failed") - } - - if signer.Verify([]byte("wrong message"), sig) { - t.Fatalf("Signature should not verify for wrong message") - } - - t.Logf("BLS signature size: %d bytes", len(sig)) - t.Logf("BLS public key size: %d bytes", len(signer.PublicKey())) -} - -func TestMLDSASigner(t *testing.T) { - modes := []struct { - name string - mode mldsa.Mode - }{ - {"ML-DSA-44", mldsa.MLDSA44}, - {"ML-DSA-65", mldsa.MLDSA65}, - {"ML-DSA-87", mldsa.MLDSA87}, - } - - for _, m := range modes { - t.Run(m.name, func(t *testing.T) { - signer, err := NewMLDSASigner(m.mode) - if err != nil { - t.Fatalf("Failed to create %s signer: %v", m.name, err) - } - - message := []byte("Test message for ML-DSA") - - sig, err := signer.Sign(message) - if err != nil { - t.Fatalf("Failed to sign: %v", err) - } - - if !signer.Verify(message, sig) { - t.Fatalf("Signature verification failed") - } - - if signer.Type() != m.name { - t.Fatalf("Expected type %s, got %s", m.name, signer.Type()) - } - - t.Logf("%s signature size: %d bytes", m.name, len(sig)) - t.Logf("%s public key size: %d bytes", m.name, len(signer.PublicKey())) - }) - } -} - -func TestSLHDSASigner(t *testing.T) { - modes := []struct { - name string - mode slhdsa.Mode - }{ - {"SLH-DSA-128f", slhdsa.SLHDSA128f}, - {"SLH-DSA-192f", slhdsa.SLHDSA192f}, - {"SLH-DSA-256f", slhdsa.SLHDSA256f}, - } - - for _, m := range modes { - t.Run(m.name, func(t *testing.T) { - signer, err := NewSLHDSASigner(m.mode) - if err != nil { - t.Fatalf("Failed to create %s signer: %v", m.name, err) - } - - message := []byte("Test message for SLH-DSA") - - sig, err := signer.Sign(message) - if err != nil { - t.Fatalf("Failed to sign: %v", err) - } - - if !signer.Verify(message, sig) { - t.Fatalf("Signature verification failed") - } - - t.Logf("%s signature size: %d bytes", m.name, len(sig)) - t.Logf("%s public key size: %d bytes", m.name, len(signer.PublicKey())) - }) - } -} - -func TestHybridSigner(t *testing.T) { - signer, err := NewHybridSigner() - if err != nil { - t.Fatalf("Failed to create hybrid signer: %v", err) - } - - message := []byte("Test message for hybrid signing") - - sig, err := signer.Sign(message) - if err != nil { - t.Fatalf("Failed to sign: %v", err) - } - - if !signer.Verify(message, sig) { - t.Fatalf("Signature verification failed") - } - - if signer.Verify([]byte("wrong message"), sig) { - t.Fatalf("Signature should not verify for wrong message") - } - - t.Logf("Hybrid signature size: %d bytes", len(sig)) - t.Logf("Hybrid public key size: %d bytes", len(signer.PublicKey())) - t.Logf("Hybrid type: %s", signer.Type()) -} - -func TestMLKEMProvider(t *testing.T) { - modes := []struct { - name string - mode mlkem.Mode - }{ - {"ML-KEM-512", mlkem.MLKEM512}, - {"ML-KEM-768", mlkem.MLKEM768}, - {"ML-KEM-1024", mlkem.MLKEM1024}, - } - - for _, m := range modes { - t.Run(m.name, func(t *testing.T) { - kem, err := NewMLKEMProvider(m.mode) - if err != nil { - t.Fatalf("Failed to create %s provider: %v", m.name, err) - } - - ciphertext, sharedSecret1, err := kem.Encapsulate() - if err != nil { - t.Fatalf("Encapsulation failed: %v", err) - } - - sharedSecret2, err := kem.Decapsulate(ciphertext) - if err != nil { - t.Fatalf("Decapsulation failed: %v", err) - } - - if !bytes.Equal(sharedSecret1, sharedSecret2) { - t.Fatalf("Shared secrets don't match") - } - - t.Logf("%s ciphertext size: %d bytes", m.name, len(ciphertext)) - t.Logf("%s shared secret size: %d bytes", m.name, len(sharedSecret1)) - }) - } -} - -func TestUnifiedProvider(t *testing.T) { - signerTypes := []string{"BLS", "ML-DSA", "SLH-DSA", "Hybrid"} - - for _, signerType := range signerTypes { - t.Run(signerType, func(t *testing.T) { - provider, err := NewUnifiedProvider(signerType) - if err != nil { - t.Fatalf("Failed to create unified provider: %v", err) - } - - message := []byte("Test message for unified provider") - - // Test signing - sig, err := provider.Sign(message) - if err != nil { - t.Fatalf("Failed to sign: %v", err) - } - - if !provider.Verify(message, sig) { - t.Fatalf("Signature verification failed") - } - - // Test KEM - ciphertext, sharedSecret1, err := provider.Encapsulate() - if err != nil { - t.Fatalf("Encapsulation failed: %v", err) - } - - sharedSecret2, err := provider.Decapsulate(ciphertext) - if err != nil { - t.Fatalf("Decapsulation failed: %v", err) - } - - if !bytes.Equal(sharedSecret1, sharedSecret2) { - t.Fatalf("Shared secrets don't match") - } - - t.Logf("%s provider signature size: %d bytes", signerType, len(sig)) - t.Logf("%s provider type: %s", signerType, provider.Type()) - }) - } -} - -func BenchmarkSigners(b *testing.B) { - benchmarks := []struct { - name string - create func() (Signer, error) - }{ - {"BLS", func() (Signer, error) { return NewBLSSigner() }}, - {"ML-DSA-65", func() (Signer, error) { return NewMLDSASigner(mldsa.MLDSA65) }}, - {"SLH-DSA-128f", func() (Signer, error) { return NewSLHDSASigner(slhdsa.SLHDSA128f) }}, - {"Hybrid", func() (Signer, error) { return NewHybridSigner() }}, - } - - message := []byte("Benchmark message for signing performance testing") - - for _, bm := range benchmarks { - signer, err := bm.create() - if err != nil { - b.Fatal(err) - } - - b.Run(bm.name+"_Sign", func(b *testing.B) { - b.ResetTimer() - for i := 0; i < b.N; i++ { - _, err := signer.Sign(message) - if err != nil { - b.Fatal(err) - } - } - }) - - sig, _ := signer.Sign(message) - - b.Run(bm.name+"_Verify", func(b *testing.B) { - b.ResetTimer() - for i := 0; i < b.N; i++ { - if !signer.Verify(message, sig) { - b.Fatal("Verification failed") - } - } - }) - } -} \ No newline at end of file diff --git a/utils/bloom/bloom_filter_test.go.bak b/utils/bloom/bloom_filter_test.go.bak deleted file mode 100644 index bfdd66c..0000000 --- a/utils/bloom/bloom_filter_test.go.bak +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (C) 2019-2025, Lux Industries Inc All rights reserved. -// See the file LICENSE for licensing terms. - -package bloom - -import ( - "github.com/luxfi/metric" - "testing" - - "github.com/stretchr/testify/require" -) - -func TestNew(t *testing.T) { - var ( - require = require.New(t) - count = 10000 - p = 0.1 - ) - - numHashes, numEntries := OptimalParameters(count, p) - f, err := New(numHashes, numEntries) - require.NoError(err) - require.NotNil(f) - - salt := []byte("test salt") - Add(f, []byte("hello"), salt) - - contains := Contains(f, []byte("hello"), salt) - require.True(contains, "should have contained the key") - - contains = Contains(f, []byte("bye"), salt) - require.False(contains, "shouldn't have contained the key") -} diff --git a/utils/bloom/filter_test.go.bak b/utils/bloom/filter_test.go.bak deleted file mode 100644 index 4d4182a..0000000 --- a/utils/bloom/filter_test.go.bak +++ /dev/null @@ -1,97 +0,0 @@ -// Copyright (C) 2019-2025, Lux Industries, Inc. All rights reserved. -// See the file LICENSE for licensing terms. - -package bloom - -import ( - "github.com/luxfi/metric" - "math/rand" - "testing" - - "github.com/stretchr/testify/require" - - "github.com/luxfi/node/utils/units" -) - -func TestNewErrors(t *testing.T) { - tests := []struct { - numHashes int - numEntries int - err error - }{ - { - numHashes: 0, - numEntries: 1, - err: errTooFewHashes, - }, - { - numHashes: 17, - numEntries: 1, - err: errTooManyHashes, - }, - { - numHashes: 8, - numEntries: 0, - err: errTooFewEntries, - }, - } - for _, test := range tests { - t.Run(test.err.Error(), func(t *testing.T) { - _, err := New(test.numHashes, test.numEntries) - require.ErrorIs(t, err, test.err) - }) - } -} - -func TestNormalUsage(t *testing.T) { - require := require.New(t) - - toAdd := make([]uint64, 1024) - for i := range toAdd { - toAdd[i] = rand.Uint64() //#nosec G404 - } - - initialNumHashes, initialNumBytes := OptimalParameters(1024, 0.01) - filter, err := New(initialNumHashes, initialNumBytes) - require.NoError(err) - - for i, elem := range toAdd { - filter.Add(elem) - for _, elem := range toAdd[:i] { - require.True(filter.Contains(elem)) - } - } - - require.Equal(len(toAdd), filter.Count()) - - filterBytes := filter.Marshal() - parsedFilter, err := Parse(filterBytes) - require.NoError(err) - - for _, elem := range toAdd { - require.True(parsedFilter.Contains(elem)) - } - - parsedFilterBytes := parsedFilter.Marshal() - require.Equal(filterBytes, parsedFilterBytes) -} - -func BenchmarkAdd(b *testing.B) { - f, err := New(8, 16*units.KiB) - require.NoError(b, err) - - b.ResetTimer() - for i := 0; i < b.N; i++ { - f.Add(1) - } -} - -func BenchmarkMarshal(b *testing.B) { - f, err := New(OptimalParameters(10_000, .01)) - require.NoError(b, err) - - b.ResetTimer() - for i := 0; i < b.N; i++ { - f.Marshal() - } -} diff --git a/utils/bloom/hasher_test.go.bak b/utils/bloom/hasher_test.go.bak deleted file mode 100644 index 8dbe2d2..0000000 --- a/utils/bloom/hasher_test.go.bak +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright (C) 2019-2025, Lux Industries, Inc. All rights reserved. -// See the file LICENSE for licensing terms. - -package bloom - -import ( - "github.com/luxfi/metric" - "testing" - - "github.com/stretchr/testify/require" - - "github.com/luxfi/ids" - "github.com/luxfi/node/utils/units" -) - -func TestCollisionResistance(t *testing.T) { - require := require.New(t) - - f, err := New(8, 16*units.KiB) - require.NoError(err) - - Add(f, []byte("hello world?"), []byte("so salty")) - collision := Contains(f, []byte("hello world!"), []byte("so salty")) - require.False(collision) -} - -func BenchmarkHash(b *testing.B) { - key := ids.GenerateTestID() - salt := ids.GenerateTestID() - - b.ResetTimer() - for i := 0; i < b.N; i++ { - Hash(key[:], salt[:]) - } -} diff --git a/utils/bloom/optimal_test.go.bak b/utils/bloom/optimal_test.go.bak deleted file mode 100644 index deb73cd..0000000 --- a/utils/bloom/optimal_test.go.bak +++ /dev/null @@ -1,204 +0,0 @@ -// Copyright (C) 2019-2025, Lux Industries, Inc. All rights reserved. -// See the file LICENSE for licensing terms. - -package bloom - -import ( - "github.com/luxfi/metric" - "fmt" - "math" - "testing" - - "github.com/stretchr/testify/require" -) - -const largestFloat64LessThan1 float64 = 1 - 1e-16 - -func TestOptimalHashes(t *testing.T) { - tests := []struct { - numEntries int - count int - expectedHashes int - }{ - { // invalid params - numEntries: 0, - count: 1024, - expectedHashes: minHashes, - }, - { // invalid params - numEntries: 1024, - count: 0, - expectedHashes: maxHashes, - }, - { - numEntries: math.MaxInt, - count: 1, - expectedHashes: maxHashes, - }, - { - numEntries: 1, - count: math.MaxInt, - expectedHashes: minHashes, - }, - { - numEntries: 1024, - count: 1024, - expectedHashes: 6, - }, - } - for _, test := range tests { - t.Run(fmt.Sprintf("%d_%d", test.numEntries, test.count), func(t *testing.T) { - hashes := OptimalHashes(test.numEntries, test.count) - require.Equal(t, test.expectedHashes, hashes) - }) - } -} - -func TestOptimalEntries(t *testing.T) { - tests := []struct { - count int - falsePositiveProbability float64 - expectedEntries int - }{ - { // invalid params - count: 0, - falsePositiveProbability: .5, - expectedEntries: minEntries, - }, - { // invalid params - count: 1, - falsePositiveProbability: 0, - expectedEntries: math.MaxInt, - }, - { // invalid params - count: 1, - falsePositiveProbability: 1, - expectedEntries: minEntries, - }, - { - count: math.MaxInt, - falsePositiveProbability: math.SmallestNonzeroFloat64, - expectedEntries: math.MaxInt, - }, - { - count: 1024, - falsePositiveProbability: largestFloat64LessThan1, - expectedEntries: minEntries, - }, - { - count: 1024, - falsePositiveProbability: .01, - expectedEntries: 1227, - }, - } - for _, test := range tests { - t.Run(fmt.Sprintf("%d_%f", test.count, test.falsePositiveProbability), func(t *testing.T) { - entries := OptimalEntries(test.count, test.falsePositiveProbability) - require.Equal(t, test.expectedEntries, entries) - }) - } -} - -func TestEstimateEntries(t *testing.T) { - tests := []struct { - numHashes int - numEntries int - falsePositiveProbability float64 - expectedEntries int - }{ - { // invalid params - numHashes: 0, - numEntries: 2_048, - falsePositiveProbability: .5, - expectedEntries: 0, - }, - { // invalid params - numHashes: 1, - numEntries: 0, - falsePositiveProbability: .5, - expectedEntries: 0, - }, - { // invalid params - numHashes: 1, - numEntries: 1, - falsePositiveProbability: 2, - expectedEntries: math.MaxInt, - }, - { // invalid params - numHashes: 1, - numEntries: 1, - falsePositiveProbability: -1, - expectedEntries: 0, - }, - { - numHashes: 8, - numEntries: 2_048, - falsePositiveProbability: 0, - expectedEntries: 0, - }, - { // params from OptimalParameters(10_000, .01) - numHashes: 7, - numEntries: 11_982, - falsePositiveProbability: .01, - expectedEntries: 9_993, - }, - { // params from OptimalParameters(100_000, .001) - numHashes: 10, - numEntries: 179_720, - falsePositiveProbability: .001, - expectedEntries: 100_000, - }, - { // params from OptimalParameters(10_000, .01) - numHashes: 7, - numEntries: 11_982, - falsePositiveProbability: .05, - expectedEntries: 14_449, - }, - { // params from OptimalParameters(10_000, .01) - numHashes: 7, - numEntries: 11_982, - falsePositiveProbability: 1, - expectedEntries: math.MaxInt, - }, - { // params from OptimalParameters(10_000, .01) - numHashes: 7, - numEntries: 11_982, - falsePositiveProbability: math.SmallestNonzeroFloat64, - expectedEntries: 0, - }, - { // params from OptimalParameters(10_000, .01) - numHashes: 7, - numEntries: 11_982, - falsePositiveProbability: largestFloat64LessThan1, - expectedEntries: math.MaxInt, - }, - } - for _, test := range tests { - t.Run(fmt.Sprintf("%d_%d_%f", test.numHashes, test.numEntries, test.falsePositiveProbability), func(t *testing.T) { - entries := EstimateCount(test.numHashes, test.numEntries, test.falsePositiveProbability) - require.Equal(t, test.expectedEntries, entries) - }) - } -} - -func FuzzOptimalHashes(f *testing.F) { - f.Fuzz(func(t *testing.T, numEntries, count int) { - hashes := OptimalHashes(numEntries, count) - require.GreaterOrEqual(t, hashes, minHashes) - require.LessOrEqual(t, hashes, maxHashes) - }) -} - -func FuzzOptimalEntries(f *testing.F) { - f.Fuzz(func(t *testing.T, count int, falsePositiveProbability float64) { - entries := OptimalEntries(count, falsePositiveProbability) - require.GreaterOrEqual(t, entries, minEntries) - }) -} - -func FuzzEstimateEntries(f *testing.F) { - f.Fuzz(func(t *testing.T, numHashes, numEntries int, falsePositiveProbability float64) { - entries := EstimateCount(numHashes, numEntries, falsePositiveProbability) - require.GreaterOrEqual(t, entries, 0) - }) -} diff --git a/utils/bloom/read_filter_test.go.bak b/utils/bloom/read_filter_test.go.bak deleted file mode 100644 index 46ae358..0000000 --- a/utils/bloom/read_filter_test.go.bak +++ /dev/null @@ -1,113 +0,0 @@ -// Copyright (C) 2019-2025, Lux Industries, Inc. All rights reserved. -// See the file LICENSE for licensing terms. - -package bloom - -import ( - "github.com/luxfi/metric" - "math" - "testing" - - "github.com/stretchr/testify/require" -) - -func NewMaliciousFilter(numHashes, numEntries int) *Filter { - f := &Filter{ - numBits: uint64(numEntries * bitsPerByte), - hashSeeds: make([]uint64, numHashes), - entries: make([]byte, numEntries), - count: 0, - } - for i := range f.entries { - f.entries[i] = math.MaxUint8 - } - return f -} - -func TestParseErrors(t *testing.T) { - tests := []struct { - bytes []byte - err error - }{ - { - bytes: nil, - err: errInvalidNumHashes, - }, - { - bytes: NewMaliciousFilter(0, 1).Marshal(), - err: errTooFewHashes, - }, - { - bytes: NewMaliciousFilter(17, 1).Marshal(), - err: errTooManyHashes, - }, - { - bytes: NewMaliciousFilter(1, 0).Marshal(), - err: errTooFewEntries, - }, - { - bytes: []byte{ - 0x01, // num hashes = 1 - }, - err: errTooFewEntries, - }, - } - for _, test := range tests { - t.Run(test.err.Error(), func(t *testing.T) { - _, err := Parse(test.bytes) - require.ErrorIs(t, err, test.err) - }) - } -} - -func BenchmarkParse(b *testing.B) { - f, err := New(OptimalParameters(10_000, .01)) - require.NoError(b, err) - bytes := f.Marshal() - - b.ResetTimer() - for i := 0; i < b.N; i++ { - _, _ = Parse(bytes) - } -} - -func BenchmarkContains(b *testing.B) { - f := NewMaliciousFilter(maxHashes, 1) - - b.ResetTimer() - for i := 0; i < b.N; i++ { - f.Contains(1) - } -} - -func FuzzParseThenMarshal(f *testing.F) { - f.Fuzz(func(t *testing.T, bytes []byte) { - f, err := Parse(bytes) - if err != nil { - return - } - - marshalledBytes := marshal(f.hashSeeds, f.entries) - require.Equal(t, bytes, marshalledBytes) - }) -} - -func FuzzMarshalThenParse(f *testing.F) { - f.Fuzz(func(t *testing.T, numHashes int, entries []byte) { - require := require.New(t) - - hashSeeds, err := newHashSeeds(numHashes) - if err != nil { - return - } - if len(entries) < minEntries { - return - } - - marshalledBytes := marshal(hashSeeds, entries) - rf, err := Parse(marshalledBytes) - require.NoError(err) - require.Equal(hashSeeds, rf.hashSeeds) - require.Equal(entries, rf.entries) - }) -} diff --git a/utils/metric/namespace_test.go.bak b/utils/metric/namespace_test.go.bak deleted file mode 100644 index c917b5d..0000000 --- a/utils/metric/namespace_test.go.bak +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright (C) 2019-2025, Lux Industries, Inc. All rights reserved. -// See the file LICENSE for licensing terms. - -package utilmetric - -import ( - luxmetric "github.com/luxfi/metric" - "strings" - "testing" - - "github.com/stretchr/testify/require" -) - -func TestAppendNamespace(t *testing.T) { - tests := []struct { - prefix string - suffix string - expected string - }{ - { - prefix: "node", - suffix: "isgreat", - expected: "node_isgreat", - }, - { - prefix: "", - suffix: "sucks", - expected: "sucks", - }, - { - prefix: "sucks", - suffix: "", - expected: "sucks", - }, - { - prefix: "", - suffix: "", - expected: "", - }, - } - for _, test := range tests { - t.Run(strings.Join([]string{test.prefix, test.suffix}, "_"), func(t *testing.T) { - namespace := AppendNamespace(test.prefix, test.suffix) - require.Equal(t, test.expected, namespace) - }) - } -}