| 1 |
''' |
|---|
| 2 |
pycamellia.py v 0.0 |
|---|
| 3 |
|
|---|
| 4 |
http://omake.accense.com/wiki/PythonCamellia |
|---|
| 5 |
|
|---|
| 6 |
Portions Copyright (c) 2006 by Accense Technology, Inc. |
|---|
| 7 |
on the work to port for Python derived from the Camellia source code |
|---|
| 8 |
distributed as 'camellia-BSD-1.0.tar.gz'. |
|---|
| 9 |
|
|---|
| 10 |
https://info.isl.ntt.co.jp/crypt/eng/camellia/index_s.html |
|---|
| 11 |
|
|---|
| 12 |
Copyright (c) 2006 |
|---|
| 13 |
NTT (Nippon Telegraph and Telephone Corporation) . All rights reserved. |
|---|
| 14 |
|
|---|
| 15 |
Redistribution and use in source and binary forms, with or without |
|---|
| 16 |
modification, are permitted provided that the following conditions |
|---|
| 17 |
are met: |
|---|
| 18 |
1. Redistributions of source code must retain the above copyright |
|---|
| 19 |
notice, this list of conditions and the following disclaimer as |
|---|
| 20 |
the first lines of this file unmodified. |
|---|
| 21 |
2. Redistributions in binary form must reproduce the above copyright |
|---|
| 22 |
notice, this list of conditions and the following disclaimer in the |
|---|
| 23 |
documentation and/or other materials provided with the distribution. |
|---|
| 24 |
|
|---|
| 25 |
THIS SOFTWARE IS PROVIDED BY NTT ``AS IS'' AND ANY EXPRESS OR |
|---|
| 26 |
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
|---|
| 27 |
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
|---|
| 28 |
IN NO EVENT SHALL NTT BE LIABLE FOR ANY DIRECT, INDIRECT, |
|---|
| 29 |
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
|---|
| 30 |
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
|---|
| 31 |
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
|---|
| 32 |
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
|---|
| 33 |
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
|---|
| 34 |
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
|---|
| 35 |
''' |
|---|
| 36 |
|
|---|
| 37 |
__all__ = ['Ekeygen', 'EncryptBlock', 'DecryptBlock'] |
|---|
| 38 |
|
|---|
| 39 |
|
|---|
| 40 |
|
|---|
| 41 |
|
|---|
| 42 |
SBOX1_1110 = ( |
|---|
| 43 |
0x70707000L, 0x82828200L, 0x2c2c2c00L, 0xececec00L, 0xb3b3b300L, 0x27272700L, |
|---|
| 44 |
0xc0c0c000L, 0xe5e5e500L, 0xe4e4e400L, 0x85858500L, 0x57575700L, 0x35353500L, |
|---|
| 45 |
0xeaeaea00L, 0x0c0c0c00L, 0xaeaeae00L, 0x41414100L, 0x23232300L, 0xefefef00L, |
|---|
| 46 |
0x6b6b6b00L, 0x93939300L, 0x45454500L, 0x19191900L, 0xa5a5a500L, 0x21212100L, |
|---|
| 47 |
0xededed00L, 0x0e0e0e00L, 0x4f4f4f00L, 0x4e4e4e00L, 0x1d1d1d00L, 0x65656500L, |
|---|
| 48 |
0x92929200L, 0xbdbdbd00L, 0x86868600L, 0xb8b8b800L, 0xafafaf00L, 0x8f8f8f00L, |
|---|
| 49 |
0x7c7c7c00L, 0xebebeb00L, 0x1f1f1f00L, 0xcecece00L, 0x3e3e3e00L, 0x30303000L, |
|---|
| 50 |
0xdcdcdc00L, 0x5f5f5f00L, 0x5e5e5e00L, 0xc5c5c500L, 0x0b0b0b00L, 0x1a1a1a00L, |
|---|
| 51 |
0xa6a6a600L, 0xe1e1e100L, 0x39393900L, 0xcacaca00L, 0xd5d5d500L, 0x47474700L, |
|---|
| 52 |
0x5d5d5d00L, 0x3d3d3d00L, 0xd9d9d900L, 0x01010100L, 0x5a5a5a00L, 0xd6d6d600L, |
|---|
| 53 |
0x51515100L, 0x56565600L, 0x6c6c6c00L, 0x4d4d4d00L, 0x8b8b8b00L, 0x0d0d0d00L, |
|---|
| 54 |
0x9a9a9a00L, 0x66666600L, 0xfbfbfb00L, 0xcccccc00L, 0xb0b0b000L, 0x2d2d2d00L, |
|---|
| 55 |
0x74747400L, 0x12121200L, 0x2b2b2b00L, 0x20202000L, 0xf0f0f000L, 0xb1b1b100L, |
|---|
| 56 |
0x84848400L, 0x99999900L, 0xdfdfdf00L, 0x4c4c4c00L, 0xcbcbcb00L, 0xc2c2c200L, |
|---|
| 57 |
0x34343400L, 0x7e7e7e00L, 0x76767600L, 0x05050500L, 0x6d6d6d00L, 0xb7b7b700L, |
|---|
| 58 |
0xa9a9a900L, 0x31313100L, 0xd1d1d100L, 0x17171700L, 0x04040400L, 0xd7d7d700L, |
|---|
| 59 |
0x14141400L, 0x58585800L, 0x3a3a3a00L, 0x61616100L, 0xdedede00L, 0x1b1b1b00L, |
|---|
| 60 |
0x11111100L, 0x1c1c1c00L, 0x32323200L, 0x0f0f0f00L, 0x9c9c9c00L, 0x16161600L, |
|---|
| 61 |
0x53535300L, 0x18181800L, 0xf2f2f200L, 0x22222200L, 0xfefefe00L, 0x44444400L, |
|---|
| 62 |
0xcfcfcf00L, 0xb2b2b200L, 0xc3c3c300L, 0xb5b5b500L, 0x7a7a7a00L, 0x91919100L, |
|---|
| 63 |
0x24242400L, 0x08080800L, 0xe8e8e800L, 0xa8a8a800L, 0x60606000L, 0xfcfcfc00L, |
|---|
| 64 |
0x69696900L, 0x50505000L, 0xaaaaaa00L, 0xd0d0d000L, 0xa0a0a000L, 0x7d7d7d00L, |
|---|
| 65 |
0xa1a1a100L, 0x89898900L, 0x62626200L, 0x97979700L, 0x54545400L, 0x5b5b5b00L, |
|---|
| 66 |
0x1e1e1e00L, 0x95959500L, 0xe0e0e000L, 0xffffff00L, 0x64646400L, 0xd2d2d200L, |
|---|
| 67 |
0x10101000L, 0xc4c4c400L, 0x00000000L, 0x48484800L, 0xa3a3a300L, 0xf7f7f700L, |
|---|
| 68 |
0x75757500L, 0xdbdbdb00L, 0x8a8a8a00L, 0x03030300L, 0xe6e6e600L, 0xdadada00L, |
|---|
| 69 |
0x09090900L, 0x3f3f3f00L, 0xdddddd00L, 0x94949400L, 0x87878700L, 0x5c5c5c00L, |
|---|
| 70 |
0x83838300L, 0x02020200L, 0xcdcdcd00L, 0x4a4a4a00L, 0x90909000L, 0x33333300L, |
|---|
| 71 |
0x73737300L, 0x67676700L, 0xf6f6f600L, 0xf3f3f300L, 0x9d9d9d00L, 0x7f7f7f00L, |
|---|
| 72 |
0xbfbfbf00L, 0xe2e2e200L, 0x52525200L, 0x9b9b9b00L, 0xd8d8d800L, 0x26262600L, |
|---|
| 73 |
0xc8c8c800L, 0x37373700L, 0xc6c6c600L, 0x3b3b3b00L, 0x81818100L, 0x96969600L, |
|---|
| 74 |
0x6f6f6f00L, 0x4b4b4b00L, 0x13131300L, 0xbebebe00L, 0x63636300L, 0x2e2e2e00L, |
|---|
| 75 |
0xe9e9e900L, 0x79797900L, 0xa7a7a700L, 0x8c8c8c00L, 0x9f9f9f00L, 0x6e6e6e00L, |
|---|
| 76 |
0xbcbcbc00L, 0x8e8e8e00L, 0x29292900L, 0xf5f5f500L, 0xf9f9f900L, 0xb6b6b600L, |
|---|
| 77 |
0x2f2f2f00L, 0xfdfdfd00L, 0xb4b4b400L, 0x59595900L, 0x78787800L, 0x98989800L, |
|---|
| 78 |
0x06060600L, 0x6a6a6a00L, 0xe7e7e700L, 0x46464600L, 0x71717100L, 0xbababa00L, |
|---|
| 79 |
0xd4d4d400L, 0x25252500L, 0xababab00L, 0x42424200L, 0x88888800L, 0xa2a2a200L, |
|---|
| 80 |
0x8d8d8d00L, 0xfafafa00L, 0x72727200L, 0x07070700L, 0xb9b9b900L, 0x55555500L, |
|---|
| 81 |
0xf8f8f800L, 0xeeeeee00L, 0xacacac00L, 0x0a0a0a00L, 0x36363600L, 0x49494900L, |
|---|
| 82 |
0x2a2a2a00L, 0x68686800L, 0x3c3c3c00L, 0x38383800L, 0xf1f1f100L, 0xa4a4a400L, |
|---|
| 83 |
0x40404000L, 0x28282800L, 0xd3d3d300L, 0x7b7b7b00L, 0xbbbbbb00L, 0xc9c9c900L, |
|---|
| 84 |
0x43434300L, 0xc1c1c100L, 0x15151500L, 0xe3e3e300L, 0xadadad00L, 0xf4f4f400L, |
|---|
| 85 |
0x77777700L, 0xc7c7c700L, 0x80808000L, 0x9e9e9e00L |
|---|
| 86 |
) |
|---|
| 87 |
|
|---|
| 88 |
SBOX4_4404 = ( |
|---|
| 89 |
0x70700070L, 0x2c2c002cL, 0xb3b300b3L, 0xc0c000c0L, 0xe4e400e4L, 0x57570057L, |
|---|
| 90 |
0xeaea00eaL, 0xaeae00aeL, 0x23230023L, 0x6b6b006bL, 0x45450045L, 0xa5a500a5L, |
|---|
| 91 |
0xeded00edL, 0x4f4f004fL, 0x1d1d001dL, 0x92920092L, 0x86860086L, 0xafaf00afL, |
|---|
| 92 |
0x7c7c007cL, 0x1f1f001fL, 0x3e3e003eL, 0xdcdc00dcL, 0x5e5e005eL, 0x0b0b000bL, |
|---|
| 93 |
0xa6a600a6L, 0x39390039L, 0xd5d500d5L, 0x5d5d005dL, 0xd9d900d9L, 0x5a5a005aL, |
|---|
| 94 |
0x51510051L, 0x6c6c006cL, 0x8b8b008bL, 0x9a9a009aL, 0xfbfb00fbL, 0xb0b000b0L, |
|---|
| 95 |
0x74740074L, 0x2b2b002bL, 0xf0f000f0L, 0x84840084L, 0xdfdf00dfL, 0xcbcb00cbL, |
|---|
| 96 |
0x34340034L, 0x76760076L, 0x6d6d006dL, 0xa9a900a9L, 0xd1d100d1L, 0x04040004L, |
|---|
| 97 |
0x14140014L, 0x3a3a003aL, 0xdede00deL, 0x11110011L, 0x32320032L, 0x9c9c009cL, |
|---|
| 98 |
0x53530053L, 0xf2f200f2L, 0xfefe00feL, 0xcfcf00cfL, 0xc3c300c3L, 0x7a7a007aL, |
|---|
| 99 |
0x24240024L, 0xe8e800e8L, 0x60600060L, 0x69690069L, 0xaaaa00aaL, 0xa0a000a0L, |
|---|
| 100 |
0xa1a100a1L, 0x62620062L, 0x54540054L, 0x1e1e001eL, 0xe0e000e0L, 0x64640064L, |
|---|
| 101 |
0x10100010L, 0x00000000L, 0xa3a300a3L, 0x75750075L, 0x8a8a008aL, 0xe6e600e6L, |
|---|
| 102 |
0x09090009L, 0xdddd00ddL, 0x87870087L, 0x83830083L, 0xcdcd00cdL, 0x90900090L, |
|---|
| 103 |
0x73730073L, 0xf6f600f6L, 0x9d9d009dL, 0xbfbf00bfL, 0x52520052L, 0xd8d800d8L, |
|---|
| 104 |
0xc8c800c8L, 0xc6c600c6L, 0x81810081L, 0x6f6f006fL, 0x13130013L, 0x63630063L, |
|---|
| 105 |
0xe9e900e9L, 0xa7a700a7L, 0x9f9f009fL, 0xbcbc00bcL, 0x29290029L, 0xf9f900f9L, |
|---|
| 106 |
0x2f2f002fL, 0xb4b400b4L, 0x78780078L, 0x06060006L, 0xe7e700e7L, 0x71710071L, |
|---|
| 107 |
0xd4d400d4L, 0xabab00abL, 0x88880088L, 0x8d8d008dL, 0x72720072L, 0xb9b900b9L, |
|---|
| 108 |
0xf8f800f8L, 0xacac00acL, 0x36360036L, 0x2a2a002aL, 0x3c3c003cL, 0xf1f100f1L, |
|---|
| 109 |
0x40400040L, 0xd3d300d3L, 0xbbbb00bbL, 0x43430043L, 0x15150015L, 0xadad00adL, |
|---|
| 110 |
0x77770077L, 0x80800080L, 0x82820082L, 0xecec00ecL, 0x27270027L, 0xe5e500e5L, |
|---|
| 111 |
0x85850085L, 0x35350035L, 0x0c0c000cL, 0x41410041L, 0xefef00efL, 0x93930093L, |
|---|
| 112 |
0x19190019L, 0x21210021L, 0x0e0e000eL, 0x4e4e004eL, 0x65650065L, 0xbdbd00bdL, |
|---|
| 113 |
0xb8b800b8L, 0x8f8f008fL, 0xebeb00ebL, 0xcece00ceL, 0x30300030L, 0x5f5f005fL, |
|---|
| 114 |
0xc5c500c5L, 0x1a1a001aL, 0xe1e100e1L, 0xcaca00caL, 0x47470047L, 0x3d3d003dL, |
|---|
| 115 |
0x01010001L, 0xd6d600d6L, 0x56560056L, 0x4d4d004dL, 0x0d0d000dL, 0x66660066L, |
|---|
| 116 |
0xcccc00ccL, 0x2d2d002dL, 0x12120012L, 0x20200020L, 0xb1b100b1L, 0x99990099L, |
|---|
| 117 |
0x4c4c004cL, 0xc2c200c2L, 0x7e7e007eL, 0x05050005L, 0xb7b700b7L, 0x31310031L, |
|---|
| 118 |
0x17170017L, 0xd7d700d7L, 0x58580058L, 0x61610061L, 0x1b1b001bL, 0x1c1c001cL, |
|---|
| 119 |
0x0f0f000fL, 0x16160016L, 0x18180018L, 0x22220022L, 0x44440044L, 0xb2b200b2L, |
|---|
| 120 |
0xb5b500b5L, 0x91910091L, 0x08080008L, 0xa8a800a8L, 0xfcfc00fcL, 0x50500050L, |
|---|
| 121 |
0xd0d000d0L, 0x7d7d007dL, 0x89890089L, 0x97970097L, 0x5b5b005bL, 0x95950095L, |
|---|
| 122 |
0xffff00ffL, 0xd2d200d2L, 0xc4c400c4L, 0x48480048L, 0xf7f700f7L, 0xdbdb00dbL, |
|---|
| 123 |
0x03030003L, 0xdada00daL, 0x3f3f003fL, 0x94940094L, 0x5c5c005cL, 0x02020002L, |
|---|
| 124 |
0x4a4a004aL, 0x33330033L, 0x67670067L, 0xf3f300f3L, 0x7f7f007fL, 0xe2e200e2L, |
|---|
| 125 |
0x9b9b009bL, 0x26260026L, 0x37370037L, 0x3b3b003bL, 0x96960096L, 0x4b4b004bL, |
|---|
| 126 |
0xbebe00beL, 0x2e2e002eL, 0x79790079L, 0x8c8c008cL, 0x6e6e006eL, 0x8e8e008eL, |
|---|
| 127 |
0xf5f500f5L, 0xb6b600b6L, 0xfdfd00fdL, 0x59590059L, 0x98980098L, 0x6a6a006aL, |
|---|
| 128 |
0x46460046L, 0xbaba00baL, 0x25250025L, 0x42420042L, 0xa2a200a2L, 0xfafa00faL, |
|---|
| 129 |
0x07070007L, 0x55550055L, 0xeeee00eeL, 0x0a0a000aL, 0x49490049L, 0x68680068L, |
|---|
| 130 |
0x38380038L, 0xa4a400a4L, 0x28280028L, 0x7b7b007bL, 0xc9c900c9L, 0xc1c100c1L, |
|---|
| 131 |
0xe3e300e3L, 0xf4f400f4L, 0xc7c700c7L, 0x9e9e009eL |
|---|
| 132 |
) |
|---|
| 133 |
|
|---|
| 134 |
SBOX2_0222 = ( |
|---|
| 135 |
0x00e0e0e0L, 0x00050505L, 0x00585858L, 0x00d9d9d9L, 0x00676767L, 0x004e4e4eL, |
|---|
| 136 |
0x00818181L, 0x00cbcbcbL, 0x00c9c9c9L, 0x000b0b0bL, 0x00aeaeaeL, 0x006a6a6aL, |
|---|
| 137 |
0x00d5d5d5L, 0x00181818L, 0x005d5d5dL, 0x00828282L, 0x00464646L, 0x00dfdfdfL, |
|---|
| 138 |
0x00d6d6d6L, 0x00272727L, 0x008a8a8aL, 0x00323232L, 0x004b4b4bL, 0x00424242L, |
|---|
| 139 |
0x00dbdbdbL, 0x001c1c1cL, 0x009e9e9eL, 0x009c9c9cL, 0x003a3a3aL, 0x00cacacaL, |
|---|
| 140 |
0x00252525L, 0x007b7b7bL, 0x000d0d0dL, 0x00717171L, 0x005f5f5fL, 0x001f1f1fL, |
|---|
| 141 |
0x00f8f8f8L, 0x00d7d7d7L, 0x003e3e3eL, 0x009d9d9dL, 0x007c7c7cL, 0x00606060L, |
|---|
| 142 |
0x00b9b9b9L, 0x00bebebeL, 0x00bcbcbcL, 0x008b8b8bL, 0x00161616L, 0x00343434L, |
|---|
| 143 |
0x004d4d4dL, 0x00c3c3c3L, 0x00727272L, 0x00959595L, 0x00abababL, 0x008e8e8eL, |
|---|
| 144 |
0x00bababaL, 0x007a7a7aL, 0x00b3b3b3L, 0x00020202L, 0x00b4b4b4L, 0x00adadadL, |
|---|
| 145 |
0x00a2a2a2L, 0x00acacacL, 0x00d8d8d8L, 0x009a9a9aL, 0x00171717L, 0x001a1a1aL, |
|---|
| 146 |
0x00353535L, 0x00ccccccL, 0x00f7f7f7L, 0x00999999L, 0x00616161L, 0x005a5a5aL, |
|---|
| 147 |
0x00e8e8e8L, 0x00242424L, 0x00565656L, 0x00404040L, 0x00e1e1e1L, 0x00636363L, |
|---|
| 148 |
0x00090909L, 0x00333333L, 0x00bfbfbfL, 0x00989898L, 0x00979797L, 0x00858585L, |
|---|
| 149 |
0x00686868L, 0x00fcfcfcL, 0x00ecececL, 0x000a0a0aL, 0x00dadadaL, 0x006f6f6fL, |
|---|
| 150 |
0x00535353L, 0x00626262L, 0x00a3a3a3L, 0x002e2e2eL, 0x00080808L, 0x00afafafL, |
|---|
| 151 |
0x00282828L, 0x00b0b0b0L, 0x00747474L, 0x00c2c2c2L, 0x00bdbdbdL, 0x00363636L, |
|---|
| 152 |
0x00222222L, 0x00383838L, 0x00646464L, 0x001e1e1eL, 0x00393939L, 0x002c2c2cL, |
|---|
| 153 |
0x00a6a6a6L, 0x00303030L, 0x00e5e5e5L, 0x00444444L, 0x00fdfdfdL, 0x00888888L, |
|---|
| 154 |
0x009f9f9fL, 0x00656565L, 0x00878787L, 0x006b6b6bL, 0x00f4f4f4L, 0x00232323L, |
|---|
| 155 |
0x00484848L, 0x00101010L, 0x00d1d1d1L, 0x00515151L, 0x00c0c0c0L, 0x00f9f9f9L, |
|---|
| 156 |
0x00d2d2d2L, 0x00a0a0a0L, 0x00555555L, 0x00a1a1a1L, 0x00414141L, 0x00fafafaL, |
|---|
| 157 |
0x00434343L, 0x00131313L, 0x00c4c4c4L, 0x002f2f2fL, 0x00a8a8a8L, 0x00b6b6b6L, |
|---|
| 158 |
0x003c3c3cL, 0x002b2b2bL, 0x00c1c1c1L, 0x00ffffffL, 0x00c8c8c8L, 0x00a5a5a5L, |
|---|
| 159 |
0x00202020L, 0x00898989L, 0x00000000L, 0x00909090L, 0x00474747L, 0x00efefefL, |
|---|
| 160 |
0x00eaeaeaL, 0x00b7b7b7L, 0x00151515L, 0x00060606L, 0x00cdcdcdL, 0x00b5b5b5L, |
|---|
| 161 |
0x00121212L, 0x007e7e7eL, 0x00bbbbbbL, 0x00292929L, 0x000f0f0fL, 0x00b8b8b8L, |
|---|
| 162 |
0x00070707L, 0x00040404L, 0x009b9b9bL, 0x00949494L, 0x00212121L, 0x00666666L, |
|---|
| 163 |
0x00e6e6e6L, 0x00cececeL, 0x00edededL, 0x00e7e7e7L, 0x003b3b3bL, 0x00fefefeL, |
|---|
| 164 |
0x007f7f7fL, 0x00c5c5c5L, 0x00a4a4a4L, 0x00373737L, 0x00b1b1b1L, 0x004c4c4cL, |
|---|
| 165 |
0x00919191L, 0x006e6e6eL, 0x008d8d8dL, 0x00767676L, 0x00030303L, 0x002d2d2dL, |
|---|
| 166 |
0x00dededeL, 0x00969696L, 0x00262626L, 0x007d7d7dL, 0x00c6c6c6L, 0x005c5c5cL, |
|---|
| 167 |
0x00d3d3d3L, 0x00f2f2f2L, 0x004f4f4fL, 0x00191919L, 0x003f3f3fL, 0x00dcdcdcL, |
|---|
| 168 |
0x00797979L, 0x001d1d1dL, 0x00525252L, 0x00ebebebL, 0x00f3f3f3L, 0x006d6d6dL, |
|---|
| 169 |
0x005e5e5eL, 0x00fbfbfbL, 0x00696969L, 0x00b2b2b2L, 0x00f0f0f0L, 0x00313131L, |
|---|
| 170 |
0x000c0c0cL, 0x00d4d4d4L, 0x00cfcfcfL, 0x008c8c8cL, 0x00e2e2e2L, 0x00757575L, |
|---|
| 171 |
0x00a9a9a9L, 0x004a4a4aL, 0x00575757L, 0x00848484L, 0x00111111L, 0x00454545L, |
|---|
| 172 |
0x001b1b1bL, 0x00f5f5f5L, 0x00e4e4e4L, 0x000e0e0eL, 0x00737373L, 0x00aaaaaaL, |
|---|
| 173 |
0x00f1f1f1L, 0x00ddddddL, 0x00595959L, 0x00141414L, 0x006c6c6cL, 0x00929292L, |
|---|
| 174 |
0x00545454L, 0x00d0d0d0L, 0x00787878L, 0x00707070L, 0x00e3e3e3L, 0x00494949L, |
|---|
| 175 |
0x00808080L, 0x00505050L, 0x00a7a7a7L, 0x00f6f6f6L, 0x00777777L, 0x00939393L, |
|---|
| 176 |
0x00868686L, 0x00838383L, 0x002a2a2aL, 0x00c7c7c7L, 0x005b5b5bL, 0x00e9e9e9L, |
|---|
| 177 |
0x00eeeeeeL, 0x008f8f8fL, 0x00010101L, 0x003d3d3dL |
|---|
| 178 |
) |
|---|
| 179 |
|
|---|
| 180 |
SBOX3_3033 = ( |
|---|
| 181 |
0x38003838L, 0x41004141L, 0x16001616L, 0x76007676L, 0xd900d9d9L, 0x93009393L, |
|---|
| 182 |
0x60006060L, 0xf200f2f2L, 0x72007272L, 0xc200c2c2L, 0xab00ababL, 0x9a009a9aL, |
|---|
| 183 |
0x75007575L, 0x06000606L, 0x57005757L, 0xa000a0a0L, 0x91009191L, 0xf700f7f7L, |
|---|
| 184 |
0xb500b5b5L, 0xc900c9c9L, 0xa200a2a2L, 0x8c008c8cL, 0xd200d2d2L, 0x90009090L, |
|---|
| 185 |
0xf600f6f6L, 0x07000707L, 0xa700a7a7L, 0x27002727L, 0x8e008e8eL, 0xb200b2b2L, |
|---|
| 186 |
0x49004949L, 0xde00dedeL, 0x43004343L, 0x5c005c5cL, 0xd700d7d7L, 0xc700c7c7L, |
|---|
| 187 |
0x3e003e3eL, 0xf500f5f5L, 0x8f008f8fL, 0x67006767L, 0x1f001f1fL, 0x18001818L, |
|---|
| 188 |
0x6e006e6eL, 0xaf00afafL, 0x2f002f2fL, 0xe200e2e2L, 0x85008585L, 0x0d000d0dL, |
|---|
| 189 |
0x53005353L, 0xf000f0f0L, 0x9c009c9cL, 0x65006565L, 0xea00eaeaL, 0xa300a3a3L, |
|---|
| 190 |
0xae00aeaeL, 0x9e009e9eL, 0xec00ececL, 0x80008080L, 0x2d002d2dL, 0x6b006b6bL, |
|---|
| 191 |
0xa800a8a8L, 0x2b002b2bL, 0x36003636L, 0xa600a6a6L, 0xc500c5c5L, 0x86008686L, |
|---|
| 192 |
0x4d004d4dL, 0x33003333L, 0xfd00fdfdL, 0x66006666L, 0x58005858L, 0x96009696L, |
|---|
| 193 |
0x3a003a3aL, 0x09000909L, 0x95009595L, 0x10001010L, 0x78007878L, 0xd800d8d8L, |
|---|
| 194 |
0x42004242L, 0xcc00ccccL, 0xef00efefL, 0x26002626L, 0xe500e5e5L, 0x61006161L, |
|---|
| 195 |
0x1a001a1aL, 0x3f003f3fL, 0x3b003b3bL, 0x82008282L, 0xb600b6b6L, 0xdb00dbdbL, |
|---|
| 196 |
0xd400d4d4L, 0x98009898L, 0xe800e8e8L, 0x8b008b8bL, 0x02000202L, 0xeb00ebebL, |
|---|
| 197 |
0x0a000a0aL, 0x2c002c2cL, 0x1d001d1dL, 0xb000b0b0L, 0x6f006f6fL, 0x8d008d8dL, |
|---|
| 198 |
0x88008888L, 0x0e000e0eL, 0x19001919L, 0x87008787L, 0x4e004e4eL, 0x0b000b0bL, |
|---|
| 199 |
0xa900a9a9L, 0x0c000c0cL, 0x79007979L, 0x11001111L, 0x7f007f7fL, 0x22002222L, |
|---|
| 200 |
0xe700e7e7L, 0x59005959L, 0xe100e1e1L, 0xda00dadaL, 0x3d003d3dL, 0xc800c8c8L, |
|---|
| 201 |
0x12001212L, 0x04000404L, 0x74007474L, 0x54005454L, 0x30003030L, 0x7e007e7eL, |
|---|
| 202 |
0xb400b4b4L, 0x28002828L, 0x55005555L, 0x68006868L, 0x50005050L, 0xbe00bebeL, |
|---|
| 203 |
0xd000d0d0L, 0xc400c4c4L, 0x31003131L, 0xcb00cbcbL, 0x2a002a2aL, 0xad00adadL, |
|---|
| 204 |
0x0f000f0fL, 0xca00cacaL, 0x70007070L, 0xff00ffffL, 0x32003232L, 0x69006969L, |
|---|
| 205 |
0x08000808L, 0x62006262L, 0x00000000L, 0x24002424L, 0xd100d1d1L, 0xfb00fbfbL, |
|---|
| 206 |
0xba00babaL, 0xed00ededL, 0x45004545L, 0x81008181L, 0x73007373L, 0x6d006d6dL, |
|---|
| 207 |
0x84008484L, 0x9f009f9fL, 0xee00eeeeL, 0x4a004a4aL, 0xc300c3c3L, 0x2e002e2eL, |
|---|
| 208 |
0xc100c1c1L, 0x01000101L, 0xe600e6e6L, 0x25002525L, 0x48004848L, 0x99009999L, |
|---|
| 209 |
0xb900b9b9L, 0xb300b3b3L, 0x7b007b7bL, 0xf900f9f9L, 0xce00ceceL, 0xbf00bfbfL, |
|---|
| 210 |
0xdf00dfdfL, 0x71007171L, 0x29002929L, 0xcd00cdcdL, 0x6c006c6cL, 0x13001313L, |
|---|
| 211 |
0x64006464L, 0x9b009b9bL, 0x63006363L, 0x9d009d9dL, 0xc000c0c0L, 0x4b004b4bL, |
|---|
| 212 |
0xb700b7b7L, 0xa500a5a5L, 0x89008989L, 0x5f005f5fL, 0xb100b1b1L, 0x17001717L, |
|---|
| 213 |
0xf400f4f4L, 0xbc00bcbcL, 0xd300d3d3L, 0x46004646L, 0xcf00cfcfL, 0x37003737L, |
|---|
| 214 |
0x5e005e5eL, 0x47004747L, 0x94009494L, 0xfa00fafaL, 0xfc00fcfcL, 0x5b005b5bL, |
|---|
| 215 |
0x97009797L, 0xfe00fefeL, 0x5a005a5aL, 0xac00acacL, 0x3c003c3cL, 0x4c004c4cL, |
|---|
| 216 |
0x03000303L, 0x35003535L, 0xf300f3f3L, 0x23002323L, 0xb800b8b8L, 0x5d005d5dL, |
|---|
| 217 |
0x6a006a6aL, 0x92009292L, 0xd500d5d5L, 0x21002121L, 0x44004444L, 0x51005151L, |
|---|
| 218 |
0xc600c6c6L, 0x7d007d7dL, 0x39003939L, 0x83008383L, 0xdc00dcdcL, 0xaa00aaaaL, |
|---|
| 219 |
0x7c007c7cL, 0x77007777L, 0x56005656L, 0x05000505L, 0x1b001b1bL, 0xa400a4a4L, |
|---|
| 220 |
0x15001515L, 0x34003434L, 0x1e001e1eL, 0x1c001c1cL, 0xf800f8f8L, 0x52005252L, |
|---|
| 221 |
0x20002020L, 0x14001414L, 0xe900e9e9L, 0xbd00bdbdL, 0xdd00ddddL, 0xe400e4e4L, |
|---|
| 222 |
0xa100a1a1L, 0xe000e0e0L, 0x8a008a8aL, 0xf100f1f1L, 0xd600d6d6L, 0x7a007a7aL, |
|---|
| 223 |
0xbb00bbbbL, 0xe300e3e3L, 0x40004040L, 0x4f004f4fL |
|---|
| 224 |
) |
|---|
| 225 |
|
|---|
| 226 |
|
|---|
| 227 |
|
|---|
| 228 |
SIGMA1 = ( 0xa09e667fL, 0x3bcc908bL, 0xb67ae858L, 0x4caa73b2L ) |
|---|
| 229 |
SIGMA2 = ( 0xc6ef372fL, 0xe94f82beL, 0x54ff53a5L, 0xf1d36f1cL ) |
|---|
| 230 |
SIGMA3 = ( 0x10e527faL, 0xde682d1dL, 0xb05688c2L, 0xb3e6c1fdL ) |
|---|
| 231 |
|
|---|
| 232 |
|
|---|
| 233 |
|
|---|
| 234 |
def rightRotate8(x): |
|---|
| 235 |
return ((x >> 8) | (x << 24)) % 0x100000000 |
|---|
| 236 |
|
|---|
| 237 |
|
|---|
| 238 |
def leftRotate1(x): |
|---|
| 239 |
return ((x << 1) | (x >> 31)) % 0x100000000 |
|---|
| 240 |
|
|---|
| 241 |
def feistel1(x, k): |
|---|
| 242 |
s = x[0] ^ k[0] |
|---|
| 243 |
U = SBOX4_4404[ s & 0x000000ff] |
|---|
| 244 |
U ^= SBOX3_3033[(s >> 8) & 0x000000ff] |
|---|
| 245 |
U ^= SBOX2_0222[(s >> 16) & 0x000000ff] |
|---|
| 246 |
U ^= SBOX1_1110[(s >> 24) & 0x000000ff] |
|---|
| 247 |
|
|---|
| 248 |
s = x[1] ^ k[1] |
|---|
| 249 |
D = SBOX1_1110[ s & 0x000000ff] |
|---|
| 250 |
D ^= SBOX4_4404[(s >> 8) & 0x000000ff] |
|---|
| 251 |
D ^= SBOX3_3033[(s >> 16) & 0x000000ff] |
|---|
| 252 |
D ^= SBOX2_0222[(s >> 24) & 0x000000ff] |
|---|
| 253 |
|
|---|
| 254 |
x[2] ^= D ^ U |
|---|
| 255 |
x[3] ^= D ^ U ^ rightRotate8(U) |
|---|
| 256 |
|
|---|
| 257 |
s = x[2] ^ k[2] |
|---|
| 258 |
U = SBOX4_4404[ s & 0x000000ff] |
|---|
| 259 |
U ^= SBOX3_3033[(s >> 8) & 0x000000ff] |
|---|
| 260 |
U ^= SBOX2_0222[(s >> 16) & 0x000000ff] |
|---|
| 261 |
U ^= SBOX1_1110[(s >> 24) & 0x000000ff] |
|---|
| 262 |
|
|---|
| 263 |
s = x[3] ^ k[3] |
|---|
| 264 |
D = SBOX1_1110[ s & 0x000000ff] |
|---|
| 265 |
D ^= SBOX4_4404[(s >> 8) & 0x000000ff] |
|---|
| 266 |
D ^= SBOX3_3033[(s >> 16) & 0x000000ff] |
|---|
| 267 |
D ^= SBOX2_0222[(s >> 24) & 0x000000ff] |
|---|
| 268 |
|
|---|
| 269 |
x[0] ^= D ^ U |
|---|
| 270 |
x[1] ^= D ^ U ^ rightRotate8(U) |
|---|
| 271 |
|
|---|
| 272 |
def feistel2(x, k): |
|---|
| 273 |
s = x[0] ^ k[2] |
|---|
| 274 |
U = SBOX4_4404[ s & 0x000000ff] |
|---|
| 275 |
U ^= SBOX3_3033[(s >> 8) & 0x000000ff] |
|---|
| 276 |
U ^= SBOX2_0222[(s >> 16) & 0x000000ff] |
|---|
| 277 |
U ^= SBOX1_1110[(s >> 24) & 0x000000ff] |
|---|
| 278 |
|
|---|
| 279 |
s = x[1] ^ k[3] |
|---|
| 280 |
D = SBOX1_1110[ s & 0x000000ff] |
|---|
| 281 |
D ^= SBOX4_4404[(s >> 8) & 0x000000ff] |
|---|
| 282 |
D ^= SBOX3_3033[(s >> 16) & 0x000000ff] |
|---|
| 283 |
D ^= SBOX2_0222[(s >> 24) & 0x000000ff] |
|---|
| 284 |
|
|---|
| 285 |
x[2] ^= D ^ U |
|---|
| 286 |
x[3] ^= D ^ U ^ rightRotate8(U) |
|---|
| 287 |
|
|---|
| 288 |
s = x[2] ^ k[0] |
|---|
| 289 |
U = SBOX4_4404[ s & 0x000000ff] |
|---|
| 290 |
U ^= SBOX3_3033[(s >> 8) & 0x000000ff] |
|---|
| 291 |
U ^= SBOX2_0222[(s >> 16) & 0x000000ff] |
|---|
| 292 |
U ^= SBOX1_1110[(s >> 24) & 0x000000ff] |
|---|
| 293 |
|
|---|
| 294 |
s = x[3] ^ k[1] |
|---|
| 295 |
D = SBOX1_1110[ s & 0x000000ff] |
|---|
| 296 |
D ^= SBOX4_4404[(s >> 8) & 0x000000ff] |
|---|
| 297 |
D ^= SBOX3_3033[(s >> 16) & 0x000000ff] |
|---|
| 298 |
D ^= SBOX2_0222[(s >> 24) & 0x000000ff] |
|---|
| 299 |
|
|---|
| 300 |
x[0] ^= D ^ U |
|---|
| 301 |
x[1] ^= D ^ U ^ rightRotate8(U) |
|---|
| 302 |
|
|---|
| 303 |
|
|---|
| 304 |
import struct |
|---|
| 305 |
|
|---|
| 306 |
|
|---|
| 307 |
def Ekeygen(rawKey): |
|---|
| 308 |
'''Ekeygen(rawKey) |
|---|
| 309 |
|
|---|
| 310 |
rawKey: string; 16 or 24 or 32 character length |
|---|
| 311 |
returns: keyTable''' |
|---|
| 312 |
|
|---|
| 313 |
def rot(x, n): |
|---|
| 314 |
(idx, r) = divmod(n, 0x20) |
|---|
| 315 |
idx1 = (idx + 1) & 0x03 |
|---|
| 316 |
idx2 = (idx1 + 1) & 0x03 |
|---|
| 317 |
return [ |
|---|
| 318 |
((x[idx ] << r) | (x[idx1] >> (32 - r))) % 0x100000000, |
|---|
| 319 |
((x[idx1] << r) | (x[idx2] >> (32 - r))) % 0x100000000] |
|---|
| 320 |
|
|---|
| 321 |
keyLength = len(rawKey) |
|---|
| 322 |
if keyLength == 16: |
|---|
| 323 |
t = struct.unpack('!IIII', rawKey) |
|---|
| 324 |
u = (0, 0, 0, 0) |
|---|
| 325 |
elif keyLength == 24: |
|---|
| 326 |
t = struct.unpack('!IIIIII', rawKey) |
|---|
| 327 |
(t, u) = (t[0:4], t[4:6]) |
|---|
| 328 |
u = u + (~u[0] % 0x100000000, ~u[1] % 0x100000000) |
|---|
| 329 |
elif keyLength == 32: |
|---|
| 330 |
t = struct.unpack('!IIIIIIII', rawKey) |
|---|
| 331 |
(t, u) = (t[0:4], t[4:8]) |
|---|
| 332 |
else: |
|---|
| 333 |
raise ValueError, 'rawKey must be 16, 24 or 32 characters length.' |
|---|
| 334 |
|
|---|
| 335 |
if keyLength == 16: |
|---|
| 336 |
v = list(t) |
|---|
| 337 |
feistel1(v, SIGMA1) |
|---|
| 338 |
v = map(lambda a,b:a^b, v, t) |
|---|
| 339 |
feistel1(v, SIGMA2) |
|---|
| 340 |
t = list(t) |
|---|
| 341 |
t += v |
|---|
| 342 |
t += rot(t, 15) |
|---|
| 343 |
t += rot(t, 79) |
|---|
| 344 |
t += rot(v, 15) |
|---|
| 345 |
t += rot(v, 79) |
|---|
| 346 |
t += rot(v, 30) |
|---|
| 347 |
t += rot(v, 94) |
|---|
| 348 |
t += rot(t, 45) |
|---|
| 349 |
t += rot(t, 109) |
|---|
| 350 |
t += rot(v, 45) |
|---|
| 351 |
t += rot(t, 124) |
|---|
| 352 |
t += rot(v, 60) |
|---|
| 353 |
t += rot(v, 124) |
|---|
| 354 |
t += rot(t, 77) |
|---|
| 355 |
t += rot(t, 13) |
|---|
| 356 |
t += rot(t, 94) |
|---|
| 357 |
t += rot(t, 30) |
|---|
| 358 |
t += rot(v, 94) |
|---|
| 359 |
t += rot(v, 30) |
|---|
| 360 |
t += rot(t, 111) |
|---|
| 361 |
t += rot(t, 47) |
|---|
| 362 |
t += rot(v, 111) |
|---|
| 363 |
t += rot(v, 47) |
|---|
| 364 |
return tuple(t) |
|---|
| 365 |
|
|---|
| 366 |
else: |
|---|
| 367 |
v = map(lambda a,b:a^b, t, u) |
|---|
| 368 |
feistel1(v, SIGMA1) |
|---|
| 369 |
v = map(lambda a,b:a^b, v, t) |
|---|
| 370 |
feistel1(v, SIGMA2) |
|---|
| 371 |
w = map(lambda a,b:a^b, u, v) |
|---|
| 372 |
feistel1(w, SIGMA3) |
|---|
| 373 |
t = list(t) |
|---|
| 374 |
t += w |
|---|
| 375 |
t += rot(u, 15) |
|---|
| 376 |
t += rot(u, 79) |
|---|
| 377 |
t += rot(v, 15) |
|---|
| 378 |
t += rot(v, 79) |
|---|
| 379 |
t += rot(u, 30) |
|---|
| 380 |
t += rot(u, 94) |
|---|
| 381 |
t += rot(w, 30) |
|---|
| 382 |
t += rot(w, 94) |
|---|
| 383 |
t += rot(t, 45) |
|---|
| 384 |
t += rot(t, 109) |
|---|
| 385 |
t += rot(v, 45) |
|---|
| 386 |
t += rot(v, 109) |
|---|
| 387 |
t += rot(t, 60) |
|---|
| 388 |
t += rot(t, 124) |
|---|
| 389 |
t += rot(u, 60) |
|---|
| 390 |
t += rot(u, 124) |
|---|
| 391 |
t += rot(w, 60) |
|---|
| 392 |
t += rot(w, 124) |
|---|
| 393 |
t += rot(t, 77) |
|---|
| 394 |
t += rot(t, 13) |
|---|
| 395 |
t += rot(v, 77) |
|---|
| 396 |
t += rot(v, 13) |
|---|
| 397 |
t += rot(u, 94) |
|---|
| 398 |
t += rot(u, 30) |
|---|
| 399 |
t += rot(v, 94) |
|---|
| 400 |
t += rot(v, 30) |
|---|
| 401 |
t += rot(t, 111) |
|---|
| 402 |
t += rot(t, 47) |
|---|
| 403 |
t += rot(w, 111) |
|---|
| 404 |
t += rot(w, 47) |
|---|
| 405 |
return tuple(t) |
|---|
| 406 |
|
|---|
| 407 |
return keyTable |
|---|
| 408 |
|
|---|
| 409 |
|
|---|
| 410 |
def EncryptBlock(plainText, keyTable): |
|---|
| 411 |
'''EncryptBlock(plainText, keyTable) |
|---|
| 412 |
|
|---|
| 413 |
plainText: string; plain text 16 characters |
|---|
| 414 |
keyTable: key generated by Ekeygen() |
|---|
| 415 |
returns: string; chipher text 16 characters''' |
|---|
| 416 |
|
|---|
| 417 |
t = list(struct.unpack('!IIII', plainText)) |
|---|
| 418 |
t = map(lambda a,b:a^b, t, keyTable[0:4]) |
|---|
| 419 |
|
|---|
| 420 |
feistel1(t, keyTable[4:8]) |
|---|
| 421 |
feistel1(t, keyTable[8:12]) |
|---|
| 422 |
feistel1(t, keyTable[12:16]) |
|---|
| 423 |
t[1] ^= leftRotate1(t[0] & keyTable[16]) |
|---|
| 424 |
t[0] ^= t[1] | keyTable[17] |
|---|
| 425 |
t[2] ^= t[3] | keyTable[19] |
|---|
| 426 |
t[3] ^= leftRotate1(t[2] & keyTable[18]) |
|---|
| 427 |
feistel1(t, keyTable[20:24]) |
|---|
| 428 |
feistel1(t, keyTable[24:28]) |
|---|
| 429 |
feistel1(t, keyTable[28:32]) |
|---|
| 430 |
t[1] ^= leftRotate1(t[0] & keyTable[32]) |
|---|
| 431 |
t[0] ^= t[1] | keyTable[33] |
|---|
| 432 |
t[2] ^= t[3] | keyTable[35] |
|---|
| 433 |
t[3] ^= leftRotate1(t[2] & keyTable[34]) |
|---|
| 434 |
feistel1(t, keyTable[36:40]) |
|---|
| 435 |
feistel1(t, keyTable[40:44]) |
|---|
| 436 |
feistel1(t, keyTable[44:48]) |
|---|
| 437 |
|
|---|
| 438 |
if len(keyTable) == 52: |
|---|
| 439 |
|
|---|
| 440 |
t = map(lambda a,b:a^b, (t[2], t[3], t[0], t[1]), keyTable[48:52]) |
|---|
| 441 |
else: |
|---|
| 442 |
|
|---|
| 443 |
t[1] ^= leftRotate1(t[0] & keyTable[48]) |
|---|
| 444 |
t[0] ^= t[1] | keyTable[49] |
|---|
| 445 |
t[2] ^= t[3] | keyTable[51] |
|---|
| 446 |
t[3] ^= leftRotate1(t[2] & keyTable[50]) |
|---|
| 447 |
feistel1(t, keyTable[52:56]) |
|---|
| 448 |
feistel1(t, keyTable[56:60]) |
|---|
| 449 |
feistel1(t, keyTable[60:64]) |
|---|
| 450 |
t = map(lambda a,b:a^b, (t[2], t[3], t[0], t[1]), keyTable[64:68]) |
|---|
| 451 |
|
|---|
| 452 |
return struct.pack('!IIII', *t) |
|---|
| 453 |
|
|---|
| 454 |
|
|---|
| 455 |
def DecryptBlock(cipherText, keyTable): |
|---|
| 456 |
'''EncryptBlock(plainText, keyTable) |
|---|
| 457 |
|
|---|
| 458 |
cipherText: string; cipher text 16 characters |
|---|
| 459 |
keyTable: key generated by Ekeygen() |
|---|
| 460 |
returns: string; plain text 16 characters''' |
|---|
| 461 |
|
|---|
| 462 |
t = list(struct.unpack('!IIII', cipherText)) |
|---|
| 463 |
|
|---|
| 464 |
if len(keyTable) == 52: |
|---|
| 465 |
|
|---|
| 466 |
t = map(lambda a,b:a^b, t, keyTable[48:52]) |
|---|
| 467 |
else: |
|---|
| 468 |
|
|---|
| 469 |
t = map(lambda a,b:a^b, t, keyTable[64:68]) |
|---|
| 470 |
feistel2(t, keyTable[60:64]) |
|---|
| 471 |
feistel2(t, keyTable[56:60]) |
|---|
| 472 |
feistel2(t, keyTable[52:56]) |
|---|
| 473 |
t[1] ^= leftRotate1(t[0] & keyTable[50]) |
|---|
| 474 |
t[0] ^= t[1] | keyTable[51] |
|---|
| 475 |
t[2] ^= t[3] | keyTable[49] |
|---|
| 476 |
t[3] ^= leftRotate1(t[2] & keyTable[48]) |
|---|
| 477 |
|
|---|
| 478 |
feistel2(t, keyTable[44:48]) |
|---|
| 479 |
feistel2(t, keyTable[40:44]) |
|---|
| 480 |
feistel2(t, keyTable[36:40]) |
|---|
| 481 |
t[1] ^= leftRotate1(t[0] & keyTable[34]) |
|---|
| 482 |
t[0] ^= t[1] | keyTable[35] |
|---|
| 483 |
t[2] ^= t[3] | keyTable[33] |
|---|
| 484 |
t[3] ^= leftRotate1(t[2] & keyTable[32]) |
|---|
| 485 |
feistel2(t, keyTable[28:32]) |
|---|
| 486 |
feistel2(t, keyTable[24:28]) |
|---|
| 487 |
feistel2(t, keyTable[20:24]) |
|---|
| 488 |
t[1] ^= leftRotate1(t[0] & keyTable[18]) |
|---|
| 489 |
t[0] ^= t[1] | keyTable[19] |
|---|
| 490 |
t[2] ^= t[3] | keyTable[17] |
|---|
| 491 |
t[3] ^= leftRotate1(t[2] & keyTable[16]) |
|---|
| 492 |
feistel2(t, keyTable[12:16]) |
|---|
| 493 |
feistel2(t, keyTable[8:12]) |
|---|
| 494 |
feistel2(t, keyTable[4:8]) |
|---|
| 495 |
|
|---|
| 496 |
t = map(lambda a,b:a^b, (t[2], t[3], t[0], t[1]), keyTable[0:4]) |
|---|
| 497 |
return struct.pack('!IIII', *t) |
|---|
| 498 |
|
|---|
| 499 |
|
|---|
| 500 |
if __name__ == '__main__': |
|---|
| 501 |
key128 = Ekeygen("0123456789abcdef") |
|---|
| 502 |
key192 = Ekeygen("0123456789abcdef01234567") |
|---|
| 503 |
key256 = Ekeygen("0123456789abcdef0123456789abcdef") |
|---|
| 504 |
|
|---|
| 505 |
plain = "0123456789abcdef" |
|---|
| 506 |
enc128 = EncryptBlock(plain, key128) |
|---|
| 507 |
dec128 = DecryptBlock(enc128, key128) |
|---|
| 508 |
enc192 = EncryptBlock(plain, key192) |
|---|
| 509 |
dec192 = DecryptBlock(enc192, key192) |
|---|
| 510 |
enc256 = EncryptBlock(plain, key256) |
|---|
| 511 |
dec256 = DecryptBlock(enc256, key256) |
|---|
| 512 |
|
|---|
| 513 |
assert key128 == ( |
|---|
| 514 |
0x30313233L, 0x34353637L, 0x38396162L, 0x63646566L, |
|---|
| 515 |
0xbee4aba3L, 0x77ee43c1L, 0xd3b3f232L, 0xb7a1096bL, |
|---|
| 516 |
0x99199a1aL, 0x9b1b9c1cL, 0xb0b131b2L, 0x32b31818L, |
|---|
| 517 |
0x55d1bbf7L, 0x21e0e9d9L, 0xf9195bd0L, 0x84b5df72L, |
|---|
| 518 |
0xddfb90f0L, 0x74ecfc8cL, 0xade8425aL, 0xefb92ae8L, |
|---|
| 519 |
0xa6c6e707L, 0x2c2c4c6cL, 0x8cacc606L, 0x26466686L, |
|---|
| 520 |
0xc8783a76L, 0x7e4656f4L, 0x63031323L, 0x33435363L, |
|---|
| 521 |
0x1d3b3f23L, 0x2b7a1096L, 0xbbee4abaL, 0x377ee43cL, |
|---|
| 522 |
0x2c2c4c6cL, 0x8cacc606L, 0x26466686L, 0xa6c6e707L, |
|---|
| 523 |
0x98d91959L, 0x8c0c4c8cL, 0xcd0d4d8dL, 0xce0e5858L, |
|---|
| 524 |
0xade8425aL, 0xefb92ae8L, 0xddfb90f0L, 0x74ecfc8cL, |
|---|
| 525 |
0x32b31818L, 0x99199a1aL, 0x9b1b9c1cL, 0xb0b131b2L, |
|---|
| 526 |
0x84b5df72L, 0x55d1bbf7L, 0x21e0e9d9L, 0xf9195bd0L ) |
|---|
| 527 |
|
|---|
| 528 |
assert key192 == ( |
|---|
| 529 |
0x30313233L, 0x34353637L, 0x38396162L, 0x63646566L, |
|---|
| 530 |
0xfd057652L, 0xc26e4ca4L, 0x0af90b80L, 0x390ad47bL, |
|---|
| 531 |
0x99199a1aL, 0x9b1be7e7L, 0x66e665e5L, 0x64e41818L, |
|---|
| 532 |
0x8822fe51L, 0x12d1bd00L, 0xa155e71eL, 0xefc78edeL, |
|---|
| 533 |
0xcd0d4d8dL, 0xf3f3b373L, 0x32f2b272L, 0x0c0c4c8cL, |
|---|
| 534 |
0xb09b9329L, 0x02be42e0L, 0x0e42b51eL, 0xff415d94L, |
|---|
| 535 |
0xa6c6e707L, 0x2c2c4c6cL, 0x8cacc606L, 0x26466686L, |
|---|
| 536 |
0x44b46f40L, 0x285579c7L, 0xbbf1e3b7L, 0xa208bf94L, |
|---|
| 537 |
0x73839616L, 0x26364656L, 0x63031323L, 0x33435363L, |
|---|
| 538 |
0x7cfcecdcL, 0xccbcac9cL, 0x83031323L, 0x33435363L, |
|---|
| 539 |
0x40af90b8L, 0x0390ad47L, 0xbfd05765L, 0x2c26e4caL, |
|---|
| 540 |
0x2c2c4c6cL, 0x8cacc606L, 0x26466686L, 0xa6c6e707L, |
|---|
| 541 |
0x285579c7L, 0xbbf1e3b7L, 0xa208bf94L, 0x44b46f40L, |
|---|
| 542 |
0x32f2b272L, 0x0c0c4c8cL, 0xcd0d4d8dL, 0xf3f3b373L, |
|---|
| 543 |
0xf38f77e3L, 0xc76f4411L, 0x7f288968L, 0xde8050aaL, |
|---|
| 544 |
0x32b31818L, 0x99199a1aL, 0x9b1b9c1cL, 0xb0b131b2L, |
|---|
| 545 |
0x6a3dfe82L, 0xbb296137L, 0x2652057cL, 0x85c01c85L ) |
|---|
| 546 |
|
|---|
| 547 |
assert key256 == ( |
|---|
| 548 |
0x30313233L, 0x34353637L, 0x38396162L, 0x63646566L, |
|---|
| 549 |
0xb9eec79aL, 0x34da1bd7L, 0xe220590fL, 0x57ba15c5L, |
|---|
| 550 |
0x99199a1aL, 0x9b1b9c1cL, 0xb0b131b2L, 0x32b31818L, |
|---|
| 551 |
0xa35ab48cL, 0x3dc7f437L, 0x5a6a652fL, 0x6920413aL, |
|---|
| 552 |
0xcd0d4d8dL, 0xce0e5858L, 0x98d91959L, 0x8c0c4c8cL, |
|---|
| 553 |
0x8d3686f5L, 0xf8881643L, 0xd5ee8571L, 0x6e7bb1e6L, |
|---|
| 554 |
0xa6c6e707L, 0x2c2c4c6cL, 0x8cacc606L, 0x26466686L, |
|---|
| 555 |
0x0f71fd0dL, 0xd69a994bL, 0xda48104eL, 0xa8d6ad23L, |
|---|
| 556 |
0x73839616L, 0x26364656L, 0x63031323L, 0x33435363L, |
|---|
| 557 |
0x73839616L, 0x26364656L, 0x63031323L, 0x33435363L, |
|---|
| 558 |
0x7e220590L, 0xf57ba15cL, 0x5b9eec79L, 0xa34da1bdL, |
|---|
| 559 |
0x2c2c4c6cL, 0x8cacc606L, 0x26466686L, 0xa6c6e707L, |
|---|
| 560 |
0xd69a994bL, 0xda48104eL, 0xa8d6ad23L, 0x0f71fd0dL, |
|---|
| 561 |
0x98d91959L, 0x8c0c4c8cL, 0xcd0d4d8dL, 0xce0e5858L, |
|---|
| 562 |
0x3297b490L, 0x209d51adL, 0x5a461ee3L, 0xfa1bad35L, |
|---|
| 563 |
0x32b31818L, 0x99199a1aL, 0x9b1b9c1cL, 0xb0b131b2L, |
|---|
| 564 |
0x0ae2dcf7L, 0x63cd1a6dL, 0x0debf110L, 0x2c87abddL ) |
|---|
| 565 |
|
|---|
| 566 |
assert enc128 == 'jr\xa9\x8b\x8a\x1d\x96f\xe8\x05\x98ot\x04tS' |
|---|
| 567 |
assert enc192 == '\xbd\x91\xe2\x05\x10W\xb0\xa2EA\xefJ5\x04\x95\xed' |
|---|
| 568 |
assert enc256 == '\xe1\xab\x1b\xa6\xa1x:\xff\xd4\x18\xb4y\xe5\xba\x9a\xf9' |
|---|
| 569 |
|
|---|
| 570 |
assert dec128 == plain |
|---|
| 571 |
assert dec192 == plain |
|---|
| 572 |
assert dec256 == plain |
|---|
| 573 |
|
|---|
| 574 |
print 'basic test ok' |
|---|