36 lines
1.1 KiB
Kotlin
36 lines
1.1 KiB
Kotlin
package ltd.hlaeja.jwt.util
|
|
|
|
import java.security.KeyException
|
|
import java.security.KeyFactory
|
|
import java.security.interfaces.RSAPublicKey
|
|
import java.security.spec.X509EncodedKeySpec
|
|
import java.util.Base64.getDecoder
|
|
|
|
object PublicKeyProvider {
|
|
|
|
fun load(
|
|
pemFile: String,
|
|
): RSAPublicKey = readPublicPemFile(pemFile)
|
|
.let(PublicKeyProvider::makePublicKey)
|
|
|
|
private fun makePublicKey(
|
|
publicKeyBytes: ByteArray,
|
|
): RSAPublicKey = KeyFactory.getInstance("RSA")
|
|
.generatePublic(X509EncodedKeySpec(publicKeyBytes)) as RSAPublicKey
|
|
|
|
private fun readPublicPemFile(
|
|
publicKey: String,
|
|
): ByteArray = javaClass.classLoader
|
|
?.getResource(publicKey)
|
|
?.readText()
|
|
?.let(PublicKeyProvider::getPublicKeyByteArray)
|
|
?: throw KeyException("Could not load public key")
|
|
|
|
private fun getPublicKeyByteArray(
|
|
keyText: String,
|
|
): ByteArray = keyText.replace(Regex("[\r\n]+"), "")
|
|
.removePrefix("-----BEGIN PUBLIC KEY-----")
|
|
.removeSuffix("-----END PUBLIC KEY-----")
|
|
.let { getDecoder().decode(it) }
|
|
}
|