Skip to content

Commit 7f4b681

Browse files
committed
Seal/unseal mechanisms, Authorization
1 parent d9cbf7c commit 7f4b681

File tree

114 files changed

+1857
-402
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

114 files changed

+1857
-402
lines changed

build.gradle

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
plugins {
2-
id 'org.jetbrains.kotlin.jvm' version "2.0.21"
3-
id "org.jetbrains.kotlin.plugin.allopen" version "2.0.21"
2+
id 'org.jetbrains.kotlin.jvm' version "2.1.20"
3+
id "org.jetbrains.kotlin.plugin.allopen" version "2.1.20"
44
id 'io.quarkus'
55
}
66

@@ -31,23 +31,30 @@ dependencies {
3131
implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8'
3232
implementation 'io.quarkus:quarkus-arc'
3333
implementation 'org.mapdb:mapdb:3.1.0'
34+
implementation 'com.github.ben-manes.caffeine:caffeine:3.2.0'
3435

3536
implementation 'io.projectreactor:reactor-core:3.7.5'
3637
implementation 'io.smallrye.reactive:mutiny-reactor:2.8.0'
3738

3839
implementation 'com.fasterxml.jackson.module:jackson-module-kotlin:2.18.3'
3940

40-
implementation 'org.exploit.threshield:gg20:0.0.5'
41-
implementation 'org.exploit.threshield:frost:0.0.5'
42-
implementation 'org.exploit.threshield:ed25519:0.0.5'
43-
implementation 'org.exploit.threshield:core:0.0.5'
41+
implementation 'org.exploit.threshield:gg20:0.0.6'
42+
implementation 'org.exploit.threshield:frost:0.0.6'
43+
implementation 'org.exploit.threshield:ed25519:0.0.6'
44+
implementation 'org.exploit.threshield:core:0.0.6'
45+
46+
implementation 'com.nimbusds:nimbus-jose-jwt:10.2'
4447

4548
implementation 'org.exploit:jettyx:0.1.6'
4649
implementation 'org.exploit:jettyx-jackson:0.1.6'
4750
implementation 'org.exploit:jettyx-http2:0.1.6'
4851

4952
implementation 'org.exploit:signalix:0.1.3'
5053

54+
implementation 'software.amazon.awssdk:kms:2.31.33'
55+
implementation 'com.google.cloud:google-cloud-kms:2.63.0'
56+
implementation 'com.oracle.oci.sdk:oci-java-sdk-keymanagement:3.63.3'
57+
5158
testImplementation 'io.quarkus:quarkus-junit5'
5259
}
5360

gradle.properties

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
# Gradle properties
44
quarkusPluginId=io.quarkus
5-
quarkusPluginVersion=3.21.3
5+
quarkusPluginVersion=3.22.2
66
quarkusPlatformGroupId=io.quarkus.platform
77
quarkusPlatformArtifactId=quarkus-bom
8-
quarkusPlatformVersion=3.21.3
8+
quarkusPlatformVersion=3.22.2
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package org.exploit.keeper.adapter
2+
3+
import jakarta.enterprise.inject.Produces
4+
import jakarta.inject.Singleton
5+
import org.exploit.keeper.service.auth.NoOpMachineAuthenticator
6+
import org.exploit.keeper.service.auth.RequestAuthenticator
7+
import org.exploit.keeper.service.auth.factory.MachineAuthenticatorFactory
8+
import org.slf4j.Logger
9+
import org.slf4j.LoggerFactory
10+
11+
@Singleton
12+
class AuthAdapter(private val factory: MachineAuthenticatorFactory) {
13+
@Produces
14+
@Singleton
15+
fun authenticator(): RequestAuthenticator =
16+
factory.createAuthenticator().also {
17+
if (it is NoOpMachineAuthenticator) {
18+
LOGGER.warn("Authorization is not configured. Endpoints will be accessible without authentication.")
19+
}
20+
}
21+
22+
private companion object {
23+
val LOGGER: Logger = LoggerFactory.getLogger(AuthAdapter::class.java)
24+
}
25+
}

