blob: 2a98fa89f3bcf6d7a864af349a277fb2b61e9747 [file] [log] [blame]
Vitaly Buka4615e0d2015-10-14 15:35:12 -07001// Copyright 2015 The Weave Authors. All rights reserved.
Vitaly Buka7ce499f2015-06-09 08:04:11 -07002// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
Stefan Sauer2d16dfa2015-09-25 17:08:35 +02005#include "src/privet/openssl_utils.h"
Vitaly Buka7ce499f2015-06-09 08:04:11 -07006
7#include <algorithm>
8
9#include <openssl/evp.h>
10#include <openssl/hmac.h>
11
12#include <base/logging.h>
13
Vitaly Bukab6f015a2015-07-09 14:59:23 -070014namespace weave {
15namespace privet {
Vitaly Buka7ce499f2015-06-09 08:04:11 -070016
Vitaly Bukaa04405e2015-08-13 18:28:14 -070017std::vector<uint8_t> HmacSha256(const std::vector<uint8_t>& key,
18 const std::vector<uint8_t>& data) {
19 std::vector<uint8_t> mac(kSha256OutputSize);
Vitaly Buka7ce499f2015-06-09 08:04:11 -070020 uint32_t len = 0;
Vitaly Buka075b3d42015-06-09 08:34:25 -070021 CHECK(HMAC(EVP_sha256(), key.data(), key.size(), data.data(), data.size(),
22 mac.data(), &len));
Vitaly Buka7ce499f2015-06-09 08:04:11 -070023 CHECK_EQ(len, kSha256OutputSize);
24 return mac;
25}
26
Vitaly Bukab6f015a2015-07-09 14:59:23 -070027} // namespace privet
28} // namespace weave