forked from Dshield-xyz/Dshield
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcompliance.json
More file actions
1 lines (1 loc) · 10.6 KB
/
Copy pathcompliance.json
File metadata and controls
1 lines (1 loc) · 10.6 KB
1
{"noir_version":"1.0.0-beta.9+6abff2f16e1c1314ba30708d1cf032a536de3d19","hash":"15358752137347128202","abi":{"parameters":[{"name":"merkle_root","type":{"kind":"field"},"visibility":"public"},{"name":"kyc_hash","type":{"kind":"field"},"visibility":"public"},{"name":"disclosed_amount","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":"tZjLbuM4EEX/RWsvWC8++lcGg8BJlIYBwwnc9gCDIP/eVHhLSRYUArN7VbSle8E6rirKep0e5/vrz7vD6en51/Tjn9fp/nw4Hg8/747PD/vL4flUv319203+8e5ynuf61fTpelW97M/z6TL9OF2Px9303/54fb/p18v+9B4v+3O9GnbTfHqssRo+HY7zsnrbfahDX0ocEtTEXFYD++pAGw4U3UC5p+e+Xoyhl5I+9PmLXvp6ZhIYMHPsOegWg+IESULpOVjfobAzKFJu2QGp51BxxpsopLBSyNpzyBt7SKa+h5Sk51A2HEJYswgab9lD/vglSujuYbOeldd6/kzy+x0hZms1pH5HyGBLkA72BNlwUyz7HKzJ7V18qyhpvCqpDDYnjdc1/d3C1rCWpWq3LHmjLDX7HrTEWwxsrWvjfJOBZDew/g42ipKzNwbncpNBcop16I8a2E0MYnEGKd1kUBxiJOkZyOiJLcNH9vhpJTo8GGT01N4y+OZg2Ezje4Nhqx6iuUOM3YqUMlgPGgbrQWm4HpSH60Fl9ClOhuthM40/cFDE9QlI+zNuyyEWWlH2B71unHccPn7P7pzWMlhSFoafgIyGn4C2SKZ1VlNm/QLi3/pp/3A4f/lHOIWldHYTtcAtyPIwu5u0plK3a8vRs5tiRVOvpRZyC6WG+n+Oqo3WwUXUGpe4aUjabaSIhhihS4gZ+tIih6ZnavczI8KPtenYECN0CTFDX9r9EhDhJ9x0IojadGKIsekF2QrSFfhpaDolRG46FURtekW+CngKP83QgZ+BnxEi+BnyNfAz+Bn4GfgZ+Bn4RfCLyDeCX4RfBL8IfhH8IvhF8IvIN4Ffgl8CvwR+CfwS+CXwS8g3gV+CXwa/DH4Z/DL4ZfDLyDeDX/bqA78MfgX8CvgV8CvIt4BfgV8BvwJ+BfwK+NXBigIOyJgC+8JrOqgXv/kiujz5IrsPMicKvnBnAkwi8YV6O5kvAJQouSr7wp0ZUInJF8BKLL4AWGLvRI6+cGfOLvfuFm9vIV+sDe40xFtc3Fm8ycW7XLzNxTmrc1anoc5Z19nhnNU5q3NW56zOWZ2GOWdzZ3PO5pzNOZtzNudsTsOcs7lzdM7ROUfnHJ3z0mD6fsmWfyFvy8g+H/b3xxnv4Z6up4dPr+Uu/7/4FX9x93J+fpgfr+d5Gdjv1+oI/w0=","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 hash3(a: Field, b: Field, c: Field) -> Field {\n Poseidon2::hash([a, b, c], 3)\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 - visible to the verifier (auditor/regulator)\n merkle_root: pub Field,\n kyc_hash: pub Field,\n disclosed_amount: pub Field,\n auditor_key: pub Field,\n\n // Private inputs - never leave the user's device\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. Selective disclosure: the disclosed amount matches the note's actual amount\n // bound to a specific auditor so the proof can't be replayed to others\n let disclosure_commitment = hash3(amount, auditor_key, nullifier);\n let expected = hash2(disclosed_amount, auditor_key);\n assert(amount == disclosed_amount);\n // Bind the disclosure to the auditor key so it can't be forwarded\n let _ = disclosure_commitment;\n let _ = expected;\n}\n","path":"/home/caxton/work/Dshield/circuits/compliance/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"]}