/* aes_enc-asm.S */
/*
- This file is part of the Crypto-avr-lib/microcrypt-lib.
+ This file is part of the AVR-Crypto-Lib.
Copyright (C) 2008, 2009 Daniel Otte (daniel.otte@rub.de)
This program is free software: you can redistribute it and/or modify
P = 0
xREDUCER = 25
-gf256mul:
- clr P
-1:
- lsr A
- breq 4f
- brcc 2f
- eor P, B
-2:
- lsl B
- brcc 3f
- eor B, xREDUCER
-3:
- rjmp 1b
-4:
- brcc 5f
- eor P, B
-5:
- ret
-
.global aes256_enc
aes256_enc:
ldi r20, 14
.endr
brtc 2f
- rjmp exit
+exit:
+ pop r31
+ pop r30
+ st Z+, ST00
+ st Z+, ST01
+ st Z+, ST02
+ st Z+, ST03
+ st Z+, ST10
+ st Z+, ST11
+ st Z+, ST12
+ st Z+, ST13
+ st Z+, ST20
+ st Z+, ST21
+ st Z+, ST22
+ st Z+, ST23
+ st Z+, ST30
+ st Z+, ST31
+ st Z+, ST32
+ st Z+, ST33
+ pop r29
+ pop r28
+ pop_range 2, 17
+ ret
+
2: dec CTR
brne 3f
set
mov r30, ST03
lpm T0, Z
- mov r30, ST13
- lpm T1, Z
- mov r30, ST23
- lpm T2, Z
mov r30, ST33
lpm ST03, Z
+ mov r30, ST23
+ lpm ST33, Z
+ mov r30, ST13
+ lpm ST23, Z
mov ST13, T0
- mov ST23, T1
- mov ST33, T2
-
+
/* mixcols (or rows in our case) */
brtc 2f
rjmp 1b
2:
-
- mov r1, ST00
- eor r1, ST01
- eor r1, ST02
- eor r1, ST03
+ /* mixrow 1 */
+ mov r0, ST02
+ eor r0, ST03
+ mov T2, r0
mov T0, ST00
- eor T0, ST01
- lsl T0
+ eor ST00, ST01
+ eor r0, ST00
+ lsl ST00
brcc 3f
- eor T0, xREDUCER
-3:
- eor T0, r1
- eor T0, ST00
+ eor ST00, xREDUCER
+3: eor ST00, r0
+ eor ST00, T0
mov T1, ST01
eor T1, ST02
lsl T1
brcc 3f
eor T1, xREDUCER
-3:
- eor T1, r1
+3: eor T1, r0
eor ST01, T1
- mov T2, ST02
- eor T2, ST03
lsl T2
brcc 3f
eor T2, xREDUCER
-3:
- eor T2, r1
+3: eor T2, r0
eor ST02, T2
- mov T3, ST03
- eor T3, ST00
- lsl T3
+ eor T0, ST03
+ lsl T0
brcc 3f
- eor T3, xREDUCER
-3:
- eor T3, r1
- eor ST03, T3
+ eor T0, xREDUCER
+3: eor T0, r0
+ eor ST03, T0
- mov ST00, T0
-
- mov r1, ST10
- eor r1, ST11
- eor r1, ST12
- eor r1, ST13
+ /* mixrow 2 */
+ mov r0, ST12
+ eor r0, ST13
+ mov T2, r0
mov T0, ST10
- eor T0, ST11
- lsl T0
+ eor ST10, ST11
+ eor r0, ST10
+ lsl ST10
brcc 3f
- eor T0, xREDUCER
-3:
- eor T0, r1
- eor T0, ST10
+ eor ST10, xREDUCER
+3: eor ST10, r0
+ eor ST10, T0
mov T1, ST11
eor T1, ST12
lsl T1
brcc 3f
eor T1, xREDUCER
-3:
- eor T1, r1
+3: eor T1, r0
eor ST11, T1
- mov T2, ST12
- eor T2, ST13
lsl T2
brcc 3f
eor T2, xREDUCER
-3:
- eor T2, r1
+3: eor T2, r0
eor ST12, T2
- mov T3, ST13
- eor T3, ST10
- lsl T3
+ eor T0, ST13
+ lsl T0
brcc 3f
- eor T3, xREDUCER
-3:
- eor T3, r1
- eor ST13, T3
+ eor T0, xREDUCER
+3: eor T0, r0
+ eor ST13, T0
- mov ST10, T0
-
- mov r1, ST20
- eor r1, ST21
- eor r1, ST22
- eor r1, ST23
+ /* mixrow 3 */
+ mov r0, ST22
+ eor r0, ST23
+ mov T2, r0
mov T0, ST20
- eor T0, ST21
- lsl T0
+ eor ST20, ST21
+ eor r0, ST20
+ lsl ST20
brcc 3f
- eor T0, xREDUCER
-3:
- eor T0, r1
- eor T0, ST20
+ eor ST20, xREDUCER
+3: eor ST20, r0
+ eor ST20, T0
mov T1, ST21
eor T1, ST22
lsl T1
brcc 3f
eor T1, xREDUCER
-3:
- eor T1, r1
+3: eor T1, r0
eor ST21, T1
- mov T2, ST22
- eor T2, ST23
lsl T2
brcc 3f
eor T2, xREDUCER
-3:
- eor T2, r1
+3: eor T2, r0
eor ST22, T2
- mov T3, ST23
- eor T3, ST20
- lsl T3
+ eor T0, ST23
+ lsl T0
brcc 3f
- eor T3, xREDUCER
-3:
- eor T3, r1
- eor ST23, T3
+ eor T0, xREDUCER
+3: eor T0, r0
+ eor ST23, T0
- mov ST20, T0
-
- mov r1, ST30
- eor r1, ST31
- eor r1, ST32
- eor r1, ST33
+ /* mixrow 4 */
+ mov r0, ST32
+ eor r0, ST33
+ mov T2, r0
mov T0, ST30
- eor T0, ST31
- lsl T0
+ eor ST30, ST31
+ eor r0, ST30
+ lsl ST30
brcc 3f
- eor T0, xREDUCER
-3:
- eor T0, r1
- eor T0, ST30
+ eor ST30, xREDUCER
+3: eor ST30, r0
+ eor ST30, T0
mov T1, ST31
eor T1, ST32
lsl T1
brcc 3f
eor T1, xREDUCER
-3:
- eor T1, r1
+3: eor T1, r0
eor ST31, T1
- mov T2, ST32
- eor T2, ST33
lsl T2
brcc 3f
eor T2, xREDUCER
-3:
- eor T2, r1
+3: eor T2, r0
eor ST32, T2
- mov T3, ST33
- eor T3, ST30
- lsl T3
+ eor T0, ST33
+ lsl T0
brcc 3f
- eor T3, xREDUCER
-3:
- eor T3, r1
- eor ST33, T3
-
- mov ST30, T0
-
+ eor T0, xREDUCER
+3: eor T0, r0
+ eor ST33, T0
/* mix colums (rows) done */
/* add key*/
rjmp 1b
-exit:
- pop r31
- pop r30
- st Z+, ST00
- st Z+, ST01
- st Z+, ST02
- st Z+, ST03
- st Z+, ST10
- st Z+, ST11
- st Z+, ST12
- st Z+, ST13
- st Z+, ST20
- st Z+, ST21
- st Z+, ST22
- st Z+, ST23
- st Z+, ST30
- st Z+, ST31
- st Z+, ST32
- st Z+, ST33
- clr r1
- pop r29
- pop r28
- pop_range 2, 17
- ret
+