Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactorings #500

Merged
merged 11 commits into from
Jun 15, 2024
4 changes: 2 additions & 2 deletions kse/src/main/java/org/kse/AuthorityCertificates.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@

import java.io.File;
import java.io.IOException;
import java.nio.file.Path;
import java.security.KeyStore;

import org.kse.crypto.CryptoException;
Expand Down Expand Up @@ -80,8 +81,7 @@ public void setCaCertificates(KeyStore caCertificates) {
*/
public static File getDefaultCaCertificatesLocation() {
String javaInstallDir = System.getProperty("java.home");
String fileSep = System.getProperty("file.separator");
File cacertsFile = new File(javaInstallDir, "lib" + fileSep + "security" + fileSep + "cacerts");
File cacertsFile = Path.of(javaInstallDir, "lib", "security", "cacerts").toFile();
try {
return cacertsFile.getCanonicalFile();
} catch (IOException e) {
Expand Down
2 changes: 1 addition & 1 deletion kse/src/main/java/org/kse/crypto/csr/spkac/Spkac.java
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ public class Spkac {
private static ResourceBundle res = ResourceBundle.getBundle("org/kse/crypto/csr/spkac/resources");

private static final String SPKAC_PROPERTY = "SPKAC";
private static final String NEWLINE = System.getProperty("line.separator");
private static final String NEWLINE = System.lineSeparator();

private String challenge;
private SpkacSubject subject;
Expand Down
4 changes: 2 additions & 2 deletions kse/src/main/java/org/kse/crypto/jcepolicy/JcePolicyUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StringWriter;
import java.nio.file.Path;
import java.security.NoSuchAlgorithmException;
import java.security.Security;
import java.text.MessageFormat;
Expand Down Expand Up @@ -167,9 +168,8 @@ public static String getPolicyDetails(JcePolicy jcePolicy) throws CryptoExceptio
* @return JAR file
*/
public static File getJarFile(JcePolicy jcePolicy) {
String fileSeperator = System.getProperty("file.separator");
String javaHome = System.getProperty("java.home");
File libSecurityFile = new File(javaHome, "lib" + fileSeperator + "security");
File libSecurityFile = Path.of(javaHome, "lib", "security").toFile();

return new File(libSecurityFile, jcePolicy.jar());
}
Expand Down
26 changes: 12 additions & 14 deletions kse/src/main/java/org/kse/crypto/signing/JarParser.java
Original file line number Diff line number Diff line change
Expand Up @@ -49,31 +49,29 @@ public JarParser(File jarFile) {
* @return Unordered array with signer certificates
* @throws IOException if an I/O error has occurred
*/
public X509Certificate[] getSignerCerificates() throws IOException {
public X509Certificate[] getSignerCertificates() throws IOException {
try (JarFile jf = new JarFile(jarFile, true)) {

Set<Certificate> allSignerCerts = new HashSet<>();
Enumeration<JarEntry> entries = jf.entries();

while (entries.hasMoreElements()) {

JarEntry entry = entries.nextElement();

// reading entry completely is required for calling getCodeSigners()/getCertificates()
readEntry(jf, entry);

if (!entry.isDirectory()) {
CodeSigner[] codeSigners = entry.getCodeSigners();
if (codeSigners != null) {
for (CodeSigner cs : entry.getCodeSigners()) {
allSignerCerts.addAll(cs.getSignerCertPath().getCertificates());
}
if (entry.isDirectory()) {
continue;
}
CodeSigner[] codeSigners = entry.getCodeSigners();
if (codeSigners != null) {
for (CodeSigner cs : entry.getCodeSigners()) {
allSignerCerts.addAll(cs.getSignerCertPath().getCertificates());
}
}

Certificate[] certificates = entry.getCertificates();
if (certificates != null) {
allSignerCerts.addAll(Arrays.asList(certificates));
}
Certificate[] certificates = entry.getCertificates();
if (certificates != null) {
allSignerCerts.addAll(Arrays.asList(certificates));
}
}

Expand Down
2 changes: 1 addition & 1 deletion kse/src/main/java/org/kse/gui/CurrentDirectory.java
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ private static void initialiseWorkingDirToBeHomeDir() {
}

/**
* Update CurrentSirectory to be the supplied directory.
* Update CurrentDirectory to be the supplied directory.
*
* @param directory Used to set current directory
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ public void openFile(File file) {
switch (fileType) {
case JAR:
JarParser jarParser = new JarParser(file);
X509Certificate[] signerCertificates = jarParser.getSignerCerificates();
X509Certificate[] signerCertificates = jarParser.getSignerCertificates();
showCerts(signerCertificates, file.getName());
break;
case JCEKS_KS:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ protected void doAction() {
List<X509Certificate> listCertificate = getCertificates();
File exportFile = null;
try {
if (listCertificate.size() > 0) {
if (!listCertificate.isEmpty()) {
KeyStoreHistory history = kseFrame.getActiveKeyStoreHistory();
String fileName = FileNameUtil.removeExtension(history.getName());
DExportCertificates dExportCertificates = new DExportCertificates(frame, fileName, false, true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@
import java.io.IOException;
import java.net.URI;
import java.nio.file.Files;
import java.nio.file.Path;
import java.text.MessageFormat;
import java.util.Enumeration;
import java.util.List;
Expand Down Expand Up @@ -80,7 +81,7 @@
import net.miginfocom.swing.MigLayout;

/**
* Dialog to upgrade cyptography strength.
* Dialog to upgrade cryptography strength.
*/
public class DUpgradeCryptoStrength extends JEscDialog {
private static final long serialVersionUID = 1L;
Expand Down Expand Up @@ -234,10 +235,9 @@ private void upgradeFailedShowManualInstructions() {
JOptionPane.WARNING_MESSAGE);

String javaHome = System.getProperty("java.home");
String fileSeparator = System.getProperty("file.separator");

String javaSecurityLibFolder = Path.of(javaHome, "lib", "security").toString();
String manualInstructions = MessageFormat.format(
res.getString("DUpgradeCryptoStrength.ManualInstructions.message"), javaHome, fileSeparator);
res.getString("DUpgradeCryptoStrength.ManualInstructions.message"), javaSecurityLibFolder);

JOptionPane.showMessageDialog(this, manualInstructions, getTitle(), JOptionPane.INFORMATION_MESSAGE);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -287,11 +287,9 @@ private void okPressed() {

NoticeReference noticeReference = null;
if (!organizationString.isEmpty()) { // If organization is present then so is al of notice reference

Vector<Integer> noticeNumbers = new Vector<>();

for (int noticeNumber : noticeNumberInts) {
noticeNumbers.add(new Integer(noticeNumber));
noticeNumbers.add(noticeNumber);
}

noticeReference = new NoticeReference(organizationString, noticeNumbers);
Expand Down
4 changes: 2 additions & 2 deletions kse/src/main/java/org/kse/gui/dialogs/DialogHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -114,8 +114,8 @@ public static void populateSigAlgs(KeyPairType keyPairType, PrivateKey privateKe
*/
public static void populatePkcs10Challenge(Attribute[] attributes, JTextField textField) {

ASN1ObjectIdentifier pkcs9AtChallengepassword = PKCSObjectIdentifiers.pkcs_9_at_challengePassword;
populateTextField(attributes, textField, pkcs9AtChallengepassword);
ASN1ObjectIdentifier pkcs9AtChallengePassword = PKCSObjectIdentifiers.pkcs_9_at_challengePassword;
populateTextField(attributes, textField, pkcs9AtChallengePassword);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -192,9 +192,9 @@ private void populateExtensionTypes() {
// Population is the supported set minus those already added
ArrayList<X509ExtensionType> availableExtensions = new ArrayList<>();

for (X509ExtensionType extentionType : SUPPORTED_EXTENSIONS) {
if (extensions.getExtensionValue(extentionType.oid()) == null) {
availableExtensions.add(extentionType);
for (X509ExtensionType extensionType : SUPPORTED_EXTENSIONS) {
if (extensions.getExtensionValue(extensionType.oid()) == null) {
availableExtensions.add(extensionType);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -825,7 +825,7 @@ public static void saveTemplatePressed(X509ExtensionSet extensionsToSave, JDialo
}

/**
* Get chosen certficate extensions.
* Get chosen certificate extensions.
*
* @return Certificate extensions or null if dialog cancelled.
*/
Expand Down
2 changes: 1 addition & 1 deletion kse/src/main/java/org/kse/gui/jar/DJarInfo.java
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ private JarFile[] getClassPathJars() throws IOException {
Vector<JarFile> jars = new Vector<>();

String classPath = System.getProperty("java.class.path");
String pathSeparator = System.getProperty("path.separator");
String pathSeparator = File.pathSeparator;

StringTokenizer strTok = new StringTokenizer(classPath, pathSeparator);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,14 +91,10 @@ public KeyStoreState getCurrentState() {
public void nullPasswords() {
KeyStoreState state = initialState;

while (true) {
do {
state.nullPasswords();
state = state.nextState();

if (state == null) {
break;
}
}
} while (state != null);
}

/**
Expand Down
3 changes: 1 addition & 2 deletions kse/src/main/java/org/kse/utilities/oid/ObjectIdUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -2311,8 +2311,7 @@ private static void validate(int[] arcs) throws InvalidObjectIdException {
*/
public static ObjectOid[] getAllOidsStartingWith(String prefix) {
ObjectOid[] oids = oidToNameMapping.entrySet().stream().filter(e -> e.getKey().startsWith(prefix))
.map(e -> new ObjectOid(prefix, e.getKey(), e.getValue())).sorted()
.collect(Collectors.toList()).toArray(new ObjectOid[0]);
.map(e -> new ObjectOid(prefix, e.getKey(), e.getValue())).sorted().toArray(ObjectOid[]::new);
return oids;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,9 @@ ExportKeyPairAction.ExportKeyPair.Title=\u042D\u043A\u0441\u043F\u043E\u0440\u04
ExportKeyPairAction.text=\u042D\u043A\u0441\u043F\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043F\u0430\u0440\u0443 \u043A\u043B\u044E\u0447\u0435\u0439
ExportKeyPairAction.tooltip=\u042D\u043A\u0441\u043F\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0437\u0430\u043F\u0438\u0441\u044C \u043F\u0430\u0440\u044B \u043A\u043B\u044E\u0447\u0435\u0439
ExportKeyPairCertificateChainAction.ExportCertificateChain.Title=\u042D\u043A\u0441\u043F\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0446\u0435\u043F\u043E\u0447\u043A\u0443 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043A\u0430\u0442\u0430
ExportKeyPairCertificateChainAction.ExportCertificateChainSuccessful.message=\u042D\u043A\u0441\u043F\u043E\u0440\u0442 \u0446\u0435\u043F\u043E\u0447\u043A\u0438 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043A\u0430\u0442\u0430 \u0443\u0441\u043F\u0435\u0448\u0435\u043D.
ExportKeyPairCertificateChainAction.statusbar=\u042D\u043A\u0441\u043F\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0446\u0435\u043F\u043E\u0447\u043A\u0443 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043A\u0430\u0442\u0430 \u0437\u0430\u043F\u0438\u0441\u0438 \u043F\u0430\u0440\u044B \u043A\u043B\u044E\u0447\u0435\u0439 \u043A\u0430\u043A X.509, PKCS #7, PKI Path \u0438\u043B\u0438 SPC
ExportKeyPairCertificateChainAction.text=\u042D\u043A\u0441\u043F\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0446\u0435\u043F\u043E\u0447\u043A\u0443 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043A\u0430\u0442\u0430
ExportKeyPairPrivateKeyAction.ExportPrivateKeyPvk.Title=\u042D\u043A\u0441\u043F\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043F\u0440\u0438\u0432\u0430\u0442\u043D\u044B\u0439 \u043A\u043B\u044E\u0447 \u043A\u0430\u043A PVK
ExportKeyPairPrivateKeyAction.text=\u042D\u043A\u0441\u043F\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043F\u0440\u0438\u0432\u0430\u0442\u043D\u044B\u0439 \u043A\u043B\u044E\u0447
ExportKeyPairPublicKeyAction.text=\u042D\u043A\u0441\u043F\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043E\u0442\u043A\u0440\u044B\u0442\u044B\u0439 \u043A\u043B\u044E\u0447
Expand Down Expand Up @@ -210,10 +213,11 @@ OpenCaCertificatesAction.OpenCaCertificatesKeyStore.Title=\u041E\u0442\u043A\u04
OpenCaCertificatesAction.statusbar=\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0445\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0435 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043A\u0430\u0442\u043E\u0432 \u0423\u0434\u043E\u0441\u0442\u043E\u0432\u0435\u0440\u044F\u044E\u0449\u0438\u0445 \u0426\u0435\u043D\u0442\u0440\u043E\u0432 (\u0423\u0426)
OpenCaCertificatesAction.text=\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043A\u0430\u0442\u044B \u0423\u0426
OpenCaCertificatesAction.tooltip=\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043A\u0430\u0442\u044B \u0423\u0426
OpenDefaultAction.NoDefaultKeyStoreCreate.message=\u0425\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0435 \u043A\u043B\u044E\u0447\u0435\u0439 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E \u043E\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442.\n\u0412\u044B \u0436\u0435\u043B\u0430\u0435\u0442\u0435 \u0435\u0433\u043E \u0441\u043E\u0437\u0434\u0430\u0442\u044C?
OpenDefaultAction.OpenDefaultKeyStore.Title=\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0445\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0435 \u043A\u043B\u044E\u0447\u0435\u0439 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E
OpenDefaultAction.statusbar=\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0445\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0435 \u043A\u043B\u044E\u0447\u0435\u0439 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E
OpenDefaultAction.text=\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E
OpenDefaultAction.tooltip=\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E
OpenDefaultAction.text=\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0445\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0435 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E
OpenDefaultAction.tooltip=\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0445\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0435 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E
OpenMsCapiAction.TabTitle=Windows-MY
OpenMsCapiAction.text=\u041E\u0442\u043A\u0440\u044B\u0442\u044C Windows-MY
OpenMsCapiAction.tooltip=\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0445\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0435 \u043A\u043B\u044E\u0447\u0435\u0439 Windows-MY
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ DProviderInfo.jbCopy.text = Copy
DProviderInfo.jbCopy.tooltip = Copy security provider information to the clipboard
DProviderInfo.jbOK.text = OK

DUpgradeCryptoStrength.ManualInstructions.message = <html><b>Manual Instructions to Upgrade Cryptography Strength</b><br><br>Press OK to exit KeyStore Explorer before proceeding with these instructions as it can lock existing policy files.<ol><li>Open the <b>Unlimited Strength Jurisdiction Policy ZIP</b> and extract the files <b>local_policy.jar</b> and <b>US_export_policy.jar</b>.</li><li>Locate the <b>Java Security Lib</b> folder on your computer: <b>{0}{1}lib{1}security</b>.</li><li>Make backup copies the existing <b>local_policy.jar</b> and <b>US_export_policy.jar</b> files present in the <b>Java Security Lib</b> folder.</li><li>Copy the extracted copies of the <b>local_policy.jar</b> and <b>US_export_policy.jar</b> files into the <b>Java Security Lib</b> folder.</li><li>Restart KeyStore Explorer for the above steps to take effect.</li></ol></html>
DUpgradeCryptoStrength.ManualInstructions.message = <html><b>Manual Instructions to Upgrade Cryptography Strength</b><br><br>Press OK to exit KeyStore Explorer before proceeding with these instructions as it can lock existing policy files.<ol><li>Open the <b>Unlimited Strength Jurisdiction Policy ZIP</b> and extract the files <b>local_policy.jar</b> and <b>US_export_policy.jar</b>.</li><li>Locate the <b>Java Security Lib</b> folder on your computer: <b>{0}</b>.</li><li>Make backup copies the existing <b>local_policy.jar</b> and <b>US_export_policy.jar</b> files present in the <b>Java Security Lib</b> folder.</li><li>Copy the extracted copies of the <b>local_policy.jar</b> and <b>US_export_policy.jar</b> files into the <b>Java Security Lib</b> folder.</li><li>Restart KeyStore Explorer for the above steps to take effect.</li></ol></html>
DUpgradeCryptoStrength.NoLaunchBrowser.message = Could not launch web browser. Policy download web address is ''{0}''.
DUpgradeCryptoStrength.NoUpdatePolicy.message = Could not upgrade cryptography strength automatically.\nThis was probably due to insufficient privileges.\nManual upgrade instructions will now be displayed.
DUpgradeCryptoStrength.NotPolicyZip.message = The supplied file is not a valid Unlimited Strength Jurisdiction Policy ZIP.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ DProviderInfo.jbCopy.text = Kopieren
DProviderInfo.jbCopy.tooltip = Informationen zum Sicherheitsanbieter in die Zwischenablage kopieren
DProviderInfo.jbOK.text = OK

DUpgradeCryptoStrength.ManualInstructions.message = <html><b>Anleitung zum manuellen Upgrade der kryptographischen St\u00E4rke</b><br><br>Klicken Sie auf \u00BBOK\u00AB um \u00BBKeystore Explorer\u00AB zu verlassen, bevor sie mit diesen Anweisungen fortfahren. Die Richtlinien-Dateien k\u00F6nnten durch diese Anwendung gesperrt sein.<ol><li>\u00D6ffnen sie die Archivdatei \u00BB<b>Unlimited Strength Jurisdiction Policy ZIP</b>\u00AB und entpacken daraus die Dateien <b>local_policy.jar</b> und <b>US_export_policy.jar</b>.</li><li>Navigieren sie zum Verzeichnis <b>Java Security Bibliotheken</b> auf ihrem Computer: <b>{0}{1}lib{1}security</b>.</li><li>Erstellen sie eine Sicherheitskopie der in diesem Verzeichnis vorhandenen Dateien <b>local_policy.jar</b> und <b>US_export_policy.jar</b>.</li><li>Kopieren sie die zuvor entpackten Dateien <b>local_policy.jar</b> und <b>US_export_policy.jar</b> in das Verzeichnis <b>Java Security Bibliotheken</b>.</li><li>Beim n\u00E4chsten Start von \u00BBKeyStore Explorer\u00AB werden die neuen Richtlinien angewendet.</li></ol></html>
DUpgradeCryptoStrength.ManualInstructions.message = <html><b>Anleitung zum manuellen Upgrade der kryptographischen St\u00E4rke</b><br><br>Klicken Sie auf \u00BBOK\u00AB um \u00BBKeystore Explorer\u00AB zu verlassen, bevor sie mit diesen Anweisungen fortfahren. Die Richtlinien-Dateien k\u00F6nnten durch diese Anwendung gesperrt sein.<ol><li>\u00D6ffnen sie die Archivdatei \u00BB<b>Unlimited Strength Jurisdiction Policy ZIP</b>\u00AB und entpacken daraus die Dateien <b>local_policy.jar</b> und <b>US_export_policy.jar</b>.</li><li>Navigieren sie zum Verzeichnis <b>Java Security Bibliotheken</b> auf ihrem Computer: <b>{0}</b>.</li><li>Erstellen sie eine Sicherheitskopie der in diesem Verzeichnis vorhandenen Dateien <b>local_policy.jar</b> und <b>US_export_policy.jar</b>.</li><li>Kopieren sie die zuvor entpackten Dateien <b>local_policy.jar</b> und <b>US_export_policy.jar</b> in das Verzeichnis <b>Java Security Bibliotheken</b>.</li><li>Beim n\u00E4chsten Start von \u00BBKeyStore Explorer\u00AB werden die neuen Richtlinien angewendet.</li></ol></html>
DUpgradeCryptoStrength.NoLaunchBrowser.message = Der Webbrowser konnte nicht gestartet werden. Die Download-Adresse ist \u00BB{0}\u00AB.
DUpgradeCryptoStrength.NoUpdatePolicy.message = Die kryptographische St\u00E4rke konnte nicht automatisch auf unbegrenzt erweitert werden.\nVermutlich aufgrund fehlender Berechtigungen.\nEine Anleitung zur manuellen Erweiterung wird nun angezeigt.
DUpgradeCryptoStrength.NotPolicyZip.message = Das angegebene ZIP-Archiv enth\u00E4lt keine g\u00FCltigen \u00BBUnlimited Strength Jurisdiction Policy\u00AB Dateien.
Expand Down
Loading
Loading