reputrans 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +114 -0
  3. package/circuits/composite/target/composite.json +1 -0
  4. package/circuits/field_disclosure/target/field_disclosure.json +1 -0
  5. package/circuits/map_to_curve/target/map_to_curve.json +1 -0
  6. package/circuits/poseidon_compat/target/poseidon_compat.json +1 -0
  7. package/circuits/range_proof/target/range_proof.json +1 -0
  8. package/circuits/set_membership/target/set_membership.json +1 -0
  9. package/circuits/signature_verify/target/signature_verify.json +1 -0
  10. package/dist/cli/src/auto-detect.d.ts +9 -0
  11. package/dist/cli/src/auto-detect.d.ts.map +1 -0
  12. package/dist/cli/src/auto-detect.js +21 -0
  13. package/dist/cli/src/auto-detect.js.map +1 -0
  14. package/dist/cli/src/commands/inspect.d.ts +6 -0
  15. package/dist/cli/src/commands/inspect.d.ts.map +1 -0
  16. package/dist/cli/src/commands/inspect.js +43 -0
  17. package/dist/cli/src/commands/inspect.js.map +1 -0
  18. package/dist/cli/src/commands/issue.d.ts +8 -0
  19. package/dist/cli/src/commands/issue.d.ts.map +1 -0
  20. package/dist/cli/src/commands/issue.js +107 -0
  21. package/dist/cli/src/commands/issue.js.map +1 -0
  22. package/dist/cli/src/commands/keygen.d.ts +7 -0
  23. package/dist/cli/src/commands/keygen.d.ts.map +1 -0
  24. package/dist/cli/src/commands/keygen.js +39 -0
  25. package/dist/cli/src/commands/keygen.js.map +1 -0
  26. package/dist/cli/src/commands/prove.d.ts +9 -0
  27. package/dist/cli/src/commands/prove.d.ts.map +1 -0
  28. package/dist/cli/src/commands/prove.js +139 -0
  29. package/dist/cli/src/commands/prove.js.map +1 -0
  30. package/dist/cli/src/commands/verify.d.ts +6 -0
  31. package/dist/cli/src/commands/verify.d.ts.map +1 -0
  32. package/dist/cli/src/commands/verify.js +63 -0
  33. package/dist/cli/src/commands/verify.js.map +1 -0
  34. package/dist/cli/src/index.d.ts +3 -0
  35. package/dist/cli/src/index.d.ts.map +1 -0
  36. package/dist/cli/src/index.js +45 -0
  37. package/dist/cli/src/index.js.map +1 -0
  38. package/dist/sdk/src/circuit-loader.d.ts +19 -0
  39. package/dist/sdk/src/circuit-loader.d.ts.map +1 -0
  40. package/dist/sdk/src/circuit-loader.js +65 -0
  41. package/dist/sdk/src/circuit-loader.js.map +1 -0
  42. package/dist/sdk/src/eddsa.d.ts +63 -0
  43. package/dist/sdk/src/eddsa.d.ts.map +1 -0
  44. package/dist/sdk/src/eddsa.js +177 -0
  45. package/dist/sdk/src/eddsa.js.map +1 -0
  46. package/dist/sdk/src/encoder.d.ts +49 -0
  47. package/dist/sdk/src/encoder.d.ts.map +1 -0
  48. package/dist/sdk/src/encoder.js +117 -0
  49. package/dist/sdk/src/encoder.js.map +1 -0
  50. package/dist/sdk/src/identity.d.ts +69 -0
  51. package/dist/sdk/src/identity.d.ts.map +1 -0
  52. package/dist/sdk/src/identity.js +110 -0
  53. package/dist/sdk/src/identity.js.map +1 -0
  54. package/dist/sdk/src/index.d.ts +18 -0
  55. package/dist/sdk/src/index.d.ts.map +1 -0
  56. package/dist/sdk/src/index.js +18 -0
  57. package/dist/sdk/src/index.js.map +1 -0
  58. package/dist/sdk/src/poseidon.d.ts +33 -0
  59. package/dist/sdk/src/poseidon.d.ts.map +1 -0
  60. package/dist/sdk/src/poseidon.js +59 -0
  61. package/dist/sdk/src/poseidon.js.map +1 -0
  62. package/dist/sdk/src/proof-request.d.ts +58 -0
  63. package/dist/sdk/src/proof-request.d.ts.map +1 -0
  64. package/dist/sdk/src/proof-request.js +68 -0
  65. package/dist/sdk/src/proof-request.js.map +1 -0
  66. package/dist/sdk/src/prover.d.ts +38 -0
  67. package/dist/sdk/src/prover.d.ts.map +1 -0
  68. package/dist/sdk/src/prover.js +108 -0
  69. package/dist/sdk/src/prover.js.map +1 -0
  70. package/dist/sdk/src/vc-parser.d.ts +50 -0
  71. package/dist/sdk/src/vc-parser.d.ts.map +1 -0
  72. package/dist/sdk/src/vc-parser.js +96 -0
  73. package/dist/sdk/src/vc-parser.js.map +1 -0
  74. package/dist/sdk/src/verifier.d.ts +19 -0
  75. package/dist/sdk/src/verifier.d.ts.map +1 -0
  76. package/dist/sdk/src/verifier.js +31 -0
  77. package/dist/sdk/src/verifier.js.map +1 -0
  78. package/dist/verifier/src/did-resolver.d.ts +36 -0
  79. package/dist/verifier/src/did-resolver.d.ts.map +1 -0
  80. package/dist/verifier/src/did-resolver.js +179 -0
  81. package/dist/verifier/src/did-resolver.js.map +1 -0
  82. package/dist/verifier/src/index.d.ts +2 -0
  83. package/dist/verifier/src/index.d.ts.map +1 -0
  84. package/dist/verifier/src/index.js +9 -0
  85. package/dist/verifier/src/index.js.map +1 -0
  86. package/dist/verifier/src/server.d.ts +6 -0
  87. package/dist/verifier/src/server.d.ts.map +1 -0
  88. package/dist/verifier/src/server.js +75 -0
  89. package/dist/verifier/src/server.js.map +1 -0
  90. package/dist/verifier/src/verify.d.ts +20 -0
  91. package/dist/verifier/src/verify.d.ts.map +1 -0
  92. package/dist/verifier/src/verify.js +97 -0
  93. package/dist/verifier/src/verify.js.map +1 -0
  94. package/package.json +41 -0
