* grub-core/lib/adler32.c: Recode due to license unclearness.
This commit is contained in:
parent
fd556a962e
commit
756773df7c
2 changed files with 58 additions and 105 deletions
|
@ -1,3 +1,7 @@
|
||||||
|
2012-04-07 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/lib/adler32.c: Recode due to license unclearness.
|
||||||
|
|
||||||
2012-04-07 Vladimir Serbinenko <phcoder@gmail.com>
|
2012-04-07 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
* grub-core/io/lzopio.c (read_block_header): Fix incorrect byte swapping
|
* grub-core/io/lzopio.c (read_block_header): Fix incorrect byte swapping
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
/* adler32.c - adler32 check. */
|
|
||||||
/*
|
/*
|
||||||
* GRUB -- GRand Unified Bootloader
|
* GRUB -- GRand Unified Bootloader
|
||||||
* Copyright (C) 2011 Free Software Foundation, Inc.
|
* Copyright (C) 2012 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* GRUB is free software: you can redistribute it and/or modify
|
* GRUB is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -17,117 +16,50 @@
|
||||||
* along with GRUB. If not, see <http://www.gnu.org/licenses/>.
|
* along with GRUB. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <grub/types.h>
|
|
||||||
#include <grub/dl.h>
|
#include <grub/dl.h>
|
||||||
#include <grub/crypto.h>
|
#include <grub/crypto.h>
|
||||||
|
|
||||||
GRUB_MOD_LICENSE ("GPLv3+");
|
GRUB_MOD_LICENSE ("GPLv3+");
|
||||||
|
|
||||||
/* Based on adler32() from adler32.c of zlib-1.2.5 library. */
|
struct adler32_context
|
||||||
|
|
||||||
#define BASE 65521UL
|
|
||||||
#define NMAX 5552
|
|
||||||
|
|
||||||
#define DO1(buf,i) {adler += (buf)[i]; sum2 += adler;}
|
|
||||||
#define DO2(buf,i) DO1(buf,i); DO1(buf,i+1);
|
|
||||||
#define DO4(buf,i) DO2(buf,i); DO2(buf,i+2);
|
|
||||||
#define DO8(buf,i) DO4(buf,i); DO4(buf,i+4);
|
|
||||||
#define DO16(buf) DO8(buf,0); DO8(buf,8);
|
|
||||||
|
|
||||||
static grub_uint32_t
|
|
||||||
update_adler32 (grub_uint32_t adler, const grub_uint8_t *buf, grub_size_t len)
|
|
||||||
{
|
{
|
||||||
unsigned long sum2;
|
grub_uint16_t a, b;
|
||||||
unsigned int n;
|
grub_uint32_t c;
|
||||||
|
};
|
||||||
sum2 = (adler >> 16) & 0xffff;
|
|
||||||
adler &= 0xffff;
|
|
||||||
|
|
||||||
if (len == 1)
|
|
||||||
{
|
|
||||||
adler += buf[0];
|
|
||||||
if (adler >= BASE)
|
|
||||||
adler -= BASE;
|
|
||||||
sum2 += adler;
|
|
||||||
if (sum2 >= BASE)
|
|
||||||
sum2 -= BASE;
|
|
||||||
return adler | (sum2 << 16);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (len < 16)
|
|
||||||
{
|
|
||||||
while (len--)
|
|
||||||
{
|
|
||||||
adler += *buf++;
|
|
||||||
sum2 += adler;
|
|
||||||
}
|
|
||||||
if (adler >= BASE)
|
|
||||||
adler -= BASE;
|
|
||||||
sum2 %= BASE;
|
|
||||||
return adler | (sum2 << 16);
|
|
||||||
}
|
|
||||||
|
|
||||||
while (len >= NMAX)
|
|
||||||
{
|
|
||||||
len -= NMAX;
|
|
||||||
n = NMAX / 16;
|
|
||||||
do
|
|
||||||
{
|
|
||||||
DO16 (buf);
|
|
||||||
buf += 16;
|
|
||||||
}
|
|
||||||
while (--n);
|
|
||||||
adler %= BASE;
|
|
||||||
sum2 %= BASE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (len)
|
|
||||||
{
|
|
||||||
while (len >= 16)
|
|
||||||
{
|
|
||||||
len -= 16;
|
|
||||||
DO16 (buf);
|
|
||||||
buf += 16;
|
|
||||||
}
|
|
||||||
while (len--)
|
|
||||||
{
|
|
||||||
adler += *buf++;
|
|
||||||
sum2 += adler;
|
|
||||||
}
|
|
||||||
adler %= BASE;
|
|
||||||
sum2 %= BASE;
|
|
||||||
}
|
|
||||||
|
|
||||||
return adler | (sum2 << 16);
|
|
||||||
}
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
grub_uint32_t adler;
|
|
||||||
}
|
|
||||||
adler32_context;
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
adler32_init (void *context)
|
adler32_init (void *context)
|
||||||
{
|
{
|
||||||
adler32_context *ctx = (adler32_context *) context;
|
struct adler32_context *ctx = context;
|
||||||
ctx->adler = 1;
|
|
||||||
|
ctx->a = 1;
|
||||||
|
ctx->b = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define MOD 65521
|
||||||
|
|
||||||
|
static grub_uint16_t
|
||||||
|
mod_add (grub_uint16_t a, grub_uint16_t b)
|
||||||
|
{
|
||||||
|
if ((grub_uint32_t) a + (grub_uint32_t) b >= MOD)
|
||||||
|
return a + b - MOD;
|
||||||
|
return a + b;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
adler32_write (void *context, const void *inbuf, grub_size_t inlen)
|
adler32_write (void *context, const void *inbuf, grub_size_t inlen)
|
||||||
{
|
{
|
||||||
adler32_context *ctx = (adler32_context *) context;
|
struct adler32_context *ctx = context;
|
||||||
if (!inbuf)
|
const grub_uint8_t *ptr = inbuf;
|
||||||
return;
|
|
||||||
ctx->adler = update_adler32 (ctx->adler, inbuf, inlen);
|
|
||||||
}
|
|
||||||
|
|
||||||
static grub_uint8_t *
|
while (inlen)
|
||||||
adler32_read (void *context)
|
{
|
||||||
{
|
ctx->a = mod_add (ctx->a, *ptr);
|
||||||
adler32_context *ctx = (adler32_context *) context;
|
ctx->b = mod_add (ctx->a, ctx->b);
|
||||||
return (grub_uint8_t *) &ctx->adler;
|
inlen--;
|
||||||
|
ptr++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -135,19 +67,36 @@ adler32_final (void *context __attribute__ ((unused)))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
gcry_md_spec_t _gcry_digest_spec_adler32 = {
|
static grub_uint8_t *
|
||||||
"ADLER32",0 , 0, 0 , 4,
|
adler32_read (void *context)
|
||||||
adler32_init, adler32_write, adler32_final, adler32_read,
|
{
|
||||||
sizeof (adler32_context),
|
struct adler32_context *ctx = context;
|
||||||
.blocksize = 64
|
if (ctx->a > MOD)
|
||||||
};
|
ctx->a -= MOD;
|
||||||
|
if (ctx->b > MOD)
|
||||||
|
ctx->b -= MOD;
|
||||||
|
ctx->c = grub_cpu_to_be32 (ctx->a | (ctx->b << 16));
|
||||||
|
return (grub_uint8_t *) &ctx->c;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gcry_md_spec_t spec_adler32 =
|
||||||
|
{
|
||||||
|
"ADLER32", 0, 0, 0, 4,
|
||||||
|
adler32_init, adler32_write, adler32_final, adler32_read,
|
||||||
|
sizeof (struct adler32_context),
|
||||||
|
#ifdef GRUB_UTIL
|
||||||
|
.modname = "adler32",
|
||||||
|
#endif
|
||||||
|
.blocksize = 64
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
GRUB_MOD_INIT(adler32)
|
GRUB_MOD_INIT(adler32)
|
||||||
{
|
{
|
||||||
grub_md_register (&_gcry_digest_spec_adler32);
|
grub_md_register (&spec_adler32);
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_FINI(adler32)
|
GRUB_MOD_FINI(adler32)
|
||||||
{
|
{
|
||||||
grub_md_unregister (&_gcry_digest_spec_adler32);
|
grub_md_unregister (&spec_adler32);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue