mirror of
https://github.com/corda/corda.git
synced 2024-12-28 16:58:55 +00:00
Minor: use of ByteArray.inputStream() and introduced PublicKey.hash (#2931)
This commit is contained in:
parent
c8b58a601f
commit
1b37cef822
@ -42,6 +42,7 @@ import java.nio.file.attribute.FileAttribute
|
|||||||
import java.nio.file.attribute.FileTime
|
import java.nio.file.attribute.FileTime
|
||||||
import java.security.KeyPair
|
import java.security.KeyPair
|
||||||
import java.security.PrivateKey
|
import java.security.PrivateKey
|
||||||
|
import java.security.PublicKey
|
||||||
import java.security.cert.X509Certificate
|
import java.security.cert.X509Certificate
|
||||||
import java.time.Duration
|
import java.time.Duration
|
||||||
import java.time.temporal.Temporal
|
import java.time.temporal.Temporal
|
||||||
@ -230,7 +231,7 @@ fun <T> logElapsedTime(label: String, logger: Logger? = null, body: () -> T): T
|
|||||||
/** Convert a [ByteArrayOutputStream] to [InputStreamAndHash]. */
|
/** Convert a [ByteArrayOutputStream] to [InputStreamAndHash]. */
|
||||||
fun ByteArrayOutputStream.toInputStreamAndHash(): InputStreamAndHash {
|
fun ByteArrayOutputStream.toInputStreamAndHash(): InputStreamAndHash {
|
||||||
val bytes = toByteArray()
|
val bytes = toByteArray()
|
||||||
return InputStreamAndHash(ByteArrayInputStream(bytes), bytes.sha256())
|
return InputStreamAndHash(bytes.inputStream(), bytes.sha256())
|
||||||
}
|
}
|
||||||
|
|
||||||
data class InputStreamAndHash(val inputStream: InputStream, val sha256: SecureHash.SHA256) {
|
data class InputStreamAndHash(val inputStream: InputStream, val sha256: SecureHash.SHA256) {
|
||||||
@ -442,3 +443,5 @@ fun NotarisationRequest.generateSignature(serviceHub: ServiceHub): NotarisationR
|
|||||||
}
|
}
|
||||||
return NotarisationRequestSignature(signature, serviceHub.myInfo.platformVersion)
|
return NotarisationRequestSignature(signature, serviceHub.myInfo.platformVersion)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val PublicKey.hash: SecureHash get() = encoded.sha256()
|
||||||
|
@ -4,7 +4,7 @@ package net.corda.core.utilities
|
|||||||
|
|
||||||
import net.corda.core.crypto.Base58
|
import net.corda.core.crypto.Base58
|
||||||
import net.corda.core.crypto.Crypto
|
import net.corda.core.crypto.Crypto
|
||||||
import net.corda.core.crypto.sha256
|
import net.corda.core.internal.hash
|
||||||
import java.nio.charset.Charset
|
import java.nio.charset.Charset
|
||||||
import java.security.PublicKey
|
import java.security.PublicKey
|
||||||
import java.util.*
|
import java.util.*
|
||||||
@ -85,4 +85,4 @@ fun parsePublicKeyBase58(base58String: String): PublicKey = Crypto.decodePublicK
|
|||||||
fun PublicKey.toBase58String(): String = this.encoded.toBase58()
|
fun PublicKey.toBase58String(): String = this.encoded.toBase58()
|
||||||
|
|
||||||
/** Return the bytes of the SHA-256 output for this public key. */
|
/** Return the bytes of the SHA-256 output for this public key. */
|
||||||
fun PublicKey.toSHA256Bytes(): ByteArray = this.encoded.sha256().bytes
|
fun PublicKey.toSHA256Bytes(): ByteArray = this.hash.bytes
|
||||||
|
@ -20,7 +20,6 @@ import net.corda.testing.node.internal.startFlow
|
|||||||
import org.junit.After
|
import org.junit.After
|
||||||
import org.junit.Before
|
import org.junit.Before
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
import java.io.ByteArrayInputStream
|
|
||||||
import java.io.ByteArrayOutputStream
|
import java.io.ByteArrayOutputStream
|
||||||
import java.util.jar.JarOutputStream
|
import java.util.jar.JarOutputStream
|
||||||
import java.util.zip.ZipEntry
|
import java.util.zip.ZipEntry
|
||||||
@ -59,7 +58,7 @@ class AttachmentTests {
|
|||||||
bobNode.registerInitiatedFlow(FetchAttachmentsResponse::class.java)
|
bobNode.registerInitiatedFlow(FetchAttachmentsResponse::class.java)
|
||||||
// Insert an attachment into node zero's store directly.
|
// Insert an attachment into node zero's store directly.
|
||||||
val id = aliceNode.database.transaction {
|
val id = aliceNode.database.transaction {
|
||||||
aliceNode.attachments.importAttachment(ByteArrayInputStream(fakeAttachment()))
|
aliceNode.attachments.importAttachment(fakeAttachment().inputStream())
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get node one to run a flow to fetch it and insert it.
|
// Get node one to run a flow to fetch it and insert it.
|
||||||
@ -112,7 +111,7 @@ class AttachmentTests {
|
|||||||
val attachment = fakeAttachment()
|
val attachment = fakeAttachment()
|
||||||
// Insert an attachment into node zero's store directly.
|
// Insert an attachment into node zero's store directly.
|
||||||
val id = aliceNode.database.transaction {
|
val id = aliceNode.database.transaction {
|
||||||
aliceNode.attachments.importAttachment(ByteArrayInputStream(attachment))
|
aliceNode.attachments.importAttachment(attachment.inputStream())
|
||||||
}
|
}
|
||||||
|
|
||||||
// Corrupt its store.
|
// Corrupt its store.
|
||||||
|
@ -5,13 +5,10 @@ import com.esotericsoftware.kryo.Kryo
|
|||||||
import com.esotericsoftware.kryo.io.Output
|
import com.esotericsoftware.kryo.io.Output
|
||||||
import javassist.ClassPool
|
import javassist.ClassPool
|
||||||
import javassist.CtClass
|
import javassist.CtClass
|
||||||
import java.io.ByteArrayInputStream
|
|
||||||
import java.lang.StringBuilder
|
|
||||||
import java.lang.instrument.ClassFileTransformer
|
import java.lang.instrument.ClassFileTransformer
|
||||||
import java.lang.instrument.Instrumentation
|
import java.lang.instrument.Instrumentation
|
||||||
import java.security.ProtectionDomain
|
import java.security.ProtectionDomain
|
||||||
import java.util.concurrent.ConcurrentHashMap
|
import java.util.concurrent.ConcurrentHashMap
|
||||||
import java.util.concurrent.atomic.AtomicInteger
|
|
||||||
|
|
||||||
class KryoHookAgent {
|
class KryoHookAgent {
|
||||||
companion object {
|
companion object {
|
||||||
@ -69,7 +66,7 @@ object KryoHook : ClassFileTransformer {
|
|||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
return try {
|
return try {
|
||||||
val clazz = classPool.makeClass(ByteArrayInputStream(classfileBuffer))
|
val clazz = classPool.makeClass(classfileBuffer.inputStream())
|
||||||
instrumentClass(clazz)?.toBytecode()
|
instrumentClass(clazz)?.toBytecode()
|
||||||
} catch (throwable: Throwable) {
|
} catch (throwable: Throwable) {
|
||||||
println("SOMETHING WENT WRONG")
|
println("SOMETHING WENT WRONG")
|
||||||
|
@ -2,7 +2,6 @@ package net.corda.quasarhook
|
|||||||
|
|
||||||
import javassist.ClassPool
|
import javassist.ClassPool
|
||||||
import javassist.CtClass
|
import javassist.CtClass
|
||||||
import java.io.ByteArrayInputStream
|
|
||||||
import java.lang.instrument.ClassFileTransformer
|
import java.lang.instrument.ClassFileTransformer
|
||||||
import java.lang.instrument.Instrumentation
|
import java.lang.instrument.Instrumentation
|
||||||
import java.security.ProtectionDomain
|
import java.security.ProtectionDomain
|
||||||
@ -183,9 +182,9 @@ object QuasarInstrumentationHook : ClassFileTransformer {
|
|||||||
classfileBuffer: ByteArray
|
classfileBuffer: ByteArray
|
||||||
): ByteArray {
|
): ByteArray {
|
||||||
return try {
|
return try {
|
||||||
val instrument = instrumentMap.get(className)
|
val instrument = instrumentMap[className]
|
||||||
return instrument?.let {
|
return instrument?.let {
|
||||||
val clazz = classPool.makeClass(ByteArrayInputStream(classfileBuffer))
|
val clazz = classPool.makeClass(classfileBuffer.inputStream())
|
||||||
it(clazz)
|
it(clazz)
|
||||||
clazz.toBytecode()
|
clazz.toBytecode()
|
||||||
} ?: classfileBuffer
|
} ?: classfileBuffer
|
||||||
|
@ -5,7 +5,6 @@ import net.corda.core.contracts.ContractAttachment
|
|||||||
import net.corda.core.crypto.SecureHash
|
import net.corda.core.crypto.SecureHash
|
||||||
import net.corda.core.internal.isUploaderTrusted
|
import net.corda.core.internal.isUploaderTrusted
|
||||||
import net.corda.core.serialization.CordaSerializable
|
import net.corda.core.serialization.CordaSerializable
|
||||||
import java.io.ByteArrayInputStream
|
|
||||||
import java.io.ByteArrayOutputStream
|
import java.io.ByteArrayOutputStream
|
||||||
import java.io.FileNotFoundException
|
import java.io.FileNotFoundException
|
||||||
import java.io.InputStream
|
import java.io.InputStream
|
||||||
@ -101,12 +100,12 @@ class AttachmentsClassLoader(attachments: List<Attachment>, parent: ClassLoader
|
|||||||
if (url.protocol != "attachment") return null
|
if (url.protocol != "attachment") return null
|
||||||
val attachment = idsToAttachments[SecureHash.parse(url.host)] ?: return null
|
val attachment = idsToAttachments[SecureHash.parse(url.host)] ?: return null
|
||||||
val path = url.path?.substring(1) ?: return null // Chop off the leading slash.
|
val path = url.path?.substring(1) ?: return null // Chop off the leading slash.
|
||||||
try {
|
return try {
|
||||||
val stream = ByteArrayOutputStream()
|
val stream = ByteArrayOutputStream()
|
||||||
attachment.extractFile(path, stream)
|
attachment.extractFile(path, stream)
|
||||||
return ByteArrayInputStream(stream.toByteArray())
|
stream.toByteArray().inputStream()
|
||||||
} catch (e: FileNotFoundException) {
|
} catch (e: FileNotFoundException) {
|
||||||
return null
|
null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -36,6 +36,6 @@ object InputStreamSerializer : CustomSerializer.Implements<InputStream>(InputStr
|
|||||||
|
|
||||||
override fun readObject(obj: Any, schemas: SerializationSchemas, input: DeserializationInput): InputStream {
|
override fun readObject(obj: Any, schemas: SerializationSchemas, input: DeserializationInput): InputStream {
|
||||||
val bits = input.readObject(obj, schemas, ByteArray::class.java) as ByteArray
|
val bits = input.readObject(obj, schemas, ByteArray::class.java) as ByteArray
|
||||||
return ByteArrayInputStream(bits)
|
return bits.inputStream()
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -28,7 +28,6 @@ import net.corda.nodeapi.internal.serialization.serializationContextKey
|
|||||||
import org.slf4j.Logger
|
import org.slf4j.Logger
|
||||||
import org.slf4j.LoggerFactory
|
import org.slf4j.LoggerFactory
|
||||||
import rx.Observable
|
import rx.Observable
|
||||||
import java.io.ByteArrayInputStream
|
|
||||||
import java.io.InputStream
|
import java.io.InputStream
|
||||||
import java.lang.reflect.InvocationTargetException
|
import java.lang.reflect.InvocationTargetException
|
||||||
import java.security.PrivateKey
|
import java.security.PrivateKey
|
||||||
@ -208,7 +207,7 @@ object InputStreamSerializer : Serializer<InputStream>() {
|
|||||||
System.arraycopy(chunk, 0, flattened, offset, chunk.size)
|
System.arraycopy(chunk, 0, flattened, offset, chunk.size)
|
||||||
offset += chunk.size
|
offset += chunk.size
|
||||||
}
|
}
|
||||||
return ByteArrayInputStream(flattened)
|
return flattened.inputStream()
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -66,5 +66,5 @@ internal fun Output.substitute(transform: (OutputStream) -> OutputStream) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
internal fun Input.substitute(transform: (InputStream) -> InputStream) {
|
internal fun Input.substitute(transform: (InputStream) -> InputStream) {
|
||||||
inputStream = transform(SequenceInputStream(ByteArrayInputStream(buffer.copyOfRange(position(), limit())), inputStream))
|
inputStream = transform(SequenceInputStream(buffer.copyOfRange(position(), limit()).inputStream(), inputStream))
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,8 @@ package net.corda.nodeapi.internal
|
|||||||
|
|
||||||
import com.nhaarman.mockito_kotlin.doReturn
|
import com.nhaarman.mockito_kotlin.doReturn
|
||||||
import com.nhaarman.mockito_kotlin.whenever
|
import com.nhaarman.mockito_kotlin.whenever
|
||||||
import net.corda.core.contracts.*
|
import net.corda.core.contracts.Attachment
|
||||||
|
import net.corda.core.contracts.Contract
|
||||||
import net.corda.core.crypto.SecureHash
|
import net.corda.core.crypto.SecureHash
|
||||||
import net.corda.core.identity.CordaX500Name
|
import net.corda.core.identity.CordaX500Name
|
||||||
import net.corda.core.internal.declaredField
|
import net.corda.core.internal.declaredField
|
||||||
@ -22,9 +23,9 @@ import net.corda.testing.common.internal.testNetworkParameters
|
|||||||
import net.corda.testing.core.DUMMY_NOTARY_NAME
|
import net.corda.testing.core.DUMMY_NOTARY_NAME
|
||||||
import net.corda.testing.core.SerializationEnvironmentRule
|
import net.corda.testing.core.SerializationEnvironmentRule
|
||||||
import net.corda.testing.core.TestIdentity
|
import net.corda.testing.core.TestIdentity
|
||||||
|
import net.corda.testing.internal.MockCordappConfigProvider
|
||||||
import net.corda.testing.internal.kryoSpecific
|
import net.corda.testing.internal.kryoSpecific
|
||||||
import net.corda.testing.internal.rigorousMock
|
import net.corda.testing.internal.rigorousMock
|
||||||
import net.corda.testing.internal.MockCordappConfigProvider
|
|
||||||
import net.corda.testing.services.MockAttachmentStorage
|
import net.corda.testing.services.MockAttachmentStorage
|
||||||
import org.apache.commons.io.IOUtils
|
import org.apache.commons.io.IOUtils
|
||||||
import org.junit.Assert.*
|
import org.junit.Assert.*
|
||||||
@ -127,8 +128,8 @@ class AttachmentsClassLoaderTests {
|
|||||||
fun `test overlapping file exception`() {
|
fun `test overlapping file exception`() {
|
||||||
val storage = attachments
|
val storage = attachments
|
||||||
val att0 = attachmentId
|
val att0 = attachmentId
|
||||||
val att1 = storage.importAttachment(ByteArrayInputStream(fakeAttachment("file.txt", "some data")))
|
val att1 = storage.importAttachment(fakeAttachment("file.txt", "some data").inputStream())
|
||||||
val att2 = storage.importAttachment(ByteArrayInputStream(fakeAttachment("file.txt", "some other data")))
|
val att2 = storage.importAttachment(fakeAttachment("file.txt", "some other data").inputStream())
|
||||||
|
|
||||||
assertFailsWith(AttachmentsClassLoader.OverlappingAttachments::class) {
|
assertFailsWith(AttachmentsClassLoader.OverlappingAttachments::class) {
|
||||||
AttachmentsClassLoader(arrayOf(att0, att1, att2).map { storage.openAttachment(it)!! })
|
AttachmentsClassLoader(arrayOf(att0, att1, att2).map { storage.openAttachment(it)!! })
|
||||||
@ -139,8 +140,8 @@ class AttachmentsClassLoaderTests {
|
|||||||
fun `basic`() {
|
fun `basic`() {
|
||||||
val storage = attachments
|
val storage = attachments
|
||||||
val att0 = attachmentId
|
val att0 = attachmentId
|
||||||
val att1 = storage.importAttachment(ByteArrayInputStream(fakeAttachment("file1.txt", "some data")))
|
val att1 = storage.importAttachment(fakeAttachment("file1.txt", "some data").inputStream())
|
||||||
val att2 = storage.importAttachment(ByteArrayInputStream(fakeAttachment("file2.txt", "some other data")))
|
val att2 = storage.importAttachment(fakeAttachment("file2.txt", "some other data").inputStream())
|
||||||
|
|
||||||
val cl = AttachmentsClassLoader(arrayOf(att0, att1, att2).map { storage.openAttachment(it)!! })
|
val cl = AttachmentsClassLoader(arrayOf(att0, att1, att2).map { storage.openAttachment(it)!! })
|
||||||
val txt = IOUtils.toString(cl.getResourceAsStream("file1.txt"), Charsets.UTF_8.name())
|
val txt = IOUtils.toString(cl.getResourceAsStream("file1.txt"), Charsets.UTF_8.name())
|
||||||
@ -151,8 +152,8 @@ class AttachmentsClassLoaderTests {
|
|||||||
fun `Check platform independent path handling in attachment jars`() {
|
fun `Check platform independent path handling in attachment jars`() {
|
||||||
val storage = MockAttachmentStorage()
|
val storage = MockAttachmentStorage()
|
||||||
|
|
||||||
val att1 = storage.importAttachment(ByteArrayInputStream(fakeAttachment("/folder1/foldera/file1.txt", "some data")))
|
val att1 = storage.importAttachment(fakeAttachment("/folder1/foldera/file1.txt", "some data").inputStream())
|
||||||
val att2 = storage.importAttachment(ByteArrayInputStream(fakeAttachment("\\folder1\\folderb\\file2.txt", "some other data")))
|
val att2 = storage.importAttachment(fakeAttachment("\\folder1\\folderb\\file2.txt", "some other data").inputStream())
|
||||||
|
|
||||||
val data1a = readAttachment(storage.openAttachment(att1)!!, "/folder1/foldera/file1.txt")
|
val data1a = readAttachment(storage.openAttachment(att1)!!, "/folder1/foldera/file1.txt")
|
||||||
assertArrayEquals("some data".toByteArray(), data1a)
|
assertArrayEquals("some data".toByteArray(), data1a)
|
||||||
@ -171,8 +172,8 @@ class AttachmentsClassLoaderTests {
|
|||||||
fun `loading class AnotherDummyContract`() {
|
fun `loading class AnotherDummyContract`() {
|
||||||
val storage = attachments
|
val storage = attachments
|
||||||
val att0 = attachmentId
|
val att0 = attachmentId
|
||||||
val att1 = storage.importAttachment(ByteArrayInputStream(fakeAttachment("file1.txt", "some data")))
|
val att1 = storage.importAttachment(fakeAttachment("file1.txt", "some data").inputStream())
|
||||||
val att2 = storage.importAttachment(ByteArrayInputStream(fakeAttachment("file2.txt", "some other data")))
|
val att2 = storage.importAttachment(fakeAttachment("file2.txt", "some other data").inputStream())
|
||||||
|
|
||||||
val cl = AttachmentsClassLoader(arrayOf(att0, att1, att2).map { storage.openAttachment(it)!! }, FilteringClassLoader)
|
val cl = AttachmentsClassLoader(arrayOf(att0, att1, att2).map { storage.openAttachment(it)!! }, FilteringClassLoader)
|
||||||
val contractClass = Class.forName(ISOLATED_CONTRACT_CLASS_NAME, true, cl)
|
val contractClass = Class.forName(ISOLATED_CONTRACT_CLASS_NAME, true, cl)
|
||||||
@ -195,8 +196,8 @@ class AttachmentsClassLoaderTests {
|
|||||||
val bytes = contract.serialize()
|
val bytes = contract.serialize()
|
||||||
val storage = attachments
|
val storage = attachments
|
||||||
val att0 = attachmentId
|
val att0 = attachmentId
|
||||||
val att1 = storage.importAttachment(ByteArrayInputStream(fakeAttachment("file1.txt", "some data")))
|
val att1 = storage.importAttachment(fakeAttachment("file1.txt", "some data").inputStream())
|
||||||
val att2 = storage.importAttachment(ByteArrayInputStream(fakeAttachment("file2.txt", "some other data")))
|
val att2 = storage.importAttachment(fakeAttachment("file2.txt", "some other data").inputStream())
|
||||||
|
|
||||||
val cl = AttachmentsClassLoader(arrayOf(att0, att1, att2).map { storage.openAttachment(it)!! }, FilteringClassLoader)
|
val cl = AttachmentsClassLoader(arrayOf(att0, att1, att2).map { storage.openAttachment(it)!! }, FilteringClassLoader)
|
||||||
|
|
||||||
@ -221,8 +222,8 @@ class AttachmentsClassLoaderTests {
|
|||||||
val bytes = data.serialize(context = context2)
|
val bytes = data.serialize(context = context2)
|
||||||
val storage = attachments
|
val storage = attachments
|
||||||
val att0 = attachmentId
|
val att0 = attachmentId
|
||||||
val att1 = storage.importAttachment(ByteArrayInputStream(fakeAttachment("file1.txt", "some data")))
|
val att1 = storage.importAttachment(fakeAttachment("file1.txt", "some data").inputStream())
|
||||||
val att2 = storage.importAttachment(ByteArrayInputStream(fakeAttachment("file2.txt", "some other data")))
|
val att2 = storage.importAttachment(fakeAttachment("file2.txt", "some other data").inputStream())
|
||||||
|
|
||||||
val cl = AttachmentsClassLoader(arrayOf(att0, att1, att2).map { storage.openAttachment(it)!! }, FilteringClassLoader)
|
val cl = AttachmentsClassLoader(arrayOf(att0, att1, att2).map { storage.openAttachment(it)!! }, FilteringClassLoader)
|
||||||
|
|
||||||
|
@ -43,7 +43,6 @@ import org.junit.Test
|
|||||||
import org.junit.runner.RunWith
|
import org.junit.runner.RunWith
|
||||||
import org.junit.runners.Parameterized
|
import org.junit.runners.Parameterized
|
||||||
import org.junit.runners.Parameterized.Parameters
|
import org.junit.runners.Parameterized.Parameters
|
||||||
import java.io.ByteArrayInputStream
|
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
import java.io.NotSerializableException
|
import java.io.NotSerializableException
|
||||||
import java.math.BigDecimal
|
import java.math.BigDecimal
|
||||||
@ -1083,9 +1082,9 @@ class SerializationOutputTests(private val compression: CordaSerializationEncodi
|
|||||||
val factory2 = SerializerFactory(AllWhitelist, ClassLoader.getSystemClassLoader())
|
val factory2 = SerializerFactory(AllWhitelist, ClassLoader.getSystemClassLoader())
|
||||||
factory2.register(net.corda.nodeapi.internal.serialization.amqp.custom.InputStreamSerializer)
|
factory2.register(net.corda.nodeapi.internal.serialization.amqp.custom.InputStreamSerializer)
|
||||||
val bytes = ByteArray(10) { it.toByte() }
|
val bytes = ByteArray(10) { it.toByte() }
|
||||||
val obj = ByteArrayInputStream(bytes)
|
val obj = bytes.inputStream()
|
||||||
val obj2 = serdes(obj, factory, factory2, expectedEqual = false, expectDeserializedEqual = false)
|
val obj2 = serdes(obj, factory, factory2, expectedEqual = false, expectDeserializedEqual = false)
|
||||||
val obj3 = ByteArrayInputStream(bytes) // Can't use original since the stream pointer has moved.
|
val obj3 = bytes.inputStream() // Can't use original since the stream pointer has moved.
|
||||||
assertEquals(obj3.available(), obj2.available())
|
assertEquals(obj3.available(), obj2.available())
|
||||||
assertEquals(obj3.read(), obj2.read())
|
assertEquals(obj3.read(), obj2.read())
|
||||||
}
|
}
|
||||||
|
@ -29,7 +29,6 @@ import org.junit.runner.RunWith
|
|||||||
import org.junit.runners.Parameterized
|
import org.junit.runners.Parameterized
|
||||||
import org.junit.runners.Parameterized.Parameters
|
import org.junit.runners.Parameterized.Parameters
|
||||||
import org.slf4j.LoggerFactory
|
import org.slf4j.LoggerFactory
|
||||||
import java.io.ByteArrayInputStream
|
|
||||||
import java.io.InputStream
|
import java.io.InputStream
|
||||||
import java.time.Instant
|
import java.time.Instant
|
||||||
import java.util.*
|
import java.util.*
|
||||||
@ -190,7 +189,11 @@ class KryoTests(private val compression: CordaSerializationEncoding?) {
|
|||||||
@Test
|
@Test
|
||||||
fun `HashCheckingStream (de)serialize`() {
|
fun `HashCheckingStream (de)serialize`() {
|
||||||
val rubbish = ByteArray(12345, { (it * it * 0.12345).toByte() })
|
val rubbish = ByteArray(12345, { (it * it * 0.12345).toByte() })
|
||||||
val readRubbishStream: InputStream = NodeAttachmentService.HashCheckingStream(SecureHash.sha256(rubbish), rubbish.size, ByteArrayInputStream(rubbish)).serialize(factory, context).deserialize(factory, context)
|
val readRubbishStream: InputStream = NodeAttachmentService.HashCheckingStream(
|
||||||
|
SecureHash.sha256(rubbish),
|
||||||
|
rubbish.size,
|
||||||
|
rubbish.inputStream()
|
||||||
|
).serialize(factory, context).deserialize(factory, context)
|
||||||
for (i in 0..12344) {
|
for (i in 0..12344) {
|
||||||
assertEquals(rubbish[i], readRubbishStream.read().toByte())
|
assertEquals(rubbish[i], readRubbishStream.read().toByte())
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,7 @@ import net.corda.core.crypto.SecureHash
|
|||||||
import net.corda.core.crypto.toStringShort
|
import net.corda.core.crypto.toStringShort
|
||||||
import net.corda.core.identity.*
|
import net.corda.core.identity.*
|
||||||
import net.corda.core.internal.CertRole
|
import net.corda.core.internal.CertRole
|
||||||
|
import net.corda.core.internal.hash
|
||||||
import net.corda.core.node.services.UnknownAnonymousPartyException
|
import net.corda.core.node.services.UnknownAnonymousPartyException
|
||||||
import net.corda.core.serialization.SingletonSerializeAsToken
|
import net.corda.core.serialization.SingletonSerializeAsToken
|
||||||
import net.corda.core.utilities.MAX_HASH_HEX_SIZE
|
import net.corda.core.utilities.MAX_HASH_HEX_SIZE
|
||||||
@ -62,7 +63,7 @@ class PersistentIdentityService(override val trustRoot: X509Certificate,
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun mapToKey(owningKey: PublicKey) = SecureHash.sha256(owningKey.encoded)
|
private fun mapToKey(owningKey: PublicKey) = owningKey.hash
|
||||||
private fun mapToKey(party: PartyAndCertificate) = mapToKey(party.owningKey)
|
private fun mapToKey(party: PartyAndCertificate) = mapToKey(party.owningKey)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,24 +35,26 @@ import net.corda.finance.contracts.asset.Cash
|
|||||||
import net.corda.finance.flows.TwoPartyTradeFlow.Buyer
|
import net.corda.finance.flows.TwoPartyTradeFlow.Buyer
|
||||||
import net.corda.finance.flows.TwoPartyTradeFlow.Seller
|
import net.corda.finance.flows.TwoPartyTradeFlow.Seller
|
||||||
import net.corda.node.internal.StartedNode
|
import net.corda.node.internal.StartedNode
|
||||||
import net.corda.node.services.api.WritableTransactionStorage
|
|
||||||
import net.corda.node.services.api.IdentityServiceInternal
|
import net.corda.node.services.api.IdentityServiceInternal
|
||||||
|
import net.corda.node.services.api.WritableTransactionStorage
|
||||||
import net.corda.node.services.persistence.DBTransactionStorage
|
import net.corda.node.services.persistence.DBTransactionStorage
|
||||||
import net.corda.node.services.persistence.checkpoints
|
import net.corda.node.services.persistence.checkpoints
|
||||||
import net.corda.nodeapi.internal.persistence.CordaPersistence
|
import net.corda.nodeapi.internal.persistence.CordaPersistence
|
||||||
import net.corda.testing.core.*
|
import net.corda.testing.core.*
|
||||||
import net.corda.testing.internal.LogHelper
|
|
||||||
import net.corda.testing.dsl.LedgerDSL
|
import net.corda.testing.dsl.LedgerDSL
|
||||||
import net.corda.testing.dsl.TestLedgerDSLInterpreter
|
import net.corda.testing.dsl.TestLedgerDSLInterpreter
|
||||||
import net.corda.testing.dsl.TestTransactionDSLInterpreter
|
import net.corda.testing.dsl.TestTransactionDSLInterpreter
|
||||||
|
import net.corda.testing.internal.LogHelper
|
||||||
import net.corda.testing.internal.TEST_TX_TIME
|
import net.corda.testing.internal.TEST_TX_TIME
|
||||||
import net.corda.testing.internal.rigorousMock
|
import net.corda.testing.internal.rigorousMock
|
||||||
import net.corda.testing.internal.vault.VaultFiller
|
import net.corda.testing.internal.vault.VaultFiller
|
||||||
import net.corda.testing.node.*
|
import net.corda.testing.node.InMemoryMessagingNetwork
|
||||||
|
import net.corda.testing.node.MockServices
|
||||||
import net.corda.testing.node.internal.InternalMockNetwork
|
import net.corda.testing.node.internal.InternalMockNetwork
|
||||||
import net.corda.testing.node.internal.InternalMockNodeParameters
|
import net.corda.testing.node.internal.InternalMockNodeParameters
|
||||||
import net.corda.testing.node.internal.pumpReceive
|
import net.corda.testing.node.internal.pumpReceive
|
||||||
import net.corda.testing.node.internal.startFlow
|
import net.corda.testing.node.internal.startFlow
|
||||||
|
import net.corda.testing.node.ledger
|
||||||
import org.assertj.core.api.Assertions.assertThat
|
import org.assertj.core.api.Assertions.assertThat
|
||||||
import org.junit.After
|
import org.junit.After
|
||||||
import org.junit.Before
|
import org.junit.Before
|
||||||
@ -60,7 +62,6 @@ import org.junit.Test
|
|||||||
import org.junit.runner.RunWith
|
import org.junit.runner.RunWith
|
||||||
import org.junit.runners.Parameterized
|
import org.junit.runners.Parameterized
|
||||||
import rx.Observable
|
import rx.Observable
|
||||||
import java.io.ByteArrayInputStream
|
|
||||||
import java.io.ByteArrayOutputStream
|
import java.io.ByteArrayOutputStream
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import java.util.jar.JarOutputStream
|
import java.util.jar.JarOutputStream
|
||||||
@ -347,7 +348,7 @@ class TwoPartyTradeFlowTests(private val anonymous: Boolean) {
|
|||||||
it.closeEntry()
|
it.closeEntry()
|
||||||
}
|
}
|
||||||
val attachmentID = aliceNode.database.transaction {
|
val attachmentID = aliceNode.database.transaction {
|
||||||
attachment(ByteArrayInputStream(stream.toByteArray()))
|
attachment(stream.toByteArray().inputStream())
|
||||||
}
|
}
|
||||||
|
|
||||||
val bobsFakeCash = bobNode.database.transaction {
|
val bobsFakeCash = bobNode.database.transaction {
|
||||||
@ -451,7 +452,7 @@ class TwoPartyTradeFlowTests(private val anonymous: Boolean) {
|
|||||||
it.closeEntry()
|
it.closeEntry()
|
||||||
}
|
}
|
||||||
val attachmentID = aliceNode.database.transaction {
|
val attachmentID = aliceNode.database.transaction {
|
||||||
attachment(ByteArrayInputStream(stream.toByteArray()))
|
attachment(stream.toByteArray().inputStream())
|
||||||
}
|
}
|
||||||
|
|
||||||
val bobsKey = bobNode.services.keyManagementService.keys.single()
|
val bobsKey = bobNode.services.keyManagementService.keys.single()
|
||||||
|
Loading…
Reference in New Issue
Block a user