57 lines
1.6 KiB
C
Executable file
57 lines
1.6 KiB
C
Executable file
/*
|
|
* Cryptographic API.
|
|
*
|
|
* HMAC: Keyed-Hashing for Message Authentication (RFC2104).
|
|
* SHA-256 is used as an underlying hash function.
|
|
*
|
|
* Author : Igor Shcheglakov (i.shcheglako@samsung.com)
|
|
* Date : 15 Dec 2017
|
|
*
|
|
* Copyright (C) 2017 Samsung Electronics Co., Ltd.
|
|
*
|
|
*/
|
|
|
|
#ifndef _FMP_HMAC_SHA256_H
|
|
#define _FMP_HMAC_SHA256_H
|
|
|
|
#include "sha256.h"
|
|
|
|
struct hmac_sha256_ctx {
|
|
struct fmp_shash_desc inner_ctx;
|
|
struct fmp_shash_desc outer_ctx;
|
|
};
|
|
|
|
typedef struct hmac_sha256_ctx HMAC_SHA256_CTX;
|
|
|
|
/* Initialize hashing context using a key of key_len bytes.
|
|
*
|
|
* Return zero on success and negative otherwise
|
|
*/
|
|
int hmac_sha256_init(struct hmac_sha256_ctx *ctx, const u8 *key, unsigned int key_len);
|
|
|
|
/* Hash data_len bytes of data
|
|
*
|
|
* Return zero on success and negative otherwise
|
|
*/
|
|
int hmac_sha256_update(struct hmac_sha256_ctx *ctx, const u8 *data, unsigned int data_len);
|
|
|
|
/* Add final padding to a hash and write resulting HMAC to out.
|
|
* There must be at least SHA256_DIGEST_LENGTH bytes of space in out
|
|
*
|
|
* Return zero on success and negative otherwise
|
|
*/
|
|
int hmac_sha256_final(struct hmac_sha256_ctx *ctx, u8 *out);
|
|
|
|
/* Hash data_len bytes of data using key of key_len bytes.
|
|
* Write resulting HMAC to out. There must be at least SHA256_DIGEST_LENGTH
|
|
* bytes of space in out
|
|
*
|
|
* Return zero on success and negative otherwise
|
|
*/
|
|
int hmac_sha256(const u8 *key, unsigned int key_len, const u8 *data, unsigned int data_len, u8 *out);
|
|
|
|
/* Cleanup allocated resources */
|
|
void hmac_sha256_ctx_cleanup(struct hmac_sha256_ctx *ctx);
|
|
|
|
#endif /* _FMP_HMAC_SHA256_H */
|
|
|