From 6fa1b1aae7f61f290af67f3edfc03303565b7e37 Mon Sep 17 00:00:00 2001 From: Kakhnovich Raman Date: Mon, 14 Sep 2026 14:17:32 +0000 Subject: [PATCH 1/2] Fix issue in algorithm of hash computing for EncryptionToolsRevision5_6 --- src/main/java/org/verapdf/tools/EncryptionToolsRevision5_6.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/verapdf/tools/EncryptionToolsRevision5_6.java b/src/main/java/org/verapdf/tools/EncryptionToolsRevision5_6.java index d3838562..ab31d7ee 100644 --- a/src/main/java/org/verapdf/tools/EncryptionToolsRevision5_6.java +++ b/src/main/java/org/verapdf/tools/EncryptionToolsRevision5_6.java @@ -128,7 +128,7 @@ private static byte[] computeHash(byte[] password, byte[] salt, byte[] u, byte[] e = aes.doFinal(k1); int shaType = getReminderByModulo3(Arrays.copyOf(e, 16)); k = getSHAHash(shaType == 0 ? 256 : shaType == 1 ? 384 : 512, e); - if (rounds >= 63 && (e[e.length - 1] & 0xFF) <= rounds - 32) { + if (rounds >= 63 && (e[e.length - 1] & 0xFF) <= rounds - 31) { break; } rounds++; From 4aabf1d9d4107dcfa048e0163f34b3ccd7126438 Mon Sep 17 00:00:00 2001 From: Kakhnovich Raman Date: Tue, 15 Sep 2026 10:28:22 +0300 Subject: [PATCH 2/2] Start counting rounds from 1 --- .../java/org/verapdf/tools/EncryptionToolsRevision5_6.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/verapdf/tools/EncryptionToolsRevision5_6.java b/src/main/java/org/verapdf/tools/EncryptionToolsRevision5_6.java index ab31d7ee..8c74cd6d 100644 --- a/src/main/java/org/verapdf/tools/EncryptionToolsRevision5_6.java +++ b/src/main/java/org/verapdf/tools/EncryptionToolsRevision5_6.java @@ -113,7 +113,7 @@ private static byte[] computeHash(byte[] password, byte[] salt, byte[] u, } byte[] k = getSHAHash(256, hashInput); if (revision > 5) { - int rounds = 0; + int rounds = 1; while (true) { byte[] sequence = ASBufferedInFilter.concatenate(password, password.length, k, k.length); if (isCheckingOwnerPassword) { @@ -128,7 +128,7 @@ private static byte[] computeHash(byte[] password, byte[] salt, byte[] u, byte[] e = aes.doFinal(k1); int shaType = getReminderByModulo3(Arrays.copyOf(e, 16)); k = getSHAHash(shaType == 0 ? 256 : shaType == 1 ? 384 : 512, e); - if (rounds >= 63 && (e[e.length - 1] & 0xFF) <= rounds - 31) { + if (rounds >= 64 && (e[e.length - 1] & 0xFF) <= rounds - 32) { break; } rounds++;