First of all, thank you for your interest in contributing to pyOpenSSL! This project has no company backing its development therefore we're dependent on help by the community.
Bug reports are very welcome. Please file them on the GitHub issue tracker. Good bug reports come with extensive descriptions of the error and how to reproduce it. Reporters are strongly encouraged to include an short, self contained, correct example.
All patches to pyOpenSSL should be submitted in the form of pull requests to the main pyOpenSSL repository, pyca/pyopenssl. These pull requests should satisfy the following properties:
- The pull request should focus on one particular improvement to pyOpenSSL. Create different pull requests for unrelated features or bugfixes.
- Code should follow PEP 8, especially in the "do what code around you does" sense. Follow OpenSSL naming for callables whenever possible is preferred.
- Pull requests that introduce code must test all new behavior they introduce as well as for previously untested or poorly tested behavior that they touch.
- Pull requests are not allowed to break existing tests. We usually don't comment on pull requests that are breaking the CI because we consider them work in progress. Please note that not having 100% code coverage for the code you wrote/touched also causes our CI to fail.
When introducing new functionality, please remember to write documentation.
New functions and methods should have a docstring describing what they do, what parameters they takes, and what they return. They should also come with type hints.
def dump_publickey(type: int, pkey: PKey) -> bytes: """ Dump a public key to a buffer. :param type: The file type (one of :data:`FILETYPE_PEM` or :data:`FILETYPE_ASN1`). :param pkey: The PKey to dump. :return: The buffer with the dumped key in it. """
Don't forget to add an
.. auto(function|class|method)::
statement to the relevant API document found indoc/api/
to actually add your function to the Sphinx documentation.Do not use
:py:
prefixes when cross-linking (Python is default). Do not use the generic:data:
or:obj:
. Instead use more specific types like:class:
,:func:
or:meth:
if applicable.Pull requests that introduce features or fix bugs should note those changes in the CHANGELOG.rst file. Please add new entries to the top of the current Changes section followed by a line linking to the relevant pull request:
- Added ``OpenSSL.crypto.some_func()`` to do something awesome. [`#1 <https://github.com/pyca/pyopenssl/pull/1>`_]
Use semantic newlines in reStructuredText files (files ending in
.rst
).
Finally, pull requests must be reviewed before merging. This process mirrors the cryptography code review process. Everyone can perform reviews; this is a very valuable way to contribute, and is highly encouraged.
Pull requests are merged by members of PyCA.
They should, of course, keep all the requirements detailed in this document as well as the pyca/cryptography
merge requirements in mind.
The final responsibility for the reviewing of merged code lies with the person merging it. Since pyOpenSSL is a sensitive project from a security perspective, reviewers are strongly encouraged to take this review and merge process very seriously.
If you need any help with the contribution process, you'll find us hanging out at #cryptography-dev
on Freenode IRC.
You can also ask questions on our mailing list.
Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.
If you feel that you found a security-relevant bug that you would prefer to discuss in private, please send us a GPG-encrypted e-mail.
The maintainer can be reached at [email protected] and his GPG key ID is 0xAE2536227F69F181
(Fingerprint: C2A0 4F86 ACE2 8ADC F817 DBB7 AE25 3622 7F69 F181
).
Feel free to cross-check this information with Keybase.