[java-opensaml COMMIT] in /trunk: opensaml-security-api/src/main/java/org/opensaml/security/crypto/KeySupport.java op...
noreply at shibboleth.net
noreply at shibboleth.net
Sat Mar 15 00:28:56 EDT 2014
Author: putmanb
Date: Sat Mar 15 00:28:55 2014
New Revision: 3705
URL: http://svn.shibboleth.net/view/java-opensaml?rev=3705&view=rev
Log:
Update KeySupport.getLength(Key) to support DSA and EC keys.
Modified:
trunk/opensaml-security-api/src/main/java/org/opensaml/security/crypto/KeySupport.java
trunk/opensaml-security-api/src/test/java/org/opensaml/security/crypto/KeySupportTest.java
trunk/opensaml-xmlsec-impl/src/main/java/org/opensaml/xmlsec/impl/BasicSignatureSigningParametersResolver.java
Modified: trunk/opensaml-security-api/src/main/java/org/opensaml/security/crypto/KeySupport.java
URL: http://svn.shibboleth.net/view/java-opensaml/trunk/opensaml-security-api/src/main/java/org/opensaml/security/crypto/KeySupport.java?rev=3705&r1=3704&r2=3705&view=diff
==============================================================================
--- trunk/opensaml-security-api/src/main/java/org/opensaml/security/crypto/KeySupport.java (original)
+++ trunk/opensaml-security-api/src/main/java/org/opensaml/security/crypto/KeySupport.java Sat Mar 15 00:28:55 2014
@@ -30,9 +30,11 @@
import java.security.NoSuchProviderException;
import java.security.PrivateKey;
import java.security.PublicKey;
+import java.security.interfaces.DSAKey;
import java.security.interfaces.DSAParams;
import java.security.interfaces.DSAPrivateKey;
import java.security.interfaces.DSAPublicKey;
+import java.security.interfaces.ECKey;
import java.security.interfaces.ECPrivateKey;
import java.security.interfaces.ECPublicKey;
import java.security.interfaces.RSAKey;
@@ -82,12 +84,17 @@
*/
@Nullable public static Integer getKeyLength(@Nonnull final Key key) {
Logger log = getLogger();
- // TODO investigate techniques (and use cases) to determine length in other cases,
- // e.g. EC, DSA keys, and non-RAW format symmetric keys
+ log.debug("Attempting to determine length of Key with algorithm '{}' and encoding format '{}'",
+ key.getAlgorithm(), key.getFormat());
+ // TODO investigate if exists, and can/how to support, non-RAW format symmetric keys
if (key instanceof SecretKey && "RAW".equals(key.getFormat())) {
return key.getEncoded().length * 8;
} else if (key instanceof RSAKey) {
return ((RSAKey) key).getModulus().bitLength();
+ } else if (key instanceof DSAKey) {
+ return ((DSAKey) key).getParams().getP().bitLength();
+ } else if (key instanceof ECKey) {
+ return ((ECKey) key).getParams().getCurve().getField().getFieldSize();
}
log.debug("Unable to determine length in bits of specified Key instance");
return null;
Modified: trunk/opensaml-security-api/src/test/java/org/opensaml/security/crypto/KeySupportTest.java
URL: http://svn.shibboleth.net/view/java-opensaml/trunk/opensaml-security-api/src/test/java/org/opensaml/security/crypto/KeySupportTest.java?rev=3705&r1=3704&r2=3705&view=diff
==============================================================================
--- trunk/opensaml-security-api/src/test/java/org/opensaml/security/crypto/KeySupportTest.java (original)
+++ trunk/opensaml-security-api/src/test/java/org/opensaml/security/crypto/KeySupportTest.java Sat Mar 15 00:28:55 2014
@@ -152,6 +152,37 @@
// expected
}
}
+
+ @Test
+ public void testKeyLength() throws NoSuchAlgorithmException, NoSuchProviderException {
+ Assert.assertEquals(KeySupport.getKeyLength(KeySupport.generateKeyPair("RSA", 1024, null).getPublic()), new Integer(1024));
+ Assert.assertEquals(KeySupport.getKeyLength(KeySupport.generateKeyPair("RSA", 1024, null).getPrivate()), new Integer(1024));
+ Assert.assertEquals(KeySupport.getKeyLength(KeySupport.generateKeyPair("RSA", 2048, null).getPublic()), new Integer(2048));
+ Assert.assertEquals(KeySupport.getKeyLength(KeySupport.generateKeyPair("RSA", 2048, null).getPrivate()), new Integer(2048));
+ Assert.assertEquals(KeySupport.getKeyLength(KeySupport.generateKeyPair("RSA", 4096, null).getPublic()), new Integer(4096));
+ Assert.assertEquals(KeySupport.getKeyLength(KeySupport.generateKeyPair("RSA", 4096, null).getPrivate()), new Integer(4096));
+
+ Assert.assertEquals(KeySupport.getKeyLength(KeySupport.generateKeyPair("DSA", 512, null).getPublic()), new Integer(512));
+ Assert.assertEquals(KeySupport.getKeyLength(KeySupport.generateKeyPair("DSA", 512, null).getPrivate()), new Integer(512));
+ Assert.assertEquals(KeySupport.getKeyLength(KeySupport.generateKeyPair("DSA", 1024, null).getPublic()), new Integer(1024));
+ Assert.assertEquals(KeySupport.getKeyLength(KeySupport.generateKeyPair("DSA", 1024, null).getPrivate()), new Integer(1024));
+
+ Assert.assertEquals(KeySupport.getKeyLength(KeySupport.generateKeyPair("EC", 112, null).getPublic()), new Integer(112));
+ Assert.assertEquals(KeySupport.getKeyLength(KeySupport.generateKeyPair("EC", 112, null).getPrivate()), new Integer(112));
[... 32 lines stripped ...]
More information about the commits
mailing list