/* Copyright (C) 2015-2020, Dirk Krause SPDX-License-Identifier: BSD-3-Clause */ /* WARNING: This file was generated by the dkct program (see http://dktools.sourceforge.net/ for details). Changes you make here will be lost if dkct is run again! You should modify the original source and run dkct on it. Original source: dk4md.ctr */ #ifndef DK4MD_H_INCLUDED /** Avoid multiple inclusions. */ #define DK4MD_H_INCLUDED 1 #line 9 "dk4md.ctr" /** @file dk4md.h Message digests. This module provides a simple API to use the message digest routines from the OpenSSL library. This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org/). This product includes cryptographic software written by Eric Young (eay@cryptsoft.com). This product includes software written by Tim Hudson (tjh@cryptsoft.com). */ #ifndef DK4CONF_H_INCLUDED #if DK4_BUILDING_DKTOOLS4 #include "dk4conf.h" #else #include #endif #endif #ifndef DK4BINENC_H_INCLUDED #if DK4_BUILDING_DKTOOLS4 #include "dk4binenc.h" #else #include #endif #endif #ifndef DK4ERROR_H_INCLUDED #if DK4_BUILDING_DKTOOLS4 #include "dk4error.h" #else #include #endif #endif #if DK4_HAVE_OPENSSL_MD5_H #ifndef OPENSSL_MD5_H_INCLUDED #include #define OPENSSL_MD5_H_INCLUDED 1 #endif #endif #if DK4_HAVE_OPENSSL_SHA_H #ifndef OPENSSL_SHA_H_INCLUDED #include #define OPENSSL_SHA_H_INCLUDED 1 #endif #endif #if DK4_HAVE_OPENSSL_RIPEMD_H #ifndef OPENSSL_RIPEMD_H_INCLUDED #include #define OPENSSL_RIPEMD_H_INCLUDED 1 #endif #endif /* At the moment the largest supported message digest is SHA-512, producing 512 bit (64 bytes) of binary data. */ enum { /** Size of largest binary message digest. */ DK4MD_BUFFER_SIZE_BINARY = 64 }; enum { /** Size of largest text message digest, 2 * DK4MD_BUFFER_SIZE_BINARY + 16. */ DK4MD_BUFFER_SIZE_TEXT = 144 }; /** Message digest creator. */ typedef struct { char obuf[DK4MD_BUFFER_SIZE_TEXT]; /**< Result buffer. */ unsigned char bbuf[16 + DK4MD_BUFFER_SIZE_BINARY]; /**< Binary buffer. */ union { #if DK4_HAVE_SHA384 || DK4_HAVE_SHA512 SHA512_CTX sha512; /**< SHA-512, SHA-384. */ #endif #if DK4_HAVE_SHA224 || DK4_HAVE_SHA256 SHA256_CTX sha256; /**< SHA-256, SHA-224. */ #endif #if DK4_HAVE_OPENSSL_SHA_H SHA_CTX sha; /**< SHA-1. */ #endif #if DK4_HAVE_OPENSSL_RIPEMD_H RIPEMD160_CTX ripemd160; /**< RIPEMD-160. */ #endif #if DK4_HAVE_OPENSSL_MD5_H MD5_CTX md5; /**< MD5. */ #endif int dummy; /**< If none of the above defined. */ } ctx; /**< Message digest context. */ int mdtype; /**< Message digest type. */ int encoding; /**< Required output encoding. */ } dk4_md_ctx_t; #ifdef __cplusplus extern "C" { #endif /** Initialize CTX structure. @param ctxptr Structure to initialize. @param mdt Message digest type, one from: DK4_MD_MD5, DK4_MD_SHA1, DK4_MD_SHA224, DK4_MD_SHA256, DK4_MD_SHA384, DK4_MD_SHA512, or DK4_MD_RIPEMD_160. @param mde Message digest encoding, one from: DK4_BINARY_TO_TEXT_ENCODING_HEX or DK4_BINARY_TO_TEXT_ENCODING_A85. @param erp Error report, may be NULL. @return 1 on success, 0 on error. Error codes: - DK4_E_INVALID_ARGUMENTS
if ctxptr is NULL, - DK4_E_SYNTAX
if an invalid value is specified for mdt or mde, - DK4_E_NOT_SUPPORTED
if the specified message digest type is not available. - DK4_E_SYSTEM
if the underlaying library indicated an error.
Note: iDetails is not set to an errno value. */ int dk4md_ctx_init(dk4_md_ctx_t *ctxptr, int mdt, int mde, dk4_er_t *erp); /** Add bytes to CTX. @param ctxptr CTX structure. @param buffer Start address of buffer containing bytes to add. @param sz Buffer size. @param erp Error report, may be NULL. @return 1 on success 0 on error. Error codes: - DK4_E_INVALID_ARGUMENTS
if ctxptr or buffer is NULL or sz is 0 or sz exceeds the range for unsigned long, - DK4_E_SYNTAX
if an invalid value is specified for mdt. - DK4_E_NOT_SUPPORTED
if the specified message digest type is not available. - DK4_E_SYSTEM
if the underlaying library indicated an error.
Note: iDetails is not set to an errno value. */ int dk4md_ctx_add( dk4_md_ctx_t *ctxptr, const void *buffer, size_t sz, dk4_er_t *erp ); /** Finish checksum and create text representation. @param rptr Address of pointer variable for result buffer, the variable should be initialized to NULL. @param rszptr Address of size variable for result buffer, the variable should be initialized to 0. @param ctxptr CTX structure. @param erp Error report, may be NULL. @return 1 on success, 0 on error. Error codes: - DK4_E_INVALID_ARGUMENTS
if rptr, rszptr, or ctxptr is NULL, - DK4_E_NOT_SUPPORTED
if the specified message digest type is not available. */ int dk4md_ctx_finish( const char **rptr, size_t *rszptr, dk4_md_ctx_t *ctxptr, dk4_er_t *erp ); /** Find message digest size (number of binary bytes or text characters without finalizing 0 byte). @param mdt Message digest type, one from: DK4_MD_MD5, DK4_MD_SHA1, DK4_MD_SHA224, DK4_MD_SHA256, DK4_MD_SHA384, DK4_MD_SHA512, or DK4_MD_RIPEMD_160. @param mde Message digest encoding, one from: DK4_BINARY_TO_TEXT_ENCODING_NONE, DK4_BINARY_TO_TEXT_ENCODING_HEX, or DK4_BINARY_TO_TEXT_ENCODING_A85. @param erp Error report, may be NULL. @return Number of bytes or text characters on success, 0 on error. Error codes: - DK4_E_INVALID_ARGUMENTS
for illegal mdt or mde values. */ size_t dk4md_size(int mdt, int mde, dk4_er_t *erp); /** Find numeric message digest type for string. @param name Message digest type name. @param erp Error report, may be NULL. @return Non-negative message digest type on success, -1 on error. Error codes: - DK4_E_INVALID_ARGUMENTS
if name is NULL, - DK4_E_SYNTAX
if name is not a valid message digest type name. */ int dk4md_choose_type(const dkChar *name, dk4_er_t *erp); /** Check whether support for a message type is available. @param mdtype Message type to check for. @return 1 if supported, 0 otherwise. */ int dk4md_check_type(int mdtype); #ifdef __cplusplus } #endif /** Message digest types. */ enum { /** MD5. */ DK4_MD_MD5 = 0 , /** SHA-1. */ DK4_MD_SHA1 , /** SHA-224. */ DK4_MD_SHA224 , /** SHA-256. */ DK4_MD_SHA256 , /** SHA-384. */ DK4_MD_SHA384 , /** SHA-512. */ DK4_MD_SHA512 , /** RIPEMD-160. */ DK4_MD_RIPEMD_160 }; #endif