libsignal-protocol-c  master
curve.h
1 #ifndef CURVE_H
2 #define CURVE_H
3 
4 #include <stdint.h>
5 #include <stddef.h>
6 #include "signal_protocol_types.h"
7 
8 #ifdef __cplusplus
9 extern "C" {
10 #endif
11 
12 #define CURVE_SIGNATURE_LEN 64
13 #define VRF_SIGNATURE_LEN 96
14 
15 int curve_internal_fast_tests(int silent);
16 
17 int curve_decode_point(ec_public_key **public_key, const uint8_t *key_data, size_t key_len, signal_context *global_context);
18 int ec_public_key_compare(const ec_public_key *key1, const ec_public_key *key2);
19 int ec_public_key_memcmp(const ec_public_key *key1, const ec_public_key *key2);
20 
32 int ec_public_key_serialize(signal_buffer **buffer, const ec_public_key *key);
33 
34 void ec_public_key_destroy(signal_type_base *type);
35 
36 int curve_decode_private_point(ec_private_key **private_key, const uint8_t *key_data, size_t key_len, signal_context *global_context);
37 int ec_private_key_compare(const ec_private_key *key1, const ec_private_key *key2);
38 
50 int ec_private_key_serialize(signal_buffer **buffer, const ec_private_key *key);
51 
52 void ec_private_key_destroy(signal_type_base *type);
53 
54 int ec_key_pair_create(ec_key_pair **key_pair, ec_public_key *public_key, ec_private_key *private_key);
55 ec_public_key *ec_key_pair_get_public(const ec_key_pair *key_pair);
56 ec_private_key *ec_key_pair_get_private(const ec_key_pair *key_pair);
57 void ec_key_pair_destroy(signal_type_base *type);
58 
59 int curve_generate_private_key(signal_context *context, ec_private_key **private_key);
60 int curve_generate_public_key(ec_public_key **public_key, const ec_private_key *private_key);
61 
68 int curve_generate_key_pair(signal_context *context, ec_key_pair **key_pair);
69 
75 ec_public_key_list *ec_public_key_list_alloc(void);
76 
82 ec_public_key_list *ec_public_key_list_copy(const ec_public_key_list *list);
83 
91 int ec_public_key_list_push_back(ec_public_key_list *list, ec_public_key *value);
92 
99 unsigned int ec_public_key_list_size(const ec_public_key_list *list);
100 
108 ec_public_key *ec_public_key_list_at(const ec_public_key_list *list, unsigned int index);
109 
115 void ec_public_key_list_sort(ec_public_key_list *list);
116 
121 void ec_public_key_list_free(ec_public_key_list *list);
122 
131 int curve_calculate_agreement(uint8_t **shared_key_data, const ec_public_key *public_key, const ec_private_key *private_key);
132 
143 int curve_verify_signature(const ec_public_key *signing_key,
144  const uint8_t *message_data, size_t message_len,
145  const uint8_t *signature_data, size_t signature_len);
146 
156 int curve_calculate_signature(signal_context *context,
157  signal_buffer **signature,
158  const ec_private_key *signing_key,
159  const uint8_t *message_data, size_t message_len);
160 
172 int curve_verify_vrf_signature(signal_context *context,
173  signal_buffer **vrf_output,
174  const ec_public_key *signing_key,
175  const uint8_t *message_data, size_t message_len,
176  const uint8_t *signature_data, size_t signature_len);
177 
187 int curve_calculate_vrf_signature(signal_context *context,
188  signal_buffer **signature,
189  const ec_private_key *signing_key,
190  const uint8_t *message_data, size_t message_len);
191 
192 #ifdef __cplusplus
193 }
194 #endif
195 
196 #endif /* CURVE_H */
Definition: curve.c:19
Definition: signal_protocol_internal.h:8
Definition: signal_protocol_internal.h:23
Definition: signal_protocol_internal.h:18
Definition: curve.c:38
Definition: curve.c:31
Definition: curve.c:25