131 Commits

Author SHA1 Message Date
rickwebiii
abfe2fed57 Rweber/overlay size (#394)
Add methods to check if entities are correct size. Update aligned-vec version to incorporate upstreamed security fix.
2025-03-04 13:27:04 -08:00
rickwebiii
08b1660346 add some documentation (#391)
Co-authored-by: Rick Weber <rick@sunscreen.tech>
2025-01-17 23:50:05 +00:00
rickwebiii
fbfdce1d9c Rweber/simd (#371)
SIMD-ize vector Complex<f64>
2024-03-08 16:53:24 -08:00
rickwebiii
f773923b4b Rweber/tfhe mem (#368)
Simplify `Scratch` type.
2024-03-04 23:25:46 +00:00
Sam Tay
d2dfd45347 Misc updates from linked-docs (#364) 2024-03-01 01:47:49 +00:00
rickwebiii
3c4e08b0cb Parallel iteration (#354) 2024-02-21 18:33:17 -08:00
Sam Tay
cb20e8d030 Decrypt statements (#348) 2024-02-20 22:55:49 +00:00
Ryan Orendorff
37e884ef48 Bump cargo deps (#350) 2024-02-16 22:44:40 -07:00
Ryan Orendorff
dc8fdeab81 Sunscreen's TFHE implementation (#349)
Co-authored-by: Sam Tay <samctay@pm.me>
2024-02-16 22:29:35 +00:00
Sam Tay
191536e5e7 Avoid extra CI builds (#340) 2024-02-08 00:22:36 +00:00
Sam Tay
a4f1cf6647 Link unsigned and rational FHE types (#341) 2024-02-05 14:22:10 -05:00
Sam Tay
18ea59b542 Proof linking (#339) 2024-02-03 20:01:24 +00:00
Ryan Orendorff
66c5702641 Add combinations, stats, and security functions (#334) 2023-12-11 13:47:26 -07:00
Ryan Orendorff
bc7cfb2ce2 Linked prove and verify functions (#328) 2023-10-25 16:20:20 -06:00
Ryan Orendorff
f341e89d02 Remove unused imports (#331) 2023-10-25 14:42:51 -06:00
Ryan Orendorff
85f68eb3ce SDLP and R1CS BP shared inputs (#324) 2023-10-18 16:16:46 -06:00
rickwebiii
08fbebf5ea Rweber/zq (#313)
Replace ark-ff in logproof with Sunscreen Ring traits.
2023-09-12 00:03:08 +00:00
Sam Tay
d9f64f4283 Bump all versions to 0.8.1 (#314) 2023-09-11 21:39:56 +00:00
Sam Tay
cbfa03bafe Fix odd type inference issue (#312) 2023-09-06 14:02:16 -04:00
rickwebiii
aa17f7fd24 Rweber/emscripten (#309) 2023-08-28 14:43:09 +00:00
Sam Tay
cbbe0bafbe Bump all versions to 0.8.0 (#305) 2023-08-22 19:40:54 -04:00
Ryan Orendorff
c0ef426ca0 Export components used in BFV, prove BFV is valid in SDLP (#285) 2023-08-10 12:13:29 -06:00
rickwebiii
480453fe13 Update dependencies (#296)
Update dependencies
2023-08-04 22:44:23 -07:00
rickwebiii
641bf96bd4 Rweber/deps (#295)
Move all deps to [workspace.dependencies]
2023-08-04 17:23:06 -07:00
rickwebiii
7049199a29 Rweber/zq (#293)
Add Barret reduction for Ring type
2023-08-04 14:36:32 -07:00
Sam Tay
badb8f9c8f ZKP tweaks (#279)
* Export type alias for bulletproof backend fields

Also, keep bulletproof stuff namespaced to a `bulletproofs` module.

* Change sudoku to use pub over const

* Docs updates

* Rename / clean up sudoku

* Export `Proof` type

Basically required for being able to deserialize a proof

* Add zkp/serde workspace example

* Drive by cleaning

* Exports necessary for gadget impls

* Rename compute_inputs to compute_hidden_inputs

* Add prove/verify builders

* Export the builder types

This isnt strictly necessary but it would be weird for these to not show up in the cargo docs

* Clippy fix

* Add helper .compile() & .runtime() methods to fhe prog fns

I do wonder if these should be defined in a separate trait, just so that they don't live next to the more internal functions in documentation.

* Use new swag to simplify the front-facing api docs example

* Add some whitespace

* Switch to an extension trait

* Add an extension to ZkpProgramFn

* Take an owned ZkpBackend, rather than reference

Its typical to have the caller handle cloning, rather than taking a reference, requiring Clone impl, and forcing clone. Plus, as of now the only backend is a zero size null struct, so nothing to be gained by using a reference. It also just looks weird to always pass `&BulletproofsBackend::new()`

* Update sudoku to use new swag

* Target second attribute in multi attribute error

* Enforce ordering zkp inputs: constants,public,private

Honestly this feels a little unnatural to me. Might want to reverse: private, public, constant and then change all the prove/verify methods to that ordering

* Build whitelist example in CI

* Reorder constant->public->private to private->public->constant

* Fix trailing ws

* Fix example

* Make .runtime() more consistent with .compile()

* Get rid of some boilerplate impls

* Add custom zkp type example

* Move example run checks into example tests

Should speed up CI a bit

* Change whitelist -> allowlist
2023-07-18 15:15:51 -04:00
Ryan Orendorff
a91c7291fb Add CSV stdout for logproof bench (#274) 2023-07-06 10:36:27 -06:00
Sam Tay
5faf981178 Hackathon; or, various compiler improvements (#272)
* Misc doc fixes

* Fix sunscreen zkp exports

* Fix broken api doc reference

* Add starter zkp example

* Use ZkpRuntime::new in sudoku example

* Use ? over unwrap in zkp examples

* Refactor pattern matching

No functionality changes

* Disallow `mut` args in fhe/zkp programs

* Play around with allowing cipher|plain values

* Allow user-declared plain|cipher values

NOTE: Not fully implemented. Will not work on Rational types until we
factor out literal->plaintext into a proper trait.

This allows, e.g.

```rust
fn simple_sum(a: Cipher<Signed>, b: Cipher<Signed>) -> Cipher<Signed> {
    let mut sum = fhe_var(0);
    sum = sum + a;
    sum = sum + b;
    fhe_out(sum)
}
````

* Refactor array::output()

* More targeted compiler error messages on invalid return values

* Add option for var.into() rather than fhe_out(var)

* Fix incorrect macro invocation

* Add trait for inserting const as plaintext

* Impl all arithmetic operations for indeterminate nodes

* Offer an `fhe_var!` macro

* Offer a zkp_var! macro

* Offer a (safe) debug impl for zkp program nodes

* Fix tests

* Add test for fhe_var!

* Simplify tf out of sudoku

* Simplify fhe input() codegen

* Marginally better compiler error messages on invalid fhe program arg types

* Fix error for fhe program argument attributes

* Throw appropriate compiler error on generics

* Silence clippy warnings in generated code

These I think are typically ignored by default when consuming proc macros but might as well be explicit

* Fixup quote_spanned invocations

Unsure how important this is, but see here: https://docs.rs/quote/latest/quote/macro.quote_spanned.html#syntax

* Automatically call `.into()` on fhe prog return values

* Factor fhe_program_impl

* Further factor fhe_program_impl

So that token generation happens in helper methods, and the ultimate output() func is readable

* Fix doctests

* Fix clippy warnings

* Remove TODOs

* Add missing example runs to CI

* Oops: fix 232 > 64

* Allow arbitrary expressions in fhe_var!

* Use custom "into" to support impls on []

* Support explicit #[private] params

* Remove `backend = "bulletproofs"` attribute

* Address PR reveiw
2023-07-05 17:07:21 -05:00
Sam Tay
036b782a69 Misc typos / Fix lib exports (#265)
* Misc doc fixes

* Fix sunscreen zkp exports

* Fix broken api doc reference
2023-06-27 19:43:20 -06:00
Bryan Li
82d83cf238 Added Sudoku ZKP Example (#253)
* added sudoku zkp example

* edited main

* fixed style

* refactored code

* fixed formatting

* fixed lint
2023-06-13 10:36:38 -07:00
Sam Tay
66211f75b1 Fix 64-bit pointer assumptions (#243)
* Fix 64-bit pointer assumptions

* Appease clippy

* Bump proc-macro2

(Fixes wasm build)
2023-05-30 11:59:20 -07:00
rickwebiii
09ecc0a57d Update syn and a bunch of packages (#242) 2023-05-24 15:28:52 -07:00
rickwebiii
1089e00d1b Separate OpenCL shaders into multiple files (#239)
* Separate OpenCL shaders into multiple files
2023-05-12 17:06:53 -07:00
Sam Tay
60b345cc5e Make gadgets sync (#237)
* Make gadgets send/sync

This lets Application types be send/sync

* Bump curve25519 to appease clippy

* Speed up unsigned tests a tiny bit
2023-05-01 17:45:25 -07:00
Sam Tay
ace6d97140 Add a bfv::Unsigned type (#236)
* Add a bfv::Unsigned type

* Fix decoding from polynomial?

* Add prop test for addition

* Proptest sub, mul, and mixed cipher/plaintexts

* Reduce code dupe

* Add test for 0 - 1

* Add a few more tests
2023-04-24 11:57:33 -07:00
rickwebiii
ee5d6d9cdc Rweber/cuda (#235)
CUDA implementation
2023-04-10 19:54:24 +01:00
rickwebiii
9785670ae0 Cargo update (#233) 2023-03-30 12:59:01 -07:00
rickwebiii
06e9c1cb2b Rweber/opencl (#230)
OpenCL implementation of curve25519 operations
2023-03-22 14:30:45 -07:00
rickwebiii
af4849ddb5 Time shield circuits (#224)
* Time shield/unshield circuits
2023-03-08 19:19:59 -08:00
rickwebiii
d29f18fbee Rweber/zkp (#221)
* Speed up scalar inversion, move linear relation to criterion benchmark
2023-03-08 16:29:26 -08:00
rickwebiii
55dfdda88c Rweber/zkp (#220)
WebGPU implementation WIP
2023-03-05 16:39:31 -08:00
rickwebiii
6f713d6750 Rweber/zkp (#218)
Private tx range proof
2023-03-02 15:16:45 -08:00
rickwebiii
6604afbf95 ZKP array inputs (#217)
* ZKP array inputs
2023-03-01 13:33:14 -08:00
rickwebiii
745b9b6996 Rweber/zkp (#216)
* GPU accelerate Scalar inversion
* CPU-GPU work sharing
2023-02-28 09:16:07 -08:00
rickwebiii
ee830d6d70 Rweber/zkp (#215)
Bring logproofs into monorepo
2023-02-17 14:44:03 -08:00
rickwebiii
48ebc52576 Rweber/zkp (#211)
Metal GPU accelerated scalar multiplication
2023-02-16 14:31:55 -08:00
rickwebiii
a8be112cb8 Randomness range proof in R1CS now correct (#208)
* Randomness range proof now correct
2023-01-25 11:06:13 -08:00
rickwebiii
61032735f8 Rweber/zkp (#205)
Can create pure R1CS BFV proof.
2023-01-20 13:38:04 -08:00
rickwebiii
2f9acb39a7 Upgrade deps (#201) 2023-01-15 14:01:07 -08:00
rickwebiii
38a67b7d97 Can encode negative numbers onto native fields (#198)
* Can encode negative numbers onto native fields
2023-01-05 15:38:18 -08:00