Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

repo-sync-2024-09-26T11:38:23+0800 #391

Merged
merged 4 commits into from
Sep 26, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .circleci/continue-config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ commands:
command: |
set +e
declare -i test_status
bazel test //... -c opt --ui_event_filters=-info,-debug,-warning --test_output=errors --jobs 16 | tee test_result.log; test_status=${PIPESTATUS[0]}
bazel test //yacl/... -c opt --ui_event_filters=-info,-debug,-warning --test_output=errors --jobs 16 | tee test_result.log; test_status=${PIPESTATUS[0]}

git clone https://github.com/secretflow/devtools.git
sh devtools/rename-junit-xml.sh
Expand Down
2 changes: 2 additions & 0 deletions .licenserc.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ header: # <1>
- '**/*.patch'
- '**/*.lds'
- '**/*.csv'
- '**/*.rst'
- 'LICENSE'
- 'NOTICE'
- '.bazelversion'
Expand All @@ -43,6 +44,7 @@ header: # <1>
- 'yacl/crypto/aes/aes_intrinsics.h'
- 'yacl/crypto/aes/aes_opt.h'
- 'yacl/io/circuit/data/**.txt'
- 'docs/requirements.txt'

comment: never # <9>

Expand Down
70 changes: 28 additions & 42 deletions ALGORITHMS.md
Original file line number Diff line number Diff line change
@@ -1,105 +1,91 @@
# Supported Advanced Crypto Algorithms
# Algorithm List

## Oblivious Transfer and Extensions
In this part, we provide a comprehensive list of the algorithms that yacl implements.

**Oblivious Transfer and Extensions**

- The Simplest Protocol for Oblivious Transfer\
*Tung Chou, Claudio Orlandi*\
LatinCrypt 2015, [eprint](https://eprint.iacr.org/2015/267), CO15
LatinCrypt 2015, [CO15](https://eprint.iacr.org/2015/267)

- Extending Oblivious Transfers Efficiently\
*Yuval Ishai, Joe Kilian, Kobbi Nissim, Erez Petrank*\
Crypto 2003, [eprint](https://www.iacr.org/archive/crypto2003/27290145/27290145.pdf), IKNP03
Crypto 2003, [IKNP03](https://www.iacr.org/archive/crypto2003/27290145/27290145.pdf)

- Actively Secure OT Extension with Optimal Overhead\
*Marcel Keller, Emmanuela Orsini, Peter Scholl*\
Crypto 2015, [eprint](https://eprint.iacr.org/2015/546), KOS15
Crypto 2015, [KOS15](https://eprint.iacr.org/2015/546)

- Efficient Batched Oblivious PRF with Applications to Private Set Intersection\
*Vladimir Kolesnikov, Ranjit Kumaresan, Mike Rosulek, Ni Trieu*\
CCS 2016, [eprint](https://eprint.iacr.org/2016/799), KKRT16
CCS 2016, [KKRT16](https://eprint.iacr.org/2016/799)

- Distributed vector-OLE: Improved constructions and implementation\
*Phillipp Schoppmann, Adrià Gascón, Leonie Reichert, Mariana Raykova*\
CCS 2019, [eprint](https://eprint.iacr.org/2019/1084), SGRR19
CCS 2019, [SGRR19](https://eprint.iacr.org/2019/1084)

- Half-Tree: Halving the Cost of Tree Expansion in COT and DPF\
*Xiaojie Guo, Kang Yang, Xiao Wang, Wenhao Zhang, Xiang Xie, Jiang Zhang, Zheli Liu*\
EUROCRYPT 2023, [eprint](https://eprint.iacr.org/2022/1431), GYWZ+23
EUROCRYPT 2023, [GYWZ+23](https://eprint.iacr.org/2022/1431)

- Ferret: Fast Extension for coRRElated oT with small communication\
*Kang Yang, Chenkai Weng, Xiao Lan, Jiang Zhang, Xiao Wang*\
CCS'20, [eprint](https://eprint.iacr.org/2020/924), YWLZ+20
CCS'20, [YWLZ+20](https://eprint.iacr.org/2020/924)

- SoftSpokenOT: Quieter OT Extension from Small-Field Silent VOLE in the Minicrypt Model\
*Lawrence Roy*\
Crypto 2022, [publisher](https://www.iacr.org/cryptodb//data/paper.php?pubkey=32258), Roy22

## Vector Oblivious Linear Evaluation (over Field 2k)
Crypto 2022, [Roy22](https://www.iacr.org/cryptodb//data/paper.php?pubkey=32258)

Base VOLE:
**Vector Oblivious Linear Evaluation (over Field 2k)**

- MASCOT: Faster Malicious Arithmetic Secure Computation with Oblivious Transfer\
*Marcel Keller, Emmanuela Orsini*\
CCS 2016, [eprint](https://eprint.iacr.org/2016/505), KO16

Silent VOLE:
CCS 2016, [KO16](https://eprint.iacr.org/2016/505)

- Efficient Two-Round OT Extension and Silent Non-Interactive Secure Computation\
*Elette Boyle, Geoffroy Couteau, Niv Gilboa, Yuval Ishai, Lisa Kohl, Peter Rindal, Peter Scholl*\
CCS 2019, [eprint](https://eprint.iacr.org/2019/1159), BCGI+19 (with Peter Rindal)
CCS 2019, [BCGI+19 (with Peter Rindal)](https://eprint.iacr.org/2019/1159)

- Efficient Two-Round OT Extension and Silent Non-Interactive Secure Computation\
*Elette Boyle, Geoffroy Couteau, Niv Gilboa, Yuval Ishai, Lisa Kohl, Peter Rindal, Peter Scholl*\
CCS 2019, [eprint](https://eprint.iacr.org/2019/1159), BCGI+19
CCS 2019, [BCGI+19](https://eprint.iacr.org/2019/1159)

- Correlated Pseudorandomness from Expand-Accumulate Codes\
*Elette Boyle, Geoffroy Couteau, Niv Gilboa, Yuval Ishai, Lisa Kohl, Nicolas Resch, Peter Scholl*\
Crypto 2022, [eprint](https://eprint.iacr.org/2022/1014), BCG+22

Subfield VOLE:
Crypto 2022, [BCG+22](https://eprint.iacr.org/2022/1014)

- Wolverine: Fast, Scalable, and Communication-Efficient Zero-Knowledge Proofs for Boolean and Arithmetic Circuits\
*Chenkai Weng, Kang Yang, Jonathan Katz, Xiao Wang*
SP, 2021, [eprint](https://eprint.iacr.org/2020/925), WYKW21

## Codes
SP, 2021, [WYKW21](https://eprint.iacr.org/2020/925)

Local Linear Code
**Codes**

- Ferret: Fast Extension for coRRElated oT with small communication\
*Kang Yang, Chenkai Weng, Xiao Lan, Jiang Zhang, Xiao Wang*\
CCS'20, [eprint](https://eprint.iacr.org/2020/924), YWLZ+20

Low Density Parity Check Code (Silver Code)
CCS'20, [YWLZ+20](https://eprint.iacr.org/2020/924)

- Silver: Silent VOLE and Oblivious Transfer from Hardness of Decoding Structured LDPC Codes\
*Geoffroy Couteau, Peter Rindal, Srinivasan Raghuraman*\
Crypto 2021, [eprint](https://eprint.iacr.org/2021/1150), CRR21

Expanding Accumulation Code
Crypto 2021, [CRR21](https://eprint.iacr.org/2021/1150)

- Correlated Pseudorandomness from Expand-Accumulate Codes\
*Elette Boyle, Geoffroy Couteau, Niv Gilboa, Yuval Ishai, Lisa Kohl, Nicolas Resch, Peter Scholl*\
Crypto 2022, [eprint](https://eprint.iacr.org/2022/1014), BCG+22

Crypto 2022, [BCG+22](https://eprint.iacr.org/2022/1014)

## Distributed Point Functions
**Distributed Point Functions**

- Function secret sharing: improvements and extensions\
*Elette Boyle, Niv Gilboa, Yuval Ishai*\
CCS 2016, [eprint](https://eprint.iacr.org/2018/707), BGI16
CCS 2016, [BGI16](https://eprint.iacr.org/2018/707)

## Theoretical Tools

Correlation-Robust Hash (CrHash)
**Correlation-Robust Hash (CrHash)**

- Efficient and Secure Multiparty Computation from Fixed-Key Block Ciphers\
*Chun Guo, Jonathan Katz, Xiao Wang, Yu Yu*\
Preprint 2019, [eprint](https://eprint.iacr.org/2019/074), GKWY19
Preprint 2019, [GKWY19](https://eprint.iacr.org/2019/074)

Circular Correlation-Robust Hash (CCR Hash)
**Circular Correlation-Robust Hash (CCR Hash)**

- Efficient and Secure Multiparty Computation from Fixed-Key Block Ciphers\
*Chun Guo, Jonathan Katz, Xiao Wang, Yu Yu*\
Preprint 2019, [eprint](https://eprint.iacr.org/2019/074), GKWY19

Preprint 2019, [GKWY19](https://eprint.iacr.org/2019/074)
21 changes: 10 additions & 11 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,64 +1,63 @@
# CHANGELOG
# Changelog

All notable changes to this project will be documented in this file.

## 2024-05-15
**2024-05-15**
- [Tag] release/0.4.5b0
- [Feature] Re-organize repo layout, add kernel folder for crypto protocols with links
- [Feature] Add ECC lib25519 implementation
- [Feature] Add ECC FourQ implementation
- [Feature] Unify f2k implementaion
- [Bugifx] Fix RandBits implementation

## 2024-02-01
**2024-02-01**
- [Tag] release/0.4.3
- [Feature] Add Silent Vole (malicious version)
- [Bugifx] Multiple bugfixes

## 2024-01-09
**2024-01-09**
- [YACL] v0.4.2
- [Dependency] Bump: Openssl 3.0.12 (experimental)
- [Feature] Add Softspoken OTe (malicious version)
- [API] Refactor entropy source, drbg, and rand; Refine traditional crypto APIs
- [Bugifx] Multiple bugfixes


## 2023-11-16
**2023-11-16**
- [YACL] v0.4.1.1
- [Feature] Init Global Security Parameters for Yacl [WIP: apply security parameter to all algorithms]
- [Feature] Add Softspoken OTe (semi-honest version)
- [Feature] Add Silent Vole [WIP: optimize MpVole and DualEncode]

## 2023-10-20
**2023-10-20**
- [YACL] v0.4.1
- [Feature] Add Sigma-type ZKP Protocols (An unified implementation)
- [Feature] Add ECC Pairing SPI and support to libmcl(ecc, pairing)
- [Feature] Add Multiplication for GF(2^64) and GF(2^128)
- [Bugfix] fix KOS OTe security flaws
- [Feature] Add AVX2 Matrix Transpose

## 2023-05-25
**2023-05-25**
- [YACL] v0.3.3
- [Feature] Add Ferret OTe
- [Feature] Add Gywz OTe (Correlated GGM Tree)
- [Feature] Add KOS OTe (warning: KOS still has potential security flaws)

## 2023-02-02
**2023-02-02**
- [YACL] v0.3.1
- [Feature] Add `dynamic_bitset` for manipulating bit vectors
- [API] RO now can accept multiple inputs
- [API] Add iknp cot api, improve iknp performance
- [Bugfix] Fix Several m1 related bugs

## 2022-12-08
**2022-12-08**
- [YACL] v0.3.0
- [Feature] Add random permutation and correlation-robust hash function
- [Feature] Add OT/OTe benchmark
- [API] Fix randomness implementation
- [API] Re-organize repo layout
- [Bugfix] Fix Random Oralce Usage

## 2022-12-01
**2022-12-01**
- [YACL] v0.2.0
- [API] Rename YASL to YACL
- [API] Re-organize repo layout
85 changes: 39 additions & 46 deletions GETTING_STARTED.md
Original file line number Diff line number Diff line change
@@ -1,40 +1,33 @@
# Getting Started Guide
# Getting Started

This document includes guidelines.

## Table of Contents

- [Prerequisites](#prerequisites)
- [Download and Build](#download-and-build)
- [Ubuntu](#ubuntu)
- [MacOS](#macos)
- [Setup Compilation Database for your lsp](#setup-compilation-database-for-your-lsp)
- [(Optional) Setup Vscode](#optional-setup-vscode)

## Prerequisites

To build Yacl from source, you will need the following tools:

- **bazel**: We recommend to use the official [bazelisk](https://github.com/bazelbuild/bazelisk?tab=readme-ov-file#installation) to manage bazel version.
- **gcc >= 10.3**
- **[cmake](https://cmake.org/getting-started/)**
- **[ninja/ninja-build](https://ninja-build.org/)**
- [bazel](https://bazel.build/): We recommend to use the official [bazelisk](https://github.com/bazelbuild/bazelisk?tab=readme-ov-file#installation) to manage bazel version.
- [gcc >= 10.3](https://gcc.gnu.org/)
- [cmake](https://cmake.org/)
- [ninja/ninja-build](https://ninja-build.org/)
- **Perl 5 with core modules** (Required by [OpenSSL](https://github.com/openssl/openssl/blob/master/INSTALL.md#prerequisites))

## Download and Build
## Download and build

Please make sure you already have `git` installed on your system, then clone Yacl
Please make sure you already have `git` installed on your system, then clone Yacl via the github link,

```sh
git clone https://github.com/secretflow/yacl
$ git clone https://github.com/secretflow/yacl.git
```

The building process of YACL is as following.

### Ubuntu

Download the dependencies

```sh
sudo apt install gcc wget cmake ninja-build nasm automake libtool
$ sudo apt install gcc wget cmake ninja-build nasm automake libtool libomp-dev
```

We recommend to use `bazelisk` to manage different versions of `bazel`. On Linux, You can download Bazelisk binary on our Releases page and add it to your PATH manually, which also works on macOS and Windows. You can download the newest `bazelisk` binary from its official [github release page](https://github.com/bazelbuild/bazelisk/releases).
Expand All @@ -43,29 +36,29 @@ The following is an example of downloading and setting up bazelisk v1.20.0, you

```sh
# If you use a x86 architecture cpu
wget https://github.com/bazelbuild/bazelisk/releases/download/v1.20.0/bazelisk-linux-amd64
mv bazelisk-linux-amd64 bazel && chmod +x bazel
sudo mv bazel /usr/local/bin # you need sudo to do this
$ wget https://github.com/bazelbuild/bazelisk/releases/download/v1.20.0/bazelisk-linux-amd64
$ mv bazelisk-linux-amd64 bazel && chmod +x bazel
$ sudo mv bazel /usr/local/bin # you need sudo to do this

# If you use an arm architecture cpu
wget https://github.com/bazelbuild/bazelisk/releases/download/v1.20.0/bazelisk-linux-arm64
mv bazelisk-linux-arm64 bazel && chmod +x bazel
sudo mv bazel /usr/local/bin # you need sudo to do this
$ wget https://github.com/bazelbuild/bazelisk/releases/download/v1.20.0/bazelisk-linux-arm64
$ mv bazelisk-linux-arm64 bazel && chmod +x bazel
$ sudo mv bazel /usr/local/bin # you need sudo to do this
```

To build Yacl, at yacl's root directory, run the following

```sh
bazel build //...
bazel build //... -c opt # build as optimized mode
bazel build //... -c dbg # build as debug mode
bazel build //... --config gm # build with gm mode
$ bazel build //...
$ bazel build //... -c opt # build as optimized mode
$ bazel build //... -c dbg # build as debug mode
$ bazel build //... --config gm # build with gm mode
```

To test Yacl

```sh
bazel test //...
$ bazel test //...
```

### MacOS
Expand All @@ -74,47 +67,47 @@ First you need to download XCode and [homebrew](https://brew.sh/),

```sh
# Install Xcode
https://apps.apple.com/us/app/xcode/id497799835?mt=12
$ https://apps.apple.com/us/app/xcode/id497799835?mt=12

# Select Xcode toolchain version
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
$ sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
```

Then download the dependencies,

```
```sh
# Install dependencies
brew install bazelisk cmake ninja nasm automake libtool
$ brew install bazelisk cmake ninja nasm automake libtool libomp
```

To build Yacl, at yacl's root directory, run the following

```sh
bazel build //...
bazel build //... -c opt # build as optimized mode
bazel build //... -c dbg # build as debug mode
$ bazel build //...
$ bazel build //... -c opt # build as optimized mode
$ bazel build //... -c dbg # build as debug mode
$ bazel build //... --config gm # build with gm mode
```

To test Yacl

```sh
bazel test //...
$ bazel test //...
```

## Setup Compilation Database for your lsp
## Setup compilation database for your lsp

Language servers accept a `compile_commands.json` file input to help it with linting, jumping to definitions/references, and other functions. This file consists of an array of “command objects”, where each command object specifies one way a translation unit is compiled in the project. A lot of modern C/C++ build system can generate this file with simple steps, it's the same for bazel.

```sh
sudo apt install curl
cd /path/to/yacl/ # change to yacl path
bash <(curl -s https://raw.githubusercontent.com/secretflow/devtools/9efb0bc93068a122864fdb661946695badacbe24/refresh_compile_commands.sh)
$ sudo apt install curl
$ cd /path/to/yacl/ # change to yacl path
$ bash <(curl -s https://raw.githubusercontent.com/secretflow/devtools/9efb0bc93068a122864fdb661946695badacbe24/refresh_compile_commands.sh)
```

## (Optional) Setup Vscode
## (Optional) Recommended vscode extensions

We recommend to use the following extensions for vscode users:
- Clang-Format: Use Clang-Format in Visual Studio Code
- cpplint: code style check tool extension for cpplint
- Bazel: Bazel BUILD integration
- clangd: C/C++ completion, navigation, and insights
- [Bazel](https://marketplace.visualstudio.com/items?itemName=BazelBuild.vscode-bazel): Bazel BUILD integration
- [clangd](https://marketplace.visualstudio.com/items?itemName=llvm-vs-code-extensions.vscode-clangd): C/C++ completion, navigation, and insights
- [cpplint](https://marketplace.visualstudio.com/items?itemName=mine.cpplint): code style check tool extension for cpplint (requires `cpplint` binary)
Loading
Loading