void md5_nextBlock(md5_ctx_t *state, const void* block){
	uint32_t	a[4];
	uint8_t		m,n,i=0;
	/* this requires other mixed sboxes */
#ifdef DEBUG
	cli_putstr("\r\n DBG: md5_nextBlock: block:\r\n");
	cli_hexdump(block, 16);	cli_putstr("\r\n");
	cli_hexdump(block+16, 16);	cli_putstr("\r\n");
	cli_hexdump(block+32, 16);	cli_putstr("\r\n");
	cli_hexdump(block+48, 16);	cli_putstr("\r\n");
#endif	
	
	a[0]=state->a[0];
	a[1]=state->a[1];
	a[2]=state->a[2];
	a[3]=state->a[3];
	
	/* round 1 */
	uint8_t s1t[]={7,12,17,22}; // 1,-1   1,4   2,-1   3,-2
	for(m=0;m<4;++m){
		for(n=0;n<4;++n){
			md5_core(a, &(((uint32_t*)block)[m*4+n]), 4-n, s1t[n],i++,0);
		}
	}
	/* round 2 */
	uint8_t s2t[]={5,9,14,20}; // 1,-3   1,1   2,-2   2,4
	for(m=0;m<4;++m){
		for(n=0;n<4;++n){
			md5_core(a, &(((uint32_t*)block)[(1+m*4+n*5)&0xf]), 4-n, s2t[n],i++,1);
		}
	}
	/* round 3 */
	uint8_t s3t[]={4,11,16,23}; // 0,4   1,3   2,0   3,-1
	for(m=0;m<4;++m){
		for(n=0;n<4;++n){
			md5_core(a, &(((uint32_t*)block)[(5-m*4+n*3)&0xf]), 4-n, s3t[n],i++,2);
		}
	}
	/* round 4 */
	uint8_t s4t[]={6,10,15,21}; // 1,-2   1,2   2,-1   3,-3
	for(m=0;m<4;++m){
		for(n=0;n<4;++n){
			md5_core(a, &(((uint32_t*)block)[(0-m*4+n*7)&0xf]), 4-n, s4t[n],i++,3);
		}
	}
	state->a[0] += a[0];
	state->a[1] += a[1];
	state->a[2] += a[2];
	state->a[3] += a[3];
	state->counter++;
}
コード例 #2
0
ファイル: md5.c プロジェクト: clcarwin/mdrotor
static void run(struct EngineThread *eng)
{
	SSE_CTX *ctx = eng->priv;

	result128_sort(ctx->res);
	while (eng->active) {
		md5_core(ctx);

		stack_turn(&ctx->stk[0], set_char_fast);
		stack_turn(&ctx->stk[1], set_char_fast);
		stack_turn(&ctx->stk[2], set_char_fast);
		stack_turn(&ctx->stk[3], set_char_fast);
	}
}