<h1 align="center">salty</h1>
<div align="center">
<strong>
Ed25519 signatures for microcontrollers
</strong>
</div>
<br />
<div align="center">
<a href="https://crates.io/crates/salty">
<img src="https://img.shields.io/crates/v/salty.svg?style=flat-square"
alt="Crates.io version" />
</a>
<a href="https://crates.io/crates/salty">
<img src="https://img.shields.io/crates/d/salty.svg?style=flat-square"
alt="Download" />
</a>
<a href="https://salty-api.netlify.com">
<img src="https://img.shields.io/badge/docs-main_branch-blue.svg?style=flat-square"
alt="main branch API docs" />
</a>
<a href="https://salty-book.netlify.com">
<img src="https://img.shields.io/badge/book-main_branch-blue.svg?style=flat-square"
alt="main branch book" />
</a>
</div>
<div align="center">
<h3>
<a href="https://docs.rs/salty">
API Docs
</a>
<span> | </span>
<a href="https://github.com/nickray/salty/blob/main/.github/CONTRIBUTING.md">
Contributing
</a>
</h3>
</div>
## Overview
[![Build Status][build-image]][build-link]
[build-image]: https://builds.sr.ht/~nickray/salty.svg
[build-link]: https://builds.sr.ht/~nickray/salty
[crate-image]: https://img.shields.io/crates/v/salty.svg
[crate-link]: https://crates.io/crates/salty
[license-image]: https://img.shields.io/badge/license-Apache2.0%2FMIT-blue.svg
[docs-image]: https://docs.rs/salty/badge.svg?style=flat-square
[docs-link]: https://docs.rs/salty
[docs-main-image]: https://img.shields.io/badge/docs-main-blue?style=flat-square
[docs-main-link]: https://salty-api.netlify.com
[solokeys-img]: .github/images/solokeys-120-40.png
[solokeys-url]: https://solokeys.com
[yamnord-img]: .github/images/yamnord-120-40-alt.png
[yamnord-url]: https://yamnord.com
Small, sweet, swift: Ed25519 signatures for microcontrollers.
With assembly optimizations for Cortex-M4 and Cortex-M33.
**NOTE: This is work-in-progress and not audited! The usual warnings apply: Your hamster will explode, etc. etc.**
Work on salty is sponsored by
[![SoloKeys][solokeys-img]][solokeys-url]
[![yamnord][yamnord-img]][yamnord-url]
## Goals
From highest to lowest priority:
- [understandable](https://blog.filippo.io/a-literate-go-implementation-of-poly1305/) code
- timing side-channel free
- design for easy integration in embedded projects
- sufficiently small compiled code size
- useful speed
## The Plan
None of these releases exist quite yet.
### v0.1.0
Basic signature functionality
- allocation free API for signatures
- transcription of Ed25519 from [TweetNaCl](https://tweetnacl.cr.yp.to/20140427/tweetnacl.c)
- Bjoern Haase's [field arithmetic optimizations](https://github.com/BjoernMHaase/fe25519/tree/master/STM32F407/crypto/asm)
- use [subtle](https://github.com/dalek-cryptography/subtle)
### v0.2.0
More tests!
- fuzzing to test correctness against known good implementation
- [side-fuzzing](https://tweetnacl.cr.yp.to/20140427/tweetnacl.c) to test for timing side-channels
### v0.3.0
Completion! The rest of NaCl.
- X22519
- authenticated encryption
#### License
<sup>The `scalar29` implementation is from `curve25519-daleks`'s u32 backend: [LICENSE](https://github.com/dalek-cryptography/curve25519-dalek/blob/master/LICENSE).
<br>
Salty is licensed under either of [Apache License, Version 2.0](LICENSE-APACHE) or [MIT License](LICENSE-MIT) at your option.</sup>
<br>
<sub>Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.</sub>
<br>
<sub>[TweetNaCl](https://tweetnacl.cr.yp.to/) is a public-domain library.</sub>
<br>
<sub>[fe25519](https://github.com/BjoernMHaase/fe25519) is licensed under Creative Commons Zero v1.0 Universal.</sub>