ldns documentation

- Main Page
- Related Pages
- Data Structures
- Files

- File List
- Globals

Data Structures | Macros | Typedefs | Functions
sha2.c File Reference

Go to the source code of this file.

## Data Structures
union | _ldns_sha2_buffer_union

## Macros
#define | ldns_sha256_SHORT_BLOCK_LENGTH (LDNS_SHA256_BLOCK_LENGTH - 8)
#define | ldns_sha384_SHORT_BLOCK_LENGTH (LDNS_SHA384_BLOCK_LENGTH - 16)
#define | ldns_sha512_SHORT_BLOCK_LENGTH (LDNS_SHA512_BLOCK_LENGTH - 16)
#define | REVERSE32(w, x)
#define | REVERSE64(w, x)
#define | ADDINC128(w, n)
#define | SHA2_USE_MEMSET_MEMCPY 1
#define | MEMSET_BZERO(p, l) memset((p), 0, (l))
#define | MEMCPY_BCOPY(d, s, l) memcpy((d), (s), (l))
#define | R(b, x) ((x) >> (b))
#define | S32(b, x) (((x) >> (b)) | ((x) << (32 - (b))))
#define | S64(b, x) (((x) >> (b)) | ((x) << (64 - (b))))
#define | Ch(x, y, z) (((x) & (y)) ^ ((~(x)) & (z)))
#define | Maj(x, y, z) (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z)))
#define | Sigma0_256(x) (S32(2, (x)) ^ S32(13, (x)) ^ S32(22, (x)))
#define | Sigma1_256(x) (S32(6, (x)) ^ S32(11, (x)) ^ S32(25, (x)))
#define | sigma0_256(x) (S32(7, (x)) ^ S32(18, (x)) ^ R(3 , (x)))
#define | sigma1_256(x) (S32(17, (x)) ^ S32(19, (x)) ^ R(10, (x)))
#define | Sigma0_512(x) (S64(28, (x)) ^ S64(34, (x)) ^ S64(39, (x)))
#define | Sigma1_512(x) (S64(14, (x)) ^ S64(18, (x)) ^ S64(41, (x)))
#define | sigma0_512(x) (S64( 1, (x)) ^ S64( 8, (x)) ^ R( 7, (x)))
#define | sigma1_512(x) (S64(19, (x)) ^ S64(61, (x)) ^ R( 6, (x)))

## Typedefs
typedef uint8_t | sha2_byte
typedef uint32_t | sha2_word32
typedef uint64_t | sha2_word64
typedef union _ldns_sha2_buffer_union | ldns_sha2_buffer_union

## Functions
void | ldns_sha256_init (ldns_sha256_CTX *context)
void | ldns_sha256_update (ldns_sha256_CTX *context, const sha2_byte *data, size_t len)
void | ldns_sha256_final (sha2_byte digest[], ldns_sha256_CTX *context)
unsigned char * | ldns_sha256 (unsigned char *data, unsigned int data_len, unsigned char *digest)
| Convenience function to digest a fixed block of data at once. More...
void | ldns_sha512_init (ldns_sha512_CTX *context)
void | ldns_sha512_update (ldns_sha512_CTX *context, const sha2_byte *data, size_t len)
void | ldns_sha512_final (sha2_byte digest[], ldns_sha512_CTX *context)
unsigned char * | ldns_sha512 (unsigned char *data, unsigned int data_len, unsigned char *digest)
| Convenience function to digest a fixed block of data at once. More...
void | ldns_sha384_init (ldns_sha384_CTX *context)
void | ldns_sha384_update (ldns_sha384_CTX *context, const sha2_byte *data, size_t len)
void | ldns_sha384_final (sha2_byte digest[], ldns_sha384_CTX *context)
unsigned char * | ldns_sha384 (unsigned char *data, unsigned int data_len, unsigned char *digest)
| Convenience function to digest a fixed block of data at once. More...

## Macro Definition Documentation

#define ldns_sha256_SHORT_BLOCK_LENGTH (LDNS_SHA256_BLOCK_LENGTH - 8)

Definition at line 111 of file sha2.c.

#define ldns_sha384_SHORT_BLOCK_LENGTH (LDNS_SHA384_BLOCK_LENGTH - 16)

Definition at line 112 of file sha2.c.

#define ldns_sha512_SHORT_BLOCK_LENGTH (LDNS_SHA512_BLOCK_LENGTH - 16)

Definition at line 113 of file sha2.c.

#define REVERSE32 | ( |  | w,
|  |  | x
| ) |  |

Value:
{ \
sha2_word32 tmp = (w); \
tmp = (tmp >> 16) | (tmp << 16); \
(x) = ((tmp & 0xff00ff00UL) >> 8) | ((tmp & 0x00ff00ffUL) << 8); \
}
sha2_word32
uint32_t sha2_word32
Definition: sha2.c:102

Definition at line 118 of file sha2.c.

