X-Git-Url: https://git.cryptolib.org/?p=avr-crypto-lib.git;a=blobdiff_plain;f=bmw%2Fbmw_small-tinyasm.S;h=ad4ee95ad1621378b484c646ed26f94df30af481;hp=38a2a21f45886219592d1f45b02158049af4eacf;hb=eb0cafe05ab4cdf60878dbd81e4ff3712d5150f2;hpb=ccd0f3b167feb23fd6d746affe6736b114643bcc diff --git a/bmw/bmw_small-tinyasm.S b/bmw/bmw_small-tinyasm.S index 38a2a21..ad4ee95 100644 --- a/bmw/bmw_small-tinyasm.S +++ b/bmw/bmw_small-tinyasm.S @@ -41,6 +41,11 @@ acc1 = 15 param s: r20 */ shiftleft32: + tst r20 + brpl 10f + neg r20 + rjmp shiftright32 +10: clr r0 cpi r20, 8 brlo bitrotateleft_1 @@ -49,7 +54,7 @@ shiftleft32: mov r23, r22 clr r22 subi r20, 8 - rjmp shiftleft32 + rjmp 10b /******************************************************************************/ /* @@ -257,10 +262,11 @@ mov32_to_acc: f2_1_shift_table: ; .byte 0x2B, 0x64, 0x66, 0x03, 0x51, 0x55, 0x87, 0x55 - .byte 0x55, 0x87, 0x55, 0x51, 0x03, 0x66, 0x64, 0x2B +; .byte 0x55, 0x87, 0x55, 0x51, 0x03, 0x66, 0x64, 0x2B + .byte 5, -5, -7, 8, -5, 5, -1, 5, -3, 0, 6, -6, -4, 6, -11, 2 f2_2_shift_table: ; .byte (2<<1), (7<<1), (4<<1), (3<<1), (4<<1)+1, (6<<1)+1, (6<<1) - .byte (8<<1)+1, (6<<1), (6<<1)+1, (4<<1)+1, (3<<1), (4<<1), (7<<1), (2<<1) + .byte 8, -6, 6, 4, -3, -4, -7, -2 expand2_rot_table: .byte 3,7,13,16,19,23,27 @@ -273,7 +279,7 @@ f0_hacktable: /******************************************************************************* -* uint32_t addelment(uint8_t j, const uint32_t* m, const uint32_t* h){ +* uint32_t addelment(uint8_t j, const uint32_t *m, const uint32_t *h){ * uint32_t r; * r = pgm_read_dword(k_lut+j); * r += rotl_addel(((uint32_t*)m)[j&0xf], j+0); @@ -739,56 +745,29 @@ f2: movw r26, h0 ldi r30, lo8(f2_1_shift_table) ldi r31, hi8(f2_1_shift_table) - ldi r17, 16 + ldi r17, 15 10: ;--- movw r22, xh0 movw r24, xh2 - cpi r17, 9 - brge 15f - clr r1 - rjmp 26f -15: lpm r20, Z+ - mov r1, r20 - andi r20, 0x0f - clt - cpi r17, 16 - breq 20f - cpi r17, 11 - brne 21f -20: set -21: brts 25f - rcall shiftright32 - rjmp 26f -25: rcall shiftleft32 -26: rcall mov32_to_acc + lpm r20, Z+ + sbrc r17, 3 + rcall shiftleft32 + rcall mov32_to_acc ;--- rcall load32_from_Y - mov r20, r1 - clr r1 - swap r20 - andi r20, 0x0f - brts 27f + lpm r20, Z+ + sbrc r17, 3 rcall shiftleft32 - rjmp 28f -27: rcall shiftright32 -28: rcall eor32_to_acc + rcall eor32_to_acc ;--- - ld r0, X - eor r0, acc0 - st X+, r0 - ld r0, X - eor r0, acc1 - st X+, r0 - ld r0, X - eor r0, acc2 - st X+, r0 - ld r0, X - eor r0, acc3 - st X+, r0 + rcall load32_from_X + rcall eor32_to_acc + rcall store_acc_to_dec_X + adiw r26, 4 ;--- dec r17 - brne 10b + brpl 10b ;----- sbiw r28, 4*8 /* Y points to q[24] */ movw r30, r28 @@ -809,20 +788,13 @@ f2: movw r26, h0 ldi r17, 15 - ldi r30, lo8(f2_2_shift_table) - ldi r31, hi8(f2_2_shift_table) + ldi r30, lo8(f2_2_shift_table-8) + ldi r31, hi8(f2_2_shift_table-8) 10: movw r22, xl0 movw r24, xl2 - sbrc r17, 3 - rjmp 20f lpm r20, Z+ - lsr r20 - brcs 15f - rcall shiftright32 - rjmp 20f -15: + sbrs r17, 3 rcall shiftleft32 -20: rcall mov32_to_acc rcall load32_from_Y rcall eor32_to_acc @@ -1049,7 +1021,7 @@ bmw256_lastBlock: /******************************************************************************* -* void bmw224_ctx2hash(void* dest, const bmw224_ctx_t* ctx){ +* void bmw224_ctx2hash(void *dest, const bmw224_ctx_t *ctx){ * memcpy(dest, &(ctx->h[9]), 224/8); * } * @@ -1064,7 +1036,7 @@ bmw224_ctx2hash: rjmp 1f /******************************************************************************* -* void bmw256_ctx2hash(void* dest, const bmw256_ctx_t* ctx){ +* void bmw256_ctx2hash(void *dest, const bmw256_ctx_t *ctx){ * memcpy(dest, &(ctx->h[8]), 256/8); * } * @@ -1084,7 +1056,7 @@ bmw256_ctx2hash: ret /******************************************************************************* -* void bmw256(void* dest, const void* msg, uint32_t length_b){ +* void bmw256(void *dest, const void *msg, uint32_t length_b){ * bmw_small_ctx_t ctx; * bmw256_init(&ctx); * while(length_b>=BMW_SMALL_BLOCKSIZE){ @@ -1117,7 +1089,7 @@ bmw256: /******************************************************************************* -* void bmw224(void* dest, const void* msg, uint32_t length_b){ +* void bmw224(void *dest, const void *msg, uint32_t length_b){ * bmw_small_ctx_t ctx; * bmw224_init(&ctx); * while(length_b>=BMW_SMALL_BLOCKSIZE){ @@ -1146,7 +1118,6 @@ dst1 = 7 .global bmw224 bmw224: clt - rjmp bmw_small_all bmw_small_all: @@ -1206,7 +1177,7 @@ c2h_lut: rjmp bmw256_ctx2hash /******************************************************************************* -* void bmw224_init(bmw224_ctx_t* ctx){ +* void bmw224_init(bmw224_ctx_t *ctx){ * uint8_t i; * ctx->h[0] = 0x00010203; * for(i=1; i<16; ++i){