コード例 #1
0
ファイル: lib_BMW.c プロジェクト: chineseneo/lessfs
HashReturn Update(hashState *state, const BitSequence *data, DataLength databitlen)
{
        u_int32_t *data32, *p256;
        u_int32_t XL32, XH32, TempEven32, TempOdd32;

        u_int64_t *data64, *p512;
        u_int64_t XL64, XH64, TempEven64, TempOdd64;

        int LastBytes;

        switch(state->hashbitlen)
        {
                case 224:
                case 256:
                        if (state->unprocessed_bits > 0)
                        {
                                if ( state->unprocessed_bits + databitlen > BlueMidnightWish256_BLOCK_SIZE * 8)
                                {
                                        return BAD_CONSECUTIVE_CALL_TO_UPDATE;
                                }
                                else
                                {
                                        LastBytes = (int)databitlen >> 3; // LastBytes = databitlen / 8
                                        memcpy(hashState256(state)->LastPart + (state->unprocessed_bits >> 3), data, LastBytes );
                                        state->unprocessed_bits += (int)databitlen;
                                        databitlen = state->unprocessed_bits;
                                        data32 = (u_int32_t *)hashState256(state)->LastPart;
                                }
                        }
                        else
                                data32 = (u_int32_t *)data;

                        p256   = hashState256(state)->DoublePipe;
                        while (databitlen >= BlueMidnightWish256_BLOCK_SIZE * 8)
                        {
                                databitlen -= BlueMidnightWish256_BLOCK_SIZE * 8;
                                // #1 Between comments #1 and #2 add algorithm specifics

                                state->bits_processed += BlueMidnightWish256_BLOCK_SIZE * 8;
                                Compression256();
                                data32 += 16;
                        }
                        state->unprocessed_bits = (int)databitlen;
                        if (databitlen > 0)
                        {
                                LastBytes = ((~(((- (int)databitlen)>>3) & 0x01ff)) + 1) & 0x01ff;  // LastBytes = Ceil(databitlen / 8)
                                memcpy(hashState256(state)->LastPart, data32, LastBytes );
                        }
コード例 #2
0
ファイル: bmw.c プロジェクト: avokhmin/RPM5
int bmwUpdate(bmwParam *sp, const byte *data, size_t size)
{
    uint64_t databitlen = 8 * size;
    uint32_t *data32, *p256;
    uint32_t XL32, XH32, TempEven32, TempOdd32;
    uint32_t p256_00, p256_01, p256_02, p256_03, p256_04, p256_05, p256_06, p256_07;
    uint32_t p256_08, p256_09, p256_10, p256_11, p256_12, p256_13, p256_14, p256_15;
    uint32_t p256_16, p256_17, p256_18, p256_19, p256_20, p256_21, p256_22, p256_23;
    uint32_t p256_24, p256_25, p256_26, p256_27, p256_28, p256_29, p256_30, p256_31;

    uint64_t *data64, *p512;
    uint64_t XL64, XH64, TempEven64, TempOdd64;
    uint64_t p512_00, p512_01, p512_02, p512_03, p512_04, p512_05, p512_06, p512_07;
    uint64_t p512_08, p512_09, p512_10, p512_11, p512_12, p512_13, p512_14, p512_15;
    uint64_t p512_16, p512_17, p512_18, p512_19, p512_20, p512_21, p512_22, p512_23;
    uint64_t p512_24, p512_25, p512_26, p512_27, p512_28, p512_29, p512_30, p512_31;

    int ret = SUCCESS;
    int LastBytes;

    switch (sp->hashbitlen) {
    case 224:
    case 256:
	if (sp->unprocessed_bits > 0) {
	    if ( sp->unprocessed_bits + databitlen > BlueMidnightWish256_BLOCK_SIZE * 8) {
		ret = BAD_CONSECUTIVE_CALL_TO_UPDATE;
		break;
	    }
	    LastBytes = (int)databitlen >> 3; // LastBytes = databitlen / 8
	    memcpy(bmw256(sp)->LastPart + (sp->unprocessed_bits >> 3), data, LastBytes );
	    sp->unprocessed_bits += (int)databitlen;
	    databitlen = sp->unprocessed_bits;
	    data32 = (uint32_t *)bmw256(sp)->LastPart;
	} else 
	    data32 = (uint32_t *)data;

	p256   = bmw256(sp)->DoublePipe;
	while (databitlen >= BlueMidnightWish256_BLOCK_SIZE * 8) {
	    databitlen -= BlueMidnightWish256_BLOCK_SIZE * 8;
	    sp->bits_processed += BlueMidnightWish256_BLOCK_SIZE * 8;
	    Compression256();
	    data32 += 16;
	}
	sp->unprocessed_bits = (int)databitlen;
	if (databitlen > 0) {
	    LastBytes = ((~(((- (int)databitlen)>>3) & 0x01ff)) + 1) & 0x01ff;  // LastBytes = Ceil(databitlen / 8)
	    memcpy(bmw256(sp)->LastPart, data32, LastBytes );
	}