Skip to content

Commit efce9af

Browse files
Jaska Uimonenabonislawski
Jaska Uimonen
authored andcommitted
rimage: fix openssl 3.0 support in ver25 signing
Fix a misunderstanding with openssl APIs and don't "double sign" the binary. Signed-off-by: Jaska Uimonen <[email protected]>
1 parent d287016 commit efce9af

File tree

1 file changed

+4
-51
lines changed

1 file changed

+4
-51
lines changed

src/pkcs1_5.c

+4-51
Original file line numberDiff line numberDiff line change
@@ -200,11 +200,8 @@ static int rimage_sign(EVP_PKEY *privkey, struct image *image, enum manver ver,
200200
unsigned char *digest, unsigned char *signature)
201201
{
202202
EVP_PKEY_CTX *ctx = NULL;
203-
EVP_PKEY_CTX *ctx2 = NULL;
204-
unsigned char sig[MAN_RSA_SIGNATURE_LEN_2_5];
205203
size_t siglen = MAN_RSA_SIGNATURE_LEN;
206204
size_t sig_in = MAN_RSA_SIGNATURE_LEN_2_5;
207-
size_t sig_out = MAN_RSA_SIGNATURE_LEN_2_5;
208205
int ret;
209206

210207
ctx = EVP_PKEY_CTX_new(privkey, NULL /* no engine */);
@@ -234,30 +231,11 @@ static int rimage_sign(EVP_PKEY *privkey, struct image *image, enum manver ver,
234231
goto out;
235232
}
236233

237-
ret = EVP_PKEY_sign(ctx, sig, &sig_in, digest, SHA384_DIGEST_LENGTH);
234+
ret = EVP_PKEY_sign(ctx, signature, &sig_in, digest, SHA384_DIGEST_LENGTH);
238235
if (ret <= 0) {
239236
fprintf(stderr, "error: failed to sign manifest\n");
240237
goto out;
241238
}
242-
243-
/* encryption done with different context */
244-
ctx2 = EVP_PKEY_CTX_new(privkey, NULL /* no engine */);
245-
if (!ctx)
246-
return -ENOMEM;
247-
248-
ret = EVP_PKEY_encrypt_init(ctx2);
249-
if (ret <= 0)
250-
goto out;
251-
252-
ret = EVP_PKEY_CTX_set_rsa_padding(ctx2, RSA_NO_PADDING);
253-
if (ret <= 0) {
254-
fprintf(stderr, "error: failed to set 0 padding \n");
255-
goto out;
256-
}
257-
258-
ret = EVP_PKEY_encrypt(ctx2, signature, &sig_out, sig, sig_in);
259-
if (ret <= 0)
260-
fprintf(stderr, "error: failed to encrypt signature\n");
261239
}
262240
else {
263241
ret = EVP_PKEY_CTX_set_signature_md(ctx, EVP_sha256());
@@ -273,8 +251,6 @@ static int rimage_sign(EVP_PKEY *privkey, struct image *image, enum manver ver,
273251

274252
out:
275253
EVP_PKEY_CTX_free(ctx);
276-
if (ctx2)
277-
EVP_PKEY_CTX_free(ctx2);
278254

279255
return ret;
280256
}
@@ -331,9 +307,7 @@ static int rimage_verify(EVP_PKEY *privkey, struct image *image, enum manver ver
331307
unsigned char *digest, unsigned char *signature)
332308
{
333309
EVP_PKEY_CTX *ctx = NULL;
334-
EVP_PKEY_CTX *ctx2 = NULL;
335310
size_t siglen = MAN_RSA_SIGNATURE_LEN;
336-
unsigned char sig[MAN_RSA_SIGNATURE_LEN_2_5];
337311
size_t siglen25 = MAN_RSA_SIGNATURE_LEN_2_5;
338312
char err_buf[256];
339313
int ret;
@@ -369,34 +343,15 @@ static int rimage_verify(EVP_PKEY *privkey, struct image *image, enum manver ver
369343
if (ret <= 0)
370344
goto out;
371345

372-
ret = EVP_PKEY_CTX_set_signature_md(ctx, EVP_sha384());
346+
ret = EVP_PKEY_CTX_set_rsa_pss_saltlen(ctx, 32);
373347
if (ret <= 0)
374348
goto out;
375349

376-
/* decrypt signature */
377-
ctx2 = EVP_PKEY_CTX_new(privkey, NULL /* no engine */);
378-
if (!ctx)
379-
return -ENOMEM;
380-
381-
ret = EVP_PKEY_decrypt_init(ctx2);
350+
ret = EVP_PKEY_CTX_set_signature_md(ctx, EVP_sha384());
382351
if (ret <= 0)
383352
goto out;
384353

385-
ret = EVP_PKEY_CTX_set_rsa_padding(ctx2, RSA_NO_PADDING);
386-
if (ret <= 0) {
387-
ERR_error_string(ERR_get_error(), err_buf);
388-
fprintf(stderr, "error: set padding %s\n", err_buf);
389-
goto out;
390-
}
391-
392-
ret = EVP_PKEY_decrypt(ctx2, sig, &siglen25, signature, siglen25);
393-
if (ret <= 0) {
394-
ERR_error_string(ERR_get_error(), err_buf);
395-
fprintf(stderr, "error: decrypt %s\n", err_buf);
396-
goto out;
397-
}
398-
399-
ret = EVP_PKEY_verify(ctx, sig, siglen25, digest, SHA384_DIGEST_LENGTH);
354+
ret = EVP_PKEY_verify(ctx, signature, siglen25, digest, SHA384_DIGEST_LENGTH);
400355
if (ret <= 0) {
401356
ERR_error_string(ERR_get_error(), err_buf);
402357
fprintf(stderr, "error: verify %s\n", err_buf);
@@ -409,8 +364,6 @@ static int rimage_verify(EVP_PKEY *privkey, struct image *image, enum manver ver
409364

410365
out:
411366
EVP_PKEY_CTX_free(ctx);
412-
if (ctx2)
413-
EVP_PKEY_CTX_free(ctx2);
414367

415368
return ret;
416369
}

0 commit comments

Comments
 (0)