void test_setup() { int result; result = signal_context_create(&global_context, 0); ck_assert_int_eq(result, 0); signal_context_set_log_function(global_context, test_log); setup_test_crypto_provider(global_context); }
void Signal::init(const QString &dataPath) { std::random_device rd; randomGen.seed(rd()); signal_context_create(&m_signalContext, nullptr); signal_context_set_log_function(m_signalContext, &signal_log); Crypto::initCryptoProvider(m_signalContext); m_storage.init(m_signalContext, dataPath); signal_protocol_identity_get_local_registration_id(m_storage.storeContext(), &m_deviceId); }
END_TEST START_TEST(test_curve25519_random_agreements) { int result; int i; ec_key_pair *alice_key_pair = 0; ec_public_key *alice_public_key = 0; ec_private_key *alice_private_key = 0; ec_key_pair *bob_key_pair = 0; ec_public_key *bob_public_key = 0; ec_private_key *bob_private_key = 0; uint8_t *shared_alice = 0; uint8_t *shared_bob = 0; signal_context *context; signal_context_create(&context, 0); setup_test_crypto_provider(context); for(i = 0; i < 50; i++) { /* Generate Alice's key pair */ result = curve_generate_key_pair(context, &alice_key_pair); ck_assert_int_eq(result, 0); alice_public_key = ec_key_pair_get_public(alice_key_pair); alice_private_key = ec_key_pair_get_private(alice_key_pair); ck_assert_ptr_ne(alice_public_key, 0); ck_assert_ptr_ne(alice_private_key, 0); /* Generate Bob's key pair */ result = curve_generate_key_pair(context, &bob_key_pair); ck_assert_int_eq(result, 0); bob_public_key = ec_key_pair_get_public(bob_key_pair); bob_private_key = ec_key_pair_get_private(bob_key_pair); ck_assert_ptr_ne(bob_public_key, 0); ck_assert_ptr_ne(bob_private_key, 0); /* Calculate Alice's key agreement */ result = curve_calculate_agreement(&shared_alice, bob_public_key, alice_private_key); ck_assert_int_eq(result, 32); ck_assert_ptr_ne(shared_alice, 0); /* Calculate Bob's key agreement */ result = curve_calculate_agreement(&shared_bob, alice_public_key, bob_private_key); ck_assert_int_eq(result, 32); ck_assert_ptr_ne(shared_bob, 0); /* Assert that key agreements match */ ck_assert_int_eq(memcmp(shared_alice, shared_bob, 32), 0); /* Cleanup */ if(shared_alice) { free(shared_alice); } if(shared_bob) { free(shared_bob); } SIGNAL_UNREF(alice_key_pair); SIGNAL_UNREF(bob_key_pair); alice_key_pair = 0; bob_key_pair = 0; alice_public_key = 0; alice_private_key = 0; bob_public_key = 0; bob_private_key = 0; shared_alice = 0; shared_bob = 0; } signal_context_destroy(context); }