[Cryptech-Commits] [sw/libhal] branch systolic_crt updated: 4096-bit RSA keys working again, with 8k keystore "blocks".
git at cryptech.is
git at cryptech.is
Fri Sep 15 15:01:38 UTC 2017
This is an automated email from the git hooks/post-receive script.
sra at hactrn.net pushed a commit to branch systolic_crt
in repository sw/libhal.
The following commit(s) were added to refs/heads/systolic_crt by this push:
new 238e33e 4096-bit RSA keys working again, with 8k keystore "blocks".
238e33e is described below
commit 238e33e53195385dac51e18fffd0f4511244c560
Author: Rob Austein <sra at hactrn.net>
AuthorDate: Fri Sep 15 10:58:05 2017 -0400
4096-bit RSA keys working again, with 8k keystore "blocks".
---
cryptech/libhal.py | 2 +-
ks.h | 2 +-
ks_token.c | 22 ++++++++++++++--------
unit-tests.py | 4 ++++
4 files changed, 20 insertions(+), 10 deletions(-)
diff --git a/cryptech/libhal.py b/cryptech/libhal.py
index 8666d15..acd1abb 100644
--- a/cryptech/libhal.py
+++ b/cryptech/libhal.py
@@ -403,7 +403,7 @@ class PKey(Handle):
return result
def export_pkey(self, pkey):
- return self.hsm.pkey_export(pkey = pkey, kekek = self, pkcs8_max = 2560, kek_max = 512)
+ return self.hsm.pkey_export(pkey = pkey, kekek = self, pkcs8_max = 5480, kek_max = 512)
def import_pkey(self, pkcs8, kek, flags = 0):
return self.hsm.pkey_import(kekek = self, pkcs8 = pkcs8, kek = kek, flags = flags)
diff --git a/ks.h b/ks.h
index b95216d..db857ac 100644
--- a/ks.h
+++ b/ks.h
@@ -46,7 +46,7 @@
*/
#ifndef HAL_KS_BLOCK_SIZE
-#define HAL_KS_BLOCK_SIZE (4096)
+#define HAL_KS_BLOCK_SIZE (4096 * 2)
#endif
/*
diff --git a/ks_token.c b/ks_token.c
index 38ca5d8..3f2194a 100644
--- a/ks_token.c
+++ b/ks_token.c
@@ -60,12 +60,13 @@
#define KS_TOKEN_CACHE_SIZE 4
#endif
-#define NUM_FLASH_BLOCKS KEYSTORE_NUM_SUBSECTORS
-
#if HAL_KS_BLOCK_SIZE % KEYSTORE_SUBSECTOR_SIZE != 0
#error Keystore block size is not a multiple of flash subsector size
#endif
+#define NUM_FLASH_BLOCKS ((KEYSTORE_NUM_SUBSECTORS * KEYSTORE_SUBSECTOR_SIZE) / HAL_KS_BLOCK_SIZE)
+#define SUBSECTORS_PER_BLOCK (HAL_KS_BLOCK_SIZE / KEYSTORE_SUBSECTOR_SIZE)
+
/*
* Keystore database.
*/
@@ -90,7 +91,7 @@ typedef struct {
static inline uint32_t ks_token_offset(const unsigned blockno)
{
- return blockno * KEYSTORE_SUBSECTOR_SIZE;
+ return blockno * HAL_KS_BLOCK_SIZE;
}
/*
@@ -102,7 +103,7 @@ static inline uint32_t ks_token_offset(const unsigned blockno)
static hal_error_t ks_token_read(hal_ks_t *ks, const unsigned blockno, hal_ks_block_t *block)
{
- if (ks != hal_ks_token || block == NULL || blockno >= NUM_FLASH_BLOCKS || sizeof(*block) != KEYSTORE_SUBSECTOR_SIZE)
+ if (ks != hal_ks_token || block == NULL || blockno >= NUM_FLASH_BLOCKS || sizeof(*block) != HAL_KS_BLOCK_SIZE)
return HAL_ERROR_IMPOSSIBLE;
/* Sigh, magic numeric return codes */
@@ -197,9 +198,14 @@ static hal_error_t ks_token_erase(hal_ks_t *ks, const unsigned blockno)
if (ks != hal_ks_token || blockno >= NUM_FLASH_BLOCKS)
return HAL_ERROR_IMPOSSIBLE;
- /* Sigh, magic numeric return codes */
- if (keystore_erase_subsector(blockno) != 1)
- return HAL_ERROR_KEYSTORE_ACCESS;
+ unsigned subsector = blockno * SUBSECTORS_PER_BLOCK;
+ const unsigned end = (blockno + 1) * SUBSECTORS_PER_BLOCK;
+
+ do {
+ /* Sigh, magic numeric return codes */
+ if (keystore_erase_subsector(subsector) != 1)
+ return HAL_ERROR_KEYSTORE_ACCESS;
+ } while (++subsector < end);
return HAL_OK;
}
@@ -238,7 +244,7 @@ static hal_error_t ks_token_erase_maybe(hal_ks_t *ks, const unsigned blockno)
static hal_error_t ks_token_write(hal_ks_t *ks, const unsigned blockno, hal_ks_block_t *block)
{
- if (ks != hal_ks_token || block == NULL || blockno >= NUM_FLASH_BLOCKS || sizeof(*block) != KEYSTORE_SUBSECTOR_SIZE)
+ if (ks != hal_ks_token || block == NULL || blockno >= NUM_FLASH_BLOCKS || sizeof(*block) != HAL_KS_BLOCK_SIZE)
return HAL_ERROR_IMPOSSIBLE;
hal_error_t err = ks_token_erase_maybe(ks, blockno);
diff --git a/unit-tests.py b/unit-tests.py
index 824d495..514aace 100644
--- a/unit-tests.py
+++ b/unit-tests.py
@@ -1279,6 +1279,7 @@ class TestPKeyAttribute(TestCaseLoggedIn):
self.load_and_fill(0, n_attrs = 64)
def test_attribute_bloat_volatile_many(self):
+ self.skipUnlessAll("bloat tests with large flash blocks exceed XDR limits, sigh")
with self.assertRaises(HAL_ERROR_RESULT_TOO_LONG):
self.load_and_fill(0, n_attrs = 128)
@@ -1286,6 +1287,7 @@ class TestPKeyAttribute(TestCaseLoggedIn):
self.load_and_fill(0, n_attrs = 6, n_fill = 256)
def test_attribute_bloat_volatile_big(self):
+ self.skipUnlessAll("bloat tests with large flash blocks exceed XDR limits, sigh")
with self.assertRaises(HAL_ERROR_RESULT_TOO_LONG):
self.load_and_fill(0, n_attrs = 6, n_fill = 512)
@@ -1293,6 +1295,7 @@ class TestPKeyAttribute(TestCaseLoggedIn):
self.load_and_fill(HAL_KEY_FLAG_TOKEN, n_attrs = 64)
def test_attribute_bloat_token_many(self):
+ self.skipUnlessAll("bloat tests with large flash blocks exceed XDR limits, sigh")
with self.assertRaises(HAL_ERROR_RESULT_TOO_LONG):
self.load_and_fill(HAL_KEY_FLAG_TOKEN, n_attrs = 128)
@@ -1300,6 +1303,7 @@ class TestPKeyAttribute(TestCaseLoggedIn):
self.load_and_fill(HAL_KEY_FLAG_TOKEN, n_attrs = 6, n_fill = 256)
def test_attribute_bloat_token_big(self):
+ self.skipUnlessAll("bloat tests with large flash blocks exceed XDR limits, sigh")
with self.assertRaises(HAL_ERROR_RESULT_TOO_LONG):
self.load_and_fill(HAL_KEY_FLAG_TOKEN, n_attrs = 6, n_fill = 512)
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the Commits
mailing list