summaryrefslogtreecommitdiff
path: root/chip/g/loader
diff options
context:
space:
mode:
authorVadim Bendebury <vbendeb@chromium.org>2015-11-20 15:11:56 -0800
committerchrome-bot <chrome-bot@chromium.org>2015-11-23 19:23:43 -0800
commit824d9e7a86a218dd0c4a0fc68930a0c283e6e82b (patch)
treeaf330b1a43058fabfdbae6b84ddd375bff87d538 /chip/g/loader
parentc13c653934bbd24acb1f8dec8f61ffe927d1abb2 (diff)
downloadchrome-ec-824d9e7a86a218dd0c4a0fc68930a0c283e6e82b.tar.gz
cr50: move key ladder initialization into its own files
This is required to be able to consolidate hardware and software hash implementations. BRANCH=none BUG=chrome-os-partner:43025 TEST=the device still boots up. Change-Id: If420541427bb316b97bc20a21fd3fd8a57708244 Signed-off-by: Vadim Bendebury <vbendeb@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/313654 Reviewed-by: Nagendra Modadugu <ngm@google.com>
Diffstat (limited to 'chip/g/loader')
-rw-r--r--chip/g/loader/hw_sha256.c35
-rw-r--r--chip/g/loader/hw_sha256.h2
-rw-r--r--chip/g/loader/key_ladder.c45
-rw-r--r--chip/g/loader/key_ladder.h14
-rw-r--r--chip/g/loader/launch.c5
5 files changed, 62 insertions, 39 deletions
diff --git a/chip/g/loader/hw_sha256.c b/chip/g/loader/hw_sha256.c
index af6ce8de5c..fb930f7d17 100644
--- a/chip/g/loader/hw_sha256.c
+++ b/chip/g/loader/hw_sha256.c
@@ -73,38 +73,3 @@ void hwSHA256(const void *data, size_t n, uint32_t *digest)
_sha_write(data, n);
_sha_wait(digest);
}
-
-void hwKeyLadderStep(uint32_t cert, const uint32_t *input)
-{
- uint32_t flags;
-
- GREG32(KEYMGR, SHA_ITOP) = 0; /* clear status. */
-
- VERBOSE("Cert %2u: ", cert);
-
- GWRITE_FIELD(KEYMGR, SHA_USE_CERT, INDEX, cert);
- GWRITE_FIELD(KEYMGR, SHA_USE_CERT, ENABLE, 1);
- GWRITE_FIELD(KEYMGR, SHA_CFG_EN, INT_EN_DONE, 1);
- GWRITE_FIELD(KEYMGR, SHA_TRIG, TRIG_GO, 1);
-
- if (input) {
- int i;
-
- for (i = 0; i < 8; ++i)
- GREG32(KEYMGR, SHA_INPUT_FIFO) = *input++;
-
- GWRITE_FIELD(KEYMGR, SHA_TRIG, TRIG_STOP, 1);
- }
-
- while (!GREG32(KEYMGR, SHA_ITOP))
- ;
-
- GREG32(KEYMGR, SHA_ITOP) = 0; /* Clear status. */
-
- flags = GREG32(KEYMGR, HKEY_ERR_FLAGS);
- if (flags)
- debug_printf("Cert %2u: fail %x\n", cert, flags);
- else
- VERBOSE("flags %x\n", flags);
-}
-
diff --git a/chip/g/loader/hw_sha256.h b/chip/g/loader/hw_sha256.h
index 0940efae40..b52af6f857 100644
--- a/chip/g/loader/hw_sha256.h
+++ b/chip/g/loader/hw_sha256.h
@@ -22,6 +22,4 @@ const uint8_t *hwSHA256_final(hwSHA256_CTX *ctx);
void hwSHA256(const void *data, size_t len, uint32_t *digest);
-void hwKeyLadderStep(uint32_t certificate, const uint32_t *input);
-
#endif /* __EC_CHIP_G_LOADER_HW_SHA256_H */
diff --git a/chip/g/loader/key_ladder.c b/chip/g/loader/key_ladder.c
new file mode 100644
index 0000000000..71ed200ef2
--- /dev/null
+++ b/chip/g/loader/key_ladder.c
@@ -0,0 +1,45 @@
+/* Copyright 2015 The Chromium OS Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "key_ladder.h"
+#include "debug_printf.h"
+#include "registers.h"
+/* #include "setup.h" */
+
+#include "dcrypto.h"
+
+void key_ladder_step(uint32_t cert, const uint32_t *input)
+{
+ uint32_t flags;
+
+ GREG32(KEYMGR, SHA_ITOP) = 0; /* Clear status. */
+
+ VERBOSE("Cert %2u: ", cert);
+
+ GWRITE_FIELD(KEYMGR, SHA_USE_CERT, INDEX, cert);
+ GWRITE_FIELD(KEYMGR, SHA_USE_CERT, ENABLE, 1);
+ GWRITE_FIELD(KEYMGR, SHA_CFG_EN, INT_EN_DONE, 1);
+ GWRITE_FIELD(KEYMGR, SHA_TRIG, TRIG_GO, 1);
+
+ if (input) {
+ int i;
+
+ for (i = 0; i < 8; ++i)
+ GREG32(KEYMGR, SHA_INPUT_FIFO) = *input++;
+
+ GWRITE_FIELD(KEYMGR, SHA_TRIG, TRIG_STOP, 1);
+ }
+
+ while (!GREG32(KEYMGR, SHA_ITOP))
+ ;
+
+ GREG32(KEYMGR, SHA_ITOP) = 0; /* Clear status. */
+
+ flags = GREG32(KEYMGR, HKEY_ERR_FLAGS);
+ if (flags)
+ debug_printf("Cert %2u: fail %x\n", cert, flags);
+ else
+ VERBOSE("flags %x\n", flags);
+}
diff --git a/chip/g/loader/key_ladder.h b/chip/g/loader/key_ladder.h
new file mode 100644
index 0000000000..778dc04aea
--- /dev/null
+++ b/chip/g/loader/key_ladder.h
@@ -0,0 +1,14 @@
+/* Copyright 2015 The Chromium OS Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef __EC_CHIP_G_LOADER_KEY_LADDER_H
+#define __EC_CHIP_G_LOADER_KEY_LADDER_H
+
+#include <inttypes.h>
+#include <stddef.h>
+
+void key_ladder_step(uint32_t certificate, const uint32_t *input);
+
+#endif /* ! __EC_CHIP_G_LOADER_KEY_LADDER_H */
diff --git a/chip/g/loader/launch.c b/chip/g/loader/launch.c
index 54d75e8dd1..5ef3ba8c62 100644
--- a/chip/g/loader/launch.c
+++ b/chip/g/loader/launch.c
@@ -5,11 +5,12 @@
#include "debug_printf.h"
#include "hw_sha256.h"
+#include "key_ladder.h"
#include "registers.h"
#include "rom_flash.h"
#include "setup.h"
-#include "verify.h"
#include "uart.h"
+#include "verify.h"
#include "util/signer/common/signed_header.h"
@@ -204,7 +205,7 @@ void tryLaunch(uint32_t adr, size_t max_size)
GREG32(KEYMGR, FWR_VLD) = 2;
GREG32(KEYMGR, FWR_LOCK) = 1;
- hwKeyLadderStep(40, FAKE_rom_hash);
+ key_ladder_step(40, FAKE_rom_hash);
/* TODO: do cert #40 and lock in ROM? */
GREG32(GLOBALSEC, HIDE_ROM) = 1;