Classes | Typedefs | Functions | Variables
pmbtoken.c File Reference
#include <openssl/trust_token.h>
#include <openssl/bn.h>
#include <openssl/bytestring.h>
#include <openssl/ec.h>
#include <openssl/err.h>
#include <openssl/mem.h>
#include <openssl/nid.h>
#include <openssl/rand.h>
#include <openssl/sha.h>
#include "../ec_extra/internal.h"
#include "../fipsmodule/bn/internal.h"
#include "../fipsmodule/ec/internal.h"
#include "internal.h"
Include dependency graph for pmbtoken.c:

Go to the source code of this file.

Classes

struct  PMBTOKEN_METHOD
 

Typedefs

typedef int(* hash_c_func_t) (const EC_GROUP *group, EC_SCALAR *out, uint8_t *buf, size_t len)
 
typedef int(* hash_s_func_t) (const EC_GROUP *group, EC_RAW_POINT *out, const EC_AFFINE *t, const uint8_t s[TRUST_TOKEN_NONCE_SIZE])
 
typedef int(* hash_t_func_t) (const EC_GROUP *group, EC_RAW_POINT *out, const uint8_t t[TRUST_TOKEN_NONCE_SIZE])
 

Functions

static int cbb_add_prefixed_point (CBB *out, const EC_GROUP *group, const EC_AFFINE *point, int prefix_point)
 
static int cbs_get_prefixed_point (CBS *cbs, const EC_GROUP *group, EC_AFFINE *out, int prefix_point)
 
static int dleq_generate (const PMBTOKEN_METHOD *method, CBB *cbb, const TRUST_TOKEN_ISSUER_KEY *priv, const EC_RAW_POINT *T, const EC_RAW_POINT *S, const EC_RAW_POINT *W, const EC_RAW_POINT *Ws, uint8_t private_metadata)
 
static int dleq_verify (const PMBTOKEN_METHOD *method, CBS *cbs, const TRUST_TOKEN_CLIENT_KEY *pub, const EC_RAW_POINT *T, const EC_RAW_POINT *S, const EC_RAW_POINT *W, const EC_RAW_POINT *Ws)
 
static int generate_keypair (const PMBTOKEN_METHOD *method, EC_SCALAR *out_x, EC_SCALAR *out_y, EC_RAW_POINT *out_pub)
 
static int hash_c_batch (const PMBTOKEN_METHOD *method, EC_SCALAR *out, const CBB *points, size_t index)
 
static int hash_c_dleq (const PMBTOKEN_METHOD *method, EC_SCALAR *out, const EC_AFFINE *X, const EC_AFFINE *T, const EC_AFFINE *S, const EC_AFFINE *W, const EC_AFFINE *K0, const EC_AFFINE *K1)
 
static int hash_c_dleqor (const PMBTOKEN_METHOD *method, EC_SCALAR *out, const EC_AFFINE *X0, const EC_AFFINE *X1, const EC_AFFINE *T, const EC_AFFINE *S, const EC_AFFINE *W, const EC_AFFINE *K00, const EC_AFFINE *K01, const EC_AFFINE *K10, const EC_AFFINE *K11)
 
static int mul_public_3 (const EC_GROUP *group, EC_RAW_POINT *out, const EC_RAW_POINT *p0, const EC_SCALAR *scalar0, const EC_RAW_POINT *p1, const EC_SCALAR *scalar1, const EC_RAW_POINT *p2, const EC_SCALAR *scalar2)
 
static int pmbtoken_client_key_from_bytes (const PMBTOKEN_METHOD *method, TRUST_TOKEN_CLIENT_KEY *key, const uint8_t *in, size_t len)
 
int pmbtoken_exp1_client_key_from_bytes (TRUST_TOKEN_CLIENT_KEY *key, const uint8_t *in, size_t len)
 
int pmbtoken_exp1_generate_key (CBB *out_private, CBB *out_public)
 
int pmbtoken_exp1_get_h_for_testing (uint8_t out[97])
 
static int pmbtoken_exp1_hash_c (const EC_GROUP *group, EC_SCALAR *out, uint8_t *buf, size_t len)
 
static int pmbtoken_exp1_hash_s (const EC_GROUP *group, EC_RAW_POINT *out, const EC_AFFINE *t, const uint8_t s[TRUST_TOKEN_NONCE_SIZE])
 
static int pmbtoken_exp1_hash_t (const EC_GROUP *group, EC_RAW_POINT *out, const uint8_t t[TRUST_TOKEN_NONCE_SIZE])
 
static int pmbtoken_exp1_init_method (void)
 
