From 3aa8b1dd6e0f504ef83da99f8c9cdb2532f948f5 Mon Sep 17 00:00:00 2001 From: Rob Austein Date: Sun, 13 Sep 2020 23:10:21 +0000 Subject: Initial conversion pass --- .../GitRepositories%2Fcore%2Fpkey%2Fecdhp384.md | 117 +++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 raw-wiki-dump/GitRepositories%2Fcore%2Fpkey%2Fecdhp384.md (limited to 'raw-wiki-dump/GitRepositories%2Fcore%2Fpkey%2Fecdhp384.md') diff --git a/raw-wiki-dump/GitRepositories%2Fcore%2Fpkey%2Fecdhp384.md b/raw-wiki-dump/GitRepositories%2Fcore%2Fpkey%2Fecdhp384.md new file mode 100644 index 0000000..a651ff2 --- /dev/null +++ b/raw-wiki-dump/GitRepositories%2Fcore%2Fpkey%2Fecdhp384.md @@ -0,0 +1,117 @@ +``` +#!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 +

ecdhp256

+ +

Core Description

+ +

This core implements the scalar point multiplier for ECDSA curve P-384. It can be used during generation of public keys, the core can also be used as part of the signing operation, it can also do ECDH key exchange.

+ +

API Specification

+ +

The core interface is similar to other Cryptech cores. FMC memory map looks like the following:

+ +

0x0000 | NAME0
+0x0004 | NAME1
+0x0008 | VERSION

+ +

0x0020 | CONTROL
+0x0024 | STATUS

+ +

0x0200 | K00
+0x0204 | K01
+...
+0x022C | K11

+ +

0x0240 | XIN00
+0x0244 | XIN01
+...
+0x026C | XIN11

+ +

0x0280 | YIN00
+0x0284 | YIN01
+...
+0x02AC | YIN11

+ +

0x02C0 | XOUT00
+0x02C4 | XOUT01
+...
+0x02EC | XOUT11

+ +

0x0300 | YOUT00
+0x0304 | YOUT01
+...
+0x032C | YOUT11

+ +

The core has the following registers:

+ + + +

Implementation Details

+ +

The top-level core module contains block memory buffers for input and output operands and the base point multiplier, that reads from the input buffer and writes to the output buffers.

+ +

The base point multiplier itself consists of the following:

+ + + +

The "worker" unit can execute five basic operations:

+ + + +

There are two primary microprograms, that the worker runs: curve point doubling and addition of curve point to the base point. Those microprograms use projective Jacobian coordinates, so one more microprogram is used to convert the product into affine coordinates with the help of modular inversion unit.

+ +

Note, that the core is supplemented by a reference model written in C, that has extensive comments describing tricky corners of the underlying math.

+ +

Vendor-specific Primitives

+ +

Cryptech Alpha platform is based on Xilinx Artix-7 200T FPGA, so this core takes advantage of Xilinx-specific DSP slices to carry out math-intensive operations. All vendor-specific math primitives are placed under /rtl/lowlevel/artix7, the core also offers generic replacements under /rtl/lowlevel/generic, they can be used for simulation with 3rd party tools, that are not aware of Xilinx-specific stuff. Selection of vendor/generic primitives is done in ecdsa_lowlevel_settings.v, when porting to other architectures, only those four low-level modules need to be ported.

+``` + +[[RepositoryIndex(format=table,glob=core/pkey/ecdhp384)]] + +| Clone `https://git.cryptech.is/core/pkey/ecdhp384.git` | +|---| -- cgit v1.2.3