summaryrefslogtreecommitdiff
path: root/openbsd-compat/sha1.c
diff options
context:
space:
mode:
Diffstat (limited to 'openbsd-compat/sha1.c')
-rw-r--r--openbsd-compat/sha1.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/openbsd-compat/sha1.c b/openbsd-compat/sha1.c
index 4b5381f87..73f897485 100644
--- a/openbsd-compat/sha1.c
+++ b/openbsd-compat/sha1.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: sha1.c,v 1.23 2014/01/08 06:14:57 tedu Exp $ */ 1/* $OpenBSD: sha1.c,v 1.27 2019/06/07 22:56:36 dtucker Exp $ */
2 2
3/* 3/*
4 * SHA-1 in C 4 * SHA-1 in C
@@ -18,7 +18,7 @@
18 18
19#ifndef WITH_OPENSSL 19#ifndef WITH_OPENSSL
20 20
21#include <sys/param.h> 21#include <sys/types.h>
22#include <string.h> 22#include <string.h>
23 23
24#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits)))) 24#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
@@ -101,6 +101,7 @@ SHA1Transform(u_int32_t state[5], const u_int8_t buffer[SHA1_BLOCK_LENGTH])
101 /* Wipe variables */ 101 /* Wipe variables */
102 a = b = c = d = e = 0; 102 a = b = c = d = e = 0;
103} 103}
104DEF_WEAK(SHA1Transform);
104 105
105 106
106/* 107/*
@@ -118,6 +119,7 @@ SHA1Init(SHA1_CTX *context)
118 context->state[3] = 0x10325476; 119 context->state[3] = 0x10325476;
119 context->state[4] = 0xC3D2E1F0; 120 context->state[4] = 0xC3D2E1F0;
120} 121}
122DEF_WEAK(SHA1Init);
121 123
122 124
123/* 125/*
@@ -129,7 +131,7 @@ SHA1Update(SHA1_CTX *context, const u_int8_t *data, size_t len)
129 size_t i, j; 131 size_t i, j;
130 132
131 j = (size_t)((context->count >> 3) & 63); 133 j = (size_t)((context->count >> 3) & 63);
132 context->count += (len << 3); 134 context->count += ((u_int64_t)len << 3);
133 if ((j + len) > 63) { 135 if ((j + len) > 63) {
134 (void)memcpy(&context->buffer[j], data, (i = 64-j)); 136 (void)memcpy(&context->buffer[j], data, (i = 64-j));
135 SHA1Transform(context->state, context->buffer); 137 SHA1Transform(context->state, context->buffer);
@@ -141,6 +143,7 @@ SHA1Update(SHA1_CTX *context, const u_int8_t *data, size_t len)
141 } 143 }
142 (void)memcpy(&context->buffer[j], &data[i], len - i); 144 (void)memcpy(&context->buffer[j], &data[i], len - i);
143} 145}
146DEF_WEAK(SHA1Update);
144 147
145 148
146/* 149/*
@@ -161,6 +164,7 @@ SHA1Pad(SHA1_CTX *context)
161 SHA1Update(context, (u_int8_t *)"\0", 1); 164 SHA1Update(context, (u_int8_t *)"\0", 1);
162 SHA1Update(context, finalcount, 8); /* Should cause a SHA1Transform() */ 165 SHA1Update(context, finalcount, 8); /* Should cause a SHA1Transform() */
163} 166}
167DEF_WEAK(SHA1Pad);
164 168
165void 169void
166SHA1Final(u_int8_t digest[SHA1_DIGEST_LENGTH], SHA1_CTX *context) 170SHA1Final(u_int8_t digest[SHA1_DIGEST_LENGTH], SHA1_CTX *context)
@@ -172,6 +176,7 @@ SHA1Final(u_int8_t digest[SHA1_DIGEST_LENGTH], SHA1_CTX *context)
172 digest[i] = (u_int8_t) 176 digest[i] = (u_int8_t)
173 ((context->state[i>>2] >> ((3-(i & 3)) * 8) ) & 255); 177 ((context->state[i>>2] >> ((3-(i & 3)) * 8) ) & 255);
174 } 178 }
175 memset(context, 0, sizeof(*context)); 179 explicit_bzero(context, sizeof(*context));
176} 180}
181DEF_WEAK(SHA1Final);
177#endif /* !WITH_OPENSSL */ 182#endif /* !WITH_OPENSSL */