Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/e2e.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: 1.23
go-version: 1.24

- name: Run golang e2e tests
env:
Expand Down
3 changes: 1 addition & 2 deletions .github/workflows/release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -98,5 +98,4 @@ jobs:
allowUpdates: 'true'
artifacts: zeto-wasm-and-proving-keys/*.tar.gz
tag: ${{ env.ZETO_VER }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
token: ${{ secrets.PAT }}
2 changes: 1 addition & 1 deletion go-sdk/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ coverage: test coverage.html
lint: ${LINT}
GOGC=20 $(LINT) run -v --timeout 5m
${LINT}:
$(VGO) install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.61.0
$(VGO) install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.64.8
go-mod-tidy: .ALWAYS
$(VGO) mod tidy
e2e: test
Expand Down
20 changes: 10 additions & 10 deletions go-sdk/go.mod
Original file line number Diff line number Diff line change
@@ -1,14 +1,17 @@
module github.com/hyperledger-labs/zeto/go-sdk

go 1.23.0
go 1.24.0

toolchain go1.23.7
toolchain go1.24.4

require (
github.com/iden3/go-rapidsnark/witness/wasmer v0.0.0-20230524142950-0986cf057d4e
github.com/sirupsen/logrus v1.9.3
github.com/stretchr/testify v1.9.0
github.com/x-cray/logrus-prefixed-formatter v0.5.2
gorm.io/driver/postgres v1.5.9
gorm.io/driver/sqlite v1.6.0
gorm.io/gorm v1.31.1
)

require (
Expand All @@ -33,9 +36,9 @@ require (
github.com/pkg/errors v0.9.1 // indirect
github.com/rogpeppe/go-internal v1.12.0 // indirect
github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 // indirect
golang.org/x/sync v0.12.0 // indirect
golang.org/x/term v0.30.0 // indirect
golang.org/x/text v0.23.0 // indirect
golang.org/x/sync v0.19.0 // indirect
golang.org/x/term v0.38.0 // indirect
golang.org/x/text v0.32.0 // indirect
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect
)

Expand All @@ -48,10 +51,7 @@ require (
github.com/iden3/go-rapidsnark/types v0.0.2 // indirect
github.com/iden3/go-rapidsnark/witness/v2 v2.0.0
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
golang.org/x/crypto v0.36.0 // indirect
golang.org/x/sys v0.31.0 // indirect
golang.org/x/crypto v0.46.0 // indirect
golang.org/x/sys v0.39.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
gorm.io/driver/postgres v1.5.9
gorm.io/driver/sqlite v1.5.6
gorm.io/gorm v1.25.12
)
32 changes: 16 additions & 16 deletions go-sdk/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -87,20 +87,20 @@ github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsT
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/x-cray/logrus-prefixed-formatter v0.5.2 h1:00txxvfBM9muc0jiLIEAkAcIMJzfthRT6usrui8uGmg=
github.com/x-cray/logrus-prefixed-formatter v0.5.2/go.mod h1:2duySbKsL6M18s5GU7VPsoEPHyzalCE06qoARUCeBBE=
golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34=
golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc=
golang.org/x/net v0.21.0 h1:AQyQV4dYCvJ7vGmJyKki9+PBdyvhkSd8EIx/qb0AYv4=
golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw=
golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
golang.org/x/crypto v0.46.0 h1:cKRW/pmt1pKAfetfu+RCEvjvZkA9RimPbh7bhFjGVBU=
golang.org/x/crypto v0.46.0/go.mod h1:Evb/oLKmMraqjZ2iQTwDwvCtJkczlDuTmdJXoZVzqU0=
golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4=
golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik=
golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
golang.org/x/term v0.30.0 h1:PQ39fJZ+mfadBm0y5WlL4vlM7Sx1Hgf13sMIY2+QS9Y=
golang.org/x/term v0.30.0/go.mod h1:NYYFdzHoI5wRh/h5tDMdMqCqPJZEuNqVR5xJLd/n67g=
golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY=
golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4=
golang.org/x/sys v0.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk=
golang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
golang.org/x/term v0.38.0 h1:PQ5pkm/rLO6HnxFR7N2lJHOZX6Kez5Y1gDSJla6jo7Q=
golang.org/x/term v0.38.0/go.mod h1:bSEAKrOT1W+VSu9TSCMtoGEOUcKxOKgl3LE5QEF/xVg=
golang.org/x/text v0.32.0 h1:ZD01bjUt1FQ9WJ0ClOL5vxgxOI/sVCNgX1YtKwcY0mU=
golang.org/x/text v0.32.0/go.mod h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
Expand All @@ -113,7 +113,7 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gorm.io/driver/postgres v1.5.9 h1:DkegyItji119OlcaLjqN11kHoUgZ/j13E0jkJZgD6A8=
gorm.io/driver/postgres v1.5.9/go.mod h1:DX3GReXH+3FPWGrrgffdvCk3DQ1dwDPdmbenSkweRGI=
gorm.io/driver/sqlite v1.5.6 h1:fO/X46qn5NUEEOZtnjJRWRzZMe8nqJiQ9E+0hi+hKQE=
gorm.io/driver/sqlite v1.5.6/go.mod h1:U+J8craQU6Fzkcvu8oLeAQmi50TkwPEhHDEjQZXDah4=
gorm.io/gorm v1.25.12 h1:I0u8i2hWQItBq1WfE0o2+WuL9+8L21K9e2HHSTE/0f8=
gorm.io/gorm v1.25.12/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ=
gorm.io/driver/sqlite v1.6.0 h1:WHRRrIiulaPiPFmDcod6prc4l2VGVWHz80KspNsxSfQ=
gorm.io/driver/sqlite v1.6.0/go.mod h1:AO9V1qIQddBESngQUKWL9yoH93HIeA1X6V633rBwyT8=
gorm.io/gorm v1.31.1 h1:7CA8FTFz/gRfgqgpeKIBcervUn3xSyPUmr6B2WXJ7kg=
gorm.io/gorm v1.31.1/go.mod h1:XyQVbO2k6YkOis7C2437jSit3SsDK72s7n7rsSHd+Gs=
5 changes: 3 additions & 2 deletions go-sdk/internal/crypto/encryption.go
Original file line number Diff line number Diff line change
Expand Up @@ -151,11 +151,12 @@ func PoseidonDecrypt(cipherText []*big.Int, key []*big.Int, nonce *big.Int, leng
// If length > 3, check if the last (3 - (l mod 3)) elements of the message are 0
// this is a safty check because the message would have been padded with 0s
if length > 3 {
if length%3 == 2 {
switch length % 3 {
case 2:
if message[len(message)-1].Cmp(big.NewInt(0)) != 0 {
return nil, fmt.Errorf("the last element of the decrypted text must be 0")
}
} else if length%3 == 1 {
case 1:
if message[len(message)-2].Cmp(big.NewInt(0)) != 0 || message[len(message)-1].Cmp(big.NewInt(0)) != 0 {
return nil, fmt.Errorf("the last two elements of the decrypted text must be 0")
}
Expand Down
8 changes: 4 additions & 4 deletions go-sdk/internal/sparse-merkle-tree/storage/sql_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ func TestSqliteStorage(t *testing.T) {
dbfile, err := os.CreateTemp("", "gorm.db")
assert.NoError(t, err)
defer func() {
os.Remove(dbfile.Name())
_ = os.Remove(dbfile.Name())
}()
db, err := gorm.Open(sqlite.Open(dbfile.Name()), &gorm.Config{})
assert.NoError(t, err)
Expand Down Expand Up @@ -105,7 +105,7 @@ func TestSqliteStorageFail_NoRootTable(t *testing.T) {
dbfile, err := os.CreateTemp("", "gorm.db")
assert.NoError(t, err)
defer func() {
os.Remove(dbfile.Name())
_ = os.Remove(dbfile.Name())
}()
db, err := gorm.Open(sqlite.Open(dbfile.Name()), &gorm.Config{})
assert.NoError(t, err)
Expand All @@ -128,7 +128,7 @@ func TestSqliteStorageFail_NoNodeTable(t *testing.T) {
dbfile, err := os.CreateTemp("", "gorm.db")
assert.NoError(t, err)
defer func() {
os.Remove(dbfile.Name())
_ = os.Remove(dbfile.Name())
}()
db, err := gorm.Open(sqlite.Open(dbfile.Name()), &gorm.Config{})
assert.NoError(t, err)
Expand All @@ -153,7 +153,7 @@ func TestSqliteStorageFail_BadNodeIndex(t *testing.T) {
dbfile, err := os.CreateTemp("", "gorm.db")
assert.NoError(t, err)
defer func() {
os.Remove(dbfile.Name())
_ = os.Remove(dbfile.Name())
}()
db, err := gorm.Open(sqlite.Open(dbfile.Name()), &gorm.Config{})
assert.NoError(t, err)
Expand Down
6 changes: 4 additions & 2 deletions solidity/contracts/lib/registry.sol
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,9 @@
pragma solidity ^0.8.27;

import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
import {SmtLib} from "@iden3/contracts/lib/SmtLib.sol";
import {PoseidonUnit2L, PoseidonUnit3L} from "@iden3/contracts/lib/Poseidon.sol";
import {SmtLib} from "@iden3/contracts/contracts/lib/SmtLib.sol";
import {PoseidonHasher} from "@iden3/contracts/contracts/lib/hash/PoseidonHasher.sol";
import {PoseidonUnit2L, PoseidonUnit3L} from "@iden3/contracts/contracts/lib/Poseidon.sol";
import {Commonlib} from "./common.sol";
import {IZeto} from "./interfaces/izeto.sol";
import {IZetoKyc} from "./interfaces/izeto_kyc.sol";
Expand All @@ -38,6 +39,7 @@ abstract contract Registry is OwnableUpgradeable, IZetoKyc {

function __Registry_init() internal onlyInitializing {
_publicKeysTree.initialize(MAX_SMT_DEPTH);
_publicKeysTree.setHasher(new PoseidonHasher());
}

function register(
Expand Down
10 changes: 8 additions & 2 deletions solidity/contracts/lib/zeto_nullifier.sol
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,10 @@ import {IZeto} from "./interfaces/izeto.sol";
import {MAX_SMT_DEPTH} from "./interfaces/izeto.sol";
import {IZetoLockable} from "./interfaces/izeto_lockable.sol";
import {ZetoCommon} from "./zeto_common.sol";
import {SmtLib} from "@iden3/contracts/lib/SmtLib.sol";
import {PoseidonUnit3L} from "@iden3/contracts/lib/Poseidon.sol";
import {SmtLib} from "@iden3/contracts/contracts/lib/SmtLib.sol";
import {PoseidonHasher} from "@iden3/contracts/contracts/lib/hash/PoseidonHasher.sol";
import {IHasher} from "@iden3/contracts/contracts/interfaces/IHasher.sol";
import {PoseidonUnit3L} from "@iden3/contracts/contracts/lib/Poseidon.sol";
import {console} from "hardhat/console.sol";

/// @title A sample base implementation of a Zeto based token contract with nullifiers
Expand All @@ -38,6 +40,7 @@ abstract contract ZetoNullifier is IZeto, IZetoLockable, ZetoCommon {
SmtLib.Data internal _lockedCommitmentsTree;
using SmtLib for SmtLib.Data;
mapping(uint256 => bool) private _nullifiers;
IHasher private _hasher;

error UTXORootNotFound(uint256 root);

Expand All @@ -49,6 +52,9 @@ abstract contract ZetoNullifier is IZeto, IZetoLockable, ZetoCommon {
__ZetoCommon_init(name_, symbol_, initialOwner);
_commitmentsTree.initialize(MAX_SMT_DEPTH);
_lockedCommitmentsTree.initialize(MAX_SMT_DEPTH);
_hasher = new PoseidonHasher();
_commitmentsTree.setHasher(_hasher);
_lockedCommitmentsTree.setHasher(_hasher);
}

function validateTransactionProposal(
Expand Down
4 changes: 2 additions & 2 deletions solidity/contracts/test/smt.sol
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@
// limitations under the License.
pragma solidity ^0.8.27;

import {SmtLib} from "@iden3/contracts/lib/SmtLib.sol";
import {PoseidonUnit3L} from "@iden3/contracts/lib/Poseidon.sol";
import {SmtLib} from "@iden3/contracts/contracts/lib/SmtLib.sol";
import {PoseidonUnit3L} from "@iden3/contracts/contracts/lib/Poseidon.sol";

// test ground for better understanding of the SmtLib library implementation
contract TestSmt {
Expand Down
4 changes: 3 additions & 1 deletion solidity/contracts/zeto_anon_nullifier_qurrency.sol
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
// limitations under the License.
pragma solidity ^0.8.27;

import {PoseidonUnit5L} from "@iden3/contracts/lib/Poseidon.sol";
import {PoseidonUnit5L} from "@iden3/contracts/contracts/lib/Poseidon.sol";
import {IZeto} from "./lib/interfaces/izeto.sol";
import {MAX_BATCH} from "./lib/interfaces/izeto.sol";
import {Groth16Verifier_Deposit} from "./verifiers/verifier_deposit.sol";
Expand All @@ -35,6 +35,7 @@ import {console} from "hardhat/console.sol";
uint256 constant INPUT_SIZE = 9;
// uint256 constant INPUT_SIZE_LOCKED = 8;
uint256 constant BATCH_INPUT_SIZE = 33;

// uint256 constant BATCH_INPUT_SIZE_LOCKED = 32;

/// @title A sample implementation of a Zeto based fungible token with anonymity and history masking
Expand All @@ -54,6 +55,7 @@ contract Zeto_AnonNullifierQurrency is
{
Groth16Verifier_AnonNullifierQurrencyTransfer internal _verifier;
Groth16Verifier_AnonNullifierQurrencyTransferBatch internal _batchVerifier;

// Groth16Verifier_AnonNullifierTransferLocked internal _lockVerifier;
// Groth16Verifier_AnonNullifierTransferLockedBatch
// internal _batchLockVerifier;
Expand Down
7 changes: 1 addition & 6 deletions solidity/ignition/modules/lib/deps.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,7 @@ export const SmtLibModule = buildModule("SmtLib", (m) => {
const poseidon3 = m.library("Poseidon3", PoseidonArtifact(3));
const poseidon5 = m.library("Poseidon5", PoseidonArtifact(5));
const poseidon6 = m.library("Poseidon6", PoseidonArtifact(6));
const smtLib = m.contract("SmtLib", [], {
libraries: {
PoseidonUnit2L: poseidon2,
PoseidonUnit3L: poseidon3,
},
});
const smtLib = m.contract("SmtLib", []);
return { smtLib, poseidon2, poseidon3, poseidon5, poseidon6 };
});

Expand Down
3 changes: 2 additions & 1 deletion solidity/ignition/modules/zeto_anon_enc_nullifier.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ const BatchVerifierModule = buildModule(
);

export default buildModule("Zeto_AnonEncNullifier", (m) => {
const { smtLib, poseidon3 } = m.useModule(SmtLibModule);
const { smtLib, poseidon2, poseidon3 } = m.useModule(SmtLibModule);
const { verifier } = m.useModule(VerifierModule);
const { verifier: batchVerifier } = m.useModule(BatchVerifierModule);
const { verifier: depositVerifier } = m.useModule(DepositVerifierModule);
Expand All @@ -54,6 +54,7 @@ export default buildModule("Zeto_AnonEncNullifier", (m) => {
batchVerifier,
batchWithdrawVerifier,
smtLib,
poseidon2,
poseidon3,
};
});
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ const BatchVerifierModule = buildModule(
);

export default buildModule("Zeto_AnonEncNullifierNonRepudiation", (m) => {
const { smtLib, poseidon3 } = m.useModule(SmtLibModule);
const { smtLib, poseidon2, poseidon3 } = m.useModule(SmtLibModule);
const { verifier } = m.useModule(VerifierModule);
const { verifier: batchVerifier } = m.useModule(BatchVerifierModule);
const { verifier: depositVerifier } = m.useModule(DepositVerifierModule);
Expand All @@ -62,6 +62,7 @@ export default buildModule("Zeto_AnonEncNullifierNonRepudiation", (m) => {
batchVerifier,
batchWithdrawVerifier,
smtLib,
poseidon2,
poseidon3,
};
});
3 changes: 2 additions & 1 deletion solidity/ignition/modules/zeto_anon_nullifier.ts
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ const BatchLockVerifierModule = buildModule(
);

export default buildModule("Zeto_AnonNullifier", (m) => {
const { smtLib, poseidon3 } = m.useModule(SmtLibModule);
const { smtLib, poseidon2, poseidon3 } = m.useModule(SmtLibModule);
const { verifier } = m.useModule(VerifierModule);
const { verifier: lockVerifier } = m.useModule(LockVerifierModule);
const { verifier: batchVerifier } = m.useModule(BatchVerifierModule);
Expand All @@ -86,6 +86,7 @@ export default buildModule("Zeto_AnonNullifier", (m) => {
batchLockVerifier,
batchWithdrawVerifier,
smtLib,
poseidon2,
poseidon3,
};
});
3 changes: 2 additions & 1 deletion solidity/ignition/modules/zeto_anon_nullifier_burnable.ts
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ const BatchBurnNullifierVerifierModule = buildModule("Groth16Verifier_BurnNullif
});

export default buildModule("Zeto_AnonNullifier", (m) => {
const { smtLib, poseidon3 } = m.useModule(SmtLibModule);
const { smtLib, poseidon2, poseidon3 } = m.useModule(SmtLibModule);
const { verifier } = m.useModule(VerifierModule);
const { verifier: lockVerifier } = m.useModule(LockVerifierModule);
const { verifier: batchVerifier } = m.useModule(BatchVerifierModule);
Expand Down Expand Up @@ -98,6 +98,7 @@ export default buildModule("Zeto_AnonNullifier", (m) => {
burnVerifier,
batchBurnVerifier,
smtLib,
poseidon2,
poseidon3,
};
});
3 changes: 2 additions & 1 deletion solidity/ignition/modules/zeto_anon_nullifier_qurrency.ts
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ const BatchVerifierModule = buildModule(
// );

export default buildModule("Zeto_AnonNullifierQurrency", (m) => {
const { smtLib, poseidon3, poseidon5, poseidon6 } = m.useModule(SmtLibModule);
const { smtLib, poseidon2, poseidon3, poseidon5, poseidon6 } = m.useModule(SmtLibModule);
const { verifier } = m.useModule(VerifierModule);
// const { verifier: lockVerifier } = m.useModule(LockVerifierModule);
const { verifier: batchVerifier } = m.useModule(BatchVerifierModule);
Expand All @@ -86,6 +86,7 @@ export default buildModule("Zeto_AnonNullifierQurrency", (m) => {
// batchLockVerifier,
batchWithdrawVerifier,
smtLib,
poseidon2,
poseidon3,
poseidon5,
poseidon6,
Expand Down
Loading
Loading