[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