@@ -0,0 +1 @@
1
+ {"noir_version":"0.36.0+801c71880ecf8386a26737a5d8bb5b4cb164b2ab","hash":17074813174654469778,"abi":{"parameters":[{"name":"field_value","type":{"kind":"field"},"visibility":"private"},{"name":"threshold","type":{"kind":"field"},"visibility":"public"},{"name":"comparison_type","type":{"kind":"field"},"visibility":"public"}],"return_type":null,"error_types":{}},"bytecode":"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NwYftw8+Hueui5YfvmLhyiVHLF920KpjVzTVHH7kEatqGptqijVjDl7VNLZm+cqatGbMYes/5NU1QYQe7rrNklVtr2pcsmzhymNb9ln2yjllr5xf9soFZa9cUfbK1WWvPLvslZeXvfLmsleuKXvl42WvXFv2ynVlrwzt+59Xdit7ZU3ZK4tlr5xT9sr5Za9cUPbKFWWvXF32yrPLXnl52StvLnvlmrJXPl72yrVlr1xX9srwy+h/8WfZK2vKXlkse+WcslfOL3vlgrJXrih75eqyV55d9srLy155c9kr15S98vGyV64te+W6sle2/XGN/7qyW9kra8peWSx75ZyyV84ve+WCsleuKHvl6rJXnl32ysvLXnlz2SvXlL3y8bJXri175bqyV7a1qf915eZlr+wSrBzlrrstXHZwU82iQ5oWLa1pXrjksKbFM2qOWnjYkU01y49cVbO8uWYlL+CVW1T06q4VvbpbRa/uXtGre1T06p4VvbpXRa/uXdGr+1T06i0renXfil7dr6JX96/o1QMqevXAil49qKJXD67o1UMqenVNRa8eWtGrh1X06uEVvXpERa8eWdGrR1X06tEVvXpMRa8eW9Grx1X06vEVvXpCRa+e+P9/te+LO4prL3f1f4pujvu8WNlIffzeOvGL4Q/jSOwl/P96HeEP9eaANPh4vqfblDYeBTHn13YQ+hK8vlRq2aTE/8uPnsHHyf+isVMwDzzLWh+/s078kl7pFHzcWcz5M2tX4nXJ//J5QVz/09r/9JfTupSY8zF7lrj3P6dwi7jbZgMA","debug_symbols":"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","file_map":{"70":{"source":"// Range proof via bit decomposition\n//\n// Proves that a private field value satisfies a comparison against\n// a public threshold, without revealing the exact value.\n//\n// Use cases in REPUTRANS:\n// - \"My reputation score >= 80\" (without revealing exact score)\n// - \"My credential age <= 365 days\"\n// - \"My gig count >= 50\"\n//\n// Target: ~2K-5K constraints (bit decomposition dominates)\n//\n// Approach: decompose value into NUM_BITS bits, reconstruct, then\n// check the difference (value - threshold) or (threshold - value)\n// is non-negative by verifying its bit decomposition.\n\n// Number of bits for values. 64 bits covers all practical ranges\n// while keeping constraints manageable (~2K).\nglobal NUM_BITS: u32 = 64;\n\n// Prove that field_value >= threshold (comparison_type == 0)\n// or field_value <= threshold (comparison_type == 1).\n//\n// Parameters:\n// field_value - the private value to check (witness)\n// threshold - the public comparison bound\n// comparison_type - 0 for >=, 1 for <=\npub fn prove_range(\n field_value: Field,\n threshold: pub Field,\n comparison_type: pub Field,\n) {\n assert(\n (comparison_type == 0) | (comparison_type == 1),\n \"comparison_type must be 0 (gte) or 1 (lte)\",\n );\n\n // Compute the difference that must be non-negative\n let diff = if comparison_type == 0 {\n // Proving value >= threshold, so (value - threshold) >= 0\n field_value - threshold\n } else {\n // Proving value <= threshold, so (threshold - value) >= 0\n threshold - field_value\n };\n\n // Bit-decompose the difference to prove it's non-negative.\n // If diff is negative in the field, it wraps to a huge number\n // that won't fit in NUM_BITS bits, so the reconstruction check fails.\n let diff_bits = decompose_to_bits(diff);\n\n // Reconstruct from bits and verify\n let mut reconstructed: Field = 0;\n let mut power: Field = 1;\n for i in 0..NUM_BITS {\n reconstructed += diff_bits[i] * power;\n power *= 2;\n }\n assert(reconstructed == diff, \"Range check failed: value out of range\");\n}\n\n// Decompose a field element into NUM_BITS binary digits (LSB first).\n// Each bit is constrained to be 0 or 1.\nfn decompose_to_bits(value: Field) -> [Field; NUM_BITS] {\n let mut bits: [Field; NUM_BITS] = [0; NUM_BITS];\n let value_as_u64 = value as u64;\n\n for i in 0..NUM_BITS {\n let bit = ((value_as_u64 >> (i as u8)) & 1) as Field;\n assert((bit == 0) | (bit == 1), \"Bit must be binary\");\n bits[i] = bit;\n }\n\n bits\n}\n\n// Entry point\nfn main(\n field_value: Field,\n threshold: pub Field,\n comparison_type: pub Field,\n) {\n prove_range(field_value, threshold, comparison_type);\n}\n\n#[test]\nfn test_gte_pass() {\n // 100 >= 80 should pass\n prove_range(100, 80, 0);\n}\n\n#[test]\nfn test_gte_equal() {\n // 80 >= 80 should pass (diff = 0)\n prove_range(80, 80, 0);\n}\n\n#[test]\nfn test_lte_pass() {\n // 50 <= 100 should pass\n prove_range(50, 100, 1);\n}\n\n#[test]\nfn test_lte_equal() {\n // 100 <= 100 should pass\n prove_range(100, 100, 1);\n}\n\n#[test(should_fail_with = \"Range check failed: value out of range\")]\nfn test_gte_fail() {\n // 50 >= 80 should fail\n prove_range(50, 80, 0);\n}\n\n#[test(should_fail_with = \"Range check failed: value out of range\")]\nfn test_lte_fail() {\n // 100 <= 50 should fail\n prove_range(100, 50, 1);\n}\n","path":"/mnt/c/Users/danie/reputrans-core/circuits/range_proof/src/main.nr"}},"names":["main"],"brillig_names":["directive_invert","directive_integer_quotient"]}