diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index a5b66b6..24f665b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -119,7 +119,8 @@
android:theme="@style/AppTheme.NoActionBar">
-
+
+
diff --git a/app/src/main/java/com/example/hpostesting/presentation/NatsManager.kt b/app/src/main/java/com/example/hpostesting/presentation/NatsManager.kt
index 4c8f3dc..fe83c25 100644
--- a/app/src/main/java/com/example/hpostesting/presentation/NatsManager.kt
+++ b/app/src/main/java/com/example/hpostesting/presentation/NatsManager.kt
@@ -8,9 +8,18 @@ import io.nats.client.Message
import io.nats.client.NKey
import io.nats.client.Nats
import io.nats.client.Options
+import java.io.BufferedInputStream
+import java.io.FileInputStream
import java.io.IOException
import java.nio.charset.StandardCharsets
import java.security.GeneralSecurityException
+import java.security.KeyStore
+import java.security.SecureRandom
+import javax.net.ssl.KeyManager
+import javax.net.ssl.KeyManagerFactory
+import javax.net.ssl.SSLContext
+import javax.net.ssl.TrustManager
+import javax.net.ssl.TrustManagerFactory
class NatsManager(datacollector: DashboardActivity) {
@@ -20,6 +29,80 @@ class NatsManager(datacollector: DashboardActivity) {
val datacollector = datacollector
var connect = false
+ fun createSSLContext(): SSLContext {
+ val keyStorePassword = "password".toCharArray() // Change as necessary
+
+ // Load client certificate and key
+ val keyStore = KeyStore.getInstance("PKCS12")
+ FileInputStream("path/to/client-certificate.p12").use { keyStoreInputStream ->
+ keyStore.load(keyStoreInputStream, keyStorePassword)
+ }
+
+ // Initialize key manager factory
+ val keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm())
+ keyManagerFactory.init(keyStore, keyStorePassword)
+
+ // Load CA certificate
+ val trustStore = KeyStore.getInstance(KeyStore.getDefaultType())
+ FileInputStream("/storage/emulated/0/Android/data/in.sminnovations.hpostesting.quality/files/NATS/clientCertificate/client-cert.pem").use { trustStoreInputStream ->
+ trustStore.load(trustStoreInputStream, null) // No password for CA certificate
+ }
+
+ // Initialize trust manager factory
+ val trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm())
+ trustManagerFactory.init(trustStore)
+
+ // Initialize SSLContext
+ val sslContext = SSLContext.getInstance("TLS")
+ sslContext.init(keyManagerFactory.keyManagers, trustManagerFactory.trustManagers, SecureRandom())
+
+ return sslContext
+ }
+
+ internal object SSLUtils {
+ var KEYSTORE_PATH = "keystore.jks"
+ var TRUSTSTORE_PATH = "truststore.jks"
+ var STORE_PASSWORD = "password"
+ var KEY_PASSWORD = "password"
+ var ALGORITHM = "SunX509"
+ @Throws(java.lang.Exception::class)
+ fun loadKeystore(path: String?): KeyStore {
+ val store = KeyStore.getInstance("JKS")
+ val `in` = BufferedInputStream(FileInputStream(path))
+ try {
+ store.load(`in`, STORE_PASSWORD.toCharArray())
+ } finally {
+ if (`in` != null) {
+ `in`.close()
+ }
+ }
+ return store
+ }
+
+ @Throws(java.lang.Exception::class)
+ fun createTestKeyManagers(): Array {
+ val store = loadKeystore(KEYSTORE_PATH)
+ val factory = KeyManagerFactory.getInstance(ALGORITHM)
+ factory.init(store, KEY_PASSWORD.toCharArray())
+ return factory.keyManagers
+ }
+
+ @Throws(java.lang.Exception::class)
+ fun createTestTrustManagers(): Array {
+ val store = loadKeystore(TRUSTSTORE_PATH)
+ val factory = TrustManagerFactory.getInstance(ALGORITHM)
+ factory.init(store)
+ return factory.trustManagers
+ }
+
+ @Throws(java.lang.Exception::class)
+ fun createSSLContext(): SSLContext {
+ val ctx = SSLContext.getInstance(Options.DEFAULT_SSL_PROTOCOL)
+ ctx.init(createTestKeyManagers(), createTestTrustManagers(), SecureRandom())
+ return ctx
+ }
+ }
+
fun connect() {
Log.d(TAG, "TRY TO CONNECT")
Thread {