iPXE
Data Structures | Macros | Functions | Variables
crypto.h File Reference

Cryptographic API. More...

#include <stdint.h>
#include <stddef.h>

Go to the source code of this file.

Data Structures

struct  digest_algorithm
 A message digest algorithm. More...
 
struct  cipher_algorithm
 A cipher algorithm. More...
 
struct  pubkey_algorithm
 A public key algorithm. More...
 

Macros

#define cipher_encrypt(cipher, ctx, src, dst, len)
 
#define cipher_decrypt(cipher, ctx, src, dst, len)
 

Functions

 FILE_LICENCE (GPL2_OR_LATER_OR_UBDL)
 
static void digest_init (struct digest_algorithm *digest, void *ctx)
 
static void digest_update (struct digest_algorithm *digest, void *ctx, const void *data, size_t len)
 
static void digest_final (struct digest_algorithm *digest, void *ctx, void *out)
 
static int cipher_setkey (struct cipher_algorithm *cipher, void *ctx, const void *key, size_t keylen)
 
static void cipher_setiv (struct cipher_algorithm *cipher, void *ctx, const void *iv)
 
static void cipher_encrypt (struct cipher_algorithm *cipher, void *ctx, const void *src, void *dst, size_t len)
 
static void cipher_decrypt (struct cipher_algorithm *cipher, void *ctx, const void *src, void *dst, size_t len)
 
static int is_stream_cipher (struct cipher_algorithm *cipher)
 
static int pubkey_init (struct pubkey_algorithm *pubkey, void *ctx, const void *key, size_t key_len)
 
static size_t pubkey_max_len (struct pubkey_algorithm *pubkey, void *ctx)
 
static int pubkey_encrypt (struct pubkey_algorithm *pubkey, void *ctx, const void *data, size_t len, void *out)
 
static int pubkey_decrypt (struct pubkey_algorithm *pubkey, void *ctx, const void *data, size_t len, void *out)
 
static int pubkey_sign (struct pubkey_algorithm *pubkey, void *ctx, struct digest_algorithm *digest, const void *value, void *signature)
 
static int pubkey_verify (struct pubkey_algorithm *pubkey, void *ctx, struct digest_algorithm *digest, const void *value, const void *signature, size_t signature_len)
 
static void pubkey_final (struct pubkey_algorithm *pubkey, void *ctx)
 
static int pubkey_match (struct pubkey_algorithm *pubkey, const void *private_key, size_t private_key_len, const void *public_key, size_t public_key_len)
 

Variables

struct digest_algorithm __attribute__
 
struct digest_algorithm digest_null
 
struct cipher_algorithm cipher_null
 
struct pubkey_algorithm pubkey_null
 

Detailed Description

Cryptographic API.

Definition in file crypto.h.

Macro Definition Documentation

◆ cipher_encrypt

#define cipher_encrypt (   cipher,
  ctx,
  src,
  dst,
  len 
)
Value:
do { \
assert ( ( (len) & ( (cipher)->blocksize - 1 ) ) == 0 ); \
cipher_encrypt ( (cipher), (ctx), (src), (dst), (len) ); \
} while ( 0 )
struct golan_eq_context ctx
Definition: CIB_PRM.h:28
static __always_inline void off_t userptr_t src
Definition: efi_uaccess.h:66
uint32_t len
Length.
Definition: ena.h:14

Definition at line 202 of file crypto.h.

◆ cipher_decrypt

#define cipher_decrypt (   cipher,
  ctx,
  src,
  dst,
  len 
)
Value:
do { \
assert ( ( (len) & ( (cipher)->blocksize - 1 ) ) == 0 ); \
cipher_decrypt ( (cipher), (ctx), (src), (dst), (len) ); \
} while ( 0 )
struct golan_eq_context ctx
Definition: CIB_PRM.h:28
static __always_inline void off_t userptr_t src
Definition: efi_uaccess.h:66
uint32_t len
Length.
Definition: ena.h:14

