teamwork: Use emile SHA1 functions

Remove the SHA1 functions in the module in favour of the ones now present in
EFL
This commit is contained in:
Derek Foreman 2016-10-12 05:36:31 -05:00 committed by Derek Foreman
parent 6ba85cf864
commit d0b0f81fb7
6 changed files with 8 additions and 220 deletions

View File

@ -16,9 +16,7 @@ src_modules_teamwork_module_la_LDFLAGS = $(MOD_LDFLAGS)
src_modules_teamwork_module_la_SOURCES = src/modules/teamwork/e_mod_main.c \
src/modules/teamwork/e_mod_config.c \
src/modules/teamwork/e_mod_main.h \
src/modules/teamwork/e_mod_tw.c \
src/modules/teamwork/sha1.c \
src/modules/teamwork/sha1.h
src/modules/teamwork/e_mod_tw.c
if HAVE_WAYLAND
src_modules_teamwork_module_la_SOURCES += \

View File

@ -1,5 +1,4 @@
#include "e_mod_main.h"
#include "sha1.h"
EINTERN int _e_teamwork_log_dom = -1;
EINTERN Mod *tw_mod = NULL;
@ -30,23 +29,11 @@ _sha1_to_string(const unsigned char *hashout)
}
const char *
sha1_encode(const unsigned char *data, size_t len)
sha1_encode(const Eina_Binbuf *data)
{
SHA_CTX2 ctx;
unsigned char hashout[20];
unsigned char *buf;
if (EINA_UNLIKELY(len > 65000))
buf = malloc(len);
else
buf = alloca(len);
EINA_SAFETY_ON_NULL_RETURN_VAL(buf, NULL);
memcpy(buf, data, len);
SHA1_Init2(&ctx);
SHA1_Update2(&ctx, buf, len);
SHA1_Final2(hashout, &ctx);
if (EINA_UNLIKELY(len > 65000)) free(buf);
emile_binbuf_sha1(data, hashout);
return _sha1_to_string(hashout);
}

View File