static void pmbtoken_exp1_init_method_impl (void)
 
int pmbtoken_exp1_issuer_key_from_bytes (TRUST_TOKEN_ISSUER_KEY *key, const uint8_t *in, size_t len)
 
int pmbtoken_exp1_read (const TRUST_TOKEN_ISSUER_KEY *key, uint8_t out_nonce[TRUST_TOKEN_NONCE_SIZE], uint8_t *out_private_metadata, const uint8_t *token, size_t token_len)
 
int pmbtoken_exp1_sign (const TRUST_TOKEN_ISSUER_KEY *key, CBB *cbb, CBS *cbs, size_t num_requested, size_t num_to_issue, uint8_t private_metadata)
 
int pmbtoken_exp2_client_key_from_bytes (TRUST_TOKEN_CLIENT_KEY *key, const uint8_t *in, size_t len)
 
int pmbtoken_exp2_generate_key (CBB *out_private, CBB *out_public)
 
int pmbtoken_exp2_get_h_for_testing (uint8_t out[97])
 
static int pmbtoken_exp2_hash_c (const EC_GROUP *group, EC_SCALAR *out, uint8_t *buf, size_t len)
 
static int pmbtoken_exp2_hash_s (const EC_GROUP *group, EC_RAW_POINT *out, const EC_AFFINE *t, const uint8_t s[TRUST_TOKEN_NONCE_SIZE])
 
static int pmbtoken_exp2_hash_t (const EC_GROUP *group, EC_RAW_POINT *out, const uint8_t t[TRUST_TOKEN_NONCE_SIZE])
 
static int pmbtoken_exp2_init_method (void)
 
static void pmbtoken_exp2_init_method_impl (void)
 
int pmbtoken_exp2_issuer_key_from_bytes (TRUST_TOKEN_ISSUER_KEY *key, const uint8_t *in, size_t len)
 
int pmbtoken_exp2_read (const TRUST_TOKEN_ISSUER_KEY *key, uint8_t out_nonce[TRUST_TOKEN_NONCE_SIZE], uint8_t *out_private_metadata, const uint8_t *token, size_t token_len)
 
int pmbtoken_exp2_sign (const TRUST_TOKEN_ISSUER_KEY *key, CBB *cbb, CBS *cbs, size_t num_requested, size_t num_to_issue, uint8_t private_metadata)
 
static int pmbtoken_generate_key (const PMBTOKEN_METHOD *method, CBB *out_private, CBB *out_public)
 
static int pmbtoken_init_method (PMBTOKEN_METHOD *method, int curve_nid, const uint8_t *h_bytes, size_t h_len, hash_t_func_t hash_t, hash_s_func_t hash_s, hash_c_func_t hash_c, int prefix_point)
 
static int pmbtoken_issuer_key_from_bytes (const PMBTOKEN_METHOD *method, TRUST_TOKEN_ISSUER_KEY *key, const uint8_t *in, size_t len)
 
static int pmbtoken_read (const PMBTOKEN_METHOD *method, const TRUST_TOKEN_ISSUER_KEY *key, uint8_t out_nonce[TRUST_TOKEN_NONCE_SIZE], uint8_t *out_private_metadata, const uint8_t *token, size_t token_len)
 
static int pmbtoken_sign (const PMBTOKEN_METHOD *method, const TRUST_TOKEN_ISSUER_KEY *key, CBB *cbb, CBS *cbs, size_t num_requested, size_t num_to_issue, uint8_t private_metadata)
 
static int point_to_cbb (CBB *out, const EC_GROUP *group, const EC_AFFINE *point)
 
static int scalar_from_cbs (CBS *cbs, const EC_GROUP *group, EC_SCALAR *out)
 
static int scalar_to_cbb (CBB *out, const EC_GROUP *group, const EC_SCALAR *scalar)
 
static STACK_OF (TRUST_TOKEN)
 
static STACK_OF (TRUST_TOKEN_PRETOKEN)
 

Variables

static const uint8_t kDefaultAdditionalData [32] = {0}
 
static PMBTOKEN_METHOD pmbtoken_exp1_method
 
static CRYPTO_once_t pmbtoken_exp1_method_once = CRYPTO_ONCE_INIT
 
static int pmbtoken_exp1_ok = 0
 
static PMBTOKEN_METHOD pmbtoken_exp2_method
 
static CRYPTO_once_t pmbtoken_exp2_method_once = CRYPTO_ONCE_INIT
 
static int pmbtoken_exp2_ok = 0
 

Typedef Documentation

◆ hash_c_func_t

