Browse Source

lib/sha1: use ul_/UL_prefix for symbols

Unfortunately, the symbols are visible in statically compiled libuuid
and the names are too generic.

Addresses: https://github.com/karelzak/util-linux/issues/548
Signed-off-by: Karel Zak <kzak@redhat.com>
pull/553/head
Karel Zak 5 years ago
parent
commit
3bd55be742
  1. 49
      include/sha1.h
  2. 34
      lib/sha1.c
  3. 12
      libuuid/src/gen_uuid.c

49
include/sha1.h

@ -1,5 +1,5 @@
#ifndef SHA1_H
#define SHA1_H
#ifndef UTIL_LINUX_SHA1_H
#define UTIL_LINUX_SHA1_H
/*
SHA-1 in C
@ -9,38 +9,19 @@
#include "stdint.h"
#define SHA1LENGTH 20
#define UL_SHA1LENGTH 20
typedef struct
{
uint32_t state[5];
uint32_t count[2];
unsigned char buffer[64];
} SHA1_CTX;
void SHA1Transform(
uint32_t state[5],
const unsigned char buffer[64]
);
void SHA1Init(
SHA1_CTX * context
);
void SHA1Update(
SHA1_CTX * context,
const unsigned char *data,
uint32_t len
);
void SHA1Final(
unsigned char digest[SHA1LENGTH],
SHA1_CTX * context
);
void SHA1(
char *hash_out,
const char *str,
unsigned len);
#endif /* SHA1_H */
uint32_t state[5];
uint32_t count[2];
unsigned char buffer[64];
} UL_SHA1_CTX;
void ul_SHA1Transform(uint32_t state[5], const unsigned char buffer[64]);
void ul_SHA1Init(UL_SHA1_CTX *context);
void ul_SHA1Update(UL_SHA1_CTX *context, const unsigned char *data, uint32_t len);
void ul_SHA1Final(unsigned char digest[UL_SHA1LENGTH], UL_SHA1_CTX *context);
void ul_SHA1(char *hash_out, const char *str, unsigned len);
#endif /* UTIL_LINUX_SHA1_H */

34
lib/sha1.c

@ -51,7 +51,7 @@ A million repetitions of "a"
/* Hash a single 512-bit block. This is the core of the algorithm. */
void SHA1Transform(
void ul_SHA1Transform(
uint32_t state[5],
const unsigned char buffer[64]
)
@ -179,8 +179,8 @@ void SHA1Transform(
/* SHA1Init - Initialize new context */
void SHA1Init(
SHA1_CTX * context
void ul_SHA1Init(
UL_SHA1_CTX * context
)
{
/* SHA1 initialization constants */
@ -195,8 +195,8 @@ void SHA1Init(
/* Run your data through this. */
void SHA1Update(
SHA1_CTX * context,
void ul_SHA1Update(
UL_SHA1_CTX * context,
const unsigned char *data,
uint32_t len
)
@ -213,10 +213,10 @@ void SHA1Update(
if ((j + len) > 63)
{
memcpy(&context->buffer[j], data, (i = 64 - j));
SHA1Transform(context->state, context->buffer);
ul_SHA1Transform(context->state, context->buffer);
for (; i + 63 < len; i += 64)
{
SHA1Transform(context->state, &data[i]);
ul_SHA1Transform(context->state, &data[i]);
}
j = 0;
}
@ -228,9 +228,9 @@ void SHA1Update(
/* Add padding and return the message digest. */
void SHA1Final(
void ul_SHA1Final(
unsigned char digest[20],
SHA1_CTX * context
UL_SHA1_CTX * context
)
{
unsigned i;
@ -262,13 +262,13 @@ void SHA1Final(
}
#endif
c = 0200;
SHA1Update(context, &c, 1);
ul_SHA1Update(context, &c, 1);
while ((context->count[0] & 504) != 448)
{
c = 0000;
SHA1Update(context, &c, 1);
ul_SHA1Update(context, &c, 1);
}
SHA1Update(context, finalcount, 8); /* Should cause a SHA1Transform() */
ul_SHA1Update(context, finalcount, 8); /* Should cause a SHA1Transform() */
for (i = 0; i < 20; i++)
{
digest[i] = (unsigned char)
@ -279,18 +279,18 @@ void SHA1Final(
memset(&finalcount, '\0', sizeof(finalcount));
}
void SHA1(
void ul_SHA1(
char *hash_out,
const char *str,
unsigned len)
{
SHA1_CTX ctx;
UL_SHA1_CTX ctx;
unsigned int ii;
SHA1Init(&ctx);
ul_SHA1Init(&ctx);
for (ii=0; ii<len; ii+=1)
SHA1Update(&ctx, (const unsigned char*)str + ii, 1);
SHA1Final((unsigned char *)hash_out, &ctx);
ul_SHA1Update(&ctx, (const unsigned char*)str + ii, 1);
ul_SHA1Final((unsigned char *)hash_out, &ctx);
hash_out[20] = '\0';
}

12
libuuid/src/gen_uuid.c

@ -589,15 +589,15 @@ void uuid_generate_md5(uuid_t out, const uuid_t ns, const char *name, size_t len
*/
void uuid_generate_sha1(uuid_t out, const uuid_t ns, const char *name, size_t len)
{
SHA1_CTX ctx;
char hash[SHA1LENGTH];
UL_SHA1_CTX ctx;
char hash[UL_SHA1LENGTH];
SHA1Init(&ctx);
ul_SHA1Init(&ctx);
/* hash concatenation of well-known UUID with name */
SHA1Update(&ctx, ns, sizeof(uuid_t));
SHA1Update(&ctx, (const unsigned char *)name, len);
ul_SHA1Update(&ctx, ns, sizeof(uuid_t));
ul_SHA1Update(&ctx, (const unsigned char *)name, len);
SHA1Final((unsigned char *)hash, &ctx);
ul_SHA1Final((unsigned char *)hash, &ctx);
memcpy(out, hash, sizeof(uuid_t));

Loading…
Cancel
Save