aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephan Mueller <smueller@chronox.de>2015-03-01 14:40:17 -0500
committerHerbert Xu <herbert@gondor.apana.org.au>2015-03-04 04:13:29 -0500
commit37821da088d090d8e152f3f8cc072948fa544e5a (patch)
tree68a2ec28c6f2ebca89767609bb70af7612c7f430
parent04bcbfcf7e28ba502383a8e19d99960ab8e347c8 (diff)
crypto: drbg - remove superflowous memsets
The DRBG code contains memset(0) calls to initialize a varaible that are not necessary as the variable is always overwritten by the processing. This patch increases the CTR and Hash DRBGs by about 5%. Signed-off-by: Stephan Mueller <smueller@chronox.de> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
-rw-r--r--crypto/drbg.c18
1 files changed, 0 insertions, 18 deletions
diff --git a/crypto/drbg.c b/crypto/drbg.c
index c14274ac8d61..56c1d7ec3d9e 100644
--- a/crypto/drbg.c
+++ b/crypto/drbg.c
@@ -308,9 +308,6 @@ static int drbg_ctr_bcc(struct drbg_state *drbg,
308 308
309 drbg_string_fill(&data, out, drbg_blocklen(drbg)); 309 drbg_string_fill(&data, out, drbg_blocklen(drbg));
310 310
311 /* 10.4.3 step 1 */
312 memset(out, 0, drbg_blocklen(drbg));
313
314 /* 10.4.3 step 2 / 4 */ 311 /* 10.4.3 step 2 / 4 */
315 list_for_each_entry(curr, in, list) { 312 list_for_each_entry(curr, in, list) {
316 const unsigned char *pos = curr->buf; 313 const unsigned char *pos = curr->buf;
@@ -406,7 +403,6 @@ static int drbg_ctr_df(struct drbg_state *drbg,
406 403
407 memset(pad, 0, drbg_blocklen(drbg)); 404 memset(pad, 0, drbg_blocklen(drbg));
408 memset(iv, 0, drbg_blocklen(drbg)); 405 memset(iv, 0, drbg_blocklen(drbg));
409 memset(temp, 0, drbg_statelen(drbg));
410 406
411 /* 10.4.2 step 1 is implicit as we work byte-wise */ 407 /* 10.4.2 step 1 is implicit as we work byte-wise */
412 408
@@ -523,7 +519,6 @@ static int drbg_ctr_update(struct drbg_state *drbg, struct list_head *seed,
523 unsigned int len = 0; 519 unsigned int len = 0;
524 struct drbg_string cipherin; 520 struct drbg_string cipherin;
525 521
526 memset(temp, 0, drbg_statelen(drbg) + drbg_blocklen(drbg));
527 if (3 > reseed) 522 if (3 > reseed)
528 memset(df_data, 0, drbg_statelen(drbg)); 523 memset(df_data, 0, drbg_statelen(drbg));
529 524
@@ -585,8 +580,6 @@ static int drbg_ctr_generate(struct drbg_state *drbg,
585 int ret = 0; 580 int ret = 0;
586 struct drbg_string data; 581 struct drbg_string data;
587 582
588 memset(drbg->scratchpad, 0, drbg_blocklen(drbg));
589
590 /* 10.2.1.5.2 step 2 */ 583 /* 10.2.1.5.2 step 2 */
591 if (addtl && !list_empty(addtl)) { 584 if (addtl && !list_empty(addtl)) {
592 ret = drbg_ctr_update(drbg, addtl, 2); 585 ret = drbg_ctr_update(drbg, addtl, 2);
@@ -761,7 +754,6 @@ static struct drbg_state_ops drbg_hmac_ops = {
761 .generate = drbg_hmac_generate, 754 .generate = drbg_hmac_generate,
762 .crypto_init = drbg_init_hash_kernel, 755 .crypto_init = drbg_init_hash_kernel,
763 .crypto_fini = drbg_fini_hash_kernel, 756 .crypto_fini = drbg_fini_hash_kernel,
764
765}; 757};
766#endif /* CONFIG_CRYPTO_DRBG_HMAC */ 758#endif /* CONFIG_CRYPTO_DRBG_HMAC */
767 759
@@ -838,8 +830,6 @@ static int drbg_hash_df(struct drbg_state *drbg,
838 unsigned char *tmp = drbg->scratchpad + drbg_statelen(drbg); 830 unsigned char *tmp = drbg->scratchpad + drbg_statelen(drbg);
839 struct drbg_string data; 831 struct drbg_string data;
840 832
841 memset(tmp, 0, drbg_blocklen(drbg));
842
843 /* 10.4.1 step 3 */ 833 /* 10.4.1 step 3 */
844 input[0] = 1; 834 input[0] = 1;
845 drbg_cpu_to_be32((outlen * 8), &input[1]); 835 drbg_cpu_to_be32((outlen * 8), &input[1]);
@@ -879,7 +869,6 @@ static int drbg_hash_update(struct drbg_state *drbg, struct list_head *seed,
879 unsigned char *V = drbg->scratchpad; 869 unsigned char *V = drbg->scratchpad;
880 unsigned char prefix = DRBG_PREFIX1; 870 unsigned char prefix = DRBG_PREFIX1;
881 871
882 memset(drbg->scratchpad, 0, drbg_statelen(drbg));
883 if (!seed) 872 if (!seed)
884 return -EINVAL; 873 return -EINVAL;
885 874
@@ -921,9 +910,6 @@ static int drbg_hash_process_addtl(struct drbg_state *drbg,
921 LIST_HEAD(datalist); 910 LIST_HEAD(datalist);
922 unsigned char prefix = DRBG_PREFIX2; 911 unsigned char prefix = DRBG_PREFIX2;
923 912
924 /* this is value w as per documentation */
925 memset(drbg->scratchpad, 0, drbg_blocklen(drbg));
926
927 /* 10.1.1.4 step 2 */ 913 /* 10.1.1.4 step 2 */
928 if (!addtl || list_empty(addtl)) 914 if (!addtl || list_empty(addtl))
929 return 0; 915 return 0;
@@ -959,9 +945,6 @@ static int drbg_hash_hashgen(struct drbg_state *drbg,
959 struct drbg_string data; 945 struct drbg_string data;
960 LIST_HEAD(datalist); 946 LIST_HEAD(datalist);
961 947
962 memset(src, 0, drbg_statelen(drbg));
963 memset(dst, 0, drbg_blocklen(drbg));
964
965 /* 10.1.1.4 step hashgen 2 */ 948 /* 10.1.1.4 step hashgen 2 */
966 memcpy(src, drbg->V, drbg_statelen(drbg)); 949 memcpy(src, drbg->V, drbg_statelen(drbg));
967 950
@@ -1018,7 +1001,6 @@ static int drbg_hash_generate(struct drbg_state *drbg,
1018 len = drbg_hash_hashgen(drbg, buf, buflen); 1001 len = drbg_hash_hashgen(drbg, buf, buflen);
1019 1002
1020 /* this is the value H as documented in 10.1.1.4 */ 1003 /* this is the value H as documented in 10.1.1.4 */
1021 memset(drbg->scratchpad, 0, drbg_blocklen(drbg));
1022 /* 10.1.1.4 step 4 */ 1004 /* 10.1.1.4 step 4 */
1023 drbg_string_fill(&data1, &prefix, 1); 1005 drbg_string_fill(&data1, &prefix, 1);
1024 list_add_tail(&data1.list, &datalist); 1006 list_add_tail(&data1.list, &datalist);