blob: fdd92fbe22d5b849c3af04b98d2839f4a292b3d1 [file] [log] [blame]
Tom Rini421a5d02018-06-19 11:21:44 -04001/* SPDX-License-Identifier: MIT */
Igor Opaniuk8b23ae22018-06-03 21:56:36 +03002/*
3 * Copyright (C) 2016 The Android Open Source Project
Igor Opaniuk8b23ae22018-06-03 21:56:36 +03004 */
5
6#ifdef AVB_INSIDE_LIBAVB_H
7#error "You can't include avb_sha.h in the public header libavb.h."
8#endif
9
10#ifndef AVB_COMPILATION
11#error "Never include this file, it may only be used from internal avb code."
12#endif
13
14#ifndef AVB_SHA_H_
15#define AVB_SHA_H_
16
17#ifdef __cplusplus
18extern "C" {
19#endif
20
21#include "avb_crypto.h"
22#include "avb_sysdeps.h"
23
24/* Block size in bytes of a SHA-256 digest. */
25#define AVB_SHA256_BLOCK_SIZE 64
26
Igor Opaniuk8b23ae22018-06-03 21:56:36 +030027/* Block size in bytes of a SHA-512 digest. */
28#define AVB_SHA512_BLOCK_SIZE 128
29
30/* Data structure used for SHA-256. */
31typedef struct {
32 uint32_t h[8];
Sam Protsenko6a717022019-08-15 23:04:02 +030033 uint64_t tot_len;
34 size_t len;
Igor Opaniuk8b23ae22018-06-03 21:56:36 +030035 uint8_t block[2 * AVB_SHA256_BLOCK_SIZE];
36 uint8_t buf[AVB_SHA256_DIGEST_SIZE]; /* Used for storing the final digest. */
37} AvbSHA256Ctx;
38
39/* Data structure used for SHA-512. */
40typedef struct {
41 uint64_t h[8];
Sam Protsenko6a717022019-08-15 23:04:02 +030042 uint64_t tot_len;
43 size_t len;
Igor Opaniuk8b23ae22018-06-03 21:56:36 +030044 uint8_t block[2 * AVB_SHA512_BLOCK_SIZE];
45 uint8_t buf[AVB_SHA512_DIGEST_SIZE]; /* Used for storing the final digest. */
46} AvbSHA512Ctx;
47
48/* Initializes the SHA-256 context. */
49void avb_sha256_init(AvbSHA256Ctx* ctx);
50
51/* Updates the SHA-256 context with |len| bytes from |data|. */
Sam Protsenko6a717022019-08-15 23:04:02 +030052void avb_sha256_update(AvbSHA256Ctx* ctx, const uint8_t* data, size_t len);
Igor Opaniuk8b23ae22018-06-03 21:56:36 +030053
54/* Returns the SHA-256 digest. */
55uint8_t* avb_sha256_final(AvbSHA256Ctx* ctx) AVB_ATTR_WARN_UNUSED_RESULT;
56
57/* Initializes the SHA-512 context. */
58void avb_sha512_init(AvbSHA512Ctx* ctx);
59
60/* Updates the SHA-512 context with |len| bytes from |data|. */
Sam Protsenko6a717022019-08-15 23:04:02 +030061void avb_sha512_update(AvbSHA512Ctx* ctx, const uint8_t* data, size_t len);
Igor Opaniuk8b23ae22018-06-03 21:56:36 +030062
63/* Returns the SHA-512 digest. */
64uint8_t* avb_sha512_final(AvbSHA512Ctx* ctx) AVB_ATTR_WARN_UNUSED_RESULT;
65
66#ifdef __cplusplus
67}
68#endif
69
70#endif /* AVB_SHA_H_ */