# RustySSL `rs-ssl` **An OpenSSL inspired Rust based encryption library** [![Documentation](https://img.shields.io/badge/docs-API-blue)](https://crates.io/) [![GitHub Workflow Status](https://github.com/Azgrom/RustySSL/workflows/Cargo%20Build%20&%20Test/badge.svg?branch=master)](https://github.com/Azgrom/RustySSL/actions)

Vision

RustySSL seeks to establish the Rust language self-sufficency by offering an API that is fully compatible with Rust's core library , although not restricted to it. RustySSL aims to provide a reliable, user-friendly, standards-compliant, and platform-agnostic suite of encryption tools.

How To Use

See the implementation documentation for examples.

RoadMap

  1. The initial objective of RustySSL is to port all OpenSSL algorithms to the Rust ecosystem.
  2. Following the port, RustySSL will continue to expand and incorporate additional cryptographic algorithms.
  3. Although the current implementations are not the fastest, there is considerable room for improvement. There will probably a competitive performance boost once the SIMD module stabilizes;

At this moment the objective is to provide all OpenSSL's current set of algorithms. After that I plan to implement some cryptocurrencies hashing algorithms like Equihash, Ethereum's Keccak-256 and others.

Why This Project?

The benefits of RustySSL include:

Philosophy

Inspired by the Unix philosophy, but adapting to the purpose of this project:

  1. Do One Thing Well: Each implementation should focus on a single responsibility. If responsibilities diverge, a new crate should be created.
  2. Avoid Dependency Breakage: Changing implementations should not break dependencies. If new traits are required, they should benefit all project implementations.
  3. Self-Support: Implementations should be able to function solely with Rust's libcore and be backward compatible with it.
  4. Clarity Over Efficiency: Clear, understandable code is prioritized over highly optimized but obscure solutions.

Supported Algorithms

| Ciphers | Hashing Functions | Public-key | | :---------------------------- | :------------------------------------------------------- | :------------------------------------------ | | AES - coming soon | SHA-1 - rs_sha1 | RSA - coming soon | | Blowfish - coming soon | SHA-224 - rs_sha224 | DSA - coming soon | | Camellia - coming soon | SHA-256 - rs_sha256 | Diffie-Hellman key exchange - coming soon | | Chacha20 - coming soon | SHA-384 - rs_sha384 | Elliptic curve - coming soon | | Poly1305 - coming soon | SHA-512 - rs_sha512 | X25519 - coming soon | | SEED - coming soon | SHA-512/224 - rs_sha512_224 | Ed25519 - coming soon | | CAST-128 - coming soon | SHA-512/256 - rs_sha512_256 | X448 - coming soon | | DES - coming soon | SHA3-224 - rs_sha3_224 | Ed448 - coming soon | | IDEA - coming soon | SHA3-256 - rs_sha3_256 | GOST R 34.10-2001 - coming soon | | RC2 - coming soon | SHA3-384 - rs_sha3_384 | SM2 - coming soon | | RC4 - coming soon | SHA3-512 - rs_sha3_512 | | | RC5 - coming soon | SHAKE128 - rs_shake128 | | | Triple DES - coming soon | SHAKE256 - rs_shake256 | | | GOST 28147-89 - coming soon | HMAC - rs_hmac | | | SM4 - coming soon | Generic Keccak {200, 400, 800, 1600} - rs_keccak_nbits | | | | BLAKE2 - coming soon | | | | GOST R 34.11-94 - coming soon | | | | MD2 - coming soon | | | | MD4 - coming soon | | | | MD5 - coming soon | | | | MDC-2 - coming soon | | | | RIPEMD-160 - coming soon | | | | SM3 - coming soon | | | | Whirlpool - coming soon | |

Contributing

Contributions are very much welcomed from everyone.

If you have a suggestion of an algorithm that you want to see included in this project, please open an issue proposing it.

To contribute, please follow the contribution guidelines.

Code of Conduct

The participation of each member of the Rust community is valued, and everyone is expected to have an enjoyable and fulfilling experience. For this reason, all participants, maintainers, and contributors must abide by the Code of Conduct.

License

RustySSL is licensed under GPL-2.0-only.

In plain English, this means you are free to use, modify, and distribute the software, provided that any modification must also be licensed under GPL-2.0-only. Or, if more convenient, for a modification that is an improvement and conforms to the contribution guidelines to bring it to the project.