Skip to content

Commit dc955d7

Browse files
committed
Generalize CertificateWithPrivateKey
1 parent 19da356 commit dc955d7

8 files changed

+21
-17
lines changed

src/main/java/com/scalepoint/oauth_token_client/CertificateUtil.java

+7-4
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,15 @@
55
import java.math.BigInteger;
66
import java.security.MessageDigest;
77
import java.security.NoSuchAlgorithmException;
8+
import java.security.PrivateKey;
89
import java.security.cert.Certificate;
910
import java.security.cert.CertificateEncodingException;
1011
import java.security.cert.X509Certificate;
1112
import java.security.interfaces.RSAPrivateKey;
1213
import java.security.interfaces.RSAPublicKey;
1314

1415
final class CertificateUtil {
15-
public static String getThumbprint(Certificate certificate) {
16+
static String getThumbprint(Certificate certificate) {
1617
byte[] der;
1718
try {
1819
der = certificate.getEncoded();
@@ -32,14 +33,16 @@ public static String getThumbprint(Certificate certificate) {
3233
return new Base64UrlCodec().encode(digest);
3334
}
3435

35-
public static Boolean checkIfMatch(RSAPrivateKey privateKey, X509Certificate certificate) {
36+
static Boolean checkIfMatch(PrivateKey privateKey, X509Certificate certificate) {
37+
// Currently, only RSA validation is supported
38+
RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) privateKey;
3639
RSAPublicKey rsaPublicKey = (RSAPublicKey) certificate.getPublicKey();
3740

38-
return rsaPublicKey.getModulus().equals(privateKey.getModulus())
41+
return rsaPublicKey.getModulus().equals(rsaPrivateKey.getModulus())
3942
&& BigInteger.valueOf(2)
4043
.modPow(
4144
rsaPublicKey.getPublicExponent()
42-
.multiply(privateKey.getPrivateExponent())
45+
.multiply(rsaPrivateKey.getPrivateExponent())
4346
.subtract(BigInteger.ONE),
4447
rsaPublicKey.getModulus())
4548
.equals(BigInteger.ONE);

src/main/java/com/scalepoint/oauth_token_client/RSACertificateWithPrivateKey.java renamed to src/main/java/com/scalepoint/oauth_token_client/CertificateWithPrivateKey.java

+6-5
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,23 @@
11
package com.scalepoint.oauth_token_client;
22

3+
import java.security.PrivateKey;
34
import java.security.cert.X509Certificate;
4-
import java.security.interfaces.RSAPrivateKey;
55

66
/**
77
* Container for RSA private key and its matching X509 certificate
88
*/
9-
public class RSACertificateWithPrivateKey {
9+
@SuppressWarnings("WeakerAccess")
10+
public class CertificateWithPrivateKey {
1011
private X509Certificate certificate;
11-
private RSAPrivateKey privateKey;
12+
private PrivateKey privateKey;
1213

1314
/**
1415
* Create new container for private key and certificate
1516
*
1617
* @param privateKey Private key
1718
* @param certificate X509 certificate
1819
*/
19-
public RSACertificateWithPrivateKey(RSAPrivateKey privateKey, X509Certificate certificate) {
20+
public CertificateWithPrivateKey(PrivateKey privateKey, X509Certificate certificate) {
2021

2122
if (!CertificateUtil.checkIfMatch(privateKey, certificate)) {
2223
throw new IllegalArgumentException("Certificate does not match private key");
@@ -36,7 +37,7 @@ public X509Certificate getCertificate() {
3637
/**
3738
* @return Private key
3839
*/
39-
public RSAPrivateKey getPrivateKey() {
40+
public PrivateKey getPrivateKey() {
4041
return privateKey;
4142
}
4243
}

src/main/java/com/scalepoint/oauth_token_client/ClientAssertionJwtFactory.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class ClientAssertionJwtFactory {
1414
private final Key key;
1515
private final String thumbprint;
1616

17-
public ClientAssertionJwtFactory(String tokenEndpointUri, String clientId, RSACertificateWithPrivateKey keyPair) {
17+
public ClientAssertionJwtFactory(String tokenEndpointUri, String clientId, CertificateWithPrivateKey keyPair) {
1818
this.tokenEndpointUri = tokenEndpointUri;
1919
this.clientId = clientId;
2020
this.thumbprint = CertificateUtil.getThumbprint(keyPair.getCertificate());

src/main/java/com/scalepoint/oauth_token_client/JwtBearerClientAssertionCredentials.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public class JwtBearerClientAssertionCredentials implements ClientCredentials {
2424
* @param keyPair Certificate and private key. Certificate must be signed with SHA256. RSA keys must be 2048 bits long. Certificate must be associated with the client_id on the server.
2525
*/
2626
@SuppressWarnings("SameParameterValue")
27-
public JwtBearerClientAssertionCredentials(String tokenEndpointUri, String clientId, RSACertificateWithPrivateKey keyPair) {
27+
public JwtBearerClientAssertionCredentials(String tokenEndpointUri, String clientId, CertificateWithPrivateKey keyPair) {
2828
this.assertionFactory = new ClientAssertionJwtFactory(tokenEndpointUri, clientId, keyPair);
2929
this.credentialThumbprint = DigestUtils.sha1Hex(
3030
tokenEndpointUri

src/test/java/com/scalepoint/oauth_token_client/ClientAssertionJwtFactoryTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public class ClientAssertionJwtFactoryTest {
2020

2121
@BeforeClass
2222
public void init() {
23-
RSACertificateWithPrivateKey keyPair = TestCertificateHelper.load();
23+
CertificateWithPrivateKey keyPair = TestCertificateHelper.load();
2424
thumbprint = CertificateUtil.getThumbprint(keyPair.getCertificate());
2525
ClientAssertionJwtFactory factory = new ClientAssertionJwtFactory(TOKEN_ENDPOINT_URI, CLIENT_ID, keyPair);
2626
String tokenString = factory.CreateAssertionToken();

src/test/java/com/scalepoint/oauth_token_client/TestCertificateHelper.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
class TestCertificateHelper {
1515

16-
public static RSACertificateWithPrivateKey load() {
16+
public static CertificateWithPrivateKey load() {
1717
try {
1818
Properties config = new Properties();
1919
config.load(new FileInputStream("config.properties"));
@@ -23,12 +23,12 @@ public static RSACertificateWithPrivateKey load() {
2323
}
2424
}
2525

26-
private static RSACertificateWithPrivateKey getKeyPair(String keyStoreFileName, String keyStorePassword) throws KeyStoreException, IOException, UnrecoverableKeyException, NoSuchAlgorithmException, CertificateException {
26+
private static CertificateWithPrivateKey getKeyPair(String keyStoreFileName, String keyStorePassword) throws KeyStoreException, IOException, UnrecoverableKeyException, NoSuchAlgorithmException, CertificateException {
2727
KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType()); // or KeyStore.getInstance("pkcs12", "SunJSSE") to load .pfx
2828
keyStore.load(new FileInputStream(keyStoreFileName), null);
2929
String a = keyStore.aliases().nextElement();
3030
RSAPrivateKey privateKey = (RSAPrivateKey) keyStore.getKey(a, keyStorePassword.toCharArray());
3131
X509Certificate certificate = (X509Certificate) keyStore.getCertificate(a);
32-
return new RSACertificateWithPrivateKey(privateKey, certificate);
32+
return new CertificateWithPrivateKey(privateKey, certificate);
3333
}
3434
}

src/test/java/com/scalepoint/oauth_token_client/ValidClientAssertionExpectationCallback.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ protected boolean isValid(HashMap<String, String> params) {
1313
if (!params.get("client_assertion_type").equals("urn:ietf:params:oauth:client-assertion-type:jwt-bearer"))
1414
return false;
1515

16-
RSACertificateWithPrivateKey keyPair = TestCertificateHelper.load();
16+
CertificateWithPrivateKey keyPair = TestCertificateHelper.load();
1717
Jwts.parser().setSigningKey(keyPair.getPrivateKey()).parseClaimsJws(params.get("client_assertion"));
1818

1919
return true;

src/test/java/com/scalepoint/oauth_token_client/ValidResourceScopedAccessRequestCallback.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ protected boolean isValid(HashMap<String, String> params) {
1313
if (!params.get("client_assertion_type").equals("urn:ietf:params:oauth:client-assertion-type:jwt-bearer"))
1414
return false;
1515

16-
RSACertificateWithPrivateKey keyPair = TestCertificateHelper.load();
16+
CertificateWithPrivateKey keyPair = TestCertificateHelper.load();
1717
Jwts.parser().setSigningKey(keyPair.getPrivateKey()).parseClaimsJws(params.get("client_assertion"));
1818

1919
if (!params.get("resource").equals("resource")) return false;

0 commit comments

Comments
 (0)