Code Monkey home page Code Monkey logo

accumulator's Introduction

accumulator

Cryptographic accumulators in Rust, implemented over a generic group interface. Batteries (RSA and class group implementations) included!

Installation

# Cargo.toml
[dependencies]
accumulator = { git = "https://github.com/cambrian/accumulator.git", tag = "v0.2.1" }

Docs

Available here, and feel free to reach out with any questions.

Demo

We have a proof-of-concept for stateless Bitcoin nodes.

Contributing

Please see our contribution guide. We are looking for long-term maintainers!

accumulator's People

Contributors

alanefl avatar eddiew avatar plra avatar whaatt avatar zhuchengyu04 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

accumulator's Issues

Cannot compile on macOS

Sorry for the second issue

Here is a MWE for my issue on macOS 10.15.4

Run cargo new accumulatortest

Add accumulator dependency to cargo.toml

the last few lines of the terminal output are:

libtool: link: gcc -O2 -pedantic -fomit-frame-pointer -m64 -o t-toom52 t-toom52.o ../../tests/.libs/libtests.a /Users/boltonbailey/Documents/MyDocuments/UIUC/Classes/ThirdYear/Spring/ECE598PV/ece598pv-sp2020/target/debug/build/gmp-mpfr-sys-8e4a473b9dda8544/out/build/gmp-build/.libs/libgmp.a ../../.libs/libgmp.a
libtool: link: gcc -O2 -pedantic -fomit-frame-pointer -m64 -o t-toom44 t-toom44.o ../../tests/.libs/libtests.a /Users/boltonbailey/Documents/MyDocuments/UIUC/Classes/ThirdYear/Spring/ECE598PV/ece598pv-sp2020/target/debug/build/gmp-mpfr-sys-8e4a473b9dda8544/out/build/gmp-build/.libs/libgmp.a ../../.libs/libgmp.a
libtool: link: gcc -O2 -pedantic -fomit-frame-pointer -m64 -o t-toom43 t-toom43.o ../../tests/.libs/libtests.a /Users/boltonbailey/Documents/MyDocuments/UIUC/Classes/ThirdYear/Spring/ECE598PV/ece598pv-sp2020/target/debug/build/gmp-mpfr-sys-8e4a473b9dda8544/out/build/gmp-build/.libs/libgmp.a ../../.libs/libgmp.a
libtool: link: gcc -O2 -pedantic -fomit-frame-pointer -m64 -o t-toom53 t-toom53.o ../../tests/.libs/libtests.a /Users/boltonbailey/Documents/MyDocuments/UIUC/Classes/ThirdYear/Spring/ECE598PV/ece598pv-sp2020/target/debug/build/gmp-mpfr-sys-8e4a473b9dda8544/out/build/gmp-build/.libs/libgmp.a ../../.libs/libgmp.a
libtool: link: gcc -O2 -pedantic -fomit-frame-pointer -m64 -o t-toom54 t-toom54.o ../../tests/.libs/libtests.a /Users/boltonbailey/Documents/MyDocuments/UIUC/Classes/ThirdYear/Spring/ECE598PV/ece598pv-sp2020/target/debug/build/gmp-mpfr-sys-8e4a473b9dda8544/out/build/gmp-build/.libs/libgmp.a ../../.libs/libgmp.a
/bin/sh ../../libtool --tag=CC --mode=link gcc -O2 -pedantic -fomit-frame-pointer -m64 -no-install -o t-toom8h t-toom8h.o ../../tests/libtests.la ../../libgmp.la
/bin/sh ../../libtool --tag=CC --mode=link gcc -O2 -pedantic -fomit-frame-pointer -m64 -no-install -o t-toom2-sqr t-toom2-sqr.o ../../tests/libtests.la ../../libgmp.la
libtool: link: gcc -O2 -pedantic -fomit-frame-pointer -m64 -o t-toom62 t-toom62.o ../../tests/.libs/libtests.a /Users/boltonbailey/Documents/MyDocuments/UIUC/Classes/ThirdYear/Spring/ECE598PV/ece598pv-sp2020/target/debug/build/gmp-mpfr-sys-8e4a473b9dda8544/out/build/gmp-build/.libs/libgmp.a ../../.libs/libgmp.a
/bin/sh ../../libtool --tag=CC --mode=link gcc -O2 -pedantic -fomit-frame-pointer -m64 -no-install -o t-toom3-sqr t-toom3-sqr.o ../../tests/libtests.la ../../libgmp.la
/bin/sh ../../libtool --tag=CC --mode=link gcc -O2 -pedantic -fomit-frame-pointer -m64 -no-install -o t-toom4-sqr t-toom4-sqr.o ../../tests/libtests.la ../../libgmp.la
/bin/sh ../../libtool --tag=CC --mode=link gcc -O2 -pedantic -fomit-frame-pointer -m64 -no-install -o t-toom6-sqr t-toom6-sqr.o ../../tests/libtests.la ../../libgmp.la
libtool: link: gcc -O2 -pedantic -fomit-frame-pointer -m64 -o t-toom63 t-toom63.o ../../tests/.libs/libtests.a /Users/boltonbailey/Documents/MyDocuments/UIUC/Classes/ThirdYear/Spring/ECE598PV/ece598pv-sp2020/target/debug/build/gmp-mpfr-sys-8e4a473b9dda8544/out/build/gmp-build/.libs/libgmp.a ../../.libs/libgmp.a
/bin/sh ../../libtool --tag=CC --mode=link gcc -O2 -pedantic -fomit-frame-pointer -m64 -no-install -o t-toom8-sqr t-toom8-sqr.o ../../tests/libtests.la ../../libgmp.la
libtool: link: gcc -O2 -pedantic -fomit-frame-pointer -m64 -o t-toom6h t-toom6h.o ../../tests/.libs/libtests.a /Users/boltonbailey/Documents/MyDocuments/UIUC/Classes/ThirdYear/Spring/ECE598PV/ece598pv-sp2020/target/debug/build/gmp-mpfr-sys-8e4a473b9dda8544/out/build/gmp-build/.libs/libgmp.a ../../.libs/libgmp.a
/bin/sh ../../libtool --tag=CC --mode=link gcc -O2 -pedantic -fomit-frame-pointer -m64 -no-install -o t-div t-div.o ../../tests/libtests.la ../../libgmp.la
/bin/sh ../../libtool --tag=CC --mode=link gcc -O2 -pedantic -fomit-frame-pointer -m64 -no-install -o t-mul t-mul.o ../../tests/libtests.la ../../libgmp.la
libtool: link: gcc -O2 -pedantic -fomit-frame-pointer -m64 -o t-toom2-sqr t-toom2-sqr.o ../../tests/.libs/libtests.a /Users/boltonbailey/Documents/MyDocuments/UIUC/Classes/ThirdYear/Spring/ECE598PV/ece598pv-sp2020/target/debug/build/gmp-mpfr-sys-8e4a473b9dda8544/out/build/gmp-build/.libs/libgmp.a ../../.libs/libgmp.a
libtool: link: gcc -O2 -pedantic -fomit-frame-pointer -m64 -o t-toom8h t-toom8h.o ../../tests/.libs/libtests.a /Users/boltonbailey/Documents/MyDocuments/UIUC/Classes/ThirdYear/Spring/ECE598PV/ece598pv-sp2020/target/debug/build/gmp-mpfr-sys-8e4a473b9dda8544/out/build/gmp-build/.libs/libgmp.a ../../.libs/libgmp.a
libtool: link: gcc -O2 -pedantic -fomit-frame-pointer -m64 -o t-toom4-sqr t-toom4-sqr.o ../../tests/.libs/libtests.a /Users/boltonbailey/Documents/MyDocuments/UIUC/Classes/ThirdYear/Spring/ECE598PV/ece598pv-sp2020/target/debug/build/gmp-mpfr-sys-8e4a473b9dda8544/out/build/gmp-build/.libs/libgmp.a ../../.libs/libgmp.a
libtool: link: gcc -O2 -pedantic -fomit-frame-pointer -m64 -o t-toom3-sqr t-toom3-sqr.o ../../tests/.libs/libtests.a /Users/boltonbailey/Documents/MyDocuments/UIUC/Classes/ThirdYear/Spring/ECE598PV/ece598pv-sp2020/target/debug/build/gmp-mpfr-sys-8e4a473b9dda8544/out/build/gmp-build/.libs/libgmp.a ../../.libs/libgmp.a
/bin/sh ../../libtool --tag=CC --mode=link gcc -O2 -pedantic -fomit-frame-pointer -m64 -no-install -o t-mullo t-mullo.o ../../tests/libtests.la ../../libgmp.la
/bin/sh ../../libtool --tag=CC --mode=link gcc -O2 -pedantic -fomit-frame-pointer -m64 -no-install -o t-sqrlo t-sqrlo.o ../../tests/libtests.la ../../libgmp.la
libtool: link: gcc -O2 -pedantic -fomit-frame-pointer -m64 -o t-toom6-sqr t-toom6-sqr.o ../../tests/.libs/libtests.a /Users/boltonbailey/Documents/MyDocuments/UIUC/Classes/ThirdYear/Spring/ECE598PV/ece598pv-sp2020/target/debug/build/gmp-mpfr-sys-8e4a473b9dda8544/out/build/gmp-build/.libs/libgmp.a ../../.libs/libgmp.a
libtool: link: gcc -O2 -pedantic -fomit-frame-pointer -m64 -o t-toom8-sqr t-toom8-sqr.o ../../tests/.libs/libtests.a /Users/boltonbailey/Documents/MyDocuments/UIUC/Classes/ThirdYear/Spring/ECE598PV/ece598pv-sp2020/target/debug/build/gmp-mpfr-sys-8e4a473b9dda8544/out/build/gmp-build/.libs/libgmp.a ../../.libs/libgmp.a
/bin/sh ../../libtool --tag=CC --mode=link gcc -O2 -pedantic -fomit-frame-pointer -m64 -no-install -o t-mulmod_bnm1 t-mulmod_bnm1.o ../../tests/libtests.la ../../libgmp.la
/bin/sh ../../libtool --tag=CC --mode=link gcc -O2 -pedantic -fomit-frame-pointer -m64 -no-install -o t-sqrmod_bnm1 t-sqrmod_bnm1.o ../../tests/libtests.la ../../libgmp.la
/bin/sh ../../libtool --tag=CC --mode=link gcc -O2 -pedantic -fomit-frame-pointer -m64 -no-install -o t-mulmid t-mulmid.o ../../tests/libtests.la ../../libgmp.la
libtool: link: gcc -O2 -pedantic -fomit-frame-pointer -m64 -o t-div t-div.o ../../tests/.libs/libtests.a /Users/boltonbailey/Documents/MyDocuments/UIUC/Classes/ThirdYear/Spring/ECE598PV/ece598pv-sp2020/target/debug/build/gmp-mpfr-sys-8e4a473b9dda8544/out/build/gmp-build/.libs/libgmp.a ../../.libs/libgmp.a
/bin/sh ../../libtool --tag=CC --mode=link gcc -O2 -pedantic -fomit-frame-pointer -m64 -no-install -o t-hgcd t-hgcd.o ../../tests/libtests.la ../../libgmp.la
libtool: link: gcc -O2 -pedantic -fomit-frame-pointer -m64 -o t-mul t-mul.o ../../tests/.libs/libtests.a /Users/boltonbailey/Documents/MyDocuments/UIUC/Classes/ThirdYear/Spring/ECE598PV/ece598pv-sp2020/target/debug/build/gmp-mpfr-sys-8e4a473b9dda8544/out/build/gmp-build/.libs/libgmp.a ../../.libs/libgmp.a
/bin/sh ../../libtool --tag=CC --mode=link gcc -O2 -pedantic -fomit-frame-pointer -m64 -no-install -o t-hgcd_appr t-hgcd_appr.o ../../tests/libtests.la ../../libgmp.la
/bin/sh ../../libtool --tag=CC --mode=link gcc -O2 -pedantic -fomit-frame-pointer -m64 -no-install -o t-matrix22 t-matrix22.o ../../tests/libtests.la ../../libgmp.la
libtool: link: gcc -O2 -pedantic -fomit-frame-pointer -m64 -o t-sqrlo t-sqrlo.o ../../tests/.libs/libtests.a /Users/boltonbailey/Documents/MyDocuments/UIUC/Classes/ThirdYear/Spring/ECE598PV/ece598pv-sp2020/target/debug/build/gmp-mpfr-sys-8e4a473b9dda8544/out/build/gmp-build/.libs/libgmp.a ../../.libs/libgmp.a
libtool: link: gcc -O2 -pedantic -fomit-frame-pointer -m64 -o t-mullo t-mullo.o ../../tests/.libs/libtests.a /Users/boltonbailey/Documents/MyDocuments/UIUC/Classes/ThirdYear/Spring/ECE598PV/ece598pv-sp2020/target/debug/build/gmp-mpfr-sys-8e4a473b9dda8544/out/build/gmp-build/.libs/libgmp.a ../../.libs/libgmp.a
libtool: link: gcc -O2 -pedantic -fomit-frame-pointer -m64 -o t-mulmod_bnm1 t-mulmod_bnm1.o ../../tests/.libs/libtests.a /Users/boltonbailey/Documents/MyDocuments/UIUC/Classes/ThirdYear/Spring/ECE598PV/ece598pv-sp2020/target/debug/build/gmp-mpfr-sys-8e4a473b9dda8544/out/build/gmp-build/.libs/libgmp.a ../../.libs/libgmp.a
libtool: link: gcc -O2 -pedantic -fomit-frame-pointer -m64 -o t-sqrmod_bnm1 t-sqrmod_bnm1.o ../../tests/.libs/libtests.a /Users/boltonbailey/Documents/MyDocuments/UIUC/Classes/ThirdYear/Spring/ECE598PV/ece598pv-sp2020/target/debug/build/gmp-mpfr-sys-8e4a473b9dda8544/out/build/gmp-build/.libs/libgmp.a ../../.libs/libgmp.a
/bin/sh ../../libtool --tag=CC --mode=link gcc -O2 -pedantic -fomit-frame-pointer -m64 -no-install -o t-invert t-invert.o ../../tests/libtests.la ../../libgmp.la
/bin/sh ../../libtool --tag=CC --mode=link gcc -O2 -pedantic -fomit-frame-pointer -m64 -no-install -o t-bdiv t-bdiv.o ../../tests/libtests.la ../../libgmp.la
libtool: link: gcc -O2 -pedantic -fomit-frame-pointer -m64 -o t-mulmid t-mulmid.o ../../tests/.libs/libtests.a /Users/boltonbailey/Documents/MyDocuments/UIUC/Classes/ThirdYear/Spring/ECE598PV/ece598pv-sp2020/target/debug/build/gmp-mpfr-sys-8e4a473b9dda8544/out/build/gmp-build/.libs/libgmp.a ../../.libs/libgmp.a
/bin/sh ../../libtool --tag=CC --mode=link gcc -O2 -pedantic -fomit-frame-pointer -m64 -no-install -o t-fib2m t-fib2m.o ../../tests/libtests.la ../../libgmp.la
/bin/sh ../../libtool --tag=CC --mode=link gcc -O2 -pedantic -fomit-frame-pointer -m64 -no-install -o t-broot t-broot.o ../../tests/libtests.la ../../libgmp.la
libtool: link: gcc -O2 -pedantic -fomit-frame-pointer -m64 -o t-hgcd t-hgcd.o ../../tests/.libs/libtests.a /Users/boltonbailey/Documents/MyDocuments/UIUC/Classes/ThirdYear/Spring/ECE598PV/ece598pv-sp2020/target/debug/build/gmp-mpfr-sys-8e4a473b9dda8544/out/build/gmp-build/.libs/libgmp.a ../../.libs/libgmp.a
/bin/sh ../../libtool --tag=CC --mode=link gcc -O2 -pedantic -fomit-frame-pointer -m64 -no-install -o t-brootinv t-brootinv.o ../../tests/libtests.la ../../libgmp.la
/bin/sh ../../libtool --tag=CC --mode=link gcc -O2 -pedantic -fomit-frame-pointer -m64 -no-install -o t-minvert t-minvert.o ../../tests/libtests.la ../../libgmp.la
libtool: link: gcc -O2 -pedantic -fomit-frame-pointer -m64 -o t-hgcd_appr t-hgcd_appr.o ../../tests/.libs/libtests.a /Users/boltonbailey/Documents/MyDocuments/UIUC/Classes/ThirdYear/Spring/ECE598PV/ece598pv-sp2020/target/debug/build/gmp-mpfr-sys-8e4a473b9dda8544/out/build/gmp-build/.libs/libgmp.a ../../.libs/libgmp.a
libtool: link: gcc -O2 -pedantic -fomit-frame-pointer -m64 -o t-matrix22 t-matrix22.o ../../tests/.libs/libtests.a /Users/boltonbailey/Documents/MyDocuments/UIUC/Classes/ThirdYear/Spring/ECE598PV/ece598pv-sp2020/target/debug/build/gmp-mpfr-sys-8e4a473b9dda8544/out/build/gmp-build/.libs/libgmp.a ../../.libs/libgmp.a
/bin/sh ../../libtool --tag=CC --mode=link gcc -O2 -pedantic -fomit-frame-pointer -m64 -no-install -o t-sizeinbase t-sizeinbase.o ../../tests/libtests.la ../../libgmp.la
libtool: link: gcc -O2 -pedantic -fomit-frame-pointer -m64 -o t-invert t-invert.o ../../tests/.libs/libtests.a /Users/boltonbailey/Documents/MyDocuments/UIUC/Classes/ThirdYear/Spring/ECE598PV/ece598pv-sp2020/target/debug/build/gmp-mpfr-sys-8e4a473b9dda8544/out/build/gmp-build/.libs/libgmp.a ../../.libs/libgmp.a
libtool: link: gcc -O2 -pedantic -fomit-frame-pointer -m64 -o t-bdiv t-bdiv.o ../../tests/.libs/libtests.a /Users/boltonbailey/Documents/MyDocuments/UIUC/Classes/ThirdYear/Spring/ECE598PV/ece598pv-sp2020/target/debug/build/gmp-mpfr-sys-8e4a473b9dda8544/out/build/gmp-build/.libs/libgmp.a ../../.libs/libgmp.a
/bin/sh ../../libtool --tag=CC --mode=link gcc -O2 -pedantic -fomit-frame-pointer -m64 -no-install -o t-gcd_11 t-gcd_11.o ../../tests/libtests.la ../../libgmp.la
libtool: link: gcc -O2 -pedantic -fomit-frame-pointer -m64 -o t-broot t-broot.o ../../tests/.libs/libtests.a /Users/boltonbailey/Documents/MyDocuments/UIUC/Classes/ThirdYear/Spring/ECE598PV/ece598pv-sp2020/target/debug/build/gmp-mpfr-sys-8e4a473b9dda8544/out/build/gmp-build/.libs/libgmp.a ../../.libs/libgmp.a
libtool: link: gcc -O2 -pedantic -fomit-frame-pointer -m64 -o t-fib2m t-fib2m.o ../../tests/.libs/libtests.a /Users/boltonbailey/Documents/MyDocuments/UIUC/Classes/ThirdYear/Spring/ECE598PV/ece598pv-sp2020/target/debug/build/gmp-mpfr-sys-8e4a473b9dda8544/out/build/gmp-build/.libs/libgmp.a ../../.libs/libgmp.a
/bin/sh ../../libtool --tag=CC --mode=link gcc -O2 -pedantic -fomit-frame-pointer -m64 -no-install -o t-gcd_22 t-gcd_22.o ../../tests/libtests.la ../../libgmp.la
/bin/sh ../../libtool --tag=CC --mode=link gcc -O2 -pedantic -fomit-frame-pointer -m64 -no-install -o t-gcdext_1 t-gcdext_1.o ../../tests/libtests.la ../../libgmp.la
libtool: link: gcc -O2 -pedantic -fomit-frame-pointer -m64 -o t-brootinv t-brootinv.o ../../tests/.libs/libtests.a /Users/boltonbailey/Documents/MyDocuments/UIUC/Classes/ThirdYear/Spring/ECE598PV/ece598pv-sp2020/target/debug/build/gmp-mpfr-sys-8e4a473b9dda8544/out/build/gmp-build/.libs/libgmp.a ../../.libs/libgmp.a
libtool: link: gcc -O2 -pedantic -fomit-frame-pointer -m64 -o t-minvert t-minvert.o ../../tests/.libs/libtests.a /Users/boltonbailey/Documents/MyDocuments/UIUC/Classes/ThirdYear/Spring/ECE598PV/ece598pv-sp2020/target/debug/build/gmp-mpfr-sys-8e4a473b9dda8544/out/build/gmp-build/.libs/libgmp.a ../../.libs/libgmp.a
libtool: link: gcc -O2 -pedantic -fomit-frame-pointer -m64 -o t-sizeinbase t-sizeinbase.o ../../tests/.libs/libtests.a /Users/boltonbailey/Documents/MyDocuments/UIUC/Classes/ThirdYear/Spring/ECE598PV/ece598pv-sp2020/target/debug/build/gmp-mpfr-sys-8e4a473b9dda8544/out/build/gmp-build/.libs/libgmp.a ../../.libs/libgmp.a
libtool: link: gcc -O2 -pedantic -fomit-frame-pointer -m64 -o t-gcd_11 t-gcd_11.o ../../tests/.libs/libtests.a /Users/boltonbailey/Documents/MyDocuments/UIUC/Classes/ThirdYear/Spring/ECE598PV/ece598pv-sp2020/target/debug/build/gmp-mpfr-sys-8e4a473b9dda8544/out/build/gmp-build/.libs/libgmp.a ../../.libs/libgmp.a
libtool: link: gcc -O2 -pedantic -fomit-frame-pointer -m64 -o t-gcdext_1 t-gcdext_1.o ../../tests/.libs/libtests.a /Users/boltonbailey/Documents/MyDocuments/UIUC/Classes/ThirdYear/Spring/ECE598PV/ece598pv-sp2020/target/debug/build/gmp-mpfr-sys-8e4a473b9dda8544/out/build/gmp-build/.libs/libgmp.a ../../.libs/libgmp.a
libtool: link: gcc -O2 -pedantic -fomit-frame-pointer -m64 -o t-gcd_22 t-gcd_22.o ../../tests/.libs/libtests.a /Users/boltonbailey/Documents/MyDocuments/UIUC/Classes/ThirdYear/Spring/ECE598PV/ece598pv-sp2020/target/debug/build/gmp-mpfr-sys-8e4a473b9dda8544/out/build/gmp-build/.libs/libgmp.a ../../.libs/libgmp.a
/Library/Developer/CommandLineTools/usr/bin/make check-TESTS
PASS: t-asmtype
PASS: t-aors_1
PASS: t-divrem_1
PASS: t-mod_1
PASS: t-get_d
PASS: t-fat
PASS: t-instrument
PASS: t-iord_u
PASS: t-mp_bases
PASS: t-perfsqr
PASS: t-scan
PASS: logic
PASS: t-toom22
PASS: t-toom32
PASS: t-toom33
PASS: t-toom42
PASS: t-toom43
PASS: t-toom52
PASS: t-toom53
PASS: t-toom44
PASS: t-toom62
PASS: t-toom54
PASS: t-toom2-sqr
PASS: t-toom4-sqr
PASS: t-toom63
PASS: t-toom6-sqr
PASS: t-toom3-sqr
PASS: t-toom6h
PASS: t-toom8-sqr
PASS: t-toom8h
PASS: t-sqrlo
PASS: t-mulmid
PASS: t-mullo
PASS: t-matrix22
PASS: t-hgcd
PASS: t-mulmod_bnm1
PASS: t-hgcd_appr
FAIL: t-fib2m
PASS: t-sqrmod_bnm1
PASS: t-mul
PASS: t-invert
PASS: t-minvert
PASS: t-brootinv
PASS: t-sizeinbase
PASS: t-broot
PASS: t-gcd_11
PASS: t-bdiv
PASS: t-gcd_22
PASS: t-gcdext_1
PASS: t-div

