diff options
author | Ron Yorston <rmy@pobox.com> | 2021-09-02 13:10:33 +0100 |
---|---|---|
committer | Ron Yorston <rmy@pobox.com> | 2021-09-02 13:10:33 +0100 |
commit | 39ae0a5dcb115272eb97417ebb43d12d68d1271a (patch) | |
tree | 3f152e80926b68b1238359c18a1cf4cff594eee2 | |
parent | 0243664edec5a6902063865d6cad3ed828b9b194 (diff) | |
download | busybox-w32-39ae0a5dcb115272eb97417ebb43d12d68d1271a.tar.gz busybox-w32-39ae0a5dcb115272eb97417ebb43d12d68d1271a.tar.bz2 busybox-w32-39ae0a5dcb115272eb97417ebb43d12d68d1271a.zip |
win32: fix entropy collection for isaac
The condition to detect the end of the environment string was wrong.
Don't bother calculating the MD5SUM of the environment, just XOR
the bytes into the data.
This reduces bloat by 320 bytes but only in the non-default case.
-rw-r--r-- | win32/isaac.c | 30 |
1 files changed, 10 insertions, 20 deletions
diff --git a/win32/isaac.c b/win32/isaac.c index f419a3f2e..6b174b69e 100644 --- a/win32/isaac.c +++ b/win32/isaac.c | |||
@@ -118,7 +118,7 @@ static void randinit(isaac_t *t, int flag) | |||
118 | fn(&dt); \ | 118 | fn(&dt); \ |
119 | u = (uint32_t *)&dt; \ | 119 | u = (uint32_t *)&dt; \ |
120 | for (j=0; j<sizeof(dt)/sizeof(uint32_t); ++j) { \ | 120 | for (j=0; j<sizeof(dt)/sizeof(uint32_t); ++j) { \ |
121 | t->randrsl[i++] = *u++; \ | 121 | t->randrsl[i++ % 256] = *u++; \ |
122 | } | 122 | } |
123 | 123 | ||
124 | /* | 124 | /* |
@@ -128,15 +128,14 @@ static void randinit(isaac_t *t, int flag) | |||
128 | */ | 128 | */ |
129 | static void get_entropy(isaac_t *t) | 129 | static void get_entropy(isaac_t *t) |
130 | { | 130 | { |
131 | int i, j, len; | 131 | int i, j; |
132 | FILETIME tm; | 132 | FILETIME tm; |
133 | MEMORYSTATUS ms; | 133 | MEMORYSTATUS ms; |
134 | SYSTEM_INFO si; | 134 | SYSTEM_INFO si; |
135 | LARGE_INTEGER pc; | 135 | LARGE_INTEGER pc; |
136 | uint32_t *u; | 136 | uint32_t *u; |
137 | char *env, *s; | 137 | char *env, *s; |
138 | md5_ctx_t ctx; | 138 | unsigned char *p; |
139 | unsigned char buf[16]; | ||
140 | 139 | ||
141 | i = 0; | 140 | i = 0; |
142 | t->randrsl[i++] = (uint32_t)GetProcessId(GetCurrentProcess()); | 141 | t->randrsl[i++] = (uint32_t)GetProcessId(GetCurrentProcess()); |
@@ -150,27 +149,18 @@ static void get_entropy(isaac_t *t) | |||
150 | 149 | ||
151 | env = GetEnvironmentStringsA(); | 150 | env = GetEnvironmentStringsA(); |
152 | 151 | ||
153 | /* get length of environment: it ends with two nuls */ | 152 | /* environment ends with two nuls */ |
154 | for (s=env,len=0; *s && *(s+1); ++s,++len) | 153 | p = (unsigned char *)t->randrsl; |
155 | ; | 154 | i *= sizeof(uint32_t); |
156 | 155 | for (s=env; *s || *(s+1); ++s) | |
157 | md5_begin(&ctx); | 156 | p[i++ % (256 * sizeof(uint32_t))] ^= *s; |
158 | md5_hash(&ctx, env, len); | ||
159 | md5_end(&ctx, buf); | ||
160 | 157 | ||
161 | FreeEnvironmentStringsA(env); | 158 | FreeEnvironmentStringsA(env); |
162 | 159 | ||
163 | u = (uint32_t *)buf; | ||
164 | for (j=0; j<sizeof(buf)/sizeof(uint32_t); ++j) { | ||
165 | t->randrsl[i++] = *u++; | ||
166 | } | ||
167 | |||
168 | #if 0 | 160 | #if 0 |
169 | { | 161 | { |
170 | unsigned char *p = (unsigned char *)t->randrsl; | 162 | for (j=0; j<256; ++j) { |
171 | 163 | fprintf(stderr, "%02x", p[j]); | |
172 | for (j=0; j<i*sizeof(uint32_t); ++j) { | ||
173 | fprintf(stderr, "%02x", *p++); | ||
174 | if ((j&31) == 31) { | 164 | if ((j&31) == 31) { |
175 | fprintf(stderr, "\n"); | 165 | fprintf(stderr, "\n"); |
176 | } | 166 | } |