git
/
sha1dc_git.c
40 строк · 940.0 Байт
1#include "git-compat-util.h"2#include "sha1dc_git.h"3#include "hex.h"4
5#ifdef DC_SHA1_EXTERNAL6/*
7* Same as SHA1DCInit, but with default save_hash=0
8*/
9void git_SHA1DCInit(SHA1_CTX *ctx)10{
11SHA1DCInit(ctx);12SHA1DCSetSafeHash(ctx, 0);13}
14#endif15
16/*
17* Same as SHA1DCFinal, but convert collision attack case into a verbose die().
18*/
19void git_SHA1DCFinal(unsigned char hash[20], SHA1_CTX *ctx)20{
21if (!SHA1DCFinal(hash, ctx))22return;23die("SHA-1 appears to be part of a collision attack: %s",24hash_to_hex_algop(hash, &hash_algos[GIT_HASH_SHA1]));25}
26
27/*
28* Same as SHA1DCUpdate, but adjust types to match git's usual interface.
29*/
30void git_SHA1DCUpdate(SHA1_CTX *ctx, const void *vdata, unsigned long len)31{
32const char *data = vdata;33/* We expect an unsigned long, but sha1dc only takes an int */34while (len > INT_MAX) {35SHA1DCUpdate(ctx, data, INT_MAX);36data += INT_MAX;37len -= INT_MAX;38}39SHA1DCUpdate(ctx, data, len);40}
41