package de.pinyto.ctSESAM;
import junit.framework.TestCase;
import java.io.UnsupportedEncodingException;
/**
* Unit tests for the PBKDF2_HMAC implementation
*/
public class PBKDF2Test extends TestCase {
public void testSha512Hmac () {
byte[] key;
try {
key = "secret".getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
key = "secret".getBytes();
}
byte[] message;
try {
message = "message".getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
message = "message".getBytes();
}
byte[] expectedDigest = new byte[] { 0x1B, (byte)0xBA, 0x58, 0x7C, 0x73, 0x0E, (byte)0xED,
(byte)0xBA, 0x31, (byte)0xF5, 0x3A, (byte)0xBB, 0x0B, 0x6C, (byte)0xA5, (byte)0x89,
(byte)0xE0, (byte)0x9D, (byte)0xE4, (byte)0xE8, (byte)0x94, (byte)0xEE, 0x45, 0x5E,
0x61, 0x40, (byte)0x80, 0x73, (byte)0x99, 0x75, (byte)0x9A, (byte)0xDA, (byte)0xAF,
(byte)0xA0, 0x69, (byte)0xEE, (byte)0xC7, (byte)0xC0, 0x16, 0x47, (byte)0xBB, 0x17,
0x3D, (byte)0xCB, 0x17, (byte)0xF5, 0x5D, 0x22, (byte)0xAF, 0x49, (byte)0xA1,
(byte)0x80, 0x71, (byte)0xB7, 0x48, (byte)0xC5, (byte)0xC2, (byte)0xED, (byte)0xD7,
(byte)0xF7, (byte)0xA8, 0x29, (byte)0xC6, 0x32 };
byte[] digest = PBKDF2.shaHMAC("SHA512", key, message);
assertEquals(expectedDigest.length, digest.length);
for (int i = 0; i < digest.length; i++) {
assertEquals(digest[i], expectedDigest[i]);
}
}
public void testSha512HmacEmptyMessage () {
byte[] key;
try {
key = "secret".getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
key = "secret".getBytes();
}
byte[] message;
try {
message = "".getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
message = "".getBytes();
}
byte[] expectedDigest = new byte[] { (byte)0xB0, (byte)0xE9, 0x65, 0x0C, 0x5F, (byte)0xAF,
(byte)0x9C, (byte)0xD8, (byte)0xAE, 0x02, 0x27, 0x66, 0x71, 0x54, 0x54, 0x24, 0x10,
0x45, (byte)0x89, (byte)0xB3, 0x65, 0x67, 0x31, (byte)0xEC, 0x19, 0x3B, 0x25,
(byte)0xD0, 0x1B, 0x07, 0x56, 0x1C, 0x27, 0x63, 0x7C, 0x2D, 0x4D, 0x68, 0x38,
(byte)0x9D, 0x6C, (byte)0xF5, 0x00, 0x7A, (byte)0x86, 0x32, (byte)0xC2, 0x6E,
(byte)0xC8, (byte)0x9B, (byte)0xA8, 0x0A, 0x01, (byte)0xC7, 0x7A, 0x6C, (byte)0xDD,
0x38, (byte)0x9E, (byte)0xC2, (byte)0x8D, (byte)0xB4, 0x39, 0x01 };
byte[] digest = PBKDF2.shaHMAC("SHA512", key, message);
assertEquals(expectedDigest.length, digest.length);
for (int i = 0; i < digest.length; i++) {
assertEquals(digest[i], expectedDigest[i]);
}
}
public void testSha512HmacEmptyKey () {
byte[] key;
try {
key = "".getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
key = "".getBytes();
}
byte[] message;
try {
message = "message".getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
message = "message".getBytes();
}
byte[] expectedDigest = new byte[] { 0x08, (byte)0xFC, (byte)0xE5, 0x2F, 0x63, (byte)0x95,
(byte)0xD5, (byte)0x9C, 0x2A, 0x3F, (byte)0xB8, (byte)0xAB, (byte)0xB2, (byte)0x81,
(byte)0xD7, 0x4A, (byte)0xD6, (byte)0xF1, 0x12, (byte)0xB9, (byte)0xA9, (byte)0xC7,
(byte)0x87, (byte)0xBC, (byte)0xEA, 0x29, 0x0D, (byte)0x94, (byte)0xDA, (byte)0xDB,
(byte)0xC8, 0x2B, 0x2C, (byte)0xA3, (byte)0xE5, (byte)0xE1, 0x2B, (byte)0xF2, 0x27,
0x7C, 0x7F, (byte)0xED, (byte)0xBB, 0x01, 0x54, (byte)0xD5, 0x49, 0x3E, 0x41,
(byte)0xBB, 0x74, 0x59, (byte)0xF6, 0x3C, (byte)0x8E, 0x39, 0x55, 0x4E, (byte)0xA3,
0x65, 0x1B, (byte)0x81, 0x24, (byte)0x92 };
byte[] digest = PBKDF2.shaHMAC("SHA512", key, message);
assertEquals(expectedDigest.length, digest.length);
for (int i = 0; i < digest.length; i++) {
assertEquals(digest[i], expectedDigest[i]);
}
}
public void testSha512 () {
byte[] salt;
try {
salt = "pepper".getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
salt = "pepper".getBytes();
}
byte[] message;
try {
message = "message".getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
message = "message".getBytes();
}
byte[] expected = new byte[] { 0x26, 0x46, (byte)0xf9, (byte)0xcc, (byte)0xb5, (byte)0x8d,
0x21, 0x40, 0x68, 0x15, (byte)0xba, (byte)0xfc, 0x62, 0x24, 0x57, 0x71, (byte)0xbf,
(byte)0x80, (byte)0xaa, (byte)0xa0, (byte)0x80, (byte)0xa6, 0x33, (byte)0xff, 0x1b,
(byte)0xdd, 0x66, 0x0e, (byte)0xb4, 0x4f, 0x36, (byte)0x9a, (byte)0x89, (byte)0xda,
0x48, (byte)0xfb, 0x04, 0x1c, 0x55, 0x51, (byte)0xa1, 0x18, (byte)0xde, 0x20,
(byte)0xcf, (byte)0xb8, (byte)0xb9, 0x6b, (byte)0x92, (byte)0xe7, (byte)0xa9,
(byte)0x94, 0x54, 0x25, (byte)0xba, (byte)0x88, (byte)0x9e, (byte)0x9a, (byte)0xd6,
0x45, 0x61, 0x45, 0x22, (byte)0xeb };
byte[] actual = PBKDF2.hmac("SHA512", message, salt, 3);
assertEquals(expected.length, actual.length);
for (int i = 0; i < actual.length; i++) {
assertEquals(expected[i], actual[i]);
}
}
public void testSha512EmptySalt () {
byte[] salt;
try {
salt = "".getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
salt = "".getBytes();
}
byte[] message;
try {
message = "message".getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
message = "message".getBytes();
}
byte[] expected = new byte[] { (byte)0xb8, (byte)0xec, 0x13, (byte)0xcf, (byte)0xc9,
(byte)0xb9, (byte)0xd4, (byte)0x9c, (byte)0xa1, 0x14, 0x30, 0x18, (byte)0xce,
(byte)0x84, 0x13, (byte)0xa9, 0x62, (byte)0xc0, (byte)0x9c, 0x00, 0x63,
(byte)0xf3, 0x0a, 0x46, 0x6d, (byte)0xf8, 0x02, (byte)0x89, 0x74, 0x75,
(byte)0xc5, 0x7f, 0x26, (byte)0x8d, (byte)0x91, (byte)0xcc, 0x56, (byte)0x8a,
(byte)0xc1, (byte)0xb6, (byte)0xa9, (byte)0xf1, (byte)0x9b, 0x1a, 0x0d,
(byte)0xb1, 0x0f, 0x30, 0x05, (byte)0x8f, (byte)0xb7, (byte)0xa4, 0x53,
(byte)0xb2, 0x67, 0x50, 0x10, (byte)0xef, 0x2b, 0x5f, (byte)0x96, 0x48, 0x7a,
(byte)0xd3 };
byte[] actual = PBKDF2.hmac("SHA512", message, salt, 3);
assertEquals(expected.length, actual.length);
for (int i = 0; i < actual.length; i++) {
assertEquals(expected[i], actual[i]);
}
}
public void testSha512EmptyMessage () {
byte[] salt;
try {
salt = "pepper".getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
salt = "pepper".getBytes();
}
byte[] message;
try {
message = "".getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
message = "".getBytes();
}
byte[] expected = new byte[] { (byte)0x9d, (byte)0xd3, 0x31, (byte)0xfc, 0x67, 0x42, 0x1e,
0x1d, (byte)0xce, 0x61, (byte)0x9c, (byte)0xbb, (byte)0xb5, 0x17, 0x17, 0x0e, 0x2d,
(byte)0xc3, 0x25, 0x49, 0x1d, 0x34, 0x26, 0x42, 0x56, 0x30, (byte)0xc4, (byte)0xc0,
0x1f, (byte)0xd0, (byte)0xec, (byte)0xa8, (byte)0xd8, (byte)0xf5, 0x35, (byte)0xd6,
(byte)0xb0, 0x55, 0x5a, 0x2a, (byte)0xa4, 0x3e, (byte)0xfb, (byte)0xc9, 0x14, 0x1e,
0x3d, (byte)0xd7, (byte)0xed, (byte)0xae, (byte)0xf8, (byte)0xb1, 0x27, (byte)0x8a,
(byte)0xc3, 0x4e, (byte)0xab, (byte)0xfc, 0x2d, (byte)0xb7, 0x35, (byte)0xd9,
(byte)0x92, (byte)0xee };
byte[] actual = PBKDF2.hmac("SHA512", message, salt, 3);
assertEquals(expected.length, actual.length);
for (int i = 0; i < actual.length; i++) {
assertEquals(expected[i], actual[i]);
}
}
public void testSha512LongMessage () {
byte[] salt;
try {
salt = "pepper".getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
salt = "pepper".getBytes();
}
String msgString = "ThisMessageIsLongerThanSixtyFourCharactersWhichLeadsToTheSituation" +
"ThatTheMessageHasToBeHashedWhenCalculatingTheHmac";
byte[] message;
try {
message = msgString.getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
message = msgString.getBytes();
}
byte[] expected = new byte[] { (byte)0xef, (byte)0xc8, (byte)0xe7, 0x34, (byte)0xed, 0x5b,
0x56, 0x57, (byte)0xac, 0x22, 0x00, 0x46, 0x75, 0x4b, 0x7d, 0x1d, (byte)0xbe,
(byte)0xa0, 0x09, (byte)0x83, (byte)0xf1, 0x32, 0x09, (byte)0xb1, (byte)0xec, 0x1d,
0x0e, 0x41, (byte)0x8e, (byte)0x98, (byte)0x80, 0x7c, (byte)0xba, 0x10, 0x26,
(byte)0xd3, (byte)0xed, 0x3f, (byte)0xa2, (byte)0xa0, (byte)0x9d, (byte)0xfa, 0x43,
(byte)0xc0, 0x74, 0x44, 0x7b, (byte)0xf4, 0x77, 0x7e, 0x70, (byte)0xe4, (byte)0x99,
(byte)0x9d, 0x29, (byte)0xd2, (byte)0xc2, (byte)0xf8, 0x4d, (byte)0xc5, 0x15, 0x02,
(byte)0xa1, (byte)0x95 };
byte[] actual = PBKDF2.hmac("SHA512", message, salt, 3);
assertEquals(expected.length, actual.length);
for (int i = 0; i < actual.length; i++) {
assertEquals(expected[i], actual[i]);
}
}
public void testSha384 () {
byte[] salt;
try {
salt = "salt".getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
salt = "salt".getBytes();
}
byte[] message;
try {
message = "message".getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
message = "message".getBytes();
}
byte[] expected = new byte[] { (byte)0xdc, (byte)0xbe, (byte)0xb0, (byte)0xb9, (byte)0x9a,
0x4c, (byte)0xf4, (byte)0xd1, (byte)0xc9, (byte)0xc1, (byte)0xe8, (byte)0xf6, 0x30,
(byte)0xf3, (byte)0xaa, (byte)0x86, 0x37, (byte)0xc8, (byte)0x90, 0x6f, 0x1c, 0x3e,
0x1c, 0x78, (byte)0xfb, 0x4f, 0x46, 0x2b, 0x16, 0x0d, (byte)0xf2, 0x0f, 0x74, 0x35,
(byte)0xbd, (byte)0xd6, (byte)0xa9, 0x04, (byte)0xdd, 0x3c, 0x3e, (byte)0xde, 0x7f,
(byte)0xf0, 0x4b, (byte)0xc5, 0x3e, (byte)0x90 };
byte[] actual = PBKDF2.hmac("SHA384", message, salt, 3);
assertEquals(expected.length, actual.length);
for (int i = 0; i < actual.length; i++) {
assertEquals(expected[i], actual[i]);
}
}
public void testSha256 () {
byte[] salt;
try {
salt = "salt".getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
salt = "salt".getBytes();
}
byte[] message;
try {
message = "message".getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
message = "message".getBytes();
}
byte[] expected = new byte[] { (byte)0xdb, 0x78, (byte)0xc5, 0x09, 0x14, 0x44, (byte)0x94,
0x0f, (byte)0x96, 0x42, (byte)0xfc, (byte)0xe5, 0x19, 0x09, 0x7e, (byte)0xe7,
(byte)0xad, (byte)0xfe, (byte)0xb3, 0x38, (byte)0xfd, 0x69, 0x70, (byte)0x85, 0x51,
0x35, 0x53, (byte)0x90, 0x20, (byte)0xb5, 0x3f, (byte)0xad };
byte[] actual = PBKDF2.hmac("SHA256", message, salt, 3);
assertEquals(expected.length, actual.length);
for (int i = 0; i < actual.length; i++) {
assertEquals(expected[i], actual[i]);
}
}
}