typedef int(* hash_c_func_t) (const EC_GROUP *group, EC_SCALAR *out, uint8_t *buf, size_t len)

Definition at line 38 of file pmbtoken.c.

◆ hash_s_func_t

typedef int(* hash_s_func_t) (const EC_GROUP *group, EC_RAW_POINT *out, const EC_AFFINE *t, const uint8_t s[TRUST_TOKEN_NONCE_SIZE])

Definition at line 35 of file pmbtoken.c.

◆ hash_t_func_t

typedef int(* hash_t_func_t) (const EC_GROUP *group, EC_RAW_POINT *out, const uint8_t t[TRUST_TOKEN_NONCE_SIZE])

Definition at line 33 of file pmbtoken.c.

Function Documentation

◆ cbb_add_prefixed_point()

static int cbb_add_prefixed_point ( CBB out,
const EC_GROUP group,
const EC_AFFINE point,
int  prefix_point 
)
static

Definition at line 118 of file pmbtoken.c.

◆ cbs_get_prefixed_point()

static int cbs_get_prefixed_point ( CBS cbs,
const EC_GROUP group,
EC_AFFINE out,
int  prefix_point 
)
static

Definition at line 137 of file pmbtoken.c.

◆ dleq_generate()

static int dleq_generate ( const PMBTOKEN_METHOD method,
CBB cbb,
const TRUST_TOKEN_ISSUER_KEY priv,
const EC_RAW_POINT T,
const EC_RAW_POINT S,
const EC_RAW_POINT W,
const EC_RAW_POINT Ws,
uint8_t  private_metadata 
)
static

Definition at line 453 of file pmbtoken.c.

◆ dleq_verify()

static int dleq_verify ( const PMBTOKEN_METHOD method,
CBS cbs,
const TRUST_TOKEN_CLIENT_KEY pub,
const EC_RAW_POINT T,
const EC_RAW_POINT S,
const EC_RAW_POINT W,
const EC_RAW_POINT Ws 
)
static

Definition at line 615 of file pmbtoken.c.

◆ generate_keypair()

static int generate_keypair ( const PMBTOKEN_METHOD method,
EC_SCALAR out_x,
EC_SCALAR out_y,
EC_RAW_POINT out_pub 
)
static

Definition at line 92 of file pmbtoken.c.

◆ hash_c_batch()

static int hash_c_batch ( const PMBTOKEN_METHOD method,
EC_SCALAR out,
const CBB points,
size_t  index 
)
static

Definition at line 417 of file pmbtoken.c.

◆ hash_c_dleq()

static int hash_c_dleq ( const PMBTOKEN_METHOD method,
EC_SCALAR out,
const EC_AFFINE X,
const EC_AFFINE T,
const EC_AFFINE S,
const EC_AFFINE W,
const EC_AFFINE K0,
const EC_AFFINE K1 
)
static

Definition at line 346 of file pmbtoken.c.

◆ hash_c_dleqor()

static int hash_c_dleqor ( const PMBTOKEN_METHOD method,
EC_SCALAR out,
const EC_AFFINE X0,
const EC_AFFINE X1,
const EC_AFFINE T,
const EC_AFFINE S,
const EC_AFFINE W,
const EC_AFFINE K00,
const EC_AFFINE K01,
const EC_AFFINE K10,
const EC_AFFINE K11 
)
static

Definition at line 379 of file pmbtoken.c.

◆ mul_public_3()

static int mul_public_3 ( const EC_GROUP group,
EC_RAW_POINT out,
const EC_RAW_POINT p0,
const EC_SCALAR scalar0,
const EC_RAW_POINT p1,
const EC_SCALAR scalar1,
const EC_RAW_POINT p2,
const EC_SCALAR scalar2 
)
static

Definition at line 158 of file pmbtoken.c.

◆ pmbtoken_client_key_from_bytes()

static int pmbtoken_client_key_from_bytes ( const PMBTOKEN_METHOD method,
TRUST_TOKEN_CLIENT_KEY key,
const uint8_t in,
size_t  len 
)
static

Definition at line 209 of file pmbtoken.c.

◆ pmbtoken_exp1_client_key_from_bytes()

int pmbtoken_exp1_client_key_from_bytes ( TRUST_TOKEN_CLIENT_KEY key,
const uint8_t in,
size_t  len 
)

Definition at line 1185 of file pmbtoken.c.

◆ pmbtoken_exp1_generate_key()

int pmbtoken_exp1_generate_key ( CBB out_private,
CBB out_public 
)

Definition at line 1177 of file pmbtoken.c.

◆ pmbtoken_exp1_get_h_for_testing()

