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 
47 SODIUM_EXPORT
48 int crypto_sign_ed25519_open(unsigned char *m, unsigned long long *mlen_p,
49                              const unsigned char *sm, unsigned long long smlen,
50                              const unsigned char *pk)
51             __attribute__ ((warn_unused_result));
52 
53 SODIUM_EXPORT
54 int crypto_sign_ed25519_detached(unsigned char *sig,
55                                  unsigned long long *siglen_p,
56                                  const unsigned char *m,
57                                  unsigned long long mlen,
58                                  const unsigned char *sk);
59 
60 SODIUM_EXPORT
61 int crypto_sign_ed25519_verify_detached(const unsigned char *sig,
62                                         const unsigned char *m,
63                                         unsigned long long mlen,
64                                         const unsigned char *pk)
65             __attribute__ ((warn_unused_result));
66 
67 SODIUM_EXPORT
68 int crypto_sign_ed25519_keypair(unsigned char *pk, unsigned char *sk);
69 
70 SODIUM_EXPORT
71 int crypto_sign_ed25519_seed_keypair(unsigned char *pk, unsigned char *sk,
72                                      const unsigned char *seed);
73 
74 SODIUM_EXPORT
75 int crypto_sign_ed25519_pk_to_curve25519(unsigned char *curve25519_pk,
76                                          const unsigned char *ed25519_pk)
77             __attribute__ ((warn_unused_result));
78 
79 SODIUM_EXPORT
80 int crypto_sign_ed25519_sk_to_curve25519(unsigned char *curve25519_sk,
81                                          const unsigned char *ed25519_sk);
82 
83 SODIUM_EXPORT
84 int crypto_sign_ed25519_sk_to_seed(unsigned char *seed,
85                                    const unsigned char *sk);
86 
87 SODIUM_EXPORT
88 int crypto_sign_ed25519_sk_to_pk(unsigned char *pk, const unsigned char *sk);
89 
90 SODIUM_EXPORT
91 int crypto_sign_ed25519ph_init(crypto_sign_ed25519ph_state *state);
92 
93 SODIUM_EXPORT
94 int crypto_sign_ed25519ph_update(crypto_sign_ed25519ph_state *state,
95                                  const unsigned char *m,
96                                  unsigned long long mlen);
97 
98 SODIUM_EXPORT
99 int crypto_sign_ed25519ph_final_create(crypto_sign_ed25519ph_state *state,
100                                        unsigned char *sig,
101                                        unsigned long long *siglen_p,
102                                        const unsigned char *sk);
103 
104 SODIUM_EXPORT
105 int crypto_sign_ed25519ph_final_verify(crypto_sign_ed25519ph_state *state,
106                                        unsigned char *sig,
107                                        const unsigned char *pk)
108             __attribute__ ((warn_unused_result));
109 
110 #ifdef __cplusplus
111 }
112 #endif
113 
114 #endif
115