lkmpg/examples/cryptosha256.c
Jim Huang faf3aa7c22 Make each source file more consistent
It is vital to denote the file name and summary for each source,
otherwise readers could not figure out the corresponding files.
2021-07-22 11:25:32 +08:00

63 lines
1.3 KiB
C

/*
* cryptosha256.c
*/
#include <crypto/internal/hash.h>
#include <linux/module.h>
#define SHA256_LENGTH 32
static void show_hash_result(char *plaintext, char *hash_sha256)
{
int i;
char str[SHA256_LENGTH * 2 + 1];
pr_info("sha256 test for string: \"%s\"\n", plaintext);
for (i = 0; i < SHA256_LENGTH; i++)
sprintf(&str[i * 2], "%02x", (unsigned char) hash_sha256[i]);
str[i * 2] = 0;
pr_info("%s\n", str);
}
int cryptosha256_init(void)
{
char *plaintext = "This is a test";
char hash_sha256[SHA256_LENGTH];
struct crypto_shash *sha256;
struct shash_desc *shash;
sha256 = crypto_alloc_shash("sha256", 0, 0);
if (IS_ERR(sha256))
return -1;
shash = kmalloc(sizeof(struct shash_desc) + crypto_shash_descsize(sha256),
GFP_KERNEL);
if (!shash)
return -ENOMEM;
shash->tfm = sha256;
if (crypto_shash_init(shash))
return -1;
if (crypto_shash_update(shash, plaintext, strlen(plaintext)))
return -1;
if (crypto_shash_final(shash, hash_sha256))
return -1;
kfree(shash);
crypto_free_shash(sha256);
show_hash_result(plaintext, hash_sha256);
return 0;
}
void cryptosha256_exit(void) {}
module_init(cryptosha256_init);
module_exit(cryptosha256_exit);
MODULE_DESCRIPTION("sha256 hash test");
MODULE_LICENSE("GPL");