From 8e1355cf8b1dab96af720bb48608ac3b77caaeea Mon Sep 17 00:00:00 2001 From: Park JongHun Date: Sat, 11 Jan 2025 12:47:34 +0900 Subject: [PATCH] feat: add base code for crypto --- .../infrastructure/key/KeyPair.kt | 3 +++ .../infrastructure/key/PlatformBinaryData.kt | 3 +++ .../infrastructure/key/Cryptor.kt | 6 ++++++ .../infrastructure/key/DigitalSignature.kt | 8 ++++++++ .../infrastructure/key/KeyPair.kt | 4 ++++ .../infrastructure/key/KeyPairHandler.kt | 7 +++++++ .../infrastructure/key/PlatformBinaryData.kt | 4 ++++ .../infrastructure/key/KeyPair.kt | 8 ++++++++ .../infrastructure/key/PlatformBinaryData.kt | 3 +++ 9 files changed, 46 insertions(+) create mode 100644 lib/infrastructure/src/androidMain/kotlin/co/kr/parkjonghun/composemultiplatformtestairfield/infrastructure/key/KeyPair.kt create mode 100644 lib/infrastructure/src/androidMain/kotlin/co/kr/parkjonghun/composemultiplatformtestairfield/infrastructure/key/PlatformBinaryData.kt create mode 100644 lib/infrastructure/src/commonMain/kotlin/co/kr/parkjonghun/composemultiplatformtestairfield/infrastructure/key/Cryptor.kt create mode 100644 lib/infrastructure/src/commonMain/kotlin/co/kr/parkjonghun/composemultiplatformtestairfield/infrastructure/key/DigitalSignature.kt create mode 100644 lib/infrastructure/src/commonMain/kotlin/co/kr/parkjonghun/composemultiplatformtestairfield/infrastructure/key/KeyPair.kt create mode 100644 lib/infrastructure/src/commonMain/kotlin/co/kr/parkjonghun/composemultiplatformtestairfield/infrastructure/key/KeyPairHandler.kt create mode 100644 lib/infrastructure/src/commonMain/kotlin/co/kr/parkjonghun/composemultiplatformtestairfield/infrastructure/key/PlatformBinaryData.kt create mode 100644 lib/infrastructure/src/iosMain/kotlin/co/kr/parkjonghun/composemultiplatformtestairfield/infrastructure/key/KeyPair.kt create mode 100644 lib/infrastructure/src/iosMain/kotlin/co/kr/parkjonghun/composemultiplatformtestairfield/infrastructure/key/PlatformBinaryData.kt diff --git a/lib/infrastructure/src/androidMain/kotlin/co/kr/parkjonghun/composemultiplatformtestairfield/infrastructure/key/KeyPair.kt b/lib/infrastructure/src/androidMain/kotlin/co/kr/parkjonghun/composemultiplatformtestairfield/infrastructure/key/KeyPair.kt new file mode 100644 index 0000000..583a4f7 --- /dev/null +++ b/lib/infrastructure/src/androidMain/kotlin/co/kr/parkjonghun/composemultiplatformtestairfield/infrastructure/key/KeyPair.kt @@ -0,0 +1,3 @@ +package co.kr.parkjonghun.composemultiplatformtestairfield.infrastructure.key + +actual typealias KeyPair = java.security.KeyPair \ No newline at end of file diff --git a/lib/infrastructure/src/androidMain/kotlin/co/kr/parkjonghun/composemultiplatformtestairfield/infrastructure/key/PlatformBinaryData.kt b/lib/infrastructure/src/androidMain/kotlin/co/kr/parkjonghun/composemultiplatformtestairfield/infrastructure/key/PlatformBinaryData.kt new file mode 100644 index 0000000..89257de --- /dev/null +++ b/lib/infrastructure/src/androidMain/kotlin/co/kr/parkjonghun/composemultiplatformtestairfield/infrastructure/key/PlatformBinaryData.kt @@ -0,0 +1,3 @@ +package co.kr.parkjonghun.composemultiplatformtestairfield.infrastructure.key + +actual typealias PlatformBinaryData = kotlin.ByteArray \ No newline at end of file diff --git a/lib/infrastructure/src/commonMain/kotlin/co/kr/parkjonghun/composemultiplatformtestairfield/infrastructure/key/Cryptor.kt b/lib/infrastructure/src/commonMain/kotlin/co/kr/parkjonghun/composemultiplatformtestairfield/infrastructure/key/Cryptor.kt new file mode 100644 index 0000000..23295cf --- /dev/null +++ b/lib/infrastructure/src/commonMain/kotlin/co/kr/parkjonghun/composemultiplatformtestairfield/infrastructure/key/Cryptor.kt @@ -0,0 +1,6 @@ +package co.kr.parkjonghun.composemultiplatformtestairfield.infrastructure.key + +interface Cryptor { + fun encrypt() + fun decrypt() +} \ No newline at end of file diff --git a/lib/infrastructure/src/commonMain/kotlin/co/kr/parkjonghun/composemultiplatformtestairfield/infrastructure/key/DigitalSignature.kt b/lib/infrastructure/src/commonMain/kotlin/co/kr/parkjonghun/composemultiplatformtestairfield/infrastructure/key/DigitalSignature.kt new file mode 100644 index 0000000..3b61e2e --- /dev/null +++ b/lib/infrastructure/src/commonMain/kotlin/co/kr/parkjonghun/composemultiplatformtestairfield/infrastructure/key/DigitalSignature.kt @@ -0,0 +1,8 @@ +package co.kr.parkjonghun.composemultiplatformtestairfield.infrastructure.key + +interface DigitalSignature { + fun sign(alias: String, data: ByteArray): PlatformBinaryData + + // When receiving data, it is always received as something like Ktor, so this is sufficient as [ByteArray]. + fun verify(alias: String, data: ByteArray): Boolean +} \ No newline at end of file diff --git a/lib/infrastructure/src/commonMain/kotlin/co/kr/parkjonghun/composemultiplatformtestairfield/infrastructure/key/KeyPair.kt b/lib/infrastructure/src/commonMain/kotlin/co/kr/parkjonghun/composemultiplatformtestairfield/infrastructure/key/KeyPair.kt new file mode 100644 index 0000000..248b20f --- /dev/null +++ b/lib/infrastructure/src/commonMain/kotlin/co/kr/parkjonghun/composemultiplatformtestairfield/infrastructure/key/KeyPair.kt @@ -0,0 +1,4 @@ +package co.kr.parkjonghun.composemultiplatformtestairfield.infrastructure.key + +// TODO: Always catch up and migrate if it can be implemented only with Kotlin libraries. +expect class KeyPair \ No newline at end of file diff --git a/lib/infrastructure/src/commonMain/kotlin/co/kr/parkjonghun/composemultiplatformtestairfield/infrastructure/key/KeyPairHandler.kt b/lib/infrastructure/src/commonMain/kotlin/co/kr/parkjonghun/composemultiplatformtestairfield/infrastructure/key/KeyPairHandler.kt new file mode 100644 index 0000000..84d1c30 --- /dev/null +++ b/lib/infrastructure/src/commonMain/kotlin/co/kr/parkjonghun/composemultiplatformtestairfield/infrastructure/key/KeyPairHandler.kt @@ -0,0 +1,7 @@ +package co.kr.parkjonghun.composemultiplatformtestairfield.infrastructure.key + +interface KeyPairHandler { + fun generateKeyPair(alias: String): KeyPair + fun obtainKeyPair(alias: String): KeyPair? + fun deleteKeyPair(alias: String): Boolean +} \ No newline at end of file diff --git a/lib/infrastructure/src/commonMain/kotlin/co/kr/parkjonghun/composemultiplatformtestairfield/infrastructure/key/PlatformBinaryData.kt b/lib/infrastructure/src/commonMain/kotlin/co/kr/parkjonghun/composemultiplatformtestairfield/infrastructure/key/PlatformBinaryData.kt new file mode 100644 index 0000000..bc9183d --- /dev/null +++ b/lib/infrastructure/src/commonMain/kotlin/co/kr/parkjonghun/composemultiplatformtestairfield/infrastructure/key/PlatformBinaryData.kt @@ -0,0 +1,4 @@ +package co.kr.parkjonghun.composemultiplatformtestairfield.infrastructure.key + +// TODO: Always catch up and migrate if it can be implemented only with Kotlin libraries. +expect class PlatformBinaryData \ No newline at end of file diff --git a/lib/infrastructure/src/iosMain/kotlin/co/kr/parkjonghun/composemultiplatformtestairfield/infrastructure/key/KeyPair.kt b/lib/infrastructure/src/iosMain/kotlin/co/kr/parkjonghun/composemultiplatformtestairfield/infrastructure/key/KeyPair.kt new file mode 100644 index 0000000..1604a74 --- /dev/null +++ b/lib/infrastructure/src/iosMain/kotlin/co/kr/parkjonghun/composemultiplatformtestairfield/infrastructure/key/KeyPair.kt @@ -0,0 +1,8 @@ +package co.kr.parkjonghun.composemultiplatformtestairfield.infrastructure.key + +import kotlinx.cinterop.ExperimentalForeignApi + +actual typealias KeyPair = IosKeyPair + +@OptIn(ExperimentalForeignApi::class) +class IosKeyPair(val secKeyRef: platform.Security.SecKeyRef) \ No newline at end of file diff --git a/lib/infrastructure/src/iosMain/kotlin/co/kr/parkjonghun/composemultiplatformtestairfield/infrastructure/key/PlatformBinaryData.kt b/lib/infrastructure/src/iosMain/kotlin/co/kr/parkjonghun/composemultiplatformtestairfield/infrastructure/key/PlatformBinaryData.kt new file mode 100644 index 0000000..067c7db --- /dev/null +++ b/lib/infrastructure/src/iosMain/kotlin/co/kr/parkjonghun/composemultiplatformtestairfield/infrastructure/key/PlatformBinaryData.kt @@ -0,0 +1,3 @@ +package co.kr.parkjonghun.composemultiplatformtestairfield.infrastructure.key + +actual typealias PlatformBinaryData = platform.Foundation.NSData \ No newline at end of file