gsasl  1.10.0
About: GNU SASL is an implementation of the Simple Authentication and Security Layer (SASL). Development version.
  Fossies Dox: gsasl-1.10.0.tar.gz  ("unofficial" and yet experimental doxygen-generated source code documentation)  

sha256.c File Reference
#include <config.h>
#include "sha256.h"
#include <stdalign.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <byteswap.h>
Include dependency graph for sha256.c:

Go to the source code of this file.

Macros

#define SWAP(n)   bswap_32 (n)
 
#define BLOCKSIZE   32768
 
#define UNALIGNED_P(p)   ((uintptr_t) (p) % alignof (uint32_t) != 0)
 
#define K(I)   sha256_round_constants[I]
 
#define F2(A, B, C)   ( ( A & B ) | ( C & ( A | B ) ) )
 
#define F1(E, F, G)   ( G ^ ( E & ( F ^ G ) ) )
 
#define rol(x, n)   (((x) << (n)) | ((x) >> (32 - (n))))
 
#define S0(x)   (rol(x,25)^rol(x,14)^(x>>3))
 
#define S1(x)   (rol(x,15)^rol(x,13)^(x>>10))
 
#define SS0(x)   (rol(x,30)^rol(x,19)^rol(x,10))
 
#define SS1(x)   (rol(x,26)^rol(x,21)^rol(x,7))
 
#define M(I)
 
#define R(A, B, C, D, E, F, G, H, K, M)
 

Functions

void sha256_init_ctx (struct sha256_ctx *ctx)
 
void sha224_init_ctx (struct sha256_ctx *ctx)
 
static void set_uint32 (char *cp, unsigned int v)
 
void * sha256_read_ctx (const struct sha256_ctx *ctx, void *resbuf)
 
void * sha224_read_ctx (const struct sha256_ctx *ctx, void *resbuf)
 
static void sha256_conclude_ctx (struct sha256_ctx *ctx)
 
void * sha256_finish_ctx (struct sha256_ctx *ctx, void *resbuf)
 
void * sha224_finish_ctx (struct sha256_ctx *ctx, void *resbuf)
 
void * sha256_buffer (const char *buffer, size_t len, void *resblock)
 
void * sha224_buffer (const char *buffer, size_t len, void *resblock)
 
void sha256_process_bytes (const void *buffer, size_t len, struct sha256_ctx *ctx)
 
void sha256_process_block (const void *buffer, size_t len, struct sha256_ctx *ctx)
 

Variables

static const unsigned char fillbuf [64] = { 0x80, 0 }
 
static const unsigned int sha256_round_constants [64]
 

Macro Definition Documentation

◆ BLOCKSIZE

#define BLOCKSIZE   32768

Definition at line 46 of file sha256.c.

◆ F1

#define F1 (   E,
  F,
 
)    ( G ^ ( E & ( F ^ G ) ) )

Definition at line 402 of file sha256.c.

◆ F2

#define F2 (   A,
  B,
 
)    ( ( A & B ) | ( C & ( A | B ) ) )

Definition at line 401 of file sha256.c.

◆ K

#define K (   I)    sha256_round_constants[I]

Definition at line 380 of file sha256.c.

◆ M

#define M (   I)
Value:
( tm = S1(x[(I-2)&0x0f]) + x[(I-7)&0x0f] \
+ S0(x[(I-15)&0x0f]) + x[I&0x0f] \
, x[I&0x0f] = tm )
#define S0(x)
#define S1(x)

◆ R

#define R (   A,
  B,
  C,
  D,
  E,
  F,
  G,
  H,
  K,
  M 
)
Value:
do { t0 = SS0(A) + F2(A,B,C); \
t1 = H + SS1(E) \
+ F1(E,F,G) \
+ K \
+ M; \
D += t1; H = t0 + t1; \
} while(0)
#define F1(E, F, G)
Definition: sha256.c:402
#define SS1(x)
#define K(I)
Definition: sha256.c:380
#define F2(A, B, C)
Definition: sha256.c:401
#define SS0(x)
#define M(I)

◆ rol

#define rol (   x,
 
)    (((x) << (n)) | ((x) >> (32 - (n))))

◆ S0

#define S0 (   x)    (rol(x,25)^rol(x,14)^(x>>3))

◆ S1

#define S1 (   x)    (rol(x,15)^rol(x,13)^(x>>10))

◆ SS0

#define SS0 (   x)    (rol(x,30)^rol(x,19)^rol(x,10))

◆ SS1

#define SS1 (   x)    (rol(x,26)^rol(x,21)^rol(x,7))

◆ SWAP

#define SWAP (   n)    bswap_32 (n)

Definition at line 43 of file sha256.c.

◆ UNALIGNED_P

#define UNALIGNED_P (   p)    ((uintptr_t) (p) % alignof (uint32_t) != 0)

Function Documentation

◆ set_uint32()

static void set_uint32 ( char *  cp,
unsigned int  v 
)
static

Definition at line 98 of file sha256.c.

Referenced by sha224_read_ctx(), sha256_conclude_ctx(), and sha256_read_ctx().

