Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions src/test/java/ibm/jceplus/junit/TestMultithread.java
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,6 @@ public class TestMultithread {
"ibm.jceplus.junit.openjceplus.multithread.TestSHA256Clone_SharedMD",
"ibm.jceplus.junit.openjceplus.multithread.TestSHA3_224",
"ibm.jceplus.junit.openjceplus.multithread.TestSHA3_256",
"ibm.jceplus.junit.openjceplus.multithread.TestSHA3_384",
"ibm.jceplus.junit.openjceplus.multithread.TestSHA3_512",
"ibm.jceplus.junit.openjceplus.multithread.TestSHA512",
"ibm.jceplus.junit.openjceplus.multithread.TestSHA512_224",
"ibm.jceplus.junit.openjceplus.multithread.TestSHA512_256",
Expand Down
2 changes: 0 additions & 2 deletions src/test/java/ibm/jceplus/junit/TestMultithreadFIPS.java
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,6 @@ public class TestMultithreadFIPS {
"ibm.jceplus.junit.openjceplusfips.multithread.TestSHA256Clone_SharedMD",
"ibm.jceplus.junit.openjceplusfips.multithread.TestSHA3_224",
"ibm.jceplus.junit.openjceplusfips.multithread.TestSHA3_256",
"ibm.jceplus.junit.openjceplusfips.multithread.TestSHA3_384",
"ibm.jceplus.junit.openjceplusfips.multithread.TestSHA3_512",
"ibm.jceplus.junit.openjceplusfips.multithread.TestSHA512",
"ibm.jceplus.junit.openjceplusfips.multithread.TestSHA512_224",
"ibm.jceplus.junit.openjceplusfips.multithread.TestSHA512_256",
Expand Down
2 changes: 0 additions & 2 deletions src/test/java/ibm/jceplus/junit/openjceplus/TestAll.java
Original file line number Diff line number Diff line change
Expand Up @@ -101,8 +101,6 @@
TestSHA256.class,
TestSHA3_224.class,
TestSHA3_256.class,
TestSHA3_384.class,
TestSHA3_512.class,
TestSHA384.class,
TestSHA512_224.class,
TestSHA512_256.class,
Expand Down
24 changes: 0 additions & 24 deletions src/test/java/ibm/jceplus/junit/openjceplus/TestSHA3_384.java

This file was deleted.

24 changes: 0 additions & 24 deletions src/test/java/ibm/jceplus/junit/openjceplus/TestSHA3_512.java

This file was deleted.

This file was deleted.

This file was deleted.

2 changes: 0 additions & 2 deletions src/test/java/ibm/jceplus/junit/openjceplusfips/TestAll.java
Original file line number Diff line number Diff line change
Expand Up @@ -77,8 +77,6 @@
TestSHA256.class,
TestSHA3_224.class,
TestSHA3_256.class,
TestSHA3_384.class,
TestSHA3_512.class,
TestSHA384.class,
TestSHA512.class
})
Expand Down
24 changes: 0 additions & 24 deletions src/test/java/ibm/jceplus/junit/openjceplusfips/TestSHA3_384.java

This file was deleted.

24 changes: 0 additions & 24 deletions src/test/java/ibm/jceplus/junit/openjceplusfips/TestSHA3_512.java

This file was deleted.

This file was deleted.

This file was deleted.

133 changes: 133 additions & 0 deletions src/test/java/ibm/jceplus/junit/tests/BaseTestMessageDigest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
/*
* Copyright IBM Corp. 2024, 2026
*
* This code is free software; you can redistribute it and/or modify it
* under the terms provided by IBM in the LICENSE file that accompanied
* this code, including the "Classpath" Exception described therein.
*/

package ibm.jceplus.junit.tests;

import java.security.MessageDigest;
import java.util.Arrays;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.fail;