int pmbtoken_exp1_get_h_for_testing ( uint8_t  out[97])

Definition at line 1240 of file pmbtoken.c.

◆ pmbtoken_exp1_hash_c()

static int pmbtoken_exp1_hash_c ( const EC_GROUP group,
EC_SCALAR out,
uint8_t buf,
size_t  len 
)
static

Definition at line 1136 of file pmbtoken.c.

◆ pmbtoken_exp1_hash_s()

static int pmbtoken_exp1_hash_s ( const EC_GROUP group,
EC_RAW_POINT out,
const EC_AFFINE t,
const uint8_t  s[TRUST_TOKEN_NONCE_SIZE] 
)
static

Definition at line 1110 of file pmbtoken.c.

◆ pmbtoken_exp1_hash_t()

static int pmbtoken_exp1_hash_t ( const EC_GROUP group,
EC_RAW_POINT out,
const uint8_t  t[TRUST_TOKEN_NONCE_SIZE] 
)
static

Definition at line 1103 of file pmbtoken.c.

◆ pmbtoken_exp1_init_method()

static int pmbtoken_exp1_init_method ( void  )
static

Definition at line 1168 of file pmbtoken.c.

◆ pmbtoken_exp1_init_method_impl()

static void pmbtoken_exp1_init_method_impl ( void  )
static

Definition at line 1147 of file pmbtoken.c.

◆ pmbtoken_exp1_issuer_key_from_bytes()

int pmbtoken_exp1_issuer_key_from_bytes ( TRUST_TOKEN_ISSUER_KEY key,
const uint8_t in,
size_t  len 
)

Definition at line 1193 of file pmbtoken.c.

◆ pmbtoken_exp1_read()

int pmbtoken_exp1_read ( const TRUST_TOKEN_ISSUER_KEY key,
uint8_t  out_nonce[TRUST_TOKEN_NONCE_SIZE],
uint8_t out_private_metadata,
const uint8_t token,
size_t  token_len 
)

Definition at line 1229 of file pmbtoken.c.

◆ pmbtoken_exp1_sign()

int pmbtoken_exp1_sign ( const TRUST_TOKEN_ISSUER_KEY key,
CBB cbb,
CBS cbs,
size_t  num_requested,
size_t  num_to_issue,
uint8_t  private_metadata 
)

Definition at line 1208 of file pmbtoken.c.

◆ pmbtoken_exp2_client_key_from_bytes()

int pmbtoken_exp2_client_key_from_bytes ( TRUST_TOKEN_CLIENT_KEY key,
const uint8_t in,
size_t  len 
)

Definition at line 1335 of file pmbtoken.c.

◆ pmbtoken_exp2_generate_key()

int pmbtoken_exp2_generate_key ( CBB out_private,
CBB out_public 
)

Definition at line 1327 of file pmbtoken.c.

◆ pmbtoken_exp2_get_h_for_testing()

int pmbtoken_exp2_get_h_for_testing ( uint8_t  out[97])

Definition at line 1390 of file pmbtoken.c.

◆ pmbtoken_exp2_hash_c()

static int pmbtoken_exp2_hash_c ( const EC_GROUP group,
EC_SCALAR out,
uint8_t buf,
size_t  len 
)
static

Definition at line 1286 of file pmbtoken.c.

◆ pmbtoken_exp2_hash_s()

static int pmbtoken_exp2_hash_s ( const EC_GROUP group,
EC_RAW_POINT out,
const EC_AFFINE t,
const uint8_t  s[TRUST_TOKEN_NONCE_SIZE] 
)
static

Definition at line 1260 of file pmbtoken.c.

◆ pmbtoken_exp2_hash_t()

static int pmbtoken_exp2_hash_t ( const EC_GROUP group,
EC_RAW_POINT out,
const uint8_t  t[TRUST_TOKEN_NONCE_SIZE] 
)
static

Definition at line 1253 of file pmbtoken.c.

◆ pmbtoken_exp2_init_method()

static int pmbtoken_exp2_init_method ( void  )
static

Definition at line 1318 of file pmbtoken.c.

◆ pmbtoken_exp2_init_method_impl()

static void pmbtoken_exp2_init_method_impl ( void  )
static

Definition at line 1297 of file pmbtoken.c.

◆ pmbtoken_exp2_issuer_key_from_bytes()

int pmbtoken_exp2_issuer_key_from_bytes ( TRUST_TOKEN_ISSUER_KEY key,
const uint8_t in,
size_t  len 
)

Definition at line 1343 of file pmbtoken.c.

