Home | History | Annotate | Download | only in support
      1 /*
      2  *  Licensed to the Apache Software Foundation (ASF) under one or more
      3  *  contributor license agreements.  See the NOTICE file distributed with
      4  *  this work for additional information regarding copyright ownership.
      5  *  The ASF licenses this file to You under the Apache License, Version 2.0
      6  *  (the "License"); you may not use this file except in compliance with
      7  *  the License.  You may obtain a copy of the License at
      8  *
      9  *     http://www.apache.org/licenses/LICENSE-2.0
     10  *
     11  *  Unless required by applicable law or agreed to in writing, software
     12  *  distributed under the License is distributed on an "AS IS" BASIS,
     13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14  *  See the License for the specific language governing permissions and
     15  *  limitations under the License.
     16  */
     17 
     18 /**
     19 * @author Vera Y. Petrashkova
     20 */
     21 
     22 package org.apache.harmony.security.tests.support;
     23 
     24 import java.io.ByteArrayOutputStream;
     25 import java.io.IOException;
     26 import java.io.InputStream;
     27 import java.io.OutputStream;
     28 import java.security.Key;
     29 import java.security.KeyStore;
     30 import java.security.KeyStoreException;
     31 import java.security.KeyStoreSpi;
     32 import java.security.NoSuchAlgorithmException;
     33 import java.security.UnrecoverableKeyException;
     34 import java.security.cert.Certificate;
     35 import java.security.cert.CertificateException;
     36 import java.util.Date;
     37 import java.util.Enumeration;
     38 import java.util.Hashtable;
     39 
     40 /**
     41  * Additional class for KeyStoreSpi and KeyStore verification
     42  *
     43  */
     44 
     45 public class MyKeyStore extends KeyStoreSpi {
     46     private Hashtable Keys = new Hashtable();
     47 
     48     private Hashtable Cert = new Hashtable();
     49 
     50     private Hashtable Chain = new Hashtable();
     51 
     52     private Hashtable Dates = new Hashtable();
     53 
     54     private Hashtable KeysSL = new Hashtable();
     55 
     56     private Hashtable CertSL = new Hashtable();
     57 
     58     private Hashtable ChainSL = new Hashtable();
     59 
     60     private Hashtable DatesSL = new Hashtable();
     61 
     62     public Key engineGetKey(String alias, char[] password)
     63             throws NoSuchAlgorithmException, UnrecoverableKeyException {
     64         if (Keys.containsKey(alias)) {
     65             return (Key) Keys.get(alias);
     66         }
     67         return null;
     68     }
     69 
     70     public Certificate[] engineGetCertificateChain(String alias) {
     71         if (Chain.containsKey(alias)) {
     72             return (Certificate[]) Chain.get(alias);
     73         }
     74         return null;
     75     }
     76 
     77     public Certificate engineGetCertificate(String alias) {
     78         if (Cert.containsKey(alias)) {
     79             return (Certificate) Cert.get(alias);
     80         }
     81         return null;
     82     }
     83 
     84     public Date engineGetCreationDate(String alias) {
     85         if (Dates.containsKey(alias)) {
     86             return (Date) Dates.get(alias);
     87         }
     88         return null;
     89     }
     90 
     91     public void engineSetKeyEntry(String alias, Key key, char[] password,
     92             Certificate[] chain) throws KeyStoreException {
     93         if (Cert.containsKey(alias)) {
     94             Cert.remove(alias);
     95         }
     96         Keys.put(alias, key);
     97         if (chain != null) {
     98             Chain.put(alias, chain);
     99         }
    100         Dates.put(alias, new Date());
    101     }
    102 
    103     public void engineSetKeyEntry(String alias, byte[] key, Certificate[] chain)
    104             throws KeyStoreException {
    105         if (key == null) {
    106             throw new KeyStoreException("Not Supported for null key");
    107         }
    108         if (Cert.containsKey(alias)) {
    109             Cert.remove(alias);
    110         }
    111         if (Chain.containsKey(alias)) {
    112             Chain.remove(alias);
    113         }
    114         KeyStoreTestSupport.MyPrivateKey keyK = new KeyStoreTestSupport.MyPrivateKey(
    115                 alias, alias, key);
    116         Keys.put(alias, keyK);
    117         if (chain != null) {
    118             Chain.put(alias, chain);
    119         }
    120         Dates.put(alias, new Date());
    121 
    122     }
    123 
    124     public void engineSetCertificateEntry(String alias, Certificate cert)
    125             throws KeyStoreException {
    126         Cert.put(alias, cert);
    127         Dates.put(alias, new Date());
    128     }
    129 
    130     public void engineDeleteEntry(String alias) throws KeyStoreException {
    131         if (Keys.containsKey(alias)) {
    132             Keys.remove(alias);
    133             Chain.remove(alias);
    134             return;
    135         }
    136         if (Cert.containsKey(alias)) {
    137             Cert.remove(alias);
    138         }
    139     }
    140 
    141     public Enumeration engineAliases() {
    142         return null;
    143     }
    144 
    145     public boolean engineContainsAlias(String alias) {
    146         if (Keys.containsKey(alias)) {
    147             return true;
    148         }
    149         if (Cert.containsKey(alias)) {
    150             return true;
    151         }
    152         return false;
    153     }
    154 
    155     public int engineSize() {
    156         return (Keys.size() + Cert.size());
    157     }
    158 
    159     public boolean engineIsKeyEntry(String alias) {
    160         if (Keys.containsKey(alias)) {
    161             return true;
    162         }
    163         return false;
    164     }
    165 
    166     public boolean engineIsCertificateEntry(String alias) {
    167         if (Cert.containsKey(alias)) {
    168             return true;
    169         }
    170         return false;
    171     }
    172 
    173     public String engineGetCertificateAlias(Certificate cert) {
    174         return "";
    175     }
    176 
    177     public void engineStore(OutputStream stream, char[] password)
    178             throws IOException, NoSuchAlgorithmException, CertificateException {
    179         if (!(stream instanceof ByteArrayOutputStream)) {
    180             throw new IOException("Incorrect stream");
    181         }
    182         String alias;
    183         Enumeration e = Keys.keys();
    184         while (e.hasMoreElements()) {
    185             alias = (String) e.nextElement();
    186             KeysSL.put(alias, Keys.get(alias));
    187             DatesSL.put(alias, Dates.get(alias));
    188             if (Chain.containsKey(alias)) {
    189                 ChainSL.put(alias, Chain.get(alias));
    190             }
    191         }
    192         e = Cert.keys();
    193         while (e.hasMoreElements()) {
    194             alias = (String) e.nextElement();
    195             CertSL.put(alias, Cert.get(alias));
    196             DatesSL.put(alias, Dates.get(alias));
    197         }
    198     }
    199 
    200     public void engineLoad(InputStream stream, char[] password)
    201             throws IOException, NoSuchAlgorithmException, CertificateException {
    202         Keys.clear();
    203         Cert.clear();
    204         Chain.clear();
    205         Dates.clear();
    206         String alias;
    207         Enumeration e = KeysSL.keys();
    208         while (e.hasMoreElements()) {
    209             alias = (String) e.nextElement();
    210             Keys.put(alias, KeysSL.get(alias));
    211             Dates.put(alias, DatesSL.get(alias));
    212             if (ChainSL.containsKey(alias)) {
    213                 Chain.put(alias, ChainSL.get(alias));
    214             }
    215         }
    216         e = CertSL.keys();
    217         while (e.hasMoreElements()) {
    218             alias = (String) e.nextElement();
    219             Cert.put(alias, CertSL.get(alias));
    220             Dates.put(alias, DatesSL.get(alias));
    221         }
    222     }
    223 
    224     public void engineStore(KeyStore.LoadStoreParameter param)
    225             throws IOException, NoSuchAlgorithmException, CertificateException {
    226         if (param == null) {
    227             throw new IOException("param is null");
    228         }
    229     }
    230 
    231     public void engineLoad(KeyStore.LoadStoreParameter param)
    232             throws IOException, NoSuchAlgorithmException, CertificateException {
    233         if (!(param instanceof MyLoadStoreParams)) {
    234             throw new IllegalArgumentException("param is not MyLoadStoreParams: " + param);
    235         }
    236     }
    237 }