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