1 #ifndef crypto_sign_ed25519_H
2 #define crypto_sign_ed25519_H
3 
4 #include <stddef.h>
5 #include "crypto_hash_sha512.h"
6 #include "export.h"
7 
8 #ifdef __cplusplus
9 # ifdef __GNUC__
10 #  pragma GCC diagnostic ignored "-Wlong-long"
11 # endif
12 extern "C" {
13 #endif
14 
15 typedef struct crypto_sign_ed25519ph_state {
16     crypto_hash_sha512_state hs;
17 } crypto_sign_ed25519ph_state;
18 
19 SODIUM_EXPORT
20 size_t crypto_sign_ed25519ph_statebytes(void);
21 
22 #define crypto_sign_ed25519_BYTES 64U
23 SODIUM_EXPORT
24 size_t crypto_sign_ed25519_bytes(void);
25 
26 #define crypto_sign_ed25519_SEEDBYTES 32U
27 SODIUM_EXPORT
28 size_t crypto_sign_ed25519_seedbytes(void);
29 
30 #define crypto_sign_ed25519_PUBLICKEYBYTES 32U
31 SODIUM_EXPORT
32 size_t crypto_sign_ed25519_publickeybytes(void);
33 
34 #define crypto_sign_ed25519_SECRETKEYBYTES (32U + 32U)
35 SODIUM_EXPORT
36 size_t crypto_sign_ed25519_secretkeybytes(void);
37 
38 #define crypto_sign_ed25519_MESSAGEBYTES_MAX (SODIUM_SIZE_MAX - crypto_sign_ed25519_BYTES)
39 SODIUM_EXPORT
40 size_t crypto_sign_ed25519_messagebytes_max(void);
41 
42 SODIUM_EXPORT
43 int crypto_sign_ed25519(unsigned char *sm, unsigned long long *smlen_p,
44                         const unsigned char *m, unsigned long long mlen,
45                         const unsigned char *sk)
46             __attribute__ ((nonnull(1, 5)));
47 
48 SODIUM_EXPORT
49 int crypto_sign_ed25519_open(unsigned char *m, unsigned long long *mlen_p,
50                              const unsigned char *sm, unsigned long long smlen,
51                              const unsigned char *pk)
52             __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(3, 5)));
53 
54 SODIUM_EXPORT
55 int crypto_sign_ed25519_detached(unsigned char *sig,
56                                  unsigned long long *siglen_p,
57                                  const unsigned char *m,
58                                  unsigned long long mlen,
59                                  const unsigned char *sk)
60             __attribute__ ((nonnull(1, 5)));
61 
62 SODIUM_EXPORT
63 int crypto_sign_ed25519_verify_detached(const unsigned char *sig,
64                                         const unsigned char *m,
65                                         unsigned long long mlen,
66                                         const unsigned char *pk)
67             __attribute__ ((warn_unused_result)) __attribute__ ((nonnull(1, 4)));
68 
69 SODIUM_EXPORT
70 int crypto_sign_ed25519_keypair(unsigned char *pk, unsigned char *sk)
71             __attribute__ ((nonnull));
72 
73 SODIUM_EXPORT
74 int crypto_sign_ed25519_seed_keypair(unsigned char *pk, unsigned char *sk,
75                                      const unsigned char *seed)
76             __attribute__ ((nonnull));
77 
78 SODIUM_EXPORT
79 int crypto_sign_ed25519_pk_to_curve25519(unsigned char *curve25519_pk,
80                                          const unsigned char *ed25519_pk)
81             __attribute__ ((warn_unused_result)) __attribute__ ((nonnull));
82 
83 SODIUM_EXPORT
84 int crypto_sign_ed25519_sk_to_curve25519(unsigned char *curve25519_sk,
85                                          const unsigned char *ed25519_sk)
86             __attribute__ ((nonnull));
87 
88 SODIUM_EXPORT
89 int crypto_sign_ed25519_sk_to_seed(unsigned char *seed,
90                                    const unsigned char *sk)
91             __attribute__ ((nonnull));
92 
93 SODIUM_EXPORT
94 int crypto_sign_ed25519_sk_to_pk(unsigned char *pk, const unsigned char *sk)
95             __attribute__ ((nonnull));
96 
97 SODIUM_EXPORT
98 int crypto_sign_ed25519ph_init(crypto_sign_ed25519ph_state *state)
99             __attribute__ ((nonnull));
100 
101 SODIUM_EXPORT
102 int crypto_sign_ed25519ph_update(crypto_sign_ed25519ph_state *state,
103                                  const unsigned char *m,
104                                  unsigned long long mlen)
105             __attribute__ ((nonnull(1)));
106 
107 SODIUM_EXPORT
108 int crypto_sign_ed25519ph_final_create(crypto_sign_ed25519ph_state *state,
109                                        unsigned char *sig,
110                                        unsigned long long *siglen_p,
111                                        const unsigned char *sk)
112             __attribute__ ((nonnull(1, 2, 4)));
113 
114 SODIUM_EXPORT
115 int crypto_sign_ed25519ph_final_verify(crypto_sign_ed25519ph_state *state,
116                                        const unsigned char *sig,
117                                        const unsigned char *pk)
118             __attribute__ ((warn_unused_result)) __attribute__ ((nonnull));
119 
120 #ifdef __cplusplus
121 }
122 #endif
123 
124 #endif
125