aboutsummaryrefslogtreecommitdiff
path: root/src/rtl/sha256_core.v
diff options
context:
space:
mode:
Diffstat (limited to 'src/rtl/sha256_core.v')
-rw-r--r--src/rtl/sha256_core.v101
1 files changed, 69 insertions, 32 deletions
diff --git a/src/rtl/sha256_core.v b/src/rtl/sha256_core.v
index 448dfe6..6553aab 100644
--- a/src/rtl/sha256_core.v
+++ b/src/rtl/sha256_core.v
@@ -44,6 +44,7 @@ module sha256_core(
input wire init,
input wire next,
+ input wire mode,
input wire [511 : 0] block,
@@ -68,20 +69,29 @@ module sha256_core(
//----------------------------------------------------------------
// Internal constant and parameter definitions.
//----------------------------------------------------------------
- parameter H0_0 = 32'h6a09e667;
- parameter H0_1 = 32'hbb67ae85;
- parameter H0_2 = 32'h3c6ef372;
- parameter H0_3 = 32'ha54ff53a;
- parameter H0_4 = 32'h510e527f;
- parameter H0_5 = 32'h9b05688c;
- parameter H0_6 = 32'h1f83d9ab;
- parameter H0_7 = 32'h5be0cd19;
-
- parameter SHA256_ROUNDS = 63;
-
- parameter CTRL_IDLE = 0;
- parameter CTRL_ROUNDS = 1;
- parameter CTRL_DONE = 2;
+ localparam SHA224_H0_0 = 32'hc1059ed8;
+ localparam SHA224_H0_1 = 32'h367cd507;
+ localparam SHA224_H0_2 = 32'h3070dd17;
+ localparam SHA224_H0_3 = 32'hf70e5939;
+ localparam SHA224_H0_4 = 32'hffc00b31;
+ localparam SHA224_H0_5 = 32'h68581511;
+ localparam SHA224_H0_6 = 32'h64f98fa7;
+ localparam SHA224_H0_7 = 32'hbefa4fa4;
+
+ localparam SHA256_H0_0 = 32'h6a09e667;
+ localparam SHA256_H0_1 = 32'hbb67ae85;
+ localparam SHA256_H0_2 = 32'h3c6ef372;
+ localparam SHA256_H0_3 = 32'ha54ff53a;
+ localparam SHA256_H0_4 = 32'h510e527f;
+ localparam SHA256_H0_5 = 32'h9b05688c;
+ localparam SHA256_H0_6 = 32'h1f83d9ab;
+ localparam SHA256_H0_7 = 32'h5be0cd19;
+
+ localparam SHA256_ROUNDS = 63;
+
+ localparam CTRL_IDLE = 0;
+ localparam CTRL_ROUNDS = 1;
+ localparam CTRL_DONE = 2;
//----------------------------------------------------------------
@@ -311,15 +321,29 @@ module sha256_core(
if (digest_init)
begin
- H0_new = H0_0;
- H1_new = H0_1;
- H2_new = H0_2;
- H3_new = H0_3;
- H4_new = H0_4;
- H5_new = H0_5;
- H6_new = H0_6;
- H7_new = H0_7;
H_we = 1;
+ if (mode)
+ begin
+ H0_new = SHA256_H0_0;
+ H1_new = SHA256_H0_1;
+ H2_new = SHA256_H0_2;
+ H3_new = SHA256_H0_3;
+ H4_new = SHA256_H0_4;
+ H5_new = SHA256_H0_5;
+ H6_new = SHA256_H0_6;
+ H7_new = SHA256_H0_7;
+ end
+ else
+ begin
+ H0_new = SHA224_H0_0;
+ H1_new = SHA224_H0_1;
+ H2_new = SHA224_H0_2;
+ H3_new = SHA224_H0_3;
+ H4_new = SHA224_H0_4;
+ H5_new = SHA224_H0_5;
+ H6_new = SHA224_H0_6;
+ H7_new = SHA224_H0_7;
+ end
end
if (digest_update)
@@ -397,17 +421,31 @@ module sha256_core(
if (state_init)
begin
+ a_h_we = 1;
if (first_block)
begin
- a_new = H0_0;
- b_new = H0_1;
- c_new = H0_2;
- d_new = H0_3;
- e_new = H0_4;
- f_new = H0_5;
- g_new = H0_6;
- h_new = H0_7;
- a_h_we = 1;
+ if (mode)
+ begin
+ a_new = SHA256_H0_0;
+ b_new = SHA256_H0_1;
+ c_new = SHA256_H0_2;
+ d_new = SHA256_H0_3;
+ e_new = SHA256_H0_4;
+ f_new = SHA256_H0_5;
+ g_new = SHA256_H0_6;
+ h_new = SHA256_H0_7;
+ end
+ else
+ begin
+ a_new = SHA224_H0_0;
+ b_new = SHA224_H0_1;
+ c_new = SHA224_H0_2;
+ d_new = SHA224_H0_3;
+ e_new = SHA224_H0_4;
+ f_new = SHA224_H0_5;
+ g_new = SHA224_H0_6;
+ h_new = SHA224_H0_7;
+ end
end
else
begin
@@ -419,7 +457,6 @@ module sha256_core(
f_new = H5_reg;
g_new = H6_reg;
h_new = H7_reg;
- a_h_we = 1;
end
end