void wi_test_dsa_creation(void) { #ifdef WI_DSA wi_dsa_t *dsa; dsa = wi_autorelease(wi_dsa_init_with_bits(wi_dsa_alloc(), 512)); WI_TEST_ASSERT_NOT_NULL(dsa, ""); WI_TEST_ASSERT_EQUALS(wi_dsa_bits(dsa), 384U, ""); dsa = wi_autorelease(wi_dsa_init_with_pem_file(wi_dsa_alloc(), WI_STR("/non/existing/file.pem"))); WI_TEST_ASSERT_NULL(dsa, ""); dsa = wi_autorelease(wi_dsa_init_with_pem_file(wi_dsa_alloc(), wi_string_by_appending_path_component(wi_test_fixture_path, WI_STR("wi-dsa-tests-1.pem")))); WI_TEST_ASSERT_NULL(dsa, ""); dsa = wi_autorelease(wi_dsa_init_with_pem_file(wi_dsa_alloc(), wi_string_by_appending_path_component(wi_test_fixture_path, WI_STR("wi-dsa-tests-2.pem")))); WI_TEST_ASSERT_NOT_NULL(dsa, ""); WI_TEST_ASSERT_EQUALS(wi_dsa_bits(dsa), 384U, ""); dsa = wi_autorelease(wi_dsa_init_with_private_key(wi_dsa_alloc(), wi_data())); WI_TEST_ASSERT_NULL(dsa, ""); dsa = wi_autorelease(wi_dsa_init_with_private_key(wi_dsa_alloc(), wi_data_with_base64_string(WI_STR("MIH3AgEAAkEA0c36Uaj1S/cKjYAokEUtWQHmFHLqd8mbnY9J9wyNS0mlXvklnko2NlflL1qg9p58uRjkGBtCinI0mxeEIxwckwIVAPpF85s7Iv1o7z4UUAs9KRamjULXAkBFchKBXr+D+lGgnBFtb//EBThgSD9t3WBxyKGvNLBDWGJu2+av/fR9uBxBm1cUUldzGvqBjr/lcBmTIUe4rmAcAkBBN2fEFvs6uuIX+/8EqM1T2yBmwt3KHMVuCD+opZga29WJPNZgNXIj8yNFGFIxJeTndvhcndNrlcztYx3e/GSCAhRDUGb+CUPkNuBbsSHbdYtEQ+/2Gg==")))); WI_TEST_ASSERT_NOT_NULL(dsa, ""); WI_TEST_ASSERT_EQUALS(wi_dsa_bits(dsa), 384U, ""); dsa = wi_autorelease(wi_dsa_init_with_public_key(wi_dsa_alloc(), wi_data())); WI_TEST_ASSERT_NULL(dsa, ""); #endif }
wi_boolean_t wi_p7_message_set_data_for_name(wi_p7_message_t *p7_message, wi_data_t *data, wi_string_t *field_name) { unsigned char *binary; uint32_t field_size, field_id; if(!data) data = wi_data(); field_size = wi_data_length(data); if(!_wi_p7_message_get_binary_buffer_for_writing_for_name(p7_message, field_name, field_size, &binary, &field_id)) return false; wi_write_swap_host_to_big_int32(binary, 0, field_id); wi_write_swap_host_to_big_int32(binary, 4, field_size); memcpy(binary + 8, wi_data_bytes(data), field_size); return true; }
void wi_test_sha2_digest(void) { #ifdef WI_SHA1 wi_sha2_t *sha2; wi_data_t *data; unsigned char buffer[WI_SHA2_MAX_LENGTH]; data = wi_data(); wi_sha2_digest(WI_SHA2_256, wi_data_bytes(data), wi_data_length(data), buffer); WI_TEST_ASSERT_EQUAL_INSTANCES(wi_data_with_bytes(buffer, WI_SHA2_256_LENGTH), wi_data_with_base64_string(WI_STR("47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=")), ""); WI_TEST_ASSERT_EQUAL_INSTANCES(wi_sha2_digest_string(WI_SHA2_256, data), WI_STR("e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"), ""); sha2 = wi_sha2_with_bits(WI_SHA2_512); wi_sha2_close(sha2); wi_sha2_get_data(sha2, buffer); WI_TEST_ASSERT_EQUAL_INSTANCES(wi_data_with_bytes(buffer, WI_SHA2_512_LENGTH), wi_data_with_base64_string(WI_STR("z4PhNX7vuL3xVChQ1m2AB9Yg5AULVxXcg/SpIdNs6c5H0NE8XYXysP+DGNKHfuwvY7kxvUdBeoGlODJ6+SfaPg==")), ""); WI_TEST_ASSERT_EQUAL_INSTANCES(wi_sha2_data(sha2), wi_data_with_base64_string(WI_STR("z4PhNX7vuL3xVChQ1m2AB9Yg5AULVxXcg/SpIdNs6c5H0NE8XYXysP+DGNKHfuwvY7kxvUdBeoGlODJ6+SfaPg==")), ""); #endif }
wi_boolean_t wi_p7_message_set_data_for_name(wi_p7_message_t *p7_message, wi_data_t *data, wi_string_t *field_name) { unsigned char *binary; uint32_t field_size, field_id; if(!data) data = wi_data(); if(p7_message->serialization == WI_P7_BINARY) { field_size = wi_data_length(data); if(!_wi_p7_message_get_binary_buffer_for_writing_for_name(p7_message, field_name, field_size, &binary, &field_id)) return false; wi_write_swap_host_to_big_int32(binary, 0, field_id); wi_write_swap_host_to_big_int32(binary, 4, field_size); memcpy(binary + 8, wi_data_bytes(data), field_size); } else { _wi_p7_message_set_xml_field(p7_message, WI_P7_DATA, field_name, wi_data_base64(data)); } return true; }
static wi_boolean_t wd_transfers_run_download(wd_transfer_t *transfer, wd_user_t *user, wi_p7_message_t *message) { wi_p7_message_t *reply; wi_data_t *data; wi_p7_uint32_t transaction; wi_boolean_t result; data = wi_fs_finder_info_for_path(transfer->realdatapath); reply = wi_p7_message_with_name(WI_STR("wired.transfer.download"), wd_p7_spec); wi_p7_message_set_string_for_name(reply, transfer->path, WI_STR("wired.file.path")); wi_p7_message_set_oobdata_for_name(reply, transfer->remainingdatasize, WI_STR("wired.transfer.data")); wi_p7_message_set_oobdata_for_name(reply, transfer->remainingrsrcsize, WI_STR("wired.transfer.rsrc")); wi_p7_message_set_data_for_name(reply, data ? data : wi_data(), WI_STR("wired.transfer.finderinfo")); if(wi_p7_message_get_uint32_for_name(message, &transaction, WI_STR("wired.transaction"))) wi_p7_message_set_uint32_for_name(reply, transaction, WI_STR("wired.transaction")); if(!wd_user_write_message(user, 30.0, reply)) { wi_log_error(WI_STR("Could not write message \"%@\" to %@: %m"), wi_p7_message_name(reply), wd_user_identifier(user)); return false; } wi_socket_set_interactive(wd_user_socket(user), false); result = wd_transfer_download(transfer); wi_socket_set_interactive(wd_user_socket(user), true); if(transfer->transferred == transfer->datasize + transfer->rsrcsize) wd_accounts_add_download_statistics(wd_user_account(user), true, transfer->actualtransferred); else wd_accounts_add_download_statistics(wd_user_account(user), false, transfer->actualtransferred); return result; }