Definition at line 212 of file crypto.h.

Function Documentation

◆ FILE_LICENCE()

FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL  )

◆ digest_init()

static void digest_init ( struct digest_algorithm digest,
void *  ctx 
)
inlinestatic

◆ digest_update()

static void digest_update ( struct digest_algorithm digest,
void *  ctx,
const void *  data,
size_t  len 
)
inlinestatic

Definition at line 177 of file crypto.h.

178  {
179  digest->update ( ctx, data, len );
180 }
struct golan_eq_context ctx
Definition: CIB_PRM.h:28
struct md4_digest digest
Digest of data already processed.
Definition: md4.h:12
uint32_t len
Length.
Definition: ena.h:14
struct arbelprm_port_state_change_st data
Message.
Definition: arbel.h:12

References ctx, data, digest, and len.

Referenced by asn1_okx(), chap_update(), cms_digest(), dbg_md5_da(), digest_cost(), digest_exec(), digest_frag_okx(), hash_df(), hmac_final(), hmac_init(), hmac_reduce_key(), hmac_update(), http_digest_update(), md5_sha1_update(), ntlm_key(), ocsp_check_signature(), ocsp_compare_responder_key_hash(), ocsp_request(), peerblk_decrypt(), peerblk_raw_rx(), peerdist_info_passphrase_okx(), tls_add_handshake(), x509_check_signature(), and x509_fingerprint().

◆ digest_final()

static void digest_final ( struct digest_algorithm digest,
void *  ctx,
void *  out 
)
inlinestatic

◆ cipher_setkey()

static int cipher_setkey ( struct cipher_algorithm cipher,
void *  ctx,
const void *  key,
size_t  keylen 
)
inlinestatic

Definition at line 187 of file crypto.h.

188  {
189  return cipher->setkey ( ctx, key, keylen );
190 }
struct golan_eq_context ctx
Definition: CIB_PRM.h:28
int(* setkey)(void *ctx, const void *key, size_t keylen)
Set key.
Definition: crypto.h:62
union @375 key
Sense key.
Definition: scsi.h:18

References ctx, key, and cipher_algorithm::setkey.

Referenced by aes_unwrap(), aes_wrap(), cbc_setkey(), ccmp_init(), cipher_cost(), cipher_decrypt_okx(), cipher_encrypt_okx(), peerblk_parse_header(), tkip_decrypt(), tkip_encrypt(), tls_generate_keys(), wep_decrypt(), and wep_encrypt().

◆ cipher_setiv()

static void cipher_setiv ( struct cipher_algorithm cipher,
void *  ctx,
const void *  iv 
)
inlinestatic

Definition at line 192 of file crypto.h.

193  {
194  cipher->setiv ( ctx, iv );
195 }
struct golan_eq_context ctx
Definition: CIB_PRM.h:28
u8 iv[16]
Initialization vector.
Definition: wpa.h:60
void(* setiv)(void *ctx, const void *iv)
Set initialisation vector.
Definition: crypto.h:68

References ctx, iv, and cipher_algorithm::setiv.

Referenced by cipher_cost(), cipher_decrypt_okx(), cipher_encrypt_okx(), peerblk_parse_iv(), and tls_generate_keys().

◆ cipher_encrypt()

static void cipher_encrypt ( struct cipher_algorithm cipher,
void *  ctx,
const void *  src,
void *  dst,
size_t  len 
)
inlinestatic

Definition at line 197 of file crypto.h.

199  {
200  cipher->encrypt ( ctx, src, dst, len );
201 }
struct golan_eq_context ctx
Definition: CIB_PRM.h:28
void(* encrypt)(void *ctx, const void *src, void *dst, size_t len)
Encrypt data.
Definition: crypto.h:78
static __always_inline void off_t userptr_t src
Definition: efi_uaccess.h:66
uint32_t len
Length.
Definition: ena.h:14