Testsuite summary for GNU MP 6.2.0

TOTAL: 50

PASS: 49

SKIP: 0

XFAIL: 0

FAIL: 1

XPASS: 0

ERROR: 0

============================================================================
See tests/mpn/test-suite.log
Please report to [email protected], see https://gmplib.org/manual/Reporting-Bugs.html

--- stderr
toom_interpolate_5pts.c:70:19: warning: expression result unused [-Wunused-value]
ASSERT_NOCARRY (mpn_divexact_by3 (v2, v2, kk1)); /* v2 <- v2 / 3 */

../../gmp-src/gmp-impl.h:1662:6: note: expanded from macro 'mpn_divexact_by3'
(3 & mpn_bdiv_dbm1 (dst, src, size, __GMP_CAST (mp_limb_t, GMP_NUMB_MASK / 3)))
 ~ ^
../../gmp-src/gmp-impl.h:2459:33: note: expanded from macro 'ASSERT_NOCARRY'
#define ASSERT_NOCARRY(expr)   (expr)
                              ^~~~
1 warning generated.
toom_interpolate_8pts.c:163:18: warning: expression result unused [-Wunused-value]
ASSERT_NOCARRY(mpn_divexact_by3 (r5, r5, 3 * n + 1));
~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../gmp-src/gmp-impl.h:1662:6: note: expanded from macro 'mpn_divexact_by3'
(3 & mpn_bdiv_dbm1 (dst, src, size, __GMP_CAST (mp_limb_t, GMP_NUMB_MASK / 3)))
 ~ ^
