From 232da2ca746ff8e54a907f4c8b7a9cf15ee0a384 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Federico=20Gonz=C3=A1lez?= Date: Tue, 4 Jun 2024 21:22:34 -0300 Subject: [PATCH 1/6] Make `KeyUsage` serializable. --- jpos/src/main/java/org/jpos/security/KeyUsage.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/jpos/src/main/java/org/jpos/security/KeyUsage.java b/jpos/src/main/java/org/jpos/security/KeyUsage.java index 9ea5399661..628fcaf6f8 100644 --- a/jpos/src/main/java/org/jpos/security/KeyUsage.java +++ b/jpos/src/main/java/org/jpos/security/KeyUsage.java @@ -18,6 +18,7 @@ package org.jpos.security; +import java.io.Serializable; import java.util.Collections; import java.util.LinkedHashMap; import java.util.Map; @@ -29,7 +30,7 @@ *

* Each value repesents bytes 5-6 of the Keyblok Header. */ -public class KeyUsage { +public class KeyUsage implements Serializable { protected static final Map TR31MAP = new LinkedHashMap<>(); From bd6c0f32adb19c02298a95fdb129d83521d9dfd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Federico=20Gonz=C3=A1lez?= Date: Tue, 4 Jun 2024 21:23:17 -0300 Subject: [PATCH 2/6] Add test case to check that `SecureKeyBlock` is serializable. --- .../org/jpos/security/SecureKeyBlockTest.java | 33 ++++++++++++++++--- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/jpos/src/test/java/org/jpos/security/SecureKeyBlockTest.java b/jpos/src/test/java/org/jpos/security/SecureKeyBlockTest.java index 87a855d224..9a61bc2cc2 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.LinkedHashMap; import java.util.Map; + +import org.bouncycastle.util.Arrays; 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.lkajsdf + 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.areEqual(key.getKeyBytes(), key2.getKeyBytes())); + } } From c9752603416d0f2e0fdbfe473684058a01e33ad2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Federico=20Gonz=C3=A1lez?= Date: Tue, 4 Jun 2024 21:31:30 -0300 Subject: [PATCH 3/6] Fix typo. --- jpos/src/test/java/org/jpos/security/SecureKeyBlockTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jpos/src/test/java/org/jpos/security/SecureKeyBlockTest.java b/jpos/src/test/java/org/jpos/security/SecureKeyBlockTest.java index 9a61bc2cc2..a715e00778 100644 --- a/jpos/src/test/java/org/jpos/security/SecureKeyBlockTest.java +++ b/jpos/src/test/java/org/jpos/security/SecureKeyBlockTest.java @@ -235,7 +235,7 @@ public void testSerialization() throws IOException, ClassNotFoundException { String tr31 = "C0088P0TN00E000054CF02CF89CCC36897E3D4AC22D7BBECA1CBD08296A315A47228274A2FAE03EA699AF35F"; SecureKeyBlock key = SecureKeyBlockBuilder.newBuilder().build(tr31); key.dump(System.out, " "); - // Serialize instance.lkajsdf + // Serialize instance. Object obj = key; ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream os = new ObjectOutputStream(baos); From 5515fa08bc8e4a7af669cda8ee3a12e293851d0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Federico=20Gonz=C3=A1lez?= Date: Tue, 4 Jun 2024 21:34:27 -0300 Subject: [PATCH 4/6] Use native class to compare arrays. --- jpos/src/test/java/org/jpos/security/SecureKeyBlockTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jpos/src/test/java/org/jpos/security/SecureKeyBlockTest.java b/jpos/src/test/java/org/jpos/security/SecureKeyBlockTest.java index a715e00778..f01f77edb8 100644 --- a/jpos/src/test/java/org/jpos/security/SecureKeyBlockTest.java +++ b/jpos/src/test/java/org/jpos/security/SecureKeyBlockTest.java @@ -24,10 +24,10 @@ 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.bouncycastle.util.Arrays; import org.jpos.iso.ISOUtil; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -250,6 +250,6 @@ public void testSerialization() throws IOException, ClassNotFoundException { assertEquals(key.getModeOfUse(), key2.getModeOfUse()); assertEquals(key.getKeyUsage().getCode(), key2.getKeyUsage().getCode()); assertEquals(key.getAlgorithm().getCode(), key2.getAlgorithm().getCode()); - assertTrue(Arrays.areEqual(key.getKeyBytes(), key2.getKeyBytes())); + assertTrue(Arrays.equals(key.getKeyBytes(), key2.getKeyBytes())); } } From 7575c2378306b6c8b00f2c6aa1478503b517eec2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Federico=20Gonz=C3=A1lez?= Date: Tue, 4 Jun 2024 21:38:20 -0300 Subject: [PATCH 5/6] Fix typo in class description. --- jpos/src/main/java/org/jpos/security/KeyUsage.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jpos/src/main/java/org/jpos/security/KeyUsage.java b/jpos/src/main/java/org/jpos/security/KeyUsage.java index 628fcaf6f8..e7f4c8d37b 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 @@ -28,7 +28,7 @@ /** * 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 implements Serializable { From b7bf1a1e7c5c8efcf2ff132e14bff204d7ecd28e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Federico=20Gonz=C3=A1lez?= Date: Tue, 4 Jun 2024 22:56:56 -0300 Subject: [PATCH 6/6] `KeyUsage`: add `serialVersionUID`. --- jpos/src/main/java/org/jpos/security/KeyUsage.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/jpos/src/main/java/org/jpos/security/KeyUsage.java b/jpos/src/main/java/org/jpos/security/KeyUsage.java index e7f4c8d37b..aa915de193 100644 --- a/jpos/src/main/java/org/jpos/security/KeyUsage.java +++ b/jpos/src/main/java/org/jpos/security/KeyUsage.java @@ -32,6 +32,8 @@ */ public class KeyUsage implements Serializable { + private static final long serialVersionUID = -5504819939017756749L; + protected static final Map TR31MAP = new LinkedHashMap<>(); /**