FFmpeg  4.0
Data Structures | Macros | Functions | Variables
sha512.c File Reference
#include <string.h>
#include "attributes.h"
#include "avutil.h"
#include "bswap.h"
#include "sha512.h"
#include "intreadwrite.h"
#include "mem.h"

Go to the source code of this file.

Data Structures

struct  AVSHA512
 hash context More...
 

Macros

#define ror(value, bits)   (((value) >> (bits)) | ((value) << (64 - (bits))))
 
#define Ch(x, y, z)   (((x) & ((y) ^ (z))) ^ (z))
 
#define Maj(z, y, x)   ((((x) | (y)) & (z)) | ((x) & (y)))
 
#define Sigma0_512(x)   (ror((x), 28) ^ ror((x), 34) ^ ror((x), 39))
 
#define Sigma1_512(x)   (ror((x), 14) ^ ror((x), 18) ^ ror((x), 41))
 
#define sigma0_512(x)   (ror((x), 1) ^ ror((x), 8) ^ ((x) >> 7))
 
#define sigma1_512(x)   (ror((x), 19) ^ ror((x), 61) ^ ((x) >> 6))
 
#define blk0(i)   (block[i] = AV_RB64(buffer + 8 * (i)))
 
#define blk(i)
 
#define ROUND512(a, b, c, d, e, f, g, h)
 
#define ROUND512_0_TO_15(a, b, c, d, e, f, g, h)
 
#define ROUND512_16_TO_80(a, b, c, d, e, f, g, h)
 
#define R512_0
 
#define R512_16
 

Functions

struct AVSHA512av_sha512_alloc (void)
 Allocate an AVSHA512 context. More...
 
static void sha512_transform (uint64_t *state, const uint8_t buffer[128])
 
av_cold int av_sha512_init (AVSHA512 *ctx, int bits)
 Initialize SHA-2 512 hashing. More...
 
void av_sha512_update (AVSHA512 *ctx, const uint8_t *data, unsigned int len)
 Update hash value. More...
 
void av_sha512_final (AVSHA512 *ctx, uint8_t *digest)
 Finish hashing and output digest value. More...
 

Variables

const int av_sha512_size = sizeof(AVSHA512)
 
static const uint64_t K512 [80]
 

Macro Definition Documentation

◆ ror

#define ror (   value,
  bits 
)    (((value) >> (bits)) | ((value) << (64 - (bits))))

Definition at line 91 of file sha512.c.

◆ Ch

#define Ch (   x,
  y,
 
)    (((x) & ((y) ^ (z))) ^ (z))

Definition at line 93 of file sha512.c.

Referenced by sha512_transform().

◆ Maj

#define Maj (   z,
  y,
 
)    ((((x) | (y)) & (z)) | ((x) & (y)))

Definition at line 94 of file sha512.c.

Referenced by sha512_transform().

◆ Sigma0_512

#define Sigma0_512 (   x)    (ror((x), 28) ^ ror((x), 34) ^ ror((x), 39))

Definition at line 96 of file sha512.c.

Referenced by sha512_transform().

◆ Sigma1_512

#define Sigma1_512 (   x)    (ror((x), 14) ^ ror((x), 18) ^ ror((x), 41))

Definition at line 97 of file sha512.c.

Referenced by sha512_transform().

◆ sigma0_512

#define sigma0_512 (   x)    (ror((x), 1) ^ ror((x), 8) ^ ((x) >> 7))

Definition at line 98 of file sha512.c.

◆ sigma1_512

#define sigma1_512 (   x)    (ror((x), 19) ^ ror((x), 61) ^ ((x) >> 6))

Definition at line 99 of file sha512.c.

◆ blk0

#define blk0 (   i)    (block[i] = AV_RB64(buffer + 8 * (i)))

Definition at line 101 of file sha512.c.

Referenced by sha512_transform().

◆ blk

#define blk (   i)
Value:
(block[i] = block[i - 16] + sigma0_512(block[i - 15]) + \
sigma1_512(block[i - 2]) + block[i - 7])
static int16_t block[64]
Definition: dct.c:115
#define sigma0_512(x)
Definition: sha512.c:98

