Skip to content

Commit

Permalink
Adopt the Arm SIMD-optimized p384 fields to point operations
Browse files Browse the repository at this point in the history
This patch updates the p384 point operations to use the field operations optimized using NEON and the SLOTHY optimizer.

The performance improvement is around 9%.

```
p384_montjdouble                :   591.7 ns each (var  0.1%, corr -0.02) =    1690105 ops/sec
p384_montjadd                   :  1143.6 ns each (var  0.1%, corr  0.04) =     874447 ops/sec
p384_montjscalarmul             : 329982.3 ns each (var  0.0%, corr  0.09) =       3030 ops/sec
=>
p384_montjdouble                :   543.2 ns each (var  0.1%, corr  0.02) =    1840798 ops/sec
p384_montjadd                   :  1044.5 ns each (var  0.1%, corr -0.09) =     957396 ops/sec
p384_montjscalarmul             : 303017.8 ns each (var  0.0%, corr  0.04) =       3300 ops/sec
```

This patch also includes the following updates:
- Add `arm/proofs/utils` and factor out the OCaml codes that are parameters to the equivalence checking tactics as files in the directory.
- Update EQUIV_STEP_TAC to take additional arguments that describe dead value information of the registers in the programs.
  The information describes which registers contain dead values after each program location.
  EQUIV_STEP_TAC uses this information to clean assumptions that will not be used later during simulation.
- A few tactics for equivalence checking to shorten repeatedly appearing proof patterns and a few updates
  in arm.ml for better error messages
- Bug fixes in actions_merger.ml
- Add a user-defined custom cache to ORTHOGONAL_COMPONENTS_CONV. This is useful for equiv checking because the memory invariants that appear in assumptions have a typical form (the byte64).
- And many other improvements for speed
  • Loading branch information
aqjune-aws committed Sep 16, 2024
1 parent d85c6b5 commit 0af76bc
Show file tree
Hide file tree
Showing 28 changed files with 52,539 additions and 31,418 deletions.
10 changes: 7 additions & 3 deletions arm/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -372,7 +372,9 @@ BIGNUM_OBJ = curve25519/bignum_add_p25519.o \
sm2/bignum_triple_sm2.o

UNOPT_OBJ = p256/unopt/p256_montjadd.o \
p256/unopt/p256_montjdouble.o
p256/unopt/p256_montjdouble.o \
p384/unopt/p384_montjadd.o \
p384/unopt/p384_montjdouble.o

OBJ = $(POINT_OBJ) $(BIGNUM_OBJ)

