2017-06-28 04:28:27 +00:00
|
|
|
* Copyright (c) 2017 Stephen Heumann
|
|
|
|
*
|
|
|
|
* Permission to use, copy, modify, and distribute this software for any
|
|
|
|
* purpose with or without fee is hereby granted, provided that the above
|
|
|
|
* copyright notice and this permission notice appear in all copies.
|
|
|
|
*
|
|
|
|
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
|
|
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
|
|
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
|
|
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
|
|
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
|
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
|
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
|
|
|
|
|
|
|
|
|
|
* AES encryption and decryption functions for the 65816
|
|
|
|
*
|
|
|
|
* The general approach is largely based on the public domain
|
|
|
|
* 'aestable.c' implementation by Karl Malbrain, available at:
|
|
|
|
* https://code.google.com/archive/p/byte-oriented-aes/downloads
|
|
|
|
* Portions are also based on the public domain 'rijndael-alg-fst.c'
|
|
|
|
* reference implementation by Vincent Rijmen, Antoon Bosselaers,
|
|
|
|
* and Paulo Barreto.
|
|
|
|
|
|
|
|
|
2017-06-27 01:41:44 +00:00
|
|
|
case on
|
|
|
|
mcopy aes.macros
|
|
|
|
|
2017-06-28 04:28:27 +00:00
|
|
|
* Data tables used for AES encryption and decryption.
|
|
|
|
* For best performance, these should be page-aligned.
|
2017-06-27 01:41:44 +00:00
|
|
|
align 256
|
|
|
|
tables privdata
|
|
|
|
Sbox anop ; forward s-box
|
|
|
|
dc h'63 7c 77 7b f2 6b 6f c5 30 01 67 2b fe d7 ab 76'
|
|
|
|
dc h'ca 82 c9 7d fa 59 47 f0 ad d4 a2 af 9c a4 72 c0'
|
|
|
|
dc h'b7 fd 93 26 36 3f f7 cc 34 a5 e5 f1 71 d8 31 15'
|
|
|
|
dc h'04 c7 23 c3 18 96 05 9a 07 12 80 e2 eb 27 b2 75'
|
|
|
|
dc h'09 83 2c 1a 1b 6e 5a a0 52 3b d6 b3 29 e3 2f 84'
|
|
|
|
dc h'53 d1 00 ed 20 fc b1 5b 6a cb be 39 4a 4c 58 cf'
|
|
|
|
dc h'd0 ef aa fb 43 4d 33 85 45 f9 02 7f 50 3c 9f a8'
|
|
|
|
dc h'51 a3 40 8f 92 9d 38 f5 bc b6 da 21 10 ff f3 d2'
|
|
|
|
dc h'cd 0c 13 ec 5f 97 44 17 c4 a7 7e 3d 64 5d 19 73'
|
|
|
|
dc h'60 81 4f dc 22 2a 90 88 46 ee b8 14 de 5e 0b db'
|
|
|
|
dc h'e0 32 3a 0a 49 06 24 5c c2 d3 ac 62 91 95 e4 79'
|
|
|
|
dc h'e7 c8 37 6d 8d d5 4e a9 6c 56 f4 ea 65 7a ae 08'
|
|
|
|
dc h'ba 78 25 2e 1c a6 b4 c6 e8 dd 74 1f 4b bd 8b 8a'
|
|
|
|
dc h'70 3e b5 66 48 03 f6 0e 61 35 57 b9 86 c1 1d 9e'
|
|
|
|
dc h'e1 f8 98 11 69 d9 8e 94 9b 1e 87 e9 ce 55 28 df'
|
|
|
|
dc h'8c a1 89 0d bf e6 42 68 41 99 2d 0f b0 54 bb 16'
|
|
|
|
|
|
|
|
InvSbox anop ; inverse s-box
|
|
|
|
dc h'52 09 6a d5 30 36 a5 38 bf 40 a3 9e 81 f3 d7 fb'
|
|
|
|
dc h'7c e3 39 82 9b 2f ff 87 34 8e 43 44 c4 de e9 cb'
|
|
|
|
dc h'54 7b 94 32 a6 c2 23 3d ee 4c 95 0b 42 fa c3 4e'
|
|
|
|
dc h'08 2e a1 66 28 d9 24 b2 76 5b a2 49 6d 8b d1 25'
|
|
|
|
dc h'72 f8 f6 64 86 68 98 16 d4 a4 5c cc 5d 65 b6 92'
|
|
|
|
dc h'6c 70 48 50 fd ed b9 da 5e 15 46 57 a7 8d 9d 84'
|
|
|
|
dc h'90 d8 ab 00 8c bc d3 0a f7 e4 58 05 b8 b3 45 06'
|
|
|
|
dc h'd0 2c 1e 8f ca 3f 0f 02 c1 af bd 03 01 13 8a 6b'
|
|
|
|
dc h'3a 91 11 41 4f 67 dc ea 97 f2 cf ce f0 b4 e6 73'
|
|
|
|
dc h'96 ac 74 22 e7 ad 35 85 e2 f9 37 e8 1c 75 df 6e'
|
|
|
|
dc h'47 f1 1a 71 1d 29 c5 89 6f b7 62 0e aa 18 be 1b'
|
|
|
|
dc h'fc 56 3e 4b c6 d2 79 20 9a db c0 fe 78 cd 5a f4'
|
|
|
|
dc h'1f dd a8 33 88 07 c7 31 b1 12 10 59 27 80 ec 5f'
|
|
|
|
dc h'60 51 7f a9 19 b5 4a 0d 2d e5 7a 9f 93 c9 9c ef'
|
|
|
|
dc h'a0 e0 3b 4d ae 2a f5 b0 c8 eb bb 3c 83 53 99 61'
|
|
|
|
dc h'17 2b 04 7e ba 77 d6 26 e1 69 14 63 55 21 0c 7d'
|
|
|
|
|
|
|
|
Xtime2Sbox anop ; combined Xtimes2[Sbox[]]
|
|
|
|
dc h'c6 f8 ee f6 ff d6 de 91 60 02 ce 56 e7 b5 4d ec'
|
|
|
|
dc h'8f 1f 89 fa ef b2 8e fb 41 b3 5f 45 23 53 e4 9b'
|
|
|
|
dc h'75 e1 3d 4c 6c 7e f5 83 68 51 d1 f9 e2 ab 62 2a'
|
|
|
|
dc h'08 95 46 9d 30 37 0a 2f 0e 24 1b df cd 4e 7f ea'
|
|
|
|
dc h'12 1d 58 34 36 dc b4 5b a4 76 b7 7d 52 dd 5e 13'
|
|
|
|
dc h'a6 b9 00 c1 40 e3 79 b6 d4 8d 67 72 94 98 b0 85'
|
|
|
|
dc h'bb c5 4f ed 86 9a 66 11 8a e9 04 fe a0 78 25 4b'
|
|
|
|
dc h'a2 5d 80 05 3f 21 70 f1 63 77 af 42 20 e5 fd bf'
|
|
|
|
dc h'81 18 26 c3 be 35 88 2e 93 55 fc 7a c8 ba 32 e6'
|
|
|
|
dc h'c0 19 9e a3 44 54 3b 0b 8c c7 6b 28 a7 bc 16 ad'
|
|
|
|
dc h'db 64 74 14 92 0c 48 b8 9f bd 43 c4 39 31 d3 f2'
|
|
|
|
dc h'd5 8b 6e da 01 b1 9c 49 d8 ac f3 cf ca f4 47 10'
|
|
|
|
dc h'6f f0 4a 5c 38 57 73 97 cb a1 e8 3e 96 61 0d 0f'
|
|
|
|
dc h'e0 7c 71 cc 90 06 f7 1c c2 6a ae 69 17 99 3a 27'
|
|
|
|
dc h'd9 eb 2b 22 d2 a9 07 33 2d 3c 15 c9 87 aa 50 a5'
|
|
|
|
dc h'03 59 09 1a 65 d7 84 d0 82 29 5a 1e 7b a8 6d 2c'
|
|
|
|
|
|
|
|
Xtime3Sbox anop ; combined Xtimes3[Sbox[]]
|
|
|
|
dc h'a5 84 99 8d 0d bd b1 54 50 03 a9 7d 19 62 e6 9a'
|
|
|
|
dc h'45 9d 40 87 15 eb c9 0b ec 67 fd ea bf f7 96 5b'
|
|
|
|
dc h'c2 1c ae 6a 5a 41 02 4f 5c f4 34 08 93 73 53 3f'
|
|
|
|
dc h'0c 52 65 5e 28 a1 0f b5 09 36 9b 3d 26 69 cd 9f'
|
|
|
|
dc h'1b 9e 74 2e 2d b2 ee fb f6 4d 61 ce 7b 3e 71 97'
|
|
|
|
dc h'f5 68 00 2c 60 1f c8 ed be 46 d9 4b de d4 e8 4a'
|
|
|
|
dc h'6b 2a e5 16 c5 d7 55 94 cf 10 06 81 f0 44 ba e3'
|
|
|
|
dc h'f3 fe c0 8a ad bc 48 04 df c1 75 63 30 1a 0e 6d'
|
|
|
|
dc h'4c 14 35 2f e1 a2 cc 39 57 f2 82 47 ac e7 2b 95'
|
|
|
|
dc h'a0 98 d1 7f 66 7e ab 83 ca 29 d3 3c 79 e2 1d 76'
|
|
|
|
dc h'3b 56 4e 1e db 0a 6c e4 5d 6e ef a6 a8 a4 37 8b'
|
|
|
|
dc h'32 43 59 b7 8c 64 d2 e0 b4 fa 07 25 af 8e e9 18'
|
|
|
|
dc h'd5 88 6f 72 24 f1 c7 51 23 7c 9c 21 dd dc 86 85'
|
|
|
|
dc h'90 42 c4 aa d8 05 01 12 a3 5f f9 d0 91 58 27 b9'
|
|
|
|
dc h'38 13 b3 33 bb 70 89 a7 b6 22 92 20 49 ff 78 7a'
|
|
|
|
dc h'8f f8 80 17 da 31 c6 b8 c3 b0 77 11 cb fc d6 3a'
|
|
|
|
|
|
|
|
;Xtime2 anop
|
|
|
|
; dc h'00 02 04 06 08 0a 0c 0e 10 12 14 16 18 1a 1c 1e'
|
|
|
|
; dc h'20 22 24 26 28 2a 2c 2e 30 32 34 36 38 3a 3c 3e'
|
|
|
|
; dc h'40 42 44 46 48 4a 4c 4e 50 52 54 56 58 5a 5c 5e'
|
|
|
|
; dc h'60 62 64 66 68 6a 6c 6e 70 72 74 76 78 7a 7c 7e'
|
|
|
|
; dc h'80 82 84 86 88 8a 8c 8e 90 92 94 96 98 9a 9c 9e'
|
|
|
|
; dc h'a0 a2 a4 a6 a8 aa ac ae b0 b2 b4 b6 b8 ba bc be'
|
|
|
|
; dc h'c0 c2 c4 c6 c8 ca cc ce d0 d2 d4 d6 d8 da dc de'
|
|
|
|
; dc h'e0 e2 e4 e6 e8 ea ec ee f0 f2 f4 f6 f8 fa fc fe'
|
|
|
|
; dc h'1b 19 1f 1d 13 11 17 15 0b 09 0f 0d 03 01 07 05'
|
|
|
|
; dc h'3b 39 3f 3d 33 31 37 35 2b 29 2f 2d 23 21 27 25'
|
|
|
|
; dc h'5b 59 5f 5d 53 51 57 55 4b 49 4f 4d 43 41 47 45'
|
|
|
|
; dc h'7b 79 7f 7d 73 71 77 75 6b 69 6f 6d 63 61 67 65'
|
|
|
|
; dc h'9b 99 9f 9d 93 91 97 95 8b 89 8f 8d 83 81 87 85'
|
|
|
|
; dc h'bb b9 bf bd b3 b1 b7 b5 ab a9 af ad a3 a1 a7 a5'
|
|
|
|
; dc h'db d9 df dd d3 d1 d7 d5 cb c9 cf cd c3 c1 c7 c5'
|
|
|
|
; dc h'fb f9 ff fd f3 f1 f7 f5 eb e9 ef ed e3 e1 e7 e5'
|
|
|
|
|
|
|
|
Xtime9 anop
|
|
|
|
dc h'00 09 12 1b 24 2d 36 3f 48 41 5a 53 6c 65 7e 77'
|
|
|
|
dc h'90 99 82 8b b4 bd a6 af d8 d1 ca c3 fc f5 ee e7'
|
|
|
|
dc h'3b 32 29 20 1f 16 0d 04 73 7a 61 68 57 5e 45 4c'
|
|
|
|
dc h'ab a2 b9 b0 8f 86 9d 94 e3 ea f1 f8 c7 ce d5 dc'
|
|
|
|
dc h'76 7f 64 6d 52 5b 40 49 3e 37 2c 25 1a 13 08 01'
|
|
|
|
dc h'e6 ef f4 fd c2 cb d0 d9 ae a7 bc b5 8a 83 98 91'
|
|
|
|
dc h'4d 44 5f 56 69 60 7b 72 05 0c 17 1e 21 28 33 3a'
|
|
|
|
dc h'dd d4 cf c6 f9 f0 eb e2 95 9c 87 8e b1 b8 a3 aa'
|
|
|
|
dc h'ec e5 fe f7 c8 c1 da d3 a4 ad b6 bf 80 89 92 9b'
|
|
|
|
dc h'7c 75 6e 67 58 51 4a 43 34 3d 26 2f 10 19 02 0b'
|
|
|
|
dc h'd7 de c5 cc f3 fa e1 e8 9f 96 8d 84 bb b2 a9 a0'
|
|
|
|
dc h'47 4e 55 5c 63 6a 71 78 0f 06 1d 14 2b 22 39 30'
|
|
|
|
dc h'9a 93 88 81 be b7 ac a5 d2 db c0 c9 f6 ff e4 ed'
|
|
|
|
dc h'0a 03 18 11 2e 27 3c 35 42 4b 50 59 66 6f 74 7d'
|
|
|
|
dc h'a1 a8 b3 ba 85 8c 97 9e e9 e0 fb f2 cd c4 df d6'
|
|
|
|
dc h'31 38 23 2a 15 1c 07 0e 79 70 6b 62 5d 54 4f 46'
|
|
|
|
|
|
|
|
XtimeB anop
|
|
|
|
dc h'00 0b 16 1d 2c 27 3a 31 58 53 4e 45 74 7f 62 69'
|
|
|
|
dc h'b0 bb a6 ad 9c 97 8a 81 e8 e3 fe f5 c4 cf d2 d9'
|
|
|
|
dc h'7b 70 6d 66 57 5c 41 4a 23 28 35 3e 0f 04 19 12'
|
|
|
|
dc h'cb c0 dd d6 e7 ec f1 fa 93 98 85 8e bf b4 a9 a2'
|
|
|
|
dc h'f6 fd e0 eb da d1 cc c7 ae a5 b8 b3 82 89 94 9f'
|
|
|
|
dc h'46 4d 50 5b 6a 61 7c 77 1e 15 08 03 32 39 24 2f'
|
|
|
|
dc h'8d 86 9b 90 a1 aa b7 bc d5 de c3 c8 f9 f2 ef e4'
|
|
|
|
dc h'3d 36 2b 20 11 1a 07 0c 65 6e 73 78 49 42 5f 54'
|
|
|
|
dc h'f7 fc e1 ea db d0 cd c6 af a4 b9 b2 83 88 95 9e'
|
|
|
|
dc h'47 4c 51 5a 6b 60 7d 76 1f 14 09 02 33 38 25 2e'
|
|
|
|
dc h'8c 87 9a 91 a0 ab b6 bd d4 df c2 c9 f8 f3 ee e5'
|
|
|
|
dc h'3c 37 2a 21 10 1b 06 0d 64 6f 72 79 48 43 5e 55'
|
|
|
|
dc h'01 0a 17 1c 2d 26 3b 30 59 52 4f 44 75 7e 63 68'
|
|
|
|
dc h'b1 ba a7 ac 9d 96 8b 80 e9 e2 ff f4 c5 ce d3 d8'
|
|
|
|
dc h'7a 71 6c 67 56 5d 40 4b 22 29 34 3f 0e 05 18 13'
|
|
|
|
dc h'ca c1 dc d7 e6 ed f0 fb 92 99 84 8f be b5 a8 a3'
|
|
|
|
|
|
|
|
XtimeD anop
|
|
|
|
dc h'00 0d 1a 17 34 39 2e 23 68 65 72 7f 5c 51 46 4b'
|
|
|
|
dc h'd0 dd ca c7 e4 e9 fe f3 b8 b5 a2 af 8c 81 96 9b'
|
|
|
|
dc h'bb b6 a1 ac 8f 82 95 98 d3 de c9 c4 e7 ea fd f0'
|
|
|
|
dc h'6b 66 71 7c 5f 52 45 48 03 0e 19 14 37 3a 2d 20'
|
|
|
|
dc h'6d 60 77 7a 59 54 43 4e 05 08 1f 12 31 3c 2b 26'
|
|
|
|
dc h'bd b0 a7 aa 89 84 93 9e d5 d8 cf c2 e1 ec fb f6'
|
|
|
|
dc h'd6 db cc c1 e2 ef f8 f5 be b3 a4 a9 8a 87 90 9d'
|
|
|
|
dc h'06 0b 1c 11 32 3f 28 25 6e 63 74 79 5a 57 40 4d'
|
|
|
|
dc h'da d7 c0 cd ee e3 f4 f9 b2 bf a8 a5 86 8b 9c 91'
|
|
|
|
dc h'0a 07 10 1d 3e 33 24 29 62 6f 78 75 56 5b 4c 41'
|
|
|
|
dc h'61 6c 7b 76 55 58 4f 42 09 04 13 1e 3d 30 27 2a'
|
|
|
|
dc h'b1 bc ab a6 85 88 9f 92 d9 d4 c3 ce ed e0 f7 fa'
|
|
|
|
dc h'b7 ba ad a0 83 8e 99 94 df d2 c5 c8 eb e6 f1 fc'
|
|
|
|
dc h'67 6a 7d 70 53 5e 49 44 0f 02 15 18 3b 36 21 2c'
|
|
|
|
dc h'0c 01 16 1b 38 35 22 2f 64 69 7e 73 50 5d 4a 47'
|
|
|
|
dc h'dc d1 c6 cb e8 e5 f2 ff b4 b9 ae a3 80 8d 9a 97'
|
|
|
|
|
|
|
|
XtimeE anop
|
|
|
|
dc h'00 0e 1c 12 38 36 24 2a 70 7e 6c 62 48 46 54 5a'
|
|
|
|
dc h'e0 ee fc f2 d8 d6 c4 ca 90 9e 8c 82 a8 a6 b4 ba'
|
|
|
|
dc h'db d5 c7 c9 e3 ed ff f1 ab a5 b7 b9 93 9d 8f 81'
|
|
|
|
dc h'3b 35 27 29 03 0d 1f 11 4b 45 57 59 73 7d 6f 61'
|
|
|
|
dc h'ad a3 b1 bf 95 9b 89 87 dd d3 c1 cf e5 eb f9 f7'
|
|
|
|
dc h'4d 43 51 5f 75 7b 69 67 3d 33 21 2f 05 0b 19 17'
|
|
|
|
dc h'76 78 6a 64 4e 40 52 5c 06 08 1a 14 3e 30 22 2c'
|
|
|
|
dc h'96 98 8a 84 ae a0 b2 bc e6 e8 fa f4 de d0 c2 cc'
|
|
|
|
dc h'41 4f 5d 53 79 77 65 6b 31 3f 2d 23 09 07 15 1b'
|
|
|
|
dc h'a1 af bd b3 99 97 85 8b d1 df cd c3 e9 e7 f5 fb'
|
|
|
|
dc h'9a 94 86 88 a2 ac be b0 ea e4 f6 f8 d2 dc ce c0'
|
|
|
|
dc h'7a 74 66 68 42 4c 5e 50 0a 04 16 18 32 3c 2e 20'
|
|
|
|
dc h'ec e2 f0 fe d4 da c8 c6 9c 92 80 8e a4 aa b8 b6'
|
|
|
|
dc h'0c 02 10 1e 34 3a 28 26 7c 72 60 6e 44 4a 58 56'
|
|
|
|
dc h'37 39 2b 25 0f 01 13 1d 47 49 5b 55 7f 71 63 6d'
|
|
|
|
dc h'd7 d9 cb c5 ef e1 f3 fd a7 a9 bb b5 9f 91 83 8d'
|
|
|
|
|
|
|
|
Rcon anop
|
2017-06-27 06:36:56 +00:00
|
|
|
dc h'01 01 01 00 00 00 00 00 00 00 00 00 00 00 00 00'
|
|
|
|
dc h'02 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00'
|
|
|
|
dc h'04 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00'
|
|
|
|
dc h'08 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
|
|
|
|
dc h'10 00 04 00 00 00 00 00 00 08 00 00 00 00 00 00'
|
2017-06-27 01:41:44 +00:00
|
|
|
dc h'20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
|
2017-06-27 06:36:56 +00:00
|
|
|
dc h'40 10 08 00 00 00 00 00 00 00 00 00 00 00 00 00'
|
|
|
|
dc h'80 00 00 00 00 00 00 00 00 20 00 00 00 00 00 00'
|
|
|
|
dc h'1b 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00'
|
|
|
|
dc h'36 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
|
|
|
|
dc h'6c 00 20 00 00 00 00 00 00 80 00 00 00 00 00 00'
|
|
|
|
dc h'd8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
|
|
|
|
dc h'ab 1b 40'
|
2017-06-27 01:41:44 +00:00
|
|
|
end
|
|
|
|
|
2017-06-28 04:28:27 +00:00
|
|
|
* Direct page locations
|
2017-06-27 01:41:44 +00:00
|
|
|
state1 gequ 0
|
|
|
|
state2 gequ 16
|
|
|
|
keysize gequ 32
|
|
|
|
rk gequ 33
|
|
|
|
|
2017-06-27 06:36:56 +00:00
|
|
|
* Constants used for keysize
|
|
|
|
keysize_128 gequ 0
|
|
|
|
keysize_192 gequ 64
|
|
|
|
keysize_256 gequ 128
|
|
|
|
|
2017-06-27 01:41:44 +00:00
|
|
|
|
2017-06-28 04:28:27 +00:00
|
|
|
* AES key expansion functions
|
|
|
|
* The appropriate one of these must be called before encrypting or decrypting.
|
|
|
|
* The key should be in the first 16/24/32 bytes of rk before calling this.
|
|
|
|
|
|
|
|
* Callable from C, with context structure pointer on stack.
|
2017-06-28 00:42:53 +00:00
|
|
|
aes128_expandkey start
|
|
|
|
CFunction AES128_EXPANDKEY
|
2017-06-27 06:36:56 +00:00
|
|
|
end
|
|
|
|
|
2017-06-28 00:42:53 +00:00
|
|
|
aes192_expandkey start
|
|
|
|
CFunction AES192_EXPANDKEY
|
2017-06-27 01:41:44 +00:00
|
|
|
end
|
|
|
|
|
2017-06-28 00:42:53 +00:00
|
|
|
aes256_expandkey start
|
|
|
|
CFunction AES256_EXPANDKEY
|
2017-06-27 06:36:56 +00:00
|
|
|
end
|
2017-06-27 01:41:44 +00:00
|
|
|
|
2017-06-28 04:28:27 +00:00
|
|
|
* Call with DP = AES context structure (with key present but not expanded),
|
2017-06-27 06:36:56 +00:00
|
|
|
* DB = bank containing AES tables.
|
2017-06-28 00:42:53 +00:00
|
|
|
AES128_EXPANDKEY start
|
2017-06-27 01:41:44 +00:00
|
|
|
using tables
|
|
|
|
|
2017-06-27 06:36:56 +00:00
|
|
|
stz keysize-1 ;keysize_128
|
|
|
|
|
2017-06-27 01:41:44 +00:00
|
|
|
ldx #16
|
2017-06-27 03:22:55 +00:00
|
|
|
clc
|
2017-06-27 01:41:44 +00:00
|
|
|
|
|
|
|
top anop
|
2017-06-27 06:36:56 +00:00
|
|
|
ExpandKeyCore 16,0
|
|
|
|
ExpandKeyIter 16,3
|
2017-06-27 01:41:44 +00:00
|
|
|
|
2017-06-27 06:36:56 +00:00
|
|
|
txa
|
|
|
|
adc #16
|
|
|
|
tax
|
|
|
|
cmp #16*11
|
|
|
|
blt top
|
|
|
|
rtl
|
|
|
|
end
|
2017-06-27 01:41:44 +00:00
|
|
|
|
2017-06-27 06:36:56 +00:00
|
|
|
|
2017-06-28 00:42:53 +00:00
|
|
|
AES192_EXPANDKEY start
|
2017-06-27 06:36:56 +00:00
|
|
|
using tables
|
|
|
|
|
|
|
|
lda #keysize_192|8
|
|
|
|
sta keysize-1
|
|
|
|
|
|
|
|
ldx #24
|
|
|
|
clc
|
|
|
|
|
|
|
|
top anop
|
|
|
|
ExpandKeyCore 24,1
|
|
|
|
ExpandKeyIter 24,5
|
2017-06-27 01:41:44 +00:00
|
|
|
|
|
|
|
txa
|
2017-06-27 06:36:56 +00:00
|
|
|
adc #24
|
2017-06-27 01:41:44 +00:00
|
|
|
tax
|
2017-06-27 06:36:56 +00:00
|
|
|
cmp #16*13
|
2017-06-27 01:41:44 +00:00
|
|
|
blt top
|
|
|
|
rtl
|
|
|
|
end
|
|
|
|
|
|
|
|
|
2017-06-28 00:42:53 +00:00
|
|
|
AES256_EXPANDKEY start
|
2017-06-27 06:36:56 +00:00
|
|
|
using tables
|
|
|
|
|
|
|
|
lda #keysize_256|8
|
|
|
|
sta keysize-1
|
|
|
|
|
|
|
|
ldx #32
|
|
|
|
clc
|
|
|
|
|
|
|
|
top anop
|
|
|
|
ExpandKeyCore 32,2
|
|
|
|
ExpandKeyIter 32,3
|
|
|
|
|
|
|
|
txa
|
|
|
|
adc #16
|
|
|
|
tax
|
|
|
|
cmp #16*15
|
|
|
|
bge done
|
|
|
|
|
|
|
|
ExpandKeySubst 32,2
|
|
|
|
ExpandKeyIter 32,3
|
|
|
|
|
|
|
|
txa
|
|
|
|
adc #16
|
|
|
|
tax
|
|
|
|
brl top
|
|
|
|
|
|
|
|
done rtl
|
|
|
|
end
|
|
|
|
|
|
|
|
|
2017-06-28 04:28:27 +00:00
|
|
|
* AES encryption function
|
|
|
|
* This performs AES-128, AES-192, or AES-256 encryption, depending on the key.
|
|
|
|
* The unencrypted input and encrypted output are in state1.
|
|
|
|
|
|
|
|
* Callable from C, with context structure pointer on stack.
|
2017-06-27 01:41:44 +00:00
|
|
|
aes_encrypt start
|
2017-06-27 06:36:56 +00:00
|
|
|
CFunction AES_ENCRYPT
|
2017-06-27 01:41:44 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
|
2017-06-28 04:28:27 +00:00
|
|
|
* Call with DP = AES context structure (with key expanded),
|
2017-06-27 01:41:44 +00:00
|
|
|
* DP = bank containing AES tables.
|
|
|
|
AES_ENCRYPT start
|
|
|
|
using tables
|
|
|
|
|
|
|
|
AddInitialRoundKey
|
|
|
|
|
|
|
|
ShortRegs
|
|
|
|
|
|
|
|
NormalRound 1
|
|
|
|
NormalRound 2
|
|
|
|
NormalRound 3
|
|
|
|
NormalRound 4
|
|
|
|
NormalRound 5
|
|
|
|
NormalRound 6
|
|
|
|
NormalRound 7
|
|
|
|
NormalRound 8
|
|
|
|
NormalRound 9
|
2017-06-27 06:36:56 +00:00
|
|
|
|
|
|
|
lda keysize
|
|
|
|
bne cont1
|
|
|
|
jmp finish_aes128
|
2017-06-27 01:41:44 +00:00
|
|
|
|
2017-06-27 06:36:56 +00:00
|
|
|
cont1 NormalRound 10
|
|
|
|
NormalRound 11
|
|
|
|
|
|
|
|
lda keysize
|
|
|
|
bmi cont2
|
|
|
|
jmp finish_aes192
|
2017-06-27 01:41:44 +00:00
|
|
|
|
2017-06-27 06:36:56 +00:00
|
|
|
cont2 NormalRound 12
|
|
|
|
NormalRound 13
|
2017-06-27 01:41:44 +00:00
|
|
|
|
2017-06-27 06:36:56 +00:00
|
|
|
finish_aes256 anop
|
|
|
|
FinalRound 14
|
|
|
|
LongRegs
|
2017-06-27 01:41:44 +00:00
|
|
|
rtl
|
|
|
|
|
2017-06-27 06:36:56 +00:00
|
|
|
finish_aes192 anop
|
|
|
|
FinalRound 12
|
|
|
|
LongRegs
|
|
|
|
rtl
|
2017-06-27 01:41:44 +00:00
|
|
|
|
2017-06-27 06:36:56 +00:00
|
|
|
finish_aes128 anop
|
|
|
|
FinalRound 10
|
|
|
|
LongRegs
|
|
|
|
rtl
|
|
|
|
end
|
2017-06-27 23:17:00 +00:00
|
|
|
|
|
|
|
|
2017-06-28 04:28:27 +00:00
|
|
|
* AES decryption functions
|
|
|
|
* The encrypted input and unencrypted output are in state1.
|
|
|
|
|
|
|
|
* Callable from C, with context structure pointer on stack.
|
2017-07-02 04:27:08 +00:00
|
|
|
aes_decrypt start
|
|
|
|
CFunction AES_DECRYPT
|
|
|
|
end
|
|
|
|
|
2017-06-27 23:17:00 +00:00
|
|
|
aes128_decrypt start
|
|
|
|
CFunction AES128_DECRYPT
|
|
|
|
end
|
|
|
|
|
|
|
|
aes192_decrypt start
|
|
|
|
CFunction AES192_DECRYPT
|
|
|
|
end
|
|
|
|
|
2017-06-27 23:35:04 +00:00
|
|
|
aes256_decrypt start
|
|
|
|
CFunction AES256_DECRYPT
|
|
|
|
end
|
|
|
|
|
2017-06-28 04:28:27 +00:00
|
|
|
* Call with DP = AES context structure (with key expanded),
|
|
|
|
* DP = bank containing AES tables.
|
2017-07-02 04:27:08 +00:00
|
|
|
AES_DECRYPT start
|
2017-06-27 23:17:00 +00:00
|
|
|
using tables
|
2017-06-28 01:44:14 +00:00
|
|
|
ShortRegs
|
2017-07-02 04:27:08 +00:00
|
|
|
lda keysize
|
|
|
|
bne not128
|
|
|
|
jmp aes128_decrypt_internal
|
|
|
|
not128 bmi aes256_decrypt_internal
|
|
|
|
jmp aes192_decrypt_internal
|
|
|
|
|
|
|
|
AES256_DECRYPT entry
|
|
|
|
ShortRegs
|
|
|
|
aes256_decrypt_internal anop
|
2017-06-27 23:35:04 +00:00
|
|
|
InvFinalRound 14
|
|
|
|
InvNormalRound 13
|
|
|
|
InvNormalRound 12
|
|
|
|
jmp cont1
|
|
|
|
|
|
|
|
AES192_DECRYPT entry
|
2017-06-28 01:44:14 +00:00
|
|
|
ShortRegs
|
2017-07-02 04:27:08 +00:00
|
|
|
aes192_decrypt_internal anop
|
2017-06-27 23:17:00 +00:00
|
|
|
InvFinalRound 12
|
2017-06-27 23:35:04 +00:00
|
|
|
cont1 anop
|
2017-06-27 23:17:00 +00:00
|
|
|
InvNormalRound 11
|
|
|
|
InvNormalRound 10
|
2017-06-27 23:35:04 +00:00
|
|
|
jmp cont2
|
2017-06-27 23:17:00 +00:00
|
|
|
|
|
|
|
AES128_DECRYPT entry
|
2017-06-28 01:44:14 +00:00
|
|
|
ShortRegs
|
2017-07-02 04:27:08 +00:00
|
|
|
aes128_decrypt_internal anop
|
2017-06-27 23:17:00 +00:00
|
|
|
InvFinalRound 10
|
2017-06-27 23:35:04 +00:00
|
|
|
cont2 anop
|
2017-06-27 23:17:00 +00:00
|
|
|
InvNormalRound 9
|
|
|
|
InvNormalRound 8
|
|
|
|
InvNormalRound 7
|
|
|
|
InvNormalRound 6
|
|
|
|
InvNormalRound 5
|
|
|
|
InvNormalRound 4
|
|
|
|
InvNormalRound 3
|
|
|
|
InvNormalRound 2
|
|
|
|
InvNormalRound 1
|
2017-06-28 01:44:14 +00:00
|
|
|
LongRegs
|
2017-06-27 23:17:00 +00:00
|
|
|
rtl
|
|
|
|
end
|