8000 X-Wing PQ/T hybrid by bwesterb · Pull Request #471 · cloudflare/circl · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

X-Wing PQ/T hybrid #471

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Jan 21, 2025
Merged

X-Wing PQ/T hybrid #471

merged 2 commits into from
Jan 21, 2025

Conversation

bwesterb
Copy link
Member
@bwesterb bwesterb commented Jan 5, 2024

Implementation of X-Wing PQ/T hybrid.

@bwesterb bwesterb changed the title [WIP] X-Wing PQ/T hybrid [DNM] X-Wing PQ/T hybrid Feb 15, 2024
@bwesterb bwesterb marked this pull request as draft February 15, 2024 13:22
@bwesterb bwesterb requested a review from armfazh February 15, 2024 13:22
@bwesterb bwesterb force-pushed the bas/ml-kem branch 4 times, most recently from 6d7c6f4 to 9095c87 Compare August 13, 2024 11:27
@bwesterb bwesterb force-pushed the bas/ml-kem branch 2 times, most recently from 7fe1dfc to e85bad2 Compare August 15, 2024 18:54
Base automatically changed from bas/ml-kem to main August 16, 2024 09:24
@bwesterb bwesterb force-pushed the bas/xwing branch 2 times, most recently from cd46a06 to 296b103 Compare August 16, 2024 13:35
@bwesterb bwesterb changed the title [DNM] X-Wing PQ/T hybrid X-Wing PQ/T hybrid Oct 20, 2024
@bwesterb bwesterb marked this pull request as ready for review October 20, 2024 21:08
@bwesterb bwesterb removed the on-hold label Oct 20, 2024
@bwesterb
Copy link
Member Author
bwesterb commented Jan 15, 2025

Applied @armfazh's suggestions; squashed commits; rebased; and set HPKE codepoint to the one actually assigned. Ready to merge.

Implements final version (-05)

https://datatracker.ietf.org/doc/draft-connolly-cfrg-xwing-kem/

Also includes HPKE integration with final IANA codepoint (which is different
from the one requested in -05.)
//
// https://datatracker.ietf.org/doc/draft-connolly-cfrg-xwing-kem
//
// Implements the final version (-05).
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

8000
Suggested change
// Implements the final version (-05).
// Implements the version (-05).

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the issue is with v5, v6, ...
we'll update that comment once an RFC gets assigned

)

// An X-Wing private key.
type PrivateKey struct {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

running fieldalignment tool suggests to move m at the beginning.

    m    mlkem768.PrivateKey
	seed [32]byte
	x    x25519.Key
	xpk  x25519.Key

if rand == nil {
rand = cryptoRand.Reader
}
_, err := io.ReadFull(rand, seed[:])
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See this issue:
(not sure if this applies here).

return &sk, &pk
}

func deriveKeyPair(seed []byte, sk *PrivateKey, pk *PublicKey) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit(style): output parameters are usually listed first than input parameters.

(seed,pk,sk) -> (pk,sk,seed)
alternatively, you can declare

