Ejemplo n.º 1
0
static void
bmw64_close(sph_bmw_big_context *sc, unsigned ub, unsigned n,
            void *dst, size_t out_size_w64)
{
    unsigned char *buf, *out;
    size_t ptr, u, v;
    unsigned z;
    sph_u64 h1[16], h2[16], *h;

    buf = sc->buf;
    ptr = sc->ptr;
    z = 0x80 >> n;
    buf[ptr ++] = ((ub & -z) | z) & 0xFF;
    h = sc->H;
    if (ptr > (sizeof sc->buf) - 8) {
        memset(buf + ptr, 0, (sizeof sc->buf) - ptr);
        compress_big(buf, h, h1);
        ptr = 0;
        h = h1;
    }
    memset(buf + ptr, 0, (sizeof sc->buf) - 8 - ptr);
    sph_enc64le_aligned(buf + (sizeof sc->buf) - 8,
                        SPH_T64(sc->bit_count + n));
    compress_big(buf, h, h2);
    for (u = 0; u < 16; u ++)
        sph_enc64le_aligned(buf + 8 * u, h2[u]);
    compress_big(buf, final_b, h1);
    out = dst;
    for (u = 0, v = 16 - out_size_w64; u < out_size_w64; u ++, v ++)
        sph_enc64le(out + 8 * u, h1[v]);
}
Ejemplo n.º 2
0
static void
bmw32_close(sph_bmw_small_context *sc, unsigned ub, unsigned n,
            void *dst, size_t out_size_w32)
{
    unsigned char *buf, *out;
    size_t ptr, u, v;
    unsigned z;
    sph_u32 h1[16], h2[16], *h;

    buf = sc->buf;
    ptr = sc->ptr;
    z = 0x80 >> n;
    buf[ptr ++] = ((ub & -z) | z) & 0xFF;
    h = sc->H;
    if (ptr > (sizeof sc->buf) - 8) {
        memset(buf + ptr, 0, (sizeof sc->buf) - ptr);
        compress_small(buf, h, h1);
        ptr = 0;
        h = h1;
    }
    memset(buf + ptr, 0, (sizeof sc->buf) - 8 - ptr);
#if SPH_64
    sph_enc64le_aligned(buf + (sizeof sc->buf) - 8,
                        SPH_T64(sc->bit_count + n));
#else
    sph_enc32le_aligned(buf + (sizeof sc->buf) - 8,
                        sc->bit_count_low + n);
    sph_enc32le_aligned(buf + (sizeof sc->buf) - 4,
                        SPH_T32(sc->bit_count_high));
#endif
    compress_small(buf, h, h2);
    for (u = 0; u < 16; u ++)
        sph_enc32le_aligned(buf + 4 * u, h2[u]);
    compress_small(buf, final_s, h1);
    out = dst;
    for (u = 0, v = 16 - out_size_w32; u < out_size_w32; u ++, v ++)
        sph_enc32le(out + 4 * u, h1[v]);
}
Ejemplo n.º 3
0
static void
test_types64(void)
{
	unsigned i;
	union {
		unsigned char bytes[64];
		sph_u64 v64;
	} u;

#if SPH_LITTLE_ENDIAN || SPH_BIG_ENDIAN
	ASSERT(sizeof(sph_u64) == 8);
#else
	ASSERT(sizeof(sph_u64) >= 8);
#endif

	for (i = 0; i < sizeof u.bytes; i ++)
		u.bytes[i] = i;
	for (i = 0; (i + 7) < sizeof u.bytes; i ++) {
		sph_u64 v, w;

		v = ((sph_u64)i << 56)
			| ((sph_u64)(i + 1) << 48)
			| ((sph_u64)(i + 2) << 40)
			| ((sph_u64)(i + 3) << 32)
			| ((sph_u64)(i + 4) << 24)
			| ((sph_u64)(i + 5) << 16)
			| ((sph_u64)(i + 6) << 8)
			| (sph_u64)(i + 7);
		w = ((sph_u64)(i + 7) << 56)
			| ((sph_u64)(i + 6) << 48)
			| ((sph_u64)(i + 5) << 40)
			| ((sph_u64)(i + 4) << 32)
			| ((sph_u64)(i + 3) << 24)
			| ((sph_u64)(i + 2) << 16)
			| ((sph_u64)(i + 1) << 8)
			| (sph_u64)i;
		ASSERT(sph_dec64be(u.bytes + i) == v);
		ASSERT(sph_dec64le(u.bytes + i) == w);
		if (i % 8 == 0) {
			ASSERT(sph_dec64be_aligned(u.bytes + i) == v);
			ASSERT(sph_dec64le_aligned(u.bytes + i) == w);
		}
	}
	memset(u.bytes, 0, sizeof u.bytes);
	for (i = 0; (i + 7) < sizeof u.bytes; i ++) {
		sph_u64 v, w;

		v = ((sph_u64)i << 56)
			| ((sph_u64)(i + 1) << 48)
			| ((sph_u64)(i + 2) << 40)
			| ((sph_u64)(i + 3) << 32)
			| ((sph_u64)(i + 4) << 24)
			| ((sph_u64)(i + 5) << 16)
			| ((sph_u64)(i + 6) << 8)
			| (sph_u64)(i + 7);
		w = ((sph_u64)(i + 7) << 56)
			| ((sph_u64)(i + 6) << 48)
			| ((sph_u64)(i + 5) << 40)
			| ((sph_u64)(i + 4) << 32)
			| ((sph_u64)(i + 3) << 24)
			| ((sph_u64)(i + 2) << 16)
			| ((sph_u64)(i + 1) << 8)
			| (sph_u64)i;
		if (i % 8 == 0) {
			sph_enc64be_aligned(u.bytes + i, v);
		} else {
			sph_enc64be(u.bytes + i, v);
		}
		ASSERT(u.bytes[i + 0] == i + 0);
		ASSERT(u.bytes[i + 1] == i + 1);
		ASSERT(u.bytes[i + 2] == i + 2);
		ASSERT(u.bytes[i + 3] == i + 3);
		ASSERT(u.bytes[i + 4] == i + 4);
		ASSERT(u.bytes[i + 5] == i + 5);
		ASSERT(u.bytes[i + 6] == i + 6);
		ASSERT(u.bytes[i + 7] == i + 7);
		memset(u.bytes, 0, sizeof u.bytes);
		if (i % 8 == 0) {
			sph_enc64le_aligned(u.bytes + i, w);
		} else {
			sph_enc64le(u.bytes + i, w);
		}
		ASSERT(u.bytes[i + 0] == i + 0);
		ASSERT(u.bytes[i + 1] == i + 1);
		ASSERT(u.bytes[i + 2] == i + 2);
		ASSERT(u.bytes[i + 3] == i + 3);
		ASSERT(u.bytes[i + 4] == i + 4);
		ASSERT(u.bytes[i + 5] == i + 5);
		ASSERT(u.bytes[i + 6] == i + 6);
		ASSERT(u.bytes[i + 7] == i + 7);
	}
}