
Research
Two Malicious Rust Crates Impersonate Popular Logger to Steal Wallet Keys
Socket uncovers malicious Rust crates impersonating fast_log to steal Solana and Ethereum wallet keys from source code.
@sismo-core/hydra-s3
Advanced tools
Implementations of Hydra S3 prover (js/ts) and verifiers (js/ts/Solidity)
Made by Sismo
$ yarn add @sismo-core/hydra-s3
const prover = new HydraS3Prover(
registryTree,
commitmentMapperPubKey,
// + Optional override of the circuit path for ES module (see below for more information)
{
wasmPath: "https://[Your server].hydra-s3.wasm",
zkeyPath: "https://[Your server].hydra-s3.zkey"
}
);
Params | Type | Description |
---|---|---|
registryTree | MerkleTree | Registry Merkle tree that contain the Accounts Merkle tree |
commitmentMapperPubKey | EddsaPublicKey | Pub key of the CommitmentMapper |
To generate the proof, we need to provide a .wasm and a .zkey to the witness calculator. For CommonJS modules we add theses files directly in the package and we resolve the path. For ES module we can't do that, that's why we choose to host files on an S3.
If this solution doesn't suite you or if you want to optimize the download time, you can override S3 paths by adding a third params in the HydraS3Prover constructor and host files wherever you want.
export const wasmPath = "https://static.sismo.io/hydra-s3-zkps/v1/hydra-s3.wasm";
export const zkeyPath = "https://static.sismo.io/hydra-s3-zkps/v1/hydra-s3.zkey";
export const wasmPath = require.resolve('./hydra-s3.wasm');
export const zkeyPath = require.resolve('./hydra-s3.zkey');
const source: HydraS3Account = {
identifier: address,
secret,
commitmentReceipt
}
const destination: DestinationInput = {
identifier: address,
secret,
commitmentReceipt,
chainId: 1,
}
const claim: ClaimInput = {
value?: BigNumberish;
// A comparator of 0 means the accounts value in the tree can be more than the value in the claim
// A comparator of 1 means the accounts value in the tree must be equal to the value in the claim
comparator?: number;
registryTree: KVMerkleTree;
accountsTree: KVMerkleTree;
}
const params = {
vault,
source,
destination,
claim,
requestIdentifier
}
const snarkProof = await prover.generateSnarkProof(params);
// Generate inputs
// This function is automatically called by generateSnarkProof but you can call it in your tests
const { privateInputs, publicInputs } = await prover.generateInputs(params);
// Throw human readable errors
// This function is automatically called by generateSnarkProof but you can call it in your tests
try {
await prover.userParamsValidation(params);
} catch (e) {
console.log(e);
}
Params | Type | Description |
---|---|---|
source | HydraS3Account | VaultAccount | Source account |
destination | HydraS3Account | VaultAccount | Destination account |
claimValue | BigNumberish | Must be 0 <= claimValue <= accountValue if claimComparator is false or claimValue = accountValue if claimComparator is true |
chainId | BigNumberish | Chain id |
accountsTree | MerkleTree | Merkle tree constituted which include the source and a value |
requestIdentifier | BigNumberish | proofIdentifier = hash((hash(source.secret, 1), requestIdentifier) |
claimComparator | boolean | Define if the value is strict or not |
export type HydraS3Account = {
identifier: BigNumberish,
secret: BigNumberish,
commitmentReceipt: [BigNumberish, BigNumberish, BigNumberish]
};
export type VaultAccount = {
identifier: BigNumberish;
secret: BigNumberish;
namespace: BigNumberish;
};
import { HydraS3Verifier } from "@sismo-core/hydra-s3";
const isValid = await HydraS3Verifier.verifyProof(snarkProof.a, snarkProof.b, snarkProof.c, snarkProof.input);
import {HydraS3Verifier} from "@sismo-core/hydra-s3/contracts/HydraS3Verifier.sol";
struct ZKProof {
uint256[2] a;
uint256[2][2] b;
uint256[2] c;
uint256[10] input;
}
contract HydraS3Attester {
HydraS3Verifier internal _verifier;
error InvalidSnarkProof(uint256[10] publicInputs);
constructor(
HydraS3Verifier hydraS3Verifier
) {
_verifier = hydraS3Verifier;
}
function attest(ZKProof calldata proof) external {
if(! _verifier.verifyProof(proof.a, proof.b, proof.c, proof.input)) {
revert InvalidSnarkProof(proof.input);
}
}
}
Distributed under the MIT License.
Please, feel free to open issues, PRs or simply provide feedback!
FAQs
Hydra S3 Proving scheme
We found that @sismo-core/hydra-s3 demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 4 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Socket uncovers malicious Rust crates impersonating fast_log to steal Solana and Ethereum wallet keys from source code.
Research
A malicious package uses a QR code as steganography in an innovative technique.
Research
/Security News
Socket identified 80 fake candidates targeting engineering roles, including suspected North Korean operators, exposing the new reality of hiring as a security function.