GnuPG implements OpenPGP for file and email signing and encryption, package signing in many Linux distributions, and git commit signing. The facts here were checked on the Alpine 3.24.2 package, GnuPG 2.4.9 with libgcrypt 1.12.2. gpg --quick-gen-key with only a user ID creates an Ed25519 primary key for signing and certification plus a Curve25519 (cv25519) encryption subkey, both as version 4 keys, and the primary key expires after 1095 days — three years — unless an expiry is given. Inspect keys and signatures with the OpenPGP inspector.
ECDSA keys can be created on P-256, P-384, P-521, secp256k1 and the three Brainpool r1 curves; nistp224 fails with "Unknown elliptic curve". The signature packet carries r and s as two OpenPGP MPIs, neither DER nor fixed-width r‖s. P-256 signatures use SHA-256 by default; asking for SHA-256 on a P-384 key fails with "signing failed: Invalid length", while SHA-512 on a P-256 key is accepted.
Nonces are deterministic: with the clock frozen (--faked-system-time), two signatures of one file were byte-identical, and r matched an independent RFC 6979 implementation, so signing the same data twice does not reuse a nonce in a dangerous way. s is not normalized, and a signature with s replaced by n − s verified as good — relevant wherever signatures are expected to be unique.
Ed25519 signatures use the legacy EdDSA format (algorithm 22): R and S are MPIs, and what Ed25519 signs is the SHA-512 digest of the file and the signature's hashed fields, not the file itself. Left-padded to 32 bytes each, R‖S verified with OpenSSL against that digest and failed against the file — verifying gpg signatures with a general-purpose Ed25519 library requires computing the OpenPGP digest first. Ed448 keys are created as version 5 key packets, the format of the LibrePGP draft that GnuPG follows, while the default, ECDSA and Ed25519 keys checked were all version 4; make sure the other side reads version 5 before choosing Ed448. This release has no post-quantum algorithm: the public-key list is RSA, ELG, DSA, ECDH, ECDSA and EDDSA, and ky768_cv25519 is rejected as an unknown curve.
For scripts, read the machine-readable --status-fd output rather than the text: a valid signature gave GOODSIG and VALIDSIG with exit status 0, a signature over other data BADSIG with exit status 1, and a truncated packet NODATA with exit status 2. gpg --export-ssh-key with a fingerprint and ! writes an OpenSSH public key line for ECDSA and Ed25519 keys, while --export and --export-secret-keys write OpenPGP packets.