Return-Path: Delivered-To: apmail-incubator-harmony-commits-archive@www.apache.org Received: (qmail 53602 invoked from network); 1 Dec 2005 06:21:33 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 1 Dec 2005 06:21:33 -0000 Received: (qmail 6465 invoked by uid 500); 1 Dec 2005 06:17:22 -0000 Delivered-To: apmail-incubator-harmony-commits-archive@incubator.apache.org Received: (qmail 2769 invoked by uid 500); 1 Dec 2005 06:16:53 -0000 Mailing-List: contact harmony-commits-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: harmony-dev@incubator.apache.org Delivered-To: mailing list harmony-commits@incubator.apache.org Received: (qmail 278 invoked by uid 99); 1 Dec 2005 06:15:39 -0000 X-ASF-Spam-Status: No, hits=-9.4 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from [209.237.227.194] (HELO minotaur.apache.org) (209.237.227.194) by apache.org (qpsmtpd/0.29) with SMTP; Wed, 30 Nov 2005 22:12:34 -0800 Received: (qmail 43996 invoked by uid 65534); 1 Dec 2005 06:11:31 -0000 Message-ID: <20051201061131.43995.qmail@minotaur.apache.org> Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r350181 [132/198] - in /incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core: ./ depends/ depends/files/ depends/jars/ depends/libs/ depends/libs/linux.IA32/ depends/libs/win.IA32/ depends/oss/ depends/oss/linux.IA32/ depends/oss/win.... Date: Thu, 01 Dec 2005 06:04:00 -0000 To: harmony-commits@incubator.apache.org From: geirm@apache.org X-Mailer: svnmailer-1.0.5 X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N Added: incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/AllPermission.java URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/AllPermission.java?rev=350181&view=auto ============================================================================== --- incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/AllPermission.java (added) +++ incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/AllPermission.java Wed Nov 30 21:29:27 2005 @@ -0,0 +1,112 @@ +/* Copyright 1998, 2005 The Apache Software Foundation or its licensors, as applicable + * + * Licensed 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. + */ + +package java.security; + + +/** + * Subclass of Permission whose instances imply all other permissions. Granting + * this permission is equivalent to disabling security. + * + */ +public final class AllPermission extends Permission { + static final long serialVersionUID = -2916474571451318075L; + + /** + * Constructs a new instance of this class. + */ + public AllPermission() { + super("all_permissions"); + } + + /** + * Constructs a new instance of this class. The two argument version is + * provided for class Policy so that it has a consistant call + * pattern across all Permissions. The name and action list are both + * ignored. + * + * @param permissionName + * java.lang.String ignored. + * @param actions + * java.lang.String ignored. + */ + public AllPermission(String permissionName, String actions) { + super("all_permissions"); + } + + /** + * Compares the argument to the receiver, and answers true if they represent + * the same object using a class specific comparison. All + * AllPermissions are equal to eachother. + * + * @param o + * the object to compare with this object + * @return true if the object is the same as this object + * false if it is different from this object + * @see #hashCode + */ + public boolean equals(Object o) { + return o instanceof AllPermission; + } + + /** + * Answers the actions associated with the receiver. Since AllPermission + * objects allow all actions, answer with the string "". + * + * @return String the actions associated with the receiver. + */ + public String getActions() { + return ""; + } + + /** + * Answers an integer hash code for the receiver. Any two objects which + * answer true when passed to equals must + * answer the same value for this method. + * + * @return the receiver's hash + * + * @see #equals + */ + public int hashCode() { + return getName().hashCode(); + } + + /** + * Indicates whether the argument permission is implied by the receiver. + * AllPermission objects imply all other permissions. + * + * @return boolean true if the argument permission is implied + * by the receiver, and false if it is not. + * @param p + * java.security.Permission the permission to check + */ + public boolean implies(Permission p) { + return true; + } + + /** + * Answers a new PermissionCollection for holding permissions of this class. + * Answer null if any permission collection can be used. + * + * @return a new PermissionCollection or null + * + * @see java.security.BasicPermissionCollection + */ + public PermissionCollection newPermissionCollection() { + return new AllPermissionCollection(); + } + +} Added: incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/AllPermissionCollection.java URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/AllPermissionCollection.java?rev=350181&view=auto ============================================================================== --- incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/AllPermissionCollection.java (added) +++ incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/AllPermissionCollection.java Wed Nov 30 21:29:27 2005 @@ -0,0 +1,47 @@ +/* Copyright 2000, 2002 The Apache Software Foundation or its licensors, as applicable + * + * Licensed 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. + */ + +package java.security; + + +import java.util.Enumeration; +import java.util.Vector; + +class AllPermissionCollection extends PermissionCollection { + static final long serialVersionUID = -4023755556366636806L; + + boolean all_allowed = false; + + public void add(Permission permission) { + if (!(permission instanceof AllPermission)) { + throw new IllegalArgumentException(permission.toString()); + } + if (isReadOnly()) { + throw new IllegalStateException(); + } + all_allowed = true; + } + + public Enumeration elements() { + Vector temp = new Vector(); + if (all_allowed) + temp.addElement(new AllPermission()); + return temp.elements(); + } + + public boolean implies(Permission permission) { + return all_allowed; + } +} Added: incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/BasicPermission.java URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/BasicPermission.java?rev=350181&view=auto ============================================================================== --- incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/BasicPermission.java (added) +++ incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/BasicPermission.java Wed Nov 30 21:29:27 2005 @@ -0,0 +1,172 @@ +/* Copyright 1998, 2004 The Apache Software Foundation or its licensors, as applicable + * + * Licensed 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. + */ + +package java.security; + + +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.Serializable; + +/** + * Superclass of permissions which have names but no action lists. + * + */ + +public abstract class BasicPermission extends Permission implements + Serializable { + static final long serialVersionUID = 6279438298436773498L; + + /** + * If the receiver was a correctly formatted wildcarded pattern, then this + * is the name with the '*' character removed. If it's not wildcarded, then + * it is null. + */ + private transient String wildcard; + + /** + * Creates an instance of this class with the given name and action list. + * + * @param name + * String the name of the new permission. + */ + public BasicPermission(String name) { + super(name); + // Verified programatically that JDK only treats the permission + // as wildcarded if it has the shape described by this code. + // Names with * characters in other positions are just treated + // as non-wildcarded patterns, rather than exceptional conditions. + int length = name.length(); + if (length > 1) { + if (name.charAt(length - 1) == '*' + && name.charAt(length - 2) == '.') + wildcard = name.substring(0, length - 1); + } else if (length == 1 && name.charAt(0) == '*') { + wildcard = ""; + } else if (length == 0) + throw new IllegalArgumentException(); + } + + /** + * Creates an instance of this class with the given name and action list. + * The action list is ignored. + * + * @param name + * String the name of the new permission. + * @param actions + * String ignored. + */ + public BasicPermission(String name, String actions) { + this(name); + } + + /** + * Compares the argument to the receiver, and answers true if they represent + * the same object using a class specific comparison. In this + * case, the receiver and the object must have the same class and name. + * + * @param o + * the object to compare with this object + * @return true if the object is the same as this object + * false if it is different from this object + * @see #hashCode + */ + public boolean equals(Object o) { + if (this == o) + return true; + if (o != null && getClass() == o.getClass()) + return getName().equals(((BasicPermission) o).getName()); + return false; + } + + /** + * Answers the actions associated with the receiver. BasicPermission objects + * have no actions, so answer the empty string. + * + * @return String the actions associated with the receiver. + */ + public String getActions() { + return ""; + } + + /** + * Answers an integer hash code for the receiver. Any two objects which + * answer true when passed to equals must + * answer the same value for this method. + * + * @return int the receiver's hash + * + * @see #equals + */ + public int hashCode() { + return getName().hashCode(); + } + + /** + * Indicates whether the argument permission is implied by the receiver. + * + * @return boolean true if the argument permission is implied + * by the receiver, and false if it is not. + * @param p + * java.security.Permission the permission to check + */ + public boolean implies(Permission p) { + if (this == p) + return true; + if (p != null && getClass() == p.getClass()) { + if (wildcard != null) + return p.getName().startsWith(wildcard); + return p.getName().equals(getName()); + } + return false; + } + + /** + * Answers a new PermissionCollection for holding permissions of this class. + * Answer null if any permission collection can be used. + *

+ * Note: For BasicPermission (and subclasses which do not override this + * method), the collection which is returned does not invoke the + * .implies method of the permissions which are stored in it when checking + * if the collection implies a permission. Instead, it assumes that if the + * type of the permission is correct, and the name of the permission is + * correct, there is a match. + * + * @return a new PermissionCollection or null + * + * @see java.security.BasicPermissionCollection + */ + public PermissionCollection newPermissionCollection() { + return new BasicPermissionCollection(); + } + + private void readObject(ObjectInputStream stream) throws IOException, + ClassNotFoundException { + stream.defaultReadObject(); + // Verified programatically that JDK only treats the permission + // as wildcarded if it has the shape described by this code. + // Names with * characters in other positions are just treated + // as non-wildcarded patterns, rather than exceptional conditions. + String name = getName(); + int length = name.length(); + if (length > 1) { + if (name.charAt(length - 1) == '*' + && name.charAt(length - 2) == '.') + wildcard = name.substring(0, length - 1); + } else if (length == 1 && name.charAt(0) == '*') { + wildcard = ""; + } + } +} Added: incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/BasicPermissionCollection.java URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/BasicPermissionCollection.java?rev=350181&view=auto ============================================================================== --- incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/BasicPermissionCollection.java (added) +++ incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/BasicPermissionCollection.java Wed Nov 30 21:29:27 2005 @@ -0,0 +1,120 @@ +/* Copyright 1998, 2004 The Apache Software Foundation or its licensors, as applicable + * + * Licensed 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. + */ + +package java.security; + + +import java.util.Enumeration; +import java.util.Hashtable; + +/** + * A Hashtable based collection of BasicPermission objects. It make a number of + * assumptions about what is stored in it, allowing it to be quite performant. + *

+ * Limitation 1: It does not actually check that the contained + * permission objects grant the permission being checked, only that a + * permission with a matching name is present. Thus, this collection can not be + * used where the Permission objects implement interesting semantics in their + * implies methods. + *

+ * Limitation 2: It assumes (and does not check) that all permissions which are + * stored in the collection are instances of the same class. + *

+ * Limitation 3: Because it uses a hashtable, it will not record the fact that + * multiple occurances of .equal permissions have been added. + * + */ + +class BasicPermissionCollection extends PermissionCollection { + static final long serialVersionUID = 739301742472979399L; + + /** + * A flag to indicate whether the "grant all wildcard" (i.e. "*") has been + * added. + */ + boolean all_allowed = false; + + /** + * A hashtable which maps from a permission name to the matching permission. + * Multiple occurances of the same permission are ignored. + */ + Hashtable permissions = new Hashtable(8); + + /** + * Constructs a new instance of this class. + * + */ + public BasicPermissionCollection() { + super(); + } + + /** + * Adds the argument to the collection. + * + * + * @param perm + * java.security.Permission the permission to add to the + * collection + */ + public void add(Permission perm) { + if (isReadOnly()) { + throw new IllegalStateException(); + } + String name = perm.getName(); + all_allowed = all_allowed || name.equals("*"); + permissions.put(name, perm); + } + + /** + * Answers an enumeration of the permissions in the receiver. + * + * + * @return Enumeration the permissions in the receiver. + */ + public Enumeration elements() { + return permissions.elements(); + } + + /** + * Indicates whether the argument permission is implied by the permissions + * contained in the receiver. Note that, the permissions are not consulted + * during the operation of this method. + * + * + * @return boolean true if the argument permission is implied + * by the permissions in the receiver, and false if + * it is not. + * @param perm + * java.security.Permission the permission to check + */ + public boolean implies(Permission perm) { + if (all_allowed) + return true; + String name = perm.getName(); + if (permissions.get(name) != null) + return true; + int i = name.lastIndexOf('.'); + while (i >= 0) { + // Fail for strings of the form "foo..bar" or "foo.". + if (i + 1 == name.length()) + return false; + name = name.substring(0, i); + if (permissions.get(name + ".*") != null) + return true; + i = name.lastIndexOf('.'); + } + return false; + } +} Added: incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/CodeSource.java URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/CodeSource.java?rev=350181&view=auto ============================================================================== --- incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/CodeSource.java (added) +++ incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/CodeSource.java Wed Nov 30 21:29:27 2005 @@ -0,0 +1,312 @@ +/* Copyright 1998, 2004 The Apache Software Foundation or its licensors, as applicable + * + * Licensed 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. + */ + +package java.security; + + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.net.URL; +import java.security.cert.Certificate; +import java.security.cert.CertificateEncodingException; +import java.security.cert.CertificateException; +import java.security.cert.CertificateFactory; +import java.util.Enumeration; +import java.util.Hashtable; + +/** + * This class represents a "source of code" which is taken to be an URL + * representing the location where that code was loaded from, and a list of + * certificates that were used to verify that code. + * + */ +public class CodeSource extends Object implements java.io.Serializable { + static final long serialVersionUID = 4977541819976013951L; + + /** + * The URL which was used to create the receiver. + */ + private URL location; + + /** + * The Certificates which were used to create the receiver. + */ + private transient Certificate[] certificates; + + /** + * A hashtable containing the values from the certificates array. + */ + private transient Hashtable certificatesSet; + + /** + * Constructs a new instance of this class with its url and certificates + * fields filled in from the arguments. + * + * @param url + * URL the URL. + * @param certificates + * Certificate[] the Certificates. + */ + public CodeSource(URL url, Certificate[] certificates) { + location = url; + if (certificates != null) { + this.certificates = (Certificate[]) certificates.clone(); + certificatesSet = new Hashtable(certificates.length * 3 / 2); + for (int i = 0; i < certificates.length; ++i) + if (certificates[i] != null) + certificatesSet.put(certificates[i], "ignored"); + if (certificatesSet.size() == 0) + certificatesSet = null; + } + } + + /** + * Compares the argument to the receiver, and answers true if they represent + * the same object using a class specific comparison. In this + * case, the receiver and the object must have the same URL and the same + * collection of certificates. + * + * + * @param o + * the object to compare with this object + * @return true if the object is the same as this object + * false if it is different from this object + * @see #hashCode + */ + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null) + return false; + if (this.getClass() != o.getClass()) + return false; + CodeSource other = (CodeSource) o; + + // Check if URLs match. + URL myLocation = this.getLocation(); + if (myLocation == null) { + if (other.getLocation() != null) + return false; + } else { + if (!myLocation.equals(other.getLocation())) + return false; + } + + // URLs match, so check certificates. + if (certificatesSet == null) { + if (other.certificatesSet != null) + return false; + } else { + // This code relies on the assumption that, multiple copies + // of the same certificate do not contribute anything interesting + // to the differences. For example, if two code sources differ + // in that the first has two certificate "A"s and one certificate + // "B", while the other has two certificate "B"s and one certificate + // "A", they should still be considered the same. + if (other.certificatesSet == null) + return false; + if (certificatesSet.size() != other.certificatesSet.size()) + return false; + Enumeration keysEnum = certificatesSet.keys(); + while (keysEnum.hasMoreElements()) + if (!other.certificatesSet.containsKey(keysEnum.nextElement())) + return false; + } + + return true; + } + + /** + * Answers an integer hash code for the receiver. Any two objects which + * answer true when passed to .equals must + * answer the same value for this method. + * + * + * @return int the receiver's hash. + * + * @see #equals + */ + public int hashCode() { + URL myLocation = this.getLocation(); + if (myLocation == null) { + return 1313; + } + return myLocation.hashCode(); + } + + /** + * Answers the certificates held onto by the receiver. + * + * + * @return Certificate[] the receiver's certificates + */ + public final Certificate[] getCertificates() { + if (certificates == null) + return null; + return (Certificate[]) certificates.clone(); + } + + /** + * Answers the receiver's location. + * + * + * @return URL the receiver's URL + */ + public final URL getLocation() { + return location; + } + + /** + * Indicates whether the argument code source is implied by the receiver. + * + * + * @return boolean true if the argument code source is + * implied by the receiver, and false if it is not. + * @param other + * CodeSource the code source to check + */ + public boolean implies(CodeSource other) { + if (other == null) + return false; + if (this == other) + return true; + + // Check certificates: If I have certificates, + // then they must all be in the other one. + if (certificatesSet != null) { + if (other.certificatesSet == null) + return false; + Enumeration keysEnum = certificatesSet.keys(); + while (keysEnum.hasMoreElements()) + if (!other.certificatesSet.containsKey(keysEnum.nextElement())) + return false; + } + + // Check the URLs. There are some very subtle rules being encoded + // here. + URL myURL = this.getLocation(); + if (myURL != null) { + URL hisURL = other.getLocation(); + if (hisURL == null) + return false; + if (myURL.equals(hisURL)) + return true; + if (!myURL.getProtocol().equals(hisURL.getProtocol())) + return false; + if (myURL.getHost() != null) { + if (hisURL.getHost() == null + || !new java.net.SocketPermission(myURL.getHost(), + "resolve") + .implies(new java.net.SocketPermission(hisURL + .getHost(), "resolve"))) + return false; + } + if (myURL.getPort() != -1 && myURL.getPort() != hisURL.getPort()) + return false; + String myFile = myURL.getFile(); + String hisFile = hisURL.getFile(); + if (myFile != null && !myFile.equals(hisFile)) { + if (myFile.endsWith("/-")) { + if (!hisFile.startsWith(myFile.substring(0, + myFile.length() - 1))) + return false; + } else if (myFile.endsWith("/*")) { + if ((!hisFile.startsWith(myFile.substring(0, myFile + .length() - 1))) + || (hisFile.indexOf('/', myFile.length()) > 0)) + return false; + } else if (!myFile.endsWith("/")) { + if (!hisFile.equals(myFile + "/")) + return false; + } else + return false; + } + if (myURL.getRef() != null + && !myURL.getRef().equals(hisURL.getRef())) + return false; + } + return true; + } + + /** + * Answers a string containing a concise, human-readable description of the + * receiver. + * + * + * @return a printable representation for the receiver. + */ + public String toString() { + StringBuffer result = new StringBuffer("CodeSource : "); //$NON-NLS-1$ + + if (certificates == null || certificates.length == 0) { + result.append(location + " : no certificates"); //$NON-NLS-1$ + } else { + result.append(location + " : " + certificates); //$NON-NLS-1$ + } + return result.toString(); + } + + private void writeObject(ObjectOutputStream stream) throws IOException { + stream.defaultWriteObject(); + if (certificates == null) { + stream.writeInt(0); + } else { + stream.writeInt(certificates.length); + for (int i = 0; i < certificates.length; i++) { + stream.writeUTF(certificates[i].getType()); + try { + byte[] encoded = certificates[i].getEncoded(); + stream.writeInt(encoded.length); + stream.write(encoded); + } catch (CertificateEncodingException e) { + stream.writeInt(0); + } + } + } + } + + private void readObject(ObjectInputStream stream) throws IOException, + ClassNotFoundException { + stream.defaultReadObject(); + int count = stream.readInt(); + if (count > 0) { + certificates = new Certificate[count]; + for (int i = 0; i < count; i++) { + String type = stream.readUTF(); + int length = stream.readInt(); + if (length > 0) { + byte[] encoded = new byte[length]; + stream.read(encoded); + try { + CertificateFactory factory = CertificateFactory + .getInstance(type); + certificates[i] = factory + .generateCertificate(new ByteArrayInputStream( + encoded)); + } catch (CertificateException e) { + } + } + } + certificatesSet = new Hashtable(certificates.length * 3 / 2); + for (int i = 0; i < certificates.length; ++i) + if (certificates[i] != null) + certificatesSet.put(certificates[i], "ignored"); + if (certificatesSet.size() == 0) + certificatesSet = null; + } + } +} Added: incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/DigestException.java URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/DigestException.java?rev=350181&view=auto ============================================================================== --- incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/DigestException.java (added) +++ incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/DigestException.java Wed Nov 30 21:29:27 2005 @@ -0,0 +1,45 @@ +/* Copyright 1998, 2002 The Apache Software Foundation or its licensors, as applicable + * + * Licensed 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. + */ + +package java.security; + + +/** + * This class represents exceptions for message digest computation. + * + */ +public class DigestException extends GeneralSecurityException { + + /** + * Constructs a new instance of this class with its walkback filled in. + * + */ + public DigestException() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * + * @param detailMessage + * String The detail message for the exception. + */ + public DigestException(String detailMessage) { + super(detailMessage); + } + +} Added: incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/DigestInputStream.java URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/DigestInputStream.java?rev=350181&view=auto ============================================================================== --- incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/DigestInputStream.java (added) +++ incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/DigestInputStream.java Wed Nov 30 21:29:27 2005 @@ -0,0 +1,165 @@ +/* Copyright 1998, 2004 The Apache Software Foundation or its licensors, as applicable + * + * Licensed 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. + */ + +package java.security; + + +import java.io.IOException; + +/** + * This class implements a stream that computes a message digest hash as the + * bytes are read from it. + * + */ +public class DigestInputStream extends java.io.FilterInputStream { + + /** + * The digest to use when computing the hash. + */ + protected MessageDigest digest; + + /** + * True if the digest should be computed for the next chunck of bytes read. + */ + private boolean on; + + /** + * Constructs a new DigestInputStream on an existing stream with the given + * MessageDigest. + * + * + * + * @param in + * java.io.InputStream source of the bytes to digest. + * @param digest + * java.security.MessageDigest digest to use when computing the + * hash. + * + * @see #on + * @see MessageDigest + */ + public DigestInputStream(java.io.InputStream in, MessageDigest digest) { + super(in); + setMessageDigest(digest); + on(true); + } + + /** + * Answers the MessageDigest which the receiver uses when computing the + * hash. + * + * + * @return MessageDigest the digest the receiver uses when computing the + * hash. + * + */ + public MessageDigest getMessageDigest() { + return digest; + } + + /** + * Enables or disables the digest function (default is on). + * + * + * @param on + * boolean true if the digest should be computed, and false + * otherwise. + * + * @see MessageDigest + */ + public void on(boolean on) { + this.on = on; + } + + /** + * Reads the next byte and answers it as an int. Updates the digest for the + * byte if this fuction is enabled. + * + * + * @return int the byte which was read or -1 at end of stream. + * + * @exception java.io.IOException + * If reading the source stream causes an IOException. + */ + public int read() throws IOException { + int result = super.read(); + if (on && result >= 0) + digest.engineUpdate((byte) result); + return result; + } + + /** + * Reads at most count bytes from the Stream and stores them + * in the byte array buffer starting at offset. + * Answer the number of bytes actually read or -1. Updates the digest for + * the bytes being read if this fuction is enabled. + * + * + * @param buffer + * byte[] the byte array in which to store the read bytes. + * @param offset + * int the offset in buffer to store the read + * bytes. + * @param count + * int the maximum number of bytes to store in + * buffer. + * @return int the number of bytes actually read or -1 if end of stream. + * + * @exception java.io.IOException + * If reading the source stream causes an IOException. + */ + + public int read(byte[] buffer, int offset, int count) throws IOException { + int read = super.read(buffer, offset, count); + if (on && read > 0) + digest.engineUpdate(buffer, offset, read); + return read; + } + + /** + * Sets the MessageDigest which the receiver will use when computing the + * hash. + * + * + * @param digest + * MessageDigest the digest to use when computing the hash. + * + * @see MessageDigest + * @see #on + */ + public void setMessageDigest(MessageDigest digest) { + this.digest = digest; + } + + /** + * Answers a string containing a concise, human-readable description of the + * receiver. + * + * + * @return String a printable representation for the receiver. + */ + public String toString() { + StringBuffer answer = new StringBuffer("DigestInputStream"); + if (digest != null) { + answer.append(" : "); + answer.append(digest.toString()); + } + if (on) + answer.append(" : (digest on)"); + else + answer.append(" : (digest off)"); + return answer.toString(); + } +} Added: incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/DigestOutputStream.java URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/DigestOutputStream.java?rev=350181&view=auto ============================================================================== --- incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/DigestOutputStream.java (added) +++ incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/DigestOutputStream.java Wed Nov 30 21:29:27 2005 @@ -0,0 +1,165 @@ +/* Copyright 1998, 2004 The Apache Software Foundation or its licensors, as applicable + * + * Licensed 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. + */ + +package java.security; + + +import java.io.IOException; + +/** + * This class implements a stream that computes a message digest hash as the + * bytes are written to it. + * + */ + +public class DigestOutputStream extends java.io.FilterOutputStream { + + /** + * The digest to use when computing the hash. + */ + protected MessageDigest digest; + + /** + * True if the digest should be computed for the next chunck of bytes + * written. + */ + private boolean on; + + /** + * Constructs a new DigestOutputStream on an existing stream and with the + * given MessageDigest. + * + * + * + * @param out + * java.io.OutputStream where the bytes will be written to. + * @param digest + * MessageDigest digest to use when computing the hash. + * + * @see #on + * @see MessageDigest + */ + public DigestOutputStream(java.io.OutputStream out, MessageDigest digest) { + super(out); + setMessageDigest(digest); + on(true); + } + + /** + * Answers the MessageDigest which the receiver uses when computing the + * hash. + * + * + * @return MessageDigest the digest the receiver uses when computing the + * hash. + */ + + public MessageDigest getMessageDigest() { + return digest; + } + + /** + * Enables or disables the digest function (default is on). + * + * + * @param on + * boolean true if the digest should be computed, and false + * otherwise. + * + * @see MessageDigest + */ + public void on(boolean on) { + this.on = on; + } + + /** + * Sets the MessageDigest which the receiver will use when computing the + * hash. + * + * + * @param digest + * MessageDigest the digest to use when computing the hash. + * + * @see MessageDigest + * @see #on + */ + public void setMessageDigest(MessageDigest digest) { + this.digest = digest; + } + + /** + * Answers a string containing a concise, human-readable description of the + * receiver. + * + * + * @return String a printable representation for the receiver. + */ + public String toString() { + StringBuffer answer = new StringBuffer("DigestOutputStream"); + if (digest != null) { + answer.append(" : "); + answer.append(digest.toString()); + } + if (on) + answer.append(" : (digest on)"); + else + answer.append(" : (digest off)"); + return answer.toString(); + } + + /** + * Writes length bytes from the byte array + * buffer starting at offset and updates the + * message digest hash if this function is enabled. + * + * + * @param buffer + * byte[] the buffer to be written. + * @param offset + * int offset in buffer to begin writing. + * @param length + * int number of bytes to write. + * + * @exception java.io.IOException + * If an error occurs attempting to write to this stream. + * @exception java.lang.IndexOutOfBoundsException + * If offset or count are outside of bounds. + * + * @see MessageDigest + * @see #on + */ + public void write(byte[] buffer, int offset, int length) throws IOException { + super.write(buffer, offset, length); + } + + /** + * Writes a single byte to the receiver and updates the message digest hash + * if this function is enabled. + * + * + * @param oneByte + * int the byte to be written. + * + * @exception java.io.IOException + * If an error occurs attempting to write to the underlying + * stream. + */ + public void write(int oneByte) throws IOException { + super.write(oneByte); + if (on) + digest.engineUpdate((byte) oneByte); + } + +} Added: incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/DomainCombiner.java URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/DomainCombiner.java?rev=350181&view=auto ============================================================================== --- incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/DomainCombiner.java (added) +++ incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/DomainCombiner.java Wed Nov 30 21:29:27 2005 @@ -0,0 +1,40 @@ +/* Copyright 1998, 2002 The Apache Software Foundation or its licensors, as applicable + * + * Licensed 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. + */ + +package java.security; + + +/** + * A DomainCombiner is a way to update the protection domains from an + * AccessControlContext + * + */ +public interface DomainCombiner { + + /** + * Updates the protection domains given as arguments. + * + * + * @param executionDomains + * java.security.ProtectionDomain[] protection domains from the + * current execution Thread + * @param parentDomains + * java.security.ProtectionDomain[] protection domains from the + * parent Thread + * @return ProtectionDomain[] updated protection domains + */ + public ProtectionDomain[] combine(ProtectionDomain[] executionDomains, + ProtectionDomain[] parentDomains); +} Added: incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/GeneralSecurityException.java URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/GeneralSecurityException.java?rev=350181&view=auto ============================================================================== --- incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/GeneralSecurityException.java (added) +++ incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/GeneralSecurityException.java Wed Nov 30 21:29:27 2005 @@ -0,0 +1,45 @@ +/* Copyright 1998, 2002 The Apache Software Foundation or its licensors, as applicable + * + * Licensed 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. + */ + +package java.security; + + +/** + * This class represents the general security exception. Subclasses will + * represents specific security problems. + * + */ +public class GeneralSecurityException extends Exception { + + /** + * Constructs a new instance of this class with its walkback filled in. + * + */ + public GeneralSecurityException() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * + * @param detailMessage + * String The detail message for the exception. + */ + public GeneralSecurityException(String detailMessage) { + super(detailMessage); + } +} Added: incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/Guard.java URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/Guard.java?rev=350181&view=auto ============================================================================== --- incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/Guard.java (added) +++ incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/Guard.java Wed Nov 30 21:29:27 2005 @@ -0,0 +1,37 @@ +/* Copyright 1998, 2004 The Apache Software Foundation or its licensors, as applicable + * + * Licensed 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. + */ + +package java.security; + + +/** + * This interface is implemented by objects which wish to control access to + * other objects. + * + */ +public interface Guard { + /** + * Checks whether access should be granted to the argument. If access is + * granted, this method simply returns. If it is not granted, then a + * SecurityException should be thrown. + * + * + * @param guardedObject + * java.lang.Object an object to check for accessibility + * @exception java.lang.SecurityException + * If access is not granted to the object + */ + void checkGuard(Object guardedObject) throws SecurityException; +} Added: incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/GuardedObject.java URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/GuardedObject.java?rev=350181&view=auto ============================================================================== --- incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/GuardedObject.java (added) +++ incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/GuardedObject.java Wed Nov 30 21:29:27 2005 @@ -0,0 +1,63 @@ +/* Copyright 1998, 2004 The Apache Software Foundation or its licensors, as applicable + * + * Licensed 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. + */ + +package java.security; + + +import java.io.Serializable; + +/** + * GuardedObject controls access to an object, by checking all requests for the + * object with a Guard. + * + */ +public class GuardedObject implements Serializable { + static final long serialVersionUID = -5240450096227834308L; + + Object object; + + Guard guard; + + /** + * Constructs a GuardedObject to protect access to the specified Object + * using the specified Guard. + * + * @param guardedObject + * the Object to guard + * @param theGuard + * the Guard + */ + public GuardedObject(Object guardedObject, Guard theGuard) { + object = guardedObject; + guard = theGuard; + } + + /** + * Checks whether access should be granted to the object. If access is + * granted, this method returns the object. If it is not granted, then a + * SecurityException is thrown. + * + * + * @return the guarded object + * + * @exception java.lang.SecurityException + * If access is not granted to the object + */ + public Object getObject() throws SecurityException { + if (guard != null) + guard.checkGuard(object); + return object; + } +} Added: incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/InvalidAlgorithmParameterException.java URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/InvalidAlgorithmParameterException.java?rev=350181&view=auto ============================================================================== --- incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/InvalidAlgorithmParameterException.java (added) +++ incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/InvalidAlgorithmParameterException.java Wed Nov 30 21:29:27 2005 @@ -0,0 +1,45 @@ +/* Copyright 1998, 2004 The Apache Software Foundation or its licensors, as applicable + * + * Licensed 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. + */ + +package java.security; + + +/** + * This class represents invalid algorithm parameters to cryprographic services. + * + */ +public class InvalidAlgorithmParameterException extends + GeneralSecurityException { + + /** + * Constructs a new instance of this class with its walkback filled in. + * + */ + public InvalidAlgorithmParameterException() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * + * @param detailMessage + * String The detail message for the exception. + */ + public InvalidAlgorithmParameterException(String detailMessage) { + super(detailMessage); + } +} Added: incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/InvalidKeyException.java URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/InvalidKeyException.java?rev=350181&view=auto ============================================================================== --- incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/InvalidKeyException.java (added) +++ incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/InvalidKeyException.java Wed Nov 30 21:29:27 2005 @@ -0,0 +1,46 @@ +/* Copyright 1998, 2002 The Apache Software Foundation or its licensors, as applicable + * + * Licensed 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. + */ + +package java.security; + + +/** + * Used when invalid cryptography keys are used. + * + * @see Throwable + * @see Error + */ +public class InvalidKeyException extends KeyException { + + /** + * Constructs a new instance of this class with its walkback filled in. + * + */ + public InvalidKeyException() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * + * @param detailMessage + * String The detail message for the exception. + */ + public InvalidKeyException(String detailMessage) { + super(detailMessage); + } +} Added: incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/InvalidParameterException.java URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/InvalidParameterException.java?rev=350181&view=auto ============================================================================== --- incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/InvalidParameterException.java (added) +++ incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/InvalidParameterException.java Wed Nov 30 21:29:27 2005 @@ -0,0 +1,44 @@ +/* Copyright 1998, 2002 The Apache Software Foundation or its licensors, as applicable + * + * Licensed 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. + */ + +package java.security; + + +/** + * This exception is thrown when an invalid parameter is passed to a method. + * + */ +public class InvalidParameterException extends IllegalArgumentException { + + /** + * Constructs a new instance of this class with its walkback filled in. + * + */ + public InvalidParameterException() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * + * @param detailMessage + * String The detail message for the exception. + */ + public InvalidParameterException(String detailMessage) { + super(detailMessage); + } +} Added: incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/Key.java URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/Key.java?rev=350181&view=auto ============================================================================== --- incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/Key.java (added) +++ incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/Key.java Wed Nov 30 21:29:27 2005 @@ -0,0 +1,56 @@ +/* Copyright 1998, 2002 The Apache Software Foundation or its licensors, as applicable + * + * Licensed 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. + */ + +package java.security; + + +/** + * Defines the basic properties of all key objects. + * + * @see PublicKey + */ + +public interface Key extends java.io.Serializable { + + // Set the version id so we are field-compatible with JDK. + public static final long serialVersionUID = 6603384152749567654L; + + /** + * Answers the name of the algorithm that this key will work with. If the + * algorithm is unknown, it answers null. + * + * + * @return String the receiver's algorithm + */ + public abstract String getAlgorithm(); + + /** + * Answers the encoded form of the receiver. + * + * + * @return byte[] the encoded form of the receiver + */ + public abstract byte[] getEncoded(); + + /** + * Answers the name of the format used to encode the key, or null if it can + * not be encoded. + * + * + * @return String the receiver's encoding format + */ + public abstract String getFormat(); + +} Added: incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/KeyException.java URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/KeyException.java?rev=350181&view=auto ============================================================================== --- incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/KeyException.java (added) +++ incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/KeyException.java Wed Nov 30 21:29:27 2005 @@ -0,0 +1,48 @@ +/* Copyright 1998, 2002 The Apache Software Foundation or its licensors, as applicable + * + * Licensed 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. + */ + +package java.security; + + +/** + * This class is the superclass of all classes which represent problems with + * keys. + * + * + * @see Throwable + * @see Error + */ +public class KeyException extends GeneralSecurityException { + + /** + * Constructs a new instance of this class with its walkback filled in. + * + */ + public KeyException() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * + * @param detailMessage + * String The detail message for the exception. + */ + public KeyException(String detailMessage) { + super(detailMessage); + } +} Added: incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/MessageDigest.java URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/MessageDigest.java?rev=350181&view=auto ============================================================================== --- incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/MessageDigest.java (added) +++ incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/MessageDigest.java Wed Nov 30 21:29:27 2005 @@ -0,0 +1,439 @@ +/* Copyright 1998, 2005 The Apache Software Foundation or its licensors, as applicable + * + * Licensed 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. + */ + +package java.security; + + +/** + * Makes available message digest algorithm functionality. + */ +public abstract class MessageDigest extends java.security.MessageDigestSpi { + + // Key prefix for algorithm name lookup + private static final String KEY_PREFIX = "MessageDigest."; + + // Name of the digest algorithm represented by the receiver + private String algorithmName; + + // Provider of the digest algorithm represented by the receiver. + private Provider provider; + + // *** WARNING *** - The provider is not passed as parameter to the + // constructor. It means it will be uninitialized until an actual binding + // to a concrete class by a provider is performed, in getInstance. + + // This one is tricky. Providers are supposed to subclass MessageDigestSpi, + // but method getInstance in MessageDigest returns a MessageDigest. + // Therefore, there is no way we can return the user-provider class + // directly (incompatible types). + // We need to return a MessageDigest (or subclass) instance, but + // somehow have a reference to the provider digest instance. This is what + // the Wrapper class below implements. + static private class Wrapper extends MessageDigest { + MessageDigestSpi providerDigest; + + Wrapper(MessageDigestSpi providerDigest, String algorithmName) { + // Just because there is no empty constructor in the superclass + super(algorithmName); + this.providerDigest = providerDigest; + } + + public Object clone() throws CloneNotSupportedException { + Wrapper clone = new Wrapper((MessageDigestSpi) providerDigest + .clone(), getAlgorithm()); + clone.setProvider(getProvider()); + return clone; + } + + protected byte[] engineDigest() { + return providerDigest.engineDigest(); + } + + protected void engineReset() { + providerDigest.engineReset(); + } + + protected void engineUpdate(byte bytesToHash[], int offset, int count) { + providerDigest.engineUpdate(bytesToHash, offset, count); + } + + protected void engineUpdate(byte byteToHash) { + providerDigest.engineUpdate(byteToHash); + } + + protected int engineGetDigestLength() { + return providerDigest.engineGetDigestLength(); + } + } + + /** + * Create a new MessageDigest with its algorithm set to the argument. + * + * + * @param algorithmName + * java.lang.String the algorithm that the receiver will + * represent + */ + protected MessageDigest(String algorithmName) { + setAlgorithm(algorithmName); + } + + /* + * (non-Javadoc) + * + * @see java.lang.Object#clone() + */ + public Object clone() throws CloneNotSupportedException { + return super.clone(); + } + + /** + * Computes and answers the final hash value that the receiver represents. + * After the digest is computed the receiver is reset. + * + * @return the hash the receiver computed + * + * @see #reset + */ + public byte[] digest() { + byte[] answer = engineDigest(); + reset(); + return answer; + } + + /** + * Includes the bytes of the argument in the hash value computed by the + * receiver, and then computes the final digest value. + * + * @param bytesToHash + * byte[] the source array + * @return the hash the receiver computed + * + * @see #update(byte) + * @see #update(byte[]) + * @see #update(byte[], int, int) + * @see #digest() + * @see #digest(byte[]) + * @see #digest(byte[], int, int) + */ + public byte[] digest(byte bytesToHash[]) { + update(bytesToHash); + return digest(); + } + + /** + * Computes the digest and stores it into the buffer passed as parameter. + * + * @param computedDigest + * byte[] the array into which to store the digest + * @param offset + * the starting offset into the array + * @param count + * the number of bytes available to store the digest + * + * @exception DigestException + * If an error occurs + * + * @return the number of bytes copied + * @see #digest() + * @see #digest(byte[]) + * @see #digest(byte[], int, int) + */ + public int digest(byte computedDigest[], int offset, int count) + throws DigestException { + byte[] digest = digest(); + int toCopy = count; + if (digest.length < toCopy) + toCopy = digest.length; + System.arraycopy(digest, 0, computedDigest, offset, toCopy); + return toCopy; + } + + /** + * Answers the standard Java Security name for the algorithm being used by + * the receiver. + * + * @return String the name of the algorithm + */ + public final String getAlgorithm() { + return algorithmName; + } + + /** + * Return the engine digest length in bytes. Default is 0. + * + * @return int the engine digest length in bytes + * + */ + public final int getDigestLength() { + return engineGetDigestLength(); + } + + /** + * Answers a new MessageDigest which is capable of running the algorithm + * described by the argument. The result will be an instance of a subclass + * of MessageDigest which implements that algorithm. + * + * + * @param algorithmName + * java.lang.String Name of the algorithm desired + * @return MessageDigest a concrete implementation for the algorithm + * desired. + * + * @exception NoSuchAlgorithmException + * If the algorithm cannot be found + */ + public static MessageDigest getInstance(String algorithmName) + throws NoSuchAlgorithmException { + + if (algorithmName == null) + throw new IllegalArgumentException(); + + Provider[] providers = Security.getProviders(); + for (int i = 0; i < providers.length; i++) { + Provider provider = providers[i]; + MessageDigest digest = toMessageDigestImplementation(algorithmName, + provider); + if (digest != null) + return digest; + } + + // Scanned all, found nothing + throw new NoSuchAlgorithmException(algorithmName); + } + + /** + * Answers a new MessageDigest which is capable of running the algorithm + * described by the argument. The result will be an instance of a subclass + * of MessageDigest which implements that algorithm. + * + * + * @param algorithmName + * java.lang.String Name of the algorithm desired + * @param providerName + * java.lang.String Name of the provider which has to implement + * the algorithm + * @return MessageDigest a concrete implementation for the algorithm + * desired. + * + * @exception NoSuchAlgorithmException + * If the algorithm cannot be found + * @exception NoSuchProviderException + * If the provider cannot be found + */ + public static MessageDigest getInstance(String algorithmName, + String providerName) throws NoSuchAlgorithmException, + NoSuchProviderException { + + if (providerName == null) + throw new java.lang.IllegalArgumentException(); + if (algorithmName == null) + throw new java.lang.IllegalArgumentException(); + + Provider provider = Security.getProvider(providerName); + if (provider == null) + throw new NoSuchProviderException(providerName); + + MessageDigest digest = toMessageDigestImplementation(algorithmName, + provider); + if (digest == null) + throw new NoSuchAlgorithmException(algorithmName); + return digest; + } + + /** + * Answers a new MessageDigest which is capable of running the algorithm + * described by the argument. The result will be an instance of a subclass + * of MessageDigest which implements that algorithm. + * + * + * @param algorithm + * java.lang.String Name of the algorithm desired + * @param provider + * Provider Provider which has to implement the algorithm + * @return MessageDigest a concrete implementation for the algorithm + * desired. + * + * @exception NoSuchAlgorithmException + * If the algorithm cannot be found + */ + public static MessageDigest getInstance(String algorithm, Provider provider) + throws NoSuchAlgorithmException { + if ((algorithm == null) || (provider == null)) { + throw new IllegalArgumentException(); + } + + return toMessageDigestImplementation(algorithm, provider); + + } + + /** + * Returns the Provider of the digest represented by the receiver. + * + * @return Provider an instance of a subclass of java.security.Provider + */ + public final Provider getProvider() { + return provider; + } + + /** + * Does a simply byte-per-byte compare of the two digests. + * + * @param digesta + * One of the digests to compare + * @param digestb + * The digest to compare to + * + * @return true if the two hashes are equal + * false if the two hashes are not equal + */ + public static boolean isEqual(byte[] digesta, byte[] digestb) { + return java.util.Arrays.equals(digesta, digestb); + } + + /** + * Puts the receiver back in an initial state, such that it is ready to + * compute a new hash. + * + * @see java.security.MessageDigest.Wrapper#engineReset() + */ + public void reset() { + engineReset(); + } + + /** + * Set the algorithm being used by the receiver to the argument which should + * be a standard Java Security algorithm name. + * + * @param algorithmName + * String the name of the algorithm + */ + void setAlgorithm(String algorithmName) { + this.algorithmName = algorithmName; + } + + /** + * Set the provider being used by the receiver to the argument which should + * be an instance of a subclass of Provider + * + * @param provider + * the Provider for the receiver + */ + void setProvider(Provider provider) { + this.provider = provider; + } + + /** + * Answers a MessageDigest for the algorithm name supplied by the given + * provider. + * + * + * @param algorithmName + * java.lang.String the name of the algorithm to search for + * @param provider + * java.security.Provider the provider desired for the algorithm. + * + * @return The message digest for the algorithm name supplied by the given + * provider. + * + */ + private static MessageDigest toMessageDigestImplementation( + String algorithmName, Provider provider) { + // First try to find the class corresponding to the algorithm name + String digestClassName; + try { + digestClassName = provider + .lookupProperty(KEY_PREFIX, algorithmName); + if (digestClassName == null) + return null; + } catch (ClassCastException e) { + return null; + } + + // Now try to instantiate the digest. + try { + Class digestClass = Class.forName(digestClassName, true, provider + .getClass().getClassLoader()); + MessageDigestSpi providedDigest = (MessageDigestSpi) digestClass + .newInstance(); + MessageDigest digest; + if (providedDigest instanceof MessageDigest) + digest = (MessageDigest) providedDigest; + else + digest = new Wrapper(providedDigest, algorithmName); + digest.setProvider(provider); + return digest; + } catch (ClassNotFoundException ex) { + // Intentionally empty + } catch (IllegalAccessException e) { + // Intentionally empty + } catch (InstantiationException e) { + // Intentionally empty + } catch (ClassCastException e) { + // Intentionally empty + } + return null; + } + + /** + * Answers a string containing a concise, human-readable description of the + * receiver. + * + * @return a printable representation for the receiver. + */ + public String toString() { + return "MessageDigest : algorithm " + getAlgorithm() //$NON-NLS-1$ + + " from provider " + getProvider().getName(); //$NON-NLS-1$ + } + + /** + * Includes the bytes of the argument in the hash value computed by the + * receiver. + * + * @param bytesToHash + * byte[] the source array + */ + public void update(byte bytesToHash[]) { + engineUpdate(bytesToHash, 0, bytesToHash.length); + } + + /** + * Includes a range of bytes from the first argument in the hash value + * computed by the receiver. + * + * @param bytesToHash + * byte[] the source array + * @param offset + * the starting offset into the array + * @param count + * the number of bytes to include in the hash + */ + public void update(byte bytesToHash[], int offset, int count) { + engineUpdate(bytesToHash, offset, count); + } + + /** + * Includes the argument in the hash value computed + * by the receiver. + * + * @param byteToHash byte + * the byte to feed to the hash algorithm + * + * @see #reset() + */ + public void update(byte byteToHash) { + engineUpdate(byteToHash); + } +} Added: incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/MessageDigestSpi.java URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/MessageDigestSpi.java?rev=350181&view=auto ============================================================================== --- incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/MessageDigestSpi.java (added) +++ incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/MessageDigestSpi.java Wed Nov 30 21:29:27 2005 @@ -0,0 +1,129 @@ +/* Copyright 1998, 2004 The Apache Software Foundation or its licensors, as applicable + * + * Licensed 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. + */ + +package java.security; + + +/** + * This class is a Service Provider Interface (therefore the Spi suffix) for + * digest algorithms to be supplied by providers. Examples of digest algorithms + * are MD5 and SHA. + * + * A digest is a secure hash function for a stream of bytes, like a fingerprint + * for the stream of bytes. + * + */ +public abstract class MessageDigestSpi { + /** + * Constructs a new instance of this class + * + */ + public MessageDigestSpi() { + super(); + } + + /* + * (non-Javadoc) + * + * @see java.lang.Object#clone() + */ + public Object clone() throws CloneNotSupportedException { + return super.clone(); + } + + /** + * Actually does the work of computing the final hash value that the + * receiver represents, and answers the resulting value. Note that the + * caller must invoke reset before using the receiver + * further. + * + * + * @return the hash the receiver computed + * + * @see MessageDigest#reset + */ + protected abstract byte[] engineDigest(); + + /** + * Returns the digest value in the buffer provided. + * + * @param buffer + * where to store the resultant digest + * @param offset + * where in buffer to store the digest + * @param length + * how many bytes in buffer are available for + * writing the digest to + * @return the number of bytes in buffer used to actually + * store the digest value + * + * @throws DigestException + * if length is not big enough for the result + * digest + */ + protected int engineDigest(byte[] buffer, int offset, int length) + throws DigestException { + byte[] digest = engineDigest(); + int digestLength = engineGetDigestLength(); + if (digestLength > length) + throw new DigestException(); // Can't fit in the buffer + + System.arraycopy(digest, 0, buffer, offset, digestLength); + return digestLength; + } + + /** + * Return the engine digest length in bytes. Default is 0. + * @return int the engine digest length in bytes + * + */ + protected int engineGetDigestLength() { + return 0; + } + + /** + * Puts the receiver back in an initial state, such that it is ready to + * compute a new hash. + * + * @see MessageDigest#reset() + */ + protected abstract void engineReset(); + + /** + * Includes a range of bytes from the first argument in the hash value + * computed by the receiver. + * + * + * @param bytesToHash + * byte[] the source array + * @param offset + * the starting offset into the array + * @param count + * the number of bytes to include in the hash + */ + protected abstract void engineUpdate(byte bytesToHash[], int offset, + int count); + + /** + * Includes the argument in the hash value computed by the receiver. + * + * + * @param byteToHash + * byte the byte to feed to the hash algorithm + * + * @see MessageDigest#reset() + */ + protected abstract void engineUpdate(byte byteToHash); +} Added: incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/NoSuchAlgorithmException.java URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/NoSuchAlgorithmException.java?rev=350181&view=auto ============================================================================== --- incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/NoSuchAlgorithmException.java (added) +++ incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/NoSuchAlgorithmException.java Wed Nov 30 21:29:27 2005 @@ -0,0 +1,47 @@ +/* Copyright 1998, 2002 The Apache Software Foundation or its licensors, as applicable + * + * Licensed 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. + */ + +package java.security; + + +/** + * Instances of this class are thrown when an attempt is made to access an + * algorithm which is not provided by the library. + * + * @see Throwable + */ +public class NoSuchAlgorithmException extends GeneralSecurityException { + + /** + * Constructs a new instance of this class with its walkback filled in. + * + */ + public NoSuchAlgorithmException() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * + * @param detailMessage + * String The detail message for the exception. + */ + public NoSuchAlgorithmException(String detailMessage) { + super(detailMessage); + } + +} Added: incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/NoSuchProviderException.java URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/NoSuchProviderException.java?rev=350181&view=auto ============================================================================== --- incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/NoSuchProviderException.java (added) +++ incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/NoSuchProviderException.java Wed Nov 30 21:29:27 2005 @@ -0,0 +1,46 @@ +/* Copyright 1998, 2002 The Apache Software Foundation or its licensors, as applicable + * + * Licensed 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. + */ + +package java.security; + + +/** + * Instances of this class are thrown when an attempt is made to access a + * provider by name which is not currently available. + * + * + * @see Throwable + */ +public class NoSuchProviderException extends GeneralSecurityException { + + /** + * Constructs a new instance of this class with its walkback filled in. + * + */ + public NoSuchProviderException() { + super(); + } + + /** + * Constructs a new instance of this class with its walkback and message + * filled in. + * + * @param detailMessage + * String The detail message for the exception. + */ + public NoSuchProviderException(String detailMessage) { + super(detailMessage); + } +} Added: incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/Permission.java URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/Permission.java?rev=350181&view=auto ============================================================================== --- incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/Permission.java (added) +++ incubator/harmony/enhanced/trunk/sandbox/contribs/ibm_core/java-src/security/src/java/security/Permission.java Wed Nov 30 21:29:27 2005 @@ -0,0 +1,148 @@ +/* Copyright 1998, 2004 The Apache Software Foundation or its licensors, as applicable + * + * Licensed 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. + */ + +package java.security; + + +import java.io.Serializable; + + +/** + * Abstract superclass of all classes which represent permission to access + * system resources. + * + */ +public abstract class Permission implements Guard, Serializable { + static final long serialVersionUID = -5636570222231596674L; + + /** + * The name of the permission. + */ + private String name; + + /** + * Constructs a new instance of this class with its name set to the + * argument. + * + * + * @param permissionName + * String the name of the permission. + */ + public Permission(String permissionName) { + name = permissionName; + } + + /** + * Compares the argument to the receiver, and answers true if they represent + * the same object using a class specific comparison. The + * implementation in Object answers true only if the argument is the exact + * same object as the receiver (==). + * + * + * @param o + * Object the object to compare with this object. + * @return boolean true if the object is the same as this + * object false if it is different from this object. + * @see #hashCode + */ + public abstract boolean equals(Object o); + + /** + * Answers an integer hash code for the receiver. Any two objects which + * answer true when passed to .equals must + * answer the same value for this method. + * + * + * @return int the receiver's hash. + * + * @see #equals + */ + public abstract int hashCode(); + + /** + * Checks that the receiver is granted in the current access control context + * (Guard interface). Note that the argument is not currently used. + * + * + * @param object + * Object ignored. + * + * @exception java.lang.SecurityException + * If access is not granted + */ + public void checkGuard(Object object) throws SecurityException { + SecurityManager security = System.getSecurityManager(); + if (security != null) + security.checkPermission(this); + } + + /** + * Answers the actions associated with the receiver. Subclasses should + * return their actions in canonical form. If no actions are associated with + * the receiver, the empty string should be returned. + * + * + * @return String the receiver's actions. + */ + public abstract String getActions(); + + /** + * Answers the name of the receiver. + * + * + * @return String the receiver's name. + */ + public final String getName() { + return name; + } + + /** + * Indicates whether the argument permission is implied by the receiver. + * + * + * @return boolean true if the argument permission is implied + * by the receiver, and false if it is not. + * @param permission + * Permission the permission to check. + */ + public abstract boolean implies(Permission permission); + + /** + * Answers a new PermissionCollection for holding permissions of this class. + * Answer null if any permission collection can be used. + * + * + * @return PermissionCollection or null a suitable permission collection for + * instances of the class of the receiver. + */ + public PermissionCollection newPermissionCollection() { + return null; + } + + /** + * Answers a string containing a concise, human-readable description of the + * receiver. + * + * + * @return String a printable representation for the receiver. + */ + public String toString() { + StringBuffer result = new StringBuffer("Permission : "); //$NON-NLS-1$ + result.append(getName()); + result.append(" : with actions " + getActions()); //$NON-NLS-1$ + return result.toString(); + } + +}