func deriveKeyPair(seed []byte) (sk PrivateKey, pk PublicKey) {

Comment on lines +89 to +92
if !ok {
return false
}
return sk.m.Equal(&oth.m) &&
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
if !ok {
return false
}
return sk.m.Equal(&oth.m) &&
return ok && sk.m.Equal(&oth.m) &&

Comment on lines +105 to +108
if !ok {
return false
}
return pk.m.Equal(&oth.m) && bytes.Equal(pk.x[:], oth.x[:])
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
if !ok {
return false
}
return pk.m.Equal(&oth.m) && bytes.Equal(pk.x[:], oth.x[:])
return ok && pk.m.Equal(&oth.m) && bytes.Equal(pk.x[:], oth.x[:])

Comment on lines 28 to 29
func (*scheme) CiphertextSize() int { return CiphertextSize }
func (*PrivateKey) Scheme() kem.Scheme { return &xwing }
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it suffices to return scheme{} and use value-based receiver in all methods, and it avoids to declare var xwing scheme

Suggested change
func (*scheme) CiphertextSize() int { return CiphertextSize }
func (*PrivateKey) Scheme() kem.Scheme { return &xwing }
func (scheme) CiphertextSize() int { return CiphertextSize }
func (*PrivateKey) Scheme() kem.Scheme { return scheme() }

Comment on lines +73 to +75
// shake128 of spec/test-vectors.txt from X-Wing spec at
// https://github.com/dconnolly/draft-connolly-cfrg-xwing-kem
want := "1bcd0057d861d6b866239936cadcaeee1ec0164dedc181c386e9e54fe46156fe"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
// shake128 of spec/test-vectors.txt from X-Wing spec at
// https://github.com/dconnolly/draft-connolly-cfrg-xwing-kem
want := "1bcd0057d861d6b866239936cadcaeee1ec0164dedc181c386e9e54fe46156fe"
// shake128 of spec/test-vectors.txt from X-Wing spec at
// https://github.com/dconnolly/draft-connolly-cfrg-xwing-kem
// openssl dgst -shake128 -xoflen 32 spec/test-vectors.txt
want := "1bcd0057d861d6b866239936cadcaeee1ec0164dedc181c386e9e54fe46156fe"

@armfazh armfazh merged commit 9340445 into main Jan 21, 2025
10 checks passed
@armfazh armfazh deleted the bas/xwing branch January 21, 2025 23:48
project-mirrors-bot-tu bot pushed a commit to project-mirrors/forgejo-runner-as-gitea-act-runner-fork that referenced this pull request Jul 3, 2025
…605)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [github.com/cloudflare/circl](https://github.com/cloudflare/circl) | indirect | minor | `v1.3.7` -> `v1.6.1` |

---

### CIRCL-Fourq: Missing and wrong validation can lead to incorrect results
[GHSA-2x5j-vhc8-9cwm](GHSA-2x5j-vhc8-9cwm) / [GO-2025-3754](https://pkg.go.dev/vuln/GO-2025-3754)

<details>
<summary>More information</summary>

#### Details
##### Impact
The CIRCL implementation of FourQ fails to validate user-supplied low-order points during Diffie-Hellman key exchange, potentially allowing attackers to force the identity point and compromise session security.

Moreover, there is an incorrect point validation in ScalarMult can lead to incorrect results in the isEqual function and if a point is on the curve.

##### Patches
Version 1.6.1 (https://github.com/cloudflare/circl/tree/v1.6.1) mitigates the identified issues.

We acknowledge Alon Livne (Botanica Software Labs) for the reported findings.

#### Severity
Low

#### References
- [https://github.com/cloudflare/circl/security/advisories/GHSA-2x5j-vhc8-9cwm](https://github.com/cloudflare/circl/security/advisories/GHSA-2x5j-vhc8-9cwm)
- [https://github.com/cloudflare/circl](https://github.com/cloudflare/circl)
- [https://github.com/cloudflare/circl/tree/v1.6.1](https://github.com/cloudflare/circl/tree/v1.6.1)

This data is provided by [OSV](https://osv.dev/vulnerability/GHSA-2x5j-vhc8-9cwm) and the [GitHub Advisory Database](https://github.com/github/advisory-database) ([CC-BY 4.0](https://github.com/github/advisory-database/blob/main/LICENSE.md)).
</details>

---

### CIRCL-Fourq: Missing and wrong validation can lead to incorrect results in github.com/cloudflare/circl
[GHSA-2x5j-vhc8-9cwm](GHSA-2x5j-vhc8-9cwm) / [GO-2025-3754](https://pkg.go.dev/vuln/GO-2025-3754)

<details>
<summary>More information</summary>

#### Details
CIRCL-Fourq: Missing and wrong validation can lead to incorrect results in github.com/cloudflare/circl

#### Severity
Unknown

#### References
- [https://github.com/cloudflare/circl/security/advisories/GHSA-2x5j-vhc8-9cwm](https://github.com/cloudflare/circl/security/advisories/GHSA-2x5j-vhc8-9cwm)
- [https://github.com/cloudflare/circl/tree/v1.6.1](https://github.com/cloudflare/circl/tree/v1.6.1)

This data is provided by [OSV](https://osv.dev/vulnerability/GO-2025-3754) and the [Go Vulnerability Database](https://github.com/golang/vulndb) ([CC-BY 4.0](https://github.com/golang/vulndb#license)).
</details>

---

### Release Notes

<details>
<summary>cloudflare/circl (github.com/cloudflare/circl)</summary>

### [`v1.6.1`](https://github.com/cloudflare/circl/releases/tag/v1.6.1): CIRCL v1.6.1

[Compare Source](cloudflare/circl@v1.6.0...v1.6.1)

#### CIRCL v1.6.1

-   Fixes some point checks on the FourQ curve.
-   Hybrid KEM fails on low-order points.

##### What's Changed

-   kem/hybrid: ensure X25519 hybrids fails with low order points by [@&#8203;Lekensteyn](https://github.com/Lekensteyn) in cloudflare/circl#541
-   .github: Use native ARM64 builders instead of QEMU by [@&#8203;Lekensteyn](https://github.com/Lekensteyn) in cloudflare/circl#542
-   Fixes several errors on twisted Edwards curves. by [@&#8203;armfazh](https://github.com/armfazh) in cloudflare/circl#545
-   Release v1.6.1 by [@&#8203;armfazh](https://github.com/armfazh) in cloudflare/circl#546

**Full Changelog**: cloudflare/circl@v1.6.0...v1.6.1

### [`v1.6.0`](https://github.com/cloudflare/circl/releases/tag/v1.6.0): CIRCL v1.6.0

[Compare Source](cloudflare/circl@v1.5.0...v1.6.0)

#### CIRCL v1.6.0

##### New!

-   [Prio3](https://github.com/cloudflare/circl/blob/main/vdaf/prio3) Verifiable Distributed Aggregation Function ([draft-irtf-cfrg-vdaf](https://datatracker.ietf.org/doc/draft-irtf-cfrg-vdaf/)).
-   [X-Wing](https://github.com/cloudflare/circl/blob/main/kem/xwing): general-purpose hybrid post-quantum KEM ([draft-connolly-cfrg-xwing-kem](https://datatracker.ietf.org/doc/draft-connolly-cfrg-xwing-kem/))

##### What's Changed

-   Add OIDs to ML-DSA by [@&#8203;bwesterb](https://github.com/bwesterb) in cloudflare/circl#519
-   Adds Prio3 a set of verifiable distributed aggregation functions. by [@&#8203;armfazh](https://github.com/armfazh) in cloudflare/circl#522
-   Run semgrep cronjob only in upstream repository. by [@&#8203;armfazh](https://github.com/armfazh) in cloudflare/circl#526
-   X-Wing PQ/T hybrid by [@&#8203;bwesterb](https://github.com/bwesterb) in cloudflare/circl#471
-   ckem: move crypto/elliptic to crypto/ecdh by [@&#8203;MingLLuo](https://github.com/MingLLuo) in cloudflare/circl#529
-   hpke: Update HPKE code to use ecdh stdlib package. by [@&#8203;armfazh](https://github.com/armfazh) in cloudflare/circl#530
-   prio3: Adds polynomial multiplication using NTT by [@&#8203;armfazh](https://github.com/armfazh) in cloudflare/circl#532
-   Add Prio3 in readme. by [@&#8203;armfazh](https://github.com/armfazh) in cloudflare/circl#527

##### New Contributors

-   [@&#8203;MingLLuo](https://github.com/MingLLuo) made their first contribution in cloudflare/circl#529

**Full Changelog**: cloudflare/circl@v1.5.0...v1.6.0

### [`v1.5.0`](https://github.com/cloudflare/circl/releases/tag/v1.5.0): CIRCL v1.5.0

[Compare Source](cloudflare/circl@v1.4.0...v1.5.0)

### CIRCL v1.5.0

**New:** ML-DSA, Module-Lattice-based Digital Signature Algorithm.

##### What's Changed

-   kem: add X25519MLKEM768 TLS hybrid KEM by [@&#8203;bwesterb](https://github.com/bwesterb) in cloudflare/circl#510
-   Create semgrep.yml by [@&#8203;hrushikeshdeshpande](https://github.com/hrushikeshdeshpande) in cloudflare/circl#514
-   repo: Some fixes reported by CodeQL by [@&#8203;armfazh](https://github.com/armfazh) in cloudflare/circl#515
-   Add ML-DSA (FIPS204) by [@&#8203;bwesterb](https://github.com/bwesterb) in cloudflare/circl#480
-   sign/mldsa: Add test for ML-DSA signature verification. by [@&#8203;armfazh](https://github.com/armfazh) in cloudflare/circl#517
-   Release v1.5.0 by [@&#8203;armfazh](https://github.com/armfazh) in cloudflare/circl#518

##### New Contributors

-   [@&#8203;hrushikeshdeshpande](https://github.com/hrushikeshdeshpande) made their first contribution in cloudflare/circl#514

**Full Changelog**: cloudflare/circl@v1.4.0...v1.5.0

### [`v1.4.0`](https://github.com/cloudflare/circl/releases/tag/v1.4.0): CIRCL v1.4.0

[Compare Source](cloudflare/circl@v1.3.9...v1.4.0)

### CIRCL v1.4.0

##### Changes

New: ML-KEM compatible with FIPS-203.

##### Commit History

-   eddilithium3: fix typos by [@&#8203;bwesterb](https://github.com/bwesterb) in cloudflare/circl#503
-   Add ML-KEM (FIPS 203). by [@&#8203;bwesterb](https://github.com/bwesterb) in cloudflare/circl#470
-   Add ML-KEM decapsulation key check. by [@&#8203;bwesterb](https://github.com/bwesterb) in cloudflare/circl#507
-   Preparing for release v1.4.0 by [@&#8203;armfazh](https://github.com/armfazh) in cloudflare/circl#508

**Full Changelog**: cloudflare/circl@v1.3.9...v1.4.0

### [`v1.3.9`](https://github.com/cloudflare/circl/releases/tag/v1.3.9): CIRCL v1.3.9

[Compare Source](cloudflare/circl@v1.3.8...v1.3.9)

#### CIRCL v1.3.9

##### Changes:

-   Fix bug on BLS12381 decoding elements.

##### Commit History

-   dilithium: fix typo by [@&#8203;bwesterb](https://github.com/bwesterb) in cloudflare/circl#498
-   bls12381: Detects invalid prefix in G1 and G2 serialized elements by [@&#8203;armfazh](https://github.com/armfazh) in cloudflare/circl#500
-   Preparing CIRCL release v1.3.9 by [@&#8203;armfazh](https://github.com/armfazh) in cloudflare/circl#501

**Full Changelog**: cloudflare/circl@v1.3.8...v1.3.9

### [`v1.3.8`](https://github.com/cloudflare/circl/releases/tag/v1.3.8): CIRCL v1.3.8

[Compare Source](cloudflare/circl@v1.3.7...v1.3.8)

### CIRCL v1.3.8

#### New

-   BLS Signatures on top of BLS12-381.
-   Adopt faster squaring in pairings.
-   BlindRSA compliant with RFC9474.
-   (Verifiable) Secret Sharing compatible with the Group interface (elliptic curves).

#### Notice

-   Update on cpabe/tkn20 ciphertexts, read more at https://github.com/cloudflare/circl/wiki/tkn20-Ciphertext-Format-(v1.3.8)

##### What's Changed

-   Implement Granger-Scott faster squaring in the cyclotomic subgroup. by [@&#8203;armfazh](https://github.com/armfazh) in cloudflare/circl#449
-   Updates avo and CIRCL's own dependency. by [@&#8203;armfazh](https://github.com/armfazh) in cloudflare/circl#474
-   Updating documentation for OPRF package. by [@&#8203;armfazh](https://github.com/armfazh) in cloudflare/circl#475
-   group: removes order method from group interface by [@&#8203;armfazh](https://github.com/armfazh) in cloudflare/circl#356
-   zk/dleq: Adding DLEQ proofs for Qn, the subgroup of squares in (Z/nZ)\* by [@&#8203;armfazh](https://github.com/armfazh) in cloudflare/circl#451
-   Reduce x/crypto and x/sys versions to match Go 1.21 by [@&#8203;Lekensteyn](https://github.com/Lekensteyn) in cloudflare/circl#476
-   Bump GitHub Actions versions and use Go 1.22 and 1.21 by [@&#8203;Lekensteyn](https://github.com/Lekensteyn) in cloudflare/circl#477
-   Adding rule for constant values by [@&#8203;armfazh](https://github.com/armfazh) in cloudflare/circl#478
-   Add BLS signatures over BLS12-381 by [@&#8203;armfazh](https://github.com/armfazh) in cloudflare/circl#446
-   group: Implements Shamir and Feldman secret sharing. by [@&#8203;armfazh](https://github.com/armfazh) in cloudflare/circl#348
-   blindrsa: add support for all variants of RFC9474 by [@&#8203;armfazh](https://github.com/armfazh) in cloudflare/circl#479
-   Explicitly installs Go with version before CodeQL analysis. by [@&#8203;armfazh](https://github.com/armfazh) in cloudflare/circl#481
-   Bumps golangci-lint action by [@&#8203;armfazh](https://github.com/armfazh) in cloudflare/circl#485
-   ecc/bls12381: Ensures pairing operations don't overwrite their input by [@&#8203;armfazh](https://github.com/armfazh) in cloudflare/circl#494
-   Align to the `purego` build tag, removing `noasm` build tag by [@&#8203;mattyclarkson](https://github.com/mattyclarkson) in cloudflare/circl#492
-   cpabe: Serializing ciphertext with 32-bit prefixes. by [@&#8203;armfazh](https://github.com/armfazh) in cloudflare/circl#490

##### New Contributors

-   [@&#8203;mattyclarkson](https://github.com/mattyclarkson) made their first contribution in cloudflare/circl#492

**Full Changelog**: cloudflare/circl@v1.3.7...v1.3.8

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "" (UTC), Automerge - Between 12:00 AM and 03:59 AM ( * 0-3 * * * ) (UTC).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC40OC40IiwidXBkYXRlZEluVmVyIjoiNDAuNDguNCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->

Reviewed-on: https://code.forgejo.org/forgejo/runner/pulls/605
Reviewed-by: earl-warren <earl-warren@noreply.code.forgejo.org>
Co-authored-by: Renovate Bot <bot@kriese.eu>
Co-committed-by: Renovate Bot <bot@kriese.eu>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants
0