Home | History | Annotate | Download | only in libavb
      1 /* SPDX-License-Identifier: MIT */
      2 /*
      3  * Copyright (C) 2016 The Android Open Source Project
      4  */
      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
     18 extern "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 
     27 
     28 /* Block size in bytes of a SHA-512 digest. */
     29 #define AVB_SHA512_BLOCK_SIZE 128
     30 
     31 /* Data structure used for SHA-256. */
     32 typedef struct {
     33   uint32_t h[8];
     34   uint32_t tot_len;
     35   uint32_t len;
     36   uint8_t block[2 * AVB_SHA256_BLOCK_SIZE];
     37   uint8_t buf[AVB_SHA256_DIGEST_SIZE]; /* Used for storing the final digest. */
     38 } AvbSHA256Ctx;
     39 
     40 /* Data structure used for SHA-512. */
     41 typedef struct {
     42   uint64_t h[8];
     43   uint32_t tot_len;
     44   uint32_t len;
     45   uint8_t block[2 * AVB_SHA512_BLOCK_SIZE];
     46   uint8_t buf[AVB_SHA512_DIGEST_SIZE]; /* Used for storing the final digest. */
     47 } AvbSHA512Ctx;
     48 
     49 /* Initializes the SHA-256 context. */
     50 void avb_sha256_init(AvbSHA256Ctx* ctx);
     51 
     52 /* Updates the SHA-256 context with |len| bytes from |data|. */
     53 void avb_sha256_update(AvbSHA256Ctx* ctx, const uint8_t* data, uint32_t len);
     54 
     55 /* Returns the SHA-256 digest. */
     56 uint8_t* avb_sha256_final(AvbSHA256Ctx* ctx) AVB_ATTR_WARN_UNUSED_RESULT;
     57 
     58 /* Initializes the SHA-512 context. */
     59 void avb_sha512_init(AvbSHA512Ctx* ctx);
     60 
     61 /* Updates the SHA-512 context with |len| bytes from |data|. */
     62 void avb_sha512_update(AvbSHA512Ctx* ctx, const uint8_t* data, uint32_t len);
     63 
     64 /* Returns the SHA-512 digest. */
     65 uint8_t* avb_sha512_final(AvbSHA512Ctx* ctx) AVB_ATTR_WARN_UNUSED_RESULT;
     66 
     67 #ifdef __cplusplus
     68 }
     69 #endif
     70 
     71 #endif /* AVB_SHA_H_ */
     72