You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

65 lines
3.8 KiB

5 years ago
  1. # Contributing to ACMEd
  2. ## Testing and bug report
  3. The first way to help is to actually use the software and [report any bug you encounter](https://github.com/breard-r/acmed/issues). Do not hesitate to test the limits.
  4. ## Improving the language
  5. Since the author is not a native English speaker, some of the texts used in this project should be fixed.
  6. ## Work on dependencies
  7. ### rust-openssl
  8. Although OpenSSL supports (Ed|X)(25519|448) since version 1.1.1, the `EVP_PKEY_get1_(ED|X)(25519|448)` functions, which are required for ACMEd, will only land in version 3.0.0. Being new function, bindings have to be written in the `openssl` crate. At first sight, such bindings should be added in the `openssl::pkey::PKey` struct along with the other `EVP_PKEY_get1_*` bindings.
  9. - https://github.com/sfackler/rust-openssl/issues/1263
  10. - https://github.com/openssl/openssl/commit/7c664b1f1b5f60bf896f5fdea5c08c401c541dfe
  11. ### botan and botan-sys
  12. Although Botan isn't a dependency, it is considered for the replacement of OpenSSL as the default cryptographic API (although OpenSSL will be kept as an alternative). But before this can be done, the Botan crate need to support a few features:
  13. - Access to a certificate's expiration time (via `botan_sys::botan_x509_cert_get_time_expires`).
  14. - Access to a certificate's subject's alt names.
  15. - Self-signed certificate generation (via `botan_sys::botan_x509_cert_gen_selfsigned`).
  16. - CSR (requires to add bindings to [create_cert_req](https://botan.randombit.net/handbook/api_ref/x509.html#creating-pkcs-10-requests)) with DER export.
  17. ### attohttpc
  18. Add an optional Botan support as the cryptographic library.
  19. ### Find or create a good template engine
  20. As reported in [issue #8](https://github.com/breard-r/acmed/issues/8), there is currently no perfect template engine. A good way to help improve ACMEd would be to find or create one that supports all the listed requirements.
  21. ## Improving the code
  22. As a one-man project, it has several goals already set but not explicitly written in an issue or any other follow-up file. It will not be the case before version 1.0 is released since everything may change at any moment. Therefore, it is recommended to request change instead of implementing them, this way we can discuss how things should be made.
  23. If you really want to submit a pull request, please :
  24. - document your changes in the man pages and the `CHANGELOG.md` file
  25. - write as much tests as you can
  26. - run `cargo test` and be sure every test pass
  27. - format your code using [rustfmt](https://github.com/rust-lang/rustfmt)
  28. - be sure not to have any warning when compiling
  29. - run [clippy](https://github.com/rust-lang/rust-clippy) and fix any issue
  30. - refrain from including a new dependency (crates having `ring` in their dependency tree are a no-go, see #2)
  31. - beware of potential repercussions on the default hooks: those should remain usable
  32. Not following the rules above will delay the merge since they will have to be fixed first.
  33. ## Author vs. contributor
  34. Some people have troubles seeing the difference between an author and a contributor. Here is how it is seen withing this project.
  35. A contributor is a person who helps the project in various ways whenever she or he wants. As such, a contributor does not have any obligation other than being respectful and open-minded. People who wrote code that have been accepted are automatically listed in the [contributors page](https://github.com/breard-r/acmed/graphs/contributors). The creation of a file with the names of people contributing outside of the code base will be studied upon request from such people.
  36. An author is a person who has some responsibilities on the project. Authors are expected to contribute on a regular basis, decide architectural choices, enforce copyright issues and so on. One does not grant himself the author status, it is given by the others authors after having discussed the request.