diff options
Diffstat (limited to 'support/dktools/dk4md.c')
-rw-r--r-- | support/dktools/dk4md.c | 550 |
1 files changed, 550 insertions, 0 deletions
diff --git a/support/dktools/dk4md.c b/support/dktools/dk4md.c new file mode 100644 index 0000000000..0a37fcd0b6 --- /dev/null +++ b/support/dktools/dk4md.c @@ -0,0 +1,550 @@ +/* + WARNING: This file was generated by dkct. + 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 +*/ + +/* +Copyright (C) 2015-2017, Dirk Krause + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above opyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +* Neither the name of the author nor the names of contributors may be used + to endorse or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/** @file dk4md.c The dk4md module. +*/ + + +#line 252 "dk4md.ctr" + + +#include "dk4md.h" +#include "dk4mem.h" +#include "dk4numco.h" +#include "dk4binenc.h" + + + + + +#line 262 "dk4md.ctr" + + + +int +dk4md_ctx_init(dk4_md_ctx_t *ctxptr, int mdt, int mde, dk4_er_t *erp) +{ + int back = 0; + if (NULL != ctxptr) { + DK4_MEMRES(ctxptr, sizeof(dk4_md_ctx_t)); + ctxptr->mdtype = -1; + ctxptr->encoding = -1; + switch (mde) { + case DK4_BINARY_TO_TEXT_ENCODING_HEX: + case DK4_BINARY_TO_TEXT_ENCODING_A85: + { + ctxptr->encoding = mde; + } break; + default : { + dk4error_set_simple_error_code(erp, DK4_E_SYNTAX); + } break; + } + if (-1 != ctxptr->encoding) { + switch (mdt) { + case DK4_MD_MD5 : { +#if DK4_HAVE_OPENSSL_MD5_H + ctxptr->mdtype = mdt; + if (1 == MD5_Init(&((ctxptr->ctx).md5))) { + back = 1; + } else { + dk4error_set_simple_error_code(erp, DK4_E_SYSTEM); + } +#else + dk4error_set_simple_error_code(erp, DK4_E_NOT_SUPPORTED); +#endif + } break; + case DK4_MD_SHA1 : { +#if DK4_HAVE_OPENSSL_SHA_H + ctxptr->mdtype = mdt; + if (1 == SHA1_Init(&((ctxptr->ctx).sha))) { + back = 1; + } else { + dk4error_set_simple_error_code(erp, DK4_E_SYSTEM); + } +#else + dk4error_set_simple_error_code(erp, DK4_E_NOT_SUPPORTED); +#endif + } break; + case DK4_MD_SHA224 : { +#if DK4_HAVE_OPENSSL_SHA_H && DK4_HAVE_SHA224 + ctxptr->mdtype = mdt; + if (1 == SHA224_Init(&((ctxptr->ctx).sha256))) { + back = 1; + } else { + dk4error_set_simple_error_code(erp, DK4_E_SYSTEM); + } +#else + dk4error_set_simple_error_code(erp, DK4_E_NOT_SUPPORTED); +#endif + } break; + case DK4_MD_SHA256 : { +#if DK4_HAVE_OPENSSL_SHA_H && DK4_HAVE_SHA256 + ctxptr->mdtype = mdt; + if (1 == SHA256_Init(&((ctxptr->ctx).sha256))) { + back = 1; + } else { + dk4error_set_simple_error_code(erp, DK4_E_SYSTEM); + } +#else + dk4error_set_simple_error_code(erp, DK4_E_NOT_SUPPORTED); +#endif + } break; + case DK4_MD_SHA384 : { +#if DK4_HAVE_OPENSSL_SHA_H && DK4_HAVE_SHA384 + ctxptr->mdtype = mdt; + if (1 == SHA384_Init(&((ctxptr->ctx).sha512))) { + back = 1; + } else { + dk4error_set_simple_error_code(erp, DK4_E_SYSTEM); + } +#else + dk4error_set_simple_error_code(erp, DK4_E_NOT_SUPPORTED); +#endif + } break; + case DK4_MD_SHA512 : { +#if DK4_HAVE_OPENSSL_SHA_H && DK4_HAVE_SHA512 + ctxptr->mdtype = mdt; + if (1 == SHA512_Init(&((ctxptr->ctx).sha512))) { + back = 1; + } else { + dk4error_set_simple_error_code(erp, DK4_E_SYSTEM); + } +#else + dk4error_set_simple_error_code(erp, DK4_E_NOT_SUPPORTED); +#endif + } break; + case DK4_MD_RIPEMD_160 : { +#if DK4_HAVE_OPENSSL_RIPEMD_H + ctxptr->mdtype = mdt; + if (1 == RIPEMD160_Init(&((ctxptr->ctx).ripemd160))) { + back = 1; + } else { + dk4error_set_simple_error_code(erp, DK4_E_SYSTEM); + } +#else + dk4error_set_simple_error_code(erp, DK4_E_NOT_SUPPORTED); +#endif + } break; + } + } + } else { + dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS); + } + return back; +} + + + +int +dk4md_ctx_add( + dk4_md_ctx_t *ctxptr, const void *buffer, size_t sz, dk4_er_t *erp +) +{ + int back = 0; + if ((NULL != ctxptr) && (NULL != buffer) && (0 < sz)) { + if ((dk4_um_t)sz <= (dk4_um_t)ULONG_MAX) { + if (-1 != ctxptr->mdtype) { + switch (ctxptr->mdtype) { + case DK4_MD_MD5 : { +#if DK4_HAVE_OPENSSL_MD5_H + back = MD5_Update( + &((ctxptr->ctx).md5), buffer, (unsigned long)sz + ); + if (0 == back) { + dk4error_set_simple_error_code(erp, DK4_E_SYSTEM); + } +#else + dk4error_set_simple_error_code(erp, DK4_E_NOT_SUPPORTED); +#endif + } break; + case DK4_MD_SHA1 : { +#if DK4_HAVE_OPENSSL_SHA_H + back = SHA1_Update( + &((ctxptr->ctx).sha), buffer, (unsigned long)sz + ); + if (0 == back) { + dk4error_set_simple_error_code(erp, DK4_E_SYSTEM); + } +#else + dk4error_set_simple_error_code(erp, DK4_E_NOT_SUPPORTED); +#endif + } break; + case DK4_MD_SHA224 : { +#if DK4_HAVE_OPENSSL_SHA_H && DK4_HAVE_SHA224 + back = SHA224_Update( + &((ctxptr->ctx).sha256), buffer, (unsigned long)sz + ); + if (0 == back) { + dk4error_set_simple_error_code(erp, DK4_E_SYSTEM); + } +#else + dk4error_set_simple_error_code(erp, DK4_E_NOT_SUPPORTED); +#endif + } break; + case DK4_MD_SHA256 : { +#if DK4_HAVE_OPENSSL_SHA_H && DK4_HAVE_SHA256 + back = SHA256_Update( + &((ctxptr->ctx).sha256), buffer, (unsigned long)sz + ); + if (0 == back) { + dk4error_set_simple_error_code(erp, DK4_E_SYSTEM); + } +#else + dk4error_set_simple_error_code(erp, DK4_E_NOT_SUPPORTED); +#endif + } break; + case DK4_MD_SHA384 : { +#if DK4_HAVE_OPENSSL_SHA_H && DK4_HAVE_SHA384 + back = SHA384_Update( + &((ctxptr->ctx).sha512), buffer, (unsigned long)sz + ); + if (0 == back) { + dk4error_set_simple_error_code(erp, DK4_E_SYSTEM); + } +#else + dk4error_set_simple_error_code(erp, DK4_E_NOT_SUPPORTED); +#endif + } break; + case DK4_MD_SHA512 : { +#if DK4_HAVE_OPENSSL_SHA_H && DK4_HAVE_SHA512 + back = SHA512_Update( + &((ctxptr->ctx).sha512), buffer, (unsigned long)sz + ); + if (0 == back) { + dk4error_set_simple_error_code(erp, DK4_E_SYSTEM); + } +#else + dk4error_set_simple_error_code(erp, DK4_E_NOT_SUPPORTED); +#endif + } break; + case DK4_MD_RIPEMD_160 : { +#if DK4_HAVE_OPENSSL_RIPEMD_H + back = RIPEMD160_Update( + &((ctxptr->ctx).ripemd160), buffer, (unsigned long)sz + ); + if (0 == back) { + dk4error_set_simple_error_code(erp, DK4_E_SYSTEM); + } +#else + dk4error_set_simple_error_code(erp, DK4_E_NOT_SUPPORTED); +#endif + } break; + default : { + dk4error_set_simple_error_code(erp, DK4_E_SYNTAX); + } break; + } + } else { + dk4error_set_simple_error_code(erp, DK4_E_SYNTAX); + } + } else { + dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS); + } + } else { + dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS); + } + return back; +} + + + +int +dk4md_ctx_finish( + const char **rptr, size_t *rszptr, dk4_md_ctx_t *ctxptr, dk4_er_t *erp +) +{ + int back = 0; + + +#line 498 "dk4md.ctr" + if ((NULL != rptr) && (NULL != rszptr) && (NULL != ctxptr)) { + if (-1 != ctxptr->mdtype) { + switch (ctxptr->mdtype) { + case DK4_MD_MD5 : { +#if DK4_HAVE_OPENSSL_MD5_H + back = MD5_Final(&(ctxptr->bbuf[0]), &((ctxptr->ctx).md5)); + if (0 != back) { + back = dk4binenc( + &(ctxptr->obuf[0]), DK4MD_BUFFER_SIZE_TEXT, + &(ctxptr->bbuf[0]), 16, + ctxptr->encoding, erp + ); + if (0 != back) { + *rptr = &(ctxptr->obuf[0]); + switch (ctxptr->encoding) { + case DK4_BINARY_TO_TEXT_ENCODING_NONE : { *rszptr = 16; } break; + case DK4_BINARY_TO_TEXT_ENCODING_HEX : { *rszptr = 32; } break; + case DK4_BINARY_TO_TEXT_ENCODING_A85 : { *rszptr = 20; } break; + } + } + } else { + dk4error_set_simple_error_code(erp, DK4_E_SYSTEM); + } +#else + dk4error_set_simple_error_code(erp, DK4_E_NOT_SUPPORTED); +#endif + } break; + case DK4_MD_SHA1 : { +#if DK4_HAVE_OPENSSL_SHA_H + back = SHA1_Final(&(ctxptr->bbuf[0]), &((ctxptr->ctx).sha)); + if (0 != back) { + back = dk4binenc( + &(ctxptr->obuf[0]), DK4MD_BUFFER_SIZE_TEXT, + &(ctxptr->bbuf[0]), 20, + ctxptr->encoding, erp + ); + if (0 != back) { + *rptr = &(ctxptr->obuf[0]); + switch (ctxptr->encoding) { + case DK4_BINARY_TO_TEXT_ENCODING_NONE : { *rszptr = 20; } break; + case DK4_BINARY_TO_TEXT_ENCODING_HEX : { *rszptr = 40; } break; + case DK4_BINARY_TO_TEXT_ENCODING_A85 : { *rszptr = 25; } break; + } + } + } else { + dk4error_set_simple_error_code(erp, DK4_E_SYSTEM); + } +#else + dk4error_set_simple_error_code(erp, DK4_E_NOT_SUPPORTED); +#endif + } break; + case DK4_MD_SHA224 : { +#if DK4_HAVE_OPENSSL_SHA_H && DK4_HAVE_SHA224 + back = SHA224_Final(&(ctxptr->bbuf[0]), &((ctxptr->ctx).sha256)); + if (0 != back) { + back = dk4binenc( + &(ctxptr->obuf[0]), DK4MD_BUFFER_SIZE_TEXT, + &(ctxptr->bbuf[0]), 28, + ctxptr->encoding, erp + ); + if (0 != back) { + *rptr = &(ctxptr->obuf[0]); + switch (ctxptr->encoding) { + case DK4_BINARY_TO_TEXT_ENCODING_NONE : { *rszptr = 28; } break; + case DK4_BINARY_TO_TEXT_ENCODING_HEX : { *rszptr = 56; } break; + case DK4_BINARY_TO_TEXT_ENCODING_A85 : { *rszptr = 35; } break; + } + } + } else { + dk4error_set_simple_error_code(erp, DK4_E_SYSTEM); + } +#else + dk4error_set_simple_error_code(erp, DK4_E_NOT_SUPPORTED); +#endif + } break; + case DK4_MD_SHA256 : { +#if DK4_HAVE_OPENSSL_SHA_H && DK4_HAVE_SHA256 + back = SHA256_Final(&(ctxptr->bbuf[0]), &((ctxptr->ctx).sha256)); + if (0 != back) { + back = dk4binenc( + &(ctxptr->obuf[0]), DK4MD_BUFFER_SIZE_TEXT, + &(ctxptr->bbuf[0]), 32, + ctxptr->encoding, erp + ); + if (0 != back) { + *rptr = &(ctxptr->obuf[0]); + switch (ctxptr->encoding) { + case DK4_BINARY_TO_TEXT_ENCODING_NONE : { *rszptr = 32; } break; + case DK4_BINARY_TO_TEXT_ENCODING_HEX : { *rszptr = 64; } break; + case DK4_BINARY_TO_TEXT_ENCODING_A85 : { *rszptr = 40; } break; + } + } + } else { + dk4error_set_simple_error_code(erp, DK4_E_SYSTEM); + } +#else + dk4error_set_simple_error_code(erp, DK4_E_NOT_SUPPORTED); +#endif + } break; + case DK4_MD_SHA384 : { +#if DK4_HAVE_OPENSSL_SHA_H && DK4_HAVE_SHA384 + back = SHA384_Final(&(ctxptr->bbuf[0]), &((ctxptr->ctx).sha512)); + if (0 != back) { + back = dk4binenc( + &(ctxptr->obuf[0]), DK4MD_BUFFER_SIZE_TEXT, + &(ctxptr->bbuf[0]), 48, + ctxptr->encoding, erp + ); + if (0 != back) { + *rptr = &(ctxptr->obuf[0]); + switch (ctxptr->encoding) { + case DK4_BINARY_TO_TEXT_ENCODING_NONE : { *rszptr = 48; } break; + case DK4_BINARY_TO_TEXT_ENCODING_HEX : { *rszptr = 96; } break; + case DK4_BINARY_TO_TEXT_ENCODING_A85 : { *rszptr = 60; } break; + } + } + } else { + dk4error_set_simple_error_code(erp, DK4_E_SYSTEM); + } +#else + dk4error_set_simple_error_code(erp, DK4_E_NOT_SUPPORTED); +#endif + } break; + case DK4_MD_SHA512 : { + +#line 622 "dk4md.ctr" +#if DK4_HAVE_OPENSSL_SHA_H && DK4_HAVE_SHA512 + + +#line 624 "dk4md.ctr" + back = SHA512_Final(&(ctxptr->bbuf[0]), &((ctxptr->ctx).sha512)); + if (0 != back) { + +#line 626 "dk4md.ctr" + back = dk4binenc( + &(ctxptr->obuf[0]), DK4MD_BUFFER_SIZE_TEXT, + &(ctxptr->bbuf[0]), 64, + ctxptr->encoding, erp + ); + if (0 != back) { + +#line 632 "dk4md.ctr" + *rptr = &(ctxptr->obuf[0]); + +#line 633 "dk4md.ctr" + switch (ctxptr->encoding) { + case DK4_BINARY_TO_TEXT_ENCODING_NONE : { *rszptr = 64; } break; + case DK4_BINARY_TO_TEXT_ENCODING_HEX : { *rszptr = 128;} break; + case DK4_BINARY_TO_TEXT_ENCODING_A85 : { *rszptr = 80; } break; + } + } else { + +#line 639 "dk4md.ctr" + } + } else { + +#line 641 "dk4md.ctr" + dk4error_set_simple_error_code(erp, DK4_E_SYSTEM); + } +#else + dk4error_set_simple_error_code(erp, DK4_E_NOT_SUPPORTED); +#endif + } break; + case DK4_MD_RIPEMD_160 : { +#if DK4_HAVE_OPENSSL_RIPEMD_H + back = RIPEMD160_Final(&(ctxptr->bbuf[0]),&((ctxptr->ctx).ripemd160)); + if (0 != back) { + back = dk4binenc( + &(ctxptr->obuf[0]), DK4MD_BUFFER_SIZE_TEXT, + &(ctxptr->bbuf[0]), 20, + ctxptr->encoding, erp + ); + if (0 != back) { + *rptr = &(ctxptr->obuf[0]); + switch (ctxptr->encoding) { + case DK4_BINARY_TO_TEXT_ENCODING_NONE : { *rszptr = 20; } break; + case DK4_BINARY_TO_TEXT_ENCODING_HEX : { *rszptr = 40; } break; + case DK4_BINARY_TO_TEXT_ENCODING_A85 : { *rszptr = 25; } break; + } + } + } else { + dk4error_set_simple_error_code(erp, DK4_E_SYSTEM); + } +#else + dk4error_set_simple_error_code(erp, DK4_E_NOT_SUPPORTED); +#endif + } break; + default : { + /* ERROR: Wrong MD type */ + dk4error_set_simple_error_code(erp, DK4_E_NOT_SUPPORTED); + } break; + } + } else { + /* ERROR Wrong MD type */ + dk4error_set_simple_error_code(erp, DK4_E_NOT_SUPPORTED); + } + } else { + dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS); + } + +#line 683 "dk4md.ctr" + return back; +} + + + +size_t +dk4md_size(int mdt, int mde, dk4_er_t *erp) +{ + size_t back = 0; + switch (mdt) { + case DK4_MD_MD5 : { + switch (mde) { + case DK4_BINARY_TO_TEXT_ENCODING_NONE : { back = 16; } break; + case DK4_BINARY_TO_TEXT_ENCODING_HEX : { back = 32; } break; + case DK4_BINARY_TO_TEXT_ENCODING_A85 : { back = 20; } break; + } + } break; + case DK4_MD_SHA1 : case DK4_MD_RIPEMD_160 : { + switch (mde) { + case DK4_BINARY_TO_TEXT_ENCODING_NONE : { back = 20; } break; + case DK4_BINARY_TO_TEXT_ENCODING_HEX : { back = 40; } break; + case DK4_BINARY_TO_TEXT_ENCODING_A85 : { back = 25; } break; + } + } break; + case DK4_MD_SHA224 : { + switch (mde) { + case DK4_BINARY_TO_TEXT_ENCODING_NONE : { back = 28; } break; + case DK4_BINARY_TO_TEXT_ENCODING_HEX : { back = 56; } break; + case DK4_BINARY_TO_TEXT_ENCODING_A85 : { back = 35; } break; + } + } break; + case DK4_MD_SHA256 : { + switch (mde) { + case DK4_BINARY_TO_TEXT_ENCODING_NONE : { back = 32; } break; + case DK4_BINARY_TO_TEXT_ENCODING_HEX : { back = 64; } break; + case DK4_BINARY_TO_TEXT_ENCODING_A85 : { back = 40; } break; + } + } break; + case DK4_MD_SHA384 : { + switch (mde) { + case DK4_BINARY_TO_TEXT_ENCODING_NONE : { back = 48; } break; + case DK4_BINARY_TO_TEXT_ENCODING_HEX : { back = 96; } break; + case DK4_BINARY_TO_TEXT_ENCODING_A85 : { back = 60; } break; + } + } break; + case DK4_MD_SHA512 : { + switch (mde) { + case DK4_BINARY_TO_TEXT_ENCODING_NONE : { back = 64; } break; + case DK4_BINARY_TO_TEXT_ENCODING_HEX : { back = 128; } break; + case DK4_BINARY_TO_TEXT_ENCODING_A85 : { back = 80; } break; + } + } break; + } + if (0 == back) { + dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS); + } + return back; +} + |