forked from Dshield-xyz/Dshield
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdisclosure.json
More file actions
1 lines (1 loc) · 10.8 KB
/
Copy pathdisclosure.json
File metadata and controls
1 lines (1 loc) · 10.8 KB
1
{"noir_version":"1.0.0-beta.9+6abff2f16e1c1314ba30708d1cf032a536de3d19","hash":"15271771089570328515","abi":{"parameters":[{"name":"merkle_root","type":{"kind":"field"},"visibility":"public"},{"name":"kyc_hash","type":{"kind":"field"},"visibility":"public"},{"name":"threshold","type":{"kind":"field"},"visibility":"public"},{"name":"auditor_key","type":{"kind":"field"},"visibility":"public"},{"name":"kyc_preimage","type":{"kind":"field"},"visibility":"private"},{"name":"nullifier","type":{"kind":"field"},"visibility":"private"},{"name":"secret","type":{"kind":"field"},"visibility":"private"},{"name":"amount","type":{"kind":"field"},"visibility":"private"},{"name":"path_siblings","type":{"kind":"array","length":20,"type":{"kind":"field"}},"visibility":"private"},{"name":"path_bits","type":{"kind":"array","length":20,"type":{"kind":"field"}},"visibility":"private"}],"return_type":null,"error_types":{}},"bytecode":"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","debug_symbols":"tZjNbuNIDITfRWcfmk2yf+ZVFovASZyBAcMJPPYAi2DefaV0leIcJATq3RPLllhpfiG7Zb0Pz4fH28+H4/nl9dfw46/34fFyPJ2OPx9Or0/76/H1PH77/mc38OPD9XI4jF8Nd9fHrLf95XC+Dj/Ot9NpN/zen24fN/16258/4nV/Ga+G3XA4P49xNHw5ng6T+rP7zA7LqRLUkS3B82zgXx1kxUESDSwu5cflfPWIfK13f798ydfl/BhFYRBjTEsOtlJBrCQoGuqSgy871EgGVeuWFYixhhFn2kQhh5lCsSWHsrKG7MY15KxLDnWtl8JcRbC0ZQ3l8z9Rw+IaVvt55iCh2lI/rjlImauIYXkitHMkxDpnQrx7KKZ1dvbk+iq+1ZTS35VSO4dT+vta/t/GjvrZlnmxLeNKW2qlg93vct83sFhpYLLJwIUGaXkFa01ZeVrFEDcZlDIbaK9B2cSgcLathi0GLoTo95P91UB7T2ztPrL7Tyu17o1Be0/tNYNvbgyrZXxvY1jth8RFeF7sSK2d/WChsx9MuvvBYnc/mPY+xWl3P6yW8R8cFHdPs1K2PAFZjHNDqG9ySDI7LB9Wqw6fVbhsckjzPjk+vizu9S6dfe2x+zHMddtj2N/jp/3T8fLlR+UQpu7bDdJCbEGnxtgNNi5kLNjHMG4IaSxsvJZbKC3UMeQxPUzH9Rilzb7EliPabhNDdMSEvIxYkF9bjKHlR2n3x4gIv2gtLzpiQl5GLMiv7X4NiPDT2PJUEa3lqSOmlq+oVlGuws9CyzNBjC3PFNFavqFeAzyDnxXkgZ+Dnwsi+DnqdfBz+Dn4Ofg5+Dn4JfBLqDeBX4JfAr8Efgn8Evgl8EuoN4Nfhl8Gvwx+Gfwy+GXwy6g3g1+GXwG/An4F/Ar4FfArqLeAX2H3gV8Bvwp+Ffwq+FXUW8Gvwq+CXwW/Cn4V/Ma9GQ0cULGESMGeDsbmd4rE9ExR6IPKRQIFnQUwRZTCOE5OAaAimVmFgs4RUCUKBbBKVAqAlchJjImCzrEwndOtHG8VinnASUM54kpn5ZArp1w55krORs5GGkbONu8d5GzkbORs5GzkbKTh5Ox0dnJ2cnZydnJ2cnbScHJ2OidyTuScyDmR8zRg9nFpci6TSBSZolBUiGnMmhCKSKEURkHnadhsWvM0bU0UigoxDVwTQhEplMIonILO09z5VPs0eE1UiGn0fPpp8nt/Oe4fTwe8q3y5nZ/uXl1e/3njFb7cfLu8Ph2eb5fDdCJ9XBvPqH8B","file_map":{"50":{"source":"use dep::poseidon::poseidon2::Poseidon2;\n\nglobal TREE_DEPTH: u32 = 20;\n\nfn hash2(a: Field, b: Field) -> Field {\n Poseidon2::hash([a, b], 2)\n}\n\nfn constrain_bit(bit: Field) {\n assert(bit * (1 - bit) == 0);\n}\n\nfn compute_root(leaf: Field, path_siblings: [Field; TREE_DEPTH], path_bits: [Field; TREE_DEPTH]) -> Field {\n let mut cur = leaf;\n for i in 0..TREE_DEPTH {\n let sib = path_siblings[i];\n let bit = path_bits[i];\n constrain_bit(bit);\n if bit == 0 {\n cur = hash2(cur, sib);\n } else {\n cur = hash2(sib, cur);\n }\n }\n cur\n}\n\npub fn main(\n // Public inputs\n merkle_root: pub Field,\n kyc_hash: pub Field,\n threshold: pub Field,\n auditor_key: pub Field,\n\n // Private inputs\n kyc_preimage: Field,\n nullifier: Field,\n secret: Field,\n amount: Field,\n path_siblings: [Field; TREE_DEPTH],\n path_bits: [Field; TREE_DEPTH],\n) {\n // 1. KYC proof: user knows the preimage behind the registered kyc_hash\n let computed_kyc = hash2(kyc_preimage, 0);\n assert(computed_kyc == kyc_hash);\n\n // 2. Wallet authorization: user owns a note in the shielded pool\n let leaf = hash2(nullifier, secret);\n let computed_root = compute_root(leaf, path_siblings, path_bits);\n assert(computed_root == merkle_root);\n\n // 3. Threshold proof: balance >= threshold without revealing exact amount\n let amount_u64 = amount as u64;\n let threshold_u64 = threshold as u64;\n assert(amount_u64 >= threshold_u64);\n\n // 4. Bind disclosure to auditor (prevents proof replay to others)\n let _binding = Poseidon2::hash([amount, auditor_key, nullifier], 3);\n}\n","path":"/home/caxton/work/Dshield/circuits/disclosure/src/main.nr"},"58":{"source":"use std::default::Default;\nuse std::hash::Hasher;\n\ncomptime global RATE: u32 = 3;\n\npub struct Poseidon2 {\n cache: [Field; 3],\n state: [Field; 4],\n cache_size: u32,\n squeeze_mode: bool, // 0 => absorb, 1 => squeeze\n}\n\nimpl Poseidon2 {\n #[no_predicates]\n pub fn hash<let N: u32>(input: [Field; N], message_size: u32) -> Field {\n Poseidon2::hash_internal(input, message_size)\n }\n\n pub(crate) fn new(iv: Field) -> Poseidon2 {\n let mut result =\n Poseidon2 { cache: [0; 3], state: [0; 4], cache_size: 0, squeeze_mode: false };\n result.state[RATE] = iv;\n result\n }\n\n fn perform_duplex(&mut self) {\n // add the cache into sponge state\n for i in 0..RATE {\n // We effectively zero-pad the cache by only adding to the state\n // cache that is less than the specified `cache_size`\n if i < self.cache_size {\n self.state[i] += self.cache[i];\n }\n }\n self.state = crate::poseidon2_permutation(self.state, 4);\n }\n\n fn absorb(&mut self, input: Field) {\n assert(!self.squeeze_mode);\n if self.cache_size == RATE {\n // If we're absorbing, and the cache is full, apply the sponge permutation to compress the cache\n self.perform_duplex();\n self.cache[0] = input;\n self.cache_size = 1;\n } else {\n // If we're absorbing, and the cache is not full, add the input into the cache\n self.cache[self.cache_size] = input;\n self.cache_size += 1;\n }\n }\n\n fn squeeze(&mut self) -> Field {\n assert(!self.squeeze_mode);\n // If we're in absorb mode, apply sponge permutation to compress the cache.\n self.perform_duplex();\n self.squeeze_mode = true;\n\n // Pop one item off the top of the permutation and return it.\n self.state[0]\n }\n\n fn hash_internal<let N: u32>(input: [Field; N], in_len: u32) -> Field {\n let two_pow_64 = 18446744073709551616;\n let iv: Field = (in_len as Field) * two_pow_64;\n let mut sponge = Poseidon2::new(iv);\n for i in 0..input.len() {\n if i < in_len {\n sponge.absorb(input[i]);\n }\n }\n sponge.squeeze()\n }\n}\n\npub struct Poseidon2Hasher {\n _state: [Field],\n}\n\nimpl Hasher for Poseidon2Hasher {\n fn finish(self) -> Field {\n let iv: Field = (self._state.len() as Field) * 18446744073709551616; // iv = (self._state.len() << 64)\n let mut sponge = Poseidon2::new(iv);\n for i in 0..self._state.len() {\n sponge.absorb(self._state[i]);\n }\n sponge.squeeze()\n }\n\n fn write(&mut self, input: Field) {\n self._state = self._state.push_back(input);\n }\n}\n\nimpl Default for Poseidon2Hasher {\n fn default() -> Self {\n Poseidon2Hasher { _state: &[] }\n }\n}\n","path":"/home/caxton/nargo/github.com/noir-lang/poseidon/v0.2.0/src/poseidon2.nr"}},"names":["main"],"brillig_names":["directive_invert","directive_integer_quotient"]}