thistle-sdk
Thistle SDK documentation
Loading...
Searching...
No Matches
prio.c

A quick example of how to use the Thistle Prio wrapper.

Build with the following command, taking the .a file for your target platform

$ cc -o prio prio.c libprio.a
#include <stdio.h>
#include <string.h>
#include "../target/prio.h"
int main() {
const char * s_priv_key1 = "BIl6j+J6dYttxALdjISDv6ZI4/VWVEhUzaS05LgrsfswmbLOgN"
"t9HUC2E0w+9RqZx3XMkdEHBHfNuCSMpOwofVSq3TfyKwn0NrftKisKKVSaTOt5seJ67P5QL4hxgPWvxw==";
const char * s_priv_key2 = "BNNOqoU54GPo+1gTPv+hCgA9U2ZCKd76yOMrWa1xTWgeb4LhF"
"LMQIQoRwDVaW64g/WTdcxT4rDULoycUNFB60LER6hPEHg/ObBnRPV1rwS3nj9Bj0tbjVPPyL9p8QW8B+w==";
prio_private_key * priv_key1 = prio_private_key_new_from_base64(s_priv_key1, strlen(s_priv_key1) + 1);
prio_private_key * priv_key2 = prio_private_key_new_from_base64(s_priv_key2, strlen(s_priv_key2) + 1);
fprintf(stderr, "keys parsed\n");
// const size_t dim = 8;
{
uint32_t data1[] = {0, 0, 1, 0, 0, 0, 0, 0};
uint32_t data2[] = {0, 0, 1, 0, 0, 0, 0, 0};
prio_client_field_32 * client1 = prio_client_field_32_new(8, pub_key1, pub_key2);
prio_client_field_32 * client2 = prio_client_field_32_new(8, pub_key1, pub_key2);
prio_vector * output1;
prio_vector * output2;
prio_client_field_32_encode_simple(client1, data1, sizeof(data1)/sizeof(data1[0]), &output1, &output2);
fprintf(stderr, "client field encoded\n");
const uint8_t * data;
size_t data_len = 0;
prio_vector_get(output1, &data, &data_len);
prio_vector_free(output1);
prio_vector_get(output2, &data, &data_len);
prio_vector_free(output2);
prio_client_field_32_encode_simple(client2, data2, sizeof(data2)/sizeof(data2[0]), &output1, &output2);
prio_vector_get(output1, &data, &data_len);
prio_vector_free(output1);
prio_vector_get(output2, &data, &data_len);
prio_vector_free(output2);
}
{
uint64_t data1[] = {0, 0, 1, 0, 0, 0, 0, 0};
uint64_t data2[] = {0, 0, 1, 0, 0, 0, 0, 0};
prio_client_field_64 * client1 = prio_client_field_64_new(8, pub_key1, pub_key2);
prio_client_field_64 * client2 = prio_client_field_64_new(8, pub_key1, pub_key2);
prio_vector * output1;
prio_vector * output2;
prio_client_field_64_encode_simple(client1, data1, sizeof(data1)/sizeof(data1[0]), &output1, &output2);
fprintf(stderr, "client field encoded\n");
const uint8_t * data;
size_t data_len = 0;
prio_vector_get(output1, &data, &data_len);
prio_vector_free(output1);
prio_vector_get(output2, &data, &data_len);
prio_vector_free(output2);
prio_client_field_64_encode_simple(client2, data2, sizeof(data2)/sizeof(data2[0]), &output1, &output2);
prio_vector_get(output1, &data, &data_len);
prio_vector_free(output1);
prio_vector_get(output2, &data, &data_len);
prio_vector_free(output2);
}
fprintf(stderr, "done\n");
}
int main()
Definition: malloc.c:19
struct prio_private_key * prio_private_key_new_from_base64(const char *key, size_t key_length)
struct prio_private_key prio_private_key
Definition: prio.h:9
void prio_vector_get(struct prio_vector *ptr, const uint8_t **data, size_t *size)
struct prio_client_field_64 * prio_client_field_64_new(size_t dim, const struct prio_public_key *pub_key1, const struct prio_public_key *pub_key2)
struct prio_public_key * prio_public_key_new_from_private_key(const struct prio_private_key *private_key)
void prio_private_key_free(struct prio_private_key *key)
void prio_client_field_32_encode_simple(struct prio_client_field_32 *client, const uint32_t *data, size_t data_len, struct prio_vector **output1, struct prio_vector **output2)
struct prio_client_field_32 prio_client_field_32
Definition: prio.h:3
struct prio_client_field_32 * prio_client_field_32_new(size_t dim, const struct prio_public_key *pub_key1, const struct prio_public_key *pub_key2)
struct prio_client_field_64 prio_client_field_64
Definition: prio.h:5
struct prio_vector prio_vector
Definition: prio.h:13
struct prio_public_key prio_public_key
Definition: prio.h:11
void prio_public_key_free(struct prio_public_key *key)
void prio_client_field_64_encode_simple(struct prio_client_field_64 *client, const uint64_t *data, size_t data_len, struct prio_vector **output1, struct prio_vector **output2)
void prio_client_field_32_free(struct prio_client_field_32 *client)
void prio_vector_free(struct prio_vector *ptr)
void prio_client_field_64_free(struct prio_client_field_64 *client)