KeyStores.kt
- package com.hexagonkt.core.security
- import java.net.URL
- import java.security.KeyStore
- import java.security.interfaces.RSAPrivateKey
- import java.security.interfaces.RSAPublicKey
- import javax.net.ssl.KeyManagerFactory
- import javax.net.ssl.TrustManagerFactory
- // TODO Create CAs and PKs like `certificates.gradle` Check: https://www.baeldung.com/java-keystore
- fun loadKeyStore(resource: URL, password: String): KeyStore =
- KeyStore.getInstance("PKCS12").apply {
- load(resource.openStream(), password.toCharArray())
- }
- fun KeyStore.getPrivateKey(alias: String, password: String): RSAPrivateKey =
- this.getKey(alias, password.toCharArray()) as RSAPrivateKey
- fun KeyStore.getPublicKey(alias: String): RSAPublicKey =
- this.getCertificate(alias).publicKey as RSAPublicKey
- fun createTrustManagerFactory(
- resource: URL,
- password: String,
- algorithm: String = TrustManagerFactory.getDefaultAlgorithm()
- ): TrustManagerFactory {
- val trustStore = loadKeyStore(resource, password)
- val trustManager = TrustManagerFactory.getInstance(algorithm)
- trustManager.init(trustStore)
- return trustManager
- }
- fun createKeyManagerFactory(
- resource: URL,
- password: String,
- algorithm: String = KeyManagerFactory.getDefaultAlgorithm()
- ): KeyManagerFactory {
- val keyStore = loadKeyStore(resource, password)
- val keyManager = KeyManagerFactory.getInstance(algorithm)
- keyManager.init(keyStore, password.toCharArray())
- return keyManager
- }