Random123
Classes | Macros | Typedefs | Enumerations | Functions
ARS and AESNI Classes and Typedefs

The ARS4x32, ARS1xm128i, AESNI4x32 and AESNI1xm128i classes export the member functions, typedefs and operator overloads required by a CBRNG class. More...

Classes

struct  aesni1xm128i_key_t
 
class  r123::AESNI1xm128i
 
class  r123::AESNI1xm128i_R< ROUNDS >
 
class  r123::ARS1xm128i_R< ROUNDS >
 
class  r123::ARS4x32_R< ROUNDS >
 

Macros

#define aesni4x32(c, k)   aesni4x32_R(aesni4x32_rounds, c, k)
 
#define ars1xm128i(c, k)   ars1xm128i_R(ars1xm128i_rounds, c, k)
 
#define ars4x32(c, k)   ars4x32_R(ars4x32_rounds, c, k)
 

Typedefs

typedef struct r123array1xm128i aesni1xm128i_ctr_t
 
typedef struct r123array1xm128i aesni1xm128i_ukey_t
 
typedef struct r123array4x32 aesni4x32_ukey_t
 
typedef struct r123array4x32 aesni4x32_ctr_t
 
typedef aesni1xm128i_key_t aesni4x32_key_t
 
typedef struct r123array1xm128i ars1xm128i_ctr_t
 
typedef struct r123array1xm128i ars1xm128i_key_t
 
typedef struct r123array1xm128i ars1xm128i_ukey_t
 
typedef struct r123array4x32 ars4x32_ctr_t
 
typedef struct r123array4x32 ars4x32_key_t
 
typedef struct r123array4x32 ars4x32_ukey_t
 

Enumerations

enum  r123_enum_aesni1xm128i { aesni1xm128i_rounds = 10 }
 
enum  r123_enum_aesni4x32 { aesni4x32_rounds = 10 }
 
enum  r123_enum_ars1xm128i { ars1xm128i_rounds = 7 }
 
enum  r123_enum_ars4x32 { ars4x32_rounds = 7 }
 

Functions

static aesni1xm128i_ctr_t aesni1xm128i (aesni1xm128i_ctr_t in, aesni1xm128i_key_t k)
 
static aesni1xm128i_ctr_t aesni1xm128i_R (unsigned R, aesni1xm128i_ctr_t in, aesni1xm128i_key_t k)
 
static aesni4x32_key_t aesni4x32keyinit (aesni4x32_ukey_t uk)
 
static aesni4x32_ctr_t aesni4x32_R (unsigned int Nrounds, aesni4x32_ctr_t c, aesni4x32_key_t k)
 
static ars1xm128i_key_t ars1xm128ikeyinit (ars1xm128i_ukey_t uk)
 
static ars1xm128i_ctr_t ars1xm128i_R (unsigned int Nrounds, ars1xm128i_ctr_t in, ars1xm128i_key_t k)
 
static ars4x32_key_t ars4x32keyinit (ars4x32_ukey_t uk)
 
static ars4x32_ctr_t ars4x32_R (unsigned int Nrounds, ars4x32_ctr_t c, ars4x32_key_t k)
 

Detailed Description

The ARS4x32, ARS1xm128i, AESNI4x32 and AESNI1xm128i classes export the member functions, typedefs and operator overloads required by a CBRNG class.

ARS1xm128i and AESNI1xm128i are based on the AES block cipher and rely on the AES-NI hardware instructions available on some some new (2011) CPUs.

The ARS1xm128i CBRNG and the use of AES for random number generation are described in Parallel Random Numbers: As Easy as 1, 2, 3 . Although it uses some cryptographic primitives, ARS1xm128i uses a cryptographically weak key schedule and is not suitable for cryptographic use.

Macro Definition Documentation

◆ aesni4x32

#define aesni4x32 (   c,
 
)    aesni4x32_R(aesni4x32_rounds, c, k)

The aesni4x32 macro provides a C API to the AESNI CBRNG, uses the default number of rounds i.e. aesni4x32_rounds

◆ ars1xm128i

#define ars1xm128i (   c,
 
)    ars1xm128i_R(ars1xm128i_rounds, c, k)

The ars1mx128i macro provides a C API interface to the ARS CBRNG with the default number of rounds i.e. ars1xm128i_rounds

◆ ars4x32

#define ars4x32 (   c,
 
)    ars4x32_R(ars4x32_rounds, c, k)

The ars4x32 macro provides a C API interface to the ARS CBRNG with the default number of rounds i.e. ars4x32_rounds

Typedef Documentation

◆ aesni1xm128i_ctr_t

◆ aesni1xm128i_ukey_t

◆ aesni4x32_ctr_t

◆ aesni4x32_key_t

◆ aesni4x32_ukey_t

◆ ars1xm128i_ctr_t

◆ ars1xm128i_key_t

◆ ars1xm128i_ukey_t

◆ ars4x32_ctr_t

typedef struct r123array4x32 ars4x32_ctr_t

◆ ars4x32_key_t

typedef struct r123array4x32 ars4x32_key_t

◆ ars4x32_ukey_t

typedef struct r123array4x32 ars4x32_ukey_t

Enumeration Type Documentation

◆ r123_enum_aesni1xm128i

Enumerator
aesni1xm128i_rounds 

◆ r123_enum_aesni4x32

Enumerator
aesni4x32_rounds 

◆ r123_enum_ars1xm128i

Enumerator
ars1xm128i_rounds 

◆ r123_enum_ars4x32

Enumerator
ars4x32_rounds 

Function Documentation

◆ aesni1xm128i()

static aesni1xm128i_ctr_t aesni1xm128i ( aesni1xm128i_ctr_t  in,
aesni1xm128i_key_t  k 
)
inlinestatic

◆ aesni1xm128i_R()

static aesni1xm128i_ctr_t aesni1xm128i_R ( unsigned  R,
aesni1xm128i_ctr_t  in,
aesni1xm128i_key_t  k 
)
inlinestatic

◆ aesni4x32_R()

static aesni4x32_ctr_t aesni4x32_R ( unsigned int  Nrounds,
aesni4x32_ctr_t  c,
aesni4x32_key_t  k 
)
inlinestatic

The aesni4x32_R function provides a C API to the AESNI CBRNG, allowing the number of rounds to be specified explicitly

◆ aesni4x32keyinit()

static aesni4x32_key_t aesni4x32keyinit ( aesni4x32_ukey_t  uk)
inlinestatic

◆ ars1xm128i_R()

static ars1xm128i_ctr_t ars1xm128i_R ( unsigned int  Nrounds,
ars1xm128i_ctr_t  in,
ars1xm128i_key_t  k 
)
inlinestatic

◆ ars1xm128ikeyinit()

static ars1xm128i_key_t ars1xm128ikeyinit ( ars1xm128i_ukey_t  uk)
inlinestatic

◆ ars4x32_R()

static ars4x32_ctr_t ars4x32_R ( unsigned int  Nrounds,
ars4x32_ctr_t  c,
ars4x32_key_t  k 
)
inlinestatic

◆ ars4x32keyinit()

static ars4x32_key_t ars4x32keyinit ( ars4x32_ukey_t  uk)
inlinestatic