Definition at line 102 of file sha512.c.

Referenced by sha512_transform().

◆ ROUND512

#define ROUND512 (   a,
  b,
  c,
  d,
  e,
  f,
  g,
  h 
)
Value:
T1 += (h) + Sigma1_512(e) + Ch((e), (f), (g)) + K512[i]; \
(d) += T1; \
(h) = T1 + Sigma0_512(a) + Maj((a), (b), (c)); \
i++
static const uint64_t K512[80]
Definition: sha512.c:48
const char * g
Definition: vf_curves.c:112
const char * b
Definition: vf_curves.c:113
#define Sigma1_512(x)
Definition: sha512.c:97
#define Ch(x, y, z)
Definition: sha512.c:93
#define Sigma0_512(x)
Definition: sha512.c:96
static double c[64]
#define Maj(z, y, x)
Definition: sha512.c:94

Definition at line 105 of file sha512.c.

◆ ROUND512_0_TO_15

#define ROUND512_0_TO_15 (   a,
  b,
  c,
  d,
  e,
  f,
  g,
  h 
)
Value:
T1 = blk0(i); \
ROUND512(a,b,c,d,e,f,g,h)
const char * g
Definition: vf_curves.c:112
const char * b
Definition: vf_curves.c:113
#define blk0(i)
Definition: sha512.c:101
static double c[64]

Definition at line 111 of file sha512.c.

◆ ROUND512_16_TO_80

#define ROUND512_16_TO_80 (   a,
  b,
  c,
  d,
  e,
  f,
  g,
  h 
)
Value:
T1 = blk(i); \
ROUND512(a,b,c,d,e,f,g,h)
#define blk(i)
Definition: sha512.c:102
const char * g
Definition: vf_curves.c:112
const char * b
Definition: vf_curves.c:113
static double c[64]

Definition at line 115 of file sha512.c.

◆ R512_0

#define R512_0
Value:
ROUND512_0_TO_15(a, b, c, d, e, f, g, h); \
ROUND512_0_TO_15(h, a, b, c, d, e, f, g); \
ROUND512_0_TO_15(g, h, a, b, c, d, e, f); \
ROUND512_0_TO_15(f, g, h, a, b, c, d, e); \
ROUND512_0_TO_15(e, f, g, h, a, b, c, d); \
ROUND512_0_TO_15(d, e, f, g, h, a, b, c); \
ROUND512_0_TO_15(c, d, e, f, g, h, a, b); \
ROUND512_0_TO_15(b, c, d, e, f, g, h, a)
#define ROUND512_0_TO_15(a, b, c, d, e, f, g, h)
Definition: sha512.c:111
const char * g
Definition: vf_curves.c:112
const char * b
Definition: vf_curves.c:113
static double c[64]

Referenced by sha512_transform().

◆ R512_16

#define R512_16
Value:
ROUND512_16_TO_80(a, b, c, d, e, f, g, h); \
ROUND512_16_TO_80(h, a, b, c, d, e, f, g); \
ROUND512_16_TO_80(g, h, a, b, c, d, e, f); \
ROUND512_16_TO_80(f, g, h, a, b, c, d, e); \
ROUND512_16_TO_80(e, f, g, h, a, b, c, d); \
ROUND512_16_TO_80(d, e, f, g, h, a, b, c); \
ROUND512_16_TO_80(c, d, e, f, g, h, a, b); \
ROUND512_16_TO_80(b, c, d, e, f, g, h, a)
#define ROUND512_16_TO_80(a, b, c, d, e, f, g, h)
Definition: sha512.c:115
const char * g
Definition: vf_curves.c:112
const char * b
Definition: vf_curves.c:113
static double c[64]

Referenced by sha512_transform().

Function Documentation

◆ sha512_transform()

static void sha512_transform ( uint64_t *  state,
const uint8_t  buffer[128] 
)
static

Definition at line 119 of file sha512.c.

Referenced by av_sha512_update().

Variable Documentation

◆ K512

const uint64_t K512[80]
static

Definition at line 48 of file sha512.c.

Referenced by sha512_transform().