src/main/kotlin/org/exploit/keeper/adapter/JettyxAdapter.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ class JettyxAdapter(
3030
.executor(Executors.newWorkStealingPool(config.parallelism()))
3131
.build()
3232

33-
3433
@Produces
3534
@Singleton
3635
fun authenticator(): KeeperAuthenticator {

src/main/kotlin/org/exploit/keeper/adapter/LMKDBAdapter.kt

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,18 @@ import jakarta.enterprise.inject.Produces
55
import jakarta.inject.Singleton
66
import org.exploit.keeper.config.KeeperConfig
77
import org.exploit.keeper.db.LMKDB
8+
import org.exploit.keeper.service.seal.provider.SealProvider
89

910
@Startup
1011
@Singleton
11-
class LMKDBAdapter(private val config: KeeperConfig) {
12-
12+
class LMKDBAdapter(
13+
private val config: KeeperConfig,
14+
private val provider: SealProvider
15+
) {
1316
@Produces
1417
@Singleton
1518
@Startup
1619
fun lmkdb(): LMKDB {
17-
val password = System.console().readPassword("Enter master-password: ")
18-
return LMKDB(config.databasePath(), password)
20+
return LMKDB(config.databasePath()) { provider.keyOpsOrThrow() }
1921
}
2022
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package org.exploit.keeper.adapter
2+
3+
import jakarta.enterprise.inject.Produces
4+
import jakarta.inject.Singleton
5+
import org.exploit.keeper.service.seal.provider.SealProvider
6+
import org.exploit.keeper.service.seal.provider.factory.SealProviderFactory
7+
8+
@Singleton
9+
class SealAdapter(private val factory: SealProviderFactory) {
10+
@Produces
11+
@Singleton
12+
fun sealProvider(): SealProvider =
13+
factory.createProvider()
14+
}

src/main/kotlin/org/exploit/keeper/api/FrostApi.kt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,8 @@ import org.exploit.jettyx.annotation.Body
55
import org.exploit.jettyx.annotation.HttpRequest
66
import org.exploit.jettyx.annotation.Query
77
import org.exploit.keeper.model.common.InitSession
8-
import org.exploit.keeper.model.common.Value
9-
import org.exploit.keeper.model.frost.FrostCommitmentDto
10-
import java.math.BigInteger
8+
import org.exploit.keeper.model.frost.ComputedZ
9+
import org.exploit.keeper.model.frost.FrostOperationCommitment
1110
import java.util.concurrent.CompletableFuture
1211

1312
interface FrostApi {
@@ -17,7 +16,7 @@ interface FrostApi {
1716
@HttpRequest(method = HttpMethod.POST, path = "/v1/frost/commitment")
1817
fun storeCommitment(
1918
@Query("sessionId") sessionId: String,
20-
@Body body: FrostCommitmentDto
19+
@Body body: FrostOperationCommitment
2120
): CompletableFuture<Void>
2221

2322
@HttpRequest(method = HttpMethod.POST, path = "/v1/frost/commitment/broadcast")
@@ -28,7 +27,7 @@ interface FrostApi {
2827
@HttpRequest(method = HttpMethod.GET, path = "/v1/frost/signature/z")
2928
fun computeZ(
3029
@Query("sessionId") sessionId: String
31-
): CompletableFuture<Value<BigInteger>>
30+
): CompletableFuture<ComputedZ>
3231

3332
@HttpRequest(method = HttpMethod.GET, path = "/v1/frost/abort")
3433
fun abort(
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package org.exploit.keeper.component.exception
2+
3+
import jakarta.ws.rs.core.Response
4+
import jakarta.ws.rs.ext.ExceptionMapper
5+
import jakarta.ws.rs.ext.Provider
6+
import org.exploit.keeper.exception.BitKeeperException
7+
import org.exploit.keeper.model.ErrorMessage
8+
9+
@Provider
10+
class BitKeeperExceptionMapper: ExceptionMapper<BitKeeperException> {
11+
override fun toResponse(p0: BitKeeperException): Response? {
12+
return Response.status(p0.code)
13+
.entity(ErrorMessage(p0.message ?: "Unknown error"))
14+
.build()
15+
}
16+
}

src/main/kotlin/org/exploit/keeper/component/listener/SessionListener.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ import org.exploit.keeper.extension.toMono
88
import org.exploit.keeper.model.event.SessionCleanEvent
99
import org.exploit.keeper.model.event.SessionFailedEvent
1010
import org.exploit.keeper.service.client.BitKeeperClients
11-
import org.exploit.keeper.service.frost.FrostSessionFactory
12-
import org.exploit.keeper.service.gg20.GG20SessionFactory
11+
import org.exploit.keeper.service.signature.frost.FrostSessionFactory
12+
import org.exploit.keeper.service.signature.gg20.GG20SessionFactory
1313
import org.exploit.signalix.annotations.EventHandler
1414
import org.exploit.signalix.manager.EventScope
1515
import org.exploit.signalix.marker.Listener
@@ -49,7 +49,7 @@ class SessionListener(
4949

5050
private fun collectParticipants(sessionId: String, type: SessionType): List<Int> =
5151
when (type) {
52-
SessionType.GG20 -> gg20.session(sessionId).context().crypto().participants()
52+
SessionType.GG20 -> gg20.session(sessionId).client.context().crypto().participants()
5353
SessionType.FROST -> frost.session(sessionId).client.context().crypto().participants()
5454
}
5555

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package org.exploit.keeper.config
2+
3+
import io.smallrye.config.ConfigMapping
4+
import io.smallrye.config.WithDefault
5+
import org.exploit.keeper.config.auth.JwtAuthConfig
6+
import java.util.*
7+
8+
@ConfigMapping(prefix = "keeper.auth")
9+
interface AuthConfig {
10+
fun type(): String
11+
12+
@WithDefault("false")
13+
fun allowAnonymous(): Boolean
14+
15+
fun jwt(): Optional<JwtAuthConfig>
16+
}

0 commit comments

Comments
 (0)