Expand Down Expand Up @@ -441,8 +443,10 @@ p256/p256_scalarmul.correct: proofs/bignum_demont_p256.ml p256/bignum_demont_p25
p256/p256_scalarmul_alt.correct: proofs/bignum_demont_p256.ml p256/bignum_demont_p256.o proofs/bignum_inv_p256.ml p256/bignum_inv_p256.o proofs/bignum_montmul_p256_alt.ml p256/bignum_montmul_p256_alt.o proofs/bignum_montsqr_p256_alt.ml p256/bignum_montsqr_p256_alt.o proofs/bignum_tomont_p256.ml p256/bignum_tomont_p256.o proofs/p256_montjadd_alt.ml p256/p256_montjadd_alt.o proofs/p256_montjdouble_alt.ml p256/p256_montjdouble_alt.o proofs/p256_montjmixadd_alt.ml p256/p256_montjmixadd_alt.o proofs/p256_scalarmul_alt.ml p256/p256_scalarmul_alt.o ; ../tools/run-proof.sh arm p256_scalarmul_alt "$(HOLLIGHT)" $@
p256/p256_scalarmulbase.correct: proofs/bignum_demont_p256.ml p256/bignum_demont_p256.o proofs/bignum_inv_p256.ml p256/bignum_inv_p256.o proofs/bignum_montmul_p256.ml p256/bignum_montmul_p256.o proofs/bignum_montsqr_p256.ml p256/bignum_montsqr_p256.o proofs/p256_montjmixadd.ml p256/p256_montjmixadd.o proofs/p256_scalarmulbase.ml p256/p256_scalarmulbase.o ; ../tools/run-proof.sh arm p256_scalarmulbase "$(HOLLIGHT)" $@
p256/p256_scalarmulbase_alt.correct: proofs/bignum_demont_p256.ml p256/bignum_demont_p256.o proofs/bignum_inv_p256.ml p256/bignum_inv_p256.o proofs/bignum_montmul_p256_alt.ml p256/bignum_montmul_p256_alt.o proofs/bignum_montsqr_p256_alt.ml p256/bignum_montsqr_p256_alt.o proofs/p256_montjmixadd_alt.ml p256/p256_montjmixadd_alt.o proofs/p256_scalarmulbase_alt.ml p256/p256_scalarmulbase_alt.o ; ../tools/run-proof.sh arm p256_scalarmulbase_alt "$(HOLLIGHT)" $@
p384/p384_montjscalarmul.correct: proofs/p384_montjadd.ml p384/p384_montjadd.o proofs/p384_montjdouble.ml p384/p384_montjdouble.o proofs/p384_montjscalarmul.ml p384/p384_montjscalarmul.o ; ../tools/run-proof.sh arm p384_montjscalarmul "$(HOLLIGHT)" $@
p384/p384_montjscalarmul_alt.correct: proofs/p384_montjadd_alt.ml p384/p384_montjadd_alt.o proofs/p384_montjdouble_alt.ml p384/p384_montjdouble_alt.o proofs/p384_montjscalarmul_alt.ml p384/p384_montjscalarmul_alt.o ; ../tools/run-proof.sh arm p384_montjscalarmul_alt "$(HOLLIGHT)" $@
p384/p384_montjadd.correct: proofs/p384_montjadd.ml p384/p384_montjadd.o p384/unopt/p384_montjadd.o proofs/bignum_montsqr_p384_neon.ml p384/bignum_montsqr_p384_neon.o proofs/bignum_montsqr_p384.ml p384/bignum_montsqr_p384.o proofs/bignum_montmul_p384_neon.ml p384/bignum_montmul_p384_neon.o proofs/bignum_montmul_p384.ml p384/bignum_montmul_p384.o proofs/bignum_sub_p384.ml p384/bignum_sub_p384.o ; ../tools/run-proof.sh arm p384_montjadd "$(HOLLIGHT)" $@
p384/p384_montjdouble.correct: proofs/p384_montjdouble.ml p384/p384_montjdouble.o p384/unopt/p384_montjdouble.o proofs/bignum_montsqr_p384_neon.ml p384/bignum_montsqr_p384_neon.o proofs/bignum_montsqr_p384.ml p384/bignum_montsqr_p384.o proofs/bignum_montmul_p384_neon.ml p384/bignum_montmul_p384_neon.o proofs/bignum_montmul_p384.ml p384/bignum_montmul_p384.o proofs/bignum_sub_p384.ml p384/bignum_sub_p384.o proofs/bignum_add_p384.ml p384/bignum_add_p384.o ; ../tools/run-proof.sh arm p384_montjdouble "$(HOLLIGHT)" $@
p384/p384_montjscalarmul.correct: proofs/p384_montjadd.ml p384/p384_montjadd.o p384/unopt/p384_montjadd.o proofs/p384_montjdouble.ml p384/p384_montjdouble.o p384/unopt/p384_montjdouble.o proofs/p384_montjscalarmul.ml p384/p384_montjscalarmul.o ; ../tools/run-proof.sh arm p384_montjscalarmul "$(HOLLIGHT)" $@
p384/p384_montjscalarmul_alt.correct: proofs/p384_montjadd_alt.ml p384/p384_montjadd_alt.o proofs/p384_montjdouble_alt.ml p384/p384_montjdouble_alt.o proofs/bignum_montsqr_p384_neon.ml p384/bignum_montsqr_p384_neon.o proofs/bignum_montsqr_p384.ml p384/bignum_montsqr_p384.o proofs/bignum_montmul_p384_neon.ml p384/bignum_montmul_p384_neon.o proofs/bignum_montmul_p384.ml p384/bignum_montmul_p384.o proofs/bignum_sub_p384.ml p384/bignum_sub_p384.o proofs/bignum_add_p384.ml p384/bignum_add_p384.o proofs/p384_montjscalarmul_alt.ml p384/p384_montjscalarmul_alt.o ; ../tools/run-proof.sh arm p384_montjscalarmul_alt "$(HOLLIGHT)" $@

# All other other instances are standalone

Expand Down
7,255 changes: 6,380 additions & 875 deletions arm/p384/p384_montjadd.S

Large diffs are not rendered by default.

4,151 changes: 3,098 additions & 1,053 deletions arm/p384/p384_montjdouble.S

Large diffs are not rendered by default.

Loading

0 comments on commit 0af76bc

Please sign in to comment.