OPTIGA Trust M  1.1.0
C++ library for Optiga Trust M Chip Security Controller
sha256.c File Reference
#include "config.h"
#include "sha256.h"
#include "platform_util.h"
#include <string.h>
Include dependency graph for sha256.c:

Macros

#define SHA256_VALIDATE_RET(cond)   MBEDTLS_INTERNAL_VALIDATE_RET( cond, MBEDTLS_ERR_SHA256_BAD_INPUT_DATA )
 
#define SHA256_VALIDATE(cond)   MBEDTLS_INTERNAL_VALIDATE( cond )
 
#define GET_UINT32_BE(n, b, i)
 
#define PUT_UINT32_BE(n, b, i)
 
#define SHR(x, n)   ((x & 0xFFFFFFFF) >> n)
 
#define ROTR(x, n)   (SHR(x,n) | (x << (32 - n)))
 
#define S0(x)   (ROTR(x, 7) ^ ROTR(x,18) ^ SHR(x, 3))
 
#define S1(x)   (ROTR(x,17) ^ ROTR(x,19) ^ SHR(x,10))
 
#define S2(x)   (ROTR(x, 2) ^ ROTR(x,13) ^ ROTR(x,22))
 
#define S3(x)   (ROTR(x, 6) ^ ROTR(x,11) ^ ROTR(x,25))
 
#define F0(x, y, z)   ((x & y) | (z & (x | y)))
 
#define F1(x, y, z)   (z ^ (x & (y ^ z)))
 
#define R(t)
 
#define P(a, b, c, d, e, f, g, h, x, K)
 

Functions

void mbedtls_sha256_init (mbedtls_sha256_context *ctx)
 This function initializes a SHA-256 context. More...
 
void mbedtls_sha256_free (mbedtls_sha256_context *ctx)
 This function clears a SHA-256 context. More...
 
void mbedtls_sha256_clone (mbedtls_sha256_context *dst, const mbedtls_sha256_context *src)
 This function clones the state of a SHA-256 context. More...
 
int mbedtls_sha256_starts_ret (mbedtls_sha256_context *ctx, int is224)
 This function starts a SHA-224 or SHA-256 checksum calculation. More...
 
void mbedtls_sha256_starts (mbedtls_sha256_context *ctx, int is224)
 This function starts a SHA-224 or SHA-256 checksum calculation. More...
 
int mbedtls_internal_sha256_process (mbedtls_sha256_context *ctx, const unsigned char data[64])
 This function processes a single data block within the ongoing SHA-256 computation. This function is for internal use only. More...
 
void mbedtls_sha256_process (mbedtls_sha256_context *ctx, const unsigned char data[64])
 This function processes a single data block within the ongoing SHA-256 computation. This function is for internal use only. More...
 
int mbedtls_sha256_update_ret (mbedtls_sha256_context *ctx, const unsigned char *input, size_t ilen)
 This function feeds an input buffer into an ongoing SHA-256 checksum calculation. More...
 
void mbedtls_sha256_update (mbedtls_sha256_context *ctx, const unsigned char *input, size_t ilen)
 This function feeds an input buffer into an ongoing SHA-256 checksum calculation. More...
 
int mbedtls_sha256_finish_ret (mbedtls_sha256_context *ctx, unsigned char output[32])
 This function finishes the SHA-256 operation, and writes the result to the output buffer. More...
 
void mbedtls_sha256_finish (mbedtls_sha256_context *ctx, unsigned char output[32])
 This function finishes the SHA-256 operation, and writes the result to the output buffer. More...
 
int mbedtls_sha256_ret (const unsigned char *input, size_t ilen, unsigned char output[32], int is224)
 This function calculates the SHA-224 or SHA-256 checksum of a buffer. More...
 
void mbedtls_sha256 (const unsigned char *input, size_t ilen, unsigned char output[32], int is224)
 This function calculates the SHA-224 or SHA-256 checksum of a buffer. More...
 

Macro Definition Documentation

◆ F0

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

◆ F1

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

◆ GET_UINT32_BE

#define GET_UINT32_BE (   n,
  b,
 
)
Value:
do { \
(n) = ( (uint32_t) (b)[(i) ] << 24 ) \
| ( (uint32_t) (b)[(i) + 1] << 16 ) \
| ( (uint32_t) (b)[(i) + 2] << 8 ) \
| ( (uint32_t) (b)[(i) + 3] ); \
} while( 0 )

◆ P

#define P (   a,
  b,
  c,
  d,
  e,
  f,
  g,
  h,
  x,
 
)
Value:
{ \
temp1 = h + S3(e) + F1(e,f,g) + K + x; \
temp2 = S2(a) + F0(a,b,c); \
d += temp1; h = temp1 + temp2; \
}
#define S3(x)
Definition: sha256.c:182
#define F0(x, y, z)
Definition: sha256.c:184
#define S2(x)
Definition: sha256.c:181
#define F1(x, y, z)
Definition: sha256.c:185

◆ PUT_UINT32_BE

#define PUT_UINT32_BE (   n,
  b,
 
)
Value:
do { \
(b)[(i) ] = (unsigned char) ( (n) >> 24 ); \
(b)[(i) + 1] = (unsigned char) ( (n) >> 16 ); \
(b)[(i) + 2] = (unsigned char) ( (n) >> 8 ); \
(b)[(i) + 3] = (unsigned char) ( (n) ); \
} while( 0 )

◆ R

#define R (   t)
Value:
( \
W[t] = S1(W[t - 2]) + W[t - 7] + \
S0(W[t - 15]) + W[t - 16] \
)
#define S1(x)
Definition: sha256.c:179

◆ ROTR

#define ROTR (   x,
 
)    (SHR(x,n) | (x << (32 - n)))

◆ S0

#define S0 (   x)    (ROTR(x, 7) ^ ROTR(x,18) ^ SHR(x, 3))

◆ S1

#define S1 (   x)    (ROTR(x,17) ^ ROTR(x,19) ^ SHR(x,10))

◆ S2

#define S2 (   x)    (ROTR(x, 2) ^ ROTR(x,13) ^ ROTR(x,22))

◆ S3

#define S3 (   x)    (ROTR(x, 6) ^ ROTR(x,11) ^ ROTR(x,25))

◆ SHA256_VALIDATE

#define SHA256_VALIDATE (   cond)    MBEDTLS_INTERNAL_VALIDATE( cond )

◆ SHA256_VALIDATE_RET

#define SHA256_VALIDATE_RET (   cond)    MBEDTLS_INTERNAL_VALIDATE_RET( cond, MBEDTLS_ERR_SHA256_BAD_INPUT_DATA )

◆ SHR

#define SHR (   x,
 
)    ((x & 0xFFFFFFFF) >> n)

Function Documentation

◆ mbedtls_internal_sha256_process()

int mbedtls_internal_sha256_process ( mbedtls_sha256_context ctx,
const unsigned char  data[64] 
)

This function processes a single data block within the ongoing SHA-256 computation. This function is for internal use only.

Parameters
ctxThe SHA-256 context. This must be initialized.
dataThe buffer holding one block of data. This must be a readable buffer of length 64 Bytes.
Returns
0 on success.
A negative error code on failure.

◆ mbedtls_sha256()

void mbedtls_sha256 ( const unsigned char *  input,
size_t  ilen,
unsigned char  output[32],
int  is224 
)

This function calculates the SHA-224 or SHA-256 checksum of a buffer.

The function allocates the context, performs the calculation, and frees the context.

The SHA-256 result is calculated as output = SHA-256(input buffer).

Deprecated:
Superseded by mbedtls_sha256_ret() in 2.7.0.
Parameters
inputThe buffer holding the data. This must be a readable buffer of length ilen Bytes.
ilenThe length of the input data in Bytes.
outputThe SHA-224 or SHA-256 checksum result. This must be a writable buffer of length 32 Bytes.
is224Determines which function to use. This must be either 0 for SHA-256, or 1 for SHA-224.
Here is the call graph for this function:

◆ mbedtls_sha256_clone()

void mbedtls_sha256_clone ( mbedtls_sha256_context dst,
const mbedtls_sha256_context src 
)

This function clones the state of a SHA-256 context.

Parameters
dstThe destination context. This must be initialized.
srcThe context to clone. This must be initialized.

◆ mbedtls_sha256_finish()

void mbedtls_sha256_finish ( mbedtls_sha256_context ctx,
unsigned char  output[32] 
)

This function finishes the SHA-256 operation, and writes the result to the output buffer.

Deprecated:
Superseded by mbedtls_sha256_finish_ret() in 2.7.0.
Parameters
ctxThe SHA-256 context. This must be initialized and have a hash operation started.
outputThe SHA-224 or SHA-256 checksum result. This must be a writable buffer of length 32 Bytes.
Here is the call graph for this function:

