Skip to content

Commit d84ddcd

Browse files
committed
test for base64 encoded certs
1 parent 247db36 commit d84ddcd

File tree

3 files changed

+16
-16
lines changed

3 files changed

+16
-16
lines changed

java-plugin/src/main/kotlin/io/github/danielpeach/plugin/Manager.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ class Manager {
178178
val serverCertificate = split.getOrNull(5)?.let {
179179
if (it == "") return@let null
180180

181-
val cert = parseEncodedCertificate(it)
181+
val cert = parseBase64EncodedCertificate(it)
182182
cert.checkValidity()
183183
cert
184184
}

java-plugin/src/main/kotlin/io/github/danielpeach/plugin/certificates.kt

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,15 @@ import java.math.BigInteger
1212
import java.security.*
1313
import java.security.cert.CertificateFactory
1414
import java.security.cert.X509Certificate
15-
import java.security.spec.PKCS8EncodedKeySpec
1615
import java.util.*
1716
import javax.net.ssl.TrustManagerFactory
1817

1918
private const val SHA_256 = "SHA-256"
20-
private const val BEGIN_PRIVATE_KEY = "-----BEGIN PRIVATE KEY-----"
21-
private const val END_PRIVATE_KEY = "-----END PRIVATE KEY-----"
2219
private const val BEGIN_CERT = "-----BEGIN CERTIFICATE-----"
2320
private const val END_CERT = "-----END CERTIFICATE-----"
2421
private val LINE_SEPARATOR: String = System.getProperty("line.separator")
2522

26-
/** Parses a base64-encoded X.509 certificate. */
27-
internal fun parseEncodedCertificate(cert: String): X509Certificate {
23+
internal fun parseBase64EncodedCertificate(cert: String): X509Certificate {
2824
return parseCertificate(Base64.getDecoder().decode(cert).inputStream())
2925
}
3026

@@ -37,16 +33,6 @@ internal fun parseCertificate(cert: InputStream): X509Certificate {
3733
return factory.generateCertificate(cert) as X509Certificate
3834
}
3935

40-
internal fun parsePEMKey(raw: String): PrivateKey {
41-
return raw
42-
.replace(BEGIN_PRIVATE_KEY, "")
43-
.replace(END_PRIVATE_KEY, "")
44-
.replace(LINE_SEPARATOR, "")
45-
.let { Base64.getDecoder().decode(it) }
46-
.let { PKCS8EncodedKeySpec(it) }
47-
.let { KeyFactory.getInstance("EC").generatePrivate(it) }
48-
}
49-
5036
internal fun fingerprintCertificate(certificate: ByteArray, algorithm: String): String {
5137
val md = MessageDigest.getInstance(algorithm)
5238
return BaseEncoding.base16().encode(md.digest(certificate))

java-plugin/src/test/kotlin/io/github/danielpeach/plugin/CertificatesTest.kt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import dev.minutest.junit.JUnit5Minutests
44
import dev.minutest.rootContext
55
import strikt.api.expectCatching
66
import strikt.assertions.isSuccess
7+
import java.nio.charset.Charset
8+
import java.util.*
79

810
class CertificatesTest : JUnit5Minutests {
911
fun tests() = rootContext {
@@ -14,5 +16,17 @@ class CertificatesTest : JUnit5Minutests {
1416

1517
expectCatching { parseCertificate(pemEncodedCert).checkValidity() }.isSuccess()
1618
}
19+
20+
test("generate -> base64 encode -> decode") {
21+
val (_, cert) = generateCert()
22+
23+
val base64PemEncodedCert = writeCertAsPEM(cert).let { pem ->
24+
Base64.getEncoder().encode(pem.toByteArray()).toString(Charset.defaultCharset())
25+
}
26+
27+
expectCatching {
28+
parseBase64EncodedCertificate(base64PemEncodedCert).checkValidity()
29+
}.isSuccess()
30+
}
1731
}
1832
}

0 commit comments

Comments
 (0)