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