../../gmp-src/gmp-impl.h:2459:33: note: expanded from macro 'ASSERT_NOCARRY'
#define ASSERT_NOCARRY(expr)   (expr)
                              ^~~~
1 warning generated.
../../gmp-src/mpz/mul.c:112:2: warning: add explicit braces to avoid dangling else [-Wdangling-else]
      else
      ^
1 warning generated.
/Library/Developer/CommandLineTools/usr/bin/ranlib: file: .libs/libprintf.a(obprintf.o) has no symbols
/Library/Developer/CommandLineTools/usr/bin/ranlib: file: .libs/libprintf.a(obvprintf.o) has no symbols
/Library/Developer/CommandLineTools/usr/bin/ranlib: file: .libs/libprintf.a(obprntffuns.o) has no symbols
/Library/Developer/CommandLineTools/usr/bin/ranlib: file: .libs/libprintf.a(repl-vsnprintf.o) has no symbols
/Library/Developer/CommandLineTools/usr/bin/ranlib: file: .libs/libprintf.a(obprintf.o) has no symbols
/Library/Developer/CommandLineTools/usr/bin/ranlib: file: .libs/libprintf.a(obvprintf.o) has no symbols
/Library/Developer/CommandLineTools/usr/bin/ranlib: file: .libs/libprintf.a(obprntffuns.o) has no symbols
/Library/Developer/CommandLineTools/usr/bin/ranlib: file: .libs/libprintf.a(repl-vsnprintf.o) has no symbols
/Library/Developer/CommandLineTools/usr/bin/ranlib: file: .libs/libgmp.a(mp_clz_tab.o) has no symbols
/Library/Developer/CommandLineTools/usr/bin/ranlib: file: .libs/libgmp.a(obprintf.o) has no symbols
/Library/Developer/CommandLineTools/usr/bin/ranlib: file: .libs/libgmp.a(obvprintf.o) has no symbols
/Library/Developer/CommandLineTools/usr/bin/ranlib: file: .libs/libgmp.a(obprntffuns.o) has no symbols
/Library/Developer/CommandLineTools/usr/bin/ranlib: file: .libs/libgmp.a(repl-vsnprintf.o) has no symbols
/Library/Developer/CommandLineTools/usr/bin/ranlib: file: .libs/libgmp.a(mp_clz_tab.o) has no symbols
/Library/Developer/CommandLineTools/usr/bin/ranlib: file: .libs/libgmp.a(obprintf.o) has no symbols
/Library/Developer/CommandLineTools/usr/bin/ranlib: file: .libs/libgmp.a(obvprintf.o) has no symbols
/Library/Developer/CommandLineTools/usr/bin/ranlib: file: .libs/libgmp.a(obprntffuns.o) has no symbols
/Library/Developer/CommandLineTools/usr/bin/ranlib: file: .libs/libgmp.a(repl-vsnprintf.o) has no symbols
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: '-no-install' is ignored for kabylake-apple-darwin19.4.0
libtool: warning: assuming '-no-fast-install' instead
libtool: warning: assuming '-no-fast-install' instead
../../../gmp-src/test-driver: line 107: 26838 Segmentation fault: 11  "$@" > $log_file 2>&1
make[5]: *** [test-suite.log] Error 1
make[4]: *** [check-TESTS] Error 2
make[3]: *** [check-am] Error 2
make[2]: *** [check-recursive] Error 1
make[1]: *** [check-recursive] Error 1
make: *** [check] Error 2
thread 'main' panicked at 'Program failed with code 2: "make" "-j" "8" "check"', /Users/boltonbailey/.cargo/registry/src/github.com-1ecc6299db9ec823/gmp-mpfr-sys-1.2.2/build.rs:1147:13

Help me organize the zero allocation U256/U512 code

because it's currently an 800-line blob of a file. See u256.rs in the zero branch.

A good thing to do would be to deduplicate the U256/U512 shared logic with a macro. The mul instance for U256 can probably be changed to return a U256, and a full_mul function could be added to replace what I currently have.

If you're curious, using the zero-allocation code speeds up the primality checkers by anywhere between 10 and 25%. The runtime can in theory be reduced by another few pct by eliminating intermediate conversions between U256s and U512s, after which I would call it Done™. Updating the multiplication functions should facilitate this.

Is primality checking strong enough?

This should be answered by aggressive testing on all accumulator implementations, involving O(10^9) additions + inclusion/exclusion proofs. Though no composite has been found which passes BPSW (i.e. a number which is both a base-2 Fermat and strong Lucas pseudoprime), could an attack be constructed if one were found?

Tasks for initial open-source release

(Tasks are roughly ordered.)

Code Tasks:

  • Resolve other issues/PRs associated with the milestone (most importantly: can we get the class optimizations into this release?)
  • Decide whether to remove Ristretto/VC/PoKCR in first public release (probably want to move these to a vc branch)
  • Write/stabilize docs for release. Similar to the bulletproofs library, we might want to have an explanatory notes module (see their lib.rs and docs)
  • Pick an open-source license and verify that all code we're relying on is compatible (Alan brought up VDF competition code as a potential ambiguity)
  • Decide if we want this repo to be IDE-agnostic (I think having a .vscode folder and VS Code setup suggestions is fine, particularly for newbies trying to contribute; still, something to think about)
  • Add a CONTRIBUTING.md for external folks (see here for an example)
  • Add CI/pre-commit hooks to verify that rustfmt and compilation succeed. Since master is protected and since our contributor guide will discuss standards for code hygiene, this is mostly a sanity check mechanism
  • Bump version in Cargo.toml