#define REVERSE64 | ( |  | w,
|  |  | x
| ) |  |

Value:
{ \
sha2_word64 tmp = (w); \
tmp = (tmp >> 32) | (tmp << 32); \
tmp = ((tmp & 0xff00ff00ff00ff00ULL) >> 8) | \
((tmp & 0x00ff00ff00ff00ffULL) << 8); \
(x) = ((tmp & 0xffff0000ffff0000ULL) >> 16) | \
((tmp & 0x0000ffff0000ffffULL) << 16); \
}
sha2_word64
uint64_t sha2_word64
Definition: sha2.c:106

Definition at line 124 of file sha2.c.

#define ADDINC128 | ( |  | w,
|  |  | n
| ) |  |

Value:
{ \
(w)[0] += (sha2_word64)(n); \
if ((w)[0] < (n)) { \
(w)[1]++; \
} \
}
sha2_word64
uint64_t sha2_word64
Definition: sha2.c:106

Definition at line 142 of file sha2.c.

#define SHA2_USE_MEMSET_MEMCPY 1

Definition at line 164 of file sha2.c.

#define MEMSET_BZERO | ( |  | p,
|  |  | l
| ) |  | memset((p), 0, (l))

Definition at line 172 of file sha2.c.

#define MEMCPY_BCOPY | ( |  | d,
|  |  | s,
|  |  | l
| ) |  | memcpy((d), (s), (l))

Definition at line 173 of file sha2.c.

#define R | ( |  | b,
|  |  | x
| ) |  | ((x) >> (b))

Definition at line 191 of file sha2.c.

#define S32 | ( |  | b,
|  |  | x
| ) |  | (((x) >> (b)) | ((x) << (32 - (b))))

Definition at line 193 of file sha2.c.

#define S64 | ( |  | b,
|  |  | x
| ) |  | (((x) >> (b)) | ((x) << (64 - (b))))

Definition at line 195 of file sha2.c.

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

Definition at line 198 of file sha2.c.

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

Definition at line 199 of file sha2.c.

#define Sigma0_256 | ( |  | x | ) | (S32(2, (x)) ^ S32(13, (x)) ^ S32(22, (x)))

Definition at line 202 of file sha2.c.

#define Sigma1_256 | ( |  | x | ) | (S32(6, (x)) ^ S32(11, (x)) ^ S32(25, (x)))

Definition at line 203 of file sha2.c.

#define sigma0_256 | ( |  | x | ) | (S32(7, (x)) ^ S32(18, (x)) ^ R(3 , (x)))

Definition at line 204 of file sha2.c.

#define sigma1_256 | ( |  | x | ) | (S32(17, (x)) ^ S32(19, (x)) ^ R(10, (x)))

Definition at line 205 of file sha2.c.

#define Sigma0_512 | ( |  | x | ) | (S64(28, (x)) ^ S64(34, (x)) ^ S64(39, (x)))

Definition at line 208 of file sha2.c.

#define Sigma1_512 | ( |  | x | ) | (S64(14, (x)) ^ S64(18, (x)) ^ S64(41, (x)))

Definition at line 209 of file sha2.c.

#define sigma0_512 | ( |  | x | ) | (S64( 1, (x)) ^ S64( 8, (x)) ^ R( 7, (x)))

Definition at line 210 of file sha2.c.

#define sigma1_512 | ( |  | x | ) | (S64(19, (x)) ^ S64(61, (x)) ^ R( 6, (x)))

Definition at line 211 of file sha2.c.

## Typedef Documentation

typedef uint8_t sha2_byte

Definition at line 101 of file sha2.c.

typedef uint32_t sha2_word32

Definition at line 102 of file sha2.c.

typedef uint64_t sha2_word64

Definition at line 106 of file sha2.c.

typedef union _ldns_sha2_buffer_union ldns_sha2_buffer_union

## Function Documentation

void ldns_sha256_init | ( | ldns_sha256_CTX * | context | ) |

Definition at line 315 of file sha2.c.

References _ldns_sha256_CTX::bitcount, _ldns_sha256_CTX::buffer, BYTE_ORDER, Ch, LDNS_SHA256_BLOCK_LENGTH, LDNS_SHA256_DIGEST_LENGTH, LITTLE_ENDIAN, Maj, MEMCPY_BCOPY, MEMSET_BZERO, REVERSE32, Sigma0_256, sigma0_256, Sigma1_256, sigma1_256, and _ldns_sha256_CTX::state.

void ldns_sha256_update | ( | ldns_sha256_CTX * | context,
|  | const sha2_byte * | data,
|  | size_t | len
| ) |  |

Definition at line 501 of file sha2.c.

References _ldns_sha256_CTX::bitcount, _ldns_sha256_CTX::buffer, LDNS_SHA256_BLOCK_LENGTH, and MEMCPY_BCOPY.

void ldns_sha256_final | ( | sha2_byte | digest[],
|  | ldns_sha256_CTX * | context
| ) |  |

