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 */ 34*fbc03ba7SLoic Poulain uint32_t state[5]; /*!< intermediate digest state */ 352b9912e6SJeroen Hofstee unsigned char buffer[64]; /*!< data block being processed */ 362b9912e6SJeroen Hofstee } 372b9912e6SJeroen Hofstee sha1_context; 382b9912e6SJeroen Hofstee 392b9912e6SJeroen Hofstee /** 402b9912e6SJeroen Hofstee * \brief SHA-1 context setup 412b9912e6SJeroen Hofstee * 422b9912e6SJeroen Hofstee * \param ctx SHA-1 context to be initialized 432b9912e6SJeroen Hofstee */ 442b9912e6SJeroen Hofstee void sha1_starts( sha1_context *ctx ); 452b9912e6SJeroen Hofstee 462b9912e6SJeroen Hofstee /** 472b9912e6SJeroen Hofstee * \brief SHA-1 process buffer 482b9912e6SJeroen Hofstee * 492b9912e6SJeroen Hofstee * \param ctx SHA-1 context 502b9912e6SJeroen Hofstee * \param input buffer holding the data 512b9912e6SJeroen Hofstee * \param ilen length of the input data 522b9912e6SJeroen Hofstee */ 532b9912e6SJeroen Hofstee void sha1_update(sha1_context *ctx, const unsigned char *input, 542b9912e6SJeroen Hofstee unsigned int ilen); 552b9912e6SJeroen Hofstee 562b9912e6SJeroen Hofstee /** 572b9912e6SJeroen Hofstee * \brief SHA-1 final digest 582b9912e6SJeroen Hofstee * 592b9912e6SJeroen Hofstee * \param ctx SHA-1 context 602b9912e6SJeroen Hofstee * \param output SHA-1 checksum result 612b9912e6SJeroen Hofstee */ 622b9912e6SJeroen Hofstee void sha1_finish( sha1_context *ctx, unsigned char output[20] ); 632b9912e6SJeroen Hofstee 642b9912e6SJeroen Hofstee /** 652b9912e6SJeroen Hofstee * \brief Output = SHA-1( input buffer ) 662b9912e6SJeroen Hofstee * 672b9912e6SJeroen Hofstee * \param input buffer holding the data 682b9912e6SJeroen Hofstee * \param ilen length of the input data 692b9912e6SJeroen Hofstee * \param output SHA-1 checksum result 702b9912e6SJeroen Hofstee */ 712b9912e6SJeroen Hofstee void sha1_csum(const unsigned char *input, unsigned int ilen, 722b9912e6SJeroen Hofstee unsigned char *output); 732b9912e6SJeroen Hofstee 742b9912e6SJeroen Hofstee /** 752b9912e6SJeroen Hofstee * \brief Output = SHA-1( input buffer ), with watchdog triggering 762b9912e6SJeroen Hofstee * 772b9912e6SJeroen Hofstee * \param input buffer holding the data 782b9912e6SJeroen Hofstee * \param ilen length of the input data 792b9912e6SJeroen Hofstee * \param output SHA-1 checksum result 802b9912e6SJeroen Hofstee * \param chunk_sz watchdog triggering period (in bytes of input processed) 812b9912e6SJeroen Hofstee */ 822b9912e6SJeroen Hofstee void sha1_csum_wd(const unsigned char *input, unsigned int ilen, 832b9912e6SJeroen Hofstee unsigned char *output, unsigned int chunk_sz); 842b9912e6SJeroen Hofstee 852b9912e6SJeroen Hofstee /** 862b9912e6SJeroen Hofstee * \brief Output = HMAC-SHA-1( input buffer, hmac key ) 872b9912e6SJeroen Hofstee * 882b9912e6SJeroen Hofstee * \param key HMAC secret key 892b9912e6SJeroen Hofstee * \param keylen length of the HMAC key 902b9912e6SJeroen Hofstee * \param input buffer holding the data 912b9912e6SJeroen Hofstee * \param ilen length of the input data 922b9912e6SJeroen Hofstee * \param output HMAC-SHA-1 result 932b9912e6SJeroen Hofstee */ 942b9912e6SJeroen Hofstee void sha1_hmac(const unsigned char *key, int keylen, 952b9912e6SJeroen Hofstee const unsigned char *input, unsigned int ilen, 962b9912e6SJeroen Hofstee unsigned char *output); 972b9912e6SJeroen Hofstee 982b9912e6SJeroen Hofstee /** 992b9912e6SJeroen Hofstee * \brief Checkup routine 1002b9912e6SJeroen Hofstee * 1012b9912e6SJeroen Hofstee * \return 0 if successful, or 1 if the test failed 1022b9912e6SJeroen Hofstee */ 1032b9912e6SJeroen Hofstee int sha1_self_test( void ); 1042b9912e6SJeroen Hofstee 1052b9912e6SJeroen Hofstee #ifdef __cplusplus 1062b9912e6SJeroen Hofstee } 1072b9912e6SJeroen Hofstee #endif 1082b9912e6SJeroen Hofstee 1092b9912e6SJeroen Hofstee #endif /* sha1.h */ 110