33#define TLS_RANDOM_LEN 32
69#define TLSKEY_TSF_NONCED 0x0001
72#define TLSKEY_TSF_FINISHED 0x0002
83#define TLSKEY_KDF_KEYED 0x0001
86#define TLSKEY_KDF_MASTER 0x0002
89#define TLSKEY_KDF_EMS 0x0004
207 const void *secret,
const char *
label,
208 const void *seed,
size_t seed_len,
209 void *
out,
size_t out_len );
225 const void *shared,
size_t shared_len );
245 void *
verify,
size_t verify_len );
272 void *
key,
size_t key_len,
void *
iv,
273 size_t iv_len,
void *
mac,
size_t mac_len );
288 const void *
data,
size_t len,
void *tbs );
319 const void *
hash,
void *binder,
size_t binder_len );
332 return (
op &&
op->accumulates );
351 const void *
data,
size_t len );
354 const void *shared,
size_t shared_len );
358 void *
verify,
size_t verify_len );
364 void *
key,
size_t key_len,
void *
iv,
365 size_t iv_len,
void *
mac,
size_t mac_len );
369 const void *
data,
size_t len,
void *tbs );
375 const void *
prefix,
size_t prefix_len,
376 void *binder,
size_t binder_len );
union @162305117151260234136356364136041353210355154177 key
pseudo_bit_t hash[0x00010]
uint8_t data[48]
Additional event data.
uint8_t mac[ETH_ALEN]
MAC address.
#define FILE_LICENCE(_licence)
Declare a particular licence as applying to a file.
#define FILE_SECBOOT(_status)
Declare a file's UEFI Secure Boot permission status.
uint32_t end
Ending offset.
static uint16_t struct vmbus_xfer_pages_operations * op
long int random(void)
Generate a pseudo-random number between 0 and 2147483647L or 2147483562?
A message digest algorithm.
uint8_t index
Endpoint index.
const char name[7]
Name (for key expansion labels).
A TLS key derivation function secret.
unsigned int flags
Key flags.
TLS key schedule operations.
int(* save)(struct tls_key_schedule *tlskey, const void *nonce, size_t nonce_len, struct tls_preshared_key *psk)
Save pre-shared key.
int(* load)(struct tls_key_schedule *tlskey, const struct tls_preshared_key *psk)
Load pre-shared key.
unsigned int mask
Key flags preserved when loading key material.
int(* master)(struct tls_key_schedule *tlskey, int ems)
Generate master secret.
int(* cipher)(struct tls_key_schedule *tlskey, const struct tls_endpoint *writer, void *key, size_t key_len, void *iv, size_t iv_len, void *mac, size_t mac_len)
Generate cipher key material.
int(* bind)(const struct tls_preshared_key *psk, const void *hash, void *binder, size_t binder_len)
Generate pre-shared key binder value.
int(* verify)(struct tls_key_schedule *tlskey, const struct tls_endpoint *end, void *verify, size_t verify_len)
Generate verification data.
size_t(* secretsize)(struct digest_algorithm *digest)
Calculate secret size.
int(* tbshash)(struct tls_key_schedule *tlskey, const struct tls_endpoint *end, struct digest_algorithm *digest, const void *data, size_t len, void *tbs)
Generate signable digest value.
int(* traffic)(struct tls_key_schedule *tlskey, const struct tls_endpoint *writer, const struct tls_phase *phase)
Generate traffic secrets.
int accumulates
Key schedule accumulates all shared secrets.
void(* expand)(struct digest_algorithm *digest, const void *secret, const char *label, const void *seed, size_t seed_len, void *out, size_t out_len)
Expand key material.
void(* reset)(struct tls_key_schedule *tlskey)
Reset key schedule.
int(* apply)(struct tls_key_schedule *tlskey, const void *shared, size_t shared_len)
Apply a new shared secret.
const struct tls_key_schedule_operations * op
Key schedule operations.
struct tls_random random[2]
Client and server random bytes.
size_t secretsize
Secret size.
struct tls_transcript transcript
Running handshake transcript digest.
struct tls_random nonce
Local endpoint random bytes.
struct tls_traffic_secret traffic[2]
Traffic secrets.
struct digest_algorithm * digest
Digest algorithm.
void * dynamic
Dynamically-allocated storage.
struct tls_kdf_secret kdf
Key derivation function secret.
uint8_t resumption[48]
Resumption secret.
struct digest_algorithm * digest
Digest algorithm (if set).
unsigned int flags
Key flags.
const struct tls_key_schedule_operations * op
Key schedule operations (if set).
TLS client or server random bytes.
uint8_t bytes[TLS_RANDOM_LEN]
Random bytes.
const struct tls_phase * phase
Phase.
A TLS running handshake transcript digest.
void * finishing
Running digest value up to the most recent Finished (if any).
void * running
Running digest value.
unsigned int flags
Transcript flags.
void * ctx
Digest context.
const struct tls_phase tls_early
Early traffic phase.
const struct tls_phase tls_handshake
Handshake traffic phase.
const struct tls_key_schedule_operations tlskey_hash
TLS key schedule based on P_Hash().
const struct tls_key_schedule_operations tlskey_md5_sha1
TLS key schedule based on P_MD5()+P_SHA1().
const struct tls_phase tls_application
Application traffic phase.
const struct tls_key_schedule_operations tlskey_hkdf
TLS key schedule based on HKDF.
int tlskey_save(struct tls_key_schedule *tlskey, const void *nonce, size_t nonce_len, struct tls_preshared_key *psk)
Save pre-shared key.
int tlskey_master(struct tls_key_schedule *tlskey, int ems)
Generate master secret.
int tlskey_cipher(struct tls_key_schedule *tlskey, const struct tls_endpoint *writer, void *key, size_t key_len, void *iv, size_t iv_len, void *mac, size_t mac_len)
Generate cipher key material.
int tlskey_load(struct tls_key_schedule *tlskey, int ems, const struct tls_preshared_key *psk)
Load pre-shared key.
static int tlskey_is_accumulating(struct tls_key_schedule *tlskey)
Check if key schedule accumulates shared secrets.
void tlskey_stop(struct tls_key_schedule *tlskey)
Stop key schedule.
void tlskey_reset(struct tls_key_schedule *tlskey)
Reset key schedule.
int tlskey_start(struct tls_key_schedule *tlskey, const struct tls_key_schedule_operations *op, struct digest_algorithm *digest, const struct tls_random *random)
Start key schedule.
int tlskey_tbshash(struct tls_key_schedule *tlskey, const struct tls_endpoint *end, struct digest_algorithm *digest, const void *data, size_t len, void *tbs)
Generate signable digest value.
int tlskey_apply(struct tls_key_schedule *tlskey, const void *shared, size_t shared_len)
Apply a new shared secret.
int tlskey_traffic(struct tls_key_schedule *tlskey, const struct tls_endpoint *writer, const struct tls_phase *phase)
Generate traffic secret.
int tlskey_verify(struct tls_key_schedule *tlskey, const struct tls_endpoint *end, void *verify, size_t verify_len)
Generate verification data.
#define TLS_RANDOM_LEN
Number of random bytes.
void tlskey_digest(struct tls_key_schedule *tlskey, const void *data, size_t len)
Add handshake to running transcript digest.
int tlskey_bind(const struct tls_preshared_key *psk, const void *prefix, size_t prefix_len, void *binder, size_t binder_len)
Generate pre-shared key binder value.
u8 iv[16]
Initialization vector.