simple.pism 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. # :set syntax=pism
  2. # :source ../scripts/pism.vim
  3. constant G_SPEND FixedGenerator
  4. constant CRH_IVK BlakePersonalization
  5. constant JUBJUB_FR_CAPACITY BinarySize
  6. constant NOTE_COMMIT PedersenPersonalization
  7. contract input_spend
  8. param secret Fr
  9. param ak Point
  10. param value U64
  11. param is_cool Bool
  12. param path Scalar
  13. start
  14. # Compute P = xG + A
  15. witness ak param:ak
  16. assert_not_small_order ak
  17. fr_as_binary_le secret param:secret
  18. ec_mul_const public secret G_SPEND
  19. ec_add public public ak
  20. emit_ec public
  21. # Make some a blake2s hash
  22. alloc_binary preimage
  23. ec_repr repr_ak ak
  24. binary_extend preimage repr_ak
  25. static_assert_binary_size preimage 256
  26. blake2s ivk preimage CRH_IVK
  27. emit_binary ivk
  28. # Below lines are random garbage
  29. # Uncomment them to test
  30. #binary_clone ivk2 ivk
  31. #binary_truncate ivk2 JUBJUB_FR_CAPACITY
  32. #u64_as_binary_le value_bits param:value
  33. #ec_mul pk_d value_bits public
  34. #pedersen_hash cm ivk NOTE_COMMIT
  35. #ec_get_u cur cm
  36. #
  37. #alloc_bit is_cool param:is_cool
  38. #clone_bit is_cool2 is_cool
  39. #binary_push ivk is_cool2
  40. #alloc_scalar path param:path
  41. #conditionally_reverse ul ur cur path is_cool
  42. #scalar_as_binary ul_bin ul
  43. #binary_extend preimage ul_bin
  44. #scalar_enforce_equal ur ul
  45. #emit_scalar ur
  46. end