8个重大版本
0.9.1 | 2023年5月16日 |
---|---|
0.8.0 | 2023年4月18日 |
0.6.0 | 2022年10月7日 |
#580 在 密码学
83 每月下载量
110KB
2K SLoC
此目录包含Enquo核心加密库的Rust代码。
Rust Enquo核心有两个用途
-
a 基于Rust的查询加密库;
-
以及其他语言中Enquo客户端功能的核心代码。
因此,此库中可能存在一些不那么“Rust化”的内容。这可能是由于我不知道更好的方法,或者因为这对于跨语言兼容性很重要。
使用方法
Enquo核心专注于使用从根中派生的密钥对字段数据进行加密和解密。
创建根的过程是初始化一个密钥,然后将该密钥提供给根。
use enquo_core::{KeyProvider, key_provider::Static, Root};
use rand::{Rng, SeedableRng};
// The generated key *must* be from a cryptographically secure random number generator;
// thread_rng() is not guaranteed to be secure enough.
use rand_chacha::ChaCha20Rng;
use std::sync::Arc;
# use enquo_core::Error;
# fn main() -> Result<(), Error> {
let key_data = ChaCha20Rng::from_entropy().gen::<[u8; 32]>();
let root_key = Static::new(&key_data)?;
let root = Root::new(Arc::new(root_key));
# Ok(())
# }
一旦你有了根,你可以创建一个字段,它表示一组数据值对应的派生密钥。所有要一起比较的数据都必须使用相同的字段加密,但无关的值应使用不同的字段加密。
# use enquo_core::{KeyProvider, key_provider::Static, Root, Error};
# use rand::{Rng, SeedableRng};
# use rand_chacha::ChaCha20Rng;
# use std::sync::Arc;
#
# fn main() -> Result<(), Error> {
# let key_data = ChaCha20Rng::from_entropy().gen::<[u8; 32]>();
#
# let root_key = Static::new(&key_data)?;
# let root = Root::new(Arc::new(root_key))?;
let field = root.field(b"some_relation", b"some_field_name")?;
# Ok(())
# }
要加密一个值,你需要创建一个适当类型的价值密文,提供字段以便使用正确的密钥加密该值。
# use enquo_core::{KeyProvider, key_provider::Static, Root, Error};
# use rand::{Rng, SeedableRng};
# use rand_chacha::ChaCha20Rng;
# use std::sync::Arc;
use enquo_core::datatype::Text;
# fn main() -> Result<(), Error> {
# let key_data = ChaCha20Rng::from_entropy().gen::<[u8; 32]>();
#
# let root_key = Static::new(&key_data)?;
# let root = Root::new(Arc::new(root_key))?;
# let field = root.field(b"some_relation", b"some_field_name")?;
let ciphertext = Text::new("this is some text", b"test", &field)?;
assert_eq!("this is some text", ciphertext.decrypt(b"test", &field)?);
# Ok(())
# }
所有加密数据类型都使用Serde提供序列化。
有关完整API的更多详细信息,请参阅精美的手册。
依赖关系
~4.5–6MB
~146K SLoC