ring offers a short list of algorithms with BoringSSL-derived assembly and a misuse-resistant API: there is no way to choose a nonce, sign a precomputed digest or load a key in an unusual format. That makes it fast and hard to hold wrong, and it is why converting keys and signatures from other stacks is where the work goes.
The encoding is part of the algorithm: ECDSA_P256_SHA256_FIXED_SIGNING produces 64-byte raw r‖s and ECDSA_P256_SHA256_ASN1_SIGNING DER, with matching _FIXED and _ASN1 verification constants. A signature checked under the other constant simply fails with Unspecified, so a JWS signature verified with the ASN1 constant — or an OpenSSL signature with FIXED — looks exactly like a forgery. The sample shows both outcomes. Signatures use a random nonce, s is not normalized, and verification accepts both halves.
Private keys are read only as PKCS#8 DER, and Ed25519 keys must be PKCS#8 v2 with the public key included: the 48-byte v1 form that OpenSSL and most tools write was rejected by Ed25519KeyPair::from_pkcs8 with VersionNotSupported, while from_pkcs8_maybe_unchecked and from_seed_unchecked accepted it. PEM, SEC1 and JWK private keys need converting first, for example with the JWK converter. Public keys are bare SEC1 points: public_key() returns the 65-byte uncompressed form, and compressed points are not accepted.
The curve list ends at P-256 and P-384 plus Ed25519; there is no P-521, no secp256k1 and no post-quantum algorithm. Projects that need those, or FIPS validation, move to aws-lc-rs, which offers a ring-compatible API.
To check what encoding a signature from ring is in, paste it into the DER ⇄ raw converter.