diff --git a/jpos/src/main/java/org/jpos/security/KeyUsage.java b/jpos/src/main/java/org/jpos/security/KeyUsage.java index 9ea5399661..aa915de193 100644 --- a/jpos/src/main/java/org/jpos/security/KeyUsage.java +++ b/jpos/src/main/java/org/jpos/security/KeyUsage.java @@ -1,6 +1,6 @@ /* * jPOS Project [http://jpos.org] - * Copyright (C) 2000-2023 jPOS Software SRL + * Copyright (C) 2000-2024 jPOS Software SRL * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -18,6 +18,7 @@ package org.jpos.security; +import java.io.Serializable; import java.util.Collections; import java.util.LinkedHashMap; import java.util.Map; @@ -27,9 +28,11 @@ /** * Defines the primary usage of the key contained in the key block. *

- * Each value repesents bytes 5-6 of the Keyblok Header. + * Each value repesents bytes 5-6 of the keyblock header. */ -public class KeyUsage { +public class KeyUsage implements Serializable { + + private static final long serialVersionUID = -5504819939017756749L; protected static final Map TR31MAP = new LinkedHashMap<>(); diff --git a/jpos/src/test/java/org/jpos/security/SecureKeyBlockTest.java b/jpos/src/test/java/org/jpos/security/SecureKeyBlockTest.java index 87a855d224..f01f77edb8 100644 --- a/jpos/src/test/java/org/jpos/security/SecureKeyBlockTest.java +++ b/jpos/src/test/java/org/jpos/security/SecureKeyBlockTest.java @@ -1,6 +1,6 @@ /* * jPOS Project [http://jpos.org] - * Copyright (C) 2000-2023 jPOS Software SRL + * Copyright (C) 2000-2024 jPOS Software SRL * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -18,10 +18,16 @@ package org.jpos.security; +import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; import java.io.PrintStream; +import java.util.Arrays; import java.util.LinkedHashMap; import java.util.Map; + import org.jpos.iso.ISOUtil; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -29,9 +35,6 @@ import static org.junit.jupiter.api.Assertions.*; -/** - * - */ public class SecureKeyBlockTest { private static final String NL = System.getProperty("line.separator"); @@ -227,4 +230,26 @@ public void testDumpWithNameAndOptHeader() { assertEquals(sb.toString(), os.toString()); } + @Test + public void testSerialization() throws IOException, ClassNotFoundException { + String tr31 = "C0088P0TN00E000054CF02CF89CCC36897E3D4AC22D7BBECA1CBD08296A315A47228274A2FAE03EA699AF35F"; + SecureKeyBlock key = SecureKeyBlockBuilder.newBuilder().build(tr31); + key.dump(System.out, " "); + // Serialize instance. + Object obj = key; + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ObjectOutputStream os = new ObjectOutputStream(baos); + os.writeObject(obj); // This call errors out if 'obj' is not serializable. + byte[] img = baos.toByteArray(); + // Deserialize. + ByteArrayInputStream bais = new ByteArrayInputStream(img); + ObjectInputStream is = new ObjectInputStream(bais); + SecureKeyBlock key2 = (SecureKeyBlock) is.readObject(); + key2.dump(System.out, " "); + assertEquals(key.getKeyName(), key2.getKeyName()); + assertEquals(key.getModeOfUse(), key2.getModeOfUse()); + assertEquals(key.getKeyUsage().getCode(), key2.getKeyUsage().getCode()); + assertEquals(key.getAlgorithm().getCode(), key2.getAlgorithm().getCode()); + assertTrue(Arrays.equals(key.getKeyBytes(), key2.getKeyBytes())); + } }