libsignal-protocol-c  master
ratchet.h
1 #ifndef RATCHET_H
2 #define RATCHET_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 int ratchet_chain_key_create(ratchet_chain_key **chain_key, hkdf_context *kdf,
13  const uint8_t *key, size_t key_len, uint32_t index,
14  signal_context *global_context);
15 int ratchet_chain_key_get_key(const ratchet_chain_key *chain_key, signal_buffer **buffer);
16 uint32_t ratchet_chain_key_get_index(const ratchet_chain_key *chain_key);
17 int ratchet_chain_key_get_message_keys(ratchet_chain_key *chain_key, ratchet_message_keys *message_keys);
18 int ratchet_chain_key_create_next(const ratchet_chain_key *chain_key, ratchet_chain_key **next_chain_key);
19 void ratchet_chain_key_destroy(signal_type_base *type);
20 
21 int ratchet_root_key_create(ratchet_root_key **root_key, hkdf_context *kdf,
22  const uint8_t *key, size_t key_len,
23  signal_context *global_context);
24 int ratchet_root_key_create_chain(ratchet_root_key *root_key,
25  ratchet_root_key **new_root_key, ratchet_chain_key **new_chain_key,
26  ec_public_key *their_ratchet_key,
27  ec_private_key *our_ratchet_key_private);
28 int ratchet_root_key_get_key(ratchet_root_key *root_key, signal_buffer **buffer);
29 int ratchet_root_key_compare(const ratchet_root_key *key1, const ratchet_root_key *key2);
30 void ratchet_root_key_destroy(signal_type_base *type);
31 
32 int ratchet_identity_key_pair_create(
33  ratchet_identity_key_pair **key_pair,
34  ec_public_key *public_key,
35  ec_private_key *private_key);
36 int ratchet_identity_key_pair_serialize(signal_buffer **buffer, const ratchet_identity_key_pair *key_pair);
37 int ratchet_identity_key_pair_deserialize(ratchet_identity_key_pair **key_pair, const uint8_t *data, size_t len, signal_context *global_context);
38 ec_public_key *ratchet_identity_key_pair_get_public(const ratchet_identity_key_pair *key_pair);
39 ec_private_key *ratchet_identity_key_pair_get_private(const ratchet_identity_key_pair *key_pair);
40 void ratchet_identity_key_pair_destroy(signal_type_base *type);
41 
45 
46 int symmetric_signal_protocol_parameters_create(
48  ratchet_identity_key_pair *our_identity_key,
49  ec_key_pair *our_base_key,
50  ec_key_pair *our_ratchet_key,
51  ec_public_key *their_base_key,
52  ec_public_key *their_ratchet_key,
53  ec_public_key *their_identity_key);
54 ratchet_identity_key_pair *symmetric_signal_protocol_parameters_get_our_identity_key(const symmetric_signal_protocol_parameters *parameters);
55 ec_key_pair *symmetric_signal_protocol_parameters_get_our_base_key(const symmetric_signal_protocol_parameters *parameters);
56 ec_key_pair *symmetric_signal_protocol_parameters_get_our_ratchet_key(const symmetric_signal_protocol_parameters *parameters);
57 ec_public_key *symmetric_signal_protocol_parameters_get_their_base_key(const symmetric_signal_protocol_parameters *parameters);
58 ec_public_key *symmetric_signal_protocol_parameters_get_their_ratchet_key(const symmetric_signal_protocol_parameters *parameters);
59 ec_public_key *symmetric_signal_protocol_parameters_get_their_identity_key(const symmetric_signal_protocol_parameters *parameters);
60 void symmetric_signal_protocol_parameters_destroy(signal_type_base *type);
61 
62 int alice_signal_protocol_parameters_create(
64  ratchet_identity_key_pair *our_identity_key,
65  ec_key_pair *our_base_key,
66  ec_public_key *their_identity_key,
67  ec_public_key *their_signed_pre_key,
68  ec_public_key *their_one_time_pre_key,
69  ec_public_key *their_ratchet_key);
70 void alice_signal_protocol_parameters_destroy(signal_type_base *type);
71 
72 int bob_signal_protocol_parameters_create(
73  bob_signal_protocol_parameters **parameters,
74  ratchet_identity_key_pair *our_identity_key,
75  ec_key_pair *our_signed_pre_key,
76  ec_key_pair *our_one_time_pre_key,
77  ec_key_pair *our_ratchet_key,
78  ec_public_key *their_identity_key,
79  ec_public_key *their_base_key);
80 void bob_signal_protocol_parameters_destroy(signal_type_base *type);
81 
82 int ratcheting_session_symmetric_initialize(session_state *state, symmetric_signal_protocol_parameters *parameters, signal_context *global_context);
83 int ratcheting_session_alice_initialize(session_state *state, alice_signal_protocol_parameters *parameters, signal_context *global_context);
84 int ratcheting_session_bob_initialize(session_state *state, bob_signal_protocol_parameters *parameters, signal_context *global_context);
85 
86 #ifdef __cplusplus
87 }
88 #endif
89 
90 #endif /* RATCHET_H */
Definition: ratchet.c:631
Definition: curve.c:19
Definition: signal_protocol_internal.h:8
Definition: signal_protocol_internal.h:23
Definition: signal_protocol_internal.h:18
Definition: ratchet.c:620
Definition: ratchet.c:609
Definition: ratchet.c:30
Definition: curve.c:31
Definition: hkdf.c:16
Definition: ratchet.c:21
Definition: curve.c:25
Definition: session_state.c:53
Definition: ratchet.c:38
Definition: signal_protocol_types.h:92