Skip to content

Commit 950f6fd

Browse files
authored
FDP-3254: Removal of KeyProvider interface, otherwise you have to create the SingingUtil for every public and private key (#93)
1 parent 08f84ab commit 950f6fd

File tree

3 files changed

+16
-54
lines changed

3 files changed

+16
-54
lines changed

oslp-message-signing/src/main/kotlin/com/gxf/utilities/oslp/message/signing/KeyProvider.kt

Lines changed: 0 additions & 14 deletions
This file was deleted.

oslp-message-signing/src/main/kotlin/com/gxf/utilities/oslp/message/signing/SigningUtil.kt

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,27 +5,29 @@ package com.gxf.utilities.oslp.message.signing
55

66
import com.gxf.utilities.oslp.message.signing.configuration.SigningProperties
77
import io.github.oshai.kotlinlogging.KotlinLogging
8+
import java.security.PrivateKey
9+
import java.security.PublicKey
810
import java.security.SecureRandom
911
import java.security.Signature
1012

11-
open class SigningUtil(val signingConfiguration: SigningProperties, val keyProvider: KeyProvider) {
13+
open class SigningUtil(val signingConfiguration: SigningProperties) {
1214
private val logger = KotlinLogging.logger {}
1315

14-
fun createSignature(message: ByteArray): ByteArray {
16+
fun createSignature(message: ByteArray, privateKey: PrivateKey): ByteArray {
1517
logger.debug { "Creating signature for message of length: ${message.size}" }
1618
return Signature.getInstance(signingConfiguration.securityAlgorithm, signingConfiguration.securityProvider)
1719
.apply {
18-
initSign(keyProvider.getPrivateKey(), SecureRandom())
20+
initSign(privateKey, SecureRandom())
1921
update(message)
2022
}
2123
.sign()
2224
}
2325

24-
fun verifySignature(message: ByteArray, securityKey: ByteArray): Boolean {
26+
fun verifySignature(message: ByteArray, securityKey: ByteArray, publicKey: PublicKey): Boolean {
2527
logger.debug { "Verifying signature for message of length: ${message.size}" }
2628
val builder =
2729
Signature.getInstance(signingConfiguration.securityAlgorithm, signingConfiguration.securityProvider).apply {
28-
initVerify(keyProvider.getPublicKey())
30+
initVerify(publicKey)
2931
update(message)
3032
}
3133

oslp-message-signing/src/test/kotlin/com/gxf/utilities/oslp/message/signing/SigningUtilTest.kt

Lines changed: 9 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -6,64 +6,38 @@ package com.gxf.utilities.oslp.message.signing
66
import com.gxf.utilities.oslp.message.signing.configuration.SigningProperties
77
import java.security.KeyPair
88
import java.security.KeyPairGenerator
9-
import java.security.PrivateKey
10-
import java.security.PublicKey
119
import org.assertj.core.api.Assertions.assertThat
1210
import org.junit.jupiter.api.Test
1311

1412
class SigningUtilTest {
1513

14+
val signingProperties: SigningProperties =
15+
SigningProperties(securityProvider = "SunEC", securityAlgorithm = "SHA256withECDSA")
1616
val keyPairGenerator: KeyPairGenerator = KeyPairGenerator.getInstance("EC").apply { initialize(256) }
1717
val keyPair1: KeyPair = keyPairGenerator.generateKeyPair()
1818
val keyPair2: KeyPair = keyPairGenerator.generateKeyPair()
1919

20-
class TestKeyProvider(private val privateKey: PrivateKey, private val publicKey: PublicKey) : KeyProvider {
21-
override fun getPrivateKey() = privateKey
22-
23-
override fun getPublicKey() = publicKey
24-
}
25-
26-
val keyProvider1: TestKeyProvider = TestKeyProvider(privateKey = keyPair1.private, publicKey = keyPair1.public)
27-
28-
val keyProvider2: TestKeyProvider = TestKeyProvider(privateKey = keyPair2.private, publicKey = keyPair2.public)
29-
30-
private val signingUtil1: SigningUtil =
31-
SigningUtil(
32-
signingConfiguration = SigningProperties(securityProvider = "SunEC", securityAlgorithm = "SHA256withECDSA"),
33-
keyProvider = keyProvider1,
34-
)
35-
36-
private val signingUtil2: SigningUtil =
37-
SigningUtil(
38-
signingConfiguration = SigningProperties(securityProvider = "SunEC", securityAlgorithm = "SHA256withECDSA"),
39-
keyProvider = keyProvider2,
40-
)
41-
42-
private val signingUtil3: SigningUtil =
43-
SigningUtil(
44-
signingConfiguration = SigningProperties(securityProvider = "SunEC", securityAlgorithm = "SHA256withECDSA"),
45-
keyProvider = keyProvider1,
46-
)
20+
private val signingUtil: SigningUtil = SigningUtil(signingProperties)
4721

4822
@Test
4923
fun `should sign and verify message from different SigningUtils with same keys`() {
5024
val message = "test-message".toByteArray()
51-
val signature = signingUtil1.createSignature(message)
52-
assertThat(signingUtil3.verifySignature(message, signature)).isTrue()
25+
val signature = signingUtil.createSignature(message, keyPair1.private)
26+
assertThat(signingUtil.verifySignature(message, signature, keyPair1.public)).isTrue()
5327
}
5428

5529
@Test
5630
fun `should not verify tampered message`() {
5731
var message = "test-message".toByteArray()
58-
val signature = signingUtil1.createSignature(message)
32+
val signature = signingUtil.createSignature(message, keyPair1.private)
5933
message = "tampered-message".toByteArray()
60-
assertThat(signingUtil1.verifySignature(message, signature)).isFalse()
34+
assertThat(signingUtil.verifySignature(message, signature, keyPair1.public)).isFalse()
6135
}
6236

6337
@Test
6438
fun `should not verify tampered keys`() {
6539
val message = "test-message".toByteArray()
66-
val signature = signingUtil1.createSignature(message)
67-
assertThat(signingUtil2.verifySignature(message, signature)).isFalse()
40+
val signature = signingUtil.createSignature(message, keyPair1.private)
41+
assertThat(signingUtil.verifySignature(message, signature, keyPair2.public)).isFalse()
6842
}
6943
}

0 commit comments

Comments
 (0)