summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/rsa/rsa_eay.c
diff options
context:
space:
mode:
authortb <>2023-05-05 12:21:44 +0000
committertb <>2023-05-05 12:21:44 +0000
commitcbb774df47617a348f8854e2c7c75251e41333d4 (patch)
treed84042cf4e6f5fa6f82db77796665a46d6e71f58 /src/lib/libcrypto/rsa/rsa_eay.c
parent6e09131c76b8f3355a84f4dfe27686f421bbbe2c (diff)
downloadopenbsd-cbb774df47617a348f8854e2c7c75251e41333d4.tar.gz
openbsd-cbb774df47617a348f8854e2c7c75251e41333d4.tar.bz2
openbsd-cbb774df47617a348f8854e2c7c75251e41333d4.zip
Add back support for RSA_X931_PADDING
This makes the custom stalt stack work again. Tested by robert as part of a larger diff ok jsing
Diffstat (limited to 'src/lib/libcrypto/rsa/rsa_eay.c')
-rw-r--r--src/lib/libcrypto/rsa/rsa_eay.c30
1 files changed, 19 insertions, 11 deletions
diff --git a/src/lib/libcrypto/rsa/rsa_eay.c b/src/lib/libcrypto/rsa/rsa_eay.c
index e65319bda1..6db563f2a4 100644
--- a/src/lib/libcrypto/rsa/rsa_eay.c
+++ b/src/lib/libcrypto/rsa/rsa_eay.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: rsa_eay.c,v 1.59 2023/04/15 18:48:52 tb Exp $ */ 1/* $OpenBSD: rsa_eay.c,v 1.60 2023/05/05 12:21:44 tb Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -382,11 +382,14 @@ RSA_eay_private_encrypt(int flen, const unsigned char *from, unsigned char *to,
382 case RSA_PKCS1_PADDING: 382 case RSA_PKCS1_PADDING:
383 i = RSA_padding_add_PKCS1_type_1(buf, num, from, flen); 383 i = RSA_padding_add_PKCS1_type_1(buf, num, from, flen);
384 break; 384 break;
385 case RSA_X931_PADDING:
386 i = RSA_padding_add_X931(buf, num, from, flen);
387 break;
385 case RSA_NO_PADDING: 388 case RSA_NO_PADDING:
386 i = RSA_padding_add_none(buf, num, from, flen); 389 i = RSA_padding_add_none(buf, num, from, flen);
387 break; 390 break;
388 default: 391 default:
389 RSAerror(RSA_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE); 392 RSAerror(RSA_R_UNKNOWN_PADDING_TYPE);
390 goto err; 393 goto err;
391 } 394 }
392 if (i <= 0) 395 if (i <= 0)
@@ -446,11 +449,14 @@ RSA_eay_private_encrypt(int flen, const unsigned char *from, unsigned char *to,
446 goto err; 449 goto err;
447 450
448 if (padding == RSA_X931_PADDING) { 451 if (padding == RSA_X931_PADDING) {
449 RSAerror(RSA_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE); 452 if (!BN_sub(f, rsa->n, ret))
450 goto err; 453 goto err;
451 } 454 if (BN_cmp(ret, f) > 0)
452 455 res = f;
453 res = ret; 456 else
457 res = ret;
458 } else
459 res = ret;
454 460
455 /* put in leading 0 bytes if the number is less than the 461 /* put in leading 0 bytes if the number is less than the
456 * length of the modulus */ 462 * length of the modulus */
@@ -661,10 +667,9 @@ RSA_eay_public_decrypt(int flen, const unsigned char *from, unsigned char *to,
661 rsa->_method_mod_n)) 667 rsa->_method_mod_n))
662 goto err; 668 goto err;
663 669
664 if (padding == RSA_X931_PADDING) { 670 if (padding == RSA_X931_PADDING && (ret->d[0] & 0xf) != 12)
665 RSAerror(RSA_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE); 671 if (!BN_sub(ret, rsa->n, ret))
666 goto err; 672 goto err;
667 }
668 673
669 p = buf; 674 p = buf;
670 i = BN_bn2bin(ret, p); 675 i = BN_bn2bin(ret, p);
@@ -673,6 +678,9 @@ RSA_eay_public_decrypt(int flen, const unsigned char *from, unsigned char *to,
673 case RSA_PKCS1_PADDING: 678 case RSA_PKCS1_PADDING:
674 r = RSA_padding_check_PKCS1_type_1(to, num, buf, i, num); 679 r = RSA_padding_check_PKCS1_type_1(to, num, buf, i, num);
675 break; 680 break;
681 case RSA_X931_PADDING:
682 r = RSA_padding_check_X931(to, num, buf, i, num);
683 break;
676 case RSA_NO_PADDING: 684 case RSA_NO_PADDING:
677 r = RSA_padding_check_none(to, num, buf, i, num); 685 r = RSA_padding_check_none(to, num, buf, i, num);
678 break; 686 break;