1 #ifndef SC25519_H 2 #define SC25519_H 3 4 #define sc25519 crypto_sign_ed25519_amd64_64_sc25519 5 #define shortsc25519 crypto_sign_ed25519_amd64_64_shortsc25519 6 #define sc25519_from32bytes crypto_sign_ed25519_amd64_64_sc25519_from32bytes 7 #define shortsc25519_from16bytes crypto_sign_ed25519_amd64_64_shortsc25519_from16bytes 8 #define sc25519_from64bytes crypto_sign_ed25519_amd64_64_sc25519_from64bytes 9 #define sc25519_from_shortsc crypto_sign_ed25519_amd64_64_sc25519_from_shortsc 10 #define sc25519_to32bytes crypto_sign_ed25519_amd64_64_sc25519_to32bytes 11 #define sc25519_iszero_vartime crypto_sign_ed25519_amd64_64_sc25519_iszero_vartime 12 #define sc25519_isshort_vartime crypto_sign_ed25519_amd64_64_sc25519_isshort_vartime 13 #define sc25519_lt crypto_sign_ed25519_amd64_64_sc25519_lt 14 #define sc25519_add crypto_sign_ed25519_amd64_64_sc25519_add 15 #define sc25519_sub_nored crypto_sign_ed25519_amd64_64_sc25519_sub_nored 16 #define sc25519_mul crypto_sign_ed25519_amd64_64_sc25519_mul 17 #define sc25519_mul_shortsc crypto_sign_ed25519_amd64_64_sc25519_mul_shortsc 18 #define sc25519_window4 crypto_sign_ed25519_amd64_64_sc25519_window4 19 #define sc25519_slide crypto_sign_ed25519_amd64_64_sc25519_slide 20 #define sc25519_2interleave2 crypto_sign_ed25519_amd64_64_sc25519_2interleave2 21 #define sc25519_barrett crypto_sign_ed25519_amd64_64_sc25519_barrett 22 23 typedef struct 24 { 25 unsigned long long v[4]; 26 } 27 sc25519; 28 29 typedef struct 30 { 31 unsigned long long v[2]; 32 } 33 shortsc25519; 34 35 void sc25519_from32bytes(sc25519 *r, const unsigned char x[32]); 36 37 void sc25519_from64bytes(sc25519 *r, const unsigned char x[64]); 38 39 void sc25519_from_shortsc(sc25519 *r, const shortsc25519 *x); 40 41 void sc25519_to32bytes(unsigned char r[32], const sc25519 *x); 42 43 int sc25519_iszero_vartime(const sc25519 *x); 44 45 int sc25519_lt(const sc25519 *x, const sc25519 *y); 46 47 void sc25519_add(sc25519 *r, const sc25519 *x, const sc25519 *y); 48 49 void sc25519_sub_nored(sc25519 *r, const sc25519 *x, const sc25519 *y); 50 51 void sc25519_mul(sc25519 *r, const sc25519 *x, const sc25519 *y); 52 53 void sc25519_mul_shortsc(sc25519 *r, const sc25519 *x, const shortsc25519 *y); 54 55 /* Convert s into a representation of the form \sum_{i=0}^{63}r[i]2^(4*i) 56 * with r[i] in {-8,...,7} 57 */ 58 void sc25519_window4(signed char r[85], const sc25519 *s); 59 60 void sc25519_slide(signed char r[256], const sc25519 *s, int swindowsize); 61 62 void sc25519_2interleave2(unsigned char r[127], const sc25519 *s1, const sc25519 *s2); 63 64 void sc25519_barrett(sc25519 *r, unsigned long long x[8]); 65 66 #endif 67