Definition at line 554 of file sha2.c.

References _ldns_sha256_CTX::bitcount, _ldns_sha256_CTX::buffer, LDNS_SHA256_BLOCK_LENGTH, LDNS_SHA256_DIGEST_LENGTH, ldns_sha256_SHORT_BLOCK_LENGTH, MEMCPY_BCOPY, MEMSET_BZERO, REVERSE32, REVERSE64, _ldns_sha256_CTX::state, _ldns_sha2_buffer_union::theChars, and _ldns_sha2_buffer_union::theLongs.

unsigned char* ldns_sha256 | ( | unsigned char * | data,
|  | unsigned int | data_len,
|  | unsigned char * | digest
| ) |  |

Convenience function to digest a fixed block of data at once.

Parameters

  [in] | data | the data to digest
  [in] | data_len | the length of data in bytes
  [out] | digest | the length of data in bytes This pointer MUST have LDNS_SHA256_DIGEST_LENGTH bytes available

Returns
  the SHA1 digest of the given data

Definition at line 620 of file sha2.c.

References ldns_sha256_final(), ldns_sha256_init(), and ldns_sha256_update().

void ldns_sha512_init | ( | ldns_sha512_CTX * | context | ) |

Definition at line 630 of file sha2.c.

References _ldns_sha512_CTX::bitcount, _ldns_sha512_CTX::buffer, BYTE_ORDER, Ch, LDNS_SHA512_BLOCK_LENGTH, LDNS_SHA512_DIGEST_LENGTH, LITTLE_ENDIAN, Maj, MEMCPY_BCOPY, MEMSET_BZERO, REVERSE64, Sigma0_512, sigma0_512, Sigma1_512, sigma1_512, and _ldns_sha512_CTX::state.

void ldns_sha512_update | ( | ldns_sha512_CTX * | context,
|  | const sha2_byte * | data,
|  | size_t | len
| ) |  |

Definition at line 810 of file sha2.c.

References ADDINC128, _ldns_sha512_CTX::bitcount, _ldns_sha512_CTX::buffer, LDNS_SHA512_BLOCK_LENGTH, ldns_sha512_SHORT_BLOCK_LENGTH, MEMCPY_BCOPY, MEMSET_BZERO, REVERSE64, _ldns_sha2_buffer_union::theChars, and _ldns_sha2_buffer_union::theLongs.

void ldns_sha512_final | ( | sha2_byte | digest[],
|  | ldns_sha512_CTX * | context
| ) |  |

Definition at line 901 of file sha2.c.

References LDNS_SHA512_DIGEST_LENGTH, MEMCPY_BCOPY, MEMSET_BZERO, REVERSE64, and _ldns_sha512_CTX::state.

unsigned char* ldns_sha512 | ( | unsigned char * | data,
|  | unsigned int | data_len,
|  | unsigned char * | digest
| ) |  |

Convenience function to digest a fixed block of data at once.

Parameters

  [in] | data | the data to digest
  [in] | data_len | the length of data in bytes
  [out] | digest | the length of data in bytes This pointer MUST have LDNS_SHA512_DIGEST_LENGTH bytes available

Returns
  the SHA1 digest of the given data

Definition at line 931 of file sha2.c.

References ldns_sha512_final(), ldns_sha512_init(), and ldns_sha512_update().

void ldns_sha384_init | ( | ldns_sha384_CTX * | context | ) |

Definition at line 941 of file sha2.c.

References _ldns_sha512_CTX::bitcount, _ldns_sha512_CTX::buffer, LDNS_SHA384_BLOCK_LENGTH, LDNS_SHA512_DIGEST_LENGTH, MEMCPY_BCOPY, MEMSET_BZERO, and _ldns_sha512_CTX::state.

void ldns_sha384_update | ( | ldns_sha384_CTX * | context,
|  | const sha2_byte * | data,
|  | size_t | len
| ) |  |

Definition at line 950 of file sha2.c.

References ldns_sha512_update().

void ldns_sha384_final | ( | sha2_byte | digest[],
|  | ldns_sha384_CTX * | context
| ) |  |

Definition at line 954 of file sha2.c.

References LDNS_SHA384_DIGEST_LENGTH, MEMCPY_BCOPY, MEMSET_BZERO, REVERSE64, and _ldns_sha512_CTX::state.

unsigned char* ldns_sha384 | ( | unsigned char * | data,
|  | unsigned int | data_len,
|  | unsigned char * | digest
| ) |  |

Convenience function to digest a fixed block of data at once.

Parameters

  [in] | data | the data to digest
  [in] | data_len | the length of data in bytes
  [out] | digest | the length of data in bytes This pointer MUST have LDNS_SHA384_DIGEST_LENGTH bytes available

Returns
  the SHA1 digest of the given data

Definition at line 984 of file sha2.c.

References ldns_sha384_final(), ldns_sha384_init(), and ldns_sha384_update().