◆ pmbtoken_exp2_read()

int pmbtoken_exp2_read ( const TRUST_TOKEN_ISSUER_KEY key,
uint8_t  out_nonce[TRUST_TOKEN_NONCE_SIZE],
uint8_t out_private_metadata,
const uint8_t token,
size_t  token_len 
)

Definition at line 1379 of file pmbtoken.c.

◆ pmbtoken_exp2_sign()

int pmbtoken_exp2_sign ( const TRUST_TOKEN_ISSUER_KEY key,
CBB cbb,
CBS cbs,
size_t  num_requested,
size_t  num_to_issue,
uint8_t  private_metadata 
)

Definition at line 1358 of file pmbtoken.c.

◆ pmbtoken_generate_key()

static int pmbtoken_generate_key ( const PMBTOKEN_METHOD method,
CBB out_private,
CBB out_public 
)
static

Definition at line 168 of file pmbtoken.c.

◆ pmbtoken_init_method()

static int pmbtoken_init_method ( PMBTOKEN_METHOD method,
int  curve_nid,
const uint8_t h_bytes,
size_t  h_len,
hash_t_func_t  hash_t,
hash_s_func_t  hash_s,
hash_c_func_t  hash_c,
int  prefix_point 
)
static

Definition at line 60 of file pmbtoken.c.

◆ pmbtoken_issuer_key_from_bytes()

static int pmbtoken_issuer_key_from_bytes ( const PMBTOKEN_METHOD method,
TRUST_TOKEN_ISSUER_KEY key,
const uint8_t in,
size_t  len 
)
static

Definition at line 228 of file pmbtoken.c.

◆ pmbtoken_read()

static int pmbtoken_read ( const PMBTOKEN_METHOD method,
const TRUST_TOKEN_ISSUER_KEY key,
uint8_t  out_nonce[TRUST_TOKEN_NONCE_SIZE],
uint8_t out_private_metadata,
const uint8_t token,
size_t  token_len 
)
static

Definition at line 1036 of file pmbtoken.c.

◆ pmbtoken_sign()

static int pmbtoken_sign ( const PMBTOKEN_METHOD method,
const TRUST_TOKEN_ISSUER_KEY key,
CBB cbb,
CBS cbs,
size_t  num_requested,
size_t  num_to_issue,
uint8_t  private_metadata 
)
static

Definition at line 734 of file pmbtoken.c.

◆ point_to_cbb()

static int point_to_cbb ( CBB out,
const EC_GROUP group,
const EC_AFFINE point 
)
static

Definition at line 105 of file pmbtoken.c.

◆ scalar_from_cbs()

static int scalar_from_cbs ( CBS cbs,
const EC_GROUP group,
EC_SCALAR out 
)
static

Definition at line 334 of file pmbtoken.c.

◆ scalar_to_cbb()

static int scalar_to_cbb ( CBB out,
const EC_GROUP group,
const EC_SCALAR scalar 
)
static

Definition at line 322 of file pmbtoken.c.

◆ STACK_OF() [1/2]

static STACK_OF ( TRUST_TOKEN  )
static

Definition at line 877 of file pmbtoken.c.

◆ STACK_OF() [2/2]

static STACK_OF ( TRUST_TOKEN_PRETOKEN  )
static

Definition at line 268 of file pmbtoken.c.

Variable Documentation

◆ kDefaultAdditionalData

const uint8_t kDefaultAdditionalData[32] = {0}
static

Definition at line 58 of file pmbtoken.c.

◆ pmbtoken_exp1_method

PMBTOKEN_METHOD pmbtoken_exp1_method
static

Definition at line 1144 of file pmbtoken.c.

◆ pmbtoken_exp1_method_once

CRYPTO_once_t pmbtoken_exp1_method_once = CRYPTO_ONCE_INIT
static

Definition at line 1145 of file pmbtoken.c.

◆ pmbtoken_exp1_ok

int pmbtoken_exp1_ok = 0
static

Definition at line 1143 of file pmbtoken.c.

◆ pmbtoken_exp2_method

PMBTOKEN_METHOD pmbtoken_exp2_method
static

Definition at line 1294 of file pmbtoken.c.

◆ pmbtoken_exp2_method_once

CRYPTO_once_t pmbtoken_exp2_method_once = CRYPTO_ONCE_INIT
static

Definition at line 1295 of file pmbtoken.c.

◆ pmbtoken_exp2_ok

int pmbtoken_exp2_ok = 0
static

Definition at line 1293 of file pmbtoken.c.



grpc
Author(s):
autogenerated on Fri May 16 2025 03:01:26