From 7fccbf3d3e591253676b50ccf8a7fb804db65478 Mon Sep 17 00:00:00 2001 From: Martin Paljak Date: Tue, 27 Feb 2024 21:17:15 +0200 Subject: [PATCH] Update to JC3.2.0 and do some housekeeping --- .github/workflows/robot.yml | 10 +++++----- .../java/pro/javacard/capfile/CAPFile.java | 2 ++ .../java/pro/javacard/sdk/JavaCardSDK.java | 16 ++++++++++------ .../java/pro/javacard/sdk/OffCardVerifier.java | 6 +++--- .../main/java/pro/javacard/sdk/SDKVersion.java | 3 ++- sdks | 2 +- .../main/java/pro/javacard/ant/JavaCard.java | 9 +++++---- tests-17.xml | 18 ++++++++++++++++++ 8 files changed, 46 insertions(+), 20 deletions(-) diff --git a/.github/workflows/robot.yml b/.github/workflows/robot.yml index e8a17c8..79f1064 100644 --- a/.github/workflows/robot.yml +++ b/.github/workflows/robot.yml @@ -14,22 +14,22 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - java: [ 8, 11, 17, 20 ] + java: [ 8, 11, 17, 21 ] name: Java ${{ matrix.java }} steps: - name: Checkout with submodules - uses: actions/checkout@v3.5.0 + uses: actions/checkout@v4.1.1 with: submodules: true - name: Setup java - uses: actions/setup-java@v3.11.0 + uses: actions/setup-java@v4.0.0 with: java-version: ${{ matrix.java }} distribution: temurin cache: maven - name: Set SSH key if: github.event_name != 'pull_request' - uses: webfactory/ssh-agent@v0.8.0 + uses: webfactory/ssh-agent@v0.9.0 with: ssh-private-key: ${{ secrets.SSH_KEY }} - name: Add host key @@ -39,7 +39,7 @@ jobs: if: matrix.java != 8 run: ./mvnw -T1C -B -U verify - name: Run ANT tests - if: matrix.java != 20 + if: matrix.java != 21 run: ant test dist - name: Deploy package or snapshot if: github.event_name != 'pull_request' && matrix.java == '11' diff --git a/capfile/src/main/java/pro/javacard/capfile/CAPFile.java b/capfile/src/main/java/pro/javacard/capfile/CAPFile.java index 58e89b6..7d26b31 100644 --- a/capfile/src/main/java/pro/javacard/capfile/CAPFile.java +++ b/capfile/src/main/java/pro/javacard/capfile/CAPFile.java @@ -357,6 +357,8 @@ public Optional guessJavaCardVersion() { return Optional.of("3.0.5"); case 8: return Optional.of("3.1.0"); + case 9: + return Optional.of("3.2.0"); default: return Optional.of(String.format("unknown: %d.%d", p.major, p.minor)); } diff --git a/capfile/src/main/java/pro/javacard/sdk/JavaCardSDK.java b/capfile/src/main/java/pro/javacard/sdk/JavaCardSDK.java index ac0971e..a51b8f1 100644 --- a/capfile/src/main/java/pro/javacard/sdk/JavaCardSDK.java +++ b/capfile/src/main/java/pro/javacard/sdk/JavaCardSDK.java @@ -60,6 +60,8 @@ private static SDKVersion detectSDKVersion(Path root) { SDKVersion version = null; Path libDir = root.resolve("lib"); if (Files.exists(libDir.resolve("tools.jar"))) { + if (Files.exists(libDir.resolve("api_classic-3.2.0.jar"))) + return SDKVersion.V320; if (Files.exists(libDir.resolve("api_classic-3.1.0.jar"))) return SDKVersion.V310; Path api = libDir.resolve("api_classic.jar"); @@ -139,20 +141,21 @@ public Path getExportDir() { // This is for build and verification tools public JavaCardSDK target(SDKVersion targetVersion) { - if (this.version == SDKVersion.V310 && targetVersion.isOneOf(SDKVersion.V304, SDKVersion.V305, SDKVersion.V310)) { + if (version.isOneOf(SDKVersion.V310, SDKVersion.V320) && targetVersion.isOneOf(SDKVersion.V304, SDKVersion.V305, SDKVersion.V310)) { List apiJars = new ArrayList<>(); apiJars.add(Paths.get("lib", "api_classic-" + targetVersion.v + ".jar")); apiJars.add(Paths.get("lib", "api_classic_annotations-" + targetVersion.v + ".jar")); Path exportPath = Paths.get("api_export_files_" + targetVersion.v); return new JavaCardSDK(path, targetVersion, exportPath, apiJars, toolJars, compilerJars); } else { - throw new IllegalStateException("Can not target " + targetVersion + " with " + this.version); + throw new IllegalStateException("Can not target " + targetVersion + " with " + version); } } // This indicates the highest class file version edible by SDK-s converter public static String getJavaVersion(SDKVersion version) { switch (version) { + case V320: case V310: return "1.7"; case V301: @@ -244,8 +247,9 @@ public static List getApiJars(SDKVersion version) { jars.add(Paths.get("lib", "api_classic.jar")); break; case V310: - jars.add(Paths.get("lib", "api_classic-3.1.0.jar")); - jars.add(Paths.get("lib", "api_classic_annotations-3.1.0.jar")); + case V320: + jars.add(Paths.get("lib", String.format("api_classic-%s.jar", version.v))); + jars.add(Paths.get("lib", String.format("api_classic_annotations-%s.jar", version.v))); break; default: jars.add(Paths.get("lib", "api.jar")); @@ -276,9 +280,9 @@ public static List getCompilerJars(SDKVersion version) { if (version.isOneOf(SDKVersion.V304, SDKVersion.V305)) { jars.add(Paths.get("lib", "tools.jar")); jars.add(Paths.get("lib", "api_classic_annotations.jar")); - } else if (version == SDKVersion.V310) { + } else if (version == SDKVersion.V310 || version == SDKVersion.V320) { jars.add(Paths.get("lib", "tools.jar")); - jars.add(Paths.get("lib", "api_classic_annotations-3.1.0.jar")); + jars.add(Paths.get("lib", String.format("api_classic_annotations-%s.jar", version.v))); } return jars; } diff --git a/capfile/src/main/java/pro/javacard/sdk/OffCardVerifier.java b/capfile/src/main/java/pro/javacard/sdk/OffCardVerifier.java index db4ca27..e6ad9d3 100644 --- a/capfile/src/main/java/pro/javacard/sdk/OffCardVerifier.java +++ b/capfile/src/main/java/pro/javacard/sdk/OffCardVerifier.java @@ -57,8 +57,8 @@ public void verifyAgainst(File f, JavaCardSDK target, Vector exps) throws public void verifyAgainst(Path f, JavaCardSDK target, List exps) throws VerifierError, IOException { // Warn about recommended usage - if (target.getVersion().isOneOf(SDKVersion.V304, SDKVersion.V305) && sdk.getVersion() != SDKVersion.V310) { - System.err.println("NB! Please use JavaCard SDK 3.1.0 for verifying!"); + if (target.getVersion().isOneOf(SDKVersion.V304, SDKVersion.V305, SDKVersion.V310) && sdk.getVersion() != SDKVersion.V320) { + System.err.println("NB! Please use JavaCard SDK 3.2.0 for verifying!"); } else { if (!sdk.getRelease().equals("3.0.5u3")) { System.err.println("NB! Please use JavaCard SDK 3.0.5u3 or later for verifying!"); @@ -97,7 +97,7 @@ public void verify(Path f, List exps) throws VerifierError, IOException { try (FileInputStream input = new FileInputStream(f.toFile())) { // 3.0.5u1 still uses old signature - if (sdk.getRelease().equals("3.0.5u3") || sdk.getRelease().equals("3.0.5u2") || sdk.getRelease().equals("3.1.0")) { + if (sdk.getRelease().equals("3.0.5u3") || sdk.getRelease().equals("3.0.5u2") || sdk.getVersion().isOneOf(SDKVersion.V310, SDKVersion.V320)) { Method m = verifier.getMethod("verifyCap", File.class, String.class, Vector.class); m.invoke(null, f.toFile(), packagename, expfiles); } else { diff --git a/capfile/src/main/java/pro/javacard/sdk/SDKVersion.java b/capfile/src/main/java/pro/javacard/sdk/SDKVersion.java index 23d8257..c40d421 100644 --- a/capfile/src/main/java/pro/javacard/sdk/SDKVersion.java +++ b/capfile/src/main/java/pro/javacard/sdk/SDKVersion.java @@ -32,7 +32,8 @@ public enum SDKVersion { V301("3.0.1"), V304("3.0.4"), V305("3.0.5"), - V310("3.1.0"); + V310("3.1.0"), + V320("3.2.0"); final String v; diff --git a/sdks b/sdks index e305a1a..6025a1d 160000 --- a/sdks +++ b/sdks @@ -1 +1 @@ -Subproject commit e305a1a0b9bf6b9a8b0c91a9aad8d73537e7ff1b +Subproject commit 6025a1d48060b2a72df2d862de310be434f42272 diff --git a/task/src/main/java/pro/javacard/ant/JavaCard.java b/task/src/main/java/pro/javacard/ant/JavaCard.java index c3ce847..a3c81b5 100644 --- a/task/src/main/java/pro/javacard/ant/JavaCard.java +++ b/task/src/main/java/pro/javacard/ant/JavaCard.java @@ -354,9 +354,10 @@ private void check() { if (raw_targetsdk != null) { Optional targetVersion = SDKVersion.fromVersion(raw_targetsdk); - if (jckit != null && jckit.getVersion() == V310 && targetVersion.isPresent()) { + if (jckit != null && jckit.getVersion().isOneOf(V310, V320) && targetVersion.isPresent()) { SDKVersion target = targetVersion.get(); - if (target.isOneOf(V304, V305, V310)) { + // FIXME: can't target 3.2.0 with 3.1.0 + if (target.isOneOf(V304, V305, V310, V320)) { targetsdk = jckit.target(target); } else { throw new HelpingBuildException("Can not target JavaCard " + targetVersion.get() + " with JavaCard kit " + jckit.getVersion()); @@ -568,7 +569,7 @@ private void compile() { throw new HelpingBuildException("JDK 17 LTS is the latest supported JDK."); } else if (jckit.getVersion().isOneOf(V211, V212, V221, V222) && jdkver > 8) { throw new HelpingBuildException("Use JDK 8 with JavaCard kit v2.x"); - } else if (jdkver > 11 && !jckit.getVersion().isOneOf(V310)) { + } else if (jdkver > 11 && !jckit.getVersion().isOneOf(V310, V320)) { throw new HelpingBuildException("Use JDK 11 with JavaCard kit " + jckit.getVersion()); } @@ -652,7 +653,7 @@ private void convert(Path applet_folder, List exps) { StringJoiner expstringbuilder = new StringJoiner(File.pathSeparator); // Add targetSDK export files - if (jckit.getVersion() == V310 && targetsdk.getVersion().isOneOf(V304, V305, V310)) { + if (jckit.getVersion().isOneOf(V310, V320) && targetsdk.getVersion().isOneOf(V304, V305, V310)) { j.createArg().setLine("-target " + targetsdk.getVersion().toString()); } else { expstringbuilder.add(targetsdk.getExportDir().toString()); diff --git a/tests-17.xml b/tests-17.xml index b5e8d7f..f3d806f 100644 --- a/tests-17.xml +++ b/tests-17.xml @@ -11,20 +11,38 @@ + + + + + + + + + + + + + + + + + +