tor  master
crypto_curve25519.h
1 /* Copyright (c) 2012-2017, The Tor Project, Inc. */
2 /* See LICENSE for licensing information */
3 
4 #ifndef TOR_CRYPTO_CURVE25519_H
5 #define TOR_CRYPTO_CURVE25519_H
6 
7 #include "testsupport.h"
8 #include "torint.h"
9 #include "crypto_digest.h"
10 #include "crypto_openssl_mgt.h"
11 
13 #define CURVE25519_PUBKEY_LEN 32
14 
15 #define CURVE25519_SECKEY_LEN 32
16 
17 #define CURVE25519_OUTPUT_LEN 32
18 
24 typedef struct curve25519_public_key_t {
25  uint8_t public_key[CURVE25519_PUBKEY_LEN];
27 
33 typedef struct curve25519_secret_key_t {
34  uint8_t secret_key[CURVE25519_SECKEY_LEN];
36 
38 typedef struct curve25519_keypair_t {
42 
43 /* These functions require that we actually know how to use curve25519 keys.
44  * The other data structures and functions in this header let us parse them,
45  * store them, and move them around.
46  */
47 
49 
51  int extra_strong);
53  const curve25519_secret_key_t *seckey);
55  int extra_strong);
56 
57 void curve25519_handshake(uint8_t *output,
59  const curve25519_public_key_t *);
60 
62  const char *fname,
63  const char *tag);
64 
66  char **tag_out,
67  const char *fname);
68 
69 int curve25519_rand_seckey_bytes(uint8_t *out, int extra_strong);
70 
71 #ifdef CRYPTO_CURVE25519_PRIVATE
72 STATIC int curve25519_impl(uint8_t *output, const uint8_t *secret,
73  const uint8_t *basepoint);
74 
75 STATIC int curve25519_basepoint_impl(uint8_t *output, const uint8_t *secret);
76 #endif /* defined(CRYPTO_CURVE25519_PRIVATE) */
77 
78 #define CURVE25519_BASE64_PADDED_LEN 44
79 
81  const char *input);
82 int curve25519_public_to_base64(char *output,
83  const curve25519_public_key_t *pkey);
84 
85 void curve25519_set_impl_params(int use_ed);
86 void curve25519_init(void);
87 
88 #endif /* !defined(TOR_CRYPTO_CURVE25519_H) */
89 
int curve25519_public_key_is_ok(const curve25519_public_key_t *key)
Definition: crypto_curve25519.c:130
int curve25519_keypair_read_from_file(curve25519_keypair_t *keypair_out, char **tag_out, const char *fname)
Definition: crypto_curve25519.c:231
void curve25519_set_impl_params(int use_ed)
Definition: crypto_curve25519.c:116
Header file to define uint32_t and friends.
int curve25519_public_from_base64(curve25519_public_key_t *pkey, const char *input)
Definition: crypto_format.c:147
void curve25519_handshake(uint8_t *output, const curve25519_secret_key_t *skey, const curve25519_public_key_t *pkey)
Definition: crypto_curve25519.c:266
int curve25519_keypair_write_to_file(const curve25519_keypair_t *keypair, const char *fname, const char *tag)
Definition: crypto_curve25519.c:205
int curve25519_secret_key_generate(curve25519_secret_key_t *key_out, int extra_strong)
Definition: crypto_curve25519.c:159
int curve25519_public_to_base64(char *output, const curve25519_public_key_t *pkey)
Definition: crypto_format.c:132
void curve25519_public_key_generate(curve25519_public_key_t *key_out, const curve25519_secret_key_t *seckey)
Definition: crypto_curve25519.c:177
Definition: crypto_curve25519.h:38
Headers for crypto_digest.c.
int curve25519_rand_seckey_bytes(uint8_t *out, int extra_strong)
Definition: crypto_curve25519.c:145
Definition: crypto_curve25519.h:33
Definition: crypto_curve25519.h:24
STATIC int curve25519_impl(uint8_t *output, const uint8_t *secret, const uint8_t *point)
Definition: crypto_curve25519.c:63
int curve25519_keypair_generate(curve25519_keypair_t *keypair_out, int extra_strong)
Definition: crypto_curve25519.c:188
void curve25519_init(void)
Definition: crypto_curve25519.c:355
STATIC int curve25519_basepoint_impl(uint8_t *output, const uint8_t *secret)
Definition: crypto_curve25519.c:88