blob: 1f92eef69175320a14b3e9059e6caeff989382ac [file]
/*
* Copyright 2017, DornerWorks
*
* SPDX-License-Identifier: GPL-2.0-only
*
* This data was produced by DornerWorks, Ltd. of Grand Rapids, MI, USA under
* a DARPA SBIR, Contract Number D16PC00107.
*
* Approved for Public Release, Distribution Unlimited.
*
*/
#include <printf.h>
#include <types.h>
#include "../hash.h"
/* Function to perform all hash operations.
*
* The outputted hash is stored in the outputted_hash pointer after the "sum"
* operation is used. This way beats having a bunch of #ifdefs in the source
* code, and is scalable to any other hashing algorithm.
*/
void get_hash(
hashes_t hashes,
const void *data,
size_t len,
void *outputted_hash)
{
if (hashes.hash_type == SHA_256) {
sha256_t calculated_hash = hashes.sha_structure;
sha256_init(&calculated_hash);
sha256_update(&calculated_hash, data, len);
sha256_sum(&calculated_hash, outputted_hash);
} else {
md5_t calculated_hash = hashes.md5_structure;
md5_init(&calculated_hash);
md5_update(&calculated_hash, data, len);
md5_sum(&calculated_hash, outputted_hash);
}
}
/* Function to print the hash */
void print_hash(
void const *hash,
size_t len)
{
uint8_t const *hash_bytes = hash;
for (size_t i = 0; i < len; i++) {
printf("%02x", hash_bytes[i]);
}
printf("\n");
}