References ctx, cipher_algorithm::encrypt, len, and src.

◆ cipher_decrypt()

static void cipher_decrypt ( struct cipher_algorithm cipher,
void *  ctx,
const void *  src,
void *  dst,
size_t  len 
)
inlinestatic

Definition at line 207 of file crypto.h.

209  {
210  cipher->decrypt ( ctx, src, dst, len );
211 }
void(* decrypt)(void *ctx, const void *src, void *dst, size_t len)
Decrypt data.
Definition: crypto.h:89
struct golan_eq_context ctx
Definition: CIB_PRM.h:28
static __always_inline void off_t userptr_t src
Definition: efi_uaccess.h:66
uint32_t len
Length.
Definition: ena.h:14

References ctx, cipher_algorithm::decrypt, len, and src.

◆ is_stream_cipher()

static int is_stream_cipher ( struct cipher_algorithm cipher)
inlinestatic

Definition at line 217 of file crypto.h.

217  {
218  return ( cipher->blocksize == 1 );
219 }
size_t blocksize
Block size.
Definition: crypto.h:54

References cipher_algorithm::blocksize.

Referenced by tls_new_ciphertext(), and tls_send_plaintext().

◆ pubkey_init()

static int pubkey_init ( struct pubkey_algorithm pubkey,
void *  ctx,
const void *  key,
size_t  key_len 
)
inlinestatic

Definition at line 221 of file crypto.h.

222  {
223  return pubkey->init ( ctx, key, key_len );
224 }
struct golan_eq_context ctx
Definition: CIB_PRM.h:28
int(* init)(void *ctx, const void *key, size_t key_len)
Initialise algorithm.
Definition: crypto.h:106
union @375 key
Sense key.
Definition: scsi.h:18

References ctx, pubkey_algorithm::init, and key.

Referenced by cms_verify_digest(), ocsp_check_signature(), tls_send_certificate_verify(), tls_validator_done(), and x509_check_signature().

◆ pubkey_max_len()

static size_t pubkey_max_len ( struct pubkey_algorithm pubkey,
void *  ctx 
)
inlinestatic

Definition at line 226 of file crypto.h.

227  {
228  return pubkey->max_len ( ctx );
229 }
struct golan_eq_context ctx
Definition: CIB_PRM.h:28
size_t(* max_len)(void *ctx)
Calculate maximum output length.
Definition: crypto.h:112

References ctx, and pubkey_algorithm::max_len.

Referenced by tls_send_certificate_verify(), and tls_send_client_key_exchange().

◆ pubkey_encrypt()

static int pubkey_encrypt ( struct pubkey_algorithm pubkey,
void *  ctx,
const void *  data,
size_t  len,
void *  out 
)
inlinestatic

Definition at line 231 of file crypto.h.

232  {
233  return pubkey->encrypt ( ctx, data, len, out );
234 }
struct golan_eq_context ctx
Definition: CIB_PRM.h:28
__be32 out[4]
Definition: CIB_PRM.h:36
int(* encrypt)(void *ctx, const void *data, size_t len, void *out)
Encrypt.
Definition: crypto.h:121
uint32_t len
Length.
Definition: ena.h:14
struct arbelprm_port_state_change_st data
Message.
Definition: arbel.h:12

References ctx, data, pubkey_algorithm::encrypt, len, and out.

Referenced by tls_send_client_key_exchange().

◆ pubkey_decrypt()

static int pubkey_decrypt ( struct pubkey_algorithm pubkey,
void *  ctx,
const void *  data,
size_t  len,
void *  out 
)
inlinestatic

Definition at line 236 of file crypto.h.

