遵循以下最佳实践的项目将能够自愿的自我认证,并显示他们已经实现了核心基础设施计划(OpenSSF)徽章。 显示详细资料
[](https://www.bestpractices.dev/projects/531)
<a href="https://www.bestpractices.dev/projects/531"><img src="https://www.bestpractices.dev/projects/531/badge"></a>
Crypto and TLS library for C++
A coding standard is needed and will be written soon.
The roadmap is available here https://github.com/randombit/botan/blob/master/doc/roadmap.rst
The project is a programming library (and associated command line utility) without any graphical interface.
The only textual outputs of the library are error messages which are not intended to be interpreted by end users.
No passwords are stored by the project website.
When a new major release is made, the prior major release branch is maintained and supported for at least 2-3 years after
See the branch support status at https://botan.randombit.net/handbook/support.html#branch-support-status
GitHub issues can track individual issues
See https://botan.randombit.net/security.html for a list of recent advisories with credits.
See https://botan.randombit.net/security.html for instructions on reporting security issues.
CI contains clang-format and clang-tidy checks which verify certain aspects of the coding style. There are many aspects of the coding style for which no automated tool exists.
clang-format
clang-tidy
CXX, CXXFLAGS, LDFLAGS and AR env variables can be used to specify the toolchain.
The install script does not strip debug symbols, if debug was enabled during the build then symbols will be included in the installed library.
Recursive make considered harmful.
The build is deterministic.
For installation make install
make install
Uninstallation is not supported by the native build system. We generally rely on system package managers for this.
DESTDIR is used to specify the install location.
"configure.py && make && make install" will build the project including tests, and install the library.
No external dependencies are required.
No external dependencies are required, and no such dependencies are bundled.
Botan only supports operating systems that are supported by their original vendors. So we assume POSIX.1-2008 or Windows 7 as a minimum.
Tests run automatically on CI, see for example https://github.com/randombit/botan/actions/workflows/ci.yml
In general the practice is when fixing a bug to also check in a test that verifies this bug is resolved.
Currently code coverage for test suite is 88-95% depending on mechanism used.
It should be documented.
Currently developer mode uses warning flags -Werror -Wall -Wextra -Wpedantic -Wstrict-aliasing -Wstrict-overflow=5 -Wcast-align -Wmissing-declarations -Wpointer-arith -Wcast-qual -Wzero-as-null-pointer-constant -Wnon-virtual-dtor -Wold-style-cast -Wsuggest-override -Wshadow -Wno-error=old-style-cast -Wno-error=zero-as-null-pointer-constant -Wno-error=strict-overflow -Wno-error=deprecated-declarations
In TLS SHA-1 certificates, 3DES ciphers, other such things are disabled by default.
Botan provides AES, Twofish, Serpent and several other secure schemes. Similarly for hashes, signatures, etc.
The library processes credentials and private keys in a variety of ways. The storage location of this information is up to the library user.
HTTP is used for OCSP access but HTTPS is not appropriate in that application as the entire response is signed by a trusted key.
TLS v1.2 and v1.3 are supported.
Certificate verification is performed by default.
Only use of HTTP is for OCSP. No private or PII data is sent.
All releases are signed. Key is included in https://github.com/randombit/botan/blob/master/doc/pgpkey.txt
All tags are PGP signed. Commits by most of the developers are also signed.
This is checked using a combination of specific test cases and extensive fuzzing.
-fstack-protector is used by default. https://github.com/randombit/botan/blob/master/src/build-data/cc/gcc.txt
In the design we take measures to limit the possibility of memory errors, which are most likely to have catastrophic results with regards to security. In the history of the project to date, only 4 memory errors have been identified.
Coverity scanner is primarily security focused. For the others, we simply enable all warnings.
Code for fuzzing the library is included. We also use OSS-Fuzz
后退