1/*
2 * Copyright (C) 2009 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *     http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package libcore.javax.crypto.spec;
17
18import java.security.AlgorithmParameters;
19import java.security.NoSuchAlgorithmException;
20import java.security.Provider;
21import java.security.Security;
22import java.util.Arrays;
23import java.util.Base64;
24import javax.crypto.spec.IvParameterSpec;
25import tests.security.AlgorithmParameterSymmetricHelper;
26import tests.security.AlgorithmParametersTest;
27
28public class AlgorithmParametersTestDES extends AlgorithmParametersTest {
29
30    private static final byte[] parameterData = new byte[] {
31        (byte) 0x04, (byte) 0x08, (byte) 0x68, (byte) 0xC8,
32        (byte) 0xFF, (byte) 0x64, (byte) 0x72, (byte) 0xF5 };
33
34    // See README.ASN1 for how to understand and reproduce this data
35
36    // asn1=FORMAT:HEX,OCTETSTRING:040868C8FF6472F5
37    private static final String ENCODED_DATA = "BAgECGjI/2Ry9Q==";
38
39    public AlgorithmParametersTestDES() {
40        super("DES", new AlgorithmParameterSymmetricHelper("DES", "CBC/PKCS5PADDING", 56), new IvParameterSpec(parameterData));
41    }
42
43    public void testEncoding() throws Exception {
44        for (Provider p : Security.getProviders()) {
45            AlgorithmParameters params;
46            try {
47                params = AlgorithmParameters.getInstance("DES", p);
48            } catch (NoSuchAlgorithmException e) {
49                // This provider doesn't support DES, ignore
50                continue;
51            }
52
53            params.init(new IvParameterSpec(parameterData));
54            assertEquals("Provider: " + p.getName(),
55                    ENCODED_DATA, Base64.getEncoder().encodeToString(params.getEncoded()));
56
57            params = AlgorithmParameters.getInstance("DES", p);
58            params.init(Base64.getDecoder().decode(ENCODED_DATA));
59            assertTrue("Provider: " + p.getName(),
60                    Arrays.equals(parameterData,
61                            params.getParameterSpec(IvParameterSpec.class).getIV()));
62        }
63    }
64
65}
66