2 个版本
0.2.1 | 2020 年 3 月 14 日 |
---|---|
0.2.0 | 2020 年 3 月 8 日 |
#16 in #硬件加速
14KB
157 行
eAESy — 在嵌入式目标上对任意数据进行简单的硬件加速 AES128CBC 操作
此 crate 提供了一个 trait,用于在具有可用支持的可用的 no-std
目标上进行硬件加速的 AES-128-CBC 加密/解密。作为后备方案,对于缺少密码学引擎的目标,可以使用软件实现。通过 PKCS7 填充支持任意输入长度。
目前,此 crate 在以下目标上使用密码学引擎
- NXP S32K144EVB-Q100 (
s32k144evb-q100
功能)
许可证
许可协议为以下之一
- Apache 许可协议第 2 版 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可协议 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
lib.rs
:
此 crate 提供了一个 trait,用于在具有可用支持的可用的 no-std
目标上进行硬件加速的 AES-128-CBC 加密/解密。作为后备方案,对于缺少密码学引擎的目标,可以使用软件实现。通过 PKCS7 填充支持任意输入长度。
目前,此 crate 在以下目标上使用密码学引擎
- NXP S32K144EVB-Q100 (
s32k144evb-q100
功能)
实现预期在预分配的缓冲区中加密/解密数据。
示例用法
#[macro_use]
extern crate hex_literal;
use easy::{aes128cbc::AES128Cbc, default::SoftwareAES};
// ...
let key = hex!("000102030405060708090a0b0c0d0e0f");
let iv = hex!("f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff");
let plaintext = b"Hello world!";
let pos = plaintext.len();
let buffer = [0; 16]; // must be a multiple of 16B; round up to account for padding
buffer[..pos].copy_from_slice(plaintext);
let mut aes = SoftwareAES::new(); // arguments to `new` will depend on implementation used
let _ciphertext = aes.encrypt(key, iv, &mut buffer, pos).unwrap()l;
let decrypted_ciphertext = aes.decrypt(key, iv, &mut buffer).unwrap();
assert_eq!(plaintext, decrypted_ciphertext);
依赖项
~0–4.5MB
~161K SLoC