From 0915302b7ffa0757be1859d73f14037f338c0253 Mon Sep 17 00:00:00 2001 From: Rob Austein Date: Tue, 14 Jul 2015 00:20:03 -0400 Subject: Changes to support Pavel's ModExpS6 core. --- hal.h | 56 +++++++++++++++++++++++++------------------------------- 1 file changed, 25 insertions(+), 31 deletions(-) (limited to 'hal.h') diff --git a/hal.h b/hal.h index 8b731d4..4a31398 100644 --- a/hal.h +++ b/hal.h @@ -390,39 +390,33 @@ * MATH segment. */ -/* Modexp core */ -#define MODEXP_ADDR_BASE (SEGMENT_OFFSET_MATH + (0x00 * CORE_SIZE)) -#define MODEXP_ADDR_NAME0 (MODEXP_ADDR_BASE + ADDR_NAME0) -#define MODEXP_ADDR_NAME1 (MODEXP_ADDR_BASE + ADDR_NAME1) -#define MODEXP_ADDR_VERSION (MODEXP_ADDR_BASE + ADDR_VERSION) -#define MODEXP_ADDR_CTRL (MODEXP_ADDR_BASE + ADDR_CTRL) -#define MODEXP_CTRL_INIT_BIT (1) -#define MODEXP_CTRL_NEXT_BIT (2) -#define MODEXP_ADDR_STATUS (MODEXP_ADDR_BASE + ADDR_STATUS) +#define MATH_CORE_SIZE (0x400) -#define MODEXP_ADDR_DELAY (MODEXP_ADDR_BASE + 0x13) -#define MODEXP_STATUS_READY (1) - -#define MODEXP_MODULUS_LENGTH (MODEXP_ADDR_BASE + 0x20) -#define MODEXP_EXPONENT_LENGTH (MODEXP_ADDR_BASE + 0x21) -#define MODEXP_LENGTH (MODEXP_ADDR_BASE + 0x22) - -#define MODEXP_MODULUS_PTR_RST (MODEXP_ADDR_BASE + 0x30) -#define MODEXP_MODULUS_DATA (MODEXP_ADDR_BASE + 0x31) - -#define MODEXP_EXPONENT_PTR_RST (MODEXP_ADDR_BASE + 0x40) -#define MODEXP_EXPONENT_DATA (MODEXP_ADDR_BASE + 0x41) - -#define MODEXP_MESSAGE_PTR_RST (MODEXP_ADDR_BASE + 0x50) -#define MODEXP_MESSAGE_DATA (MODEXP_ADDR_BASE + 0x51) - -#define MODEXP_RESULT_PTR_RST (MODEXP_ADDR_BASE + 0x60) -#define MODEXP_RESULT_DATA (MODEXP_ADDR_BASE + 0x61) - -#define MODEXP_NAME0 "mode" -#define MODEXP_NAME1 "xp " -#define MODEXP_VERSION "0.51" +/* + * ModExpS6 core. MODEXPS6_OPERAND_BITS is size in bits of largest + * supported modulus. + */ +#define MODEXPS6_ADDR_BASE (SEGMENT_OFFSET_MATH + (0x00 * MATH_CORE_SIZE)) +#define MODEXPS6_OPERAND_BITS (4096) +#define MODEXPS6_OPERAND_WORDS (MODEXPS6_OPERAND_BITS/32) +#define MODEXPS6_ADDR_REGISTERS (MODEXPS6_ADDR_BASE + 0*MODEXPS6_OPERAND_WORDS) +#define MODEXPS6_ADDR_OPERANDS (MODEXPS6_ADDR_BASE + 4*MODEXPS6_OPERAND_WORDS) +#define MODEXPS6_ADDR_NAME0 (MODEXPS6_ADDR_REGISTERS + ADDR_NAME0) +#define MODEXPS6_ADDR_NAME1 (MODEXPS6_ADDR_REGISTERS + ADDR_NAME1) +#define MODEXPS6_ADDR_VERSION (MODEXPS6_ADDR_REGISTERS + ADDR_VERSION) +#define MODEXPS6_ADDR_CTRL (MODEXPS6_ADDR_REGISTERS + ADDR_CTRL) +#define MODEXPS6_ADDR_STATUS (MODEXPS6_ADDR_REGISTERS + ADDR_STATUS) +#define MODEXPS6_ADDR_MODE (MODEXPS6_ADDR_REGISTERS + 0x10) +#define MODEXPS6_ADDR_MODULUS_WIDTH (MODEXPS6_ADDR_REGISTERS + 0x11) +#define MODEXPS6_ADDR_EXPONENT_WIDTH (MODEXPS6_ADDR_REGISTERS + 0x12) +#define MODEXPS6_ADDR_MODULUS (MODEXPS6_ADDR_OPERANDS + 0*MODEXPS6_OPERAND_WORDS) +#define MODEXPS6_ADDR_MESSAGE (MODEXPS6_ADDR_OPERANDS + 1*MODEXPS6_OPERAND_WORDS) +#define MODEXPS6_ADDR_EXPONENT (MODEXPS6_ADDR_OPERANDS + 2*MODEXPS6_OPERAND_WORDS) +#define MODEXPS6_ADDR_RESULT (MODEXPS6_ADDR_OPERANDS + 3*MODEXPS6_OPERAND_WORDS) +#define MODEXPS6_NAME0 "mode" +#define MODEXPS6_NAME1 "xps6" +#define MODEXPS6_VERSION "0.10" /* * C API error codes. Defined in this form so we can keep the tokens -- cgit v1.2.3 From b96b3aeb4ac1fae68e77bb38a1553855b8ef16f7 Mon Sep 17 00:00:00 2001 From: Rob Austein Date: Fri, 17 Jul 2015 10:54:52 +0200 Subject: First cut at libhal support for hash cores with ability to save and restore internal state. Compiles, not yet tested. --- hal.h | 1 + 1 file changed, 1 insertion(+) (limited to 'hal.h') diff --git a/hal.h b/hal.h index 8b731d4..15ab8f9 100644 --- a/hal.h +++ b/hal.h @@ -517,6 +517,7 @@ typedef struct { const uint8_t * const digest_algorithm_id; size_t digest_algorithm_id_length; const void *driver; + unsigned can_restore_state : 1; } hal_hash_descriptor_t; /* -- cgit v1.2.3 From 809f0c7e9a4c49aa52b77ec2ab58a970a3ade389 Mon Sep 17 00:00:00 2001 From: Rob Austein Date: Sat, 18 Jul 2015 10:58:45 +0200 Subject: Add support for dynamic allocation of hash and HMAC state, for cases where it's unavoidable. --- hal.h | 3 +++ 1 file changed, 3 insertions(+) (limited to 'hal.h') diff --git a/hal.h b/hal.h index 15ab8f9..7aeed42 100644 --- a/hal.h +++ b/hal.h @@ -567,6 +567,9 @@ extern hal_error_t hal_hmac_update(const hal_hmac_state_t state, extern hal_error_t hal_hmac_finalize(const hal_hmac_state_t state, uint8_t *hmac, const size_t length); +extern void hal_hash_cleanup(hal_hash_state_t *state); + +extern void hal_hmac_cleanup(hal_hmac_state_t *state); /* * AES key wrap functions. -- cgit v1.2.3