[PATCH] crypto: rsa: add debug message if leading zero byte is missing
From: Martin Kepplinger-Novakovic
Date: Thu Feb 12 2026 - 05:40:27 EST
When debugging RSA certificate validation it can be valuable to see
why the RSA verify() callback returns -EINVAL.
Signed-off-by: Martin Kepplinger-Novakovic <martin.kepplinger-novakovic@xxxxxxxxxxxxx>
---
hi,
my real issue is: When using a certificate based on an RSA-key,
I sometimes see signature-verify errors and (via dm-verity)
rootfs signature-verify errors, all triggered by "no leading 0 byte".
key/cert generation:
openssl req -x509 -newkey rsa:4096 -keyout ca_key.pem -out ca.pem -nodes -days 365 -set_serial 01 -subj /CN=ginzinger.com
and simply used as trusted built-in key and rootfs hash sign appended
to rootfs (squashfs).
I'm on imx6ul. The thing is: Using the same certificate/key, works on
old v5.4-based kernels, up to v6.6!
Starting with commit 2f1f34c1bf7b309 ("crypto: ahash - optimize performance
when wrapping shash") it starts to break. it is not a commit on it's own I
can revert and move on.
What happended since v6.6 ? On v6.7 I see
[ 2.978722] caam_jr 2142000.jr: 40000013: DECO: desc idx 0: Header Error. Invalid length or parity, or certain other problems.
and later the above -EINVAL from the RSA verify callback, where I add
the debug printing I see.
What's the deal with this "leading 0 byte"?
thank you!
martin
crypto/rsa-pkcs1pad.c | 5 +++--
crypto/rsassa-pkcs1.c | 5 +++--
2 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/crypto/rsa-pkcs1pad.c b/crypto/rsa-pkcs1pad.c
index 50bdb18e7b483..65a4821e9758b 100644
--- a/crypto/rsa-pkcs1pad.c
+++ b/crypto/rsa-pkcs1pad.c
@@ -191,9 +191,10 @@ static int pkcs1pad_decrypt_complete(struct akcipher_request *req, int err)
out_buf = req_ctx->out_buf;
if (dst_len == ctx->key_size) {
- if (out_buf[0] != 0x00)
- /* Decrypted value had no leading 0 byte */
+ if (out_buf[0] != 0x00) {
+ pr_debug("Decrypted value had no leading 0 byte\n");
goto done;
+ }
dst_len--;
out_buf++;
diff --git a/crypto/rsassa-pkcs1.c b/crypto/rsassa-pkcs1.c
index 94fa5e9600e79..22919728ea1c8 100644
--- a/crypto/rsassa-pkcs1.c
+++ b/crypto/rsassa-pkcs1.c
@@ -263,9 +263,10 @@ static int rsassa_pkcs1_verify(struct crypto_sig *tfm,
return -EINVAL;
if (dst_len == ctx->key_size) {
- if (out_buf[0] != 0x00)
- /* Encrypted value had no leading 0 byte */
+ if (out_buf[0] != 0x00) {
+ pr_debug("Encrypted value had no leading 0 byte\n");
return -EINVAL;
+ }
dst_len--;
out_buf++;
--
2.47.3