Changeset 4458:6a9a587d42d9 in roaraudio
- Timestamp:
- 10/10/10 06:00:30 (14 years ago)
- Branch:
- default
- Phase:
- public
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
include/libroar/hash_tiger.h
r4457 r4458 39 39 #include "libroar.h" 40 40 41 struct roar_hash_tiger { 42 uint64_t a, b, c; 43 char inbuf[64]; 44 size_t inlen; 45 size_t blocks; 46 int is_final; 47 }; 48 49 int roar_hash_tiger_init(struct roar_hash_tiger * state); 50 int roar_hash_tiger_uninit(struct roar_hash_tiger * state); 51 52 int roar_hash_tiger_init_from_pstate(struct roar_hash_tiger * state, void * oldstate); 53 int roar_hash_tiger_to_pstate(struct roar_hash_tiger * state, void * newstate, size_t * len); 54 ssize_t roar_hash_tiger_statelen(struct roar_hash_tiger * state); 55 56 int roar_hash_tiger_finalize(struct roar_hash_tiger * state); 57 int roar_hash_tiger_get_digest(struct roar_hash_tiger * state, void * digest, size_t * len); 58 59 int roar_hash_tiger_proc_block(struct roar_hash_tiger * state, void * block); 60 ssize_t roar_hash_tiger_blocklen(struct roar_hash_tiger * state); 61 62 int roar_hash_tiger_proc(struct roar_hash_tiger * state, void * data, size_t len); 63 41 64 #endif 42 65 -
libroar/hash_tiger.c
r4457 r4458 36 36 #include "libroar.h" 37 37 38 #define STATE_LEN (3*8) 39 #define DIGEST_LEN STATE_LEN 40 #define BLOCK_LEN (64) 41 42 static uint64_t table[4*256] = { 43 0x02AAB17CF7E90C5ELLU /* 0 */, 0xAC424B03E243A8ECLLU /* 1 */, 44 0x72CD5BE30DD5FCD3LLU /* 2 */, 0x6D019B93F6F97F3ALLU /* 3 */, 45 0xCD9978FFD21F9193LLU /* 4 */, 0x7573A1C9708029E2LLU /* 5 */, 46 0xB164326B922A83C3LLU /* 6 */, 0x46883EEE04915870LLU /* 7 */, 47 0xEAACE3057103ECE6LLU /* 8 */, 0xC54169B808A3535CLLU /* 9 */, 48 0x4CE754918DDEC47CLLU /* 10 */, 0x0AA2F4DFDC0DF40CLLU /* 11 */, 49 0x10B76F18A74DBEFALLU /* 12 */, 0xC6CCB6235AD1AB6ALLU /* 13 */, 50 0x13726121572FE2FFLLU /* 14 */, 0x1A488C6F199D921ELLU /* 15 */, 51 0x4BC9F9F4DA0007CALLU /* 16 */, 0x26F5E6F6E85241C7LLU /* 17 */, 52 0x859079DBEA5947B6LLU /* 18 */, 0x4F1885C5C99E8C92LLU /* 19 */, 53 0xD78E761EA96F864BLLU /* 20 */, 0x8E36428C52B5C17DLLU /* 21 */, 54 0x69CF6827373063C1LLU /* 22 */, 0xB607C93D9BB4C56ELLU /* 23 */, 55 0x7D820E760E76B5EALLU /* 24 */, 0x645C9CC6F07FDC42LLU /* 25 */, 56 0xBF38A078243342E0LLU /* 26 */, 0x5F6B343C9D2E7D04LLU /* 27 */, 57 0xF2C28AEB600B0EC6LLU /* 28 */, 0x6C0ED85F7254BCACLLU /* 29 */, 58 0x71592281A4DB4FE5LLU /* 30 */, 0x1967FA69CE0FED9FLLU /* 31 */, 59 0xFD5293F8B96545DBLLU /* 32 */, 0xC879E9D7F2A7600BLLU /* 33 */, 60 0x860248920193194ELLU /* 34 */, 0xA4F9533B2D9CC0B3LLU /* 35 */, 61 0x9053836C15957613LLU /* 36 */, 0xDB6DCF8AFC357BF1LLU /* 37 */, 62 0x18BEEA7A7A370F57LLU /* 38 */, 0x037117CA50B99066LLU /* 39 */, 63 0x6AB30A9774424A35LLU /* 40 */, 0xF4E92F02E325249BLLU /* 41 */, 64 0x7739DB07061CCAE1LLU /* 42 */, 0xD8F3B49CECA42A05LLU /* 43 */, 65 0xBD56BE3F51382F73LLU /* 44 */, 0x45FAED5843B0BB28LLU /* 45 */, 66 0x1C813D5C11BF1F83LLU /* 46 */, 0x8AF0E4B6D75FA169LLU /* 47 */, 67 0x33EE18A487AD9999LLU /* 48 */, 0x3C26E8EAB1C94410LLU /* 49 */, 68 0xB510102BC0A822F9LLU /* 50 */, 0x141EEF310CE6123BLLU /* 51 */, 69 0xFC65B90059DDB154LLU /* 52 */, 0xE0158640C5E0E607LLU /* 53 */, 70 0x884E079826C3A3CFLLU /* 54 */, 0x930D0D9523C535FDLLU /* 55 */, 71 0x35638D754E9A2B00LLU /* 56 */, 0x4085FCCF40469DD5LLU /* 57 */, 72 0xC4B17AD28BE23A4CLLU /* 58 */, 0xCAB2F0FC6A3E6A2ELLU /* 59 */, 73 0x2860971A6B943FCDLLU /* 60 */, 0x3DDE6EE212E30446LLU /* 61 */, 74 0x6222F32AE01765AELLU /* 62 */, 0x5D550BB5478308FELLU /* 63 */, 75 0xA9EFA98DA0EDA22ALLU /* 64 */, 0xC351A71686C40DA7LLU /* 65 */, 76 0x1105586D9C867C84LLU /* 66 */, 0xDCFFEE85FDA22853LLU /* 67 */, 77 0xCCFBD0262C5EEF76LLU /* 68 */, 0xBAF294CB8990D201LLU /* 69 */, 78 0xE69464F52AFAD975LLU /* 70 */, 0x94B013AFDF133E14LLU /* 71 */, 79 0x06A7D1A32823C958LLU /* 72 */, 0x6F95FE5130F61119LLU /* 73 */, 80 0xD92AB34E462C06C0LLU /* 74 */, 0xED7BDE33887C71D2LLU /* 75 */, 81 0x79746D6E6518393ELLU /* 76 */, 0x5BA419385D713329LLU /* 77 */, 82 0x7C1BA6B948A97564LLU /* 78 */, 0x31987C197BFDAC67LLU /* 79 */, 83 0xDE6C23C44B053D02LLU /* 80 */, 0x581C49FED002D64DLLU /* 81 */, 84 0xDD474D6338261571LLU /* 82 */, 0xAA4546C3E473D062LLU /* 83 */, 85 0x928FCE349455F860LLU /* 84 */, 0x48161BBACAAB94D9LLU /* 85 */, 86 0x63912430770E6F68LLU /* 86 */, 0x6EC8A5E602C6641CLLU /* 87 */, 87 0x87282515337DDD2BLLU /* 88 */, 0x2CDA6B42034B701BLLU /* 89 */, 88 0xB03D37C181CB096DLLU /* 90 */, 0xE108438266C71C6FLLU /* 91 */, 89 0x2B3180C7EB51B255LLU /* 92 */, 0xDF92B82F96C08BBCLLU /* 93 */, 90 0x5C68C8C0A632F3BALLU /* 94 */, 0x5504CC861C3D0556LLU /* 95 */, 91 0xABBFA4E55FB26B8FLLU /* 96 */, 0x41848B0AB3BACEB4LLU /* 97 */, 92 0xB334A273AA445D32LLU /* 98 */, 0xBCA696F0A85AD881LLU /* 99 */, 93 0x24F6EC65B528D56CLLU /* 100 */, 0x0CE1512E90F4524ALLU /* 101 */, 94 0x4E9DD79D5506D35ALLU /* 102 */, 0x258905FAC6CE9779LLU /* 103 */, 95 0x2019295B3E109B33LLU /* 104 */, 0xF8A9478B73A054CCLLU /* 105 */, 96 0x2924F2F934417EB0LLU /* 106 */, 0x3993357D536D1BC4LLU /* 107 */, 97 0x38A81AC21DB6FF8BLLU /* 108 */, 0x47C4FBF17D6016BFLLU /* 109 */, 98 0x1E0FAADD7667E3F5LLU /* 110 */, 0x7ABCFF62938BEB96LLU /* 111 */, 99 0xA78DAD948FC179C9LLU /* 112 */, 0x8F1F98B72911E50DLLU /* 113 */, 100 0x61E48EAE27121A91LLU /* 114 */, 0x4D62F7AD31859808LLU /* 115 */, 101 0xECEBA345EF5CEAEBLLU /* 116 */, 0xF5CEB25EBC9684CELLU /* 117 */, 102 0xF633E20CB7F76221LLU /* 118 */, 0xA32CDF06AB8293E4LLU /* 119 */, 103 0x985A202CA5EE2CA4LLU /* 120 */, 0xCF0B8447CC8A8FB1LLU /* 121 */, 104 0x9F765244979859A3LLU /* 122 */, 0xA8D516B1A1240017LLU /* 123 */, 105 0x0BD7BA3EBB5DC726LLU /* 124 */, 0xE54BCA55B86ADB39LLU /* 125 */, 106 0x1D7A3AFD6C478063LLU /* 126 */, 0x519EC608E7669EDDLLU /* 127 */, 107 0x0E5715A2D149AA23LLU /* 128 */, 0x177D4571848FF194LLU /* 129 */, 108 0xEEB55F3241014C22LLU /* 130 */, 0x0F5E5CA13A6E2EC2LLU /* 131 */, 109 0x8029927B75F5C361LLU /* 132 */, 0xAD139FABC3D6E436LLU /* 133 */, 110 0x0D5DF1A94CCF402FLLU /* 134 */, 0x3E8BD948BEA5DFC8LLU /* 135 */, 111 0xA5A0D357BD3FF77ELLU /* 136 */, 0xA2D12E251F74F645LLU /* 137 */, 112 0x66FD9E525E81A082LLU /* 138 */, 0x2E0C90CE7F687A49LLU /* 139 */, 113 0xC2E8BCBEBA973BC5LLU /* 140 */, 0x000001BCE509745FLLU /* 141 */, 114 0x423777BBE6DAB3D6LLU /* 142 */, 0xD1661C7EAEF06EB5LLU /* 143 */, 115 0xA1781F354DAACFD8LLU /* 144 */, 0x2D11284A2B16AFFCLLU /* 145 */, 116 0xF1FC4F67FA891D1FLLU /* 146 */, 0x73ECC25DCB920ADALLU /* 147 */, 117 0xAE610C22C2A12651LLU /* 148 */, 0x96E0A810D356B78ALLU /* 149 */, 118 0x5A9A381F2FE7870FLLU /* 150 */, 0xD5AD62EDE94E5530LLU /* 151 */, 119 0xD225E5E8368D1427LLU /* 152 */, 0x65977B70C7AF4631LLU /* 153 */, 120 0x99F889B2DE39D74FLLU /* 154 */, 0x233F30BF54E1D143LLU /* 155 */, 121 0x9A9675D3D9A63C97LLU /* 156 */, 0x5470554FF334F9A8LLU /* 157 */, 122 0x166ACB744A4F5688LLU /* 158 */, 0x70C74CAAB2E4AEADLLU /* 159 */, 123 0xF0D091646F294D12LLU /* 160 */, 0x57B82A89684031D1LLU /* 161 */, 124 0xEFD95A5A61BE0B6BLLU /* 162 */, 0x2FBD12E969F2F29ALLU /* 163 */, 125 0x9BD37013FEFF9FE8LLU /* 164 */, 0x3F9B0404D6085A06LLU /* 165 */, 126 0x4940C1F3166CFE15LLU /* 166 */, 0x09542C4DCDF3DEFBLLU /* 167 */, 127 0xB4C5218385CD5CE3LLU /* 168 */, 0xC935B7DC4462A641LLU /* 169 */, 128 0x3417F8A68ED3B63FLLU /* 170 */, 0xB80959295B215B40LLU /* 171 */, 129 0xF99CDAEF3B8C8572LLU /* 172 */, 0x018C0614F8FCB95DLLU /* 173 */, 130 0x1B14ACCD1A3ACDF3LLU /* 174 */, 0x84D471F200BB732DLLU /* 175 */, 131 0xC1A3110E95E8DA16LLU /* 176 */, 0x430A7220BF1A82B8LLU /* 177 */, 132 0xB77E090D39DF210ELLU /* 178 */, 0x5EF4BD9F3CD05E9DLLU /* 179 */, 133 0x9D4FF6DA7E57A444LLU /* 180 */, 0xDA1D60E183D4A5F8LLU /* 181 */, 134 0xB287C38417998E47LLU /* 182 */, 0xFE3EDC121BB31886LLU /* 183 */, 135 0xC7FE3CCC980CCBEFLLU /* 184 */, 0xE46FB590189BFD03LLU /* 185 */, 136 0x3732FD469A4C57DCLLU /* 186 */, 0x7EF700A07CF1AD65LLU /* 187 */, 137 0x59C64468A31D8859LLU /* 188 */, 0x762FB0B4D45B61F6LLU /* 189 */, 138 0x155BAED099047718LLU /* 190 */, 0x68755E4C3D50BAA6LLU /* 191 */, 139 0xE9214E7F22D8B4DFLLU /* 192 */, 0x2ADDBF532EAC95F4LLU /* 193 */, 140 0x32AE3909B4BD0109LLU /* 194 */, 0x834DF537B08E3450LLU /* 195 */, 141 0xFA209DA84220728DLLU /* 196 */, 0x9E691D9B9EFE23F7LLU /* 197 */, 142 0x0446D288C4AE8D7FLLU /* 198 */, 0x7B4CC524E169785BLLU /* 199 */, 143 0x21D87F0135CA1385LLU /* 200 */, 0xCEBB400F137B8AA5LLU /* 201 */, 144 0x272E2B66580796BELLU /* 202 */, 0x3612264125C2B0DELLU /* 203 */, 145 0x057702BDAD1EFBB2LLU /* 204 */, 0xD4BABB8EACF84BE9LLU /* 205 */, 146 0x91583139641BC67BLLU /* 206 */, 0x8BDC2DE08036E024LLU /* 207 */, 147 0x603C8156F49F68EDLLU /* 208 */, 0xF7D236F7DBEF5111LLU /* 209 */, 148 0x9727C4598AD21E80LLU /* 210 */, 0xA08A0896670A5FD7LLU /* 211 */, 149 0xCB4A8F4309EBA9CBLLU /* 212 */, 0x81AF564B0F7036A1LLU /* 213 */, 150 0xC0B99AA778199ABDLLU /* 214 */, 0x959F1EC83FC8E952LLU /* 215 */, 151 0x8C505077794A81B9LLU /* 216 */, 0x3ACAAF8F056338F0LLU /* 217 */, 152 0x07B43F50627A6778LLU /* 218 */, 0x4A44AB49F5ECCC77LLU /* 219 */, 153 0x3BC3D6E4B679EE98LLU /* 220 */, 0x9CC0D4D1CF14108CLLU /* 221 */, 154 0x4406C00B206BC8A0LLU /* 222 */, 0x82A18854C8D72D89LLU /* 223 */, 155 0x67E366B35C3C432CLLU /* 224 */, 0xB923DD61102B37F2LLU /* 225 */, 156 0x56AB2779D884271DLLU /* 226 */, 0xBE83E1B0FF1525AFLLU /* 227 */, 157 0xFB7C65D4217E49A9LLU /* 228 */, 0x6BDBE0E76D48E7D4LLU /* 229 */, 158 0x08DF828745D9179ELLU /* 230 */, 0x22EA6A9ADD53BD34LLU /* 231 */, 159 0xE36E141C5622200ALLU /* 232 */, 0x7F805D1B8CB750EELLU /* 233 */, 160 0xAFE5C7A59F58E837LLU /* 234 */, 0xE27F996A4FB1C23CLLU /* 235 */, 161 0xD3867DFB0775F0D0LLU /* 236 */, 0xD0E673DE6E88891ALLU /* 237 */, 162 0x123AEB9EAFB86C25LLU /* 238 */, 0x30F1D5D5C145B895LLU /* 239 */, 163 0xBB434A2DEE7269E7LLU /* 240 */, 0x78CB67ECF931FA38LLU /* 241 */, 164 0xF33B0372323BBF9CLLU /* 242 */, 0x52D66336FB279C74LLU /* 243 */, 165 0x505F33AC0AFB4EAALLU /* 244 */, 0xE8A5CD99A2CCE187LLU /* 245 */, 166 0x534974801E2D30BBLLU /* 246 */, 0x8D2D5711D5876D90LLU /* 247 */, 167 0x1F1A412891BC038ELLU /* 248 */, 0xD6E2E71D82E56648LLU /* 249 */, 168 0x74036C3A497732B7LLU /* 250 */, 0x89B67ED96361F5ABLLU /* 251 */, 169 0xFFED95D8F1EA02A2LLU /* 252 */, 0xE72B3BD61464D43DLLU /* 253 */, 170 0xA6300F170BDC4820LLU /* 254 */, 0xEBC18760ED78A77ALLU /* 255 */, 171 0xE6A6BE5A05A12138LLU /* 256 */, 0xB5A122A5B4F87C98LLU /* 257 */, 172 0x563C6089140B6990LLU /* 258 */, 0x4C46CB2E391F5DD5LLU /* 259 */, 173 0xD932ADDBC9B79434LLU /* 260 */, 0x08EA70E42015AFF5LLU /* 261 */, 174 0xD765A6673E478CF1LLU /* 262 */, 0xC4FB757EAB278D99LLU /* 263 */, 175 0xDF11C6862D6E0692LLU /* 264 */, 0xDDEB84F10D7F3B16LLU /* 265 */, 176 0x6F2EF604A665EA04LLU /* 266 */, 0x4A8E0F0FF0E0DFB3LLU /* 267 */, 177 0xA5EDEEF83DBCBA51LLU /* 268 */, 0xFC4F0A2A0EA4371ELLU /* 269 */, 178 0xE83E1DA85CB38429LLU /* 270 */, 0xDC8FF882BA1B1CE2LLU /* 271 */, 179 0xCD45505E8353E80DLLU /* 272 */, 0x18D19A00D4DB0717LLU /* 273 */, 180 0x34A0CFEDA5F38101LLU /* 274 */, 0x0BE77E518887CAF2LLU /* 275 */, 181 0x1E341438B3C45136LLU /* 276 */, 0xE05797F49089CCF9LLU /* 277 */, 182 0xFFD23F9DF2591D14LLU /* 278 */, 0x543DDA228595C5CDLLU /* 279 */, 183 0x661F81FD99052A33LLU /* 280 */, 0x8736E641DB0F7B76LLU /* 281 */, 184 0x15227725418E5307LLU /* 282 */, 0xE25F7F46162EB2FALLU /* 283 */, 185 0x48A8B2126C13D9FELLU /* 284 */, 0xAFDC541792E76EEALLU /* 285 */, 186 0x03D912BFC6D1898FLLU /* 286 */, 0x31B1AAFA1B83F51BLLU /* 287 */, 187 0xF1AC2796E42AB7D9LLU /* 288 */, 0x40A3A7D7FCD2EBACLLU /* 289 */, 188 0x1056136D0AFBBCC5LLU /* 290 */, 0x7889E1DD9A6D0C85LLU /* 291 */, 189 0xD33525782A7974AALLU /* 292 */, 0xA7E25D09078AC09BLLU /* 293 */, 190 0xBD4138B3EAC6EDD0LLU /* 294 */, 0x920ABFBE71EB9E70LLU /* 295 */, 191 0xA2A5D0F54FC2625CLLU /* 296 */, 0xC054E36B0B1290A3LLU /* 297 */, 192 0xF6DD59FF62FE932BLLU /* 298 */, 0x3537354511A8AC7DLLU /* 299 */, 193 0xCA845E9172FADCD4LLU /* 300 */, 0x84F82B60329D20DCLLU /* 301 */, 194 0x79C62CE1CD672F18LLU /* 302 */, 0x8B09A2ADD124642CLLU /* 303 */, 195 0xD0C1E96A19D9E726LLU /* 304 */, 0x5A786A9B4BA9500CLLU /* 305 */, 196 0x0E020336634C43F3LLU /* 306 */, 0xC17B474AEB66D822LLU /* 307 */, 197 0x6A731AE3EC9BAAC2LLU /* 308 */, 0x8226667AE0840258LLU /* 309 */, 198 0x67D4567691CAECA5LLU /* 310 */, 0x1D94155C4875ADB5LLU /* 311 */, 199 0x6D00FD985B813FDFLLU /* 312 */, 0x51286EFCB774CD06LLU /* 313 */, 200 0x5E8834471FA744AFLLU /* 314 */, 0xF72CA0AEE761AE2ELLU /* 315 */, 201 0xBE40E4CDAEE8E09ALLU /* 316 */, 0xE9970BBB5118F665LLU /* 317 */, 202 0x726E4BEB33DF1964LLU /* 318 */, 0x703B000729199762LLU /* 319 */, 203 0x4631D816F5EF30A7LLU /* 320 */, 0xB880B5B51504A6BELLU /* 321 */, 204 0x641793C37ED84B6CLLU /* 322 */, 0x7B21ED77F6E97D96LLU /* 323 */, 205 0x776306312EF96B73LLU /* 324 */, 0xAE528948E86FF3F4LLU /* 325 */, 206 0x53DBD7F286A3F8F8LLU /* 326 */, 0x16CADCE74CFC1063LLU /* 327 */, 207 0x005C19BDFA52C6DDLLU /* 328 */, 0x68868F5D64D46AD3LLU /* 329 */, 208 0x3A9D512CCF1E186ALLU /* 330 */, 0x367E62C2385660AELLU /* 331 */, 209 0xE359E7EA77DCB1D7LLU /* 332 */, 0x526C0773749ABE6ELLU /* 333 */, 210 0x735AE5F9D09F734BLLU /* 334 */, 0x493FC7CC8A558BA8LLU /* 335 */, 211 0xB0B9C1533041AB45LLU /* 336 */, 0x321958BA470A59BDLLU /* 337 */, 212 0x852DB00B5F46C393LLU /* 338 */, 0x91209B2BD336B0E5LLU /* 339 */, 213 0x6E604F7D659EF19FLLU /* 340 */, 0xB99A8AE2782CCB24LLU /* 341 */, 214 0xCCF52AB6C814C4C7LLU /* 342 */, 0x4727D9AFBE11727BLLU /* 343 */, 215 0x7E950D0C0121B34DLLU /* 344 */, 0x756F435670AD471FLLU /* 345 */, 216 0xF5ADD442615A6849LLU /* 346 */, 0x4E87E09980B9957ALLU /* 347 */, 217 0x2ACFA1DF50AEE355LLU /* 348 */, 0xD898263AFD2FD556LLU /* 349 */, 218 0xC8F4924DD80C8FD6LLU /* 350 */, 0xCF99CA3D754A173ALLU /* 351 */, 219 0xFE477BACAF91BF3CLLU /* 352 */, 0xED5371F6D690C12DLLU /* 353 */, 220 0x831A5C285E687094LLU /* 354 */, 0xC5D3C90A3708A0A4LLU /* 355 */, 221 0x0F7F903717D06580LLU /* 356 */, 0x19F9BB13B8FDF27FLLU /* 357 */, 222 0xB1BD6F1B4D502843LLU /* 358 */, 0x1C761BA38FFF4012LLU /* 359 */, 223 0x0D1530C4E2E21F3BLLU /* 360 */, 0x8943CE69A7372C8ALLU /* 361 */, 224 0xE5184E11FEB5CE66LLU /* 362 */, 0x618BDB80BD736621LLU /* 363 */, 225 0x7D29BAD68B574D0BLLU /* 364 */, 0x81BB613E25E6FE5BLLU /* 365 */, 226 0x071C9C10BC07913FLLU /* 366 */, 0xC7BEEB7909AC2D97LLU /* 367 */, 227 0xC3E58D353BC5D757LLU /* 368 */, 0xEB017892F38F61E8LLU /* 369 */, 228 0xD4EFFB9C9B1CC21ALLU /* 370 */, 0x99727D26F494F7ABLLU /* 371 */, 229 0xA3E063A2956B3E03LLU /* 372 */, 0x9D4A8B9A4AA09C30LLU /* 373 */, 230 0x3F6AB7D500090FB4LLU /* 374 */, 0x9CC0F2A057268AC0LLU /* 375 */, 231 0x3DEE9D2DEDBF42D1LLU /* 376 */, 0x330F49C87960A972LLU /* 377 */, 232 0xC6B2720287421B41LLU /* 378 */, 0x0AC59EC07C00369CLLU /* 379 */, 233 0xEF4EAC49CB353425LLU /* 380 */, 0xF450244EEF0129D8LLU /* 381 */, 234 0x8ACC46E5CAF4DEB6LLU /* 382 */, 0x2FFEAB63989263F7LLU /* 383 */, 235 0x8F7CB9FE5D7A4578LLU /* 384 */, 0x5BD8F7644E634635LLU /* 385 */, 236 0x427A7315BF2DC900LLU /* 386 */, 0x17D0C4AA2125261CLLU /* 387 */, 237 0x3992486C93518E50LLU /* 388 */, 0xB4CBFEE0A2D7D4C3LLU /* 389 */, 238 0x7C75D6202C5DDD8DLLU /* 390 */, 0xDBC295D8E35B6C61LLU /* 391 */, 239 0x60B369D302032B19LLU /* 392 */, 0xCE42685FDCE44132LLU /* 393 */, 240 0x06F3DDB9DDF65610LLU /* 394 */, 0x8EA4D21DB5E148F0LLU /* 395 */, 241 0x20B0FCE62FCD496FLLU /* 396 */, 0x2C1B912358B0EE31LLU /* 397 */, 242 0xB28317B818F5A308LLU /* 398 */, 0xA89C1E189CA6D2CFLLU /* 399 */, 243 0x0C6B18576AAADBC8LLU /* 400 */, 0xB65DEAA91299FAE3LLU /* 401 */, 244 0xFB2B794B7F1027E7LLU /* 402 */, 0x04E4317F443B5BEBLLU /* 403 */, 245 0x4B852D325939D0A6LLU /* 404 */, 0xD5AE6BEEFB207FFCLLU /* 405 */, 246 0x309682B281C7D374LLU /* 406 */, 0xBAE309A194C3B475LLU /* 407 */, 247 0x8CC3F97B13B49F05LLU /* 408 */, 0x98A9422FF8293967LLU /* 409 */, 248 0x244B16B01076FF7CLLU /* 410 */, 0xF8BF571C663D67EELLU /* 411 */, 249 0x1F0D6758EEE30DA1LLU /* 412 */, 0xC9B611D97ADEB9B7LLU /* 413 */, 250 0xB7AFD5887B6C57A2LLU /* 414 */, 0x6290AE846B984FE1LLU /* 415 */, 251 0x94DF4CDEACC1A5FDLLU /* 416 */, 0x058A5BD1C5483AFFLLU /* 417 */, 252 0x63166CC142BA3C37LLU /* 418 */, 0x8DB8526EB2F76F40LLU /* 419 */, 253 0xE10880036F0D6D4ELLU /* 420 */, 0x9E0523C9971D311DLLU /* 421 */, 254 0x45EC2824CC7CD691LLU /* 422 */, 0x575B8359E62382C9LLU /* 423 */, 255 0xFA9E400DC4889995LLU /* 424 */, 0xD1823ECB45721568LLU /* 425 */, 256 0xDAFD983B8206082FLLU /* 426 */, 0xAA7D29082386A8CBLLU /* 427 */, 257 0x269FCD4403B87588LLU /* 428 */, 0x1B91F5F728BDD1E0LLU /* 429 */, 258 0xE4669F39040201F6LLU /* 430 */, 0x7A1D7C218CF04ADELLU /* 431 */, 259 0x65623C29D79CE5CELLU /* 432 */, 0x2368449096C00BB1LLU /* 433 */, 260 0xAB9BF1879DA503BALLU /* 434 */, 0xBC23ECB1A458058ELLU /* 435 */, 261 0x9A58DF01BB401ECCLLU /* 436 */, 0xA070E868A85F143DLLU /* 437 */, 262 0x4FF188307DF2239ELLU /* 438 */, 0x14D565B41A641183LLU /* 439 */, 263 0xEE13337452701602LLU /* 440 */, 0x950E3DCF3F285E09LLU /* 441 */, 264 0x59930254B9C80953LLU /* 442 */, 0x3BF299408930DA6DLLU /* 443 */, 265 0xA955943F53691387LLU /* 444 */, 0xA15EDECAA9CB8784LLU /* 445 */, 266 0x29142127352BE9A0LLU /* 446 */, 0x76F0371FFF4E7AFBLLU /* 447 */, 267 0x0239F450274F2228LLU /* 448 */, 0xBB073AF01D5E868BLLU /* 449 */, 268 0xBFC80571C10E96C1LLU /* 450 */, 0xD267088568222E23LLU /* 451 */, 269 0x9671A3D48E80B5B0LLU /* 452 */, 0x55B5D38AE193BB81LLU /* 453 */, 270 0x693AE2D0A18B04B8LLU /* 454 */, 0x5C48B4ECADD5335FLLU /* 455 */, 271 0xFD743B194916A1CALLU /* 456 */, 0x2577018134BE98C4LLU /* 457 */, 272 0xE77987E83C54A4ADLLU /* 458 */, 0x28E11014DA33E1B9LLU /* 459 */, 273 0x270CC59E226AA213LLU /* 460 */, 0x71495F756D1A5F60LLU /* 461 */, 274 0x9BE853FB60AFEF77LLU /* 462 */, 0xADC786A7F7443DBFLLU /* 463 */, 275 0x0904456173B29A82LLU /* 464 */, 0x58BC7A66C232BD5ELLU /* 465 */, 276 0xF306558C673AC8B2LLU /* 466 */, 0x41F639C6B6C9772ALLU /* 467 */, 277 0x216DEFE99FDA35DALLU /* 468 */, 0x11640CC71C7BE615LLU /* 469 */, 278 0x93C43694565C5527LLU /* 470 */, 0xEA038E6246777839LLU /* 471 */, 279 0xF9ABF3CE5A3E2469LLU /* 472 */, 0x741E768D0FD312D2LLU /* 473 */, 280 0x0144B883CED652C6LLU /* 474 */, 0xC20B5A5BA33F8552LLU /* 475 */, 281 0x1AE69633C3435A9DLLU /* 476 */, 0x97A28CA4088CFDECLLU /* 477 */, 282 0x8824A43C1E96F420LLU /* 478 */, 0x37612FA66EEEA746LLU /* 479 */, 283 0x6B4CB165F9CF0E5ALLU /* 480 */, 0x43AA1C06A0ABFB4ALLU /* 481 */, 284 0x7F4DC26FF162796BLLU /* 482 */, 0x6CBACC8E54ED9B0FLLU /* 483 */, 285 0xA6B7FFEFD2BB253ELLU /* 484 */, 0x2E25BC95B0A29D4FLLU /* 485 */, 286 0x86D6A58BDEF1388CLLU /* 486 */, 0xDED74AC576B6F054LLU /* 487 */, 287 0x8030BDBC2B45805DLLU /* 488 */, 0x3C81AF70E94D9289LLU /* 489 */, 288 0x3EFF6DDA9E3100DBLLU /* 490 */, 0xB38DC39FDFCC8847LLU /* 491 */, 289 0x123885528D17B87ELLU /* 492 */, 0xF2DA0ED240B1B642LLU /* 493 */, 290 0x44CEFADCD54BF9A9LLU /* 494 */, 0x1312200E433C7EE6LLU /* 495 */, 291 0x9FFCC84F3A78C748LLU /* 496 */, 0xF0CD1F72248576BBLLU /* 497 */, 292 0xEC6974053638CFE4LLU /* 498 */, 0x2BA7B67C0CEC4E4CLLU /* 499 */, 293 0xAC2F4DF3E5CE32EDLLU /* 500 */, 0xCB33D14326EA4C11LLU /* 501 */, 294 0xA4E9044CC77E58BCLLU /* 502 */, 0x5F513293D934FCEFLLU /* 503 */, 295 0x5DC9645506E55444LLU /* 504 */, 0x50DE418F317DE40ALLU /* 505 */, 296 0x388CB31A69DDE259LLU /* 506 */, 0x2DB4A83455820A86LLU /* 507 */, 297 0x9010A91E84711AE9LLU /* 508 */, 0x4DF7F0B7B1498371LLU /* 509 */, 298 0xD62A2EABC0977179LLU /* 510 */, 0x22FAC097AA8D5C0ELLU /* 511 */, 299 0xF49FCC2FF1DAF39BLLU /* 512 */, 0x487FD5C66FF29281LLU /* 513 */, 300 0xE8A30667FCDCA83FLLU /* 514 */, 0x2C9B4BE3D2FCCE63LLU /* 515 */, 301 0xDA3FF74B93FBBBC2LLU /* 516 */, 0x2FA165D2FE70BA66LLU /* 517 */, 302 0xA103E279970E93D4LLU /* 518 */, 0xBECDEC77B0E45E71LLU /* 519 */, 303 0xCFB41E723985E497LLU /* 520 */, 0xB70AAA025EF75017LLU /* 521 */, 304 0xD42309F03840B8E0LLU /* 522 */, 0x8EFC1AD035898579LLU /* 523 */, 305 0x96C6920BE2B2ABC5LLU /* 524 */, 0x66AF4163375A9172LLU /* 525 */, 306 0x2174ABDCCA7127FBLLU /* 526 */, 0xB33CCEA64A72FF41LLU /* 527 */, 307 0xF04A4933083066A5LLU /* 528 */, 0x8D970ACDD7289AF5LLU /* 529 */, 308 0x8F96E8E031C8C25ELLU /* 530 */, 0xF3FEC02276875D47LLU /* 531 */, 309 0xEC7BF310056190DDLLU /* 532 */, 0xF5ADB0AEBB0F1491LLU /* 533 */, 310 0x9B50F8850FD58892LLU /* 534 */, 0x4975488358B74DE8LLU /* 535 */, 311 0xA3354FF691531C61LLU /* 536 */, 0x0702BBE481D2C6EELLU /* 537 */, 312 0x89FB24057DEDED98LLU /* 538 */, 0xAC3075138596E902LLU /* 539 */, 313 0x1D2D3580172772EDLLU /* 540 */, 0xEB738FC28E6BC30DLLU /* 541 */, 314 0x5854EF8F63044326LLU /* 542 */, 0x9E5C52325ADD3BBELLU /* 543 */, 315 0x90AA53CF325C4623LLU /* 544 */, 0xC1D24D51349DD067LLU /* 545 */, 316 0x2051CFEEA69EA624LLU /* 546 */, 0x13220F0A862E7E4FLLU /* 547 */, 317 0xCE39399404E04864LLU /* 548 */, 0xD9C42CA47086FCB7LLU /* 549 */, 318 0x685AD2238A03E7CCLLU /* 550 */, 0x066484B2AB2FF1DBLLU /* 551 */, 319 0xFE9D5D70EFBF79ECLLU /* 552 */, 0x5B13B9DD9C481854LLU /* 553 */, 320 0x15F0D475ED1509ADLLU /* 554 */, 0x0BEBCD060EC79851LLU /* 555 */, 321 0xD58C6791183AB7F8LLU /* 556 */, 0xD1187C5052F3EEE4LLU /* 557 */, 322 0xC95D1192E54E82FFLLU /* 558 */, 0x86EEA14CB9AC6CA2LLU /* 559 */, 323 0x3485BEB153677D5DLLU /* 560 */, 0xDD191D781F8C492ALLU /* 561 */, 324 0xF60866BAA784EBF9LLU /* 562 */, 0x518F643BA2D08C74LLU /* 563 */, 325 0x8852E956E1087C22LLU /* 564 */, 0xA768CB8DC410AE8DLLU /* 565 */, 326 0x38047726BFEC8E1ALLU /* 566 */, 0xA67738B4CD3B45AALLU /* 567 */, 327 0xAD16691CEC0DDE19LLU /* 568 */, 0xC6D4319380462E07LLU /* 569 */, 328 0xC5A5876D0BA61938LLU /* 570 */, 0x16B9FA1FA58FD840LLU /* 571 */, 329 0x188AB1173CA74F18LLU /* 572 */, 0xABDA2F98C99C021FLLU /* 573 */, 330 0x3E0580AB134AE816LLU /* 574 */, 0x5F3B05B773645ABBLLU /* 575 */, 331 0x2501A2BE5575F2F6LLU /* 576 */, 0x1B2F74004E7E8BA9LLU /* 577 */, 332 0x1CD7580371E8D953LLU /* 578 */, 0x7F6ED89562764E30LLU /* 579 */, 333 0xB15926FF596F003DLLU /* 580 */, 0x9F65293DA8C5D6B9LLU /* 581 */, 334 0x6ECEF04DD690F84CLLU /* 582 */, 0x4782275FFF33AF88LLU /* 583 */, 335 0xE41433083F820801LLU /* 584 */, 0xFD0DFE409A1AF9B5LLU /* 585 */, 336 0x4325A3342CDB396BLLU /* 586 */, 0x8AE77E62B301B252LLU /* 587 */, 337 0xC36F9E9F6655615ALLU /* 588 */, 0x85455A2D92D32C09LLU /* 589 */, 338 0xF2C7DEA949477485LLU /* 590 */, 0x63CFB4C133A39EBALLU /* 591 */, 339 0x83B040CC6EBC5462LLU /* 592 */, 0x3B9454C8FDB326B0LLU /* 593 */, 340 0x56F56A9E87FFD78CLLU /* 594 */, 0x2DC2940D99F42BC6LLU /* 595 */, 341 0x98F7DF096B096E2DLLU /* 596 */, 0x19A6E01E3AD852BFLLU /* 597 */, 342 0x42A99CCBDBD4B40BLLU /* 598 */, 0xA59998AF45E9C559LLU /* 599 */, 343 0x366295E807D93186LLU /* 600 */, 0x6B48181BFAA1F773LLU /* 601 */, 344 0x1FEC57E2157A0A1DLLU /* 602 */, 0x4667446AF6201AD5LLU /* 603 */, 345 0xE615EBCACFB0F075LLU /* 604 */, 0xB8F31F4F68290778LLU /* 605 */, 346 0x22713ED6CE22D11ELLU /* 606 */, 0x3057C1A72EC3C93BLLU /* 607 */, 347 0xCB46ACC37C3F1F2FLLU /* 608 */, 0xDBB893FD02AAF50ELLU /* 609 */, 348 0x331FD92E600B9FCFLLU /* 610 */, 0xA498F96148EA3AD6LLU /* 611 */, 349 0xA8D8426E8B6A83EALLU /* 612 */, 0xA089B274B7735CDCLLU /* 613 */, 350 0x87F6B3731E524A11LLU /* 614 */, 0x118808E5CBC96749LLU /* 615 */, 351 0x9906E4C7B19BD394LLU /* 616 */, 0xAFED7F7E9B24A20CLLU /* 617 */, 352 0x6509EADEEB3644A7LLU /* 618 */, 0x6C1EF1D3E8EF0EDELLU /* 619 */, 353 0xB9C97D43E9798FB4LLU /* 620 */, 0xA2F2D784740C28A3LLU /* 621 */, 354 0x7B8496476197566FLLU /* 622 */, 0x7A5BE3E6B65F069DLLU /* 623 */, 355 0xF96330ED78BE6F10LLU /* 624 */, 0xEEE60DE77A076A15LLU /* 625 */, 356 0x2B4BEE4AA08B9BD0LLU /* 626 */, 0x6A56A63EC7B8894ELLU /* 627 */, 357 0x02121359BA34FEF4LLU /* 628 */, 0x4CBF99F8283703FCLLU /* 629 */, 358 0x398071350CAF30C8LLU /* 630 */, 0xD0A77A89F017687ALLU /* 631 */, 359 0xF1C1A9EB9E423569LLU /* 632 */, 0x8C7976282DEE8199LLU /* 633 */, 360 0x5D1737A5DD1F7ABDLLU /* 634 */, 0x4F53433C09A9FA80LLU /* 635 */, 361 0xFA8B0C53DF7CA1D9LLU /* 636 */, 0x3FD9DCBC886CCB77LLU /* 637 */, 362 0xC040917CA91B4720LLU /* 638 */, 0x7DD00142F9D1DCDFLLU /* 639 */, 363 0x8476FC1D4F387B58LLU /* 640 */, 0x23F8E7C5F3316503LLU /* 641 */, 364 0x032A2244E7E37339LLU /* 642 */, 0x5C87A5D750F5A74BLLU /* 643 */, 365 0x082B4CC43698992ELLU /* 644 */, 0xDF917BECB858F63CLLU /* 645 */, 366 0x3270B8FC5BF86DDALLU /* 646 */, 0x10AE72BB29B5DD76LLU /* 647 */, 367 0x576AC94E7700362BLLU /* 648 */, 0x1AD112DAC61EFB8FLLU /* 649 */, 368 0x691BC30EC5FAA427LLU /* 650 */, 0xFF246311CC327143LLU /* 651 */, 369 0x3142368E30E53206LLU /* 652 */, 0x71380E31E02CA396LLU /* 653 */, 370 0x958D5C960AAD76F1LLU /* 654 */, 0xF8D6F430C16DA536LLU /* 655 */, 371 0xC8FFD13F1BE7E1D2LLU /* 656 */, 0x7578AE66004DDBE1LLU /* 657 */, 372 0x05833F01067BE646LLU /* 658 */, 0xBB34B5AD3BFE586DLLU /* 659 */, 373 0x095F34C9A12B97F0LLU /* 660 */, 0x247AB64525D60CA8LLU /* 661 */, 374 0xDCDBC6F3017477D1LLU /* 662 */, 0x4A2E14D4DECAD24DLLU /* 663 */, 375 0xBDB5E6D9BE0A1EEBLLU /* 664 */, 0x2A7E70F7794301ABLLU /* 665 */, 376 0xDEF42D8A270540FDLLU /* 666 */, 0x01078EC0A34C22C1LLU /* 667 */, 377 0xE5DE511AF4C16387LLU /* 668 */, 0x7EBB3A52BD9A330ALLU /* 669 */, 378 0x77697857AA7D6435LLU /* 670 */, 0x004E831603AE4C32LLU /* 671 */, 379 0xE7A21020AD78E312LLU /* 672 */, 0x9D41A70C6AB420F2LLU /* 673 */, 380 0x28E06C18EA1141E6LLU /* 674 */, 0xD2B28CBD984F6B28LLU /* 675 */, 381 0x26B75F6C446E9D83LLU /* 676 */, 0xBA47568C4D418D7FLLU /* 677 */, 382 0xD80BADBFE6183D8ELLU /* 678 */, 0x0E206D7F5F166044LLU /* 679 */, 383 0xE258A43911CBCA3ELLU /* 680 */, 0x723A1746B21DC0BCLLU /* 681 */, 384 0xC7CAA854F5D7CDD3LLU /* 682 */, 0x7CAC32883D261D9CLLU /* 683 */, 385 0x7690C26423BA942CLLU /* 684 */, 0x17E55524478042B8LLU /* 685 */, 386 0xE0BE477656A2389FLLU /* 686 */, 0x4D289B5E67AB2DA0LLU /* 687 */, 387 0x44862B9C8FBBFD31LLU /* 688 */, 0xB47CC8049D141365LLU /* 689 */, 388 0x822C1B362B91C793LLU /* 690 */, 0x4EB14655FB13DFD8LLU /* 691 */, 389 0x1ECBBA0714E2A97BLLU /* 692 */, 0x6143459D5CDE5F14LLU /* 693 */, 390 0x53A8FBF1D5F0AC89LLU /* 694 */, 0x97EA04D81C5E5B00LLU /* 695 */, 391 0x622181A8D4FDB3F3LLU /* 696 */, 0xE9BCD341572A1208LLU /* 697 */, 392 0x1411258643CCE58ALLU /* 698 */, 0x9144C5FEA4C6E0A4LLU /* 699 */, 393 0x0D33D06565CF620FLLU /* 700 */, 0x54A48D489F219CA1LLU /* 701 */, 394 0xC43E5EAC6D63C821LLU /* 702 */, 0xA9728B3A72770DAFLLU /* 703 */, 395 0xD7934E7B20DF87EFLLU /* 704 */, 0xE35503B61A3E86E5LLU /* 705 */, 396 0xCAE321FBC819D504LLU /* 706 */, 0x129A50B3AC60BFA6LLU /* 707 */, 397 0xCD5E68EA7E9FB6C3LLU /* 708 */, 0xB01C90199483B1C7LLU /* 709 */, 398 0x3DE93CD5C295376CLLU /* 710 */, 0xAED52EDF2AB9AD13LLU /* 711 */, 399 0x2E60F512C0A07884LLU /* 712 */, 0xBC3D86A3E36210C9LLU /* 713 */, 400 0x35269D9B163951CELLU /* 714 */, 0x0C7D6E2AD0CDB5FALLU /* 715 */, 401 0x59E86297D87F5733LLU /* 716 */, 0x298EF221898DB0E7LLU /* 717 */, 402 0x55000029D1A5AA7ELLU /* 718 */, 0x8BC08AE1B5061B45LLU /* 719 */, 403 0xC2C31C2B6C92703ALLU /* 720 */, 0x94CC596BAF25EF42LLU /* 721 */, 404 0x0A1D73DB22540456LLU /* 722 */, 0x04B6A0F9D9C4179ALLU /* 723 */, 405 0xEFFDAFA2AE3D3C60LLU /* 724 */, 0xF7C8075BB49496C4LLU /* 725 */, 406 0x9CC5C7141D1CD4E3LLU /* 726 */, 0x78BD1638218E5534LLU /* 727 */, 407 0xB2F11568F850246ALLU /* 728 */, 0xEDFABCFA9502BC29LLU /* 729 */, 408 0x796CE5F2DA23051BLLU /* 730 */, 0xAAE128B0DC93537CLLU /* 731 */, 409 0x3A493DA0EE4B29AELLU /* 732 */, 0xB5DF6B2C416895D7LLU /* 733 */, 410 0xFCABBD25122D7F37LLU /* 734 */, 0x70810B58105DC4B1LLU /* 735 */, 411 0xE10FDD37F7882A90LLU /* 736 */, 0x524DCAB5518A3F5CLLU /* 737 */, 412 0x3C9E85878451255BLLU /* 738 */, 0x4029828119BD34E2LLU /* 739 */, 413 0x74A05B6F5D3CECCBLLU /* 740 */, 0xB610021542E13ECALLU /* 741 */, 414 0x0FF979D12F59E2ACLLU /* 742 */, 0x6037DA27E4F9CC50LLU /* 743 */, 415 0x5E92975A0DF1847DLLU /* 744 */, 0xD66DE190D3E623FELLU /* 745 */, 416 0x5032D6B87B568048LLU /* 746 */, 0x9A36B7CE8235216ELLU /* 747 */, 417 0x80272A7A24F64B4ALLU /* 748 */, 0x93EFED8B8C6916F7LLU /* 749 */, 418 0x37DDBFF44CCE1555LLU /* 750 */, 0x4B95DB5D4B99BD25LLU /* 751 */, 419 0x92D3FDA169812FC0LLU /* 752 */, 0xFB1A4A9A90660BB6LLU /* 753 */, 420 0x730C196946A4B9B2LLU /* 754 */, 0x81E289AA7F49DA68LLU /* 755 */, 421 0x64669A0F83B1A05FLLU /* 756 */, 0x27B3FF7D9644F48BLLU /* 757 */, 422 0xCC6B615C8DB675B3LLU /* 758 */, 0x674F20B9BCEBBE95LLU /* 759 */, 423 0x6F31238275655982LLU /* 760 */, 0x5AE488713E45CF05LLU /* 761 */, 424 0xBF619F9954C21157LLU /* 762 */, 0xEABAC46040A8EAE9LLU /* 763 */, 425 0x454C6FE9F2C0C1CDLLU /* 764 */, 0x419CF6496412691CLLU /* 765 */, 426 0xD3DC3BEF265B0F70LLU /* 766 */, 0x6D0E60F5C3578A9ELLU /* 767 */, 427 0x5B0E608526323C55LLU /* 768 */, 0x1A46C1A9FA1B59F5LLU /* 769 */, 428 0xA9E245A17C4C8FFALLU /* 770 */, 0x65CA5159DB2955D7LLU /* 771 */, 429 0x05DB0A76CE35AFC2LLU /* 772 */, 0x81EAC77EA9113D45LLU /* 773 */, 430 0x528EF88AB6AC0A0DLLU /* 774 */, 0xA09EA253597BE3FFLLU /* 775 */, 431 0x430DDFB3AC48CD56LLU /* 776 */, 0xC4B3A67AF45CE46FLLU /* 777 */, 432 0x4ECECFD8FBE2D05ELLU /* 778 */, 0x3EF56F10B39935F0LLU /* 779 */, 433 0x0B22D6829CD619C6LLU /* 780 */, 0x17FD460A74DF2069LLU /* 781 */, 434 0x6CF8CC8E8510ED40LLU /* 782 */, 0xD6C824BF3A6ECAA7LLU /* 783 */, 435 0x61243D581A817049LLU /* 784 */, 0x048BACB6BBC163A2LLU /* 785 */, 436 0xD9A38AC27D44CC32LLU /* 786 */, 0x7FDDFF5BAAF410ABLLU /* 787 */, 437 0xAD6D495AA804824BLLU /* 788 */, 0xE1A6A74F2D8C9F94LLU /* 789 */, 438 0xD4F7851235DEE8E3LLU /* 790 */, 0xFD4B7F886540D893LLU /* 791 */, 439 0x247C20042AA4BFDALLU /* 792 */, 0x096EA1C517D1327CLLU /* 793 */, 440 0xD56966B4361A6685LLU /* 794 */, 0x277DA5C31221057DLLU /* 795 */, 441 0x94D59893A43ACFF7LLU /* 796 */, 0x64F0C51CCDC02281LLU /* 797 */, 442 0x3D33BCC4FF6189DBLLU /* 798 */, 0xE005CB184CE66AF1LLU /* 799 */, 443 0xFF5CCD1D1DB99BEALLU /* 800 */, 0xB0B854A7FE42980FLLU /* 801 */, 444 0x7BD46A6A718D4B9FLLU /* 802 */, 0xD10FA8CC22A5FD8CLLU /* 803 */, 445 0xD31484952BE4BD31LLU /* 804 */, 0xC7FA975FCB243847LLU /* 805 */, 446 0x4886ED1E5846C407LLU /* 806 */, 0x28CDDB791EB70B04LLU /* 807 */, 447 0xC2B00BE2F573417FLLU /* 808 */, 0x5C9590452180F877LLU /* 809 */, 448 0x7A6BDDFFF370EB00LLU /* 810 */, 0xCE509E38D6D9D6A4LLU /* 811 */, 449 0xEBEB0F00647FA702LLU /* 812 */, 0x1DCC06CF76606F06LLU /* 813 */, 450 0xE4D9F28BA286FF0ALLU /* 814 */, 0xD85A305DC918C262LLU /* 815 */, 451 0x475B1D8732225F54LLU /* 816 */, 0x2D4FB51668CCB5FELLU /* 817 */, 452 0xA679B9D9D72BBA20LLU /* 818 */, 0x53841C0D912D43A5LLU /* 819 */, 453 0x3B7EAA48BF12A4E8LLU /* 820 */, 0x781E0E47F22F1DDFLLU /* 821 */, 454 0xEFF20CE60AB50973LLU /* 822 */, 0x20D261D19DFFB742LLU /* 823 */, 455 0x16A12B03062A2E39LLU /* 824 */, 0x1960EB2239650495LLU /* 825 */, 456 0x251C16FED50EB8B8LLU /* 826 */, 0x9AC0C330F826016ELLU /* 827 */, 457 0xED152665953E7671LLU /* 828 */, 0x02D63194A6369570LLU /* 829 */, 458 0x5074F08394B1C987LLU /* 830 */, 0x70BA598C90B25CE1LLU /* 831 */, 459 0x794A15810B9742F6LLU /* 832 */, 0x0D5925E9FCAF8C6CLLU /* 833 */, 460 0x3067716CD868744ELLU /* 834 */, 0x910AB077E8D7731BLLU /* 835 */, 461 0x6A61BBDB5AC42F61LLU /* 836 */, 0x93513EFBF0851567LLU /* 837 */, 462 0xF494724B9E83E9D5LLU /* 838 */, 0xE887E1985C09648DLLU /* 839 */, 463 0x34B1D3C675370CFDLLU /* 840 */, 0xDC35E433BC0D255DLLU /* 841 */, 464 0xD0AAB84234131BE0LLU /* 842 */, 0x08042A50B48B7EAFLLU /* 843 */, 465 0x9997C4EE44A3AB35LLU /* 844 */, 0x829A7B49201799D0LLU /* 845 */, 466 0x263B8307B7C54441LLU /* 846 */, 0x752F95F4FD6A6CA6LLU /* 847 */, 467 0x927217402C08C6E5LLU /* 848 */, 0x2A8AB754A795D9EELLU /* 849 */, 468 0xA442F7552F72943DLLU /* 850 */, 0x2C31334E19781208LLU /* 851 */, 469 0x4FA98D7CEAEE6291LLU /* 852 */, 0x55C3862F665DB309LLU /* 853 */, 470 0xBD0610175D53B1F3LLU /* 854 */, 0x46FE6CB840413F27LLU /* 855 */, 471 0x3FE03792DF0CFA59LLU /* 856 */, 0xCFE700372EB85E8FLLU /* 857 */, 472 0xA7BE29E7ADBCE118LLU /* 858 */, 0xE544EE5CDE8431DDLLU /* 859 */, 473 0x8A781B1B41F1873ELLU /* 860 */, 0xA5C94C78A0D2F0E7LLU /* 861 */, 474 0x39412E2877B60728LLU /* 862 */, 0xA1265EF3AFC9A62CLLU /* 863 */, 475 0xBCC2770C6A2506C5LLU /* 864 */, 0x3AB66DD5DCE1CE12LLU /* 865 */, 476 0xE65499D04A675B37LLU /* 866 */, 0x7D8F523481BFD216LLU /* 867 */, 477 0x0F6F64FCEC15F389LLU /* 868 */, 0x74EFBE618B5B13C8LLU /* 869 */, 478 0xACDC82B714273E1DLLU /* 870 */, 0xDD40BFE003199D17LLU /* 871 */, 479 0x37E99257E7E061F8LLU /* 872 */, 0xFA52626904775AAALLU /* 873 */, 480 0x8BBBF63A463D56F9LLU /* 874 */, 0xF0013F1543A26E64LLU /* 875 */, 481 0xA8307E9F879EC898LLU /* 876 */, 0xCC4C27A4150177CCLLU /* 877 */, 482 0x1B432F2CCA1D3348LLU /* 878 */, 0xDE1D1F8F9F6FA013LLU /* 879 */, 483 0x606602A047A7DDD6LLU /* 880 */, 0xD237AB64CC1CB2C7LLU /* 881 */, 484 0x9B938E7225FCD1D3LLU /* 882 */, 0xEC4E03708E0FF476LLU /* 883 */, 485 0xFEB2FBDA3D03C12DLLU /* 884 */, 0xAE0BCED2EE43889ALLU /* 885 */, 486 0x22CB8923EBFB4F43LLU /* 886 */, 0x69360D013CF7396DLLU /* 887 */, 487 0x855E3602D2D4E022LLU /* 888 */, 0x073805BAD01F784CLLU /* 889 */, 488 0x33E17A133852F546LLU /* 890 */, 0xDF4874058AC7B638LLU /* 891 */, 489 0xBA92B29C678AA14ALLU /* 892 */, 0x0CE89FC76CFAADCDLLU /* 893 */, 490 0x5F9D4E0908339E34LLU /* 894 */, 0xF1AFE9291F5923B9LLU /* 895 */, 491 0x6E3480F60F4A265FLLU /* 896 */, 0xEEBF3A2AB29B841CLLU /* 897 */, 492 0xE21938A88F91B4ADLLU /* 898 */, 0x57DFEFF845C6D3C3LLU /* 899 */, 493 0x2F006B0BF62CAAF2LLU /* 900 */, 0x62F479EF6F75EE78LLU /* 901 */, 494 0x11A55AD41C8916A9LLU /* 902 */, 0xF229D29084FED453LLU /* 903 */, 495 0x42F1C27B16B000E6LLU /* 904 */, 0x2B1F76749823C074LLU /* 905 */, 496 0x4B76ECA3C2745360LLU /* 906 */, 0x8C98F463B91691BDLLU /* 907 */, 497 0x14BCC93CF1ADE66ALLU /* 908 */, 0x8885213E6D458397LLU /* 909 */, 498 0x8E177DF0274D4711LLU /* 910 */, 0xB49B73B5503F2951LLU /* 911 */, 499 0x10168168C3F96B6BLLU /* 912 */, 0x0E3D963B63CAB0AELLU /* 913 */, 500 0x8DFC4B5655A1DB14LLU /* 914 */, 0xF789F1356E14DE5CLLU /* 915 */, 501 0x683E68AF4E51DAC1LLU /* 916 */, 0xC9A84F9D8D4B0FD9LLU /* 917 */, 502 0x3691E03F52A0F9D1LLU /* 918 */, 0x5ED86E46E1878E80LLU /* 919 */, 503 0x3C711A0E99D07150LLU /* 920 */, 0x5A0865B20C4E9310LLU /* 921 */, 504 0x56FBFC1FE4F0682ELLU /* 922 */, 0xEA8D5DE3105EDF9BLLU /* 923 */, 505 0x71ABFDB12379187ALLU /* 924 */, 0x2EB99DE1BEE77B9CLLU /* 925 */, 506 0x21ECC0EA33CF4523LLU /* 926 */, 0x59A4D7521805C7A1LLU /* 927 */, 507 0x3896F5EB56AE7C72LLU /* 928 */, 0xAA638F3DB18F75DCLLU /* 929 */, 508 0x9F39358DABE9808ELLU /* 930 */, 0xB7DEFA91C00B72ACLLU /* 931 */, 509 0x6B5541FD62492D92LLU /* 932 */, 0x6DC6DEE8F92E4D5BLLU /* 933 */, 510 0x353F57ABC4BEEA7ELLU /* 934 */, 0x735769D6DA5690CELLU /* 935 */, 511 0x0A234AA642391484LLU /* 936 */, 0xF6F9508028F80D9DLLU /* 937 */, 512 0xB8E319A27AB3F215LLU /* 938 */, 0x31AD9C1151341A4DLLU /* 939 */, 513 0x773C22A57BEF5805LLU /* 940 */, 0x45C7561A07968633LLU /* 941 */, 514 0xF913DA9E249DBE36LLU /* 942 */, 0xDA652D9B78A64C68LLU /* 943 */, 515 0x4C27A97F3BC334EFLLU /* 944 */, 0x76621220E66B17F4LLU /* 945 */, 516 0x967743899ACD7D0BLLU /* 946 */, 0xF3EE5BCAE0ED6782LLU /* 947 */, 517 0x409F753600C879FCLLU /* 948 */, 0x06D09A39B5926DB6LLU /* 949 */, 518 0x6F83AEB0317AC588LLU /* 950 */, 0x01E6CA4A86381F21LLU /* 951 */, 519 0x66FF3462D19F3025LLU /* 952 */, 0x72207C24DDFD3BFBLLU /* 953 */, 520 0x4AF6B6D3E2ECE2EBLLU /* 954 */, 0x9C994DBEC7EA08DELLU /* 955 */, 521 0x49ACE597B09A8BC4LLU /* 956 */, 0xB38C4766CF0797BALLU /* 957 */, 522 0x131B9373C57C2A75LLU /* 958 */, 0xB1822CCE61931E58LLU /* 959 */, 523 0x9D7555B909BA1C0CLLU /* 960 */, 0x127FAFDD937D11D2LLU /* 961 */, 524 0x29DA3BADC66D92E4LLU /* 962 */, 0xA2C1D57154C2ECBCLLU /* 963 */, 525 0x58C5134D82F6FE24LLU /* 964 */, 0x1C3AE3515B62274FLLU /* 965 */, 526 0xE907C82E01CB8126LLU /* 966 */, 0xF8ED091913E37FCBLLU /* 967 */, 527 0x3249D8F9C80046C9LLU /* 968 */, 0x80CF9BEDE388FB63LLU /* 969 */, 528 0x1881539A116CF19ELLU /* 970 */, 0x5103F3F76BD52457LLU /* 971 */, 529 0x15B7E6F5AE47F7A8LLU /* 972 */, 0xDBD7C6DED47E9CCFLLU /* 973 */, 530 0x44E55C410228BB1ALLU /* 974 */, 0xB647D4255EDB4E99LLU /* 975 */, 531 0x5D11882BB8AAFC30LLU /* 976 */, 0xF5098BBB29D3212ALLU /* 977 */, 532 0x8FB5EA14E90296B3LLU /* 978 */, 0x677B942157DD025ALLU /* 979 */, 533 0xFB58E7C0A390ACB5LLU /* 980 */, 0x89D3674C83BD4A01LLU /* 981 */, 534 0x9E2DA4DF4BF3B93BLLU /* 982 */, 0xFCC41E328CAB4829LLU /* 983 */, 535 0x03F38C96BA582C52LLU /* 984 */, 0xCAD1BDBD7FD85DB2LLU /* 985 */, 536 0xBBB442C16082AE83LLU /* 986 */, 0xB95FE86BA5DA9AB0LLU /* 987 */, 537 0xB22E04673771A93FLLU /* 988 */, 0x845358C9493152D8LLU /* 989 */, 538 0xBE2A488697B4541ELLU /* 990 */, 0x95A2DC2DD38E6966LLU /* 991 */, 539 0xC02C11AC923C852BLLU /* 992 */, 0x2388B1990DF2A87BLLU /* 993 */, 540 0x7C8008FA1B4F37BELLU /* 994 */, 0x1F70D0C84D54E503LLU /* 995 */, 541 0x5490ADEC7ECE57D4LLU /* 996 */, 0x002B3C27D9063A3ALLU /* 997 */, 542 0x7EAEA3848030A2BFLLU /* 998 */, 0xC602326DED2003C0LLU /* 999 */, 543 0x83A7287D69A94086LLU /* 1000 */, 0xC57A5FCB30F57A8ALLU /* 1001 */, 544 0xB56844E479EBE779LLU /* 1002 */, 0xA373B40F05DCBCE9LLU /* 1003 */, 545 0xD71A786E88570EE2LLU /* 1004 */, 0x879CBACDBDE8F6A0LLU /* 1005 */, 546 0x976AD1BCC164A32FLLU /* 1006 */, 0xAB21E25E9666D78BLLU /* 1007 */, 547 0x901063AAE5E5C33CLLU /* 1008 */, 0x9818B34448698D90LLU /* 1009 */, 548 0xE36487AE3E1E8ABBLLU /* 1010 */, 0xAFBDF931893BDCB4LLU /* 1011 */, 549 0x6345A0DC5FBBD519LLU /* 1012 */, 0x8628FE269B9465CALLU /* 1013 */, 550 0x1E5D01603F9C51ECLLU /* 1014 */, 0x4DE44006A15049B7LLU /* 1015 */, 551 0xBF6C70E5F776CBB1LLU /* 1016 */, 0x411218F2EF552BEDLLU /* 1017 */, 552 0xCB0C0708705A36A3LLU /* 1018 */, 0xE74D14754F986044LLU /* 1019 */, 553 0xCD56D9430EA8280ELLU /* 1020 */, 0xC12591D7535F5065LLU /* 1021 */, 554 0xC83223F1720AEF96LLU /* 1022 */, 0xC3A0396F7363A51FLLU /* 1023 */ 555 }; 556 557 #define sbox1 (table+256*0) 558 #define sbox2 (table+256*1) 559 #define sbox3 (table+256*2) 560 #define sbox4 (table+256*3) 561 562 int roar_hash_tiger_init(struct roar_hash_tiger * state) { 563 if ( state == NULL ) 564 return -1; 565 566 memset(state, 0, sizeof(struct roar_hash_tiger)); 567 568 state->a = 0x0123456789ABCDEFLLU; 569 state->b = 0xFEDCBA9876543210LLU; 570 state->c = 0xF096A5B4C3B2E187LLU; 571 572 state->inlen = 0; 573 state->blocks = 0; 574 575 state->is_final = 0; 576 577 return 0; 578 } 579 580 int roar_hash_tiger_uninit(struct roar_hash_tiger * state) { 581 return 0; 582 } 583 584 int roar_hash_tiger_init_from_pstate(struct roar_hash_tiger * state, void * oldstate); 585 int roar_hash_tiger_to_pstate(struct roar_hash_tiger * state, void * newstate, size_t * len) { 586 unsigned char * p = newstate; 587 588 if ( state == NULL || newstate == NULL || len == NULL ) 589 return -1; 590 591 if ( state->inlen != 0 ) 592 return -1; 593 594 if ( *len < STATE_LEN ) 595 return -1; 596 597 *len = STATE_LEN; 598 599 #define _out(m) do { *p++ = state->m >> 56; *p++ = state->m >> 48; \ 600 *p++ = state->m >> 40; *p++ = state->m >> 32; \ 601 *p++ = state->m >> 24; *p++ = state->m >> 16; \ 602 *p++ = state->m >> 8; *p++ = state->m; } while(0) 603 _out(a); 604 _out(b); 605 _out(c); 606 #undef _out 607 608 return 0; 609 } 610 611 ssize_t roar_hash_tiger_statelen(struct roar_hash_tiger * state) { 612 return STATE_LEN; 613 } 614 615 int roar_hash_tiger_finalize(struct roar_hash_tiger * state) { 616 uint64_t len; 617 618 if ( state == NULL ) 619 return -1; 620 621 if ( state->is_final ) 622 return 0; 623 624 len = state->blocks * BLOCK_LEN + state->inlen; 625 626 if ( state->inlen < 56 ) { /* enough room */ 627 state->inbuf[state->inlen++] = 0x01; /* pad */ 628 while ( state->inlen < 56 ) 629 state->inbuf[state->inlen++] = 0; /* pad */ 630 } else { /* need one extra block */ 631 state->inbuf[state->inlen++] = 0x01; /* pad character */ 632 while( state->inlen < 64 ) 633 state->inbuf[state->inlen++] = 0; 634 635 roar_hash_tiger_proc_block(state, state->inbuf); 636 memset(state->inbuf, 0, 56); /* fill next block with zeroes */ 637 } 638 639 state->inbuf[56] = (len >> 0) & 0xFF; 640 state->inbuf[57] = (len >> 8) & 0xFF; 641 state->inbuf[58] = (len >> 16) & 0xFF; 642 state->inbuf[59] = (len >> 24) & 0xFF; 643 state->inbuf[60] = (len >> 32) & 0xFF; 644 state->inbuf[61] = (len >> 40) & 0xFF; 645 state->inbuf[62] = (len >> 48) & 0xFF; 646 state->inbuf[63] = (len >> 56) & 0xFF; 647 648 roar_hash_tiger_proc_block(state, state->inbuf); 649 650 state->inlen = 0; 651 state->is_final = 1; 652 653 return 0; 654 } 655 656 int roar_hash_tiger_get_digest(struct roar_hash_tiger * state, void * digest, size_t * len) { 657 if ( state == NULL || digest == NULL ) 658 return -1; 659 660 if ( roar_hash_tiger_finalize(state) == -1 ) 661 return -1; 662 663 return roar_hash_tiger_to_pstate(state, digest, len); 664 } 665 666 static void tiger_round( uint64_t * ra, uint64_t * rb, uint64_t * rc, uint64_t x, uint64_t mul) { 667 uint64_t a = *ra; 668 uint64_t b = *rb; 669 uint64_t c = *rc; 670 671 c ^= x; 672 a -= ( sbox1[ c & 0xff ] ^ sbox2[ (c >> 16) & 0xff ] 673 ^ sbox3[ (c >> 32) & 0xff ] ^ sbox4[ (c >> 48) & 0xff ]); 674 b += ( sbox4[ (c >> 8) & 0xff ] ^ sbox3[ (c >> 24) & 0xff ] 675 ^ sbox2[ (c >> 40) & 0xff ] ^ sbox1[ (c >> 56) & 0xff ]); 676 b *= mul; 677 678 *ra = a; 679 *rb = b; 680 *rc = c; 681 } 682 683 static void pass(uint64_t * ra, uint64_t * rb, uint64_t * rc, uint64_t * x, uint64_t mul) { 684 tiger_round(ra, rb, rc, x[0], mul); 685 tiger_round(rb, rc, ra, x[1], mul); 686 tiger_round(rc, ra, rb, x[2], mul); 687 tiger_round(ra, rb, rc, x[3], mul); 688 tiger_round(rb, rc, ra, x[4], mul); 689 tiger_round(rc, ra, rb, x[5], mul); 690 tiger_round(ra, rb, rc, x[6], mul); 691 tiger_round(rb, rc, ra, x[7], mul); 692 } 693 694 static void key_schedule(uint64_t * x) { 695 x[0] -= x[7] ^ 0xa5a5a5a5a5a5a5a5LL; 696 x[1] ^= x[0]; 697 x[2] += x[1]; 698 x[3] -= x[2] ^ ((~x[1]) << 19 ); 699 x[4] ^= x[3]; 700 x[5] += x[4]; 701 x[6] -= x[5] ^ ((~x[4]) >> 23 ); 702 x[7] ^= x[6]; 703 x[0] += x[7]; 704 x[1] -= x[0] ^ ((~x[7]) << 19 ); 705 x[2] ^= x[1]; 706 x[3] += x[2]; 707 x[4] -= x[3] ^ ((~x[2]) >> 23 ); 708 x[5] ^= x[4]; 709 x[6] += x[5]; 710 x[7] -= x[6] ^ 0x0123456789abcdefLL; 711 } 712 713 int roar_hash_tiger_proc_block(struct roar_hash_tiger * state, void * block) { 714 uint64_t a, b, c, aa, bb, cc; 715 uint64_t x[8]; 716 717 if ( state == NULL || block == NULL ) 718 return -1; 719 720 #if BYTE_ORDER == BIG_ENDIAN && !defined(ROAR_TARGET_WIN32) 721 #define MKWORD(d,n) \ 722 ( ((uint64_t)(d)[8*(n)+7]) << 56 | ((uint64_t)(d)[8*(n)+6]) << 48 \ 723 | ((uint64_t)(d)[8*(n)+5]) << 40 | ((uint64_t)(d)[8*(n)+4]) << 32 \ 724 | ((uint64_t)(d)[8*(n)+3]) << 24 | ((uint64_t)(d)[8*(n)+2]) << 16 \ 725 | ((uint64_t)(d)[8*(n)+1]) << 8 | ((uint64_t)(d)[8*(n) ]) ) 726 x[0] = MKWORD(block, 0); 727 x[1] = MKWORD(block, 1); 728 x[2] = MKWORD(block, 2); 729 x[3] = MKWORD(block, 3); 730 x[4] = MKWORD(block, 4); 731 x[5] = MKWORD(block, 5); 732 x[6] = MKWORD(block, 6); 733 x[7] = MKWORD(block, 7); 734 #undef MKWORD 735 #elif BYTE_ORDER == LITTLE_ENDIAN 736 memcpy(x, block, 64); 737 #else 738 ROAR_ERR("roar_hash_tiger_proc_block(state=%p, block=%p): Tiger not implemented for non little or big endian systems!", state, block); 739 return -1; 740 #endif 741 742 // save_abc 743 aa = a = state->a; 744 bb = b = state->b; 745 cc = c = state->c; 746 747 // main calcs: 748 pass(&a, &b, &c, x, 5); 749 key_schedule(x); 750 pass(&c, &a, &b, x, 7); 751 key_schedule(x); 752 pass(&b, &c, &a, x, 9); 753 754 // feedforward 755 state->a = a ^ aa; 756 state->b = b - bb; 757 state->c = c + cc; 758 759 return 0; 760 } 761 762 ssize_t roar_hash_tiger_blocklen(struct roar_hash_tiger * state) { 763 return BLOCK_LEN; 764 } 765 766 int roar_hash_tiger_proc(struct roar_hash_tiger * state, void * data, size_t len); 767 38 768 //ll
Note: See TracChangeset
for help on using the changeset viewer.