From 446a62f334ce3d1031c2946d673da4fa11205108 Mon Sep 17 00:00:00 2001 From: Daniel DeGroff Date: Mon, 22 Sep 2025 16:04:05 -0600 Subject: [PATCH 01/29] Working --- build.savant | 11 +- fusionauth-jwt.iml | 16 +-- fusionauth-jwt.ipr | 7 +- .../io/fusionauth/der/ObjectIdentifier.java | 10 +- .../io/fusionauth/jwks/JSONWebKeyBuilder.java | 28 +++-- .../io/fusionauth/jwt/domain/Algorithm.java | 8 +- .../io/fusionauth/jwt/domain/KeyType.java | 32 +++-- .../io/fusionauth/jwt/ed/EdDSASigner.java | 113 +++++++++++++++++ .../io/fusionauth/jwt/ed/EdDSAVerifier.java | 114 ++++++++++++++++++ .../java/io/fusionauth/pem/PEMDecoder.java | 97 +++++++++++++-- .../jwks/JSONWebKeyBuilderTest.java | 22 +++- .../io/fusionauth/jwt/ed/EdSignerTest.java | 112 +++++++++++++++++ .../io/fusionauth/jwt/ed/EdVerifierTest.java | 112 +++++++++++++++++ .../resources/ed_dsa_ed25519_private_key.pem | 3 + .../ed_dsa_ed25519_private_key_pub.pem | 5 + .../resources/ed_dsa_ed25519_public_key.pem | 3 + src/test/resources/ed_dsa_private_key.pem | 3 + src/test/resources/ed_dsa_public_key.pem | 3 + .../jwk/ed_dsa_ed25519_private_key.json | 9 ++ .../jwk/ed_dsa_ed25519_public_key.json | 8 ++ .../resources/jwk/ed_dsa_private_key.json | 7 ++ src/test/resources/jwk/ed_dsa_public_key.json | 7 ++ 22 files changed, 677 insertions(+), 53 deletions(-) create mode 100644 src/main/java/io/fusionauth/jwt/ed/EdDSASigner.java create mode 100644 src/main/java/io/fusionauth/jwt/ed/EdDSAVerifier.java create mode 100644 src/test/java/io/fusionauth/jwt/ed/EdSignerTest.java create mode 100644 src/test/java/io/fusionauth/jwt/ed/EdVerifierTest.java create mode 100644 src/test/resources/ed_dsa_ed25519_private_key.pem create mode 100644 src/test/resources/ed_dsa_ed25519_private_key_pub.pem create mode 100644 src/test/resources/ed_dsa_ed25519_public_key.pem create mode 100644 src/test/resources/ed_dsa_private_key.pem create mode 100644 src/test/resources/ed_dsa_public_key.pem create mode 100644 src/test/resources/jwk/ed_dsa_ed25519_private_key.json create mode 100644 src/test/resources/jwk/ed_dsa_ed25519_public_key.json create mode 100644 src/test/resources/jwk/ed_dsa_private_key.json create mode 100644 src/test/resources/jwk/ed_dsa_public_key.json diff --git a/build.savant b/build.savant index 84aacf79..ef3eb88a 100644 --- a/build.savant +++ b/build.savant @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2024, FusionAuth, All Rights Reserved + * Copyright (c) 2016-2025, FusionAuth, All Rights Reserved * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -47,7 +47,7 @@ project(group: "io.fusionauth", name: "fusionauth-jwt", version: "5.3.3", licens } group(name: "test-compile", export: false) { dependency(id: "org.bouncycastle:bc-fips:1.0.2.5") - dependency(id: "org.testng:testng:7.5.1") + dependency(id: "org.testng:testng:7.9.0") } } @@ -62,17 +62,14 @@ project(group: "io.fusionauth", name: "fusionauth-jwt", version: "5.3.3", licens dependency = loadPlugin(id: "org.savantbuild.plugin:dependency:2.0.0-RC.6") java = loadPlugin(id: "org.savantbuild.plugin:java:2.0.0-RC.6") javaTestNG = loadPlugin(id: "org.savantbuild.plugin:java-testng:2.0.0-RC.6") -groovy = loadPlugin(id: "org.savantbuild.plugin:groovy:2.0.0-RC.6") idea = loadPlugin(id: "org.savantbuild.plugin:idea:2.0.0-RC.7") release = loadPlugin(id: "org.savantbuild.plugin:release-git:2.0.0-RC.6") /* * Plugin Settings */ -java.settings.javaVersion = "1.8" -groovy.settings.javaVersion = "1.8" -groovy.settings.groovyVersion = "2.2" -javaTestNG.settings.javaVersion = "1.8" +java.settings.javaVersion = "17" +javaTestNG.settings.javaVersion = "17" /* * Targets diff --git a/fusionauth-jwt.iml b/fusionauth-jwt.iml index 2b7866ec..11b47819 100644 --- a/fusionauth-jwt.iml +++ b/fusionauth-jwt.iml @@ -60,44 +60,44 @@ - + - + - + - + - + - + - + - + diff --git a/fusionauth-jwt.ipr b/fusionauth-jwt.ipr index b074a356..a064abc7 100644 --- a/fusionauth-jwt.ipr +++ b/fusionauth-jwt.ipr @@ -631,6 +631,11 @@