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