sapling.pism 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. constant G_SPEND FixedGenerator
  2. constant G_PROOF FixedGenerator
  3. constant CRH_IVK BlakePersonalization
  4. constant JUBJUB_FR_CAPACITY ByteSize
  5. contract input_spend
  6. param value U64
  7. param randomness Fr
  8. param ak Point
  9. param ar Fr
  10. param nsk Fr
  11. param g_d Point
  12. param commitment_randomness Fr
  13. param auth_path_0_0 Scalar
  14. param auth_path_0_1 Bool
  15. param auth_path_1_0 Scalar
  16. param auth_path_1_1 Bool
  17. # ...
  18. param anchor Scalar
  19. start
  20. # let rk: Point = ak + ar * G_SPEND
  21. witness ak param:ak
  22. assert_not_small_order ak
  23. fr_as_binary_le ar param:ar
  24. ec_mul_const ar ar G_SPEND
  25. ec_add rk ak ar
  26. # emit rk
  27. emit_ec rk
  28. # let nk: Point = nsk * G_PROOF
  29. fr_as_binary_le nsk param:nsk
  30. ec_mul_const nk nsk G_PROOF
  31. # let mut ivk_preimage: BinaryNumber = []
  32. alloc_binary ivk_preimage
  33. # ivk_preimage.put(ak)
  34. ec_repr repr_ak ak
  35. binary_extend ivk_preimage repr_ak
  36. # let mut nf_preimage: BinaryNumber = []
  37. alloc_binary nf_preimage
  38. ec_repr repr_nk nk
  39. binary_clone repr_nk repr_nk2
  40. # ivk_preimage.put(nk)
  41. binary_extend ivk_preimage repr_nk
  42. # nf_preimage.put(nk)
  43. binary_extend ivk_preimage repr_nk2
  44. # assert ivk_preimage.len() == 512
  45. static_assert_binary_size ivk_preimage 512
  46. # assert nf_preimage.len() == 256
  47. static_assert_binary_size nf_preimage 256
  48. # let mut ivk = blake2s(ivk_preimage, CRH_IVK)
  49. blake2s ivk ivk_preimage CRH_IVK
  50. # ivk.truncate(JUBJUB_FR_CAPACITY)
  51. binary_truncate ivk JUBJUB_FR_CAPACITY
  52. # let pk_d: Point = ivk * g_d
  53. witness g_d param:g_d
  54. assert_not_small_order g_d
  55. ec_mul pk_d ivk g_d
  56. end