Jason Goertzen 38d3014dc2
Adding aarch64 CPU feature detection for FreeBSD (#1210)
* Added FreeBSD cpu feature detection to common/common.c

* Updated common/common.c to use __FreeBSD__ instead of __FREEBSD__

* added FreeBSD support to SIKE's CmakeLists.txt

* Added FreeBSD cpu feature detection to common/common.c

* Updated common/common.c to use __FreeBSD__ instead of __FREEBSD__

* added FreeBSD support to SIKE's CmakeLists.txt

* Added in comment to common.c to keep consistent with other platforms

* Added FreeBSD cpu feature detection to common/common.c

* Updated common/common.c to use __FreeBSD__ instead of __FREEBSD__

* added FreeBSD support to SIKE's CmakeLists.txt

* Added in comment to common.c to keep consistent with other platforms

* Updated documentation to say FreeBSD is support on aarch64

* Updated docs to indicated that SIKE is supported on FreeBSD on aarch64
2022-06-07 20:28:23 -04:00

222 lines
33 KiB
Markdown

# SIKE
- **Algorithm type**: Key encapsulation mechanism.
- **Main cryptographic assumption**: (supersingular) isogeny walk problem.
- **Principal submitters**: David Jao, Reza Azarderakhsh, Matthew Campagna, Craig Costello, Luca De Feo, Basil Hess, Amir Jalali, Brian Koziel, Brian LaMacchia, Patrick Longa, Michael Naehrig, Joost Renes, Vladimir Soukharev, David Urbanik.
- **Authors' website**: https://sike.org
- **Specification version**: NIST Round 3 submission.
- **Primary Source**<a name="primary-source"></a>:
- **Source**: https://github.com/microsoft/PQCrypto-SIDH/commit/effa607f244768cdd38f930887076373604eaa78
- **Implementation license (SPDX-Identifier)**: MIT
## Parameter set summary
| Parameter set | Security model | Claimed NIST Level | Public key size (bytes) | Secret key size (bytes) | Ciphertext size (bytes) | Shared secret size (bytes) |
|:--------------------:|:-----------------|---------------------:|--------------------------:|--------------------------:|--------------------------:|-----------------------------:|
| SIDH-p434 | IND-CPA | 1 | 330 | 28 | 330 | 110 |
| SIDH-p434-compressed | IND-CPA | 1 | 197 | 28 | 197 | 110 |
| SIDH-p503 | IND-CPA | 2 | 378 | 32 | 378 | 126 |
| SIDH-p503-compressed | IND-CPA | 2 | 225 | 32 | 225 | 126 |
| SIDH-p610 | IND-CPA | 3 | 462 | 39 | 462 | 154 |
| SIDH-p610-compressed | IND-CPA | 3 | 274 | 39 | 274 | 154 |
| SIDH-p751 | IND-CPA | 5 | 564 | 48 | 564 | 188 |
| SIDH-p751-compressed | IND-CPA | 5 | 335 | 48 | 335 | 188 |
| SIKE-p434 | IND-CCA2 | 1 | 330 | 374 | 346 | 16 |
| SIKE-p434-compressed | IND-CCA2 | 1 | 197 | 350 | 236 | 16 |
| SIKE-p503 | IND-CCA2 | 2 | 378 | 434 | 402 | 24 |
| SIKE-p503-compressed | IND-CCA2 | 2 | 225 | 407 | 280 | 24 |
| SIKE-p610 | IND-CCA2 | 3 | 462 | 524 | 486 | 24 |
| SIKE-p610-compressed | IND-CCA2 | 3 | 274 | 491 | 336 | 24 |
| SIKE-p751 | IND-CCA2 | 5 | 564 | 644 | 596 | 32 |
| SIKE-p751-compressed | IND-CCA2 | 5 | 335 | 602 | 410 | 32 |
## SIDH-p434 implementation characteristics
| Implementation source | Identifier in upstream | Supported architecture(s) | Supported operating system(s) | CPU extension(s) used | No branching-on-secrets claimed? | No branching-on-secrets checked by valgrind? | Large stack usage?‡ |
|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:----------------------|
| [Primary Source](#primary-source) | optimized | All | All | None | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_bmi2 | x86\_64 | Linux,Darwin | BMI2 | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_adx | x86\_64 | Linux,Darwin | BMI2,ADX | True | True | False |
| [Primary Source](#primary-source) | additional\_arm64 | arm64v8 | Linux,Darwin,FreeBSD | None | True | True | False |
Are implementations chosen based on runtime CPU feature detection? **No**.
‡For an explanation of what this denotes, consult the [Explanation of Terms](#explanation-of-terms) section at the end of this file.
## SIDH-p434-compressed implementation characteristics
| Implementation source | Identifier in upstream | Supported architecture(s) | Supported operating system(s) | CPU extension(s) used | No branching-on-secrets claimed? | No branching-on-secrets checked by valgrind? | Large stack usage? |
|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
| [Primary Source](#primary-source) | optimized | All | All | None | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_bmi2 | x86\_64 | Linux,Darwin | BMI2 | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_adx | x86\_64 | Linux,Darwin | BMI2,ADX | True | True | False |
| [Primary Source](#primary-source) | additional\_arm64 | arm64v8 | Linux,Darwin,FreeBSD | None | True | True | False |
Are implementations chosen based on runtime CPU feature detection? **No**.
## SIDH-p503 implementation characteristics
| Implementation source | Identifier in upstream | Supported architecture(s) | Supported operating system(s) | CPU extension(s) used | No branching-on-secrets claimed? | No branching-on-secrets checked by valgrind? | Large stack usage? |
|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
| [Primary Source](#primary-source) | optimized | All | All | None | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64 | x86\_64 | Linux,Darwin | None | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_bmi2 | x86\_64 | Linux,Darwin | BMI2 | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_adx | x86\_64 | Linux,Darwin | BMI2,ADX | True | True | False |
| [Primary Source](#primary-source) | additional\_arm64 | arm64v8 | Linux,Darwin,FreeBSD | None | True | True | False |
Are implementations chosen based on runtime CPU feature detection? **No**.
## SIDH-p503-compressed implementation characteristics
| Implementation source | Identifier in upstream | Supported architecture(s) | Supported operating system(s) | CPU extension(s) used | No branching-on-secrets claimed? | No branching-on-secrets checked by valgrind? | Large stack usage? |
|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
| [Primary Source](#primary-source) | optimized | All | All | None | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64 | x86\_64 | Linux,Darwin | None | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_bmi2 | x86\_64 | Linux,Darwin | BMI2 | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_adx | x86\_64 | Linux,Darwin | BMI2,ADX | True | True | False |
| [Primary Source](#primary-source) | additional\_arm64 | arm64v8 | Linux,Darwin,FreeBSD | None | True | True | False |
Are implementations chosen based on runtime CPU feature detection? **No**.
## SIDH-p610 implementation characteristics
| Implementation source | Identifier in upstream | Supported architecture(s) | Supported operating system(s) | CPU extension(s) used | No branching-on-secrets claimed? | No branching-on-secrets checked by valgrind? | Large stack usage? |
|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
| [Primary Source](#primary-source) | optimized | All | All | None | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_bmi2 | x86\_64 | Linux,Darwin | BMI2 | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_adx | x86\_64 | Linux,Darwin | BMI2,ADX | True | True | False |
| [Primary Source](#primary-source) | additional\_arm64 | arm64v8 | Linux,Darwin,FreeBSD | None | True | True | False |
Are implementations chosen based on runtime CPU feature detection? **No**.
## SIDH-p610-compressed implementation characteristics
| Implementation source | Identifier in upstream | Supported architecture(s) | Supported operating system(s) | CPU extension(s) used | No branching-on-secrets claimed? | No branching-on-secrets checked by valgrind? | Large stack usage? |
|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
| [Primary Source](#primary-source) | optimized | All | All | None | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_bmi2 | x86\_64 | Linux,Darwin | BMI2 | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_adx | x86\_64 | Linux,Darwin | BMI2,ADX | True | True | False |
| [Primary Source](#primary-source) | additional\_arm64 | arm64v8 | Linux,Darwin,FreeBSD | None | True | True | False |
Are implementations chosen based on runtime CPU feature detection? **No**.
## SIDH-p751 implementation characteristics
| Implementation source | Identifier in upstream | Supported architecture(s) | Supported operating system(s) | CPU extension(s) used | No branching-on-secrets claimed? | No branching-on-secrets checked by valgrind? | Large stack usage? |
|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
| [Primary Source](#primary-source) | optimized | All | All | None | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64 | x86\_64 | Linux,Darwin | None | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_bmi2 | x86\_64 | Linux,Darwin | BMI2 | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_adx | x86\_64 | Linux,Darwin | BMI2,ADX | True | True | False |
| [Primary Source](#primary-source) | additional\_arm64 | arm64v8 | Linux,Darwin,FreeBSD | None | True | True | False |
Are implementations chosen based on runtime CPU feature detection? **No**.
## SIDH-p751-compressed implementation characteristics
| Implementation source | Identifier in upstream | Supported architecture(s) | Supported operating system(s) | CPU extension(s) used | No branching-on-secrets claimed? | No branching-on-secrets checked by valgrind? | Large stack usage? |
|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
| [Primary Source](#primary-source) | optimized | All | All | None | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64 | x86\_64 | Linux,Darwin | None | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_bmi2 | x86\_64 | Linux,Darwin | BMI2 | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_adx | x86\_64 | Linux,Darwin | BMI2,ADX | True | True | False |
| [Primary Source](#primary-source) | additional\_arm64 | arm64v8 | Linux,Darwin,FreeBSD | None | True | True | False |
Are implementations chosen based on runtime CPU feature detection? **No**.
## SIKE-p434 implementation characteristics
| Implementation source | Identifier in upstream | Supported architecture(s) | Supported operating system(s) | CPU extension(s) used | No branching-on-secrets claimed? | No branching-on-secrets checked by valgrind? | Large stack usage? |
|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
| [Primary Source](#primary-source) | optimized | All | All | None | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_bmi2 | x86\_64 | Linux,Darwin | BMI2 | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_adx | x86\_64 | Linux,Darwin | BMI2,ADX | True | True | False |
| [Primary Source](#primary-source) | additional\_arm64 | arm64v8 | Linux,Darwin,FreeBSD | None | True | True | False |
Are implementations chosen based on runtime CPU feature detection? **No**.
## SIKE-p434-compressed implementation characteristics
| Implementation source | Identifier in upstream | Supported architecture(s) | Supported operating system(s) | CPU extension(s) used | No branching-on-secrets claimed? | No branching-on-secrets checked by valgrind? | Large stack usage? |
|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
| [Primary Source](#primary-source) | optimized | All | All | None | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_bmi2 | x86\_64 | Linux,Darwin | BMI2 | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_adx | x86\_64 | Linux,Darwin | BMI2,ADX | True | True | False |
| [Primary Source](#primary-source) | additional\_arm64 | arm64v8 | Linux,Darwin,FreeBSD | None | True | True | False |
Are implementations chosen based on runtime CPU feature detection? **No**.
## SIKE-p503 implementation characteristics
| Implementation source | Identifier in upstream | Supported architecture(s) | Supported operating system(s) | CPU extension(s) used | No branching-on-secrets claimed? | No branching-on-secrets checked by valgrind? | Large stack usage? |
|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
| [Primary Source](#primary-source) | optimized | All | All | None | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64 | x86\_64 | Linux,Darwin | None | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_bmi2 | x86\_64 | Linux,Darwin | BMI2 | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_adx | x86\_64 | Linux,Darwin | BMI2,ADX | True | True | False |
| [Primary Source](#primary-source) | additional\_arm64 | arm64v8 | Linux,Darwin,FreeBSD | None | True | True | False |
Are implementations chosen based on runtime CPU feature detection? **No**.
## SIKE-p503-compressed implementation characteristics
| Implementation source | Identifier in upstream | Supported architecture(s) | Supported operating system(s) | CPU extension(s) used | No branching-on-secrets claimed? | No branching-on-secrets checked by valgrind? | Large stack usage? |
|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
| [Primary Source](#primary-source) | optimized | All | All | None | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64 | x86\_64 | Linux,Darwin | None | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_bmi2 | x86\_64 | Linux,Darwin | BMI2 | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_adx | x86\_64 | Linux,Darwin | BMI2,ADX | True | True | False |
| [Primary Source](#primary-source) | additional\_arm64 | arm64v8 | Linux,Darwin,FreeBSD | None | True | True | False |
Are implementations chosen based on runtime CPU feature detection? **No**.
## SIKE-p610 implementation characteristics
| Implementation source | Identifier in upstream | Supported architecture(s) | Supported operating system(s) | CPU extension(s) used | No branching-on-secrets claimed? | No branching-on-secrets checked by valgrind? | Large stack usage? |
|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
| [Primary Source](#primary-source) | optimized | All | All | None | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_bmi2 | x86\_64 | Linux,Darwin | BMI2 | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_adx | x86\_64 | Linux,Darwin | BMI2,ADX | True | True | False |
| [Primary Source](#primary-source) | additional\_arm64 | arm64v8 | Linux,Darwin,FreeBSD | None | True | True | False |
Are implementations chosen based on runtime CPU feature detection? **No**.
## SIKE-p610-compressed implementation characteristics
| Implementation source | Identifier in upstream | Supported architecture(s) | Supported operating system(s) | CPU extension(s) used | No branching-on-secrets claimed? | No branching-on-secrets checked by valgrind? | Large stack usage? |
|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
| [Primary Source](#primary-source) | optimized | All | All | None | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_bmi2 | x86\_64 | Linux,Darwin | BMI2 | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_adx | x86\_64 | Linux,Darwin | BMI2,ADX | True | True | False |
| [Primary Source](#primary-source) | additional\_arm64 | arm64v8 | Linux,Darwin,FreeBSD | None | True | True | False |
Are implementations chosen based on runtime CPU feature detection? **No**.
## SIKE-p751 implementation characteristics
| Implementation source | Identifier in upstream | Supported architecture(s) | Supported operating system(s) | CPU extension(s) used | No branching-on-secrets claimed? | No branching-on-secrets checked by valgrind? | Large stack usage? |
|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
| [Primary Source](#primary-source) | optimized | All | All | None | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64 | x86\_64 | Linux,Darwin | None | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_bmi2 | x86\_64 | Linux,Darwin | BMI2 | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_adx | x86\_64 | Linux,Darwin | BMI2,ADX | True | True | False |
| [Primary Source](#primary-source) | additional\_arm64 | arm64v8 | Linux,Darwin,FreeBSD | None | True | True | False |
Are implementations chosen based on runtime CPU feature detection? **No**.
## SIKE-p751-compressed implementation characteristics
| Implementation source | Identifier in upstream | Supported architecture(s) | Supported operating system(s) | CPU extension(s) used | No branching-on-secrets claimed? | No branching-on-secrets checked by valgrind? | Large stack usage? |
|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
| [Primary Source](#primary-source) | optimized | All | All | None | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64 | x86\_64 | Linux,Darwin | None | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_bmi2 | x86\_64 | Linux,Darwin | BMI2 | True | True | False |
| [Primary Source](#primary-source) | additional\_amd64\_adx | x86\_64 | Linux,Darwin | BMI2,ADX | True | True | False |
| [Primary Source](#primary-source) | additional\_arm64 | arm64v8 | Linux,Darwin,FreeBSD | None | True | True | False |
Are implementations chosen based on runtime CPU feature detection? **No**.
## Explanation of Terms
- **Large Stack Usage**: Implementations identified as having such may cause failures when running in threads or in constrained environments.