| # [RustCrypto]: PKCS#8 (Private Keys) |
| |
| [![crate][crate-image]][crate-link] |
| [![Docs][docs-image]][docs-link] |
| [![Build Status][build-image]][build-link] |
| ![Apache2/MIT licensed][license-image] |
| ![Rust Version][rustc-image] |
| [![Project Chat][chat-image]][chat-link] |
| |
| Pure Rust implementation of Public-Key Cryptography Standards (PKCS) #8: |
| Private-Key Information Syntax Specification ([RFC 5208]). |
| |
| [Documentation][docs-link] |
| |
| ## About PKCS#8 |
| |
| PKCS#8 is a format for cryptographic private keys, often containing pairs |
| of private and public keys. |
| |
| You can identify a PKCS#8 private key encoded as PEM (i.e. text) by the |
| following: |
| |
| ```text |
| -----BEGIN PRIVATE KEY----- |
| ``` |
| |
| PKCS#8 private keys can optionally be encrypted under a password using |
| key derivation algorithms like PBKDF2 and [scrypt], and encrypted with |
| ciphers like AES-CBC. When a PKCS#8 private key has been encrypted, |
| it starts with the following: |
| |
| ```text |
| -----BEGIN ENCRYPTED PRIVATE KEY----- |
| ``` |
| |
| PKCS#8 private keys can also be serialized in an ASN.1-based binary format. |
| The PEM text encoding is a Base64 representation of this format. |
| |
| ## Supported Algorithms |
| |
| This crate is implemented in an algorithm-agnostic manner with the goal of |
| enabling PKCS#8 support for any algorithm. |
| |
| That said, it has been tested for interoperability against keys generated by |
| OpenSSL for the following algorithms: |
| |
| - ECC (`id-ecPublicKey`) |
| - Ed25519 (`id-Ed25519`) |
| - RSA (`id-rsaEncryption`) |
| - X25519 (`id-X25519`) |
| |
| Please open an issue if you encounter trouble using it with a particular |
| algorithm, including the ones listed above or other algorithms. |
| |
| ## Minimum Supported Rust Version |
| |
| This crate requires **Rust 1.57** at a minimum. |
| |
| We may change the MSRV in the future, but it will be accompanied by a minor |
| version bump. |
| |
| ## License |
| |
| Licensed under either of: |
| |
| * [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0) |
| * [MIT license](http://opensource.org/licenses/MIT) |
| |
| at your option. |
| |
| ### Contribution |
| |
| 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. |
| |
| [//]: # (badges) |
| |
| [crate-image]: https://buildstats.info/crate/pkcs8 |
| [crate-link]: https://crates.io/crates/pkcs8 |
| [docs-image]: https://docs.rs/pkcs8/badge.svg |
| [docs-link]: https://docs.rs/pkcs8/ |
| [license-image]: https://img.shields.io/badge/license-Apache2.0/MIT-blue.svg |
| [rustc-image]: https://img.shields.io/badge/rustc-1.57+-blue.svg |
| [chat-image]: https://img.shields.io/badge/zulip-join_chat-blue.svg |
| [chat-link]: https://rustcrypto.zulipchat.com/#narrow/stream/300570-formats |
| [build-image]: https://github.com/RustCrypto/formats/workflows/pkcs8/badge.svg?branch=master&event=push |
| [build-link]: https://github.com/RustCrypto/formats/actions |
| |
| [//]: # (links) |
| |
| [RustCrypto]: https://github.com/rustcrypto |
| [RFC 5208]: https://tools.ietf.org/html/rfc5208 |
| [scrypt]: https://en.wikipedia.org/wiki/Scrypt |