Skip to content

Conversation

Lukasa and others added 11 commits June 16, 2025 14:54
This PR sets swift-crypto up for alignment with the WWDC 2025 CryptoKit
APIs. This includes the parity APIs for MLKEM and MLDSA, as well as
XWing.

At this time the SHA3 APIs are disabled, as they require a novel
implementation strategy. This will come later in the summer. All API
features that require SHA3 are therefore also disabled at runtime.
### Motivation:

FoundationEssentials produces smaller binaries on most platforms.

### Modifications:

Where FoundationEssentials is available, import that.

### Result:

Improved binary size
To keep the WWDC-25 branch from rotting too badly, we'll be doing
regular catch-up merges. This is the first.

Co-authored-by: YourMJK <[email protected]>
Motivation

The Swift 6 language mode adopts data-race safety by default. While
Swift Crypto itself has no concurrent code, it is still useful to force
us to ensure that our code is properly Sendable-correct.

Modifications

- @unchecked Sendable on several CoW data types
- Some necessary Sendable constraints on ECToolbox protocols
- Add some missing protocol constraints on ARC types.

Result

Swift 6 clean.
## Motivation

CryptoKit is adding API for SHA-3, which BoringSSL does not support. To
maintain API parity, we need to provide a backing implementation. For
this, we can use XKCP[^1], which provides the reference implementation,
as well as several optimized solutions, suitable for vendoring into
other projects.

## Modifications

The following changes have been made in separate commits to help with
the review:

- Add vendor-xkcp.sh script
- Revendor xkcp#master (heads/master-0-g11297f5)
- Add CXCKP target with modulemap and umbrella header
- Add CXKCPTests test target with simple test vectors
- Add CXKCPShims with function wrappers for macros to call from Swift
- Remove #if false guard from HashFunctions_SHA3.swift
- Add SHA-3 implementation backed by libXKCP
- Add new DigestImplSHA3 platform-specific type alias
- Remove #if false from DigestsTests.swift to get SHA-3 tests

## Result

Swift Crypto provides functioning SHA-3 API.

## Notes

This PR is for the `wwdc-25` side branch.

[^1]: https://github.com/XKCP/XKCP
Co-authored-by: YourMJK <[email protected]>
Co-authored-by: Rick Newton-Rogers <[email protected]>
Co-authored-by: Raphael <[email protected]>
Co-authored-by: Si Beaumont <[email protected]>
Co-authored-by: Evan Wilde <[email protected]>
Co-authored-by: Tim Condon <[email protected]>
Co-authored-by: Gus Cairo <[email protected]>
Co-authored-by: George Barnett <[email protected]>
Co-authored-by: Fabrice de Gans <[email protected]>
Co-authored-by: Wojciech Nagrodzki <[email protected]>
Co-authored-by: Jesse L. Zamora <[email protected]>
Co-authored-by: aryan-25 <[email protected]>
This patch brings us up-to-date with the RC SDK. There are a couple of
tweaks to the MLDSA code and the XWing code, mostly a few minor
interface changes. I've adopted those in the backing code, and also
wired up the SHA3 integrity checks.
Following on from #281, opened as a new PR as the conflicts were too
many

### Checklist
- [x] I've run tests to see all new and existing tests pass
- [x] I've followed the code style of the rest of the project
- [x] I've read the [Contribution Guidelines](CONTRIBUTING.md)
- [x] I've updated the documentation if necessary

#### If you've made changes to `gyb` files
- [ ] I've run `.script/generate_boilerplate_files_with_gyb` and
included updated generated files in a commit of this pull request

### Motivation:

_[Explain here the context, and why you're making that change. What is
the problem you're trying to solve.]_

### Modifications:

_[Describe the modifications you've done.]_

### Result:

_[After your change, what will change.]_
This is the last catchup merge into the WWDC-25 branch required to get
the two branches to line up. From here, it's a straightforward merge to
`main` to get the WWDC-25 branch in.

---------

Co-authored-by: YourMJK <[email protected]>
Co-authored-by: Rick Newton-Rogers <[email protected]>
Co-authored-by: Raphael <[email protected]>
Co-authored-by: Si Beaumont <[email protected]>
Co-authored-by: Evan Wilde <[email protected]>
Co-authored-by: Tim Condon <[email protected]>
Co-authored-by: Gus Cairo <[email protected]>
Co-authored-by: George Barnett <[email protected]>
Co-authored-by: Fabrice de Gans <[email protected]>
Co-authored-by: Wojciech Nagrodzki <[email protected]>
Co-authored-by: Jesse L. Zamora <[email protected]>
Co-authored-by: aryan-25 <[email protected]>
Co-authored-by: Gwynne Raskind <[email protected]>
Co-authored-by: 3405691582 <[email protected]>
Co-authored-by: Paul Toffoloni <[email protected]>
@Lukasa Lukasa added the ⚠️ semver/major Breaks existing public API. label Sep 24, 2025
@Lukasa Lukasa closed this Sep 25, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

⚠️ semver/major Breaks existing public API.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants