···4455## Generating keys
6677-Signing keys can be generated with [`signify`], from the OpenBSD project.
77+Signing keys can be generated with a variety of different tools.
88+99+### Signify
1010+1111+With [`signify`](https://man.openbsd.org/signify.1), from the OpenBSD project,
1212+one runs:
813914```
1015$ signify -G -p newkey.pub -s newkey.sec
1116```
12171313-If you do not wish to encrypt your keys, pass the `-n` flag to the
1414-command line of `signify`.
1818+If you do not wish to encrypt your keys, pass the `-n` flag to the command line
1919+of `signify`.
15201616-Alternatively, [`minisign`] keys may also be used. This project provides
1717-a more portable alternative to [`signify`].
2121+### Minisign
2222+2323+[`minisign`](https://github.com/jedisct1/minisign) provides a more portable
2424+alternative to [`signify`](https://man.openbsd.org/signify.1). Keys can be
2525+generated with:
18261927```
2028$ minisign -G -p newkey.pub -s newkey.sec
2129```
22302323-`git-signify` always assumes that [`minisign`] keys are encrypted,
2424-albeit the CLI tool allows generating non-encrypted keys.
3131+`git-signify` always assumes that
3232+[`minisign`](https://github.com/jedisct1/minisign) keys are encrypted, albeit
3333+the CLI tool allows generating non-encrypted keys.
3434+3535+### ML-Signify
3636+3737+[`ml-signify`](https://git.sr.ht/~sugo/ml-signify) provides post-quantum secure
3838+keys in the form of [ML-DSA](https://csrc.nist.gov/pubs/fips/204/final). Keys
3939+can be generated with:
25402626-[`signify`]: https://man.openbsd.org/signify.1
2727-[`minisign`]: https://github.com/jedisct1/minisign
4141+```
4242+$ ml-signify keygen --signing-key newkey.sec --verifying-key newkey.pub
4343+```
28442945## Basic usage
30463147This program keeps track of signatures made by a keypair with a given
3232-fingerprint as git references. References can be fetched from and
3333-pushed to a remote.
4848+fingerprint as git references. References can be fetched from and pushed to a
4949+remote.
34503551```
3652$ git signify pull origin
3753$ git signify push origin
3854```
39554040-Verification can be done with `git signify verify`. For example, to
4141-verify a release of `git-signify` itself:
5656+Verification can be done with `git signify verify`. For example, to verify a
5757+release of `git-signify` itself:
42584359```
4460$ git pull --tags
···6783?????? ???? dddddddddddddddddddddddddddddddddddddddd object
6884```
69857070-The entry `object` is a pointer to the respective git object being
7171-signed over, which typically assumes the form of a commit object.
7272-Then, `signature` contains the base64 encoded `signify` or `minisign`
7373-signature over the raw (20 byte) id of `object`. The remaining blobs,
7474-`version` and `algorithm`, represent the current version of the
7575-`git-signify` tree format and the algorithm (`minisign` or `signify`)
7676-being used, respectively.
8686+The entry `object` is a pointer to the respective git object being signed over,
8787+which typically assumes the form of a commit object. Then, `signature` contains
8888+the base64 encoded `signify`, `minisign`, or `ml-signify` signature over the raw
8989+(20 byte) id of `object`. The remaining blobs, `version` and `algorithm`,
9090+represent the current version of the `git-signify` tree format and the algorithm
9191+(`signify`, `minisign`, or `ml-signify`) being used, respectively.
77927893The tree is then committed along with a potential parent, which is the commit
7979-hash being signed over, if any. The resulting commit's hash is returned by
8080-`git signify raw sign`.
9494+hash being signed over, if any. The resulting commit's hash is returned by `git
9595+signify raw sign`.
81968297Signatures end up in `refs/signify/signatures/${key_fingerprint}/${sig_hash}`,
8398where `$key_fingerprint` can be computed by `git signify fingerprint`, and