diff --git a/build.gradle b/build.gradle index b5440034..1e61b0b7 100644 --- a/build.gradle +++ b/build.gradle @@ -7,17 +7,17 @@ buildscript { } plugins { - id 'java' id 'idea' + id 'jacoco' + id 'java' id 'java-library' id 'maven-publish' id 'signing' - id 'jacoco' - alias(libs.plugins.lombok.plugin) - alias(libs.plugins.gradle.versions.plugin) - alias(libs.plugins.license.gradle.plugin) alias(libs.plugins.gradle.izpack.plugin) + alias(libs.plugins.gradle.versions.plugin) alias(libs.plugins.grgit.gradle) + alias(libs.plugins.license.gradle.plugin) + alias(libs.plugins.lombok.plugin) alias(libs.plugins.spotless.plugin.gradle) alias(libs.plugins.version.catalog.update) } @@ -27,16 +27,7 @@ version = "$projectVersion" as Object description = "$rootProject.name" // import gradle files -apply from: "gradle/dependencies.gradle" -apply from: "gradle/formatting.gradle" -apply from: "gradle/grgit.gradle" -apply from: "gradle/izpack.gradle" -apply from: "gradle/licensing.gradle" -apply from: "gradle/packaging.gradle" -apply from: "gradle/publishing.gradle" -apply from: "gradle/repositories.gradle" -apply from: "gradle/testing.gradle" -apply from: "gradle/version-catalog-update.gradle" +apply from: "gradle/apply-gradle-files.gradle" java { sourceCompatibility = "$projectSourceCompatibility" as Object @@ -48,7 +39,7 @@ java { tasks.withType(JavaCompile).configureEach { javaCompiler -> options.encoding = "UTF-8" // uncomment the next line for build with compiler argument -Xlint:deprecation - // options.compilerArgs << "-Xlint:deprecation" + options.compilerArgs << "-Xlint:deprecation" // uncomment the next line for build with compiler argument -Xlint:unchecked // options.compilerArgs << "-Xlint:unchecked" } diff --git a/gradle/apply-gradle-files.gradle b/gradle/apply-gradle-files.gradle new file mode 100644 index 00000000..472b5d3d --- /dev/null +++ b/gradle/apply-gradle-files.gradle @@ -0,0 +1,8 @@ +// import gradle files +// Read the list of Gradle files from a file +def gradleFiles = file('gradle/gradle-files.list').readLines() + +// Apply the Gradle files +gradleFiles.each { file -> + apply from: file +} \ No newline at end of file diff --git a/gradle/formatting.gradle b/gradle/formatting.gradle index 853e80c2..19f48683 100644 --- a/gradle/formatting.gradle +++ b/gradle/formatting.gradle @@ -1,4 +1,3 @@ - spotless { format "misc", { @@ -11,8 +10,12 @@ spotless { endWithNewline() } java { - // export config file: https://github.com/diffplug/spotless/blob/main/ECLIPSE_SCREENSHOTS.md#creating-spotlessimportorder - importOrderFile('src/test/resources/spotless/importorder.properties') // import order file as exported from eclipse + // export config file: + // https://github.com/diffplug/spotless/blob/main/ECLIPSE_SCREENSHOTS.md#creating-spotlessimportorder + importOrderFile('src/test/resources/spotless/importorder.properties') + // removes any unused imports + removeUnusedImports() + // import order file as exported from eclipse eclipse("4.21").configFile("src/test/resources/spotless/alpharo-formatter.xml") } } diff --git a/gradle/gradle-files.list b/gradle/gradle-files.list new file mode 100644 index 00000000..18e69992 --- /dev/null +++ b/gradle/gradle-files.list @@ -0,0 +1,10 @@ +gradle/dependencies.gradle +gradle/formatting.gradle +gradle/grgit.gradle +gradle/izpack.gradle +gradle/licensing.gradle +gradle/packaging.gradle +gradle/publishing.gradle +gradle/repositories.gradle +gradle/testing.gradle +gradle/version-catalog-update.gradle \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 008ae96f..5df81ae9 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -8,14 +8,14 @@ bcpkix-jdk15on-version = "1.70" bcprov-ext-jdk15on-version = "1.70" bcprov-jdk15on-version = "1.70" checksum-up-version = "3" -commons-codec-version = "1.17.0" -commons-lang3-version = "3.14.0" +commons-codec-version = "1.17.1" +commons-lang3-version = "3.15.0" component-model-version = "2" -crypt-api-version = "9" -crypt-data-version = "9" +crypt-api-version = "9.3" +crypt-data-version = "9.4" data-api-version = "4.1" eventbus-version = "6" -file-worker-version = "17.2" +file-worker-version = "17.3" gen-tree-version = "9" gradle-izpack-plugin-version = "3.2" gradle-plugin-grgit-version = "5.2.2" @@ -24,14 +24,14 @@ gradle-plugin-lombok-version = "8.6" gradle-plugin-spotless-version = "7.0.0.BETA1" gradle-plugin-version-catalog-update-version = "0.8.4" gradle-plugin-versions-version = "0.51.0" -gson-extensions-version = "2.1" +gson-extensions-version = "3.1" gson-version = "2.11.0" guava-version = "33.2.1-jre" -icon-img-extensions-version = "3.3" +icon-img-extensions-version = "4" id-generate-version = "1.1" imgscalr-lib-version = "4.2" -izpack-ant-version = "5.2.1" -jackson-databind-version = "2.17.1" +izpack-ant-version = "5.2.2" +jackson-databind-version = "2.17.2" javahelp-version = "2.0.05" jobj-cloner-version = "2.1" jobj-copy-version = "4.2" @@ -43,23 +43,23 @@ junit-platform-launcher-version = "1.11.0-M2" jxlayer-version = "3.0.4" kee-pass-java2-version = "2.2.1" lgood-date-picker-version = "11.2.1" -lombok-version = "1.18.32" +lombok-version = "1.18.34" meanbean-version = "3.0.0-M9" menu-action-version = "3.4" -miglayout-swing-version = "11.3" +miglayout-swing-version = "11.4" mockito-core-version = "5.12.0" model-data-version = "3.1" -mystic-crypt-version = "9" +mystic-crypt-version = "9.1" net-extensions-version = "5.2" observer-version = "6" -pf4j-version = "3.11.1" +pf4j-version = "3.12.0" randomizer-version = "10.2" resource-viewmodels-version = "6" resourcebundle-core-version = "5" silk-icon-theme-version = "1" silly-bean-version = "2" silly-collection-version = "27.1" -silly-io-version = "3" +silly-io-version = "3.1" sqlite-jdbc-version = "3.46.0.0" state-version = "6" swing-base-components-version = "4.2" @@ -74,7 +74,7 @@ swing-worker-version = "1.1" swingx-all-version = "1.6.5-1" tango-icon-theme-version = "0.8.90" test-object-version = "8.2" -throwable-version = "2.3" +throwable-version = "3" tree-api-version = "1.5" visitor-version = "6" xml-extensions-version = "8.2" diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 9e8d11ae..de36d2ba 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ #Mon May 11 15:57:08 CEST 2020 -distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStorePath=wrapper/dists diff --git a/lombok.config b/lombok.config deleted file mode 100644 index 189c0bef..00000000 --- a/lombok.config +++ /dev/null @@ -1,3 +0,0 @@ -# This file is generated by the 'io.freefair.lombok' Gradle plugin -config.stopBubbling = true -lombok.addLombokGeneratedAnnotation = true diff --git a/src/main/java/io/github/astrapi69/mystic/crypt/panel/certificate/CertificatePanel.java b/src/main/java/io/github/astrapi69/mystic/crypt/panel/certificate/CertificatePanel.java index fbc91a87..c9fff791 100644 --- a/src/main/java/io/github/astrapi69/mystic/crypt/panel/certificate/CertificatePanel.java +++ b/src/main/java/io/github/astrapi69/mystic/crypt/panel/certificate/CertificatePanel.java @@ -26,7 +26,7 @@ import javax.swing.*; -import io.github.astrapi69.crypt.data.certificate.CertificateInfo; +import io.github.astrapi69.crypt.data.model.X509CertificateV3Info; import io.github.astrapi69.model.BaseModel; import io.github.astrapi69.model.api.IModel; import io.github.astrapi69.swing.base.BasePanel; @@ -37,7 +37,7 @@ * @author astrapi69 */ @Getter -public class CertificatePanel extends BasePanel +public class CertificatePanel extends BasePanel { /** @@ -74,10 +74,10 @@ public class CertificatePanel extends BasePanel public CertificatePanel() { - this(BaseModel.of(CertificateInfo.builder().build())); + this(BaseModel.of(X509CertificateV3Info.builder().build())); } - public CertificatePanel(final IModel model) + public CertificatePanel(final IModel model) { super(model); } diff --git a/src/main/java/io/github/astrapi69/mystic/crypt/panel/certificate/NewCertificateAttributesPanel.java b/src/main/java/io/github/astrapi69/mystic/crypt/panel/certificate/NewCertificateAttributesPanel.java index db7c62ea..cd1d0c1e 100644 --- a/src/main/java/io/github/astrapi69/mystic/crypt/panel/certificate/NewCertificateAttributesPanel.java +++ b/src/main/java/io/github/astrapi69/mystic/crypt/panel/certificate/NewCertificateAttributesPanel.java @@ -31,7 +31,7 @@ import javax.swing.*; -import io.github.astrapi69.crypt.data.certificate.CertificateAttributes; +import io.github.astrapi69.crypt.data.model.DistinguishedNameInfo; import io.github.astrapi69.model.BaseModel; import io.github.astrapi69.model.api.IModel; import io.github.astrapi69.swing.base.BasePanel; @@ -41,7 +41,7 @@ * @author astrapi69 */ @Getter -public class NewCertificateAttributesPanel extends BasePanel +public class NewCertificateAttributesPanel extends BasePanel { private JLabel lblCommonName; private JLabel lblCountryCode; @@ -58,10 +58,10 @@ public class NewCertificateAttributesPanel extends BasePanel model) + public NewCertificateAttributesPanel(final IModel model) { super(model); } diff --git a/src/main/java/io/github/astrapi69/mystic/crypt/panel/certificate/NewCertificateInfoPanel.java b/src/main/java/io/github/astrapi69/mystic/crypt/panel/certificate/NewCertificateInfoPanel.java index f3a82ae9..9ebe5636 100644 --- a/src/main/java/io/github/astrapi69/mystic/crypt/panel/certificate/NewCertificateInfoPanel.java +++ b/src/main/java/io/github/astrapi69/mystic/crypt/panel/certificate/NewCertificateInfoPanel.java @@ -29,7 +29,9 @@ import javax.swing.*; import javax.swing.table.DefaultTableModel; -import io.github.astrapi69.crypt.data.certificate.CertificateInfo; +import io.github.astrapi69.crypt.data.model.DistinguishedNameInfo; +import io.github.astrapi69.crypt.data.model.X509CertificateV1Info; +import io.github.astrapi69.crypt.data.model.X509CertificateV3Info; import io.github.astrapi69.model.BaseModel; import io.github.astrapi69.model.api.IModel; import io.github.astrapi69.mystic.crypt.MysticCryptApplicationFrame; @@ -40,7 +42,7 @@ import lombok.Getter; @Getter -public class NewCertificateInfoPanel extends BasePanel +public class NewCertificateInfoPanel extends BasePanel { private JButton btnAddExtension; @@ -70,10 +72,10 @@ public class NewCertificateInfoPanel extends BasePanel public NewCertificateInfoPanel() { - this(BaseModel. of(CertificateInfo.builder().build())); + this(BaseModel. of(X509CertificateV3Info.builder().build())); } - public NewCertificateInfoPanel(final IModel model) + public NewCertificateInfoPanel(final IModel model) { super(model); } @@ -326,14 +328,15 @@ protected void onCreateIssuer(java.awt.event.ActionEvent evt) if (optionPane.getValue().equals(JOptionPane.OK_OPTION)) { - panel.getModelObject().setCommonName(panel.getTxtCommonName().getText()); - panel.getModelObject().setCountryCode(panel.getTxtCountryCode().getText()); - panel.getModelObject().setLocation(panel.getTxtLocation().getText()); - panel.getModelObject().setOrganisation(panel.getTxtOrganization().getText()); - panel.getModelObject().setOrganisationUnit(panel.getTxtOrganizationUnit().getText()); - panel.getModelObject().setState(panel.getTxtState().getText()); - String issuer = panel.getModelObject().toRepresentableString(); - getModelObject().setIssuer(issuer); + DistinguishedNameInfo newIssuerModelObject = getDistinguishedNameInfo(panel); + + String issuer = newIssuerModelObject.toRepresentableString(); + X509CertificateV3Info oldModelObject = getModelObject(); + X509CertificateV1Info x509CertificateV1Info = oldModelObject.getCertificateV1Info() + .toBuilder().issuer(newIssuerModelObject).build(); + X509CertificateV3Info x509CertificateV3Info = oldModelObject.toBuilder() + .certificateV1Info(x509CertificateV1Info).build(); + setModelObject(x509CertificateV3Info); getTxtIssuer().setText(issuer); } @@ -342,7 +345,12 @@ protected void onCreateIssuer(java.awt.event.ActionEvent evt) protected void onGenerateSerialNumber(java.awt.event.ActionEvent evt) { BigInteger serialNumber = RandomBigIntegerFactory.randomSerialNumber(); - getModelObject().setSerialNumber(serialNumber); + X509CertificateV3Info oldModelObject = getModelObject(); + X509CertificateV1Info x509CertificateV1Info = oldModelObject.getCertificateV1Info() + .toBuilder().serial(serialNumber).build(); + X509CertificateV3Info x509CertificateV3Info = oldModelObject.toBuilder() + .certificateV1Info(x509CertificateV1Info).build(); + setModelObject(x509CertificateV3Info); getTxtSerialNumber().setText(serialNumber.toString()); } @@ -362,18 +370,33 @@ protected void onCreateSubject(java.awt.event.ActionEvent evt) if (optionPane.getValue().equals(JOptionPane.OK_OPTION)) { - panel.getModelObject().setCommonName(panel.getTxtCommonName().getText()); - panel.getModelObject().setCountryCode(panel.getTxtCountryCode().getText()); - panel.getModelObject().setLocation(panel.getTxtLocation().getText()); - panel.getModelObject().setOrganisation(panel.getTxtOrganization().getText()); - panel.getModelObject().setOrganisationUnit(panel.getTxtOrganizationUnit().getText()); - panel.getModelObject().setState(panel.getTxtState().getText()); - String subject = panel.getModelObject().toRepresentableString(); - getModelObject().setSubject(subject); + DistinguishedNameInfo newSubjectModelObject = getDistinguishedNameInfo(panel); + + String subject = newSubjectModelObject.toRepresentableString(); + X509CertificateV3Info oldModelObject = getModelObject(); + X509CertificateV1Info x509CertificateV1Info = oldModelObject.getCertificateV1Info() + .toBuilder().subject(newSubjectModelObject).build(); + X509CertificateV3Info x509CertificateV3Info = oldModelObject.toBuilder() + .certificateV1Info(x509CertificateV1Info).build(); + setModelObject(x509CertificateV3Info); getTxtSubject().setText(subject); } } + private static DistinguishedNameInfo getDistinguishedNameInfo( + NewCertificateAttributesPanel panel) + { + DistinguishedNameInfo newModelObject = DistinguishedNameInfo.builder() + .commonName(panel.getTxtCommonName().getText()) + .countryCode(panel.getTxtCountryCode().getText()) + .location(panel.getTxtLocation().getText()) + .organisation(panel.getTxtOrganization().getText()) + .organisationUnit(panel.getTxtOrganizationUnit().getText()) + .state(panel.getTxtState().getText()).build(); + panel.setModelObject(newModelObject); + return newModelObject; + } + protected void onAddExtension(java.awt.event.ActionEvent evt) { diff --git a/src/main/java/io/github/astrapi69/mystic/crypt/panel/keygen/CryptographyPanel.java b/src/main/java/io/github/astrapi69/mystic/crypt/panel/keygen/CryptographyPanel.java index 75c310ec..51871374 100644 --- a/src/main/java/io/github/astrapi69/mystic/crypt/panel/keygen/CryptographyPanel.java +++ b/src/main/java/io/github/astrapi69/mystic/crypt/panel/keygen/CryptographyPanel.java @@ -26,10 +26,11 @@ import java.math.BigInteger; import java.security.PrivateKey; import java.security.PublicKey; +import java.security.SecureRandom; import java.security.cert.X509Certificate; import java.time.LocalDate; -import java.time.Month; import java.time.ZoneId; +import java.time.ZonedDateTime; import java.util.Date; import java.util.logging.Level; @@ -42,6 +43,10 @@ import io.github.astrapi69.crypt.api.key.KeySize; import io.github.astrapi69.crypt.data.factory.CertFactory; import io.github.astrapi69.crypt.data.key.writer.CertificateWriter; +import io.github.astrapi69.crypt.data.model.DistinguishedNameInfo; +import io.github.astrapi69.crypt.data.model.Validity; +import io.github.astrapi69.crypt.data.model.X509CertificateV1Info; +import io.github.astrapi69.crypt.data.model.X509CertificateV3Info; import io.github.astrapi69.layout.LayoutExtensions; import io.github.astrapi69.model.BaseModel; import io.github.astrapi69.model.api.IModel; @@ -243,7 +248,21 @@ protected void onInitializeComponents() protected void onSaveCertificate(ActionEvent actionEvent) { - NewCertificateInfoPanel panel = new NewCertificateInfoPanel(); + DistinguishedNameInfo.builder().build(); + ZonedDateTime notBefore = ZonedDateTime.now(); + ZonedDateTime notAfter = notBefore.plusYears(5); + X509CertificateV1Info x509CertificateV1Info = X509CertificateV1Info.builder() + .issuer(DistinguishedNameInfo.builder().build()) + .serial(new BigInteger(160, new SecureRandom())) + .validity(Validity.builder().notBefore(notBefore).notAfter(notAfter).build()) + .subject(DistinguishedNameInfo.builder().build()).signatureAlgorithm("SHA256withRSA") + .build(); + + X509CertificateV3Info x509CertificateV3Info = X509CertificateV3Info.builder() + .certificateV1Info(x509CertificateV1Info).build(); + // TODO implement and test... + NewCertificateInfoPanel panel = new NewCertificateInfoPanel( + BaseModel. of(x509CertificateV3Info)); JOptionPane optionPane = new JOptionPane(panel, JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_CANCEL_OPTION); @@ -255,7 +274,7 @@ protected void onSaveCertificate(ActionEvent actionEvent) dialog.setLocationRelativeTo(null); dialog.setVisible(true); - if (optionPane.getValue().equals(JOptionPane.OK_OPTION)) + if (optionPane.getValue() != null && optionPane.getValue().equals(JOptionPane.OK_OPTION)) { final JFileChooser fileChooser = new JFileChooser(); final int state = fileChooser.showSaveDialog(this); @@ -270,8 +289,10 @@ protected void onSaveCertificate(ActionEvent actionEvent) BigInteger serialNumber; String subject; String issuer; - subject = panel.getModelObject().getSubject(); - issuer = panel.getModelObject().getIssuer(); + subject = panel.getModelObject().getCertificateV1Info().getSubject() + .toRepresentableString(); + issuer = panel.getModelObject().getCertificateV1Info().getIssuer() + .toRepresentableString(); GenerateKeysModelBean modelObject = getModelObject(); signatureAlgorithm = modelObject.getSignatureAlgorithm() != null ? modelObject.getSignatureAlgorithm() @@ -279,23 +300,28 @@ protected void onSaveCertificate(ActionEvent actionEvent) + KeyPairGeneratorAlgorithm.RSA.getAlgorithm(); start = modelObject.getStart() != null ? modelObject.getStart() - : Date.from(LocalDate.of(2021, Month.JANUARY, 1) - .atStartOfDay(ZoneId.systemDefault()).toInstant()); + : Date + .from(LocalDate.now().atStartOfDay(ZoneId.systemDefault()).toInstant()); end = modelObject.getEnd() != null ? modelObject.getEnd() - : Date.from(LocalDate.of(2031, Month.JANUARY, 1) + : Date.from(LocalDate.now().plusYears(1) .atStartOfDay(ZoneId.systemDefault()).toInstant()); - serialNumber = panel.getModelObject().getSerialNumber(); + serialNumber = panel.getModelObject().getCertificateV1Info().getSerial(); PublicKey publicKey = modelObject.getPublicKey(); PrivateKey privateKey = modelObject.getPrivateKey(); X509Certificate x509Certificate = CertFactory.newX509Certificate(publicKey, privateKey, serialNumber, subject, issuer, signatureAlgorithm, start, end); CertificateWriter.write(x509Certificate, selectedFile, KeyFileFormat.PEM); } - catch (final Exception ex) + catch (final Exception exception) { - log.log(Level.SEVERE, ex.getLocalizedMessage(), ex); + log.log(Level.SEVERE, exception.getLocalizedMessage(), exception); + String title = "Creation of certificate failed"; + String htmlMessage = "" + "

