static int hmac_sha256 (char *plaintext, unsigned int plain_text_size, char *key, unsigned int key_size, uint8_t *result) { struct scatterlist sg; struct Crypto_hash *tfm; struct Hash_desc desc; int ret; if (!result) {PRINTK (kern_err "param err\n"); Return-einval; } TFM = Crypto_alloc_hash ("HMAC (sha256)", 0, Crypto_alg_async); if (Is_err (TFM)) {PRINTK (kern_err "Crypto_alloc_ahash failed:err%ld", Ptr_err (TFM)); return-EINVAL; } DESC.TFM = TFM; desc.flags = 0; Sg_set_buf (&SG, plaintext, plain_text_size); ret = Crypto_hash_setkey (TFM, Key, key_size); if (ret) { PRINTK (kern_err "Crypto_ahash_setkey failed:err%d", ret); Goto out; } ret = Crypto_hash_digest (&desc, &SG, plain_text_size, result); if (ret) {PRINTK (Kern_err "Digest () failed ret =%d\n", ret); goto out; } PRINTK (Kern_debug, "Crypto Hash Digest sizE%d\n ", Crypto_hash_digestsize (TFM)); Out:crypto_free_hash (TFM); Return-einval;}
Kernel crypto HMAC sha256 API call code