Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  1. /**
  2.  * \file md5.h
  3.  *
  4.  * \brief MD5 message digest algorithm (hash function)
  5.  *
  6.  *  Copyright (C) 2006-2010, Brainspark B.V.
  7.  *
  8.  *  This file is part of PolarSSL (http://www.polarssl.org)
  9.  *  Lead Maintainer: Paul Bakker <polarssl_maintainer at polarssl.org>
  10.  *
  11.  *  All rights reserved.
  12.  *
  13.  *  This program is free software; you can redistribute it and/or modify
  14.  *  it under the terms of the GNU General Public License as published by
  15.  *  the Free Software Foundation; either version 2 of the License, or
  16.  *  (at your option) any later version.
  17.  *
  18.  *  This program is distributed in the hope that it will be useful,
  19.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  20.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  21.  *  GNU General Public License for more details.
  22.  *
  23.  *  You should have received a copy of the GNU General Public License along
  24.  *  with this program; if not, write to the Free Software Foundation, Inc.,
  25.  *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  26.  */
  27. #ifndef POLARSSL_MD5_H
  28. #define POLARSSL_MD5_H
  29.  
  30. #include <string.h>
  31.  
  32. #ifdef _MSC_VER
  33. #include <basetsd.h>
  34. typedef UINT32 uint32_t;
  35. #else
  36. #include <inttypes.h>
  37. #endif
  38.  
  39. #define POLARSSL_ERR_MD5_FILE_IO_ERROR                 -0x0074  /**< Read/write error in file. */
  40.  
  41. /**
  42.  * \brief          MD5 context structure
  43.  */
  44. typedef struct
  45. {
  46.     uint32_t total[2];          /*!< number of bytes processed  */
  47.     uint32_t state[4];          /*!< intermediate digest state  */
  48.     unsigned char buffer[64];   /*!< data block being processed */
  49.  
  50.     unsigned char ipad[64];     /*!< HMAC: inner padding        */
  51.     unsigned char opad[64];     /*!< HMAC: outer padding        */
  52. }
  53. md5_context;
  54.  
  55. #ifdef __cplusplus
  56. extern "C" {
  57. #endif
  58.  
  59. /**
  60.  * \brief          MD5 context setup
  61.  *
  62.  * \param ctx      context to be initialized
  63.  */
  64. void md5_starts( md5_context *ctx );
  65.  
  66. /**
  67.  * \brief          MD5 process buffer
  68.  *
  69.  * \param ctx      MD5 context
  70.  * \param input    buffer holding the  data
  71.  * \param ilen     length of the input data
  72.  */
  73. void md5_update( md5_context *ctx, const unsigned char *input, size_t ilen );
  74.  
  75. /**
  76.  * \brief          MD5 final digest
  77.  *
  78.  * \param ctx      MD5 context
  79.  * \param output   MD5 checksum result
  80.  */
  81. void md5_finish( md5_context *ctx, unsigned char output[16] );
  82.  
  83. /**
  84.  * \brief          Output = MD5( input buffer )
  85.  *
  86.  * \param input    buffer holding the  data
  87.  * \param ilen     length of the input data
  88.  * \param output   MD5 checksum result
  89.  */
  90. void md5( const unsigned char *input, size_t ilen, unsigned char output[16] );
  91.  
  92. /**
  93.  * \brief          Output = MD5( file contents )
  94.  *
  95.  * \param path     input file name
  96.  * \param output   MD5 checksum result
  97.  *
  98.  * \return         0 if successful, or POLARSSL_ERR_MD5_FILE_IO_ERROR
  99.  */
  100. int md5_file( const char *path, unsigned char output[16] );
  101.  
  102. /**
  103.  * \brief          MD5 HMAC context setup
  104.  *
  105.  * \param ctx      HMAC context to be initialized
  106.  * \param key      HMAC secret key
  107.  * \param keylen   length of the HMAC key
  108.  */
  109. void md5_hmac_starts( md5_context *ctx,
  110.                       const unsigned char *key, size_t keylen );
  111.  
  112. /**
  113.  * \brief          MD5 HMAC process buffer
  114.  *
  115.  * \param ctx      HMAC context
  116.  * \param input    buffer holding the  data
  117.  * \param ilen     length of the input data
  118.  */
  119. void md5_hmac_update( md5_context *ctx,
  120.                       const unsigned char *input, size_t ilen );
  121.  
  122. /**
  123.  * \brief          MD5 HMAC final digest
  124.  *
  125.  * \param ctx      HMAC context
  126.  * \param output   MD5 HMAC checksum result
  127.  */
  128. void md5_hmac_finish( md5_context *ctx, unsigned char output[16] );
  129.  
  130. /**
  131.  * \brief          MD5 HMAC context reset
  132.  *
  133.  * \param ctx      HMAC context to be reset
  134.  */
  135. void md5_hmac_reset( md5_context *ctx );
  136.  
  137. /**
  138.  * \brief          Output = HMAC-MD5( hmac key, input buffer )
  139.  *
  140.  * \param key      HMAC secret key
  141.  * \param keylen   length of the HMAC key
  142.  * \param input    buffer holding the  data
  143.  * \param ilen     length of the input data
  144.  * \param output   HMAC-MD5 result
  145.  */
  146. void md5_hmac( const unsigned char *key, size_t keylen,
  147.                const unsigned char *input, size_t ilen,
  148.                unsigned char output[16] );
  149.  
  150. /**
  151.  * \brief          Checkup routine
  152.  *
  153.  * \return         0 if successful, or 1 if the test failed
  154.  */
  155. int md5_self_test( int verbose );
  156.  
  157. /* Internal use */
  158. void md5_process( md5_context *ctx, const unsigned char data[64] );
  159.  
  160. #ifdef __cplusplus
  161. }
  162. #endif
  163.  
  164. #endif /* md5.h */
  165.