#ifndef EDDSA_H #define EDDSA_H #include /* for size_t */ #include /* foor bool */ #include /* for uint8_t */ #ifndef __has_attribute #define __has_attribute(x) 0 #endif #ifndef EDDSA_STATIC # if defined(_WIN32) || defined(__CYGWIN__) # ifdef EDDSA_BUILD # define EDDSA_DECL __declspec(dllexport) # else # define EDDSA_DECL __declspec(dllimport) # endif # elif defined(EDDSA_BUILD) && defined(__GNUC__) && __GNUC__ >= 4 # define EDDSA_DECL __attribute__((visibility ("default"))) # elif defined(EDDSA_BUILD) && defined(__CLANG__) && __has_attribute(visibility) # define EDDSA_DECL __attribute__((visibility ("default"))) # endif #endif #ifndef EDDSA_DECL #define EDDSA_DECL #endif #ifdef __cplusplus extern "C" { #endif /* * Ed25519 DSA */ #define ED25519_KEY_LEN 32 #define ED25519_SIG_LEN 64 EDDSA_DECL void ed25519_genpub(uint8_t pub[ED25519_KEY_LEN], const uint8_t sec[ED25519_KEY_LEN]); EDDSA_DECL void ed25519_sign(uint8_t sig[ED25519_SIG_LEN], const uint8_t sec[ED25519_KEY_LEN], const uint8_t pub[ED25519_KEY_LEN], const uint8_t *data, size_t len); EDDSA_DECL bool ed25519_verify(const uint8_t sig[ED25519_SIG_LEN], const uint8_t pub[ED25519_KEY_LEN], const uint8_t *data, size_t len); /* * X25519 Diffie-Hellman */ #define X25519_KEY_LEN 32 EDDSA_DECL void x25519_base(uint8_t out[X25519_KEY_LEN], const uint8_t scalar[X25519_KEY_LEN]); EDDSA_DECL void x25519(uint8_t out[X25519_KEY_LEN], const uint8_t scalar[X25519_KEY_LEN], const uint8_t point[X25519_KEY_LEN]); /* * Key-conversion between ed25519 and x25519 */ EDDSA_DECL void pk_ed25519_to_x25519(uint8_t out[X25519_KEY_LEN], const uint8_t in[ED25519_KEY_LEN]); EDDSA_DECL void sk_ed25519_to_x25519(uint8_t out[X25519_KEY_LEN], const uint8_t in[ED25519_KEY_LEN]); /* * Obsolete Interface */ /* eddsa */ EDDSA_DECL void eddsa_genpub(uint8_t pub[32], const uint8_t sec[32]); EDDSA_DECL void eddsa_sign(uint8_t sig[64], const uint8_t sec[32], const uint8_t pub[32], const uint8_t *data, size_t len); EDDSA_DECL bool eddsa_verify(const uint8_t sig[64], const uint8_t pub[32], const uint8_t *data, size_t len); /* diffie-hellman */ EDDSA_DECL void DH(uint8_t out[32], const uint8_t sec[32], const uint8_t point[32]); /* key conversion */ EDDSA_DECL void eddsa_pk_eddsa_to_dh(uint8_t out[32], const uint8_t in[32]); EDDSA_DECL void eddsa_sk_eddsa_to_dh(uint8_t out[32], const uint8_t in[32]); #ifdef __cplusplus } #endif #endif