LMiC library swtiched to default eu868
Fork of LMiC by
aes.cpp@5:3a2c29e4d38c, 2016-04-07 (annotated)
- Committer:
- Maarten_BE
- Date:
- Thu Apr 07 13:40:41 2016 +0000
- Revision:
- 5:3a2c29e4d38c
- Parent:
- 1:d3b7bde3995c
Initial commit LoRaTempHumIoT
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mluis | 0:62d1edcc13d1 | 1 | /******************************************************************************* |
mluis | 1:d3b7bde3995c | 2 | * Copyright (c) 2014-2015 IBM Corporation. |
mluis | 0:62d1edcc13d1 | 3 | * All rights reserved. This program and the accompanying materials |
mluis | 0:62d1edcc13d1 | 4 | * are made available under the terms of the Eclipse Public License v1.0 |
mluis | 0:62d1edcc13d1 | 5 | * which accompanies this distribution, and is available at |
mluis | 0:62d1edcc13d1 | 6 | * http://www.eclipse.org/legal/epl-v10.html |
mluis | 0:62d1edcc13d1 | 7 | * |
mluis | 0:62d1edcc13d1 | 8 | * Contributors: |
mluis | 0:62d1edcc13d1 | 9 | * IBM Zurich Research Lab - initial API, implementation and documentation |
mluis | 0:62d1edcc13d1 | 10 | *******************************************************************************/ |
mluis | 0:62d1edcc13d1 | 11 | |
mluis | 0:62d1edcc13d1 | 12 | #include "oslmic.h" |
mluis | 0:62d1edcc13d1 | 13 | |
mluis | 0:62d1edcc13d1 | 14 | #define AES_MICSUB 0x30 // internal use only |
mluis | 0:62d1edcc13d1 | 15 | |
mluis | 0:62d1edcc13d1 | 16 | static const u4_t AES_RCON[10] = { |
mluis | 0:62d1edcc13d1 | 17 | 0x01000000, 0x02000000, 0x04000000, 0x08000000, 0x10000000, |
mluis | 0:62d1edcc13d1 | 18 | 0x20000000, 0x40000000, 0x80000000, 0x1B000000, 0x36000000 |
mluis | 0:62d1edcc13d1 | 19 | }; |
mluis | 0:62d1edcc13d1 | 20 | |
mluis | 0:62d1edcc13d1 | 21 | static const u1_t AES_S[256] = { |
mluis | 0:62d1edcc13d1 | 22 | 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76, |
mluis | 0:62d1edcc13d1 | 23 | 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0, |
mluis | 0:62d1edcc13d1 | 24 | 0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15, |
mluis | 0:62d1edcc13d1 | 25 | 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75, |
mluis | 0:62d1edcc13d1 | 26 | 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84, |
mluis | 0:62d1edcc13d1 | 27 | 0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF, |
mluis | 0:62d1edcc13d1 | 28 | 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8, |
mluis | 0:62d1edcc13d1 | 29 | 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2, |
mluis | 0:62d1edcc13d1 | 30 | 0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73, |
mluis | 0:62d1edcc13d1 | 31 | 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB, |
mluis | 0:62d1edcc13d1 | 32 | 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79, |
mluis | 0:62d1edcc13d1 | 33 | 0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08, |
mluis | 0:62d1edcc13d1 | 34 | 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A, |
mluis | 0:62d1edcc13d1 | 35 | 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E, |
mluis | 0:62d1edcc13d1 | 36 | 0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF, |
mluis | 0:62d1edcc13d1 | 37 | 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16, |
mluis | 0:62d1edcc13d1 | 38 | }; |
mluis | 0:62d1edcc13d1 | 39 | |
mluis | 0:62d1edcc13d1 | 40 | static const u4_t AES_E1[256] = { |
mluis | 0:62d1edcc13d1 | 41 | 0xC66363A5, 0xF87C7C84, 0xEE777799, 0xF67B7B8D, 0xFFF2F20D, 0xD66B6BBD, 0xDE6F6FB1, 0x91C5C554, |
mluis | 0:62d1edcc13d1 | 42 | 0x60303050, 0x02010103, 0xCE6767A9, 0x562B2B7D, 0xE7FEFE19, 0xB5D7D762, 0x4DABABE6, 0xEC76769A, |
mluis | 0:62d1edcc13d1 | 43 | 0x8FCACA45, 0x1F82829D, 0x89C9C940, 0xFA7D7D87, 0xEFFAFA15, 0xB25959EB, 0x8E4747C9, 0xFBF0F00B, |
mluis | 0:62d1edcc13d1 | 44 | 0x41ADADEC, 0xB3D4D467, 0x5FA2A2FD, 0x45AFAFEA, 0x239C9CBF, 0x53A4A4F7, 0xE4727296, 0x9BC0C05B, |
mluis | 0:62d1edcc13d1 | 45 | 0x75B7B7C2, 0xE1FDFD1C, 0x3D9393AE, 0x4C26266A, 0x6C36365A, 0x7E3F3F41, 0xF5F7F702, 0x83CCCC4F, |
mluis | 0:62d1edcc13d1 | 46 | 0x6834345C, 0x51A5A5F4, 0xD1E5E534, 0xF9F1F108, 0xE2717193, 0xABD8D873, 0x62313153, 0x2A15153F, |
mluis | 0:62d1edcc13d1 | 47 | 0x0804040C, 0x95C7C752, 0x46232365, 0x9DC3C35E, 0x30181828, 0x379696A1, 0x0A05050F, 0x2F9A9AB5, |
mluis | 0:62d1edcc13d1 | 48 | 0x0E070709, 0x24121236, 0x1B80809B, 0xDFE2E23D, 0xCDEBEB26, 0x4E272769, 0x7FB2B2CD, 0xEA75759F, |
mluis | 0:62d1edcc13d1 | 49 | 0x1209091B, 0x1D83839E, 0x582C2C74, 0x341A1A2E, 0x361B1B2D, 0xDC6E6EB2, 0xB45A5AEE, 0x5BA0A0FB, |
mluis | 0:62d1edcc13d1 | 50 | 0xA45252F6, 0x763B3B4D, 0xB7D6D661, 0x7DB3B3CE, 0x5229297B, 0xDDE3E33E, 0x5E2F2F71, 0x13848497, |
mluis | 0:62d1edcc13d1 | 51 | 0xA65353F5, 0xB9D1D168, 0x00000000, 0xC1EDED2C, 0x40202060, 0xE3FCFC1F, 0x79B1B1C8, 0xB65B5BED, |
mluis | 0:62d1edcc13d1 | 52 | 0xD46A6ABE, 0x8DCBCB46, 0x67BEBED9, 0x7239394B, 0x944A4ADE, 0x984C4CD4, 0xB05858E8, 0x85CFCF4A, |
mluis | 0:62d1edcc13d1 | 53 | 0xBBD0D06B, 0xC5EFEF2A, 0x4FAAAAE5, 0xEDFBFB16, 0x864343C5, 0x9A4D4DD7, 0x66333355, 0x11858594, |
mluis | 0:62d1edcc13d1 | 54 | 0x8A4545CF, 0xE9F9F910, 0x04020206, 0xFE7F7F81, 0xA05050F0, 0x783C3C44, 0x259F9FBA, 0x4BA8A8E3, |
mluis | 0:62d1edcc13d1 | 55 | 0xA25151F3, 0x5DA3A3FE, 0x804040C0, 0x058F8F8A, 0x3F9292AD, 0x219D9DBC, 0x70383848, 0xF1F5F504, |
mluis | 0:62d1edcc13d1 | 56 | 0x63BCBCDF, 0x77B6B6C1, 0xAFDADA75, 0x42212163, 0x20101030, 0xE5FFFF1A, 0xFDF3F30E, 0xBFD2D26D, |
mluis | 0:62d1edcc13d1 | 57 | 0x81CDCD4C, 0x180C0C14, 0x26131335, 0xC3ECEC2F, 0xBE5F5FE1, 0x359797A2, 0x884444CC, 0x2E171739, |
mluis | 0:62d1edcc13d1 | 58 | 0x93C4C457, 0x55A7A7F2, 0xFC7E7E82, 0x7A3D3D47, 0xC86464AC, 0xBA5D5DE7, 0x3219192B, 0xE6737395, |
mluis | 0:62d1edcc13d1 | 59 | 0xC06060A0, 0x19818198, 0x9E4F4FD1, 0xA3DCDC7F, 0x44222266, 0x542A2A7E, 0x3B9090AB, 0x0B888883, |
mluis | 0:62d1edcc13d1 | 60 | 0x8C4646CA, 0xC7EEEE29, 0x6BB8B8D3, 0x2814143C, 0xA7DEDE79, 0xBC5E5EE2, 0x160B0B1D, 0xADDBDB76, |
mluis | 0:62d1edcc13d1 | 61 | 0xDBE0E03B, 0x64323256, 0x743A3A4E, 0x140A0A1E, 0x924949DB, 0x0C06060A, 0x4824246C, 0xB85C5CE4, |
mluis | 0:62d1edcc13d1 | 62 | 0x9FC2C25D, 0xBDD3D36E, 0x43ACACEF, 0xC46262A6, 0x399191A8, 0x319595A4, 0xD3E4E437, 0xF279798B, |
mluis | 0:62d1edcc13d1 | 63 | 0xD5E7E732, 0x8BC8C843, 0x6E373759, 0xDA6D6DB7, 0x018D8D8C, 0xB1D5D564, 0x9C4E4ED2, 0x49A9A9E0, |
mluis | 0:62d1edcc13d1 | 64 | 0xD86C6CB4, 0xAC5656FA, 0xF3F4F407, 0xCFEAEA25, 0xCA6565AF, 0xF47A7A8E, 0x47AEAEE9, 0x10080818, |
mluis | 0:62d1edcc13d1 | 65 | 0x6FBABAD5, 0xF0787888, 0x4A25256F, 0x5C2E2E72, 0x381C1C24, 0x57A6A6F1, 0x73B4B4C7, 0x97C6C651, |
mluis | 0:62d1edcc13d1 | 66 | 0xCBE8E823, 0xA1DDDD7C, 0xE874749C, 0x3E1F1F21, 0x964B4BDD, 0x61BDBDDC, 0x0D8B8B86, 0x0F8A8A85, |
mluis | 0:62d1edcc13d1 | 67 | 0xE0707090, 0x7C3E3E42, 0x71B5B5C4, 0xCC6666AA, 0x904848D8, 0x06030305, 0xF7F6F601, 0x1C0E0E12, |
mluis | 0:62d1edcc13d1 | 68 | 0xC26161A3, 0x6A35355F, 0xAE5757F9, 0x69B9B9D0, 0x17868691, 0x99C1C158, 0x3A1D1D27, 0x279E9EB9, |
mluis | 0:62d1edcc13d1 | 69 | 0xD9E1E138, 0xEBF8F813, 0x2B9898B3, 0x22111133, 0xD26969BB, 0xA9D9D970, 0x078E8E89, 0x339494A7, |
mluis | 0:62d1edcc13d1 | 70 | 0x2D9B9BB6, 0x3C1E1E22, 0x15878792, 0xC9E9E920, 0x87CECE49, 0xAA5555FF, 0x50282878, 0xA5DFDF7A, |
mluis | 0:62d1edcc13d1 | 71 | 0x038C8C8F, 0x59A1A1F8, 0x09898980, 0x1A0D0D17, 0x65BFBFDA, 0xD7E6E631, 0x844242C6, 0xD06868B8, |
mluis | 0:62d1edcc13d1 | 72 | 0x824141C3, 0x299999B0, 0x5A2D2D77, 0x1E0F0F11, 0x7BB0B0CB, 0xA85454FC, 0x6DBBBBD6, 0x2C16163A, |
mluis | 0:62d1edcc13d1 | 73 | }; |
mluis | 0:62d1edcc13d1 | 74 | |
mluis | 0:62d1edcc13d1 | 75 | static const u4_t AES_E2[256] = { |
mluis | 0:62d1edcc13d1 | 76 | 0xA5C66363, 0x84F87C7C, 0x99EE7777, 0x8DF67B7B, 0x0DFFF2F2, 0xBDD66B6B, 0xB1DE6F6F, 0x5491C5C5, |
mluis | 0:62d1edcc13d1 | 77 | 0x50603030, 0x03020101, 0xA9CE6767, 0x7D562B2B, 0x19E7FEFE, 0x62B5D7D7, 0xE64DABAB, 0x9AEC7676, |
mluis | 0:62d1edcc13d1 | 78 | 0x458FCACA, 0x9D1F8282, 0x4089C9C9, 0x87FA7D7D, 0x15EFFAFA, 0xEBB25959, 0xC98E4747, 0x0BFBF0F0, |
mluis | 0:62d1edcc13d1 | 79 | 0xEC41ADAD, 0x67B3D4D4, 0xFD5FA2A2, 0xEA45AFAF, 0xBF239C9C, 0xF753A4A4, 0x96E47272, 0x5B9BC0C0, |
mluis | 0:62d1edcc13d1 | 80 | 0xC275B7B7, 0x1CE1FDFD, 0xAE3D9393, 0x6A4C2626, 0x5A6C3636, 0x417E3F3F, 0x02F5F7F7, 0x4F83CCCC, |
mluis | 0:62d1edcc13d1 | 81 | 0x5C683434, 0xF451A5A5, 0x34D1E5E5, 0x08F9F1F1, 0x93E27171, 0x73ABD8D8, 0x53623131, 0x3F2A1515, |
mluis | 0:62d1edcc13d1 | 82 | 0x0C080404, 0x5295C7C7, 0x65462323, 0x5E9DC3C3, 0x28301818, 0xA1379696, 0x0F0A0505, 0xB52F9A9A, |
mluis | 0:62d1edcc13d1 | 83 | 0x090E0707, 0x36241212, 0x9B1B8080, 0x3DDFE2E2, 0x26CDEBEB, 0x694E2727, 0xCD7FB2B2, 0x9FEA7575, |
mluis | 0:62d1edcc13d1 | 84 | 0x1B120909, 0x9E1D8383, 0x74582C2C, 0x2E341A1A, 0x2D361B1B, 0xB2DC6E6E, 0xEEB45A5A, 0xFB5BA0A0, |
mluis | 0:62d1edcc13d1 | 85 | 0xF6A45252, 0x4D763B3B, 0x61B7D6D6, 0xCE7DB3B3, 0x7B522929, 0x3EDDE3E3, 0x715E2F2F, 0x97138484, |
mluis | 0:62d1edcc13d1 | 86 | 0xF5A65353, 0x68B9D1D1, 0x00000000, 0x2CC1EDED, 0x60402020, 0x1FE3FCFC, 0xC879B1B1, 0xEDB65B5B, |
mluis | 0:62d1edcc13d1 | 87 | 0xBED46A6A, 0x468DCBCB, 0xD967BEBE, 0x4B723939, 0xDE944A4A, 0xD4984C4C, 0xE8B05858, 0x4A85CFCF, |
mluis | 0:62d1edcc13d1 | 88 | 0x6BBBD0D0, 0x2AC5EFEF, 0xE54FAAAA, 0x16EDFBFB, 0xC5864343, 0xD79A4D4D, 0x55663333, 0x94118585, |
mluis | 0:62d1edcc13d1 | 89 | 0xCF8A4545, 0x10E9F9F9, 0x06040202, 0x81FE7F7F, 0xF0A05050, 0x44783C3C, 0xBA259F9F, 0xE34BA8A8, |
mluis | 0:62d1edcc13d1 | 90 | 0xF3A25151, 0xFE5DA3A3, 0xC0804040, 0x8A058F8F, 0xAD3F9292, 0xBC219D9D, 0x48703838, 0x04F1F5F5, |
mluis | 0:62d1edcc13d1 | 91 | 0xDF63BCBC, 0xC177B6B6, 0x75AFDADA, 0x63422121, 0x30201010, 0x1AE5FFFF, 0x0EFDF3F3, 0x6DBFD2D2, |
mluis | 0:62d1edcc13d1 | 92 | 0x4C81CDCD, 0x14180C0C, 0x35261313, 0x2FC3ECEC, 0xE1BE5F5F, 0xA2359797, 0xCC884444, 0x392E1717, |
mluis | 0:62d1edcc13d1 | 93 | 0x5793C4C4, 0xF255A7A7, 0x82FC7E7E, 0x477A3D3D, 0xACC86464, 0xE7BA5D5D, 0x2B321919, 0x95E67373, |
mluis | 0:62d1edcc13d1 | 94 | 0xA0C06060, 0x98198181, 0xD19E4F4F, 0x7FA3DCDC, 0x66442222, 0x7E542A2A, 0xAB3B9090, 0x830B8888, |
mluis | 0:62d1edcc13d1 | 95 | 0xCA8C4646, 0x29C7EEEE, 0xD36BB8B8, 0x3C281414, 0x79A7DEDE, 0xE2BC5E5E, 0x1D160B0B, 0x76ADDBDB, |
mluis | 0:62d1edcc13d1 | 96 | 0x3BDBE0E0, 0x56643232, 0x4E743A3A, 0x1E140A0A, 0xDB924949, 0x0A0C0606, 0x6C482424, 0xE4B85C5C, |
mluis | 0:62d1edcc13d1 | 97 | 0x5D9FC2C2, 0x6EBDD3D3, 0xEF43ACAC, 0xA6C46262, 0xA8399191, 0xA4319595, 0x37D3E4E4, 0x8BF27979, |
mluis | 0:62d1edcc13d1 | 98 | 0x32D5E7E7, 0x438BC8C8, 0x596E3737, 0xB7DA6D6D, 0x8C018D8D, 0x64B1D5D5, 0xD29C4E4E, 0xE049A9A9, |
mluis | 0:62d1edcc13d1 | 99 | 0xB4D86C6C, 0xFAAC5656, 0x07F3F4F4, 0x25CFEAEA, 0xAFCA6565, 0x8EF47A7A, 0xE947AEAE, 0x18100808, |
mluis | 0:62d1edcc13d1 | 100 | 0xD56FBABA, 0x88F07878, 0x6F4A2525, 0x725C2E2E, 0x24381C1C, 0xF157A6A6, 0xC773B4B4, 0x5197C6C6, |
mluis | 0:62d1edcc13d1 | 101 | 0x23CBE8E8, 0x7CA1DDDD, 0x9CE87474, 0x213E1F1F, 0xDD964B4B, 0xDC61BDBD, 0x860D8B8B, 0x850F8A8A, |
mluis | 0:62d1edcc13d1 | 102 | 0x90E07070, 0x427C3E3E, 0xC471B5B5, 0xAACC6666, 0xD8904848, 0x05060303, 0x01F7F6F6, 0x121C0E0E, |
mluis | 0:62d1edcc13d1 | 103 | 0xA3C26161, 0x5F6A3535, 0xF9AE5757, 0xD069B9B9, 0x91178686, 0x5899C1C1, 0x273A1D1D, 0xB9279E9E, |
mluis | 0:62d1edcc13d1 | 104 | 0x38D9E1E1, 0x13EBF8F8, 0xB32B9898, 0x33221111, 0xBBD26969, 0x70A9D9D9, 0x89078E8E, 0xA7339494, |
mluis | 0:62d1edcc13d1 | 105 | 0xB62D9B9B, 0x223C1E1E, 0x92158787, 0x20C9E9E9, 0x4987CECE, 0xFFAA5555, 0x78502828, 0x7AA5DFDF, |
mluis | 0:62d1edcc13d1 | 106 | 0x8F038C8C, 0xF859A1A1, 0x80098989, 0x171A0D0D, 0xDA65BFBF, 0x31D7E6E6, 0xC6844242, 0xB8D06868, |
mluis | 0:62d1edcc13d1 | 107 | 0xC3824141, 0xB0299999, 0x775A2D2D, 0x111E0F0F, 0xCB7BB0B0, 0xFCA85454, 0xD66DBBBB, 0x3A2C1616, |
mluis | 0:62d1edcc13d1 | 108 | }; |
mluis | 0:62d1edcc13d1 | 109 | |
mluis | 0:62d1edcc13d1 | 110 | static const u4_t AES_E3[256] = { |
mluis | 0:62d1edcc13d1 | 111 | 0x63A5C663, 0x7C84F87C, 0x7799EE77, 0x7B8DF67B, 0xF20DFFF2, 0x6BBDD66B, 0x6FB1DE6F, 0xC55491C5, |
mluis | 0:62d1edcc13d1 | 112 | 0x30506030, 0x01030201, 0x67A9CE67, 0x2B7D562B, 0xFE19E7FE, 0xD762B5D7, 0xABE64DAB, 0x769AEC76, |
mluis | 0:62d1edcc13d1 | 113 | 0xCA458FCA, 0x829D1F82, 0xC94089C9, 0x7D87FA7D, 0xFA15EFFA, 0x59EBB259, 0x47C98E47, 0xF00BFBF0, |
mluis | 0:62d1edcc13d1 | 114 | 0xADEC41AD, 0xD467B3D4, 0xA2FD5FA2, 0xAFEA45AF, 0x9CBF239C, 0xA4F753A4, 0x7296E472, 0xC05B9BC0, |
mluis | 0:62d1edcc13d1 | 115 | 0xB7C275B7, 0xFD1CE1FD, 0x93AE3D93, 0x266A4C26, 0x365A6C36, 0x3F417E3F, 0xF702F5F7, 0xCC4F83CC, |
mluis | 0:62d1edcc13d1 | 116 | 0x345C6834, 0xA5F451A5, 0xE534D1E5, 0xF108F9F1, 0x7193E271, 0xD873ABD8, 0x31536231, 0x153F2A15, |
mluis | 0:62d1edcc13d1 | 117 | 0x040C0804, 0xC75295C7, 0x23654623, 0xC35E9DC3, 0x18283018, 0x96A13796, 0x050F0A05, 0x9AB52F9A, |
mluis | 0:62d1edcc13d1 | 118 | 0x07090E07, 0x12362412, 0x809B1B80, 0xE23DDFE2, 0xEB26CDEB, 0x27694E27, 0xB2CD7FB2, 0x759FEA75, |
mluis | 0:62d1edcc13d1 | 119 | 0x091B1209, 0x839E1D83, 0x2C74582C, 0x1A2E341A, 0x1B2D361B, 0x6EB2DC6E, 0x5AEEB45A, 0xA0FB5BA0, |
mluis | 0:62d1edcc13d1 | 120 | 0x52F6A452, 0x3B4D763B, 0xD661B7D6, 0xB3CE7DB3, 0x297B5229, 0xE33EDDE3, 0x2F715E2F, 0x84971384, |
mluis | 0:62d1edcc13d1 | 121 | 0x53F5A653, 0xD168B9D1, 0x00000000, 0xED2CC1ED, 0x20604020, 0xFC1FE3FC, 0xB1C879B1, 0x5BEDB65B, |
mluis | 0:62d1edcc13d1 | 122 | 0x6ABED46A, 0xCB468DCB, 0xBED967BE, 0x394B7239, 0x4ADE944A, 0x4CD4984C, 0x58E8B058, 0xCF4A85CF, |
mluis | 0:62d1edcc13d1 | 123 | 0xD06BBBD0, 0xEF2AC5EF, 0xAAE54FAA, 0xFB16EDFB, 0x43C58643, 0x4DD79A4D, 0x33556633, 0x85941185, |
mluis | 0:62d1edcc13d1 | 124 | 0x45CF8A45, 0xF910E9F9, 0x02060402, 0x7F81FE7F, 0x50F0A050, 0x3C44783C, 0x9FBA259F, 0xA8E34BA8, |
mluis | 0:62d1edcc13d1 | 125 | 0x51F3A251, 0xA3FE5DA3, 0x40C08040, 0x8F8A058F, 0x92AD3F92, 0x9DBC219D, 0x38487038, 0xF504F1F5, |
mluis | 0:62d1edcc13d1 | 126 | 0xBCDF63BC, 0xB6C177B6, 0xDA75AFDA, 0x21634221, 0x10302010, 0xFF1AE5FF, 0xF30EFDF3, 0xD26DBFD2, |
mluis | 0:62d1edcc13d1 | 127 | 0xCD4C81CD, 0x0C14180C, 0x13352613, 0xEC2FC3EC, 0x5FE1BE5F, 0x97A23597, 0x44CC8844, 0x17392E17, |
mluis | 0:62d1edcc13d1 | 128 | 0xC45793C4, 0xA7F255A7, 0x7E82FC7E, 0x3D477A3D, 0x64ACC864, 0x5DE7BA5D, 0x192B3219, 0x7395E673, |
mluis | 0:62d1edcc13d1 | 129 | 0x60A0C060, 0x81981981, 0x4FD19E4F, 0xDC7FA3DC, 0x22664422, 0x2A7E542A, 0x90AB3B90, 0x88830B88, |
mluis | 0:62d1edcc13d1 | 130 | 0x46CA8C46, 0xEE29C7EE, 0xB8D36BB8, 0x143C2814, 0xDE79A7DE, 0x5EE2BC5E, 0x0B1D160B, 0xDB76ADDB, |
mluis | 0:62d1edcc13d1 | 131 | 0xE03BDBE0, 0x32566432, 0x3A4E743A, 0x0A1E140A, 0x49DB9249, 0x060A0C06, 0x246C4824, 0x5CE4B85C, |
mluis | 0:62d1edcc13d1 | 132 | 0xC25D9FC2, 0xD36EBDD3, 0xACEF43AC, 0x62A6C462, 0x91A83991, 0x95A43195, 0xE437D3E4, 0x798BF279, |
mluis | 0:62d1edcc13d1 | 133 | 0xE732D5E7, 0xC8438BC8, 0x37596E37, 0x6DB7DA6D, 0x8D8C018D, 0xD564B1D5, 0x4ED29C4E, 0xA9E049A9, |
mluis | 0:62d1edcc13d1 | 134 | 0x6CB4D86C, 0x56FAAC56, 0xF407F3F4, 0xEA25CFEA, 0x65AFCA65, 0x7A8EF47A, 0xAEE947AE, 0x08181008, |
mluis | 0:62d1edcc13d1 | 135 | 0xBAD56FBA, 0x7888F078, 0x256F4A25, 0x2E725C2E, 0x1C24381C, 0xA6F157A6, 0xB4C773B4, 0xC65197C6, |
mluis | 0:62d1edcc13d1 | 136 | 0xE823CBE8, 0xDD7CA1DD, 0x749CE874, 0x1F213E1F, 0x4BDD964B, 0xBDDC61BD, 0x8B860D8B, 0x8A850F8A, |
mluis | 0:62d1edcc13d1 | 137 | 0x7090E070, 0x3E427C3E, 0xB5C471B5, 0x66AACC66, 0x48D89048, 0x03050603, 0xF601F7F6, 0x0E121C0E, |
mluis | 0:62d1edcc13d1 | 138 | 0x61A3C261, 0x355F6A35, 0x57F9AE57, 0xB9D069B9, 0x86911786, 0xC15899C1, 0x1D273A1D, 0x9EB9279E, |
mluis | 0:62d1edcc13d1 | 139 | 0xE138D9E1, 0xF813EBF8, 0x98B32B98, 0x11332211, 0x69BBD269, 0xD970A9D9, 0x8E89078E, 0x94A73394, |
mluis | 0:62d1edcc13d1 | 140 | 0x9BB62D9B, 0x1E223C1E, 0x87921587, 0xE920C9E9, 0xCE4987CE, 0x55FFAA55, 0x28785028, 0xDF7AA5DF, |
mluis | 0:62d1edcc13d1 | 141 | 0x8C8F038C, 0xA1F859A1, 0x89800989, 0x0D171A0D, 0xBFDA65BF, 0xE631D7E6, 0x42C68442, 0x68B8D068, |
mluis | 0:62d1edcc13d1 | 142 | 0x41C38241, 0x99B02999, 0x2D775A2D, 0x0F111E0F, 0xB0CB7BB0, 0x54FCA854, 0xBBD66DBB, 0x163A2C16, |
mluis | 0:62d1edcc13d1 | 143 | }; |
mluis | 0:62d1edcc13d1 | 144 | |
mluis | 0:62d1edcc13d1 | 145 | static const u4_t AES_E4[256] = { |
mluis | 0:62d1edcc13d1 | 146 | 0x6363A5C6, 0x7C7C84F8, 0x777799EE, 0x7B7B8DF6, 0xF2F20DFF, 0x6B6BBDD6, 0x6F6FB1DE, 0xC5C55491, |
mluis | 0:62d1edcc13d1 | 147 | 0x30305060, 0x01010302, 0x6767A9CE, 0x2B2B7D56, 0xFEFE19E7, 0xD7D762B5, 0xABABE64D, 0x76769AEC, |
mluis | 0:62d1edcc13d1 | 148 | 0xCACA458F, 0x82829D1F, 0xC9C94089, 0x7D7D87FA, 0xFAFA15EF, 0x5959EBB2, 0x4747C98E, 0xF0F00BFB, |
mluis | 0:62d1edcc13d1 | 149 | 0xADADEC41, 0xD4D467B3, 0xA2A2FD5F, 0xAFAFEA45, 0x9C9CBF23, 0xA4A4F753, 0x727296E4, 0xC0C05B9B, |
mluis | 0:62d1edcc13d1 | 150 | 0xB7B7C275, 0xFDFD1CE1, 0x9393AE3D, 0x26266A4C, 0x36365A6C, 0x3F3F417E, 0xF7F702F5, 0xCCCC4F83, |
mluis | 0:62d1edcc13d1 | 151 | 0x34345C68, 0xA5A5F451, 0xE5E534D1, 0xF1F108F9, 0x717193E2, 0xD8D873AB, 0x31315362, 0x15153F2A, |
mluis | 0:62d1edcc13d1 | 152 | 0x04040C08, 0xC7C75295, 0x23236546, 0xC3C35E9D, 0x18182830, 0x9696A137, 0x05050F0A, 0x9A9AB52F, |
mluis | 0:62d1edcc13d1 | 153 | 0x0707090E, 0x12123624, 0x80809B1B, 0xE2E23DDF, 0xEBEB26CD, 0x2727694E, 0xB2B2CD7F, 0x75759FEA, |
mluis | 0:62d1edcc13d1 | 154 | 0x09091B12, 0x83839E1D, 0x2C2C7458, 0x1A1A2E34, 0x1B1B2D36, 0x6E6EB2DC, 0x5A5AEEB4, 0xA0A0FB5B, |
mluis | 0:62d1edcc13d1 | 155 | 0x5252F6A4, 0x3B3B4D76, 0xD6D661B7, 0xB3B3CE7D, 0x29297B52, 0xE3E33EDD, 0x2F2F715E, 0x84849713, |
mluis | 0:62d1edcc13d1 | 156 | 0x5353F5A6, 0xD1D168B9, 0x00000000, 0xEDED2CC1, 0x20206040, 0xFCFC1FE3, 0xB1B1C879, 0x5B5BEDB6, |
mluis | 0:62d1edcc13d1 | 157 | 0x6A6ABED4, 0xCBCB468D, 0xBEBED967, 0x39394B72, 0x4A4ADE94, 0x4C4CD498, 0x5858E8B0, 0xCFCF4A85, |
mluis | 0:62d1edcc13d1 | 158 | 0xD0D06BBB, 0xEFEF2AC5, 0xAAAAE54F, 0xFBFB16ED, 0x4343C586, 0x4D4DD79A, 0x33335566, 0x85859411, |
mluis | 0:62d1edcc13d1 | 159 | 0x4545CF8A, 0xF9F910E9, 0x02020604, 0x7F7F81FE, 0x5050F0A0, 0x3C3C4478, 0x9F9FBA25, 0xA8A8E34B, |
mluis | 0:62d1edcc13d1 | 160 | 0x5151F3A2, 0xA3A3FE5D, 0x4040C080, 0x8F8F8A05, 0x9292AD3F, 0x9D9DBC21, 0x38384870, 0xF5F504F1, |
mluis | 0:62d1edcc13d1 | 161 | 0xBCBCDF63, 0xB6B6C177, 0xDADA75AF, 0x21216342, 0x10103020, 0xFFFF1AE5, 0xF3F30EFD, 0xD2D26DBF, |
mluis | 0:62d1edcc13d1 | 162 | 0xCDCD4C81, 0x0C0C1418, 0x13133526, 0xECEC2FC3, 0x5F5FE1BE, 0x9797A235, 0x4444CC88, 0x1717392E, |
mluis | 0:62d1edcc13d1 | 163 | 0xC4C45793, 0xA7A7F255, 0x7E7E82FC, 0x3D3D477A, 0x6464ACC8, 0x5D5DE7BA, 0x19192B32, 0x737395E6, |
mluis | 0:62d1edcc13d1 | 164 | 0x6060A0C0, 0x81819819, 0x4F4FD19E, 0xDCDC7FA3, 0x22226644, 0x2A2A7E54, 0x9090AB3B, 0x8888830B, |
mluis | 0:62d1edcc13d1 | 165 | 0x4646CA8C, 0xEEEE29C7, 0xB8B8D36B, 0x14143C28, 0xDEDE79A7, 0x5E5EE2BC, 0x0B0B1D16, 0xDBDB76AD, |
mluis | 0:62d1edcc13d1 | 166 | 0xE0E03BDB, 0x32325664, 0x3A3A4E74, 0x0A0A1E14, 0x4949DB92, 0x06060A0C, 0x24246C48, 0x5C5CE4B8, |
mluis | 0:62d1edcc13d1 | 167 | 0xC2C25D9F, 0xD3D36EBD, 0xACACEF43, 0x6262A6C4, 0x9191A839, 0x9595A431, 0xE4E437D3, 0x79798BF2, |
mluis | 0:62d1edcc13d1 | 168 | 0xE7E732D5, 0xC8C8438B, 0x3737596E, 0x6D6DB7DA, 0x8D8D8C01, 0xD5D564B1, 0x4E4ED29C, 0xA9A9E049, |
mluis | 0:62d1edcc13d1 | 169 | 0x6C6CB4D8, 0x5656FAAC, 0xF4F407F3, 0xEAEA25CF, 0x6565AFCA, 0x7A7A8EF4, 0xAEAEE947, 0x08081810, |
mluis | 0:62d1edcc13d1 | 170 | 0xBABAD56F, 0x787888F0, 0x25256F4A, 0x2E2E725C, 0x1C1C2438, 0xA6A6F157, 0xB4B4C773, 0xC6C65197, |
mluis | 0:62d1edcc13d1 | 171 | 0xE8E823CB, 0xDDDD7CA1, 0x74749CE8, 0x1F1F213E, 0x4B4BDD96, 0xBDBDDC61, 0x8B8B860D, 0x8A8A850F, |
mluis | 0:62d1edcc13d1 | 172 | 0x707090E0, 0x3E3E427C, 0xB5B5C471, 0x6666AACC, 0x4848D890, 0x03030506, 0xF6F601F7, 0x0E0E121C, |
mluis | 0:62d1edcc13d1 | 173 | 0x6161A3C2, 0x35355F6A, 0x5757F9AE, 0xB9B9D069, 0x86869117, 0xC1C15899, 0x1D1D273A, 0x9E9EB927, |
mluis | 0:62d1edcc13d1 | 174 | 0xE1E138D9, 0xF8F813EB, 0x9898B32B, 0x11113322, 0x6969BBD2, 0xD9D970A9, 0x8E8E8907, 0x9494A733, |
mluis | 0:62d1edcc13d1 | 175 | 0x9B9BB62D, 0x1E1E223C, 0x87879215, 0xE9E920C9, 0xCECE4987, 0x5555FFAA, 0x28287850, 0xDFDF7AA5, |
mluis | 0:62d1edcc13d1 | 176 | 0x8C8C8F03, 0xA1A1F859, 0x89898009, 0x0D0D171A, 0xBFBFDA65, 0xE6E631D7, 0x4242C684, 0x6868B8D0, |
mluis | 0:62d1edcc13d1 | 177 | 0x4141C382, 0x9999B029, 0x2D2D775A, 0x0F0F111E, 0xB0B0CB7B, 0x5454FCA8, 0xBBBBD66D, 0x16163A2C, |
mluis | 0:62d1edcc13d1 | 178 | }; |
mluis | 0:62d1edcc13d1 | 179 | |
mluis | 0:62d1edcc13d1 | 180 | #define msbf4_read(p) ((p)[0]<<24 | (p)[1]<<16 | (p)[2]<<8 | (p)[3]) |
mluis | 0:62d1edcc13d1 | 181 | #define msbf4_write(p,v) (p)[0]=(v)>>24,(p)[1]=(v)>>16,(p)[2]=(v)>>8,(p)[3]=(v) |
mluis | 0:62d1edcc13d1 | 182 | #define swapmsbf(x) ( (x&0xFF)<<24 | (x&0xFF00)<<8 | (x&0xFF0000)>>8 | (x>>24) ) |
mluis | 0:62d1edcc13d1 | 183 | |
mluis | 1:d3b7bde3995c | 184 | #define u1(v) ((u1_t)(v)) |
mluis | 0:62d1edcc13d1 | 185 | |
mluis | 0:62d1edcc13d1 | 186 | #define AES_key4(r1,r2,r3,r0,i) r1 = ki[i+1]; \ |
mluis | 0:62d1edcc13d1 | 187 | r2 = ki[i+2]; \ |
mluis | 0:62d1edcc13d1 | 188 | r3 = ki[i+3]; \ |
mluis | 0:62d1edcc13d1 | 189 | r0 = ki[i] |
mluis | 0:62d1edcc13d1 | 190 | |
mluis | 1:d3b7bde3995c | 191 | #define AES_expr4(r1,r2,r3,r0,i) r1 ^= AES_E4[u1(i)]; \ |
mluis | 1:d3b7bde3995c | 192 | r2 ^= AES_E3[u1(i>>8)]; \ |
mluis | 1:d3b7bde3995c | 193 | r3 ^= AES_E2[u1(i>>16)]; \ |
mluis | 1:d3b7bde3995c | 194 | r0 ^= AES_E1[ (i>>24)] |
mluis | 0:62d1edcc13d1 | 195 | |
mluis | 0:62d1edcc13d1 | 196 | #define AES_expr(a,r0,r1,r2,r3,i) a = ki[i]; \ |
mluis | 1:d3b7bde3995c | 197 | a ^= (AES_S[ r0>>24 ]<<24); \ |
mluis | 1:d3b7bde3995c | 198 | a ^= (AES_S[u1(r1>>16)]<<16); \ |
mluis | 1:d3b7bde3995c | 199 | a ^= (AES_S[u1(r2>> 8)]<< 8); \ |
mluis | 1:d3b7bde3995c | 200 | a ^= AES_S[u1(r3) ] |
mluis | 0:62d1edcc13d1 | 201 | |
mluis | 0:62d1edcc13d1 | 202 | // global area for passing parameters (aux, key) and for storing round keys |
mluis | 0:62d1edcc13d1 | 203 | u4_t AESAUX[16/sizeof(u4_t)]; |
mluis | 0:62d1edcc13d1 | 204 | u4_t AESKEY[11*16/sizeof(u4_t)]; |
mluis | 0:62d1edcc13d1 | 205 | |
mluis | 0:62d1edcc13d1 | 206 | // generate 1+10 roundkeys for encryption with 128-bit key |
mluis | 0:62d1edcc13d1 | 207 | // read 128-bit key from AESKEY in MSBF, generate roundkey words in place |
mluis | 1:d3b7bde3995c | 208 | static void aesroundkeys () { |
mluis | 0:62d1edcc13d1 | 209 | int i; |
mluis | 0:62d1edcc13d1 | 210 | u4_t b; |
mluis | 0:62d1edcc13d1 | 211 | |
mluis | 0:62d1edcc13d1 | 212 | for( i=0; i<4; i++) { |
mluis | 1:d3b7bde3995c | 213 | AESKEY[i] = swapmsbf(AESKEY[i]); |
mluis | 0:62d1edcc13d1 | 214 | } |
mluis | 0:62d1edcc13d1 | 215 | |
mluis | 0:62d1edcc13d1 | 216 | b = AESKEY[3]; |
mluis | 0:62d1edcc13d1 | 217 | for( ; i<44; i++ ) { |
mluis | 1:d3b7bde3995c | 218 | if( i%4==0 ) { |
mluis | 0:62d1edcc13d1 | 219 | // b = SubWord(RotWord(b)) xor Rcon[i/4] |
mluis | 1:d3b7bde3995c | 220 | b = (AES_S[u1(b >> 16)] << 24) ^ |
mluis | 1:d3b7bde3995c | 221 | (AES_S[u1(b >> 8)] << 16) ^ |
mluis | 1:d3b7bde3995c | 222 | (AES_S[u1(b) ] << 8) ^ |
mluis | 1:d3b7bde3995c | 223 | (AES_S[ b >> 24 ] ) ^ |
mluis | 0:62d1edcc13d1 | 224 | AES_RCON[(i-4)/4]; |
mluis | 1:d3b7bde3995c | 225 | } |
mluis | 1:d3b7bde3995c | 226 | AESKEY[i] = b ^= AESKEY[i-4]; |
mluis | 0:62d1edcc13d1 | 227 | } |
mluis | 0:62d1edcc13d1 | 228 | } |
mluis | 0:62d1edcc13d1 | 229 | |
mluis | 0:62d1edcc13d1 | 230 | u4_t os_aes (u1_t mode, xref2u1_t buf, u2_t len) { |
mluis | 0:62d1edcc13d1 | 231 | |
mluis | 1:d3b7bde3995c | 232 | aesroundkeys(); |
mluis | 0:62d1edcc13d1 | 233 | |
mluis | 1:d3b7bde3995c | 234 | if( mode & AES_MICNOAUX ) { |
mluis | 1:d3b7bde3995c | 235 | AESAUX[0] = AESAUX[1] = AESAUX[2] = AESAUX[3] = 0; |
mluis | 1:d3b7bde3995c | 236 | } else { |
mluis | 1:d3b7bde3995c | 237 | AESAUX[0] = swapmsbf(AESAUX[0]); |
mluis | 1:d3b7bde3995c | 238 | AESAUX[1] = swapmsbf(AESAUX[1]); |
mluis | 1:d3b7bde3995c | 239 | AESAUX[2] = swapmsbf(AESAUX[2]); |
mluis | 1:d3b7bde3995c | 240 | AESAUX[3] = swapmsbf(AESAUX[3]); |
mluis | 1:d3b7bde3995c | 241 | } |
mluis | 0:62d1edcc13d1 | 242 | |
mluis | 1:d3b7bde3995c | 243 | while( (signed char)len > 0 ) { |
mluis | 1:d3b7bde3995c | 244 | u4_t a0, a1, a2, a3; |
mluis | 1:d3b7bde3995c | 245 | u4_t t0, t1, t2, t3; |
mluis | 1:d3b7bde3995c | 246 | u4_t *ki, *ke; |
mluis | 0:62d1edcc13d1 | 247 | |
mluis | 1:d3b7bde3995c | 248 | // load input block |
mluis | 1:d3b7bde3995c | 249 | if( (mode & AES_CTR) || ((mode & AES_MIC) && (mode & AES_MICNOAUX)==0) ) { // load CTR block or first MIC block |
mluis | 1:d3b7bde3995c | 250 | a0 = AESAUX[0]; |
mluis | 1:d3b7bde3995c | 251 | a1 = AESAUX[1]; |
mluis | 1:d3b7bde3995c | 252 | a2 = AESAUX[2]; |
mluis | 1:d3b7bde3995c | 253 | a3 = AESAUX[3]; |
mluis | 0:62d1edcc13d1 | 254 | } |
mluis | 0:62d1edcc13d1 | 255 | else if( (mode & AES_MIC) && len <= 16 ) { // last MIC block |
mluis | 0:62d1edcc13d1 | 256 | a0 = a1 = a2 = a3 = 0; // load null block |
mluis | 0:62d1edcc13d1 | 257 | mode |= ((len == 16) ? 1 : 2) << 4; // set MICSUB: CMAC subkey K1 or K2 |
mluis | 0:62d1edcc13d1 | 258 | } else |
mluis | 0:62d1edcc13d1 | 259 | LOADDATA: { // load data block (partially) |
mluis | 1:d3b7bde3995c | 260 | for(t0=0; t0<16; t0++) { |
mluis | 0:62d1edcc13d1 | 261 | t1 = (t1<<8) | ((t0<len) ? buf[t0] : (t0==len) ? 0x80 : 0x00); |
mluis | 0:62d1edcc13d1 | 262 | if((t0&3)==3) { |
mluis | 0:62d1edcc13d1 | 263 | a0 = a1; |
mluis | 0:62d1edcc13d1 | 264 | a1 = a2; |
mluis | 0:62d1edcc13d1 | 265 | a2 = a3; |
mluis | 0:62d1edcc13d1 | 266 | a3 = t1; |
mluis | 0:62d1edcc13d1 | 267 | } |
mluis | 0:62d1edcc13d1 | 268 | } |
mluis | 1:d3b7bde3995c | 269 | if( mode & AES_MIC ) { |
mluis | 1:d3b7bde3995c | 270 | a0 ^= AESAUX[0]; |
mluis | 1:d3b7bde3995c | 271 | a1 ^= AESAUX[1]; |
mluis | 1:d3b7bde3995c | 272 | a2 ^= AESAUX[2]; |
mluis | 1:d3b7bde3995c | 273 | a3 ^= AESAUX[3]; |
mluis | 1:d3b7bde3995c | 274 | } |
mluis | 0:62d1edcc13d1 | 275 | } |
mluis | 0:62d1edcc13d1 | 276 | |
mluis | 1:d3b7bde3995c | 277 | // perform AES encryption on block in a0-a3 |
mluis | 1:d3b7bde3995c | 278 | ki = AESKEY; |
mluis | 1:d3b7bde3995c | 279 | ke = ki + 8*4; |
mluis | 1:d3b7bde3995c | 280 | a0 ^= ki[0]; |
mluis | 1:d3b7bde3995c | 281 | a1 ^= ki[1]; |
mluis | 1:d3b7bde3995c | 282 | a2 ^= ki[2]; |
mluis | 1:d3b7bde3995c | 283 | a3 ^= ki[3]; |
mluis | 1:d3b7bde3995c | 284 | do { |
mluis | 1:d3b7bde3995c | 285 | AES_key4 (t1,t2,t3,t0,4); |
mluis | 1:d3b7bde3995c | 286 | AES_expr4(t1,t2,t3,t0,a0); |
mluis | 1:d3b7bde3995c | 287 | AES_expr4(t2,t3,t0,t1,a1); |
mluis | 1:d3b7bde3995c | 288 | AES_expr4(t3,t0,t1,t2,a2); |
mluis | 1:d3b7bde3995c | 289 | AES_expr4(t0,t1,t2,t3,a3); |
mluis | 0:62d1edcc13d1 | 290 | |
mluis | 1:d3b7bde3995c | 291 | AES_key4 (a1,a2,a3,a0,8); |
mluis | 1:d3b7bde3995c | 292 | AES_expr4(a1,a2,a3,a0,t0); |
mluis | 1:d3b7bde3995c | 293 | AES_expr4(a2,a3,a0,a1,t1); |
mluis | 1:d3b7bde3995c | 294 | AES_expr4(a3,a0,a1,a2,t2); |
mluis | 1:d3b7bde3995c | 295 | AES_expr4(a0,a1,a2,a3,t3); |
mluis | 1:d3b7bde3995c | 296 | } while( (ki+=8) < ke ); |
mluis | 0:62d1edcc13d1 | 297 | |
mluis | 1:d3b7bde3995c | 298 | AES_key4 (t1,t2,t3,t0,4); |
mluis | 1:d3b7bde3995c | 299 | AES_expr4(t1,t2,t3,t0,a0); |
mluis | 1:d3b7bde3995c | 300 | AES_expr4(t2,t3,t0,t1,a1); |
mluis | 1:d3b7bde3995c | 301 | AES_expr4(t3,t0,t1,t2,a2); |
mluis | 1:d3b7bde3995c | 302 | AES_expr4(t0,t1,t2,t3,a3); |
mluis | 0:62d1edcc13d1 | 303 | |
mluis | 1:d3b7bde3995c | 304 | AES_expr(a0,t0,t1,t2,t3,8); |
mluis | 1:d3b7bde3995c | 305 | AES_expr(a1,t1,t2,t3,t0,9); |
mluis | 1:d3b7bde3995c | 306 | AES_expr(a2,t2,t3,t0,t1,10); |
mluis | 1:d3b7bde3995c | 307 | AES_expr(a3,t3,t0,t1,t2,11); |
mluis | 1:d3b7bde3995c | 308 | // result of AES encryption in a0-a3 |
mluis | 0:62d1edcc13d1 | 309 | |
mluis | 1:d3b7bde3995c | 310 | if( mode & AES_MIC ) { |
mluis | 1:d3b7bde3995c | 311 | if( (t1 = (mode & AES_MICSUB) >> 4) != 0 ) { // last block |
mluis | 1:d3b7bde3995c | 312 | do { |
mluis | 1:d3b7bde3995c | 313 | // compute CMAC subkey K1 and K2 |
mluis | 1:d3b7bde3995c | 314 | t0 = a0 >> 31; // save MSB |
mluis | 1:d3b7bde3995c | 315 | a0 = (a0 << 1) | (a1 >> 31); |
mluis | 1:d3b7bde3995c | 316 | a1 = (a1 << 1) | (a2 >> 31); |
mluis | 1:d3b7bde3995c | 317 | a2 = (a2 << 1) | (a3 >> 31); |
mluis | 1:d3b7bde3995c | 318 | a3 = (a3 << 1); |
mluis | 1:d3b7bde3995c | 319 | if( t0 ) a3 ^= 0x87; |
mluis | 1:d3b7bde3995c | 320 | } while( --t1 ); |
mluis | 0:62d1edcc13d1 | 321 | |
mluis | 1:d3b7bde3995c | 322 | AESAUX[0] ^= a0; |
mluis | 1:d3b7bde3995c | 323 | AESAUX[1] ^= a1; |
mluis | 1:d3b7bde3995c | 324 | AESAUX[2] ^= a2; |
mluis | 1:d3b7bde3995c | 325 | AESAUX[3] ^= a3; |
mluis | 0:62d1edcc13d1 | 326 | mode &= ~AES_MICSUB; |
mluis | 1:d3b7bde3995c | 327 | goto LOADDATA; |
mluis | 1:d3b7bde3995c | 328 | } else { |
mluis | 0:62d1edcc13d1 | 329 | // save cipher block as new iv |
mluis | 0:62d1edcc13d1 | 330 | AESAUX[0] = a0; |
mluis | 0:62d1edcc13d1 | 331 | AESAUX[1] = a1; |
mluis | 0:62d1edcc13d1 | 332 | AESAUX[2] = a2; |
mluis | 0:62d1edcc13d1 | 333 | AESAUX[3] = a3; |
mluis | 0:62d1edcc13d1 | 334 | } |
mluis | 1:d3b7bde3995c | 335 | } else { // CIPHER |
mluis | 1:d3b7bde3995c | 336 | if( mode & AES_CTR ) { // xor block (partially) |
mluis | 0:62d1edcc13d1 | 337 | t0 = (len > 16) ? 16: len; |
mluis | 0:62d1edcc13d1 | 338 | for(t1=0; t1<t0; t1++) { |
mluis | 0:62d1edcc13d1 | 339 | buf[t1] ^= (a0>>24); |
mluis | 0:62d1edcc13d1 | 340 | a0 <<= 8; |
mluis | 0:62d1edcc13d1 | 341 | if((t1&3)==3) { |
mluis | 0:62d1edcc13d1 | 342 | a0 = a1; |
mluis | 0:62d1edcc13d1 | 343 | a1 = a2; |
mluis | 0:62d1edcc13d1 | 344 | a2 = a3; |
mluis | 0:62d1edcc13d1 | 345 | } |
mluis | 0:62d1edcc13d1 | 346 | } |
mluis | 1:d3b7bde3995c | 347 | // update counter |
mluis | 1:d3b7bde3995c | 348 | AESAUX[3]++; |
mluis | 1:d3b7bde3995c | 349 | } else { // ECB |
mluis | 0:62d1edcc13d1 | 350 | // store block |
mluis | 0:62d1edcc13d1 | 351 | msbf4_write(buf+0, a0); |
mluis | 1:d3b7bde3995c | 352 | msbf4_write(buf+4, a1); |
mluis | 1:d3b7bde3995c | 353 | msbf4_write(buf+8, a2); |
mluis | 1:d3b7bde3995c | 354 | msbf4_write(buf+12, a3); |
mluis | 1:d3b7bde3995c | 355 | } |
mluis | 1:d3b7bde3995c | 356 | } |
mluis | 0:62d1edcc13d1 | 357 | |
mluis | 0:62d1edcc13d1 | 358 | // update block state |
mluis | 0:62d1edcc13d1 | 359 | if( (mode & AES_MIC)==0 || (mode & AES_MICNOAUX) ) { |
mluis | 0:62d1edcc13d1 | 360 | buf += 16; |
mluis | 0:62d1edcc13d1 | 361 | len -= 16; |
mluis | 0:62d1edcc13d1 | 362 | } |
mluis | 0:62d1edcc13d1 | 363 | mode |= AES_MICNOAUX; |
mluis | 1:d3b7bde3995c | 364 | } |
mluis | 1:d3b7bde3995c | 365 | return AESAUX[0]; |
mluis | 0:62d1edcc13d1 | 366 | } |
mluis | 0:62d1edcc13d1 | 367 |