Skip to content

Commit d9046a3

Browse files
committed
Fix cupsJWTSign for EC with GNU TLS.
1 parent c7f4b05 commit d9046a3

1 file changed

Lines changed: 11 additions & 4 deletions

File tree

cups/jwt.c

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1476,6 +1476,8 @@ cupsJWTSign(cups_jwt_t *jwt, // I - JWT object
14761476
cups_json_t *sigx5c = NULL; // X.509 certificate chain, if any
14771477

14781478

1479+
DEBUG_printf("cupsJWTSign(jwt=%p, alg=%d, jwk=%p)", (void *)jwt, alg, (void *)jwk);
1480+
14791481
// Range check input...
14801482
if (!jwt || alg <= CUPS_JWA_NONE || alg >= CUPS_JWA_MAX || !jwk)
14811483
{
@@ -1516,10 +1518,15 @@ cupsJWTSign(cups_jwt_t *jwt, // I - JWT object
15161518

15171519
free(jwt->jose_string);
15181520
jwt->jose_string = cupsJSONExportString(jwt->jose);
1519-
make_signature(jwt, alg, jwk, signature, &sigsize, &sigkid, NULL);
1521+
1522+
if (!make_signature(jwt, alg, jwk, signature, &sigsize, &sigkid, NULL))
1523+
{
1524+
DEBUG_puts("2cupsJWTSign: Unable to create X5C signature.");
1525+
return (false);
1526+
}
15201527
}
15211528

1522-
DEBUG_printf("1cupsJWTSign: jose_string=\"%s\"", jwt->jose_string);
1529+
DEBUG_printf("1cupsJWTSign: jose_string=\"%s\", sigkid=\"%s\", sigsize=%u", jwt->jose_string, sigkid, (unsigned)sigsize);
15231530

15241531
// Save the key ID and signature values...
15251532
if (sigkid)
@@ -2196,7 +2203,7 @@ make_signature(cups_jwt_t *jwt, // I - JWT
21962203
sig_datum.data = NULL;
21972204
sig_datum.size = 0;
21982205

2199-
if (!gnutls_privkey_sign_data(key, algs[alg - CUPS_JWA_RS256], 0, &text_datum, &sig_datum) && sig_datum.size <= *sigsize)
2206+
if (!gnutls_privkey_sign_data(key, algs[alg - CUPS_JWA_ES256], 0, &text_datum, &sig_datum))
22002207
{
22012208
gnutls_datum_t r, s; // Signature coordinates
22022209
unsigned sig_len;
@@ -2220,7 +2227,7 @@ make_signature(cups_jwt_t *jwt, // I - JWT
22202227
}
22212228
else
22222229
{
2223-
DEBUG_printf("4make_signature: EC signing failed, sig_datum=%d bytes.", (int)sig_datum.size);
2230+
DEBUG_printf("4make_signature: EC signing failed, sig_datum=%d bytes, sigsize=%d.", (int)sig_datum.size, (int)*sigsize);
22242231
}
22252232
gnutls_free(sig_datum.data);
22262233
gnutls_privkey_deinit(key);

0 commit comments

Comments
 (0)