libsodium (1.0.19)
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