#include <openssl/bytestring.h>
#include <openssl/err.h>
#include <openssl/evp.h>
#include <openssl/mem.h>
#include <openssl/sha.h>
#include <openssl/trust_token.h>
#include "internal.h"
const TRUST_TOKEN_METHOD *TRUST_TOKEN_experiment_v1(void) { … }
const TRUST_TOKEN_METHOD *TRUST_TOKEN_experiment_v2_voprf(void) { … }
const TRUST_TOKEN_METHOD *TRUST_TOKEN_experiment_v2_pmb(void) { … }
const TRUST_TOKEN_METHOD *TRUST_TOKEN_pst_v1_voprf(void) { … }
const TRUST_TOKEN_METHOD *TRUST_TOKEN_pst_v1_pmb(void) { … }
void TRUST_TOKEN_PRETOKEN_free(TRUST_TOKEN_PRETOKEN *pretoken) { … }
TRUST_TOKEN *TRUST_TOKEN_new(const uint8_t *data, size_t len) { … }
void TRUST_TOKEN_free(TRUST_TOKEN *token) { … }
int TRUST_TOKEN_generate_key(const TRUST_TOKEN_METHOD *method,
uint8_t *out_priv_key, size_t *out_priv_key_len,
size_t max_priv_key_len, uint8_t *out_pub_key,
size_t *out_pub_key_len, size_t max_pub_key_len,
uint32_t id) { … }
int TRUST_TOKEN_derive_key_from_secret(
const TRUST_TOKEN_METHOD *method, uint8_t *out_priv_key,
size_t *out_priv_key_len, size_t max_priv_key_len, uint8_t *out_pub_key,
size_t *out_pub_key_len, size_t max_pub_key_len, uint32_t id,
const uint8_t *secret, size_t secret_len) { … }
TRUST_TOKEN_CLIENT *TRUST_TOKEN_CLIENT_new(const TRUST_TOKEN_METHOD *method,
size_t max_batchsize) { … }
void TRUST_TOKEN_CLIENT_free(TRUST_TOKEN_CLIENT *ctx) { … }
int TRUST_TOKEN_CLIENT_add_key(TRUST_TOKEN_CLIENT *ctx, size_t *out_key_index,
const uint8_t *key, size_t key_len) { … }
int TRUST_TOKEN_CLIENT_set_srr_key(TRUST_TOKEN_CLIENT *ctx, EVP_PKEY *key) { … }
static int trust_token_client_begin_issuance_impl(
TRUST_TOKEN_CLIENT *ctx, uint8_t **out, size_t *out_len, size_t count,
int include_message, const uint8_t *msg, size_t msg_len) { … }
int TRUST_TOKEN_CLIENT_begin_issuance(TRUST_TOKEN_CLIENT *ctx, uint8_t **out,
size_t *out_len, size_t count) { … }
int TRUST_TOKEN_CLIENT_begin_issuance_over_message(
TRUST_TOKEN_CLIENT *ctx, uint8_t **out, size_t *out_len, size_t count,
const uint8_t *msg, size_t msg_len) { … }
STACK_OF(TRUST_TOKEN) *
TRUST_TOKEN_CLIENT_finish_issuance(TRUST_TOKEN_CLIENT *ctx,
size_t *out_key_index,
const uint8_t *response,
size_t response_len) { … }
int TRUST_TOKEN_CLIENT_begin_redemption(TRUST_TOKEN_CLIENT *ctx, uint8_t **out,
size_t *out_len,
const TRUST_TOKEN *token,
const uint8_t *data, size_t data_len,
uint64_t time) { … }
int TRUST_TOKEN_CLIENT_finish_redemption(TRUST_TOKEN_CLIENT *ctx,
uint8_t **out_rr, size_t *out_rr_len,
uint8_t **out_sig, size_t *out_sig_len,
const uint8_t *response,
size_t response_len) { … }
TRUST_TOKEN_ISSUER *TRUST_TOKEN_ISSUER_new(const TRUST_TOKEN_METHOD *method,
size_t max_batchsize) { … }
void TRUST_TOKEN_ISSUER_free(TRUST_TOKEN_ISSUER *ctx) { … }
int TRUST_TOKEN_ISSUER_add_key(TRUST_TOKEN_ISSUER *ctx, const uint8_t *key,
size_t key_len) { … }
int TRUST_TOKEN_ISSUER_set_srr_key(TRUST_TOKEN_ISSUER *ctx, EVP_PKEY *key) { … }
int TRUST_TOKEN_ISSUER_set_metadata_key(TRUST_TOKEN_ISSUER *ctx,
const uint8_t *key, size_t len) { … }
static const struct trust_token_issuer_key_st *trust_token_issuer_get_key(
const TRUST_TOKEN_ISSUER *ctx, uint32_t key_id) { … }
int TRUST_TOKEN_ISSUER_issue(const TRUST_TOKEN_ISSUER *ctx, uint8_t **out,
size_t *out_len, size_t *out_tokens_issued,
const uint8_t *request, size_t request_len,
uint32_t public_metadata, uint8_t private_metadata,
size_t max_issuance) { … }
static int trust_token_issuer_redeem_impl(
const TRUST_TOKEN_ISSUER *ctx, uint32_t *out_public, uint8_t *out_private,
TRUST_TOKEN **out_token, uint8_t **out_client_data,
size_t *out_client_data_len, const uint8_t *request, size_t request_len,
int include_message, const uint8_t *msg, size_t msg_len) { … }
int TRUST_TOKEN_ISSUER_redeem(const TRUST_TOKEN_ISSUER *ctx,
uint32_t *out_public, uint8_t *out_private,
TRUST_TOKEN **out_token,
uint8_t **out_client_data,
size_t *out_client_data_len,
const uint8_t *request, size_t request_len) { … }
int TRUST_TOKEN_ISSUER_redeem_over_message(
const TRUST_TOKEN_ISSUER *ctx, uint32_t *out_public, uint8_t *out_private,
TRUST_TOKEN **out_token, uint8_t **out_client_data,
size_t *out_client_data_len, const uint8_t *request, size_t request_len,
const uint8_t *msg, size_t msg_len) { … }
static uint8_t get_metadata_obfuscator(const uint8_t *key, size_t key_len,
const uint8_t *client_data,
size_t client_data_len) { … }
int TRUST_TOKEN_decode_private_metadata(const TRUST_TOKEN_METHOD *method,
uint8_t *out_value, const uint8_t *key,
size_t key_len, const uint8_t *nonce,
size_t nonce_len,
uint8_t encrypted_bit) { … }