6个版本 (3个破坏性更新)

0.8.1 2023年9月11日
0.8.0 2023年8月23日
0.7.0 2022年10月17日
0.6.1 2022年7月14日
0.5.0 2022年5月17日

加密学类别中排名#164

AGPL-3.0-only

14MB
267K SLoC

C++ 102K SLoC // 0.1% comments C 92K SLoC // 0.2% comments Visual Studio Project 21K SLoC Rust 16K SLoC // 0.2% comments C# 14K SLoC // 0.3% comments Python 10K SLoC // 0.3% comments Shell 3K SLoC // 0.2% comments Ada 1.5K SLoC // 0.2% comments GNU Style Assembly 1.5K SLoC // 0.3% comments Assembly 1.5K SLoC // 0.2% comments Pascal 1K SLoC // 0.2% comments Bazel 1K SLoC // 0.1% comments Visual Studio Solution 878 SLoC Bitbake 526 SLoC Batch 169 SLoC Lua 68 SLoC // 0.0% comments Automake 33 SLoC Prolog 19 SLoC NuGet Config 3 SLoC ReScript 3 SLoC Forge Config 1 SLoC // 0.8% comments

简介

Sunscreen是一个使用完全同态加密构建隐私保护应用的生态系统。

本项目遵循GNU AGPLv3许可协议。如果您需要为您的应用程序获取不同版本的许可,请与我们联系。

警告! 此库仅供实验使用。它尚未经过外部审计,且 适用于生产环境。

示例

下面,我们来看一下如何将两个加密整数相乘。

use sunscreen::{
    fhe_program,
    types::{bfv::Signed, Cipher},
    Compiler, Error, FheRuntime,
};

#[fhe_program(scheme = "bfv")]
fn simple_multiply(a: Cipher<Signed>, b: Cipher<Signed>) -> Cipher<Signed> {
    a * b
}

fn main() -> Result<(), Error> {
    let app = Compiler::new()
        .fhe_program(simple_multiply)
        .compile()?;

    let runtime = FheRuntime::new(app.params())?;

    let (public_key, private_key) = runtime.generate_keys()?;

    let a = runtime.encrypt(Signed::from(15), &public_key)?;
    let b = runtime.encrypt(Signed::from(5), &public_key)?;

    let results = runtime.run(app.get_fhe_program(simple_multiply).unwrap(), vec![a, b], &public_key)?;

    let c: Signed = runtime.decrypt(&results[0], &private_key)?;

    assert_eq!(c, 75.into());

    Ok(())
}

文档

获取帮助

有关Sunscreen的问题,请加入我们的Discord

依赖项

~12–18MB
~284K SLoC