From 478c26b4861d643caa6552ccb2de433ac31d563c Mon Sep 17 00:00:00 2001 From: Krzysztof Jackiewicz Date: Thu, 18 May 2023 13:50:04 +0200 Subject: [PATCH] Add missing KBKDF params in TZ backend Change-Id: I4cadca649889190c30868c55a2e91c9f49252d84 --- src/manager/crypto/tz-backend/internals.cpp | 7 +++++++ src/manager/crypto/tz-backend/tz-context.cpp | 17 +++++++++++++++-- src/manager/crypto/tz-backend/tz-context.h | 3 +++ 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/manager/crypto/tz-backend/internals.cpp b/src/manager/crypto/tz-backend/internals.cpp index d732c4c..51bce1d 100644 --- a/src/manager/crypto/tz-backend/internals.cpp +++ b/src/manager/crypto/tz-backend/internals.cpp @@ -755,6 +755,10 @@ void deriveKBKDF(const RawBuffer &secret, RawBuffer &keyTag, const RawBuffer &keyHash) { + RawBuffer label, context, fixed; + alg.getParam(ParamName::KBKDF_LABEL, label); + alg.getParam(ParamName::KBKDF_CONTEXT, context); + alg.getParam(ParamName::KBKDF_FIXED_INPUT, fixed); auto prf = unpack(alg, ParamName::KDF_PRF); auto mode = unpack(alg, ParamName::KBKDF_MODE); auto location = unpack(alg, ParamName::KBKDF_COUNTER_LOCATION); @@ -767,6 +771,9 @@ void deriveKBKDF(const RawBuffer &secret, RawBuffer keyPwdBuf(keyPwd.begin(), keyPwd.end()); TrustZoneContext::Instance().executeKbkdf(secret, + label, + context, + fixed, toTzPrf(prf), toTzKbkdfMode(mode), toTzCtrLoc(location), diff --git a/src/manager/crypto/tz-backend/tz-context.cpp b/src/manager/crypto/tz-backend/tz-context.cpp index bf603c9..06e9706 100644 --- a/src/manager/crypto/tz-backend/tz-context.cpp +++ b/src/manager/crypto/tz-backend/tz-context.cpp @@ -801,6 +801,9 @@ void TrustZoneContext::executeEcdh(const RawBuffer &prvKeyId, } void TrustZoneContext::executeKbkdf(const RawBuffer& secret, + const RawBuffer& label, + const RawBuffer& context, + const RawBuffer& fixed, tz_prf prf, tz_kbkdf_mode mode, tz_kbkdf_ctr_loc location, @@ -815,8 +818,18 @@ void TrustZoneContext::executeKbkdf(const RawBuffer& secret, // command ID = CMD_DERIVE LogDebug("TrustZoneContext::executeKbkdf"); - auto sIn = makeSerializer( - secret, prf, mode, location, rlen, llen, noSeparator, EncPwd{keyPwdBuf, keyPwdIV}, keyHash); + auto sIn = makeSerializer(secret, + label, + context, + fixed, + prf, + mode, + location, + rlen, + llen, + noSeparator, + EncPwd{keyPwdBuf, keyPwdIV}, keyHash); + TrustZoneMemory inMemory(m_Context, sIn.GetSize(), TEEC_MEM_INPUT); sIn.Serialize(inMemory); diff --git a/src/manager/crypto/tz-backend/tz-context.h b/src/manager/crypto/tz-backend/tz-context.h index e48e642..bee3dd5 100644 --- a/src/manager/crypto/tz-backend/tz-context.h +++ b/src/manager/crypto/tz-backend/tz-context.h @@ -167,6 +167,9 @@ public: const RawBuffer &secretHash); void executeKbkdf(const RawBuffer& secret, + const RawBuffer& label, + const RawBuffer& context, + const RawBuffer& fixed, tz_prf prf, tz_kbkdf_mode mode, tz_kbkdf_ctr_loc location, -- 2.7.4