# askar-crypto
[![Rust Crate](https://img.shields.io/crates/v/askar-crypto.svg)](https://crates.io/crates/askar-crypto)
[![Rust Documentation](https://docs.rs/askar-crypto/badge.svg)](https://docs.rs/askar-crypto)
The `askar-crypto` crate provides the basic key representations and cryptographic operations used by [`aries-askar`](https://github.com/hyperledger/aries-askar).
## Supported Key Types
| Key Type | Feature | Operations | Notes |
| -------------------- | --------- | ------------------------------------------------------------- | ------------------------------- |
| AES-GCM | `aes` | AEAD encryption
JWK export | A128GCM and A256GCM |
| AES-CBC-HMAC-SHA2 | `aes` | AEAD encryption
JWK export | A128CBC-HS256 and A256CBC-HS512 |
| AES Key Wrap | `aes` | Authenticated encryption
JWK export | A128KW and A256KW |
| (X)ChaCha20-Poly1305 | `chacha` | AEAD encryption
JWK export | aka C20P, XC20P |
| BLS12-381 | `bls` | bls-signature1 key generation
JWK import/export | G1, G2, and G1G2 key types |
| Ed25519 | `ed25519` | EdDSA signatures
JWK import/export
Conversion to X25519 | |
| X25519 | `ed25519` | DH key exchange
JWK import/export | |
| K-256 | `k256` | ECDSA signatures
DH key exchange
JWK import/export | aka secp256k1 |
| P-256 | `p256` | ECDSA signatures
DH key exchange
JWK import/export | aka nist256p1, secp256r1 |
1. Compatible with bls-signature RFC draft 4
## 'Any' Key support
The `any_key` feature (which depends on `alloc`) provides a generic interface for creating and working with any supported key type.
## JSON Web Algorithms
This crate provides implementations of the [ECDH-ES](https://tools.ietf.org/html/rfc7518#section-4.6) and [ECDH-1PU (draft 4)](https://tools.ietf.org/html/draft-madden-jose-ecdh-1pu-04) key agreement operations, for use in deriving a content encryption or key wrapping key. These primitives can be used when producing or consuming JWE envelopes using these algorithms.
## no-std
This crate supports the optional `alloc` feature, gating types and operations that depend on a global allocator. The `std` feature depends on `alloc`, and adds support for `std::error::Error`.
## License
Licensed under either of
- Apache License, Version 2.0 ([LICENSE-APACHE](https://github.com/hyperledger/aries-askar/blob/main/LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license ([LICENSE-MIT](https://github.com/hyperledger/aries-askar/blob/main/LICENSE-MIT) or http://opensource.org/licenses/MIT)
at your option.