libsignal-protocol-c  master
signal_protocol_types.h
1 #ifndef SIGNAL_PROTOCOL_TYPES_H
2 #define SIGNAL_PROTOCOL_TYPES_H
3 
4 #include <stdint.h>
5 #include <stdlib.h>
6 
7 #ifndef _WINDOWS
8 #include <unistd.h>
9 #else
10 #include <basetsd.h>
11 typedef SSIZE_T ssize_t;
12 #endif
13 
14 #ifdef __cplusplus
15 extern "C" {
16 #endif
17 
18 /*
19  * Base library types
20  */
21 typedef struct signal_type_base signal_type_base;
22 typedef struct signal_buffer signal_buffer;
24 typedef struct signal_int_list signal_int_list;
25 
26 /*
27  * Global context for the Signal Protocol library
28  */
29 typedef struct signal_context signal_context;
30 
31 /*
32  * Context for the Signal Protocol data store implementation
33  */
35 
36 /*
37  * Address of an Signal Protocol message recipient
38  */
39 typedef struct signal_protocol_address {
40  const char *name;
41  size_t name_len;
42  int32_t device_id;
44 
45 /*
46  * A representation of a (group + sender + device) tuple
47  */
49  const char *group_id;
50  size_t group_id_len;
53 
54 /*
55  * Curve key types
56  */
57 typedef struct ec_public_key ec_public_key;
58 typedef struct ec_private_key ec_private_key;
59 typedef struct ec_key_pair ec_key_pair;
60 typedef struct ec_public_key_list ec_public_key_list;
61 
62 /*
63  * HKDF types
64  */
65 typedef struct hkdf_context hkdf_context;
66 
67 /*
68  * Key helper types
69  */
70 typedef struct signal_protocol_key_helper_pre_key_list_node signal_protocol_key_helper_pre_key_list_node;
71 
72 /*
73  * Protocol types
74  */
75 typedef struct ciphertext_message ciphertext_message;
76 typedef struct signal_message signal_message;
77 typedef struct pre_key_signal_message pre_key_signal_message;
78 typedef struct sender_key_message sender_key_message;
79 typedef struct sender_key_distribution_message sender_key_distribution_message;
80 
81 /*
82  * Ratchet types
83  */
84 #define RATCHET_CIPHER_KEY_LENGTH 32
85 #define RATCHET_MAC_KEY_LENGTH 32
86 #define RATCHET_IV_LENGTH 16
87 
88 typedef struct ratchet_chain_key ratchet_chain_key;
89 typedef struct ratchet_root_key ratchet_root_key;
90 typedef struct ratchet_identity_key_pair ratchet_identity_key_pair;
91 
92 typedef struct ratchet_message_keys {
93  uint8_t cipher_key[RATCHET_CIPHER_KEY_LENGTH];
94  uint8_t mac_key[RATCHET_MAC_KEY_LENGTH];
95  uint8_t iv[RATCHET_IV_LENGTH];
96  uint32_t counter;
98 
99 /*
100  * Session types
101  */
102 typedef struct session_pre_key session_pre_key;
103 typedef struct session_signed_pre_key session_signed_pre_key;
104 typedef struct session_pre_key_bundle session_pre_key_bundle;
105 typedef struct session_builder session_builder;
106 typedef struct session_record session_record;
107 typedef struct session_record_state_node session_record_state_node;
108 typedef struct session_state session_state;
109 typedef struct session_cipher session_cipher;
110 
111 /*
112  * Group types
113  */
114 typedef struct sender_message_key sender_message_key;
115 typedef struct sender_chain_key sender_chain_key;
116 typedef struct sender_key_state sender_key_state;
117 typedef struct sender_key_record sender_key_record;
118 typedef struct group_session_builder group_session_builder;
119 typedef struct group_cipher group_cipher;
120 
121 /*
122  * Fingerprint types
123  */
124 typedef struct fingerprint fingerprint;
125 typedef struct displayable_fingerprint displayable_fingerprint;
126 typedef struct scannable_fingerprint scannable_fingerprint;
127 typedef struct fingerprint_generator fingerprint_generator;
128 
129 /*
130  * Device consistency types
131  */
132 typedef struct device_consistency_signature device_consistency_signature;
133 typedef struct device_consistency_commitment device_consistency_commitment;
134 typedef struct device_consistency_message device_consistency_message;
135 typedef struct device_consistency_signature_list device_consistency_signature_list;
136 
137 #ifdef __cplusplus
138 }
139 #endif
140 
141 #endif /* SIGNAL_PROTOCOL_TYPES_H */
Definition: session_builder.c:14
Definition: signal_protocol.c:324
Definition: signal_protocol.c:25
Definition: fingerprint.c:40
Definition: session_record.c:14
Definition: curve.c:19
Definition: signal_protocol_internal.h:8
Definition: protocol.c:44
Definition: sender_key_state.c:19
Definition: device_consistency.c:13
Definition: session_record.c:20
Definition: sender_key.c:11
Definition: signal_protocol_types.h:48
Definition: signal_protocol_internal.h:23
Definition: session_pre_key.c:26
Definition: signal_protocol_internal.h:18
Definition: device_consistency.c:35
Definition: session_pre_key.c:17
Definition: device_consistency.c:20
Definition: curve.c:38
Definition: ratchet.c:30
Definition: curve.c:31
Definition: protocol.c:21
Definition: hkdf.c:16
Definition: device_consistency.c:27
Definition: fingerprint.c:30
Definition: fingerprint.c:22
Definition: protocol.c:13
Definition: signal_protocol_types.h:39
Definition: signal_protocol.c:194
Definition: sender_key.c:20
Definition: ratchet.c:21
Definition: fingerprint.c:15
Definition: protocol.c:31
Definition: group_session_builder.c:12
Definition: session_cipher.c:13
Definition: curve.c:25
Definition: protocol.c:53
Definition: session_pre_key.c:11
Definition: session_state.c:53
Definition: sender_key_record.c:18
Definition: ratchet.c:38
Definition: group_cipher.c:11
Definition: signal_protocol_types.h:92