/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package net.jini.jeri.ssl;
import net.jini.core.constraint.Confidentiality;
import net.jini.core.constraint.InvocationConstraint;
import java.io.Serializable;
/**
* Represents a constraint that, if confidentiality of message contents is
* ensured, the specified strength of confidentiality be used. <p>
*
* The use of an instance of this constraint does not directly imply a {@link
* Confidentiality#YES} constraint; that must be specified separately to ensure
* that confidentiality is actually ensured. <p>
*
* Serialization for this class is guaranteed to produce instances that are
* comparable with <code>==</code>. <p>
*
* This constraint is supported by the endpoints defined in this package. <p>
*
* The {@link SslTrustVerifier} trust verifier may be used for establishing
* trust in remote proxies that use instances of this class.
*
* @author Sun Microsystems, Inc.
* @see SslEndpoint
* @see SslServerEndpoint
* @see HttpsEndpoint
* @see HttpsServerEndpoint
* @see SslTrustVerifier
* @since 2.0
*/
public final class ConfidentialityStrength
implements InvocationConstraint, Serializable
{
/* -- Fields -- */
private static final long serialVersionUID = -5413316999614306469L;
/**
* If confidentiality of message contents is ensured, then use strong
* confidentiality for message contents. <p>
*
* For the endpoints in this package, this constraint is supported by
* cipher suites with the following cipher algorithms:
*
* <ul>
* <li> 3DES_EDE_CBC
* <li> AES_128_CBC
* <li> AES_256_CBC
* <li> IDEA_CBC
* <li> RC4_128
* </ul>
*/
public static final ConfidentialityStrength STRONG =
new ConfidentialityStrength(true);
/**
* If confidentiality of message contents is ensured, then use weak
* confidentiality for message contents. <p>
*
* For the endpoints in this package, this constraint is supported by
* cipher suites with the following cipher algorithms:
*
* <ul>
* <li> DES40_CBC
* <li> DES_CBC
* <li> RC2_CBC_40
* <li> RC4_40
* </ul>
*/
public static final ConfidentialityStrength WEAK =
new ConfidentialityStrength(false);
/**
* <code>true</code> for <code>STRONG</code>, <code>false</code> for
* <code>WEAK</code>
*
* @serial
*/
private final boolean value;
/* -- Methods -- */
/**
* Simple constructor.
*
* @param val <code>true</code> for <code>STRONG</code>, <code>false</code>
* for <code>WEAK</code>
*/
private ConfidentialityStrength(boolean value) {
this.value = value;
}
/** Returns a string representation of this object. */
public String toString() {
return value
? "ConfidentialityStrength.STRONG"
: "ConfidentialityStrength.WEAK";
}
/** Canonicalize so that <code>==</code> can be used. */
private Object readResolve() {
return value ? STRONG : WEAK;
}
}