237  {
238  return pubkey->decrypt ( ctx, data, len, out );
239 }
struct golan_eq_context ctx
Definition: CIB_PRM.h:28
__be32 out[4]
Definition: CIB_PRM.h:36
int(* decrypt)(void *ctx, const void *data, size_t len, void *out)
Decrypt.
Definition: crypto.h:131
uint32_t len
Length.
Definition: ena.h:14
struct arbelprm_port_state_change_st data
Message.
Definition: arbel.h:12

References ctx, data, pubkey_algorithm::decrypt, len, and out.

◆ pubkey_sign()

static int pubkey_sign ( struct pubkey_algorithm pubkey,
void *  ctx,
struct digest_algorithm digest,
const void *  value,
void *  signature 
)
inlinestatic

Definition at line 241 of file crypto.h.

243  {
244  return pubkey->sign ( ctx, digest, value, signature );
245 }
struct golan_eq_context ctx
Definition: CIB_PRM.h:28
struct md4_digest digest
Digest of data already processed.
Definition: md4.h:12
u8 signature
Definition: CIB_PRM.h:35
pseudo_bit_t value[0x00020]
Definition: arbel.h:13
int(* sign)(void *ctx, struct digest_algorithm *digest, const void *value, void *signature)
Sign digest value.
Definition: crypto.h:141

References ctx, digest, pubkey_algorithm::sign, signature, and value.

Referenced by tls_send_certificate_verify().

◆ pubkey_verify()

static int pubkey_verify ( struct pubkey_algorithm pubkey,
void *  ctx,
struct digest_algorithm digest,
const void *  value,
const void *  signature,
size_t  signature_len 
)
inlinestatic

Definition at line 247 of file crypto.h.

250  {
251  return pubkey->verify ( ctx, digest, value, signature, signature_len );
252 }
struct golan_eq_context ctx
Definition: CIB_PRM.h:28
struct md4_digest digest
Digest of data already processed.
Definition: md4.h:12
int(* verify)(void *ctx, struct digest_algorithm *digest, const void *value, const void *signature, size_t signature_len)
Verify signed digest value.
Definition: crypto.h:152
u8 signature
Definition: CIB_PRM.h:35
pseudo_bit_t value[0x00020]
Definition: arbel.h:13

References ctx, digest, signature, value, and pubkey_algorithm::verify.

Referenced by cms_verify_digest(), ocsp_check_signature(), and x509_check_signature().

◆ pubkey_final()

static void pubkey_final ( struct pubkey_algorithm pubkey,
void *  ctx 
)
inlinestatic

Definition at line 254 of file crypto.h.

254  {
255  pubkey->final ( ctx );
256 }
struct golan_eq_context ctx
Definition: CIB_PRM.h:28
void(* final)(void *ctx)
Finalise algorithm.
Definition: crypto.h:159

References ctx, and pubkey_algorithm::final.

Referenced by cms_verify_digest(), ocsp_check_signature(), tls_clear_cipher(), tls_send_certificate_verify(), and x509_check_signature().

◆ pubkey_match()

static int pubkey_match ( struct pubkey_algorithm pubkey,
const void *  private_key,
size_t  private_key_len,
const void *  public_key,
size_t  public_key_len 
)
inlinestatic

Definition at line 258 of file crypto.h.

261  {
262  return pubkey->match ( private_key, private_key_len, public_key,
263  public_key_len );
264 }
int(* match)(const void *private_key, size_t private_key_len, const void *public_key, size_t public_key_len)
Check that public key matches private key.
Definition: crypto.h:168
char private_key_len[]
struct asn1_cursor private_key
Private key.
Definition: privkey.c:67

References pubkey_algorithm::match, private_key, and private_key_len.

Referenced by certstore_find_key().

Variable Documentation

◆ __attribute__

◆ digest_null

struct digest_algorithm digest_null

Definition at line 48 of file crypto_null.c.

◆ cipher_null

struct cipher_algorithm cipher_null

Definition at line 79 of file crypto_null.c.

◆ pubkey_null

struct pubkey_algorithm pubkey_null

Definition at line 131 of file crypto_null.c.