summaryrefslogtreecommitdiff
path: root/raw-wiki-dump/GitRepositories%2Fcore%2Fhash%2Fsha1.trac
diff options
context:
space:
mode:
Diffstat (limited to 'raw-wiki-dump/GitRepositories%2Fcore%2Fhash%2Fsha1.trac')
-rw-r--r--raw-wiki-dump/GitRepositories%2Fcore%2Fhash%2Fsha1.trac308
1 files changed, 308 insertions, 0 deletions
diff --git a/raw-wiki-dump/GitRepositories%2Fcore%2Fhash%2Fsha1.trac b/raw-wiki-dump/GitRepositories%2Fcore%2Fhash%2Fsha1.trac
new file mode 100644
index 0000000..d4c246d
--- /dev/null
+++ b/raw-wiki-dump/GitRepositories%2Fcore%2Fhash%2Fsha1.trac
@@ -0,0 +1,308 @@
+{{{
+#!htmlcomment
+
+This page is maintained automatically by a script. Don't modify this page by hand,
+your changes will just be overwritten the next time the script runs. Talk to your
+Friendly Neighborhood Repository Maintainer if you need to change something here.
+
+}}}
+
+{{{
+#!html
+<h1>sha1</h1>
+
+<h2>Introduction</h2>
+
+<p>Verilog implementation of the SHA-1 cryptgraphic hash function. The
+functionality follows the specification in NIST FIPS 180-4.</p>
+
+<p>The sha1 design is divided into the following sections.</p>
+
+<ul>
+<li>src/rtl - RTL source files</li>
+<li>src/tb - Testbenches for the RTL files</li>
+<li>src/model/python - Functional model written in python</li>
+<li>doc/ - documentation (currently not done.)</li>
+<li>toolruns/ - Where tools are supposed to be run. Includes a Makefile
+for building and simulating the design using <a href="http://iverilog.icarus.com/">Icarus
+Verilog</a>.</li>
+</ul>
+
+<p>The actual core consists of the following RTL files:</p>
+
+<ul>
+<li>sha1.v</li>
+<li>sha1_core.v</li>
+<li>sha1_w_mem.v</li>
+</ul>
+
+<p>The main core functionality is in the sha1_core file. The file
+sha1_w_mem contains the message block memory W (see FIPS 180-4).
+The top level entity is called sha1_core. The sha1_core module has wide
+interfaces (512 bit block input, 160 bit digest). In order to make it
+usable you probably want to wrap the core with a bus interface.</p>
+
+<p>The file sha1.v contains a top level wrapper that provides a simple
+interface with 32-bit data access . This interface contains mesage block
+and digest registers to allow a host to load the next block while the
+current block is being processed.</p>
+
+<h2>API</h2>
+
+<p>The following list contains the address map for all registers
+implemented by the sha1 top level wrapper:</p>
+
+<table>
+<thead>
+<tr>
+ <th>address</th>
+ <th>name</th>
+ <th>access</th>
+ <th>description</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+ <td>0x00</td>
+ <td>name0</td>
+ <td>R</td>
+ <td>"SHA1"</td>
+</tr>
+<tr>
+ <td>0x01</td>
+ <td>name1</td>
+ <td>R</td>
+ <td>" "</td>
+</tr>
+<tr>
+ <td>0x02</td>
+ <td>version</td>
+ <td>R</td>
+ <td>"0.50"</td>
+</tr>
+<tr>
+ <td></td>
+</tr>
+<tr>
+ <td>0x08</td>
+ <td>control</td>
+ <td>R/W</td>
+ <td>Control of core. Bit 0: init, Bit 1: next</td>
+</tr>
+<tr>
+ <td>0x09</td>
+ <td>status</td>
+ <td>R/W</td>
+ <td>Status of core. Bit 0: Ready, Bit 1: valid data</td>
+</tr>
+<tr>
+ <td></td>
+</tr>
+<tr>
+ <td>0x10</td>
+ <td>block0</td>
+ <td>R/W</td>
+ <td>data block register</td>
+</tr>
+<tr>
+ <td>0x11</td>
+ <td>block1</td>
+ <td>R/W</td>
+ <td>data block register</td>
+</tr>
+<tr>
+ <td>0x12</td>
+ <td>block2</td>
+ <td>R/W</td>
+ <td>data block register</td>
+</tr>
+<tr>
+ <td>0x13</td>
+ <td>block3</td>
+ <td>R/W</td>
+ <td>data block register</td>
+</tr>
+<tr>
+ <td>0x14</td>
+ <td>block4</td>
+ <td>R/W</td>
+ <td>data block register</td>
+</tr>
+<tr>
+ <td>0x15</td>
+ <td>block5</td>
+ <td>R/W</td>
+ <td>data block register</td>
+</tr>
+<tr>
+ <td>0x16</td>
+ <td>block6</td>
+ <td>R/W</td>
+ <td>data block register</td>
+</tr>
+<tr>
+ <td>0x17</td>
+ <td>block7</td>
+ <td>R/W</td>
+ <td>data block register</td>
+</tr>
+<tr>
+ <td>0x18</td>
+ <td>block8</td>
+ <td>R/W</td>
+ <td>data block register</td>
+</tr>
+<tr>
+ <td>0x19</td>
+ <td>block9</td>
+ <td>R/W</td>
+ <td>data block register</td>
+</tr>
+<tr>
+ <td>0x1a</td>
+ <td>block10</td>
+ <td>R/W</td>
+ <td>data block register</td>
+</tr>
+<tr>
+ <td>0x1b</td>
+ <td>block11</td>
+ <td>R/W</td>
+ <td>data block register</td>
+</tr>
+<tr>
+ <td>0x1c</td>
+ <td>block12</td>
+ <td>R/W</td>
+ <td>data block register</td>
+</tr>
+<tr>
+ <td>0x1d</td>
+ <td>block13</td>
+ <td>R/W</td>
+ <td>data block register</td>
+</tr>
+<tr>
+ <td>0x1e</td>
+ <td>block14</td>
+ <td>R/W</td>
+ <td>data block register</td>
+</tr>
+<tr>
+ <td>0x1f</td>
+ <td>block15</td>
+ <td>R/W</td>
+ <td>data block register</td>
+</tr>
+<tr>
+ <td></td>
+</tr>
+<tr>
+ <td>0x20</td>
+ <td>digest0</td>
+ <td>R/W</td>
+ <td>digest register</td>
+</tr>
+<tr>
+ <td>0x21</td>
+ <td>digest1</td>
+ <td>R/W</td>
+ <td>digest register</td>
+</tr>
+<tr>
+ <td>0x22</td>
+ <td>digest2</td>
+ <td>R/W</td>
+ <td>digest register</td>
+</tr>
+<tr>
+ <td>0x23</td>
+ <td>digest3</td>
+ <td>R/W</td>
+ <td>digest register</td>
+</tr>
+<tr>
+ <td>0x24</td>
+ <td>digest4</td>
+ <td>R/W</td>
+ <td>digest register</td>
+</tr>
+</tbody>
+</table>
+
+<h2>Implementation details</h2>
+
+<p>The implementation is iterative with one cycle/round. The initialization
+takes one cycle. The W memory is based around a sliding window of 16
+32-bit registers that are updated in sync with the round processing. The
+total latency/message block is 82 cycles.</p>
+
+<p>All registers have asynchronous reset.</p>
+
+<p>The design has been implemented and tested on TerasIC DE0-Nano and C5G
+FPGA boards.</p>
+
+<h2>Status</h2>
+
+<p>The design has been implemented and extensively been tested on TerasIC
+DE0-Nano and C5G FPGA boards. The core has also been tested using SW
+running on The Novena CPU talking to the core in the Xilinx Spartan-6
+FPGA.</p>
+
+<h2>FPGA-results</h2>
+
+<h3>Altera Cyclone FPGAs</h3>
+
+<p>Implementation results using Altera Quartus-II 13.1.</p>
+
+<p><strong><em>Altera Cyclone IV E</em></strong></p>
+
+<ul>
+<li>EP4CE6F17C6</li>
+<li>2913 LEs</li>
+<li>1527 regs</li>
+<li>107 MHz</li>
+</ul>
+
+<p><strong><em>Altera Cyclone IV GX</em></strong></p>
+
+<ul>
+<li>EP4CGX22CF19C6</li>
+<li>2814 LEs</li>
+<li>1527 regs</li>
+<li>105 MHz</li>
+</ul>
+
+<p><strong><em>Altera Cyclone V</em></strong></p>
+
+<ul>
+<li>5CGXFC7C7F23C8</li>
+<li>1124 ALMs</li>
+<li>1527 regs</li>
+<li>104 MHz</li>
+</ul>
+
+<h3>Xilinx FPGAs</h3>
+
+<p>Implementation results using ISE 14.7.</p>
+
+<p><em>* Xilinx Spartan-6 *</em></p>
+
+<ul>
+<li>xc6slx45-3csg324</li>
+<li>1589 LUTs</li>
+<li>564 Slices</li>
+<li>1592 regs</li>
+<li>100 MHz</li>
+</ul>
+
+<h2>TODO</h2>
+
+<ul>
+<li>Documentation</li>
+</ul>
+}}}
+
+[[RepositoryIndex(format=table,glob=core/hash/sha1)]]
+
+|| Clone `https://git.cryptech.is/core/hash/sha1.git` ||