void threefish1024_dec(void* data, const threefish1024_ctx_t* ctx){
	uint8_t i=0,s=20;
	uint8_t r0[8] = {0x69, 0x72, 0x21, 0x34, 0x42, 0x41, 0x31, 0x79};
	uint8_t r1[8] = {0x61, 0x19, 0x1a, 0x19, 0x53, 0x10, 0x31, 0x53};
	uint8_t r2[8] = {0x33, 0x40, 0x22, 0x69, 0x31, 0x22, 0x6a, 0x5b};
	uint8_t r3[8] = {0x72, 0x6b, 0x31, 0x60, 0x74, 0x71, 0x2b, 0x50};
	uint8_t r4[8] = {0x5b, 0x23, 0x53, 0x63, 0x54, 0x3b, 0x2a, 0x20};
	uint8_t r5[8] = {0x60, 0x22, 0x52, 0x11, 0x11, 0x14, 0x2b, 0x3a};
	uint8_t r6[8] = {0x7b, 0x02, 0x50, 0x43, 0x73, 0x40, 0x64, 0x5a};
	uint8_t r7[8] = {0x70, 0x70, 0x29, 0x51, 0x42, 0x7a, 0x71, 0x14}; 
	
	do{
		if(i%4==0){
			add_key_16(data, ctx, s);
			--s;
		}
		permute_inv16(data);
		threefish_invmix((uint8_t*)data +  0, r0[i%8]);
		threefish_invmix((uint8_t*)data + 16, r1[i%8]);
		threefish_invmix((uint8_t*)data + 32, r2[i%8]);
		threefish_invmix((uint8_t*)data + 48, r3[i%8]);
		threefish_invmix((uint8_t*)data + 64, r4[i%8]);
		threefish_invmix((uint8_t*)data + 80, r5[i%8]);
		threefish_invmix((uint8_t*)data + 96, r6[i%8]);
		threefish_invmix((uint8_t*)data +112, r7[i%8]);
		++i;
	}while(i!=80);
	add_key_16(data, ctx, s);
}
void threefish256_dec(void *data, const threefish256_ctx_t *ctx){
	uint8_t i=0,s=18;
	uint8_t r0[8] = {0x73, 0x13, 0x7b, 0x32, 0x72, 0x2b, 0x44, 0x1b}; 
	uint8_t r1[8] = {0x62, 0x52, 0x43, 0x24, 0x54, 0x6a, 0x34, 0x70};
	do{
		if(i%4==0){
			add_key_4(data, ctx, s);
			--s;
		}
		permute_4(data);
		threefish_invmix(data, r0[i%8]);
		threefish_invmix((uint8_t*)data + 16, r1[i%8]);
		++i;
	}while(i!=72);
	add_key_4(data, ctx, s);
}
void threefish512_dec(void* data, const threefish512_ctx_t* ctx){
	uint8_t i=0,s=18;
	uint8_t r0[8] = {0x41, 0x4b, 0x59, 0x41, 0x32, 0x42, 0x60, 0x5a};
	uint8_t r1[8] = {0x63, 0x32, 0x33, 0x61, 0x14, 0x2a, 0x24, 0x4a};
	uint8_t r2[8] = {0x59, 0x13, 0x51, 0x10, 0x72, 0x29, 0x53, 0x62};
	uint8_t r3[8] = {0x43, 0x11, 0x2a, 0x52, 0x19, 0x33, 0x49, 0x7b};
	do{
		if(i%4==0){
			add_key_8(data, ctx, s);
			--s;
		}
		permute_inv8(data);
		threefish_invmix((uint8_t*)data +  0, r0[i%8]);
		threefish_invmix((uint8_t*)data + 16, r1[i%8]);
		threefish_invmix((uint8_t*)data + 32, r2[i%8]);
		threefish_invmix((uint8_t*)data + 48, r3[i%8]);
		++i;
	}while(i!=72);
	add_key_8(data, ctx, s);
}