1*1c60b9acSAndroid Build Coastguard Worker /* $OpenBSD: sc25519.h,v 1.3 2013/12/09 11:03:45 markus Exp $ */ 2*1c60b9acSAndroid Build Coastguard Worker 3*1c60b9acSAndroid Build Coastguard Worker /* 4*1c60b9acSAndroid Build Coastguard Worker * Public Domain, Authors: Daniel J. Bernstein, Niels Duif, Tanja Lange, 5*1c60b9acSAndroid Build Coastguard Worker * Peter Schwabe, Bo-Yin Yang. 6*1c60b9acSAndroid Build Coastguard Worker * Copied from supercop-20130419/crypto_sign/ed25519/ref/sc25519.h 7*1c60b9acSAndroid Build Coastguard Worker */ 8*1c60b9acSAndroid Build Coastguard Worker 9*1c60b9acSAndroid Build Coastguard Worker #ifndef SC25519_H 10*1c60b9acSAndroid Build Coastguard Worker #define SC25519_H 11*1c60b9acSAndroid Build Coastguard Worker 12*1c60b9acSAndroid Build Coastguard Worker #define sc25519 crypto_sign_ed25519_ref_sc25519 13*1c60b9acSAndroid Build Coastguard Worker #define shortsc25519 crypto_sign_ed25519_ref_shortsc25519 14*1c60b9acSAndroid Build Coastguard Worker #define sc25519_from32bytes crypto_sign_ed25519_ref_sc25519_from32bytes 15*1c60b9acSAndroid Build Coastguard Worker #define shortsc25519_from16bytes crypto_sign_ed25519_ref_shortsc25519_from16bytes 16*1c60b9acSAndroid Build Coastguard Worker #define sc25519_from64bytes crypto_sign_ed25519_ref_sc25519_from64bytes 17*1c60b9acSAndroid Build Coastguard Worker #define sc25519_from_shortsc crypto_sign_ed25519_ref_sc25519_from_shortsc 18*1c60b9acSAndroid Build Coastguard Worker #define sc25519_to32bytes crypto_sign_ed25519_ref_sc25519_to32bytes 19*1c60b9acSAndroid Build Coastguard Worker #define sc25519_iszero_vartime crypto_sign_ed25519_ref_sc25519_iszero_vartime 20*1c60b9acSAndroid Build Coastguard Worker #define sc25519_isshort_vartime crypto_sign_ed25519_ref_sc25519_isshort_vartime 21*1c60b9acSAndroid Build Coastguard Worker #define sc25519_lt_vartime crypto_sign_ed25519_ref_sc25519_lt_vartime 22*1c60b9acSAndroid Build Coastguard Worker #define sc25519_add crypto_sign_ed25519_ref_sc25519_add 23*1c60b9acSAndroid Build Coastguard Worker #define sc25519_sub_nored crypto_sign_ed25519_ref_sc25519_sub_nored 24*1c60b9acSAndroid Build Coastguard Worker #define sc25519_mul crypto_sign_ed25519_ref_sc25519_mul 25*1c60b9acSAndroid Build Coastguard Worker #define sc25519_mul_shortsc crypto_sign_ed25519_ref_sc25519_mul_shortsc 26*1c60b9acSAndroid Build Coastguard Worker #define sc25519_window3 crypto_sign_ed25519_ref_sc25519_window3 27*1c60b9acSAndroid Build Coastguard Worker #define sc25519_window5 crypto_sign_ed25519_ref_sc25519_window5 28*1c60b9acSAndroid Build Coastguard Worker #define sc25519_2interleave2 crypto_sign_ed25519_ref_sc25519_2interleave2 29*1c60b9acSAndroid Build Coastguard Worker 30*1c60b9acSAndroid Build Coastguard Worker typedef struct 31*1c60b9acSAndroid Build Coastguard Worker { 32*1c60b9acSAndroid Build Coastguard Worker uint32_t v[32]; 33*1c60b9acSAndroid Build Coastguard Worker } 34*1c60b9acSAndroid Build Coastguard Worker sc25519; 35*1c60b9acSAndroid Build Coastguard Worker 36*1c60b9acSAndroid Build Coastguard Worker typedef struct 37*1c60b9acSAndroid Build Coastguard Worker { 38*1c60b9acSAndroid Build Coastguard Worker uint32_t v[16]; 39*1c60b9acSAndroid Build Coastguard Worker } 40*1c60b9acSAndroid Build Coastguard Worker shortsc25519; 41*1c60b9acSAndroid Build Coastguard Worker 42*1c60b9acSAndroid Build Coastguard Worker void sc25519_from32bytes(sc25519 *r, const unsigned char x[32]); 43*1c60b9acSAndroid Build Coastguard Worker 44*1c60b9acSAndroid Build Coastguard Worker void shortsc25519_from16bytes(shortsc25519 *r, const unsigned char x[16]); 45*1c60b9acSAndroid Build Coastguard Worker 46*1c60b9acSAndroid Build Coastguard Worker void sc25519_from64bytes(sc25519 *r, const unsigned char x[64]); 47*1c60b9acSAndroid Build Coastguard Worker 48*1c60b9acSAndroid Build Coastguard Worker void sc25519_from_shortsc(sc25519 *r, const shortsc25519 *x); 49*1c60b9acSAndroid Build Coastguard Worker 50*1c60b9acSAndroid Build Coastguard Worker void sc25519_to32bytes(unsigned char r[32], const sc25519 *x); 51*1c60b9acSAndroid Build Coastguard Worker 52*1c60b9acSAndroid Build Coastguard Worker int sc25519_iszero_vartime(const sc25519 *x); 53*1c60b9acSAndroid Build Coastguard Worker 54*1c60b9acSAndroid Build Coastguard Worker int sc25519_isshort_vartime(const sc25519 *x); 55*1c60b9acSAndroid Build Coastguard Worker 56*1c60b9acSAndroid Build Coastguard Worker int sc25519_lt_vartime(const sc25519 *x, const sc25519 *y); 57*1c60b9acSAndroid Build Coastguard Worker 58*1c60b9acSAndroid Build Coastguard Worker void sc25519_add(sc25519 *r, const sc25519 *x, const sc25519 *y); 59*1c60b9acSAndroid Build Coastguard Worker 60*1c60b9acSAndroid Build Coastguard Worker void sc25519_sub_nored(sc25519 *r, const sc25519 *x, const sc25519 *y); 61*1c60b9acSAndroid Build Coastguard Worker 62*1c60b9acSAndroid Build Coastguard Worker void sc25519_mul(sc25519 *r, const sc25519 *x, const sc25519 *y); 63*1c60b9acSAndroid Build Coastguard Worker 64*1c60b9acSAndroid Build Coastguard Worker void sc25519_mul_shortsc(sc25519 *r, const sc25519 *x, const shortsc25519 *y); 65*1c60b9acSAndroid Build Coastguard Worker 66*1c60b9acSAndroid Build Coastguard Worker /* Convert s into a representation of the form \sum_{i=0}^{84}r[i]2^3 67*1c60b9acSAndroid Build Coastguard Worker * with r[i] in {-4,...,3} 68*1c60b9acSAndroid Build Coastguard Worker */ 69*1c60b9acSAndroid Build Coastguard Worker void sc25519_window3(signed char r[85], const sc25519 *s); 70*1c60b9acSAndroid Build Coastguard Worker 71*1c60b9acSAndroid Build Coastguard Worker /* Convert s into a representation of the form \sum_{i=0}^{50}r[i]2^5 72*1c60b9acSAndroid Build Coastguard Worker * with r[i] in {-16,...,15} 73*1c60b9acSAndroid Build Coastguard Worker */ 74*1c60b9acSAndroid Build Coastguard Worker void sc25519_window5(signed char r[51], const sc25519 *s); 75*1c60b9acSAndroid Build Coastguard Worker 76*1c60b9acSAndroid Build Coastguard Worker void sc25519_2interleave2(unsigned char r[127], const sc25519 *s1, const sc25519 *s2); 77*1c60b9acSAndroid Build Coastguard Worker 78*1c60b9acSAndroid Build Coastguard Worker #endif 79