Skip to content

Commit 678b0ba

Browse files
committed
feat(deps): remove the Guava dependency. Fixes #32.
Signed-off-by: Mart Somermaa <[email protected]>
1 parent 42ffdda commit 678b0ba

File tree

11 files changed

+101
-40
lines changed

11 files changed

+101
-40
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,7 @@ The `validate()` method returns the validated user certificate object if validat
280280
281281
```java
282282
import eu.webeid.security.certificate;
283-
import static eu.webeid.security.util.TitleCase.toTitleCase;
283+
import static eu.webeid.security.util.Strings.toTitleCase;
284284
285285
...
286286

pom.xml

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
<maven-surefire-plugin.version>2.22.2</maven-surefire-plugin.version>
1616
<java.version>1.8</java.version>
1717
<jjwt.version>0.11.5</jjwt.version>
18-
<jackson.version>2.13.3</jackson.version>
18+
<jackson.version>2.13.4</jackson.version>
1919
<slf4j.version>1.7.36</slf4j.version>
2020
<bouncycastle.version>1.70</bouncycastle.version>
2121
<guava.version>31.1-jre</guava.version>
@@ -55,11 +55,6 @@
5555
<artifactId>slf4j-api</artifactId>
5656
<version>${slf4j.version}</version>
5757
</dependency>
58-
<dependency>
59-
<groupId>com.google.guava</groupId>
60-
<artifactId>guava</artifactId>
61-
<version>${guava.version}</version>
62-
</dependency>
6358
<dependency>
6459
<groupId>org.bouncycastle</groupId>
6560
<artifactId>bcprov-jdk15on</artifactId>
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
/*
2+
* Copyright (c) 2022 Estonian Information System Authority
3+
*
4+
* Permission is hereby granted, free of charge, to any person obtaining a copy
5+
* of this software and associated documentation files (the "Software"), to deal
6+
* in the Software without restriction, including without limitation the rights
7+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8+
* copies of the Software, and to permit persons to whom the Software is
9+
* furnished to do so, subject to the following conditions:
10+
*
11+
* The above copyright notice and this permission notice shall be included in all
12+
* copies or substantial portions of the Software.
13+
*
14+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20+
* SOFTWARE.
21+
*/
22+
23+
package eu.webeid.security.util;
24+
25+
import java.util.Arrays;
26+
import java.util.HashSet;
27+
import java.util.Set;
28+
29+
public final class Collections {
30+
31+
@SafeVarargs
32+
public static <T> Set<T> newHashSet(T... elements) {
33+
final Set<T> set = new HashSet<>();
34+
java.util.Collections.addAll(set, elements);
35+
return set;
36+
}
37+
38+
public static byte[] concat(byte[] first, byte[] second) {
39+
byte[] result = Arrays.copyOf(first, first.length + second.length);
40+
System.arraycopy(second, 0, result, first.length, second.length);
41+
return result;
42+
}
43+
44+
private Collections() {
45+
throw new IllegalStateException("Utility class");
46+
}
47+
48+
}

src/main/java/eu/webeid/security/util/TitleCase.java renamed to src/main/java/eu/webeid/security/util/Strings.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222

2323
package eu.webeid.security.util;
2424

25-
public final class TitleCase {
25+
public final class Strings {
2626

2727
public static String toTitleCase(String input) {
2828
final StringBuilder titleCase = new StringBuilder(input.length());
@@ -41,7 +41,11 @@ public static String toTitleCase(String input) {
4141
return titleCase.toString();
4242
}
4343

44-
private TitleCase() {
44+
public static boolean isNullOrEmpty(String argument) {
45+
return argument == null || argument.isEmpty();
46+
}
47+
48+
private Strings() {
4549
throw new IllegalStateException("Utility class");
4650
}
4751

src/main/java/eu/webeid/security/validator/AuthTokenSignatureValidator.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@
2121
*/
2222
package eu.webeid.security.validator;
2323

24-
import com.google.common.base.Strings;
25-
import com.google.common.primitives.Bytes;
2624
import eu.webeid.security.exceptions.AuthTokenException;
2725
import eu.webeid.security.exceptions.AuthTokenParseException;
2826
import eu.webeid.security.exceptions.AuthTokenSignatureValidationException;
@@ -43,6 +41,8 @@
4341
import java.util.Set;
4442

4543
import static eu.webeid.security.util.Base64Decoder.decodeBase64;
44+
import static eu.webeid.security.util.Collections.concat;
45+
import static eu.webeid.security.util.Strings.isNullOrEmpty;
4646

4747
public class AuthTokenSignatureValidator {
4848

@@ -65,7 +65,7 @@ public void validate(String algorithm, String signature, PublicKey publicKey, St
6565
requireNotEmpty(algorithm, "algorithm");
6666
requireNotEmpty(signature, "signature");
6767
Objects.requireNonNull(publicKey);
68-
if (Strings.isNullOrEmpty(currentChallengeNonce)) {
68+
if (isNullOrEmpty(currentChallengeNonce)) {
6969
throw new ChallengeNullOrEmptyException();
7070
}
7171

@@ -96,7 +96,7 @@ public void validate(String algorithm, String signature, PublicKey publicKey, St
9696

9797
final byte[] originHash = hashAlgorithm.digest(originBytes);
9898
final byte[] nonceHash = hashAlgorithm.digest(currentChallengeNonce.getBytes(StandardCharsets.UTF_8));
99-
final byte[] concatSignedFields = Bytes.concat(originHash, nonceHash);
99+
final byte[] concatSignedFields = concat(originHash, nonceHash);
100100

101101
// Note that in case of ECDSA, the eID card outputs raw R||S, but JCA's SHA384withECDSA signature
102102
// validation implementation requires the signature in DER encoding.
@@ -112,7 +112,7 @@ private MessageDigest hashAlgorithmForName(String algorithm) throws NoSuchAlgori
112112
}
113113

114114
private void requireNotEmpty(String argument, String fieldName) throws AuthTokenParseException {
115-
if (Strings.isNullOrEmpty(argument)) {
115+
if (isNullOrEmpty(argument)) {
116116
throw new AuthTokenParseException("'" + fieldName + "' is null or empty");
117117
}
118118
}

src/main/java/eu/webeid/security/validator/AuthTokenValidationConfiguration.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222

2323
package eu.webeid.security.validator;
2424

25-
import com.google.common.collect.Sets;
2625
import eu.webeid.security.certificate.SubjectCertificatePolicies;
2726
import eu.webeid.security.validator.ocsp.service.DesignatedOcspServiceConfiguration;
2827
import org.bouncycastle.asn1.ASN1ObjectIdentifier;
@@ -37,6 +36,7 @@
3736
import java.util.HashSet;
3837
import java.util.Objects;
3938

39+
import static eu.webeid.security.util.Collections.newHashSet;
4040
import static eu.webeid.security.util.DateAndTime.requirePositiveDuration;
4141
import static eu.webeid.security.validator.ocsp.OcspUrl.AIA_ESTEID_2015;
4242

@@ -51,14 +51,14 @@ public final class AuthTokenValidationConfiguration {
5151
private Duration ocspRequestTimeout = Duration.ofSeconds(5);
5252
private DesignatedOcspServiceConfiguration designatedOcspServiceConfiguration;
5353
// Don't allow Estonian Mobile-ID policy by default.
54-
private Collection<ASN1ObjectIdentifier> disallowedSubjectCertificatePolicies = Sets.newHashSet(
54+
private Collection<ASN1ObjectIdentifier> disallowedSubjectCertificatePolicies = newHashSet(
5555
SubjectCertificatePolicies.ESTEID_SK_2015_MOBILE_ID_POLICY_V1,
5656
SubjectCertificatePolicies.ESTEID_SK_2015_MOBILE_ID_POLICY_V2,
5757
SubjectCertificatePolicies.ESTEID_SK_2015_MOBILE_ID_POLICY_V3,
5858
SubjectCertificatePolicies.ESTEID_SK_2015_MOBILE_ID_POLICY
5959
);
6060
// Disable OCSP nonce extension for EstEID 2015 cards by default.
61-
private Collection<URI> nonceDisabledOcspUrls = Sets.newHashSet(AIA_ESTEID_2015);
61+
private Collection<URI> nonceDisabledOcspUrls = newHashSet(AIA_ESTEID_2015);
6262

6363
AuthTokenValidationConfiguration() {
6464
}
@@ -158,4 +158,5 @@ public static void validateIsOriginURL(URI uri) throws IllegalArgumentException
158158
throw new IllegalArgumentException("An URI syntax exception occurred");
159159
}
160160
}
161+
161162
}

src/main/java/eu/webeid/security/validator/AuthTokenValidator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
import eu.webeid.security.authtoken.WebEidAuthToken;
2626
import eu.webeid.security.certificate.CertificateData;
2727
import eu.webeid.security.exceptions.AuthTokenException;
28-
import eu.webeid.security.util.TitleCase;
28+
import eu.webeid.security.util.Strings;
2929

3030
import java.security.cert.X509Certificate;
3131

@@ -49,7 +49,7 @@ public interface AuthTokenValidator {
4949
* Validates the Web eID authentication token signed by the subject and returns
5050
* the subject certificate that can be used for retrieving information about the subject.
5151
* <p>
52-
* See {@link CertificateData} and {@link TitleCase} for convenience methods for retrieving user
52+
* See {@link CertificateData} and {@link Strings} for convenience methods for retrieving user
5353
* information from the certificate.
5454
*
5555
* @param authToken the Web eID authentication token

src/main/java/eu/webeid/security/validator/certvalidators/SubjectCertificateValidatorBatch.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,18 +22,21 @@
2222

2323
package eu.webeid.security.validator.certvalidators;
2424

25-
import com.google.common.collect.Lists;
2625
import eu.webeid.security.exceptions.AuthTokenException;
2726

2827
import java.security.cert.X509Certificate;
28+
import java.util.ArrayList;
29+
import java.util.Collections;
2930
import java.util.List;
3031

3132
public final class SubjectCertificateValidatorBatch {
3233

3334
private final List<SubjectCertificateValidator> validatorList;
3435

3536
public static SubjectCertificateValidatorBatch createFrom(SubjectCertificateValidator... validatorList) {
36-
return new SubjectCertificateValidatorBatch(Lists.newArrayList(validatorList));
37+
final List<SubjectCertificateValidator> list = new ArrayList<>();
38+
Collections.addAll(list, validatorList);
39+
return new SubjectCertificateValidatorBatch(list);
3740
}
3841

3942
public void executeFor(X509Certificate subjectCertificate) throws AuthTokenException {

src/test/java/eu/webeid/security/testutil/OcspServiceMaker.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222

2323
package eu.webeid.security.testutil;
2424

25-
import com.google.common.collect.Sets;
2625
import eu.webeid.security.certificate.CertificateValidator;
2726
import eu.webeid.security.exceptions.JceException;
2827
import eu.webeid.security.exceptions.OCSPCertificateException;
@@ -39,6 +38,7 @@
3938
import java.util.List;
4039

4140
import static eu.webeid.security.testutil.Certificates.*;
41+
import static eu.webeid.security.util.Collections.newHashSet;
4242
import static eu.webeid.security.validator.ocsp.OcspUrl.AIA_ESTEID_2015;
4343

4444
public class OcspServiceMaker {
@@ -77,7 +77,7 @@ public static OcspServiceProvider getDesignatedOcspServiceProvider(String ocspSe
7777

7878
private static AiaOcspServiceConfiguration getAiaOcspServiceConfiguration() throws JceException {
7979
return new AiaOcspServiceConfiguration(
80-
Sets.newHashSet(AIA_ESTEID_2015, TEST_ESTEID_2015),
80+
newHashSet(AIA_ESTEID_2015, TEST_ESTEID_2015),
8181
CertificateValidator.buildTrustAnchorsFromCertificates(TRUSTED_CA_CERTIFICATES),
8282
CertificateValidator.buildCertStoreFromCertificates(TRUSTED_CA_CERTIFICATES));
8383
}

src/test/java/eu/webeid/security/validator/AuthTokenSignatureTest.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,20 +22,19 @@
2222

2323
package eu.webeid.security.validator;
2424

25+
import eu.webeid.security.authtoken.WebEidAuthToken;
2526
import eu.webeid.security.certificate.CertificateData;
27+
import eu.webeid.security.exceptions.AuthTokenSignatureValidationException;
28+
import eu.webeid.security.testutil.AbstractTestWithValidator;
2629
import eu.webeid.security.testutil.AuthTokenValidators;
27-
import eu.webeid.security.util.TitleCase;
2830
import org.assertj.core.api.Assertions;
2931
import org.junit.jupiter.api.Test;
30-
import eu.webeid.security.authtoken.WebEidAuthToken;
31-
import eu.webeid.security.exceptions.AuthTokenSignatureValidationException;
32-
import eu.webeid.security.testutil.AbstractTestWithValidator;
3332

3433
import java.security.cert.X509Certificate;
3534

35+
import static eu.webeid.security.util.Strings.toTitleCase;
3636
import static org.assertj.core.api.Assertions.assertThat;
3737
import static org.assertj.core.api.Assertions.assertThatThrownBy;
38-
import static eu.webeid.security.testutil.AuthTokenValidators.getAuthTokenValidator;
3938

4039
class AuthTokenSignatureTest extends AbstractTestWithValidator {
4140

@@ -51,9 +50,9 @@ void whenValidTokenAndNonce_thenValidationSucceeds() throws Exception {
5150

5251
Assertions.assertThat(CertificateData.getSubjectCN(result))
5352
.isEqualTo("JÕEORG\\,JAAK-KRISTJAN\\,38001085718");
54-
Assertions.assertThat(TitleCase.toTitleCase(CertificateData.getSubjectGivenName(result)))
53+
Assertions.assertThat(toTitleCase(CertificateData.getSubjectGivenName(result)))
5554
.isEqualTo("Jaak-Kristjan");
56-
Assertions.assertThat(TitleCase.toTitleCase(CertificateData.getSubjectSurname(result)))
55+
Assertions.assertThat(toTitleCase(CertificateData.getSubjectSurname(result)))
5756
.isEqualTo("Jõeorg");
5857
assertThat(CertificateData.getSubjectIdCode(result))
5958
.isEqualTo("PNOEE-38001085718");

0 commit comments

Comments
 (0)