kernelnewbies.kernelnewbies.org archive mirror
 help / color / mirror / Atom feed
* SHA-1 hash calculate in Kernel.
@ 2015-08-28  7:36 lx
  2015-08-28  8:27 ` Bjørn Mork
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: lx @ 2015-08-28  7:36 UTC (permalink / raw)
  To: kernelnewbies

hi all:
      I built a module for calculate the SHA-1. The code is:
##################
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/crypto.h>
#include <linux/err.h>
#include <linux/scatterlist.h>
MODULE_LICENSE("Dual BSD/GPL");

#define SHA1_LENGTH     20

static int hello_init(void)
{
    /*
     * http://lxr.oss.org.cn/source/fs/ecryptfs/crypto.c?v=2.6.30
     */
    struct scatterlist sg;
    struct hash_desc desc;

    //way 1
    /*
    char *plaintext = "c";
    size_t len = strlen(plaintext);
    */

    //way 2
    /*
    char *plaintext = kmalloc(sizeof(char), GFP_KERNEL);
    plaintext = "c";
    size_t len = 1;
    */

    // way 3.
    /*
    char plaintext[1] = {'c'};
    size_t len = 1;
    */

    // way 4.
    /*
    char *plaintext = (char *)__get_free_page(GFP_KERNEL);
    memcpy(plaintext, "c", 1);
    size_t len = 1;
    */

    int rc = 0;
    int i;
    char hashtext[SHA1_LENGTH];

    memset(hashtext, 0x00, SHA1_LENGTH);
    printk(KERN_INFO "sha1: %s\n", __FUNCTION__);

    sg_init_one(&sg, plaintext, len);
    desc.tfm = crypto_alloc_hash("sha1", 0, CRYPTO_ALG_ASYNC);
    desc.flags = 0;

    rc = crypto_hash_init(&desc);
    if (rc) {
        printk(KERN_ERR "%s: Error initializing crypto hash; rc = [%d]\n",
__func__, rc);
        goto out;
    }
    rc = crypto_hash_update(&desc, &sg, len);
    if (rc) {
        printk(KERN_ERR "%s: Error updating crypto hash; rc = [%d]\n",
__func__, rc);
        goto out;
    }
    rc = crypto_hash_final(&desc, hashtext);
    if (rc) {
        printk(KERN_ERR "%s: Error finalizing crypto hash; rc = [%d]\n",
__func__, rc);
        goto out;
    }
    crypto_free_hash(desc.tfm);

    for (i = 0; i < 20; i++) {
        printk(KERN_INFO "%02x-%d\n", hashtext[i]&0xff, i);
    }

out:
    printk(KERN_INFO "end\n");
    return rc;
}

static void hello_exit(void)
{
    printk(KERN_ALERT "Goodbye, cruel world\n");
}

module_init(hello_init);
module_exit(hello_exit);
##################
I can just get the right result by way 3 and 4, In way 1 and 2 , I get the
wrong result,
I check the result by link: http://www.xorbin.com/tools/sha1-hash-calculator
.
Please tell me why? Thank you.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20150828/c10f19aa/attachment.html 

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2015-10-22  8:24 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-08-28  7:36 SHA-1 hash calculate in Kernel lx
2015-08-28  8:27 ` Bjørn Mork
2015-08-28 17:04 ` Jeff Haran
2015-08-29 11:49 ` Bernd Petrovitsch
2015-10-22  8:24   ` lx

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).