Change-Id: I72b27357ce3611d9dd1c1c799222106a18470a14 Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/81707 Auto-Submit: Andres Erbsen <andreser@google.com> Reviewed-by: David Benjamin <davidben@google.com> Commit-Queue: David Benjamin <davidben@google.com>
Fiat Cryptography
Most files in this directory are generated using Fiat Cryptography from the associated library of arithmetic-implementation templates. These files are included under the Apache 2.0 license. (See LICENSE file.)
Some files are included directly from the fiat-c/src directory of the Fiat
Cryptography repository. Their contents are #included into source files, so
we rename them to .h. Implementations that use saturated arithmetic on 64-bit
words are further manually edited to use platform-appropriate incantations for
operations such as addition with carry; these changes are marked with "NOTE: edited after generation".
CryptOpt
Files in the asm directory are compiled from Fiat-Cryptography templates
using CryptOpt. These generated
assembly files have been edited to support call-stack unwinding. The modified
files have been checked for functional correctness using the CryptOpt
translation validator that is included in the Fiat-Cryptography repository.
Correct unwinding and manual assembler-directive changes related to object-file
conventions are validated using unit tests.
Bedrock
Routines for which assembly-level optimization is not necessary are written in
Bedrock2 and tranlated to C. The file
bedrock_unverified_platform.c.inc provides the platform functionality code
thus translated expects.
The P256 point doubling and addition are implemented in this manner in p256_coord.br.c.inc. This code originates from Fiat Cryptogaphy commit 6e22d333861d51c7f6baa0826648a2215d0c333f file src/Bedrock/P256.v Field arithmetic operations are dispatched in p256_field.c.inc to platform-specific code including assembly, fiat-crypto-generated C, and Bedrock-generated C.