12b9912e6SJeroen Hofstee /** 22b9912e6SJeroen Hofstee * \file sha1.h 32b9912e6SJeroen Hofstee * based from http://xyssl.org/code/source/sha1/ 42b9912e6SJeroen Hofstee * FIPS-180-1 compliant SHA-1 implementation 52b9912e6SJeroen Hofstee * 62b9912e6SJeroen Hofstee * Copyright (C) 2003-2006 Christophe Devine 72b9912e6SJeroen Hofstee * 85b8031ccSTom Rini * SPDX-License-Identifier: LGPL-2.1 92b9912e6SJeroen Hofstee */ 102b9912e6SJeroen Hofstee /* 112b9912e6SJeroen Hofstee * The SHA-1 standard was published by NIST in 1993. 122b9912e6SJeroen Hofstee * 132b9912e6SJeroen Hofstee * http://www.itl.nist.gov/fipspubs/fip180-1.htm 142b9912e6SJeroen Hofstee */ 152b9912e6SJeroen Hofstee #ifndef _SHA1_H 162b9912e6SJeroen Hofstee #define _SHA1_H 172b9912e6SJeroen Hofstee 182b9912e6SJeroen Hofstee #ifdef __cplusplus 192b9912e6SJeroen Hofstee extern "C" { 202b9912e6SJeroen Hofstee #endif 212b9912e6SJeroen Hofstee 222b9912e6SJeroen Hofstee #define SHA1_SUM_POS -0x20 232b9912e6SJeroen Hofstee #define SHA1_SUM_LEN 20 24da29f299SAndrew Duda #define SHA1_DER_LEN 15 25da29f299SAndrew Duda 26da29f299SAndrew Duda extern const uint8_t sha1_der_prefix[]; 272b9912e6SJeroen Hofstee 282b9912e6SJeroen Hofstee /** 292b9912e6SJeroen Hofstee * \brief SHA-1 context structure 302b9912e6SJeroen Hofstee */ 312b9912e6SJeroen Hofstee typedef struct 322b9912e6SJeroen Hofstee { 332b9912e6SJeroen Hofstee unsigned long total[2]; /*!< number of bytes processed */ 34fbc03ba7SLoic Poulain uint32_t state[5]; /*!< intermediate digest state */ 352b9912e6SJeroen Hofstee unsigned char buffer[64]; /*!< data block being processed */ 36*257c8a70SJoseph Chen 37*257c8a70SJoseph Chen #if !defined(USE_HOSTCC) 38*257c8a70SJoseph Chen struct udevice *cdev; 39*257c8a70SJoseph Chen u32 length; /* Data total length */ 40*257c8a70SJoseph Chen #endif 412b9912e6SJeroen Hofstee } 422b9912e6SJeroen Hofstee sha1_context; 432b9912e6SJeroen Hofstee 442b9912e6SJeroen Hofstee /** 452b9912e6SJeroen Hofstee * \brief SHA-1 context setup 462b9912e6SJeroen Hofstee * 472b9912e6SJeroen Hofstee * \param ctx SHA-1 context to be initialized 482b9912e6SJeroen Hofstee */ 492b9912e6SJeroen Hofstee void sha1_starts( sha1_context *ctx ); 502b9912e6SJeroen Hofstee 512b9912e6SJeroen Hofstee /** 522b9912e6SJeroen Hofstee * \brief SHA-1 process buffer 532b9912e6SJeroen Hofstee * 542b9912e6SJeroen Hofstee * \param ctx SHA-1 context 552b9912e6SJeroen Hofstee * \param input buffer holding the data 562b9912e6SJeroen Hofstee * \param ilen length of the input data 572b9912e6SJeroen Hofstee */ 582b9912e6SJeroen Hofstee void sha1_update(sha1_context *ctx, const unsigned char *input, 592b9912e6SJeroen Hofstee unsigned int ilen); 602b9912e6SJeroen Hofstee 612b9912e6SJeroen Hofstee /** 622b9912e6SJeroen Hofstee * \brief SHA-1 final digest 632b9912e6SJeroen Hofstee * 642b9912e6SJeroen Hofstee * \param ctx SHA-1 context 652b9912e6SJeroen Hofstee * \param output SHA-1 checksum result 662b9912e6SJeroen Hofstee */ 672b9912e6SJeroen Hofstee void sha1_finish( sha1_context *ctx, unsigned char output[20] ); 682b9912e6SJeroen Hofstee 692b9912e6SJeroen Hofstee /** 702b9912e6SJeroen Hofstee * \brief Output = SHA-1( input buffer ) 712b9912e6SJeroen Hofstee * 722b9912e6SJeroen Hofstee * \param input buffer holding the data 732b9912e6SJeroen Hofstee * \param ilen length of the input data 742b9912e6SJeroen Hofstee * \param output SHA-1 checksum result 752b9912e6SJeroen Hofstee */ 762b9912e6SJeroen Hofstee void sha1_csum(const unsigned char *input, unsigned int ilen, 772b9912e6SJeroen Hofstee unsigned char *output); 782b9912e6SJeroen Hofstee 792b9912e6SJeroen Hofstee /** 802b9912e6SJeroen Hofstee * \brief Output = SHA-1( input buffer ), with watchdog triggering 812b9912e6SJeroen Hofstee * 822b9912e6SJeroen Hofstee * \param input buffer holding the data 832b9912e6SJeroen Hofstee * \param ilen length of the input data 842b9912e6SJeroen Hofstee * \param output SHA-1 checksum result 852b9912e6SJeroen Hofstee * \param chunk_sz watchdog triggering period (in bytes of input processed) 862b9912e6SJeroen Hofstee */ 872b9912e6SJeroen Hofstee void sha1_csum_wd(const unsigned char *input, unsigned int ilen, 882b9912e6SJeroen Hofstee unsigned char *output, unsigned int chunk_sz); 892b9912e6SJeroen Hofstee 902b9912e6SJeroen Hofstee /** 912b9912e6SJeroen Hofstee * \brief Output = HMAC-SHA-1( input buffer, hmac key ) 922b9912e6SJeroen Hofstee * 932b9912e6SJeroen Hofstee * \param key HMAC secret key 942b9912e6SJeroen Hofstee * \param keylen length of the HMAC key 952b9912e6SJeroen Hofstee * \param input buffer holding the data 962b9912e6SJeroen Hofstee * \param ilen length of the input data 972b9912e6SJeroen Hofstee * \param output HMAC-SHA-1 result 982b9912e6SJeroen Hofstee */ 992b9912e6SJeroen Hofstee void sha1_hmac(const unsigned char *key, int keylen, 1002b9912e6SJeroen Hofstee const unsigned char *input, unsigned int ilen, 1012b9912e6SJeroen Hofstee unsigned char *output); 1022b9912e6SJeroen Hofstee 1032b9912e6SJeroen Hofstee /** 1042b9912e6SJeroen Hofstee * \brief Checkup routine 1052b9912e6SJeroen Hofstee * 1062b9912e6SJeroen Hofstee * \return 0 if successful, or 1 if the test failed 1072b9912e6SJeroen Hofstee */ 1082b9912e6SJeroen Hofstee int sha1_self_test( void ); 1092b9912e6SJeroen Hofstee 1102b9912e6SJeroen Hofstee #ifdef __cplusplus 1112b9912e6SJeroen Hofstee } 1122b9912e6SJeroen Hofstee #endif 1132b9912e6SJeroen Hofstee 1142b9912e6SJeroen Hofstee #endif /* sha1.h */ 115