bits.psm 508 B

1234567891011121314151617181920212223242526272829
  1. contract bits_decomposition
  2. param x
  3. {% for i in range(256) %}
  4. private b_{{i}}
  5. {% endfor %}
  6. # x is unpacked into little endian order
  7. unpack_bits x b_0 b_255
  8. {% for i in range(256) %}
  9. # (1 - b) * b == 0
  10. lc0_add_one
  11. lc0_sub b_{{i}}
  12. lc1_add b_{{i}}
  13. enforce
  14. {% endfor %}
  15. {% for i in range(256) %}
  16. lc0_add b_{{i}}
  17. lc_coeff_double
  18. {% endfor %}
  19. lc_coeff_reset
  20. lc0_sub x
  21. lc1_add_one
  22. enforce
  23. end