clock_t ts_start, ts_finish;
#ifdef _WIN32
+ setvbuf(stderr, NULL, _IONBF, 0);
_setmode(_fileno(stdin), _O_BINARY);
_setmode(_fileno(stdout), _O_BINARY);
#endif
return 1;
}
- /*print help screen or version?*/
switch (param.opmode)
{
- case 1:
+ case OPMODE_HELP:
print_help();
return 0;
- case 2:
+ case OPMODE_VERS:
print_vers();
return 0;
- }
-
- /*run self-test, if in test mode*/
- if (param.test_mode)
- {
- print_logo();
+ case OPMODE_TEST:
#ifdef NO_SELFTEST
fprintf(stderr, "Not compiled with self-test code!\n");
return 1;
}
else
{
- print_digest(result.data(), param.use_upper_case, param.curly_brackets);
+ print_digest(stdout, result.data(), param.use_upper_case, param.curly_brackets);
}
+
+ /*flush*/
fflush(stdout);
/*clean up*/
mhash_384_t context;
#ifdef _WIN32
+ setvbuf(stderr, NULL, _IONBF, 0);
_setmode(_fileno(stdin), _O_BINARY);
_setmode(_fileno(stdout), _O_BINARY);
#endif
return 1;
}
- /*print help screen or version?*/
+ /*select mode of operation*/
switch (param.opmode)
{
- case 1:
+ case OPMODE_HELP:
print_help();
return 0;
- case 2:
+ case OPMODE_VERS:
print_vers();
return 0;
- }
-
- /*run self-test, if in test mode*/
- if (param.test_mode)
- {
- print_logo();
+ case OPMODE_TEST:
#ifdef NO_SELFTEST
fprintf(stderr, "Not compiled with self-test code!\n");
return 1;
}
else
{
- print_digest(result, param.use_upper_case, param.curly_brackets);
+ print_digest(stdout, result, param.use_upper_case, param.curly_brackets);
}
+
+ /*flush*/
fflush(stdout);
/*clean up*/
/*Include*/
#include "mhash_384.h"
+#include "utilities.h"
/*CRT includes*/
#include <stdlib.h>
uint8_t result[MY_HASH_LENGTH];
mhash_384_t context;
+ /*logo*/
+ print_logo();
+
/*test INI table*/
fprintf(stderr, "Self-test, step 1 of 5 running...\n");
for (i = 0U; i < 2U; i++)
mhash_384_update(&context, (const uint8_t*)TEST_VECTOR[i].str, TEST_VECTOR[i].len ? TEST_VECTOR[i].len : (uint_fast32_t)strlen(TEST_VECTOR[i].str));
}
mhash_384_finalize(&context, result);
- printf("\b\b\b");
- print_digest(result, 1, 0);
+ fprintf(stderr, "\b\b\b");
+ print_digest(stderr, result, 1, 0);
MY_ASSERT(!memcmp(result, TEST_RESULT[i], sizeof(uint8_t) * MY_HASH_LENGTH), "Test vector did NOT compare equal");
}
#define MY_HASH_LENGTH MHASH_384_LEN
#endif
+/*Mode*/
+#define OPMODE_HELP 1
+#define OPMODE_VERS 2
+#define OPMODE_TEST 3
+
/*Parameters*/
typedef struct param_t
{
int opmode;
int enable_bench;
int show_progress;
- int test_mode;
int use_upper_case;
int curly_brackets;
int raw_output;
param->enable_bench = 1;
return 1;
}
- if (IS_OPTION(argv, is_long, T('t'), T("test")))
- {
- param->test_mode = 1;
- return 1;
- }
if (IS_OPTION(argv, is_long, T('p'), T("progress")))
{
param->show_progress = 1;
}
if (IS_OPTION(argv, is_long, T('h'), T("help")))
{
- param->opmode = 1;
+ param->opmode = OPMODE_HELP;
return 1;
}
if (IS_OPTION(argv, is_long, T('v'), T("version")))
{
- param->opmode = 2;
+ param->opmode = OPMODE_VERS;
+ return 1;
+ }
+ if (IS_OPTION(argv, is_long, T('t'), T("test")))
+ {
+ param->opmode = OPMODE_TEST;
return 1;
}
return 0;
}
/*print digest*/
-#define _PUT_HEX_CHAR(X,Y,Z) putchar(X[((Y) >> (Z)) & 0xFU])
-static void print_digest(const uint8_t *const digest, const int uppercase, const int curly)
+#define _PUT_HEX_CHAR(X,Y,Z) fputc(X[((Y) >> (Z)) & 0xFU], stream)
+static void print_digest(FILE *const stream, const uint8_t *const digest, const int uppercase, const int curly)
{
static const char *const HEX_UPR = "0123456789ABCDEF";
static const char *const HEX_LWR = "0123456789abcdef";
uint16_t count;
if (curly)
{
- fputs("{ ", stdout);
+ fputs("{ ", stream);
}
for (count = 0U; count < MY_HASH_LENGTH; ++count)
{
if (curly)
{
- fputs(count ? ", 0x" : "0x", stdout);
+ fputs(count ? ", 0x" : "0x", stream);
}
_PUT_HEX_CHAR(hex, digest[count], 4);
_PUT_HEX_CHAR(hex, digest[count], 0);
}
if (curly)
{
- fputs(" }", stdout);
+ fputs(" }", stream);
}
- putchar('\n');
+ fputc('\n', stream);
}
/*sigint handler*/