2023-11-30 01:43:03 +00:00
|
|
|
/*
|
|
|
|
* Copyright (c) 2023 Stephen Heumann
|
|
|
|
*
|
2024-06-27 02:46:58 +00:00
|
|
|
* Permission to use, copy, modify, and/or distribute this software for any
|
2023-11-30 01:43:03 +00:00
|
|
|
* purpose with or without fee is hereby granted, provided that the above
|
|
|
|
* copyright notice and this permission notice appear in all copies.
|
|
|
|
*
|
|
|
|
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
|
|
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
|
|
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
|
|
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
|
|
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
|
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
|
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <orca.h>
|
|
|
|
#include <memory.h>
|
|
|
|
|
|
|
|
#include "sha256.h"
|
|
|
|
#include "sha1.h"
|
|
|
|
#include "md5.h"
|
2023-12-01 00:29:50 +00:00
|
|
|
#include "md4.h"
|
2023-11-30 01:43:03 +00:00
|
|
|
|
|
|
|
int main(void) {
|
|
|
|
Handle context_hndl;
|
|
|
|
struct hmac_sha256_context *hmac_sha256_context;
|
|
|
|
struct hmac_sha1_context *hmac_sha1_context;
|
|
|
|
struct hmac_md5_context *hmac_md5_context;
|
2023-12-01 00:29:50 +00:00
|
|
|
struct hmac_md4_context *hmac_md4_context;
|
2023-11-30 01:43:03 +00:00
|
|
|
|
|
|
|
char key[] = "key";
|
|
|
|
char msg[] = "The quick brown fox jumps over the lazy dog";
|
|
|
|
|
|
|
|
context_hndl = NewHandle(sizeof(struct hmac_sha256_context),
|
|
|
|
userid(), attrFixed|attrPage|attrBank|attrNoCross, 0x000000);
|
|
|
|
if (toolerror())
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
|
|
|
|
hmac_sha256_context = (struct hmac_sha256_context *)*context_hndl;
|
|
|
|
hmac_sha256_init(hmac_sha256_context, key, sizeof(key)-1);
|
|
|
|
hmac_sha256_compute(hmac_sha256_context, msg, sizeof(msg)-1);
|
|
|
|
|
|
|
|
printf("HMAC-SHA256: ");
|
2024-04-15 23:39:36 +00:00
|
|
|
for (int i = 0; i < sizeof(hmac_sha256_result(hmac_sha256_context)); i++) {
|
|
|
|
printf("%02x", hmac_sha256_result(hmac_sha256_context)[i]);
|
2023-11-30 01:43:03 +00:00
|
|
|
}
|
|
|
|
printf("\n");
|
|
|
|
|
|
|
|
hmac_sha1_context = (struct hmac_sha1_context *)*context_hndl;
|
|
|
|
hmac_sha1_init(hmac_sha1_context, key, sizeof(key)-1);
|
|
|
|
hmac_sha1_compute(hmac_sha1_context, msg, sizeof(msg)-1);
|
|
|
|
|
|
|
|
printf("HMAC-SHA1: ");
|
2024-04-15 23:39:36 +00:00
|
|
|
for (int i = 0; i < sizeof(hmac_sha1_result(hmac_sha1_context)); i++) {
|
|
|
|
printf("%02x", hmac_sha1_result(hmac_sha1_context)[i]);
|
2023-11-30 01:43:03 +00:00
|
|
|
}
|
|
|
|
printf("\n");
|
|
|
|
|
|
|
|
hmac_md5_context = (struct hmac_md5_context *)*context_hndl;
|
|
|
|
hmac_md5_init(hmac_md5_context, key, sizeof(key)-1);
|
|
|
|
hmac_md5_compute(hmac_md5_context, msg, sizeof(msg)-1);
|
|
|
|
|
|
|
|
printf("HMAC-MD5: ");
|
2024-04-15 23:39:36 +00:00
|
|
|
for (int i = 0; i < sizeof(hmac_md5_result(hmac_md5_context)); i++) {
|
|
|
|
printf("%02x", hmac_md5_result(hmac_md5_context)[i]);
|
2023-11-30 01:43:03 +00:00
|
|
|
}
|
|
|
|
printf("\n");
|
2023-12-01 00:29:50 +00:00
|
|
|
|
|
|
|
|
|
|
|
hmac_md4_context = (struct hmac_md4_context *)*context_hndl;
|
|
|
|
hmac_md4_init(hmac_md4_context, key, sizeof(key)-1);
|
|
|
|
hmac_md4_compute(hmac_md4_context, msg, sizeof(msg)-1);
|
|
|
|
|
|
|
|
printf("HMAC-MD4: ");
|
2024-04-15 23:39:36 +00:00
|
|
|
for (int i = 0; i < sizeof(hmac_md4_result(hmac_md4_context)); i++) {
|
|
|
|
printf("%02x", hmac_md4_result(hmac_md4_context)[i]);
|
2023-12-01 00:29:50 +00:00
|
|
|
}
|
|
|
|
printf("\n");
|
2023-12-10 21:09:57 +00:00
|
|
|
|
2024-04-15 23:29:01 +00:00
|
|
|
hmac_sha256_init(hmac_sha256_context, key, sizeof(key)-1);
|
|
|
|
hmac_sha256_update(hmac_sha256_context, "T", 1);
|
|
|
|
hmac_sha256_update(hmac_sha256_context, msg+1, sizeof(msg)-2);
|
|
|
|
hmac_sha256_finalize(hmac_sha256_context);
|
|
|
|
|
|
|
|
printf("HMAC-SHA256 (incremental calculation): ");
|
2024-04-15 23:39:36 +00:00
|
|
|
for (int i = 0; i < sizeof(hmac_sha256_result(hmac_sha256_context)); i++) {
|
|
|
|
printf("%02x", hmac_sha256_result(hmac_sha256_context)[i]);
|
2024-04-15 23:29:01 +00:00
|
|
|
}
|
|
|
|
printf("\n");
|
|
|
|
|
|
|
|
hmac_sha1_init(hmac_sha1_context, key, sizeof(key)-1);
|
|
|
|
hmac_sha1_update(hmac_sha1_context, "T", 1);
|
|
|
|
hmac_sha1_update(hmac_sha1_context, msg+1, sizeof(msg)-2);
|
|
|
|
hmac_sha1_finalize(hmac_sha1_context);
|
|
|
|
|
|
|
|
printf("HMAC-SHA1 (incremental calculation): ");
|
2024-04-15 23:39:36 +00:00
|
|
|
for (int i = 0; i < sizeof(hmac_sha1_result(hmac_sha1_context)); i++) {
|
|
|
|
printf("%02x", hmac_sha1_result(hmac_sha1_context)[i]);
|
2024-04-15 23:29:01 +00:00
|
|
|
}
|
|
|
|
printf("\n");
|
|
|
|
|
2023-12-10 21:09:57 +00:00
|
|
|
hmac_md5_init(hmac_md5_context, key, sizeof(key)-1);
|
|
|
|
hmac_md5_update(hmac_md5_context, "T", 1);
|
|
|
|
hmac_md5_update(hmac_md5_context, msg+1, sizeof(msg)-2);
|
|
|
|
hmac_md5_finalize(hmac_md5_context);
|
|
|
|
|
|
|
|
printf("HMAC-MD5 (incremental calculation): ");
|
2024-04-15 23:39:36 +00:00
|
|
|
for (int i = 0; i < sizeof(hmac_md5_result(hmac_md5_context)); i++) {
|
|
|
|
printf("%02x", hmac_md5_result(hmac_md5_context)[i]);
|
2023-12-10 21:09:57 +00:00
|
|
|
}
|
|
|
|
printf("\n");
|
2024-04-15 23:29:01 +00:00
|
|
|
|
|
|
|
hmac_md4_init(hmac_md4_context, key, sizeof(key)-1);
|
|
|
|
hmac_md4_update(hmac_md4_context, "T", 1);
|
|
|
|
hmac_md4_update(hmac_md4_context, msg+1, sizeof(msg)-2);
|
|
|
|
hmac_md4_finalize(hmac_md4_context);
|
|
|
|
|
|
|
|
printf("HMAC-MD4 (incremental calculation): ");
|
2024-04-15 23:39:36 +00:00
|
|
|
for (int i = 0; i < sizeof(hmac_md4_result(hmac_md4_context)); i++) {
|
|
|
|
printf("%02x", hmac_md4_result(hmac_md4_context)[i]);
|
2024-04-15 23:29:01 +00:00
|
|
|
}
|
|
|
|
printf("\n");
|
2023-11-30 01:43:03 +00:00
|
|
|
}
|