From 9b51b20be254e557c27987396124c1b15201a670 Mon Sep 17 00:00:00 2001 From: "Josef (kwart) Cacek" Date: Sun, 26 Jul 2026 23:48:37 +0200 Subject: [PATCH] Don't refuse to sign when append mode can't bump the declared PDF version Signing a PDF whose declared version is older than the one nominally associated with the chosen hash algorithm (e.g. SHA-256 on a PDF-1.3 document) aborted in append mode, because OpenPDF cannot rewrite the header version of an incremental update. The declared version has no bearing on the signature: the digest lives inside the CMS blob, no /DigestMethod entry is written for adbe.pkcs7.detached, and validators accept SHA-256 regardless of the declared version. The DSS engine has never had an equivalent check, so the same input signed fine there and failed here. Log a warning and carry on instead of aborting. Also fixes two defects in the same block: - console.updateVersion was "... 1.{0} -> 1.{1}" while the caller already passed full version strings, rendering "1 1.3 -> 11.6". A leftover from OpenPDF 1.x, where getPdfVersion() returned a bare digit. Corrected in all locales; arguments now pass version names so both messages read alike. - PdfVersion.fromStringVersion() returns null outside 1.2-1.7, so a PDF-1.0 or PDF-1.1 input hit an NPE on getVersionName() - exactly the documents this branch targets. Falls back to the raw version string. console.updateVersionNotPossibleInAppendModeForGivenHash is replaced by console.appendModeVersionNotUpdated; the old text told users to disable append mode or pick another algorithm, which is no longer the remedy. Removed from all locales so no translation keeps showing the old wording, along with some stale commented-out copies of a related key. Co-Authored-By: Claude Opus 5 --- .../jsignpdf/translations/messages.properties | 5 ++--- .../translations/messages_cs.properties | 4 +--- .../translations/messages_de.properties | 4 +--- .../translations/messages_el.properties | 3 +-- .../translations/messages_es.properties | 4 +--- .../translations/messages_fr.properties | 3 +-- .../translations/messages_hr.properties | 4 +--- .../translations/messages_hu.properties | 3 +-- .../translations/messages_hy.properties | 3 +-- .../translations/messages_it.properties | 3 +-- .../translations/messages_ja.properties | 3 +-- .../translations/messages_nb.properties | 3 +-- .../translations/messages_pl.properties | 3 +-- .../translations/messages_pt.properties | 4 +--- .../translations/messages_ru.properties | 3 +-- .../translations/messages_sk.properties | 4 +--- .../translations/messages_ta.properties | 3 +-- .../translations/messages_zh_CN.properties | 3 +-- .../translations/messages_zh_TW.properties | 3 +-- .../engine/openpdf/OpenPdfSigningEngine.java | 20 ++++++++++--------- 20 files changed, 31 insertions(+), 54 deletions(-) diff --git a/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages.properties b/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages.properties index b864f44f..df2fee58 100644 --- a/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages.properties +++ b/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages.properties @@ -2,6 +2,7 @@ certificationLevel.formFill=Form filling allowed certificationLevel.formFillAnnot=Form filling and annotations allowed certificationLevel.noChanges=No changes allowed certificationLevel.notCertified=Not certified +console.appendModeVersionNotUpdated=The chosen hash algorithm ({0}) is declared for {1} and newer, but the original document declares {2}. The declared version cannot be updated in the "append" signature mode, so the document keeps declaring {2}. This is a conformance detail only - the signature itself is not affected. These are the algorithm requirements: {3} console.certificateChainEmpty=No private key was found. Check the keystore settings (keystore type, filepath, password, key alias). console.certificateExpired=Certificate {0} expired already. console.certificateNotForSignature=Certificate {0} is not intended for digital signing. @@ -95,9 +96,7 @@ console.skippingSigning=File validation failed, check your PDF paths. Skipping s console.starting=Starting JSignPdf console.stdinSentinelWarning=[jsignpdf] Warning: --{0} value matches the stdin sentinel, but --{1} was not provided. Using it as a literal password. console.unsupportedEncryptionType=Unsupported encryption type. -console.updateVersion=Updating PDF version info 1.{0} -> 1.{1} -#console.updateVersionNotPossibleInAppendMode=Choosen configuration requires PDF version update, but it's not possible in the "append" signature mode. -console.updateVersionNotPossibleInAppendModeForGivenHash=The chosen hash algorithm ({0}) requires a newer PDF version ({1}) than the original ({2}). The PDF version update is impossible in the "append" signature mode. Either disable the append mode or pick another hash algorithm. These are the algorithm requirements: {3} +console.updateVersion=Updating PDF version info {0} -> {1} console.usedKeyAlias=Used key alias: {0} console.validatingFiles=Checking input and output PDF paths. default.l2text.date=Date: diff --git a/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_cs.properties b/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_cs.properties index f12717ba..f5ce9601 100644 --- a/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_cs.properties +++ b/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_cs.properties @@ -93,7 +93,7 @@ console.settingTsaPolicy=Nastavuji OID politiky časového razítka: {0} console.skippingSigning=Kontrola PDF souborů selhala, zkontrolujte nastavené cesty. Podpis nebude vytvořen. console.starting=Spouštím JSignPdf console.unsupportedEncryptionType=Nepodporovaný typ kódování PDF. -console.updateVersion=Aktualizuji verzi PDF 1.{0} -> 1.{1} +console.updateVersion=Aktualizuji verzi PDF {0} -> {1} console.usedKeyAlias=Použitý privátní klíč: {0} console.validatingFiles=Kontroluji cesty k vstupnímu a výstupnímu PDF souboru. default.l2text.date=Datum: @@ -313,8 +313,6 @@ hlp.footer.examples=Příklady:\n---------\n$ jsignpdf -kst WINDOWS-MY mydocumen gui.tsaOcsp.button=TSA/OCSP/CRL file.notReadable=Soubor {0} není možné aplikací načíst. Zkontrolujte, zda soubor existuje a zda uživatel má práva ke čtení souboru. console.setSignerName=Nastavuji jméno podepisujícího: {0} -#console.updateVersionNotPossibleInAppendMode=Choosen configuration requires PDF version update, but it's not possible in the "append" signature mode. -console.updateVersionNotPossibleInAppendModeForGivenHash=Zvolený hešovací algoritmus ({0}) vyžaduje PDF verzi novější ({1}) než v původním dokumentu ({2}). Změna verze není možná v režimu "připojení podpisu k existujícím". Buď vypněte připojení nebo zvolte jinou hešovací funkci. Toto jsou algoritmy s uvedením minimální PDF verze: {3} hlp.signerName=jméno podepisujícího. Výchozí hodnota je "common name" atribut (CN) ve zvoleném certifikátu. hlp.gui=(beta) otevři GUI i když jsou použity parametry na příkazové řádce # diff --git a/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_de.properties b/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_de.properties index e1f0a3df..481bb0b5 100644 --- a/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_de.properties +++ b/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_de.properties @@ -238,14 +238,12 @@ hlp.hashAlgorithm=Hash-Algorithmus, der für die Signatur verwendet wird. Der St console.pdfEncError.cantUseCertificate=Eine Verschl�sselung der Datei mit dem Zertifikat ist nicht m�glich. Die Verschl�sselung mit dem �ffentlichen Schl�ssel aus dem Zertifikat "{0}" wird von der laufenden Instanz von Java nicht unterst�tzt. hlp.tsaUrl=Adresse des Zeitstempeldienstes (TSA). Bei Verwendung wird der Zeitstempel in die Signatur eingebunden. (Zu Testzwecken können Sie folgende URL verwenden: http://zeitstempel.dfn.de/) console.crlinfo.retrieveCrlUrl=Lesen von CRL-Verteilungspunkten aus dem Zertifikat {0} -console.updateVersion=Aktualisiere PDF-Versionsinformationen 1.{0} -> 1.{1} +console.updateVersion=Aktualisiere PDF-Versionsinformationen {0} -> {1} extcsp.unknownhashalg=Der angegebene Fingerprint/Hash-Algorithmus ({0}) wird nicht unterstützt gui.tsa.certFile.label=Pfad der Schlüsseldatei (PKCS12) hlp.footer.examples=Beispiele:\n---------\n$ jsignpdf -kst WINDOWS-MY mydocument.pdf\n-> erstellt eine Kopie von mydocument.pdf mit dem Namen mydocument_signed.pdf, die mit dem ersten Zertifikat digital signiert ist, das im standardmäßigen Zertifikatspeicher des Betriebssystems gefunden wurde\n------------\n$ jsignpdf -kst PKCS12 -ksf my_certificate.pfx -ksp myPrivateKeystorePassword -ka cert23 -pe PASSWORD -opwd xxx123 -upwd 123xxx -pr DISALLOW_PRINTING mydocument.pdf\n-> erzeugt die signierte und verschlüsselte Datei mydocument_signed.pdf, das Drucken der neuen Datei ist nicht erlaubt. Für die Signatur wird der Schlüssel mit dem Alias cert23 aus der Datei my_certificate.pfx verwendet\n------------\n$ jsignpdf -lkt\n-> listet die Schlüsselspeichertypen auf\n------------\n$ jsignpdf -kst PKCS12 -ksf my_certificate.pfx -ksp myVeryPrivatePassword -lk -q\n-> listet die Namen (Aliase) der in der Datei my_certificate.pfx gespeicherten Schlüssel unter Verwendung des Passworts für den Schlüsselspeicher auf. Der stille Modus ist aktiviert, sodass keine Debug-Informationen ausgegeben werden. console.crlinfo.distPointNotSupported=Die Erweiterung Verteilungspunkte (Distribution Points extension) wird vom bereitgestellten Zertifikat nicht unterstützt. console.skippingSigning=Überprüfung der PDF-Datei fehlgeschlagen, Pfade überprüfen. Die Signatur wird nicht erstellt. -#console.updateVersionNotPossibleInAppendMode=Choosen configuration requires PDF version update, but it's not possible in the "append" signature mode. -console.updateVersionNotPossibleInAppendModeForGivenHash=Der ausgewählte Hash-Algorithmus ({0}) erfordert eine neuere PDF-Version ({1}) als im Originaldokument ({2}). Es ist nicht möglich, die Version im Modus "Signatur an vorhandene anhängen" zu ändern. Deaktivieren Sie entweder den Modus "Signatur an vorhandene anhängen" oder wählen Sie eine andere Hash-Funktion. Dies sind die Voraussetzungen der Algorithmen: {3} error.sslHandshakeException=SSL-Verbindung fehlgeschlagen - das Zertifikat des Servers ist wahrscheinlich nicht bekannt. Sie können das Tool InstallCert verwenden, um das Zertifikat in den Java Keystore zu importieren. gui.certificateNotForEncryption.error=Die Datei {0} enthält entweder kein X509-Zertifikat oder die Verschlüsselung wird für das Zertifikat nicht unterstützt. hlp.bgScale=Vergrößerungsverhältnis für das Hintergrundbild der sichtbaren Unterschrift. Optionen: Positive Zahl - Ein Vielfaches dieser Zahl wird verwendet, um die ursprüngliche Bildgröße zu multiplizieren. (z. B. 0,5 eingeben, um zu halbieren). Null – Das Bild wird so skaliert, dass es den gesamten Signaturhintergrund ausfüllt. Negative Zahl – Das Bild wird so skaliert, dass das Seitenverhältnis beibehalten wird und die beste Anpassung den Hintergrund ausfüllt. diff --git a/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_el.properties b/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_el.properties index c88bd982..14863664 100644 --- a/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_el.properties +++ b/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_el.properties @@ -92,7 +92,7 @@ console.settingTsaPolicy=Ορισμός πολιτικής χρονοσήμαν console.skippingSigning=Η επαλήθευση του αρχείου απέτυχε, ελέγξτε τις διαδρομές των PDF. Παράλειψη της διαδικασίας υπογραφής. console.starting=Εκκίνηση του JSignPdf console.unsupportedEncryptionType=Μη υποστηριζόμενος τύπος κρυπτογράφησης. -console.updateVersion=Ενημέρωση πληροφορίας έκδοσης PDF 1.{0} -> 1.{1} +console.updateVersion=Ενημέρωση πληροφορίας έκδοσης PDF {0} -> {1} console.usedKeyAlias=Χρησιμοποιήθηκε το πιστοποιητικό: {0} console.validatingFiles=Έλεγχος των διαδρομών των PDF εισόδου και εξόδου. default.l2text.date=Ημερομηνία: @@ -410,7 +410,6 @@ jfx.gui.console.title=Κονσόλα εξόδου jfx.gui.console.clear=Καθαρισμός console.setSignerName=Ορισμός ονόματος υπογράφοντος: {0} console.settingTsaHashAlg=Ορισμός αλγορίθμου κατακερματισμού TSA: {0} -console.updateVersionNotPossibleInAppendModeForGivenHash=Ο επιλεγμένος αλγόριθμος κατακερματισμού ({0}) απαιτεί νεότερη έκδοση PDF ({1}) από την αρχική ({2}). Η ενημέρωση της έκδοσης PDF δεν είναι δυνατή στη λειτουργία υπογραφής "append". Είτε απενεργοποιήστε τη λειτουργία append είτε επιλέξτε άλλον αλγόριθμο κατακερματισμού. Οι απαιτήσεις του αλγορίθμου είναι: {3} extcsp.certfactory=Αποτυχία δημιουργίας στιγμιότυπου του CertificateFactory extcsp.iohost=Δεν είναι δυνατή η σύνδεση με τον διακομιστή υπογραφής - σφάλμα σύνδεσης: {0} extcsp.nocert=Δεν ελήφθη πιστοποιητικό από το keystore, σφάλμα: {0} diff --git a/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_es.properties b/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_es.properties index 5bb73d2c..07a05f13 100644 --- a/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_es.properties +++ b/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_es.properties @@ -91,7 +91,7 @@ console.settingTsaPolicy=Configurando el ID de objeto (OID) de la política de l console.skippingSigning=La validación del archivo ha fallado, se recomiendo comprobar la ruta a los PDF. Saltándose el proceso de firma. console.starting=Arrancando JSignPdf console.unsupportedEncryptionType=No se reconoce el tipo de cifrado. -console.updateVersion=Actualizando la información de la versión PDF 1. {0} -> 1. {1} +console.updateVersion=Actualizando la información de la versión PDF {0} -> {1} console.usedKeyAlias=Alias de clave utilizado: {0} console.pdfEncError.cantUseCertificate=No se puede utilizar el cifrado de certificado del PDF. El cifrado que utiliza la clave p�blica del certificado "{0}" no es compatible con Java en ejecuci�n. console.processing=Procesando (puede tardar un poco)... @@ -315,8 +315,6 @@ hlp.proxyType=tipo de proxy para las conexiones a Internet. El valor por defecto hlp.renderMode=Modo de dibujado para las firmas visibles. El valor por defecto es DESCRIPTION_ONLY (solo descripción). Los valores posibles son {0} hlp.tsaCertFileType=tipo de almacén de claves para la autenticación TSA de tipo «CERTIFICATE». El valor predeterminado es PKCS12 hlp.gui=(beta) mostrar la interfaz (GUI) incluso cuando se utilizan otros argumentos en la línea de comandos -#console.updateVersionNotPossibleInAppendMode=Choosen configuration requires PDF version update, but it's not possible in the "append" signature mode. -console.updateVersionNotPossibleInAppendModeForGivenHash=El algoritmo de hash elegido ({0}) necesita una versión de PDF más reciente ({1}) que la original ({2}). La actualización de versión del PDF es imposible en modo de firma "adjuntar". Desactiva el modo "adjuntar" o elije otro algoritmo hash. Estos son los requisitos del algoritmo: {3} # # JavaFX GUI # diff --git a/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_fr.properties b/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_fr.properties index d69aacaf..e4fa85a7 100644 --- a/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_fr.properties +++ b/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_fr.properties @@ -85,7 +85,7 @@ console.setVisibleSignature=Création de l'attache de signature, visible dans le console.settingTsaPolicy=Paramètre de la politique d'horodatage référencée par l'OID : {0} console.skippingSigning=Echec de la validation du fichier. Vérifier le chemin. Signature interrompue. console.starting=Lancement de PDF Signer -console.updateVersion=Mise à jour de la version PDF 1.{0} -> 1.{1} +console.updateVersion=Mise à jour de la version PDF {0} -> {1} console.usedKeyAlias=Utiliser un alias pour la clé : {0} console.validatingFiles=Vérification des chemins des fichiers d'entrée/sortie default.l2text.date=Date : @@ -417,7 +417,6 @@ jfx.gui.dialog.resetSettings.text=Cela supprimera tous les paramètres enregistr jfx.gui.status.settingsReset=Les paramètres ont été réinitialisés aux valeurs par défaut console.setSignerName=Définition du nom du signataire : {0} console.settingTsaHashAlg=Définition de l'algorithme de hachage TSA : {0} -console.updateVersionNotPossibleInAppendModeForGivenHash=L'algorithme de hachage choisi ({0}) nécessite une version de PDF plus récente ({1}) que l'originale ({2}). La mise à jour de la version PDF n'est pas possible en mode signature "append". Désactivez le mode append ou choisissez un autre algorithme de hachage. Voici les exigences des algorithmes : {3} gui.certificateNotForEncryption.error=Le fichier {0} ne contient pas de certificat X509 ou le chiffrement n'est pas pris en charge pour ce certificat. gui.encryptionCertFile.label=Fichier de certificat pour le chiffrement gui.pdfEncryption.label=Chiffrement PDF diff --git a/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_hr.properties b/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_hr.properties index 6d113cda..96e8101d 100644 --- a/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_hr.properties +++ b/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_hr.properties @@ -83,7 +83,7 @@ console.setVisibleSignature=Izrada vidljivog potpisa console.settingTsaPolicy=Postavljanje OID pravila TSA: {0} console.starting=Pokretanje JSignPdf console.unsupportedEncryptionType=Nepodržana vrsta šifriranja. -console.updateVersion=Aktualiziranje podatka PDF verzije 1.{0} -> 1.{1} +console.updateVersion=Aktualiziranje podatka PDF verzije {0} -> {1} console.usedKeyAlias=Korišteni alias ključa: {0} console.validatingFiles=Provjera putanja za ulazni i izlazni PDF. default.l2text.date=Datum: @@ -158,8 +158,6 @@ console.pdfEncError.missingUserPassword=Lozinku za šifriranje zahtijeva korisni console.setSignatureGraphic=Postavljanje slike console.skippingSigning=Provjera valjanosti datoteke nije uspjela, provjeri svoje putanje za PDF-ove. Proces potpisivanja se preskače. console.settingTsaHashAlg=Postavljanje TSA hash algoritma: {0} -#console.updateVersionNotPossibleInAppendMode=Choosen configuration requires PDF version update, but it's not possible in the "append" signature mode. -console.updateVersionNotPossibleInAppendModeForGivenHash=Odabrani hash algoritam ({0}) zahtijeva noviju PDF verziju ({1}) od originalne ({2}). Aktualiziranje PDF verzije nije moguće u modusu potpisa „dodaj”. Deaktiviraj modus dodavanja ili odaberi jedan drugi hash algoritam. Ovo su zahtjevi algoritma: {3} filechooser.save.warning=Spremi upozorenje gui.check.error.title=Provjera nije uspjela gui.contact.label=Ko&ntakt (nije obavezno) diff --git a/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_hu.properties b/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_hu.properties index 6081ca65..8ca64904 100644 --- a/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_hu.properties +++ b/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_hu.properties @@ -217,8 +217,7 @@ console.settingTsaPolicy=TSA szabályzat OID beállítása: {0} console.skippingSigning=A fájl érvényesítése sikertelen, ellenőrizze a PDF elérési utakat. Az aláírási folyamat kihagyva. console.starting=JSignPdf indítása console.unsupportedEncryptionType=Nem támogatott titkosítási típus. -console.updateVersion=PDF verzió frissítése 1.{0} -> 1.{1} -console.updateVersionNotPossibleInAppendModeForGivenHash=A választott hash algoritmus ({0}) újabb PDF verziót ({1}) igényel, mint az eredeti ({2}). A PDF verzió frissítése nem lehetséges "hozzáfűzés" aláírási módban. Tiltsa le a hozzáfűzés módot, vagy válasszon másik hash algoritmust. Az algoritmusok követelményei: {3} +console.updateVersion=PDF verzió frissítése {0} -> {1} console.usedKeyAlias=Használt kulcs-álnév: {0} console.validatingFiles=Bemeneti és kimeneti PDF elérési utak ellenőrzése. default.l2text.date=Dátum: diff --git a/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_hy.properties b/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_hy.properties index 3dd92056..cac6beb4 100644 --- a/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_hy.properties +++ b/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_hy.properties @@ -202,8 +202,7 @@ console.settingTsaPolicy=TSA քաղաքականության OID-ի սահման console.skippingSigning=Ֆայլի ստուգումը ձախողվեց, ստուգեք ձեր PDF ուղիները։ Ստորագրման գործընթացը բաց է թողնվում։ console.starting=JSignPdf-ի գործարկում console.unsupportedEncryptionType=Չաջակցվող գաղտնագրման տեսակ։ -console.updateVersion=PDF տարբերակի տեղեկատվության թարմացում 1.{0} -> 1.{1} -console.updateVersionNotPossibleInAppendModeForGivenHash=Ընտրված հեշ ալգորիթմը ({0}) պահանջում է PDF-ի ավելի նոր տարբերակ ({1}), քան օրիգինալը ({2})։ PDF տարբերակի թարմացումը հնարավոր չէ ստորագրության "append" ռեժիմում։ Կա՛մ անջատեք append ռեժիմը, կա՛մ ընտրեք այլ հեշ ալգորիթմ։ Ալգորիթմների պահանջները հետևյալն են՝ {3} +console.updateVersion=PDF տարբերակի տեղեկատվության թարմացում {0} -> {1} console.usedKeyAlias=Օգտագործված բանալու կեղծանուն՝ {0} console.validatingFiles=Մուտքային և ելքային PDF ուղիների ստուգում։ default.l2text.date=Ամսաթիվ՝ diff --git a/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_it.properties b/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_it.properties index 3e0418fd..a9562eaa 100644 --- a/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_it.properties +++ b/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_it.properties @@ -214,8 +214,7 @@ console.settingTsaPolicy=Impostazione dell'OID della policy TSA: {0} console.skippingSigning=Validazione del file non riuscita, verificare i percorsi dei PDF. Processo di firma saltato. console.starting=Avvio di JSignPdf console.unsupportedEncryptionType=Tipo di crittografia non supportato. -console.updateVersion=Aggiornamento delle informazioni sulla versione del PDF 1.{0} -> 1.{1} -console.updateVersionNotPossibleInAppendModeForGivenHash=L'algoritmo di hash scelto ({0}) richiede una versione del PDF più recente ({1}) rispetto all'originale ({2}). L'aggiornamento della versione del PDF non è possibile nella modalità di firma "append". Disabilitare la modalità append oppure scegliere un altro algoritmo di hash. Questi sono i requisiti degli algoritmi: {3} +console.updateVersion=Aggiornamento delle informazioni sulla versione del PDF {0} -> {1} console.usedKeyAlias=Alias della chiave utilizzato: {0} console.validatingFiles=Verifica dei percorsi dei PDF di input e di output. default.l2text.date=Data: diff --git a/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_ja.properties b/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_ja.properties index 585c0b05..bab75826 100644 --- a/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_ja.properties +++ b/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_ja.properties @@ -287,8 +287,7 @@ console.settingTsaPolicy=TSAポリシーOIDを設定しています: {0} console.skippingSigning=ファイルの検証に失敗しました。PDFパスを確認してください。署名処理をスキップします。 console.starting=JSignPdfを開始しています console.unsupportedEncryptionType=サポートされていない暗号化タイプです。 -console.updateVersion=PDFバージョン情報を更新しています 1.{0} -> 1.{1} -console.updateVersionNotPossibleInAppendModeForGivenHash=選択したハッシュアルゴリズム({0})は、元のPDFバージョン({2})より新しいPDFバージョン({1})を必要とします。「追記」署名モードではPDFバージョンの更新はできません。追記モードを無効にするか、別のハッシュアルゴリズムを選択してください。アルゴリズムの要件は次のとおりです: {3} +console.updateVersion=PDFバージョン情報を更新しています {0} -> {1} console.usedKeyAlias=使用された鍵エイリアス: {0} console.validatingFiles=入力および出力PDFパスを確認しています。 error.keystoreNull=キーストアを正常に読み込めませんでした。キーストアタイプ、パス、パスワードが正しいか確認してください。 diff --git a/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_nb.properties b/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_nb.properties index 844d98e4..1d28dd3d 100644 --- a/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_nb.properties +++ b/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_nb.properties @@ -282,8 +282,7 @@ console.setSignerName=Setter signaturnavn: {0} console.settingTsaHashAlg=Setter TSA-hash-algoritme: {0} console.settingTsaPolicy=Setter TSA-policy-OID: {0} console.skippingSigning=Filvalidering feilet, kontroller PDF-banene. Hopper over signeringsprosessen. -console.updateVersion=Oppdaterer PDF-versjonsinfo 1.{0} -> 1.{1} -console.updateVersionNotPossibleInAppendModeForGivenHash=Den valgte hash-algoritmen ({0}) krever en nyere PDF-versjon ({1}) enn originalen ({2}). Oppdatering av PDF-versjonen er umulig i "legg til"-signaturmodus. Enten deaktiver legg-til-modus eller velg en annen hash-algoritme. Dette er algoritmekravene: {3} +console.updateVersion=Oppdaterer PDF-versjonsinfo {0} -> {1} console.usedKeyAlias=Brukt nøkkelalias: {0} console.validatingFiles=Kontrollerer inn- og ut-PDF-baner. default.l2text.location=Plassering: diff --git a/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_pl.properties b/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_pl.properties index e02a9fdf..60862eac 100644 --- a/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_pl.properties +++ b/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_pl.properties @@ -311,8 +311,7 @@ console.settingTsaHashAlg=Ustawianie algorytmu skrótu TSA: {0} console.settingTsaPolicy=Ustawianie OID zasady TSA: {0} console.skippingSigning=Walidacja pliku nie powiodła się, sprawdź ścieżki plików PDF. Pomijanie procesu podpisywania. console.unsupportedEncryptionType=Nieobsługiwany typ szyfrowania. -console.updateVersion=Aktualizacja informacji o wersji PDF 1.{0} -> 1.{1} -console.updateVersionNotPossibleInAppendModeForGivenHash=Wybrany algorytm skrótu ({0}) wymaga nowszej wersji PDF ({1}) niż oryginał ({2}). Aktualizacja wersji PDF nie jest możliwa w trybie podpisu "append". Wyłącz tryb append lub wybierz inny algorytm skrótu. Wymagania algorytmów: {3} +console.updateVersion=Aktualizacja informacji o wersji PDF {0} -> {1} console.validatingFiles=Sprawdzanie ścieżek wejściowego i wyjściowego pliku PDF. error.keystoreNull=Magazyn kluczy nie został pomyślnie załadowany. Sprawdź, czy typ magazynu, ścieżka i hasło są prawidłowe. error.sslHandshakeException=Połączenie SSL nie powiodło się - certyfikat serwera prawdopodobnie nie jest znany. Możesz użyć narzędzia InstallCert, aby zaimportować certyfikat do magazynu kluczy Java. diff --git a/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_pt.properties b/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_pt.properties index 8b9decda..363397d0 100644 --- a/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_pt.properties +++ b/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_pt.properties @@ -31,7 +31,7 @@ console.setLocation=Configuração do local: {0} console.setL2Text=Configurando texto da camada 2 (descrição) error.vs.previewFailed=Ooops. A pré-visualização falhou. console.settingTsaPolicy=Configurando política TSA OID: {0} -console.updateVersion=Atualizando informações de versão do PDF 1.{0} -> 1.{1} +console.updateVersion=Atualizando informações de versão do PDF {0} -> {1} console.settingTsaHashAlg=Configurando o algoritmo de hash TSA: {0} console.starting=Iniciando JSignPdf error.sslHandshakeException=Falha na conexão SSL - o certificado do servidor provavelmente não é conhecido. Você pode usar a ferramenta InstallCert para importar o certificado para o Java Keystore. @@ -315,8 +315,6 @@ rights.disallowPrinting=Não permitir rights.allowDegradedPrinting=Permitir degradação extcsp.nosignature=Erro ao assinar, assinatura não recebida, sem detalhes hlp.gui=(beta) mostrar GUI mesmo quando outros argumentos de linha de comando são fornecidos -#console.updateVersionNotPossibleInAppendMode=Choosen configuration requires PDF version update, but it's not possible in the "append" signature mode. -console.updateVersionNotPossibleInAppendModeForGivenHash=O algoritmo de hash escolhido ({0}) requer uma versão PDF mais recente ({1}) do que a original ({2}). A atualização da versão em PDF é impossível no modo de assinatura "acrescentar". Desative o modo de acréscimo ou escolha outro algoritmo de hash. Estes são os requisitos do algoritmo: {3} # # JavaFX GUI # diff --git a/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_ru.properties b/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_ru.properties index e079b0ac..347401f0 100644 --- a/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_ru.properties +++ b/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_ru.properties @@ -219,8 +219,7 @@ console.settingTsaPolicy=Установка TSA policy OID: {0} console.skippingSigning=Проверка файлов не удалась, проверьте пути PDF. Процесс подписания пропускается. console.starting=Запуск JSignPdf console.unsupportedEncryptionType=Неподдерживаемый тип шифрования. -console.updateVersion=Обновление информации о версии PDF 1.{0} -> 1.{1} -console.updateVersionNotPossibleInAppendModeForGivenHash=Выбранный алгоритм хеширования ({0}) требует более новой версии PDF ({1}), чем исходная ({2}). Обновление версии PDF невозможно в режиме "append" подписи. Отключите режим append или выберите другой алгоритм хеширования. Требования алгоритмов: {3} +console.updateVersion=Обновление информации о версии PDF {0} -> {1} console.usedKeyAlias=Использованный псевдоним ключа: {0} console.validatingFiles=Проверка путей входного и выходного PDF. default.l2text.signedBy=Цифровая подпись создана diff --git a/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_sk.properties b/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_sk.properties index ec10b730..f0606d66 100644 --- a/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_sk.properties +++ b/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_sk.properties @@ -188,7 +188,7 @@ console.readingOCSP=Získavanie OCSP údajov z URL: {0} gui.tsa.certFilePwd.label=Heslo kľúča gui.signIt.button=Podpí&sať gui.rights.modifyContents.checkbox=Úprava obsahu -console.updateVersion=Aktualizujem informáciu o verzii PDF 1.{0} -> 1.{1} +console.updateVersion=Aktualizujem informáciu o verzii PDF {0} -> {1} gui.tsaOcsp.button=TSA/OCSP/CRL console.setAcro6Layers=Použitie iba vrstiev odporúčaných programom Acrobat 6: {0} certificationLevel.notCertified=Necertifikované @@ -246,8 +246,6 @@ hlp.tsaUrl=adresa servera časových pečiatok (TSA). Ak použijete tento argume default.l2text.reason=Dôvod: filechooser.save.warning=Uloženie upozornenia hlp.bgPath=cesta k obrázku pozadia pre viditeľné podpisy -#console.updateVersionNotPossibleInAppendMode=Choosen configuration requires PDF version update, but it's not possible in the "append" signature mode. -console.updateVersionNotPossibleInAppendModeForGivenHash=Zvolený hashovací algoritmus ({0}) vyžaduje novšiu verziu PDF ({1}) ako pôvodnú ({2}). Aktualizácia verzie PDF nie je možná v režime podpisu "append". Buď vypnite režim "append", alebo vyberte iný hashovací algoritmus. Toto sú požiadavky na algoritmus: {3} hlp.userpwd=používateľské heslo pre šifrované dokumenty (používa sa, keď je zadaná voľba -e). Použite '-' na načítanie zo štandardného vstupu (vyžaduje --enable-stdin-passwords). console.setContact=Nastavujem kontakt: {0} gui.pdfOwnerPwd.label=Heslo vlast&níka diff --git a/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_ta.properties b/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_ta.properties index 29b2fc4c..5ea9b6d3 100644 --- a/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_ta.properties +++ b/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_ta.properties @@ -102,8 +102,7 @@ console.settingTsaPolicy=TSA கொள்கையை அமைத்தல் O console.skippingSigning=கோப்பு சரிபார்ப்பு தோல்வியடைந்தது, உங்கள் PDF பாதைகளை சரிபார்க்கவும். அடையாள செயல்முறையைத் தவிர்க்கிறது. console.starting=JSignpdf ஐத் தொடங்குகிறது console.unsupportedEncryptionType=ஆதரிக்கப்படாத குறியாக்க வகை. -console.updateVersion=PDF பதிப்பு தகவலைப் புதுப்பித்தல் 1. {0} -> 1. {1} -console.updateVersionNotPossibleInAppendModeForGivenHash=தேர்ந்தெடுக்கப்பட்ட ஆச் வழிமுறைக்கு ({0}) அசல் ({2}) ஐ விட புதிய PDF பதிப்பு ({1}) தேவைப்படுகிறது. "APPEND" கையொப்ப பயன்முறையில் PDF பதிப்பு புதுப்பிப்பு சாத்தியமற்றது. பயன்பாட்டு பயன்முறையை முடக்கவும் அல்லது மற்றொரு ஆச் வழிமுறையைத் தேர்ந்தெடுக்கவும். இவை வழிமுறை தேவைகள்: {3} +console.updateVersion=PDF பதிப்பு தகவலைப் புதுப்பித்தல் {0} -> {1} console.usedKeyAlias=பயன்படுத்தப்பட்ட முக்கிய மாற்றுப்பெயர்: {0} console.validatingFiles=உள்ளீடு மற்றும் வெளியீட்டு PDF பாதைகளை சரிபார்க்கிறது. default.l2text.date=தேதி: diff --git a/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_zh_CN.properties b/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_zh_CN.properties index 80afc139..1cdb4e9b 100644 --- a/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_zh_CN.properties +++ b/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_zh_CN.properties @@ -65,8 +65,7 @@ console.settingTsaPolicy=正在设置 TSA 策略 OID:{0} console.skippingSigning=文件验证失败,请检查您的 PDF 路径。跳过签名过程。 console.starting=正在启动 JSignPdf console.unsupportedEncryptionType=不支持的加密类型。 -console.updateVersion=正在更新 PDF 版本信息 1.{0} -> 1.{1} -console.updateVersionNotPossibleInAppendModeForGivenHash=所选的哈希算法 ({0}) 需要比原始版本 ({2}) 更新的 PDF 版本 ({1})。“追加”签名模式不支持 PDF 版本更新。请禁用追加模式或选择其他哈希算法。算法要求如下:{3} +console.updateVersion=正在更新 PDF 版本信息 {0} -> {1} console.usedKeyAlias=使用的密钥别名:{0} console.validatingFiles=正在检查输入和输出 PDF 路径。 default.l2text.date=日期: diff --git a/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_zh_TW.properties b/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_zh_TW.properties index b0ab8040..66f3b06f 100644 --- a/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_zh_TW.properties +++ b/engines/api/src/main/resources/net/sf/jsignpdf/translations/messages_zh_TW.properties @@ -65,8 +65,7 @@ console.settingTsaPolicy=配置TSA政策OID: {0} console.skippingSigning=檔案驗證失敗,請確認您的PDF路徑。 跳過簽署步驟。 console.starting=JSignPdf啟動中 console.unsupportedEncryptionType=不支持的加密方式。 -console.updateVersion=更新PDF文件版本資訊 從1.{0}->1.{1} -console.updateVersionNotPossibleInAppendModeForGivenHash=選擇的雜湊演算法 ({0}) 要求比原本({2})更新的PDF版本 ({1})。PDF版本升級不支持"附加"簽章模式。請停用"附加"簽章模式或變更雜湊演算法。這些是演算法要求: {3} +console.updateVersion=更新PDF文件版本資訊 從{0}->{1} console.usedKeyAlias=使用金鑰別名: {0} console.validatingFiles=正在確認PDF輸出/入的路徑。 default.l2text.date=日期: diff --git a/engines/openpdf/src/main/java/net/sf/jsignpdf/engine/openpdf/OpenPdfSigningEngine.java b/engines/openpdf/src/main/java/net/sf/jsignpdf/engine/openpdf/OpenPdfSigningEngine.java index 82c664f6..8eb02ff1 100644 --- a/engines/openpdf/src/main/java/net/sf/jsignpdf/engine/openpdf/OpenPdfSigningEngine.java +++ b/engines/openpdf/src/main/java/net/sf/jsignpdf/engine/openpdf/OpenPdfSigningEngine.java @@ -174,18 +174,20 @@ public boolean sign(final BasicSignerOptions options, final EngineConfig engineC // this covers also problems with visible signatures (embedded // fonts) in PDF 1.2, because the minimal version // for hash algorithms is 1.3 (for SHA1) + final PdfVersion inputVersion = PdfVersion.fromStringVersion(inputPdfVersion); + final String inputVersionName = inputVersion != null ? inputVersion.getVersionName() : inputPdfVersion; if (options.isAppendX()) { - // if we are in append mode and version should be updated - // then return false (not possible) - LOGGER.info(RES.get("console.updateVersionNotPossibleInAppendModeForGivenHash", + // OpenPDF can't rewrite the header version of an incremental update, so the document keeps + // declaring the original version. This is a conformance detail only - the signature bytes and + // their validation don't depend on the declared version. + LOGGER.warning(RES.get("console.appendModeVersionNotUpdated", hashAlgorithm.getAlgorithmName(), hashAlgorithm.getPdfVersion().getVersionName(), - PdfVersion.fromStringVersion(inputPdfVersion).getVersionName(), - HashAlgorithm.valuesWithPdfVersionAsString())); - return false; + inputVersionName, HashAlgorithm.valuesWithPdfVersionAsString())); + } else { + tmpPdfVersion = requiredPdfVersionForGivenHash; + LOGGER.info(RES.get("console.updateVersion", inputVersionName, + hashAlgorithm.getPdfVersion().getVersionName())); } - tmpPdfVersion = requiredPdfVersionForGivenHash; - LOGGER.info(RES.get("console.updateVersion", - new String[] { inputPdfVersion, tmpPdfVersion })); } final PdfStamper stp = PdfStamper.createSignature(reader, fout, tmpPdfVersion, null, options.isAppendX());