uint64_t* sha256_hash(int num_hashes, char* str) {
uint64_t* results = calloc(num_hashes, sizeof(uint64_t));
unsigned char digest[SHA256_DIGEST_LENGTH];
int i;
for (i = 0; i < num_hashes; i++) {
SHA256_CTX sha256_ctx;
SHA256_Init(&sha256_ctx);
if (i == 0) {
SHA256_Update(&sha256_ctx, str, strlen(str));
} else {
SHA256_Update(&sha256_ctx, digest, SHA256_DIGEST_LENGTH);
}
SHA256_Final(digest, &sha256_ctx);
results[i] = (uint64_t)* (uint64_t* )digest;
}
return results;
}
BloomFilter bf;
/* elements = 10;
false positive rate = 5%
custom hashing algorithm = sha256_hash function */
bloom_filter_init_alt(&bf, 10, 0.05, &sha256_hash);
bloom_filter_add_string(&bf, "test");
if (bloom_filter_check_string(&bf, "test") == BLOOM_FAILURE) {
printf("'test' is not in the Bloom Filter\n");
} else {
printf("'test' is in the Bloom Filter\n");
}
if (bloom_filter_check_string(&bf, "blah") == BLOOM_FAILURE) {
printf("'blah' is not in the Bloom Filter!\n");
} else {
printf("'blah' is in th Bloom Filter\n");
}
bloom_filter_stats(&bf);
bloom_filter_destroy(&bf);