#ed25519 #curve25519 #encryption #ecies #random #no-alloc #morus

no-std ecies-ed25519-morus

基于MORUS-1280-128和Blake3的Ed25519实验性集成加密方案

2个不稳定版本

0.2.0 2023年7月1日
0.1.0 2023年6月30日

#1988 in 加密学

MIT许可

40KB
688

ecies-ed25519-morus

Crates.io docs.rs GitHub

ECIES上基于Twisted Edwards Curve25519MORUS-1280-128的实验性方案

注意

示例

use rand_core::RngCore;
use ecies_ed25519_morus::{encrypt_into, decrypt_into};

const BUFFER_SIZE: usize = 512 * 1024; // avoid higher than this to prevent stackoverflow
let mut rng = rand_core::OsRng::default();
let sender_keypair = ed25519_dalek::SigningKey::generate(&mut rng);
let receiver_keypair = ed25519_dalek::SigningKey::generate(&mut rng);
let sender_public = sender_keypair.verifying_key();
let receiver_public = receiver_keypair.verifying_key();
let mut random_message = [0u8; BUFFER_SIZE];
let mut decrypted_message = [0u8; BUFFER_SIZE];
let mut ciphertext = [0u8; BUFFER_SIZE];
rng.fill_bytes(&mut random_message);

let decrypt_materials = encrypt_into(
    &mut rng,
    &sender_keypair,
    &receiver_public,
    &[],
    &random_message[..],
    &mut ciphertext[..],
)
.unwrap();
decrypt_into(
    &decrypt_materials,
    &receiver_keypair,
    &sender_public,
    &[],
    &ciphertext[..],
    &mut decrypted_message[..],
)
.unwrap();

assert_eq!(random_message, decrypted_message);
assert_ne!(sender_public, receiver_public);

特性

  • no-std环境(例如:wasm
cargo add ecies-ed25519-morus --no-default-features --features="pure"
  • std环境(默认)
cargo add ecies-ed25519-morus
cargo add ecies-ed25519-morus --features="aarch64-optimizations"

灵感来源

这项工作受到以下作品的强烈启发

未来工作

  • 带关联数据的加密和解密
  • 使用模糊器和工具提高测试
  • 添加基准信息
  • 添加示例和图表以阐述用例
  • 实现pythonc/c++包装器

依赖关系

~4.5–6MB
~136K SLoC