Launch Tasks:

  • Squash commit history
  • Make repo non-private
  • Decide on publicity strategy (also what our position on ongoing maintenance of the library is)

Updating a membership witness

I have a simple (and perhaps very naive) question about the membership witness update. Is there a way around requiring the caller to provide the tracked_elements? We are trying to use the accumulator to avoid everyone having to maintain the full list of tracked elements.

Thanks for your help, and apologies if this is a very naive question.

edit: looking at the code, it seems that carrying around the prime hash product of the tracked elements would eliminate the need to provide them in full. Is this a correct understanding?

Use std::hash::Hash and std::hash::Hasher interfaces

This enables us to write

#[deriving (Hash)]
struct X { ... }

to get hash(&self, hasher: &mut H)
instead of manually defining how to feed values into the hasher.

As part of this we'll be able to define hashes without having to go through the indirection of serialization, which is nice

I'll handle this myself over the next few days, but feedback is welcome

Given an accumulator digest, how to compute the membership proof of an element in the set?

Assume that I have access to all the elements of the set.
How do I accomplish [1-5]?

  let acc = Accumulator::<Rsa2048, &'static str>::empty();
  let acc = acc.add(&["dog"]); // A = {"dog"}
  let acc = acc.add(&["cat"]); // A = {"dog", "cat"}
  let acc = acc.add(&["cow"]); // A = {"dog", "cat", "cow"}

  // 1. Get Membership proof of "dog" given acc and all elements in A
  // 2. Get Non-Membership proof of "pig", given acc and all elements in A
  // 3. Get Batch Membership proof of "dog" and "cat",  given acc and all elements in A

  // 4. Verify Membership proof of "dog" using acc and proof from 1.
  // 5. Verify Batch Membership proof of "dog" and "cat" using acc and proof from 3.

