prove_verify.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. #!/usr/bin/env python3
  2. """
  3. Script for playing around with the Python SDK
  4. """
  5. from darkfi_sdk_py import Base
  6. from darkfi_sdk_py import Scalar
  7. from darkfi_sdk_py import Point
  8. from darkfi_sdk_py import Affine
  9. from darkfi_sdk_py import Proof
  10. from darkfi_sdk_py import VerifyingKey
  11. from darkfi_sdk_py import ProvingKey
  12. from darkfi_sdk_py import Affine
  13. from darkfi_sdk_py import ZkCircuit
  14. from darkfi_sdk_py import ZkBinary
  15. from time import time
  16. from sys import getsizeof
  17. ##### get circuit #####
  18. f = open("simple.zk.bin", "rb")
  19. bincode = f.read()
  20. f.close()
  21. print(f"bincode {bincode}")
  22. zkbin = ZkBinary.decode(bincode)
  23. print(f"zkbin {zkbin}")
  24. ##### prover #####
  25. k = 13
  26. value = 42
  27. value_blind = Scalar.random()
  28. zkcircuit = ZkCircuit(zkbin)
  29. zkcircuit.witness_base(Base.from_u128(value))
  30. zkcircuit.witness_scalar(value_blind)
  31. zkcircuit = zkcircuit.build(zkbin)
  32. ##### proving key #####
  33. print("making proving key...")
  34. proving_key = ProvingKey.build(k, zkcircuit)
  35. # pedersen commitment
  36. comm = Point.mul_short(value)
  37. comm_r = Point.blinding_point(value_blind)
  38. valcom = comm.add(comm_r)
  39. print(f"valcom {valcom}")
  40. (x, y) = valcom.to_affine().coordinates()
  41. print(f"x {x}")
  42. print(f"y {y}")
  43. print(x)
  44. print(y)
  45. publics = [x, y]
  46. start = time()
  47. print("making proof...")
  48. proof = Proof.create(proving_key, [zkcircuit], publics)
  49. print(f"time {time() - start}")
  50. #################### VERIFICATION
  51. print("verification starts.....")
  52. start = time()
  53. zkcircuit_v = zkcircuit.verifier_build(zkbin)
  54. print(f"building verifying key")
  55. start = time()
  56. # IMPORTANT QUESTION: can this be uploaded to an eth smart contract
  57. verifying_key = VerifyingKey.build(k, zkcircuit_v)
  58. print(f"time {time() - start}")
  59. print(f"verifying")
  60. start = time()
  61. proof.verify(verifying_key, publics)
  62. print(f"time {time() - start}")
  63. print(f"size of proof : {getsizeof(proof)}")
  64. print(f"size of proving key : {getsizeof(proving_key)}")
  65. print(f"size of verifying key: {getsizeof(verifying_key)}")
  66. ## SHOULD FAILLLLLL
  67. proof.verify(verifying_key, [x])