mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-28 07:14:30 +02:00
8187443: Forest Consolidation: Move files to unified layout
Reviewed-by: darcy, ihse
This commit is contained in:
parent
270fe13182
commit
3789983e89
56923 changed files with 3 additions and 15727 deletions
240
src/java.base/share/classes/javax/crypto/spec/DESKeySpec.java
Normal file
240
src/java.base/share/classes/javax/crypto/spec/DESKeySpec.java
Normal file
|
@ -0,0 +1,240 @@
|
|||
/*
|
||||
* Copyright (c) 1997, 2011, 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 javax.crypto.spec;
|
||||
|
||||
import java.security.InvalidKeyException;
|
||||
|
||||
/**
|
||||
* This class specifies a DES key.
|
||||
*
|
||||
* @author Jan Luehe
|
||||
*
|
||||
* @since 1.4
|
||||
*/
|
||||
public class DESKeySpec implements java.security.spec.KeySpec {
|
||||
|
||||
/**
|
||||
* The constant which defines the length of a DES key in bytes.
|
||||
*/
|
||||
public static final int DES_KEY_LEN = 8;
|
||||
|
||||
private byte[] key;
|
||||
|
||||
/*
|
||||
* Weak/semi-weak keys copied from FIPS 74.
|
||||
*
|
||||
* "...The first 6 keys have duals different than themselves, hence
|
||||
* each is both a key and a dual giving 12 keys with duals. The last
|
||||
* four keys equal their duals, and are called self-dual keys..."
|
||||
*
|
||||
* 1. E001E001F101F101 01E001E001F101F1
|
||||
* 2. FE1FFE1FFEOEFEOE 1FFE1FFEOEFEOEFE
|
||||
* 3. E01FE01FF10EF10E 1FE01FEOOEF10EF1
|
||||
* 4. 01FE01FE01FE01FE FE01FE01FE01FE01
|
||||
* 5. 011F011F010E010E 1F011F010E010E01
|
||||
* 6. E0FEE0FEF1FEF1FE FEE0FEE0FEF1FEF1
|
||||
* 7. 0101010101010101 0101010101010101
|
||||
* 8. FEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFE
|
||||
* 9. E0E0E0E0F1F1F1F1 E0E0E0E0F1F1F1F1
|
||||
* 10. 1F1F1F1F0E0E0E0E 1F1F1F1F0E0E0E0E
|
||||
*/
|
||||
private static final byte[][] WEAK_KEYS = {
|
||||
|
||||
{ (byte)0x01, (byte)0x01, (byte)0x01, (byte)0x01, (byte)0x01,
|
||||
(byte)0x01, (byte)0x01, (byte)0x01 },
|
||||
|
||||
{ (byte)0xFE, (byte)0xFE, (byte)0xFE, (byte)0xFE, (byte)0xFE,
|
||||
(byte)0xFE, (byte)0xFE, (byte)0xFE },
|
||||
|
||||
{ (byte)0x1F, (byte)0x1F, (byte)0x1F, (byte)0x1F, (byte)0x0E,
|
||||
(byte)0x0E, (byte)0x0E, (byte)0x0E },
|
||||
|
||||
{ (byte)0xE0, (byte)0xE0, (byte)0xE0, (byte)0xE0, (byte)0xF1,
|
||||
(byte)0xF1, (byte)0xF1, (byte)0xF1 },
|
||||
|
||||
{ (byte)0x01, (byte)0xFE, (byte)0x01, (byte)0xFE, (byte)0x01,
|
||||
(byte)0xFE, (byte)0x01, (byte)0xFE },
|
||||
|
||||
{ (byte)0x1F, (byte)0xE0, (byte)0x1F, (byte)0xE0, (byte)0x0E,
|
||||
(byte)0xF1, (byte)0x0E, (byte)0xF1 },
|
||||
|
||||
{ (byte)0x01, (byte)0xE0, (byte)0x01, (byte)0xE0, (byte)0x01,
|
||||
(byte)0xF1, (byte)0x01, (byte)0xF1 },
|
||||
|
||||
{ (byte)0x1F, (byte)0xFE, (byte)0x1F, (byte)0xFE, (byte)0x0E,
|
||||
(byte)0xFE, (byte)0x0E, (byte)0xFE },
|
||||
|
||||
{ (byte)0x01, (byte)0x1F, (byte)0x01, (byte)0x1F, (byte)0x01,
|
||||
(byte)0x0E, (byte)0x01, (byte)0x0E },
|
||||
|
||||
{ (byte)0xE0, (byte)0xFE, (byte)0xE0, (byte)0xFE, (byte)0xF1,
|
||||
(byte)0xFE, (byte)0xF1, (byte)0xFE },
|
||||
|
||||
{ (byte)0xFE, (byte)0x01, (byte)0xFE, (byte)0x01, (byte)0xFE,
|
||||
(byte)0x01, (byte)0xFE, (byte)0x01 },
|
||||
|
||||
{ (byte)0xE0, (byte)0x1F, (byte)0xE0, (byte)0x1F, (byte)0xF1,
|
||||
(byte)0x0E, (byte)0xF1, (byte)0x0E },
|
||||
|
||||
{ (byte)0xE0, (byte)0x01, (byte)0xE0, (byte)0x01, (byte)0xF1,
|
||||
(byte)0x01, (byte)0xF1, (byte)0x01 },
|
||||
|
||||
{ (byte)0xFE, (byte)0x1F, (byte)0xFE, (byte)0x1F, (byte)0xFE,
|
||||
(byte)0x0E, (byte)0xFE, (byte)0x0E },
|
||||
|
||||
{ (byte)0x1F, (byte)0x01, (byte)0x1F, (byte)0x01, (byte)0x0E,
|
||||
(byte)0x01, (byte)0x0E, (byte)0x01 },
|
||||
|
||||
{ (byte)0xFE, (byte)0xE0, (byte)0xFE, (byte)0xE0, (byte)0xFE,
|
||||
(byte)0xF1, (byte)0xFE, (byte)0xF1 }
|
||||
};
|
||||
|
||||
/**
|
||||
* Creates a DESKeySpec object using the first 8 bytes in
|
||||
* <code>key</code> as the key material for the DES key.
|
||||
*
|
||||
* <p> The bytes that constitute the DES key are those between
|
||||
* <code>key[0]</code> and <code>key[7]</code> inclusive.
|
||||
*
|
||||
* @param key the buffer with the DES key material. The first 8 bytes
|
||||
* of the buffer are copied to protect against subsequent modification.
|
||||
*
|
||||
* @exception NullPointerException if the given key material is
|
||||
* <code>null</code>
|
||||
* @exception InvalidKeyException if the given key material is shorter
|
||||
* than 8 bytes.
|
||||
*/
|
||||
public DESKeySpec(byte[] key) throws InvalidKeyException {
|
||||
this(key, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a DESKeySpec object using the first 8 bytes in
|
||||
* <code>key</code>, beginning at <code>offset</code> inclusive,
|
||||
* as the key material for the DES key.
|
||||
*
|
||||
* <p> The bytes that constitute the DES key are those between
|
||||
* <code>key[offset]</code> and <code>key[offset+7]</code> inclusive.
|
||||
*
|
||||
* @param key the buffer with the DES key material. The first 8 bytes
|
||||
* of the buffer beginning at <code>offset</code> inclusive are copied
|
||||
* to protect against subsequent modification.
|
||||
* @param offset the offset in <code>key</code>, where the DES key
|
||||
* material starts.
|
||||
*
|
||||
* @exception NullPointerException if the given key material is
|
||||
* <code>null</code>
|
||||
* @exception InvalidKeyException if the given key material, starting at
|
||||
* <code>offset</code> inclusive, is shorter than 8 bytes.
|
||||
*/
|
||||
public DESKeySpec(byte[] key, int offset) throws InvalidKeyException {
|
||||
if (key.length - offset < DES_KEY_LEN) {
|
||||
throw new InvalidKeyException("Wrong key size");
|
||||
}
|
||||
this.key = new byte[DES_KEY_LEN];
|
||||
System.arraycopy(key, offset, this.key, 0, DES_KEY_LEN);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the DES key material.
|
||||
*
|
||||
* @return the DES key material. Returns a new array
|
||||
* each time this method is called.
|
||||
*/
|
||||
public byte[] getKey() {
|
||||
return this.key.clone();
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the given DES key material, starting at <code>offset</code>
|
||||
* inclusive, is parity-adjusted.
|
||||
*
|
||||
* @param key the buffer with the DES key material.
|
||||
* @param offset the offset in <code>key</code>, where the DES key
|
||||
* material starts.
|
||||
*
|
||||
* @return true if the given DES key material is parity-adjusted, false
|
||||
* otherwise.
|
||||
*
|
||||
* @exception InvalidKeyException if the given key material is
|
||||
* <code>null</code>, or starting at <code>offset</code> inclusive, is
|
||||
* shorter than 8 bytes.
|
||||
*/
|
||||
public static boolean isParityAdjusted(byte[] key, int offset)
|
||||
throws InvalidKeyException {
|
||||
if (key == null) {
|
||||
throw new InvalidKeyException("null key");
|
||||
}
|
||||
if (key.length - offset < DES_KEY_LEN) {
|
||||
throw new InvalidKeyException("Wrong key size");
|
||||
}
|
||||
|
||||
for (int i = 0; i < DES_KEY_LEN; i++) {
|
||||
int k = Integer.bitCount(key[offset++] & 0xff);
|
||||
if ((k & 1) == 0) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the given DES key material is weak or semi-weak.
|
||||
*
|
||||
* @param key the buffer with the DES key material.
|
||||
* @param offset the offset in <code>key</code>, where the DES key
|
||||
* material starts.
|
||||
*
|
||||
* @return true if the given DES key material is weak or semi-weak, false
|
||||
* otherwise.
|
||||
*
|
||||
* @exception InvalidKeyException if the given key material is
|
||||
* <code>null</code>, or starting at <code>offset</code> inclusive, is
|
||||
* shorter than 8 bytes.
|
||||
*/
|
||||
public static boolean isWeak(byte[] key, int offset)
|
||||
throws InvalidKeyException {
|
||||
if (key == null) {
|
||||
throw new InvalidKeyException("null key");
|
||||
}
|
||||
if (key.length - offset < DES_KEY_LEN) {
|
||||
throw new InvalidKeyException("Wrong key size");
|
||||
}
|
||||
for (int i = 0; i < WEAK_KEYS.length; i++) {
|
||||
boolean found = true;
|
||||
for (int j = 0; j < DES_KEY_LEN && found == true; j++) {
|
||||
if (WEAK_KEYS[i][j] != key[j+offset]) {
|
||||
found = false;
|
||||
}
|
||||
}
|
||||
if (found == true) {
|
||||
return found;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
126
src/java.base/share/classes/javax/crypto/spec/DESedeKeySpec.java
Normal file
126
src/java.base/share/classes/javax/crypto/spec/DESedeKeySpec.java
Normal file
|
@ -0,0 +1,126 @@
|
|||
/*
|
||||
* Copyright (c) 1997, 2011, 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 javax.crypto.spec;
|
||||
|
||||
import java.security.InvalidKeyException;
|
||||
|
||||
/**
|
||||
* This class specifies a DES-EDE ("triple-DES") key.
|
||||
*
|
||||
* @author Jan Luehe
|
||||
*
|
||||
* @since 1.4
|
||||
*/
|
||||
public class DESedeKeySpec implements java.security.spec.KeySpec {
|
||||
|
||||
/**
|
||||
* The constant which defines the length of a DESede key in bytes.
|
||||
*/
|
||||
public static final int DES_EDE_KEY_LEN = 24;
|
||||
|
||||
private byte[] key;
|
||||
|
||||
/**
|
||||
* Creates a DESedeKeySpec object using the first 24 bytes in
|
||||
* <code>key</code> as the key material for the DES-EDE key.
|
||||
*
|
||||
* <p> The bytes that constitute the DES-EDE key are those between
|
||||
* <code>key[0]</code> and <code>key[23]</code> inclusive
|
||||
*
|
||||
* @param key the buffer with the DES-EDE key material. The first
|
||||
* 24 bytes of the buffer are copied to protect against subsequent
|
||||
* modification.
|
||||
*
|
||||
* @exception NullPointerException if <code>key</code> is null.
|
||||
* @exception InvalidKeyException if the given key material is shorter
|
||||
* than 24 bytes.
|
||||
*/
|
||||
public DESedeKeySpec(byte[] key) throws InvalidKeyException {
|
||||
this(key, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a DESedeKeySpec object using the first 24 bytes in
|
||||
* <code>key</code>, beginning at <code>offset</code> inclusive,
|
||||
* as the key material for the DES-EDE key.
|
||||
*
|
||||
* <p> The bytes that constitute the DES-EDE key are those between
|
||||
* <code>key[offset]</code> and <code>key[offset+23]</code> inclusive.
|
||||
*
|
||||
* @param key the buffer with the DES-EDE key material. The first
|
||||
* 24 bytes of the buffer beginning at <code>offset</code> inclusive
|
||||
* are copied to protect against subsequent modification.
|
||||
* @param offset the offset in <code>key</code>, where the DES-EDE key
|
||||
* material starts.
|
||||
*
|
||||
* @exception NullPointerException if <code>key</code> is null.
|
||||
* @exception InvalidKeyException if the given key material, starting at
|
||||
* <code>offset</code> inclusive, is shorter than 24 bytes
|
||||
*/
|
||||
public DESedeKeySpec(byte[] key, int offset) throws InvalidKeyException {
|
||||
if (key.length - offset < 24) {
|
||||
throw new InvalidKeyException("Wrong key size");
|
||||
}
|
||||
this.key = new byte[24];
|
||||
System.arraycopy(key, offset, this.key, 0, 24);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the DES-EDE key.
|
||||
*
|
||||
* @return the DES-EDE key. Returns a new array
|
||||
* each time this method is called.
|
||||
*/
|
||||
public byte[] getKey() {
|
||||
return this.key.clone();
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the given DES-EDE key, starting at <code>offset</code>
|
||||
* inclusive, is parity-adjusted.
|
||||
*
|
||||
* @param key a byte array which holds the key value
|
||||
* @param offset the offset into the byte array
|
||||
* @return true if the given DES-EDE key is parity-adjusted, false
|
||||
* otherwise
|
||||
*
|
||||
* @exception NullPointerException if <code>key</code> is null.
|
||||
* @exception InvalidKeyException if the given key material, starting at
|
||||
* <code>offset</code> inclusive, is shorter than 24 bytes
|
||||
*/
|
||||
public static boolean isParityAdjusted(byte[] key, int offset)
|
||||
throws InvalidKeyException {
|
||||
if (key.length - offset < 24) {
|
||||
throw new InvalidKeyException("Wrong key size");
|
||||
}
|
||||
if (DESKeySpec.isParityAdjusted(key, offset) == false
|
||||
|| DESKeySpec.isParityAdjusted(key, offset + 8) == false
|
||||
|| DESKeySpec.isParityAdjusted(key, offset + 16) == false) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,85 @@
|
|||
/*
|
||||
* Copyright (c) 1997, 2007, 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 javax.crypto.spec;
|
||||
|
||||
import java.math.BigInteger;
|
||||
import java.security.spec.AlgorithmParameterSpec;
|
||||
|
||||
/**
|
||||
* This class specifies the set of parameters used for generating
|
||||
* Diffie-Hellman (system) parameters for use in Diffie-Hellman key
|
||||
* agreement. This is typically done by a central
|
||||
* authority.
|
||||
*
|
||||
* <p> The central authority, after computing the parameters, must send this
|
||||
* information to the parties looking to agree on a secret key.
|
||||
*
|
||||
* @author Jan Luehe
|
||||
*
|
||||
* @see DHParameterSpec
|
||||
* @since 1.4
|
||||
*/
|
||||
public class DHGenParameterSpec implements AlgorithmParameterSpec {
|
||||
|
||||
// The size in bits of the prime modulus
|
||||
private int primeSize;
|
||||
|
||||
// The size in bits of the random exponent (private value)
|
||||
private int exponentSize;
|
||||
|
||||
/**
|
||||
* Constructs a parameter set for the generation of Diffie-Hellman
|
||||
* (system) parameters. The constructed parameter set can be used to
|
||||
* initialize an
|
||||
* {@link java.security.AlgorithmParameterGenerator AlgorithmParameterGenerator}
|
||||
* object for the generation of Diffie-Hellman parameters.
|
||||
*
|
||||
* @param primeSize the size (in bits) of the prime modulus.
|
||||
* @param exponentSize the size (in bits) of the random exponent.
|
||||
*/
|
||||
public DHGenParameterSpec(int primeSize, int exponentSize) {
|
||||
this.primeSize = primeSize;
|
||||
this.exponentSize = exponentSize;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the size in bits of the prime modulus.
|
||||
*
|
||||
* @return the size in bits of the prime modulus
|
||||
*/
|
||||
public int getPrimeSize() {
|
||||
return this.primeSize;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the size in bits of the random exponent (private value).
|
||||
*
|
||||
* @return the size in bits of the random exponent (private value)
|
||||
*/
|
||||
public int getExponentSize() {
|
||||
return this.exponentSize;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,123 @@
|
|||
/*
|
||||
* Copyright (c) 1997, 2007, 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 javax.crypto.spec;
|
||||
|
||||
import java.math.BigInteger;
|
||||
import java.security.spec.AlgorithmParameterSpec;
|
||||
|
||||
/**
|
||||
* This class specifies the set of parameters used with the Diffie-Hellman
|
||||
* algorithm, as specified in PKCS #3: <i>Diffie-Hellman Key-Agreement
|
||||
* Standard</i>.
|
||||
*
|
||||
* <p>A central authority generates parameters and gives them to the two
|
||||
* entities seeking to generate a secret key. The parameters are a prime
|
||||
* <code>p</code>, a base <code>g</code>, and optionally the length
|
||||
* in bits of the private value, <code>l</code>.
|
||||
*
|
||||
* <p>It is possible that more than one instance of parameters may be
|
||||
* generated by a given central authority, and that there may be more than
|
||||
* one central authority. Indeed, each individual may be its own central
|
||||
* authority, with different entities having different parameters.
|
||||
*
|
||||
* <p>Note that this class does not perform any validation on specified
|
||||
* parameters. Thus, the specified values are returned directly even
|
||||
* if they are null.
|
||||
*
|
||||
* @author Jan Luehe
|
||||
*
|
||||
* @see javax.crypto.KeyAgreement
|
||||
* @since 1.4
|
||||
*/
|
||||
public class DHParameterSpec implements AlgorithmParameterSpec {
|
||||
|
||||
// The prime modulus
|
||||
private BigInteger p;
|
||||
|
||||
// The base generator
|
||||
private BigInteger g;
|
||||
|
||||
// The size in bits of the random exponent (private value) (optional)
|
||||
private int l;
|
||||
|
||||
/**
|
||||
* Constructs a parameter set for Diffie-Hellman, using a prime modulus
|
||||
* <code>p</code> and a base generator <code>g</code>.
|
||||
*
|
||||
* @param p the prime modulus
|
||||
* @param g the base generator
|
||||
*/
|
||||
public DHParameterSpec(BigInteger p, BigInteger g) {
|
||||
this.p = p;
|
||||
this.g = g;
|
||||
this.l = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a parameter set for Diffie-Hellman, using a prime modulus
|
||||
* <code>p</code>, a base generator <code>g</code>,
|
||||
* and the size in bits, <code>l</code>, of the random exponent
|
||||
* (private value).
|
||||
*
|
||||
* @param p the prime modulus
|
||||
* @param g the base generator
|
||||
* @param l the size in bits of the random exponent (private value)
|
||||
*/
|
||||
public DHParameterSpec(BigInteger p, BigInteger g, int l) {
|
||||
this.p = p;
|
||||
this.g = g;
|
||||
this.l = l;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the prime modulus <code>p</code>.
|
||||
*
|
||||
* @return the prime modulus <code>p</code>
|
||||
*/
|
||||
public BigInteger getP() {
|
||||
return this.p;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the base generator <code>g</code>.
|
||||
*
|
||||
* @return the base generator <code>g</code>
|
||||
*/
|
||||
public BigInteger getG() {
|
||||
return this.g;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the size in bits, <code>l</code>, of the random exponent
|
||||
* (private value).
|
||||
*
|
||||
* @return the size in bits, <code>l</code>, of the random exponent
|
||||
* (private value), or 0 if this size has not been set
|
||||
*/
|
||||
public int getL() {
|
||||
return this.l;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,93 @@
|
|||
/*
|
||||
* Copyright (c) 1997, 2007, 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 javax.crypto.spec;
|
||||
|
||||
import java.math.BigInteger;
|
||||
|
||||
/**
|
||||
* This class specifies a Diffie-Hellman private key with its associated
|
||||
* parameters.
|
||||
*
|
||||
* <p>Note that this class does not perform any validation on specified
|
||||
* parameters. Thus, the specified values are returned directly even
|
||||
* if they are null.
|
||||
*
|
||||
* @author Jan Luehe
|
||||
*
|
||||
* @see DHPublicKeySpec
|
||||
* @since 1.4
|
||||
*/
|
||||
public class DHPrivateKeySpec implements java.security.spec.KeySpec {
|
||||
|
||||
// The private value
|
||||
private BigInteger x;
|
||||
|
||||
// The prime modulus
|
||||
private BigInteger p;
|
||||
|
||||
// The base generator
|
||||
private BigInteger g;
|
||||
|
||||
/**
|
||||
* Constructor that takes a private value <code>x</code>, a prime
|
||||
* modulus <code>p</code>, and a base generator <code>g</code>.
|
||||
* @param x private value x
|
||||
* @param p prime modulus p
|
||||
* @param g base generator g
|
||||
*/
|
||||
public DHPrivateKeySpec(BigInteger x, BigInteger p, BigInteger g) {
|
||||
this.x = x;
|
||||
this.p = p;
|
||||
this.g = g;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the private value <code>x</code>.
|
||||
*
|
||||
* @return the private value <code>x</code>
|
||||
*/
|
||||
public BigInteger getX() {
|
||||
return this.x;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the prime modulus <code>p</code>.
|
||||
*
|
||||
* @return the prime modulus <code>p</code>
|
||||
*/
|
||||
public BigInteger getP() {
|
||||
return this.p;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the base generator <code>g</code>.
|
||||
*
|
||||
* @return the base generator <code>g</code>
|
||||
*/
|
||||
public BigInteger getG() {
|
||||
return this.g;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,93 @@
|
|||
/*
|
||||
* Copyright (c) 1997, 2007, 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 javax.crypto.spec;
|
||||
|
||||
import java.math.BigInteger;
|
||||
|
||||
/**
|
||||
* This class specifies a Diffie-Hellman public key with its associated
|
||||
* parameters.
|
||||
*
|
||||
* <p>Note that this class does not perform any validation on specified
|
||||
* parameters. Thus, the specified values are returned directly even
|
||||
* if they are null.
|
||||
*
|
||||
* @author Jan Luehe
|
||||
*
|
||||
* @see DHPrivateKeySpec
|
||||
* @since 1.4
|
||||
*/
|
||||
public class DHPublicKeySpec implements java.security.spec.KeySpec {
|
||||
|
||||
// The public value
|
||||
private BigInteger y;
|
||||
|
||||
// The prime modulus
|
||||
private BigInteger p;
|
||||
|
||||
// The base generator
|
||||
private BigInteger g;
|
||||
|
||||
/**
|
||||
* Constructor that takes a public value <code>y</code>, a prime
|
||||
* modulus <code>p</code>, and a base generator <code>g</code>.
|
||||
* @param y public value y
|
||||
* @param p prime modulus p
|
||||
* @param g base generator g
|
||||
*/
|
||||
public DHPublicKeySpec(BigInteger y, BigInteger p, BigInteger g) {
|
||||
this.y = y;
|
||||
this.p = p;
|
||||
this.g = g;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the public value <code>y</code>.
|
||||
*
|
||||
* @return the public value <code>y</code>
|
||||
*/
|
||||
public BigInteger getY() {
|
||||
return this.y;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the prime modulus <code>p</code>.
|
||||
*
|
||||
* @return the prime modulus <code>p</code>
|
||||
*/
|
||||
public BigInteger getP() {
|
||||
return this.p;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the base generator <code>g</code>.
|
||||
*
|
||||
* @return the base generator <code>g</code>
|
||||
*/
|
||||
public BigInteger getG() {
|
||||
return this.g;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,149 @@
|
|||
/*
|
||||
* Copyright (c) 2011, 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 javax.crypto.spec;
|
||||
|
||||
import java.security.spec.AlgorithmParameterSpec;
|
||||
|
||||
/**
|
||||
* Specifies the set of parameters required by a {@link
|
||||
* javax.crypto.Cipher} using the Galois/Counter Mode (GCM) mode.
|
||||
* <p>
|
||||
* Simple block cipher modes (such as CBC) generally require only an
|
||||
* initialization vector (such as {@code IvParameterSpec}),
|
||||
* but GCM needs these parameters:
|
||||
* <ul>
|
||||
* <li>{@code IV}: Initialization Vector (IV) </li>
|
||||
* <li>{@code tLen}: length (in bits) of authentication tag T</li>
|
||||
* </ul>
|
||||
* <p>
|
||||
* In addition to the parameters described here, other GCM inputs/output
|
||||
* (Additional Authenticated Data (AAD), Keys, block ciphers,
|
||||
* plain/ciphertext and authentication tags) are handled in the {@code
|
||||
* Cipher} class.
|
||||
* <p>
|
||||
* Please see <a href="http://www.ietf.org/rfc/rfc5116.txt"> RFC 5116
|
||||
* </a> for more information on the Authenticated Encryption with
|
||||
* Associated Data (AEAD) algorithm, and <a href=
|
||||
* "http://csrc.nist.gov/publications/nistpubs/800-38D/SP-800-38D.pdf">
|
||||
* NIST Special Publication 800-38D</a>, "NIST Recommendation for Block
|
||||
* Cipher Modes of Operation: Galois/Counter Mode (GCM) and GMAC."
|
||||
* <p>
|
||||
* The GCM specification states that {@code tLen} may only have the
|
||||
* values {128, 120, 112, 104, 96}, or {64, 32} for certain
|
||||
* applications. Other values can be specified for this class, but not
|
||||
* all CSP implementations will support them.
|
||||
*
|
||||
* @see javax.crypto.Cipher
|
||||
*
|
||||
* @since 1.7
|
||||
*/
|
||||
public class GCMParameterSpec implements AlgorithmParameterSpec {
|
||||
|
||||
// Initialization Vector. Could use IvParameterSpec, but that
|
||||
// would add extra copies.
|
||||
private byte[] iv;
|
||||
|
||||
// Required Tag length (in bits).
|
||||
private int tLen;
|
||||
|
||||
/**
|
||||
* Constructs a GCMParameterSpec using the specified authentication
|
||||
* tag bit-length and IV buffer.
|
||||
*
|
||||
* @param tLen the authentication tag length (in bits)
|
||||
* @param src the IV source buffer. The contents of the buffer are
|
||||
* copied to protect against subsequent modification.
|
||||
*
|
||||
* @throws IllegalArgumentException if {@code tLen} is negative,
|
||||
* or {@code src} is null.
|
||||
*/
|
||||
public GCMParameterSpec(int tLen, byte[] src) {
|
||||
if (src == null) {
|
||||
throw new IllegalArgumentException("src array is null");
|
||||
}
|
||||
|
||||
init(tLen, src, 0, src.length);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a GCMParameterSpec object using the specified
|
||||
* authentication tag bit-length and a subset of the specified
|
||||
* buffer as the IV.
|
||||
*
|
||||
* @param tLen the authentication tag length (in bits)
|
||||
* @param src the IV source buffer. The contents of the
|
||||
* buffer are copied to protect against subsequent modification.
|
||||
* @param offset the offset in {@code src} where the IV starts
|
||||
* @param len the number of IV bytes
|
||||
*
|
||||
* @throws IllegalArgumentException if {@code tLen} is negative,
|
||||
* {@code src} is null, {@code len} or {@code offset} is negative,
|
||||
* or the sum of {@code offset} and {@code len} is greater than the
|
||||
* length of the {@code src} byte array.
|
||||
*/
|
||||
public GCMParameterSpec(int tLen, byte[] src, int offset, int len) {
|
||||
init(tLen, src, offset, len);
|
||||
}
|
||||
|
||||
/*
|
||||
* Check input parameters.
|
||||
*/
|
||||
private void init(int tLen, byte[] src, int offset, int len) {
|
||||
if (tLen < 0) {
|
||||
throw new IllegalArgumentException(
|
||||
"Length argument is negative");
|
||||
}
|
||||
this.tLen = tLen;
|
||||
|
||||
// Input sanity check
|
||||
if ((src == null) ||(len < 0) || (offset < 0)
|
||||
|| ((len + offset) > src.length)) {
|
||||
throw new IllegalArgumentException("Invalid buffer arguments");
|
||||
}
|
||||
|
||||
iv = new byte[len];
|
||||
System.arraycopy(src, offset, iv, 0, len);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the authentication tag length.
|
||||
*
|
||||
* @return the authentication tag length (in bits)
|
||||
*/
|
||||
public int getTLen() {
|
||||
return tLen;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the Initialization Vector (IV).
|
||||
*
|
||||
* @return the IV. Creates a new array each time this method
|
||||
* is called.
|
||||
*/
|
||||
public byte[] getIV() {
|
||||
return iv.clone();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,99 @@
|
|||
/*
|
||||
* Copyright (c) 1997, 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 javax.crypto.spec;
|
||||
|
||||
import java.security.spec.AlgorithmParameterSpec;
|
||||
|
||||
/**
|
||||
* This class specifies an <i>initialization vector</i> (IV).
|
||||
* Examples which use IVs are ciphers in feedback mode,
|
||||
* e.g., DES in CBC mode and RSA ciphers with OAEP encoding
|
||||
* operation.
|
||||
*
|
||||
* @author Jan Luehe
|
||||
*
|
||||
* @since 1.4
|
||||
*/
|
||||
public class IvParameterSpec implements AlgorithmParameterSpec {
|
||||
|
||||
private byte[] iv;
|
||||
|
||||
/**
|
||||
* Creates an IvParameterSpec object using the bytes in <code>iv</code>
|
||||
* as the IV.
|
||||
*
|
||||
* @param iv the buffer with the IV. The contents of the
|
||||
* buffer are copied to protect against subsequent modification.
|
||||
* @throws NullPointerException if <code>iv</code> is <code>null</code>
|
||||
*/
|
||||
public IvParameterSpec(byte[] iv) {
|
||||
this(iv, 0, iv.length);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates an IvParameterSpec object using the first <code>len</code>
|
||||
* bytes in <code>iv</code>, beginning at <code>offset</code>
|
||||
* inclusive, as the IV.
|
||||
*
|
||||
* <p> The bytes that constitute the IV are those between
|
||||
* <code>iv[offset]</code> and <code>iv[offset+len-1]</code> inclusive.
|
||||
*
|
||||
* @param iv the buffer with the IV. The first <code>len</code>
|
||||
* bytes of the buffer beginning at <code>offset</code> inclusive
|
||||
* are copied to protect against subsequent modification.
|
||||
* @param offset the offset in <code>iv</code> where the IV
|
||||
* starts.
|
||||
* @param len the number of IV bytes.
|
||||
* @throws IllegalArgumentException if <code>iv</code> is <code>null</code>
|
||||
* or {@code (iv.length - offset < len)}
|
||||
* @throws ArrayIndexOutOfBoundsException is thrown if <code>offset</code>
|
||||
* or <code>len</code> index bytes outside the <code>iv</code>.
|
||||
*/
|
||||
public IvParameterSpec(byte[] iv, int offset, int len) {
|
||||
if (iv == null) {
|
||||
throw new IllegalArgumentException("IV missing");
|
||||
}
|
||||
if (iv.length - offset < len) {
|
||||
throw new IllegalArgumentException
|
||||
("IV buffer too short for given offset/length combination");
|
||||
}
|
||||
if (len < 0) {
|
||||
throw new ArrayIndexOutOfBoundsException("len is negative");
|
||||
}
|
||||
this.iv = new byte[len];
|
||||
System.arraycopy(iv, offset, this.iv, 0, len);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the initialization vector (IV).
|
||||
*
|
||||
* @return the initialization vector (IV). Returns a new array
|
||||
* each time this method is called.
|
||||
*/
|
||||
public byte[] getIV() {
|
||||
return this.iv.clone();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,168 @@
|
|||
/*
|
||||
* Copyright (c) 2003, 2007, 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 javax.crypto.spec;
|
||||
|
||||
import java.math.BigInteger;
|
||||
import java.security.spec.AlgorithmParameterSpec;
|
||||
import java.security.spec.MGF1ParameterSpec;
|
||||
|
||||
/**
|
||||
* This class specifies the set of parameters used with OAEP Padding,
|
||||
* as defined in the
|
||||
* <a href="http://www.ietf.org/rfc/rfc3447.txt">PKCS #1</a>
|
||||
* standard.
|
||||
*
|
||||
* Its ASN.1 definition in PKCS#1 standard is described below:
|
||||
* <pre>
|
||||
* RSAES-OAEP-params ::= SEQUENCE {
|
||||
* hashAlgorithm [0] OAEP-PSSDigestAlgorithms DEFAULT sha1,
|
||||
* maskGenAlgorithm [1] PKCS1MGFAlgorithms DEFAULT mgf1SHA1,
|
||||
* pSourceAlgorithm [2] PKCS1PSourceAlgorithms DEFAULT pSpecifiedEmpty
|
||||
* }
|
||||
* </pre>
|
||||
* where
|
||||
* <pre>
|
||||
* OAEP-PSSDigestAlgorithms ALGORITHM-IDENTIFIER ::= {
|
||||
* { OID id-sha1 PARAMETERS NULL }|
|
||||
* { OID id-sha256 PARAMETERS NULL }|
|
||||
* { OID id-sha384 PARAMETERS NULL }|
|
||||
* { OID id-sha512 PARAMETERS NULL },
|
||||
* ... -- Allows for future expansion --
|
||||
* }
|
||||
* PKCS1MGFAlgorithms ALGORITHM-IDENTIFIER ::= {
|
||||
* { OID id-mgf1 PARAMETERS OAEP-PSSDigestAlgorithms },
|
||||
* ... -- Allows for future expansion --
|
||||
* }
|
||||
* PKCS1PSourceAlgorithms ALGORITHM-IDENTIFIER ::= {
|
||||
* { OID id-pSpecified PARAMETERS OCTET STRING },
|
||||
* ... -- Allows for future expansion --
|
||||
* }
|
||||
* </pre>
|
||||
* <p>Note: the OAEPParameterSpec.DEFAULT uses the following:
|
||||
* message digest -- "SHA-1"
|
||||
* mask generation function (mgf) -- "MGF1"
|
||||
* parameters for mgf -- MGF1ParameterSpec.SHA1
|
||||
* source of encoding input -- PSource.PSpecified.DEFAULT
|
||||
*
|
||||
* @see java.security.spec.MGF1ParameterSpec
|
||||
* @see PSource
|
||||
*
|
||||
* @author Valerie Peng
|
||||
*
|
||||
* @since 1.5
|
||||
*/
|
||||
public class OAEPParameterSpec implements AlgorithmParameterSpec {
|
||||
|
||||
private String mdName = "SHA-1";
|
||||
private String mgfName = "MGF1";
|
||||
private AlgorithmParameterSpec mgfSpec = MGF1ParameterSpec.SHA1;
|
||||
private PSource pSrc = PSource.PSpecified.DEFAULT;
|
||||
|
||||
/**
|
||||
* The OAEP parameter set with all default values.
|
||||
*/
|
||||
public static final OAEPParameterSpec DEFAULT = new OAEPParameterSpec();
|
||||
|
||||
/**
|
||||
* Constructs a parameter set for OAEP padding as defined in
|
||||
* the PKCS #1 standard using the default values.
|
||||
*/
|
||||
private OAEPParameterSpec() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a parameter set for OAEP padding as defined in
|
||||
* the PKCS #1 standard using the specified message digest
|
||||
* algorithm <code>mdName</code>, mask generation function
|
||||
* algorithm <code>mgfName</code>, parameters for the mask
|
||||
* generation function <code>mgfSpec</code>, and source of
|
||||
* the encoding input P <code>pSrc</code>.
|
||||
*
|
||||
* @param mdName the algorithm name for the message digest.
|
||||
* @param mgfName the algorithm name for the mask generation
|
||||
* function.
|
||||
* @param mgfSpec the parameters for the mask generation function.
|
||||
* If null is specified, null will be returned by getMGFParameters().
|
||||
* @param pSrc the source of the encoding input P.
|
||||
* @exception NullPointerException if <code>mdName</code>,
|
||||
* <code>mgfName</code>, or <code>pSrc</code> is null.
|
||||
*/
|
||||
public OAEPParameterSpec(String mdName, String mgfName,
|
||||
AlgorithmParameterSpec mgfSpec,
|
||||
PSource pSrc) {
|
||||
if (mdName == null) {
|
||||
throw new NullPointerException("digest algorithm is null");
|
||||
}
|
||||
if (mgfName == null) {
|
||||
throw new NullPointerException("mask generation function " +
|
||||
"algorithm is null");
|
||||
}
|
||||
if (pSrc == null) {
|
||||
throw new NullPointerException("source of the encoding input " +
|
||||
"is null");
|
||||
}
|
||||
this.mdName = mdName;
|
||||
this.mgfName = mgfName;
|
||||
this.mgfSpec = mgfSpec;
|
||||
this.pSrc = pSrc;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the message digest algorithm name.
|
||||
*
|
||||
* @return the message digest algorithm name.
|
||||
*/
|
||||
public String getDigestAlgorithm() {
|
||||
return mdName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the mask generation function algorithm name.
|
||||
*
|
||||
* @return the mask generation function algorithm name.
|
||||
*/
|
||||
public String getMGFAlgorithm() {
|
||||
return mgfName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the parameters for the mask generation function.
|
||||
*
|
||||
* @return the parameters for the mask generation function.
|
||||
*/
|
||||
public AlgorithmParameterSpec getMGFParameters() {
|
||||
return mgfSpec;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the source of encoding input P.
|
||||
*
|
||||
* @return the source of encoding input P.
|
||||
*/
|
||||
public PSource getPSource() {
|
||||
return pSrc;
|
||||
}
|
||||
}
|
240
src/java.base/share/classes/javax/crypto/spec/PBEKeySpec.java
Normal file
240
src/java.base/share/classes/javax/crypto/spec/PBEKeySpec.java
Normal file
|
@ -0,0 +1,240 @@
|
|||
/*
|
||||
* Copyright (c) 1997, 2011, 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 javax.crypto.spec;
|
||||
|
||||
import java.security.spec.KeySpec;
|
||||
|
||||
/**
|
||||
* A user-chosen password that can be used with password-based encryption
|
||||
* (<i>PBE</i>).
|
||||
*
|
||||
* <p>The password can be viewed as some kind of raw key material, from which
|
||||
* the encryption mechanism that uses it derives a cryptographic key.
|
||||
*
|
||||
* <p>Different PBE mechanisms may consume different bits of each password
|
||||
* character. For example, the PBE mechanism defined in
|
||||
* <a href="http://www.ietf.org/rfc/rfc2898.txt">
|
||||
* PKCS #5</a> looks at only the low order 8 bits of each character, whereas
|
||||
* PKCS #12 looks at all 16 bits of each character.
|
||||
*
|
||||
* <p>You convert the password characters to a PBE key by creating an
|
||||
* instance of the appropriate secret-key factory. For example, a secret-key
|
||||
* factory for PKCS #5 will construct a PBE key from only the low order 8 bits
|
||||
* of each password character, whereas a secret-key factory for PKCS #12 will
|
||||
* take all 16 bits of each character.
|
||||
*
|
||||
* <p>Also note that this class stores passwords as char arrays instead of
|
||||
* <code>String</code> objects (which would seem more logical), because the
|
||||
* String class is immutable and there is no way to overwrite its
|
||||
* internal value when the password stored in it is no longer needed. Hence,
|
||||
* this class requests the password as a char array, so it can be overwritten
|
||||
* when done.
|
||||
*
|
||||
* @author Jan Luehe
|
||||
* @author Valerie Peng
|
||||
*
|
||||
* @see javax.crypto.SecretKeyFactory
|
||||
* @see PBEParameterSpec
|
||||
* @since 1.4
|
||||
*/
|
||||
public class PBEKeySpec implements KeySpec {
|
||||
|
||||
private char[] password;
|
||||
private byte[] salt = null;
|
||||
private int iterationCount = 0;
|
||||
private int keyLength = 0;
|
||||
|
||||
/**
|
||||
* Constructor that takes a password. An empty char[] is used if
|
||||
* null is specified.
|
||||
*
|
||||
* <p> Note: <code>password</code> is cloned before it is stored in
|
||||
* the new <code>PBEKeySpec</code> object.
|
||||
*
|
||||
* @param password the password.
|
||||
*/
|
||||
public PBEKeySpec(char[] password) {
|
||||
if ((password == null) || (password.length == 0)) {
|
||||
this.password = new char[0];
|
||||
} else {
|
||||
this.password = password.clone();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Constructor that takes a password, salt, iteration count, and
|
||||
* to-be-derived key length for generating PBEKey of variable-key-size
|
||||
* PBE ciphers. An empty char[] is used if null is specified for
|
||||
* <code>password</code>.
|
||||
*
|
||||
* <p> Note: the <code>password</code> and <code>salt</code>
|
||||
* are cloned before they are stored in
|
||||
* the new <code>PBEKeySpec</code> object.
|
||||
*
|
||||
* @param password the password.
|
||||
* @param salt the salt.
|
||||
* @param iterationCount the iteration count.
|
||||
* @param keyLength the to-be-derived key length.
|
||||
* @exception NullPointerException if <code>salt</code> is null.
|
||||
* @exception IllegalArgumentException if <code>salt</code> is empty,
|
||||
* i.e. 0-length, <code>iterationCount</code> or
|
||||
* <code>keyLength</code> is not positive.
|
||||
*/
|
||||
public PBEKeySpec(char[] password, byte[] salt, int iterationCount,
|
||||
int keyLength) {
|
||||
if ((password == null) || (password.length == 0)) {
|
||||
this.password = new char[0];
|
||||
} else {
|
||||
this.password = password.clone();
|
||||
}
|
||||
if (salt == null) {
|
||||
throw new NullPointerException("the salt parameter " +
|
||||
"must be non-null");
|
||||
} else if (salt.length == 0) {
|
||||
throw new IllegalArgumentException("the salt parameter " +
|
||||
"must not be empty");
|
||||
} else {
|
||||
this.salt = salt.clone();
|
||||
}
|
||||
if (iterationCount<=0) {
|
||||
throw new IllegalArgumentException("invalid iterationCount value");
|
||||
}
|
||||
if (keyLength<=0) {
|
||||
throw new IllegalArgumentException("invalid keyLength value");
|
||||
}
|
||||
this.iterationCount = iterationCount;
|
||||
this.keyLength = keyLength;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Constructor that takes a password, salt, iteration count for
|
||||
* generating PBEKey of fixed-key-size PBE ciphers. An empty
|
||||
* char[] is used if null is specified for <code>password</code>.
|
||||
*
|
||||
* <p> Note: the <code>password</code> and <code>salt</code>
|
||||
* are cloned before they are stored in the new
|
||||
* <code>PBEKeySpec</code> object.
|
||||
*
|
||||
* @param password the password.
|
||||
* @param salt the salt.
|
||||
* @param iterationCount the iteration count.
|
||||
* @exception NullPointerException if <code>salt</code> is null.
|
||||
* @exception IllegalArgumentException if <code>salt</code> is empty,
|
||||
* i.e. 0-length, or <code>iterationCount</code> is not positive.
|
||||
*/
|
||||
public PBEKeySpec(char[] password, byte[] salt, int iterationCount) {
|
||||
if ((password == null) || (password.length == 0)) {
|
||||
this.password = new char[0];
|
||||
} else {
|
||||
this.password = password.clone();
|
||||
}
|
||||
if (salt == null) {
|
||||
throw new NullPointerException("the salt parameter " +
|
||||
"must be non-null");
|
||||
} else if (salt.length == 0) {
|
||||
throw new IllegalArgumentException("the salt parameter " +
|
||||
"must not be empty");
|
||||
} else {
|
||||
this.salt = salt.clone();
|
||||
}
|
||||
if (iterationCount<=0) {
|
||||
throw new IllegalArgumentException("invalid iterationCount value");
|
||||
}
|
||||
this.iterationCount = iterationCount;
|
||||
}
|
||||
|
||||
/**
|
||||
* Clears the internal copy of the password.
|
||||
*
|
||||
*/
|
||||
public final void clearPassword() {
|
||||
if (password != null) {
|
||||
for (int i = 0; i < password.length; i++) {
|
||||
password[i] = ' ';
|
||||
}
|
||||
password = null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a copy of the password.
|
||||
*
|
||||
* <p> Note: this method returns a copy of the password. It is
|
||||
* the caller's responsibility to zero out the password information after
|
||||
* it is no longer needed.
|
||||
*
|
||||
* @exception IllegalStateException if password has been cleared by
|
||||
* calling <code>clearPassword</code> method.
|
||||
* @return the password.
|
||||
*/
|
||||
public final char[] getPassword() {
|
||||
if (password == null) {
|
||||
throw new IllegalStateException("password has been cleared");
|
||||
}
|
||||
return password.clone();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a copy of the salt or null if not specified.
|
||||
*
|
||||
* <p> Note: this method should return a copy of the salt. It is
|
||||
* the caller's responsibility to zero out the salt information after
|
||||
* it is no longer needed.
|
||||
*
|
||||
* @return the salt.
|
||||
*/
|
||||
public final byte[] getSalt() {
|
||||
if (salt != null) {
|
||||
return salt.clone();
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the iteration count or 0 if not specified.
|
||||
*
|
||||
* @return the iteration count.
|
||||
*/
|
||||
public final int getIterationCount() {
|
||||
return iterationCount;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the to-be-derived key length or 0 if not specified.
|
||||
*
|
||||
* <p> Note: this is used to indicate the preference on key length
|
||||
* for variable-key-size ciphers. The actual key size depends on
|
||||
* each provider's implementation.
|
||||
*
|
||||
* @return the to-be-derived key length.
|
||||
*/
|
||||
public final int getKeyLength() {
|
||||
return keyLength;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,109 @@
|
|||
/*
|
||||
* Copyright (c) 1997, 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 javax.crypto.spec;
|
||||
|
||||
import java.security.spec.AlgorithmParameterSpec;
|
||||
|
||||
/**
|
||||
* This class specifies the set of parameters used with password-based
|
||||
* encryption (PBE), as defined in the
|
||||
* <a href="http://www.ietf.org/rfc/rfc2898.txt">PKCS #5</a>
|
||||
* standard.
|
||||
*
|
||||
* @author Jan Luehe
|
||||
*
|
||||
* @since 1.4
|
||||
*/
|
||||
public class PBEParameterSpec implements AlgorithmParameterSpec {
|
||||
|
||||
private byte[] salt;
|
||||
private int iterationCount;
|
||||
private AlgorithmParameterSpec paramSpec = null;
|
||||
|
||||
/**
|
||||
* Constructs a parameter set for password-based encryption as defined in
|
||||
* the PKCS #5 standard.
|
||||
*
|
||||
* @param salt the salt. The contents of <code>salt</code> are copied
|
||||
* to protect against subsequent modification.
|
||||
* @param iterationCount the iteration count.
|
||||
* @exception NullPointerException if <code>salt</code> is null.
|
||||
*/
|
||||
public PBEParameterSpec(byte[] salt, int iterationCount) {
|
||||
this.salt = salt.clone();
|
||||
this.iterationCount = iterationCount;
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a parameter set for password-based encryption as defined in
|
||||
* the PKCS #5 standard.
|
||||
*
|
||||
* @param salt the salt. The contents of <code>salt</code> are copied
|
||||
* to protect against subsequent modification.
|
||||
* @param iterationCount the iteration count.
|
||||
* @param paramSpec the cipher algorithm parameter specification, which
|
||||
* may be null.
|
||||
* @exception NullPointerException if <code>salt</code> is null.
|
||||
*
|
||||
* @since 1.8
|
||||
*/
|
||||
public PBEParameterSpec(byte[] salt, int iterationCount,
|
||||
AlgorithmParameterSpec paramSpec) {
|
||||
this.salt = salt.clone();
|
||||
this.iterationCount = iterationCount;
|
||||
this.paramSpec = paramSpec;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the salt.
|
||||
*
|
||||
* @return the salt. Returns a new array
|
||||
* each time this method is called.
|
||||
*/
|
||||
public byte[] getSalt() {
|
||||
return this.salt.clone();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the iteration count.
|
||||
*
|
||||
* @return the iteration count
|
||||
*/
|
||||
public int getIterationCount() {
|
||||
return this.iterationCount;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the cipher algorithm parameter specification.
|
||||
*
|
||||
* @return the parameter specification, or null if none was set.
|
||||
*
|
||||
* @since 1.8
|
||||
*/
|
||||
public AlgorithmParameterSpec getParameterSpec() {
|
||||
return this.paramSpec;
|
||||
}
|
||||
}
|
108
src/java.base/share/classes/javax/crypto/spec/PSource.java
Normal file
108
src/java.base/share/classes/javax/crypto/spec/PSource.java
Normal file
|
@ -0,0 +1,108 @@
|
|||
/*
|
||||
* Copyright (c) 2003, 2011, 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 javax.crypto.spec;
|
||||
|
||||
/**
|
||||
* This class specifies the source for encoding input P in OAEP Padding,
|
||||
* as defined in the
|
||||
* <a href="http://www.ietf.org/rfc/rfc3447.txt">PKCS #1</a>
|
||||
* standard.
|
||||
* <pre>
|
||||
* PKCS1PSourceAlgorithms ALGORITHM-IDENTIFIER ::= {
|
||||
* { OID id-pSpecified PARAMETERS OCTET STRING },
|
||||
* ... -- Allows for future expansion --
|
||||
* }
|
||||
* </pre>
|
||||
* @author Valerie Peng
|
||||
*
|
||||
* @since 1.5
|
||||
*/
|
||||
public class PSource {
|
||||
|
||||
private String pSrcName;
|
||||
|
||||
/**
|
||||
* Constructs a source of the encoding input P for OAEP
|
||||
* padding as defined in the PKCS #1 standard using the
|
||||
* specified PSource algorithm.
|
||||
* @param pSrcName the algorithm for the source of the
|
||||
* encoding input P.
|
||||
* @exception NullPointerException if <code>pSrcName</code>
|
||||
* is null.
|
||||
*/
|
||||
protected PSource(String pSrcName) {
|
||||
if (pSrcName == null) {
|
||||
throw new NullPointerException("pSource algorithm is null");
|
||||
}
|
||||
this.pSrcName = pSrcName;
|
||||
}
|
||||
/**
|
||||
* Returns the PSource algorithm name.
|
||||
*
|
||||
* @return the PSource algorithm name.
|
||||
*/
|
||||
public String getAlgorithm() {
|
||||
return pSrcName;
|
||||
}
|
||||
|
||||
/**
|
||||
* This class is used to explicitly specify the value for
|
||||
* encoding input P in OAEP Padding.
|
||||
*
|
||||
* @since 1.5
|
||||
*/
|
||||
public static final class PSpecified extends PSource {
|
||||
|
||||
private byte[] p = new byte[0];
|
||||
|
||||
/**
|
||||
* The encoding input P whose value equals byte[0].
|
||||
*/
|
||||
public static final PSpecified DEFAULT = new PSpecified(new byte[0]);
|
||||
|
||||
/**
|
||||
* Constructs the source explicitly with the specified
|
||||
* value <code>p</code> as the encoding input P.
|
||||
* Note:
|
||||
* @param p the value of the encoding input. The contents
|
||||
* of the array are copied to protect against subsequent
|
||||
* modification.
|
||||
* @exception NullPointerException if <code>p</code> is null.
|
||||
*/
|
||||
public PSpecified(byte[] p) {
|
||||
super("PSpecified");
|
||||
this.p = p.clone();
|
||||
}
|
||||
/**
|
||||
* Returns the value of encoding input P.
|
||||
* @return the value of encoding input P. A new array is
|
||||
* returned each time this method is called.
|
||||
*/
|
||||
public byte[] getValue() {
|
||||
return (p.length==0? p: p.clone());
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,160 @@
|
|||
/*
|
||||
* Copyright (c) 1998, 2011, 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 javax.crypto.spec;
|
||||
|
||||
import java.security.spec.AlgorithmParameterSpec;
|
||||
|
||||
/**
|
||||
* This class specifies the parameters used with the
|
||||
* <a href="http://www.ietf.org/rfc/rfc2268.txt"><i>RC2</i></a>
|
||||
* algorithm.
|
||||
*
|
||||
* <p> The parameters consist of an effective key size and optionally
|
||||
* an 8-byte initialization vector (IV) (only in feedback mode).
|
||||
*
|
||||
* <p> This class can be used to initialize a {@code Cipher} object that
|
||||
* implements the <i>RC2</i> algorithm.
|
||||
*
|
||||
* @author Jan Luehe
|
||||
*
|
||||
* @since 1.4
|
||||
*/
|
||||
public class RC2ParameterSpec implements AlgorithmParameterSpec {
|
||||
|
||||
private byte[] iv = null;
|
||||
private int effectiveKeyBits;
|
||||
|
||||
/**
|
||||
* Constructs a parameter set for RC2 from the given effective key size
|
||||
* (in bits).
|
||||
*
|
||||
* @param effectiveKeyBits the effective key size in bits.
|
||||
*/
|
||||
public RC2ParameterSpec(int effectiveKeyBits) {
|
||||
this.effectiveKeyBits = effectiveKeyBits;
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a parameter set for RC2 from the given effective key size
|
||||
* (in bits) and an 8-byte IV.
|
||||
*
|
||||
* <p> The bytes that constitute the IV are those between
|
||||
* {@code iv[0]} and {@code iv[7]} inclusive.
|
||||
*
|
||||
* @param effectiveKeyBits the effective key size in bits.
|
||||
* @param iv the buffer with the 8-byte IV. The first 8 bytes of
|
||||
* the buffer are copied to protect against subsequent modification.
|
||||
* @exception IllegalArgumentException if {@code iv} is null.
|
||||
*/
|
||||
public RC2ParameterSpec(int effectiveKeyBits, byte[] iv) {
|
||||
this(effectiveKeyBits, iv, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a parameter set for RC2 from the given effective key size
|
||||
* (in bits) and IV.
|
||||
*
|
||||
* <p> The IV is taken from {@code iv}, starting at
|
||||
* {@code offset} inclusive.
|
||||
* The bytes that constitute the IV are those between
|
||||
* {@code iv[offset]} and {@code iv[offset+7]} inclusive.
|
||||
*
|
||||
* @param effectiveKeyBits the effective key size in bits.
|
||||
* @param iv the buffer with the IV. The first 8 bytes
|
||||
* of the buffer beginning at {@code offset} inclusive
|
||||
* are copied to protect against subsequent modification.
|
||||
* @param offset the offset in {@code iv} where the 8-byte IV
|
||||
* starts.
|
||||
* @exception IllegalArgumentException if {@code iv} is null.
|
||||
*/
|
||||
public RC2ParameterSpec(int effectiveKeyBits, byte[] iv, int offset) {
|
||||
this.effectiveKeyBits = effectiveKeyBits;
|
||||
if (iv == null) throw new IllegalArgumentException("IV missing");
|
||||
int blockSize = 8;
|
||||
if (iv.length - offset < blockSize) {
|
||||
throw new IllegalArgumentException("IV too short");
|
||||
}
|
||||
this.iv = new byte[blockSize];
|
||||
System.arraycopy(iv, offset, this.iv, 0, blockSize);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the effective key size in bits.
|
||||
*
|
||||
* @return the effective key size in bits.
|
||||
*/
|
||||
public int getEffectiveKeyBits() {
|
||||
return this.effectiveKeyBits;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the IV or null if this parameter set does not contain an IV.
|
||||
*
|
||||
* @return the IV or null if this parameter set does not contain an IV.
|
||||
* Returns a new array each time this method is called.
|
||||
*/
|
||||
public byte[] getIV() {
|
||||
return (iv == null? null:iv.clone());
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests for equality between the specified object and this
|
||||
* object. Two RC2ParameterSpec objects are considered equal if their
|
||||
* effective key sizes and IVs are equal.
|
||||
* (Two IV references are considered equal if both are {@code null}.)
|
||||
*
|
||||
* @param obj the object to test for equality with this object.
|
||||
*
|
||||
* @return true if the objects are considered equal, false if
|
||||
* {@code obj} is null or otherwise.
|
||||
*/
|
||||
public boolean equals(Object obj) {
|
||||
if (obj == this) {
|
||||
return true;
|
||||
}
|
||||
if (!(obj instanceof RC2ParameterSpec)) {
|
||||
return false;
|
||||
}
|
||||
RC2ParameterSpec other = (RC2ParameterSpec) obj;
|
||||
|
||||
return ((effectiveKeyBits == other.effectiveKeyBits) &&
|
||||
java.util.Arrays.equals(iv, other.iv));
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates a hash code value for the object.
|
||||
* Objects that are equal will also have the same hashcode.
|
||||
*/
|
||||
public int hashCode() {
|
||||
int retval = 0;
|
||||
if (iv != null) {
|
||||
for (int i = 1; i < iv.length; i++) {
|
||||
retval += iv[i] * i;
|
||||
}
|
||||
}
|
||||
return (retval += effectiveKeyBits);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,203 @@
|
|||
/*
|
||||
* Copyright (c) 1998, 2015, 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 javax.crypto.spec;
|
||||
|
||||
import java.security.spec.AlgorithmParameterSpec;
|
||||
|
||||
/**
|
||||
* This class specifies the parameters used with the
|
||||
* <a href="http://tools.ietf.org/html/rfc2040"><i>RC5</i></a>
|
||||
* algorithm.
|
||||
*
|
||||
* <p> The parameters consist of a version number, a rounds count, a word
|
||||
* size, and optionally an initialization vector (IV) (only in feedback mode).
|
||||
*
|
||||
* <p> This class can be used to initialize a {@code Cipher} object that
|
||||
* implements the <i>RC5</i> algorithm as supplied by
|
||||
* <a href="http://www.rsa.com">RSA Security LLC</a>,
|
||||
* or any parties authorized by RSA Security.
|
||||
*
|
||||
* @author Jan Luehe
|
||||
*
|
||||
* @since 1.4
|
||||
*/
|
||||
public class RC5ParameterSpec implements AlgorithmParameterSpec {
|
||||
|
||||
private byte[] iv = null;
|
||||
private int version;
|
||||
private int rounds;
|
||||
private int wordSize; // the word size in bits
|
||||
|
||||
/**
|
||||
* Constructs a parameter set for RC5 from the given version, number of
|
||||
* rounds and word size (in bits).
|
||||
*
|
||||
* @param version the version.
|
||||
* @param rounds the number of rounds.
|
||||
* @param wordSize the word size in bits.
|
||||
*/
|
||||
public RC5ParameterSpec(int version, int rounds, int wordSize) {
|
||||
this.version = version;
|
||||
this.rounds = rounds;
|
||||
this.wordSize = wordSize;
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a parameter set for RC5 from the given version, number of
|
||||
* rounds, word size (in bits), and IV.
|
||||
*
|
||||
* <p> Note that the size of the IV (block size) must be twice the word
|
||||
* size. The bytes that constitute the IV are those between
|
||||
* {@code iv[0]} and {@code iv[2*(wordSize/8)-1]} inclusive.
|
||||
*
|
||||
* @param version the version.
|
||||
* @param rounds the number of rounds.
|
||||
* @param wordSize the word size in bits.
|
||||
* @param iv the buffer with the IV. The first {@code 2*(wordSize/8)}
|
||||
* bytes of the buffer are copied to protect against subsequent
|
||||
* modification.
|
||||
* @exception IllegalArgumentException if {@code iv} is
|
||||
* {@code null} or {@code (iv.length < 2 * (wordSize / 8))}
|
||||
*/
|
||||
public RC5ParameterSpec(int version, int rounds, int wordSize, byte[] iv) {
|
||||
this(version, rounds, wordSize, iv, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a parameter set for RC5 from the given version, number of
|
||||
* rounds, word size (in bits), and IV.
|
||||
*
|
||||
* <p> The IV is taken from {@code iv}, starting at
|
||||
* {@code offset} inclusive.
|
||||
* Note that the size of the IV (block size), starting at
|
||||
* {@code offset} inclusive, must be twice the word size.
|
||||
* The bytes that constitute the IV are those between
|
||||
* {@code iv[offset]} and {@code iv[offset+2*(wordSize/8)-1]}
|
||||
* inclusive.
|
||||
*
|
||||
* @param version the version.
|
||||
* @param rounds the number of rounds.
|
||||
* @param wordSize the word size in bits.
|
||||
* @param iv the buffer with the IV. The first {@code 2*(wordSize/8)}
|
||||
* bytes of the buffer beginning at {@code offset}
|
||||
* inclusive are copied to protect against subsequent modification.
|
||||
* @param offset the offset in {@code iv} where the IV starts.
|
||||
* @exception IllegalArgumentException if {@code iv} is
|
||||
* {@code null} or
|
||||
* {@code (iv.length - offset < 2 * (wordSize / 8))}
|
||||
*/
|
||||
public RC5ParameterSpec(int version, int rounds, int wordSize,
|
||||
byte[] iv, int offset) {
|
||||
this.version = version;
|
||||
this.rounds = rounds;
|
||||
this.wordSize = wordSize;
|
||||
if (iv == null) throw new IllegalArgumentException("IV missing");
|
||||
int blockSize = (wordSize / 8) * 2;
|
||||
if (iv.length - offset < blockSize) {
|
||||
throw new IllegalArgumentException("IV too short");
|
||||
}
|
||||
this.iv = new byte[blockSize];
|
||||
System.arraycopy(iv, offset, this.iv, 0, blockSize);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the version.
|
||||
*
|
||||
* @return the version.
|
||||
*/
|
||||
public int getVersion() {
|
||||
return this.version;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of rounds.
|
||||
*
|
||||
* @return the number of rounds.
|
||||
*/
|
||||
public int getRounds() {
|
||||
return this.rounds;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the word size in bits.
|
||||
*
|
||||
* @return the word size in bits.
|
||||
*/
|
||||
public int getWordSize() {
|
||||
return this.wordSize;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the IV or null if this parameter set does not contain an IV.
|
||||
*
|
||||
* @return the IV or null if this parameter set does not contain an IV.
|
||||
* Returns a new array each time this method is called.
|
||||
*/
|
||||
public byte[] getIV() {
|
||||
return (iv == null? null:iv.clone());
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests for equality between the specified object and this
|
||||
* object. Two RC5ParameterSpec objects are considered equal if their
|
||||
* version numbers, number of rounds, word sizes, and IVs are equal.
|
||||
* (Two IV references are considered equal if both are {@code null}.)
|
||||
*
|
||||
* @param obj the object to test for equality with this object.
|
||||
*
|
||||
* @return true if the objects are considered equal, false if
|
||||
* {@code obj} is null or otherwise.
|
||||
*/
|
||||
public boolean equals(Object obj) {
|
||||
if (obj == this) {
|
||||
return true;
|
||||
}
|
||||
if (!(obj instanceof RC5ParameterSpec)) {
|
||||
return false;
|
||||
}
|
||||
RC5ParameterSpec other = (RC5ParameterSpec) obj;
|
||||
|
||||
return ((version == other.version) &&
|
||||
(rounds == other.rounds) &&
|
||||
(wordSize == other.wordSize) &&
|
||||
java.util.Arrays.equals(iv, other.iv));
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates a hash code value for the object.
|
||||
* Objects that are equal will also have the same hashcode.
|
||||
*/
|
||||
public int hashCode() {
|
||||
int retval = 0;
|
||||
if (iv != null) {
|
||||
for (int i = 1; i < iv.length; i++) {
|
||||
retval += iv[i] * i;
|
||||
}
|
||||
}
|
||||
retval += (version + rounds + wordSize);
|
||||
return retval;
|
||||
}
|
||||
}
|
232
src/java.base/share/classes/javax/crypto/spec/SecretKeySpec.java
Normal file
232
src/java.base/share/classes/javax/crypto/spec/SecretKeySpec.java
Normal file
|
@ -0,0 +1,232 @@
|
|||
/*
|
||||
* Copyright (c) 1998, 2017, 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 javax.crypto.spec;
|
||||
|
||||
import java.security.MessageDigest;
|
||||
import java.security.spec.KeySpec;
|
||||
import java.util.Locale;
|
||||
import javax.crypto.SecretKey;
|
||||
|
||||
/**
|
||||
* This class specifies a secret key in a provider-independent fashion.
|
||||
*
|
||||
* <p>It can be used to construct a <code>SecretKey</code> from a byte array,
|
||||
* without having to go through a (provider-based)
|
||||
* <code>SecretKeyFactory</code>.
|
||||
*
|
||||
* <p>This class is only useful for raw secret keys that can be represented as
|
||||
* a byte array and have no key parameters associated with them, e.g., DES or
|
||||
* Triple DES keys.
|
||||
*
|
||||
* @author Jan Luehe
|
||||
*
|
||||
* @see javax.crypto.SecretKey
|
||||
* @see javax.crypto.SecretKeyFactory
|
||||
* @since 1.4
|
||||
*/
|
||||
public class SecretKeySpec implements KeySpec, SecretKey {
|
||||
|
||||
private static final long serialVersionUID = 6577238317307289933L;
|
||||
|
||||
/**
|
||||
* The secret key.
|
||||
*
|
||||
* @serial
|
||||
*/
|
||||
private byte[] key;
|
||||
|
||||
/**
|
||||
* The name of the algorithm associated with this key.
|
||||
*
|
||||
* @serial
|
||||
*/
|
||||
private String algorithm;
|
||||
|
||||
/**
|
||||
* Constructs a secret key from the given byte array.
|
||||
*
|
||||
* <p>This constructor does not check if the given bytes indeed specify a
|
||||
* secret key of the specified algorithm. For example, if the algorithm is
|
||||
* DES, this constructor does not check if <code>key</code> is 8 bytes
|
||||
* long, and also does not check for weak or semi-weak keys.
|
||||
* In order for those checks to be performed, an algorithm-specific
|
||||
* <i>key specification</i> class (in this case:
|
||||
* {@link DESKeySpec DESKeySpec})
|
||||
* should be used.
|
||||
*
|
||||
* @param key the key material of the secret key. The contents of
|
||||
* the array are copied to protect against subsequent modification.
|
||||
* @param algorithm the name of the secret-key algorithm to be associated
|
||||
* with the given key material.
|
||||
* See the <a href="{@docRoot}/../specs/security/standard-names.html">
|
||||
* Java Security Standard Algorithm Names</a> document
|
||||
* for information about standard algorithm names.
|
||||
* @exception IllegalArgumentException if <code>algorithm</code>
|
||||
* is null or <code>key</code> is null or empty.
|
||||
*/
|
||||
public SecretKeySpec(byte[] key, String algorithm) {
|
||||
if (key == null || algorithm == null) {
|
||||
throw new IllegalArgumentException("Missing argument");
|
||||
}
|
||||
if (key.length == 0) {
|
||||
throw new IllegalArgumentException("Empty key");
|
||||
}
|
||||
this.key = key.clone();
|
||||
this.algorithm = algorithm;
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a secret key from the given byte array, using the first
|
||||
* <code>len</code> bytes of <code>key</code>, starting at
|
||||
* <code>offset</code> inclusive.
|
||||
*
|
||||
* <p> The bytes that constitute the secret key are
|
||||
* those between <code>key[offset]</code> and
|
||||
* <code>key[offset+len-1]</code> inclusive.
|
||||
*
|
||||
* <p>This constructor does not check if the given bytes indeed specify a
|
||||
* secret key of the specified algorithm. For example, if the algorithm is
|
||||
* DES, this constructor does not check if <code>key</code> is 8 bytes
|
||||
* long, and also does not check for weak or semi-weak keys.
|
||||
* In order for those checks to be performed, an algorithm-specific key
|
||||
* specification class (in this case:
|
||||
* {@link DESKeySpec DESKeySpec})
|
||||
* must be used.
|
||||
*
|
||||
* @param key the key material of the secret key. The first
|
||||
* <code>len</code> bytes of the array beginning at
|
||||
* <code>offset</code> inclusive are copied to protect
|
||||
* against subsequent modification.
|
||||
* @param offset the offset in <code>key</code> where the key material
|
||||
* starts.
|
||||
* @param len the length of the key material.
|
||||
* @param algorithm the name of the secret-key algorithm to be associated
|
||||
* with the given key material.
|
||||
* See the <a href="{@docRoot}/../specs/security/standard-names.html">
|
||||
* Java Security Standard Algorithm Names</a> document
|
||||
* for information about standard algorithm names.
|
||||
* @exception IllegalArgumentException if <code>algorithm</code>
|
||||
* is null or <code>key</code> is null, empty, or too short,
|
||||
* i.e. {@code key.length-offset<len}.
|
||||
* @exception ArrayIndexOutOfBoundsException is thrown if
|
||||
* <code>offset</code> or <code>len</code> index bytes outside the
|
||||
* <code>key</code>.
|
||||
*/
|
||||
public SecretKeySpec(byte[] key, int offset, int len, String algorithm) {
|
||||
if (key == null || algorithm == null) {
|
||||
throw new IllegalArgumentException("Missing argument");
|
||||
}
|
||||
if (key.length == 0) {
|
||||
throw new IllegalArgumentException("Empty key");
|
||||
}
|
||||
if (key.length-offset < len) {
|
||||
throw new IllegalArgumentException
|
||||
("Invalid offset/length combination");
|
||||
}
|
||||
if (len < 0) {
|
||||
throw new ArrayIndexOutOfBoundsException("len is negative");
|
||||
}
|
||||
this.key = new byte[len];
|
||||
System.arraycopy(key, offset, this.key, 0, len);
|
||||
this.algorithm = algorithm;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the name of the algorithm associated with this secret key.
|
||||
*
|
||||
* @return the secret key algorithm.
|
||||
*/
|
||||
public String getAlgorithm() {
|
||||
return this.algorithm;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the name of the encoding format for this secret key.
|
||||
*
|
||||
* @return the string "RAW".
|
||||
*/
|
||||
public String getFormat() {
|
||||
return "RAW";
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the key material of this secret key.
|
||||
*
|
||||
* @return the key material. Returns a new array
|
||||
* each time this method is called.
|
||||
*/
|
||||
public byte[] getEncoded() {
|
||||
return this.key.clone();
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates a hash code value for the object.
|
||||
* Objects that are equal will also have the same hashcode.
|
||||
*/
|
||||
public int hashCode() {
|
||||
int retval = 0;
|
||||
for (int i = 1; i < this.key.length; i++) {
|
||||
retval += this.key[i] * i;
|
||||
}
|
||||
if (this.algorithm.equalsIgnoreCase("TripleDES"))
|
||||
return (retval ^= "desede".hashCode());
|
||||
else
|
||||
return (retval ^=
|
||||
this.algorithm.toLowerCase(Locale.ENGLISH).hashCode());
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests for equality between the specified object and this
|
||||
* object. Two SecretKeySpec objects are considered equal if
|
||||
* they are both SecretKey instances which have the
|
||||
* same case-insensitive algorithm name and key encoding.
|
||||
*
|
||||
* @param obj the object to test for equality with this object.
|
||||
*
|
||||
* @return true if the objects are considered equal, false if
|
||||
* <code>obj</code> is null or otherwise.
|
||||
*/
|
||||
public boolean equals(Object obj) {
|
||||
if (this == obj)
|
||||
return true;
|
||||
|
||||
if (!(obj instanceof SecretKey))
|
||||
return false;
|
||||
|
||||
String thatAlg = ((SecretKey)obj).getAlgorithm();
|
||||
if (!(thatAlg.equalsIgnoreCase(this.algorithm))) {
|
||||
if ((!(thatAlg.equalsIgnoreCase("DESede"))
|
||||
|| !(this.algorithm.equalsIgnoreCase("TripleDES")))
|
||||
&& (!(thatAlg.equalsIgnoreCase("TripleDES"))
|
||||
|| !(this.algorithm.equalsIgnoreCase("DESede"))))
|
||||
return false;
|
||||
}
|
||||
|
||||
byte[] thatKey = ((SecretKey)obj).getEncoded();
|
||||
|
||||
return MessageDigest.isEqual(this.key, thatKey);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,69 @@
|
|||
/*
|
||||
* Copyright (c) 1999, 2017, 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.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Provides classes and interfaces for key specifications and
|
||||
* algorithm parameter specifications.
|
||||
*
|
||||
* <p>A key specification is a transparent representation of the key
|
||||
* material that constitutes a key. A key may be specified in an
|
||||
* algorithm-specific way, or in an algorithm-independent encoding
|
||||
* format (such as ASN.1). This package contains key specifications
|
||||
* for Diffie-Hellman public and private keys, as well as key
|
||||
* specifications for DES, Triple DES, and PBE secret keys.
|
||||
*
|
||||
* <p>An algorithm parameter specification is a transparent
|
||||
* representation of the sets of parameters used with an
|
||||
* algorithm. This package contains algorithm parameter specifications
|
||||
* for parameters used with the Diffie-Hellman, DES, Triple DES, PBE,
|
||||
* RC2 and RC5 algorithms.
|
||||
*
|
||||
*
|
||||
* <ul>
|
||||
* <li>PKCS #3: Diffie-Hellman Key-Agreement Standard, Version 1.4,
|
||||
* November 1993.</li>
|
||||
* <li>PKCS #5: Password-Based Encryption Standard, Version 1.5,
|
||||
* November 1993.</li>
|
||||
* <li>Federal Information Processing Standards Publication (FIPS PUB) 46-2:
|
||||
* Data Encryption Standard (DES) </li>
|
||||
* </ul>
|
||||
*
|
||||
* <h2>Related Documentation</h2>
|
||||
*
|
||||
* For documentation that includes information about algorithm
|
||||
* parameter and key specifications, please see:
|
||||
*
|
||||
* <ul>
|
||||
* <li>
|
||||
* {@extLink security_guide_jca
|
||||
* Java Cryptography Architecture (JCA) Reference Guide} </li>
|
||||
* <li>
|
||||
* {@extLink security_guide_impl_provider
|
||||
* How to Implement a Provider in the Java Cryptography Architecture}</li>
|
||||
* </ul>
|
||||
*
|
||||
* @since 1.4
|
||||
*/
|
||||
package javax.crypto.spec;
|
Loading…
Add table
Add a link
Reference in a new issue