Skip to content

Commit 21fd9fb

Browse files
committed
centralize PEM parsing logic
1 parent a7991ca commit 21fd9fb

3 files changed

Lines changed: 12 additions & 10 deletions

File tree

sdk/src/main/java/io/opentdf/platform/sdk/ECKeyPair.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import java.math.BigInteger;
77
import java.security.InvalidAlgorithmParameterException;
88
import java.security.InvalidKeyException;
9+
import java.security.KeyFactory;
910
import java.security.KeyPair;
1011
import java.security.KeyPairGenerator;
1112
import java.security.NoSuchAlgorithmException;
@@ -16,6 +17,8 @@
1617
import java.security.spec.ECGenParameterSpec;
1718
import java.security.spec.ECParameterSpec;
1819
import java.security.spec.ECPoint;
20+
import java.security.spec.InvalidKeySpecException;
21+
import java.security.spec.X509EncodedKeySpec;
1922
import java.util.Base64;
2023
import java.util.Objects;
2124

@@ -48,6 +51,13 @@ public ECKeyPair(ECCurve curve) {
4851
}
4952
}
5053

54+
static ECPublicKey publicKeyFromPem(String pem) throws InvalidKeySpecException, NoSuchAlgorithmException {
55+
String pemData = pem.replaceAll("-----(BEGIN|END) [A-Z ]+-----", "").replaceAll("\\s", "");
56+
byte[] der = Base64.getDecoder().decode(pemData);
57+
KeyFactory keyFactory = KeyFactory.getInstance("EC");
58+
return (ECPublicKey) keyFactory.generatePublic(new X509EncodedKeySpec(der));
59+
}
60+
5161
public ECPublicKey getPublicKey() {
5262
return (ECPublicKey) this.keyPair.getPublic();
5363
}

sdk/src/main/java/io/opentdf/platform/sdk/KASClient.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -183,11 +183,7 @@ public byte[] unwrap(Manifest.KeyAccess keyAccess, String policy, KeyType sessi
183183
var kasEphemeralPublicKey = response.getSessionPublicKey();
184184
ECPublicKey publicKey;
185185
try {
186-
byte[] der = Base64.getDecoder().decode(kasEphemeralPublicKey
187-
.replaceAll("-----[^-]+-----", "")
188-
.replaceAll("\\s+", ""));
189-
publicKey = (ECPublicKey) KeyFactory.getInstance("EC")
190-
.generatePublic(new X509EncodedKeySpec(der));
186+
publicKey = ECKeyPair.publicKeyFromPem(kasEphemeralPublicKey);
191187
} catch (NoSuchAlgorithmException | InvalidKeySpecException e) {
192188
throw new SDKException("error decoding KAS session public key", e);
193189
}

sdk/src/main/java/io/opentdf/platform/sdk/TDF.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -249,11 +249,7 @@ private ECKeyWrappedKeyInfo createECWrappedKey(Config.KASInfo kasInfo,
249249

250250
ECPublicKey kasPubKey;
251251
try {
252-
byte[] der = Base64.getDecoder().decode(kasInfo.PublicKey
253-
.replaceAll("-----[^-]+-----", "")
254-
.replaceAll("\\s+", ""));
255-
kasPubKey = (ECPublicKey) KeyFactory.getInstance("EC")
256-
.generatePublic(new X509EncodedKeySpec(der));
252+
kasPubKey = ECKeyPair.publicKeyFromPem(kasInfo.PublicKey);
257253
} catch (NoSuchAlgorithmException | InvalidKeySpecException e) {
258254
throw new SDKException("error decoding KAS EC public key", e);
259255
}

0 commit comments

Comments
 (0)