X-Git-Url: https://git.cryptolib.org/?a=blobdiff_plain;f=gf256mul.S;h=b269d3a4a1b760d2d372598bb0cbfdf87de1009c;hb=02ac3b653f3a11f284cc1a0cb0e983575f2f431b;hp=02e85e95c9003999a0c25ba4982edf36006ee296;hpb=4469def3e210fc904cfefc5b158fc6d4dc5f6e47;p=avr-crypto-lib.git diff --git a/gf256mul.S b/gf256mul.S index 02e85e9..b269d3a 100644 --- a/gf256mul.S +++ b/gf256mul.S @@ -1,6 +1,6 @@ /* gf256mul.S */ /* - This file is part of the Crypto-avr-lib/microcrypt-lib. + This file is part of the AVR-Crypto-Lib. Copyright (C) 2008 Daniel Otte (daniel.otte@rub.de) This program is free software: you can redistribute it and/or modify @@ -26,30 +26,57 @@ * */ +#include +#define OPTIMIZE_SMALL_A /* * param a: r24 - * param b; r22 + * param b: r22 * param reducer: r20 */ -A = 21 +A = 23 B = 22 P = 24 .global gf256mul + +#ifdef OPTIMIZE_SMALL_A +gf256mul: + mov A, r24 + clr r24 +1: + lsr A + breq 4f + brcc 2f + eor P, B +2: + lsl B + brcc 3f + eor B, r20 +3: + rjmp 1b +4: + brcc 2f + eor P, B +2: + ret + +#else + gf256mul: mov r21, r24 clr r24 ldi r25, 8 1: - lsr B + lsr A brcc 2f - eor P, A + eor P, B 2: - lsl A + lsl B brcc 3f - eor A, r20 + eor B, r20 3: dec r25 brne 1b ret +#endif