summaryrefslogtreecommitdiff
path: root/support/dktools/dk4md.c
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /support/dktools/dk4md.c
Initial commit
Diffstat (limited to 'support/dktools/dk4md.c')
-rw-r--r--support/dktools/dk4md.c550
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;
+}
+