I prefer not using the update_membership_witness.

Thanks in advance!

Reduce class group tests should perform reduction

Currently the test_reduce_basic function in src/group/class.rs reduces an element that becomes reduced after performing normalization. This causes the main while loop in reduce to remain untested. An element that remains unreduced after being normalized should be chosen instead.

Generalize Accumulator, VectorCommitment over types that implement Hash

For example, we can generalize
Accumulator<G: UnknownOrderGroup>
to
Accumulator<T: Hash, G: UnknownOrderGroup>

and add goes from
fn add(self, elems: &[Integer]) -> (Self, MembershipProof<G>)
to
fn add(self, elems: &[T]) -> (Self, MembershipProof<T, G>)

The type parameter T in the accumulator struct would be a phantom type to help prevent mixing accumulators for different element types

Implementing a zero-knowledge proof of membership

Hi,

I've been trying to implement this zero knowledge proof of membership technique. I was wondering if you had any advice on the following regarding design:

Where to put the code to create a random group generator (I had thought I could just write G::elem(Integer) where Integer is the group generator, but that doesn't seem to work--the compiler complains that there is no variant elem. Perhaps it is better to implement the random group generator function inside the group implementations?

Thanks. Apologies if not clear or if I just missed something painfully obvious.

How do you pick the generator g?

Hi,

I have one conceptual question and I would really appreciate it if you could give me an answer... What is your rule of selecting the generator g? Is g any number random selected between 1 and pq? Or is there more constraint on it?

And I read that g is a generator of an RSA group, but I didn't quite understand this... What does it mean by an RSA group? Is this a ring Z_N where N=pq? I don't think g can generate all numbers between 0 and N-1.

Look into WASM compilation

Not a milestone issue, but:

It'd be cool if we could compile the accumulators to WASM and create a browser demo. Rust that relies on I/O (and maybe also the threading runtime) is off-limits for this purpose, so there might be some fiddling to do based on our dependencies.

Let's visit this after the open-sourcing?

NI-PoKE2 uses group generator, rather than `H_𝔾(u,w)`

In

let g = G::unknown_order_elem();

And

let g = G::unknown_order_elem();

The NI-PoKE2 implementation uses the group generator, however the BBF'18 paper denotes that g ← H_𝔾(u,w) in the non-interactive context. (see pg42, appendix D)

I think this is significant, in the non-interactive context, because it ensures the whole equation is parameterised by u and w, whereas without the 'hash to group' function being used for the generator of g^x you potentially weaken the proof.

I can't see a 'hash to group' function in the source code.

What are your thoughts?

The `MAX_SAFE_SCALAR` val in ristretto group is not proper

Two question:

  1. The max scalar val is not proper.
    Actually the order of curve25519 is not 2^255-1, it's 2^{252} + 27742317777372353535851937790883648493.
 pub static ref NEW_MAX_SAFE_EXPONENT: Integer = {
    //2^\{252\} + 27742317777372353535851937790883648493
    let str_max_scalar = "7237005577332262213973186563042994240857116359379907606001950938285454250989";
    Integer::from_str_radix(str_max_scalar, 10).unwrap()
  };
  pub static ref NEW_MAX_SAFE_SCALAR: Scalar = {
    let mut digits: [u8; 32] = [0; 32];
    NEW_MAX_SAFE_EXPONENT.write_digits(&mut digits, Order::LsfLe);
    Scalar::from_bytes_mod_order(digits)
  };
  1. when remaining >= *MAX_SAFE_EXPONENT the while loop is not proper for it will break the binding property ----for different values can be opened to the same commitment.
    let exp_c = Ristretto::exp(&bp, &(NEW_MAX_SAFE_EXPONENT.clone() + &int(20)));
    let exp_d = Ristretto::exp(&bp, &int(20));
    let exp_e = Ristretto::exp(&bp, &(NEW_MAX_SAFE_EXPONENT.clone() * &int(11) + &int(20)));
    assert_eq!(exp_c, exp_d); //break commitment binding property 
    assert_eq!(exp_e, exp_d); //break commitment binding property 

An error is displayed when I benchmark.

Cargo bench gives me the following error:

error[E0308]: mismatched types
--> src/uint.rs:53:16
|
53 | d: self.data(),
| ^^^^^^^^^^^ expected struct NonNull, found *-ptr
...
418 | u_types!(U256, 4, U512, 8);
| --------------------------- in this macro invocation
|
= note: expected struct NonNull<u64>
found raw pointer *mut u64
= note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0308]: mismatched types
--> src/uint.rs:536:8
|
536 | d: mut_ptr(&data),
| ^^^^^^^^^^^^^^ expected struct NonNull, found *-ptr
|
= note: expected struct NonNull<u64>
found raw pointer *mut &mut u64

