/** * Creates the DSA enum value. */ private KeyPairType(){ alg = name(); specName = alg; modulusSize = 128; spec = null; }
/** * Generates a public/private key pair formatted for the algorithm specified * and stores the keys in a KeyPair. Can not handle DSA keys. * @param type The algorithm format that the key pair should be generated for. * @return Returns the generated key pair */ public static KeyPair genKeyPair(KeyPairType type) { if(type.equals(KeyPairType.DSA)){ throw new UnsupportedTypeException(type); } try { KeyPairGenerator kg; if (isJava7()) { kg = KeyPairGenerator.getInstance(type.alg, bcProvider); } else { kg = KeyPairGenerator.getInstance(type.alg); } kg.initialize(type.spec); return kg.generateKeyPair(); } catch (NoSuchAlgorithmException e) { throw new Error(e); // Impossible? } catch (InvalidAlgorithmParameterException e) { throw new Error(e); // Impossible? } }
@Test public void testGetPublicKeyPair() { for(int i = 0; i < trueKeyPairTypes.length; i++){ KeyPairType type = trueKeyPairTypes[i]; KeyPair key = KeyGenUtils.getPublicKeyPair(type, truePublicKeys[i]); assertArrayEquals("KeyPairType: "+type.name(), key.getPublic().getEncoded(), truePublicKeys[i]); assertNull("KeyPairType: "+type.name(), key.getPrivate()); } }
/** * Converts a specified key for a specified algorithm to a PublicKey. Can not handle DSA keys. * @param type The type of key being passed in * @param pub Public key as byte[] * @return Public key as PublicKey */ public static PublicKey getPublicKey(KeyPairType type, byte[] pub){ if(type.equals(KeyPairType.DSA)){ throw new UnsupportedTypeException(type); } try { KeyFactory kf; if (isJava7()) { kf = KeyFactory.getInstance(type.alg, bcProvider); } else { kf = KeyFactory.getInstance(type.alg); } X509EncodedKeySpec xks = new X509EncodedKeySpec(pub); return kf.generatePublic(xks); } catch (NoSuchAlgorithmException e) { throw new Error(e); // Impossible? } catch (InvalidKeySpecException e) { throw new IllegalArgumentException(e); // Indicates passed in key is bogus } }
@Test public void testGenKeyPairPublicKeyLength() { for(int i = 0; i < trueKeyPairTypes.length; i++){ KeyPairType type = trueKeyPairTypes[i]; byte[] publicKey = KeyGenUtils.genKeyPair(type).getPublic().getEncoded(); assertEquals("KeyPairType: "+type.name(), truePublicKeys[i].length, publicKey.length); } }
if(type.equals(KeyPairType.DSA)){ throw new UnsupportedTypeException(type);
@Test public void testGetKeyPairPublicKeyPrivateKeySamePublic() { for(int i = 0; i < trueKeyPairTypes.length; i++){ KeyPair pair = KeyGenUtils.getKeyPair(publicKeys[i], privateKeys[i]); assertEquals("KeyPairType: "+trueKeyPairTypes[i].name(), pair.getPublic(), publicKeys[i]); } }
@Test public void testGetPublicKey() { for(int i = 0; i < trueKeyPairTypes.length; i++){ KeyPairType type = trueKeyPairTypes[i]; PublicKey key = KeyGenUtils.getPublicKey(type, truePublicKeys[i]); assertArrayEquals("KeyPairType: "+type.name(), key.getEncoded(), truePublicKeys[i]); } }
@Test public void testGetKeyPairPublicKeyPrivateKeySamePrivate() { for(int i = 0; i < trueKeyPairTypes.length; i++){ KeyPair pair = KeyGenUtils.getKeyPair(publicKeys[i], privateKeys[i]); assertEquals("KeyPairType: "+trueKeyPairTypes[i].name(), pair.getPrivate(), privateKeys[i]); } }
@Test public void testGenKeyPair() { for(KeyPairType type: trueKeyPairTypes){ assertNotNull("KeyPairType: "+type.name(), KeyGenUtils.genKeyPair(type)); } }
@Test public void testGetKeyPairPublicKeyPrivateKey() { for(int i = 0; i < trueKeyPairTypes.length; i++){ assertNotNull("KeyPairType: "+trueKeyPairTypes[i].name(), KeyGenUtils.getKeyPair(publicKeys[i], privateKeys[i])); } }
@Test public void testGetKeyPairKeyPairTypeByteArrayByteArray() { for(int i = 0; i < trueKeyPairTypes.length; i++){ KeyPairType type = trueKeyPairTypes[i]; assertNotNull("KeyPairType: "+type.name(), KeyGenUtils.getKeyPair(type, truePublicKeys[i], truePrivateKeys[i])); } }
@Test public void testGetPublicKeyPairNotNull() { for(int i = 0; i < trueKeyPairTypes.length; i++){ KeyPairType type = trueKeyPairTypes[i]; assertNotNull("KeyPairType: "+type.name(), KeyGenUtils.getPublicKey(type, truePublicKeys[i])); } }