遵循以下最佳实践的项目将能够自愿的自我认证,并显示他们已经实现了核心基础设施计划(OpenSSF)徽章。 显示详细资料
[](https://www.bestpractices.dev/projects/3806)
<a href="https://www.bestpractices.dev/projects/3806"><img src="https://www.bestpractices.dev/projects/3806/badge"></a>
Free C++ class library of cryptographic schemes
Contributions link, https://www.cryptopp.com/#contributions
The library does not have a process in place to handle paperwork like Developer Certificate of Origin (DCO).
The library does require contributors to place their contributions in Public Domain to avoid legal issues. It is a precondition to accepting a contribution. But it is not the same as "legal authority to make contributions [sic]". Also see https://www.cryptopp.com/wiki/Category:Patch.
The project's governance is detailed in several places. In particular https://www.cryptopp.com/wiki/Release_Process and https://www.cryptopp.com/wiki/Release_Signing. We should probably create a PDF with the relevant information in one place.
Do we really need to restate the Golden Rule?
The project's key players and their roles are detailed in several places. In particular https://www.cryptopp.com/wiki/Release_Process and https://www.cryptopp.com/wiki/Release_Signing. We should probably create a PDF with the relevant information in one place.
The project's key players and their roles are detailed in several places. In fact four different key members were selected from different regions of the world to ensure continuity. In particular https://www.cryptopp.com/wiki/Release_Process and https://www.cryptopp.com/wiki/Release_Signing. We should probably create a PDF with the relevant information in one place.
The project includes a Roadmap and Release Process. Also see https://www.cryptopp.com/wiki/Roadmap and >https://www.cryptopp.com/wiki/Release_Process>
Documentation is provided in the Manual and the Wiki. The manual is Doxygen-based and brief and focuses on API. The wiki is verbose with lost of code examples and provides greater details. Also see https://www.cryptopp.com/docs/ref/ and https://www.cryptopp.com/wiki.
The quick Start guide is provided in Install.txt, which is similar to INSTALL. Also see https://github.com/weidai11/cryptopp/blob/master/Install.txt.
Documentation is provided in the Manual and the Wiki. The manual is Doxygen-based and brief and focuses on API. The manual is frequently updated. The wiki is verbose and provides greater details. Also see https://www.cryptopp.com/docs/ref/ and https://www.cryptopp.com/wiki.
Ugh, we need to update the site's HTML and cutover to markdown (*.md) for this.
Ugh, we are missing text alternatives for those using screen readers.
The library uses 7-bit ASCII clean for source code. The website uses UTF-8 encoding for web pages. The wiki uses UTF-8 encoding for web pages.
The website is hosted on a CentOS 7 VM. Access is granted through SSH using public key only.
The source code is hosted on GitHub. Our governance requires code signing so nearly all commits are signed.
The wiki accounts are by request only. Once granted Mediawiki hashes the password using SHA-512.
The library provides past releases back to Crypto++ 2.0 dated January 1998. Also see https://www.cryptopp.com/downloads.html.
Being a library there is little need for upgrade paths. When needed for backwards compatibility, the library provides a class with the older behavior. For example, when a particular software-based PRNG was changed, a new class with the old behavior was added due to user requests. Also see the "OldRandomPool" class at https://www.cryptopp.com/wiki/RandomNumberGenerator#Old_RandomPool.
https://github.com/weidai11/cryptopp/issues
The library gives credit where credit is due. Also see release notes like https://www.cryptopp.com/release600.html.
The process for responding to bugs in general and security bugs in particular can be found at https://www.cryptopp.com/wiki/Bug_Report#Security_Bugs.
Ugh, we fail...
On the good side, lack of coding standards removes a lot of barriers for patches. We don't reject contributions items like space vs tab, how to comment, end-of-line conversions, etc. We accpet the patch and fix it according to our [internal] standards.
Absolutely. The project follows GNU Coding Standards by default. The user always has the final say in compilers and flags.
Absolutely. The project follows GNU Coding Standards by default. The project adds debug information in default builds.
Absolutely. The project does not use recursive directories, so there is no recursive make.
Absolutely. The project attempts to obtain a reproducible builds.
Absolutely. The project follows GNU Coding Standards by default. 'make install' and 'make uninstall' are supported in the makefile.
Absolutely. The project follows GNU Coding Standards by default. Users are allowed to override default choices.
Absolutely. The project follows GNU Coding Standards by default. We also work hard to minimize dependencies. The only thing needed to setup an environment is GNU make 3.80 or higher and a working C++ compiler that supports RTTI and exceptions.
The prject maintains three external projects. The three external projects allow users to use a different build system (other then GNU Make). The wiki pages for the projects:
And the corresponding GitHub repos:
While we provide external projects, they are only project build files for Autotools, Cmake and Android.
Whenever a new release of the library occurs, we package a new release of the build systems.
Absolutely. We remove deprecated APIs, or only provide them as needed for older/ancient platforms. On modern platforms the project uses modern system calls.
Absolutely. The project uses Travis, Cirrus and AppVeyor for CI. Results are sent to the [public] cryptopp-build mailing list at https://groups.google.com/forum/#!forum/cryptopp-build.
Our governance requires each bug and mailing list question has a postmortem examination. We try to determine why the instance problem (bug or question) happened. We then take action to fix future problems of the same class. We also add a specific test case in the case of a bug. We usually add documentation in response to a user question if it is missing. We consider lack of documentation bugs, too.
The project uses Gcov, but it is not automated (yet).
Our governance requires new algorithms have both documentation on the wiki and test cases. We don't add new algorithms without test cases. It is too dangerous.
It looks like we need to add a wiki page on this topic. I thought we had one, but I cannot find it.
Testing includes -Werror when using GCC and Clang.
The project complies with FIPS 140-2 software requirements and attempts to use "secure by default" settings. For example, the library's assert is "off by default" because asserts are so dangerous. Also see https://www.cryptopp.com/wiki/Assertions.
Note that the library only complies with FIPS 140-2. It is not longer validated (it used to be validated, but the validation was sunsetted by NIST).
When available, the project uses 128-bits of security by default. 128-bits of security is the US government's recommendation nowadays.
The Crypto++ library has an abundance of crypto agility :)
The library itself does not handle sensitive information per se.
The calling application will handle the sensitive information, and may use the library to encrypt it and store it where the user wants.
The library does not provide protocols like SSH or TLS.
The library does provide a X.509 certificate class that can be used to read and verify certificates and certificate chains. Also see https://www.cryptopp.com/wiki/X509Certificate.
The project signs releases with GnuPG using RSA-4096 keys and SHA-256 digests. Also see https://www.cryptopp.com/wiki/Release_Signing.
Hmmm.... I don't know how to sign a tag.
The project does not handle untrusted user inputs. The applications that user the library may do so.
The project uses hardened toolchain settings when available, like -fexceptions, -fplugin=annobin, -fstack-clash-protection, -fstack-protector-strong (or -fstack-protector), -grecord-gcc-switches, -mcet -fcf-protection, -Werror=format-security, -Werror=implicit-function-declaration, -fPIC and -pie for ASLR, -Wa,--noexecstack, -Wl,-z,relro, -Wl,-z,now and -Wl,-z,defs.
Ugh, the project lacks threat models, attack trees and compensating controls.
The project uses Coverity Scan on Linux and OS X. The project uses Visual Studio Enterprise Analysis on Windows. Finally, the project uses the Looks Good To Me continuous security analysis. Also see https://www.cryptopp.com/wiki/Coverity_Scan and https://lgtm.com.
The project uses Valgrind and Sanitizers to test for runtime violations. Valgrind detects memory and thread problems. Santiziers include Asan, Msan and UBsan.
The projects self tests also "fuzz" certain interfaces attempting to crash the test suite. The fuzzing occurs under Valgrind, Asan and Msan.
后退