| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -738,19 +738,25 @@ bool SignTraits::DeriveBits( | |||
| 738 | 738 | size_t len; | |
| 739 | 739 | unsigned char* data = nullptr; | |
| 740 | 740 | if (IsOneShot(params.key)) { | |
| 741 | - EVP_DigestSign( | ||
| 741 | + if (!EVP_DigestSign( | ||
| 742 | 742 | context.get(), | |
| 743 | 743 | nullptr, | |
| 744 | 744 | &len, | |
| 745 | 745 | params.data.data<unsigned char>(), | |
| 746 | - params.data.size()); | ||
| 746 | + params.data.size())) { | ||
| 747 | + crypto::CheckThrow(env, SignBase::Error::kSignPrivateKey); | ||
| 748 | + return false; | ||
| 749 | + } | ||
| 747 | 750 | data = MallocOpenSSL<unsigned char>(len); | |
| 748 | - EVP_DigestSign( | ||
| 751 | + if (!EVP_DigestSign( | ||
| 749 | 752 | context.get(), | |
| 750 | 753 | data, | |
| 751 | 754 | &len, | |
| 752 | 755 | params.data.data<unsigned char>(), | |
| 753 | - params.data.size()); | ||
| 756 | + params.data.size())) { | ||
| 757 | + crypto::CheckThrow(env, SignBase::Error::kSignPrivateKey); | ||
| 758 | + return false; | ||
| 759 | + } | ||
| 754 | 760 | ByteSource buf = | |
| 755 | 761 | ByteSource::Allocated(reinterpret_cast<char*>(data), len); | |
| 756 | 762 | *out = std::move(buf); | |
@@ -760,13 +766,16 @@ bool SignTraits::DeriveBits( | |||
| 760 | 766 | params.data.data<unsigned char>(), | |
| 761 | 767 | params.data.size()) || | |
| 762 | 768 | !EVP_DigestSignFinal(context.get(), nullptr, &len)) { | |
| 769 | + crypto::CheckThrow(env, SignBase::Error::kSignPrivateKey); | ||
| 763 | 770 | return false; | |
| 764 | 771 | } | |
| 765 | 772 | data = MallocOpenSSL<unsigned char>(len); | |
| 766 | 773 | ByteSource buf = | |
| 767 | 774 | ByteSource::Allocated(reinterpret_cast<char*>(data), len); | |
| 768 | - if (!EVP_DigestSignFinal(context.get(), data, &len)) | ||
| 775 | + if (!EVP_DigestSignFinal(context.get(), data, &len)) { | ||
| 776 | + crypto::CheckThrow(env, SignBase::Error::kSignPrivateKey); | ||
| 769 | 777 | return false; | |
| 778 | + } | ||
| 770 | 779 | ||
| 771 | 780 | if (UseP1363Encoding(params.key, params.dsa_encoding)) { | |
| 772 | 781 | *out = ConvertSignatureToP1363(env, params.key, buf); | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -742,3 +742,17 @@ assert.throws( | |||
| 742 | 742 | } | |
| 743 | 743 | } | |
| 744 | 744 | } | |
| 745 | + | ||
| 746 | + // The sign function should not swallow OpenSSL errors. | ||
| 747 | + // Regression test for https://github.com/nodejs/node/issues/40794. | ||
| 748 | + { | ||
| 749 | + assert.throws(() => { | ||
| 750 | + const { privateKey } = crypto.generateKeyPairSync('rsa', { | ||
| 751 | + modulusLength: 512 | ||
| 752 | + }); | ||
| 753 | + crypto.sign('sha512', 'message', privateKey); | ||
| 754 | + }, { | ||
| 755 | + code: 'ERR_OSSL_RSA_DIGEST_TOO_BIG_FOR_RSA_KEY', | ||
| 756 | + message: /digest too big for rsa key/ | ||
| 757 | + }); | ||
| 758 | + } | ||
| Back | FazBrowse Home | New Git URL |
0 commit comments