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 */
16f979bbd1277c77ca945ad981e7864fb4e9f6ae05Jesse Wilsonpackage tests.security;
17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Key;
19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.KeyFactory;
20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.KeyPair;
21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.NoSuchAlgorithmException;
22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.PrivateKey;
23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.PublicKey;
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.spec.InvalidKeySpecException;
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.spec.KeySpec;
26f979bbd1277c77ca945ad981e7864fb4e9f6ae05Jesse Wilsonimport junit.framework.TestCase;
27f979bbd1277c77ca945ad981e7864fb4e9f6ae05Jesse Wilson
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic abstract class KeyFactoryTest<PublicKeySpec extends KeySpec, PrivateKeySpec extends KeySpec>
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        extends TestCase {
30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private final String algorithmName;
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private final Class<PublicKeySpec> publicKeySpecClass;
33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private final Class<PrivateKeySpec> privateKeySpecClass;
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private KeyFactory factory;
35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
36f979bbd1277c77ca945ad981e7864fb4e9f6ae05Jesse Wilson    public KeyFactoryTest(String algorithmName,
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Class<PublicKeySpec> publicKeySpecClass,
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Class<PrivateKeySpec> privateKeySpecClass) {
39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        this.algorithmName = algorithmName;
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        this.publicKeySpecClass = publicKeySpecClass;
41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        this.privateKeySpecClass = privateKeySpecClass;
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected void setUp() throws Exception {
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        super.setUp();
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        factory = getFactory();
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
495b7f91c1e6e208187cef57ab8a5de0a7f35e817fBrian Carlstrom    private KeyFactory getFactory() throws Exception {
505b7f91c1e6e208187cef57ab8a5de0a7f35e817fBrian Carlstrom        return KeyFactory.getInstance(algorithmName);
51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
535b7f91c1e6e208187cef57ab8a5de0a7f35e817fBrian Carlstrom    public void testKeyFactory() throws Exception {
545b7f91c1e6e208187cef57ab8a5de0a7f35e817fBrian Carlstrom        PrivateKeySpec privateKeySpec = factory.getKeySpec(DefaultKeys.getPrivateKey(algorithmName),
555b7f91c1e6e208187cef57ab8a5de0a7f35e817fBrian Carlstrom                                                           privateKeySpecClass);
565b7f91c1e6e208187cef57ab8a5de0a7f35e817fBrian Carlstrom        PrivateKey privateKey =  factory.generatePrivate(privateKeySpec);
575b7f91c1e6e208187cef57ab8a5de0a7f35e817fBrian Carlstrom        PublicKeySpec publicKeySpec = factory.getKeySpec(DefaultKeys.getPublicKey(algorithmName),
585b7f91c1e6e208187cef57ab8a5de0a7f35e817fBrian Carlstrom                                                         publicKeySpecClass);
595b7f91c1e6e208187cef57ab8a5de0a7f35e817fBrian Carlstrom        PublicKey publicKey = factory.generatePublic(publicKeySpec);
60f979bbd1277c77ca945ad981e7864fb4e9f6ae05Jesse Wilson        check(new KeyPair(publicKey, privateKey));
61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
62f979bbd1277c77ca945ad981e7864fb4e9f6ae05Jesse Wilson
63f979bbd1277c77ca945ad981e7864fb4e9f6ae05Jesse Wilson    protected void check(KeyPair keyPair) {}
64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
65