mirror of
https://github.com/open-quantum-safe/liboqs.git
synced 2025-11-22 00:09:23 -05:00
Add ML-KEM / FIPS203 final (#1899)
* Add ML-KEM * Add ACVP vectors for ML-KEM * Removes ML-KEM-ipd --------- Signed-off-by: Basil Hess <bhe@zurich.ibm.com>
This commit is contained in:
parent
8d173c5e97
commit
dc4deaa4e1
@ -127,11 +127,8 @@ cmake_dependent_option(OQS_ENABLE_KEM_kyber_768 "" ON "OQS_ENABLE_KEM_KYBER" OFF
|
||||
cmake_dependent_option(OQS_ENABLE_KEM_kyber_1024 "" ON "OQS_ENABLE_KEM_KYBER" OFF)
|
||||
|
||||
option(OQS_ENABLE_KEM_ML_KEM "Enable ml_kem algorithm family" ON)
|
||||
cmake_dependent_option(OQS_ENABLE_KEM_ml_kem_512_ipd "" ON "OQS_ENABLE_KEM_ML_KEM" OFF)
|
||||
cmake_dependent_option(OQS_ENABLE_KEM_ml_kem_512 "" ON "OQS_ENABLE_KEM_ML_KEM" OFF)
|
||||
cmake_dependent_option(OQS_ENABLE_KEM_ml_kem_768_ipd "" ON "OQS_ENABLE_KEM_ML_KEM" OFF)
|
||||
cmake_dependent_option(OQS_ENABLE_KEM_ml_kem_768 "" ON "OQS_ENABLE_KEM_ML_KEM" OFF)
|
||||
cmake_dependent_option(OQS_ENABLE_KEM_ml_kem_1024_ipd "" ON "OQS_ENABLE_KEM_ML_KEM" OFF)
|
||||
cmake_dependent_option(OQS_ENABLE_KEM_ml_kem_1024 "" ON "OQS_ENABLE_KEM_ML_KEM" OFF)
|
||||
|
||||
option(OQS_ENABLE_SIG_DILITHIUM "Enable dilithium algorithm family" ON)
|
||||
@ -320,21 +317,18 @@ endif()
|
||||
|
||||
if(CMAKE_SYSTEM_NAME MATCHES "Linux|Darwin")
|
||||
if(OQS_DIST_X86_64_BUILD OR (OQS_USE_AVX2_INSTRUCTIONS AND OQS_USE_BMI2_INSTRUCTIONS AND OQS_USE_POPCNT_INSTRUCTIONS))
|
||||
cmake_dependent_option(OQS_ENABLE_KEM_ml_kem_512_ipd_avx2 "" ON "OQS_ENABLE_KEM_ml_kem_512_ipd" OFF)
|
||||
cmake_dependent_option(OQS_ENABLE_KEM_ml_kem_512_avx2 "" ON "OQS_ENABLE_KEM_ml_kem_512" OFF)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(CMAKE_SYSTEM_NAME MATCHES "Linux|Darwin")
|
||||
if(OQS_DIST_X86_64_BUILD OR (OQS_USE_AVX2_INSTRUCTIONS AND OQS_USE_BMI2_INSTRUCTIONS AND OQS_USE_POPCNT_INSTRUCTIONS))
|
||||
cmake_dependent_option(OQS_ENABLE_KEM_ml_kem_768_ipd_avx2 "" ON "OQS_ENABLE_KEM_ml_kem_768_ipd" OFF)
|
||||
cmake_dependent_option(OQS_ENABLE_KEM_ml_kem_768_avx2 "" ON "OQS_ENABLE_KEM_ml_kem_768" OFF)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(CMAKE_SYSTEM_NAME MATCHES "Linux|Darwin")
|
||||
if(OQS_DIST_X86_64_BUILD OR (OQS_USE_AVX2_INSTRUCTIONS AND OQS_USE_BMI2_INSTRUCTIONS AND OQS_USE_POPCNT_INSTRUCTIONS))
|
||||
cmake_dependent_option(OQS_ENABLE_KEM_ml_kem_1024_ipd_avx2 "" ON "OQS_ENABLE_KEM_ml_kem_1024_ipd" OFF)
|
||||
cmake_dependent_option(OQS_ENABLE_KEM_ml_kem_1024_avx2 "" ON "OQS_ENABLE_KEM_ml_kem_1024" OFF)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
2
.github/workflows/unix.yml
vendored
2
.github/workflows/unix.yml
vendored
@ -223,7 +223,7 @@ jobs:
|
||||
path: build/*.deb
|
||||
- name: Check STD algorithm and alias
|
||||
if: matrix.name == 'jammy-std-openssl3'
|
||||
run: 'tests/dump_alg_info | grep -zoP "ML-DSA-44:\n isnull: false" && tests/dump_alg_info | grep -zoP "ML-DSA-44-ipd:\n isnull: true" && tests/dump_alg_info | grep -zoP "ML-KEM-512:\n isnull: false" && tests/dump_alg_info | grep -zoP "ML-KEM-512-ipd:\n isnull: true"'
|
||||
run: 'tests/dump_alg_info | grep -zoP "ML-DSA-44:\n isnull: false" && tests/dump_alg_info | grep -zoP "ML-DSA-44-ipd:\n isnull: true" && tests/dump_alg_info | grep -zoP "ML-KEM-512:\n isnull: false"'
|
||||
working-directory: build
|
||||
|
||||
linux_arm_emulated:
|
||||
|
||||
@ -40,7 +40,7 @@ Details on each supported algorithm can be found in the [docs/algorithms](https:
|
||||
|
||||
The list below indicates all algorithms currently supported by liboqs, including experimental algorithms and already excluding algorithm variants pruned during the NIST competition, such as Kyber-90s or Dilithium-AES.
|
||||
|
||||
The only algorithms in `liboqs` that implement NIST standards drafts are the [`ML-KEM`](https://csrc.nist.gov/pubs/fips/203/ipd) and [`ML-DSA`](https://csrc.nist.gov/pubs/fips/204/ipd) variants with their respective different bit strengths. `liboqs` will retain these algorithm names selected by NIST throughout the finishing stages of the standardization process, so users can rely on their presence going forward. If NIST changes the implementation details of these algorithms, `liboqs` will adjust the implementation so that users are protected from such potential changes. For users interested in explicitly selecting the current "proposed draft standard" code, the variants with the suffix "-ipd" are made available. At this stage, "ml-kem-ipd" and "ml-kem" as well as "ml-dsa-ipd" and "ml-dsa" are functionally equivalent, denoted by the "alias" moniker below.
|
||||
The only algorithms in `liboqs` that implement NIST standards are the [`ML-KEM`](https://csrc.nist.gov/pubs/fips/203/final) (final standard) and [`ML-DSA`](https://csrc.nist.gov/pubs/fips/204/ipd) (initial public draft) variants with their respective different bit strengths. `liboqs` will retain these algorithm names selected by NIST throughout the finishing stages of the standardization process, so users can rely on their presence going forward. If NIST changes the implementation details of these algorithms, `liboqs` will adjust the implementation so that users are protected from such potential changes. For users interested in explicitly selecting the current "proposed draft standard" code, the variants with the suffix "-ipd" are made available. At this stage, "ml-dsa-ipd" and "ml-dsa" are functionally equivalent, denoted by the "alias" moniker below.
|
||||
|
||||
Falcon and SPHINCS+ have also been [selected for standardization](https://csrc.nist.gov/Projects/post-quantum-cryptography/selected-algorithms-2022), but the `liboqs` implementations of these algorithms are currently tracking Round 3 submissions and not NIST standards drafts.
|
||||
|
||||
@ -54,7 +54,7 @@ All names other than `ML-KEM` and `ML-DSA` are subject to change. `liboqs` makes
|
||||
- **FrodoKEM**: FrodoKEM-640-AES, FrodoKEM-640-SHAKE, FrodoKEM-976-AES, FrodoKEM-976-SHAKE, FrodoKEM-1344-AES, FrodoKEM-1344-SHAKE
|
||||
- **HQC**: HQC-128, HQC-192, HQC-256
|
||||
- **Kyber**: Kyber512, Kyber768, Kyber1024
|
||||
- **ML-KEM**: ML-KEM-512-ipd (alias: ML-KEM-512), ML-KEM-768-ipd (alias: ML-KEM-768), ML-KEM-1024-ipd (alias: ML-KEM-1024)
|
||||
- **ML-KEM**: ML-KEM-512, ML-KEM-768, ML-KEM-1024
|
||||
- **NTRU-Prime**: sntrup761
|
||||
<!--- OQS_TEMPLATE_FRAGMENT_LIST_KEXS_END -->
|
||||
|
||||
|
||||
@ -4,10 +4,10 @@
|
||||
- **Main cryptographic assumption**: Module LWE+R with base ring Z[x]/(3329, x^256+1).
|
||||
- **Principal submitters**: Peter Schwabe.
|
||||
- **Auxiliary submitters**: Roberto Avanzi, Joppe Bos, Léo Ducas, Eike Kiltz, Tancrède Lepoint, Vadim Lyubashevsky, John M. Schanck, Gregor Seiler, Damien Stehlé.
|
||||
- **Authors' website**: https://pq-crystals.org/kyber/ and https://csrc.nist.gov/pubs/fips/203/ipd
|
||||
- **Specification version**: ML-KEM-ipd.
|
||||
- **Authors' website**: https://pq-crystals.org/kyber/ and https://csrc.nist.gov/pubs/fips/203
|
||||
- **Specification version**: ML-KEM.
|
||||
- **Primary Source**<a name="primary-source"></a>:
|
||||
- **Source**: https://github.com/pq-crystals/kyber/commit/d1321ce5ac0b53f583eb47a040dc3625ee8e7e37 with copy_from_upstream patches
|
||||
- **Source**: https://github.com/pq-crystals/kyber/commit/10b478fc3cc4ff6215eb0b6a11bd758bf0929cbd with copy_from_upstream patches
|
||||
- **Implementation license (SPDX-Identifier)**: CC0-1.0 or Apache-2.0
|
||||
|
||||
|
||||
@ -15,11 +15,11 @@
|
||||
|
||||
| Parameter set | Parameter set alias | Security model | Claimed NIST Level | Public key size (bytes) | Secret key size (bytes) | Ciphertext size (bytes) | Shared secret size (bytes) |
|
||||
|:---------------:|:----------------------|:-----------------|---------------------:|--------------------------:|--------------------------:|--------------------------:|-----------------------------:|
|
||||
| ML-KEM-512-ipd | ML-KEM-512 | IND-CCA2 | 1 | 800 | 1632 | 768 | 32 |
|
||||
| ML-KEM-768-ipd | ML-KEM-768 | IND-CCA2 | 3 | 1184 | 2400 | 1088 | 32 |
|
||||
| ML-KEM-1024-ipd | ML-KEM-1024 | IND-CCA2 | 5 | 1568 | 3168 | 1568 | 32 |
|
||||
| ML-KEM-512 | NA | IND-CCA2 | 1 | 800 | 1632 | 768 | 32 |
|
||||
| ML-KEM-768 | NA | IND-CCA2 | 3 | 1184 | 2400 | 1088 | 32 |
|
||||
| ML-KEM-1024 | NA | IND-CCA2 | 5 | 1568 | 3168 | 1568 | 32 |
|
||||
|
||||
## ML-KEM-512-ipd implementation characteristics
|
||||
## ML-KEM-512 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?‡ |
|
||||
|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:----------------------|
|
||||
@ -30,7 +30,7 @@ Are implementations chosen based on runtime CPU feature detection? **Yes**.
|
||||
|
||||
‡For an explanation of what this denotes, consult the [Explanation of Terms](#explanation-of-terms) section at the end of this file.
|
||||
|
||||
## ML-KEM-768-ipd implementation characteristics
|
||||
## ML-KEM-768 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? |
|
||||
|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
|
||||
@ -39,7 +39,7 @@ Are implementations chosen based on runtime CPU feature detection? **Yes**.
|
||||
|
||||
Are implementations chosen based on runtime CPU feature detection? **Yes**.
|
||||
|
||||
## ML-KEM-1024-ipd implementation characteristics
|
||||
## ML-KEM-1024 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? |
|
||||
|:---------------------------------:|:-------------------------|:----------------------------|:--------------------------------|:------------------------|:-----------------------------------|:-----------------------------------------------|:---------------------|
|
||||
|
||||
@ -13,16 +13,15 @@ auxiliary-submitters:
|
||||
- Gregor Seiler
|
||||
- Damien Stehlé
|
||||
crypto-assumption: Module LWE+R with base ring Z[x]/(3329, x^256+1)
|
||||
website: https://pq-crystals.org/kyber/ and https://csrc.nist.gov/pubs/fips/203/ipd
|
||||
nist-round: ipd
|
||||
spec-version: ML-KEM-ipd
|
||||
website: https://pq-crystals.org/kyber/ and https://csrc.nist.gov/pubs/fips/203
|
||||
nist-round: FIPS203
|
||||
spec-version: ML-KEM
|
||||
primary-upstream:
|
||||
source: https://github.com/pq-crystals/kyber/commit/d1321ce5ac0b53f583eb47a040dc3625ee8e7e37
|
||||
source: https://github.com/pq-crystals/kyber/commit/10b478fc3cc4ff6215eb0b6a11bd758bf0929cbd
|
||||
with copy_from_upstream patches
|
||||
spdx-license-identifier: CC0-1.0 or Apache-2.0
|
||||
parameter-sets:
|
||||
- name: ML-KEM-512-ipd
|
||||
alias: ML-KEM-512
|
||||
- name: ML-KEM-512
|
||||
claimed-nist-level: 1
|
||||
claimed-security: IND-CCA2
|
||||
length-public-key: 800
|
||||
@ -55,8 +54,7 @@ parameter-sets:
|
||||
no-secret-dependent-branching-claimed: true
|
||||
no-secret-dependent-branching-checked-by-valgrind: true
|
||||
large-stack-usage: false
|
||||
- name: ML-KEM-768-ipd
|
||||
alias: ML-KEM-768
|
||||
- name: ML-KEM-768
|
||||
claimed-nist-level: 3
|
||||
claimed-security: IND-CCA2
|
||||
length-public-key: 1184
|
||||
@ -89,8 +87,7 @@ parameter-sets:
|
||||
no-secret-dependent-branching-claimed: true
|
||||
no-secret-dependent-branching-checked-by-valgrind: true
|
||||
large-stack-usage: false
|
||||
- name: ML-KEM-1024-ipd
|
||||
alias: ML-KEM-1024
|
||||
- name: ML-KEM-1024
|
||||
claimed-nist-level: 5
|
||||
claimed-security: IND-CCA2
|
||||
length-public-key: 1568
|
||||
|
||||
@ -1,23 +1,23 @@
|
||||
{
|
||||
"bomFormat": "CBOM",
|
||||
"specVersion": "1.4-cbom-1.0",
|
||||
"serialNumber": "urn:uuid:58a975ac-ea6b-4ce9-a5ae-80d35105db30",
|
||||
"serialNumber": "urn:uuid:b953d460-1246-4cbb-aff9-642a0308d18b",
|
||||
"version": 1,
|
||||
"metadata": {
|
||||
"timestamp": "2024-04-09T21:46:17.101849",
|
||||
"timestamp": "2024-08-26T18:04:44.668645",
|
||||
"component": {
|
||||
"type": "library",
|
||||
"bom-ref": "pkg:github/open-quantum-safe/liboqs@2fd65d9ec99a2608149713e5fcaeb9b6402e5872",
|
||||
"bom-ref": "pkg:github/open-quantum-safe/liboqs@062e793edf54cbc1073b54d0689795063fd41910",
|
||||
"name": "liboqs",
|
||||
"version": "2fd65d9ec99a2608149713e5fcaeb9b6402e5872"
|
||||
"version": "062e793edf54cbc1073b54d0689795063fd41910"
|
||||
}
|
||||
},
|
||||
"components": [
|
||||
{
|
||||
"type": "library",
|
||||
"bom-ref": "pkg:github/open-quantum-safe/liboqs@2fd65d9ec99a2608149713e5fcaeb9b6402e5872",
|
||||
"bom-ref": "pkg:github/open-quantum-safe/liboqs@062e793edf54cbc1073b54d0689795063fd41910",
|
||||
"name": "liboqs",
|
||||
"version": "2fd65d9ec99a2608149713e5fcaeb9b6402e5872"
|
||||
"version": "062e793edf54cbc1073b54d0689795063fd41910"
|
||||
},
|
||||
{
|
||||
"type": "crypto-asset",
|
||||
@ -1041,12 +1041,12 @@
|
||||
},
|
||||
{
|
||||
"type": "crypto-asset",
|
||||
"bom-ref": "alg:ML-KEM-512-ipd:generic",
|
||||
"bom-ref": "alg:ML-KEM-512:generic",
|
||||
"name": "ML-KEM",
|
||||
"cryptoProperties": {
|
||||
"assetType": "algorithm",
|
||||
"algorithmProperties": {
|
||||
"variant": "ML-KEM-512-ipd",
|
||||
"variant": "ML-KEM-512",
|
||||
"primitive": "kem",
|
||||
"implementationLevel": "softwarePlainRam",
|
||||
"cryptoFunctions": [
|
||||
@ -1061,12 +1061,12 @@
|
||||
},
|
||||
{
|
||||
"type": "crypto-asset",
|
||||
"bom-ref": "alg:ML-KEM-512-ipd:x86_64",
|
||||
"bom-ref": "alg:ML-KEM-512:x86_64",
|
||||
"name": "ML-KEM",
|
||||
"cryptoProperties": {
|
||||
"assetType": "algorithm",
|
||||
"algorithmProperties": {
|
||||
"variant": "ML-KEM-512-ipd",
|
||||
"variant": "ML-KEM-512",
|
||||
"primitive": "kem",
|
||||
"implementationLevel": "softwarePlainRam",
|
||||
"cryptoFunctions": [
|
||||
@ -1081,12 +1081,12 @@
|
||||
},
|
||||
{
|
||||
"type": "crypto-asset",
|
||||
"bom-ref": "alg:ML-KEM-768-ipd:generic",
|
||||
"bom-ref": "alg:ML-KEM-768:generic",
|
||||
"name": "ML-KEM",
|
||||
"cryptoProperties": {
|
||||
"assetType": "algorithm",
|
||||
"algorithmProperties": {
|
||||
"variant": "ML-KEM-768-ipd",
|
||||
"variant": "ML-KEM-768",
|
||||
"primitive": "kem",
|
||||
"implementationLevel": "softwarePlainRam",
|
||||
"cryptoFunctions": [
|
||||
@ -1101,12 +1101,12 @@
|
||||
},
|
||||
{
|
||||
"type": "crypto-asset",
|
||||
"bom-ref": "alg:ML-KEM-768-ipd:x86_64",
|
||||
"bom-ref": "alg:ML-KEM-768:x86_64",
|
||||
"name": "ML-KEM",
|
||||
"cryptoProperties": {
|
||||
"assetType": "algorithm",
|
||||
"algorithmProperties": {
|
||||
"variant": "ML-KEM-768-ipd",
|
||||
"variant": "ML-KEM-768",
|
||||
"primitive": "kem",
|
||||
"implementationLevel": "softwarePlainRam",
|
||||
"cryptoFunctions": [
|
||||
@ -1121,12 +1121,12 @@
|
||||
},
|
||||
{
|
||||
"type": "crypto-asset",
|
||||
"bom-ref": "alg:ML-KEM-1024-ipd:generic",
|
||||
"bom-ref": "alg:ML-KEM-1024:generic",
|
||||
"name": "ML-KEM",
|
||||
"cryptoProperties": {
|
||||
"assetType": "algorithm",
|
||||
"algorithmProperties": {
|
||||
"variant": "ML-KEM-1024-ipd",
|
||||
"variant": "ML-KEM-1024",
|
||||
"primitive": "kem",
|
||||
"implementationLevel": "softwarePlainRam",
|
||||
"cryptoFunctions": [
|
||||
@ -1141,12 +1141,12 @@
|
||||
},
|
||||
{
|
||||
"type": "crypto-asset",
|
||||
"bom-ref": "alg:ML-KEM-1024-ipd:x86_64",
|
||||
"bom-ref": "alg:ML-KEM-1024:x86_64",
|
||||
"name": "ML-KEM",
|
||||
"cryptoProperties": {
|
||||
"assetType": "algorithm",
|
||||
"algorithmProperties": {
|
||||
"variant": "ML-KEM-1024-ipd",
|
||||
"variant": "ML-KEM-1024",
|
||||
"primitive": "kem",
|
||||
"implementationLevel": "softwarePlainRam",
|
||||
"cryptoFunctions": [
|
||||
@ -2408,7 +2408,7 @@
|
||||
],
|
||||
"dependencies": [
|
||||
{
|
||||
"ref": "pkg:github/open-quantum-safe/liboqs@2fd65d9ec99a2608149713e5fcaeb9b6402e5872",
|
||||
"ref": "pkg:github/open-quantum-safe/liboqs@062e793edf54cbc1073b54d0689795063fd41910",
|
||||
"dependsOn": [
|
||||
"alg:BIKE-L1:x86_64",
|
||||
"alg:BIKE-L3:x86_64",
|
||||
@ -2461,12 +2461,12 @@
|
||||
"alg:Kyber1024:generic",
|
||||
"alg:Kyber1024:x86_64",
|
||||
"alg:Kyber1024:armv8-a",
|
||||
"alg:ML-KEM-512-ipd:generic",
|
||||
"alg:ML-KEM-512-ipd:x86_64",
|
||||
"alg:ML-KEM-768-ipd:generic",
|
||||
"alg:ML-KEM-768-ipd:x86_64",
|
||||
"alg:ML-KEM-1024-ipd:generic",
|
||||
"alg:ML-KEM-1024-ipd:x86_64",
|
||||
"alg:ML-KEM-512:generic",
|
||||
"alg:ML-KEM-512:x86_64",
|
||||
"alg:ML-KEM-768:generic",
|
||||
"alg:ML-KEM-768:x86_64",
|
||||
"alg:ML-KEM-1024:generic",
|
||||
"alg:ML-KEM-1024:x86_64",
|
||||
"alg:sntrup761:generic",
|
||||
"alg:sntrup761:x86_64",
|
||||
"alg:Dilithium2:generic",
|
||||
@ -2893,42 +2893,42 @@
|
||||
"dependencyType": "uses"
|
||||
},
|
||||
{
|
||||
"ref": "alg:ML-KEM-512-ipd:generic",
|
||||
"ref": "alg:ML-KEM-512:generic",
|
||||
"dependsOn": [
|
||||
"alg:sha3"
|
||||
],
|
||||
"dependencyType": "uses"
|
||||
},
|
||||
{
|
||||
"ref": "alg:ML-KEM-512-ipd:x86_64",
|
||||
"ref": "alg:ML-KEM-512:x86_64",
|
||||
"dependsOn": [
|
||||
"alg:sha3"
|
||||
],
|
||||
"dependencyType": "uses"
|
||||
},
|
||||
{
|
||||
"ref": "alg:ML-KEM-768-ipd:generic",
|
||||
"ref": "alg:ML-KEM-768:generic",
|
||||
"dependsOn": [
|
||||
"alg:sha3"
|
||||
],
|
||||
"dependencyType": "uses"
|
||||
},
|
||||
{
|
||||
"ref": "alg:ML-KEM-768-ipd:x86_64",
|
||||
"ref": "alg:ML-KEM-768:x86_64",
|
||||
"dependsOn": [
|
||||
"alg:sha3"
|
||||
],
|
||||
"dependencyType": "uses"
|
||||
},
|
||||
{
|
||||
"ref": "alg:ML-KEM-1024-ipd:generic",
|
||||
"ref": "alg:ML-KEM-1024:generic",
|
||||
"dependsOn": [
|
||||
"alg:sha3"
|
||||
],
|
||||
"dependencyType": "uses"
|
||||
},
|
||||
{
|
||||
"ref": "alg:ML-KEM-1024-ipd:x86_64",
|
||||
"ref": "alg:ML-KEM-1024:x86_64",
|
||||
"dependsOn": [
|
||||
"alg:sha3"
|
||||
],
|
||||
|
||||
@ -32,11 +32,11 @@ upstreams:
|
||||
-
|
||||
name: pqcrystals-kyber-standard
|
||||
git_url: https://github.com/pq-crystals/kyber.git
|
||||
git_branch: standard
|
||||
git_commit: d1321ce5ac0b53f583eb47a040dc3625ee8e7e37
|
||||
git_branch: main
|
||||
git_commit: 10b478fc3cc4ff6215eb0b6a11bd758bf0929cbd
|
||||
kem_meta_path: '{pretty_name_full}_META.yml'
|
||||
kem_scheme_path: '.'
|
||||
patches: [pqcrystals-ml_kem_ipd.patch]
|
||||
patches: [pqcrystals-ml_kem.patch]
|
||||
-
|
||||
name: pqcrystals-dilithium
|
||||
git_url: https://github.com/pq-crystals/dilithium.git
|
||||
@ -161,22 +161,19 @@ kems:
|
||||
upstream_location: pqcrystals-kyber-standard
|
||||
schemes:
|
||||
-
|
||||
scheme: "512_ipd"
|
||||
pqclean_scheme: ml-kem-512-ipd
|
||||
pretty_name_full: ML-KEM-512-ipd
|
||||
alias_scheme: "512"
|
||||
scheme: "512"
|
||||
pqclean_scheme: ml-kem-512
|
||||
pretty_name_full: ML-KEM-512
|
||||
alias_pretty_name_full: ML-KEM-512
|
||||
-
|
||||
scheme: "768_ipd"
|
||||
pqclean_scheme: ml-kem-768-ipd
|
||||
pretty_name_full: ML-KEM-768-ipd
|
||||
alias_scheme: "768"
|
||||
scheme: "768"
|
||||
pqclean_scheme: ml-kem-768
|
||||
pretty_name_full: ML-KEM-768
|
||||
alias_pretty_name_full: ML-KEM-768
|
||||
-
|
||||
scheme: "1024_ipd"
|
||||
pqclean_scheme: ml-kem-1024-ipd
|
||||
pretty_name_full: ML-KEM-1024-ipd
|
||||
alias_scheme: "1024"
|
||||
scheme: "1024"
|
||||
pqclean_scheme: ml-kem-1024
|
||||
pretty_name_full: ML-KEM-1024
|
||||
alias_pretty_name_full: ML-KEM-1024
|
||||
sigs:
|
||||
-
|
||||
|
||||
@ -1,10 +1,13 @@
|
||||
diff --git a/Kyber1024_META.yml b/ML-KEM-1024-ipd_META.yml
|
||||
index baa5ca3..ffafcf0 100644
|
||||
diff --git a/Kyber1024_META.yml b/ML-KEM-1024_META.yml
|
||||
similarity index 55%
|
||||
rename from Kyber1024_META.yml
|
||||
rename to ML-KEM-1024_META.yml
|
||||
index baa5ca3..fdfc298 100644
|
||||
--- a/Kyber1024_META.yml
|
||||
+++ b/ML-KEM-1024-ipd_META.yml
|
||||
+++ b/ML-KEM-1024_META.yml
|
||||
@@ -1,4 +1,4 @@
|
||||
-name: Kyber1024
|
||||
+name: ML-KEM-1024-ipd
|
||||
+name: ML-KEM-1024
|
||||
type: kem
|
||||
claimed-nist-level: 5
|
||||
claimed-security: IND-CCA2
|
||||
@ -14,7 +17,7 @@ index baa5ca3..ffafcf0 100644
|
||||
length-shared-secret: 32
|
||||
-nistkat-sha256: 5afcf2a568ad32d49b55105b032af1850f03f3888ff9e2a72f4059c58e968f60
|
||||
-testvectors-sha256: ff1a854b9b6761a70c65ccae85246fe0596a949e72eae0866a8a2a2d4ea54b10
|
||||
+nistkat-sha256: 03d6494b74c45d010e61b0328c1ab318c4df3b7f9dbd04d0e35b3468848584b7
|
||||
+nistkat-sha256: f580d851e5fb27e6876e5e203fa18be4cdbfd49e05d48fec3d3992c8f43a13e6
|
||||
+testvectors-sha256: 85ab251d6e749e6b27507a8a6ec473ba2e8419c1aef87d0cd5ec9903c1bb92df
|
||||
principal-submitters:
|
||||
- Peter Schwabe
|
||||
@ -32,9 +35,9 @@ index baa5ca3..ffafcf0 100644
|
||||
- signature_dec: pqcrystals_kyber1024_ref_dec
|
||||
- sources: ../LICENSE kem.c indcpa.c polyvec.c poly.c reduce.c ntt.c cbd.c verify.c kem.h params.h api.h indcpa.h polyvec.h poly.h reduce.h ntt.h cbd.h verify.h symmetric.h fips202.h symmetric-shake.c
|
||||
- common_dep: common_ref
|
||||
+ signature_keypair: pqcrystals_ml_kem_1024_ipd_ref_keypair
|
||||
+ signature_enc: pqcrystals_ml_kem_1024_ipd_ref_enc
|
||||
+ signature_dec: pqcrystals_ml_kem_1024_ipd_ref_dec
|
||||
+ signature_keypair: pqcrystals_ml_kem_1024_ref_keypair
|
||||
+ signature_enc: pqcrystals_ml_kem_1024_ref_enc
|
||||
+ signature_dec: pqcrystals_ml_kem_1024_ref_dec
|
||||
+ sources: ../LICENSE kem.c indcpa.c polyvec.c poly.c reduce.c ntt.c cbd.c verify.c kem.h params.h api.h indcpa.h polyvec.h poly.h reduce.h ntt.h cbd.h verify.h symmetric.h symmetric-shake.c
|
||||
- name: avx2
|
||||
- version: https://github.com/pq-crystals/kyber/commit/28413dfbf523fdde181246451c2bd77199c0f7ff
|
||||
@ -45,20 +48,23 @@ index baa5ca3..ffafcf0 100644
|
||||
- signature_dec: pqcrystals_kyber1024_avx2_dec
|
||||
- sources: ../LICENSE kem.c indcpa.c polyvec.c poly.c fq.S shuffle.S ntt.S invntt.S basemul.S consts.c rejsample.c cbd.c verify.c align.h kem.h params.h api.h indcpa.h polyvec.h poly.h reduce.h fq.inc shuffle.inc ntt.h consts.h rejsample.h cbd.h verify.h symmetric.h fips202.h fips202x4.h symmetric-shake.c
|
||||
- common_dep: common_avx2 common_keccak4x_avx2
|
||||
+ signature_keypair: pqcrystals_ml_kem_1024_ipd_avx2_keypair
|
||||
+ signature_enc: pqcrystals_ml_kem_1024_ipd_avx2_enc
|
||||
+ signature_dec: pqcrystals_ml_kem_1024_ipd_avx2_dec
|
||||
+ signature_keypair: pqcrystals_ml_kem_1024_avx2_keypair
|
||||
+ signature_enc: pqcrystals_ml_kem_1024_avx2_enc
|
||||
+ signature_dec: pqcrystals_ml_kem_1024_avx2_dec
|
||||
+ sources: ../LICENSE kem.c indcpa.c polyvec.c poly.c fq.S shuffle.S ntt.S invntt.S basemul.S consts.c rejsample.c cbd.c verify.c align.h kem.h params.h api.h indcpa.h polyvec.h poly.h reduce.h fq.inc shuffle.inc ntt.h consts.h rejsample.h cbd.h verify.h symmetric.h symmetric-shake.c
|
||||
supported_platforms:
|
||||
- architecture: x86_64
|
||||
operating_systems:
|
||||
diff --git a/Kyber512_META.yml b/ML-KEM-512-ipd_META.yml
|
||||
index b251701..d20f0b1 100644
|
||||
diff --git a/Kyber512_META.yml b/ML-KEM-512_META.yml
|
||||
similarity index 55%
|
||||
rename from Kyber512_META.yml
|
||||
rename to ML-KEM-512_META.yml
|
||||
index b251701..40440a8 100644
|
||||
--- a/Kyber512_META.yml
|
||||
+++ b/ML-KEM-512-ipd_META.yml
|
||||
+++ b/ML-KEM-512_META.yml
|
||||
@@ -1,4 +1,4 @@
|
||||
-name: Kyber512
|
||||
+name: ML-KEM-512-ipd
|
||||
+name: ML-KEM-512
|
||||
type: kem
|
||||
claimed-nist-level: 1
|
||||
claimed-security: IND-CCA2
|
||||
@ -68,7 +74,7 @@ index b251701..d20f0b1 100644
|
||||
length-shared-secret: 32
|
||||
-nistkat-sha256: bb0481d3325d828817900b709d23917cefbc10026fc857f098979451f67bb0ca
|
||||
-testvectors-sha256: 6730bb552c22d9d2176ffb5568e48eb30952cf1f065073ec5f9724f6a3c6ea85
|
||||
+nistkat-sha256: 76aae1fa3f8367522700b22da635a5bc4ced4298edb0eb9947aa3ba60d62676f
|
||||
+nistkat-sha256: c70041a761e01cd6426fa60e9fd6a4412c2be817386c8d0f3334898082512782
|
||||
+testvectors-sha256: e1ac6fb45e2511f4170a3527c0c50dcd61336f47113df7a299a61ef8394bd669
|
||||
principal-submitters:
|
||||
- Peter Schwabe
|
||||
@ -86,9 +92,9 @@ index b251701..d20f0b1 100644
|
||||
- signature_dec: pqcrystals_kyber512_ref_dec
|
||||
- sources: ../LICENSE kem.c indcpa.c polyvec.c poly.c reduce.c ntt.c cbd.c verify.c kem.h params.h api.h indcpa.h polyvec.h poly.h reduce.h ntt.h cbd.h verify.h symmetric.h fips202.h symmetric-shake.c
|
||||
- common_dep: common_ref
|
||||
+ signature_keypair: pqcrystals_ml_kem_512_ipd_ref_keypair
|
||||
+ signature_enc: pqcrystals_ml_kem_512_ipd_ref_enc
|
||||
+ signature_dec: pqcrystals_ml_kem_512_ipd_ref_dec
|
||||
+ signature_keypair: pqcrystals_ml_kem_512_ref_keypair
|
||||
+ signature_enc: pqcrystals_ml_kem_512_ref_enc
|
||||
+ signature_dec: pqcrystals_ml_kem_512_ref_dec
|
||||
+ sources: ../LICENSE kem.c indcpa.c polyvec.c poly.c reduce.c ntt.c cbd.c verify.c kem.h params.h api.h indcpa.h polyvec.h poly.h reduce.h ntt.h cbd.h verify.h symmetric.h symmetric-shake.c
|
||||
- name: avx2
|
||||
- version: https://github.com/pq-crystals/kyber/commit/36414d64fc1890ed58d1ca8b1e0cab23635d1ac2
|
||||
@ -99,20 +105,23 @@ index b251701..d20f0b1 100644
|
||||
- signature_dec: pqcrystals_kyber512_avx2_dec
|
||||
- sources: ../LICENSE kem.c indcpa.c polyvec.c poly.c fq.S shuffle.S ntt.S invntt.S basemul.S consts.c rejsample.c cbd.c verify.c align.h kem.h params.h api.h indcpa.h polyvec.h poly.h reduce.h fq.inc shuffle.inc ntt.h consts.h rejsample.h cbd.h verify.h symmetric.h fips202.h fips202x4.h symmetric-shake.c
|
||||
- common_dep: common_avx2 common_keccak4x_avx2
|
||||
+ signature_keypair: pqcrystals_ml_kem_512_ipd_avx2_keypair
|
||||
+ signature_enc: pqcrystals_ml_kem_512_ipd_avx2_enc
|
||||
+ signature_dec: pqcrystals_ml_kem_512_ipd_avx2_dec
|
||||
+ signature_keypair: pqcrystals_ml_kem_512_avx2_keypair
|
||||
+ signature_enc: pqcrystals_ml_kem_512_avx2_enc
|
||||
+ signature_dec: pqcrystals_ml_kem_512_avx2_dec
|
||||
+ sources: ../LICENSE kem.c indcpa.c polyvec.c poly.c fq.S shuffle.S ntt.S invntt.S basemul.S consts.c rejsample.c cbd.c verify.c align.h kem.h params.h api.h indcpa.h polyvec.h poly.h reduce.h fq.inc shuffle.inc ntt.h consts.h rejsample.h cbd.h verify.h symmetric.h symmetric-shake.c
|
||||
supported_platforms:
|
||||
- architecture: x86_64
|
||||
operating_systems:
|
||||
diff --git a/Kyber768_META.yml b/ML-KEM-768-ipd_META.yml
|
||||
index 7a0cc3d..e768cd5 100644
|
||||
diff --git a/Kyber768_META.yml b/ML-KEM-768_META.yml
|
||||
similarity index 55%
|
||||
rename from Kyber768_META.yml
|
||||
rename to ML-KEM-768_META.yml
|
||||
index 7a0cc3d..4277df3 100644
|
||||
--- a/Kyber768_META.yml
|
||||
+++ b/ML-KEM-768-ipd_META.yml
|
||||
+++ b/ML-KEM-768_META.yml
|
||||
@@ -1,4 +1,4 @@
|
||||
-name: Kyber768
|
||||
+name: ML-KEM-768-ipd
|
||||
+name: ML-KEM-768
|
||||
type: kem
|
||||
claimed-nist-level: 3
|
||||
claimed-security: IND-CCA2
|
||||
@ -122,7 +131,7 @@ index 7a0cc3d..e768cd5 100644
|
||||
length-shared-secret: 32
|
||||
-nistkat-sha256: 89e82a5bf2d4ddb2c6444e10409e6d9ca65dafbca67d1a0db2c9b54920a29172
|
||||
-testvectors-sha256: 667c8ca2ca93729c0df6ff24588460bad1bbdbfb64ece0fe8563852a7ff348c6
|
||||
+nistkat-sha256: c7e76b4b30c786b5b70c152a446e7832c1cb42b3816ec048dbeaf7041211b310
|
||||
+nistkat-sha256: 5352539586b6c3df58be6158a6250aeff402bd73060b0a3de68850ac074c17c3
|
||||
+testvectors-sha256: 2586721a714c439f6fef26e29ee1c4c67c6207186f810617f278e6ce3e67ea0d
|
||||
principal-submitters:
|
||||
- Peter Schwabe
|
||||
@ -140,9 +149,9 @@ index 7a0cc3d..e768cd5 100644
|
||||
- signature_dec: pqcrystals_kyber768_ref_dec
|
||||
- sources: ../LICENSE kem.c indcpa.c polyvec.c poly.c reduce.c ntt.c cbd.c verify.c kem.h params.h api.h indcpa.h polyvec.h poly.h reduce.h ntt.h cbd.h verify.h symmetric.h fips202.h symmetric-shake.c
|
||||
- common_dep: common_ref
|
||||
+ signature_keypair: pqcrystals_ml_kem_768_ipd_ref_keypair
|
||||
+ signature_enc: pqcrystals_ml_kem_768_ipd_ref_enc
|
||||
+ signature_dec: pqcrystals_ml_kem_768_ipd_ref_dec
|
||||
+ signature_keypair: pqcrystals_ml_kem_768_ref_keypair
|
||||
+ signature_enc: pqcrystals_ml_kem_768_ref_enc
|
||||
+ signature_dec: pqcrystals_ml_kem_768_ref_dec
|
||||
+ sources: ../LICENSE kem.c indcpa.c polyvec.c poly.c reduce.c ntt.c cbd.c verify.c kem.h params.h api.h indcpa.h polyvec.h poly.h reduce.h ntt.h cbd.h verify.h symmetric.h symmetric-shake.c
|
||||
- name: avx2
|
||||
- version: https://github.com/pq-crystals/kyber/commit/28413dfbf523fdde181246451c2bd77199c0f7ff
|
||||
@ -153,15 +162,15 @@ index 7a0cc3d..e768cd5 100644
|
||||
- signature_dec: pqcrystals_kyber768_avx2_dec
|
||||
- sources: ../LICENSE kem.c indcpa.c polyvec.c poly.c fq.S shuffle.S ntt.S invntt.S basemul.S consts.c rejsample.c cbd.c verify.c align.h kem.h params.h api.h indcpa.h polyvec.h poly.h reduce.h fq.inc shuffle.inc ntt.h consts.h rejsample.h cbd.h verify.h symmetric.h fips202.h fips202x4.h symmetric-shake.c
|
||||
- common_dep: common_avx2 common_keccak4x_avx2
|
||||
+ signature_keypair: pqcrystals_ml_kem_768_ipd_avx2_keypair
|
||||
+ signature_enc: pqcrystals_ml_kem_768_ipd_avx2_enc
|
||||
+ signature_dec: pqcrystals_ml_kem_768_ipd_avx2_dec
|
||||
+ signature_keypair: pqcrystals_ml_kem_768_avx2_keypair
|
||||
+ signature_enc: pqcrystals_ml_kem_768_avx2_enc
|
||||
+ signature_dec: pqcrystals_ml_kem_768_avx2_dec
|
||||
+ sources: ../LICENSE kem.c indcpa.c polyvec.c poly.c fq.S shuffle.S ntt.S invntt.S basemul.S consts.c rejsample.c cbd.c verify.c align.h kem.h params.h api.h indcpa.h polyvec.h poly.h reduce.h fq.inc shuffle.inc ntt.h consts.h rejsample.h cbd.h verify.h symmetric.h symmetric-shake.c
|
||||
supported_platforms:
|
||||
- architecture: x86_64
|
||||
operating_systems:
|
||||
diff --git a/avx2/indcpa.c b/avx2/indcpa.c
|
||||
index 4f3b782..572ce49 100644
|
||||
index 18b9d08..c4b2b3a 100644
|
||||
--- a/avx2/indcpa.c
|
||||
+++ b/avx2/indcpa.c
|
||||
@@ -175,7 +175,7 @@ void gen_matrix(polyvec *a, const uint8_t seed[32], int transposed)
|
||||
@ -260,26 +269,26 @@ index bc70ebf..fdc688e 100644
|
||||
#define KYBER_NAMESPACE(s) pqcrystals_kyber512_90s_avx2_##s
|
||||
#else
|
||||
-#define KYBER_NAMESPACE(s) pqcrystals_kyber512_avx2_##s
|
||||
+#define KYBER_NAMESPACE(s) pqcrystals_ml_kem_512_ipd_avx2_##s
|
||||
+#define KYBER_NAMESPACE(s) pqcrystals_ml_kem_512_avx2_##s
|
||||
#endif
|
||||
#elif (KYBER_K == 3)
|
||||
#ifdef KYBER_90S
|
||||
#define KYBER_NAMESPACE(s) pqcrystals_kyber768_90s_avx2_##s
|
||||
#else
|
||||
-#define KYBER_NAMESPACE(s) pqcrystals_kyber768_avx2_##s
|
||||
+#define KYBER_NAMESPACE(s) pqcrystals_ml_kem_768_ipd_avx2_##s
|
||||
+#define KYBER_NAMESPACE(s) pqcrystals_ml_kem_768_avx2_##s
|
||||
#endif
|
||||
#elif (KYBER_K == 4)
|
||||
#ifdef KYBER_90S
|
||||
#define KYBER_NAMESPACE(s) pqcrystals_kyber1024_90s_avx2_##s
|
||||
#else
|
||||
-#define KYBER_NAMESPACE(s) pqcrystals_kyber1024_avx2_##s
|
||||
+#define KYBER_NAMESPACE(s) pqcrystals_ml_kem_1024_ipd_avx2_##s
|
||||
+#define KYBER_NAMESPACE(s) pqcrystals_ml_kem_1024_avx2_##s
|
||||
#endif
|
||||
#else
|
||||
#error "KYBER_K must be in {2,3,4}"
|
||||
diff --git a/avx2/poly.c b/avx2/poly.c
|
||||
index ab148a2..96bad86 100644
|
||||
index 56a5e1e..681fd6d 100644
|
||||
--- a/avx2/poly.c
|
||||
+++ b/avx2/poly.c
|
||||
@@ -2,6 +2,7 @@
|
||||
@ -290,7 +299,7 @@ index ab148a2..96bad86 100644
|
||||
#include "params.h"
|
||||
#include "poly.h"
|
||||
#include "ntt.h"
|
||||
@@ -412,7 +413,7 @@ void poly_getnoise_eta1_4x(poly *r0,
|
||||
@@ -325,7 +326,7 @@ void poly_getnoise_eta1_4x(poly *r0,
|
||||
{
|
||||
ALIGNED_UINT8(NOISE_NBLOCKS*SHAKE256_RATE) buf[4];
|
||||
__m256i f;
|
||||
@ -299,7 +308,7 @@ index ab148a2..96bad86 100644
|
||||
|
||||
f = _mm256_loadu_si256((__m256i *)seed);
|
||||
_mm256_store_si256(buf[0].vec, f);
|
||||
@@ -425,8 +426,10 @@ void poly_getnoise_eta1_4x(poly *r0,
|
||||
@@ -338,8 +339,10 @@ void poly_getnoise_eta1_4x(poly *r0,
|
||||
buf[2].coeffs[32] = nonce2;
|
||||
buf[3].coeffs[32] = nonce3;
|
||||
|
||||
@ -310,7 +319,7 @@ index ab148a2..96bad86 100644
|
||||
|
||||
poly_cbd_eta1(r0, buf[0].vec);
|
||||
poly_cbd_eta1(r1, buf[1].vec);
|
||||
@@ -447,7 +450,7 @@ void poly_getnoise_eta1122_4x(poly *r0,
|
||||
@@ -360,7 +363,7 @@ void poly_getnoise_eta1122_4x(poly *r0,
|
||||
{
|
||||
ALIGNED_UINT8(NOISE_NBLOCKS*SHAKE256_RATE) buf[4];
|
||||
__m256i f;
|
||||
@ -319,7 +328,7 @@ index ab148a2..96bad86 100644
|
||||
|
||||
f = _mm256_loadu_si256((__m256i *)seed);
|
||||
_mm256_store_si256(buf[0].vec, f);
|
||||
@@ -460,8 +463,10 @@ void poly_getnoise_eta1122_4x(poly *r0,
|
||||
@@ -373,8 +376,10 @@ void poly_getnoise_eta1122_4x(poly *r0,
|
||||
buf[2].coeffs[32] = nonce2;
|
||||
buf[3].coeffs[32] = nonce3;
|
||||
|
||||
@ -348,18 +357,18 @@ index 627b891..e4941f7 100644
|
||||
uint8_t x,
|
||||
uint8_t y);
|
||||
diff --git a/ref/indcpa.c b/ref/indcpa.c
|
||||
index 5d74518..4a8b4c8 100644
|
||||
index 9a78c09..726cfa9 100644
|
||||
--- a/ref/indcpa.c
|
||||
+++ b/ref/indcpa.c
|
||||
@@ -164,6 +164,7 @@ void gen_matrix(polyvec *a, const uint8_t seed[KYBER_SYMBYTES], int transposed)
|
||||
unsigned int buflen, off;
|
||||
uint8_t buf[GEN_MATRIX_NBLOCKS*XOF_BLOCKBYTES+2];
|
||||
@@ -168,6 +168,7 @@ void gen_matrix(polyvec *a, const uint8_t seed[KYBER_SYMBYTES], int transposed)
|
||||
unsigned int buflen;
|
||||
uint8_t buf[GEN_MATRIX_NBLOCKS*XOF_BLOCKBYTES];
|
||||
xof_state state;
|
||||
+ xof_init(&state, seed);
|
||||
|
||||
for(i=0;i<KYBER_K;i++) {
|
||||
for(j=0;j<KYBER_K;j++) {
|
||||
@@ -186,6 +187,7 @@ void gen_matrix(polyvec *a, const uint8_t seed[KYBER_SYMBYTES], int transposed)
|
||||
@@ -187,6 +188,7 @@ void gen_matrix(polyvec *a, const uint8_t seed[KYBER_SYMBYTES], int transposed)
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -376,13 +385,13 @@ index 0802c74..36b2b98 100644
|
||||
/* Don't change parameters below this line */
|
||||
#if (KYBER_K == 2)
|
||||
-#define KYBER_NAMESPACE(s) pqcrystals_kyber512_ref_##s
|
||||
+#define KYBER_NAMESPACE(s) pqcrystals_ml_kem_512_ipd_ref_##s
|
||||
+#define KYBER_NAMESPACE(s) pqcrystals_ml_kem_512_ref_##s
|
||||
#elif (KYBER_K == 3)
|
||||
-#define KYBER_NAMESPACE(s) pqcrystals_kyber768_ref_##s
|
||||
+#define KYBER_NAMESPACE(s) pqcrystals_ml_kem_768_ipd_ref_##s
|
||||
+#define KYBER_NAMESPACE(s) pqcrystals_ml_kem_768_ref_##s
|
||||
#elif (KYBER_K == 4)
|
||||
-#define KYBER_NAMESPACE(s) pqcrystals_kyber1024_ref_##s
|
||||
+#define KYBER_NAMESPACE(s) pqcrystals_ml_kem_1024_ipd_ref_##s
|
||||
+#define KYBER_NAMESPACE(s) pqcrystals_ml_kem_1024_ref_##s
|
||||
#else
|
||||
#error "KYBER_K must be in {2,3,4}"
|
||||
#endif
|
||||
@ -34,11 +34,8 @@ OQS_API const char *OQS_KEM_alg_identifier(size_t i) {
|
||||
OQS_KEM_alg_kyber_512,
|
||||
OQS_KEM_alg_kyber_768,
|
||||
OQS_KEM_alg_kyber_1024,
|
||||
OQS_KEM_alg_ml_kem_512_ipd,
|
||||
OQS_KEM_alg_ml_kem_512,
|
||||
OQS_KEM_alg_ml_kem_768_ipd,
|
||||
OQS_KEM_alg_ml_kem_768,
|
||||
OQS_KEM_alg_ml_kem_1024_ipd,
|
||||
OQS_KEM_alg_ml_kem_1024,
|
||||
///// OQS_COPY_FROM_UPSTREAM_FRAGMENT_ALG_IDENTIFIER_END
|
||||
OQS_KEM_alg_ntruprime_sntrup761,
|
||||
@ -194,13 +191,6 @@ OQS_API int OQS_KEM_alg_is_enabled(const char *method_name) {
|
||||
return 0;
|
||||
#endif
|
||||
|
||||
} else if (0 == strcasecmp(method_name, OQS_KEM_alg_ml_kem_512_ipd)) {
|
||||
#ifdef OQS_ENABLE_KEM_ml_kem_512_ipd
|
||||
return 1;
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
|
||||
} else if (0 == strcasecmp(method_name, OQS_KEM_alg_ml_kem_512)) {
|
||||
#ifdef OQS_ENABLE_KEM_ml_kem_512
|
||||
return 1;
|
||||
@ -208,13 +198,6 @@ OQS_API int OQS_KEM_alg_is_enabled(const char *method_name) {
|
||||
return 0;
|
||||
#endif
|
||||
|
||||
} else if (0 == strcasecmp(method_name, OQS_KEM_alg_ml_kem_768_ipd)) {
|
||||
#ifdef OQS_ENABLE_KEM_ml_kem_768_ipd
|
||||
return 1;
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
|
||||
} else if (0 == strcasecmp(method_name, OQS_KEM_alg_ml_kem_768)) {
|
||||
#ifdef OQS_ENABLE_KEM_ml_kem_768
|
||||
return 1;
|
||||
@ -222,13 +205,6 @@ OQS_API int OQS_KEM_alg_is_enabled(const char *method_name) {
|
||||
return 0;
|
||||
#endif
|
||||
|
||||
} else if (0 == strcasecmp(method_name, OQS_KEM_alg_ml_kem_1024_ipd)) {
|
||||
#ifdef OQS_ENABLE_KEM_ml_kem_1024_ipd
|
||||
return 1;
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
|
||||
} else if (0 == strcasecmp(method_name, OQS_KEM_alg_ml_kem_1024)) {
|
||||
#ifdef OQS_ENABLE_KEM_ml_kem_1024
|
||||
return 1;
|
||||
@ -420,13 +396,6 @@ OQS_API OQS_KEM *OQS_KEM_new(const char *method_name) {
|
||||
return NULL;
|
||||
#endif
|
||||
|
||||
} else if (0 == strcasecmp(method_name, OQS_KEM_alg_ml_kem_512_ipd)) {
|
||||
#ifdef OQS_ENABLE_KEM_ml_kem_512_ipd
|
||||
return OQS_KEM_ml_kem_512_ipd_new();
|
||||
#else
|
||||
return NULL;
|
||||
#endif
|
||||
|
||||
} else if (0 == strcasecmp(method_name, OQS_KEM_alg_ml_kem_512)) {
|
||||
#ifdef OQS_ENABLE_KEM_ml_kem_512
|
||||
return OQS_KEM_ml_kem_512_new();
|
||||
@ -434,13 +403,6 @@ OQS_API OQS_KEM *OQS_KEM_new(const char *method_name) {
|
||||
return NULL;
|
||||
#endif
|
||||
|
||||
} else if (0 == strcasecmp(method_name, OQS_KEM_alg_ml_kem_768_ipd)) {
|
||||
#ifdef OQS_ENABLE_KEM_ml_kem_768_ipd
|
||||
return OQS_KEM_ml_kem_768_ipd_new();
|
||||
#else
|
||||
return NULL;
|
||||
#endif
|
||||
|
||||
} else if (0 == strcasecmp(method_name, OQS_KEM_alg_ml_kem_768)) {
|
||||
#ifdef OQS_ENABLE_KEM_ml_kem_768
|
||||
return OQS_KEM_ml_kem_768_new();
|
||||
@ -448,13 +410,6 @@ OQS_API OQS_KEM *OQS_KEM_new(const char *method_name) {
|
||||
return NULL;
|
||||
#endif
|
||||
|
||||
} else if (0 == strcasecmp(method_name, OQS_KEM_alg_ml_kem_1024_ipd)) {
|
||||
#ifdef OQS_ENABLE_KEM_ml_kem_1024_ipd
|
||||
return OQS_KEM_ml_kem_1024_ipd_new();
|
||||
#else
|
||||
return NULL;
|
||||
#endif
|
||||
|
||||
} else if (0 == strcasecmp(method_name, OQS_KEM_alg_ml_kem_1024)) {
|
||||
#ifdef OQS_ENABLE_KEM_ml_kem_1024
|
||||
return OQS_KEM_ml_kem_1024_new();
|
||||
|
||||
@ -70,16 +70,10 @@ extern "C" {
|
||||
#define OQS_KEM_alg_kyber_768 "Kyber768"
|
||||
/** Algorithm identifier for Kyber1024 KEM. */
|
||||
#define OQS_KEM_alg_kyber_1024 "Kyber1024"
|
||||
/** Algorithm identifier for ML-KEM-512-ipd KEM. */
|
||||
#define OQS_KEM_alg_ml_kem_512_ipd "ML-KEM-512-ipd"
|
||||
/** Algorithm identifier for ML-KEM-512 KEM. */
|
||||
#define OQS_KEM_alg_ml_kem_512 "ML-KEM-512"
|
||||
/** Algorithm identifier for ML-KEM-768-ipd KEM. */
|
||||
#define OQS_KEM_alg_ml_kem_768_ipd "ML-KEM-768-ipd"
|
||||
/** Algorithm identifier for ML-KEM-768 KEM. */
|
||||
#define OQS_KEM_alg_ml_kem_768 "ML-KEM-768"
|
||||
/** Algorithm identifier for ML-KEM-1024-ipd KEM. */
|
||||
#define OQS_KEM_alg_ml_kem_1024_ipd "ML-KEM-1024-ipd"
|
||||
/** Algorithm identifier for ML-KEM-1024 KEM. */
|
||||
#define OQS_KEM_alg_ml_kem_1024 "ML-KEM-1024"
|
||||
///// OQS_COPY_FROM_UPSTREAM_FRAGMENT_ALG_IDENTIFIER_END
|
||||
@ -101,7 +95,7 @@ extern "C" {
|
||||
///// OQS_COPY_FROM_UPSTREAM_FRAGMENT_ALGS_LENGTH_START
|
||||
|
||||
/** Number of algorithm identifiers above. */
|
||||
#define OQS_KEM_algs_length 32
|
||||
#define OQS_KEM_algs_length 29
|
||||
///// OQS_COPY_FROM_UPSTREAM_FRAGMENT_ALGS_LENGTH_END
|
||||
|
||||
/**
|
||||
|
||||
@ -5,58 +5,58 @@
|
||||
|
||||
set(_ML_KEM_OBJS "")
|
||||
|
||||
if(OQS_ENABLE_KEM_ml_kem_512_ipd OR OQS_ENABLE_KEM_ml_kem_512)
|
||||
add_library(ml_kem_512_ipd_ref OBJECT kem_ml_kem_512_ipd.c pqcrystals-kyber-standard_ml-kem-512-ipd_ref/cbd.c pqcrystals-kyber-standard_ml-kem-512-ipd_ref/indcpa.c pqcrystals-kyber-standard_ml-kem-512-ipd_ref/kem.c pqcrystals-kyber-standard_ml-kem-512-ipd_ref/ntt.c pqcrystals-kyber-standard_ml-kem-512-ipd_ref/poly.c pqcrystals-kyber-standard_ml-kem-512-ipd_ref/polyvec.c pqcrystals-kyber-standard_ml-kem-512-ipd_ref/reduce.c pqcrystals-kyber-standard_ml-kem-512-ipd_ref/symmetric-shake.c pqcrystals-kyber-standard_ml-kem-512-ipd_ref/verify.c)
|
||||
target_compile_options(ml_kem_512_ipd_ref PUBLIC -DKYBER_K=2)
|
||||
target_include_directories(ml_kem_512_ipd_ref PRIVATE ${CMAKE_CURRENT_LIST_DIR}/pqcrystals-kyber-standard_ml-kem-512-ipd_ref)
|
||||
target_include_directories(ml_kem_512_ipd_ref PRIVATE ${PROJECT_SOURCE_DIR}/src/common/pqclean_shims)
|
||||
target_compile_options(ml_kem_512_ipd_ref PUBLIC -DKYBER_K=2)
|
||||
set(_ML_KEM_OBJS ${_ML_KEM_OBJS} $<TARGET_OBJECTS:ml_kem_512_ipd_ref>)
|
||||
if(OQS_ENABLE_KEM_ml_kem_512)
|
||||
add_library(ml_kem_512_ref OBJECT kem_ml_kem_512.c pqcrystals-kyber-standard_ml-kem-512_ref/cbd.c pqcrystals-kyber-standard_ml-kem-512_ref/indcpa.c pqcrystals-kyber-standard_ml-kem-512_ref/kem.c pqcrystals-kyber-standard_ml-kem-512_ref/ntt.c pqcrystals-kyber-standard_ml-kem-512_ref/poly.c pqcrystals-kyber-standard_ml-kem-512_ref/polyvec.c pqcrystals-kyber-standard_ml-kem-512_ref/reduce.c pqcrystals-kyber-standard_ml-kem-512_ref/symmetric-shake.c pqcrystals-kyber-standard_ml-kem-512_ref/verify.c)
|
||||
target_compile_options(ml_kem_512_ref PUBLIC -DKYBER_K=2)
|
||||
target_include_directories(ml_kem_512_ref PRIVATE ${CMAKE_CURRENT_LIST_DIR}/pqcrystals-kyber-standard_ml-kem-512_ref)
|
||||
target_include_directories(ml_kem_512_ref PRIVATE ${PROJECT_SOURCE_DIR}/src/common/pqclean_shims)
|
||||
target_compile_options(ml_kem_512_ref PUBLIC -DKYBER_K=2)
|
||||
set(_ML_KEM_OBJS ${_ML_KEM_OBJS} $<TARGET_OBJECTS:ml_kem_512_ref>)
|
||||
endif()
|
||||
|
||||
if(OQS_ENABLE_KEM_ml_kem_512_ipd_avx2 OR OQS_ENABLE_KEM_ml_kem_512_avx2)
|
||||
add_library(ml_kem_512_ipd_avx2 OBJECT pqcrystals-kyber-standard_ml-kem-512-ipd_avx2/basemul.S pqcrystals-kyber-standard_ml-kem-512-ipd_avx2/cbd.c pqcrystals-kyber-standard_ml-kem-512-ipd_avx2/consts.c pqcrystals-kyber-standard_ml-kem-512-ipd_avx2/fq.S pqcrystals-kyber-standard_ml-kem-512-ipd_avx2/indcpa.c pqcrystals-kyber-standard_ml-kem-512-ipd_avx2/invntt.S pqcrystals-kyber-standard_ml-kem-512-ipd_avx2/kem.c pqcrystals-kyber-standard_ml-kem-512-ipd_avx2/ntt.S pqcrystals-kyber-standard_ml-kem-512-ipd_avx2/poly.c pqcrystals-kyber-standard_ml-kem-512-ipd_avx2/polyvec.c pqcrystals-kyber-standard_ml-kem-512-ipd_avx2/rejsample.c pqcrystals-kyber-standard_ml-kem-512-ipd_avx2/shuffle.S pqcrystals-kyber-standard_ml-kem-512-ipd_avx2/symmetric-shake.c pqcrystals-kyber-standard_ml-kem-512-ipd_avx2/verify.c)
|
||||
target_include_directories(ml_kem_512_ipd_avx2 PRIVATE ${CMAKE_CURRENT_LIST_DIR}/pqcrystals-kyber-standard_ml-kem-512-ipd_avx2)
|
||||
target_include_directories(ml_kem_512_ipd_avx2 PRIVATE ${PROJECT_SOURCE_DIR}/src/common/pqclean_shims)
|
||||
target_compile_options(ml_kem_512_ipd_avx2 PRIVATE -mavx2 -mbmi2 -mpopcnt )
|
||||
target_compile_options(ml_kem_512_ipd_avx2 PUBLIC -DKYBER_K=2)
|
||||
set(_ML_KEM_OBJS ${_ML_KEM_OBJS} $<TARGET_OBJECTS:ml_kem_512_ipd_avx2>)
|
||||
if(OQS_ENABLE_KEM_ml_kem_512_avx2)
|
||||
add_library(ml_kem_512_avx2 OBJECT pqcrystals-kyber-standard_ml-kem-512_avx2/basemul.S pqcrystals-kyber-standard_ml-kem-512_avx2/cbd.c pqcrystals-kyber-standard_ml-kem-512_avx2/consts.c pqcrystals-kyber-standard_ml-kem-512_avx2/fq.S pqcrystals-kyber-standard_ml-kem-512_avx2/indcpa.c pqcrystals-kyber-standard_ml-kem-512_avx2/invntt.S pqcrystals-kyber-standard_ml-kem-512_avx2/kem.c pqcrystals-kyber-standard_ml-kem-512_avx2/ntt.S pqcrystals-kyber-standard_ml-kem-512_avx2/poly.c pqcrystals-kyber-standard_ml-kem-512_avx2/polyvec.c pqcrystals-kyber-standard_ml-kem-512_avx2/rejsample.c pqcrystals-kyber-standard_ml-kem-512_avx2/shuffle.S pqcrystals-kyber-standard_ml-kem-512_avx2/symmetric-shake.c pqcrystals-kyber-standard_ml-kem-512_avx2/verify.c)
|
||||
target_include_directories(ml_kem_512_avx2 PRIVATE ${CMAKE_CURRENT_LIST_DIR}/pqcrystals-kyber-standard_ml-kem-512_avx2)
|
||||
target_include_directories(ml_kem_512_avx2 PRIVATE ${PROJECT_SOURCE_DIR}/src/common/pqclean_shims)
|
||||
target_compile_options(ml_kem_512_avx2 PRIVATE -mavx2 -mbmi2 -mpopcnt )
|
||||
target_compile_options(ml_kem_512_avx2 PUBLIC -DKYBER_K=2)
|
||||
set(_ML_KEM_OBJS ${_ML_KEM_OBJS} $<TARGET_OBJECTS:ml_kem_512_avx2>)
|
||||
endif()
|
||||
|
||||
if(OQS_ENABLE_KEM_ml_kem_768_ipd OR OQS_ENABLE_KEM_ml_kem_768)
|
||||
add_library(ml_kem_768_ipd_ref OBJECT kem_ml_kem_768_ipd.c pqcrystals-kyber-standard_ml-kem-768-ipd_ref/cbd.c pqcrystals-kyber-standard_ml-kem-768-ipd_ref/indcpa.c pqcrystals-kyber-standard_ml-kem-768-ipd_ref/kem.c pqcrystals-kyber-standard_ml-kem-768-ipd_ref/ntt.c pqcrystals-kyber-standard_ml-kem-768-ipd_ref/poly.c pqcrystals-kyber-standard_ml-kem-768-ipd_ref/polyvec.c pqcrystals-kyber-standard_ml-kem-768-ipd_ref/reduce.c pqcrystals-kyber-standard_ml-kem-768-ipd_ref/symmetric-shake.c pqcrystals-kyber-standard_ml-kem-768-ipd_ref/verify.c)
|
||||
target_compile_options(ml_kem_768_ipd_ref PUBLIC -DKYBER_K=3)
|
||||
target_include_directories(ml_kem_768_ipd_ref PRIVATE ${CMAKE_CURRENT_LIST_DIR}/pqcrystals-kyber-standard_ml-kem-768-ipd_ref)
|
||||
target_include_directories(ml_kem_768_ipd_ref PRIVATE ${PROJECT_SOURCE_DIR}/src/common/pqclean_shims)
|
||||
target_compile_options(ml_kem_768_ipd_ref PUBLIC -DKYBER_K=3)
|
||||
set(_ML_KEM_OBJS ${_ML_KEM_OBJS} $<TARGET_OBJECTS:ml_kem_768_ipd_ref>)
|
||||
if(OQS_ENABLE_KEM_ml_kem_768)
|
||||
add_library(ml_kem_768_ref OBJECT kem_ml_kem_768.c pqcrystals-kyber-standard_ml-kem-768_ref/cbd.c pqcrystals-kyber-standard_ml-kem-768_ref/indcpa.c pqcrystals-kyber-standard_ml-kem-768_ref/kem.c pqcrystals-kyber-standard_ml-kem-768_ref/ntt.c pqcrystals-kyber-standard_ml-kem-768_ref/poly.c pqcrystals-kyber-standard_ml-kem-768_ref/polyvec.c pqcrystals-kyber-standard_ml-kem-768_ref/reduce.c pqcrystals-kyber-standard_ml-kem-768_ref/symmetric-shake.c pqcrystals-kyber-standard_ml-kem-768_ref/verify.c)
|
||||
target_compile_options(ml_kem_768_ref PUBLIC -DKYBER_K=3)
|
||||
target_include_directories(ml_kem_768_ref PRIVATE ${CMAKE_CURRENT_LIST_DIR}/pqcrystals-kyber-standard_ml-kem-768_ref)
|
||||
target_include_directories(ml_kem_768_ref PRIVATE ${PROJECT_SOURCE_DIR}/src/common/pqclean_shims)
|
||||
target_compile_options(ml_kem_768_ref PUBLIC -DKYBER_K=3)
|
||||
set(_ML_KEM_OBJS ${_ML_KEM_OBJS} $<TARGET_OBJECTS:ml_kem_768_ref>)
|
||||
endif()
|
||||
|
||||
if(OQS_ENABLE_KEM_ml_kem_768_ipd_avx2 OR OQS_ENABLE_KEM_ml_kem_768_avx2)
|
||||
add_library(ml_kem_768_ipd_avx2 OBJECT pqcrystals-kyber-standard_ml-kem-768-ipd_avx2/basemul.S pqcrystals-kyber-standard_ml-kem-768-ipd_avx2/cbd.c pqcrystals-kyber-standard_ml-kem-768-ipd_avx2/consts.c pqcrystals-kyber-standard_ml-kem-768-ipd_avx2/fq.S pqcrystals-kyber-standard_ml-kem-768-ipd_avx2/indcpa.c pqcrystals-kyber-standard_ml-kem-768-ipd_avx2/invntt.S pqcrystals-kyber-standard_ml-kem-768-ipd_avx2/kem.c pqcrystals-kyber-standard_ml-kem-768-ipd_avx2/ntt.S pqcrystals-kyber-standard_ml-kem-768-ipd_avx2/poly.c pqcrystals-kyber-standard_ml-kem-768-ipd_avx2/polyvec.c pqcrystals-kyber-standard_ml-kem-768-ipd_avx2/rejsample.c pqcrystals-kyber-standard_ml-kem-768-ipd_avx2/shuffle.S pqcrystals-kyber-standard_ml-kem-768-ipd_avx2/symmetric-shake.c pqcrystals-kyber-standard_ml-kem-768-ipd_avx2/verify.c)
|
||||
target_include_directories(ml_kem_768_ipd_avx2 PRIVATE ${CMAKE_CURRENT_LIST_DIR}/pqcrystals-kyber-standard_ml-kem-768-ipd_avx2)
|
||||
target_include_directories(ml_kem_768_ipd_avx2 PRIVATE ${PROJECT_SOURCE_DIR}/src/common/pqclean_shims)
|
||||
target_compile_options(ml_kem_768_ipd_avx2 PRIVATE -mavx2 -mbmi2 -mpopcnt )
|
||||
target_compile_options(ml_kem_768_ipd_avx2 PUBLIC -DKYBER_K=3)
|
||||
set(_ML_KEM_OBJS ${_ML_KEM_OBJS} $<TARGET_OBJECTS:ml_kem_768_ipd_avx2>)
|
||||
if(OQS_ENABLE_KEM_ml_kem_768_avx2)
|
||||
add_library(ml_kem_768_avx2 OBJECT pqcrystals-kyber-standard_ml-kem-768_avx2/basemul.S pqcrystals-kyber-standard_ml-kem-768_avx2/cbd.c pqcrystals-kyber-standard_ml-kem-768_avx2/consts.c pqcrystals-kyber-standard_ml-kem-768_avx2/fq.S pqcrystals-kyber-standard_ml-kem-768_avx2/indcpa.c pqcrystals-kyber-standard_ml-kem-768_avx2/invntt.S pqcrystals-kyber-standard_ml-kem-768_avx2/kem.c pqcrystals-kyber-standard_ml-kem-768_avx2/ntt.S pqcrystals-kyber-standard_ml-kem-768_avx2/poly.c pqcrystals-kyber-standard_ml-kem-768_avx2/polyvec.c pqcrystals-kyber-standard_ml-kem-768_avx2/rejsample.c pqcrystals-kyber-standard_ml-kem-768_avx2/shuffle.S pqcrystals-kyber-standard_ml-kem-768_avx2/symmetric-shake.c pqcrystals-kyber-standard_ml-kem-768_avx2/verify.c)
|
||||
target_include_directories(ml_kem_768_avx2 PRIVATE ${CMAKE_CURRENT_LIST_DIR}/pqcrystals-kyber-standard_ml-kem-768_avx2)
|
||||
target_include_directories(ml_kem_768_avx2 PRIVATE ${PROJECT_SOURCE_DIR}/src/common/pqclean_shims)
|
||||
target_compile_options(ml_kem_768_avx2 PRIVATE -mavx2 -mbmi2 -mpopcnt )
|
||||
target_compile_options(ml_kem_768_avx2 PUBLIC -DKYBER_K=3)
|
||||
set(_ML_KEM_OBJS ${_ML_KEM_OBJS} $<TARGET_OBJECTS:ml_kem_768_avx2>)
|
||||
endif()
|
||||
|
||||
if(OQS_ENABLE_KEM_ml_kem_1024_ipd OR OQS_ENABLE_KEM_ml_kem_1024)
|
||||
add_library(ml_kem_1024_ipd_ref OBJECT kem_ml_kem_1024_ipd.c pqcrystals-kyber-standard_ml-kem-1024-ipd_ref/cbd.c pqcrystals-kyber-standard_ml-kem-1024-ipd_ref/indcpa.c pqcrystals-kyber-standard_ml-kem-1024-ipd_ref/kem.c pqcrystals-kyber-standard_ml-kem-1024-ipd_ref/ntt.c pqcrystals-kyber-standard_ml-kem-1024-ipd_ref/poly.c pqcrystals-kyber-standard_ml-kem-1024-ipd_ref/polyvec.c pqcrystals-kyber-standard_ml-kem-1024-ipd_ref/reduce.c pqcrystals-kyber-standard_ml-kem-1024-ipd_ref/symmetric-shake.c pqcrystals-kyber-standard_ml-kem-1024-ipd_ref/verify.c)
|
||||
target_compile_options(ml_kem_1024_ipd_ref PUBLIC -DKYBER_K=4)
|
||||
target_include_directories(ml_kem_1024_ipd_ref PRIVATE ${CMAKE_CURRENT_LIST_DIR}/pqcrystals-kyber-standard_ml-kem-1024-ipd_ref)
|
||||
target_include_directories(ml_kem_1024_ipd_ref PRIVATE ${PROJECT_SOURCE_DIR}/src/common/pqclean_shims)
|
||||
target_compile_options(ml_kem_1024_ipd_ref PUBLIC -DKYBER_K=4)
|
||||
set(_ML_KEM_OBJS ${_ML_KEM_OBJS} $<TARGET_OBJECTS:ml_kem_1024_ipd_ref>)
|
||||
if(OQS_ENABLE_KEM_ml_kem_1024)
|
||||
add_library(ml_kem_1024_ref OBJECT kem_ml_kem_1024.c pqcrystals-kyber-standard_ml-kem-1024_ref/cbd.c pqcrystals-kyber-standard_ml-kem-1024_ref/indcpa.c pqcrystals-kyber-standard_ml-kem-1024_ref/kem.c pqcrystals-kyber-standard_ml-kem-1024_ref/ntt.c pqcrystals-kyber-standard_ml-kem-1024_ref/poly.c pqcrystals-kyber-standard_ml-kem-1024_ref/polyvec.c pqcrystals-kyber-standard_ml-kem-1024_ref/reduce.c pqcrystals-kyber-standard_ml-kem-1024_ref/symmetric-shake.c pqcrystals-kyber-standard_ml-kem-1024_ref/verify.c)
|
||||
target_compile_options(ml_kem_1024_ref PUBLIC -DKYBER_K=4)
|
||||
target_include_directories(ml_kem_1024_ref PRIVATE ${CMAKE_CURRENT_LIST_DIR}/pqcrystals-kyber-standard_ml-kem-1024_ref)
|
||||
target_include_directories(ml_kem_1024_ref PRIVATE ${PROJECT_SOURCE_DIR}/src/common/pqclean_shims)
|
||||
target_compile_options(ml_kem_1024_ref PUBLIC -DKYBER_K=4)
|
||||
set(_ML_KEM_OBJS ${_ML_KEM_OBJS} $<TARGET_OBJECTS:ml_kem_1024_ref>)
|
||||
endif()
|
||||
|
||||
if(OQS_ENABLE_KEM_ml_kem_1024_ipd_avx2 OR OQS_ENABLE_KEM_ml_kem_1024_avx2)
|
||||
add_library(ml_kem_1024_ipd_avx2 OBJECT pqcrystals-kyber-standard_ml-kem-1024-ipd_avx2/basemul.S pqcrystals-kyber-standard_ml-kem-1024-ipd_avx2/cbd.c pqcrystals-kyber-standard_ml-kem-1024-ipd_avx2/consts.c pqcrystals-kyber-standard_ml-kem-1024-ipd_avx2/fq.S pqcrystals-kyber-standard_ml-kem-1024-ipd_avx2/indcpa.c pqcrystals-kyber-standard_ml-kem-1024-ipd_avx2/invntt.S pqcrystals-kyber-standard_ml-kem-1024-ipd_avx2/kem.c pqcrystals-kyber-standard_ml-kem-1024-ipd_avx2/ntt.S pqcrystals-kyber-standard_ml-kem-1024-ipd_avx2/poly.c pqcrystals-kyber-standard_ml-kem-1024-ipd_avx2/polyvec.c pqcrystals-kyber-standard_ml-kem-1024-ipd_avx2/rejsample.c pqcrystals-kyber-standard_ml-kem-1024-ipd_avx2/shuffle.S pqcrystals-kyber-standard_ml-kem-1024-ipd_avx2/symmetric-shake.c pqcrystals-kyber-standard_ml-kem-1024-ipd_avx2/verify.c)
|
||||
target_include_directories(ml_kem_1024_ipd_avx2 PRIVATE ${CMAKE_CURRENT_LIST_DIR}/pqcrystals-kyber-standard_ml-kem-1024-ipd_avx2)
|
||||
target_include_directories(ml_kem_1024_ipd_avx2 PRIVATE ${PROJECT_SOURCE_DIR}/src/common/pqclean_shims)
|
||||
target_compile_options(ml_kem_1024_ipd_avx2 PRIVATE -mavx2 -mbmi2 -mpopcnt )
|
||||
target_compile_options(ml_kem_1024_ipd_avx2 PUBLIC -DKYBER_K=4)
|
||||
set(_ML_KEM_OBJS ${_ML_KEM_OBJS} $<TARGET_OBJECTS:ml_kem_1024_ipd_avx2>)
|
||||
if(OQS_ENABLE_KEM_ml_kem_1024_avx2)
|
||||
add_library(ml_kem_1024_avx2 OBJECT pqcrystals-kyber-standard_ml-kem-1024_avx2/basemul.S pqcrystals-kyber-standard_ml-kem-1024_avx2/cbd.c pqcrystals-kyber-standard_ml-kem-1024_avx2/consts.c pqcrystals-kyber-standard_ml-kem-1024_avx2/fq.S pqcrystals-kyber-standard_ml-kem-1024_avx2/indcpa.c pqcrystals-kyber-standard_ml-kem-1024_avx2/invntt.S pqcrystals-kyber-standard_ml-kem-1024_avx2/kem.c pqcrystals-kyber-standard_ml-kem-1024_avx2/ntt.S pqcrystals-kyber-standard_ml-kem-1024_avx2/poly.c pqcrystals-kyber-standard_ml-kem-1024_avx2/polyvec.c pqcrystals-kyber-standard_ml-kem-1024_avx2/rejsample.c pqcrystals-kyber-standard_ml-kem-1024_avx2/shuffle.S pqcrystals-kyber-standard_ml-kem-1024_avx2/symmetric-shake.c pqcrystals-kyber-standard_ml-kem-1024_avx2/verify.c)
|
||||
target_include_directories(ml_kem_1024_avx2 PRIVATE ${CMAKE_CURRENT_LIST_DIR}/pqcrystals-kyber-standard_ml-kem-1024_avx2)
|
||||
target_include_directories(ml_kem_1024_avx2 PRIVATE ${PROJECT_SOURCE_DIR}/src/common/pqclean_shims)
|
||||
target_compile_options(ml_kem_1024_avx2 PRIVATE -mavx2 -mbmi2 -mpopcnt )
|
||||
target_compile_options(ml_kem_1024_avx2 PUBLIC -DKYBER_K=4)
|
||||
set(_ML_KEM_OBJS ${_ML_KEM_OBJS} $<TARGET_OBJECTS:ml_kem_1024_avx2>)
|
||||
endif()
|
||||
|
||||
set(ML_KEM_OBJS ${_ML_KEM_OBJS} PARENT_SCOPE)
|
||||
|
||||
@ -5,64 +5,37 @@
|
||||
|
||||
#include <oqs/oqs.h>
|
||||
|
||||
#if defined(OQS_ENABLE_KEM_ml_kem_512_ipd) || defined(OQS_ENABLE_KEM_ml_kem_512)
|
||||
#define OQS_KEM_ml_kem_512_ipd_length_public_key 800
|
||||
#define OQS_KEM_ml_kem_512_ipd_length_secret_key 1632
|
||||
#define OQS_KEM_ml_kem_512_ipd_length_ciphertext 768
|
||||
#define OQS_KEM_ml_kem_512_ipd_length_shared_secret 32
|
||||
OQS_KEM *OQS_KEM_ml_kem_512_ipd_new(void);
|
||||
OQS_API OQS_STATUS OQS_KEM_ml_kem_512_ipd_keypair(uint8_t *public_key, uint8_t *secret_key);
|
||||
OQS_API OQS_STATUS OQS_KEM_ml_kem_512_ipd_encaps(uint8_t *ciphertext, uint8_t *shared_secret, const uint8_t *public_key);
|
||||
OQS_API OQS_STATUS OQS_KEM_ml_kem_512_ipd_decaps(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key);
|
||||
|
||||
#define OQS_KEM_ml_kem_512_length_public_key OQS_KEM_ml_kem_512_ipd_length_public_key
|
||||
#define OQS_KEM_ml_kem_512_length_secret_key OQS_KEM_ml_kem_512_ipd_length_secret_key
|
||||
#define OQS_KEM_ml_kem_512_length_ciphertext OQS_KEM_ml_kem_512_ipd_length_ciphertext
|
||||
#define OQS_KEM_ml_kem_512_length_shared_secret OQS_KEM_ml_kem_512_ipd_length_shared_secret
|
||||
#if defined(OQS_ENABLE_KEM_ml_kem_512)
|
||||
#define OQS_KEM_ml_kem_512_length_public_key 800
|
||||
#define OQS_KEM_ml_kem_512_length_secret_key 1632
|
||||
#define OQS_KEM_ml_kem_512_length_ciphertext 768
|
||||
#define OQS_KEM_ml_kem_512_length_shared_secret 32
|
||||
OQS_KEM *OQS_KEM_ml_kem_512_new(void);
|
||||
#define OQS_KEM_ml_kem_512_keypair OQS_KEM_ml_kem_512_ipd_keypair
|
||||
#define OQS_KEM_ml_kem_512_encaps OQS_KEM_ml_kem_512_ipd_encaps
|
||||
#define OQS_KEM_ml_kem_512_decaps OQS_KEM_ml_kem_512_ipd_decaps
|
||||
OQS_API OQS_STATUS OQS_KEM_ml_kem_512_keypair(uint8_t *public_key, uint8_t *secret_key);
|
||||
OQS_API OQS_STATUS OQS_KEM_ml_kem_512_encaps(uint8_t *ciphertext, uint8_t *shared_secret, const uint8_t *public_key);
|
||||
OQS_API OQS_STATUS OQS_KEM_ml_kem_512_decaps(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key);
|
||||
#endif
|
||||
|
||||
#if defined(OQS_ENABLE_KEM_ml_kem_768_ipd) || defined(OQS_ENABLE_KEM_ml_kem_768)
|
||||
#define OQS_KEM_ml_kem_768_ipd_length_public_key 1184
|
||||
#define OQS_KEM_ml_kem_768_ipd_length_secret_key 2400
|
||||
#define OQS_KEM_ml_kem_768_ipd_length_ciphertext 1088
|
||||
#define OQS_KEM_ml_kem_768_ipd_length_shared_secret 32
|
||||
OQS_KEM *OQS_KEM_ml_kem_768_ipd_new(void);
|
||||
OQS_API OQS_STATUS OQS_KEM_ml_kem_768_ipd_keypair(uint8_t *public_key, uint8_t *secret_key);
|
||||
OQS_API OQS_STATUS OQS_KEM_ml_kem_768_ipd_encaps(uint8_t *ciphertext, uint8_t *shared_secret, const uint8_t *public_key);
|
||||
OQS_API OQS_STATUS OQS_KEM_ml_kem_768_ipd_decaps(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key);
|
||||
|
||||
#define OQS_KEM_ml_kem_768_length_public_key OQS_KEM_ml_kem_768_ipd_length_public_key
|
||||
#define OQS_KEM_ml_kem_768_length_secret_key OQS_KEM_ml_kem_768_ipd_length_secret_key
|
||||
#define OQS_KEM_ml_kem_768_length_ciphertext OQS_KEM_ml_kem_768_ipd_length_ciphertext
|
||||
#define OQS_KEM_ml_kem_768_length_shared_secret OQS_KEM_ml_kem_768_ipd_length_shared_secret
|
||||
#if defined(OQS_ENABLE_KEM_ml_kem_768)
|
||||
#define OQS_KEM_ml_kem_768_length_public_key 1184
|
||||
#define OQS_KEM_ml_kem_768_length_secret_key 2400
|
||||
#define OQS_KEM_ml_kem_768_length_ciphertext 1088
|
||||
#define OQS_KEM_ml_kem_768_length_shared_secret 32
|
||||
OQS_KEM *OQS_KEM_ml_kem_768_new(void);
|
||||
#define OQS_KEM_ml_kem_768_keypair OQS_KEM_ml_kem_768_ipd_keypair
|
||||
#define OQS_KEM_ml_kem_768_encaps OQS_KEM_ml_kem_768_ipd_encaps
|
||||
#define OQS_KEM_ml_kem_768_decaps OQS_KEM_ml_kem_768_ipd_decaps
|
||||
OQS_API OQS_STATUS OQS_KEM_ml_kem_768_keypair(uint8_t *public_key, uint8_t *secret_key);
|
||||
OQS_API OQS_STATUS OQS_KEM_ml_kem_768_encaps(uint8_t *ciphertext, uint8_t *shared_secret, const uint8_t *public_key);
|
||||
OQS_API OQS_STATUS OQS_KEM_ml_kem_768_decaps(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key);
|
||||
#endif
|
||||
|
||||
#if defined(OQS_ENABLE_KEM_ml_kem_1024_ipd) || defined(OQS_ENABLE_KEM_ml_kem_1024)
|
||||
#define OQS_KEM_ml_kem_1024_ipd_length_public_key 1568
|
||||
#define OQS_KEM_ml_kem_1024_ipd_length_secret_key 3168
|
||||
#define OQS_KEM_ml_kem_1024_ipd_length_ciphertext 1568
|
||||
#define OQS_KEM_ml_kem_1024_ipd_length_shared_secret 32
|
||||
OQS_KEM *OQS_KEM_ml_kem_1024_ipd_new(void);
|
||||
OQS_API OQS_STATUS OQS_KEM_ml_kem_1024_ipd_keypair(uint8_t *public_key, uint8_t *secret_key);
|
||||
OQS_API OQS_STATUS OQS_KEM_ml_kem_1024_ipd_encaps(uint8_t *ciphertext, uint8_t *shared_secret, const uint8_t *public_key);
|
||||
OQS_API OQS_STATUS OQS_KEM_ml_kem_1024_ipd_decaps(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key);
|
||||
|
||||
#define OQS_KEM_ml_kem_1024_length_public_key OQS_KEM_ml_kem_1024_ipd_length_public_key
|
||||
#define OQS_KEM_ml_kem_1024_length_secret_key OQS_KEM_ml_kem_1024_ipd_length_secret_key
|
||||
#define OQS_KEM_ml_kem_1024_length_ciphertext OQS_KEM_ml_kem_1024_ipd_length_ciphertext
|
||||
#define OQS_KEM_ml_kem_1024_length_shared_secret OQS_KEM_ml_kem_1024_ipd_length_shared_secret
|
||||
#if defined(OQS_ENABLE_KEM_ml_kem_1024)
|
||||
#define OQS_KEM_ml_kem_1024_length_public_key 1568
|
||||
#define OQS_KEM_ml_kem_1024_length_secret_key 3168
|
||||
#define OQS_KEM_ml_kem_1024_length_ciphertext 1568
|
||||
#define OQS_KEM_ml_kem_1024_length_shared_secret 32
|
||||
OQS_KEM *OQS_KEM_ml_kem_1024_new(void);
|
||||
#define OQS_KEM_ml_kem_1024_keypair OQS_KEM_ml_kem_1024_ipd_keypair
|
||||
#define OQS_KEM_ml_kem_1024_encaps OQS_KEM_ml_kem_1024_ipd_encaps
|
||||
#define OQS_KEM_ml_kem_1024_decaps OQS_KEM_ml_kem_1024_ipd_decaps
|
||||
OQS_API OQS_STATUS OQS_KEM_ml_kem_1024_keypair(uint8_t *public_key, uint8_t *secret_key);
|
||||
OQS_API OQS_STATUS OQS_KEM_ml_kem_1024_encaps(uint8_t *ciphertext, uint8_t *shared_secret, const uint8_t *public_key);
|
||||
OQS_API OQS_STATUS OQS_KEM_ml_kem_1024_decaps(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
91
src/kem/ml_kem/kem_ml_kem_1024.c
Normal file
91
src/kem/ml_kem/kem_ml_kem_1024.c
Normal file
@ -0,0 +1,91 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <oqs/kem_ml_kem.h>
|
||||
|
||||
#if defined(OQS_ENABLE_KEM_ml_kem_1024)
|
||||
|
||||
OQS_KEM *OQS_KEM_ml_kem_1024_new(void) {
|
||||
|
||||
OQS_KEM *kem = malloc(sizeof(OQS_KEM));
|
||||
if (kem == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
kem->method_name = OQS_KEM_alg_ml_kem_1024;
|
||||
kem->alg_version = "https://github.com/pq-crystals/kyber/tree/standard";
|
||||
|
||||
kem->claimed_nist_level = 5;
|
||||
kem->ind_cca = true;
|
||||
|
||||
kem->length_public_key = OQS_KEM_ml_kem_1024_length_public_key;
|
||||
kem->length_secret_key = OQS_KEM_ml_kem_1024_length_secret_key;
|
||||
kem->length_ciphertext = OQS_KEM_ml_kem_1024_length_ciphertext;
|
||||
kem->length_shared_secret = OQS_KEM_ml_kem_1024_length_shared_secret;
|
||||
|
||||
kem->keypair = OQS_KEM_ml_kem_1024_keypair;
|
||||
kem->encaps = OQS_KEM_ml_kem_1024_encaps;
|
||||
kem->decaps = OQS_KEM_ml_kem_1024_decaps;
|
||||
|
||||
return kem;
|
||||
}
|
||||
|
||||
extern int pqcrystals_ml_kem_1024_ref_keypair(uint8_t *pk, uint8_t *sk);
|
||||
extern int pqcrystals_ml_kem_1024_ref_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk);
|
||||
extern int pqcrystals_ml_kem_1024_ref_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk);
|
||||
|
||||
#if defined(OQS_ENABLE_KEM_ml_kem_1024_avx2)
|
||||
extern int pqcrystals_ml_kem_1024_avx2_keypair(uint8_t *pk, uint8_t *sk);
|
||||
extern int pqcrystals_ml_kem_1024_avx2_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk);
|
||||
extern int pqcrystals_ml_kem_1024_avx2_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk);
|
||||
#endif
|
||||
|
||||
OQS_API OQS_STATUS OQS_KEM_ml_kem_1024_keypair(uint8_t *public_key, uint8_t *secret_key) {
|
||||
#if defined(OQS_ENABLE_KEM_ml_kem_1024_avx2)
|
||||
#if defined(OQS_DIST_BUILD)
|
||||
if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
|
||||
#endif /* OQS_DIST_BUILD */
|
||||
return (OQS_STATUS) pqcrystals_ml_kem_1024_avx2_keypair(public_key, secret_key);
|
||||
#if defined(OQS_DIST_BUILD)
|
||||
} else {
|
||||
return (OQS_STATUS) pqcrystals_ml_kem_1024_ref_keypair(public_key, secret_key);
|
||||
}
|
||||
#endif /* OQS_DIST_BUILD */
|
||||
#else
|
||||
return (OQS_STATUS) pqcrystals_ml_kem_1024_ref_keypair(public_key, secret_key);
|
||||
#endif
|
||||
}
|
||||
|
||||
OQS_API OQS_STATUS OQS_KEM_ml_kem_1024_encaps(uint8_t *ciphertext, uint8_t *shared_secret, const uint8_t *public_key) {
|
||||
#if defined(OQS_ENABLE_KEM_ml_kem_1024_avx2)
|
||||
#if defined(OQS_DIST_BUILD)
|
||||
if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
|
||||
#endif /* OQS_DIST_BUILD */
|
||||
return (OQS_STATUS) pqcrystals_ml_kem_1024_avx2_enc(ciphertext, shared_secret, public_key);
|
||||
#if defined(OQS_DIST_BUILD)
|
||||
} else {
|
||||
return (OQS_STATUS) pqcrystals_ml_kem_1024_ref_enc(ciphertext, shared_secret, public_key);
|
||||
}
|
||||
#endif /* OQS_DIST_BUILD */
|
||||
#else
|
||||
return (OQS_STATUS) pqcrystals_ml_kem_1024_ref_enc(ciphertext, shared_secret, public_key);
|
||||
#endif
|
||||
}
|
||||
|
||||
OQS_API OQS_STATUS OQS_KEM_ml_kem_1024_decaps(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key) {
|
||||
#if defined(OQS_ENABLE_KEM_ml_kem_1024_avx2)
|
||||
#if defined(OQS_DIST_BUILD)
|
||||
if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
|
||||
#endif /* OQS_DIST_BUILD */
|
||||
return (OQS_STATUS) pqcrystals_ml_kem_1024_avx2_dec(shared_secret, ciphertext, secret_key);
|
||||
#if defined(OQS_DIST_BUILD)
|
||||
} else {
|
||||
return (OQS_STATUS) pqcrystals_ml_kem_1024_ref_dec(shared_secret, ciphertext, secret_key);
|
||||
}
|
||||
#endif /* OQS_DIST_BUILD */
|
||||
#else
|
||||
return (OQS_STATUS) pqcrystals_ml_kem_1024_ref_dec(shared_secret, ciphertext, secret_key);
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif
|
||||
@ -1,121 +0,0 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <oqs/kem_ml_kem.h>
|
||||
|
||||
#if defined(OQS_ENABLE_KEM_ml_kem_1024_ipd) || defined(OQS_ENABLE_KEM_ml_kem_1024)
|
||||
|
||||
#if defined(OQS_ENABLE_KEM_ml_kem_1024_ipd)
|
||||
|
||||
OQS_KEM *OQS_KEM_ml_kem_1024_ipd_new(void) {
|
||||
|
||||
OQS_KEM *kem = malloc(sizeof(OQS_KEM));
|
||||
if (kem == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
kem->method_name = OQS_KEM_alg_ml_kem_1024_ipd;
|
||||
kem->alg_version = "https://github.com/pq-crystals/kyber/tree/standard";
|
||||
|
||||
kem->claimed_nist_level = 5;
|
||||
kem->ind_cca = true;
|
||||
|
||||
kem->length_public_key = OQS_KEM_ml_kem_1024_ipd_length_public_key;
|
||||
kem->length_secret_key = OQS_KEM_ml_kem_1024_ipd_length_secret_key;
|
||||
kem->length_ciphertext = OQS_KEM_ml_kem_1024_ipd_length_ciphertext;
|
||||
kem->length_shared_secret = OQS_KEM_ml_kem_1024_ipd_length_shared_secret;
|
||||
|
||||
kem->keypair = OQS_KEM_ml_kem_1024_ipd_keypair;
|
||||
kem->encaps = OQS_KEM_ml_kem_1024_ipd_encaps;
|
||||
kem->decaps = OQS_KEM_ml_kem_1024_ipd_decaps;
|
||||
|
||||
return kem;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(OQS_ENABLE_KEM_ml_kem_1024)
|
||||
/** Alias */
|
||||
OQS_KEM *OQS_KEM_ml_kem_1024_new(void) {
|
||||
|
||||
OQS_KEM *kem = malloc(sizeof(OQS_KEM));
|
||||
if (kem == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
kem->method_name = OQS_KEM_alg_ml_kem_1024;
|
||||
kem->alg_version = "https://github.com/pq-crystals/kyber/tree/standard";
|
||||
|
||||
kem->claimed_nist_level = 5;
|
||||
kem->ind_cca = true;
|
||||
|
||||
kem->length_public_key = OQS_KEM_ml_kem_1024_length_public_key;
|
||||
kem->length_secret_key = OQS_KEM_ml_kem_1024_length_secret_key;
|
||||
kem->length_ciphertext = OQS_KEM_ml_kem_1024_length_ciphertext;
|
||||
kem->length_shared_secret = OQS_KEM_ml_kem_1024_length_shared_secret;
|
||||
|
||||
kem->keypair = OQS_KEM_ml_kem_1024_keypair;
|
||||
kem->encaps = OQS_KEM_ml_kem_1024_encaps;
|
||||
kem->decaps = OQS_KEM_ml_kem_1024_decaps;
|
||||
|
||||
return kem;
|
||||
}
|
||||
#endif
|
||||
|
||||
extern int pqcrystals_ml_kem_1024_ipd_ref_keypair(uint8_t *pk, uint8_t *sk);
|
||||
extern int pqcrystals_ml_kem_1024_ipd_ref_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk);
|
||||
extern int pqcrystals_ml_kem_1024_ipd_ref_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk);
|
||||
|
||||
#if defined(OQS_ENABLE_KEM_ml_kem_1024_ipd_avx2) || defined(OQS_ENABLE_KEM_ml_kem_1024_avx2)
|
||||
extern int pqcrystals_ml_kem_1024_ipd_avx2_keypair(uint8_t *pk, uint8_t *sk);
|
||||
extern int pqcrystals_ml_kem_1024_ipd_avx2_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk);
|
||||
extern int pqcrystals_ml_kem_1024_ipd_avx2_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk);
|
||||
#endif
|
||||
|
||||
OQS_API OQS_STATUS OQS_KEM_ml_kem_1024_ipd_keypair(uint8_t *public_key, uint8_t *secret_key) {
|
||||
#if defined(OQS_ENABLE_KEM_ml_kem_1024_ipd_avx2) || defined(OQS_ENABLE_KEM_ml_kem_1024_avx2)
|
||||
#if defined(OQS_DIST_BUILD)
|
||||
if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
|
||||
#endif /* OQS_DIST_BUILD */
|
||||
return (OQS_STATUS) pqcrystals_ml_kem_1024_ipd_avx2_keypair(public_key, secret_key);
|
||||
#if defined(OQS_DIST_BUILD)
|
||||
} else {
|
||||
return (OQS_STATUS) pqcrystals_ml_kem_1024_ipd_ref_keypair(public_key, secret_key);
|
||||
}
|
||||
#endif /* OQS_DIST_BUILD */
|
||||
#else
|
||||
return (OQS_STATUS) pqcrystals_ml_kem_1024_ipd_ref_keypair(public_key, secret_key);
|
||||
#endif
|
||||
}
|
||||
|
||||
OQS_API OQS_STATUS OQS_KEM_ml_kem_1024_ipd_encaps(uint8_t *ciphertext, uint8_t *shared_secret, const uint8_t *public_key) {
|
||||
#if defined(OQS_ENABLE_KEM_ml_kem_1024_ipd_avx2) || defined(OQS_ENABLE_KEM_ml_kem_1024_avx2)
|
||||
#if defined(OQS_DIST_BUILD)
|
||||
if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
|
||||
#endif /* OQS_DIST_BUILD */
|
||||
return (OQS_STATUS) pqcrystals_ml_kem_1024_ipd_avx2_enc(ciphertext, shared_secret, public_key);
|
||||
#if defined(OQS_DIST_BUILD)
|
||||
} else {
|
||||
return (OQS_STATUS) pqcrystals_ml_kem_1024_ipd_ref_enc(ciphertext, shared_secret, public_key);
|
||||
}
|
||||
#endif /* OQS_DIST_BUILD */
|
||||
#else
|
||||
return (OQS_STATUS) pqcrystals_ml_kem_1024_ipd_ref_enc(ciphertext, shared_secret, public_key);
|
||||
#endif
|
||||
}
|
||||
|
||||
OQS_API OQS_STATUS OQS_KEM_ml_kem_1024_ipd_decaps(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key) {
|
||||
#if defined(OQS_ENABLE_KEM_ml_kem_1024_ipd_avx2) || defined(OQS_ENABLE_KEM_ml_kem_1024_avx2)
|
||||
#if defined(OQS_DIST_BUILD)
|
||||
if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
|
||||
#endif /* OQS_DIST_BUILD */
|
||||
return (OQS_STATUS) pqcrystals_ml_kem_1024_ipd_avx2_dec(shared_secret, ciphertext, secret_key);
|
||||
#if defined(OQS_DIST_BUILD)
|
||||
} else {
|
||||
return (OQS_STATUS) pqcrystals_ml_kem_1024_ipd_ref_dec(shared_secret, ciphertext, secret_key);
|
||||
}
|
||||
#endif /* OQS_DIST_BUILD */
|
||||
#else
|
||||
return (OQS_STATUS) pqcrystals_ml_kem_1024_ipd_ref_dec(shared_secret, ciphertext, secret_key);
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif
|
||||
91
src/kem/ml_kem/kem_ml_kem_512.c
Normal file
91
src/kem/ml_kem/kem_ml_kem_512.c
Normal file
@ -0,0 +1,91 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <oqs/kem_ml_kem.h>
|
||||
|
||||
#if defined(OQS_ENABLE_KEM_ml_kem_512)
|
||||
|
||||
OQS_KEM *OQS_KEM_ml_kem_512_new(void) {
|
||||
|
||||
OQS_KEM *kem = malloc(sizeof(OQS_KEM));
|
||||
if (kem == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
kem->method_name = OQS_KEM_alg_ml_kem_512;
|
||||
kem->alg_version = "https://github.com/pq-crystals/kyber/tree/standard";
|
||||
|
||||
kem->claimed_nist_level = 1;
|
||||
kem->ind_cca = true;
|
||||
|
||||
kem->length_public_key = OQS_KEM_ml_kem_512_length_public_key;
|
||||
kem->length_secret_key = OQS_KEM_ml_kem_512_length_secret_key;
|
||||
kem->length_ciphertext = OQS_KEM_ml_kem_512_length_ciphertext;
|
||||
kem->length_shared_secret = OQS_KEM_ml_kem_512_length_shared_secret;
|
||||
|
||||
kem->keypair = OQS_KEM_ml_kem_512_keypair;
|
||||
kem->encaps = OQS_KEM_ml_kem_512_encaps;
|
||||
kem->decaps = OQS_KEM_ml_kem_512_decaps;
|
||||
|
||||
return kem;
|
||||
}
|
||||
|
||||
extern int pqcrystals_ml_kem_512_ref_keypair(uint8_t *pk, uint8_t *sk);
|
||||
extern int pqcrystals_ml_kem_512_ref_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk);
|
||||
extern int pqcrystals_ml_kem_512_ref_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk);
|
||||
|
||||
#if defined(OQS_ENABLE_KEM_ml_kem_512_avx2)
|
||||
extern int pqcrystals_ml_kem_512_avx2_keypair(uint8_t *pk, uint8_t *sk);
|
||||
extern int pqcrystals_ml_kem_512_avx2_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk);
|
||||
extern int pqcrystals_ml_kem_512_avx2_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk);
|
||||
#endif
|
||||
|
||||
OQS_API OQS_STATUS OQS_KEM_ml_kem_512_keypair(uint8_t *public_key, uint8_t *secret_key) {
|
||||
#if defined(OQS_ENABLE_KEM_ml_kem_512_avx2)
|
||||
#if defined(OQS_DIST_BUILD)
|
||||
if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
|
||||
#endif /* OQS_DIST_BUILD */
|
||||
return (OQS_STATUS) pqcrystals_ml_kem_512_avx2_keypair(public_key, secret_key);
|
||||
#if defined(OQS_DIST_BUILD)
|
||||
} else {
|
||||
return (OQS_STATUS) pqcrystals_ml_kem_512_ref_keypair(public_key, secret_key);
|
||||
}
|
||||
#endif /* OQS_DIST_BUILD */
|
||||
#else
|
||||
return (OQS_STATUS) pqcrystals_ml_kem_512_ref_keypair(public_key, secret_key);
|
||||
#endif
|
||||
}
|
||||
|
||||
OQS_API OQS_STATUS OQS_KEM_ml_kem_512_encaps(uint8_t *ciphertext, uint8_t *shared_secret, const uint8_t *public_key) {
|
||||
#if defined(OQS_ENABLE_KEM_ml_kem_512_avx2)
|
||||
#if defined(OQS_DIST_BUILD)
|
||||
if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
|
||||
#endif /* OQS_DIST_BUILD */
|
||||
return (OQS_STATUS) pqcrystals_ml_kem_512_avx2_enc(ciphertext, shared_secret, public_key);
|
||||
#if defined(OQS_DIST_BUILD)
|
||||
} else {
|
||||
return (OQS_STATUS) pqcrystals_ml_kem_512_ref_enc(ciphertext, shared_secret, public_key);
|
||||
}
|
||||
#endif /* OQS_DIST_BUILD */
|
||||
#else
|
||||
return (OQS_STATUS) pqcrystals_ml_kem_512_ref_enc(ciphertext, shared_secret, public_key);
|
||||
#endif
|
||||
}
|
||||
|
||||
OQS_API OQS_STATUS OQS_KEM_ml_kem_512_decaps(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key) {
|
||||
#if defined(OQS_ENABLE_KEM_ml_kem_512_avx2)
|
||||
#if defined(OQS_DIST_BUILD)
|
||||
if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
|
||||
#endif /* OQS_DIST_BUILD */
|
||||
return (OQS_STATUS) pqcrystals_ml_kem_512_avx2_dec(shared_secret, ciphertext, secret_key);
|
||||
#if defined(OQS_DIST_BUILD)
|
||||
} else {
|
||||
return (OQS_STATUS) pqcrystals_ml_kem_512_ref_dec(shared_secret, ciphertext, secret_key);
|
||||
}
|
||||
#endif /* OQS_DIST_BUILD */
|
||||
#else
|
||||
return (OQS_STATUS) pqcrystals_ml_kem_512_ref_dec(shared_secret, ciphertext, secret_key);
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif
|
||||
@ -1,121 +0,0 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <oqs/kem_ml_kem.h>
|
||||
|
||||
#if defined(OQS_ENABLE_KEM_ml_kem_512_ipd) || defined(OQS_ENABLE_KEM_ml_kem_512)
|
||||
|
||||
#if defined(OQS_ENABLE_KEM_ml_kem_512_ipd)
|
||||
|
||||
OQS_KEM *OQS_KEM_ml_kem_512_ipd_new(void) {
|
||||
|
||||
OQS_KEM *kem = malloc(sizeof(OQS_KEM));
|
||||
if (kem == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
kem->method_name = OQS_KEM_alg_ml_kem_512_ipd;
|
||||
kem->alg_version = "https://github.com/pq-crystals/kyber/tree/standard";
|
||||
|
||||
kem->claimed_nist_level = 1;
|
||||
kem->ind_cca = true;
|
||||
|
||||
kem->length_public_key = OQS_KEM_ml_kem_512_ipd_length_public_key;
|
||||
kem->length_secret_key = OQS_KEM_ml_kem_512_ipd_length_secret_key;
|
||||
kem->length_ciphertext = OQS_KEM_ml_kem_512_ipd_length_ciphertext;
|
||||
kem->length_shared_secret = OQS_KEM_ml_kem_512_ipd_length_shared_secret;
|
||||
|
||||
kem->keypair = OQS_KEM_ml_kem_512_ipd_keypair;
|
||||
kem->encaps = OQS_KEM_ml_kem_512_ipd_encaps;
|
||||
kem->decaps = OQS_KEM_ml_kem_512_ipd_decaps;
|
||||
|
||||
return kem;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(OQS_ENABLE_KEM_ml_kem_512)
|
||||
/** Alias */
|
||||
OQS_KEM *OQS_KEM_ml_kem_512_new(void) {
|
||||
|
||||
OQS_KEM *kem = malloc(sizeof(OQS_KEM));
|
||||
if (kem == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
kem->method_name = OQS_KEM_alg_ml_kem_512;
|
||||
kem->alg_version = "https://github.com/pq-crystals/kyber/tree/standard";
|
||||
|
||||
kem->claimed_nist_level = 1;
|
||||
kem->ind_cca = true;
|
||||
|
||||
kem->length_public_key = OQS_KEM_ml_kem_512_length_public_key;
|
||||
kem->length_secret_key = OQS_KEM_ml_kem_512_length_secret_key;
|
||||
kem->length_ciphertext = OQS_KEM_ml_kem_512_length_ciphertext;
|
||||
kem->length_shared_secret = OQS_KEM_ml_kem_512_length_shared_secret;
|
||||
|
||||
kem->keypair = OQS_KEM_ml_kem_512_keypair;
|
||||
kem->encaps = OQS_KEM_ml_kem_512_encaps;
|
||||
kem->decaps = OQS_KEM_ml_kem_512_decaps;
|
||||
|
||||
return kem;
|
||||
}
|
||||
#endif
|
||||
|
||||
extern int pqcrystals_ml_kem_512_ipd_ref_keypair(uint8_t *pk, uint8_t *sk);
|
||||
extern int pqcrystals_ml_kem_512_ipd_ref_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk);
|
||||
extern int pqcrystals_ml_kem_512_ipd_ref_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk);
|
||||
|
||||
#if defined(OQS_ENABLE_KEM_ml_kem_512_ipd_avx2) || defined(OQS_ENABLE_KEM_ml_kem_512_avx2)
|
||||
extern int pqcrystals_ml_kem_512_ipd_avx2_keypair(uint8_t *pk, uint8_t *sk);
|
||||
extern int pqcrystals_ml_kem_512_ipd_avx2_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk);
|
||||
extern int pqcrystals_ml_kem_512_ipd_avx2_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk);
|
||||
#endif
|
||||
|
||||
OQS_API OQS_STATUS OQS_KEM_ml_kem_512_ipd_keypair(uint8_t *public_key, uint8_t *secret_key) {
|
||||
#if defined(OQS_ENABLE_KEM_ml_kem_512_ipd_avx2) || defined(OQS_ENABLE_KEM_ml_kem_512_avx2)
|
||||
#if defined(OQS_DIST_BUILD)
|
||||
if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
|
||||
#endif /* OQS_DIST_BUILD */
|
||||
return (OQS_STATUS) pqcrystals_ml_kem_512_ipd_avx2_keypair(public_key, secret_key);
|
||||
#if defined(OQS_DIST_BUILD)
|
||||
} else {
|
||||
return (OQS_STATUS) pqcrystals_ml_kem_512_ipd_ref_keypair(public_key, secret_key);
|
||||
}
|
||||
#endif /* OQS_DIST_BUILD */
|
||||
#else
|
||||
return (OQS_STATUS) pqcrystals_ml_kem_512_ipd_ref_keypair(public_key, secret_key);
|
||||
#endif
|
||||
}
|
||||
|
||||
OQS_API OQS_STATUS OQS_KEM_ml_kem_512_ipd_encaps(uint8_t *ciphertext, uint8_t *shared_secret, const uint8_t *public_key) {
|
||||
#if defined(OQS_ENABLE_KEM_ml_kem_512_ipd_avx2) || defined(OQS_ENABLE_KEM_ml_kem_512_avx2)
|
||||
#if defined(OQS_DIST_BUILD)
|
||||
if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
|
||||
#endif /* OQS_DIST_BUILD */
|
||||
return (OQS_STATUS) pqcrystals_ml_kem_512_ipd_avx2_enc(ciphertext, shared_secret, public_key);
|
||||
#if defined(OQS_DIST_BUILD)
|
||||
} else {
|
||||
return (OQS_STATUS) pqcrystals_ml_kem_512_ipd_ref_enc(ciphertext, shared_secret, public_key);
|
||||
}
|
||||
#endif /* OQS_DIST_BUILD */
|
||||
#else
|
||||
return (OQS_STATUS) pqcrystals_ml_kem_512_ipd_ref_enc(ciphertext, shared_secret, public_key);
|
||||
#endif
|
||||
}
|
||||
|
||||
OQS_API OQS_STATUS OQS_KEM_ml_kem_512_ipd_decaps(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key) {
|
||||
#if defined(OQS_ENABLE_KEM_ml_kem_512_ipd_avx2) || defined(OQS_ENABLE_KEM_ml_kem_512_avx2)
|
||||
#if defined(OQS_DIST_BUILD)
|
||||
if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
|
||||
#endif /* OQS_DIST_BUILD */
|
||||
return (OQS_STATUS) pqcrystals_ml_kem_512_ipd_avx2_dec(shared_secret, ciphertext, secret_key);
|
||||
#if defined(OQS_DIST_BUILD)
|
||||
} else {
|
||||
return (OQS_STATUS) pqcrystals_ml_kem_512_ipd_ref_dec(shared_secret, ciphertext, secret_key);
|
||||
}
|
||||
#endif /* OQS_DIST_BUILD */
|
||||
#else
|
||||
return (OQS_STATUS) pqcrystals_ml_kem_512_ipd_ref_dec(shared_secret, ciphertext, secret_key);
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif
|
||||
91
src/kem/ml_kem/kem_ml_kem_768.c
Normal file
91
src/kem/ml_kem/kem_ml_kem_768.c
Normal file
@ -0,0 +1,91 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <oqs/kem_ml_kem.h>
|
||||
|
||||
#if defined(OQS_ENABLE_KEM_ml_kem_768)
|
||||
|
||||
OQS_KEM *OQS_KEM_ml_kem_768_new(void) {
|
||||
|
||||
OQS_KEM *kem = malloc(sizeof(OQS_KEM));
|
||||
if (kem == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
kem->method_name = OQS_KEM_alg_ml_kem_768;
|
||||
kem->alg_version = "https://github.com/pq-crystals/kyber/tree/standard";
|
||||
|
||||
kem->claimed_nist_level = 3;
|
||||
kem->ind_cca = true;
|
||||
|
||||
kem->length_public_key = OQS_KEM_ml_kem_768_length_public_key;
|
||||
kem->length_secret_key = OQS_KEM_ml_kem_768_length_secret_key;
|
||||
kem->length_ciphertext = OQS_KEM_ml_kem_768_length_ciphertext;
|
||||
kem->length_shared_secret = OQS_KEM_ml_kem_768_length_shared_secret;
|
||||
|
||||
kem->keypair = OQS_KEM_ml_kem_768_keypair;
|
||||
kem->encaps = OQS_KEM_ml_kem_768_encaps;
|
||||
kem->decaps = OQS_KEM_ml_kem_768_decaps;
|
||||
|
||||
return kem;
|
||||
}
|
||||
|
||||
extern int pqcrystals_ml_kem_768_ref_keypair(uint8_t *pk, uint8_t *sk);
|
||||
extern int pqcrystals_ml_kem_768_ref_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk);
|
||||
extern int pqcrystals_ml_kem_768_ref_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk);
|
||||
|
||||
#if defined(OQS_ENABLE_KEM_ml_kem_768_avx2)
|
||||
extern int pqcrystals_ml_kem_768_avx2_keypair(uint8_t *pk, uint8_t *sk);
|
||||
extern int pqcrystals_ml_kem_768_avx2_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk);
|
||||
extern int pqcrystals_ml_kem_768_avx2_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk);
|
||||
#endif
|
||||
|
||||
OQS_API OQS_STATUS OQS_KEM_ml_kem_768_keypair(uint8_t *public_key, uint8_t *secret_key) {
|
||||
#if defined(OQS_ENABLE_KEM_ml_kem_768_avx2)
|
||||
#if defined(OQS_DIST_BUILD)
|
||||
if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
|
||||
#endif /* OQS_DIST_BUILD */
|
||||
return (OQS_STATUS) pqcrystals_ml_kem_768_avx2_keypair(public_key, secret_key);
|
||||
#if defined(OQS_DIST_BUILD)
|
||||
} else {
|
||||
return (OQS_STATUS) pqcrystals_ml_kem_768_ref_keypair(public_key, secret_key);
|
||||
}
|
||||
#endif /* OQS_DIST_BUILD */
|
||||
#else
|
||||
return (OQS_STATUS) pqcrystals_ml_kem_768_ref_keypair(public_key, secret_key);
|
||||
#endif
|
||||
}
|
||||
|
||||
OQS_API OQS_STATUS OQS_KEM_ml_kem_768_encaps(uint8_t *ciphertext, uint8_t *shared_secret, const uint8_t *public_key) {
|
||||
#if defined(OQS_ENABLE_KEM_ml_kem_768_avx2)
|
||||
#if defined(OQS_DIST_BUILD)
|
||||
if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
|
||||
#endif /* OQS_DIST_BUILD */
|
||||
return (OQS_STATUS) pqcrystals_ml_kem_768_avx2_enc(ciphertext, shared_secret, public_key);
|
||||
#if defined(OQS_DIST_BUILD)
|
||||
} else {
|
||||
return (OQS_STATUS) pqcrystals_ml_kem_768_ref_enc(ciphertext, shared_secret, public_key);
|
||||
}
|
||||
#endif /* OQS_DIST_BUILD */
|
||||
#else
|
||||
return (OQS_STATUS) pqcrystals_ml_kem_768_ref_enc(ciphertext, shared_secret, public_key);
|
||||
#endif
|
||||
}
|
||||
|
||||
OQS_API OQS_STATUS OQS_KEM_ml_kem_768_decaps(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key) {
|
||||
#if defined(OQS_ENABLE_KEM_ml_kem_768_avx2)
|
||||
#if defined(OQS_DIST_BUILD)
|
||||
if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
|
||||
#endif /* OQS_DIST_BUILD */
|
||||
return (OQS_STATUS) pqcrystals_ml_kem_768_avx2_dec(shared_secret, ciphertext, secret_key);
|
||||
#if defined(OQS_DIST_BUILD)
|
||||
} else {
|
||||
return (OQS_STATUS) pqcrystals_ml_kem_768_ref_dec(shared_secret, ciphertext, secret_key);
|
||||
}
|
||||
#endif /* OQS_DIST_BUILD */
|
||||
#else
|
||||
return (OQS_STATUS) pqcrystals_ml_kem_768_ref_dec(shared_secret, ciphertext, secret_key);
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif
|
||||
@ -1,121 +0,0 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <oqs/kem_ml_kem.h>
|
||||
|
||||
#if defined(OQS_ENABLE_KEM_ml_kem_768_ipd) || defined(OQS_ENABLE_KEM_ml_kem_768)
|
||||
|
||||
#if defined(OQS_ENABLE_KEM_ml_kem_768_ipd)
|
||||
|
||||
OQS_KEM *OQS_KEM_ml_kem_768_ipd_new(void) {
|
||||
|
||||
OQS_KEM *kem = malloc(sizeof(OQS_KEM));
|
||||
if (kem == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
kem->method_name = OQS_KEM_alg_ml_kem_768_ipd;
|
||||
kem->alg_version = "https://github.com/pq-crystals/kyber/tree/standard";
|
||||
|
||||
kem->claimed_nist_level = 3;
|
||||
kem->ind_cca = true;
|
||||
|
||||
kem->length_public_key = OQS_KEM_ml_kem_768_ipd_length_public_key;
|
||||
kem->length_secret_key = OQS_KEM_ml_kem_768_ipd_length_secret_key;
|
||||
kem->length_ciphertext = OQS_KEM_ml_kem_768_ipd_length_ciphertext;
|
||||
kem->length_shared_secret = OQS_KEM_ml_kem_768_ipd_length_shared_secret;
|
||||
|
||||
kem->keypair = OQS_KEM_ml_kem_768_ipd_keypair;
|
||||
kem->encaps = OQS_KEM_ml_kem_768_ipd_encaps;
|
||||
kem->decaps = OQS_KEM_ml_kem_768_ipd_decaps;
|
||||
|
||||
return kem;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(OQS_ENABLE_KEM_ml_kem_768)
|
||||
/** Alias */
|
||||
OQS_KEM *OQS_KEM_ml_kem_768_new(void) {
|
||||
|
||||
OQS_KEM *kem = malloc(sizeof(OQS_KEM));
|
||||
if (kem == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
kem->method_name = OQS_KEM_alg_ml_kem_768;
|
||||
kem->alg_version = "https://github.com/pq-crystals/kyber/tree/standard";
|
||||
|
||||
kem->claimed_nist_level = 3;
|
||||
kem->ind_cca = true;
|
||||
|
||||
kem->length_public_key = OQS_KEM_ml_kem_768_length_public_key;
|
||||
kem->length_secret_key = OQS_KEM_ml_kem_768_length_secret_key;
|
||||
kem->length_ciphertext = OQS_KEM_ml_kem_768_length_ciphertext;
|
||||
kem->length_shared_secret = OQS_KEM_ml_kem_768_length_shared_secret;
|
||||
|
||||
kem->keypair = OQS_KEM_ml_kem_768_keypair;
|
||||
kem->encaps = OQS_KEM_ml_kem_768_encaps;
|
||||
kem->decaps = OQS_KEM_ml_kem_768_decaps;
|
||||
|
||||
return kem;
|
||||
}
|
||||
#endif
|
||||
|
||||
extern int pqcrystals_ml_kem_768_ipd_ref_keypair(uint8_t *pk, uint8_t *sk);
|
||||
extern int pqcrystals_ml_kem_768_ipd_ref_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk);
|
||||
extern int pqcrystals_ml_kem_768_ipd_ref_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk);
|
||||
|
||||
#if defined(OQS_ENABLE_KEM_ml_kem_768_ipd_avx2) || defined(OQS_ENABLE_KEM_ml_kem_768_avx2)
|
||||
extern int pqcrystals_ml_kem_768_ipd_avx2_keypair(uint8_t *pk, uint8_t *sk);
|
||||
extern int pqcrystals_ml_kem_768_ipd_avx2_enc(uint8_t *ct, uint8_t *ss, const uint8_t *pk);
|
||||
extern int pqcrystals_ml_kem_768_ipd_avx2_dec(uint8_t *ss, const uint8_t *ct, const uint8_t *sk);
|
||||
#endif
|
||||
|
||||
OQS_API OQS_STATUS OQS_KEM_ml_kem_768_ipd_keypair(uint8_t *public_key, uint8_t *secret_key) {
|
||||
#if defined(OQS_ENABLE_KEM_ml_kem_768_ipd_avx2) || defined(OQS_ENABLE_KEM_ml_kem_768_avx2)
|
||||
#if defined(OQS_DIST_BUILD)
|
||||
if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
|
||||
#endif /* OQS_DIST_BUILD */
|
||||
return (OQS_STATUS) pqcrystals_ml_kem_768_ipd_avx2_keypair(public_key, secret_key);
|
||||
#if defined(OQS_DIST_BUILD)
|
||||
} else {
|
||||
return (OQS_STATUS) pqcrystals_ml_kem_768_ipd_ref_keypair(public_key, secret_key);
|
||||
}
|
||||
#endif /* OQS_DIST_BUILD */
|
||||
#else
|
||||
return (OQS_STATUS) pqcrystals_ml_kem_768_ipd_ref_keypair(public_key, secret_key);
|
||||
#endif
|
||||
}
|
||||
|
||||
OQS_API OQS_STATUS OQS_KEM_ml_kem_768_ipd_encaps(uint8_t *ciphertext, uint8_t *shared_secret, const uint8_t *public_key) {
|
||||
#if defined(OQS_ENABLE_KEM_ml_kem_768_ipd_avx2) || defined(OQS_ENABLE_KEM_ml_kem_768_avx2)
|
||||
#if defined(OQS_DIST_BUILD)
|
||||
if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
|
||||
#endif /* OQS_DIST_BUILD */
|
||||
return (OQS_STATUS) pqcrystals_ml_kem_768_ipd_avx2_enc(ciphertext, shared_secret, public_key);
|
||||
#if defined(OQS_DIST_BUILD)
|
||||
} else {
|
||||
return (OQS_STATUS) pqcrystals_ml_kem_768_ipd_ref_enc(ciphertext, shared_secret, public_key);
|
||||
}
|
||||
#endif /* OQS_DIST_BUILD */
|
||||
#else
|
||||
return (OQS_STATUS) pqcrystals_ml_kem_768_ipd_ref_enc(ciphertext, shared_secret, public_key);
|
||||
#endif
|
||||
}
|
||||
|
||||
OQS_API OQS_STATUS OQS_KEM_ml_kem_768_ipd_decaps(uint8_t *shared_secret, const uint8_t *ciphertext, const uint8_t *secret_key) {
|
||||
#if defined(OQS_ENABLE_KEM_ml_kem_768_ipd_avx2) || defined(OQS_ENABLE_KEM_ml_kem_768_avx2)
|
||||
#if defined(OQS_DIST_BUILD)
|
||||
if (OQS_CPU_has_extension(OQS_CPU_EXT_AVX2) && OQS_CPU_has_extension(OQS_CPU_EXT_BMI2) && OQS_CPU_has_extension(OQS_CPU_EXT_POPCNT)) {
|
||||
#endif /* OQS_DIST_BUILD */
|
||||
return (OQS_STATUS) pqcrystals_ml_kem_768_ipd_avx2_dec(shared_secret, ciphertext, secret_key);
|
||||
#if defined(OQS_DIST_BUILD)
|
||||
} else {
|
||||
return (OQS_STATUS) pqcrystals_ml_kem_768_ipd_ref_dec(shared_secret, ciphertext, secret_key);
|
||||
}
|
||||
#endif /* OQS_DIST_BUILD */
|
||||
#else
|
||||
return (OQS_STATUS) pqcrystals_ml_kem_768_ipd_ref_dec(shared_secret, ciphertext, secret_key);
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif
|
||||
@ -440,7 +440,9 @@ void indcpa_keypair_derand(uint8_t pk[KYBER_INDCPA_PUBLICKEYBYTES],
|
||||
const uint8_t *noiseseed = buf + KYBER_SYMBYTES;
|
||||
polyvec a[KYBER_K], e, pkpv, skpv;
|
||||
|
||||
hash_g(buf, coins, KYBER_SYMBYTES);
|
||||
memcpy(buf, coins, KYBER_SYMBYTES);
|
||||
buf[KYBER_SYMBYTES] = KYBER_K;
|
||||
hash_g(buf, buf, KYBER_SYMBYTES+1);
|
||||
|
||||
gen_a(a, publicseed);
|
||||
|
||||
@ -12,19 +12,19 @@
|
||||
#ifdef KYBER_90S
|
||||
#define KYBER_NAMESPACE(s) pqcrystals_kyber512_90s_avx2_##s
|
||||
#else
|
||||
#define KYBER_NAMESPACE(s) pqcrystals_ml_kem_512_ipd_avx2_##s
|
||||
#define KYBER_NAMESPACE(s) pqcrystals_ml_kem_512_avx2_##s
|
||||
#endif
|
||||
#elif (KYBER_K == 3)
|
||||
#ifdef KYBER_90S
|
||||
#define KYBER_NAMESPACE(s) pqcrystals_kyber768_90s_avx2_##s
|
||||
#else
|
||||
#define KYBER_NAMESPACE(s) pqcrystals_ml_kem_768_ipd_avx2_##s
|
||||
#define KYBER_NAMESPACE(s) pqcrystals_ml_kem_768_avx2_##s
|
||||
#endif
|
||||
#elif (KYBER_K == 4)
|
||||
#ifdef KYBER_90S
|
||||
#define KYBER_NAMESPACE(s) pqcrystals_kyber1024_90s_avx2_##s
|
||||
#else
|
||||
#define KYBER_NAMESPACE(s) pqcrystals_ml_kem_1024_ipd_avx2_##s
|
||||
#define KYBER_NAMESPACE(s) pqcrystals_ml_kem_1024_avx2_##s
|
||||
#endif
|
||||
#else
|
||||
#error "KYBER_K must be in {2,3,4}"
|
||||
@ -57,6 +57,16 @@ void cmov(uint8_t * restrict r, const uint8_t *x, size_t len, uint8_t b)
|
||||
size_t i;
|
||||
__m256i xvec, rvec, bvec;
|
||||
|
||||
#if defined(__GNUC__) || defined(__clang__)
|
||||
// Prevent the compiler from
|
||||
// 1) inferring that b is 0/1-valued, and
|
||||
// 2) handling the two cases with a branch.
|
||||
// This is not necessary when verify.c and kem.c are separate translation
|
||||
// units, but we expect that downstream consumers will copy this code and/or
|
||||
// change how it is built.
|
||||
__asm__("" : "+r"(b) : /* no inputs */);
|
||||
#endif
|
||||
|
||||
bvec = _mm256_set1_epi64x(-(uint64_t)b);
|
||||
for(i=0;i<len/32;i++) {
|
||||
rvec = _mm256_loadu_si256((__m256i *)&r[32*i]);
|
||||
@ -156,13 +156,17 @@ static unsigned int rej_uniform(int16_t *r,
|
||||
* - const uint8_t *seed: pointer to input seed
|
||||
* - int transposed: boolean deciding whether A or A^T is generated
|
||||
**************************************************/
|
||||
#if(XOF_BLOCKBYTES % 3)
|
||||
#error "Implementation of gen_matrix assumes that XOF_BLOCKBYTES is a multiple of 3"
|
||||
#endif
|
||||
|
||||
#define GEN_MATRIX_NBLOCKS ((12*KYBER_N/8*(1 << 12)/KYBER_Q + XOF_BLOCKBYTES)/XOF_BLOCKBYTES)
|
||||
// Not static for benchmarking
|
||||
void gen_matrix(polyvec *a, const uint8_t seed[KYBER_SYMBYTES], int transposed)
|
||||
{
|
||||
unsigned int ctr, i, j, k;
|
||||
unsigned int buflen, off;
|
||||
uint8_t buf[GEN_MATRIX_NBLOCKS*XOF_BLOCKBYTES+2];
|
||||
unsigned int ctr, i, j;
|
||||
unsigned int buflen;
|
||||
uint8_t buf[GEN_MATRIX_NBLOCKS*XOF_BLOCKBYTES];
|
||||
xof_state state;
|
||||
xof_init(&state, seed);
|
||||
|
||||
@ -178,11 +182,8 @@ void gen_matrix(polyvec *a, const uint8_t seed[KYBER_SYMBYTES], int transposed)
|
||||
ctr = rej_uniform(a[i].vec[j].coeffs, KYBER_N, buf, buflen);
|
||||
|
||||
while(ctr < KYBER_N) {
|
||||
off = buflen % 3;
|
||||
for(k = 0; k < off; k++)
|
||||
buf[k] = buf[buflen - off + k];
|
||||
xof_squeezeblocks(buf + off, 1, &state);
|
||||
buflen = off + XOF_BLOCKBYTES;
|
||||
xof_squeezeblocks(buf, 1, &state);
|
||||
buflen = XOF_BLOCKBYTES;
|
||||
ctr += rej_uniform(a[i].vec[j].coeffs + ctr, KYBER_N - ctr, buf, buflen);
|
||||
}
|
||||
}
|
||||
@ -214,7 +215,9 @@ void indcpa_keypair_derand(uint8_t pk[KYBER_INDCPA_PUBLICKEYBYTES],
|
||||
uint8_t nonce = 0;
|
||||
polyvec a[KYBER_K], e, pkpv, skpv;
|
||||
|
||||
hash_g(buf, coins, KYBER_SYMBYTES);
|
||||
memcpy(buf, coins, KYBER_SYMBYTES);
|
||||
buf[KYBER_SYMBYTES] = KYBER_K;
|
||||
hash_g(buf, buf, KYBER_SYMBYTES+1);
|
||||
|
||||
gen_a(a, publicseed);
|
||||
|
||||
@ -8,11 +8,11 @@
|
||||
|
||||
/* Don't change parameters below this line */
|
||||
#if (KYBER_K == 2)
|
||||
#define KYBER_NAMESPACE(s) pqcrystals_ml_kem_512_ipd_ref_##s
|
||||
#define KYBER_NAMESPACE(s) pqcrystals_ml_kem_512_ref_##s
|
||||
#elif (KYBER_K == 3)
|
||||
#define KYBER_NAMESPACE(s) pqcrystals_ml_kem_768_ipd_ref_##s
|
||||
#define KYBER_NAMESPACE(s) pqcrystals_ml_kem_768_ref_##s
|
||||
#elif (KYBER_K == 4)
|
||||
#define KYBER_NAMESPACE(s) pqcrystals_ml_kem_1024_ipd_ref_##s
|
||||
#define KYBER_NAMESPACE(s) pqcrystals_ml_kem_1024_ref_##s
|
||||
#else
|
||||
#error "KYBER_K must be in {2,3,4}"
|
||||
#endif
|
||||
@ -19,7 +19,7 @@
|
||||
void poly_compress(uint8_t r[KYBER_POLYCOMPRESSEDBYTES], const poly *a)
|
||||
{
|
||||
unsigned int i,j;
|
||||
int32_t u;
|
||||
int16_t u;
|
||||
uint32_t d0;
|
||||
uint8_t t[8];
|
||||
|
||||
@ -31,7 +31,6 @@ void polyvec_compress(uint8_t r[KYBER_POLYVECCOMPRESSEDBYTES], const polyvec *a)
|
||||
d0 *= 645084;
|
||||
d0 >>= 31;
|
||||
t[k] = d0 & 0x7ff;
|
||||
|
||||
}
|
||||
|
||||
r[ 0] = (t[0] >> 0);
|
||||
@ -41,6 +41,16 @@ void cmov(uint8_t *r, const uint8_t *x, size_t len, uint8_t b)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
#if defined(__GNUC__) || defined(__clang__)
|
||||
// Prevent the compiler from
|
||||
// 1) inferring that b is 0/1-valued, and
|
||||
// 2) handling the two cases with a branch.
|
||||
// This is not necessary when verify.c and kem.c are separate translation
|
||||
// units, but we expect that downstream consumers will copy this code and/or
|
||||
// change how it is built.
|
||||
__asm__("" : "+r"(b) : /* no inputs */);
|
||||
#endif
|
||||
|
||||
b = -b;
|
||||
for(i=0;i<len;i++)
|
||||
r[i] ^= b & (r[i] ^ x[i]);
|
||||
@ -440,7 +440,9 @@ void indcpa_keypair_derand(uint8_t pk[KYBER_INDCPA_PUBLICKEYBYTES],
|
||||
const uint8_t *noiseseed = buf + KYBER_SYMBYTES;
|
||||
polyvec a[KYBER_K], e, pkpv, skpv;
|
||||
|
||||
hash_g(buf, coins, KYBER_SYMBYTES);
|
||||
memcpy(buf, coins, KYBER_SYMBYTES);
|
||||
buf[KYBER_SYMBYTES] = KYBER_K;
|
||||
hash_g(buf, buf, KYBER_SYMBYTES+1);
|
||||
|
||||
gen_a(a, publicseed);
|
||||
|
||||
@ -12,19 +12,19 @@
|
||||
#ifdef KYBER_90S
|
||||
#define KYBER_NAMESPACE(s) pqcrystals_kyber512_90s_avx2_##s
|
||||
#else
|
||||
#define KYBER_NAMESPACE(s) pqcrystals_ml_kem_512_ipd_avx2_##s
|
||||
#define KYBER_NAMESPACE(s) pqcrystals_ml_kem_512_avx2_##s
|
||||
#endif
|
||||
#elif (KYBER_K == 3)
|
||||
#ifdef KYBER_90S
|
||||
#define KYBER_NAMESPACE(s) pqcrystals_kyber768_90s_avx2_##s
|
||||
#else
|
||||
#define KYBER_NAMESPACE(s) pqcrystals_ml_kem_768_ipd_avx2_##s
|
||||
#define KYBER_NAMESPACE(s) pqcrystals_ml_kem_768_avx2_##s
|
||||
#endif
|
||||
#elif (KYBER_K == 4)
|
||||
#ifdef KYBER_90S
|
||||
#define KYBER_NAMESPACE(s) pqcrystals_kyber1024_90s_avx2_##s
|
||||
#else
|
||||
#define KYBER_NAMESPACE(s) pqcrystals_ml_kem_1024_ipd_avx2_##s
|
||||
#define KYBER_NAMESPACE(s) pqcrystals_ml_kem_1024_avx2_##s
|
||||
#endif
|
||||
#else
|
||||
#error "KYBER_K must be in {2,3,4}"
|
||||
@ -57,6 +57,16 @@ void cmov(uint8_t * restrict r, const uint8_t *x, size_t len, uint8_t b)
|
||||
size_t i;
|
||||
__m256i xvec, rvec, bvec;
|
||||
|
||||
#if defined(__GNUC__) || defined(__clang__)
|
||||
// Prevent the compiler from
|
||||
// 1) inferring that b is 0/1-valued, and
|
||||
// 2) handling the two cases with a branch.
|
||||
// This is not necessary when verify.c and kem.c are separate translation
|
||||
// units, but we expect that downstream consumers will copy this code and/or
|
||||
// change how it is built.
|
||||
__asm__("" : "+r"(b) : /* no inputs */);
|
||||
#endif
|
||||
|
||||
bvec = _mm256_set1_epi64x(-(uint64_t)b);
|
||||
for(i=0;i<len/32;i++) {
|
||||
rvec = _mm256_loadu_si256((__m256i *)&r[32*i]);
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user