示例#1
0
void test_messages(void) {
	Package pkg[2];
	Package output;
	const char* const* dict = NULL;
    unsigned int dictLength = 0;
	unsigned int outSize = 0;
	size_t i = 0, j = 0;
    MessageHandler* mh = NULL;
	
	/* initialize the module */
	mh = mh_new();

	/* add methods in the message handler */
	g_print("\n\rAdd input words..\n\r");

	mh_add_word(mh, "MOVE0", callback0);
	mh_add_word(mh, "MOVE1", callback1);

	/* print dictionary */
	g_print("Dictionary is the following one\n\r");

	dict = mh_get_dictionary(mh, &dictLength);

    g_assert(dictLength == 2);

	for (i = 0; i < dictLength; i++) {
		g_print("- key: %s\n\r", dict[i]);
	}

	/* test the methods in the message handler */
	pkg[0].name = "MOVE0";
	pkg[0].size = 1;
	pkg[0].data = g_new0(PackageData, 1);
	pkg[0].data->field = "Test0";

	pkg[1].name = "MOVE1";
	pkg[1].size = 1;
	pkg[1].data = g_new0(PackageData, 1);
	pkg[1].data->field = "Test1";

	g_print("Send packets..\n\n\r");

	for (i = 0; i < 2; i++) {
		mh_send_data(mh, pkg[i], &output, &outSize);

		g_print("Output data: name = %s, size = %i" 
		         ", output size = %i", 
		         output.name, output.size, outSize); 

		for (j = 0; j < outSize; j++) {
			g_print(", output[%zu] = %i", j, GPOINTER_TO_INT(output.data[j].field));
		}

		g_print("\n\n\r");
	}

    mh_free(mh);
}
static char *test_multihash_new_is_reversible(void) {
	int error = MH_E_NO_ERROR;
	int code = MH_H_SHA3_512;
	const unsigned char *digest = random_512;
	const size_t digest_len = 512 / 8;

	unsigned char mh[256];
	const size_t mh_len = mh_new_length(code, digest_len);

	error = mh_new(mh, MH_H_SHA3_512, digest, digest_len);
	mu_assert("creating multihash", error == MH_E_NO_ERROR);

	mu_assert("reading code", mh_multihash_hash(mh, mh_len) == MH_H_SHA3_512);
	mu_assert("reading length", mh_multihash_length(mh, mh_len) ==
		(int) digest_len);

	return NULL;
}
static char *test_multihash_new_crafts_right_multihash(void) {
	int error;
	unsigned char buf[256]; // much bigger than needed
	size_t digest_len = -1;
	const unsigned char *digest = NULL;

	error = mh_multihash_digest(sha1_example, sha1_example_length,
		&digest, &digest_len);
	mu_assert("getting digest", error == MH_E_NO_ERROR);

	error = mh_new(buf, MH_H_SHA1, digest, digest_len);
	mu_assert("creating multihash", error == MH_E_NO_ERROR);

	mu_assert("crafted multihash is the same", memcmp(sha1_example, buf,
		sha1_example_length) == 0);

	return NULL;
}
示例#4
0
文件: cid.c 项目: TKorr/c-ipfs
/**
 * Turn a cid hash into a base 58
 * @param hash the hash to work with
 * @param hash_length the length of the existing hash
 * @param buffer where to put the results
 * @param max_buffer_length the maximum space reserved for the results
 * @returns true(1) on success
 */
int ipfs_cid_hash_to_base58(const unsigned char* hash, size_t hash_length, unsigned char* buffer, size_t max_buffer_length) {

	int multihash_len = hash_length + 2;
	unsigned char multihash[multihash_len];
	if (mh_new(multihash, MH_H_SHA2_256, hash, hash_length) < 0) {
		return 0;
	}

	// base58
	size_t b58_size = libp2p_crypto_encoding_base58_encode_size(multihash_len);

	if (b58_size > max_buffer_length) // buffer too small
		return 0;

	if( libp2p_crypto_encoding_base58_encode(multihash, multihash_len, &buffer, &max_buffer_length) == 0) {
		return 0;
	}

	return 1;
}