Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/test/com/sun/crypto/provider/Cipher/KeyWrap/XMLEncKAT.java
38889 views
1
/*
2
* Copyright (c) 2004, 2007, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation.
8
*
9
* This code is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12
* version 2 for more details (a copy is included in the LICENSE file that
13
* accompanied this code).
14
*
15
* You should have received a copy of the GNU General Public License version
16
* 2 along with this work; if not, write to the Free Software Foundation,
17
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18
*
19
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20
* or visit www.oracle.com if you need additional information or have any
21
* questions.
22
*/
23
24
/*
25
* @test
26
* @bug 5008159 5008156
27
* @run main XMLEncKAT
28
* @summary Verify that the two key wrap ciphers, i.e. "DESedeWrap"
29
* and "AESWrap", work as expected.
30
* @author Valerie Peng
31
*/
32
import java.security.Key;
33
import java.security.AlgorithmParameters;
34
import javax.crypto.*;
35
import javax.crypto.spec.*;
36
import sun.misc.BASE64Decoder;
37
import sun.misc.BASE64Encoder;
38
import java.io.UnsupportedEncodingException;
39
import java.io.IOException;
40
41
public class XMLEncKAT {
42
43
private static byte[] desEdeKey_1;
44
private static byte[] aes128Key_1;
45
private static byte[] aes192Key_1;
46
private static byte[] aes256Key_1;
47
private static byte[] desEdeKey_2;
48
private static byte[] aes128Key_2;
49
private static byte[] aes192Key_2;
50
private static byte[] aes256Key_2;
51
52
private static BASE64Decoder base64D = new BASE64Decoder();
53
private static BASE64Encoder base64E = new BASE64Encoder();
54
55
static {
56
try {
57
desEdeKey_1 = "abcdefghijklmnopqrstuvwx".getBytes("ASCII");
58
aes128Key_1 = "abcdefghijklmnop".getBytes("ASCII");
59
aes192Key_1 = "abcdefghijklmnopqrstuvwx".getBytes("ASCII");
60
aes256Key_1 = "abcdefghijklmnopqrstuvwxyz012345".getBytes("ASCII");
61
} catch (UnsupportedEncodingException uee) {
62
// should never happen
63
}
64
try {
65
desEdeKey_2 = base64D.decodeBuffer
66
("yI+J1f3puYAERjIcT6vfg6RitmKX8nD0");
67
aes128Key_2 = base64D.decodeBuffer
68
("01+yuQ2huPS1+Qv0LH+zaQ==");
69
aes192Key_2 = base64D.decodeBuffer
70
("IlfuS40LvStVU0Mj8ePrrGHVhAb48y++");
71
aes256Key_2 = base64D.decodeBuffer
72
("ZhZ4v3RlwTlCEOpIrHfLKVyJOBDtEJOOQDat/4xR1bA=");
73
} catch (IOException ioe) {
74
// should never happen
75
}
76
}
77
private static String[] desEdeWrappedKey_1 = {
78
"ZyJbVsjRM4MEsswwwHz57aUz1eMqZHuEIoEPGS47CcmLvhuCtlzWZ9S/WcVJZIpz",
79
"gHMpx5iF7+KXtNHLasZrkcLHn8Ti4rxUjCIRK+IcgbQir6FUsQ/uxQ3o8enEMWq1"
80
};
81
private static String[] desEdeWrappedKey_2 = {
82
"/PZvvn42E9dmMUZ8KCY6B5XtLaaIaG4X5YNDwgV5Vlo=",
83
"HgVuHoXxBQWD9fvi0gt9TanywZ5lJokM/12fcMG6gRoMjsCPulH+4A=="
84
};
85
private static String[] aes128WrappedKey_1 = {
86
"dV45TUpJbidb9iKa34xj1WVtTZ036cnqvym2TBJWR5c=",
87
"rPnY/XoSGCbuwy7vpslf29rs9dbvSCmGFOjEs3LT6g/qyZjfDA+2fQ=="
88
};
89
private static String[] aes128WrappedKey_2 = {
90
"GPl6bneL1jKl0/lGnf9gejlYHRI6XxFz"
91
};
92
private static String[] aes192WrappedKey_1 = {
93
"IbjZH7Mq564oMybpvCHWYM/5ER3eFsAV",
94
"19D633XVohP6UJvaVRAhJek+ahtM3gOiVs6nZyAasDEb+WCUQOcWZw=="
95
};
96
private static String[] aes192WrappedKey_2 = {
97
"5+GpVUQNTAT3uY8pPedEg/PpftiX+fJsTCun+fgmIz0=",
98
"iuZvvGBWScikHld9TtNIOz0Sm7Srg5AcxOBMA8qIvQY=",
99
"PeDwjnCsg6xWzs3SmzUtc2nyUz28nGu7"
100
};
101
private static String[] aes256WrappedKey_1 = {
102
"4AAgyi3M7xNdBimbQZKdGJLn3/cS4Yv8QKuA01+gUnY=",
103
"tPCC89jQShB+WDINCdRfKgf8wTlAx8xRXD73RmEHPBfix8zS1N82KQ==",
104
"bsL63D0hPN6EOyzdgfEmKsAAvoJiGM+Wp9a9KZM92IKdl7s3YSntRg=="
105
};
106
private static String[] aes256WrappedKey_2 = {
107
"IbnoS1cvuIFIGB46jj1V1FGftc92irrCwcC7BoBvxwQ=",
108
"ic+Om6/3ZKcThVN3iv9lUEankNkDv3Et",
109
"jOvQe4SxDqEMvAHcmb3Z+/Uedj23pvL6BRQsl2sjJlQ=",
110
"IMwdsyg89IZ4Txf1SYYZNKUOKuYdDoIi/zEKXCjj4j9PM6BdkZligA=="
111
};
112
113
public static void testKeyWrap(String cAlg, byte[] cKeyVal,
114
String cKeyAlg, String[] base64Wrapped) throws Exception {
115
System.out.println("Testing " + cAlg + " Cipher with " +
116
8*cKeyVal.length + "-bit key");
117
Cipher c = Cipher.getInstance(cAlg, "SunJCE");
118
SecretKey cKey = new SecretKeySpec(cKeyVal, cKeyAlg);
119
c.init(Cipher.UNWRAP_MODE, cKey);
120
Key[] key = new SecretKey[base64Wrapped.length];
121
IvParameterSpec[] params =
122
new IvParameterSpec[base64Wrapped.length];
123
// first test UNWRAP with known values
124
for (int i = 0; i < base64Wrapped.length; i++) {
125
byte[] wrappedKey = base64D.decodeBuffer(base64Wrapped[i]);
126
key[i] = c.unwrap(wrappedKey, "AES", Cipher.SECRET_KEY);
127
if (c.getIV() != null) {
128
params[i] = new IvParameterSpec(c.getIV());
129
}
130
}
131
// then test WRAP and compare with the known values
132
for (int i = 0; i < key.length; i++) {
133
c.init(Cipher.WRAP_MODE, cKey, params[i]);
134
byte[] wrapped2 = c.wrap(key[i]);
135
String out = base64E.encode(wrapped2);
136
if (!out.equalsIgnoreCase(base64Wrapped[i])) {
137
throw new Exception("Wrap failed; got " + out + ", expect " +
138
base64Wrapped[i]);
139
}
140
}
141
}
142
143
public static void main(String[] argv) throws Exception {
144
String wrapAlg = "DESedeWrap";
145
String keyAlg = "DESede";
146
testKeyWrap(wrapAlg, desEdeKey_1, keyAlg, desEdeWrappedKey_1);
147
testKeyWrap(wrapAlg, desEdeKey_2, keyAlg, desEdeWrappedKey_2);
148
149
wrapAlg = "AESWrap";
150
keyAlg = "AES";
151
testKeyWrap(wrapAlg, aes128Key_1, keyAlg, aes128WrappedKey_1);
152
testKeyWrap(wrapAlg, aes128Key_2, keyAlg, aes128WrappedKey_2);
153
// only run the tests on longer key lengths if unlimited version
154
// of JCE jurisdiction policy files are installed
155
if (Cipher.getMaxAllowedKeyLength(keyAlg) == Integer.MAX_VALUE) {
156
testKeyWrap(wrapAlg, aes192Key_1, keyAlg, aes192WrappedKey_1);
157
testKeyWrap(wrapAlg, aes192Key_2, keyAlg, aes192WrappedKey_2);
158
testKeyWrap(wrapAlg, aes256Key_1, keyAlg, aes256WrappedKey_1);
159
testKeyWrap(wrapAlg, aes256Key_2, keyAlg, aes256WrappedKey_2);
160
}
161
System.out.println("All Tests Passed");
162
}
163
}
164
165