diff --git a/jetty-core/jetty-siwe/pom.xml b/jetty-core/jetty-siwe/pom.xml
index 80920d6f9eb..014afed886e 100644
--- a/jetty-core/jetty-siwe/pom.xml
+++ b/jetty-core/jetty-siwe/pom.xml
@@ -15,26 +15,6 @@
${project.groupId}.siwe
-
-
-
- org.jetbrains.kotlin
- kotlin-stdlib-common
- 1.9.10
-
-
- org.jetbrains.kotlin
- kotlin-stdlib-jdk7
- 1.9.10
-
-
- org.jetbrains.kotlin
- kotlin-stdlib-jdk8
- 1.9.10
-
-
-
-
org.eclipse.jetty
diff --git a/jetty-core/jetty-siwe/src/main/java/module-info.java b/jetty-core/jetty-siwe/src/main/java/module-info.java
new file mode 100644
index 00000000000..4f08aec3540
--- /dev/null
+++ b/jetty-core/jetty-siwe/src/main/java/module-info.java
@@ -0,0 +1,21 @@
+//
+// ========================================================================
+// Copyright (c) 1995 Mort Bay Consulting Pty Ltd and others.
+//
+// This program and the accompanying materials are made available under the
+// terms of the Eclipse Public License v. 2.0 which is available at
+// https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+// which is available at https://www.apache.org/licenses/LICENSE-2.0.
+//
+// SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+// ========================================================================
+//
+
+module org.eclipse.jetty.siwe
+{
+ requires transitive org.eclipse.jetty.security;
+ requires crypto;
+ requires org.bouncycastle.provider;
+
+ exports org.eclipse.jetty.security.siwe;
+}
diff --git a/jetty-core/jetty-siwe/src/main/java/org/eclipse/jetty/security/siwe/EthereumAuthenticator.java b/jetty-core/jetty-siwe/src/main/java/org/eclipse/jetty/security/siwe/EthereumAuthenticator.java
index 027f1c6a584..4c637075c06 100644
--- a/jetty-core/jetty-siwe/src/main/java/org/eclipse/jetty/security/siwe/EthereumAuthenticator.java
+++ b/jetty-core/jetty-siwe/src/main/java/org/eclipse/jetty/security/siwe/EthereumAuthenticator.java
@@ -39,6 +39,10 @@
import org.eclipse.jetty.security.UserIdentity;
import org.eclipse.jetty.security.authentication.LoginAuthenticator;
import org.eclipse.jetty.security.authentication.SessionAuthentication;
+import org.eclipse.jetty.security.siwe.internal.AnyUserLoginService;
+import org.eclipse.jetty.security.siwe.internal.EthereumUtil;
+import org.eclipse.jetty.security.siwe.internal.SignInWithEthereumParser;
+import org.eclipse.jetty.security.siwe.internal.SignInWithEthereumToken;
import org.eclipse.jetty.server.FormFields;
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.Response;
@@ -61,7 +65,7 @@ public class EthereumAuthenticator extends LoginAuthenticator
private static final Logger LOG = LoggerFactory.getLogger(EthereumAuthenticator.class);
public static final String LOGIN_PATH_PARAM = "org.eclipse.jetty.security.siwe.login_path";
- public static final String AUTH_PATH_PARAM = "org.eclipse.jetty.security.siwe.auth_path";
+ public static final String AUTHENTICATION_PATH_PARAM = "org.eclipse.jetty.security.siwe.authentication_path";
public static final String NONCE_PATH_PARAM = "org.eclipse.jetty.security.siwe.nonce_path";
public static final String MAX_MESSAGE_SIZE_PARAM = "org.eclipse.jetty.security.siwe.max_message_size";
public static final String LOGOUT_REDIRECT_PARAM = "org.eclipse.jetty.security.siwe.logout_redirect_path";
@@ -71,7 +75,7 @@ public class EthereumAuthenticator extends LoginAuthenticator
public static final String J_POST = "org.eclipse.jetty.security.siwe.POST";
public static final String J_METHOD = "org.eclipse.jetty.security.siwe.METHOD";
public static final String ERROR_PARAMETER = "error_description_jetty";
- private static final String DEFAULT_AUTH_PATH = "/auth/login";
+ private static final String DEFAULT_AUTHENTICATION_PATH = "/auth/login";
private static final String DEFAULT_NONCE_PATH = "/auth/nonce";
private static final String NONCE_SET_ATTR = "org.eclipse.jetty.security.siwe.nonce";
@@ -80,7 +84,7 @@ public class EthereumAuthenticator extends LoginAuthenticator
private final IncludeExcludeSet _domains = new IncludeExcludeSet<>();
private String _loginPath;
- private String _authPath = DEFAULT_AUTH_PATH;
+ private String _authenticationPath = DEFAULT_AUTHENTICATION_PATH;
private String _noncePath = DEFAULT_NONCE_PATH;
private long _maxMessageSize = 4 * 1024;
private String _logoutRedirectPath;
@@ -115,9 +119,9 @@ public void setConfiguration(Authenticator.Configuration authConfig)
if (loginPath != null)
setLoginPath(loginPath);
- String authPath = authConfig.getParameter(AUTH_PATH_PARAM);
- if (authPath != null)
- setAuthPath(authPath);
+ String authenticationPath = authConfig.getParameter(AUTHENTICATION_PATH_PARAM);
+ if (authenticationPath != null)
+ setAuthenticationPath(authenticationPath);
String noncePath = authConfig.getParameter(NONCE_PATH_PARAM);
if (noncePath != null)
@@ -166,7 +170,7 @@ public void setLoginPath(String loginPath)
{
if (loginPath == null)
{
- LOG.warn("login path must not be null, defaulting to " + _loginPath);
+ LOG.warn("login path must not be null, defaulting to {}", _loginPath);
loginPath = _loginPath;
}
else if (!loginPath.startsWith("/"))
@@ -178,20 +182,20 @@ else if (!loginPath.startsWith("/"))
_loginPath = loginPath;
}
- public void setAuthPath(String authPath)
+ public void setAuthenticationPath(String authenticationPath)
{
- if (authPath == null)
+ if (authenticationPath == null)
{
- authPath = _authPath;
- LOG.warn("login path must not be null, defaulting to " + authPath);
+ authenticationPath = _authenticationPath;
+ LOG.warn("authentication path must not be null, defaulting to {}", authenticationPath);
}
- else if (!authPath.startsWith("/"))
+ else if (!authenticationPath.startsWith("/"))
{
- authPath = "/" + authPath;
- LOG.warn("login path must start with /");
+ authenticationPath = "/" + authenticationPath;
+ LOG.warn("authentication path must start with /");
}
- _authPath = authPath;
+ _authenticationPath = authenticationPath;
}
public void setNoncePath(String noncePath)
@@ -199,12 +203,12 @@ public void setNoncePath(String noncePath)
if (noncePath == null)
{
noncePath = _noncePath;
- LOG.warn("login path must not be null, defaulting to " + noncePath);
+ LOG.warn("nonce path must not be null, defaulting to {}", noncePath);
}
else if (!noncePath.startsWith("/"))
{
noncePath = "/" + noncePath;
- LOG.warn("login path must start with /");
+ LOG.warn("nonce path must start with /");
}
_noncePath = noncePath;
@@ -222,12 +226,7 @@ public void setDispatch(boolean dispatch)
public void setLogoutRedirectPath(String logoutRedirectPath)
{
- if (logoutRedirectPath == null)
- {
- LOG.warn("logout redirect path must not be null, defaulting to /");
- logoutRedirectPath = "/";
- }
- else if (!logoutRedirectPath.startsWith("/"))
+ if (logoutRedirectPath != null && !logoutRedirectPath.startsWith("/"))
{
LOG.warn("logout redirect path must start with /");
logoutRedirectPath = "/" + logoutRedirectPath;
@@ -692,7 +691,7 @@ public boolean isLoginPage(String uri)
public boolean isAuthenticationRequest(String uri)
{
- return matchURI(uri, _authPath);
+ return matchURI(uri, _authenticationPath);
}
public boolean isNonceRequest(String uri)
diff --git a/jetty-core/jetty-siwe/src/main/java/org/eclipse/jetty/security/siwe/SignedMessage.java b/jetty-core/jetty-siwe/src/main/java/org/eclipse/jetty/security/siwe/SignedMessage.java
index b05d3f1746c..f7448370e60 100644
--- a/jetty-core/jetty-siwe/src/main/java/org/eclipse/jetty/security/siwe/SignedMessage.java
+++ b/jetty-core/jetty-siwe/src/main/java/org/eclipse/jetty/security/siwe/SignedMessage.java
@@ -13,6 +13,8 @@
package org.eclipse.jetty.security.siwe;
+import org.eclipse.jetty.security.siwe.internal.EthereumSignatureVerifier;
+
public record SignedMessage(String message, String signature)
{
public String recoverAddress()
diff --git a/jetty-core/jetty-siwe/src/main/java/org/eclipse/jetty/security/siwe/AnyUserLoginService.java b/jetty-core/jetty-siwe/src/main/java/org/eclipse/jetty/security/siwe/internal/AnyUserLoginService.java
similarity index 97%
rename from jetty-core/jetty-siwe/src/main/java/org/eclipse/jetty/security/siwe/AnyUserLoginService.java
rename to jetty-core/jetty-siwe/src/main/java/org/eclipse/jetty/security/siwe/internal/AnyUserLoginService.java
index fc83c67e77b..16f9b09f0a6 100644
--- a/jetty-core/jetty-siwe/src/main/java/org/eclipse/jetty/security/siwe/AnyUserLoginService.java
+++ b/jetty-core/jetty-siwe/src/main/java/org/eclipse/jetty/security/siwe/internal/AnyUserLoginService.java
@@ -11,7 +11,7 @@
// ========================================================================
//
-package org.eclipse.jetty.security.siwe;
+package org.eclipse.jetty.security.siwe.internal;
import java.util.function.Function;
import javax.security.auth.Subject;
diff --git a/jetty-core/jetty-siwe/src/main/java/org/eclipse/jetty/security/siwe/EthereumSignatureVerifier.java b/jetty-core/jetty-siwe/src/main/java/org/eclipse/jetty/security/siwe/internal/EthereumSignatureVerifier.java
similarity index 97%
rename from jetty-core/jetty-siwe/src/main/java/org/eclipse/jetty/security/siwe/EthereumSignatureVerifier.java
rename to jetty-core/jetty-siwe/src/main/java/org/eclipse/jetty/security/siwe/internal/EthereumSignatureVerifier.java
index e5d7df51204..818bce24266 100644
--- a/jetty-core/jetty-siwe/src/main/java/org/eclipse/jetty/security/siwe/EthereumSignatureVerifier.java
+++ b/jetty-core/jetty-siwe/src/main/java/org/eclipse/jetty/security/siwe/internal/EthereumSignatureVerifier.java
@@ -11,7 +11,7 @@
// ========================================================================
//
-package org.eclipse.jetty.security.siwe;
+package org.eclipse.jetty.security.siwe.internal;
import java.math.BigInteger;
import java.nio.charset.StandardCharsets;
diff --git a/jetty-core/jetty-siwe/src/main/java/org/eclipse/jetty/security/siwe/EthereumUtil.java b/jetty-core/jetty-siwe/src/main/java/org/eclipse/jetty/security/siwe/internal/EthereumUtil.java
similarity index 92%
rename from jetty-core/jetty-siwe/src/main/java/org/eclipse/jetty/security/siwe/EthereumUtil.java
rename to jetty-core/jetty-siwe/src/main/java/org/eclipse/jetty/security/siwe/internal/EthereumUtil.java
index 5a4eb327128..e75b0370167 100644
--- a/jetty-core/jetty-siwe/src/main/java/org/eclipse/jetty/security/siwe/EthereumUtil.java
+++ b/jetty-core/jetty-siwe/src/main/java/org/eclipse/jetty/security/siwe/internal/EthereumUtil.java
@@ -11,7 +11,7 @@
// ========================================================================
//
-package org.eclipse.jetty.security.siwe;
+package org.eclipse.jetty.security.siwe.internal;
import java.security.SecureRandom;
@@ -20,6 +20,10 @@ public class EthereumUtil
private static final String NONCE_CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
private static final SecureRandom RANDOM = new SecureRandom();
+ private EthereumUtil()
+ {
+ }
+
public static String createNonce()
{
StringBuilder builder = new StringBuilder(8);
diff --git a/jetty-core/jetty-siwe/src/main/java/org/eclipse/jetty/security/siwe/SignInWithEthereumParser.java b/jetty-core/jetty-siwe/src/main/java/org/eclipse/jetty/security/siwe/internal/SignInWithEthereumParser.java
similarity index 98%
rename from jetty-core/jetty-siwe/src/main/java/org/eclipse/jetty/security/siwe/SignInWithEthereumParser.java
rename to jetty-core/jetty-siwe/src/main/java/org/eclipse/jetty/security/siwe/internal/SignInWithEthereumParser.java
index f2a42d8df98..842a902596a 100644
--- a/jetty-core/jetty-siwe/src/main/java/org/eclipse/jetty/security/siwe/SignInWithEthereumParser.java
+++ b/jetty-core/jetty-siwe/src/main/java/org/eclipse/jetty/security/siwe/internal/SignInWithEthereumParser.java
@@ -11,7 +11,7 @@
// ========================================================================
//
-package org.eclipse.jetty.security.siwe;
+package org.eclipse.jetty.security.siwe.internal;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
diff --git a/jetty-core/jetty-siwe/src/main/java/org/eclipse/jetty/security/siwe/SignInWithEthereumToken.java b/jetty-core/jetty-siwe/src/main/java/org/eclipse/jetty/security/siwe/internal/SignInWithEthereumToken.java
similarity index 86%
rename from jetty-core/jetty-siwe/src/main/java/org/eclipse/jetty/security/siwe/SignInWithEthereumToken.java
rename to jetty-core/jetty-siwe/src/main/java/org/eclipse/jetty/security/siwe/internal/SignInWithEthereumToken.java
index 3d4d86b61e5..61b9800bd78 100644
--- a/jetty-core/jetty-siwe/src/main/java/org/eclipse/jetty/security/siwe/SignInWithEthereumToken.java
+++ b/jetty-core/jetty-siwe/src/main/java/org/eclipse/jetty/security/siwe/internal/SignInWithEthereumToken.java
@@ -11,13 +11,14 @@
// ========================================================================
//
-package org.eclipse.jetty.security.siwe;
+package org.eclipse.jetty.security.siwe.internal;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.function.Predicate;
import org.eclipse.jetty.security.ServerAuthException;
+import org.eclipse.jetty.security.siwe.SignedMessage;
import org.eclipse.jetty.util.IncludeExcludeSet;
import org.eclipse.jetty.util.StringUtil;
@@ -72,20 +73,4 @@ public void validate(SignedMessage signedMessage, Predicate validateNonc
if (chainIds != null && !chainIds.test(chainId()))
throw new ServerAuthException("unregistered chainId");
}
-
- @Override
- public String toString()
- {
- return String.format(
- "Scheme: %s" +
- "%nDomain: %s" +
- "%nAddress: %s" +
- "%nURI: %s" +
- "%nVersion: %s" +
- "%nChainID: %s" +
- "%nNonce: %s" +
- "%nIssuedAt: %s" +
- "%nStatement: %s",
- scheme, domain, address, uri, version, chainId, nonce, issuedAt, statement);
- }
}
diff --git a/jetty-core/jetty-siwe/src/test/java/org/eclipse/jetty/security/siwe/SightInWithEthereumTokenTest.java b/jetty-core/jetty-siwe/src/test/java/org/eclipse/jetty/security/siwe/SightInWithEthereumTokenTest.java
index d90e43787d8..db09e4117e1 100644
--- a/jetty-core/jetty-siwe/src/test/java/org/eclipse/jetty/security/siwe/SightInWithEthereumTokenTest.java
+++ b/jetty-core/jetty-siwe/src/test/java/org/eclipse/jetty/security/siwe/SightInWithEthereumTokenTest.java
@@ -16,6 +16,9 @@
import java.time.LocalDateTime;
import java.util.function.Predicate;
+import org.eclipse.jetty.security.siwe.internal.EthereumUtil;
+import org.eclipse.jetty.security.siwe.internal.SignInWithEthereumParser;
+import org.eclipse.jetty.security.siwe.internal.SignInWithEthereumToken;
import org.eclipse.jetty.security.siwe.util.EthereumCredentials;
import org.eclipse.jetty.security.siwe.util.SignInWithEthereumGenerator;
import org.eclipse.jetty.util.IncludeExcludeSet;
diff --git a/jetty-core/jetty-siwe/src/test/java/org/eclipse/jetty/security/siwe/SignInWithEthereumParserTest.java b/jetty-core/jetty-siwe/src/test/java/org/eclipse/jetty/security/siwe/SignInWithEthereumParserTest.java
index 9a5799f6df7..63fb1152d1b 100644
--- a/jetty-core/jetty-siwe/src/test/java/org/eclipse/jetty/security/siwe/SignInWithEthereumParserTest.java
+++ b/jetty-core/jetty-siwe/src/test/java/org/eclipse/jetty/security/siwe/SignInWithEthereumParserTest.java
@@ -19,6 +19,9 @@
import java.util.List;
import java.util.stream.Stream;
+import org.eclipse.jetty.security.siwe.internal.EthereumUtil;
+import org.eclipse.jetty.security.siwe.internal.SignInWithEthereumParser;
+import org.eclipse.jetty.security.siwe.internal.SignInWithEthereumToken;
import org.eclipse.jetty.security.siwe.util.SignInWithEthereumGenerator;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
diff --git a/jetty-core/jetty-siwe/src/test/java/org/eclipse/jetty/security/siwe/SignatureVerificationTest.java b/jetty-core/jetty-siwe/src/test/java/org/eclipse/jetty/security/siwe/SignatureVerificationTest.java
index 373639108ce..9c08df23246 100644
--- a/jetty-core/jetty-siwe/src/test/java/org/eclipse/jetty/security/siwe/SignatureVerificationTest.java
+++ b/jetty-core/jetty-siwe/src/test/java/org/eclipse/jetty/security/siwe/SignatureVerificationTest.java
@@ -13,6 +13,7 @@
package org.eclipse.jetty.security.siwe;
+import org.eclipse.jetty.security.siwe.internal.EthereumSignatureVerifier;
import org.eclipse.jetty.security.siwe.util.EthereumCredentials;
import org.eclipse.jetty.security.siwe.util.SignInWithEthereumGenerator;
import org.junit.jupiter.api.Test;
diff --git a/jetty-core/jetty-siwe/src/test/java/org/eclipse/jetty/security/siwe/util/EthereumCredentials.java b/jetty-core/jetty-siwe/src/test/java/org/eclipse/jetty/security/siwe/util/EthereumCredentials.java
index 2280e661021..2f82bda9732 100644
--- a/jetty-core/jetty-siwe/src/test/java/org/eclipse/jetty/security/siwe/util/EthereumCredentials.java
+++ b/jetty-core/jetty-siwe/src/test/java/org/eclipse/jetty/security/siwe/util/EthereumCredentials.java
@@ -15,8 +15,8 @@
import java.nio.charset.StandardCharsets;
-import org.eclipse.jetty.security.siwe.EthereumSignatureVerifier;
import org.eclipse.jetty.security.siwe.SignedMessage;
+import org.eclipse.jetty.security.siwe.internal.EthereumSignatureVerifier;
import org.web3j.crypto.Credentials;
import org.web3j.crypto.ECKeyPair;
import org.web3j.crypto.Keys;
diff --git a/jetty-core/jetty-siwe/src/test/java/org/eclipse/jetty/security/siwe/util/SignInWithEthereumGenerator.java b/jetty-core/jetty-siwe/src/test/java/org/eclipse/jetty/security/siwe/util/SignInWithEthereumGenerator.java
index 688a4edb747..2c0bdc737a4 100644
--- a/jetty-core/jetty-siwe/src/test/java/org/eclipse/jetty/security/siwe/util/SignInWithEthereumGenerator.java
+++ b/jetty-core/jetty-siwe/src/test/java/org/eclipse/jetty/security/siwe/util/SignInWithEthereumGenerator.java
@@ -16,7 +16,7 @@
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
-import org.eclipse.jetty.security.siwe.EthereumUtil;
+import org.eclipse.jetty.security.siwe.internal.EthereumUtil;
public class SignInWithEthereumGenerator
{