[Nym3-commit] r16 - trunk/crypto

nym3-devel@lists.noreply.org nym3-devel@lists.noreply.org
Sun, 02 May 2004 23:55:02 +0200


Author: weasel
Date: 2004-05-02 23:54:59 +0200 (Sun, 02 May 2004)
New Revision: 16

Modified:
   trunk/crypto/crypto.ml
   trunk/crypto/test_weasel.ml
Log:
Make prng a bit faster.

Modified: trunk/crypto/crypto.ml
===================================================================
--- trunk/crypto/crypto.ml	2004-05-02 21:18:32 UTC (rev 15)
+++ trunk/crypto/crypto.ml	2004-05-02 21:54:59 UTC (rev 16)
@@ -112,27 +112,28 @@
  *)
 let prng n k =
   assert ((String.length k) = 16);
-  let result = ref ("") in
+  let result = String.make n (char_of_int 0) in
   let block = String.make 16 (char_of_int 0) in
 
-  let n = ref n
+  let j = ref 0
   and p = ref 0 in
-  while (!n > 0) do
+  while (!j < n) do
     String.set block (String.length block - 1) (char_of_int (!p            mod 256 ));
     String.set block (String.length block - 2) (char_of_int (!p / 256      mod 256 ));
     String.set block (String.length block - 3) (char_of_int (!p / 65536    mod 256 ));
     String.set block (String.length block - 4) (char_of_int (!p / 16777216 mod 256 ));
     incr p;
 
+    let i = ref 0 in
     let enc = aes k Encrypt in
     let encrypted = transform_string enc block in
-      if (!n >= 16) then
-	result := !result ^ encrypted
-      else
-	result := !result ^ (String.sub encrypted 0 !n);
-    n := !n - 16
+    while ((!j < n) && (!i < 16)) do
+      String.set result !j encrypted.[!i];
+      incr j;
+      incr i
+    done
   done;
-  !result
+  result
 
 (**
  * Encrypt a message <code>m</code> using AES counter mode with key <code>k</code>.

Modified: trunk/crypto/test_weasel.ml
===================================================================
--- trunk/crypto/test_weasel.ml	2004-05-02 21:18:32 UTC (rev 15)
+++ trunk/crypto/test_weasel.ml	2004-05-02 21:54:59 UTC (rev 16)
@@ -41,10 +41,15 @@
 		"81 AE AE FB 58 E0 A2 FE 37 27 31 8E 5B C4 90 B9
 		86 99 95 78 C0 F6 BC AC 9A A6 16 DF BA 0B 4E 6C 0A 10 C5 8F 7B 67 54 19 D7 EA
 		8C 4A A7 0E C7 77 6B 25 51 68 88 1C 7C 4D EB 83 8C A0 3F 4A 85 32" in
-	let keystream0 = Crypto.prng 0x300 key in
+	let keystream3 = unhex
+		"AF 29 37 42 67 D0 98 20 BA 53 E0 B1 C3 E5 B2 AB
+		49 B3 A0 D2 CF 7C C7 C0 EE 0C 85 6D EA E5 5A 3E D4 27 40 AF CC 41 7B E3 5F CF
+		63 7A D1 0A 81 7E D6 5C 31 76 44 3F E0 26 EA E0 87 35 4B 3B DE D1" in
+	let keystream0 = Crypto.prng 0xF0040 key in
 
-	assert( (String.sub keystream0 0     0x40) = keystream1);
-	assert( (String.sub keystream0 0x2c0 0x40) = keystream2);
+	assert( (String.sub keystream0 0       0x40) = keystream1);
+	assert( (String.sub keystream0 0x2c0   0x40) = keystream2);
+	assert( (String.sub keystream0 0xF0000 0x40) = keystream3);
 	Printf.printf "."
 
 let testEncrypt =