" + title + "

" + + "

Password or key file or both are not valid" + "

" + + exception.getMessage(); + throw new RuntimeException(title + "::" + htmlMessage, exception); } } } diff --git a/src/main/java/io/github/astrapi69/mystic/crypt/panel/obfuscate/character/ObfuscationOperationRuleTablePanel.java b/src/main/java/io/github/astrapi69/mystic/crypt/panel/obfuscate/character/ObfuscationOperationRuleTablePanel.java index 2e1c9805..0cfe0ede 100644 --- a/src/main/java/io/github/astrapi69/mystic/crypt/panel/obfuscate/character/ObfuscationOperationRuleTablePanel.java +++ b/src/main/java/io/github/astrapi69/mystic/crypt/panel/obfuscate/character/ObfuscationOperationRuleTablePanel.java @@ -33,8 +33,6 @@ import javax.swing.filechooser.FileNameExtensionFilter; import javax.swing.table.TableColumn; -import org.apache.commons.codec.DecoderException; - import io.github.astrapi69.collection.map.MapFactory; import io.github.astrapi69.collection.pair.KeyValuePair; import io.github.astrapi69.crypt.data.key.KeyModelExtensions; @@ -55,8 +53,6 @@ import io.github.astrapi69.swing.table.editor.TableCellButtonEditor; import io.github.astrapi69.swing.table.renderer.TableCellButtonRendererFactory; import io.github.astrapi69.throwable.RuntimeExceptionDecorator; -import io.github.astrapi69.xml.crypto.file.XmlDecryptionExtensions; -import io.github.astrapi69.xml.crypto.file.XmlEncryptionExtensions; import io.github.astrapi69.xstream.ObjectToXmlExtensions; import io.github.astrapi69.xstream.XmlToObjectExtensions; import lombok.Getter; diff --git a/src/main/java/io/github/astrapi69/mystic/crypt/panel/obfuscate/simple/ObfuscationRuleTablePanel.java b/src/main/java/io/github/astrapi69/mystic/crypt/panel/obfuscate/simple/ObfuscationRuleTablePanel.java index a4a21ede..ac7d67c4 100644 --- a/src/main/java/io/github/astrapi69/mystic/crypt/panel/obfuscate/simple/ObfuscationRuleTablePanel.java +++ b/src/main/java/io/github/astrapi69/mystic/crypt/panel/obfuscate/simple/ObfuscationRuleTablePanel.java @@ -33,14 +33,11 @@ import javax.swing.filechooser.FileNameExtensionFilter; import javax.swing.table.TableColumn; -import org.apache.commons.codec.DecoderException; - import io.github.astrapi69.collection.map.MapFactory; import io.github.astrapi69.collection.pair.KeyValuePair; import io.github.astrapi69.crypt.data.key.KeyModelExtensions; import io.github.astrapi69.crypt.data.key.PrivateKeyExtensions; import io.github.astrapi69.crypt.data.model.KeyModel; -import io.github.astrapi69.crypt.data.obfuscation.rule.ObfuscationOperationRule; import io.github.astrapi69.crypt.data.obfuscation.rule.ObfuscationRule; import io.github.astrapi69.file.read.ReadFileExtensions; import io.github.astrapi69.file.write.StoreFileExtensions; @@ -56,8 +53,6 @@ import io.github.astrapi69.swing.table.editor.TableCellButtonEditor; import io.github.astrapi69.swing.table.renderer.TableCellButtonRendererFactory; import io.github.astrapi69.throwable.RuntimeExceptionDecorator; -import io.github.astrapi69.xml.crypto.file.XmlDecryptionExtensions; -import io.github.astrapi69.xml.crypto.file.XmlEncryptionExtensions; import io.github.astrapi69.xstream.ObjectToXmlExtensions; import io.github.astrapi69.xstream.XmlToObjectExtensions; import lombok.Getter;