ptwist.h 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. #ifndef __PTWIST_H__
  2. #define __PTWIST_H__
  3. #define PTWIST_BITS 168 /* must be a multiple of 8 */
  4. #define PTWIST_BYTES (PTWIST_BITS/8)
  5. #define PTWIST_TAG_BITS 224 /* must be a multiple of 8 */
  6. #define PTWIST_TAG_BYTES (PTWIST_TAG_BITS/8)
  7. #define PTWIST_PUZZLE_STRENGTH 0 /*21*/ /* set to 0 to disable client puzzle */
  8. #define PTWIST_PUZZLE_MASK ((1<<PTWIST_PUZZLE_STRENGTH)-1)
  9. #if PTWIST_PUZZLE_STRENGTH == 0
  10. #define PTWIST_RESP_BITS 0
  11. #else
  12. #define PTWIST_RESP_BITS (PTWIST_PUZZLE_STRENGTH+6)
  13. #endif
  14. #define PTWIST_RESP_BYTES ((PTWIST_RESP_BITS+7)/8)
  15. #define PTWIST_RESP_MASK ((1<<(((PTWIST_RESP_BITS&7)==0)?8:(PTWIST_RESP_BITS&7)))-1)
  16. #define PTWIST_HASH_SHOWBITS (PTWIST_TAG_BITS-PTWIST_BITS-PTWIST_RESP_BITS)
  17. #define PTWIST_HASH_TOTBITS (PTWIST_HASH_SHOWBITS+PTWIST_PUZZLE_STRENGTH)
  18. #define PTWIST_HASH_TOTBYTES ((PTWIST_HASH_TOTBITS+7)/8)
  19. #define PTWIST_HASH_MASK ((1<<(((PTWIST_HASH_TOTBITS&7)==0)?8:(PTWIST_HASH_TOTBITS&7)))-1)
  20. typedef unsigned char byte;
  21. /* Figure out whether there's a point with x-coordinate x on the main
  22. * curve. If not, then there's one on the twist curve. (There are
  23. * actually two, which are negatives of each other; that doesn't
  24. * matter.) Multiply that point by seckey and set out to the
  25. * x-coordinate of the result. */
  26. void ptwist_pointmul(byte out[PTWIST_BYTES], const byte x[PTWIST_BYTES],
  27. const byte seckey[PTWIST_BYTES]);
  28. #endif