aboutsummaryrefslogtreecommitdiff
path: root/src/crypto/hkdf_sha256_32.cpp
diff options
context:
space:
mode:
authorJonas Schnelli <dev@jonasschnelli.ch>2018-08-24 11:10:43 +0200
committerJonas Schnelli <dev@jonasschnelli.ch>2019-05-11 09:14:07 +0200
commit551d489416339dae8f9d896013cd060a21406e2b (patch)
treefeaa935ee4a068218a2559654b11a6338ca4c8ac /src/crypto/hkdf_sha256_32.cpp
parent3b64f852e400c552f031697d6a86829dc6e74bd6 (diff)
downloadbitcoin-551d489416339dae8f9d896013cd060a21406e2b.tar.xz
Add HKDF HMAC_SHA256 L=32 implementations
Diffstat (limited to 'src/crypto/hkdf_sha256_32.cpp')
-rw-r--r--src/crypto/hkdf_sha256_32.cpp21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/crypto/hkdf_sha256_32.cpp b/src/crypto/hkdf_sha256_32.cpp
new file mode 100644
index 0000000000..9cea5995ec
--- /dev/null
+++ b/src/crypto/hkdf_sha256_32.cpp
@@ -0,0 +1,21 @@
+// Copyright (c) 2018 The Bitcoin Core developers
+// Distributed under the MIT software license, see the accompanying
+// file COPYING or http://www.opensource.org/licenses/mit-license.php.
+
+#include <crypto/hkdf_sha256_32.h>
+
+#include <assert.h>
+#include <string.h>
+
+CHKDF_HMAC_SHA256_L32::CHKDF_HMAC_SHA256_L32(const unsigned char* ikm, size_t ikmlen, const std::string& salt)
+{
+ CHMAC_SHA256((const unsigned char*)salt.c_str(), salt.size()).Write(ikm, ikmlen).Finalize(m_prk);
+}
+
+void CHKDF_HMAC_SHA256_L32::Expand32(const std::string& info, unsigned char hash[OUTPUT_SIZE])
+{
+ // expand a 32byte key (single round)
+ assert(info.size() <= 128);
+ static const unsigned char one[1] = {1};
+ CHMAC_SHA256(m_prk, 32).Write((const unsigned char*)info.data(), info.size()).Write(one, 1).Finalize(hash);
+}