It's more legible, and the code is 16 bytes smaller (i386).

Signed-off-by: George Spelvin <li...@horizon.com>
---
 crypto/ansi_cprng.c | 91 +++++++++++++++++++++--------------------------------
 1 file changed, 35 insertions(+), 56 deletions(-)

diff --git a/crypto/ansi_cprng.c b/crypto/ansi_cprng.c
index b63b5094..ce315bf7 100644
--- a/crypto/ansi_cprng.c
+++ b/crypto/ansi_cprng.c
@@ -100,69 +100,48 @@ static int _get_more_prng_bytes(struct prng_context *ctx, 
int cont_test)
        hexdump("Input V: ", ctx->V, DEFAULT_BLK_SZ);
 
        /*
-        * This algorithm is a 3 stage state machine
+        * Start by encrypting the counter value
+        * This gives us an intermediate value I
         */
-       for (i = 0; i < 3; i++) {
+       memcpy(tmp, ctx->DT, DEFAULT_BLK_SZ);
+       output = ctx->I;
+       hexdump("tmp stage 0: ", tmp, DEFAULT_BLK_SZ);
+       crypto_cipher_encrypt_one(ctx->tfm, output, tmp);
 
-               switch (i) {
-               case 0:
-                       /*
-                        * Start by encrypting the counter value
-                        * This gives us an intermediate value I
-                        */
-                       memcpy(tmp, ctx->DT, DEFAULT_BLK_SZ);
-                       output = ctx->I;
-                       hexdump("tmp stage 0: ", tmp, DEFAULT_BLK_SZ);
-                       break;
-               case 1:
-
-                       /*
-                        * Next xor I with our secret vector V
-                        * encrypt that result to obtain our
-                        * pseudo random data which we output
-                        */
-                       xor_vectors(ctx->I, ctx->V, tmp, DEFAULT_BLK_SZ);
-                       hexdump("tmp stage 1: ", tmp, DEFAULT_BLK_SZ);
-                       output = ctx->rand_data;
-                       break;
-               case 2:
-                       /*
-                        * First check that we didn't produce the same
-                        * random data that we did last time around through this
-                        */
-                       if (!memcmp(ctx->rand_data, ctx->last_rand_data,
-                                       DEFAULT_BLK_SZ)) {
-                               if (cont_test) {
-                                       panic("cprng %p Failed repetition 
check!\n",
-                                               ctx);
-                               }
-
-                               printk(KERN_ERR
-                                       "ctx %p Failed repetition check!\n",
-                                       ctx);
-
-                               ctx->flags |= PRNG_NEED_RESET;
-                               return -EINVAL;
-                       }
-                       memcpy(ctx->last_rand_data, ctx->rand_data,
-                               DEFAULT_BLK_SZ);
+       /*
+        * Next xor I with our secret vector V
+        * encrypt that result to obtain our
+        * pseudo random data which we output
+        */
+       xor_vectors(ctx->I, ctx->V, tmp, DEFAULT_BLK_SZ);
+       hexdump("tmp stage 1: ", tmp, DEFAULT_BLK_SZ);
+       output = ctx->rand_data;
+       crypto_cipher_encrypt_one(ctx->tfm, output, tmp);
 
-                       /*
-                        * Lastly xor the random data with I
-                        * and encrypt that to obtain a new secret vector V
-                        */
-                       xor_vectors(ctx->rand_data, ctx->I, tmp,
-                               DEFAULT_BLK_SZ);
-                       output = ctx->V;
-                       hexdump("tmp stage 2: ", tmp, DEFAULT_BLK_SZ);
-                       break;
+       /*
+        * First check that we didn't produce the same
+        * random data that we did last time around through this
+        */
+       if (!memcmp(ctx->rand_data, ctx->last_rand_data, DEFAULT_BLK_SZ)) {
+               if (cont_test) {
+                       panic("cprng %p Failed repetition check!\n", ctx);
                }
 
+               printk(KERN_ERR "ctx %p Failed repetition check!\n", ctx);
 
-               /* do the encryption */
-               crypto_cipher_encrypt_one(ctx->tfm, output, tmp);
-
+               ctx->flags |= PRNG_NEED_RESET;
+               return -EINVAL;
        }
+       memcpy(ctx->last_rand_data, ctx->rand_data, DEFAULT_BLK_SZ);
+
+       /*
+        * Lastly xor the random data with I
+        * and encrypt that to obtain a new secret vector V
+        */
+       xor_vectors(ctx->rand_data, ctx->I, tmp, DEFAULT_BLK_SZ);
+       output = ctx->V;
+       hexdump("tmp stage 2: ", tmp, DEFAULT_BLK_SZ);
+       crypto_cipher_encrypt_one(ctx->tfm, output, tmp);
 
        /*
         * Now update our DT value
-- 
2.1.3

--
To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to