Ether Framework
Unified API docs for Ether modules
Loading...
Searching...
No Matches
KeyProvider.java
Go to the documentation of this file.
1
package
dev.rafex.ether.jwt;
2
3
/*-
4
* #%L
5
* ether-jwt
6
* %%
7
* Copyright (C) 2025 - 2026 Raúl Eduardo González Argote
8
* %%
9
* Permission is hereby granted, free of charge, to any person obtaining a copy
10
* of this software and associated documentation files (the "Software"), to deal
11
* in the Software without restriction, including without limitation the rights
12
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13
* copies of the Software, and to permit persons to whom the Software is
14
* furnished to do so, subject to the following conditions:
15
*
16
* The above copyright notice and this permission notice shall be included in
17
* all copies or substantial portions of the Software.
18
*
19
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
25
* THE SOFTWARE.
26
* #L%
27
*/
28
29
import
java.nio.charset.StandardCharsets;
30
import
java.security.PrivateKey;
31
import
java.security.PublicKey;
32
import
java.util.Arrays;
33
import
java.util.Objects;
34
35
/** Provides cryptographic material used to sign and verify JWT tokens. */
36
public
interface
KeyProvider
{
37
38
JwtAlgorithm
algorithm
();
39
40
byte
[]
hmacSecret
();
41
42
PrivateKey
privateKey
();
43
44
PublicKey
publicKey
();
45
46
static
KeyProvider
hmac
(
final
String secret) {
47
if
(secret ==
null
|| secret.isBlank()) {
48
throw
new
IllegalArgumentException(
"secret is required for HS256"
);
49
}
50
return
hmac
(secret.getBytes(StandardCharsets.UTF_8));
51
}
52
53
static
KeyProvider
hmac
(
final
byte
[] secret) {
54
if
(secret ==
null
|| secret.length == 0) {
55
throw
new
IllegalArgumentException(
"secret is required for HS256"
);
56
}
57
final
byte
[] copy = Arrays.copyOf(secret, secret.length);
58
return
new
BasicKeyProvider
(
JwtAlgorithm
.
HS256
, copy,
null
,
null
);
59
}
60
61
static
KeyProvider
rsa
(
final
PrivateKey
privateKey
,
final
PublicKey
publicKey
) {
62
if
(
privateKey
==
null
||
publicKey
==
null
) {
63
throw
new
IllegalArgumentException(
"privateKey and publicKey are required for RS256"
);
64
}
65
return
new
BasicKeyProvider
(
JwtAlgorithm
.
RS256
,
null
,
privateKey
,
publicKey
);
66
}
67
68
static
KeyProvider
rsaVerifier
(
final
PublicKey
publicKey
) {
69
if
(
publicKey
==
null
) {
70
throw
new
IllegalArgumentException(
"publicKey is required for RS256 verification"
);
71
}
72
return
new
BasicKeyProvider
(
JwtAlgorithm
.
RS256
,
null
,
null
,
publicKey
);
73
}
74
75
final
class
BasicKeyProvider
implements
KeyProvider
{
76
private
final
JwtAlgorithm
algorithm;
77
private
final
byte
[] hmacSecret;
78
private
final
PrivateKey privateKey;
79
private
final
PublicKey publicKey;
80
81
private
BasicKeyProvider(
82
final
JwtAlgorithm
algorithm,
83
final
byte
[] hmacSecret,
84
final
PrivateKey privateKey,
85
final
PublicKey publicKey) {
86
this.algorithm = Objects.requireNonNull(algorithm,
"algorithm"
);
87
this.hmacSecret = hmacSecret ==
null
? null : Arrays.copyOf(hmacSecret, hmacSecret.length);
88
this.privateKey = privateKey;
89
this.publicKey = publicKey;
90
}
91
92
@Override
93
public
JwtAlgorithm
algorithm
() {
94
return
algorithm;
95
}
96
97
@Override
98
public
byte
[]
hmacSecret
() {
99
return
hmacSecret ==
null
? null : Arrays.copyOf(hmacSecret, hmacSecret.length);
100
}
101
102
@Override
103
public
PrivateKey
privateKey
() {
104
return
privateKey;
105
}
106
107
@Override
108
public
PublicKey
publicKey
() {
109
return
publicKey;
110
}
111
}
112
}
dev.rafex.ether.jwt.KeyProvider.BasicKeyProvider
Definition
KeyProvider.java:75
dev.rafex.ether.jwt.KeyProvider.BasicKeyProvider.algorithm
JwtAlgorithm algorithm()
Definition
KeyProvider.java:93
dev.rafex.ether.jwt.KeyProvider.BasicKeyProvider.hmacSecret
byte[] hmacSecret()
Definition
KeyProvider.java:98
dev.rafex.ether.jwt.KeyProvider.BasicKeyProvider.publicKey
PublicKey publicKey()
Definition
KeyProvider.java:108
dev.rafex.ether.jwt.KeyProvider.BasicKeyProvider.privateKey
PrivateKey privateKey()
Definition
KeyProvider.java:103
dev.rafex.ether.jwt.JwtAlgorithm
Supported JWT signature algorithms.
Definition
JwtAlgorithm.java:30
dev.rafex.ether.jwt.JwtAlgorithm.RS256
RS256
Definition
JwtAlgorithm.java:32
dev.rafex.ether.jwt.JwtAlgorithm.HS256
HS256
Definition
JwtAlgorithm.java:31
dev.rafex.ether.jwt.KeyProvider
Provides cryptographic material used to sign and verify JWT tokens.
Definition
KeyProvider.java:36
dev.rafex.ether.jwt.KeyProvider.privateKey
PrivateKey privateKey()
dev.rafex.ether.jwt.KeyProvider.hmacSecret
byte[] hmacSecret()
dev.rafex.ether.jwt.KeyProvider.algorithm
JwtAlgorithm algorithm()
dev.rafex.ether.jwt.KeyProvider.hmac
static KeyProvider hmac(final byte[] secret)
Definition
KeyProvider.java:53
dev.rafex.ether.jwt.KeyProvider.hmac
static KeyProvider hmac(final String secret)
Definition
KeyProvider.java:46
dev.rafex.ether.jwt.KeyProvider.publicKey
PublicKey publicKey()
dev.rafex.ether.jwt.KeyProvider.rsaVerifier
static KeyProvider rsaVerifier(final PublicKey publicKey)
Definition
KeyProvider.java:68
dev.rafex.ether.jwt.KeyProvider.rsa
static KeyProvider rsa(final PrivateKey privateKey, final PublicKey publicKey)
Definition
KeyProvider.java:61
ether-jwt
ether-jwt
src
main
java
dev
rafex
ether
jwt
KeyProvider.java
Generated by
1.16.1