contracts, core, node: Use entropyToKeyPair in Generators instead of manually creating keys

This commit is contained in:
Andras Slemmer
2016-08-31 13:59:48 +01:00
parent f11a587382
commit 491b1abd4a
3 changed files with 13 additions and 19 deletions

View File

@ -7,6 +7,7 @@ import com.pholser.junit.quickcheck.random.SourceOfRandomness
import com.r3corda.contracts.asset.Cash import com.r3corda.contracts.asset.Cash
import com.r3corda.core.contracts.* import com.r3corda.core.contracts.*
import com.r3corda.core.crypto.DigitalSignature import com.r3corda.core.crypto.DigitalSignature
import com.r3corda.core.crypto.NullSignature
import com.r3corda.core.crypto.SecureHash import com.r3corda.core.crypto.SecureHash
import com.r3corda.core.testing.* import com.r3corda.core.testing.*
import java.util.* import java.util.*
@ -81,7 +82,7 @@ class SignedTransactionGenerator: Generator<SignedTransaction>(SignedTransaction
val wireTransaction = WiredTransactionGenerator().generate(random, status) val wireTransaction = WiredTransactionGenerator().generate(random, status)
return SignedTransaction( return SignedTransaction(
txBits = wireTransaction.serialized, txBits = wireTransaction.serialized,
sigs = wireTransaction.signers.map { DigitalSignature.WithKey(it, random.nextBytes(16)) } sigs = listOf(NullSignature)
) )
} }
} }

View File

@ -6,15 +6,10 @@ import com.pholser.junit.quickcheck.generator.java.lang.StringGenerator
import com.pholser.junit.quickcheck.generator.java.util.ArrayListGenerator import com.pholser.junit.quickcheck.generator.java.util.ArrayListGenerator
import com.pholser.junit.quickcheck.random.SourceOfRandomness import com.pholser.junit.quickcheck.random.SourceOfRandomness
import com.r3corda.core.contracts.* import com.r3corda.core.contracts.*
import com.r3corda.core.crypto.DigitalSignature import com.r3corda.core.crypto.*
import com.r3corda.core.crypto.Party
import com.r3corda.core.crypto.SecureHash
import com.r3corda.core.crypto.ed25519Curve
import com.r3corda.core.serialization.OpaqueBytes import com.r3corda.core.serialization.OpaqueBytes
import net.i2p.crypto.eddsa.EdDSAPrivateKey import java.security.PrivateKey
import net.i2p.crypto.eddsa.EdDSAPublicKey import java.security.PublicKey
import net.i2p.crypto.eddsa.spec.EdDSAPrivateKeySpec
import net.i2p.crypto.eddsa.spec.EdDSAPublicKeySpec
import java.time.Duration import java.time.Duration
import java.time.Instant import java.time.Instant
import java.util.* import java.util.*
@ -32,18 +27,15 @@ fun <A> Generator<A>.generateList(random: SourceOfRandomness, status: Generation
return arrayGenerator.generate(random, status) as List<A> return arrayGenerator.generate(random, status) as List<A>
} }
class PrivateKeyGenerator: Generator<EdDSAPrivateKey>(EdDSAPrivateKey::class.java) { class PrivateKeyGenerator: Generator<PrivateKey>(PrivateKey::class.java) {
override fun generate(random: SourceOfRandomness, status: GenerationStatus): EdDSAPrivateKey { override fun generate(random: SourceOfRandomness, status: GenerationStatus): PrivateKey {
val seed = random.nextBytes(32) return entropyToKeyPair(random.nextBigInteger(32)).private
val privateKeySpec = EdDSAPrivateKeySpec(seed, ed25519Curve)
return EdDSAPrivateKey(privateKeySpec)
} }
} }
class PublicKeyGenerator: Generator<EdDSAPublicKey>(EdDSAPublicKey::class.java) { class PublicKeyGenerator: Generator<PublicKey>(PublicKey::class.java) {
override fun generate(random: SourceOfRandomness, status: GenerationStatus): EdDSAPublicKey { override fun generate(random: SourceOfRandomness, status: GenerationStatus): PublicKey {
val privateKey = PrivateKeyGenerator().generate(random, status) return entropyToKeyPair(random.nextBigInteger(32)).public
return EdDSAPublicKey(EdDSAPublicKeySpec(privateKey.a, ed25519Curve))
} }
} }

View File

@ -5,6 +5,7 @@ import com.r3corda.core.testing.PublicKeyGenerator
import com.r3corda.node.utilities.JsonSupport import com.r3corda.node.utilities.JsonSupport
import net.i2p.crypto.eddsa.EdDSAPublicKey import net.i2p.crypto.eddsa.EdDSAPublicKey
import org.junit.runner.RunWith import org.junit.runner.RunWith
import java.security.PublicKey
import kotlin.test.assertEquals import kotlin.test.assertEquals
@RunWith(com.pholser.junit.quickcheck.runner.JUnitQuickcheck::class) @RunWith(com.pholser.junit.quickcheck.runner.JUnitQuickcheck::class)
@ -15,7 +16,7 @@ class JsonSupportTest {
} }
@com.pholser.junit.quickcheck.Property @com.pholser.junit.quickcheck.Property
fun publicKeySerializingWorks(@com.pholser.junit.quickcheck.From(PublicKeyGenerator::class) publicKey: EdDSAPublicKey) { fun publicKeySerializingWorks(@com.pholser.junit.quickcheck.From(PublicKeyGenerator::class) publicKey: PublicKey) {
val serialized = mapper.writeValueAsString(publicKey) val serialized = mapper.writeValueAsString(publicKey)
val parsedKey = mapper.readValue(serialized, EdDSAPublicKey::class.java) val parsedKey = mapper.readValue(serialized, EdDSAPublicKey::class.java)
assertEquals(publicKey, parsedKey) assertEquals(publicKey, parsedKey)