1 #ifndef TEST_COMMON_H 2 #define TEST_COMMON_H 3 4 #include <stdint.h> 5 #include <stddef.h> 6 #include "../src/signal_protocol.h" 7 8 /* Test utility functions */ 9 void print_public_key(const char *prefix, ec_public_key *key); 10 void print_buffer(const char *prefix, signal_buffer *buffer); 11 void shuffle_buffers(signal_buffer **array, size_t n); 12 void shuffle_ec_public_keys(ec_public_key **array, size_t n); 13 ec_public_key *create_test_ec_public_key(signal_context *context); 14 ec_private_key *create_test_ec_private_key(signal_context *context); 15 16 /* Test logging */ 17 void test_log(int level, const char *message, size_t len, void *user_data); 18 19 /* Test crypto provider */ 20 int test_random_generator(uint8_t *data, size_t len, void *user_data); 21 int test_hmac_sha256_init(void **hmac_context, const uint8_t *key, size_t key_len, void *user_data); 22 int test_hmac_sha256_update(void *hmac_context, const uint8_t *data, size_t data_len, void *user_data); 23 int test_hmac_sha256_final(void *hmac_context, signal_buffer **output, void *user_data); 24 void test_hmac_sha256_cleanup(void *hmac_context, void *user_data); 25 int test_sha512_digest_init(void **digest_context, void *user_data); 26 int test_sha512_digest_update(void *digest_context, const uint8_t *data, size_t data_len, void *user_data); 27 int test_sha512_digest_final(void *digest_context, signal_buffer **output, void *user_data); 28 void test_sha512_digest_cleanup(void *digest_context, void *user_data); 29 30 int test_encrypt(signal_buffer **output, 31 int cipher, 32 const uint8_t *key, size_t key_len, 33 const uint8_t *iv, size_t iv_len, 34 const uint8_t *plaintext, size_t plaintext_len, 35 void *user_data); 36 int test_decrypt(signal_buffer **output, 37 int cipher, 38 const uint8_t *key, size_t key_len, 39 const uint8_t *iv, size_t iv_len, 40 const uint8_t *ciphertext, size_t ciphertext_len, 41 void *user_data); 42 void setup_test_crypto_provider(signal_context *context); 43 44 /* Test data store context */ 45 void setup_test_store_context(signal_protocol_store_context **context, signal_context *global_context); 46 47 /* Test session store */ 48 int test_session_store_load_session(signal_buffer **record, signal_buffer **user_record, const signal_protocol_address *address, void *user_data); 49 int test_session_store_get_sub_device_sessions(signal_int_list **sessions, const char *name, size_t name_len, void *user_data); 50 int test_session_store_store_session(const signal_protocol_address *address, uint8_t *record, size_t record_len, uint8_t *user_record_data, size_t user_record_len, void *user_data); 51 int test_session_store_contains_session(const signal_protocol_address *address, void *user_data); 52 int test_session_store_delete_session(const signal_protocol_address *address, void *user_data); 53 int test_session_store_delete_all_sessions(const char *name, size_t name_len, void *user_data); 54 void test_session_store_destroy(void *user_data); 55 void setup_test_session_store(signal_protocol_store_context *context); 56 57 /* Test pre-key store */ 58 int test_pre_key_store_load_pre_key(signal_buffer **record, uint32_t pre_key_id, void *user_data); 59 int test_pre_key_store_store_pre_key(uint32_t pre_key_id, uint8_t *record, size_t record_len, void *user_data); 60 int test_pre_key_store_contains_pre_key(uint32_t pre_key_id, void *user_data); 61 int test_pre_key_store_remove_pre_key(uint32_t pre_key_id, void *user_data); 62 void test_pre_key_store_destroy(void *user_data); 63 void setup_test_pre_key_store(signal_protocol_store_context *context); 64 65 /* Test signed pre-key store */ 66 int test_signed_pre_key_store_load_signed_pre_key(signal_buffer **record, uint32_t signed_pre_key_id, void *user_data); 67 int test_signed_pre_key_store_store_signed_pre_key(uint32_t signed_pre_key_id, uint8_t *record, size_t record_len, void *user_data); 68 int test_signed_pre_key_store_contains_signed_pre_key(uint32_t signed_pre_key_id, void *user_data); 69 int test_signed_pre_key_store_remove_signed_pre_key(uint32_t signed_pre_key_id, void *user_data); 70 void test_signed_pre_key_store_destroy(void *user_data); 71 void setup_test_signed_pre_key_store(signal_protocol_store_context *context); 72 73 /* Test identity key store */ 74 int test_identity_key_store_get_identity_key_pair(signal_buffer **public_data, signal_buffer **private_data, void *user_data); 75 int test_identity_key_store_get_local_registration_id(void *user_data, uint32_t *registration_id); 76 int test_identity_key_store_save_identity(const signal_protocol_address *address, uint8_t *key_data, size_t key_len, void *user_data); 77 int test_identity_key_store_is_trusted_identity(const signal_protocol_address *address, uint8_t *key_data, size_t key_len, void *user_data); 78 void test_identity_key_store_destroy(void *user_data); 79 void setup_test_identity_key_store(signal_protocol_store_context *context, signal_context *global_context); 80 81 /* Test sender key store */ 82 int test_sender_key_store_store_sender_key(const signal_protocol_sender_key_name *sender_key_name, uint8_t *record, size_t record_len, uint8_t *user_record_data, size_t user_record_len, void *user_data); 83 int test_sender_key_store_load_sender_key(signal_buffer **record, signal_buffer **user_record, const signal_protocol_sender_key_name *sender_key_name, void *user_data); 84 void test_sender_key_store_destroy(void *user_data); 85 void setup_test_sender_key_store(signal_protocol_store_context *context, signal_context *global_context); 86 87 /* Portability */ 88 #ifndef __OpenBSD__ 89 /* OpenBSD extension */ 90 void srand_deterministic(unsigned int seed); 91 #endif 92 93 #endif /* TEST_COMMON_H */ 94