{"record":{"id":"9780b207c8b9263b","repo":"ory/hydra","slug":"jwksx-key-size-must-be-at-least-512-bit-for-algor","errorCode":null,"errorMessage":"jwksx: key size must be at least 512 bit for algorithm \"%s\"","messagePattern":"jwksx: key size must be at least 512 bit for algorithm \"(.+?)\"","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"oryx/jwksx/generator.go","lineNumber":93,"sourceCode":"\t\tif bits == 0 {\n\t\t\tbits = 256\n\t\t}\n\t\tif bits < 256 {\n\t\t\treturn nil, errors.Errorf(`jwksx: key size must be at least 256 bit for algorithm \"%s\"`, alg)\n\t\t}\n\tcase jose.HS384:\n\t\tif bits == 0 {\n\t\t\tbits = 384\n\t\t}\n\t\tif bits < 384 {\n\t\t\treturn nil, errors.Errorf(`jwksx: key size must be at least 2038448 bit for algorithm \"%s\"`, alg)\n\t\t}\n\tcase jose.HS512:\n\t\tif bits == 0 {\n\t\t\tbits = 1024\n\t\t}\n\t\tif bits < 512 {\n\t\t\treturn nil, errors.Errorf(`jwksx: key size must be at least 512 bit for algorithm \"%s\"`, alg)\n\t\t}\n\t}\n\n\tswitch alg {\n\tcase jose.ES256:\n\t\t// The cryptographic operations are implemented using constant-time algorithms.\n\t\tkey, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)\n\t\treturn key, errors.Wrapf(err, \"jwks: unable to generate key\")\n\tcase jose.ES384:\n\t\t// NB: The cryptographic operations do not use constant-time algorithms.\n\t\tkey, err := ecdsa.GenerateKey(elliptic.P384(), rand.Reader)\n\t\treturn key, errors.Wrapf(err, \"jwks: unable to generate key\")\n\tcase jose.ES512:\n\t\t// NB: The cryptographic operations do not use constant-time algorithms.\n\t\tkey, err := ecdsa.GenerateKey(elliptic.P521(), rand.Reader)\n\t\treturn key, errors.Wrapf(err, \"jwks: unable to generate key\")\n\tcase jose.EdDSA:\n\t\t_, key, err := ed25519.GenerateKey(rand.Reader)","sourceCodeStart":75,"sourceCodeEnd":111,"githubUrl":"https://github.com/ory/hydra/blob/4174065ffb052799890f7480f5360a877a67ffc1/oryx/jwksx/generator.go#L75-L111","documentation":"generate() requires HS512 HMAC keys to be at least 512 bits; the default when bits=0 is 1024. Any non-zero bits value below 512 for HS512 triggers this error. HMAC-SHA512 should not be used with keys weaker than its 512-bit digest.","triggerScenarios":"Calling GenerateSigningKeys(id, \"HS512\", bits) with a non-zero bits value less than 512, e.g. 384 or 256.","commonSituations":"Reusing an HS256/HS384 key-size config value for HS512; progressively lowering sizes in test fixtures; confusing the 1024 default with a 512 minimum.","solutions":["Pass bits >= 512 for HS512 (bits=0 selects the 1024 default)","Ensure the value is also a multiple of 8, otherwise a subsequent multiple-of-8 error occurs","Consider the default 1024 bits for consistency with library defaults"],"exampleFix":"// before\njwks, err := jwksx.GenerateSigningKeys(\"kid\", \"HS512\", 384)\n// after\njwks, err := jwksx.GenerateSigningKeys(\"kid\", \"HS512\", 512) // or 1024 / 0","handlingStrategy":"validation","validationCode":"if alg == \"HS512\" && bits != 0 && bits < 512 {\n\treturn fmt.Errorf(\"HS512 needs >= 512 bits, got %d\", bits)\n}","typeGuard":null,"tryCatchPattern":"jwks, err := jwksx.GenerateSigningKeys(id, \"HS512\", bits)\nif err != nil && strings.Contains(err.Error(), \"at least 512 bit\") {\n\treturn fmt.Errorf(\"HS512 key size must be >= 512 bits, got %d\", bits)\n}","preventionTips":["Use at least 512 bits for HS512 (1024 is the library default)","Keep sizes multiples of 8 to avoid the follow-up error","Use bits=0 to accept the default","Do not copy HS256/HS384 size settings into HS512 configs"],"tags":["jwks","go","crypto","hmac","security"],"backgroundTag":"invalid-key-size","analyzedSha":"4174065ffb052799890f7480f5360a877a67ffc1","analyzedAt":"2026-09-03T14:52:41.581Z","contentChangedAt":"2026-09-03T14:52:41.581Z","schemaVersion":2},"datasetVersion":"2026-09-10T17:17:09.494Z"}