libsignal-protocol-c  master
session_state.h
1 #ifndef SESSION_STATE_H
2 #define SESSION_STATE_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 /*------------------------------------------------------------------------*/
13 
14 int session_state_create(session_state **state, signal_context *global_context);
15 int session_state_serialize(signal_buffer **buffer, session_state *state);
16 int session_state_deserialize(session_state **state, const uint8_t *data, size_t len, signal_context *global_context);
17 int session_state_copy(session_state **state, session_state *other_state, signal_context *global_context);
18 
19 void session_state_set_session_version(session_state *state, uint32_t version);
20 uint32_t session_state_get_session_version(const session_state *state);
21 
22 void session_state_set_local_identity_key(session_state *state, ec_public_key *identity_key);
23 ec_public_key *session_state_get_local_identity_key(const session_state *state);
24 
25 void session_state_set_remote_identity_key(session_state *state, ec_public_key *identity_key);
26 ec_public_key *session_state_get_remote_identity_key(const session_state *state);
27 
28 void session_state_set_root_key(session_state *state, ratchet_root_key *root_key);
29 ratchet_root_key *session_state_get_root_key(const session_state *state);
30 
31 void session_state_set_previous_counter(session_state *state, uint32_t counter);
32 uint32_t session_state_get_previous_counter(const session_state *state);
33 
34 void session_state_set_sender_chain(session_state *state, ec_key_pair *sender_ratchet_key_pair, ratchet_chain_key *chain_key);
35 ec_public_key *session_state_get_sender_ratchet_key(const session_state *state);
36 ec_key_pair *session_state_get_sender_ratchet_key_pair(const session_state *state);
37 ratchet_chain_key *session_state_get_sender_chain_key(const session_state *state);
38 int session_state_set_sender_chain_key(session_state *state, ratchet_chain_key *chain_key);
39 int session_state_has_sender_chain(const session_state *state);
40 
41 int session_state_has_message_keys(session_state *state, ec_public_key *sender_ephemeral, uint32_t counter);
42 int session_state_remove_message_keys(session_state *state,
43  ratchet_message_keys *message_keys_result,
44  ec_public_key *sender_ephemeral, uint32_t counter);
45 int session_state_set_message_keys(session_state *state,
46  ec_public_key *sender_ephemeral, ratchet_message_keys *message_keys);
47 
48 int session_state_add_receiver_chain(session_state *state, ec_public_key *sender_ratchet_key, ratchet_chain_key *chain_key);
49 int session_state_set_receiver_chain_key(session_state *state, ec_public_key *sender_ephemeral, ratchet_chain_key *chain_key);
50 ratchet_chain_key *session_state_get_receiver_chain_key(session_state *state, ec_public_key *sender_ephemeral);
51 
52 void session_state_set_pending_key_exchange(session_state *state,
53  uint32_t sequence,
54  ec_key_pair *our_base_key, ec_key_pair *our_ratchet_key,
55  ratchet_identity_key_pair *our_identity_key);
56 uint32_t session_state_get_pending_key_exchange_sequence(session_state *state);
57 ec_key_pair *session_state_get_pending_key_exchange_base_key(const session_state *state);
58 ec_key_pair *session_state_get_pending_key_exchange_ratchet_key(const session_state *state);
59 ratchet_identity_key_pair *session_state_get_pending_key_exchange_identity_key(const session_state *state);
60 int session_state_has_pending_key_exchange(const session_state *state);
61 
62 void session_state_set_unacknowledged_pre_key_message(session_state *state,
63  const uint32_t *pre_key_id, uint32_t signed_pre_key_id, ec_public_key *base_key);
64 int session_state_unacknowledged_pre_key_message_has_pre_key_id(const session_state *state);
65 uint32_t session_state_unacknowledged_pre_key_message_get_pre_key_id(const session_state *state);
66 uint32_t session_state_unacknowledged_pre_key_message_get_signed_pre_key_id(const session_state *state);
67 ec_public_key *session_state_unacknowledged_pre_key_message_get_base_key(const session_state *state);
68 int session_state_has_unacknowledged_pre_key_message(const session_state *state);
69 void session_state_clear_unacknowledged_pre_key_message(session_state *state);
70 
71 void session_state_set_remote_registration_id(session_state *state, uint32_t id);
72 uint32_t session_state_get_remote_registration_id(const session_state *state);
73 
74 void session_state_set_local_registration_id(session_state *state, uint32_t id);
75 uint32_t session_state_get_local_registration_id(const session_state *state);
76 
77 void session_state_set_needs_refresh(session_state *state, int value);
78 int session_state_get_needs_refresh(const session_state *state);
79 
80 void session_state_set_alice_base_key(session_state *state, ec_public_key *key);
81 ec_public_key *session_state_get_alice_base_key(const session_state *state);
82 
83 void session_state_destroy(signal_type_base *type);
84 
85 #ifdef __cplusplus
86 }
87 #endif
88 
89 #endif /* SESSION_STATE_H */
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:30
Definition: curve.c:31
Definition: ratchet.c:21
Definition: session_state.c:53
Definition: ratchet.c:38
Definition: signal_protocol_types.h:92