diff options
Diffstat (limited to 'src/rtl/sha256_core.v')
-rw-r--r-- | src/rtl/sha256_core.v | 101 |
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 |