/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * @author Aleksei Y. Semenov * @version $Revision$ */ package org.apache.harmony.security; import java.security.Identity; import java.security.IdentityScope; import java.security.KeyManagementException; import java.security.PublicKey; import java.util.Enumeration; import java.util.Hashtable; /** * @see java.security.IdentityScope */ public class SystemScope extends IdentityScope { /** * @serial */ private static final long serialVersionUID = -4810285697932522607L; // Identities hash: key is the identity name private Hashtable names = new Hashtable(); // Identities hash: key is the public key private Hashtable keys = new Hashtable(); /** * @see java.security.IdentityScope#IdentityScope() */ public SystemScope() { } /** * @see java.security.IdentityScope#IdentityScope(String) */ public SystemScope(String name) { super(name); } /** * @see java.security.IdentityScope#IdentityScope(String, IdentityScope) */ public SystemScope(String name, IdentityScope scope) throws KeyManagementException { super(name, scope); } /** * @see java.security.IdentityScope#size() */ public int size() { return names.size(); } /** * @see java.security.IdentityScope#getIdentity(java.lang.String) */ public synchronized Identity getIdentity(String name) { if (name == null) { throw new NullPointerException("name == null"); } return (Identity) names.get(name); } /** * @see java.security.IdentityScope#getIdentity(java.security.PublicKey) */ public synchronized Identity getIdentity(PublicKey key) { if (key == null) { return null; } return (Identity) keys.get(key); } /** * @see java.security.IdentityScope#addIdentity(java.security.Identity) */ public synchronized void addIdentity(Identity identity) throws KeyManagementException { if (identity == null) { throw new NullPointerException("identity == null"); } String name = identity.getName(); if (names.containsKey(name)) { throw new KeyManagementException("name '" + name + "' is already used"); } PublicKey key = identity.getPublicKey(); if (key != null && keys.containsKey(key)) { throw new KeyManagementException("key '" + key + "' is already used"); } names.put(name, identity); if (key != null) { keys.put(key, identity); } } /** * @see java.security.IdentityScope#removeIdentity(java.security.Identity) */ public synchronized void removeIdentity(Identity identity) throws KeyManagementException { //Exception caught = null; if (identity == null) { throw new NullPointerException("identity == null"); } String name = identity.getName(); if (name == null) { throw new NullPointerException("name == null"); } boolean contains = names.containsKey(name); names.remove(name); PublicKey key = identity.getPublicKey(); if (key != null) { contains = contains || keys.containsKey(key); keys.remove(key); } if (!contains) { throw new KeyManagementException("identity not found"); } } /** * @see java.security.IdentityScope#identities() */ public Enumeration identities() { return names.elements(); } }