...

Text file src/github.com/cloudflare/circl/README.md

Documentation: github.com/cloudflare/circl

     1<img src=".etc/icon.png" align="right" height="300" width="300"/>
     2
     3# CIRCL
     4
     5[![GitHub release](https://img.shields.io/github/release/cloudflare/circl.svg)](https://GitHub.com/cloudflare/circl/releases/)
     6[![CIRCL](https://github.com/cloudflare/circl/workflows/CIRCL/badge.svg)](https://github.com/cloudflare/circl/actions)
     7[![GoDoc](https://godoc.org/github.com/cloudflare/circl?status.svg)](https://pkg.go.dev/github.com/cloudflare/circl?tab=overview)
     8[![Go Report Card](https://goreportcard.com/badge/github.com/cloudflare/circl)](https://goreportcard.com/report/github.com/cloudflare/circl)
     9[![codecov](https://codecov.io/gh/cloudflare/circl/branch/main/graph/badge.svg)](https://codecov.io/gh/cloudflare/circl)
    10
    11**CIRCL** (Cloudflare Interoperable, Reusable Cryptographic Library) is a collection
    12of cryptographic primitives written in Go. The goal of this library is to be used as a tool for
    13experimental deployment of cryptographic algorithms targeting Post-Quantum (PQ) and Elliptic
    14Curve Cryptography (ECC).
    15
    16## Security Disclaimer
    17
    18🚨 This library is offered as-is, and without a guarantee. Therefore, it is expected that changes in the code, repository, and API occur in the future. We recommend to take caution before using this library in a production application since part of its content is experimental. All security issues must be reported, please notify us immediately following the instructions given in our [Security Policy](https://github.com/cloudflare/circl/security/policy).
    19
    20## Installation
    21
    22You can get CIRCL by fetching:
    23
    24```sh
    25go get -u github.com/cloudflare/circl
    26```
    27
    28Alternatively, look at the [Cloudflare Go](https://github.com/cloudflare/go/tree/cf) fork to see how to integrate CIRCL natively in Go.
    29
    30## List of Algorithms
    31
    32[RFC-7748]: https://doi.org/10.17487/RFC7748
    33[RFC-8032]: https://doi.org/10.17487/RFC8032
    34[RFC-8235]: https://doi.org/10.17487/RFC8235
    35[RFC-9180]: https://doi.org/10.17487/RFC9180
    36[RFC-9380]: https://doi.org/10.17487/RFC9380
    37[RFC-9474]: https://doi.org/10.17487/RFC9474
    38[RFC-9496]: https://doi.org/10.17487/RFC9496
    39[RFC-9497]: https://doi.org/10.17487/RFC9497
    40[FIPS 202]: https://doi.org/10.6028/NIST.FIPS.202
    41[FIPS 186-5]: https://doi.org/10.6028/NIST.FIPS.186-5
    42[BLS12-381]: https://electriccoin.co/blog/new-snark-curve/
    43[ia.cr/2015/267]: https://ia.cr/2015/267
    44[ia.cr/2019/966]: https://ia.cr/2019/966
    45
    46### Elliptic Curve Cryptography
    47
    48| Diffie-Hellman Protocol |
    49|:---:|
    50
    51- [X25519](./dh/x25519) and [X448](./dh/x448) functions. ([RFC-7748])
    52- [Curve4Q](./dh/curve4q) function based on FourQ curve. ([draft-ladd-cfrg-4q](https://datatracker.ietf.org/doc/draft-ladd-cfrg-4q/))
    53
    54| Digital Signature Schemes |
    55|:---:|
    56
    57- [Ed25519](./sign/ed25519) and [Ed448](./sign/ed448) signatures. ([RFC-8032])
    58
    59| Prime Groups |
    60|:---:|
    61
    62 - [P-256, P-384, P-521](./group). ([FIPS 186-5])
    63 - [Ristretto](./group) group. ([RFC-9496])
    64 - [Bilinear pairings](./ecc/bls12381): with the [BLS12-381] curve, and hash to G1 and G2.
    65 - [Hash to curve](./group), hash to field, XMD and XOF [expanders](./expander). ([RFC-9380])
    66
    67| High-Level Protocols |
    68|:---:|
    69
    70 - [HPKE](./hpke): Hybrid Public-Key Encryption ([RFC-9180])
    71 - [VOPRF](./oprf): Verifiable Oblivious Pseudorandom functions. ([RFC-9497])
    72 - [RSA Blind Signatures](./blindsign/blindrsa). ([RFC-9474])
    73 - [Partilly-blind](./blindsign/blindrsa/partiallyblindrsa/) Signatures. ([draft-cfrg-partially-blind-rsa](https://datatracker.ietf.org/doc/draft-amjad-cfrg-partially-blind-rsa/))
    74 - [CPABE](./abe/cpabe): Ciphertext-Policy Attribute-Based Encryption. ([ia.cr/2019/966])
    75 - [OT](./ot/simot): Simplest Oblivious Transfer ([ia.cr/2015/267]).
    76 - [Threshold RSA](./tss/rsa) Signatures ([Shoup Eurocrypt 2000](https://www.iacr.org/archive/eurocrypt2000/1807/18070209-new.pdf)).
    77
    78### Post-Quantum Cryptography
    79
    80| KEM: Key Encapsulation Methods |
    81|:---:|
    82
    83 - [CSIDH](./dh/csidh): Post-Quantum Commutative Group Action ([CSIDH](https://csidh.isogeny.org/)).
    84 - [Kyber KEM](./kem/kyber): modes 512, 768, 1024 ([KYBER](https://pq-crystals.org/kyber/)).
    85 - [FrodoKEM](./kem/frodo): modes 640-SHAKE. ([FrodoKEM](https://frodokem.org/))
    86 - (**insecure, deprecated**) ~~[SIDH/SIKE](./kem/sike)~~: Supersingular Key Encapsulation with primes p434, p503, p751 ([SIKE](https://sike.org/)).
    87
    88| Digital Signature Schemes |
    89|:---:|
    90
    91 - [Dilithium](./sign/dilithium): modes 2, 3, 5 ([Dilithium](https://pq-crystals.org/dilithium/)).
    92
    93### Zero-knowledge Proofs
    94
    95 - [Schnorr](./zk/dl): Prove knowledge of the Discrete Logarithm. ([RFC-8235])
    96 - [DLEQ](./zk/dleq): Prove knowledge of the Discrete Logarithm Equality. ([RFC-9497])
    97
    98
    99### Symmetric Cryptography
   100
   101| XOF: eXtendable Output Functions |
   102|:---:|
   103
   104 - [SHAKE128 and SHAKE256](./xof) ([FIPS 202]).
   105 - [BLAKE2X](./xof): BLAKE2XB and BLAKE2XS ([Blake2x](https://www.blake2.net/blake2x.pdf))
   106 - [KangarooTwelve](./xof/k12): fast hashing based on Keccak-p. ([KangarooTwelve](https://keccak.team/kangarootwelve.html)).
   107 - SIMD [Keccak](https://keccak.team/keccak_specs_summary.html) f1600 Permutation.
   108
   109| LWC: Lightweight Cryptography |
   110|:---:|
   111
   112- [Ascon v1.2](./cipher/ascon): Family of AEAD block ciphers ([ASCON](https://ascon.iaik.tugraz.at/index.html))
   113
   114### Misc
   115
   116| Integers |
   117|:---:|
   118
   119- Safe primes generation.
   120- Integer encoding: wNAF, regular signed digit, mLSBSet representations.
   121
   122| Finite Fields |
   123|:---:|
   124
   125 - Fp25519, Fp448, Fp511, Fp434, Fp503, Fp751.
   126 - Fp381, and its quadratic, sextic and twelveth extensions.
   127 - Polynomials in monomial and Lagrange basis.
   128
   129| Elliptic Curves |
   130|:---:|
   131
   132 - P-384 Curve
   133 - [FourQ](https://eprint.iacr.org/2015/565)
   134 - [Goldilocks](https://eprint.iacr.org/2015/625)
   135 - [BLS12-381](https://electriccoin.co/blog/new-snark-curve/)
   136
   137## Testing and Benchmarking
   138
   139Library comes with number of make targets which can be used for testing and
   140benchmarking:
   141
   142- ``test`` performs testing of the binary.
   143- ``bench`` runs benchmarks.
   144- ``cover`` produces coverage.
   145- ``lint`` runs set of linters on the code base.
   146
   147## Contributing
   148
   149To contribute, fork this repository and make your changes, and then make a Pull
   150Request. A Pull Request requires approval of the admin team and a successful
   151CI build.
   152
   153## How to Cite
   154
   155To cite CIRCL, use one of the following formats and update the version and date you accessed this project.
   156
   157APA Style
   158
   159```
   160Faz-Hernández, A. and Kwiatkowski, K. (2019). Introducing CIRCL:
   161An Advanced Cryptographic Library. Cloudflare. Available at
   162https://github.com/cloudflare/circl. v1.3.7 Accessed Dec, 2023.
   163```
   164
   165Bibtex Source
   166
   167```bibtex
   168@manual{circl,
   169  title        = {Introducing CIRCL: An Advanced Cryptographic Library},
   170  author       = {Armando Faz-Hern\'{a}ndez and Kris Kwiatkowski},
   171  organization = {Cloudflare},
   172  abstract     = {{CIRCL (Cloudflare Interoperable, Reusable Cryptographic Library) is
   173                   a collection of cryptographic primitives written in Go. The goal
   174                   of this library is to be used as a tool for experimental
   175                   deployment of cryptographic algorithms targeting Post-Quantum (PQ)
   176                   and Elliptic Curve Cryptography (ECC).}},
   177  note         = {Available at \url{https://github.com/cloudflare/circl}. v1.3.7 Accessed Dec, 2023},
   178  month        = jun,
   179  year         = {2019}
   180}
   181```
   182
   183CFF Style
   184
   185See attached [CITATION.cff](CITATION.cff) file.
   186
   187## License
   188
   189The project is licensed under the [BSD-3-Clause License](./LICENSE).

View as plain text