diff --git a/node-api/src/main/kotlin/net/corda/nodeapi/internal/serialization/AMQPSerializationScheme.kt b/node-api/src/main/kotlin/net/corda/nodeapi/internal/serialization/AMQPSerializationScheme.kt index bbc3be72a8..501840e3df 100644 --- a/node-api/src/main/kotlin/net/corda/nodeapi/internal/serialization/AMQPSerializationScheme.kt +++ b/node-api/src/main/kotlin/net/corda/nodeapi/internal/serialization/AMQPSerializationScheme.kt @@ -33,6 +33,7 @@ abstract class AbstractAMQPSerializationScheme : SerializationScheme { fun registerCustomSerializers(factory: SerializerFactory) { with(factory) { register(net.corda.nodeapi.internal.serialization.amqp.custom.PublicKeySerializer) + register(net.corda.nodeapi.internal.serialization.amqp.custom.PrivateKeySerializer) register(net.corda.nodeapi.internal.serialization.amqp.custom.ThrowableSerializer(this)) register(net.corda.nodeapi.internal.serialization.amqp.custom.X500NameSerializer) register(net.corda.nodeapi.internal.serialization.amqp.custom.BigDecimalSerializer) diff --git a/node-api/src/main/kotlin/net/corda/nodeapi/internal/serialization/amqp/custom/PrivateKeySerializer.kt b/node-api/src/main/kotlin/net/corda/nodeapi/internal/serialization/amqp/custom/PrivateKeySerializer.kt new file mode 100644 index 0000000000..f9a2d1817d --- /dev/null +++ b/node-api/src/main/kotlin/net/corda/nodeapi/internal/serialization/amqp/custom/PrivateKeySerializer.kt @@ -0,0 +1,27 @@ +package net.corda.nodeapi.internal.serialization.amqp.custom + +import net.corda.core.crypto.Crypto +import net.corda.core.serialization.SerializationContext.UseCase.* +import net.corda.nodeapi.internal.serialization.amqp.* +import net.corda.nodeapi.internal.serialization.checkUseCase +import org.apache.qpid.proton.codec.Data +import java.lang.reflect.Type +import java.security.PrivateKey +import java.util.* + +object PrivateKeySerializer : CustomSerializer.Implements<PrivateKey>(PrivateKey::class.java) { + + private val allowedUseCases = EnumSet.of(Storage, Checkpoint) + + override val schemaForDocumentation = Schema(listOf(RestrictedType(type.toString(), "", listOf(type.toString()), SerializerFactory.primitiveTypeName(ByteArray::class.java)!!, descriptor, emptyList()))) + + override fun writeDescribedObject(obj: PrivateKey, data: Data, type: Type, output: SerializationOutput) { + checkUseCase(allowedUseCases) + output.writeObject(obj.encoded, data, clazz) + } + + override fun readObject(obj: Any, schema: Schema, input: DeserializationInput): PrivateKey { + val bits = input.readObject(obj, schema, ByteArray::class.java) as ByteArray + return Crypto.decodePrivateKey(bits) + } +} \ No newline at end of file