ory/hydra · error
jwksx: key size must be a multiple of 8 for algorithm "%s" b
Error message
jwksx: key size must be a multiple of 8 for algorithm "%s" but got: %d
What it means
Returned by jwksx generate for HS256/HS384/HS512 when the requested key size in bits is not divisible by 8, so it cannot be converted to a whole number of bytes for the HMAC secret. The configured bitsize for the symmetric signing key is at fault.
Source
Thrown at oryx/jwksx/generator.go:118
key, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
return key, errors.Wrapf(err, "jwks: unable to generate key")
case jose.ES384:
// NB: The cryptographic operations do not use constant-time algorithms.
key, err := ecdsa.GenerateKey(elliptic.P384(), rand.Reader)
return key, errors.Wrapf(err, "jwks: unable to generate key")
case jose.ES512:
// NB: The cryptographic operations do not use constant-time algorithms.
key, err := ecdsa.GenerateKey(elliptic.P521(), rand.Reader)
return key, errors.Wrapf(err, "jwks: unable to generate key")
case jose.EdDSA:
_, key, err := ed25519.GenerateKey(rand.Reader)
return key, errors.Wrapf(err, "jwks: unable to generate key")
case jose.RS256, jose.RS384, jose.RS512, jose.PS256, jose.PS384, jose.PS512:
key, err := rsa.GenerateKey(rand.Reader, bits)
return key, errors.Wrapf(err, "jwks: unable to generate key")
case jose.HS256, jose.HS384, jose.HS512:
if bits%8 != 0 {
return nil, errors.Errorf(`jwksx: key size must be a multiple of 8 for algorithm "%s" but got: %d`, alg, bits)
}
key := make([]byte, bits/8)
if _, err := io.ReadFull(rand.Reader, key); err != nil {
return nil, errors.Wrapf(err, "jwks: unable to generate key")
}
return key, nil
default:
return nil, errors.Errorf(`jwksx: available algorithms are "%+v" but unknown algorithm was requested: "%s"`, GenerateSigningKeysAvailableAlgorithms(), alg)
}
}
View on GitHub (pinned to 4174065ffb)
Solutions
- Set the HS256/384/512 key length to a multiple of 8 bits (a whole number of bytes)
- Use a standard size such as 256 or 512 bits for the HMAC key
- Validate key sizes in configuration before key generation
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at oryx/jwksx/generator.go:118 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of ory/hydra@4174065ffb (2026-09-03).
Data as JSON: /api/errors/02e282a64440270e.
Report an issue: GitHub.