117 Commits

Author SHA1 Message Date
Bryan Li
4b56a178ab merged 2023-08-11 13:15:11 -07:00
Bryan Li
f5b62b4192 merge 1/2 2023-08-11 12:26:55 -07: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
Bryan Li
2377d3287f addressed some code review changes 2023-07-31 10:27:59 -07:00
mliu24
f66aa69b62 basically the whole debugger project (#269)
* added support for group id's in nodeinfo struct and modified new/add_node methods

* addedd support for group counter to fheprograms

* added support for group ids for zkp backend

* aded support for group id's in fhe and zkp programs

* finished support for group id in zkp programs

* added new function signature for creating new nodeinfo with debugger featuer on

* updated zkp jit compilation to support constructing nodes with group id

* added support for node group ids in fhe compiler

* format changes

* fixed clippy issues

* added a stacktrie struct

* added a function to add a stack trace. need to figure outhow to get group id's into the stacktrie

* Update rust.yml

* style fixes

* added structure for StackFrameLookup and stackframes trait

* support to add stack traces and updated dependencies

* clippy fixes

* clippy fixes

* created stackframeinfo struct, added get_stack_trace which has lifetime issues

* clippy fixes

* implementation for stackframelookup

* insertion and getting work

* formatting and documentation

* updated stackframeinfo constructor to not panic with no values

* changed it so trie stores stackframeinfo instead of backtraces

* format and clippy fixes

* started some work with fheprograms

* single frame insert test

* single backtrace insert

* single backtrace insert

* fixed minor loggic error in test single backtrace insert

* some more tests

* programcontext/programgroup structs defined

* more programgroup

* added a get for stackframelookup, added clone to programgroup

* infrastructure for groups

* fixed references of .0 into .graph and enabled conditional compilation of debugging structs, but this broke fhe_program proc macro

* cleaned up some conditional compilation logic in context, also formatting fixes

* fixed context compilation errors

* fixed dependency issues and can now return graph information of basic fhe program

* format fixes

* remains to figure out how to display graphs with rationals

* can display graph for given rational operations

* displays serialized graph strings

* added run_impl and debug_fhe_program, also added debuginfo struct and added parameter for secret key in run unchecked

* fixed compilation errors for tests in run file, now does tests with secret key

* updated measuredmodel call to run_program_unchecked with a secret key

* clippy and format fixes

* doc fixes

* fixed some fhe program tests based on changes to compilationresult data structure

* format fixes

* modified tests in validation.rs

* sessions file + data structure:

* documentation for sessions

* documentation, removed some unused dependencies

* format and clippy fix

* moved sessions to runtime

* rick's coimments/changes

* implemented set_data, also added calls to set_data in run unchecked

* fixed compilation rrors in tests for run.rs

* more compilation error fixes + moved fhe-debugger into debugger module

* added fhe-debugger files as modules

* fxied remaining compilation issues in run

* removed nodes file from debugger

* created start web server function

* fixed some depenendcy issues to enable debugger feature across workspace, now going to fix compilation results/add support with debugger feature

* enabled debugger in zkp backend

* compilation errors in graph construction test, enabled debugger feature in sunscreen_fhe_program

* fixed more compilation errors and enabled debugger feature in sunscreen_backend. next step: figure out secret vs privatekey and change debug_fhe_program accordingly

* modified visibility of sealsecretkey in privatekey struct to be public

* format

* modified debug_fhe_program to not return anything

* fixed compilation errors based on conditional dependencies when debugger not enabled

* fixed errors due to conditional compilation with debugger feature in fhe_program_tests

* managed to get webserver up and running. remains to figure out how to get the graph data

* can now support dynamic paths but currently web server is not set up in a way that you can debug multiple programs

* moved code from sessions.rs to server.rs

* server file

* added support for cors so frontend can now grab data from backend. currently it only grabs a string that allows the frontend to construct a graph

* proc macro updates to be able to get source code of an fhe program with .source()

* added support for fhe program source code. in debug mode, run.rs tests wont compile because debug_fhe_program now asks for 7 arguments instead of 6

* fmt fixes

* clippy fixes

* get fhe node data impleented, still doesnt ocmpile. need to figure out how to handle sealdata stuff

* fixed async issues, now can support multiple sessions

* rick fixes

* updated fhe_program_tests to have metadata fields and group_id. need to fix construction of graph so that group ids are updated

* fhe program tests now pass with debugger feature enabled, updated group counter when assigning ids to nodes

* passes tests with debugger feature enabled and disabled

* fmt fixes

* clippy fixes

* addressed race conditions in run tests, now pass those tests with and without debugger feature

* removed changes to settings.json

* removed unncessary comments from fhe_program_tests

* removed some unnecessary TODO

* removed more unnecessary comments

* removed group struct, defined Group type as a String

* modifying interface for lookup data structures

* removed unnecessary prints

* remove more prints

* removed secretkey from debug_fhe_program, now uses privatekey instead

* removed conditional compilation from a functoin that shouldnt have it

* removed group counter updates from common_subexpression_elimination test. graphs can be isomorphic even if group id's don't match up exactly

* clippy and fmt

* undid some clippy changes so that code compiles

* error handling for get_fhe_node_data and implemented idlookup trait for stackframelookup

* stack id for nodeinfo

* stack id for node info and context changes

* removed serialization of sealdata, instead created serializedsealdata struct which contains debugger info about cipher/plaintexts

* removed unnecessary todos

* skeleton for getting cipher/plaintext data

* modified visibility of Error field in lookup, cloned some values in server

* sunscreen fhe znd zkp support for stack ids on ndoes

* fmt

* clippy

* can now see dummy node data

* removed some old/dead code from server and added backtrace to compiler crate

* dependency updates

* put multiplicative depth on nodeinfo, also updated operationtrait

* enabled internal tagging with conditional compilation with debugger feature

* compile fixes, added multiplicative_depth field to nodeinfos

* attempted to allow for multiplicative depth ... this currently does not work. also group ids dont seem to be assigned correctly

* two changes: modified Operation enum to be struct instead of tuple variants and fixed associated compilation errors, also removed multiplicaitve depth field from NOdeInfo and fixed corresponding compilation errors

* more compilation errors for struct variants of Operatio nenum fixed

* moved group and stack counters off context and onto metadata ... maybe should move this onto the lookup structs themselves?

* skeleton for idlookup trait for grouplookup

* moved lookup to compiler ocmmon from runtime

* moved lookup into src

* documentation for lookup

* attempting naive multiplicative depth algorithm

* removed get_mult_depth that didn't function, currently returns 0

* can display coefficients for plaintexts

* moved build to sunscreen_runtime directory from debugger

* WIP

* rick's changes

* fixed webpack errors

* progress towards coefficients

* Don't ship dist folder

* WIP

* fmt changes. also can display coefficients of plaintexts

* attempting to debug ciphertext coefficient info

* removed groups.rs file

* conditional compilation for dependency import to stop clippy complaints

* more clippy fixes

* more conditional compilation for dependncies

* fmt

* implemented default trait for lookup structures

* combine 2 dependency imports

* just allowed for unused imports

* updated serialization types

* changed serializable enums to be internally tagged

* capturing stack traces

* format

* added sleep calls in infinite loop to reduce cpu usage

* remove default cals from chi_sq example

* format

* allow for insertion of ids/keys in lookup structure

* added a 2nd call to mad for debugging example. also inserted some dummy keys for stack lookup

* attempts to debug decryption of coefficients with seal:

* removed dbg from seal file

* added a stacktrace endpoint, but it doesnt display anything useful yet

* fmt

* can now display coefficients

* clippy fix

* fmt

* noise budget is nullable

* named cipher and plaintexts

* removed some unnecesasry comments

* error handling for run program unchecked

* remove internal tagging so that literals work

* format

* unnecessary comments removed

* get_mult_depth works in some cases, need to write tests

* singular empty etst

* attempt to redesign stack frame lookup -- this is a very inefficeint way of doing it, but should work

* added support to capture stack traces, but there's an issue with the data not being saved so it can be served to the frontend

* fmt

* clippy

* default implementation for gorup and stacklookup

* fmt

* can now display stack traces

* fmt

* clippy

* fmt

* refactoring code to change serializedsealdata to bfvnodetype

* comment out dead code

* start zkp sessions

* moved decrypt seal logic to a new function

* wrote polynomial multiplication functions

* zkpsession and imports

* overflow for polynomials

* overflow can now only be true for ciphertexts that are the output of an arithmetic operation

* examples for overflow and chaining

* remove some unnecssary imports

* server now supports serializing zkp data

* zkp now returns bigint as a string

* set up params that cause noise budget exceeded in debugger example

* remove tests from lookup

* added name metadata to zkp programs

* updated construction of expected graphs for fhe_program_tests

* modified tests for validation to account for struct variants

* added session provider

* SessionProvider

* added gorup and stack id for some validation tests

* Fix a test

* Fix tests

* Fix feature plumbing

* Fix lookup

* fuck off

* changed generic to Box of dyn

* functional zkp debugger

* clippy

* clippy

* fmt

* clippy

* fmt

* janky a solution to conditional compilation keeping variables out of scope

* fmt

* conditioanl compilation for debugdata

* remove print debug from measured model

* remove unnecssary comment

* remove todo

* removed serialize function for stackframeinfo, instead hashed it

* remove unnecessary conditional compilation in common subexpression eliminioatno

* change fhe program macro to preserve white space

* changed get_mult_depth to iterative bfs

* add functions to modularize overflow calculation

* overflow code now compiles but needs to actually be implemented

* can extract coefficients from innerplaintext

* implemented overflow detection for fhe programs

* modified checks for overflow

* remove internal tagging comments

* clippy

* removed unwrap or else and turned into expect

* clippy actually likes unwrap or else

* fmt

* gate some imports

* fix gating issues

* removed some gating

* removed gating from debugger module; zkp runtime uses it

* fmt

---------

Co-authored-by: Bryan Li <bryanyuezhouli@gmail.com>
Co-authored-by: rickwebiii <rick.weber.iii@gmail.com>
Co-authored-by: Bryan Li <51716784+bryanyli@users.noreply.github.com>
2023-07-30 18:14:22 -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
Matthew Liu
5842a9f05b updated a toy example to display text from backend 2023-06-22 17:02:12 -07:00
Matthew Liu
e40a9940f6 building backend now builds frontend 2023-06-22 15:02:33 -07:00
Matthew Liu
76557c30b7 updated cargo.toml file to include fhe-debugger, updated submodules 2023-06-21 15:10:44 -07: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
rickwebiii
d03207e67e Rweber/zkp (#196)
Add BFV playground, Polynomial addition
2022-12-19 12:00:23 -08:00
rickwebiii
18fb031953 Rweber/zkp (#195)
Can now use #[constant] and #[public] inputs
2022-12-09 16:21:34 -08:00
rickwebiii
85e3a60e35 Rweber/zkp (#194)
Add to_unsigned gadget and test
2022-12-08 17:57:31 -08:00
rickwebiii
2e5b7e834b Rweber/refactor (#190)
Refactor sunscreen_fhe_program to use types and functions in sunscreen_compiler_common
2022-11-30 18:02:45 -08:00
rickwebiii
72f00391ea Rweber/zkp (#188)
ZKP works E2E
2022-11-29 13:47:29 -08:00
rickwebiii
f79e2312af Rweber/clippy (#189)
Improve Errors (use thiserror and reduce their size). Fix clippy errors.
2022-11-29 13:18:45 -08:00
rickwebiii
d847021858 Rweber/zkp (#186)
Add ZKP backend for Bulletproofs
2022-11-18 20:06:48 -08:00
rickwebiii
28ea71118f Rweber/zkp (#185)
Start ZKP compiler and refactor common code.
2022-11-15 12:43:04 -08:00
rickwebiii
390a27b1cd Refactor some code to be shared (#184)
* Refactor some code to be shared

* Kill warnings

* Regenerate launch.json

* Add documentation

* CR comments

* Fix doc issues

* cargo fmt

* CR comments

* CR comments

* Fix warning

* argh clippy
2022-11-11 15:56:09 -08:00
rickwebiii
0ca0052018 Rweber/release 0.7 (#178)
* 0.7 release

* Fix docs links
2022-10-17 14:56:27 -07:00
rickwebiii
c2b1850fab Rweber/maint (#176)
Fix security vulnerability warning for unmaintained ansi_term.
2022-09-22 11:55:59 -07:00
rickwebiii
989fe1c578 Update mean/variance example to use serialization (#173)
* Update mean/variance example to use serialization

* cargo fmt
2022-09-02 15:38:03 -07:00
rickwebiii
18c9b62b1d Add mean_variance example 2022-08-09 14:38:13 -07:00
rickwebiii
2e70480e63 Add benchmark (#163) 2022-08-04 11:48:02 -07:00