libsignal-protocol-c  master
signal_protocol_internal.h
1 #ifndef SIGNAL_PROTOCOL_INTERNAL_H
2 #define SIGNAL_PROTOCOL_INTERNAL_H
3 
5 #include "LocalStorageProtocol.pb-c.h"
6 #include "signal_protocol.h"
7 
9  unsigned int ref_count;
10  void (*destroy)(signal_type_base *instance);
11 };
12 
13 void signal_type_init(signal_type_base *instance,
14  void (*destroy_func)(signal_type_base *instance));
15 
16 #define SIGNAL_INIT(instance, destroy_func) signal_type_init((signal_type_base *)instance, destroy_func)
17 
18 struct signal_buffer {
19  size_t len;
20  uint8_t data[];
21 };
22 
24  signal_crypto_provider crypto_provider;
25  void (*lock)(void *user_data);
26  void (*unlock)(void *user_data);
27  void (*log)(int level, const char *message, size_t len, void *user_data);
28  void *user_data;
29 };
30 
31 int signal_crypto_random(signal_context *context, uint8_t *data, size_t len);
32 
33 int signal_hmac_sha256_init(signal_context *context, void **hmac_context, const uint8_t *key, size_t key_len);
34 int signal_hmac_sha256_update(signal_context *context, void *hmac_context, const uint8_t *data, size_t data_len);
35 int signal_hmac_sha256_final(signal_context *context, void *hmac_context, signal_buffer **output);
36 void signal_hmac_sha256_cleanup(signal_context *context, void *hmac_context);
37 
38 int signal_sha512_digest_init(signal_context *context, void **digest_context);
39 int signal_sha512_digest_update(signal_context *context, void *digest_context, const uint8_t *data, size_t data_len);
40 int signal_sha512_digest_final(signal_context *context, void *digest_context, signal_buffer **output);
41 void signal_sha512_digest_cleanup(signal_context *context, void *digest_context);
42 
43 
44 int signal_encrypt(signal_context *context,
45  signal_buffer **output,
46  int cipher,
47  const uint8_t *key, size_t key_len,
48  const uint8_t *iv, size_t iv_len,
49  const uint8_t *plaintext, size_t plaintext_len);
50 
51 int signal_decrypt(signal_context *context,
52  signal_buffer **output,
53  int cipher,
54  const uint8_t *key, size_t key_len,
55  const uint8_t *iv, size_t iv_len,
56  const uint8_t *ciphertext, size_t ciphertext_len);
57 
58 void signal_lock(signal_context *context);
59 void signal_unlock(signal_context *context);
60 void signal_log(signal_context *context, int level, const char *format, ...);
61 void signal_explicit_bzero(void *v, size_t n);
62 int signal_constant_memcmp(const void *s1, const void *s2, size_t n);
63 
64 /*------------------------------------------------------------------------*/
65 
66 /*
67  * Functions used for internal protocol buffers serialization support.
68  */
69 
70 int ec_public_key_serialize_protobuf(ProtobufCBinaryData *buffer, const ec_public_key *key);
71 int ec_private_key_serialize_protobuf(ProtobufCBinaryData *buffer, const ec_private_key *key);
72 
73 int ratchet_chain_key_get_key_protobuf(const ratchet_chain_key *chain_key, ProtobufCBinaryData *buffer);
74 int ratchet_root_key_get_key_protobuf(const ratchet_root_key *root_key, ProtobufCBinaryData *buffer);
75 
76 int session_state_serialize_prepare(session_state *state, Textsecure__SessionStructure *session_structure);
77 void session_state_serialize_prepare_free(Textsecure__SessionStructure *session_structure);
78 int session_state_deserialize_protobuf(session_state **state, Textsecure__SessionStructure *session_structure, signal_context *global_context);
79 
80 int sender_key_state_serialize_prepare(sender_key_state *state, Textsecure__SenderKeyStateStructure *state_structure);
81 void sender_key_state_serialize_prepare_free(Textsecure__SenderKeyStateStructure *state_structure);
82 int sender_key_state_deserialize_protobuf(sender_key_state **state, Textsecure__SenderKeyStateStructure *state_structure, signal_context *global_context);
83 
84 void signal_protocol_str_serialize_protobuf(ProtobufCBinaryData *buffer, const char *str);
85 char *signal_protocol_str_deserialize_protobuf(ProtobufCBinaryData *buffer);
86 
87 #endif /* SIGNAL_PROTOCOL_INTERNAL_H */
Definition: curve.c:19
Definition: signal_protocol_internal.h:8
Definition: protobuf-c.h:393
Definition: sender_key_state.c:19
Definition: signal_protocol_internal.h:23
Definition: signal_protocol_internal.h:18
Definition: ratchet.c:30
Definition: ratchet.c:21
Definition: signal_protocol.h:276
Definition: curve.c:25
Definition: LocalStorageProtocol.pb-c.h:254
Definition: session_state.c:53