abstract public class BaseTestMessageDigest extends BaseTest {

final byte[] input_1 = {(byte) 0x61, (byte) 0x61, (byte) 0x61, (byte) 0x61, (byte) 0x61,
(byte) 0x61, (byte) 0x61, (byte) 0x61, (byte) 0x61, (byte) 0x61};

final byte[] input_2 = {(byte) 0x61, (byte) 0x62, (byte) 0x63};

final byte[] input_3 = {(byte) 0x61, (byte) 0x62, (byte) 0x63, (byte) 0x64, (byte) 0x62,
(byte) 0x63, (byte) 0x64, (byte) 0x65, (byte) 0x63, (byte) 0x64, (byte) 0x65,
(byte) 0x66, (byte) 0x64, (byte) 0x65, (byte) 0x66, (byte) 0x67, (byte) 0x65,
(byte) 0x66, (byte) 0x67, (byte) 0x68, (byte) 0x66, (byte) 0x67, (byte) 0x68,
(byte) 0x69, (byte) 0x67, (byte) 0x68, (byte) 0x69, (byte) 0x6a, (byte) 0x68,
(byte) 0x69, (byte) 0x6a, (byte) 0x6b, (byte) 0x69, (byte) 0x6a, (byte) 0x6b,
(byte) 0x6c, (byte) 0x6a, (byte) 0x6b, (byte) 0x6c, (byte) 0x6d, (byte) 0x6b,
(byte) 0x6c, (byte) 0x6d, (byte) 0x6e, (byte) 0x6c, (byte) 0x6d, (byte) 0x6e,
(byte) 0x6f, (byte) 0x6d, (byte) 0x6e, (byte) 0x6f, (byte) 0x70, (byte) 0x6e,
(byte) 0x6f, (byte) 0x70, (byte) 0x71};

@Test
public void testUpdateCloneSameUpdate() throws Exception {
MessageDigest md = MessageDigest.getInstance(getAlgorithm(), getProviderName());

md.update(input_1);

MessageDigest mdCopy = (MessageDigest) md.clone();

byte[] digest1 = md.digest(input_2);
byte[] digest2 = mdCopy.digest(input_2);

assertArrayEquals(digest2, digest1, "Digest of original did not match clone's digest");
}

@Test
public void testUpdateCloneDifferentUpdate() throws Exception {
MessageDigest md = MessageDigest.getInstance(getAlgorithm(), getProviderName());

md.update(input_1);

MessageDigest mdCopy = (MessageDigest) md.clone();

byte[] digest1 = md.digest(input_2);
byte[] digest2 = mdCopy.digest(input_3);

assertFalse(Arrays.equals(digest1, digest2), "Digest of original matches clone's digest when it shouldn't");
}

@Test
public void testCloneSameUpdate() throws Exception {
MessageDigest md = MessageDigest.getInstance(getAlgorithm(), getProviderName());

MessageDigest mdCopy = (MessageDigest) md.clone();

byte[] digest1 = md.digest(input_2);
byte[] digest2 = mdCopy.digest(input_2);

assertArrayEquals(digest2, digest1, "Digest of original did not match clone's digest");
}

@Test
public void testCloneDifferentUpdate() throws Exception {
MessageDigest md = MessageDigest.getInstance(getAlgorithm(), getProviderName());

MessageDigest mdCopy = (MessageDigest) md.clone();

byte[] digest1 = md.digest(input_2);
byte[] digest2 = mdCopy.digest(input_3);

assertFalse(Arrays.equals(digest1, digest2), "Digest of original matches clone's digest when it shouldn't");
}

/**
* Ensure a ArrayIndexOutOfBoundsException is thrown with negative offset parameter.
*/
@Test
public void tesNegativeOffset() throws Exception {
MessageDigest md = MessageDigest.getInstance(getAlgorithm(), getProviderName());
byte[] bytes = new byte[] {1, 1, 1, 1, 1};
try {
md.update(bytes, -1, 1);
fail("Expected exception not thrown.");
} catch (ArrayIndexOutOfBoundsException e) {
assertEquals("Range out of bounds for buffer of length 5 using offset: -1, input length: 1", e.getMessage());
}
}

/**
* Ensure a ArrayIndexOutOfBoundsException is thrown with negative length parameter.
*/
@Test
public void testNegativeLength() throws Exception {
MessageDigest md = MessageDigest.getInstance(getAlgorithm(), getProviderName());
byte[] bytes = new byte[] {1, 1, 1, 1, 1};
try {
md.update(bytes, 1, -1);
fail("Expected exception not thrown.");
} catch (ArrayIndexOutOfBoundsException e) {
assertEquals("Range out of bounds for buffer of length 5 using offset: 1, input length: -1", e.getMessage());
}
}

/**
* Ensure a IllegalArgumentException is thrown when using a short buffer.
*/
@Test
public void testShortBuffer() throws Exception {
MessageDigest md = MessageDigest.getInstance(getAlgorithm(), getProviderName());
byte[] bytes = new byte[] {1, 1, 1, 1, 1};
try {
md.update(bytes, 1, 5);
fail("Expected exception not thrown.");
} catch (IllegalArgumentException e) {
assertEquals("Input buffer too short", e.getMessage());
}
}
}
Loading
Loading