example.c
1 /********************************************************************** 2 * Copyright (c) 2018 Pieter Wuille, Greg Maxwell, Gleb Naumenko * 3 * Distributed under the MIT software license, see the accompanying * 4 * file LICENSE or http://www.opensource.org/licenses/mit-license.php.* 5 **********************************************************************/ 6 7 #include <stdio.h> 8 #include <assert.h> 9 #include "../include/minisketch.h" 10 11 int main(void) { 12 13 minisketch *sketch_a = minisketch_create(12, 0, 4); 14 15 for (int i = 3000; i < 3010; ++i) { 16 minisketch_add_uint64(sketch_a, i); 17 } 18 19 size_t sersize = minisketch_serialized_size(sketch_a); 20 assert(sersize == 12 * 4 / 8); // 4 12-bit values is 6 bytes. 21 unsigned char *buffer_a = malloc(sersize); 22 minisketch_serialize(sketch_a, buffer_a); 23 minisketch_destroy(sketch_a); 24 25 minisketch *sketch_b = minisketch_create(12, 0, 4); // Bob's own sketch 26 for (int i = 3002; i < 3012; ++i) { 27 minisketch_add_uint64(sketch_b, i); 28 } 29 30 sketch_a = minisketch_create(12, 0, 4); // Alice's sketch 31 minisketch_deserialize(sketch_a, buffer_a); // Load Alice's sketch 32 free(buffer_a); 33 34 // Merge the elements from sketch_a into sketch_b. The result is a sketch_b 35 // which contains all elements that occurred in Alice's or Bob's sets, but not 36 // in both. 37 minisketch_merge(sketch_b, sketch_a); 38 39 uint64_t differences[4]; 40 ssize_t num_differences = minisketch_decode(sketch_b, 4, differences); 41 minisketch_destroy(sketch_a); 42 minisketch_destroy(sketch_b); 43 if (num_differences < 0) { 44 printf("More than 4 differences!\n"); 45 } else { 46 ssize_t i; 47 for (i = 0; i < num_differences; ++i) { 48 printf("%u is in only one of the two sets\n", (unsigned)differences[i]); 49 } 50 } 51 }