◆ mbedtls_sha256_finish_ret()

int mbedtls_sha256_finish_ret ( mbedtls_sha256_context ctx,
unsigned char  output[32] 
)

This function finishes the SHA-256 operation, and writes the result to the output buffer.

Parameters
ctxThe SHA-256 context. This must be initialized and have a hash operation started.
outputThe SHA-224 or SHA-256 checksum result. This must be a writable buffer of length 32 Bytes.
Returns
0 on success.
A negative error code on failure.
Here is the call graph for this function:

◆ mbedtls_sha256_free()

void mbedtls_sha256_free ( mbedtls_sha256_context ctx)

This function clears a SHA-256 context.

Parameters
ctxThe SHA-256 context to clear. This may be NULL, in which case this function returns immediately. If it is not NULL, it must point to an initialized SHA-256 context.
Here is the call graph for this function:

◆ mbedtls_sha256_init()

void mbedtls_sha256_init ( mbedtls_sha256_context ctx)

This function initializes a SHA-256 context.

Parameters
ctxThe SHA-256 context to initialize. This must not be NULL.

◆ mbedtls_sha256_process()

void mbedtls_sha256_process ( mbedtls_sha256_context ctx,
const unsigned char  data[64] 
)

This function processes a single data block within the ongoing SHA-256 computation. This function is for internal use only.

Deprecated:
Superseded by mbedtls_internal_sha256_process() in 2.7.0.
Parameters
ctxThe SHA-256 context. This must be initialized.
dataThe buffer holding one block of data. This must be a readable buffer of size 64 Bytes.
Here is the call graph for this function:

◆ mbedtls_sha256_ret()

int mbedtls_sha256_ret ( const unsigned char *  input,
size_t  ilen,
unsigned char  output[32],
int  is224 
)

This function calculates the SHA-224 or SHA-256 checksum of a buffer.

The function allocates the context, performs the calculation, and frees the context.

The SHA-256 result is calculated as output = SHA-256(input buffer).

Parameters
inputThe buffer holding the data. This must be a readable buffer of length ilen Bytes.
ilenThe length of the input data in Bytes.
outputThe SHA-224 or SHA-256 checksum result. This must be a writable buffer of length 32 Bytes.
is224Determines which function to use. This must be either 0 for SHA-256, or 1 for SHA-224.
Here is the call graph for this function:

◆ mbedtls_sha256_starts()

void mbedtls_sha256_starts ( mbedtls_sha256_context ctx,
int  is224 
)

This function starts a SHA-224 or SHA-256 checksum calculation.

Deprecated:
Superseded by mbedtls_sha256_starts_ret() in 2.7.0.
Parameters
ctxThe context to use. This must be initialized.
is224Determines which function to use. This must be either 0 for SHA-256, or 1 for SHA-224.
Here is the call graph for this function:

◆ mbedtls_sha256_starts_ret()

int mbedtls_sha256_starts_ret ( mbedtls_sha256_context ctx,
int  is224 
)

This function starts a SHA-224 or SHA-256 checksum calculation.

Parameters
ctxThe context to use. This must be initialized.
is224This determines which function to use. This must be either 0 for SHA-256, or 1 for SHA-224.
Returns
0 on success.
A negative error code on failure.

◆ mbedtls_sha256_update()

void mbedtls_sha256_update ( mbedtls_sha256_context ctx,
const unsigned char *  input,
size_t  ilen 
)

This function feeds an input buffer into an ongoing SHA-256 checksum calculation.

Deprecated:
Superseded by mbedtls_sha256_update_ret() in 2.7.0.
Parameters
ctxThe SHA-256 context to use. This must be initialized and have a hash operation started.
inputThe buffer holding the data. This must be a readable buffer of length ilen Bytes.
ilenThe length of the input data in Bytes.
Here is the call graph for this function:

◆ mbedtls_sha256_update_ret()

int mbedtls_sha256_update_ret ( mbedtls_sha256_context ctx,
const unsigned char *  input,
size_t  ilen 
)

This function feeds an input buffer into an ongoing SHA-256 checksum calculation.

Parameters
ctxThe SHA-256 context. This must be initialized and have a hash operation started.
inputThe buffer holding the data. This must be a readable buffer of length ilen Bytes.
ilenThe length of the input data in Bytes.
Returns
0 on success.
A negative error code on failure.
Here is the call graph for this function: