|
15 | 15 | </a> |
16 | 16 | </p> |
17 | 17 |
|
18 | | -**NOTE:** NIST's February 2025 Draft 2 has entirely removed FF3 from the NIST standard due to published vulnerabilities. |
| 18 | +**NOTE:** NIST's February 2025 Draft 2 has entirely withdrawn FF3 from the NIST standard due to published vulnerabilities. |
19 | 19 |
|
20 | | -This software is provided for educational and experimental use and comes with no warranty of any kind. |
| 20 | +This software is provided for educational and experimental use and comes with no warranty of any kind. |
| 21 | +It is intended for developers and researchers familiar with cryptographic standards. |
21 | 22 |
|
22 | 23 | # FF3 - Format Preserving Encryption in Python |
23 | 24 |
|
24 | | -An implementation of the NIST FF3 and draft FF3-1 Format Preserving Encryption (FPE) algorithms in Python. FF1 implementations are outside the scope of this open source project. |
| 25 | +An implementation of the draft NIST FF3 and FF3-1 Format Preserving Encryption (FPE) algorithms in Python. FF1 implementations are outside the scope of this open source project. |
25 | 26 |
|
26 | | -This package implements the FF3 algorithm for Format Preserving Encryption as described in the March 2016 NIST publication 800-38G _Methods for Format-Preserving Encryption_, |
27 | | -and revised on February 28th, 2019 with a draft update for FF3-1. |
| 27 | +This package implements the FF3 and FF3-1 algorithms as specified in NIST Special Publication 800-38G _Methods for Format-Preserving Encryption_ (now withdrawn), and includes the revisions on February 28th, 2019 with a draft update for FF3-1 (now withdrawn). |
28 | 28 |
|
29 | 29 | * [NIST Recommendation SP 800-38G (FF3)](http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-38G.pdf) |
30 | 30 | * [NIST Recommendation SP 800-38G Revision 1 (FF3-1)](https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-38Gr1-draft.pdf) |
31 | 31 | * [NIST SP 800-38G Revision 1 (2nd Public Draft)](https://csrc.nist.gov/pubs/sp/800/38/g/r1/2pd) |
32 | 32 |
|
33 | 33 | Changes to minimum domain size and revised tweak length have been implemented in this package with |
34 | 34 | support for both 64-bit and 56-bit tweaks. NIST has only published official test vectors for 64-bit tweaks, |
35 | | -but draft ACVP test vectors have been used for testing FF3-1. It is expected the final |
36 | | -NIST standard will provide updated test vectors with 56-bit tweak lengths. |
| 35 | +but draft ACVP test vectors have been used for testing FF3-1. x |
37 | 36 |
|
38 | 37 | ## Installation |
39 | 38 |
|
@@ -156,6 +155,13 @@ the *tweak* is used together with the intermediate encrypted text as input to th |
156 | 155 |
|
157 | 156 | Only FF1 and FF3 have been approved by NIST for format preserving encryption. There are patent claims on FF1 which allegedly include open source implementations. Given the issues raised in ["The Curse of Small Domains: New Attacks on Format-Preserving Encryption"](https://eprint.iacr.org/2018/556.pdf) by Hoang, Tessaro and Trieu in 2018, it is prudent to be very cautious about using any FPE that isn't a standard and hasn't stood up to public scrutiny. |
158 | 157 |
|
| 158 | +## Reporting Issues and Contributing |
| 159 | + |
| 160 | +Bug reports, feature requests, and pull requests are welcome. Please use the GitHub Issues page to report problems or ask questions: |
| 161 | +https://github.com/mysto/python-fpe/issues. |
| 162 | + |
| 163 | +By contributing, you agree that your contributions are provided under the Apache 2.0 license. All documentation and issue discussions are conducted in English. |
| 164 | + |
159 | 165 | ## Implementation Notes |
160 | 166 |
|
161 | 167 | This implementation was originally based upon the [Capital One Go implementation](https://github.com/capitalone/fpe). It follows the algorithm as outlined in the NIST specification as closely as possible, including naming. |
|
0 commit comments