blob: 0124e47dfcb9d68dfb082d2b764551654eb1ba3d [file] [log] [blame]
/*
* Copyright (C) 2014 The Android Open Source Project
* Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package java.security;
import java.lang.reflect.*;
import java.util.*;
import java.io.*;
/**
* <p>This class centralizes all security properties and common security
* methods. One of its primary uses is to manage providers.
*
* <p>The default values of security properties are read from an
* implementation-specific location, which is typically the properties file
* {@code lib/security/java.security} in the Java installation directory.
*
* @author Benjamin Renaud
*/
@SuppressWarnings({"unchecked", "deprecation", "all"})
public final class Security {
private Security() { throw new RuntimeException("Stub!"); }
/**
* Gets a specified property for an algorithm. The algorithm name
* should be a standard name. See the <a href=
* "{@docRoot}/../technotes/guides/security/StandardNames.html">
* Java Cryptography Architecture Standard Algorithm Name Documentation</a>
* for information about standard algorithm names.
*
* One possible use is by specialized algorithm parsers, which may map
* classes to algorithms which they understand (much like Key parsers
* do).
*
* @param algName the algorithm name.
*
* @param propName the name of the property to get.
*
* @return the value of the specified property.
*
* @deprecated This method used to return the value of a proprietary
* property in the master file of the "SUN" Cryptographic Service
* Provider in order to determine how to parse algorithm-specific
* parameters. Use the new provider-based and algorithm-independent
* {@code AlgorithmParameters} and {@code KeyFactory} engine
* classes (introduced in the J2SE version 1.2 platform) instead.
*/
@Deprecated
public static java.lang.String getAlgorithmProperty(java.lang.String algName, java.lang.String propName) { throw new RuntimeException("Stub!"); }
/**
* Adds a new provider, at a specified position. The position is
* the preference order in which providers are searched for
* requested algorithms. The position is 1-based, that is,
* 1 is most preferred, followed by 2, and so on.
*
* <p>If the given provider is installed at the requested position,
* the provider that used to be at that position, and all providers
* with a position greater than {@code position}, are shifted up
* one position (towards the end of the list of installed providers).
*
* <p>A provider cannot be added if it is already installed.
*
* <p>If there is a security manager, the
* {@link java.lang.SecurityManager#checkSecurityAccess} method is called
* with the {@code "insertProvider"} permission target name to see if
* it's ok to add a new provider. If this permission check is denied,
* {@code checkSecurityAccess} is called again with the
* {@code "insertProvider."+provider.getName()} permission target name. If
* both checks are denied, a {@code SecurityException} is thrown.
*
* @param provider the provider to be added.
*
* @param position the preference position that the caller would
* like for this provider.
*
* @return the actual preference position in which the provider was
* added, or -1 if the provider was not added because it is
* already installed.
*
* @throws java.lang.NullPointerException if provider is null
* @throws java.lang.SecurityException
* if a security manager exists and its {@link
* java.lang.SecurityManager#checkSecurityAccess} method
* denies access to add a new provider
*
* @see #getProvider
* @see #removeProvider
* @see java.security.SecurityPermission
*/
public static synchronized int insertProviderAt(java.security.Provider provider, int position) { throw new RuntimeException("Stub!"); }
/**
* Adds a provider to the next position available.
*
* <p>If there is a security manager, the
* {@link java.lang.SecurityManager#checkSecurityAccess} method is called
* with the {@code "insertProvider"} permission target name to see if
* it's ok to add a new provider. If this permission check is denied,
* {@code checkSecurityAccess} is called again with the
* {@code "insertProvider."+provider.getName()} permission target name. If
* both checks are denied, a {@code SecurityException} is thrown.
*
* @param provider the provider to be added.
*
* @return the preference position in which the provider was
* added, or -1 if the provider was not added because it is
* already installed.
*
* @throws java.lang.NullPointerException if provider is null
* @throws java.lang.SecurityException
* if a security manager exists and its {@link
* java.lang.SecurityManager#checkSecurityAccess} method
* denies access to add a new provider
*
* @see #getProvider
* @see #removeProvider
* @see java.security.SecurityPermission
*/
public static int addProvider(java.security.Provider provider) { throw new RuntimeException("Stub!"); }
/**
* Removes the provider with the specified name.
*
* <p>When the specified provider is removed, all providers located
* at a position greater than where the specified provider was are shifted
* down one position (towards the head of the list of installed
* providers).
*
* <p>This method returns silently if the provider is not installed or
* if name is null.
*
* <p>First, if there is a security manager, its
* {@code checkSecurityAccess}
* method is called with the string {@code "removeProvider."+name}
* to see if it's ok to remove the provider.
* If the default implementation of {@code checkSecurityAccess}
* is used (i.e., that method is not overriden), then this will result in
* a call to the security manager's {@code checkPermission} method
* with a {@code SecurityPermission("removeProvider."+name)}
* permission.
*
* @param name the name of the provider to remove.
*
* @throws java.lang.SecurityException
* if a security manager exists and its {@link
* java.lang.SecurityManager#checkSecurityAccess} method
* denies
* access to remove the provider
*
* @see #getProvider
* @see #addProvider
*/
public static synchronized void removeProvider(java.lang.String name) { throw new RuntimeException("Stub!"); }
/**
* Returns an array containing all the installed providers. The order of
* the providers in the array is their preference order.
*
* @return an array of all the installed providers.
*/
public static java.security.Provider[] getProviders() { throw new RuntimeException("Stub!"); }
/**
* Returns the provider installed with the specified name, if
* any. Returns null if no provider with the specified name is
* installed or if name is null.
*
* @param name the name of the provider to get.
*
* @return the provider of the specified name.
*
* @see #removeProvider
* @see #addProvider
*/
public static java.security.Provider getProvider(java.lang.String name) { throw new RuntimeException("Stub!"); }
/**
* Returns an array containing all installed providers that satisfy the
* specified selection criterion, or null if no such providers have been
* installed. The returned providers are ordered
* according to their
* {@linkplain #insertProviderAt(java.security.Provider,int) preference order}.
*
* <p> A cryptographic service is always associated with a particular
* algorithm or type. For example, a digital signature service is
* always associated with a particular algorithm (e.g., DSA),
* and a CertificateFactory service is always associated with
* a particular certificate type (e.g., X.509).
*
* <p>The selection criterion must be specified in one of the following two
* formats:
* <ul>
* <li> <i>{@literal <crypto_service>.<algorithm_or_type>}</i>
* <p> The cryptographic service name must not contain any dots.
* <p> A
* provider satisfies the specified selection criterion iff the provider
* implements the
* specified algorithm or type for the specified cryptographic service.
* <p> For example, "CertificateFactory.X.509"
* would be satisfied by any provider that supplied
* a CertificateFactory implementation for X.509 certificates.
* <li> <i>{@literal <crypto_service>.<algorithm_or_type>
* <attribute_name>:<attribute_value>}</i>
* <p> The cryptographic service name must not contain any dots. There
* must be one or more space characters between the
* <i>{@literal <algorithm_or_type>}</i> and the
* <i>{@literal <attribute_name>}</i>.
* <p> A provider satisfies this selection criterion iff the
* provider implements the specified algorithm or type for the specified
* cryptographic service and its implementation meets the
* constraint expressed by the specified attribute name/value pair.
* <p> For example, "Signature.SHA1withDSA KeySize:1024" would be
* satisfied by any provider that implemented
* the SHA1withDSA signature algorithm with a keysize of 1024 (or larger).
*
* </ul>
*
* <p> See the <a href=
* "{@docRoot}/../technotes/guides/security/StandardNames.html">
* Java Cryptography Architecture Standard Algorithm Name Documentation</a>
* for information about standard cryptographic service names, standard
* algorithm names and standard attribute names.
*
* @param filter the criterion for selecting
* providers. The filter is case-insensitive.
*
* @return all the installed providers that satisfy the selection
* criterion, or null if no such providers have been installed.
*
* @throws java.security.InvalidParameterException
* if the filter is not in the required format
* @throws java.lang.NullPointerException if filter is null
*
* @see #getProviders(java.util.Map)
* @since 1.3
*/
public static java.security.Provider[] getProviders(java.lang.String filter) { throw new RuntimeException("Stub!"); }
/**
* Returns an array containing all installed providers that satisfy the
* specified* selection criteria, or null if no such providers have been
* installed. The returned providers are ordered
* according to their
* {@linkplain #insertProviderAt(java.security.Provider,int)
* preference order}.
*
* <p>The selection criteria are represented by a map.
* Each map entry represents a selection criterion.
* A provider is selected iff it satisfies all selection
* criteria. The key for any entry in such a map must be in one of the
* following two formats:
* <ul>
* <li> <i>{@literal <crypto_service>.<algorithm_or_type>}</i>
* <p> The cryptographic service name must not contain any dots.
* <p> The value associated with the key must be an empty string.
* <p> A provider
* satisfies this selection criterion iff the provider implements the
* specified algorithm or type for the specified cryptographic service.
* <li> <i>{@literal <crypto_service>}.
* {@literal <algorithm_or_type> <attribute_name>}</i>
* <p> The cryptographic service name must not contain any dots. There
* must be one or more space characters between the
* <i>{@literal <algorithm_or_type>}</i>
* and the <i>{@literal <attribute_name>}</i>.
* <p> The value associated with the key must be a non-empty string.
* A provider satisfies this selection criterion iff the
* provider implements the specified algorithm or type for the specified
* cryptographic service and its implementation meets the
* constraint expressed by the specified attribute name/value pair.
* </ul>
*
* <p> See the <a href=
* "../../../technotes/guides/security/StandardNames.html">
* Java Cryptography Architecture Standard Algorithm Name Documentation</a>
* for information about standard cryptographic service names, standard
* algorithm names and standard attribute names.
*
* @param filter the criteria for selecting
* providers. The filter is case-insensitive.
*
* @return all the installed providers that satisfy the selection
* criteria, or null if no such providers have been installed.
*
* @throws java.security.InvalidParameterException
* if the filter is not in the required format
* @throws java.lang.NullPointerException if filter is null
*
* @see #getProviders(java.lang.String)
* @since 1.3
*/
public static java.security.Provider[] getProviders(java.util.Map<java.lang.String,java.lang.String> filter) { throw new RuntimeException("Stub!"); }
/**
* Gets a security property value.
*
* <p>First, if there is a security manager, its
* {@code checkPermission} method is called with a
* {@code java.security.SecurityPermission("getProperty."+key)}
* permission to see if it's ok to retrieve the specified
* security property value..
*
* @param key the key of the property being retrieved.
*
* @return the value of the security property corresponding to key.
*
* @throws java.lang.SecurityException
* if a security manager exists and its {@link
* java.lang.SecurityManager#checkPermission} method
* denies
* access to retrieve the specified security property value
* @throws java.lang.NullPointerException is key is null
*
* @see #setProperty
* @see java.security.SecurityPermission
*/
public static java.lang.String getProperty(java.lang.String key) { throw new RuntimeException("Stub!"); }
/**
* Sets a security property value.
*
* <p>First, if there is a security manager, its
* {@code checkPermission} method is called with a
* {@code java.security.SecurityPermission("setProperty."+key)}
* permission to see if it's ok to set the specified
* security property value.
*
* @param key the name of the property to be set.
*
* @param datum the value of the property to be set.
*
* @throws java.lang.SecurityException
* if a security manager exists and its {@link
* java.lang.SecurityManager#checkPermission} method
* denies access to set the specified security property value
* @throws java.lang.NullPointerException if key or datum is null
*
* @see #getProperty
* @see java.security.SecurityPermission
*/
public static void setProperty(java.lang.String key, java.lang.String datum) { throw new RuntimeException("Stub!"); }
/**
* Returns a Set of Strings containing the names of all available
* algorithms or types for the specified Java cryptographic service
* (e.g., Signature, MessageDigest, Cipher, Mac, KeyStore). Returns
* an empty Set if there is no provider that supports the
* specified service or if serviceName is null. For a complete list
* of Java cryptographic services, please see the
* <a href="../../../technotes/guides/security/crypto/CryptoSpec.html">Java
* Cryptography Architecture API Specification &amp; Reference</a>.
* Note: the returned set is immutable.
*
* @param serviceName the name of the Java cryptographic
* service (e.g., Signature, MessageDigest, Cipher, Mac, KeyStore).
* Note: this parameter is case-insensitive.
*
* @return a Set of Strings containing the names of all available
* algorithms or types for the specified Java cryptographic service
* or an empty set if no provider supports the specified service.
*
* @since 1.4
**/
public static java.util.Set<java.lang.String> getAlgorithms(java.lang.String serviceName) { throw new RuntimeException("Stub!"); }
}