Did anyone else got this? Is there a quick solution?

Unable to generate membership proof for output of compute_individual_witnesses.

I run to BadWitness error when I try to generate membership proof for an element from the output of compute_individual_witnesses.

In this example, I am trying to verify the membership of "cat" in the set after performing batch add. However, I run into errors at prove_membership.

  let acc = Accumulator::<G, &'static str>::empty();
  let (acc, proof) = acc.add_with_proof(&["dog", "cat", "cow"]);
  let witness = Witness(acc.clone());
  let indv_witness = witness.compute_individual_witnesses(&["dog", "cat", "cow"]);

  let proof_cat = acc.prove_membership(&[indv_witness[1].clone()]).unwrap(); // Bad witness
  println!("Cat: {:?}", acc.verify_membership(&"cat", &proof_cat));
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: BadWitness', src/libcore/result.rs:999:5
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace.

Implementation of MemWitCreate

I think we don't have the function for Witness generation for a particular element, except for using add_with_proof function when adding. But if I want to get the witness for an existing element inside the accumulator, how can I implement that?

Unable to install

Attempting to install using the instructions on the readme, I get the following error:

$ cargo run
    Updating git repository `https://github.com/cambrian/accumulator.git`
error: failed to load source for a dependency on `accumulator`

Caused by:
  Unable to update https://github.com/cambrian/accumulator.git

Caused by:
  failed to update submodule `docs`

Caused by:
  failed to fetch submodule `docs` from ssh://[email protected]/cambrian/accumulator.git

Caused by:
  failed to authenticate when downloading repository
attempted ssh-agent authentication, but none of the usernames `git` succeeded

Caused by:
  no authentication available

Look into WASM compilation

It'd be cool if we could compile the accumulators to WASM and create a browser demo. Rust that relies on I/O (and maybe also the threading runtime) is off-limits for this purpose, so there might be some fiddling to do based on our dependencies.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.