Initial project import
This commit is contained in:
commit
23f2d29e32
11957 files changed
+1754577
No files matched your search
@@ -0,0 +1,46 @@
|
||||
# chacha20poly1305
|
||||
|
||||
Chacha20Poly1305 Authenticated Encryption with Additional Data (AEAD) module for V Language
|
||||
|
||||
This module provides authenticated encryption with additional data (AEAD) algorithm in V Language.
|
||||
Its backed by experimental `x.crypto.chacha20` symmetric key stream cipher encryption
|
||||
module and `x.crypto.poly1305` message authentication code (MAC) module.
|
||||
|
||||
> [!Warning]
|
||||
> This is an absolutely experimental module, which is subject to change.
|
||||
> Please use it carefully, thoroughly and wisely.
|
||||
|
||||
## Supported features
|
||||
The implemented features at the time of writing (2025/10/08) are:
|
||||
- The standard ChaCha20 and Poly1305 construct for IETF Protocols defined in [RFC 8439](https://datatracker.ietf.org/doc/html/rfc8439)
|
||||
- ChaCha20 Poly1305 AEAD construct with 8-bytes nonce.
|
||||
- Support for eXtended ChaCha20 Poly1305 AEAD construct with 24 bytes nonce.
|
||||
- Support for nonce-misuse resistent and key-commiting AEAD through ChaCha20-Poly1305-PSIV construction defined in the [A Robust Variant of ChaCha20-Poly1305](https://eprint.iacr.org/2025/222) paper.
|
||||
|
||||
## Examples
|
||||
|
||||
```v
|
||||
import encoding.hex
|
||||
import x.crypto.chacha20poly1305
|
||||
|
||||
fn main() {
|
||||
// plaintext message to be encrypted and authenticated
|
||||
message := "Ladies and Gentlemen of the class of '99: If I could offer you only one
|
||||
tip for the future, sunscreen would be it.".bytes()
|
||||
|
||||
// sets your secure random key
|
||||
key := hex.decode('808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f')!
|
||||
// give yours nonce
|
||||
nonce := hex.decode('070000004041424344454647')!
|
||||
// yours additional data
|
||||
aad := hex.decode('50515253c0c1c2c3c4c5c6c7')!
|
||||
|
||||
// lets doing authenticated encryption
|
||||
ciphertext := chacha20poly1305.encrypt(message, key, nonce, aad)!
|
||||
|
||||
// lets perform decryption back
|
||||
plaintext := chacha20poly1305.decrypt(ciphertext, key, nonce, aad)!
|
||||
|
||||
assert plaintext == message
|
||||
}
|
||||
```
|
||||
Reference in new issue
Block a user