Expand description

Symmetric encryption algorithms

Symmetric encryption algorithms uses the same key (the shared-secret) to encrypt and decrypt the data. It is usually more performant and secure to use this type of encryption than using asymmetric encryption algorithms.

Usage

The first step is to create an instance of the algorithm needed. All the block ciphers algorithms supported are defined in the SymmetricAlgorithmId enum. Since they encrypt per block, a chaining mode is also needed. All the supported chaining modes are defined in the ChainingMode enum.

The creation of an algorithm can be relatively time-intensive. Therefore, it is advised to cache and reuse the created algorithms.

Once the algorithm is created, multiple keys can be created. Each key is initialized with a secret of a specific size. To check what key sizes are supported, see SymmetricAlgorithm.valid_key_sizes.

With the key in hand, it is then possible to encrypt or decrypt data. Padding is always added to fit a whole block. If the data fits exactly in a block, an extra block of padding is added. When encrypting or decrypting, an initialization vector (IV) may be required.

The following example encrypts then decrypts a message using AES with CBC chaining mode:

use win_crypto_ng::symmetric::{ChainingMode, SymmetricAlgorithm, SymmetricAlgorithmId};
use win_crypto_ng::symmetric::Padding;

const KEY: &'static str = "0123456789ABCDEF";
const IV: &'static str = "asdfqwerasdfqwer";
const DATA: &'static str = "This is a test.";

let iv = IV.as_bytes().to_owned();

let algo = SymmetricAlgorithm::open(SymmetricAlgorithmId::Aes, ChainingMode::Cbc).unwrap();
let key = algo.new_key(KEY.as_bytes()).unwrap();
let ciphertext = key.encrypt(Some(&mut iv.clone()), DATA.as_bytes(), Some(Padding::Block)).unwrap();
let plaintext = key.decrypt(Some(&mut iv.clone()), ciphertext.as_slice(), Some(Padding::Block)).unwrap();

assert_eq!(std::str::from_utf8(&plaintext.as_slice()[..DATA.len()]).unwrap(), DATA);

Structs

  • The advanced encryption standard symmetric encryption algorithm.
  • The data encryption standard symmetric encryption algorithm.
  • The extended data encryption standard symmetric encryption algorithm.
  • Key length known at run-time.
  • Handle to a symmetric key.
  • The RC2 block symmetric encryption algorithm.
  • Symmetric algorithm
  • Symmetric algorithm key
  • The triple data encryption standard symmetric encryption algorithm.
  • The 112-bit triple data encryption standard symmetric encryption algorithm.

Enums

Traits

  • Marker trait for a symmetric algorithm.
  • Marker trait denoting key size in bits.