You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by se...@apache.org on 2014/06/20 13:46:34 UTC

git commit: Update to OAuth2 CryptoUtils to get the authentication block correctly calculated if multi-part encryption is used

Repository: cxf
Updated Branches:
  refs/heads/master 667214435 -> 7d5f8b519


Update to OAuth2 CryptoUtils to get the authentication block correctly calculated if multi-part encryption is used


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/7d5f8b51
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/7d5f8b51
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/7d5f8b51

Branch: refs/heads/master
Commit: 7d5f8b519fd02633eb0d40b017a747b3ce7b0321
Parents: 6672144
Author: Sergey Beryozkin <sb...@talend.com>
Authored: Fri Jun 20 12:46:18 2014 +0100
Committer: Sergey Beryozkin <sb...@talend.com>
Committed: Fri Jun 20 12:46:18 2014 +0100

----------------------------------------------------------------------
 .../oauth2/utils/crypto/CryptoUtils.java        | 29 ++++++++++++++++----
 1 file changed, 23 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/7d5f8b51/rt/rs/security/oauth-parent/oauth2/src/main/java/org/apache/cxf/rs/security/oauth2/utils/crypto/CryptoUtils.java
----------------------------------------------------------------------
diff --git a/rt/rs/security/oauth-parent/oauth2/src/main/java/org/apache/cxf/rs/security/oauth2/utils/crypto/CryptoUtils.java b/rt/rs/security/oauth-parent/oauth2/src/main/java/org/apache/cxf/rs/security/oauth2/utils/crypto/CryptoUtils.java
index e46409c..1d59467 100644
--- a/rt/rs/security/oauth-parent/oauth2/src/main/java/org/apache/cxf/rs/security/oauth2/utils/crypto/CryptoUtils.java
+++ b/rt/rs/security/oauth-parent/oauth2/src/main/java/org/apache/cxf/rs/security/oauth2/utils/crypto/CryptoUtils.java
@@ -497,9 +497,17 @@ public final class CryptoUtils {
                                             String wrappedKeyAlgo,
                                             Key unwrapperKey,
                                             KeyProperties keyProps)  throws SecurityException {
+        return (SecretKey)unwrapKey(wrappedBytes, wrappedKeyAlgo, unwrapperKey, keyProps, Cipher.SECRET_KEY);    
+    }
+    
+    public static Key unwrapKey(byte[] wrappedBytes,
+                                            String wrappedKeyAlgo,
+                                            Key unwrapperKey,
+                                            KeyProperties keyProps,
+                                            int wrappedKeyType)  throws SecurityException {
         try {
             Cipher c = initCipher(unwrapperKey, keyProps, Cipher.UNWRAP_MODE);
-            return (SecretKey)c.unwrap(wrappedBytes, wrappedKeyAlgo, Cipher.SECRET_KEY);
+            return c.unwrap(wrappedBytes, wrappedKeyAlgo, wrappedKeyType);
         } catch (Exception ex) {
             throw new SecurityException(ex);
         }    
@@ -523,9 +531,12 @@ public final class CryptoUtils {
                 if (blockSize == -1) {
                     blockSize = secretKey instanceof PublicKey ? 117 : 128;
                 }
+                boolean updateRequired = keyProps != null && keyProps.getAdditionalData() != null;
                 int offset = 0;
                 for (; offset + blockSize < bytes.length; offset += blockSize) {
-                    result = addToResult(result, c.doFinal(bytes, offset, blockSize));
+                    byte[] next = !updateRequired ? c.doFinal(bytes, offset, blockSize) 
+                        : c.update(bytes, offset, blockSize);
+                    result = addToResult(result, next);
                 }
                 if (offset < bytes.length) {
                     result = addToResult(result, c.doFinal(bytes, offset, bytes.length - offset));
@@ -574,10 +585,16 @@ public final class CryptoUtils {
     }
     
     private static byte[] addToResult(byte[] prefix, byte[] suffix) {
-        byte[] result = new byte[prefix.length + suffix.length];
-        System.arraycopy(prefix, 0, result, 0, prefix.length);
-        System.arraycopy(suffix, 0, result, prefix.length, suffix.length);
-        return result;
+        if (suffix == null || suffix.length == 0) {
+            return prefix;    
+        } else if (prefix.length == 0) {
+            return suffix;
+        } else {
+            byte[] result = new byte[prefix.length + suffix.length];
+            System.arraycopy(prefix, 0, result, 0, prefix.length);
+            System.arraycopy(suffix, 0, result, prefix.length, suffix.length);
+            return result;
+        }
     }
     
     public static SecretKey decodeSecretKey(String encodedSecretKey) throws SecurityException {