◆ sha224_buffer()

void* sha224_buffer ( const char *  buffer,
size_t  len,
void *  resblock 
)

◆ sha224_finish_ctx()

void* sha224_finish_ctx ( struct sha256_ctx ctx,
void *  resbuf 
)

Definition at line 165 of file sha256.c.

References sha224_read_ctx(), and sha256_conclude_ctx().

Referenced by sha224_buffer().

◆ sha224_init_ctx()

void sha224_init_ctx ( struct sha256_ctx ctx)

Definition at line 79 of file sha256.c.

References sha256_ctx::buflen, sha256_ctx::state, and sha256_ctx::total.

Referenced by sha224_buffer().

◆ sha224_read_ctx()

void* sha224_read_ctx ( const struct sha256_ctx ctx,
void *  resbuf 
)

Definition at line 118 of file sha256.c.

References set_uint32(), sha256_ctx::state, and SWAP.

Referenced by sha224_finish_ctx().

◆ sha256_buffer()

void* sha256_buffer ( const char *  buffer,
size_t  len,
void *  resblock 
)

Definition at line 279 of file sha256.c.

References sha256_ctx::buffer, sha256_finish_ctx(), sha256_init_ctx(), and sha256_process_bytes().

Referenced by gc_hash_buffer().

◆ sha256_conclude_ctx()

static void sha256_conclude_ctx ( struct sha256_ctx ctx)
static

◆ sha256_finish_ctx()

void* sha256_finish_ctx ( struct sha256_ctx ctx,
void *  resbuf 
)

Definition at line 158 of file sha256.c.

References sha256_conclude_ctx(), and sha256_read_ctx().

Referenced by gc_hash_read(), and sha256_buffer().

◆ sha256_init_ctx()

void sha256_init_ctx ( struct sha256_ctx ctx)

Definition at line 63 of file sha256.c.

References sha256_ctx::buflen, sha256_ctx::state, and sha256_ctx::total.

Referenced by gc_hash_open(), and sha256_buffer().

◆ sha256_process_block()

void sha256_process_block ( const void *  buffer,
size_t  len,
struct sha256_ctx ctx 
)

Definition at line 409 of file sha256.c.

References sha256_ctx::buffer, c, K, M, R, sha256_ctx::state, SWAP, sha256_ctx::total, and uint32_t.

Referenced by sha256_conclude_ctx(), and sha256_process_bytes().

◆ sha256_process_bytes()

void sha256_process_bytes ( const void *  buffer,
size_t  len,
struct sha256_ctx ctx 
)

◆ sha256_read_ctx()

void* sha256_read_ctx ( const struct sha256_ctx ctx,
void *  resbuf 
)

Definition at line 106 of file sha256.c.

References set_uint32(), sha256_ctx::state, and SWAP.

Referenced by sha256_finish_ctx().

Variable Documentation

◆ fillbuf

const unsigned char fillbuf[64] = { 0x80, 0 }
static

Definition at line 54 of file sha256.c.

Referenced by sha256_conclude_ctx().

◆ sha256_round_constants

const unsigned int sha256_round_constants[64]
static
Initial value:
= {
0x428a2f98UL, 0x71374491UL, 0xb5c0fbcfUL, 0xe9b5dba5UL,
0x3956c25bUL, 0x59f111f1UL, 0x923f82a4UL, 0xab1c5ed5UL,
0xd807aa98UL, 0x12835b01UL, 0x243185beUL, 0x550c7dc3UL,
0x72be5d74UL, 0x80deb1feUL, 0x9bdc06a7UL, 0xc19bf174UL,
0xe49b69c1UL, 0xefbe4786UL, 0x0fc19dc6UL, 0x240ca1ccUL,
0x2de92c6fUL, 0x4a7484aaUL, 0x5cb0a9dcUL, 0x76f988daUL,
0x983e5152UL, 0xa831c66dUL, 0xb00327c8UL, 0xbf597fc7UL,
0xc6e00bf3UL, 0xd5a79147UL, 0x06ca6351UL, 0x14292967UL,
0x27b70a85UL, 0x2e1b2138UL, 0x4d2c6dfcUL, 0x53380d13UL,
0x650a7354UL, 0x766a0abbUL, 0x81c2c92eUL, 0x92722c85UL,
0xa2bfe8a1UL, 0xa81a664bUL, 0xc24b8b70UL, 0xc76c51a3UL,
0xd192e819UL, 0xd6990624UL, 0xf40e3585UL, 0x106aa070UL,
0x19a4c116UL, 0x1e376c08UL, 0x2748774cUL, 0x34b0bcb5UL,
0x391c0cb3UL, 0x4ed8aa4aUL, 0x5b9cca4fUL, 0x682e6ff3UL,
0x748f82eeUL, 0x78a5636fUL, 0x84c87814UL, 0x8cc70208UL,
0x90befffaUL, 0xa4506cebUL, 0xbef9a3f7UL, 0xc67178f2UL,
}

Definition at line 381 of file sha256.c.