# CertKit
A high-level Rust library providing abstractions over certificates and keys. This toolkit simplifies the process of creating certificates, intermediate Certificate Authorities (CAs), and root CAs.
## Features
- Create and manage X.509 certificates
- Generate and handle root Certificate Authorities (CAs)
- Create intermediate CAs for certificate hierarchies
- Support for multiple key types:
- RSA
- ECDSA (P-256, P-384, P-521)
- Ed25519
- PEM and DER format support
- Modern Rust implementation with strong type safety
- Type-safe parsing and serialization with `der` crate
## Usage
Add this to your `Cargo.toml`:
```toml
[dependencies]
certkit = "0.2"
```
## Cargo features
Each cryptographic algorithm is behind its own feature. All are enabled by default, so the default build is unchanged:
| `rsa` | RSA | yes |
| `p256` | ECDSA P-256 | yes |
| `p384` | ECDSA P-384 | yes |
| `p521` | ECDSA P-521 | yes |
| `ed25519` | Ed25519 | yes |
To pull in only the algorithms you need, disable the defaults and opt back in. For example, an ECDSA-only build that drops RSA (and its `num-bigint-dig` / `libm` dependency tree):
```toml
[dependencies]
certkit = { version = "0.2", default-features = false, features = ["p256", "p384"] }
```
At least one algorithm feature must be enabled; building with none is a compile error.
## Examples
[`tests/tls_echo.rs`](tests/tls_echo.rs) is a complete, runnable example that exercises the full PKI workflow:
1. Generate a **root CA** (self-signed)
2. Issue an **intermediate CA** signed by the root
3. Issue **server** and **client** end-entity certificates from the intermediate
4. Stand up an **mTLS echo server** with `rustls` and verify a successful round-trip
Run it with:
```sh
cargo test mtls_echo
```
## Key formats
| PKCS #1 | RSA only | Encoding/decoding RSA public and private keys; RSASSA-PKCS1-v1_5 signatures with SHA-256 |
| PKCS #8 | ✅ All | Primary private-key format for every algorithm (RSA, ECDSA, Ed25519). PEM and DER import/export |
## Dependencies
- `x509-cert`: X.509 certificate handling
- `der`: ASN.1 DER encoding/decoding
- `pkcs8`: Public-Key Cryptography Standards #8
- `rsa`, `p256`, `ed25519-dalek`: Cryptographic algorithms
- `time`: Time handling for certificate validity
- `pem`: PEM format encoding/decoding
### License
This crate is distributed under the terms of both the MIT license and the Apache License (Version 2.0), at your option.
See [LICENSE](LICENSE) for details.
### License of your contributions
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.