Skip to content

Highly-optimized ARMv8 implementation of Supersingular Isogeny Key Encapsulation (SIKE)

License

Notifications You must be signed in to change notification settings

amirjalali65/armv8-sike

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

armv8-sike

Highly-optimized ARMv8 implementation of Supersingular Isogeny Key Encapsulation (SIKE).

The efficient implementation of SIKE protocol on ARMv8 high-performance processors. For more details please see: https://ieeexplore.ieee.org/abstract/document/8768333

The finite field arithmetic implementation is developed by the state-of-the-art implementation techniques, taking advantage of ARMv8 64-bit general purpose registers combined with ASIMD vectorization. The field multiplication is designed and developed using one- and two-level additive Karatsuba method. The independent multiplications are implemented using both AArch64 and ASIMD hand-crafted assembly using an interleaved technique to maximize the pipeline throuhput and efficiency of the library.

The submitted SIKE proposal contains the optimized implementation of SIKEp503 and SIKEp751 on different platforms. This repositoy contains the highly-optimized implementation of SIKEp503, SIKEp751, and SIKEp964 on ARMv8 platforms.

Content

SIKEp503: Optimized implementaion of SIKEp503 using only 64-bit general registers

SIKEp503_mixed: Optimized implementation of SIKEp503 using the mixture of general registers and ASIMD vectorization hand-written assembly.

SIKEp751: Optimized implementaion of SIKEp751 using only 64-bit general registers

SIKEp751_mixed: Optimized implementation of SIKEp751 using the mixture of general registers and ASIMD vectorization hand-written assembly.

SIKEp964_mixed: Optimized implementation of SIKEp964 using the mixture of general registers and ASIMD vectorization hand-written assembly.

Builing Binaries

Cross Compilation for ARMv8 on Linux

ARMv8 executables can be generated using cross-compilation on Linux. There are different methods for cross-compilation. An easy approach is to install gcc-aarch64-linux-gnu package by executing:

$  sudo apt-get install gcc-aarch64-linux-gnu

After installation, simply use the following command to generate the ARMv8 executables:

$ make CC=aarch64-linux-gnu-gcc ARCH=ARM64

Now, the generated binaries can be run on ARMv8-A cores.

Contributors

About

Highly-optimized ARMv8 implementation of Supersingular Isogeny Key Encapsulation (SIKE)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published