Author: erodriguez
Date: Tue Nov  9 04:36:43 2004
New Revision: 57024

Removed:
   
incubator/directory/kerberos/trunk/kerberos/src/java/org/apache/kerberos/crypto/Confounder.java
Modified:
   
incubator/directory/kerberos/trunk/kerberos/src/java/org/apache/kerberos/crypto/CryptoService.java
Log:
Rolled functions of Confounder into CryptoService.

Modified: 
incubator/directory/kerberos/trunk/kerberos/src/java/org/apache/kerberos/crypto/CryptoService.java
==============================================================================
--- 
incubator/directory/kerberos/trunk/kerberos/src/java/org/apache/kerberos/crypto/CryptoService.java
  (original)
+++ 
incubator/directory/kerberos/trunk/kerberos/src/java/org/apache/kerberos/crypto/CryptoService.java
  Tue Nov  9 04:36:43 2004
@@ -22,12 +22,17 @@
 import org.apache.kerberos.messages.value.EncryptedData;
 import org.apache.kerberos.messages.value.EncryptionKey;
 
+import javax.security.auth.kerberos.KerberosKey;
+import javax.security.auth.kerberos.KerberosPrincipal;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
+import java.security.SecureRandom;
 
 public class CryptoService {
-       
+
+    private static final SecureRandom random = new SecureRandom();
+
        private static final Map _encryptionEngines = new HashMap();
        private static final Map _checksumEngines   = new HashMap();
        
@@ -59,7 +64,7 @@
        }
 
        public EncryptionKey getNewSessionKey() {
-               byte[] confounder = Confounder.bytes(8);
+               byte[] confounder = getRandomBytes(8);
                DesStringToKey subSessionKey = new DesStringToKey(new 
String(confounder));
                return new EncryptionKey(EncryptionType.DES_CBC_MD5, 
subSessionKey.getKey());
        }
@@ -70,7 +75,18 @@
                byte[] plaintext = long2octet(date.getTime());
                return encryptionEngine.encrypt(plaintext, key.getKeyValue());
        }
-       
+
+    public static KerberosKey getRandomKeyFor(KerberosPrincipal principal)
+    {
+        final int DES_KEY_TYPE = 3;
+               int keyVersion = 1;
+
+               byte[] randomBytes = getRandomBytes( 8 );
+               DesStringToKey randomKey = new DesStringToKey( new String( 
randomBytes ) );
+
+               return new KerberosKey( principal, randomKey.getKey(), 
DES_KEY_TYPE, keyVersion );
+    }
+    
        public EncryptionKey getEncryptionKey(String password, String realm, 
String username) {
                DesStringToKey key = new DesStringToKey(password, realm, 
username);
                byte[] keyBytes = key.getKey();
@@ -93,7 +109,7 @@
                
                EncryptionEngine type = getInstance(key.getKeyType());
                
-               byte[] conFounder      = 
Confounder.bytes(type.confounderSize());
+               byte[] conFounder      = getRandomBytes(type.confounderSize());
                byte[] zeroedChecksum  = new byte[type.checksumSize()];
                byte[] dataBytes       = concatenateBytes(conFounder, 
concatenateBytes(zeroedChecksum,
                                padString(plainText)));
@@ -105,6 +121,13 @@
                
                return new EncryptedData(type.encryptionType(), 
key.getKeyVersion(), encryptedData);
        }
+
+    private static synchronized byte[] getRandomBytes(int size)
+    {
+        byte[] bytes = new byte[size];
+        random.nextBytes(bytes);
+        return bytes;
+    }
 
     private static byte[] long2octet(long input) {
                byte[] output = new byte[8];

Reply via email to