1// Copyright 2015 The Weave Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef LIBUWEAVE_SRC_CRYPTO_HMAC_H_
6#define LIBUWEAVE_SRC_CRYPTO_HMAC_H_
7
8#include <stdbool.h>
9#include <stddef.h>
10#include <stdint.h>
11
12typedef struct {
13  const uint8_t* bytes;
14  size_t num_bytes;
15} UwCryptoHmacMsg;
16
17/**
18 * Compute HMAC over a list of messages, which is equivalent to computing HMAC
19 * over the concatenation of all the messages. The HMAC output will be truncated
20 * to the desired length truncated_digest_len, and written into trucated_digest.
21 */
22bool uw_crypto_hmac_(const uint8_t* key,
23                     size_t key_len,
24                     const UwCryptoHmacMsg messages[],
25                     size_t num_messages,
26                     uint8_t* truncated_digest,
27                     size_t truncated_digest_len);
28
29#endif  // LIBUWEAVE_SRC_CRYPTO_HMAC_H_
30