]> pd.if.org Git - zpackage/blob - crypto/libeddsa/lib/eddsa.h
add package signing code
[zpackage] / crypto / libeddsa / lib / eddsa.h
1 #ifndef EDDSA_H
2 #define EDDSA_H
3
4 #include <stddef.h>     /* for size_t */
5 #include <stdbool.h>    /* foor bool */
6 #include <stdint.h>     /* for uint8_t */
7
8 #ifndef __has_attribute
9 #define __has_attribute(x) 0
10 #endif
11
12 #ifndef EDDSA_STATIC
13 #  if defined(_WIN32) || defined(__CYGWIN__)
14 #    ifdef EDDSA_BUILD
15 #      define EDDSA_DECL __declspec(dllexport)
16 #    else
17 #      define EDDSA_DECL __declspec(dllimport)
18 #    endif
19 #  elif defined(EDDSA_BUILD) && defined(__GNUC__) && __GNUC__ >= 4
20 #    define EDDSA_DECL __attribute__((visibility ("default")))
21 #  elif defined(EDDSA_BUILD) && defined(__CLANG__) && __has_attribute(visibility)
22 #    define EDDSA_DECL __attribute__((visibility ("default")))
23 #  endif
24 #endif
25
26 #ifndef EDDSA_DECL
27 #define EDDSA_DECL
28 #endif
29
30
31 #ifdef __cplusplus
32 extern "C" {
33 #endif
34
35
36
37 /*
38  * Ed25519 DSA
39  */
40
41 #define ED25519_KEY_LEN         32
42 #define ED25519_SIG_LEN         64
43
44 EDDSA_DECL void ed25519_genpub(uint8_t pub[ED25519_KEY_LEN],
45                                const uint8_t sec[ED25519_KEY_LEN]);
46
47 EDDSA_DECL void ed25519_sign(uint8_t sig[ED25519_SIG_LEN],
48                              const uint8_t sec[ED25519_KEY_LEN],
49                              const uint8_t pub[ED25519_KEY_LEN],
50                              const uint8_t *data, size_t len);
51
52 EDDSA_DECL bool ed25519_verify(const uint8_t sig[ED25519_SIG_LEN],
53                                const uint8_t pub[ED25519_KEY_LEN],
54                                const uint8_t *data, size_t len);
55
56
57
58 /*
59  * X25519 Diffie-Hellman
60  */
61
62 #define X25519_KEY_LEN          32
63
64 EDDSA_DECL void x25519_base(uint8_t out[X25519_KEY_LEN],
65                             const uint8_t scalar[X25519_KEY_LEN]);
66
67 EDDSA_DECL void x25519(uint8_t out[X25519_KEY_LEN],
68                        const uint8_t scalar[X25519_KEY_LEN],
69                        const uint8_t point[X25519_KEY_LEN]);
70
71
72
73 /*
74  * Key-conversion between ed25519 and x25519
75  */
76
77 EDDSA_DECL void pk_ed25519_to_x25519(uint8_t out[X25519_KEY_LEN],
78                                      const uint8_t in[ED25519_KEY_LEN]);
79
80 EDDSA_DECL void sk_ed25519_to_x25519(uint8_t out[X25519_KEY_LEN],
81                                      const uint8_t in[ED25519_KEY_LEN]);
82
83
84
85
86
87 /*
88  * Obsolete Interface
89  */
90
91 /* eddsa */
92 EDDSA_DECL void eddsa_genpub(uint8_t pub[32], const uint8_t sec[32]);
93
94 EDDSA_DECL void eddsa_sign(uint8_t sig[64],
95                            const uint8_t sec[32],
96                            const uint8_t pub[32],
97                            const uint8_t *data, size_t len);
98
99 EDDSA_DECL bool eddsa_verify(const uint8_t sig[64],
100                              const uint8_t pub[32],
101                              const uint8_t *data, size_t len);
102
103
104 /* diffie-hellman */
105 EDDSA_DECL void DH(uint8_t out[32], const uint8_t sec[32],
106                    const uint8_t point[32]);
107
108
109 /* key conversion */
110 EDDSA_DECL void eddsa_pk_eddsa_to_dh(uint8_t out[32],
111                                      const uint8_t in[32]);
112
113 EDDSA_DECL void eddsa_sk_eddsa_to_dh(uint8_t out[32],
114                                      const uint8_t in[32]);
115
116
117 #ifdef __cplusplus
118 }
119 #endif
120
121
122 #endif