Permalink
Cannot retrieve contributors at this time
Fetching contributors…
| /* gf256mul.S */ | |
| /* | |
| 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 | |
| it under the terms of the GNU General Public License as published by | |
| the Free Software Foundation, either version 3 of the License, or | |
| (at your option) any later version. | |
| This program is distributed in the hope that it will be useful, | |
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| GNU General Public License for more details. | |
| You should have received a copy of the GNU General Public License | |
| along with this program. If not, see <http://www.gnu.org/licenses/>. | |
| */ | |
| /* | |
| * File: gf256mul.S | |
| * Author: Daniel Otte | |
| * Date: 2008-12-19 | |
| * License: GPLv3 or later | |
| * Description: peasant's algorithm for multiplication in GF(2^8) | |
| * | |
| */ | |
| #include <avr/io.h> | |
| #define OPTIMIZE_SMALL_A | |
| /* | |
| * param a: r24 | |
| * param b: r22 | |
| * param reducer: r20 | |
| */ | |
| 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 A | |
| brcc 2f | |
| eor P, B | |
| 2: | |
| lsl B | |
| brcc 3f | |
| eor B, r20 | |
| 3: | |
| dec r25 | |
| brne 1b | |
| ret | |
| #endif |