kodi
Classes | Macros | Typedefs | Enumerations | Functions
crypto.h File Reference
#include "config.h"
#include "bigint_impl.h"
#include "bigint.h"
Include dependency graph for crypto.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  aes_key_st
 
struct  RC4_CTX
 
struct  SHA1_CTX
 
struct  MD2_CTX
 
struct  MD5_CTX
 
struct  RSA_CTX
 

Macros

#define AES_MAXROUNDS   14
 
#define AES_BLOCKSIZE   16
 
#define AES_IV_SIZE   16
 
#define SHA256_SIZE   32
 
#define SHA1_SIZE   20
 
#define MD2_SIZE   16
 
#define MD5_SIZE   16
 

Typedefs

typedef struct aes_key_st AES_CTX
 

Enumerations

enum  AES_MODE { AES_MODE_128, AES_MODE_256 }
 

Functions

void AES_set_key (AES_CTX *ctx, const uint8_t *key, const uint8_t *iv, AES_MODE mode)
 Set up AES with the key/iv and cipher size.
 
void AES_cbc_encrypt (AES_CTX *ctx, const uint8_t *msg, uint8_t *out, int length)
 Encrypt a byte sequence (with a block size 16) using the AES cipher.
 
void AES_cbc_decrypt (AES_CTX *ks, const uint8_t *in, uint8_t *out, int length)
 Decrypt a byte sequence (with a block size 16) using the AES cipher.
 
void AES_convert_key (AES_CTX *ctx)
 Change a key for decryption.
 
void RC4_setup (RC4_CTX *s, const uint8_t *key, int length)
 An implementation of the RC4/ARC4 algorithm. More...
 
void RC4_crypt (RC4_CTX *s, const uint8_t *msg, uint8_t *data, int length)
 Perform the encrypt/decrypt operation (can use it for either since this is a stream cipher). More...
 
void SHA1_Init (SHA1_CTX *)
 Initialize the SHA1 context.
 
void SHA1_Update (SHA1_CTX *, const uint8_t *msg, int len)
 Accepts an array of octets as the next portion of the message.
 
void SHA1_Final (uint8_t *digest, SHA1_CTX *)
 Return the 160-bit message digest into the user's array.
 
EXP_FUNC void STDCALL MD2_Init (MD2_CTX *ctx)
 
EXP_FUNC void STDCALL MD2_Update (MD2_CTX *ctx, const uint8_t *input, int ilen)
 
EXP_FUNC void STDCALL MD2_Final (uint8_t *digest, MD2_CTX *ctx)
 
EXP_FUNC void STDCALL MD5_Init (MD5_CTX *)
 MD5 initialization - begins an MD5 operation, writing a new ctx.
 
EXP_FUNC void STDCALL MD5_Update (MD5_CTX *, const uint8_t *msg, int len)
 Accepts an array of octets as the next portion of the message.
 
EXP_FUNC void STDCALL MD5_Final (uint8_t *digest, MD5_CTX *)
 Return the 128-bit message digest into the user's array.
 
void hmac_md5 (const uint8_t *msg, int length, const uint8_t *key, int key_len, uint8_t *digest)
 HMAC implementation - This code was originally taken from RFC2104 See http://www.ietf.org/rfc/rfc2104.txt and http://www.faqs.org/rfcs/rfc2202.html. More...
 
void hmac_sha1 (const uint8_t *msg, int length, const uint8_t *key, int key_len, uint8_t *digest)
 Perform HMAC-SHA1 NOTE: does not handle keys larger than the block size.
 
void RSA_priv_key_new (RSA_CTX **rsa_ctx, const uint8_t *modulus, int mod_len, const uint8_t *pub_exp, int pub_len, const uint8_t *priv_exp, int priv_len)
 Implements the RSA public encryption algorithm. More...
 
void RSA_pub_key_new (RSA_CTX **rsa_ctx, const uint8_t *modulus, int mod_len, const uint8_t *pub_exp, int pub_len)
 
void RSA_free (RSA_CTX *ctx)
 Free up any RSA context resources.
 
int RSA_decrypt (const RSA_CTX *ctx, const uint8_t *in_data, uint8_t *out_data, int is_decryption)
 Use PKCS1.5 for decryption/verification. More...
 
bigintRSA_private (const RSA_CTX *c, bigint *bi_msg)
 Performs m = c^d mod n.
 
EXP_FUNC void STDCALL RNG_initialize (void)
 Initialise the Random Number Generator engine. More...
 
EXP_FUNC void STDCALL RNG_custom_init (const uint8_t *seed_buf, int size)
 If no /dev/urandom, then initialise the RNG with something interesting.
 
EXP_FUNC void STDCALL RNG_terminate (void)
 Terminate the RNG engine.
 
EXP_FUNC void STDCALL get_random (int num_rand_bytes, uint8_t *rand_data)
 Set a series of bytes with a random number. More...
 
void get_random_NZ (int num_rand_bytes, uint8_t *rand_data)
 Set a series of bytes with a random number. More...
 

Function Documentation

◆ get_random()

EXP_FUNC void STDCALL get_random ( int  num_rand_bytes,
uint8_t *  rand_data 
)

Set a series of bytes with a random number.

Individual bytes can be 0

◆ get_random_NZ()

void get_random_NZ ( int  num_rand_bytes,
uint8_t *  rand_data 
)

Set a series of bytes with a random number.

Individual bytes are not zero.

◆ hmac_md5()

void hmac_md5 ( const uint8_t *  msg,
int  length,
const uint8_t *  key,
int  key_len,
uint8_t *  digest 
)

HMAC implementation - This code was originally taken from RFC2104 See http://www.ietf.org/rfc/rfc2104.txt and http://www.faqs.org/rfcs/rfc2202.html.

Perform HMAC-MD5 NOTE: does not handle keys larger than the block size.

◆ RC4_crypt()

void RC4_crypt ( RC4_CTX ctx,
const uint8_t *  msg,
uint8_t *  out,
int  length 
)

Perform the encrypt/decrypt operation (can use it for either since this is a stream cipher).

NOTE: *msg and *out must be the same pointer (performance tweak)

◆ RC4_setup()

void RC4_setup ( RC4_CTX ctx,
const uint8_t *  key,
int  length 
)

An implementation of the RC4/ARC4 algorithm.

Originally written by Christophe Devine. Get ready for an encrypt/decrypt operation

◆ RNG_initialize()

EXP_FUNC void STDCALL RNG_initialize ( void  )

Initialise the Random Number Generator engine.

  • On Win32 use the platform SDK's crypto engine.
  • On Linux use /dev/urandom
  • If none of these work then use a custom RNG.

◆ RSA_decrypt()

int RSA_decrypt ( const RSA_CTX ctx,
const uint8_t *  in_data,
uint8_t *  out_data,
int  is_decryption 
)

Use PKCS1.5 for decryption/verification.

Parameters
ctx[in] The context
in_data[in] The data to encrypt (must be < modulus size-11)
out_data[out] The encrypted data.
is_decryption[in] Decryption or verify operation.
Returns
The number of bytes that were originally encrypted. -1 on error.
See also
http://www.rsasecurity.com/rsalabs/node.asp?id=2125

◆ RSA_priv_key_new()

void RSA_priv_key_new ( RSA_CTX **  ctx,
const uint8_t *  modulus,
int  mod_len,
const uint8_t *  pub_exp,
int  pub_len,
const uint8_t *  priv_exp,
int  priv_len 
)

Implements the RSA public encryption algorithm.

Uses the bigint library to perform its calculations.