Rust Cryptographic Primitives
This repository contains a collection of cryptographic primitives implemented in Rust. The goal is to provide a comprehensive set of cryptographic primitives that are easy to use and hard to misuse.
This crate was done as a personal project to learn Rust and cryptography, implementing some of the algorithms I learned in the "Secure and Dependable Systems" course at my university. The code is open source and I am happy to receive contributions and feedback. Feel free to open an issue or a pull request on this repository.
If this crate is useful to you, please consider giving it a star on GitHub :)
Features
The crate currently provides the following cryptographic primitives, with an encryption and decryption function for each:
- Rail Fence Cipher
- Route Cipher
- Feistel Network
- Substitution-Permutation Network (SPN)
- Advanced Encryption Standard (AES)
The helpers module provides the following helper functions for cryptographic algorithms:
rotl8initialize_aes_sboxpermutefeistel_round_functionkdfgmix_columngmix_column_invxor_bytes
The constants module provides some useful constants for cryptographic algorithms, such as:
- a sample
S-Box - a sample
P-Box MIX_COLUMNS_LOOKUP_2,MIX_COLUMNS_LOOKUP_3,MIX_COLUMNS_LOOKUP_9,MIX_COLUMNS_LOOKUP_11,MIX_COLUMNS_LOOKUP_13,MIX_COLUMNS_LOOKUP_14lookup tables for the AES MixColumns operation
The block_cipher module provides the following block cipher modes of operation, with an encryption and decryption function for each:
- Electronic Codebook (ECB) mode
- Cipher Block Chaining (CBC) mode
- Counter (CTR) mode
- Output Feedback (OFB) mode
For any suggestions or requests, feel free to open an issue on this repository.
Usage
Add this to your Cargo.toml:
[]
= "0.2.0"
You can also use cargo to add the dependency to your Cargo.toml:
Then, simply import the crate and use the cryptographic primitives:
use *;
Example
Here is an example of using the aes_128_encrypt and aes_128_decrypt functions to encrypt and decrypt a plaintext using the Electronic Codebook (ECB) mode of operation:
use ;
use ;
let plaintext = b"Hello, World!";
let key = 0x2b7e151628aed2a6abf7158809cf4f3c;
let encrypted = ecb_encrypt.unwrap;
let decrypted = ecb_decrypt.unwrap;
assert_eq!;
License
This project is licensed under the MIT license.