blob: b79faa5c72ae40103b414afa0ebf942b94c14b5e [file] [log] [blame]
/*
* 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.
*/
/**
* @author Vera Y. Petrashkova
* @version $Revision$
*/
package org.apache.harmony.crypto.tests.javax.crypto;
import dalvik.annotation.KnownFailure;
import dalvik.annotation.TestTargetClass;
import dalvik.annotation.TestTargets;
import dalvik.annotation.TestLevel;
import dalvik.annotation.TestTargetNew;
import java.math.BigInteger;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.PrivateKey;
import java.security.Provider;
import java.security.PublicKey;
import java.security.SecureRandom;
import java.security.spec.AlgorithmParameterSpec;
import java.security.spec.DSAParameterSpec;
import java.security.spec.RSAKeyGenParameterSpec;
import javax.crypto.KeyAgreement;
import javax.crypto.KeyAgreementSpi;
import javax.crypto.ShortBufferException;
import javax.crypto.interfaces.DHPrivateKey;
import javax.crypto.spec.DHParameterSpec;
import org.apache.harmony.crypto.tests.support.MyKeyAgreementSpi;
import org.apache.harmony.security.tests.support.SpiEngUtils;
import org.apache.harmony.security.tests.support.TestKeyPair;
import junit.framework.TestCase;
@TestTargetClass(KeyAgreement.class)
/**
* Tests for KeyAgreement constructor and methods
*
*/
public class KeyAgreementTest extends TestCase {
public static final String srvKeyAgreement = "KeyAgreement";
private static String defaultAlgorithm = "DH";
private static String defaultProviderName = null;
private static Provider defaultProvider = null;
private static boolean DEFSupported = false;
private static final String NotSupportMsg = "There is no suitable provider for KeyAgreement";
private static final String[] invalidValues = SpiEngUtils.invalidValues;
private static String[] validValues = { "DH", "dH",
"Dh", "dh" };
private static PrivateKey privKey = null;
private static PublicKey publKey = null;
private static boolean initKeys = false;
static {
defaultProvider = SpiEngUtils.isSupport(defaultAlgorithm,
srvKeyAgreement);
DEFSupported = (defaultProvider != null);
defaultProviderName = (DEFSupported ? defaultProvider.getName() : null);
}
private void createKeys() throws Exception {
if (!initKeys) {
TestKeyPair tkp = new TestKeyPair(defaultAlgorithm);
privKey = tkp.getPrivate();
publKey = tkp.getPublic();
initKeys = true;
}
}
private KeyAgreement[] createKAs() throws Exception {
if (!DEFSupported) {
fail(NotSupportMsg);
}
KeyAgreement[] ka = new KeyAgreement[3];
ka[0] = KeyAgreement.getInstance(defaultAlgorithm);
ka[1] = KeyAgreement.getInstance(defaultAlgorithm, defaultProvider);
ka[2] = KeyAgreement.getInstance(defaultAlgorithm,
defaultProviderName);
return ka;
}
public static String getDefAlg() {
return defaultAlgorithm;
}
/**
* Test for <code> getInstance(String algorithm) </code> method Assertions:
* throws NullPointerException when algorithm is null throws
* NoSuchAlgorithmException when algorithm isnot available
*/
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "This is a complete subset of tests for getInstance method.",
method = "getInstance",
args = {java.lang.String.class}
)
public void testGetInstanceString01() throws NoSuchAlgorithmException {
try {
KeyAgreement.getInstance(null);
fail("NullPointerException or NoSuchAlgorithmException should be thrown if algorithm is null");
} catch (NullPointerException e) {
} catch (NoSuchAlgorithmException e) {
}
for (int i = 0; i < invalidValues.length; i++) {
try {
KeyAgreement.getInstance(invalidValues[i]);
fail("NoSuchAlgorithmException must be thrown");
} catch (NoSuchAlgorithmException e) {
}
}
}
/**
* Test for <code> getInstance(String algorithm) </code> method Assertions:
* returns KeyAgreement object
*/
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "This is a complete subset of tests for getInstance method.",
method = "getInstance",
args = {java.lang.String.class}
)
public void testGetInstanceString02() throws NoSuchAlgorithmException {
if (!DEFSupported) {
fail(NotSupportMsg);
return;
}
KeyAgreement keyA;
for (int i = 0; i < validValues.length; i++) {
keyA = KeyAgreement.getInstance(validValues[i]);
assertEquals("Incorrect algorithm", keyA.getAlgorithm(),
validValues[i]);
}
}
/**
* Test for <code> getInstance(String algorithm, String provider)</code>
* method Assertions: throws NullPointerException when algorithm is null
* throws NoSuchAlgorithmException when algorithm is not available
*/
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "This is a complete subset of tests for getInstance method.",
method = "getInstance",
args = {java.lang.String.class, java.lang.String.class}
)
public void testGetInstanceStringString01()
throws NoSuchAlgorithmException, IllegalArgumentException,
NoSuchProviderException {
if (!DEFSupported) {
fail(NotSupportMsg);
return;
}
try {
KeyAgreement.getInstance(null, defaultProviderName);
fail("NullPointerException or NoSuchAlgorithmException should be thrown if algorithm is null");
} catch (NullPointerException e) {
} catch (NoSuchAlgorithmException e) {
}
for (int i = 0; i < invalidValues.length; i++) {
try {
KeyAgreement.getInstance(invalidValues[i], defaultProviderName);
fail("NoSuchAlgorithmException must be thrown");
} catch (NoSuchAlgorithmException e) {
}
}
}
/**
* Test for <code> getInstance(String algorithm, String provider)</code>
* method Assertions: throws IllegalArgumentException when provider is null
* or empty throws NoSuchProviderException when provider has not be
* configured
*/
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "This is a complete subset of tests for getInstance method.",
method = "getInstance",
args = {java.lang.String.class, java.lang.String.class}
)
public void testGetInstanceStringString02()
throws IllegalArgumentException, NoSuchAlgorithmException,
NoSuchProviderException {
if (!DEFSupported) {
fail(NotSupportMsg);
return;
}
String provider = null;
for (int i = 0; i < validValues.length; i++) {
try {
KeyAgreement.getInstance(validValues[i], provider);
fail("IllegalArgumentException must be thrown when provider is null");
} catch (IllegalArgumentException e) {
}
try {
KeyAgreement.getInstance(validValues[i], "");
fail("IllegalArgumentException must be thrown when provider is empty");
} catch (IllegalArgumentException e) {
}
for (int j = 1; j < invalidValues.length; j++) {
try {
KeyAgreement.getInstance(validValues[i], invalidValues[j]);
fail("NoSuchProviderException must be thrown (algorithm: "
.concat(validValues[i]).concat(" provider: ")
.concat(invalidValues[j]).concat(")"));
} catch (NoSuchProviderException e) {
}
}
}
}
/**
* Test for <code> getInstance(String algorithm, String provider)</code>
* method Assertions: returns KeyAgreement object
*/
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "This is a complete subset of tests for getInstance method.",
method = "getInstance",
args = {java.lang.String.class, java.lang.String.class}
)
public void testGetInstanceStringString03()
throws IllegalArgumentException, NoSuchAlgorithmException,
NoSuchProviderException {
if (!DEFSupported) {
fail(NotSupportMsg);
return;
}
KeyAgreement keyA;
for (int i = 0; i < validValues.length; i++) {
keyA = KeyAgreement
.getInstance(validValues[i], defaultProviderName);
assertEquals("Incorrect algorithm", keyA.getAlgorithm(),
validValues[i]);
assertEquals("Incorrect provider", keyA.getProvider().getName(),
defaultProviderName);
}
}
/**
* Test for <code> getInstance(String algorithm, Provider provider)</code>
* method Assertions: throws NullPointerException when algorithm is null
* throws NoSuchAlgorithmException when algorithm isnot available
*/
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "This is a complete subset of tests for getInstance method.",
method = "getInstance",
args = {java.lang.String.class, java.security.Provider.class}
)
public void testGetInstanceStringProvider01()
throws NoSuchAlgorithmException, IllegalArgumentException {
if (!DEFSupported) {
fail(NotSupportMsg);
return;
}
try {
KeyAgreement.getInstance(null, defaultProvider);
fail("NullPointerException or NoSuchAlgorithmException should be thrown if algorithm is null");
} catch (NullPointerException e) {
} catch (NoSuchAlgorithmException e) {
}
for (int i = 0; i < invalidValues.length; i++) {
try {
KeyAgreement.getInstance(invalidValues[i], defaultProvider);
fail("NoSuchAlgorithmException must be thrown");
} catch (NoSuchAlgorithmException e) {
}
}
}
/**
* Test for <code> getInstance(String algorithm, Provider provider)</code>
* method Assertions: throws IllegalArgumentException when provider is null
*/
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "This is a complete subset of tests for getInstance method.",
method = "getInstance",
args = {java.lang.String.class, java.security.Provider.class}
)
public void testGetInstanceStringProvider02()
throws NoSuchAlgorithmException, IllegalArgumentException {
if (!DEFSupported) {
fail(NotSupportMsg);
return;
}
Provider provider = null;
for (int i = 0; i < invalidValues.length; i++) {
try {
KeyAgreement.getInstance(invalidValues[i], provider);
fail("IllegalArgumentException must be thrown");
} catch (IllegalArgumentException e) {
}
}
}
/**
* Test for <code> getInstance(String algorithm, Provider provider)</code>
* method Assertions: returns KeyAgreement object
*/
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "This is a complete subset of tests for getInstance method.",
method = "getInstance",
args = {java.lang.String.class, java.security.Provider.class}
)
public void testGetInstanceStringProvider03()
throws IllegalArgumentException, NoSuchAlgorithmException {
if (!DEFSupported) {
fail(NotSupportMsg);
return;
}
KeyAgreement keyA;
for (int i = 0; i < validValues.length; i++) {
keyA = KeyAgreement.getInstance(validValues[i], defaultProvider);
assertEquals("Incorrect algorithm", keyA.getAlgorithm(),
validValues[i]);
assertEquals("Incorrect provider", keyA.getProvider(),
defaultProvider);
}
}
/**
* Test for the methods: <code>init(Key key)</code>
* <code>generateSecret()</code>
* <code>generateSecret(byte[] sharedsecret, int offset)</code>
* <code>generateSecret(String algorithm)</code>
* Assertions: initializes KeyAgreement; returns sharedSecret; puts
* sharedsecret in buffer and return numbers of bytes; returns SecretKey
* object
*/
@TestTargets({
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "Checks functionality only.",
method = "init",
args = {java.security.Key.class}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "Checks functionality only.",
method = "generateSecret",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "Checks functionality only.",
method = "generateSecret",
args = {byte[].class, int.class}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "Checks functionality only.",
method = "generateSecret",
args = {java.lang.String.class}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "Checks functionality only.",
clazz = KeyAgreementSpi.class,
method = "engineGenerateSecret",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "Checks functionality only.",
clazz = KeyAgreementSpi.class,
method = "engineGenerateSecret",
args = {byte[].class, int.class}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "Checks functionality only.",
clazz = KeyAgreementSpi.class,
method = "engineGenerateSecret",
args = {java.lang.String.class}
)
})
public void testGenerateSecret03() throws Exception {
if (!DEFSupported) {
fail(NotSupportMsg);
return;
}
createKeys();
KeyAgreement[] kAgs = createKAs();
byte[] bb;
byte[] bb1 = new byte[10];
for (int i = 0; i < kAgs.length; i++) {
kAgs[i].init(privKey);
kAgs[i].doPhase(publKey, true);
bb = kAgs[i].generateSecret();
kAgs[i].init(privKey);
kAgs[i].doPhase(publKey, true);
bb1 = new byte[bb.length + 10];
kAgs[i].generateSecret(bb1, 9);
kAgs[i].init(privKey);
kAgs[i].doPhase(publKey, true);
kAgs[i].generateSecret("DES");
}
}
/**
* Test for <code>doPhase(Key key, boolean lastPhase)</code> method
* Assertion: throws InvalidKeyException if key is not appropriate
*/
@TestTargets({
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "doPhase",
args = {java.security.Key.class, boolean.class}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
clazz = KeyAgreementSpi.class,
method = "engineDoPhase",
args = {java.security.Key.class, boolean.class}
)
})
public void testDoPhase() throws Exception {
if (!DEFSupported) {
fail(NotSupportMsg);
return;
}
createKeys();
KeyAgreement[] kAgs = createKAs();
DHParameterSpec dhPs = ((DHPrivateKey) privKey).getParams();
SecureRandom randomNull = null;
SecureRandom random = new SecureRandom();
for (int i = 0; i < kAgs.length; i++) {
try {
kAgs[i].doPhase(publKey, true);
fail("IllegalStateException expected");
} catch (IllegalStateException e) {
//expected
}
kAgs[i].init(privKey);
try {
kAgs[i].doPhase(privKey, false);
fail("InvalidKeyException must be throw");
} catch (InvalidKeyException e) {
}
try {
kAgs[i].doPhase(privKey, true);
fail("InvalidKeyException must be throw");
} catch (InvalidKeyException e) {
}
kAgs[i].init(privKey, dhPs);
kAgs[i].doPhase(publKey, true);
kAgs[i].init(privKey, dhPs, random);
kAgs[i].doPhase(publKey, true);
}
}
/**
* Test for the methods <code>init(Key key)</code>
* <code>init(Key key, SecureRandom random)</code>
* <code>init(Key key, AlgorithmParameterSpec params)</code>
* <code>init(Key key, AlgorithmParameterSpec params, SecureRandom random)</code>
* Assertion: throws InvalidKeyException when key is inappropriate
*/
@TestTargets({
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "Checks InvalidKeyException.",
method = "init",
args = {java.security.Key.class}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "Checks InvalidKeyException.",
method = "init",
args = {java.security.Key.class, java.security.spec.AlgorithmParameterSpec.class}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "Checks InvalidKeyException.",
clazz = KeyAgreementSpi.class,
method = "engineInit",
args = {java.security.Key.class, java.security.spec.AlgorithmParameterSpec.class, java.security.SecureRandom.class}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "Checks InvalidKeyException.",
clazz = KeyAgreementSpi.class,
method = "engineInit",
args = {java.security.Key.class, java.security.SecureRandom.class}
)
})
public void testInit01() throws Exception {
if (!DEFSupported) {
fail(NotSupportMsg);
return;
}
createKeys();
KeyAgreement[] kAgs = createKAs();
SecureRandom random = null;
AlgorithmParameterSpec aps = null;
DHParameterSpec dhPs = new DHParameterSpec(new BigInteger("56"),
new BigInteger("56"));
for (int i = 0; i < kAgs.length; i++) {
try {
kAgs[i].init(publKey);
fail("InvalidKeyException must be throw");
} catch (InvalidKeyException e) {
}
try {
kAgs[i].init(publKey, new SecureRandom());
fail("InvalidKeyException must be throw");
} catch (InvalidKeyException e) {
}
try {
kAgs[i].init(publKey, random);
fail("InvalidKeyException must be throw");
} catch (InvalidKeyException e) {
}
try {
kAgs[i].init(publKey, dhPs);
fail("InvalidKeyException must be throw");
} catch (InvalidKeyException e) {
}
try {
kAgs[i].init(publKey, aps);
fail("InvalidKeyException must be throw");
} catch (InvalidKeyException e) {
}
try {
kAgs[i].init(publKey, dhPs, new SecureRandom());
fail("InvalidKeyException must be throw");
} catch (InvalidKeyException e) {
}
}
}
/**
* Test for the methods
* <code>init(Key key, AlgorithmParameterSpec params)</code>
* <code>init(Key key, AlgorithmParameterSpec params, SecureRandom random)</code>
* Assertion: throws AlgorithmParameterException when params are
* inappropriate
*/
@TestTargets({
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "Checks InvalidAlgorithmParameterException.This is a complete subset of tests for exceptions checking for init methods group",
method = "init",
args = {java.security.Key.class, java.security.spec.AlgorithmParameterSpec.class}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "Checks InvalidAlgorithmParameterException.This is a complete subset of tests for exceptions checking for init methods group",
clazz = KeyAgreementSpi.class,
method = "engineInit",
args = {java.security.Key.class, java.security.spec.AlgorithmParameterSpec.class, java.security.SecureRandom.class}
)
})
public void testInit02() throws Exception {
if (!DEFSupported) {
fail(NotSupportMsg);
return;
}
createKeys();
KeyAgreement[] kAgs = createKAs();
SecureRandom random = null;
DSAParameterSpec dsa = new DSAParameterSpec(new BigInteger("56"),
new BigInteger("56"), new BigInteger("56"));
for (int i = 0; i < kAgs.length; i++) {
try {
kAgs[i].init(privKey, dsa);
fail("InvalidAlgorithmParameterException or InvalidKeyException must be throw");
} catch (InvalidAlgorithmParameterException e) {
} catch (InvalidKeyException e) {
}
try {
kAgs[i].init(privKey, dsa, new SecureRandom());
fail("InvalidAlgorithmParameterException or InvalidKeyException must be throw");
} catch (InvalidAlgorithmParameterException e) {
} catch (InvalidKeyException e) {
}
try {
kAgs[i].init(privKey, dsa, random);
fail("InvalidAlgorithmParameterException or InvalidKeyException must be throw");
} catch (InvalidAlgorithmParameterException e) {
} catch (InvalidKeyException e) {
}
}
}
/**
* Test for the methods: <code>init(Key key)</code>
* <code>init(Key key, SecureRandom random)</code>
* <code>generateSecret()</code>
* Assertions: initializes KeyAgreement and returns byte array
*/
@TestTargets({
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "Checks functionality.",
method = "init",
args = {java.security.Key.class}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "Checks functionality.",
method = "init",
args = {java.security.Key.class, java.security.SecureRandom.class}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "Checks functionality.",
method = "generateSecret",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "Checks functionality.",
clazz = KeyAgreementSpi.class,
method = "engineInit",
args = {java.security.Key.class, java.security.SecureRandom.class}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "Checks functionality.",
clazz = KeyAgreementSpi.class,
method = "engineInit",
args = {java.security.Key.class, java.security.spec.AlgorithmParameterSpec.class, java.security.SecureRandom.class}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "Checks functionality.",
clazz = KeyAgreementSpi.class,
method = "engineGenerateSecret",
args = {}
)
})
public void testInit03() throws Exception {
if (!DEFSupported) {
fail(NotSupportMsg);
return;
}
createKeys();
KeyAgreement[] kAgs = createKAs();
byte[] bbRes1;
byte[] bbRes2;
byte[] bbRes3;
SecureRandom randomNull = null;
SecureRandom random = new SecureRandom();
for (int i = 0; i < kAgs.length; i++) {
kAgs[i].init(privKey);
kAgs[i].doPhase(publKey, true);
bbRes1 = kAgs[i].generateSecret();
kAgs[i].init(privKey, random);
kAgs[i].doPhase(publKey, true);
bbRes2 = kAgs[i].generateSecret();
assertEquals("Incorrect byte array length", bbRes1.length,
bbRes2.length);
for (int j = 0; j < bbRes1.length; j++) {
assertEquals("Incorrect byte (index: ".concat(
Integer.toString(i)).concat(")"), bbRes1[j], bbRes2[j]);
}
kAgs[i].init(privKey, randomNull);
kAgs[i].doPhase(publKey, true);
bbRes3 = kAgs[i].generateSecret();
assertEquals("Incorrect byte array length", bbRes1.length,
bbRes3.length);
for (int j = 0; j < bbRes1.length; j++) {
assertEquals("Incorrect byte (index: ".concat(
Integer.toString(i)).concat(")"), bbRes1[j], bbRes3[j]);
}
}
}
/**
* Test for the methods:
* <code>init(Key key, AlgorithmParameterSpec params)</code>
* <code>init(Key key, AlgorithmParameterSpec params, SecureRandom random)</code>
* <code>generateSecret()</code>
* Assertions: initializes KeyAgreement and returns byte array
*/
@TestTargets({
@TestTargetNew(
level = TestLevel.PARTIAL,
notes = "Checks functionality.",
method = "init",
args = {java.security.Key.class, java.security.spec.AlgorithmParameterSpec.class}
),
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Checks functionality.",
method = "init",
args = {java.security.Key.class, java.security.spec.AlgorithmParameterSpec.class, java.security.SecureRandom.class}
),
@TestTargetNew(
level = TestLevel.PARTIAL,
notes = "Checks functionality.",
method = "generateSecret",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL,
notes = "Checks functionality.",
clazz = KeyAgreementSpi.class,
method = "engineInit",
args = {java.security.Key.class, SecureRandom.class}
),
@TestTargetNew(
level = TestLevel.PARTIAL,
notes = "Checks functionality.",
clazz = KeyAgreementSpi.class,
method = "engineInit",
args = {java.security.Key.class, java.security.spec.AlgorithmParameterSpec.class, java.security.SecureRandom.class}
),
@TestTargetNew(
level = TestLevel.PARTIAL,
notes = "Checks functionality.",
clazz = KeyAgreementSpi.class,
method = "engineGenerateSecret",
args = {}
)
})
public void testInit04() throws Exception,
InvalidAlgorithmParameterException {
if (!DEFSupported) {
fail(NotSupportMsg);
return;
}
createKeys();
KeyAgreement[] kAgs = createKAs();
DHParameterSpec dhPs = ((DHPrivateKey) privKey).getParams();
AlgorithmParameterSpec aps = new RSAKeyGenParameterSpec(10, new BigInteger("10"));
byte[] bbRes1;
byte[] bbRes2;
byte[] bbRes3;
SecureRandom randomNull = null;
SecureRandom random = new SecureRandom();
for (int i = 0; i < kAgs.length; i++) {
kAgs[i].init(privKey, dhPs);
kAgs[i].doPhase(publKey, true);
bbRes1 = kAgs[i].generateSecret();
kAgs[i].init(privKey, dhPs, random);
kAgs[i].doPhase(publKey, true);
bbRes2 = kAgs[i].generateSecret();
assertEquals("Incorrect byte array length", bbRes1.length,
bbRes2.length);
for (int j = 0; j < bbRes1.length; j++) {
assertEquals("Incorrect byte (index: ".concat(
Integer.toString(i)).concat(")"), bbRes1[j], bbRes2[j]);
}
kAgs[i].init(privKey, dhPs, randomNull);
kAgs[i].doPhase(publKey, true);
bbRes3 = kAgs[i].generateSecret();
assertEquals("Incorrect byte array length", bbRes1.length,
bbRes3.length);
for (int j = 0; j < bbRes1.length; j++) {
assertEquals("Incorrect byte (index: ".concat(
Integer.toString(i)).concat(")"), bbRes1[j], bbRes3[j]);
}
try {
kAgs[i].init(publKey, dhPs, random);
fail("InvalidKeyException expected");
} catch (InvalidKeyException e) {
//expected
}
try {
kAgs[i].init(privKey, aps, random);
fail("InvalidAlgorithmParameterException expected");
} catch (InvalidAlgorithmParameterException e) {
//expected
}
}
}
class Mock_KeyAgreement extends KeyAgreement {
protected Mock_KeyAgreement(KeyAgreementSpi arg0, Provider arg1, String arg2) {
super(arg0, arg1, arg2);
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "KeyAgreement",
args = {javax.crypto.KeyAgreementSpi.class, java.security.Provider.class, java.lang.String.class}
)
public void test_constructor() {
assertNotNull(new Mock_KeyAgreement(null, null, null));
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getAlgorithm",
args = {}
)
public void test_getAlgorithm() throws NoSuchAlgorithmException {
Mock_KeyAgreement mka = new Mock_KeyAgreement(null, null, null);
assertNull(mka.getAlgorithm());
KeyAgreement keyA;
for (int i = 0; i < validValues.length; i++) {
keyA = KeyAgreement.getInstance(validValues[i]);
assertEquals("Incorrect algorithm", keyA.getAlgorithm(),
validValues[i]);
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getProvider",
args = {}
)
public void test_getProvider() throws NoSuchAlgorithmException {
KeyAgreement keyA;
for (int i = 0; i < validValues.length; i++) {
keyA = KeyAgreement.getInstance(validValues[i]);
assertNotNull(keyA.getProvider());
}
}
@TestTargets({
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "generateSecret",
args = {byte[].class, int.class}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
clazz = KeyAgreementSpi.class,
method = "engineGenerateSecret",
args = {byte[].class, int.class}
)})
public void test_generateSecret$BI() throws Exception {
if (!DEFSupported) {
fail(NotSupportMsg);
return;
}
createKeys();
KeyAgreement[] kAgs = createKAs();
KeyAgreement ka = KeyAgreement.getInstance("DH");
byte[] bb1 = new byte[1];
try {
ka.generateSecret(bb1, 0);
fail("IllegalStateException expected");
} catch (IllegalStateException e) {
//expected
}
ka.init(privKey);
ka.doPhase(publKey, true);
try {
ka.generateSecret(bb1, 0);
fail("ShortBufferException expected");
} catch (ShortBufferException e) {
//expected
}
}
@TestTargets({
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "generateSecret",
args = {java.lang.String.class}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
clazz = KeyAgreementSpi.class,
method = "engineGenerateSecret",
args = {java.lang.String.class}
)})
public void test_generateSecretLjava_lang_String() throws Exception {
if (!DEFSupported) {
fail(NotSupportMsg);
return;
}
createKeys();
KeyAgreement[] kAgs = createKAs();
KeyAgreement ka = KeyAgreement.getInstance("DH");
byte[] bb1 = new byte[1];
try {
ka.generateSecret("dh");
fail("IllegalStateException expected");
} catch (IllegalStateException e) {
//expected
}
ka.init(privKey);
ka.doPhase(publKey, true);
try {
ka.generateSecret("Wrong alg name");
fail("NoSuchAlgorithmException expected");
} catch (NoSuchAlgorithmException e) {
//expected
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "init",
args = {java.security.Key.class, java.security.SecureRandom.class}
)
public void test_initLjava_security_KeyLjava_security_SecureRandom() throws Exception {
if (!DEFSupported) {
fail(NotSupportMsg);
return;
}
createKeys();
KeyAgreement[] kAgs = createKAs();
KeyAgreement ka = KeyAgreement.getInstance("DH");
ka.init(privKey, new SecureRandom());
try {
ka.init(publKey, new SecureRandom());
fail("InvalidKeyException expected");
} catch (InvalidKeyException e) {
//expected
}
}
}