@ -1,6 +1,9 @@
#ifndef E_MOD_MAIN_H
#define E_MOD_MAIN_H
/* We want emil_binbuf_sha1 which is beta API */
#define EFL_BETA_API_SUPPORT
#include "e.h"
/**
@ -45,7 +48,7 @@ extern Teamwork_Config *tw_config;
extern Mod *tw_mod;
extern int _e_teamwork_log_dom;
EINTERN const char *sha1_encode(const unsigned char *data, size_t len);
EINTERN const char *sha1_encode(const Eina_Binbuf *data);
EINTERN int e_tw_init(void);
EINTERN void e_tw_shutdown(void);

View File

@ -671,7 +671,7 @@ tw_media_add(const char *url, Eina_Binbuf *buf, unsigned long long timestamp, Ei
if (!media[video]) return -1;
if (!tw_config->allowed_media_age) return 0; //disk caching disabled
sha1 = sha1_encode(eina_binbuf_string_get(buf), eina_binbuf_length_get(buf));
sha1 = sha1_encode(buf);
DBG("Media: %s - %s", url, sha1);
list = eet_list(media[video], url, &lsize);

View File

@ -1,146 +0,0 @@
/*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is SHA 180-1 Reference Implementation (Compact version)
*
* The Initial Developer of the Original Code is Paul Kocher of
* Cryptography Research. Portions created by Paul Kocher are
* Copyright (C) 1995-9 by Cryptography Research, Inc. All
* Rights Reserved.
*
* Contributor(s):
*
* Paul Kocher
*
*/
#include "sha1.h"
static void shaHashBlock(SHA_CTX2 *ctx);
void
SHA1_Init2(SHA_CTX2 *ctx) {
int i;
ctx->lenW = 0;
ctx->sizeHi = ctx->sizeLo = 0;
/* Initialize H with the magic constants (see FIPS180 for constants)
*/
ctx->H[0] = 0x67452301;
ctx->H[1] = 0xefcdab89;
ctx->H[2] = 0x98badcfe;
ctx->H[3] = 0x10325476;
ctx->H[4] = 0xc3d2e1f0;
for (i = 0; i < 80; i++)
ctx->W[i] = 0;
}
void
SHA1_Update2(SHA_CTX2 *ctx,
void *_dataIn,
int len) {
unsigned char *dataIn = _dataIn;
int i;
/* Read the data into W and process blocks as they get full
*/
for (i = 0; i < len; i++) {
ctx->W[ctx->lenW / 4] <<= 8;
ctx->W[ctx->lenW / 4] |= (unsigned int)dataIn[i];
if ((++ctx->lenW) % 64 == 0)
{
shaHashBlock(ctx);
ctx->lenW = 0;
}
ctx->sizeLo += 8;
ctx->sizeHi += (ctx->sizeLo < 8);
}
}
void
SHA1_Final2(unsigned char hashout[20],
SHA_CTX2 *ctx) {
unsigned char pad0x80 = 0x80;
unsigned char pad0x00 = 0x00;
unsigned char padlen[8];
int i;
/* Pad with a binary 1 (e.g. 0x80), then zeroes, then length
*/
padlen[0] = (unsigned char)((ctx->sizeHi >> 24) & 255);
padlen[1] = (unsigned char)((ctx->sizeHi >> 16) & 255);
padlen[2] = (unsigned char)((ctx->sizeHi >> 8) & 255);
padlen[3] = (unsigned char)((ctx->sizeHi >> 0) & 255);
padlen[4] = (unsigned char)((ctx->sizeLo >> 24) & 255);
padlen[5] = (unsigned char)((ctx->sizeLo >> 16) & 255);
padlen[6] = (unsigned char)((ctx->sizeLo >> 8) & 255);
padlen[7] = (unsigned char)((ctx->sizeLo >> 0) & 255);
SHA1_Update2(ctx, &pad0x80, 1);
while (ctx->lenW != 56)
SHA1_Update2(ctx, &pad0x00, 1);
SHA1_Update2(ctx, padlen, 8);
/* Output hash
*/
for (i = 0; i < 20; i++) {
hashout[i] = (unsigned char)(ctx->H[i / 4] >> 24);
ctx->H[i / 4] <<= 8;
}
/*
* Re-initialize the context (also zeroizes contents)
*/
SHA1_Init2(ctx);
}
#define SHA_ROT(X, n) (((X) << (n)) | ((X) >> (32 - (n))))
static void
shaHashBlock(SHA_CTX2 *ctx) {
int t;
unsigned int A, B, C, D, E, TEMP;
for (t = 16; t <= 79; t++)
ctx->W[t] =
SHA_ROT(ctx->W[t - 3] ^ ctx->W[t - 8] ^ ctx->W[t - 14] ^ ctx->W[t - 16], 1);
A = ctx->H[0];
B = ctx->H[1];
C = ctx->H[2];
D = ctx->H[3];
E = ctx->H[4];
for (t = 0; t <= 19; t++) {
TEMP = SHA_ROT(A, 5) + (((C ^ D) & B) ^ D) + E + ctx->W[t] + 0x5a827999;
E = D; D = C; C = SHA_ROT(B, 30); B = A; A = TEMP;
}
for (t = 20; t <= 39; t++) {
TEMP = SHA_ROT(A, 5) + (B ^ C ^ D) + E + ctx->W[t] + 0x6ed9eba1;
E = D; D = C; C = SHA_ROT(B, 30); B = A; A = TEMP;
}
for (t = 40; t <= 59; t++) {
TEMP = SHA_ROT(A, 5) + ((B & C) | (D & (B | C))) + E + ctx->W[t] + 0x8f1bbcdc;
E = D; D = C; C = SHA_ROT(B, 30); B = A; A = TEMP;
}
for (t = 60; t <= 79; t++) {
TEMP = SHA_ROT(A, 5) + (B ^ C ^ D) + E + ctx->W[t] + 0xca62c1d6;
E = D; D = C; C = SHA_ROT(B, 30); B = A; A = TEMP;
}
ctx->H[0] += A;
ctx->H[1] += B;
ctx->H[2] += C;
ctx->H[3] += D;
ctx->H[4] += E;
}

View File

@ -1,54 +0,0 @@
/*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is SHA 180-1 Header File
*
* The Initial Developer of the Original Code is Paul Kocher of
* Cryptography Research. Portions created by Paul Kocher are
* Copyright (C) 1995-9 by Cryptography Research, Inc. All
* Rights Reserved.
*
* Contributor(s):
*
* Paul Kocher
*
* Alternatively, the contents of this file may be used under the
* terms of the GNU General Public License Version 2 or later (the
* "GPL"), in which case the provisions of the GPL are applicable
* instead of those above. If you wish to allow use of your
* version of this file only under the terms of the GPL and not to
* allow others to use your version of this file under the MPL,
* indicate your decision by deleting the provisions above and
* replace them with the notice and other provisions required by
* the GPL. If you do not delete the provisions above, a recipient
* may use your version of this file under either the MPL or the
* GPL.
*/
#ifndef SHA_H
#define SHA_H
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
typedef struct {
unsigned int H[5];
unsigned int W[80];
int lenW;
unsigned int sizeHi,sizeLo;
} SHA_CTX2;
void SHA1_Init2(SHA_CTX2 *ctx);
void SHA1_Update2(SHA_CTX2 *ctx, void *dataIn, int len);
void SHA1_Final2(unsigned char hashout[20], SHA_CTX2 *ctx);
#endif