1561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/*
2561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  Licensed to the Apache Software Foundation (ASF) under one or more
3561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  contributor license agreements.  See the NOTICE file distributed with
4561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  this work for additional information regarding copyright ownership.
5561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  The ASF licenses this file to You under the Apache License, Version 2.0
6561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  (the "License"); you may not use this file except in compliance with
7561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  the License.  You may obtain a copy of the License at
8561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
9561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *     http://www.apache.org/licenses/LICENSE-2.0
10561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
11561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  Unless required by applicable law or agreed to in writing, software
12561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  distributed under the License is distributed on an "AS IS" BASIS,
13561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  See the License for the specific language governing permissions and
15561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  limitations under the License.
16561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
17561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
18561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/**
19561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes* @author Vladimir N. Molotkov
20561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes*/
21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespackage org.apache.harmony.crypto.tests.javax.crypto;
23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.IOException;
25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.AlgorithmParameters;
26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.InvalidAlgorithmParameterException;
27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.InvalidKeyException;
28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.Key;
29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.KeyPair;
30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.KeyPairGenerator;
31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.NoSuchAlgorithmException;
32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.Provider;
33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.Security;
34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.spec.InvalidKeySpecException;
35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.spec.InvalidParameterSpecException;
36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.spec.PKCS8EncodedKeySpec;
37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Arrays;
38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.crypto.BadPaddingException;
40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.crypto.Cipher;
41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.crypto.EncryptedPrivateKeyInfo;
42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.crypto.IllegalBlockSizeException;
43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.crypto.KeyGenerator;
44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.crypto.NoSuchPaddingException;
45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.crypto.SecretKeyFactory;
46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.crypto.spec.PBEKeySpec;
47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.crypto.spec.PBEParameterSpec;
48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.crypto.tests.support.EncryptedPrivateKeyInfoData;
50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestCase;
52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/**
54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Test for EncryptedPrivateKeyInfo class.
55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * All binary data for this test were generated using BEA JRockit j2sdk1.4.2_04
57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * (http://www.bea.com) with security providers list extended by Bouncy Castle's
58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * one (http://www.bouncycastle.org)
59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class EncryptedPrivateKeyInfoTest extends TestCase {
61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static final Provider[] provider = Security.getProviders();
63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Algorithm names/transformations used in roundtrip tests of
66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * getKeySpec(...) methods
67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static final String[][] algName = {
69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // AES
70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            { "AES", null },
71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            //            {"AES", "AES/ECB/PKCS5Padding"},
72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            //            {"AES", "AES/CBC/PKCS5Padding"},
73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            //            {"AES", "AES/OFB/PKCS5Padding"},
74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            //            {"AES", "AES/CFB/PKCS5Padding"},
75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            //            {"2.16.840.1.101.3.4.1.1", null},
76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            //            {"2.16.840.1.101.3.4.1.2", null},
77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            //            {"2.16.840.1.101.3.4.1.3", null},
78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            //            {"2.16.840.1.101.3.4.1.4", null},
79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            //            {"2.16.840.1.101.3.4.1.5", null},
80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            //            {"2.16.840.1.101.3.4.1.21", null},
81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            //            {"2.16.840.1.101.3.4.1.22", null},
82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            //            {"2.16.840.1.101.3.4.1.23", null},
83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            //            {"2.16.840.1.101.3.4.1.24", null},
84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            //            {"2.16.840.1.101.3.4.1.25", null},
85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            //            {"2.16.840.1.101.3.4.1.41", null},
86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            //            {"2.16.840.1.101.3.4.1.42", null},
87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            //            {"2.16.840.1.101.3.4.1.43", null},
88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            //            {"2.16.840.1.101.3.4.1.44", null},
89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            //            {"2.16.840.1.101.3.4.1.45", null},
90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Blowfish
92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // NO OIDs for Blowfish defined (?)
93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            { "Blowfish", null },
94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            //            {"Blowfish","Blowfish/CBC/PKCS5Padding"},
95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            //            {"Blowfish","Blowfish/CFB/PKCS5Padding"},
96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            //            {"Blowfish","Blowfish/OFB/PKCS5Padding"},
97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            //            {"Blowfish","Blowfish/PCBC/PKCS5Padding"},
98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // DES: OIW OIDs only
100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // {iso(1) identified-organization(3) oiw(14) secsig(3)
101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // algorithms(2) desECB(6)}
102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // 1.3.14.3.2.6
103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // 1.3.14.3.2.7
104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // 1.3.14.3.2.8
105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // 1.3.14.3.2.9
106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            { "DES", null },
107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            //            {"DES", "DES/CBC/PKCS5Padding"},
108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            //            {"DES","DES/CFB/PKCS5Padding"},
109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            //            {"DES","DES/OFB/PKCS5Padding"},
110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            //            {"DES","DES/PCBC/PKCS5Padding"},
111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // DESede (=TripleDes)
113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            //{iso(1) identified-organization(3) oiw(14) secsig(3)
114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // algorithms(2) desEDE(17)}
115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // 1.3.14.3.2.17
116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            //            {"DESede",null},
117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            //            {"DESede","DESede/CBC/PKCS5Padding"},
118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            //            {"DESede","DESede/CFB/PKCS5Padding"},
119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            //            {"DESede","DESede/OFB/PKCS5Padding"},
120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            //            {"DESede","DESede/PCBC/PKCS5Padding"},
121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            { "TripleDES", null },
122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            //            {"TripleDES","TripleDES/CBC/PKCS5Padding"},
123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            //            {"TripleDES","TripleDES/CFB/PKCS5Padding"},
124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            //            {"TripleDES","TripleDES/OFB/PKCS5Padding"},
125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            //            {"TripleDES","TripleDES/PCBC/PKCS5Padding"},
126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // PBEWith<digest>And<encryption>
128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            { "PBEWithMD5AndTripleDES", null },
129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // {iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-5(5)
130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // pbeWithMD5AndDES-CBC(3)}
131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            { "PBEWithMD5AndDES", "PBEWithMD5AndDES/CBC/PKCS5Padding" },
132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            { "PBEWithMD5AndDES", null }, { "PBEWithHmacSHA1AndDESede", null },
133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // more oids:
134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // {iso(1) member-body(2) us(840) nortelnetworks(113533) entrust(7)
135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // algorithms(66) pbeWithMD5AndCAST5-CBC(12)}
136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            //
137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // also named pbeWithSHAAnd128BitRC4, pbeWithSHA1And128BitRC4:
138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // {iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-12(12)
139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // pkcs-12-PbeIds(1) pkcs-12-OfflineTransportMode(1)}
140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            //
141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // {iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-12(12)
142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // pkcs-12-PbeIds(1)} +
143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // pbeWithSHAAnd40BitRC4(2) pbeWithSHAAnd3-KeyTripleDES-CBC(3)
144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // pbeWithSHAAnd2-KeyTripleDES-CBC(4) pbeWithSHAAnd128BitRC2-CBC(5)
145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // pbeWithSHAAnd40BitRC2-CBC(6)
146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // DiffieHellman
148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            { "DiffieHellman", null }, // 1.2.840.10046.2.1
149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            //            {"DH",null}, // 1.2.840.10046.2.1
150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            //            {"1.2.840.113549.1.3.1", null},
151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            { "DSA", null }, // 1.2.840.10040.4.1
153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            { "RC2", null },
155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            { "RC4", null },
157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            { "RC5", null },
159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            //            {"1.2.840.113549.1.12.1.1",null},
161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            //            {"1.2.840.113549.1.12.1.2",null},
162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            { "1.2.840.113549.1.12.1.3", null },
163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            { "PBEWithSHA1AndDESede", null },
164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    //            {"1.2.840.113549.1.12.1.4",null},
165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    //            {"1.2.840.113549.1.12.1.5",null},
166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    //            {"1.2.840.113549.1.12.1.6",null},
167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    //            {"ELGAMAL/PKCS1", "ELGAMAL/ECB/PKCS1PADDING"},
168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    //            {"ELGAMAL/PKCS1","ELGAMAL/NONE/PKCS1PADDING"},
169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    //            {"PBEWITHSHAAND3-KEYTRIPLEDES-CBC", null},
170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    //            {"PBEWITHSHA1ANDDESEDE", null},
171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    //            {"PBEWithSHAAnd3KeyTripleDES",null},
172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    //            {"PBEWITHSHAAND3-KEYTRIPLEDES-CBC",null},
173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    //
174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    //            {"RC5-32",null},
175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    //
176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    //            {"RSA/1", "RSA/1/PKCS1PADDING"},
177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    //            {"RSA/2", "RSA/2/PKCS1PADDING"},
178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    //            {"RSA/ISO9796-1", "RSA/ECB/ISO9796-1PADDING"},
179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    //            {"RSA", "RSA/ECB/NOPADDING"},
180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    //            {"RSA/OAEP", "RSA/ECB/OAEPPADDING"},
181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    //            {"RSA/PKCS1", "RSA/ECB/PKCS1PADDING"},
182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    //            {"RSA/ISO9796-1", "RSA/NONE/ISO9796-1PADDING"},
183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    //            {"RSA", "RSA/NONE/NOPADDING"},
184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    //            {"RSA/OAEP", "RSA/NONE/OAEPPADDING"},
185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    //            {"RSA/PKCS1", "RSA/NONE/PKCS1PADDING"},
186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    //            {"RSA",null}, // 1.2.840.113549.1.1.1
187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    //            {"1.2.840.113549.1.1.1", null},
188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    };
189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test #1 for <code>EncryptedPrivateKeyInfo(byte[])</code> constructor
192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * <br>
193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: creates <code>EncryptedPrivateKeyInfo</code> instance <br>
194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test preconditions: valid parameters passed <br>
195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Expected: must pass without any exceptions
196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     *
197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @throws IOException
198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @throws NoSuchAlgorithmException
199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testEncryptedPrivateKeyInfobyteArray1() throws Exception {
201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        new EncryptedPrivateKeyInfo(EncryptedPrivateKeyInfoData
202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getValidEncryptedPrivateKeyInfoEncoding("DH"));
203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test #2 for <code>EncryptedPrivateKeyInfo(byte[])</code> constructor
207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * <br>
208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: <code>NullPointerException</code> if encoding is
209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * <code>null</code><br>
210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test preconditions: <code>null</code> passed as a parameter <br>
211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Expected: <code>NullPointerException</code>
212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     *
213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @throws IOException
214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testEncryptedPrivateKeyInfobyteArray2()
216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            throws IOException {
217561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new EncryptedPrivateKeyInfo(null);
219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail(getName() + ": NullPointerException has not been thrown");
220561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException ok) {
221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
223561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test #3 for <code>EncryptedPrivateKeyInfo(byte[])</code> constructor
226561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * <br>
227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: <code>IOException</code> if encoding is wrong <br>
228561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test preconditions: wrong encoding passed as a parameter <br>
229561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Expected: <code>IOException</code>
230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
231561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testEncryptedPrivateKeyInfobyteArray3() {
232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new EncryptedPrivateKeyInfo(new byte[0]);
234561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail(getName() + ": IOException has not been thrown");
235561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IOException ok) {
236561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
237561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
238561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
239561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
240561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test #4 for <code>EncryptedPrivateKeyInfo(byte[])</code> constructor
241561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * <br>
242561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: <code>IOException</code> if encoding is wrong <br>
243561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test preconditions: wrong encoding passed as a parameter <br>
244561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Expected: <code>IOException</code>
245561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
246561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testEncryptedPrivateKeyInfobyteArray4() {
247561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
248561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new EncryptedPrivateKeyInfo(new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9,
249561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    10 });
250561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail(getName() + ": IOException has not been thrown");
251561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IOException ok) {
252561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
253561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
254561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
255561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
256561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test #5 for <code>EncryptedPrivateKeyInfo(byte[])</code> constructor
257561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * <br>
258561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: <code>IOException</code> if encoding is wrong <br>
259561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test preconditions: wrong encoding passed as a parameter <br>
260561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Expected: <code>IOException</code>
261561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
262561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testEncryptedPrivateKeyInfobyteArray5() throws Exception {
263561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] enc = null;
264561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
265561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // 1: get valid encoding
266561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            enc = EncryptedPrivateKeyInfoData
267561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .getValidEncryptedPrivateKeyInfoEncoding("DSA");
268561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
269561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // ... and corrupt it (set wrong alg OID length)
270561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            enc[9] = (byte) 6;
271561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
272561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new EncryptedPrivateKeyInfo(enc);
273561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail(getName() + "(1): IOException has not been thrown");
274561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IOException ok) {
275561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
276561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
277561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
278561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // 2: get valid encoding
279561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            enc = EncryptedPrivateKeyInfoData
280561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .getValidEncryptedPrivateKeyInfoEncoding("DSA");
281561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // ... and corrupt it (set wrong encrypted data tag)
282561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            enc[307] = (byte) 6;
283561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new EncryptedPrivateKeyInfo(enc);
284561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail(getName() + "(2): IOException has not been thrown");
285561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IOException ok) {
286561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
287561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
288561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
289561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // 3: get valid encoding
290561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            enc = EncryptedPrivateKeyInfoData
291561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .getValidEncryptedPrivateKeyInfoEncoding("DSA");
292561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // ... and corrupt it (set wrong encrypted data length)
293561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            enc[310] = (byte) 1;
294561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new EncryptedPrivateKeyInfo(enc);
295561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail(getName() + "(3): IOException has not been thrown");
296561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IOException ok) {
297561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
298561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
299561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
300561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // 4: get valid encoding
301561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            enc = EncryptedPrivateKeyInfoData
302561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .getValidEncryptedPrivateKeyInfoEncoding("DSA");
303561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // ... and corrupt it (set wrong tag for alg params sequence)
304561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            enc[17] = (byte) 0x29;
305561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            EncryptedPrivateKeyInfo epki = new EncryptedPrivateKeyInfo(enc);
306561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
307561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (epki.getAlgParameters() == null) {
308561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // This kind of encoding corruption can
309561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // be only determined while AlgorithmParameters
310561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // initialization BUT No AlgorithmParameters instance
311561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // available for algName0[i][0].
312561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // So just skip this sub test
313561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } else {
314561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail(getName() + "(4): IOException has not been thrown");
315561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
316561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
317561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IOException ok) {
318561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
319561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
320561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
321561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // 5: get valid encoding
322561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            enc = EncryptedPrivateKeyInfoData
323561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .getValidEncryptedPrivateKeyInfoEncoding("DSA");
324561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // ... and corrupt it (set wrong length for alg params sequence)
325561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            enc[20] = (byte) 0x1d;
326561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new EncryptedPrivateKeyInfo(enc);
327561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail(getName() + "(5): IOException has not been thrown");
328561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IOException ok) {
329561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
330561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
331561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
332561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // 6: get valid encoding
333561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            enc = EncryptedPrivateKeyInfoData
334561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .getValidEncryptedPrivateKeyInfoEncoding("DSA");
335561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // ... and corrupt it (set wrong length for alg params sequence)
336561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            enc[20] = (byte) 0x1f;
337561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new EncryptedPrivateKeyInfo(enc);
338561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail(getName() + "(6): IOException has not been thrown");
339561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IOException ok) {
340561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
341561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
342561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
343561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
344561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test #6 for <code>EncryptedPrivateKeyInfo(byte[])</code> constructor
345561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * <br>
346561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: byte array is copied to prevent subsequent modification <br>
347561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test preconditions: valid array passed then modified <br>
348561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Expected: getEncoded(), invoked after above modification, must return
349561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * array as it was before the modification
350561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     *
351561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @throws IOException
352561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
353561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testEncryptedPrivateKeyInfobyteArray6() throws Exception {
354561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] encoded = EncryptedPrivateKeyInfoData
355561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getValidEncryptedPrivateKeyInfoEncoding("DSA");
356561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] encodedCopy = encoded.clone();
357561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // pass valid array
358561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        EncryptedPrivateKeyInfo epki = new EncryptedPrivateKeyInfo(encodedCopy);
359561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // modify array passed
360561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        encodedCopy[9] = (byte) 6;
361561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // check that internal state has not been affected
362561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(Arrays.equals(encoded, epki.getEncoded()));
363561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
364561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
365561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
366561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test #1 for <code>EncryptedPrivateKeyInfo(String, byte[])</code>
367561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * constructor <br>
368561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: creates <code>EncryptedPrivateKeyInfo</code> instance <br>
369561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test preconditions: valid parameters passed <br>
370561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Expected: must pass without any exceptions
371561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
372561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testEncryptedPrivateKeyInfoStringbyteArray1() {
373561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        boolean performed = false;
374561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
375561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < EncryptedPrivateKeyInfoData.algName0.length; i++) {
376561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
377561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new EncryptedPrivateKeyInfo(
378561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        EncryptedPrivateKeyInfoData.algName0[i][0],
379561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        EncryptedPrivateKeyInfoData.encryptedData);
380561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                performed = true;
381561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (NoSuchAlgorithmException allowed) {
382561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
383561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
384561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
385561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Test not performed", performed);
386561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
387561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
388561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
389561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test #2 for <code>EncryptedPrivateKeyInfo(String, byte[])</code>
390561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * constructor <br>
391561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: <code>NoSuchAlgorithmException</code>- if the specified
392561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * algorithm is not supported <br>
393561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test preconditions: pass nonexistent algorithm name <br>
394561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Expected: <code>NoSuchAlgorithmException</code>
395561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
396561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testEncryptedPrivateKeyInfoStringbyteArray2() {
397561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
398561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new EncryptedPrivateKeyInfo("bla-bla",
399561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    EncryptedPrivateKeyInfoData.encryptedData);
400561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail(getName() + ": NoSuchAlgorithmException has not been thrown");
401561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NoSuchAlgorithmException ok) {
402561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
403561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
404561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
405561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new EncryptedPrivateKeyInfo("",
406561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    EncryptedPrivateKeyInfoData.encryptedData);
407561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail(getName() + ": NoSuchAlgorithmException has not been thrown");
408561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NoSuchAlgorithmException ok) {
409561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
410561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
411561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
412561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
413561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test #3 for <code>EncryptedPrivateKeyInfo(String, byte[])</code>
414561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * constructor <br>
415561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: <code>NullPointerException</code>- if the specified
416561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * algorithm or encrypted data is <code>null</code><br>
417561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test preconditions: pass <code>null</code> as algorithm name then as
418561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * encrypted data <br>
419561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Expected: <code>NullPointerException</code> in both cases
420561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     *
421561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @throws NoSuchAlgorithmException
422561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
423561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testEncryptedPrivateKeyInfoStringbyteArray3()
424561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            throws NoSuchAlgorithmException {
425561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // pass null as name
426561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
427561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new EncryptedPrivateKeyInfo((String) null,
428561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    EncryptedPrivateKeyInfoData.encryptedData);
429561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail(getName() + ": NullPointerException has not been thrown");
430561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException ok) {
431561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
432561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
433561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // pass null as encrypted data
434561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
435561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new EncryptedPrivateKeyInfo("DSA", null);
436561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail(getName() + ": NullPointerException has not been thrown");
437561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException ok) {
438561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
439561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
440561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
441561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
442561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test #4 for <code>EncryptedPrivateKeyInfo(String, byte[])</code>
443561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * constructor <br>
444561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: <code>IllegalArgumentException</code>- if encrypted data is
445561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * empty, i.e. 0-length <br>
446561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test preconditions: pass empty encrypted data <br>
447561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Expected: <code>IllegalArgumentException</code>
448561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
449561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testEncryptedPrivateKeyInfoStringbyteArray4()
450561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            throws Exception {
451561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
452561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new EncryptedPrivateKeyInfo("DSA", new byte[] {});
453561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail(getName() + ": IllegalArgumentException has not been thrown");
454561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IllegalArgumentException ok) {
455561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
456561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
457561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
458561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
459561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test #5 for <code>EncryptedPrivateKeyInfo(String, byte[])</code>
460561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * constructor <br>
461561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: byte array is copied to prevent subsequent modification <br>
462561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test preconditions: valid array passed then modified <br>
463561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Expected: getEncryptedData(), invoked after above modification, must
464561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * return array as it was before the modification
465561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     *
466561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @throws IOException
467561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
468561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testEncryptedPrivateKeyInfoStringbyteArray5()
469561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            throws Exception {
470561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] encryptedDataCopy = EncryptedPrivateKeyInfoData.encryptedData
471561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .clone();
472561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // pass valid array
473561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        EncryptedPrivateKeyInfo epki = new EncryptedPrivateKeyInfo("DSA",
474561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                encryptedDataCopy);
475561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // modify array passed
476561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        encryptedDataCopy[0] = (byte) 6;
477561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // check that internal state has not been affected
478561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(Arrays.equals(EncryptedPrivateKeyInfoData.encryptedData,
479561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                epki.getEncryptedData()));
480561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
481561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
482561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
483561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @tests javax/crypto/EncryptedPrivateKeyInfo(String, byte[])
484561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Checks exception order
485561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
486561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testEncryptedPrivateKeyInfoStringbyteArray6() {
487561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        //Regression for HARMONY-768
488561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
489561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new EncryptedPrivateKeyInfo("0", new byte[] {});
490561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("NoSuchAlgorithmException expected");
491561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NoSuchAlgorithmException e) {
492561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            //expected
493561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
494561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
495561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
496561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
497561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test #1 for
498561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * <code>EncryptedPrivateKeyInfo(java.security.AlgorithmParameters, byte[])
499561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * </code>
500561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * constructor <br>
501561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: creates <code>EncryptedPrivateKeyInfo</code> instance <br>
502561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test preconditions: valid parameters passed <br>
503561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Expected: must pass without any exceptions
504561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     *
505561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @throws IOException
506561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
507561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testEncryptedPrivateKeyInfoAlgorithmParametersbyteArray1()
508561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            throws IOException {
509561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
510561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        boolean performed = false;
511561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < EncryptedPrivateKeyInfoData.algName0.length; i++) {
512561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
513561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                AlgorithmParameters ap = AlgorithmParameters
514561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        .getInstance(EncryptedPrivateKeyInfoData.algName0[i][0]);
515561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // use pregenerated AlgorithmParameters encodings
516561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                ap.init(EncryptedPrivateKeyInfoData.getParametersEncoding(
517561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        EncryptedPrivateKeyInfoData.algName0[i][0]));
518561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
519561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new EncryptedPrivateKeyInfo(ap,
520561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        EncryptedPrivateKeyInfoData.encryptedData);
521561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
522561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                performed = true;
523561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (NoSuchAlgorithmException allowedFailure) {
524561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
525561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
526561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Test not performed", performed);
527561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
528561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
529561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
530561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test #2 for
531561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * <code>EncryptedPrivateKeyInfo(java.security.AlgorithmParameters, byte[])
532561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * </code>
533561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * constructor <br>
534561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: <code>NullPointerException</code>- if the specified
535561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * algorithm parameters or encrypted data is <code>null</code><br>
536561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test preconditions: pass <code>null</code> as algorithm parameters then
537561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * as encrypted data <br>
538561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Expected: <code>NullPointerException</code> in both cases
539561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     *
540561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @throws NoSuchAlgorithmException
541561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @throws IOException
542561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
543561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testEncryptedPrivateKeyInfoAlgorithmParametersbyteArray2()
544561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            throws NoSuchAlgorithmException, IOException {
545561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // 1: pass null as AlgorithmParameters
546561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
547561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new EncryptedPrivateKeyInfo((AlgorithmParameters) null,
548561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    EncryptedPrivateKeyInfoData.encryptedData);
549561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail(getName() + ": NullPointerException has not been thrown");
550561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException ok) {
551561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
552561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
553561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // 2: pass null as encrypted data
554561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
555561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            AlgorithmParameters ap = AlgorithmParameters.getInstance("DSA");
556561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // use pregenerated AlgorithmParameters encodings
557561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ap.init(EncryptedPrivateKeyInfoData.getParametersEncoding("DSA"));
558561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new EncryptedPrivateKeyInfo(ap, null);
559561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail(getName() + ": NullPointerException has not been thrown");
560561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException ok) {
561561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
562561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
563561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
564561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
565561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test #3 for
566561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * <code>EncryptedPrivateKeyInfo(java.security.AlgorithmParameters, byte[])
567561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * </code>
568561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * constructor <br>
569561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: <code>IllegalArgumentException</code>- if encrypted data is
570561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * empty, i.e. 0-length <br>
571561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test preconditions: pass empty encrypted data <br>
572561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Expected: <code>IllegalArgumentException</code>
573561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     *
574561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @throws NoSuchAlgorithmException
575561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @throws IOException
576561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
577561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testEncryptedPrivateKeyInfoAlgorithmParametersbyteArray3()
578561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            throws Exception {
579561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
580561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            AlgorithmParameters ap = AlgorithmParameters.getInstance("DSA");
581561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // use pregenerated AlgorithmParameters encodings
582561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ap.init(EncryptedPrivateKeyInfoData.getParametersEncoding("DSA"));
583561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
584561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new EncryptedPrivateKeyInfo(ap, new byte[] {});
585561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail(getName() + ": IllegalArgumentException has not been thrown");
586561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
587561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IllegalArgumentException ok) {
588561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
589561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
590561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
591561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
592561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test #4 for
593561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * <code>EncryptedPrivateKeyInfo(java.security.AlgorithmParameters, byte[])
594561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * </code>
595561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * constructor <br>
596561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: byte array is copied to prevent subsequent modification <br>
597561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test preconditions: valid array passed then modified <br>
598561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Expected: getEncryptedData(), invoked after above modification, must
599561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * return array as it was before the modification
600561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     *
601561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @throws IOException
602561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
603561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testEncryptedPrivateKeyInfoAlgorithmParametersbyteArray4()
604561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            throws Exception {
605561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        AlgorithmParameters ap = AlgorithmParameters.getInstance("DSA");
606561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // use pregenerated AlgorithmParameters encodings
607561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ap.init(EncryptedPrivateKeyInfoData.getParametersEncoding("DSA"));
608561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
609561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] encryptedDataCopy = EncryptedPrivateKeyInfoData.encryptedData.clone();
610561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // pass valid array
611561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        EncryptedPrivateKeyInfo epki = new EncryptedPrivateKeyInfo(ap,
612561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                encryptedDataCopy);
613561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
614561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // modify array passed
615561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        encryptedDataCopy[0] = (byte) 6;
616561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
617561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // check that internal state has not been affected
618561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(Arrays.equals(EncryptedPrivateKeyInfoData.encryptedData,
619561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                epki.getEncryptedData()));
620561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
621561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
622561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
623561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test #1 for <code>getAlgParameters()</code> method <br>
624561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: returns the algorithm parameters <br>
625561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test preconditions: test object created using ctor which takes encoded
626561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * form as the only parameter; encoded form passed contains algorithm
627561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * parameters encoding <br>
628561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Expected: corresponding algorithm parameters must be returned
629561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     *
630561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @throws IOException
631561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
632561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testGetAlgParameters01() throws IOException {
633561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        boolean performed = false;
634561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < EncryptedPrivateKeyInfoData.algName0.length; i++) {
635561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
636561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                EncryptedPrivateKeyInfo epki = new EncryptedPrivateKeyInfo(
637561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        EncryptedPrivateKeyInfoData
638561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                .getValidEncryptedPrivateKeyInfoEncoding(
639561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                        EncryptedPrivateKeyInfoData.algName0[i][0]));
640561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
641561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                AlgorithmParameters apar = epki.getAlgParameters();
642561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                if (apar == null) {
643561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    continue;
644561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
645561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
646561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // check that method under test returns
647561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // parameters with the same encoded form
648561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertTrue(Arrays
649561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        .equals(
650561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                EncryptedPrivateKeyInfoData
651561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                        .getParametersEncoding(EncryptedPrivateKeyInfoData.algName0[i][0]),
652561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                apar.getEncoded()));
653561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                performed = true;
654561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (NoSuchAlgorithmException allowedFailure) {
655561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
656561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
657561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Test not performed", performed);
658561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
659561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
660561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testGetAlgParameters01_01() throws Exception {
661561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] validEncodingWithUnknownAlgOID = EncryptedPrivateKeyInfoData
662561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getValidEncryptedPrivateKeyInfoEncoding("DH");
663561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // correct oid value
664561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        validEncodingWithUnknownAlgOID[18] = 0;
665561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        EncryptedPrivateKeyInfo epki = new EncryptedPrivateKeyInfo(
666561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                validEncodingWithUnknownAlgOID);
667561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
668561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull(epki.getAlgParameters());
669561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
670561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
671561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
672561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test #2 for <code>getAlgParameters()</code> method <br>
673561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: returns the algorithm parameters <br>
674561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test preconditions: test object created using ctor which takes encoded
675561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * form as the only parameter; encoded form passed does not contain
676561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * algorithm parameters encoding <br>
677561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Expected: <code>null</code> must be returned
678561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     *
679561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @throws IOException
680561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
681561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testGetAlgParameters02() throws IOException {
682561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        boolean performed = false;
683561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < EncryptedPrivateKeyInfoData.algName0.length; i++) {
684561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
685561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                EncryptedPrivateKeyInfo epki = new EncryptedPrivateKeyInfo(
686561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        EncryptedPrivateKeyInfoData
687561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                .getValidEncryptedPrivateKeyInfoEncoding(
688561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                        EncryptedPrivateKeyInfoData.algName0[i][0],
689561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                        false));
690561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
691561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // check that method under test returns null
692561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertNull(epki.getAlgParameters());
693561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
694561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                performed = true;
695561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (NoSuchAlgorithmException allowedFailure) {
696561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
697561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
698561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Test not performed", performed);
699561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
700561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
701561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
702561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test #3 for <code>getAlgParameters()</code> method <br>
703561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: returns the algorithm parameters <br>
704561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test #6 for <code>EncryptedPrivateKeyInfo(String, byte[])</code>
705561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * constructor <br>
706561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: ...This constructor will use null as the value of the
707561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * algorithm parameters. <br>
708561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test preconditions: test object created using ctor which takes algorithm
709561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * name and encrypted data as a parameters <br>
710561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Expected: <code>null</code> must be returned
711561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     *
712561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @throws IOException
713561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
714561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testGetAlgParameters03() throws IOException {
715561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        boolean performed = false;
716561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < EncryptedPrivateKeyInfoData.algName0.length; i++) {
717561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
718561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                EncryptedPrivateKeyInfo epki = new EncryptedPrivateKeyInfo(
719561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        EncryptedPrivateKeyInfoData.algName0[i][0],
720561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        EncryptedPrivateKeyInfoData.encryptedData);
721561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
722561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // check that method under test returns null
723561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // for object constructed in such a way
724561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertNull(epki.getAlgParameters());
725561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
726561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                performed = true;
727561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (NoSuchAlgorithmException allowedFailure) {
728561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
729561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
730561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Test not performed", performed);
731561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
732561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
733561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
734561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test #4 for <code>getAlgParameters()</code> method <br>
735561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: returns the algorithm parameters <br>
736561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test preconditions: test object created using ctor which takes
737561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * AlgorithmParameters and encrypted data as a parameters; <br>
738561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Expected: the same algorithm parameters as ones passed to the ctor must be
739561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * returned
740561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     *
741561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @throws IOException
742561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
743561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testGetAlgParameters04() throws IOException {
744561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        boolean performed = false;
745561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < EncryptedPrivateKeyInfoData.algName0.length; i++) {
746561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
747561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                AlgorithmParameters ap = AlgorithmParameters
748561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        .getInstance(EncryptedPrivateKeyInfoData.algName0[i][0]);
749561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // use pregenerated AlgorithmParameters encodings
750561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                ap
751561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        .init(EncryptedPrivateKeyInfoData
752561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                .getParametersEncoding(
753561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                        EncryptedPrivateKeyInfoData.algName0[i][0]));
754561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
755561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                EncryptedPrivateKeyInfo epki = new EncryptedPrivateKeyInfo(ap,
756561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        EncryptedPrivateKeyInfoData.encryptedData);
757561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
758561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // check that method under test returns
759561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // the same parameters instance
760561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertSame(ap, epki.getAlgParameters());
761561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
762561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                performed = true;
763561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (NoSuchAlgorithmException allowedFailure) {
764561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
765561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
766561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Test not performed", performed);
767561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
768561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
769561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
770561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test #1 for <code>getEncryptedData()</code> method <br>
771561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: returns the encrypted data <br>
772561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test preconditions: test object created using ctor which takes encoded
773561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * form as the only parameter; encoded form passed contains encrypted data
774561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * <br>
775561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Expected: the equivalent encrypted data must be returned
776561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     *
777561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @throws IOException
778561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
779561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testGetEncryptedData01() throws IOException {
780561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        boolean performed = false;
781561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < EncryptedPrivateKeyInfoData.algName0.length; i++) {
782561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
783561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                EncryptedPrivateKeyInfo epki = new EncryptedPrivateKeyInfo(
784561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        EncryptedPrivateKeyInfoData
785561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                .getValidEncryptedPrivateKeyInfoEncoding(
786561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                        EncryptedPrivateKeyInfoData.algName0[i][0]));
787561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
788561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // check that method under test returns
789561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // valid encrypted data
790561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertTrue(Arrays.equals(
791561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        EncryptedPrivateKeyInfoData.encryptedData, epki
792561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                .getEncryptedData()));
793561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
794561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                performed = true;
795561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (NoSuchAlgorithmException allowedFailure) {
796561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
797561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
798561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Test not performed", performed);
799561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
800561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
801561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
802561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test #2 for <code>getEncryptedData()</code> method <br>
803561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: returns the encrypted data <br>
804561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test preconditions: test object created using ctor which takes algorithm
805561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * name and encrypted data as a parameters <br>
806561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Expected: the equivalent encrypted data must be returned
807561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
808561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testGetEncryptedData02() {
809561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        boolean performed = false;
810561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < EncryptedPrivateKeyInfoData.algName0.length; i++) {
811561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
812561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                EncryptedPrivateKeyInfo epki = new EncryptedPrivateKeyInfo(
813561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        EncryptedPrivateKeyInfoData.algName0[i][0],
814561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        EncryptedPrivateKeyInfoData.encryptedData);
815561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
816561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // check that method under test returns
817561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // valid encrypted data
818561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertTrue(Arrays.equals(
819561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        EncryptedPrivateKeyInfoData.encryptedData, epki
820561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                .getEncryptedData()));
821561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
822561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                performed = true;
823561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (NoSuchAlgorithmException allowedFailure) {
824561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
825561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
826561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Test not performed", performed);
827561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
828561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
829561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
830561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test #3 for <code>getEncryptedData()</code> method <br>
831561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: returns the encrypted data <br>
832561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test preconditions: test object created using ctor which takes algorithm
833561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * parameters and encrypted data as a parameters <br>
834561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Expected: the equivalent encrypted data must be returned
835561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     *
836561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @throws IOException
837561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
838561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testGetEncryptedData03() throws IOException {
839561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        boolean performed = false;
840561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < EncryptedPrivateKeyInfoData.algName0.length; i++) {
841561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
842561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                AlgorithmParameters ap = AlgorithmParameters
843561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        .getInstance(EncryptedPrivateKeyInfoData.algName0[i][0]);
844561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // use pregenerated AlgorithmParameters encodings
845561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                ap.init(EncryptedPrivateKeyInfoData.getParametersEncoding(
846561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        EncryptedPrivateKeyInfoData.algName0[i][0]));
847561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
848561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                EncryptedPrivateKeyInfo epki = new EncryptedPrivateKeyInfo(ap,
849561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        EncryptedPrivateKeyInfoData.encryptedData);
850561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
851561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // check that method under test returns
852561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // valid encrypted data
853561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertTrue(Arrays.equals(
854561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        EncryptedPrivateKeyInfoData.encryptedData, epki
855561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                .getEncryptedData()));
856561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
857561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                performed = true;
858561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (NoSuchAlgorithmException allowedFailure) {
859561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
860561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
861561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Test not performed", performed);
862561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
863561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
864561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
865561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test #4 for <code>getEncryptedData()</code> method <br>
866561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: returns a new array each time this method is called <br>
867561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test preconditions: test object created using ctor which takes algorithm
868561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * name and encrypted data as a parameters <br>
869561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Expected: refs to encrypted data byte array passed to the ctor and
870561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * returned by the method under test must be different
871561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
872561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testGetEncryptedData04() {
873561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        boolean performed = false;
874561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < EncryptedPrivateKeyInfoData.algName0.length; i++) {
875561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
876561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                EncryptedPrivateKeyInfo epki = new EncryptedPrivateKeyInfo(
877561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        EncryptedPrivateKeyInfoData.algName0[i][0],
878561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        EncryptedPrivateKeyInfoData.encryptedData);
879561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
880561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // check that method under test returns
881561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // new array each time
882561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                byte[] ecd1 = epki.getEncryptedData();
883561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                byte[] ecd2 = epki.getEncryptedData();
884561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertNotSame(EncryptedPrivateKeyInfoData.encryptedData, ecd1);
885561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertNotSame(EncryptedPrivateKeyInfoData.encryptedData, ecd2);
886561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertNotSame(ecd1, ecd2);
887561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
888561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                performed = true;
889561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (NoSuchAlgorithmException allowedFailure) {
890561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
891561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
892561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Test not performed", performed);
893561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
894561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
895561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
896561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test #1 for <code>getEncoded()</code> method <br>
897561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: returns the ASN.1 encoding of this object <br>
898561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test preconditions: test object created using ctor which takes encoded
899561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * form as the only parameter <br>
900561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Expected: equivalent encoded form must be returned
901561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     *
902561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @throws IOException
903561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
904561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testGetEncoded01() throws IOException {
905561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        boolean performed = false;
906561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < EncryptedPrivateKeyInfoData.algName0.length; i++) {
907561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
908561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                byte[] enc = EncryptedPrivateKeyInfoData
909561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        .getValidEncryptedPrivateKeyInfoEncoding(
910561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                EncryptedPrivateKeyInfoData.algName0[i][0]);
911561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                EncryptedPrivateKeyInfo epki = new EncryptedPrivateKeyInfo(enc);
912561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
913561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // check that method under test returns
914561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // valid encoded form
915561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertTrue(Arrays.equals(enc, epki.getEncoded()));
916561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
917561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                performed = true;
918561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (NoSuchAlgorithmException allowedFailure) {
919561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
920561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
921561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Test not performed", performed);
922561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
923561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
924561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
925561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test #2 for <code>getEncoded()</code> method <br>
926561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: returns the ASN.1 encoding of this object <br>
927561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test preconditions: test object created using ctor which takes algorithm
928561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * name and encrypted data as a parameters <br>
929561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Expected: equivalent encoded form (without alg params) must be returned
930561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     *
931561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @throws IOException
932561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
933561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testGetEncoded02() throws IOException {
934561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        boolean performed = false;
935561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < EncryptedPrivateKeyInfoData.algName0.length; i++) {
936561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
937561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                EncryptedPrivateKeyInfo epki = new EncryptedPrivateKeyInfo(
938561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        EncryptedPrivateKeyInfoData.algName0[i][0],
939561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        EncryptedPrivateKeyInfoData.encryptedData);
940561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
941561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // check that method under test returns
942561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // valid encoded form
943561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                byte[] refEnc = EncryptedPrivateKeyInfoData
944561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        .getValidEncryptedPrivateKeyInfoEncoding(
945561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                EncryptedPrivateKeyInfoData.algName0[i][0],
946561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                false);
947561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                //                System.out.println(Array.toString(refEnc, " "));
948561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                byte[] actEnc = epki.getEncoded();
949561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                //                System.out.println(Array.toString(actEnc, " "));
950561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertTrue(Arrays.equals(refEnc, actEnc));
951561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
952561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                performed = true;
953561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (NoSuchAlgorithmException allowedFailure) {
954561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
955561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
956561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Test not performed", performed);
957561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
958561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
959561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
960561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test #3 for <code>getEncoded()</code> method <br>
961561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: returns the ASN.1 encoding of this object <br>
962561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test preconditions: test object created using ctor which takes algorithm
963561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * name and encrypted data as a parameters <br>
964561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Expected: equivalent encoded form (without alg params) must be returned
965561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     *
966561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @throws IOException
967561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
968561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testGetEncoded03() throws IOException {
969561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        boolean performed = false;
970561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < EncryptedPrivateKeyInfoData.algName0.length; i++) {
971561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
972561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                AlgorithmParameters ap = AlgorithmParameters
973561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        .getInstance(EncryptedPrivateKeyInfoData.algName0[i][0]);
974561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // use pregenerated AlgorithmParameters encodings
975561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                ap.init(EncryptedPrivateKeyInfoData.getParametersEncoding(
976561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        EncryptedPrivateKeyInfoData.algName0[i][0]));
977561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
978561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                EncryptedPrivateKeyInfo epki = new EncryptedPrivateKeyInfo(ap,
979561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        EncryptedPrivateKeyInfoData.encryptedData);
980561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
981561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // check that method under test returns
982561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // valid encoded form
983561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertTrue(Arrays.equals(
984561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        EncryptedPrivateKeyInfoData
985561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            .getValidEncryptedPrivateKeyInfoEncoding(
986561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                EncryptedPrivateKeyInfoData.algName0[i][0]),
987561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                epki.getEncoded()));
988561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
989561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                performed = true;
990561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (NoSuchAlgorithmException allowedFailure) {
991561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
992561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
993561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Test not performed", performed);
994561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
995561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
996561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
997561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test #4 for <code>getEncoded()</code> method <br>
998561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: returns a new array each time this method is called <br>
999561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test preconditions: test object created using ctor which takes algorithm
1000561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * name and encrypted data as a parameters <br>
1001561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Expected: several refs to byte array returned by the method under test
1002561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * must be different
1003561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     *
1004561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @throws IOException
1005561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1006561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testGetEncoded04() throws IOException {
1007561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        boolean performed = false;
1008561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < EncryptedPrivateKeyInfoData.algName0.length; i++) {
1009561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
1010561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                EncryptedPrivateKeyInfo epki = new EncryptedPrivateKeyInfo(
1011561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        EncryptedPrivateKeyInfoData.algName0[i][0],
1012561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        EncryptedPrivateKeyInfoData.encryptedData);
1013561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1014561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // check that method under test returns
1015561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // new array each time
1016561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                byte[] ec1 = epki.getEncoded();
1017561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                byte[] ec2 = epki.getEncoded();
1018561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                byte[] ec3 = epki.getEncoded();
1019561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertNotSame(ec1, ec2);
1020561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertNotSame(ec2, ec3);
1021561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertNotSame(ec1, ec3);
1022561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1023561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                performed = true;
1024561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (NoSuchAlgorithmException allowedFailure) {
1025561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1026561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1027561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Test not performed", performed);
1028561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1029561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1030561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testGetKeySpecCipher01() {
1031561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        boolean performed = false;
1032561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < EncryptedPrivateKeyInfoData.algName0.length; i++) {
1033561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
1034561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                EncryptedPrivateKeyInfo epki = new EncryptedPrivateKeyInfo(
1035561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        EncryptedPrivateKeyInfoData.algName0[i][0],
1036561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        EncryptedPrivateKeyInfoData.encryptedData);
1037561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1038561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                try {
1039561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1040561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    // check that method under test throws NPE
1041561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    epki.getKeySpec((Cipher) null);
1042561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    fail(getName() + "NullPointerException has not been thrown");
1043561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1044561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } catch (NullPointerException ok) {
1045561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } catch (InvalidKeySpecException e) {
1046561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    fail(getName() + "Unexpected exception: " + e);
1047561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
1048561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1049561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                performed = true;
1050561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (NoSuchAlgorithmException allowedFailure) {
1051561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1052561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1053561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Test not performed", performed);
1054561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1055561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1056561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
1057561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Encrypted data contains valid PKCS8 key info encoding
1058561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1059561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void test_ROUNDTRIP_GetKeySpecCipher01() {
1060561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        boolean performed = false;
1061561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1062561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < algName.length; i++) {
1063561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
1064561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // generate test data
1065561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                TestDataGenerator g = new TestDataGenerator(algName[i][0],
1066561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        algName[i][1], privateKeyInfo, null);
1067561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1068561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // create test object
1069561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                EncryptedPrivateKeyInfo epki;
1070561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                if (g.ap() == null) {
1071561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    epki = new EncryptedPrivateKeyInfo(algName[i][0], g.ct());
1072561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } else {
1073561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    epki = new EncryptedPrivateKeyInfo(g.ap(), g.ct());
1074561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
1075561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1076561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // call methods under test
1077561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                try {
1078561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1079561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    PKCS8EncodedKeySpec eks = epki.getKeySpec(g.c());
1080561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1081561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    if (!Arrays.equals(privateKeyInfo, eks.getEncoded())) {
1082561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        fail(algName[i][0] + " != " + algName[i][1]);
1083561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    }
1084561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } catch (InvalidKeySpecException e) {
1085561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    fail(algName[i][0] + ", " + algName[i][1] + e + "\n");
1086561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
1087561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                performed = true;
1088561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1089561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (TestDataGenerator.AllowedFailure allowedFailure) {
1090561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (NoSuchAlgorithmException allowed) {
1091561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1092561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1093561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Test not performed", performed);
1094561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1095561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1096561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
1097561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Encrypted data contains invalid PKCS8 key info encoding
1098561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1099561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void test_ROUNDTRIP_GetKeySpecCipher02() {
1100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        boolean performed = false;
1101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < algName.length; i++) {
1102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
1103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // generate test data
1104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                TestDataGenerator g = new TestDataGenerator(algName[i][0],
1105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        algName[i][1], privateKeyInfoDamaged, null);
1106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // create test object
1108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                EncryptedPrivateKeyInfo epki;
1109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                if (g.ap() == null) {
1110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    epki = new EncryptedPrivateKeyInfo(algName[i][0], g.ct());
1111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } else {
1112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    epki = new EncryptedPrivateKeyInfo(g.ap(), g.ct());
1113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
1114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // call methods under test
1116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                try {
1117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    epki.getKeySpec(g.c());
1118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    // must not get here because decrypted data does
1120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    // not represent valid PKCS8 encoding
1121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    fail(algName[i][0] + ", " + algName[i][1]);
1122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } catch (InvalidKeySpecException ok) {
1123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
1124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                performed = true;
1126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (TestDataGenerator.AllowedFailure allowedFailure) {
1127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (NoSuchAlgorithmException allowedFailure) {
1128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Test not performed", performed);
1131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testGetKeySpecKey01() {
1134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        boolean performed = false;
1135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < EncryptedPrivateKeyInfoData.algName0.length; i++) {
1136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
1137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                EncryptedPrivateKeyInfo epki = new EncryptedPrivateKeyInfo(
1138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        EncryptedPrivateKeyInfoData.algName0[i][0],
1139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        EncryptedPrivateKeyInfoData.encryptedData);
1140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                try {
1142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    // check that method under test throws NPE
1144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    epki.getKeySpec((Key) null);
1145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    fail(getName() + "NullPointerException has not been thrown");
1146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } catch (NullPointerException ok) {
1148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } catch (InvalidKeyException e) {
1149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    fail(getName() + "Unexpected exception: " + e);
1150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
1151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                performed = true;
1153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (NoSuchAlgorithmException allowedFailure) {
1154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Test not performed", performed);
1157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
1160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Encrypted data contains valid PKCS8 key info encoding
1161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void test_ROUNDTRIP_GetKeySpecKey01() {
1163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        boolean performed = false;
1164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < algName.length; i++) {
1165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
1166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // generate test data
1167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                TestDataGenerator g = new TestDataGenerator(algName[i][0],
1168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        algName[i][1], privateKeyInfo, null);
1169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // create test object
1171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                EncryptedPrivateKeyInfo epki;
1172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                if (g.ap() == null) {
1173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    epki = new EncryptedPrivateKeyInfo(algName[i][0], g.ct());
1174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } else {
1175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    epki = new EncryptedPrivateKeyInfo(g.ap(), g.ct());
1176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
1177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                try {
1179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    PKCS8EncodedKeySpec eks = epki
1180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            .getKeySpec(g.pubK() == null ? g.k() : g.pubK());
1181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    if (!Arrays.equals(privateKeyInfo, eks.getEncoded())) {
1183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        fail(algName[i][0] + " != " + algName[i][1]);
1184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    }
1185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } catch (InvalidKeyException e) {
1186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    fail(algName[i][0] + ", " + algName[i][1] + ": " + e);
1187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
1188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                performed = true;
1190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (TestDataGenerator.AllowedFailure allowedFailure) {
1191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (NoSuchAlgorithmException allowedFailure) {
1192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Test not performed", performed);
1195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
1198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Encrypted data contains invalid PKCS8 key info encoding
1199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void test_ROUNDTRIP_GetKeySpecKey02() {
1201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        boolean performed = false;
1202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < algName.length; i++) {
1203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
1204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // generate test data
1205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                TestDataGenerator g = new TestDataGenerator(algName[i][0],
1206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        algName[i][1], privateKeyInfoDamaged, null);
1207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // create test object
1209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                EncryptedPrivateKeyInfo epki;
1210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                if (g.ap() == null) {
1211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    epki = new EncryptedPrivateKeyInfo(algName[i][0], g.ct());
1212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } else {
1213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    epki = new EncryptedPrivateKeyInfo(g.ap(), g.ct());
1214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
1215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                try {
1217561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    epki.getKeySpec(g.pubK() == null ? g.k() : g.pubK());
1218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    fail(algName[i][0] + ", " + algName[i][1]);
1219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } catch (InvalidKeyException e) {
1220561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
1221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                performed = true;
1223561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (TestDataGenerator.AllowedFailure allowedFailure) {
1224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (NoSuchAlgorithmException allowedFailure) {
1225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1226561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Test not performed", performed);
1228561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1229561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testGetKeySpecKeyString01() throws Exception {
1231561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        boolean performed = false;
1232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < EncryptedPrivateKeyInfoData.algName0.length; i++) {
1233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
1234561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                EncryptedPrivateKeyInfo epki = new EncryptedPrivateKeyInfo(
1235561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        EncryptedPrivateKeyInfoData.algName0[i][0],
1236561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        EncryptedPrivateKeyInfoData.encryptedData);
1237561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1238561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                try {
1239561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1240561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    // check that method under test throws NPE
1241561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    epki.getKeySpec((Key) null, "SomeProviderName");
1242561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    fail(getName() + "NullPointerException has not been thrown");
1243561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1244561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } catch (NullPointerException ok) {
1245561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
1246561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1247561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                try {
1248561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1249561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    // check that method under test throws NPE
1250561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    epki.getKeySpec(new Key() {
1251561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        public String getAlgorithm() {
1252561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            return "alg";
1253561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        }
1254561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1255561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        public String getFormat() {
1256561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            return "fmt";
1257561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        }
1258561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1259561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        public byte[] getEncoded() {
1260561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            return new byte[] {};
1261561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        }
1262561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    }, (String) null);
1263561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1264561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    fail(getName() + "NullPointerException has not been thrown");
1265561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1266561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } catch (NullPointerException ok) {
1267561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
1268561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1269561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                performed = true;
1270561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (NoSuchAlgorithmException allowedFailure) {
1271561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1272561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1273561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Test not performed", performed);
1274561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1275561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1276561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
1277561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Encrypted data contains valid PKCS8 key info encoding
1278561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1279561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void test_ROUNDTRIP_GetKeySpecKeyString01() throws Exception {
1280561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        boolean performed = false;
1281561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < algName.length; i++) {
1282561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            for (int l = 0; l < provider.length; l++) {
1283561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                if (provider[l] == null) {
1284561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    continue;
1285561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
1286561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                TestDataGenerator g;
1287561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                try {
1288561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    // generate test data
1289561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    g = new TestDataGenerator(algName[i][0], algName[i][1],
1290561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            privateKeyInfo, provider[l]);
1291561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } catch (TestDataGenerator.AllowedFailure allowedFailure) {
1292561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    continue;
1293561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
1294561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1295561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                try {
1296561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    // create test object
1297561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    EncryptedPrivateKeyInfo epki;
1298561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    if (g.ap() == null) {
1299561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        epki = new EncryptedPrivateKeyInfo(algName[i][0], g
1300561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                .ct());
1301561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    } else {
1302561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        epki = new EncryptedPrivateKeyInfo(g.ap(), g.ct());
1303561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    }
1304561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    try {
1305561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1306561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        PKCS8EncodedKeySpec eks = epki.getKeySpec(
1307561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                g.pubK() == null ? g.k() : g.pubK(),
1308561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                provider[l].getName());
1309561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1310561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        if (!Arrays.equals(privateKeyInfo, eks.getEncoded())) {
1311561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            fail(algName[i][0] + " != " + algName[i][1]);
1312561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        }
1313561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    } catch (InvalidKeyException e) {
1314561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        fail(algName[i][0] + ", " + algName[i][1] + ": " + e);
1315561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    }
1316561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1317561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    performed = true;
1318561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } catch (NoSuchAlgorithmException allowedFailure) {
1319561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
1320561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1321561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1322561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Test not performed", performed);
1323561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1324561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1325561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
1326561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Encrypted data contains invalid PKCS8 key info encoding
1327561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1328561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void test_ROUNDTRIP_GetKeySpecKeyString02() throws Exception {
1329561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        boolean performed = false;
1330561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < algName.length; i++) {
1331561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            for (int l = 0; l < provider.length; l++) {
1332561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                if (provider[l] == null) {
1333561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    continue;
1334561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
1335561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                TestDataGenerator g;
1336561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                try {
1337561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    // generate test data
1338561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    g = new TestDataGenerator(algName[i][0], algName[i][1],
1339561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            privateKeyInfoDamaged, provider[l]);
1340561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } catch (TestDataGenerator.AllowedFailure allowedFailure) {
1341561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    continue;
1342561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
1343561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1344561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                try {
1345561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    // create test object
1346561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    EncryptedPrivateKeyInfo epki;
1347561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    if (g.ap() == null) {
1348561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        epki = new EncryptedPrivateKeyInfo(algName[i][0], g
1349561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                .ct());
1350561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    } else {
1351561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        epki = new EncryptedPrivateKeyInfo(g.ap(), g.ct());
1352561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    }
1353561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1354561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    try {
1355561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1356561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        epki.getKeySpec(g.pubK() == null ? g.k() : g.pubK(),
1357561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                provider[l].getName());
1358561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1359561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        fail(algName[i][0] + ", " + algName[i][1]);
1360561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1361561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    } catch (InvalidKeyException e) {
1362561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    }
1363561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1364561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    performed = true;
1365561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } catch (NoSuchAlgorithmException allowedFailure) {
1366561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
1367561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1368561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1369561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Test not performed", performed);
1370561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1371561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1372561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testGetKeySpecKeyProvider01() throws Exception {
1373561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        boolean performed = false;
1374561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1375561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < EncryptedPrivateKeyInfoData.algName0.length; i++) {
1376561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
1377561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                EncryptedPrivateKeyInfo epki = new EncryptedPrivateKeyInfo(
1378561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        EncryptedPrivateKeyInfoData.algName0[i][0],
1379561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        EncryptedPrivateKeyInfoData.encryptedData);
1380561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1381561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                try {
1382561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1383561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    // check that method under test throws NPE
1384561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    epki.getKeySpec((Key) null, (Provider) null);
1385561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    fail(getName() + "NullPointerException has not been thrown");
1386561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } catch (NullPointerException ok) {
1387561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
1388561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1389561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                try {
1390561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1391561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    // check that method under test throws NPE
1392561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    epki.getKeySpec(new Key() {
1393561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        public String getAlgorithm() {
1394561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            return "alg";
1395561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        }
1396561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1397561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        public String getFormat() {
1398561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            return "fmt";
1399561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        }
1400561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1401561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        public byte[] getEncoded() {
1402561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            return new byte[] {};
1403561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        }
1404561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    }, (Provider) null);
1405561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1406561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    fail(getName() + "NullPointerException has not been thrown");
1407561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } catch (NullPointerException ok) {
1408561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
1409561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1410561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                performed = true;
1411561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (NoSuchAlgorithmException allowedFailure) {
1412561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1413561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1414561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Test not performed", performed);
1415561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1416561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1417561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
1418561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Encrypted data contains valid PKCS8 key info encoding
1419561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1420561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void test_ROUNDTRIP_GetKeySpecKeyProvider01() {
1421561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        boolean performed = false;
1422561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1423561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < algName.length; i++) {
1424561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            for (int l = 0; l < provider.length; l++) {
1425561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                if (provider[l] == null) {
1426561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    continue;
1427561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
1428561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                TestDataGenerator g;
1429561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                try {
1430561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    // generate test data
1431561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    g = new TestDataGenerator(algName[i][0], algName[i][1],
1432561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            privateKeyInfo, provider[l]);
1433561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } catch (TestDataGenerator.AllowedFailure allowedFailure) {
1434561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    continue;
1435561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
1436561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                try {
1437561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    // create test object
1438561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    EncryptedPrivateKeyInfo epki;
1439561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    if (g.ap() == null) {
1440561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        epki = new EncryptedPrivateKeyInfo(algName[i][0], g
1441561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                .ct());
1442561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    } else {
1443561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        epki = new EncryptedPrivateKeyInfo(g.ap(), g.ct());
1444561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    }
1445561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    try {
1446561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1447561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        PKCS8EncodedKeySpec eks = epki.getKeySpec(
1448561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                g.pubK() == null ? g.k() : g.pubK(),
1449561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                provider[l]);
1450561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1451561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        if (!Arrays.equals(privateKeyInfo, eks.getEncoded())) {
1452561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            fail(algName[i][0] + " != " + algName[i][1]);
1453561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        }
1454561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    } catch (InvalidKeyException e) {
1455561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        fail(algName[i][0] + ", " + algName[i][1] + ": " + e);
1456561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    }
1457561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    performed = true;
1458561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1459561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } catch (NoSuchAlgorithmException allowedFailure) {
1460561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
1461561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1462561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1463561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Test not performed", performed);
1464561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1465561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1466561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
1467561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Encrypted data contains invalid PKCS8 key info encoding
1468561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1469561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void test_ROUNDTRIP_GetKeySpecKeyProvider02() {
1470561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        boolean performed = false;
1471561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1472561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i = 0; i < algName.length; i++) {
1473561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            for (int l = 0; l < provider.length; l++) {
1474561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                if (provider[l] == null) {
1475561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    continue;
1476561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
1477561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                TestDataGenerator g;
1478561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                try {
1479561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    // generate test data
1480561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    g = new TestDataGenerator(algName[i][0], algName[i][1],
1481561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            privateKeyInfoDamaged, provider[l]);
1482561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } catch (TestDataGenerator.AllowedFailure allowedFailure) {
1483561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    continue;
1484561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
1485561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1486561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                try {
1487561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    // create test object
1488561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    EncryptedPrivateKeyInfo epki;
1489561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    if (g.ap() == null) {
1490561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        epki = new EncryptedPrivateKeyInfo(algName[i][0], g
1491561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                .ct());
1492561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    } else {
1493561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        epki = new EncryptedPrivateKeyInfo(g.ap(), g.ct());
1494561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    }
1495561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    try {
1496561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1497561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        epki.getKeySpec(g.pubK() == null ? g.k() : g.pubK(),
1498561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                provider[l]);
1499561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1500561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        fail(algName[i][0] + ", " + algName[i][1]);
1501561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1502561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    } catch (InvalidKeyException e) {
1503561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    }
1504561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    performed = true;
1505561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } catch (NoSuchAlgorithmException allowedFailure) {
1506561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
1507561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1508561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1509561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Test not performed", performed);
1510561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1511561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1512561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public static class TestDataGenerator {
1513561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1514561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public static class AllowedFailure extends Exception {
1515561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            AllowedFailure(String msg) {
1516561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                super(msg);
1517561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1518561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1519561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1520561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        private Cipher c = null;
1521561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1522561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        private Key k = null, pubK = null;
1523561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1524561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        private AlgorithmParameters ap = null;
1525561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1526561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] ct;
1527561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1528561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public TestDataGenerator(String algName, String transformation,
1529561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                byte[] privateKeyInfo, Provider provider) throws AllowedFailure {
1530561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
1531561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                c = (provider == null) ? Cipher
1532561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        .getInstance(transformation != null ? transformation
1533561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                : algName) : Cipher.getInstance(
1534561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        transformation != null ? transformation : algName,
1535561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        provider);
1536561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (NoSuchAlgorithmException e) {
1537561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                throw new AllowedFailure(e.getMessage());
1538561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (NoSuchPaddingException e) {
1539561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                throw new AllowedFailure(e.getMessage());
1540561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1541561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1542561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
1543561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                KeyGenerator kg = (provider == null) ? KeyGenerator
1544561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        .getInstance(algName) : KeyGenerator.getInstance(
1545561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        algName, provider);
1546561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                k = kg.generateKey();
1547561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (NoSuchAlgorithmException e) {
1548561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1549561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1550561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (k == null) {
1551561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                try {
1552561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    KeyPairGenerator kpg = (provider == null) ? KeyPairGenerator
1553561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            .getInstance(algName)
1554561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            : KeyPairGenerator.getInstance(algName, provider);
1555561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    KeyPair kp = kpg.genKeyPair();
1556561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    k = kp.getPrivate();
1557561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    pubK = kp.getPublic();
1558561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } catch (NoSuchAlgorithmException e) {
1559561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
1560561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1561561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1562561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            PBEParameterSpec pbeParamSpec = null;
1563561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (k == null) {
1564561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                try {
1565561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    pbeParamSpec = new PBEParameterSpec(new byte[] { 1, 2, 3,
1566561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            4, 5, 6, 7, 8 }, 10);
1567561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    SecretKeyFactory skf = (provider == null) ? SecretKeyFactory
1568561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            .getInstance(algName)
1569561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            : SecretKeyFactory.getInstance(algName, provider);
1570561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    PBEKeySpec ks = new PBEKeySpec("12345678".toCharArray());
1571561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    try {
1572561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        k = skf.generateSecret(ks);
1573561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    } catch (InvalidKeySpecException e) {
1574561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        throw new AllowedFailure(e.getMessage());
1575561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    }
1576561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1577561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } catch (NoSuchAlgorithmException e) {
1578561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    throw new AllowedFailure(e.getMessage());
1579561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
1580561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1581561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1582561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
1583561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                if (pbeParamSpec == null) {
1584561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    c.init(Cipher.ENCRYPT_MODE, k);
1585561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } else {
1586561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    c.init(Cipher.ENCRYPT_MODE, k, pbeParamSpec);
1587561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
1588561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (InvalidKeyException e) {
1589561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                throw new AllowedFailure(e.getMessage());
1590561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (SecurityException e) {
1591561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                throw new AllowedFailure(e.getMessage());
1592561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (InvalidAlgorithmParameterException e) {
1593561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                throw new AllowedFailure(e.getMessage());
1594561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1595561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1596561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ap = c.getParameters();
1597561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1598561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
1599561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                ct = c.doFinal(privateKeyInfo);
1600561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (IllegalStateException e) {
1601561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                throw new AllowedFailure(e.getMessage());
1602561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (IllegalBlockSizeException e) {
1603561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                throw new AllowedFailure(e.getMessage());
1604561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (BadPaddingException e) {
1605561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                throw new AllowedFailure(e.getMessage());
1606561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (RuntimeException e) {
1607561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                throw new AllowedFailure(e.getMessage());
1608561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1609561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1610561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
1611561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // try to convert pbeParamSpec->ap
1612561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                if (pbeParamSpec != null) {
1613561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    try {
1614561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        ap = (provider == null) ? AlgorithmParameters
1615561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                .getInstance(algName) : AlgorithmParameters
1616561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                .getInstance(algName, provider);
1617561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        ap.init(pbeParamSpec);
1618561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        pbeParamSpec = null;
1619561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    } catch (NoSuchAlgorithmException e) {
1620561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        // couldn't convert
1621561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        throw new AllowedFailure(e.getMessage());
1622561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    } catch (InvalidParameterSpecException e) {
1623561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        // couldn't convert
1624561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        throw new AllowedFailure(e.getMessage());
1625561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    }
1626561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
1627561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1628561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                if (ap == null) {
1629561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    c.init(Cipher.DECRYPT_MODE, pubK == null ? k : pubK);
1630561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } else {
1631561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    c.init(Cipher.DECRYPT_MODE, pubK == null ? k : pubK, ap);
1632561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
1633561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1634561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (InvalidKeyException e) {
1635561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                throw new AllowedFailure(e.getMessage());
1636561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (SecurityException e) {
1637561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                throw new AllowedFailure(e.getMessage());
1638561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (InvalidAlgorithmParameterException e) {
1639561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                throw new AllowedFailure(e.getMessage());
1640561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1641561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1642561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1643561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public Key k() {
1644561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return k;
1645561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1646561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1647561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public Key pubK() {
1648561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return pubK;
1649561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1650561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1651561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public Cipher c() {
1652561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return c;
1653561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1654561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1655561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public byte[] ct() {
1656561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return ct;
1657561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1658561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1659561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public AlgorithmParameters ap() {
1660561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return ap;
1661561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1662561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1663561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1664561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // valid PrivateKeyInfo encoding
1665561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static final byte[] privateKeyInfo = { (byte) 0x30, (byte) 0x82,
1666561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x02, (byte) 0x77, (byte) 0x02, (byte) 0x01, (byte) 0x00,
1667561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x30, (byte) 0x0d, (byte) 0x06, (byte) 0x09, (byte) 0x2a,
1668561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x86, (byte) 0x48, (byte) 0x86, (byte) 0xf7, (byte) 0x0d,
1669561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x01, (byte) 0x01, (byte) 0x01, (byte) 0x05, (byte) 0x00,
1670561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x04, (byte) 0x82, (byte) 0x02, (byte) 0x61, (byte) 0x30,
1671561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x82, (byte) 0x02, (byte) 0x5d, (byte) 0x02, (byte) 0x01,
1672561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x00, (byte) 0x02, (byte) 0x81, (byte) 0x81, (byte) 0x00,
1673561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xb2, (byte) 0x4a, (byte) 0x9b, (byte) 0x5b, (byte) 0xba,
1674561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x01, (byte) 0xc0, (byte) 0xcd, (byte) 0x65, (byte) 0x09,
1675561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x63, (byte) 0x70, (byte) 0x0b, (byte) 0x5a, (byte) 0x1b,
1676561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x92, (byte) 0x08, (byte) 0xf8, (byte) 0x55, (byte) 0x5e,
1677561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x7c, (byte) 0x1b, (byte) 0x50, (byte) 0x17, (byte) 0xec,
1678561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x44, (byte) 0x4c, (byte) 0x58, (byte) 0x42, (byte) 0x2b,
1679561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x41, (byte) 0x09, (byte) 0x59, (byte) 0xf2, (byte) 0xe1,
1680561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x5d, (byte) 0x43, (byte) 0x71, (byte) 0x4d, (byte) 0x92,
1681561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x03, (byte) 0x1d, (byte) 0xb6, (byte) 0x6c, (byte) 0x7f,
1682561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x5d, (byte) 0x48, (byte) 0xcd, (byte) 0x17, (byte) 0xec,
1683561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xd7, (byte) 0x4c, (byte) 0x39, (byte) 0xb1, (byte) 0x7b,
1684561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xe2, (byte) 0xbf, (byte) 0x96, (byte) 0x77, (byte) 0xbe,
1685561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xd0, (byte) 0xa0, (byte) 0xf0, (byte) 0x2d, (byte) 0x6b,
1686561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x24, (byte) 0xaa, (byte) 0x14, (byte) 0xba, (byte) 0x82,
1687561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x79, (byte) 0x10, (byte) 0x9b, (byte) 0x16, (byte) 0x68,
1688561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x47, (byte) 0x81, (byte) 0x54, (byte) 0xa2, (byte) 0xfa,
1689561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x91, (byte) 0x9e, (byte) 0x0a, (byte) 0x2a, (byte) 0x53,
1690561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xa6, (byte) 0xe7, (byte) 0x9e, (byte) 0x7d, (byte) 0x29,
1691561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x33, (byte) 0xd8, (byte) 0x05, (byte) 0xfc, (byte) 0x02,
1692561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x3f, (byte) 0xbd, (byte) 0xc7, (byte) 0x6e, (byte) 0xed,
1693561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xaa, (byte) 0x30, (byte) 0x6c, (byte) 0x5f, (byte) 0x52,
1694561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xed, (byte) 0x35, (byte) 0x65, (byte) 0x4b, (byte) 0x0e,
1695561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xc8, (byte) 0xa7, (byte) 0x12, (byte) 0x10, (byte) 0x56,
1696561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x37, (byte) 0xaf, (byte) 0x11, (byte) 0xfa, (byte) 0x21,
1697561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x0e, (byte) 0x99, (byte) 0xff, (byte) 0xfa, (byte) 0x8c,
1698561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x65, (byte) 0x8e, (byte) 0x6d, (byte) 0x02, (byte) 0x03,
1699561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x01, (byte) 0x00, (byte) 0x01, (byte) 0x02, (byte) 0x81,
1700561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x80, (byte) 0x78, (byte) 0x41, (byte) 0x72, (byte) 0x40,
1701561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x90, (byte) 0x59, (byte) 0x96, (byte) 0x5d, (byte) 0xf3,
1702561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x84, (byte) 0x3d, (byte) 0x99, (byte) 0xd9, (byte) 0x4e,
1703561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x51, (byte) 0xc2, (byte) 0x52, (byte) 0x62, (byte) 0x8d,
1704561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xd2, (byte) 0x49, (byte) 0x0b, (byte) 0x73, (byte) 0x1e,
1705561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x6f, (byte) 0xb2, (byte) 0x31, (byte) 0x7c, (byte) 0x66,
1706561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x45, (byte) 0x1e, (byte) 0x7c, (byte) 0xdc, (byte) 0x3a,
1707561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xc2, (byte) 0x5f, (byte) 0x51, (byte) 0x9a, (byte) 0x1e,
1708561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xa4, (byte) 0x19, (byte) 0x8d, (byte) 0xf4, (byte) 0xf9,
1709561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x81, (byte) 0x7e, (byte) 0xbe, (byte) 0x17, (byte) 0xf7,
1710561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xc7, (byte) 0x3c, (byte) 0x00, (byte) 0xa1, (byte) 0xf9,
1711561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x60, (byte) 0x82, (byte) 0x34, (byte) 0x8f, (byte) 0x9c,
1712561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xfd, (byte) 0x0b, (byte) 0x63, (byte) 0x42, (byte) 0x1b,
1713561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x7f, (byte) 0x45, (byte) 0xf1, (byte) 0x31, (byte) 0xc3,
1714561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x63, (byte) 0x47, (byte) 0x5c, (byte) 0xc1, (byte) 0xb2,
1715561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x5f, (byte) 0x57, (byte) 0xee, (byte) 0x02, (byte) 0x9f,
1716561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x5e, (byte) 0x08, (byte) 0x48, (byte) 0xba, (byte) 0x74,
1717561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xba, (byte) 0x81, (byte) 0xb7, (byte) 0x30, (byte) 0xac,
1718561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x4c, (byte) 0x01, (byte) 0x35, (byte) 0xce, (byte) 0x46,
1719561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x47, (byte) 0x8c, (byte) 0xe4, (byte) 0x62, (byte) 0x36,
1720561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x1a, (byte) 0x65, (byte) 0x0e, (byte) 0x33, (byte) 0x56,
1721561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xf9, (byte) 0xb7, (byte) 0xa0, (byte) 0xc4, (byte) 0xb6,
1722561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x82, (byte) 0x55, (byte) 0x7d, (byte) 0x36, (byte) 0x55,
1723561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xc0, (byte) 0x52, (byte) 0x5e, (byte) 0x35, (byte) 0x54,
1724561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xbd, (byte) 0x97, (byte) 0x01, (byte) 0x00, (byte) 0xbf,
1725561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x10, (byte) 0xdc, (byte) 0x1b, (byte) 0x51, (byte) 0x02,
1726561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x41, (byte) 0x00, (byte) 0xe7, (byte) 0x68, (byte) 0x03,
1727561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x3e, (byte) 0x21, (byte) 0x64, (byte) 0x68, (byte) 0x24,
1728561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x7b, (byte) 0xd0, (byte) 0x31, (byte) 0xa0, (byte) 0xa2,
1729561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xd9, (byte) 0x87, (byte) 0x6d, (byte) 0x79, (byte) 0x81,
1730561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x8f, (byte) 0x8f, (byte) 0x2d, (byte) 0x7a, (byte) 0x95,
1731561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x2e, (byte) 0x55, (byte) 0x9f, (byte) 0xd7, (byte) 0x86,
1732561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x29, (byte) 0x93, (byte) 0xbd, (byte) 0x04, (byte) 0x7e,
1733561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x4f, (byte) 0xdb, (byte) 0x56, (byte) 0xf1, (byte) 0x75,
1734561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xd0, (byte) 0x4b, (byte) 0x00, (byte) 0x3a, (byte) 0xe0,
1735561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x26, (byte) 0xf6, (byte) 0xab, (byte) 0x9e, (byte) 0x0b,
1736561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x2a, (byte) 0xf4, (byte) 0xa8, (byte) 0xd7, (byte) 0xff,
1737561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xbe, (byte) 0x01, (byte) 0xeb, (byte) 0x9b, (byte) 0x81,
1738561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xc7, (byte) 0x5f, (byte) 0x02, (byte) 0x73, (byte) 0xe1,
1739561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x2b, (byte) 0x02, (byte) 0x41, (byte) 0x00, (byte) 0xc5,
1740561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x3d, (byte) 0x78, (byte) 0xab, (byte) 0xe6, (byte) 0xab,
1741561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x3e, (byte) 0x29, (byte) 0xfd, (byte) 0x98, (byte) 0xd0,
1742561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xa4, (byte) 0x3e, (byte) 0x58, (byte) 0xee, (byte) 0x48,
1743561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x45, (byte) 0xa3, (byte) 0x66, (byte) 0xac, (byte) 0xe9,
1744561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x4d, (byte) 0xbd, (byte) 0x60, (byte) 0xea, (byte) 0x24,
1745561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xff, (byte) 0xed, (byte) 0x0c, (byte) 0x67, (byte) 0xc5,
1746561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xfd, (byte) 0x36, (byte) 0x28, (byte) 0xea, (byte) 0x74,
1747561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x88, (byte) 0xd1, (byte) 0xd1, (byte) 0xad, (byte) 0x58,
1748561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xd7, (byte) 0xf0, (byte) 0x67, (byte) 0x20, (byte) 0xc1,
1749561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xe3, (byte) 0xb3, (byte) 0xdb, (byte) 0x52, (byte) 0xad,
1750561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xf3, (byte) 0xc4, (byte) 0x21, (byte) 0xd8, (byte) 0x8c,
1751561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x4c, (byte) 0x41, (byte) 0x27, (byte) 0xdb, (byte) 0xd0,
1752561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x35, (byte) 0x92, (byte) 0xc7, (byte) 0x02, (byte) 0x41,
1753561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x00, (byte) 0xe0, (byte) 0x99, (byte) 0x42, (byte) 0xb4,
1754561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x76, (byte) 0x02, (byte) 0x97, (byte) 0x55, (byte) 0xf9,
1755561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xda, (byte) 0x3b, (byte) 0xa0, (byte) 0xd7, (byte) 0x0e,
1756561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xdc, (byte) 0xf4, (byte) 0x33, (byte) 0x7f, (byte) 0xbd,
1757561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xcf, (byte) 0xd0, (byte) 0xeb, (byte) 0x6e, (byte) 0x89,
1758561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xf7, (byte) 0x4f, (byte) 0x5a, (byte) 0x07, (byte) 0x7c,
1759561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xa9, (byte) 0x49, (byte) 0x47, (byte) 0x68, (byte) 0x35,
1760561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xa8, (byte) 0x05, (byte) 0x3d, (byte) 0xfd, (byte) 0x04,
1761561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x7b, (byte) 0x17, (byte) 0x31, (byte) 0x0d, (byte) 0xc8,
1762561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xa3, (byte) 0x98, (byte) 0x34, (byte) 0xa0, (byte) 0x50,
1763561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x44, (byte) 0x00, (byte) 0xf1, (byte) 0x0c, (byte) 0xe6,
1764561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xe5, (byte) 0xc4, (byte) 0x41, (byte) 0x3d, (byte) 0xf8,
1765561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x3d, (byte) 0x4e, (byte) 0x0b, (byte) 0x1c, (byte) 0xdb,
1766561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x02, (byte) 0x41, (byte) 0x00, (byte) 0x82, (byte) 0x9b,
1767561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x8a, (byte) 0xfd, (byte) 0xa1, (byte) 0x98, (byte) 0x41,
1768561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x68, (byte) 0xc2, (byte) 0xd1, (byte) 0xdf, (byte) 0x4e,
1769561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xf3, (byte) 0x2e, (byte) 0x26, (byte) 0x53, (byte) 0x5b,
1770561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x31, (byte) 0xb1, (byte) 0x7a, (byte) 0xcc, (byte) 0x5e,
1771561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xbb, (byte) 0x09, (byte) 0xa2, (byte) 0xe2, (byte) 0x6f,
1772561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x4a, (byte) 0x04, (byte) 0x0d, (byte) 0xef, (byte) 0x90,
1773561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x15, (byte) 0xbe, (byte) 0x10, (byte) 0x4a, (byte) 0xac,
1774561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x92, (byte) 0xeb, (byte) 0xda, (byte) 0x72, (byte) 0xdb,
1775561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x43, (byte) 0x08, (byte) 0xb7, (byte) 0x2b, (byte) 0x4c,
1776561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xe1, (byte) 0xbb, (byte) 0x58, (byte) 0xcb, (byte) 0x71,
1777561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x80, (byte) 0xad, (byte) 0xbc, (byte) 0xdc, (byte) 0x62,
1778561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x5e, (byte) 0x3e, (byte) 0xcb, (byte) 0x92, (byte) 0xda,
1779561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xf6, (byte) 0xdf, (byte) 0x02, (byte) 0x40, (byte) 0x4d,
1780561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x81, (byte) 0x90, (byte) 0xc5, (byte) 0x77, (byte) 0x30,
1781561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xb7, (byte) 0x29, (byte) 0x00, (byte) 0xa8, (byte) 0xf1,
1782561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xb4, (byte) 0xae, (byte) 0x52, (byte) 0x63, (byte) 0x00,
1783561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xb2, (byte) 0x2d, (byte) 0x3e, (byte) 0x7d, (byte) 0xd6,
1784561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x4d, (byte) 0xf9, (byte) 0x8a, (byte) 0xc1, (byte) 0xb1,
1785561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x98, (byte) 0x89, (byte) 0x52, (byte) 0x40, (byte) 0x14,
1786561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x1b, (byte) 0x0e, (byte) 0x61, (byte) 0x8f, (byte) 0xf4,
1787561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xbe, (byte) 0x59, (byte) 0x79, (byte) 0x79, (byte) 0x95,
1788561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x19, (byte) 0x5c, (byte) 0x51, (byte) 0x08, (byte) 0x66,
1789561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xc1, (byte) 0x42, (byte) 0x30, (byte) 0xb3, (byte) 0x7a,
1790561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x86, (byte) 0x9f, (byte) 0x3e, (byte) 0xf5, (byte) 0x19,
1791561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xa3, (byte) 0xae, (byte) 0x64, (byte) 0x69, (byte) 0x14,
1792561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x07, (byte) 0x50, (byte) 0x97, };
1793561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1794561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // valid PrivateKeyInfo encoding (Damaged)
1795561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static final byte[] privateKeyInfoDamaged = { (byte) 0x30,
1796561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x82, (byte) 0x02, (byte) 0x77, (byte) 0x02, (byte) 0x01,
1797561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x00, (byte) 0x30, (byte) 0x0d, (byte) 0x06, (byte) 0x09,
1798561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x2a, (byte) 0x86, (byte) 0x48, (byte) 0x86, (byte) 0xf7,
1799561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x0d, (byte) 0x01, (byte) 0x01, (byte) 0x01, (byte) 0x05,
1800561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x00, (byte) 0x04, // private key octet str
1801561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x82, (byte) 0x02, (byte) 0x62, // Damage: l=460->461
1802561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                                   // (0x61->0x62)
1803561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x30, (byte) 0x82, (byte) 0x02, (byte) 0x5d, (byte) 0x02,
1804561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x01, (byte) 0x00, (byte) 0x02, (byte) 0x81, (byte) 0x81,
1805561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x00, (byte) 0xb2, (byte) 0x4a, (byte) 0x9b, (byte) 0x5b,
1806561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xba, (byte) 0x01, (byte) 0xc0, (byte) 0xcd, (byte) 0x65,
1807561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x09, (byte) 0x63, (byte) 0x70, (byte) 0x0b, (byte) 0x5a,
1808561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x1b, (byte) 0x92, (byte) 0x08, (byte) 0xf8, (byte) 0x55,
1809561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x5e, (byte) 0x7c, (byte) 0x1b, (byte) 0x50, (byte) 0x17,
1810561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xec, (byte) 0x44, (byte) 0x4c, (byte) 0x58, (byte) 0x42,
1811561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x2b, (byte) 0x41, (byte) 0x09, (byte) 0x59, (byte) 0xf2,
1812561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xe1, (byte) 0x5d, (byte) 0x43, (byte) 0x71, (byte) 0x4d,
1813561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x92, (byte) 0x03, (byte) 0x1d, (byte) 0xb6, (byte) 0x6c,
1814561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x7f, (byte) 0x5d, (byte) 0x48, (byte) 0xcd, (byte) 0x17,
1815561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xec, (byte) 0xd7, (byte) 0x4c, (byte) 0x39, (byte) 0xb1,
1816561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x7b, (byte) 0xe2, (byte) 0xbf, (byte) 0x96, (byte) 0x77,
1817561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xbe, (byte) 0xd0, (byte) 0xa0, (byte) 0xf0, (byte) 0x2d,
1818561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x6b, (byte) 0x24, (byte) 0xaa, (byte) 0x14, (byte) 0xba,
1819561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x82, (byte) 0x79, (byte) 0x10, (byte) 0x9b, (byte) 0x16,
1820561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x68, (byte) 0x47, (byte) 0x81, (byte) 0x54, (byte) 0xa2,
1821561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xfa, (byte) 0x91, (byte) 0x9e, (byte) 0x0a, (byte) 0x2a,
1822561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x53, (byte) 0xa6, (byte) 0xe7, (byte) 0x9e, (byte) 0x7d,
1823561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x29, (byte) 0x33, (byte) 0xd8, (byte) 0x05, (byte) 0xfc,
1824561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x02, (byte) 0x3f, (byte) 0xbd, (byte) 0xc7, (byte) 0x6e,
1825561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xed, (byte) 0xaa, (byte) 0x30, (byte) 0x6c, (byte) 0x5f,
1826561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x52, (byte) 0xed, (byte) 0x35, (byte) 0x65, (byte) 0x4b,
1827561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x0e, (byte) 0xc8, (byte) 0xa7, (byte) 0x12, (byte) 0x10,
1828561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x56, (byte) 0x37, (byte) 0xaf, (byte) 0x11, (byte) 0xfa,
1829561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x21, (byte) 0x0e, (byte) 0x99, (byte) 0xff, (byte) 0xfa,
1830561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x8c, (byte) 0x65, (byte) 0x8e, (byte) 0x6d, (byte) 0x02,
1831561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x03, (byte) 0x01, (byte) 0x00, (byte) 0x01, (byte) 0x02,
1832561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x81, (byte) 0x80, (byte) 0x78, (byte) 0x41, (byte) 0x72,
1833561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x40, (byte) 0x90, (byte) 0x59, (byte) 0x96, (byte) 0x5d,
1834561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xf3, (byte) 0x84, (byte) 0x3d, (byte) 0x99, (byte) 0xd9,
1835561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x4e, (byte) 0x51, (byte) 0xc2, (byte) 0x52, (byte) 0x62,
1836561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x8d, (byte) 0xd2, (byte) 0x49, (byte) 0x0b, (byte) 0x73,
1837561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x1e, (byte) 0x6f, (byte) 0xb2, (byte) 0x31, (byte) 0x7c,
1838561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x66, (byte) 0x45, (byte) 0x1e, (byte) 0x7c, (byte) 0xdc,
1839561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x3a, (byte) 0xc2, (byte) 0x5f, (byte) 0x51, (byte) 0x9a,
1840561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x1e, (byte) 0xa4, (byte) 0x19, (byte) 0x8d, (byte) 0xf4,
1841561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xf9, (byte) 0x81, (byte) 0x7e, (byte) 0xbe, (byte) 0x17,
1842561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xf7, (byte) 0xc7, (byte) 0x3c, (byte) 0x00, (byte) 0xa1,
1843561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xf9, (byte) 0x60, (byte) 0x82, (byte) 0x34, (byte) 0x8f,
1844561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x9c, (byte) 0xfd, (byte) 0x0b, (byte) 0x63, (byte) 0x42,
1845561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x1b, (byte) 0x7f, (byte) 0x45, (byte) 0xf1, (byte) 0x31,
1846561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xc3, (byte) 0x63, (byte) 0x47, (byte) 0x5c, (byte) 0xc1,
1847561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xb2, (byte) 0x5f, (byte) 0x57, (byte) 0xee, (byte) 0x02,
1848561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x9f, (byte) 0x5e, (byte) 0x08, (byte) 0x48, (byte) 0xba,
1849561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x74, (byte) 0xba, (byte) 0x81, (byte) 0xb7, (byte) 0x30,
1850561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xac, (byte) 0x4c, (byte) 0x01, (byte) 0x35, (byte) 0xce,
1851561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x46, (byte) 0x47, (byte) 0x8c, (byte) 0xe4, (byte) 0x62,
1852561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x36, (byte) 0x1a, (byte) 0x65, (byte) 0x0e, (byte) 0x33,
1853561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x56, (byte) 0xf9, (byte) 0xb7, (byte) 0xa0, (byte) 0xc4,
1854561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xb6, (byte) 0x82, (byte) 0x55, (byte) 0x7d, (byte) 0x36,
1855561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x55, (byte) 0xc0, (byte) 0x52, (byte) 0x5e, (byte) 0x35,
1856561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x54, (byte) 0xbd, (byte) 0x97, (byte) 0x01, (byte) 0x00,
1857561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xbf, (byte) 0x10, (byte) 0xdc, (byte) 0x1b, (byte) 0x51,
1858561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x02, (byte) 0x41, (byte) 0x00, (byte) 0xe7, (byte) 0x68,
1859561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x03, (byte) 0x3e, (byte) 0x21, (byte) 0x64, (byte) 0x68,
1860561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x24, (byte) 0x7b, (byte) 0xd0, (byte) 0x31, (byte) 0xa0,
1861561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xa2, (byte) 0xd9, (byte) 0x87, (byte) 0x6d, (byte) 0x79,
1862561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x81, (byte) 0x8f, (byte) 0x8f, (byte) 0x2d, (byte) 0x7a,
1863561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x95, (byte) 0x2e, (byte) 0x55, (byte) 0x9f, (byte) 0xd7,
1864561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x86, (byte) 0x29, (byte) 0x93, (byte) 0xbd, (byte) 0x04,
1865561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x7e, (byte) 0x4f, (byte) 0xdb, (byte) 0x56, (byte) 0xf1,
1866561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x75, (byte) 0xd0, (byte) 0x4b, (byte) 0x00, (byte) 0x3a,
1867561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xe0, (byte) 0x26, (byte) 0xf6, (byte) 0xab, (byte) 0x9e,
1868561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x0b, (byte) 0x2a, (byte) 0xf4, (byte) 0xa8, (byte) 0xd7,
1869561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xff, (byte) 0xbe, (byte) 0x01, (byte) 0xeb, (byte) 0x9b,
1870561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x81, (byte) 0xc7, (byte) 0x5f, (byte) 0x02, (byte) 0x73,
1871561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xe1, (byte) 0x2b, (byte) 0x02, (byte) 0x41, (byte) 0x00,
1872561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xc5, (byte) 0x3d, (byte) 0x78, (byte) 0xab, (byte) 0xe6,
1873561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xab, (byte) 0x3e, (byte) 0x29, (byte) 0xfd, // 88
1874561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x98, (byte) 0xd0, (byte) 0xa4, (byte) 0x3e, (byte) 0x58,
1875561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xee, (byte) 0x48, (byte) 0x45, (byte) 0xa3, (byte) 0x66,
1876561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xac, (byte) 0xe9, (byte) 0x4d, (byte) 0xbd, (byte) 0x60,
1877561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xea, (byte) 0x24, (byte) 0xff, (byte) 0xed, (byte) 0x0c,
1878561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x67, (byte) 0xc5, (byte) 0xfd, (byte) 0x36, (byte) 0x28,
1879561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xea, (byte) 0x74, (byte) 0x88, (byte) 0xd1, (byte) 0xd1,
1880561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xad, (byte) 0x58, (byte) 0xd7, (byte) 0xf0, (byte) 0x67,
1881561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x20, (byte) 0xc1, (byte) 0xe3, (byte) 0xb3, (byte) 0xdb,
1882561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x52, (byte) 0xad, (byte) 0xf3, (byte) 0xc4, (byte) 0x21,
1883561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xd8, (byte) 0x8c, (byte) 0x4c, (byte) 0x41, (byte) 0x27,
1884561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xdb, (byte) 0xd0, (byte) 0x35, (byte) 0x92, (byte) 0xc7,
1885561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x02, (byte) 0x41, (byte) 0x00, (byte) 0xe0, (byte) 0x99,
1886561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x42, (byte) 0xb4, (byte) 0x76, (byte) 0x02, (byte) 0x97,
1887561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x55, (byte) 0xf9, (byte) 0xda, (byte) 0x3b, (byte) 0xa0,
1888561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xd7, (byte) 0x0e, (byte) 0xdc, (byte) 0xf4, (byte) 0x33,
1889561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x7f, (byte) 0xbd, (byte) 0xcf, (byte) 0xd0, (byte) 0xeb,
1890561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x6e, (byte) 0x89, (byte) 0xf7, (byte) 0x4f, (byte) 0x5a,
1891561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x07, (byte) 0x7c, (byte) 0xa9, (byte) 0x49, (byte) 0x47,
1892561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x68, (byte) 0x35, (byte) 0xa8, (byte) 0x05, (byte) 0x3d,
1893561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xfd, (byte) 0x04, (byte) 0x7b, (byte) 0x17, (byte) 0x31,
1894561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x0d, (byte) 0xc8, (byte) 0xa3, (byte) 0x98, (byte) 0x34,
1895561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xa0, (byte) 0x50, (byte) 0x44, (byte) 0x00, (byte) 0xf1,
1896561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x0c, (byte) 0xe6, (byte) 0xe5, (byte) 0xc4, (byte) 0x41,
1897561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x3d, (byte) 0xf8, (byte) 0x3d, (byte) 0x4e, (byte) 0x0b, // 118
1898561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x1c, (byte) 0xdb, (byte) 0x02, (byte) 0x41, (byte) 0x00,
1899561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x82, (byte) 0x9b, (byte) 0x8a, (byte) 0xfd, (byte) 0xa1,
1900561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x98, (byte) 0x41, (byte) 0x68, (byte) 0xc2, (byte) 0xd1,
1901561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xdf, (byte) 0x4e, (byte) 0xf3, (byte) 0x2e, (byte) 0x26,
1902561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x53, (byte) 0x5b, (byte) 0x31, (byte) 0xb1, (byte) 0x7a,
1903561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xcc, (byte) 0x5e, (byte) 0xbb, (byte) 0x09, (byte) 0xa2,
1904561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xe2, (byte) 0x6f, (byte) 0x4a, (byte) 0x04, (byte) 0x0d,
1905561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xef, (byte) 0x90, (byte) 0x15, (byte) 0xbe, (byte) 0x10,
1906561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x4a, (byte) 0xac, (byte) 0x92, (byte) 0xeb, (byte) 0xda,
1907561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x72, (byte) 0xdb, (byte) 0x43, (byte) 0x08, (byte) 0xb7,
1908561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x2b, (byte) 0x4c, (byte) 0xe1, (byte) 0xbb, (byte) 0x58,
1909561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xcb, (byte) 0x71, (byte) 0x80, (byte) 0xad, (byte) 0xbc,
1910561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xdc, (byte) 0x62, (byte) 0x5e, (byte) 0x3e, (byte) 0xcb,
1911561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x92, (byte) 0xda, (byte) 0xf6, (byte) 0xdf, (byte) 0x02,
1912561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x40, (byte) 0x4d, (byte) 0x81, (byte) 0x90, (byte) 0xc5,
1913561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x77, (byte) 0x30, (byte) 0xb7, (byte) 0x29, (byte) 0x00,
1914561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xa8, (byte) 0xf1, (byte) 0xb4, (byte) 0xae, (byte) 0x52,
1915561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x63, (byte) 0x00, (byte) 0xb2, // 140
1916561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x2d, (byte) 0x3e, (byte) 0x7d, (byte) 0xd6, (byte) 0x4d,
1917561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xf9, (byte) 0x8a, (byte) 0xc1, (byte) 0xb1, (byte) 0x98,
1918561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x89, (byte) 0x52, (byte) 0x40, (byte) 0x14, (byte) 0x1b,
1919561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x0e, (byte) 0x61, (byte) 0x8f, (byte) 0xf4, (byte) 0xbe,
1920561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x59, (byte) 0x79, (byte) 0x79, (byte) 0x95, (byte) 0x19,
1921561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x5c, (byte) 0x51, (byte) 0x08, (byte) 0x66, (byte) 0xc1,
1922561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x42, (byte) 0x30, (byte) 0xb3, (byte) 0x7a, (byte) 0x86,
1923561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x9f, (byte) 0x3e, (byte) 0xf5, (byte) 0x19, (byte) 0xa3, // 150
1924561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0xae, (byte) 0x64, (byte) 0x69, (byte) 0x14, (byte) 0x07,
1925561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (byte) 0x50, (byte) 0x97, };
1926561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes}
1927