| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,363 @@ | ||
| /** | ||
| * \file md.h | ||
| * | ||
| * \brief Generic message digest wrapper | ||
| * | ||
| * \author Adriaan de Jong <dejong@fox-it.com> | ||
| * | ||
| * Copyright (C) 2006-2011, Brainspark B.V. | ||
| * | ||
| * This file is part of PolarSSL (http://www.polarssl.org) | ||
| * Lead Maintainer: Paul Bakker <polarssl_maintainer at polarssl.org> | ||
| * | ||
| * All rights reserved. | ||
| * | ||
| * This program is free software; you can redistribute it and/or modify | ||
| * it under the terms of the GNU General Public License as published by | ||
| * the Free Software Foundation; either version 2 of the License, or | ||
| * (at your option) any later version. | ||
| * | ||
| * This program is distributed in the hope that it will be useful, | ||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| * GNU General Public License for more details. | ||
| * | ||
| * You should have received a copy of the GNU General Public License along | ||
| * with this program; if not, write to the Free Software Foundation, Inc., | ||
| * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
| */ | ||
| #ifndef POLARSSL_MD_H | ||
| #define POLARSSL_MD_H | ||
|
|
||
| #include <string.h> | ||
|
|
||
| #if defined(_MSC_VER) && !defined(inline) | ||
| #define inline _inline | ||
| #else | ||
| #if defined(__ARMCC_VERSION) && !defined(inline) | ||
| #define inline __inline | ||
| #endif /* __ARMCC_VERSION */ | ||
| #endif /*_MSC_VER */ | ||
|
|
||
| #define POLARSSL_ERR_MD_FEATURE_UNAVAILABLE -0x5080 /**< The selected feature is not available. */ | ||
| #define POLARSSL_ERR_MD_BAD_INPUT_DATA -0x5100 /**< Bad input parameters to function. */ | ||
| #define POLARSSL_ERR_MD_ALLOC_FAILED -0x5180 /**< Failed to allocate memory. */ | ||
| #define POLARSSL_ERR_MD_FILE_IO_ERROR -0x5200 /**< Opening or reading of file failed. */ | ||
|
|
||
| typedef enum { | ||
| POLARSSL_MD_NONE=0, | ||
| POLARSSL_MD_MD2, | ||
| POLARSSL_MD_MD4, | ||
| POLARSSL_MD_MD5, | ||
| POLARSSL_MD_SHA1, | ||
| POLARSSL_MD_SHA224, | ||
| POLARSSL_MD_SHA256, | ||
| POLARSSL_MD_SHA384, | ||
| POLARSSL_MD_SHA512, | ||
| } md_type_t; | ||
|
|
||
| #define POLARSSL_MD_MAX_SIZE 64 /* longest known is SHA512 */ | ||
|
|
||
| /** | ||
| * Message digest information. Allows message digest functions to be called | ||
| * in a generic way. | ||
| */ | ||
| typedef struct { | ||
| /** Digest identifier */ | ||
| md_type_t type; | ||
|
|
||
| /** Name of the message digest */ | ||
| const char * name; | ||
|
|
||
| /** Output length of the digest function */ | ||
| int size; | ||
|
|
||
| /** Digest initialisation function */ | ||
| void (*starts_func)( void *ctx ); | ||
|
|
||
| /** Digest update function */ | ||
| void (*update_func)( void *ctx, const unsigned char *input, size_t ilen ); | ||
|
|
||
| /** Digest finalisation function */ | ||
| void (*finish_func)( void *ctx, unsigned char *output ); | ||
|
|
||
| /** Generic digest function */ | ||
| void (*digest_func)( const unsigned char *input, size_t ilen, | ||
| unsigned char *output ); | ||
|
|
||
| /** Generic file digest function */ | ||
| int (*file_func)( const char *path, unsigned char *output ); | ||
|
|
||
| /** HMAC Initialisation function */ | ||
| void (*hmac_starts_func)( void *ctx, const unsigned char *key, size_t keylen ); | ||
|
|
||
| /** HMAC update function */ | ||
| void (*hmac_update_func)( void *ctx, const unsigned char *input, size_t ilen ); | ||
|
|
||
| /** HMAC finalisation function */ | ||
| void (*hmac_finish_func)( void *ctx, unsigned char *output); | ||
|
|
||
| /** HMAC context reset function */ | ||
| void (*hmac_reset_func)( void *ctx ); | ||
|
|
||
| /** Generic HMAC function */ | ||
| void (*hmac_func)( const unsigned char *key, size_t keylen, | ||
| const unsigned char *input, size_t ilen, | ||
| unsigned char *output ); | ||
|
|
||
| /** Allocate a new context */ | ||
| void * (*ctx_alloc_func)( void ); | ||
|
|
||
| /** Free the given context */ | ||
| void (*ctx_free_func)( void *ctx ); | ||
|
|
||
| } md_info_t; | ||
|
|
||
| /** | ||
| * Generic message digest context. | ||
| */ | ||
| typedef struct { | ||
| /** Information about the associated message digest */ | ||
| const md_info_t *md_info; | ||
|
|
||
| /** Digest-specific context */ | ||
| void *md_ctx; | ||
| } md_context_t; | ||
|
|
||
| #define MD_CONTEXT_T_INIT { \ | ||
| NULL, /* md_info */ \ | ||
| NULL, /* md_ctx */ \ | ||
| } | ||
|
|
||
| #ifdef __cplusplus | ||
| extern "C" { | ||
| #endif | ||
|
|
||
| /** | ||
| * \brief Returns the list of digests supported by the generic digest module. | ||
| * | ||
| * \return a statically allocated array of digests, the last entry | ||
| * is 0. | ||
| */ | ||
| const int *md_list( void ); | ||
|
|
||
| /** | ||
| * \brief Returns the message digest information associated with the | ||
| * given digest name. | ||
| * | ||
| * \param md_name Name of the digest to search for. | ||
| * | ||
| * \return The message digest information associated with md_name or | ||
| * NULL if not found. | ||
| */ | ||
| const md_info_t *md_info_from_string( const char *md_name ); | ||
|
|
||
| /** | ||
| * \brief Returns the message digest information associated with the | ||
| * given digest type. | ||
| * | ||
| * \param md_type type of digest to search for. | ||
| * | ||
| * \return The message digest information associated with md_type or | ||
| * NULL if not found. | ||
| */ | ||
| const md_info_t *md_info_from_type( md_type_t md_type ); | ||
|
|
||
| /** | ||
| * \brief Initialises and fills the message digest context structure with | ||
| * the appropriate values. | ||
| * | ||
| * \param ctx context to initialise. May not be NULL. The | ||
| * digest-specific context (ctx->md_ctx) must be NULL. It will | ||
| * be allocated, and must be freed using md_free_ctx() later. | ||
| * \param md_info message digest to use. | ||
| * | ||
| * \returns \c 0 on success, \c POLARSSL_ERR_MD_BAD_INPUT_DATA on | ||
| * parameter failure, \c POLARSSL_ERR_MD_ALLOC_FAILED if | ||
| * allocation of the digest-specific context failed. | ||
| */ | ||
| int md_init_ctx( md_context_t *ctx, const md_info_t *md_info ); | ||
|
|
||
| /** | ||
| * \brief Free the message-specific context of ctx. Freeing ctx itself | ||
| * remains the responsibility of the caller. | ||
| * | ||
| * \param ctx Free the message-specific context | ||
| * | ||
| * \returns 0 on success, POLARSSL_ERR_MD_BAD_INPUT_DATA if parameter | ||
| * verification fails. | ||
| */ | ||
| int md_free_ctx( md_context_t *ctx ); | ||
|
|
||
| /** | ||
| * \brief Returns the size of the message digest output. | ||
| * | ||
| * \param md_info message digest info | ||
| * | ||
| * \return size of the message digest output. | ||
| */ | ||
| static inline unsigned char md_get_size( const md_info_t *md_info ) | ||
| { | ||
| if( md_info == NULL ) | ||
| return( 0 ); | ||
|
|
||
| return md_info->size; | ||
| } | ||
|
|
||
| /** | ||
| * \brief Returns the type of the message digest output. | ||
| * | ||
| * \param md_info message digest info | ||
| * | ||
| * \return type of the message digest output. | ||
| */ | ||
| static inline md_type_t md_get_type( const md_info_t *md_info ) | ||
| { | ||
| if( md_info == NULL ) | ||
| return( POLARSSL_MD_NONE ); | ||
|
|
||
| return md_info->type; | ||
| } | ||
|
|
||
| /** | ||
| * \brief Returns the name of the message digest output. | ||
| * | ||
| * \param md_info message digest info | ||
| * | ||
| * \return name of the message digest output. | ||
| */ | ||
| static inline const char *md_get_name( const md_info_t *md_info ) | ||
| { | ||
| if( md_info == NULL ) | ||
| return( NULL ); | ||
|
|
||
| return md_info->name; | ||
| } | ||
|
|
||
| /** | ||
| * \brief Set-up the given context for a new message digest | ||
| * | ||
| * \param ctx generic message digest context. | ||
| * | ||
| * \returns 0 on success, POLARSSL_ERR_MD_BAD_INPUT_DATA if parameter | ||
| * verification fails. | ||
| */ | ||
| int md_starts( md_context_t *ctx ); | ||
|
|
||
| /** | ||
| * \brief Generic message digest process buffer | ||
| * | ||
| * \param ctx Generic message digest context | ||
| * \param input buffer holding the datal | ||
| * \param ilen length of the input data | ||
| * | ||
| * \returns 0 on success, POLARSSL_ERR_MD_BAD_INPUT_DATA if parameter | ||
| * verification fails. | ||
| */ | ||
| int md_update( md_context_t *ctx, const unsigned char *input, size_t ilen ); | ||
|
|
||
| /** | ||
| * \brief Generic message digest final digest | ||
| * | ||
| * \param ctx Generic message digest context | ||
| * \param output Generic message digest checksum result | ||
| * | ||
| * \returns 0 on success, POLARSSL_ERR_MD_BAD_INPUT_DATA if parameter | ||
| * verification fails. | ||
| */ | ||
| int md_finish( md_context_t *ctx, unsigned char *output ); | ||
|
|
||
| /** | ||
| * \brief Output = message_digest( input buffer ) | ||
| * | ||
| * \param md_info message digest info | ||
| * \param input buffer holding the data | ||
| * \param ilen length of the input data | ||
| * \param output Generic message digest checksum result | ||
| * | ||
| * \returns 0 on success, POLARSSL_ERR_MD_BAD_INPUT_DATA if parameter | ||
| * verification fails. | ||
| */ | ||
| int md( const md_info_t *md_info, const unsigned char *input, size_t ilen, | ||
| unsigned char *output ); | ||
|
|
||
| /** | ||
| * \brief Output = message_digest( file contents ) | ||
| * | ||
| * \param md_info message digest info | ||
| * \param path input file name | ||
| * \param output generic message digest checksum result | ||
| * | ||
| * \return 0 if successful, POLARSSL_ERR_MD_FILE_OPEN_FAILED if fopen | ||
| * failed, POLARSSL_ERR_MD_FILE_READ_FAILED if fread failed, | ||
| * POLARSSL_ERR_MD_BAD_INPUT_DATA if md_info was NULL. | ||
| */ | ||
| int md_file( const md_info_t *md_info, const char *path, unsigned char *output ); | ||
|
|
||
| /** | ||
| * \brief Generic HMAC context setup | ||
| * | ||
| * \param ctx HMAC context to be initialized | ||
| * \param key HMAC secret key | ||
| * \param keylen length of the HMAC key | ||
| * | ||
| * \returns 0 on success, POLARSSL_ERR_MD_BAD_INPUT_DATA if parameter | ||
| * verification fails. | ||
| */ | ||
| int md_hmac_starts( md_context_t *ctx, const unsigned char *key, size_t keylen ); | ||
|
|
||
| /** | ||
| * \brief Generic HMAC process buffer | ||
| * | ||
| * \param ctx HMAC context | ||
| * \param input buffer holding the data | ||
| * \param ilen length of the input data | ||
| * | ||
| * \returns 0 on success, POLARSSL_ERR_MD_BAD_INPUT_DATA if parameter | ||
| * verification fails. | ||
| */ | ||
| int md_hmac_update( md_context_t *ctx, const unsigned char *input, size_t ilen ); | ||
|
|
||
| /** | ||
| * \brief Generic HMAC final digest | ||
| * | ||
| * \param ctx HMAC context | ||
| * \param output Generic HMAC checksum result | ||
| * | ||
| * \returns 0 on success, POLARSSL_ERR_MD_BAD_INPUT_DATA if parameter | ||
| * verification fails. | ||
| */ | ||
| int md_hmac_finish( md_context_t *ctx, unsigned char *output); | ||
|
|
||
| /** | ||
| * \brief Generic HMAC context reset | ||
| * | ||
| * \param ctx HMAC context to be reset | ||
| * | ||
| * \returns 0 on success, POLARSSL_ERR_MD_BAD_INPUT_DATA if parameter | ||
| * verification fails. | ||
| */ | ||
| int md_hmac_reset( md_context_t *ctx ); | ||
|
|
||
| /** | ||
| * \brief Output = Generic_HMAC( hmac key, input buffer ) | ||
| * | ||
| * \param md_info message digest info | ||
| * \param key HMAC secret key | ||
| * \param keylen length of the HMAC key | ||
| * \param input buffer holding the data | ||
| * \param ilen length of the input data | ||
| * \param output Generic HMAC-result | ||
| * | ||
| * \returns 0 on success, POLARSSL_ERR_MD_BAD_INPUT_DATA if parameter | ||
| * verification fails. | ||
| */ | ||
| int md_hmac( const md_info_t *md_info, const unsigned char *key, size_t keylen, | ||
| const unsigned char *input, size_t ilen, | ||
| unsigned char *output ); | ||
|
|
||
| #ifdef __cplusplus | ||
| } | ||
| #endif | ||
|
|
||
| #endif /* POLARSSL_MD_H */ |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,171 @@ | ||
| /** | ||
| * \file md2.h | ||
| * | ||
| * \brief MD2 message digest algorithm (hash function) | ||
| * | ||
| * Copyright (C) 2006-2013, Brainspark B.V. | ||
| * | ||
| * This file is part of PolarSSL (http://www.polarssl.org) | ||
| * Lead Maintainer: Paul Bakker <polarssl_maintainer at polarssl.org> | ||
| * | ||
| * All rights reserved. | ||
| * | ||
| * This program is free software; you can redistribute it and/or modify | ||
| * it under the terms of the GNU General Public License as published by | ||
| * the Free Software Foundation; either version 2 of the License, or | ||
| * (at your option) any later version. | ||
| * | ||
| * This program is distributed in the hope that it will be useful, | ||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| * GNU General Public License for more details. | ||
| * | ||
| * You should have received a copy of the GNU General Public License along | ||
| * with this program; if not, write to the Free Software Foundation, Inc., | ||
| * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
| */ | ||
| #ifndef POLARSSL_MD2_H | ||
| #define POLARSSL_MD2_H | ||
|
|
||
| #include "config.h" | ||
|
|
||
| #include <string.h> | ||
|
|
||
| #define POLARSSL_ERR_MD2_FILE_IO_ERROR -0x0070 /**< Read/write error in file. */ | ||
|
|
||
| #if !defined(POLARSSL_MD2_ALT) | ||
| // Regular implementation | ||
| // | ||
|
|
||
| /** | ||
| * \brief MD2 context structure | ||
| */ | ||
| typedef struct | ||
| { | ||
| unsigned char cksum[16]; /*!< checksum of the data block */ | ||
| unsigned char state[48]; /*!< intermediate digest state */ | ||
| unsigned char buffer[16]; /*!< data block being processed */ | ||
|
|
||
| unsigned char ipad[16]; /*!< HMAC: inner padding */ | ||
| unsigned char opad[16]; /*!< HMAC: outer padding */ | ||
| size_t left; /*!< amount of data in buffer */ | ||
| } | ||
| md2_context; | ||
|
|
||
| #ifdef __cplusplus | ||
| extern "C" { | ||
| #endif | ||
|
|
||
| /** | ||
| * \brief MD2 context setup | ||
| * | ||
| * \param ctx context to be initialized | ||
| */ | ||
| void md2_starts( md2_context *ctx ); | ||
|
|
||
| /** | ||
| * \brief MD2 process buffer | ||
| * | ||
| * \param ctx MD2 context | ||
| * \param input buffer holding the data | ||
| * \param ilen length of the input data | ||
| */ | ||
| void md2_update( md2_context *ctx, const unsigned char *input, size_t ilen ); | ||
|
|
||
| /** | ||
| * \brief MD2 final digest | ||
| * | ||
| * \param ctx MD2 context | ||
| * \param output MD2 checksum result | ||
| */ | ||
| void md2_finish( md2_context *ctx, unsigned char output[16] ); | ||
|
|
||
| #ifdef __cplusplus | ||
| } | ||
| #endif | ||
|
|
||
| #else /* POLARSSL_MD2_ALT */ | ||
| #include "md2_alt.h" | ||
| #endif /* POLARSSL_MD2_ALT */ | ||
|
|
||
| #ifdef __cplusplus | ||
| extern "C" { | ||
| #endif | ||
|
|
||
| /** | ||
| * \brief Output = MD2( input buffer ) | ||
| * | ||
| * \param input buffer holding the data | ||
| * \param ilen length of the input data | ||
| * \param output MD2 checksum result | ||
| */ | ||
| void md2( const unsigned char *input, size_t ilen, unsigned char output[16] ); | ||
|
|
||
| /** | ||
| * \brief Output = MD2( file contents ) | ||
| * | ||
| * \param path input file name | ||
| * \param output MD2 checksum result | ||
| * | ||
| * \return 0 if successful, or POLARSSL_ERR_MD2_FILE_IO_ERROR | ||
| */ | ||
| int md2_file( const char *path, unsigned char output[16] ); | ||
|
|
||
| /** | ||
| * \brief MD2 HMAC context setup | ||
| * | ||
| * \param ctx HMAC context to be initialized | ||
| * \param key HMAC secret key | ||
| * \param keylen length of the HMAC key | ||
| */ | ||
| void md2_hmac_starts( md2_context *ctx, const unsigned char *key, size_t keylen ); | ||
|
|
||
| /** | ||
| * \brief MD2 HMAC process buffer | ||
| * | ||
| * \param ctx HMAC context | ||
| * \param input buffer holding the data | ||
| * \param ilen length of the input data | ||
| */ | ||
| void md2_hmac_update( md2_context *ctx, const unsigned char *input, size_t ilen ); | ||
|
|
||
| /** | ||
| * \brief MD2 HMAC final digest | ||
| * | ||
| * \param ctx HMAC context | ||
| * \param output MD2 HMAC checksum result | ||
| */ | ||
| void md2_hmac_finish( md2_context *ctx, unsigned char output[16] ); | ||
|
|
||
| /** | ||
| * \brief MD2 HMAC context reset | ||
| * | ||
| * \param ctx HMAC context to be reset | ||
| */ | ||
| void md2_hmac_reset( md2_context *ctx ); | ||
|
|
||
| /** | ||
| * \brief Output = HMAC-MD2( hmac key, input buffer ) | ||
| * | ||
| * \param key HMAC secret key | ||
| * \param keylen length of the HMAC key | ||
| * \param input buffer holding the data | ||
| * \param ilen length of the input data | ||
| * \param output HMAC-MD2 result | ||
| */ | ||
| void md2_hmac( const unsigned char *key, size_t keylen, | ||
| const unsigned char *input, size_t ilen, | ||
| unsigned char output[16] ); | ||
|
|
||
| /** | ||
| * \brief Checkup routine | ||
| * | ||
| * \return 0 if successful, or 1 if the test failed | ||
| */ | ||
| int md2_self_test( int verbose ); | ||
|
|
||
| #ifdef __cplusplus | ||
| } | ||
| #endif | ||
|
|
||
| #endif /* md2.h */ |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,177 @@ | ||
| /** | ||
| * \file md4.h | ||
| * | ||
| * \brief MD4 message digest algorithm (hash function) | ||
| * | ||
| * Copyright (C) 2006-2013, Brainspark B.V. | ||
| * | ||
| * This file is part of PolarSSL (http://www.polarssl.org) | ||
| * Lead Maintainer: Paul Bakker <polarssl_maintainer at polarssl.org> | ||
| * | ||
| * All rights reserved. | ||
| * | ||
| * This program is free software; you can redistribute it and/or modify | ||
| * it under the terms of the GNU General Public License as published by | ||
| * the Free Software Foundation; either version 2 of the License, or | ||
| * (at your option) any later version. | ||
| * | ||
| * This program is distributed in the hope that it will be useful, | ||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| * GNU General Public License for more details. | ||
| * | ||
| * You should have received a copy of the GNU General Public License along | ||
| * with this program; if not, write to the Free Software Foundation, Inc., | ||
| * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
| */ | ||
| #ifndef POLARSSL_MD4_H | ||
| #define POLARSSL_MD4_H | ||
|
|
||
| #include "config.h" | ||
|
|
||
| #include <string.h> | ||
|
|
||
| #ifdef _MSC_VER | ||
| #include <basetsd.h> | ||
| typedef UINT32 uint32_t; | ||
| #else | ||
| #include <inttypes.h> | ||
| #endif | ||
|
|
||
| #define POLARSSL_ERR_MD4_FILE_IO_ERROR -0x0072 /**< Read/write error in file. */ | ||
|
|
||
| #if !defined(POLARSSL_MD4_ALT) | ||
| // Regular implementation | ||
| // | ||
|
|
||
| /** | ||
| * \brief MD4 context structure | ||
| */ | ||
| typedef struct | ||
| { | ||
| uint32_t total[2]; /*!< number of bytes processed */ | ||
| uint32_t state[4]; /*!< intermediate digest state */ | ||
| unsigned char buffer[64]; /*!< data block being processed */ | ||
|
|
||
| unsigned char ipad[64]; /*!< HMAC: inner padding */ | ||
| unsigned char opad[64]; /*!< HMAC: outer padding */ | ||
| } | ||
| md4_context; | ||
|
|
||
| #ifdef __cplusplus | ||
| extern "C" { | ||
| #endif | ||
|
|
||
| /** | ||
| * \brief MD4 context setup | ||
| * | ||
| * \param ctx context to be initialized | ||
| */ | ||
| void md4_starts( md4_context *ctx ); | ||
|
|
||
| /** | ||
| * \brief MD4 process buffer | ||
| * | ||
| * \param ctx MD4 context | ||
| * \param input buffer holding the data | ||
| * \param ilen length of the input data | ||
| */ | ||
| void md4_update( md4_context *ctx, const unsigned char *input, size_t ilen ); | ||
|
|
||
| /** | ||
| * \brief MD4 final digest | ||
| * | ||
| * \param ctx MD4 context | ||
| * \param output MD4 checksum result | ||
| */ | ||
| void md4_finish( md4_context *ctx, unsigned char output[16] ); | ||
|
|
||
| #ifdef __cplusplus | ||
| } | ||
| #endif | ||
|
|
||
| #else /* POLARSSL_MD4_ALT */ | ||
| #include "md4_alt.h" | ||
| #endif /* POLARSSL_MD4_ALT */ | ||
|
|
||
| #ifdef __cplusplus | ||
| extern "C" { | ||
| #endif | ||
|
|
||
| /** | ||
| * \brief Output = MD4( input buffer ) | ||
| * | ||
| * \param input buffer holding the data | ||
| * \param ilen length of the input data | ||
| * \param output MD4 checksum result | ||
| */ | ||
| void md4( const unsigned char *input, size_t ilen, unsigned char output[16] ); | ||
|
|
||
| /** | ||
| * \brief Output = MD4( file contents ) | ||
| * | ||
| * \param path input file name | ||
| * \param output MD4 checksum result | ||
| * | ||
| * \return 0 if successful, or POLARSSL_ERR_MD4_FILE_IO_ERROR | ||
| */ | ||
| int md4_file( const char *path, unsigned char output[16] ); | ||
|
|
||
| /** | ||
| * \brief MD4 HMAC context setup | ||
| * | ||
| * \param ctx HMAC context to be initialized | ||
| * \param key HMAC secret key | ||
| * \param keylen length of the HMAC key | ||
| */ | ||
| void md4_hmac_starts( md4_context *ctx, const unsigned char *key, size_t keylen ); | ||
|
|
||
| /** | ||
| * \brief MD4 HMAC process buffer | ||
| * | ||
| * \param ctx HMAC context | ||
| * \param input buffer holding the data | ||
| * \param ilen length of the input data | ||
| */ | ||
| void md4_hmac_update( md4_context *ctx, const unsigned char *input, size_t ilen ); | ||
|
|
||
| /** | ||
| * \brief MD4 HMAC final digest | ||
| * | ||
| * \param ctx HMAC context | ||
| * \param output MD4 HMAC checksum result | ||
| */ | ||
| void md4_hmac_finish( md4_context *ctx, unsigned char output[16] ); | ||
|
|
||
| /** | ||
| * \brief MD4 HMAC context reset | ||
| * | ||
| * \param ctx HMAC context to be reset | ||
| */ | ||
| void md4_hmac_reset( md4_context *ctx ); | ||
|
|
||
| /** | ||
| * \brief Output = HMAC-MD4( hmac key, input buffer ) | ||
| * | ||
| * \param key HMAC secret key | ||
| * \param keylen length of the HMAC key | ||
| * \param input buffer holding the data | ||
| * \param ilen length of the input data | ||
| * \param output HMAC-MD4 result | ||
| */ | ||
| void md4_hmac( const unsigned char *key, size_t keylen, | ||
| const unsigned char *input, size_t ilen, | ||
| unsigned char output[16] ); | ||
|
|
||
| /** | ||
| * \brief Checkup routine | ||
| * | ||
| * \return 0 if successful, or 1 if the test failed | ||
| */ | ||
| int md4_self_test( int verbose ); | ||
|
|
||
| #ifdef __cplusplus | ||
| } | ||
| #endif | ||
|
|
||
| #endif /* md4.h */ |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,64 @@ | ||
| /** | ||
| * \file md_wrap.h | ||
| * | ||
| * \brief Message digest wrappers. | ||
| * | ||
| * \author Adriaan de Jong <dejong@fox-it.com> | ||
| * | ||
| * Copyright (C) 2006-2011, Brainspark B.V. | ||
| * | ||
| * This file is part of PolarSSL (http://www.polarssl.org) | ||
| * Lead Maintainer: Paul Bakker <polarssl_maintainer at polarssl.org> | ||
| * | ||
| * All rights reserved. | ||
| * | ||
| * This program is free software; you can redistribute it and/or modify | ||
| * it under the terms of the GNU General Public License as published by | ||
| * the Free Software Foundation; either version 2 of the License, or | ||
| * (at your option) any later version. | ||
| * | ||
| * This program is distributed in the hope that it will be useful, | ||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| * GNU General Public License for more details. | ||
| * | ||
| * You should have received a copy of the GNU General Public License along | ||
| * with this program; if not, write to the Free Software Foundation, Inc., | ||
| * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
| */ | ||
| #ifndef POLARSSL_MD_WRAP_H | ||
| #define POLARSSL_MD_WRAP_H | ||
|
|
||
| #include "config.h" | ||
| #include "md.h" | ||
|
|
||
| #ifdef __cplusplus | ||
| extern "C" { | ||
| #endif | ||
|
|
||
| #if defined(POLARSSL_MD2_C) | ||
| extern const md_info_t md2_info; | ||
| #endif | ||
| #if defined(POLARSSL_MD4_C) | ||
| extern const md_info_t md4_info; | ||
| #endif | ||
| #if defined(POLARSSL_MD5_C) | ||
| extern const md_info_t md5_info; | ||
| #endif | ||
| #if defined(POLARSSL_SHA1_C) | ||
| extern const md_info_t sha1_info; | ||
| #endif | ||
| #if defined(POLARSSL_SHA2_C) | ||
| extern const md_info_t sha224_info; | ||
| extern const md_info_t sha256_info; | ||
| #endif | ||
| #if defined(POLARSSL_SHA4_C) | ||
| extern const md_info_t sha384_info; | ||
| extern const md_info_t sha512_info; | ||
| #endif | ||
|
|
||
| #ifdef __cplusplus | ||
| } | ||
| #endif | ||
|
|
||
| #endif /* POLARSSL_MD_WRAP_H */ |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,159 @@ | ||
| /** | ||
| * \file net.h | ||
| * | ||
| * \brief Network communication functions | ||
| * | ||
| * Copyright (C) 2006-2011, Brainspark B.V. | ||
| * | ||
| * This file is part of PolarSSL (http://www.polarssl.org) | ||
| * Lead Maintainer: Paul Bakker <polarssl_maintainer at polarssl.org> | ||
| * | ||
| * All rights reserved. | ||
| * | ||
| * This program is free software; you can redistribute it and/or modify | ||
| * it under the terms of the GNU General Public License as published by | ||
| * the Free Software Foundation; either version 2 of the License, or | ||
| * (at your option) any later version. | ||
| * | ||
| * This program is distributed in the hope that it will be useful, | ||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| * GNU General Public License for more details. | ||
| * | ||
| * You should have received a copy of the GNU General Public License along | ||
| * with this program; if not, write to the Free Software Foundation, Inc., | ||
| * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
| */ | ||
| #ifndef POLARSSL_NET_H | ||
| #define POLARSSL_NET_H | ||
|
|
||
| #include <string.h> | ||
|
|
||
| #define POLARSSL_ERR_NET_UNKNOWN_HOST -0x0056 /**< Failed to get an IP address for the given hostname. */ | ||
| #define POLARSSL_ERR_NET_SOCKET_FAILED -0x0042 /**< Failed to open a socket. */ | ||
| #define POLARSSL_ERR_NET_CONNECT_FAILED -0x0044 /**< The connection to the given server / port failed. */ | ||
| #define POLARSSL_ERR_NET_BIND_FAILED -0x0046 /**< Binding of the socket failed. */ | ||
| #define POLARSSL_ERR_NET_LISTEN_FAILED -0x0048 /**< Could not listen on the socket. */ | ||
| #define POLARSSL_ERR_NET_ACCEPT_FAILED -0x004A /**< Could not accept the incoming connection. */ | ||
| #define POLARSSL_ERR_NET_RECV_FAILED -0x004C /**< Reading information from the socket failed. */ | ||
| #define POLARSSL_ERR_NET_SEND_FAILED -0x004E /**< Sending information through the socket failed. */ | ||
| #define POLARSSL_ERR_NET_CONN_RESET -0x0050 /**< Connection was reset by peer. */ | ||
| #define POLARSSL_ERR_NET_WANT_READ -0x0052 /**< Connection requires a read call. */ | ||
| #define POLARSSL_ERR_NET_WANT_WRITE -0x0054 /**< Connection requires a write call. */ | ||
|
|
||
| #define POLARSSL_NET_LISTEN_BACKLOG 10 /**< The backlog that listen() should use. */ | ||
|
|
||
| #ifdef __cplusplus | ||
| extern "C" { | ||
| #endif | ||
|
|
||
| /** | ||
| * \brief Initiate a TCP connection with host:port | ||
| * | ||
| * \param fd Socket to use | ||
| * \param host Host to connect to | ||
| * \param port Port to connect to | ||
| * | ||
| * \return 0 if successful, or one of: | ||
| * POLARSSL_ERR_NET_SOCKET_FAILED, | ||
| * POLARSSL_ERR_NET_UNKNOWN_HOST, | ||
| * POLARSSL_ERR_NET_CONNECT_FAILED | ||
| */ | ||
| int net_connect( int *fd, const char *host, int port ); | ||
|
|
||
| /** | ||
| * \brief Create a listening socket on bind_ip:port. | ||
| * If bind_ip == NULL, all interfaces are binded. | ||
| * | ||
| * \param fd Socket to use | ||
| * \param bind_ip IP to bind to, can be NULL | ||
| * \param port Port number to use | ||
| * | ||
| * \return 0 if successful, or one of: | ||
| * POLARSSL_ERR_NET_SOCKET_FAILED, | ||
| * POLARSSL_ERR_NET_BIND_FAILED, | ||
| * POLARSSL_ERR_NET_LISTEN_FAILED | ||
| */ | ||
| int net_bind( int *fd, const char *bind_ip, int port ); | ||
|
|
||
| /** | ||
| * \brief Accept a connection from a remote client | ||
| * | ||
| * \param bind_fd Relevant socket | ||
| * \param client_fd Will contain the connected client socket | ||
| * \param client_ip Will contain the client IP address | ||
| * | ||
| * \return 0 if successful, POLARSSL_ERR_NET_ACCEPT_FAILED, or | ||
| * POLARSSL_ERR_NET_WOULD_BLOCK is bind_fd was set to | ||
| * non-blocking and accept() is blocking. | ||
| */ | ||
| int net_accept( int bind_fd, int *client_fd, void *client_ip ); | ||
|
|
||
| /** | ||
| * \brief Set the socket blocking | ||
| * | ||
| * \param fd Socket to set | ||
| * | ||
| * \return 0 if successful, or a non-zero error code | ||
| */ | ||
| int net_set_block( int fd ); | ||
|
|
||
| /** | ||
| * \brief Set the socket non-blocking | ||
| * | ||
| * \param fd Socket to set | ||
| * | ||
| * \return 0 if successful, or a non-zero error code | ||
| */ | ||
| int net_set_nonblock( int fd ); | ||
|
|
||
| /** | ||
| * \brief Portable usleep helper | ||
| * | ||
| * \param usec Amount of microseconds to sleep | ||
| * | ||
| * \note Real amount of time slept will not be less than | ||
| * select()'s timeout granularity (typically, 10ms). | ||
| */ | ||
| void net_usleep( unsigned long usec ); | ||
|
|
||
| /** | ||
| * \brief Read at most 'len' characters. If no error occurs, | ||
| * the actual amount read is returned. | ||
| * | ||
| * \param ctx Socket | ||
| * \param buf The buffer to write to | ||
| * \param len Maximum length of the buffer | ||
| * | ||
| * \return This function returns the number of bytes received, | ||
| * or a non-zero error code; POLARSSL_ERR_NET_WANT_READ | ||
| * indicates read() is blocking. | ||
| */ | ||
| int net_recv( void *ctx, unsigned char *buf, size_t len ); | ||
|
|
||
| /** | ||
| * \brief Write at most 'len' characters. If no error occurs, | ||
| * the actual amount read is returned. | ||
| * | ||
| * \param ctx Socket | ||
| * \param buf The buffer to read from | ||
| * \param len The length of the buffer | ||
| * | ||
| * \return This function returns the number of bytes sent, | ||
| * or a non-zero error code; POLARSSL_ERR_NET_WANT_WRITE | ||
| * indicates write() is blocking. | ||
| */ | ||
| int net_send( void *ctx, const unsigned char *buf, size_t len ); | ||
|
|
||
| /** | ||
| * \brief Gracefully shutdown the connection | ||
| * | ||
| * \param fd The socket to close | ||
| */ | ||
| void net_close( int fd ); | ||
|
|
||
| #ifdef __cplusplus | ||
| } | ||
| #endif | ||
|
|
||
| #endif /* net.h */ |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,136 @@ | ||
| /** | ||
| * \file openssl.h | ||
| * | ||
| * \brief OpenSSL wrapper (definitions, inline functions). | ||
| * | ||
| * Copyright (C) 2006-2010, Brainspark B.V. | ||
| * | ||
| * This file is part of PolarSSL (http://www.polarssl.org) | ||
| * Lead Maintainer: Paul Bakker <polarssl_maintainer at polarssl.org> | ||
| * | ||
| * All rights reserved. | ||
| * | ||
| * This program is free software; you can redistribute it and/or modify | ||
| * it under the terms of the GNU General Public License as published by | ||
| * the Free Software Foundation; either version 2 of the License, or | ||
| * (at your option) any later version. | ||
| * | ||
| * This program is distributed in the hope that it will be useful, | ||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| * GNU General Public License for more details. | ||
| * | ||
| * You should have received a copy of the GNU General Public License along | ||
| * with this program; if not, write to the Free Software Foundation, Inc., | ||
| * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
| */ | ||
| /* | ||
| * OpenSSL wrapper contributed by David Barett | ||
| */ | ||
| #ifndef POLARSSL_OPENSSL_H | ||
| #define POLARSSL_OPENSSL_H | ||
|
|
||
| #include "aes.h" | ||
| #include "md5.h" | ||
| #include "rsa.h" | ||
| #include "sha1.h" | ||
|
|
||
| #define AES_SIZE 16 | ||
| #define AES_BLOCK_SIZE 16 | ||
| #define AES_KEY aes_context | ||
| #define MD5_CTX md5_context | ||
| #define SHA_CTX sha1_context | ||
|
|
||
| #define SHA1_Init( CTX ) \ | ||
| sha1_starts( (CTX) ) | ||
| #define SHA1_Update( CTX, BUF, LEN ) \ | ||
| sha1_update( (CTX), (unsigned char *)(BUF), (LEN) ) | ||
| #define SHA1_Final( OUT, CTX ) \ | ||
| sha1_finish( (CTX), (OUT) ) | ||
|
|
||
| #define MD5_Init( CTX ) \ | ||
| md5_starts( (CTX) ) | ||
| #define MD5_Update( CTX, BUF, LEN ) \ | ||
| md5_update( (CTX), (unsigned char *)(BUF), (LEN) ) | ||
| #define MD5_Final( OUT, CTX ) \ | ||
| md5_finish( (CTX), (OUT) ) | ||
|
|
||
| #define AES_set_encrypt_key( KEY, KEYSIZE, CTX ) \ | ||
| aes_setkey_enc( (CTX), (KEY), (KEYSIZE) ) | ||
| #define AES_set_decrypt_key( KEY, KEYSIZE, CTX ) \ | ||
| aes_setkey_dec( (CTX), (KEY), (KEYSIZE) ) | ||
| #define AES_cbc_encrypt( INPUT, OUTPUT, LEN, CTX, IV, MODE ) \ | ||
| aes_crypt_cbc( (CTX), (MODE), (LEN), (IV), (INPUT), (OUTPUT) ) | ||
|
|
||
| /* | ||
| * RSA stuff follows. TODO: needs cleanup | ||
| */ | ||
| inline int __RSA_Passthrough( void *output, void *input, int size ) | ||
| { | ||
| memcpy( output, input, size ); | ||
| return size; | ||
| } | ||
|
|
||
| inline rsa_context* d2i_RSA_PUBKEY( void *ignore, unsigned char **bufptr, | ||
| int len ) | ||
| { | ||
| unsigned char *buffer = *(unsigned char **) bufptr; | ||
| rsa_context *rsa; | ||
|
|
||
| /* | ||
| * Not a general-purpose parser: only parses public key from *exactly* | ||
| * openssl genrsa -out privkey.pem 512 (or 1024) | ||
| * openssl rsa -in privkey.pem -out privatekey.der -outform der | ||
| * openssl rsa -in privkey.pem -out pubkey.der -outform der -pubout | ||
| * | ||
| * TODO: make a general-purpose parse | ||
| */ | ||
| if( ignore != 0 || ( len != 94 && len != 162 ) ) | ||
| return( 0 ); | ||
|
|
||
| rsa = (rsa_context *) malloc( sizeof( rsa_rsa ) ); | ||
| if( rsa == NULL ) | ||
| return( 0 ); | ||
|
|
||
| memset( rsa, 0, sizeof( rsa_context ) ); | ||
|
|
||
| if( ( len == 94 && | ||
| mpi_read_binary( &rsa->N, &buffer[ 25], 64 ) == 0 && | ||
| mpi_read_binary( &rsa->E, &buffer[ 91], 3 ) == 0 ) || | ||
| ( len == 162 && | ||
| mpi_read_binary( &rsa->N, &buffer[ 29], 128 ) == 0 ) && | ||
| mpi_read_binary( &rsa->E, &buffer[159], 3 ) == 0 ) | ||
| { | ||
| /* | ||
| * key read successfully | ||
| */ | ||
| rsa->len = ( mpi_msb( &rsa->N ) + 7 ) >> 3; | ||
| return( rsa ); | ||
| } | ||
| else | ||
| { | ||
| memset( rsa, 0, sizeof( rsa_context ) ); | ||
| free( rsa ); | ||
| return( 0 ); | ||
| } | ||
| } | ||
|
|
||
| #define RSA rsa_context | ||
| #define RSA_PKCS1_PADDING 1 /* ignored; always encrypt with this */ | ||
| #define RSA_size( CTX ) (CTX)->len | ||
| #define RSA_free( CTX ) rsa_free( CTX ) | ||
| #define ERR_get_error( ) "ERR_get_error() not supported" | ||
| #define RSA_blinding_off( IGNORE ) | ||
|
|
||
| #define d2i_RSAPrivateKey( a, b, c ) new rsa_context /* TODO: C++ bleh */ | ||
|
|
||
| inline int RSA_public_decrypt ( int size, unsigned char* input, unsigned char* output, RSA* key, int ignore ) { int outsize=size; if( !rsa_pkcs1_decrypt( key, RSA_PUBLIC, &outsize, input, output ) ) return outsize; else return -1; } | ||
| inline int RSA_private_decrypt( int size, unsigned char* input, unsigned char* output, RSA* key, int ignore ) { int outsize=size; if( !rsa_pkcs1_decrypt( key, RSA_PRIVATE, &outsize, input, output ) ) return outsize; else return -1; } | ||
| inline int RSA_public_encrypt ( int size, unsigned char* input, unsigned char* output, RSA* key, int ignore ) { if( !rsa_pkcs1_encrypt( key, RSA_PUBLIC, size, input, output ) ) return RSA_size(key); else return -1; } | ||
| inline int RSA_private_encrypt( int size, unsigned char* input, unsigned char* output, RSA* key, int ignore ) { if( !rsa_pkcs1_encrypt( key, RSA_PRIVATE, size, input, output ) ) return RSA_size(key); else return -1; } | ||
|
|
||
| #ifdef __cplusplus | ||
| } | ||
| #endif | ||
|
|
||
| #endif /* openssl.h */ |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,108 @@ | ||
| /** | ||
| * \file padlock.h | ||
| * | ||
| * \brief VIA PadLock ACE for HW encryption/decryption supported by some processors | ||
| * | ||
| * Copyright (C) 2006-2010, Brainspark B.V. | ||
| * | ||
| * This file is part of PolarSSL (http://www.polarssl.org) | ||
| * Lead Maintainer: Paul Bakker <polarssl_maintainer at polarssl.org> | ||
| * | ||
| * All rights reserved. | ||
| * | ||
| * This program is free software; you can redistribute it and/or modify | ||
| * it under the terms of the GNU General Public License as published by | ||
| * the Free Software Foundation; either version 2 of the License, or | ||
| * (at your option) any later version. | ||
| * | ||
| * This program is distributed in the hope that it will be useful, | ||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| * GNU General Public License for more details. | ||
| * | ||
| * You should have received a copy of the GNU General Public License along | ||
| * with this program; if not, write to the Free Software Foundation, Inc., | ||
| * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
| */ | ||
| #ifndef POLARSSL_PADLOCK_H | ||
| #define POLARSSL_PADLOCK_H | ||
|
|
||
| #include "aes.h" | ||
|
|
||
| #define POLARSSL_ERR_PADLOCK_DATA_MISALIGNED -0x0030 /**< Input data should be aligned. */ | ||
|
|
||
| #if defined(POLARSSL_HAVE_ASM) && defined(__GNUC__) && defined(__i386__) | ||
|
|
||
| #ifndef POLARSSL_HAVE_X86 | ||
| #define POLARSSL_HAVE_X86 | ||
| #endif | ||
|
|
||
| #ifdef _MSC_VER | ||
| #include <basetsd.h> | ||
| typedef INT32 int32_t; | ||
| #else | ||
| #include <inttypes.h> | ||
| #endif | ||
|
|
||
|
|
||
| #define PADLOCK_RNG 0x000C | ||
| #define PADLOCK_ACE 0x00C0 | ||
| #define PADLOCK_PHE 0x0C00 | ||
| #define PADLOCK_PMM 0x3000 | ||
|
|
||
| #define PADLOCK_ALIGN16(x) (uint32_t *) (16 + ((int32_t) x & ~15)) | ||
|
|
||
| #ifdef __cplusplus | ||
| extern "C" { | ||
| #endif | ||
|
|
||
| /** | ||
| * \brief PadLock detection routine | ||
| * | ||
| * \param The feature to detect | ||
| * | ||
| * \return 1 if CPU has support for the feature, 0 otherwise | ||
| */ | ||
| int padlock_supports( int feature ); | ||
|
|
||
| /** | ||
| * \brief PadLock AES-ECB block en(de)cryption | ||
| * | ||
| * \param ctx AES context | ||
| * \param mode AES_ENCRYPT or AES_DECRYPT | ||
| * \param input 16-byte input block | ||
| * \param output 16-byte output block | ||
| * | ||
| * \return 0 if success, 1 if operation failed | ||
| */ | ||
| int padlock_xcryptecb( aes_context *ctx, | ||
| int mode, | ||
| const unsigned char input[16], | ||
| unsigned char output[16] ); | ||
|
|
||
| /** | ||
| * \brief PadLock AES-CBC buffer en(de)cryption | ||
| * | ||
| * \param ctx AES context | ||
| * \param mode AES_ENCRYPT or AES_DECRYPT | ||
| * \param length length of the input data | ||
| * \param iv initialization vector (updated after use) | ||
| * \param input buffer holding the input data | ||
| * \param output buffer holding the output data | ||
| * | ||
| * \return 0 if success, 1 if operation failed | ||
| */ | ||
| int padlock_xcryptcbc( aes_context *ctx, | ||
| int mode, | ||
| size_t length, | ||
| unsigned char iv[16], | ||
| const unsigned char *input, | ||
| unsigned char *output ); | ||
|
|
||
| #ifdef __cplusplus | ||
| } | ||
| #endif | ||
|
|
||
| #endif /* HAVE_X86 */ | ||
|
|
||
| #endif /* padlock.h */ |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,82 @@ | ||
| /** | ||
| * \file pbkdf2.h | ||
| * | ||
| * \brief Password-Based Key Derivation Function 2 (from PKCS#5) | ||
| * DEPRECATED: use pkcs5.h instead. | ||
| * | ||
| * \author Mathias Olsson <mathias@kompetensum.com> | ||
| * | ||
| * Copyright (C) 2006-2012, Brainspark B.V. | ||
| * | ||
| * This file is part of PolarSSL (http://www.polarssl.org) | ||
| * Lead Maintainer: Paul Bakker <polarssl_maintainer at polarssl.org> | ||
| * | ||
| * All rights reserved. | ||
| * | ||
| * This program is free software; you can redistribute it and/or modify | ||
| * it under the terms of the GNU General Public License as published by | ||
| * the Free Software Foundation; either version 2 of the License, or | ||
| * (at your option) any later version. | ||
| * | ||
| * This program is distributed in the hope that it will be useful, | ||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| * GNU General Public License for more details. | ||
| * | ||
| * You should have received a copy of the GNU General Public License along | ||
| * with this program; if not, write to the Free Software Foundation, Inc., | ||
| * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
| */ | ||
| #ifndef POLARSSL_PBKDF2_H | ||
| #define POLARSSL_PBKDF2_H | ||
|
|
||
| #include <string.h> | ||
|
|
||
| #include "md.h" | ||
|
|
||
| #ifdef _MSC_VER | ||
| #include <basetsd.h> | ||
| typedef UINT32 uint32_t; | ||
| #else | ||
| #include <inttypes.h> | ||
| #endif | ||
|
|
||
| #define POLARSSL_ERR_PBKDF2_BAD_INPUT_DATA -0x007C /**< Bad input parameters to function. */ | ||
|
|
||
| #ifdef __cplusplus | ||
| extern "C" { | ||
| #endif | ||
|
|
||
| /** | ||
| * \brief PKCS#5 PBKDF2 using HMAC | ||
| * DEPRECATED: Use pkcs5_pbkdf2_hmac() instead! | ||
| * | ||
| * \param ctx Generic HMAC context | ||
| * \param password Password to use when generating key | ||
| * \param plen Length of password | ||
| * \param salt Salt to use when generating key | ||
| * \param slen Length of salt | ||
| * \param iteration_count Iteration count | ||
| * \param key_length Length of generated key | ||
| * \param output Generated key. Must be at least as big as key_length | ||
| * | ||
| * \returns 0 on success, or a PolarSSL error code if verification fails. | ||
| */ | ||
| int pbkdf2_hmac( md_context_t *ctx, const unsigned char *password, | ||
| size_t plen, const unsigned char *salt, size_t slen, | ||
| unsigned int iteration_count, | ||
| uint32_t key_length, unsigned char *output ); | ||
|
|
||
| /** | ||
| * \brief Checkup routine | ||
| * DEPRECATED: Use pkcs5_self_test() instead! | ||
| * | ||
| * \return 0 if successful, or 1 if the test failed | ||
| */ | ||
| int pbkdf2_self_test( int verbose ); | ||
|
|
||
| #ifdef __cplusplus | ||
| } | ||
| #endif | ||
|
|
||
| #endif /* pbkdf2.h */ |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,105 @@ | ||
| /** | ||
| * \file pem.h | ||
| * | ||
| * \brief Privacy Enhanced Mail (PEM) decoding | ||
| * | ||
| * Copyright (C) 2006-2013, Brainspark B.V. | ||
| * | ||
| * This file is part of PolarSSL (http://www.polarssl.org) | ||
| * Lead Maintainer: Paul Bakker <polarssl_maintainer at polarssl.org> | ||
| * | ||
| * All rights reserved. | ||
| * | ||
| * This program is free software; you can redistribute it and/or modify | ||
| * it under the terms of the GNU General Public License as published by | ||
| * the Free Software Foundation; either version 2 of the License, or | ||
| * (at your option) any later version. | ||
| * | ||
| * This program is distributed in the hope that it will be useful, | ||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| * GNU General Public License for more details. | ||
| * | ||
| * You should have received a copy of the GNU General Public License along | ||
| * with this program; if not, write to the Free Software Foundation, Inc., | ||
| * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
| */ | ||
| #ifndef POLARSSL_PEM_H | ||
| #define POLARSSL_PEM_H | ||
|
|
||
| #include <string.h> | ||
|
|
||
| /** | ||
| * \name PEM Error codes | ||
| * These error codes are returned in case of errors reading the | ||
| * PEM data. | ||
| * \{ | ||
| */ | ||
| #define POLARSSL_ERR_PEM_NO_HEADER_FOOTER_PRESENT -0x1080 /**< No PEM header or footer found. */ | ||
| #define POLARSSL_ERR_PEM_INVALID_DATA -0x1100 /**< PEM string is not as expected. */ | ||
| #define POLARSSL_ERR_PEM_MALLOC_FAILED -0x1180 /**< Failed to allocate memory. */ | ||
| #define POLARSSL_ERR_PEM_INVALID_ENC_IV -0x1200 /**< RSA IV is not in hex-format. */ | ||
| #define POLARSSL_ERR_PEM_UNKNOWN_ENC_ALG -0x1280 /**< Unsupported key encryption algorithm. */ | ||
| #define POLARSSL_ERR_PEM_PASSWORD_REQUIRED -0x1300 /**< Private key password can't be empty. */ | ||
| #define POLARSSL_ERR_PEM_PASSWORD_MISMATCH -0x1380 /**< Given private key password does not allow for correct decryption. */ | ||
| #define POLARSSL_ERR_PEM_FEATURE_UNAVAILABLE -0x1400 /**< Unavailable feature, e.g. hashing/encryption combination. */ | ||
| #define POLARSSL_ERR_PEM_BAD_INPUT_DATA -0x1480 /**< Bad input parameters to function. */ | ||
| /* \} name */ | ||
|
|
||
| /** | ||
| * \brief PEM context structure | ||
| */ | ||
| typedef struct | ||
| { | ||
| unsigned char *buf; /*!< buffer for decoded data */ | ||
| size_t buflen; /*!< length of the buffer */ | ||
| unsigned char *info; /*!< buffer for extra header information */ | ||
| } | ||
| pem_context; | ||
|
|
||
| #ifdef __cplusplus | ||
| extern "C" { | ||
| #endif | ||
|
|
||
| /** | ||
| * \brief PEM context setup | ||
| * | ||
| * \param ctx context to be initialized | ||
| */ | ||
| void pem_init( pem_context *ctx ); | ||
|
|
||
| /** | ||
| * \brief Read a buffer for PEM information and store the resulting | ||
| * data into the specified context buffers. | ||
| * | ||
| * \param ctx context to use | ||
| * \param header header string to seek and expect | ||
| * \param footer footer string to seek and expect | ||
| * \param data source data to look in | ||
| * \param pwd password for decryption (can be NULL) | ||
| * \param pwdlen length of password | ||
| * \param use_len destination for total length used (set after header is | ||
| * correctly read, so unless you get | ||
| * POLARSSL_ERR_PEM_BAD_INPUT_DATA or | ||
| * POLARSSL_ERR_PEM_NO_HEADER_FOOTER_PRESENT, use_len is | ||
| * the length to skip) | ||
| * | ||
| * \return 0 on success, ior a specific PEM error code | ||
| */ | ||
| int pem_read_buffer( pem_context *ctx, char *header, char *footer, | ||
| const unsigned char *data, | ||
| const unsigned char *pwd, | ||
| size_t pwdlen, size_t *use_len ); | ||
|
|
||
| /** | ||
| * \brief PEM context memory freeing | ||
| * | ||
| * \param ctx context to be freed | ||
| */ | ||
| void pem_free( pem_context *ctx ); | ||
|
|
||
| #ifdef __cplusplus | ||
| } | ||
| #endif | ||
|
|
||
| #endif /* pem.h */ |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,161 @@ | ||
| /** | ||
| * \file pkcs11.h | ||
| * | ||
| * \brief Wrapper for PKCS#11 library libpkcs11-helper | ||
| * | ||
| * \author Adriaan de Jong <dejong@fox-it.com> | ||
| * | ||
| * Copyright (C) 2006-2011, Brainspark B.V. | ||
| * | ||
| * This file is part of PolarSSL (http://www.polarssl.org) | ||
| * Lead Maintainer: Paul Bakker <polarssl_maintainer at polarssl.org> | ||
| * | ||
| * All rights reserved. | ||
| * | ||
| * This program is free software; you can redistribute it and/or modify | ||
| * it under the terms of the GNU General Public License as published by | ||
| * the Free Software Foundation; either version 2 of the License, or | ||
| * (at your option) any later version. | ||
| * | ||
| * This program is distributed in the hope that it will be useful, | ||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| * GNU General Public License for more details. | ||
| * | ||
| * You should have received a copy of the GNU General Public License along | ||
| * with this program; if not, write to the Free Software Foundation, Inc., | ||
| * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
| */ | ||
| #ifndef POLARSSL_PKCS11_H | ||
| #define POLARSSL_PKCS11_H | ||
|
|
||
| #include "config.h" | ||
|
|
||
| #if defined(POLARSSL_PKCS11_C) | ||
|
|
||
| #include "x509.h" | ||
|
|
||
| #include <pkcs11-helper-1.0/pkcs11h-certificate.h> | ||
|
|
||
| #if defined(_MSC_VER) && !defined(inline) | ||
| #define inline _inline | ||
| #else | ||
| #if defined(__ARMCC_VERSION) && !defined(inline) | ||
| #define inline __inline | ||
| #endif /* __ARMCC_VERSION */ | ||
| #endif /*_MSC_VER */ | ||
|
|
||
| /** | ||
| * Context for PKCS #11 private keys. | ||
| */ | ||
| typedef struct { | ||
| pkcs11h_certificate_t pkcs11h_cert; | ||
| int len; | ||
| } pkcs11_context; | ||
|
|
||
| /** | ||
| * Fill in a PolarSSL certificate, based on the given PKCS11 helper certificate. | ||
| * | ||
| * \param cert X.509 certificate to fill | ||
| * \param pkcs11h_cert PKCS #11 helper certificate | ||
| * | ||
| * \return 0 on success. | ||
| */ | ||
| int pkcs11_x509_cert_init( x509_cert *cert, pkcs11h_certificate_t pkcs11h_cert ); | ||
|
|
||
| /** | ||
| * Initialise a pkcs11_context, storing the given certificate. Note that the | ||
| * pkcs11_context will take over control of the certificate, freeing it when | ||
| * done. | ||
| * | ||
| * \param priv_key Private key structure to fill. | ||
| * \param pkcs11_cert PKCS #11 helper certificate | ||
| * | ||
| * \return 0 on success | ||
| */ | ||
| int pkcs11_priv_key_init( pkcs11_context *priv_key, | ||
| pkcs11h_certificate_t pkcs11_cert ); | ||
|
|
||
| /** | ||
| * Free the contents of the given private key context. Note that the structure | ||
| * itself is not freed. | ||
| * | ||
| * \param priv_key Private key structure to cleanup | ||
| */ | ||
| void pkcs11_priv_key_free( pkcs11_context *priv_key ); | ||
|
|
||
| /** | ||
| * \brief Do an RSA private key decrypt, then remove the message padding | ||
| * | ||
| * \param ctx PKCS #11 context | ||
| * \param mode must be RSA_PRIVATE, for compatibility with rsa.c's signature | ||
| * \param input buffer holding the encrypted data | ||
| * \param output buffer that will hold the plaintext | ||
| * \param olen will contain the plaintext length | ||
| * \param output_max_len maximum length of the output buffer | ||
| * | ||
| * \return 0 if successful, or an POLARSSL_ERR_RSA_XXX error code | ||
| * | ||
| * \note The output buffer must be as large as the size | ||
| * of ctx->N (eg. 128 bytes if RSA-1024 is used) otherwise | ||
| * an error is thrown. | ||
| */ | ||
| int pkcs11_decrypt( pkcs11_context *ctx, | ||
| int mode, size_t *olen, | ||
| const unsigned char *input, | ||
| unsigned char *output, | ||
| size_t output_max_len ); | ||
|
|
||
| /** | ||
| * \brief Do a private RSA to sign a message digest | ||
| * | ||
| * \param ctx PKCS #11 context | ||
| * \param mode must be RSA_PRIVATE, for compatibility with rsa.c's signature | ||
| * \param hash_id SIG_RSA_RAW, SIG_RSA_MD{2,4,5} or SIG_RSA_SHA{1,224,256,384,512} | ||
| * \param hashlen message digest length (for SIG_RSA_RAW only) | ||
| * \param hash buffer holding the message digest | ||
| * \param sig buffer that will hold the ciphertext | ||
| * | ||
| * \return 0 if the signing operation was successful, | ||
| * or an POLARSSL_ERR_RSA_XXX error code | ||
| * | ||
| * \note The "sig" buffer must be as large as the size | ||
| * of ctx->N (eg. 128 bytes if RSA-1024 is used). | ||
| */ | ||
| int pkcs11_sign( pkcs11_context *ctx, | ||
| int mode, | ||
| int hash_id, | ||
| unsigned int hashlen, | ||
| const unsigned char *hash, | ||
| unsigned char *sig ); | ||
|
|
||
| /** | ||
| * SSL/TLS wrappers for PKCS#11 functions | ||
| */ | ||
| static inline int ssl_pkcs11_decrypt( void *ctx, int mode, size_t *olen, | ||
| const unsigned char *input, unsigned char *output, | ||
| size_t output_max_len ) | ||
| { | ||
| return pkcs11_decrypt( (pkcs11_context *) ctx, mode, olen, input, output, | ||
| output_max_len ); | ||
| } | ||
|
|
||
| static inline int ssl_pkcs11_sign( void *ctx, | ||
| int (*f_rng)(void *, unsigned char *, size_t), void *p_rng, | ||
| int mode, int hash_id, unsigned int hashlen, | ||
| const unsigned char *hash, unsigned char *sig ) | ||
| { | ||
| ((void) f_rng); | ||
| ((void) p_rng); | ||
| return pkcs11_sign( (pkcs11_context *) ctx, mode, hash_id, | ||
| hashlen, hash, sig ); | ||
| } | ||
|
|
||
| static inline size_t ssl_pkcs11_key_len( void *ctx ) | ||
| { | ||
| return ( (pkcs11_context *) ctx )->len; | ||
| } | ||
|
|
||
| #endif /* POLARSSL_PKCS11_C */ | ||
|
|
||
| #endif /* POLARSSL_PKCS11_H */ |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,131 @@ | ||
| /** | ||
| * \file pkcs12.h | ||
| * | ||
| * \brief PKCS#12 Personal Information Exchange Syntax | ||
| * | ||
| * Copyright (C) 2006-2013, Brainspark B.V. | ||
| * | ||
| * This file is part of PolarSSL (http://www.polarssl.org) | ||
| * Lead Maintainer: Paul Bakker <polarssl_maintainer at polarssl.org> | ||
| * | ||
| * All rights reserved. | ||
| * | ||
| * This program is free software; you can redistribute it and/or modify | ||
| * it under the terms of the GNU General Public License as published by | ||
| * the Free Software Foundation; either version 2 of the License, or | ||
| * (at your option) any later version. | ||
| * | ||
| * This program is distributed in the hope that it will be useful, | ||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| * GNU General Public License for more details. | ||
| * | ||
| * You should have received a copy of the GNU General Public License along | ||
| * with this program; if not, write to the Free Software Foundation, Inc., | ||
| * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
| */ | ||
| #ifndef POLARSSL_PKCS12_H | ||
| #define POLARSSL_PKCS12_H | ||
|
|
||
| #include <string.h> | ||
|
|
||
| #include "md.h" | ||
| #include "cipher.h" | ||
| #include "asn1.h" | ||
|
|
||
| #define POLARSSL_ERR_PKCS12_BAD_INPUT_DATA -0x1F80 /**< Bad input parameters to function. */ | ||
| #define POLARSSL_ERR_PKCS12_FEATURE_UNAVAILABLE -0x1F00 /**< Feature not available, e.g. unsupported encryption scheme. */ | ||
| #define POLARSSL_ERR_PKCS12_PBE_INVALID_FORMAT -0x1E80 /**< PBE ASN.1 data not as expected. */ | ||
| #define POLARSSL_ERR_PKCS12_PASSWORD_MISMATCH -0x1E00 /**< Given private key password does not allow for correct decryption. */ | ||
|
|
||
| #define PKCS12_DERIVE_KEY 1 /*< encryption/decryption key */ | ||
| #define PKCS12_DERIVE_IV 2 /*< initialization vector */ | ||
| #define PKCS12_DERIVE_MAC_KEY 3 /*< integrity / MAC key */ | ||
|
|
||
| #define PKCS12_PBE_DECRYPT 0 | ||
| #define PKCS12_PBE_ENCRYPT 1 | ||
|
|
||
| /* | ||
| * PKCS#12 PBE types | ||
| */ | ||
| #define OID_PKCS12 "\x2a\x86\x48\x86\xf7\x0d\x01\x0c" | ||
| #define OID_PKCS12_PBE_SHA1_RC4_128 OID_PKCS12 "\x01\x01" | ||
| #define OID_PKCS12_PBE_SHA1_DES3_EDE_CBC OID_PKCS12 "\x01\x03" | ||
| #define OID_PKCS12_PBE_SHA1_DES2_EDE_CBC OID_PKCS12 "\x01\x04" | ||
|
|
||
| #ifdef __cplusplus | ||
| extern "C" { | ||
| #endif | ||
|
|
||
| /** | ||
| * \brief PKCS12 Password Based function (encryption / decryption) | ||
| * for pbeWithSHAAnd128BitRC4 | ||
| * | ||
| * \param pbe_params an ASN1 buffer containing the pkcs-12PbeParams structure | ||
| * \param mode either PKCS12_PBE_ENCRYPT or PKCS12_PBE_DECRYPT | ||
| * \param pwd the password used (may be NULL if no password is used) | ||
| * \param pwdlen length of the password (may be 0) | ||
| * \param input the input data | ||
| * \param len data length | ||
| * \param output the output buffer | ||
| * | ||
| * \return 0 if successful, or a PolarSSL error code | ||
| */ | ||
| int pkcs12_pbe_sha1_rc4_128( asn1_buf *pbe_params, int mode, | ||
| const unsigned char *pwd, size_t pwdlen, | ||
| const unsigned char *input, size_t len, | ||
| unsigned char *output ); | ||
|
|
||
| /** | ||
| * \brief PKCS12 Password Based function (encryption / decryption) | ||
| * for cipher-based and md-based PBE's | ||
| * | ||
| * \param pbe_params an ASN1 buffer containing the pkcs-12PbeParams structure | ||
| * \param mode either PKCS12_PBE_ENCRYPT or PKCS12_PBE_DECRYPT | ||
| * \param cipher_type the cipher used | ||
| * \param md_type the md used | ||
| * \param pwd the password used (may be NULL if no password is used) | ||
| * \param pwdlen length of the password (may be 0) | ||
| * \param input the input data | ||
| * \param len data length | ||
| * \param output the output buffer | ||
| * | ||
| * \return 0 if successful, or a PolarSSL error code | ||
| */ | ||
| int pkcs12_pbe( asn1_buf *pbe_params, int mode, | ||
| cipher_type_t cipher_type, md_type_t md_type, | ||
| const unsigned char *pwd, size_t pwdlen, | ||
| const unsigned char *input, size_t len, | ||
| unsigned char *output ); | ||
|
|
||
| /** | ||
| * \brief The PKCS#12 derivation function uses a password and a salt | ||
| * to produce pseudo-random bits for a particular "purpose". | ||
| * | ||
| * Depending on the given id, this function can produce an | ||
| * encryption/decryption key, an nitialization vector or an | ||
| * integrity key. | ||
| * | ||
| * \param data buffer to store the derived data in | ||
| * \param datalen length to fill | ||
| * \param pwd password to use (may be NULL if no password is used) | ||
| * \param pwdlen length of the password (may be 0) | ||
| * \param salt salt buffer to use | ||
| * \param saltlen length of the salt | ||
| * \param md md type to use during the derivation | ||
| * \param id id that describes the purpose (can be PKCS12_DERIVE_KEY, | ||
| * PKCS12_DERIVE_IV or PKCS12_DERIVE_MAC_KEY) | ||
| * \param iterations number of iterations | ||
| * | ||
| * \return 0 if successful, or a MD, BIGNUM type error. | ||
| */ | ||
| int pkcs12_derivation( unsigned char *data, size_t datalen, | ||
| const unsigned char *pwd, size_t pwdlen, | ||
| const unsigned char *salt, size_t saltlen, | ||
| md_type_t md, int id, int iterations ); | ||
|
|
||
| #ifdef __cplusplus | ||
| } | ||
| #endif | ||
|
|
||
| #endif /* pkcs12.h */ |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,122 @@ | ||
| /** | ||
| * \file pkcs#5.h | ||
| * | ||
| * \brief PKCS#5 functions | ||
| * | ||
| * \author Mathias Olsson <mathias@kompetensum.com> | ||
| * | ||
| * Copyright (C) 2006-2013, Brainspark B.V. | ||
| * | ||
| * This file is part of PolarSSL (http://www.polarssl.org) | ||
| * Lead Maintainer: Paul Bakker <polarssl_maintainer at polarssl.org> | ||
| * | ||
| * All rights reserved. | ||
| * | ||
| * This program is free software; you can redistribute it and/or modify | ||
| * it under the terms of the GNU General Public License as published by | ||
| * the Free Software Foundation; either version 2 of the License, or | ||
| * (at your option) any later version. | ||
| * | ||
| * This program is distributed in the hope that it will be useful, | ||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| * GNU General Public License for more details. | ||
| * | ||
| * You should have received a copy of the GNU General Public License along | ||
| * with this program; if not, write to the Free Software Foundation, Inc., | ||
| * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
| */ | ||
| #ifndef POLARSSL_PKCS5_H | ||
| #define POLARSSL_PKCS5_H | ||
|
|
||
| #include <string.h> | ||
|
|
||
| #include "asn1.h" | ||
| #include "md.h" | ||
|
|
||
| #ifdef _MSC_VER | ||
| #include <basetsd.h> | ||
| typedef UINT32 uint32_t; | ||
| #else | ||
| #include <inttypes.h> | ||
| #endif | ||
|
|
||
| #define POLARSSL_ERR_PKCS5_BAD_INPUT_DATA -0x3f80 /**< Bad input parameters to function. */ | ||
| #define POLARSSL_ERR_PKCS5_INVALID_FORMAT -0x3f00 /**< Unexpected ASN.1 data. */ | ||
| #define POLARSSL_ERR_PKCS5_FEATURE_UNAVAILABLE -0x3e80 /**< Requested encryption or digest alg not available. */ | ||
| #define POLARSSL_ERR_PKCS5_PASSWORD_MISMATCH -0x3e00 /**< Given private key password does not allow for correct decryption. */ | ||
|
|
||
| #define PKCS5_DECRYPT 0 | ||
| #define PKCS5_ENCRYPT 1 | ||
|
|
||
| /* | ||
| * PKCS#5 OIDs | ||
| */ | ||
| #define OID_PKCS5 "\x2a\x86\x48\x86\xf7\x0d\x01\x05" | ||
| #define OID_PKCS5_PBES2 OID_PKCS5 "\x0d" | ||
| #define OID_PKCS5_PBKDF2 OID_PKCS5 "\x0c" | ||
|
|
||
| /* | ||
| * Encryption Algorithm OIDs | ||
| */ | ||
| #define OID_DES_CBC "\x2b\x0e\x03\x02\x07" | ||
| #define OID_DES_EDE3_CBC "\x2a\x86\x48\x86\xf7\x0d\x03\x07" | ||
|
|
||
| /* | ||
| * Digest Algorithm OIDs | ||
| */ | ||
| #define OID_HMAC_SHA1 "\x2a\x86\x48\x86\xf7\x0d\x02\x07" | ||
|
|
||
| #ifdef __cplusplus | ||
| extern "C" { | ||
| #endif | ||
|
|
||
| /** | ||
| * \brief PKCS#5 PBES2 function | ||
| * | ||
| * \param pbe_params the ASN.1 algorithm parameters | ||
| * \param mode either PKCS5_DECRYPT or PKCS5_ENCRYPT | ||
| * \param pwd password to use when generating key | ||
| * \param plen length of password | ||
| * \param data data to process | ||
| * \param datalen length of data | ||
| * \param output output buffer | ||
| * | ||
| * \returns 0 on success, or a PolarSSL error code if verification fails. | ||
| */ | ||
| int pkcs5_pbes2( asn1_buf *pbe_params, int mode, | ||
| const unsigned char *pwd, size_t pwdlen, | ||
| const unsigned char *data, size_t datalen, | ||
| unsigned char *output ); | ||
|
|
||
| /** | ||
| * \brief PKCS#5 PBKDF2 using HMAC | ||
| * | ||
| * \param ctx Generic HMAC context | ||
| * \param password Password to use when generating key | ||
| * \param plen Length of password | ||
| * \param salt Salt to use when generating key | ||
| * \param slen Length of salt | ||
| * \param iteration_count Iteration count | ||
| * \param key_length Length of generated key | ||
| * \param output Generated key. Must be at least as big as key_length | ||
| * | ||
| * \returns 0 on success, or a PolarSSL error code if verification fails. | ||
| */ | ||
| int pkcs5_pbkdf2_hmac( md_context_t *ctx, const unsigned char *password, | ||
| size_t plen, const unsigned char *salt, size_t slen, | ||
| unsigned int iteration_count, | ||
| uint32_t key_length, unsigned char *output ); | ||
|
|
||
| /** | ||
| * \brief Checkup routine | ||
| * | ||
| * \return 0 if successful, or 1 if the test failed | ||
| */ | ||
| int pkcs5_self_test( int verbose ); | ||
|
|
||
| #ifdef __cplusplus | ||
| } | ||
| #endif | ||
|
|
||
| #endif /* pkcs5.h */ |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,188 @@ | ||
| /** | ||
| * \file sha2.h | ||
| * | ||
| * \brief SHA-224 and SHA-256 cryptographic hash function | ||
| * | ||
| * Copyright (C) 2006-2013, Brainspark B.V. | ||
| * | ||
| * This file is part of PolarSSL (http://www.polarssl.org) | ||
| * Lead Maintainer: Paul Bakker <polarssl_maintainer at polarssl.org> | ||
| * | ||
| * All rights reserved. | ||
| * | ||
| * This program is free software; you can redistribute it and/or modify | ||
| * it under the terms of the GNU General Public License as published by | ||
| * the Free Software Foundation; either version 2 of the License, or | ||
| * (at your option) any later version. | ||
| * | ||
| * This program is distributed in the hope that it will be useful, | ||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| * GNU General Public License for more details. | ||
| * | ||
| * You should have received a copy of the GNU General Public License along | ||
| * with this program; if not, write to the Free Software Foundation, Inc., | ||
| * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
| */ | ||
| #ifndef POLARSSL_SHA2_H | ||
| #define POLARSSL_SHA2_H | ||
|
|
||
| #include "config.h" | ||
|
|
||
| #include <string.h> | ||
|
|
||
| #ifdef _MSC_VER | ||
| #include <basetsd.h> | ||
| typedef UINT32 uint32_t; | ||
| #else | ||
| #include <inttypes.h> | ||
| #endif | ||
|
|
||
| #define POLARSSL_ERR_SHA2_FILE_IO_ERROR -0x0078 /**< Read/write error in file. */ | ||
|
|
||
| #if !defined(POLARSSL_SHA2_ALT) | ||
| // Regular implementation | ||
| // | ||
|
|
||
| /** | ||
| * \brief SHA-256 context structure | ||
| */ | ||
| typedef struct | ||
| { | ||
| uint32_t total[2]; /*!< number of bytes processed */ | ||
| uint32_t state[8]; /*!< intermediate digest state */ | ||
| unsigned char buffer[64]; /*!< data block being processed */ | ||
|
|
||
| unsigned char ipad[64]; /*!< HMAC: inner padding */ | ||
| unsigned char opad[64]; /*!< HMAC: outer padding */ | ||
| int is224; /*!< 0 => SHA-256, else SHA-224 */ | ||
| } | ||
| sha2_context; | ||
|
|
||
| #ifdef __cplusplus | ||
| extern "C" { | ||
| #endif | ||
|
|
||
| /** | ||
| * \brief SHA-256 context setup | ||
| * | ||
| * \param ctx context to be initialized | ||
| * \param is224 0 = use SHA256, 1 = use SHA224 | ||
| */ | ||
| void sha2_starts( sha2_context *ctx, int is224 ); | ||
|
|
||
| /** | ||
| * \brief SHA-256 process buffer | ||
| * | ||
| * \param ctx SHA-256 context | ||
| * \param input buffer holding the data | ||
| * \param ilen length of the input data | ||
| */ | ||
| void sha2_update( sha2_context *ctx, const unsigned char *input, size_t ilen ); | ||
|
|
||
| /** | ||
| * \brief SHA-256 final digest | ||
| * | ||
| * \param ctx SHA-256 context | ||
| * \param output SHA-224/256 checksum result | ||
| */ | ||
| void sha2_finish( sha2_context *ctx, unsigned char output[32] ); | ||
|
|
||
| /* Internal use */ | ||
| void sha2_process( sha2_context *ctx, const unsigned char data[64] ); | ||
|
|
||
| #ifdef __cplusplus | ||
| } | ||
| #endif | ||
|
|
||
| #else /* POLARSSL_SHA2_ALT */ | ||
| #include "sha2_alt.h" | ||
| #endif /* POLARSSL_SHA2_ALT */ | ||
|
|
||
| #ifdef __cplusplus | ||
| extern "C" { | ||
| #endif | ||
|
|
||
| /** | ||
| * \brief Output = SHA-256( input buffer ) | ||
| * | ||
| * \param input buffer holding the data | ||
| * \param ilen length of the input data | ||
| * \param output SHA-224/256 checksum result | ||
| * \param is224 0 = use SHA256, 1 = use SHA224 | ||
| */ | ||
| void sha2( const unsigned char *input, size_t ilen, | ||
| unsigned char output[32], int is224 ); | ||
|
|
||
| /** | ||
| * \brief Output = SHA-256( file contents ) | ||
| * | ||
| * \param path input file name | ||
| * \param output SHA-224/256 checksum result | ||
| * \param is224 0 = use SHA256, 1 = use SHA224 | ||
| * | ||
| * \return 0 if successful, or POLARSSL_ERR_SHA2_FILE_IO_ERROR | ||
| */ | ||
| int sha2_file( const char *path, unsigned char output[32], int is224 ); | ||
|
|
||
| /** | ||
| * \brief SHA-256 HMAC context setup | ||
| * | ||
| * \param ctx HMAC context to be initialized | ||
| * \param key HMAC secret key | ||
| * \param keylen length of the HMAC key | ||
| * \param is224 0 = use SHA256, 1 = use SHA224 | ||
| */ | ||
| void sha2_hmac_starts( sha2_context *ctx, const unsigned char *key, size_t keylen, | ||
| int is224 ); | ||
|
|
||
| /** | ||
| * \brief SHA-256 HMAC process buffer | ||
| * | ||
| * \param ctx HMAC context | ||
| * \param input buffer holding the data | ||
| * \param ilen length of the input data | ||
| */ | ||
| void sha2_hmac_update( sha2_context *ctx, const unsigned char *input, size_t ilen ); | ||
|
|
||
| /** | ||
| * \brief SHA-256 HMAC final digest | ||
| * | ||
| * \param ctx HMAC context | ||
| * \param output SHA-224/256 HMAC checksum result | ||
| */ | ||
| void sha2_hmac_finish( sha2_context *ctx, unsigned char output[32] ); | ||
|
|
||
| /** | ||
| * \brief SHA-256 HMAC context reset | ||
| * | ||
| * \param ctx HMAC context to be reset | ||
| */ | ||
| void sha2_hmac_reset( sha2_context *ctx ); | ||
|
|
||
| /** | ||
| * \brief Output = HMAC-SHA-256( hmac key, input buffer ) | ||
| * | ||
| * \param key HMAC secret key | ||
| * \param keylen length of the HMAC key | ||
| * \param input buffer holding the data | ||
| * \param ilen length of the input data | ||
| * \param output HMAC-SHA-224/256 result | ||
| * \param is224 0 = use SHA256, 1 = use SHA224 | ||
| */ | ||
| void sha2_hmac( const unsigned char *key, size_t keylen, | ||
| const unsigned char *input, size_t ilen, | ||
| unsigned char output[32], int is224 ); | ||
|
|
||
| /** | ||
| * \brief Checkup routine | ||
| * | ||
| * \return 0 if successful, or 1 if the test failed | ||
| */ | ||
| int sha2_self_test( int verbose ); | ||
|
|
||
| #ifdef __cplusplus | ||
| } | ||
| #endif | ||
|
|
||
| #endif /* sha2.h */ |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,186 @@ | ||
| /** | ||
| * \file sha4.h | ||
| * | ||
| * \brief SHA-384 and SHA-512 cryptographic hash function | ||
| * | ||
| * Copyright (C) 2006-2013, Brainspark B.V. | ||
| * | ||
| * This file is part of PolarSSL (http://www.polarssl.org) | ||
| * Lead Maintainer: Paul Bakker <polarssl_maintainer at polarssl.org> | ||
| * | ||
| * All rights reserved. | ||
| * | ||
| * This program is free software; you can redistribute it and/or modify | ||
| * it under the terms of the GNU General Public License as published by | ||
| * the Free Software Foundation; either version 2 of the License, or | ||
| * (at your option) any later version. | ||
| * | ||
| * This program is distributed in the hope that it will be useful, | ||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| * GNU General Public License for more details. | ||
| * | ||
| * You should have received a copy of the GNU General Public License along | ||
| * with this program; if not, write to the Free Software Foundation, Inc., | ||
| * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
| */ | ||
| #ifndef POLARSSL_SHA4_H | ||
| #define POLARSSL_SHA4_H | ||
|
|
||
| #include "config.h" | ||
|
|
||
| #include <string.h> | ||
|
|
||
| #if defined(_MSC_VER) || defined(__WATCOMC__) | ||
| #define UL64(x) x##ui64 | ||
| typedef unsigned __int64 uint64_t; | ||
| #else | ||
| #include <inttypes.h> | ||
| #define UL64(x) x##ULL | ||
| #endif | ||
|
|
||
| #define POLARSSL_ERR_SHA4_FILE_IO_ERROR -0x007A /**< Read/write error in file. */ | ||
|
|
||
| #if !defined(POLARSSL_SHA1_ALT) | ||
| // Regular implementation | ||
| // | ||
|
|
||
| /** | ||
| * \brief SHA-512 context structure | ||
| */ | ||
| typedef struct | ||
| { | ||
| uint64_t total[2]; /*!< number of bytes processed */ | ||
| uint64_t state[8]; /*!< intermediate digest state */ | ||
| unsigned char buffer[128]; /*!< data block being processed */ | ||
|
|
||
| unsigned char ipad[128]; /*!< HMAC: inner padding */ | ||
| unsigned char opad[128]; /*!< HMAC: outer padding */ | ||
| int is384; /*!< 0 => SHA-512, else SHA-384 */ | ||
| } | ||
| sha4_context; | ||
|
|
||
| #ifdef __cplusplus | ||
| extern "C" { | ||
| #endif | ||
|
|
||
| /** | ||
| * \brief SHA-512 context setup | ||
| * | ||
| * \param ctx context to be initialized | ||
| * \param is384 0 = use SHA512, 1 = use SHA384 | ||
| */ | ||
| void sha4_starts( sha4_context *ctx, int is384 ); | ||
|
|
||
| /** | ||
| * \brief SHA-512 process buffer | ||
| * | ||
| * \param ctx SHA-512 context | ||
| * \param input buffer holding the data | ||
| * \param ilen length of the input data | ||
| */ | ||
| void sha4_update( sha4_context *ctx, const unsigned char *input, size_t ilen ); | ||
|
|
||
| /** | ||
| * \brief SHA-512 final digest | ||
| * | ||
| * \param ctx SHA-512 context | ||
| * \param output SHA-384/512 checksum result | ||
| */ | ||
| void sha4_finish( sha4_context *ctx, unsigned char output[64] ); | ||
|
|
||
| #ifdef __cplusplus | ||
| } | ||
| #endif | ||
|
|
||
| #else /* POLARSSL_SHA4_ALT */ | ||
| #include "sha4_alt.h" | ||
| #endif /* POLARSSL_SHA4_ALT */ | ||
|
|
||
| #ifdef __cplusplus | ||
| extern "C" { | ||
| #endif | ||
|
|
||
| /** | ||
| * \brief Output = SHA-512( input buffer ) | ||
| * | ||
| * \param input buffer holding the data | ||
| * \param ilen length of the input data | ||
| * \param output SHA-384/512 checksum result | ||
| * \param is384 0 = use SHA512, 1 = use SHA384 | ||
| */ | ||
| void sha4( const unsigned char *input, size_t ilen, | ||
| unsigned char output[64], int is384 ); | ||
|
|
||
| /** | ||
| * \brief Output = SHA-512( file contents ) | ||
| * | ||
| * \param path input file name | ||
| * \param output SHA-384/512 checksum result | ||
| * \param is384 0 = use SHA512, 1 = use SHA384 | ||
| * | ||
| * \return 0 if successful, or POLARSSL_ERR_SHA4_FILE_IO_ERROR | ||
| */ | ||
| int sha4_file( const char *path, unsigned char output[64], int is384 ); | ||
|
|
||
| /** | ||
| * \brief SHA-512 HMAC context setup | ||
| * | ||
| * \param ctx HMAC context to be initialized | ||
| * \param is384 0 = use SHA512, 1 = use SHA384 | ||
| * \param key HMAC secret key | ||
| * \param keylen length of the HMAC key | ||
| */ | ||
| void sha4_hmac_starts( sha4_context *ctx, const unsigned char *key, size_t keylen, | ||
| int is384 ); | ||
|
|
||
| /** | ||
| * \brief SHA-512 HMAC process buffer | ||
| * | ||
| * \param ctx HMAC context | ||
| * \param input buffer holding the data | ||
| * \param ilen length of the input data | ||
| */ | ||
| void sha4_hmac_update( sha4_context *ctx, const unsigned char *input, size_t ilen ); | ||
|
|
||
| /** | ||
| * \brief SHA-512 HMAC final digest | ||
| * | ||
| * \param ctx HMAC context | ||
| * \param output SHA-384/512 HMAC checksum result | ||
| */ | ||
| void sha4_hmac_finish( sha4_context *ctx, unsigned char output[64] ); | ||
|
|
||
| /** | ||
| * \brief SHA-512 HMAC context reset | ||
| * | ||
| * \param ctx HMAC context to be reset | ||
| */ | ||
| void sha4_hmac_reset( sha4_context *ctx ); | ||
|
|
||
| /** | ||
| * \brief Output = HMAC-SHA-512( hmac key, input buffer ) | ||
| * | ||
| * \param key HMAC secret key | ||
| * \param keylen length of the HMAC key | ||
| * \param input buffer holding the data | ||
| * \param ilen length of the input data | ||
| * \param output HMAC-SHA-384/512 result | ||
| * \param is384 0 = use SHA512, 1 = use SHA384 | ||
| */ | ||
| void sha4_hmac( const unsigned char *key, size_t keylen, | ||
| const unsigned char *input, size_t ilen, | ||
| unsigned char output[64], int is384 ); | ||
|
|
||
| /** | ||
| * \brief Checkup routine | ||
| * | ||
| * \return 0 if successful, or 1 if the test failed | ||
| */ | ||
| int sha4_self_test( int verbose ); | ||
|
|
||
| #ifdef __cplusplus | ||
| } | ||
| #endif | ||
|
|
||
| #endif /* sha4.h */ |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,119 @@ | ||
| /** | ||
| * \file ssl_cache.h | ||
| * | ||
| * \brief SSL session cache implementation | ||
| * | ||
| * Copyright (C) 2006-2013, Brainspark B.V. | ||
| * | ||
| * This file is part of PolarSSL (http://www.polarssl.org) | ||
| * Lead Maintainer: Paul Bakker <polarssl_maintainer at polarssl.org> | ||
| * | ||
| * All rights reserved. | ||
| * | ||
| * This program is free software; you can redistribute it and/or modify | ||
| * it under the terms of the GNU General Public License as published by | ||
| * the Free Software Foundation; either version 2 of the License, or | ||
| * (at your option) any later version. | ||
| * | ||
| * This program is distributed in the hope that it will be useful, | ||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| * GNU General Public License for more details. | ||
| * | ||
| * You should have received a copy of the GNU General Public License along | ||
| * with this program; if not, write to the Free Software Foundation, Inc., | ||
| * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
| */ | ||
| #ifndef POLARSSL_SSL_CACHE_H | ||
| #define POLARSSL_SSL_CACHE_H | ||
|
|
||
| #include "ssl.h" | ||
|
|
||
| #if !defined(POLARSSL_CONFIG_OPTIONS) | ||
| #define SSL_CACHE_DEFAULT_TIMEOUT 86400 /*!< 1 day */ | ||
| #define SSL_CACHE_DEFAULT_MAX_ENTRIES 50 /*!< Maximum entries in cache */ | ||
| #endif /* !POLARSSL_CONFIG_OPTIONS */ | ||
|
|
||
| #ifdef __cplusplus | ||
| extern "C" { | ||
| #endif | ||
|
|
||
| typedef struct _ssl_cache_context ssl_cache_context; | ||
| typedef struct _ssl_cache_entry ssl_cache_entry; | ||
|
|
||
| /** | ||
| * \brief This structure is used for storing cache entries | ||
| */ | ||
| struct _ssl_cache_entry | ||
| { | ||
| time_t timestamp; /*!< entry timestamp */ | ||
| ssl_session session; /*!< entry session */ | ||
| x509_buf peer_cert; /*!< entry peer_cert */ | ||
| ssl_cache_entry *next; /*!< chain pointer */ | ||
| }; | ||
|
|
||
| /** | ||
| * \brief Cache context | ||
| */ | ||
| struct _ssl_cache_context | ||
| { | ||
| ssl_cache_entry *chain; /*!< start of the chain */ | ||
| int timeout; /*!< cache entry timeout */ | ||
| int max_entries; /*!< maximum entries */ | ||
| }; | ||
|
|
||
| /** | ||
| * \brief Initialize an SSL cache context | ||
| * | ||
| * \param cache SSL cache context | ||
| */ | ||
| void ssl_cache_init( ssl_cache_context *cache ); | ||
|
|
||
| /** | ||
| * \brief Cache get callback implementation | ||
| * | ||
| * \param data SSL cache context | ||
| * \param session session to retrieve entry for | ||
| */ | ||
| int ssl_cache_get( void *data, ssl_session *session ); | ||
|
|
||
| /** | ||
| * \brief Cache set callback implementation | ||
| * | ||
| * \param data SSL cache context | ||
| * \param session session to store entry for | ||
| */ | ||
| int ssl_cache_set( void *data, const ssl_session *session ); | ||
|
|
||
| /** | ||
| * \brief Set the cache timeout | ||
| * (Default: SSL_CACHE_DEFAULT_TIMEOUT (1 day)) | ||
| * | ||
| * A timeout of 0 indicates no timeout. | ||
| * | ||
| * \param cache SSL cache context | ||
| * \param timeout cache entry timeout | ||
| */ | ||
| void ssl_cache_set_timeout( ssl_cache_context *cache, int timeout ); | ||
|
|
||
| /** | ||
| * \brief Set the cache timeout | ||
| * (Default: SSL_CACHE_DEFAULT_MAX_ENTRIES (50)) | ||
| * | ||
| * \param cache SSL cache context | ||
| * \param max cache entry maximum | ||
| */ | ||
| void ssl_cache_set_max_entries( ssl_cache_context *cache, int max ); | ||
|
|
||
| /** | ||
| * \brief Free referenced items in a cache context and clear memory | ||
| * | ||
| * \param cache SSL cache context | ||
| */ | ||
| void ssl_cache_free( ssl_cache_context *cache ); | ||
|
|
||
| #ifdef __cplusplus | ||
| } | ||
| #endif | ||
|
|
||
| #endif /* ssl_cache.h */ |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,75 @@ | ||
| /** | ||
| * \file timing.h | ||
| * | ||
| * \brief Portable interface to the CPU cycle counter | ||
| * | ||
| * Copyright (C) 2006-2010, Brainspark B.V. | ||
| * | ||
| * This file is part of PolarSSL (http://www.polarssl.org) | ||
| * Lead Maintainer: Paul Bakker <polarssl_maintainer at polarssl.org> | ||
| * | ||
| * All rights reserved. | ||
| * | ||
| * This program is free software; you can redistribute it and/or modify | ||
| * it under the terms of the GNU General Public License as published by | ||
| * the Free Software Foundation; either version 2 of the License, or | ||
| * (at your option) any later version. | ||
| * | ||
| * This program is distributed in the hope that it will be useful, | ||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| * GNU General Public License for more details. | ||
| * | ||
| * You should have received a copy of the GNU General Public License along | ||
| * with this program; if not, write to the Free Software Foundation, Inc., | ||
| * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
| */ | ||
| #ifndef POLARSSL_TIMING_H | ||
| #define POLARSSL_TIMING_H | ||
|
|
||
| /** | ||
| * \brief timer structure | ||
| */ | ||
| struct hr_time | ||
| { | ||
| unsigned char opaque[32]; | ||
| }; | ||
|
|
||
| #ifdef __cplusplus | ||
| extern "C" { | ||
| #endif | ||
|
|
||
| extern volatile int alarmed; | ||
|
|
||
| /** | ||
| * \brief Return the CPU cycle counter value | ||
| */ | ||
| unsigned long hardclock( void ); | ||
|
|
||
| /** | ||
| * \brief Return the elapsed time in milliseconds | ||
| * | ||
| * \param val points to a timer structure | ||
| * \param reset if set to 1, the timer is restarted | ||
| */ | ||
| unsigned long get_timer( struct hr_time *val, int reset ); | ||
|
|
||
| /** | ||
| * \brief Setup an alarm clock | ||
| * | ||
| * \param seconds delay before the "alarmed" flag is set | ||
| */ | ||
| void set_alarm( int seconds ); | ||
|
|
||
| /** | ||
| * \brief Sleep for a certain amount of time | ||
| * | ||
| * \param milliseconds delay in milliseconds | ||
| */ | ||
| void m_sleep( int milliseconds ); | ||
|
|
||
| #ifdef __cplusplus | ||
| } | ||
| #endif | ||
|
|
||
| #endif /* timing.h */ |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,81 @@ | ||
| /** | ||
| * \file version.h | ||
| * | ||
| * \brief Run-time version information | ||
| * | ||
| * Copyright (C) 2006-2012, Brainspark B.V. | ||
| * | ||
| * This file is part of PolarSSL (http://www.polarssl.org) | ||
| * Lead Maintainer: Paul Bakker <polarssl_maintainer at polarssl.org> | ||
| * | ||
| * All rights reserved. | ||
| * | ||
| * This program is free software; you can redistribute it and/or modify | ||
| * it under the terms of the GNU General Public License as published by | ||
| * the Free Software Foundation; either version 2 of the License, or | ||
| * (at your option) any later version. | ||
| * | ||
| * This program is distributed in the hope that it will be useful, | ||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| * GNU General Public License for more details. | ||
| * | ||
| * You should have received a copy of the GNU General Public License along | ||
| * with this program; if not, write to the Free Software Foundation, Inc., | ||
| * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | ||
| */ | ||
| /* | ||
| * This set of compile-time defines and run-time variables can be used to | ||
| * determine the version number of the PolarSSL library used. | ||
| */ | ||
| #ifndef POLARSSL_VERSION_H | ||
| #define POLARSSL_VERSION_H | ||
|
|
||
| #include "config.h" | ||
|
|
||
| /** | ||
| * The version number x.y.z is split into three parts. | ||
| * Major, Minor, Patchlevel | ||
| */ | ||
| #define POLARSSL_VERSION_MAJOR 1 | ||
| #define POLARSSL_VERSION_MINOR 2 | ||
| #define POLARSSL_VERSION_PATCH 8 | ||
|
|
||
| /** | ||
| * The single version number has the following structure: | ||
| * MMNNPP00 | ||
| * Major version | Minor version | Patch version | ||
| */ | ||
| #define POLARSSL_VERSION_NUMBER 0x01020800 | ||
| #define POLARSSL_VERSION_STRING "1.2.8" | ||
| #define POLARSSL_VERSION_STRING_FULL "PolarSSL 1.2.8" | ||
|
|
||
| #if defined(POLARSSL_VERSION_C) | ||
|
|
||
| /** | ||
| * Get the version number. | ||
| * | ||
| * \return The constructed version number in the format | ||
| * MMNNPP00 (Major, Minor, Patch). | ||
| */ | ||
| unsigned int version_get_number( void ); | ||
|
|
||
| /** | ||
| * Get the version string ("x.y.z"). | ||
| * | ||
| * \param string The string that will receive the value. | ||
| * (Should be at least 9 bytes in size) | ||
| */ | ||
| void version_get_string( char *string ); | ||
|
|
||
| /** | ||
| * Get the full version string ("PolarSSL x.y.z"). | ||
| * | ||
| * \param string The string that will receive the value. | ||
| * (Should be at least 18 bytes in size) | ||
| */ | ||
| void version_get_string_full( char *string ); | ||
|
|
||
| #endif /* POLARSSL_VERSION_C */ | ||
|
|
||
| #endif /* version.h */ |