1
package org.bouncycastle.crypto.test;
3
import org.bouncycastle.crypto.DataLengthException;
4
import org.bouncycastle.crypto.InvalidCipherTextException;
5
import org.bouncycastle.crypto.Wrapper;
6
import org.bouncycastle.crypto.engines.AESWrapEngine;
7
import org.bouncycastle.crypto.params.KeyParameter;
8
import org.bouncycastle.util.Arrays;
9
import org.bouncycastle.util.encoders.Hex;
10
import org.bouncycastle.util.test.SimpleTestResult;
11
import org.bouncycastle.util.test.Test;
12
import org.bouncycastle.util.test.TestResult;
17
public class AESWrapTest
20
public String getName()
25
private TestResult wrapTest(
31
Wrapper wrapper = new AESWrapEngine();
33
wrapper.init(true, new KeyParameter(kek));
37
byte[] cText = wrapper.wrap(in, 0, in.length);
38
if (!Arrays.areEqual(cText, out))
40
return new SimpleTestResult(false, getName() + ": failed wrap test " + id + " expected " + new String(Hex.encode(out)) + " got " + new String(Hex.encode(cText)));
45
return new SimpleTestResult(false, getName() + ": failed wrap test exception " + e.toString());
48
wrapper.init(false, new KeyParameter(kek));
52
byte[] pText = wrapper.unwrap(out, 0, out.length);
53
if (!Arrays.areEqual(pText, in))
55
return new SimpleTestResult(false, getName() + ": failed unwrap test " + id + " expected " + new String(Hex.encode(in)) + " got " + new String(Hex.encode(pText)));
60
return new SimpleTestResult(false, getName() + ": failed unwrap test exception.", e);
63
return new SimpleTestResult(true, getName() + ": Okay");
66
public TestResult perform()
68
byte[] kek1 = Hex.decode("000102030405060708090a0b0c0d0e0f");
69
byte[] in1 = Hex.decode("00112233445566778899aabbccddeeff");
70
byte[] out1 = Hex.decode("1fa68b0a8112b447aef34bd8fb5a7b829d3e862371d2cfe5");
71
TestResult result = wrapTest(1, kek1, in1, out1);
73
if (!result.isSuccessful())
78
byte[] kek2 = Hex.decode("000102030405060708090a0b0c0d0e0f1011121314151617");
79
byte[] in2 = Hex.decode("00112233445566778899aabbccddeeff");
80
byte[] out2 = Hex.decode("96778b25ae6ca435f92b5b97c050aed2468ab8a17ad84e5d");
81
result = wrapTest(2, kek2, in2, out2);
82
if (!result.isSuccessful())
87
byte[] kek3 = Hex.decode("000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f");
88
byte[] in3 = Hex.decode("00112233445566778899aabbccddeeff");
89
byte[] out3 = Hex.decode("64e8c3f9ce0f5ba263e9777905818a2a93c8191e7d6e8ae7");
90
result = wrapTest(3, kek3, in3, out3);
91
if (!result.isSuccessful())
96
byte[] kek4 = Hex.decode("000102030405060708090a0b0c0d0e0f1011121314151617");
97
byte[] in4 = Hex.decode("00112233445566778899aabbccddeeff0001020304050607");
98
byte[] out4 = Hex.decode("031d33264e15d33268f24ec260743edce1c6c7ddee725a936ba814915c6762d2");
99
result = wrapTest(4, kek4, in4, out4);
100
if (!result.isSuccessful())
105
byte[] kek5 = Hex.decode("000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f");
106
byte[] in5 = Hex.decode("00112233445566778899aabbccddeeff0001020304050607");
107
byte[] out5 = Hex.decode("a8f9bc1612c68b3ff6e6f4fbe30e71e4769c8b80a32cb8958cd5d17d6b254da1");
108
result = wrapTest(5, kek5, in5, out5);
109
if (!result.isSuccessful())
114
byte[] kek6 = Hex.decode("000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f");
115
byte[] in6 = Hex.decode("00112233445566778899aabbccddeeff000102030405060708090a0b0c0d0e0f");
116
byte[] out6 = Hex.decode("28c9f404c4b810f4cbccb35cfb87f8263f5786e2d80ed326cbc7f0e71a99f43bfb988b9b7a02dd21");
117
result = wrapTest(6, kek6, in6, out6);
118
if (!result.isSuccessful())
123
Wrapper wrapper = new AESWrapEngine();
124
KeyParameter key = new KeyParameter(new byte[16]);
125
byte[] buf = new byte[16];
129
wrapper.init(true, key);
131
wrapper.unwrap(buf, 0, buf.length);
133
return new SimpleTestResult(false, getName() + ": failed unwrap state test.");
135
catch (IllegalStateException e)
139
catch (InvalidCipherTextException e)
141
return new SimpleTestResult(false, getName() + ": unexpected exception: " + e, e);
146
wrapper.init(false, key);
148
wrapper.wrap(buf, 0, buf.length);
150
return new SimpleTestResult(false, getName() + ": failed unwrap state test.");
152
catch (IllegalStateException e)
162
wrapper.init(false, key);
164
wrapper.unwrap(buf, 0, buf.length / 2);
166
return new SimpleTestResult(false, getName() + ": failed unwrap short test.");
168
catch (InvalidCipherTextException e)
175
wrapper.init(true, key);
177
wrapper.wrap(buf, 0, 15);
179
return new SimpleTestResult(false, getName() + ": failed wrap length test.");
181
catch (DataLengthException e)
186
return new SimpleTestResult(true, getName() + ": Okay");
189
public static void main(
192
AESWrapTest test = new AESWrapTest();
193
TestResult result = test.perform();
195
System.out.println(result);