1 /* 2 * Copyright (c) 1999, 2007, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package javax.crypto; 27 28 import java.security.*; 29 import java.util.Enumeration; 30 import java.util.Vector; 31 32 /** 33 * The CryptoAllPermission is a permission that implies 34 * any other crypto permissions. 35 * <p> 36 * 37 * @see java.security.Permission 38 * @see java.security.AllPermission 39 * 40 * @author Sharon Liu 41 * @since 1.4 42 */ 43 44 final class CryptoAllPermission extends CryptoPermission { 45 46 private static final long serialVersionUID = -5066513634293192112L; 47 48 // This class is similar to java.security.AllPermission. 49 static final String ALG_NAME = "CryptoAllPermission"; 50 static final CryptoAllPermission INSTANCE = 51 new CryptoAllPermission(); 52 53 private CryptoAllPermission() { 54 super(ALG_NAME); 55 } 56 57 /** 58 * Checks if the specified permission is implied by 59 * this object. 60 * 61 * @param p the permission to check against. 62 * 63 * @return true if the specified permission is an 64 * instance of CryptoPermission. 65 */ 66 public boolean implies(Permission p) { 67 return (p instanceof CryptoPermission); 68 } 69 70 /** 71 * Checks two CryptoAllPermission objects for equality. 72 * Two CryptoAllPermission objects are always equal. 73 * 74 * @param obj the object to test for equality with this object. 75 * 76 * @return true if <i>obj</i> is a CryptoAllPermission object. 77 */ 78 public boolean equals(Object obj) { 79 return (obj == INSTANCE); 80 } 81 82 /** 83 * 84 * Returns the hash code value for this object. 85 * 86 * @return a hash code value for this object. 87 */ 88 public int hashCode() { 89 return 1; 90 } 91 92 /** 93 * Returns a new PermissionCollection object for storing 94 * CryptoAllPermission objects. 95 * <p> 96 * 97 * @return a new PermissionCollection object suitable for 98 * storing CryptoAllPermissions. 99 */ 100 public PermissionCollection newPermissionCollection() { 101 return new CryptoAllPermissionCollection(); 102 } 103 } 104 105 /** 106 * A CryptoAllPermissionCollection stores a collection 107 * of CryptoAllPermission permissions. 108 * 109 * @see java.security.Permission 110 * @see java.security.Permissions 111 * @see javax.crypto.CryptoPermission 112 * 113 * @author Sharon Liu 114 */ 115 final class CryptoAllPermissionCollection extends PermissionCollection 116 implements java.io.Serializable 117 { 118 119 private static final long serialVersionUID = 7450076868380144072L; 120 121 // true if a CryptoAllPermission has been added 122 private boolean all_allowed; 123 124 /** 125 * Create an empty CryptoAllPermissions object. 126 */ 127 CryptoAllPermissionCollection() { 128 all_allowed = false; 129 } 130 131 /** 132 * Adds a permission to the CryptoAllPermissions. 133 * 134 * @param permission the Permission object to add. 135 * 136 * @exception SecurityException - if this CryptoAllPermissionCollection 137 * object has been marked readonly 138 */ 139 public void add(Permission permission) 140 { 141 if (isReadOnly()) 142 throw new SecurityException("attempt to add a Permission to " + 143 "a readonly PermissionCollection"); 144 145 if (permission != CryptoAllPermission.INSTANCE) 146 return; 147 148 all_allowed = true; 149 } 150 151 /** 152 * Check and see if this set of permissions implies the permissions 153 * expressed in "permission". 154 * 155 * @param p the Permission object to compare 156 * 157 * @return true if the given permission is implied by this 158 * CryptoAllPermissionCollection. 159 */ 160 public boolean implies(Permission permission) 161 { 162 if (!(permission instanceof CryptoPermission)) { 163 return false; 164 } 165 return all_allowed; 166 } 167 168 /** 169 * Returns an enumeration of all the CryptoAllPermission 170 * objects in the container. 171 * 172 * @return an enumeration of all the CryptoAllPermission objects. 173 */ 174 public Enumeration elements() { 175 Vector v = new Vector(1); 176 if (all_allowed) v.add(CryptoAllPermission.INSTANCE); 177 return v.elements(); 178 } 179 }