Browse Source

Merge branch 'ppelleti/ltc-fix-noekeon-gmp' into develop

Steffen Jaeckel 13 years ago
parent
commit
bb8bd034f5
14 changed files with 964 additions and 262 deletions
  1. 1 1
      crypt.tex
  2. 3 0
      demos/tv_gen.c
  3. 68 33
      notes/ccm_tv.txt
  4. 208 50
      notes/cipher_tv.txt
  5. 68 33
      notes/eax_tv.txt
  6. 249 0
      notes/etc/NoekeonVects.java
  7. 68 33
      notes/gcm_tv.txt
  8. 68 33
      notes/ocb_tv.txt
  9. 68 33
      notes/omac_tv.txt
  10. 68 33
      notes/pmac_tv.txt
  11. 1 1
      notes/tech0003.txt
  12. 4 4
      src/ciphers/camellia.c
  13. 47 6
      src/ciphers/noekeon.c
  14. 43 2
      src/math/gmp_desc.c

+ 1 - 1
crypt.tex

@@ -4988,7 +4988,7 @@ normally.  The decoded list \textit{out} will point to the very first element of
 
 
 An invalid decoding will terminate the process, and free the allocated memory automatically.  
 An invalid decoding will terminate the process, and free the allocated memory automatically.  
 
 
-\textbf{Note:} the list decoded by this function is \textbf{NOT} in the correct form for der\_encode\_sequence() to use directly.  You will have to first 
+\textbf{Note:} the list decoded by this function is \textbf{NOT} in the correct form for der\_encode\_sequence() to use directly.  You will first
 have to convert the list by first storing all of the siblings in an array then storing all the children as sub-lists of a sequence using the \textit{.data} 
 have to convert the list by first storing all of the siblings in an array then storing all the children as sub-lists of a sequence using the \textit{.data} 
 pointer.  Currently no function in LibTomCrypt provides this ability.
 pointer.  Currently no function in LibTomCrypt provides this ability.
 
 

+ 3 - 0
demos/tv_gen.c

@@ -53,6 +53,9 @@ void reg_algs(void)
 #ifdef LTC_KHAZAD
 #ifdef LTC_KHAZAD
   register_cipher (&khazad_desc);
   register_cipher (&khazad_desc);
 #endif
 #endif
+#ifdef LTC_CAMELLIA
+  register_cipher (&camellia_desc);
+#endif
 
 
 #ifdef LTC_TIGER
 #ifdef LTC_TIGER
   register_hash (&tiger_desc);
   register_hash (&tiger_desc);

+ 68 - 33
notes/ccm_tv.txt

@@ -143,39 +143,39 @@ CCM-twofish (16 byte key)
  32: 839A9BFA1D3CA37924BC6648DED2291FC61736A3638906D9C5DA28A66AA684AC, CD07B83C8E0C3E6FB4115A149BDF6FDA
  32: 839A9BFA1D3CA37924BC6648DED2291FC61736A3638906D9C5DA28A66AA684AC, CD07B83C8E0C3E6FB4115A149BDF6FDA
 
 
 CCM-noekeon (16 byte key)
 CCM-noekeon (16 byte key)
-  0: , FF73C6775C61DB36D9B5EEC812091FF7
-  1: 5F, 7D2AEA62A5202E3C4FBE05F33EBE4CC5
-  2: 0EA5, 312ED15FDDAB6EEEAC6AF9BE9CE698FA
-  3: 968F95, FA1AD58B85B93B5A4B5096C881F773C3
-  4: 9A8F4069, 8911063ADDF79E27D9DCEFF3F440E6D7
-  5: A5C0376E27, 9553F44B0BA8039527F8E05CD70AD8B0
-  6: 5B097736F3DA, 405B7EC685FC94903B36AC8E700558B8
-  7: 616810AE303B2C, 64C95A2DF5263F7BE6D1F9F3CF88EADE
-  8: C8D69A2E1170532C, 073A7E426266237FD73D8109F55AE5D3
-  9: 3E42CDB7DA4A72F2E0, 48675EA4302CA6BFE5992DE96CE43BB3
- 10: 88532CC1F3E321F66D64, 528B3516C6D9A4B5390DD32C2A2E6C19
- 11: 9216A8FC9A961E7F602F7D, B03047186B783844F5B6757057576B38
- 12: 89B0858D4FDE6795EDE19CCC, F4530A2DCA823307AEDE5AF34E5C4191
- 13: A676E20BB0A5E84FD0B9149BF7, 11B823B315DA93B0E15780851526D4BD
- 14: 903AD5C108C43A80436FE2117EF0, EB1C79C7DF20CE2967A99783EA8D6EF8
- 15: 81774C36F46F67159B7FFC24C080D7, 2E9E4812D9A92977EC34922782B6420D
- 16: 63FD1C3F692D64B2DA3982FCD474A5D4, 04171AE84857713A9BABBD4564875D33
- 17: B1BF6AD99F83C9173C6C021ACA74C5431C, 38D17D4F6AA3C24B8F3B465EAACE0A1E
- 18: 0948D1ED59F07DE44A96A76E05B0B6F7C309, 1848D886FCFF35E85B0DC3CBE5BEE7FA
- 19: 3458E5911222F9C555A1054C7D9748876DA39A, 584AFAE72FB6065A74BE016CF39D2E86
- 20: 641F3867185D0605E9D666AB605187E75A1299EF, 6F9332E6FB5EA0CE811E3345593CD163
- 21: 0676622D07733EF31A765AAB1E713FCE329277FB16, 88547474050FFC986930CC04BA8A03F0
- 22: 79861EC2FD2BCC5C12B69F30A1575FC66AC1405281BB, FC68EEAC8F39ED69D312AEABF8000084
- 23: CB2731835A576F7F8F2C2786D786FB6186E2F85D89DA3B, 3ED9E95BC51CF6368E6EF63667B35BD8
- 24: 3CB1C02FADB6DD5483BC5D3C03D944102CFCEDF82B913402, 1C3F60C989A6FBF41A7AF4F29115C334
- 25: E69FAEA5E3D0B76EF9E70F99C5918D934D0E9836F248DB9EEE, 7F1916B2CF7C9A5E3F5581D365ADBD31
- 26: 36779AD755A9DF2DC3C5824DC2F7DD4FFE038628A4E1A1C33AE7, 2BDED3703468D267F8AB7EC0AF8F1E65
- 27: E9D325646A41EE5AA7DABCDE98DE83440A7DC02714BA0AEE017E22, 972F4D7832F3371C60DCD04A6DEDEA15
- 28: 0FAAE3F6028A28A80BBFE71FA7AA9042E538B41A0D514D6EB4EE6029, F7B3925495E260249ACC6E1CBE956BC5
- 29: A9CC39EFFEE354C0E0579256AA85CBAA7B10E670DD3828A7A05DA0F49D, 28D9D20187AFE70AD9DD16759F0EFEB5
- 30: 032F4BBB4EBF2E65758C541FDAFF2107DDBED399739849F8EBB41AF9711F, A3436981ED637CE5EEE01B380C46ACAD
- 31: 7B321ED831CE96A603668E3E74BBC7453749A03D04A1B38E95966E6CC488F0, 88D1DADF2C1EE0BA579D0A8A90C1E62A
- 32: D862B0BD0E2178AE05AEFB14F34C791547C5956F1F3B5BD525926578DE383A94, BF32CFE059F27222DC55D3E7CE7C5F10
+  0: , AB924F56DFA05F4E8628C14111272E5C
+  1: 08, 8A76DCADA7CE53A0F4577E67B0B958D7
+  2: B602, E0BEAC0B1E95C4570A823295E7517C25
+  3: 50E4B1, F874F8B5F2806F64AE0AED151821C638
+  4: 990F28F6, 9AE2D6D5576D1C4722E2E3C11F5D98FF
+  5: 297104DD8D, 7A245E5F5E0F4C3466E16D5EF2B96D80
+  6: 7B6E9776EF05, 6B540166DE5E154D7A3A34EEA3FAD5F3
+  7: 67EB1922FAB0E1, 549F39F7C3CB17F0EA6EA9C75899BD55
+  8: 343E752F0F956C7F, 19CBB59CC4117DE6EB9924AB0CE2C9B9
+  9: 98A25FBBD87D8C1829, 6E3D4F0ED0C5B9161EB11AE9600003F6
+ 10: AAA54C273F69638CFB54, 1192FCD1F9F543889F3607CD6B623AA6
+ 11: 51B3F33EF8B1F38438618B, 8A704F5B003A21E4033ABFCC6C53577A
+ 12: C7E5167D81B23F47AE90DFC8, E218F7DD222CE31642CB06C329911CD9
+ 13: B065DFE10B9C32F1B028AACE4F, 5EC4DE45C29C78D1CDDF2A6AC05BD53F
+ 14: B5AAF0ADCA03812F251C8A2BE745, AA353E20F65237279643D4CCC06150A8
+ 15: 88AF734661B83CBA42FF983C260B63, 8F20A5190A218B8D392ABA1295CBF905
+ 16: 6663AE30F79A110747D6678784330BF6, 142196DDD26668E08D196BCE0989AE01
+ 17: 8153816C6E9C449B0439AD7892DF8C0492, 58B376CF240C37A08337C7794736838D
+ 18: 1611C22134C06CF8F43625017CCC65B6E305, C0443028C8DC5FB78F9350C4A8D1D32D
+ 19: FD2EEDDF2B20F7623D854FF4E987DB4196AB2E, 8B2CD7C72438F3EB071A33A7C65610B3
+ 20: 641256A9C543D0860E609F1AABC36EAB515E29C1, 0E1A0FE82BB18BFBB3D13BEB84BA185D
+ 21: 437719619E96C3AD2080470809F7CDDEC3011EB6E9, E31934C5F0C2E4A04A4ED533A98C795C
+ 22: CF2B11E8660CC6E650EDDB2146B11F864E01B4C99DDD, 8647759347E7A4FD2CE8AC17AF4186C9
+ 23: F339314695B539B715A7E5FB4799029CC133CEE26A2E86, 136274C51D9797986E92F9E540A80EB1
+ 24: 38F843B9DA155D57166D310D85406E72FB382604C2EA4CE3, D1D7C6397599ACC2EB5CF1E06975B423
+ 25: 29E497528D72C2BEBB12663F71B3981705BEF60A5451FAE4F4, 50F6C796CC00FE590E5E975206045702
+ 26: F16F583E1FEBC78F5AB0FA61B5BC389D3C16B62ECA7C6A86BC98, B3643EA448ECA0511312895B63193516
+ 27: 80347C7148FE1A5B078A27B3821DDFD93341F0351F4323EFEA6632, 8AF133E83EB316E615F1BC9DF241E23F
+ 28: 96939F79855C211B23E45771DDA2C3AB81C2672F94B87A7FFE46FC84, 4E7DEF91D1A102667BF55922B2531E6A
+ 29: 4789028961FDB78E8821A1FD9AF93BDB3CAC5C75566613E148B4439E90, 470DC4389C466AE79051A62F8122A1BD
+ 30: 7D2030ACE87827B785D3EFA3AE5CCB3DBF3A06DE4BED2D4FAB31DBE90F58, 55437514620E6B499C4FC01445FD2828
+ 31: 276940205F5B869E40BBB064BB0DEF9D86D520DFCFE531A77A55AA78DE8709, F291F6A4D7EFF52E5EE47CC3ED7902B3
+ 32: A75FCDC9F4E38C02E70D885353F5E3E7E13A14237D75EFA0D53B0C808EAF10AE, CABDB90052202C4EC777936B6097320F
 
 
 CCM-anubis (16 byte key)
 CCM-anubis (16 byte key)
   0: , C85F41475E06F25682F855C3D45A6523
   0: , C85F41475E06F25682F855C3D45A6523
@@ -212,3 +212,38 @@ CCM-anubis (16 byte key)
  31: B8176469E6A0D5797ED6421A871FEECDE48ACF011E394981C43AC917E8FFD5, E9B01383DB1A32E6126BD802A6C6F47E
  31: B8176469E6A0D5797ED6421A871FEECDE48ACF011E394981C43AC917E8FFD5, E9B01383DB1A32E6126BD802A6C6F47E
  32: AB6A0AA29B687D05735167D78DB697BA2478BD14ECD059AE9D1239E7F2AB48FD, A560A30FD87CF28BA66F5B2638567E4B
  32: AB6A0AA29B687D05735167D78DB697BA2478BD14ECD059AE9D1239E7F2AB48FD, A560A30FD87CF28BA66F5B2638567E4B
 
 
+CCM-camellia (16 byte key)
+  0: , 3B53D5CC8B26A5FFC78D2E974E45A661
+  1: 5B, ED7741D8C258D56A29392A7A65CF147D
+  2: 9396, AEC9E6690624A94E9ED39A0507C32277
+  3: 7D7DDB, E7D4B50F856F78EAFCCD6B91CA985AFE
+  4: 1DE036A3, 4F519237C8534508140174DD3F5D5E10
+  5: 9BD3C8B888, 760CADF4D2722C52BE28D89F9F1BEAAC
+  6: CA4252105A3D, 675B4D6953136E0691C3FE174381C231
+  7: EFF8ABC8F5CFA0, DDECDDF8FAE2BCAE971003D05A86024C
+  8: D155E0590C4DC889, 08EFED0B6FA5C0EB64B7900229EA41DC
+  9: 50AC40B4A083BEBF21, 14DABECF5CDBBB8F0AF3E7DDC034DAC6
+ 10: 1C5442AF9F2D491BE911, FD19818919D55FD80BCC9EBA0A108920
+ 11: 85A748561995A968CC9124, 69F769B8EA2BE927DADD209300752181
+ 12: 2F0838A1C593A629C1AE9032, 4C8AB614BCF4F7988EB4B93E1DC48EE2
+ 13: F19EE633F8B5E323904469D5C3, F82B28464B4BF73C39B332814E1672EF
+ 14: D6DBE7D82D4C99830FA1A6245125, 94D9EDF12A4A4EE357B647184EACC01B
+ 15: E8D02CBECEAD690DDFC1E48EE16B1F, 2D1355394CD62544D8840302715862D8
+ 16: 74C395F0C833ECB858F6D09C097192C4, 9079E949C4081B348259080AA0AAD85B
+ 17: ECB27927C303ABE439BCD9F9D4E87D5674, 726E8E755398A30E930F2159B510DD8B
+ 18: 86593B1148EF7D5B446AA3AD22001CB66CB5, 63B0D269B586B9C887584498FF61D8BA
+ 19: 0373123872929AAF354B085FCEAB74DD2D28E4, 5FE2491F2603E474D15500DB2E32481D
+ 20: 3EA3D8DC013F2A6E42BFCCEE51BBFCEDD194BA40, 5667BD5212E31F02C8D8B94FAB5A9DEF
+ 21: 5ACC89A28DB162595FD55D63ED2C5B48976E0BA0E9, A52EDC5A3AB7B070B755DBB008D99787
+ 22: 381266462C783DF3B5F3F3570611D6E0A61ABDFF7BA5, C79D371D81511D85D7B54B686AADFAFD
+ 23: 8819DDC964172B3BE049CCBABCF5AA7EDB50BD90E871F4, 45561AD598EB2DB8F7825878786B2CED
+ 24: F514E9F64E90197728E2D061443ED006F2CF2236EC2E65CF, 0C47214A73F6CEAEC1C96FE859C519E1
+ 25: 3B965F16101777CF84C85AD864701BCDD617681B92944386AD, ECBE6B6BA145D10FE0D5042A5F04BB68
+ 26: B573EB75A48CB8F56163A55DFB870017E06940D799ECCECE7C2C, 63A7C16D33F6ECA72B2B33C6FFF4F13D
+ 27: 47A3A96928BC9B28E22C3AF1999A30E271806BD3E6C8FAA4D82D62, 25E319011BA2F72BF7447C8EB36BBD01
+ 28: 0E873D38B34A0857FB82BF278AE07AEF9A4B378A8300CDD96C5BDE34, 6045114D75AE7681C91E5BC508E2398B
+ 29: FF33B9683538014DCF4F7D78CF7126FB43448BF9883D69B824019B05FB, 28AD47D363A7F9A4653C6685F90C2971
+ 30: 58005BF96E194411DF808DB3A6D405CA241986486160313AD092026A0A54, 7D8A8C8E8AB6ACE7312D82146219F37B
+ 31: 20C3DFE512F4EC1F17973BBB164E9F1B77CC3EB37B486119614764F4C7D0E2, 57CEB0625D34AD40935B03C54A1B8779
+ 32: 913F8D366D4C2AC10ACB3196CCBDB5F436CFA92377045EB3A1C066F6ED7DE0E9, F48C8BB647E719049DB38C39EF779CE2
+

+ 208 - 50
notes/cipher_tv.txt

@@ -1647,56 +1647,56 @@ Key Size: 16 bytes
 
 
 Cipher: noekeon
 Cipher: noekeon
 Key Size: 16 bytes
 Key Size: 16 bytes
- 0: 18A6ECE528AA797328B2C091A02F54C5
- 1: 2A570E89CD8B7EEEE2C0249C8B68682E
- 2: 828F4F6E3F3CB82EEEF26F37B26AEA78
- 3: A3CA71833499F244BF26F487620266A4
- 4: 333ACCE84B0A9DE91A22D1407F9DA83C
- 5: 224285F3DB3D0D184D53F8FFDC8008D0
- 6: DE39E2973025FE9EC1ACDE8F06985F91
- 7: 2F00F45A01B1B0AA979E164DC5CCFE10
- 8: 43775F3CBEE629EF6A9BA77CA36171D9
- 9: 1E6A67ABF1B6ACF59FB484866AC15A86
-10: 70490989E2CD2145730921CCC37F0A17
-11: 67B0DD0EA903486B1CB56591FCF42678
-12: 774AAB71FF28E49A30E1E718D98114E8
-13: DF4797990E1C65C9F6735BD967164D45
-14: DE2779DF26FC1B99F576ED4CFBAE76CB
-15: A13AD17440641B3460A01175E3274AB9
-16: 1166499165F2A1196CA2DB831F264E77
-17: 35D24A385416CF2A44AB97A4AEC45E14
-18: D3D0E0DC962B1AD1AED92F57129088B2
-19: 00EF3E246B32634ABAF8BEE31D5C592A
-20: 79BBF3F807675B9F264BABC67DF4C2AB
-21: F391F2D58F0998F24BC9E5FA75DB9E99
-22: 066EF13C2617E97E6015B86BA1E059B2
-23: 5B0E2D7AE1E2734B9D5734C87F7BE272
-24: CDF7020212B7CF21F4817829386A6F8E
-25: 24873E1A0EF4908DF85114ED9BDB0168
-26: 99904360C843472F71AB86B26DC78A00
-27: BEE70B3735A67268578FF107C328940B
-28: 97DBB283536BC8AE8DBF56F3474C7740
-29: 2F4C903975EF709E004D24DC132A8A51
-30: 3EF0859A281782F905198C607FBE5C43
-31: 2D9CD48BC6A99E86468CBDD2A55C7D5F
-32: 5518D3ED18D5E5A62752CDF0846D0C77
-33: F751E9CAF107BAD8A1F1F9C374277A6A
-34: C5BA4DE907C41221FBABC5EC43710D0C
-35: 5CA48836330870365A10E7B676695C9D
-36: 937A964E0EA4D246E97293375B167EFD
-37: C0A876CB6957717541A90CCCB034BFB8
-38: A57C93A09F9160A28D3D4DEDC987746C
-39: 1FFA1E0B5EE0F0A18425F62717254419
-40: 8411C87262AE482CFC43C3092BEAFD90
-41: 0B9BB379FB3587A9ACEEED4771D8DC20
-42: 3B32EDBF9557E1DFBCEEC269B51FA494
-43: D1104E2888679A9EF6A13AE00ED7E1FB
-44: 0EC9849BAD58A279B42B5BA629B0045B
-45: CF206E8D3399918E75DE4765DD743060
-46: 55CCEB28E27D4DC7CE2546454FFD2C33
-47: 6E2339281583420B76E1750D35296C12
-48: 7800EC3D8C344BE7F2D2812F5AFF3DA4
-49: B80F4B0BDAA54A04D5A26BCA185F4EA2
+ 0: 22C082F55D7F6D861B11C36911BE694F
+ 1: 0485388F24B147918116347E942BCF4A
+ 2: 47388A4B060617B21134D3B4EB1CABCA
+ 3: AA8866CFB9D7507CC67A7F271AEF11E0
+ 4: F6A078AEF1BDF8B621A76CB732804FF3
+ 5: 8301F76E39A4E8C8AC38A7751B26DD31
+ 6: 5BE06821E7B23277B808143F36BABDE0
+ 7: E326A3A32F4F0D8A4FA94877997DA11B
+ 8: 2BA7773B55F90B5399C11EA80D6CADEF
+ 9: E64776D92B81770E51E4E2F44688A59D
+10: E987ED52D4C33B2668BB9DCF0889D5AB
+11: 351F5BC075D06BC6977D31A442CCC2B6
+12: 645468E2497FA5EB913C04032457C1DF
+13: 10CFDBEC689B01FB969AA2C760F76CCB
+14: 0BC5B171A3B727B9594238EC522F72F0
+15: 887D105D54D8EAABABC892F04F3455C0
+16: 53CC30B5F16713AC77205B0F194FED59
+17: CD63AD99CC0D5F34D67C363F99F7CF1E
+18: 59BE7B22114383FE8491304FB291D2BC
+19: 4B107C8D37CD46EF1DB68ECF4588FEF3
+20: 46034C755D278E368305D1133BA6B4FA
+21: E2472AC6D4048AB59E126930F6476D06
+22: 821014CDA5084A85058F1D556854D33D
+23: F67C3FB5CB1271B454810FEE632F7EE8
+24: 57705CB352AF1A8B342E1E555C9DAEAA
+25: 72AB36C1A8D3C2111330D0EF78726227
+26: 1931783D7E3DD6A33962BAD6962D8A33
+27: 06029A07CA801027D97BFAFF4719FB89
+28: D78B7E4E3083A60610C42BFC03810590
+29: 3CA3B14C5741A43F1FF5AF2179684DBA
+30: D1BCC52AE476999E25391E7FFDC59C81
+31: 1E102DBAA4224ED5E32515A59A07EDAA
+32: 81BE227D2663DBB733F9CB5018AED67C
+33: 92C5A77D5D62A16C031DA0BD968FBAC0
+34: 9EC8E61B543BE73AAD711A9F58C86790
+35: B6A1FD059A7D8D73C143C17D97E4C177
+36: 0316ED78EA520EE98BB568413A390E44
+37: BEFEE68550E2FAFC4AECBE309031BEFD
+38: D394CBCC38A47482B2B6900BD68D6540
+39: C58F2EE6C493BD1EB41DEB88A169D240
+40: 0A45FFA6D6E888B1F6E95E388818C6AE
+41: 8A9CAD2C511F284CE1D77167E5D23456
+42: 577CB9155A69CA34213FFD15E03D54F4
+43: 2AB7DD760EB7DDDD3883A6966B9D44D2
+44: 4564DC5318B0A940CBBC3C1607804B70
+45: 0E9F42D9C2AC03694CC2E82BA3C4BBBF
+46: A49089D9FD9E13DF35B0490E59A9B7C9
+47: D58B3008003D6C8D556D7D76180691FF
+48: 1FBC6D5F3F1B0E599DED48FF7A63CB76
+49: 077533478FABE8AD5DC2B9E96E7CC6CB
 
 
 
 
 Cipher: skipjack
 Cipher: skipjack
@@ -1965,3 +1965,161 @@ Key Size: 16 bytes
 49: 0133E1745856C44C
 49: 0133E1745856C44C
 
 
 
 
+Cipher: camellia
+Key Size: 16 bytes
+ 0: ED18D83F3153160C5A6D01AC3717515C
+ 1: 1012886CCDF3FFD25E588BA10D6CE363
+ 2: D25562F6943EBE3A7E0EF28D33CF091E
+ 3: C26FDC4539DD1E6D0330B5836AB24420
+ 4: E14A50CE727B74B8CEBEB284FEF3C810
+ 5: AABFD72D334F594344C617EF8E8F5741
+ 6: E8D941419ABE88060835E9BD375455BB
+ 7: ED863784E1590139A2CA50D77450300A
+ 8: 545FCF42030BD764724C3EF5C139B038
+ 9: 08C194E007FAA99997D855A759D10743
+10: 3899D3731500C79D2945AFC2980B4C17
+11: 2720FA4B402AB7F1B019AF6248702369
+12: 3FF6C3C90AB4141DEE5FF30EA2047F73
+13: BB5BAF7545AA774C7AA5A58568F96832
+14: 66349C52709EDE0EE34AB6501B420C7C
+15: E1E93D923504A5421BAEA5F1D61D4C9A
+16: 3C07DFD64B2407BB7575A905F3F31E83
+17: 0FC569AC89ED790F69BBD1E998700C97
+18: 6B6F390AFA1052BD2E8DB0DC261E4D26
+19: CBEA83ED55DA9DED95B87F2BBBEAC37D
+20: CE005DECECB98F5937D5ED26FD83154E
+21: 738301D76316EC4173F124A9C9D6577A
+22: D00A1E40CFB5F2B8FD2C0714580FAD50
+23: 7EBF497C78B72E646EB72A326F1D5C4B
+24: 7E0023900F6000D00737242DA8F2E1B1
+25: 0F7737E715BEF0DEA503E355394540A9
+26: 15452DD70DEBF45BEF39782CDB8BB086
+27: E7464917B3AF060BC763D8959DDF90C1
+28: CBE4B90FF8C66672122D53585198773B
+29: B7262E6CAA2C14B18EE374DF922CDB98
+30: 01E695E3CD87A2FD4B9C49D08D032DAD
+31: AA1686BA0B5C5688D0F370C6E2BFA43C
+32: 9448BA348E8E904992C3F4233C226B22
+33: A1DCD1CB810DFB46BDCE6FBE3A192560
+34: 4345D200A309FA8C5A0CE9EC60EE506C
+35: 54C7F64D9B411BF90B283ED62686D28F
+36: E347E882EC2635081547612B1D9589D1
+37: 36D44CC101B37BB6F6AF68C3FEA3A7B7
+38: F38C2D5B921965D2AFFDBF4EC5BCEC19
+39: F7ED6BF85782F0526301BD1CD1624E67
+40: 7959C134BFC85CA176550EA689F81054
+41: A8FC96504C437F0EFD0BDF6CCEF516D2
+42: 6B88D1A06D7C8C74379FEFE2D6A7C895
+43: 39C21AA165F4A71A161971D89CA5DC32
+44: CC123C40071BF02D282DC83D2AC18226
+45: 0780A63741AE47CD03FA99A74C320E33
+46: DFB0831BA27AA0750701439603B8A805
+47: 0C783CBA4ECD9EEE1F91838259831187
+48: 1456624438B22555B08D59CA50D6E95D
+49: D5F463D983A9A6FE9A0B47C245596D40
+
+Key Size: 24 bytes
+ 0: 1D1DAF85EA5CAE19F5F5EA1DC61E5B83
+ 1: DDAC7FCF2C2F275C7041E7821AAC84A3
+ 2: 591091C3755816AAEB9170D5DF77A0B3
+ 3: C4BC965CDC20E6FC039F07DA2CD10BE3
+ 4: CD8DA54FC48524EDCFEF985C0C39C961
+ 5: 14FA12F39AC3D701A958765B4499FFAC
+ 6: 2BBEA5F3AA140CFFED9F1EB2BC969D56
+ 7: 5F73CA8BF641770D6833A43947D9A5C3
+ 8: 3E872D303B882284AB02393D43137450
+ 9: 01EF55D4CE182FA03216A83A5128F761
+10: 915C2F5793692A6D118D865783317C58
+11: 4368A442B61D6F12D5447F1CB8854714
+12: 3477ECB27ECFF2D7108ED1297DE80F86
+13: 89C875CB55C1CE80FF2D430921FADB05
+14: C5AAFE7A4588D4D9039E4552B3FC9B02
+15: BF1E7509405AB219B540BDD0D3DE7528
+16: 7E5CC85B6563099B902638B7E0D09728
+17: FF04D2350647F117F81DA037A9E11946
+18: EA294A53395A20B391B11AB9F97262F3
+19: 448C801307E9405F740623BA55A45639
+20: 62032AE6EB01322233FB321B2D6A8C38
+21: 79A54FFB9CA25AE315BA0E7B6E59EA99
+22: EDE7E634C396926876A49DB3C0E261E1
+23: E9DA5106B8BD33391C28407E9B3758BD
+24: D8EAF9F744E060695AD1F55F85AF3D76
+25: F1E61F0F467C0785B6053332129114EA
+26: 3119CACB24B012F3B96EFAD3FB856AFB
+27: 97753ACDAFD6224E5D289BF76673A73A
+28: 8D5912FFFD628736C64B3DE01DF1E674
+29: 8951CEDB758DF5EA5D2A78B2A08480EE
+30: 3C0FC9DFD8CF79A5F9F75CC43B1A9247
+31: 4C7047481FE0849EA0416BDC00A52321
+32: 97034388AE8553570366EDFB9F6D618F
+33: F16BCC0FB2B77CCBDC5EF7AB2233599D
+34: 6D94D041196F43F0224B1DAC84165E7C
+35: 313C6BA0AD767259860DCF8003F2F5A2
+36: C5F835DCF63D1C40E56DBAC7ADCE7F3C
+37: DAFAFF6BB46EA9280562E5DDFA793BA8
+38: 5C8C0570B06C595E296DD4A9FB864FCE
+39: 72B433F78D7CA638C2ADA09D99CFB769
+40: B6D7A6C47339743E9739D35D0F08A25D
+41: 6CFD73F9E9781FFCE53C69AD2EF11E03
+42: B7F0BA994EF90642B80FDD798666D752
+43: DD49766125316ED4F546B246A2CFA23A
+44: 8ED53D6CEF3CFB9DB0147F02656EDA35
+45: 95690401D61C84A013EC6D25CCAC5CD1
+46: 7693648B4A6CA804B6F01AE67816746C
+47: F08C5898CE7970C41A5F8C05882CAB8B
+48: 91EC0EC1CF839B58009E6CAAB3FD67A0
+49: 853DFA14A029EB8FB8D693B0A65306A1
+
+Key Size: 32 bytes
+ 0: 5F77DC44E5E6701E8755C1FA176E2434
+ 1: 5C1F70FC144C66D82D8F21DD2A0BA54E
+ 2: A98317BC656475F83E83062A69A17EF6
+ 3: D5B8C0DB1095E65D49CEC82D78FD4C7E
+ 4: 37A537292409ABE5B922DD97EC0F6CA4
+ 5: C7FD40883DE6BBC6059327DA586AD96E
+ 6: F4D19C443A2195B66085DACA7EFFDADF
+ 7: 6F12FD74B4D25C9F2856CAA1BA32461E
+ 8: DFC00046F41BC27684321B980BF68F6E
+ 9: 4A8BECB6A8D57002FCC6FE08B6D31118
+10: 859562FB3727E535BD4A914907822545
+11: EBA65EA3BD622DC044CA5384E568C65F
+12: 79C16A751FBE22340F30462600724324
+13: 8F4FB71B5B3E0C1DB870B4BC81E995D0
+14: 4B82E7E8D64D8EF9D78DA944B292CED9
+15: D873F8D7125A63EBB04473F7331B1975
+16: 2FA25AF9E8D5A4DC82CAD98505E5DA60
+17: C80C24625096E6E9852A6F9EE12735BB
+18: 10D4434CB795DC06E926CFA3B43D2368
+19: 070795AEA2765A443213F9CA909DF6C4
+20: 7184D2F5644306FB6DD55F1C90C111CA
+21: F4FAEDF12FB40DE7CE7B08121A340557
+22: 86CE014AA863FD3030A26E6F8C178673
+23: 5A46BF2B3F14D5FEA884C3361EA87ED3
+24: 456584515D983D17ED4F3AE944BFB2C4
+25: E1E8F394691C2A9123023A8EE3FCBBEF
+26: AC73E8BD1758850DEDAA3817B01E6353
+27: 15AE5395CBC3371F81A6F5B05C52671F
+28: F15AA72D34C4E0EEF8DDDDA90D9A9539
+29: 3325E709043735898EA242E94D169112
+30: 044AB447754DADD4E2709FEE08D5CEA2
+31: E02DD5E86D32B3A6CC7F0016375AEC5F
+32: 790278BD19E2860618E24DC69993F92B
+33: F776D24FD90A43A78D000CFC1189E56A
+34: A3EE4A3D121280750F7C70E55DD40FF4
+35: 32928BBBF98DF4B9E107599DFB30364F
+36: B3E9296B529118B656D27AFF0F4D1A55
+37: 4668FD77100255C3406281EC813719AE
+38: 16F9FF27B26F13300DB8DEE2EDD023AA
+39: 9295F8435D688D12BE631A31B2531482
+40: D86917DF41ED4342C0ABF10628DBD1B4
+41: 1F5215B987C3F079769292E65D04B823
+42: F68B98BD2F12AACEBE78666AA83CA7D0
+43: 09BB635B67279F5A6B1D5C5D880A1357
+44: AE4ABBCC1D35CD8C4C254111D5F27158
+45: 5552B3E39DE67F759799A686222EE4EC
+46: 1CA439434B9FD2F24561A32A0A2A79C5
+47: 0E33BE7CE3B9A5CFF00A73BD27DFE9EF
+48: 6B7056FDC97983173D6B3D5BFC9B09B8
+49: DA293A4CB96FE3608CFFD89B927C9ED6
+
+

+ 68 - 33
notes/eax_tv.txt

@@ -352,39 +352,39 @@ EAX-cast5 (8 byte key)
  16: 70CABBA983179106AE7FCD5F1F31D5C3, BF7F9168F4F82F56
  16: 70CABBA983179106AE7FCD5F1F31D5C3, BF7F9168F4F82F56
 
 
 EAX-noekeon (16 byte key)
 EAX-noekeon (16 byte key)
-  0: , 556805EEA595CFB9A30FAD196103D7FD
-  1: F5, 0A7DAEDFB656526CEF4DDBA8087A227A
-  2: 7B8C, 249895D79962D5B4D18FE07366281B72
-  3: ACFF15, DCC489D24832EB106F576AE6B6EB957A
-  4: 08ADE7DB, 0D3215999E9960EDAB29B78744C7F139
-  5: 66139213F6, 505E1E7141D043E903C26EE0959EEECD
-  6: 078B79F880A8, 35B7EB326A55E50332866EEDB682EC20
-  7: 2809E34D9667D4, FFDEC555F68524A09A6ABACA372077D9
-  8: 93D267DE1EC635D3, 4FF3561990A56E4B374618722EF850FF
-  9: F377A4D93FF32F4A51, 91D4070423A90FC54D305169C03F49ED
- 10: 6244B717E082993EB7A1, 2E3A8A354AFA9473667ED7FDD46BE9FC
- 11: E917559625D25E6E5F2EDA, 19295C37A70314CC9A1D11FDE8D23C92
- 12: 1E6DF2EE112A893AB14DFA92, 12C4A89D4CD65F8116A03A135AFD3701
- 13: 47B18CD762E011770E203CF605, 434909A97E118B20D3AEDC79AFE33A9E
- 14: 72D9A1A7DA6F33D5E0B927F9F32C, 779C23714FCAA2B2321EC7FB5B03E222
- 15: DA8B830FFCB3DB274807F780D33240, EDC2F1C8A401F328A53392597730B007
- 16: B53DD2BB840AD933D36A7B5FFDCCFBBB, 4EC0E6D1F916BF633869239B672B37A1
- 17: 42936BB9A936C30408660855F4F47F3314, F0DAA6DDA15585E1697ABBB4790B15B5
- 18: 00372E47F5BA016F1B2A1E680B76AB02052A, CDBF3D241BF7FF96D3DFBEDDB872E901
- 19: 8AA236B0C8BEF6F67A97C2DF90628F6E5838FF, 731DCD61F7F26004C03519F9500EA824
- 20: 55338647812FC9D86CBDDCED7120268A4D43F8BA, 0E61B3C835CAD95FD49FEF002C014E72
- 21: 435820B28E52154B47A04D5E635D8FE37FA47FC985, F6A96DCE4917E8D7C610923627E80970
- 22: 0D30C15B6FEB4A48B14DD15D41A4B25D442AA677B25C, 28E15CCB74AE992C68BDDC8D87802050
- 23: D9D701F9AD6B0E13D2CDDA15A5194E7CE8BD2C02137391, 2DB9A15884E9C996C3D6B5BDA44B9598
- 24: E2390AC5CE10CCFBC72106A52C7F180CB477E3C193CBACA8, 22D3F7DCD6947EA4E78DF57A8E1A9A59
- 25: ADEFB7D9500658D34996AF6BE6336CD78891064EA1DB8E9785, F239D67D039A15C620A7CD4BE4796B3F
- 26: 89964C90ABF54A6DF9F13C3681E70C702D80A17BE79F8160F30E, 6336F729ECE1ED7368669D75B7E2DCBA
- 27: 576B2813CECDA4F905BD5D58349EF070FF41B7EB6BB2B01B061B0B, 125324CBF2ACF1011A44A99A11EC8AFC
- 28: 430B957481748519A60494F0B5F698F34B1A8235B00AC0D1F0A4442E, 1E80A7FCEBBB8E1E12D6831906154485
- 29: E781BFE5FCDE0BFC056CC86C4A0B9DD3B815BE8CA678204CF47289B5B5, 190D5AAA9EC1CB4CC86FACE53BF1201B
- 30: 78BFAC07A9B7B2AE9329BF9F9BF18A1A49DD9587001EFCA00E9AD9752764, 4FB5ECBEEB0995C150EBC66508FA19C1
- 31: 7D6C20694109DE21F7955855A8FF832347518DD496C2A114DF142C68ACDEAA, B25D4BB34056DC091A7A3950D46C32EC
- 32: 3E1E4395DEC1AFEA9212B95F37E679B6E2D14DF23C5DE49018C2C8038CC4AD45, 9A6DE7BD41A21918AD504490EF4E581D
+  0: , 5CB584CC68025F830B42371B9CCE99EB
+  1: 65, 69D866C00E11E4311ADCD50AE2F91D03
+  2: 80D2, DA0499598F478A7FF53324908EB4DC74
+  3: 86EFB4, 7DC1556C65F9E7CF2E3A357B38E326D1
+  4: 87387A77, 7B58F421766918A179A999520A6E3781
+  5: D18B9788C6, 924A2FF178FD06BF292A605FCB27BDD9
+  6: 0075EC03ECD1, 78F553564A25A574E6A4857778A2DB43
+  7: 5BF96EC79C2E88, C49CBD1C4F631B35D5A3B764251870D2
+  8: 70DF3B35F6D9B822, 42351BF5C947AF7A0E1F852199B5840C
+  9: 2E53748525AF367861, 4986BC390AA0DA1E4E78CB2148A2C513
+ 10: 05DE8BAD8C975ACECF87, 1C0F1C18FB8682D76AF9E48D3547D88E
+ 11: 8B2B1D70F6A74059503F42, 839EE120ADC8BF08CD9A7DF6393D1E51
+ 12: 9D7F92F08953B5B300A7410E, 603A43432DAB26882797BB5AA7A75D28
+ 13: 4CA551DDB4BBCFA45BF71C49DA, D2743508826E3E39151F21C0AD81C8DC
+ 14: BAE72091E78013369AF5D0294AC6, 3F0D391BF01C3BA116A9CAF50DC28307
+ 15: B037AFB65588B95BC86E1430E0746A, 2399A4C31F55310AE2C4A2FE3379C74F
+ 16: 842F0B29888C43999545D29CFEFA58DD, 9B6E4FED2A6BE59DC2DFAB407D2FD124
+ 17: 86F7DA57E5C9DE9C88EFC1ED0CA61F76A4, E7278F365289FD0C484A166FA9EDB801
+ 18: CB94AD60C1FBDC9868DDE0D4674251A644B5, D857CE47FB963DFBE7983D183695803B
+ 19: 5A0B24FF167EB133808A3FBF89D9895F30BE1C, 488362E61725BE723CE892F550AF028A
+ 20: 60D43A8C29F1714588672847FA00DE771F2C3D36, 25D7CEF55A2A33953D9B7739F9C98C12
+ 21: CC47C891FAB841800F0AC0F746A257062BE9AF49F3, 220A3EE618FB735B9E801F9B3708D4FE
+ 22: C8E0F9AF7A7C62B6C297B16025DA55BAF5BA13F6ABA7, FA16192047892BC2472AF1DBD95E0D6F
+ 23: 731BDA5BEFCBA427E715839C21E4A176D0E28F042C3089, 4CBE4BB916EEE773B9299FE2FF0BBD81
+ 24: 62C5CD4F7EF81EA4E58847F3F715FA9E9EFB32059D70BA88, 090E92CEED8FB5D472CCDA11363FC904
+ 25: F7FD159377B130633F93B4D18BE68B0872905BDB205025E4FB, 6F335AB81AC8507D5F4018F86FB0230E
+ 26: DC374E5B40E8F4614C2BE685539C97825C7A972CA2BEFF338208, 719F6C042DB09A08C36D92810FCC29FD
+ 27: 1050C71D491237EF77F4F043D7EDCBD41DA0BC155F1CB65EAA1D5E, 44E7CD8CEB27584340270F3CADE1A083
+ 28: 8AE94A4FF500DC889436866D90B8E150B63EDE74074912029FF9C3A0, 3C96328BE53423BEB32FFE0D05F9B71A
+ 29: A801D1571411396C0727B132AEFE114D7BD486DA74C549E7661F2D8B87, DD6A443497AFC9EB14FE6EE9069AD580
+ 30: C79DFE19B0199768EFDD29026863C644A0ADBD14A3F3866DE74EE7AA2E0C, CCB313FE30CD4F04BB3548808FEBAE6E
+ 31: F658ECDD95F960D7C68D03F9BBADF066F8B9CE8108867C7DEA305FF4124AF2, 8AE64618E77A2806B53E239927787ACB
+ 32: C92EF301771E89D5BD3B901B380EBE18BD2A193B5989092006E7AC15345AFD34, B450AC584DF13D9C8BDD32DA686A1AF9
 
 
 EAX-skipjack (10 byte key)
 EAX-skipjack (10 byte key)
   0: , 85F74B6AFFB10ACD
   0: , 85F74B6AFFB10ACD
@@ -459,3 +459,38 @@ EAX-khazad (16 byte key)
  15: 14DA751E5AF7E01F35B3CE74EE1ACF, 3C76AB64E1724DCE
  15: 14DA751E5AF7E01F35B3CE74EE1ACF, 3C76AB64E1724DCE
  16: A13BBC7E408D2C550634CBC64690B8FE, 3D4BBC0C76536730
  16: A13BBC7E408D2C550634CBC64690B8FE, 3D4BBC0C76536730
 
 
+EAX-camellia (16 byte key)
+  0: , 9E8CDB7237166EF9FD0605A0AD3E4070
+  1: 8A, 23F462AC7E22EB9078DAC34CB1CFFB08
+  2: EC9D, EBA9E2E3112C18CC2991FFF97EF77E6F
+  3: D2A9CF, 913472F45F6D6B087D8AEB34B0FF9494
+  4: 360A7ECC, 6382103D53AB8C9263977AFB1A96AAC4
+  5: 80B52AAFE6, F855787CD6CCA56CD656A0DBC663CAD1
+  6: 0915D546F5F0, EBE17981CAB5D59E6376CFE30DE66936
+  7: 086B525B082B71, 182D76F2DE42F5D0AC252F25E7BC34CA
+  8: 438DA1E9E78B9D2E, 36BA12456C3AC5ED3A0BDF851A651E82
+  9: 0F9C9890152D6AD5EC, 06F3A96F40D794552CA799006E76AE7A
+ 10: 7754241DCD040CC449EB, B576881B5E542A73717A6AC24E516079
+ 11: BB536F70C1111BFAC4D149, DDC6043F2B5DF96418799DD13BD04726
+ 12: 4B530B4F67376C4B7EC1CB29, 43A36C14092F19F168ADF0FD9F557424
+ 13: 55D5D285DC88451148C7B2B143, 7C2CB43BD19808EB90F045E6D6EB70D0
+ 14: B321948117659CB06E6B364D00A7, 1B30A37234E3A13A335EFE6A07B070DC
+ 15: BDCCAC5E956953E6D5C43D9436D453, 98F924C659F4112B1D9DAFFF711FB2F6
+ 16: E0A2F28186D79A9494700E5A30351542, C604F7F47C3F18F236DDB289D287BE91
+ 17: 750D6EF87E1C9E1023920D3F355B2BEED8, 96FEEAC4DA36FD36129F67C3EADA75EF
+ 18: E7F91687119D70793B9BB0114C7B588D32F0, A75052978F26EE6FE5D802BD4C06004D
+ 19: 56D7420981DC556AE0137DB0F1BD1CEC0BC945, CC024D30F19EAA3CDF66E51246FC3225
+ 20: F2D61A0E214472663F5F41C9D66EDEEC2F7C824A, 9706F273AF680AE2537D02BE41A2C980
+ 21: 30F76A83CF8010DF0F49F73C06435E0C5D85EDC6E3, 1F18354A73BF506D229369836855EFD5
+ 22: DB9688FB58EB83AF06A579CE56FBC75D93412790924C, C9DD5350751CFF0AB1A8910AC1898E08
+ 23: CBD64BAB16852F40FB00D9FEEF5365C773CA14B77EF5E2, D6A02105B1BD018A5BCF47A69803248D
+ 24: BDCE2AA8092D4790041750DC922F2D6AA12DB3F41A547C7E, 3DF09D758306DAE21C3AAAB3FC51623E
+ 25: FDFF0AFA4D94CB3019AB27234259ED225B1B3B0F2BDC32CDD0, D64E69725D638D9F0F90C44C6BF51722
+ 26: A9D2CC4F7FB98D54A78293C64C2A41CA19CC1F7B9970F3437AE9, BDFC6B10DD012BA057CCCD40AE14569B
+ 27: 81FE813C4A6A47D34F146DD943092940ECEA77F85339A219B6134D, 5F44590AE8CDF89E13AE2BE4D32AB7DB
+ 28: F618779FC6E6F5B7EE3FB4E937097E6A122B979E3DF837F72A8FA3B9, 00F0A3B4C67F68590AAA0BEF2D399D1F
+ 29: 0A8AB66D218268C9181DB8C6EF542AA4B42E53E4623E3385723024CC3A, F28D7D86317D2F509561DD3392F3EF3C
+ 30: 9CD50C94ED5391BED5C8CE2A07F8955744B275B6C5E5B6F453A5E6185C03, 048E889FF70729C55582003ED6169E0C
+ 31: 1CFD6D8EF6F44265703544AFEB2BBA2A067BE8DAB412E071B66B70E357238A, 0A5BB055E00D42F4291CAB3813FC2946
+ 32: 8E6E6433E4FF879155E0612F17EFC00AA8D5236EFAB5D9D6A912898F3124B588, EDF81BB73FF9288F315B988413432823
+

+ 249 - 0
notes/etc/NoekeonVects.java

@@ -0,0 +1,249 @@
+/*
+    NoekeonVects.java - Generate Noekeon test vectors using BouncyCastle.
+
+    Written in 2011 by Patrick Pelletier <[email protected]>
+
+    To the extent possible under law, the author(s) have dedicated all
+    copyright and related and neighboring rights to this software to
+    the public domain worldwide.  This software is distributed without
+    any warranty.
+
+    This file is dedicated to the public domain with the CC0 Public Domain
+    Dedication: http://creativecommons.org/publicdomain/zero/1.0/legalcode.txt
+
+    You may also consider this file to be covered by the WTFPL, as contained
+    in the LibTomCrypt LICENSE file, if that makes you happier for some reason.
+
+    ----------------------------------------------------------------------
+
+    This program was inspired by the comment in Botan 1.10.1's
+    doc/examples/eax_test.cpp:
+
+    // Noekeon: unknown cause, though LTC's lone test vector does not
+    // match Botan
+
+    So, I investigated the discrepancy by comparing them with a third
+    implementation, BouncyCastle: http://www.bouncycastle.org/java.html
+
+    I determined that there are two reasons why LibTomCrypt's Noekeon does
+    not match Botan:
+
+    1) Botan uses "indirect Noekeon" (with a key schedule), while
+       LibTomCrypt and BouncyCastle both use "direct Noekeon" (without
+       a key schedule).  See slide 14 of
+       http://gro.noekeon.org/Noekeon-slides.pdf
+
+    2) However, LibTomCrypt's direct Noekeon still does not match
+       BouncyCastle's direct Noekeon.  This is because of a bug in
+       LibTomCrypt's PI1 and PI2 functions:
+       https://github.com/libtom/libtomcrypt/issues/5
+
+    This program uses BouncyCastle to produce test vectors which are
+    suitable for Botan (by explicitly scheduling the key, thus
+    building indirect Noekeon out of BouncyCastle's direct Noekeon),
+    and also produces test vectors which would be suitable for
+    LibTomCrypt (direct Noekeon) once its PI1 and PI2 functions are
+    fixed to match the Noekeon specification.
+
+    Although this program uses a PRNG from BouncyCastle to generate
+    data for the test vectors, it uses a fixed seed and thus will
+    produce the same output every time it is run.
+*/
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.util.Locale;
+import org.bouncycastle.crypto.digests.RIPEMD128Digest;
+import org.bouncycastle.crypto.engines.NoekeonEngine;
+import org.bouncycastle.crypto.modes.EAXBlockCipher;
+import org.bouncycastle.crypto.params.AEADParameters;
+import org.bouncycastle.crypto.params.KeyParameter;
+import org.bouncycastle.crypto.prng.DigestRandomGenerator;
+import org.bouncycastle.util.encoders.HexEncoder;
+
+public class NoekeonVects
+{
+    private final DigestRandomGenerator r =
+        new DigestRandomGenerator(new RIPEMD128Digest());
+
+    private final HexEncoder h = new HexEncoder();
+
+    private final NoekeonEngine noekeon = new NoekeonEngine();
+
+    private final KeyParameter null_key = new KeyParameter(new byte[16]);
+
+    private final boolean schedule_key;
+
+    private final boolean botan_format;
+
+    private byte[] randomBytes(int n)
+    {
+        byte[] b = new byte[n];
+        r.nextBytes(b);
+        return b;
+    }
+
+    private void hexOut(byte[] b) throws IOException
+    {
+        // HexEncoder uses lowercase, and Botan's test vectors must
+        // be in uppercase, so...
+        ByteArrayOutputStream os = new ByteArrayOutputStream();
+        h.encode(b, 0, b.length, os);
+        String s = os.toString("US-ASCII");
+        System.out.print(s.toUpperCase(Locale.US));
+    }
+
+    private void printCArray(byte[] a) throws IOException
+    {
+        byte[] b = new byte[1];
+        for (int i = 0; i < a.length; i++)
+            {
+                if (i > 0)
+                    System.out.print(", ");
+                System.out.print("0x");
+                b[0] = a[i];
+                hexOut(b);
+            }
+    }
+
+    private void printVector(byte[] key, byte[] plaintext, byte[] ciphertext)
+        throws IOException
+    {
+        if (botan_format)
+            {
+                hexOut(plaintext);
+                System.out.print(":");
+                hexOut(ciphertext);
+                System.out.println(":\\");
+                hexOut(key);
+                System.out.println();
+            }
+        else
+            {
+                System.out.println("   {");
+                System.out.println("      16,");
+                System.out.print("      { ");
+                printCArray (key);
+                System.out.println(" },");
+                System.out.print("      { ");
+                printCArray (plaintext);
+                System.out.println(" },");
+                System.out.print("      { ");
+                printCArray (ciphertext);
+                System.out.println(" }");
+                System.out.println("   },");
+            }
+    }
+
+    private KeyParameter maybe_schedule_key(byte[] key)
+    {
+        if (schedule_key)
+            {
+                noekeon.init(true, null_key);
+                byte[] scheduled = new byte[16];
+                noekeon.processBlock(key, 0, scheduled, 0);
+                return new KeyParameter(scheduled);
+            }
+        else
+            return new KeyParameter(key);
+    }
+
+    private byte[] encrypt(byte[] plaintext, byte[] key)
+    {
+        KeyParameter kp = maybe_schedule_key(key);
+        noekeon.init(true, kp);
+        byte[] ciphertext = new byte[16];
+        noekeon.processBlock(plaintext, 0, ciphertext, 0);
+        return ciphertext;
+    }
+
+    public NoekeonVects(long seed, boolean schedule_key, boolean botan_format)
+    {
+        this.schedule_key = schedule_key;
+        this.botan_format = botan_format;
+        r.addSeedMaterial(seed);
+    }
+
+    public void ecb_vectors() throws IOException
+    {
+        for (int i = 0; i < 8; i++)
+            {
+                byte[] key = randomBytes(16);
+                byte[] plaintext = randomBytes(16);
+                byte[] ciphertext = encrypt(plaintext, key);
+                printVector(key, plaintext, ciphertext);
+            }
+    }
+
+    public void eax_vectors() throws Exception
+    {
+        System.out.println("EAX-noekeon (16 byte key)");
+        EAXBlockCipher eax = new EAXBlockCipher(new NoekeonEngine());
+        byte[] output = new byte[48];
+        byte[] tag = new byte[16];
+
+        for (int j = 0; j < 16; j++)
+            tag[j] = (byte) j;
+
+        for (int i = 0; i <= 32; i++)
+            {
+                byte[] header_nonce_plaintext = new byte[i];
+                for (int j = 0; j < i; j++)
+                    header_nonce_plaintext[j] = (byte) j;
+                AEADParameters params =
+                    new AEADParameters(maybe_schedule_key(tag),
+                                       128,
+                                       header_nonce_plaintext,
+                                       header_nonce_plaintext);
+                eax.init(true, params);
+                int off = eax.processBytes(header_nonce_plaintext, 0, i,
+                                           output, 0);
+                off += eax.doFinal(output, off);
+                if (off != i + 16)
+                    throw new RuntimeException("didn't expect that");
+                byte[] ciphertext = new byte[i];
+                for (int j = 0; j < i; j++)
+                    ciphertext[j] = output[j];
+                for (int j = 0; j < 16; j++)
+                    tag[j] = output[i + j];
+                System.out.print(i < 10 ? "  " : " ");
+                System.out.print(i);
+                System.out.print(": ");
+                hexOut(ciphertext);
+                System.out.print(", ");
+                hexOut(tag);
+                System.out.println();
+            }
+    }
+
+    public static void main(String[] argv) throws Exception
+    {
+        NoekeonVects bot = new NoekeonVects(0xdefacedbadfacadeL, true, true);
+        NoekeonVects tom = new NoekeonVects(0xdefacedbadfacadeL, false, false);
+        System.out.println("# ECB vectors for indirect Noekeon, in Botan's");
+        System.out.println("# test vector format, suitable for insertion");
+        System.out.println("# into Botan's file checks/validate.dat");
+        System.out.println("# Block cipher format is plaintext:ciphertext:key");
+        bot.ecb_vectors();
+        System.out.println();
+        System.out.println("/* ECB vectors for direct Noekeon, as C arrays");
+        System.out.println(" * suitable for insertion into LibTomCrypt's");
+        System.out.println(" * noekeon_test() in src/ciphers/noekeon.c,");
+        System.out.println(" * once LTC's PI1/PI2 bug is fixed. */");
+        tom.ecb_vectors();
+        System.out.println();
+        System.out.println("# EAX vectors for indirect Noekeon, in the format");
+        System.out.println("# generated by LTC's demos/tv_gen.c and consumed");
+        System.out.println("# by Botan's doc/examples/eax_test.cpp, suitable");
+        System.out.println("# for insertion in Botan's doc/examples/eax.vec");
+        bot.eax_vectors();
+        System.out.println();
+        System.out.println("# EAX vectors for direct Noekeon, in the format");
+        System.out.println("# generated by LTC's demos/tv_gen.c and consumed");
+        System.out.println("# by Botan's doc/examples/eax_test.cpp, which");
+        System.out.println("# should match LTC's notes/eax_tv.txt, once");
+        System.out.println("# LTC's PI1/PI2 bug is fixed.");
+        tom.eax_vectors();
+        System.out.flush();
+    }
+}

+ 68 - 33
notes/gcm_tv.txt

@@ -143,39 +143,39 @@ GCM-twofish (16 byte key)
  32: 4D0F751B55DA3A2E0B28DE59E9680669FCB5984E9C0DB942DBAACDDEF0879731, 62F96CFE31D3D6AAA0B9F5130ED1B21B
  32: 4D0F751B55DA3A2E0B28DE59E9680669FCB5984E9C0DB942DBAACDDEF0879731, 62F96CFE31D3D6AAA0B9F5130ED1B21B
 
 
 GCM-noekeon (16 byte key)
 GCM-noekeon (16 byte key)
-  0: , EB5A8E30D5C16311864E2D8D32859ACB
-  1: 88, EAB88DE1EB7BC784A706B2D7946798D7
-  2: BA1F, DC3CEC6AA324AC7D053EFF7A99AD3069
-  3: 9A1457, 4AB65831DE378DFF71C20249C7BEC05E
-  4: 2F9496D6, 800745CF95EAE3A698EDF9EC949D92B7
-  5: 84153177A2, F6A05B654435ABDF5F696C0E0588CB5C
-  6: F80B7865C766, 2334D0061FD488D15A6AC8E44EA1F4B9
-  7: 872EA486B4EA9D, 3A49671DE347F675AD7904DDF4255F3D
-  8: A4EE5750507FC831, 956D09F7C5FE812C6FB982E1DDBE864A
-  9: B5874AC964FBFC1A97, 90FBC75F45BFF58B3A1100393955D0C2
- 10: 92FF5FCF1EC675E02E71, 983C96A7BD4A0DB5D3B877911CE8A6B3
- 11: F7BCA69A9C7033D84A2BA0, D4ECE5BB9FFCBB331A646D9CE8078634
- 12: 5E1041B4554C8CDD14AAF16D, 1EF777F307CB96788B9120FFF8A8BC2F
- 13: 7BB7289FCAD209D7992EB7AEDC, E8AEFB830DBAED2B4A790FFEF940A20B
- 14: 12776A7C937A648F0A8628AD8C5C, F070283852AC030819EA67BF82C719AA
- 15: 7293476D9E935EAE9DEB66F697F662, D6322603671153A1EC1453CDA5978E15
- 16: DC12A86C85E7358919BABB15A3BF5FD7, BBBFA467EBA8124DFEC82DB0137D56B9
- 17: 0CC1DAD00A987F9C57E3660D9417F226E5, BB8AF5A0B5BC79BD11C5D41CA80CDE2C
- 18: D0049115D6EB5495FB391CDC494022AEAA48, 682FF357B2BC059765C29AE6CA668D0C
- 19: 48FC54A401B4C06CE8567AD298B672191C7E84, 493A4AF4C2A8828FED8442C4EFF877F6
- 20: 90779795821CB1B7DBD97028E29DC1CE7D0CFAE0, E126F485F73B6F7B3894B4CF7E1C5DDE
- 21: 8CA5C246C8B7C04BD7171CAE2D1A892D66302433F8, 5D73149A3635A86B3C34DEA5B95CCBCB
- 22: DF082B665F7A952B2604C04554B81393FCC7C0B816C8, D3569ED7D431176B286EF22414E4CBA8
- 23: 761908530C9069E189649ED24B6A68A89B067C31E9868C, A258BCD83D3FBC7AE2AEF7516025AB36
- 24: 717048F5A31F3C89D3704F90069AC5D5174118770C65BDA1, 067EBF18F7E3DF4EA13F9ABAC682C2A2
- 25: 08C6FCC5D3099347C3FEBA3858A6C22C51298CB591DDB77827, B57BFBA40BE99DF5031918A1A4E2CA80
- 26: 2CC53EF7EB954234E64CD4D60FB1D7157A489ABABC10900FFCDB, 236E769611D16EB7F463B7578770F886
- 27: 2556B46F2E831223D632F2691329A874F517687AF81B8322AC55D7, E213A90DBC31DC261A45A9AE41CFEEC3
- 28: 71241792728594D69791B80AD6DBC6417D1D14D222DF5E6F834B82C8, 601F97617708B1945BCDA8A82496EFB1
- 29: 5003DC2EAAA23F9E2221CCBB9E20116692CCC99B3CFBD0DDD3A8491E7C, 3743155B792012845550205C8949B73E
- 30: D0589675357E850333F854FBA160688F06D122DEC00CC2620DA0B2770765, 20E085752FC4D37791C22501ED1DB6AD
- 31: 645B46D2D114EE7329F14AC1D94E6817EB385EB80C61F014F90530749079EC, 8A18DE86F9555A1070D0BFEDAC15B14F
- 32: 068389206D37BF5A41C58075FC98901C3B42E6F2F13C09F4E92524021BB1C1C8, 370B86914D63CFEE8303D538A6BEA0E7
+  0: , 24FBBB850691F47A085EB57AE00304CC
+  1: B3, 8BCF7A69E538ABB7E8FEECBED90C34CF
+  2: 6E74, 393546FF18FE3921BE4755E993FE669F
+  3: 523837, 2B89AACC9117430488FCBD3E05C15F65
+  4: A0805168, 2430C64F2683BBB56F5092D4796473E2
+  5: 947FD3FC56, 9976BB989B3054991ED2741CB68A8F83
+  6: 8209DCFD76D0, 2A57678E78AA81509F5F88F448225F5E
+  7: E08CB4FC1169B8, 694904F451A25A52022B5DF85BE76AB9
+  8: E1F64D7205D070B8, 42E272E75AF762BDD98243A3083DC250
+  9: D209B87AB1D069C946, AA6E2B0265C342968631D7D0DD7FB722
+ 10: EB294F813FAF31A56731, 1946AFF788D597D545CE01339F1344CA
+ 11: C3623DFC818CFB5DAA7F11, A141D7654E5C5FF853365DF19626E295
+ 12: 6C6ECFF070BACB61B625BB46, 176A894AD6F9C4ABBFE33704B4D0A5BF
+ 13: D9984A7F164345EF6D9E920944, DDABDA0CA76A3D98059DF8288D607C56
+ 14: 9D271AB343D8FD4B7B9CAE828FEE, 3AA2FF2B08283ADDBD8DA9D825DD5DDE
+ 15: 1BEAD524FFA2812526C66E6AA262C5, AB586F0DA87D813A4E5DF5589D0EDD77
+ 16: FF2CCDC2F7DCAD46B0557E265B849CED, 61D2163972EB0521F1AEFF5B157CE226
+ 17: 8B39921ACBE0603970F5AED3430D8C7733, 2C4D0DA0E3A87B20255B849DED865C03
+ 18: 6716B5F4169F0E609DE1BDC62E34967030C5, 3115A1F7E06D2585115CA39BE13D8F02
+ 19: 0E59D5EE86573648C06A47D11DBFE1D504BB51, B080AC131829D9B9F004E672506D17D2
+ 20: 74BCEDA70D4B870C2F3C1FA07BB4314D32D5814A, 1AAEF188554ED4B5FD0508474DC06046
+ 21: 92575752FD1A2EE03615F71F09A776770EF817975D, 766061C717348F33E1398C8BCDC014B3
+ 22: 5D6C261BFF784690911177CA62DA928D35742663C484, 227A7468C3F133FD26056F781AA0DABC
+ 23: D9901B1E1A1F077C93B9BB5929B76A0FD00540056032EE, 343997846C6FB089E833B15AAB16F28D
+ 24: 18C64411F459E87F96ADFD94ED8C6CC787C37AB9D02FC709, 7D4F5CBC141C31D44DA558D8AFD6F9B2
+ 25: 2B5617D866AD278CBB3B3601E3F924C209857DBABF487C36E6, 481FF0E5F97F65FBEF74C4FE84895B08
+ 26: AF03196009787A666CF901DB67CF45AAB6E870D530930964A7CE, C314771BB93E0A3ACC03EE18AC7A2739
+ 27: EC721BB4A2822D39869A1981DB66C303116676E5CB3FEDACB1F970, BBA561C9B5912E84365E8258A34BA9EA
+ 28: 12898BDA4009B40ADDF41B495A3A1A1B0064B9F69FD7BC13F8A14BA0, B2869D73F73E32F912E73AD6C02A0768
+ 29: 329B540E422F21AD3B09CF8CFE482B606149230196E429F5666DF206B2, 72CBD361E003F7A9A87E089373C768FD
+ 30: 497F13387271C869AE9A54A6F78116958951773A85CA804E149B27F68F4F, 68703910888C9304D7B1170258F6B841
+ 31: ED63106B3E692A69C0C03BFD303BF4EB2FDB0D9562B9FE39612352DED01DBF, 451E328ACAF0A8196736D88A1D46CBD5
+ 32: 1A46B990A8BDFCAEBF9C81D21C5A70A1D865F621AC9470E379F783D0A5150A13, 9571772CE2E0B947F9FE7B148163DD71
 
 
 GCM-anubis (16 byte key)
 GCM-anubis (16 byte key)
   0: , A0061C2F3B2295BFA33BC74C037EA8DA
   0: , A0061C2F3B2295BFA33BC74C037EA8DA
@@ -212,3 +212,38 @@ GCM-anubis (16 byte key)
  31: 72DFB9E91A78EAFE758B4542206A4A957B4523A58428398C11BCF2AEAE1938, 307D0B876130E82804C1167E03B69B2F
  31: 72DFB9E91A78EAFE758B4542206A4A957B4523A58428398C11BCF2AEAE1938, 307D0B876130E82804C1167E03B69B2F
  32: 7275C6EBDC2680DFCB73326A987D2FBCE83E40A9AEFE6351CFDA7251A6FE10A6, 895E6EEAA9BD88594903325A063CA45F
  32: 7275C6EBDC2680DFCB73326A987D2FBCE83E40A9AEFE6351CFDA7251A6FE10A6, 895E6EEAA9BD88594903325A063CA45F
 
 
+GCM-camellia (16 byte key)
+  0: , 477650012AA6284033E1B85321EEF770
+  1: E1, 2E95EDCCAF3264B5178CD6ED0F2EDEEA
+  2: 314B, B11392D89769FCEEE4B8170F8ED1F98A
+  3: C7CF73, D79DF351C70A7DDA124355490EAF71D2
+  4: 3C369E92, B9345C0A6E509B10A1245F42BAC2070C
+  5: 6F5634E263, D781B8F61B104158D822CD04A9FE7998
+  6: 299A167791D4, F1707A7EF00815631F79AEF3F3CF2599
+  7: 61C5184DE525F1, 615524D1CB7DDA84EE5B91647449AC8E
+  8: C724705EF011DCC7, 5F78479065F8EE14C07C909F12AB9289
+  9: E1466E81002EF30043, 143651985FB01E9882D923615DA0587F
+ 10: E252A74713C90B153C30, 6166F77FBF04809553936EFF256593C1
+ 11: FAB8BC72140D01EAF5F015, 1756C4D44B412F078B0476DAD3711DA5
+ 12: 774DA96F528D758DC098157F, D169FD2BDE61020499B482786BF14046
+ 13: C15708A21A56963D342CCEE9D0, 9C3416DE3CCBB7BFDEB4CCB0A0B767D2
+ 14: 52EDEAE7AFC4D3C77E7ACB31B1AE, FA98CD47050F12F7A95AF55EA29BB57E
+ 15: 48ACDD91D755D9F8602DB17F41C1F9, 5A0CC2D372501E38ED3EC44BDE185E0B
+ 16: 9385B12D8EB0F0507BA643958F4EF377, 8FE23300220D1D2A8DEFF7BA69CC28E9
+ 17: C31A9198E85864D8BC020B5F61FE1ED596, 9865C80843631D26B02A0369B5FCDF8D
+ 18: 4D159E1705839309E31C95E12A5BEA81277C, 0A8907002FEC82725530B4FC2BBC2B82
+ 19: AB6B471DD358000FA8C489B06F448508AA7051, C87EEA614DEC03B4EE2724F6E1CB70A8
+ 20: BFB0EA4F27CEC231815F07ED50E3AE8156172BAC, 09244CB698982CDE8C9030FC309409A9
+ 21: 259FF16BCC807B01FE4870161CD0F06A92DBE886FE, 86A9D502C6BA9804D26EC4B8CA419090
+ 22: 01FCE8F5DBCC4B2351A3319EC1737A84E8D3C959CE42, F337E99A62357057BB508398443E1960
+ 23: 114602337E1655C3965EDB3E7BC4428F7DAD1485D5FF05, 67287E94DEB5D255D512E89508E85B47
+ 24: B0B95F745C9433B741F8EB6EE36117C979CA65E6B9D8E595, BB75BABB42D9C73C4CCF8F9E1F9CCE1D
+ 25: 4DE486D47096B3EB1AD2C6A6F9248DA1FA2623B339E787DCAA, 7BED5402F5B5AC690488C6830D484FD8
+ 26: 40C5770A6B0A5C14AD168C262BBB3BD512E12654F6F57B13280E, 3E123FB667B2187D2DEA581C1E1EAF3E
+ 27: CF20B534737142322FD08B2AC9602F4C447BDD91BD00FD820ADE78, EA8D30E6CA004F31CFCCCB47F0BF7A62
+ 28: A61AAC29A28EAF0192E3B4646E0421D254B12C3D11F491909D18712B, 92B39BFF07D93AEDBA3AECB974859A17
+ 29: 6782FAA7F0D18AC1989FAD68C5C2258742EC691ABE47F744E6E795FF74, C63AA120F2889C6996636DDFB15450A0
+ 30: 79CB100D91BC41C73473723F5069B5D38C7208848B885E729A9604BB053C, 195D327AECF7F6D2BB1CFE019A0C2C0C
+ 31: 7753C753224B63EB00E2773D5CBA726F2B2AE54097E13A2CAAFBAFE7F53791, D344D335666E06DC87E8E30E6C141DCF
+ 32: F8BDD6BD3B27237424BB4E7871F9D893D204D8A4843E8AAE155B844716E2BDD7, 40806139E1038B68346931AFAAEEF1F4
+

+ 68 - 33
notes/ocb_tv.txt

@@ -352,39 +352,39 @@ OCB-cast5 (8 byte key)
  16: 6A9424B6A873BB7155C01DC87E23EC52, 82C5047655952B01
  16: 6A9424B6A873BB7155C01DC87E23EC52, 82C5047655952B01
 
 
 OCB-noekeon (16 byte key)
 OCB-noekeon (16 byte key)
-  0: , 72751E743D0B7A07EFB23444F1492DDC
-  1: 61, 41BDE9478A47B2B612A23752B5A42915
-  2: F4EB, 90EF542D89F867CDFB1A0807F8AA3CC6
-  3: F5A59B, 1BED873B613096546D4C201347CC3858
-  4: F454610B, FB4035F28AA75221F599668ABBE21782
-  5: 382FC932F1, B40270E2084E8DCEB14C6603D080D7C2
-  6: 18F921441119, 47F1F889B307298150750E81E94AB360
-  7: EF01C70C9D1810, AE0439DBB3825F27CF846B43E4C3AA80
-  8: 89863EDCAD471C3A, F4E8AF73BFC4CB79AECBBB3774DAF8C2
-  9: A6F494092E066A70F6, F73D3B04752B7D913420C17E656C7F86
- 10: 342459682E0A8D53AF4F, 61E7CF14E9878E0726C64B1E8CA08BFF
- 11: 65E520D5A99825DE2441D1, 7A2AA740D786EB7015C61B31959E55D9
- 12: 2F96D0BB72E37DA202410302, 1A313242527FB522289094B9AFDB5F7B
- 13: 3E8F8A1FCEE3F866EC29128BA0, B8065DA2DABF04129E5AE28ECC11A15B
- 14: C2C15976D3C2499ACB9454878131, 372CAD486E104098EB1AA78A2922A1BE
- 15: 1F12CADABAEE80E448B7EDCB42F8FE, 86A38DE5363787F55B16462C684E08DC
- 16: 3B9ABB3304E75BF5B63E7F5B5A3F3980, 1FBD6B93E457B9779E2D12D78301EFA9
- 17: DC0CD805E43675A4317452E378AD48AC4C, 40AE4AFA4B3E580EFDB4AD0AF5BC4E4A
- 18: E9DD52EA7264C6C7BBA39B761B6E87B65687, 4061DD65D5E7FFFE8D3D4261494D4F8C
- 19: 80A9735CA1175072823828123413CCE772D521, D3378A12E79C49A37378DF527A460AB2
- 20: 09AD495AFFBF7CB8841262E7E5E8952878D4391A, C25D7A98C6F260B5FBCA3B8B5F7F33C1
- 21: 3925615707CC40C351D4A49794778545BC1F683175, 97622437A7208383A4A8D276D5551876
- 22: 5BB0D41ECD7BD2CF0B12A933255D95A3FE35E4C896BB, 4B8AD84EEA3156765A46AC19C68B6F88
- 23: 1EE71FE23CBFD5683AB1B391FC12B4E5952E4E6AA3D189, B0FD75996F28E071EB6C86BD7102BAA5
- 24: 0AA3D8C98AADEEE1867B13B017DD263BD16E960DA64FD071, 5204780963A62C2F4F7B3555BFF73836
- 25: 3A88B6F2AE321B226DA90B98E04A6A1589411BEDBE994632D5, 5638AF04EACF1EB986AC0702B4373A22
- 26: C2731661AC634A4DC0345F040DA7AEE507A3B9D019B5958543BA, 4C67D3FE37ABEE928B3BB812E7346823
- 27: D3E7651AA6DA035D05D599EFB806E8FD45177224593B5974758419, 5814E84258E1B9BD56A188AAE6F25138
- 28: 17818E7102B8C123230C5D64F18BE94C3159B85C8F7B64A7D4712CDA, FAA905B587A93DCF600BA8589A985432
- 29: BCA4335C6C29D978032C216114D39C01C6F161BF69D5A1CE55FBA8C575, BE24424A162E43A19755E2EFD274DBED
- 30: 24C33CEE022F8A633DE9DFD009F535B52BCF64F390D2375E5BED65B70D08, 138F21D54B6B7E34628397DCDE0D33BF
- 31: 838FE950C8165ADBBD6B61E9732F9A727CA7AE74376981382F0C531C331915, 0742E769CCBA2D1CAC7CAD4E0F012810
- 32: 57CD778DAD477271794FBF763662D97F8A10B17D70A69FDCB974FFE67E558519, 942C7D1C200C3845748F8131DF71AE26
+  0: , C810FFEC70BB008FD7C314A732B226E6
+  1: D0, 3C48A2C7E0CE9B9099221EF2CEC56767
+  2: 5542, 518EDB8174B067CBF2568C6911378137
+  3: 65E8A4, 3E4EFF5F6FBC99EF3B71B11F566A20FB
+  4: 3D0EF863, A366D5CE05F564B5E676EC78938CCC85
+  5: 89B17BA512, 0E83095D771F654CBD630AC114501A0F
+  6: E9AF5FCFEFED, 3A283F7FF02274DD4B48C2CD7E36182D
+  7: F7A001CEC51C30, 8392CC274521BB452134713153F36268
+  8: D796E3F23E31D4F2, 351C7B0304E127287A9A1DE38BB3167A
+  9: C4E2BBF6B4827E1A84, 275907279D0764CF80D7E6626D81F994
+ 10: 6C61226E61F70408A61A, 941AD1718D272BFCB8C5ACE08F90B2D1
+ 11: 3C195850E7FD63EFC11F7C, 348A975B60908445230D4D56A0CAB008
+ 12: EE5FF5362DA3744C9EAD274B, 875C2167BFAEB65F5601F2DB9035444C
+ 13: 7DB5392ED1933ED858EC0C52F5, BE6507D8AC743805A872658C680A4D06
+ 14: FEDEAE2EC2059D22B960813B5E7D, A559933509C47854176CEEDEC12EB8B4
+ 15: 64C81F2169F7CEFBF51E68D4186A36, FFE84A9B49F0E77A9799EDEC7D76B987
+ 16: 66532B678D23130714E088FE874C4743, AF95ADA553A68319DBEBDA4172E18A22
+ 17: 53E56845C091A1E2372F3FC772017C9804, 9A6AB7CEB632429F2B31FB91C141B6F0
+ 18: DAF6832520591B886E2E962ACF5B9D0A38E9, 73FFEBA8997E0C55CB0B4ABE59C86BF6
+ 19: 108F04FEFCB5EE68033E57346012CDEB348D14, E08E90976E0F7868994B017D7A007AB8
+ 20: 101682160DEB9667FB073F96ED1D9C063ABCE668, FB79A4BEBCA9A7832C72116AD9B98D41
+ 21: E10AB0D22A6C4C253D818AB6AF1A3FF5811C6CEF24, 174CD350B069A239F9EB80A7BCADE8B7
+ 22: 9F62A79B25D4F5532D78228A50516F97ACB7A2C5DF13, DD25DD14174B5667B0AD70732323C8C4
+ 23: 2A0AA96147E74A3B881D62BA692EE27927A9EAB351C6DB, 9CE03AACF9318770BF7E095F90B470DB
+ 24: 29E38605973D0218AA8BAF2FBAB7722DB242C4775E453372, 72D6038E8927EDDE469F98B84C74A8A3
+ 25: 8DBF8C2B5477DBA6E07B269293713D60D60BE29E677CA35C33, 83100BBC1401C890B36890A3FD0CD4EE
+ 26: 13DE9776093827F254DBF500EEBE0C65DC602A5FDF6AEFFC34D9, D142F6CE9E43633CBE94A2BDCC9AC5A8
+ 27: 4A25370043862CF7A12A00A5A278623F9BF8DE33212D35661591EC, 62064DD74F9F6D77682B43D9B44E26B8
+ 28: 37C6C6C40DA0581BF041770E330A40185E90426A1A4AC9BCDBC5CA7D, E77EE99F62EB1A38CCD1E90CED6EB5C7
+ 29: 6B9047158068957CBF77F35988E5C926C7B262A8EBA9D33638A15B1505, 913DC491D3B2AFF172053CC4D1271F46
+ 30: 949E5F05396F60722877EDBAA5D7437DDB24B3E25651458C266992D0854E, 87D4396BBC24646659F10179823066B2
+ 31: D48489C360F6EB2BF4155FFD7CCAFA4793B8870BFA4A95C9BEDD372F51C04E, 173EEB238E6186D5A93AC6072A22B772
+ 32: ACB6F91E8BDB4CFFE1F2A5F6C712D16177EE06842E4CF27F61C8F68D44C842FF, A1E5F2560183B0AFE466243EF3921E4D
 
 
 OCB-skipjack (10 byte key)
 OCB-skipjack (10 byte key)
   0: , 90EAAB5131AEB43B
   0: , 90EAAB5131AEB43B
@@ -459,3 +459,38 @@ OCB-khazad (16 byte key)
  15: D870479780CC5B3B13A7A39029A56F, 003D3FCD31D497B5
  15: D870479780CC5B3B13A7A39029A56F, 003D3FCD31D497B5
  16: A47BF1218AC86A60F6002CE004AF5E50, B4EC27091D5DCD58
  16: A47BF1218AC86A60F6002CE004AF5E50, B4EC27091D5DCD58
 
 
+OCB-camellia (16 byte key)
+  0: , 6972CC27A9711EAE6654851AB8E0C53F
+  1: A2, 208D783961FD532E14376B4EE904FE52
+  2: 1177, C7CC74015F7EDD9A72F7435494D8A050
+  3: 0F8502, F1A708AA0F485A554E2E76592CD9D7F4
+  4: 9986180B, D47186A8B539F890824DEBA223861ACD
+  5: C0FF4519C3, 4430A9453016E4974CFB5380A1F3E95F
+  6: 2AC54E3E6A0B, 6E320BE8DAF4BA0462A57BECC574740F
+  7: 846053E1A37A6A, 5B91B680B92517781DC362C2F3E144E4
+  8: CCB09ECFF76EEE2C, F91E7E245F4C8A404F3ECC7DE49261C3
+  9: E049E2AA271388106E, 8C6981A160D831F4DC57FACE5ACCF006
+ 10: 761782341D52BA8AD12F, 672DC4B06DBBCED80381CE4845757F0B
+ 11: 92AD781DEC4549940265C6, DB04CAABC54E71FE1A9C41DF1ED5C52E
+ 12: D507B77EEE9BE07EAD700143, B3EFCC0B27DC85166E04E7BC39E45C58
+ 13: 5AA1AD6B9CAE3001D4C1CC4048, 424D8A22F7B9ADA30AAC0C1D3D4E77F9
+ 14: C69E96F7A4B9A6F0F2C7EFA72C26, 678144F802AE9DD83D11877779B48972
+ 15: E2596B3FE48EF6EC50D857C8B4E3F4, DDB3BD2B8AB2FA71C7F56C8E57AFF2C2
+ 16: D81664A002E03A75E08CF16EE7670E97, B56A0B0955E15E62C557C6E66782AF4C
+ 17: A8F2696A972A87C784FDC775439470D822, 36E3AD03CB18002A17D49E466CE64814
+ 18: C2B537D807BD1ACA734AA072D9C2B836F588, 449B05D145666D1E5A92E204FC3507D7
+ 19: D5418F1288BFA7D39D23B3C6ECF797397D3D44, B0CFBA612544B8AB159E9D4AD1FFB3D4
+ 20: 2F9522460182291C6F264308E0363B9FE312E517, 1EE4CB38075B67463FB9DE26DF9D581C
+ 21: DF2881568BECA504A66E4B15BEA58AE6E99D0270E6, 3283D46803FC33098BB262FC1D2B2157
+ 22: 4B0083A4CF7E166C8466A5B991AD0CDF71F9DF010EE7, 7C91D9A5DF6C76CB02D83D8C7F3D8D07
+ 23: AC0457474B4193647D62906BD08D8C8EB32BE151555B68, 0A448FF3C468D7CDC945724172CEB66F
+ 24: E6E7786EBECDC296F072CD66C89141C700DE2A8B5DBF6549, 68ACCB5FEC04717FB21FF3B46A34BC74
+ 25: 860865770047A9798D90C9365E9C9F8210CB804D785D65E2C0, A58F22FFC4CBFE3BBA451BE4B3B95723
+ 26: F157588B4F98D798E6850D8F04ABF9905C1BBB2D055ADE1EA424, D6960C1EA6DAF225366374333D38EBDB
+ 27: DE3431977821BC861CD88E4236BCAAAFFE3C894607498FB8D68746, A3D23729464BD38338F4AC5B4D9F5C81
+ 28: 3F2F0AB546E118B76B937D539806DC02D02A5D42D64926A9E1101D66, 3C0D2D23F5DAF7D36DDC0F87B4163F42
+ 29: 3F9FFAE1D7BC62BB80A2FA2728FC33FF02E26CB9F52EA8D03FFE95A49A, 96B45B3F946E629ED974EFA7B66F5DDF
+ 30: A398B66C8425CE9E8A6BF5AB900CEA1EAE811E06AC7BC0D69A53FB2015BB, F83411C72B7DB201B254565D1DD8D1BF
+ 31: 9C760ED6C10A80C52F092ED20AB1D03A52427B6235F3C7FE7541033AACDD74, 8AB98FCA89D1245B177E0AC06E083024
+ 32: C38F260587B3BA9919601BD0A56909FB36ABCEB8968D08DD6B74F1EF5ED7065C, E357D0D56124276790DACA38D95792BB
+

+ 68 - 33
notes/omac_tv.txt

@@ -352,39 +352,39 @@ OMAC-cast5 (8 byte key)
  16: E8B0B219D4CB699B
  16: E8B0B219D4CB699B
 
 
 OMAC-noekeon (16 byte key)
 OMAC-noekeon (16 byte key)
-  0: EC61647B281C47C1B43F9815064BF953
-  1: B100B1B6CD96DCED8F47A77E70670A92
-  2: A96CDE3C48831A6B0A5ADFECA6399BDB
-  3: 14E75E7CAD840208834918B29A5D4430
-  4: 9577083713AE6E44EEC987C77C93C072
-  5: 2A738C02841E461238C02F5CFC8E66A6
-  6: A901327E451BE0D2D9DEC83DEEA9A022
-  7: 5ED7EE1BE04A64A689D15F6970A821A6
-  8: BA053E24FCFD02C731A8CFCA19EE66A0
-  9: 57139CA8C91072555B29F85A19E2C84D
- 10: 4585EAC7EFB84869FD96EE7A5FDD350B
- 11: 62AF6C415CA73E54E82EA306254C1BDE
- 12: 75304F9724BD364F84371EE154F5210E
- 13: 7FE5DBCEE826760434745D417453182B
- 14: EC98DA2A580E9131218D1CDE835423D4
- 15: 631BD9EAFD1AE445F2C1C35E2B4416ED
- 16: CA2D902A1D83388FE35BAB7C29F359BA
- 17: 0DBF0AF7FCBEEE21FB6159C0A2FFCD4C
- 18: BD7CD2C49241032DA33B1975EE2EE982
- 19: B30B090EE8626D77D310EDB957552D46
- 20: 64F608AC5707C381AC6878AA38345144
- 21: 28513CA7795B23A02B37DC3732413D23
- 22: 9F440700094517847E9E013C8915C433
- 23: 8CA483F313D20BFE7E0C089DAA4145BD
- 24: FA44872743E20E5E0A069B3C4578DB50
- 25: F6DE8FFBECD52CC1F213CD9E406DF3BC
- 26: B9702B7E846735A3DCC0724255F88FEC
- 27: A1DDAFED2B1732C7BA89C2F194AF039E
- 28: 2549C5F0E30F8F4002431D2C098805B8
- 29: 52E3836181BF5C9B09A507D5330CD14F
- 30: 01C55DCBCCFD9D7A4D27BDE2A89AA8EF
- 31: 3CF721A0CF006702CDA91F2FF3E4D5E3
- 32: 6D264B9065BE98C170E68E9D2A4DE86E
+  0: A9F50A6567FAD338AB5727B3B94DEB82
+  1: C9EC17EF3656C9056E64E692A449AD24
+  2: 7D1F6A3373BF20D4E65804B745D40855
+  3: FE3484F11C338721F3FCB4DCC608BD6E
+  4: C45670D31D48CE9AD70BADE9F7A6A5B3
+  5: 6AF86480F1AE638DCAC40939B864D4DE
+  6: CBBAFED3A5891A7BD8692055E4C59444
+  7: B23439FC6D1CF0E3B04BE5201CAF9283
+  8: 385D2C64F55B3FE976E660155FAC4C90
+  9: 239D4B8F663248076E64CF743AC14EC0
+ 10: B942C5E06C6E68866440EB10747643B6
+ 11: 9B591FA2FD9A20C367FB03366150D1E7
+ 12: F90183F872D062AB4642DCDCED399970
+ 13: 86003C2F260EAFC81BC45A0614F88381
+ 14: C80F88A148FF906D42E6D75A50049468
+ 15: 0A81478238ED815D7CB04C0DC5A4A4D5
+ 16: DFE74730DB9CF4F994084C88923A8931
+ 17: 91194DAAAB458B5B34E991EF534D4BD8
+ 18: DAA1CCA0B644AB9F8B4D889D7F1268FB
+ 19: A93AE4F41DFB6CA311FAAA148A9D53D9
+ 20: 6FFD47B80A991A6C09775060E4A4B13E
+ 21: 4BE3101511BCA3251559ED6D3BFCC304
+ 22: 3C1AA3485241175A9A17F440A1F2FF5F
+ 23: 11D2C5E4FC75639CC61C8FE66C2F5135
+ 24: 3EDBF9F32259650ABC2C835301FA6556
+ 25: 56FA9AA43C01CA5BA798780D3BF40FA1
+ 26: 40AE1F352003026C6D4C5F44430DD5ED
+ 27: 264E11C88266029588A1B8369F0C5B73
+ 28: 60CE0E6D2C2C74D122DBDE57B3EA44AB
+ 29: 5E4078E7CEFA94886E9CF0D083C4B468
+ 30: CEC169560600ECEED6E5C8F06C76E702
+ 31: B4209736F08EAAE6D5B4923D83EB3EE2
+ 32: 5DC8D45C9954B82864F1C2388858D97B
 
 
 OMAC-skipjack (10 byte key)
 OMAC-skipjack (10 byte key)
   0: 84EDFA769040603C
   0: 84EDFA769040603C
@@ -459,3 +459,38 @@ OMAC-khazad (16 byte key)
  15: BCAB623CAB7AAA23
  15: BCAB623CAB7AAA23
  16: 9BCEAB857596E478
  16: 9BCEAB857596E478
 
 
+OMAC-camellia (16 byte key)
+  0: B5664C5148FFB45297703BCC46C19E4E
+  1: 126EC31A554E8B3B635DE4617092ECE8
+  2: FD57148685F4AA85AF48017AFD72B410
+  3: 1427607464A408C1775B4036509E9659
+  4: D8F5A7112CC8A9DF28B331FE7184BF08
+  5: 0E29B0F09409DABECF645F05C4A5717C
+  6: C4155442FDC29685028AF4AADEDCC266
+  7: 92356ACB98AE2EDAABE0D3ED0C90772B
+  8: AA3C828618F72258D91BC391876776C3
+  9: 189458BA4D98E85802E7028E5C57A25F
+ 10: EE652D70328DA00D63B42A5E85D70E63
+ 11: F9D1E5F8E1539F2D657A047755CD232E
+ 12: 56FF5979FD3DEAD90EAAAF79A9AF1DCD
+ 13: 7E8B39D459D5AB449A8C5917B0CD0C4E
+ 14: 822D9B9C434C6FF7F0E5A25281740A91
+ 15: 654909D2836CCB06501CB359C717C1B9
+ 16: E8996FC89D47C91543B7BA3DC1C34B73
+ 17: DC29D51B2372DD7564CF56AF8702924F
+ 18: AD74D081197644DFE2723CABC991B1AC
+ 19: 26145C6DF074CA53125F6F386FBEA373
+ 20: 72C6C760A70FE410FAD113D8BE711D75
+ 21: 099D3B5802D7FB699B6B8F031BE10B3F
+ 22: A9D5DD3988A18AA7BC6F9C050BDBE8D2
+ 23: F7E99E4C3C7D127FF04FF325F7B06997
+ 24: E99A2F7547B5C6EDF3BC2EC2B8F05198
+ 25: 46C42FF49FCCFC49FBC99FEB08FEF10A
+ 26: DC349D600A754F73ACE6A7D2D00D3551
+ 27: FC2E5434ABBA44ABD9D724A9BB6CA2A6
+ 28: BA923927BF0074AD73BA8A6914194297
+ 29: 7DAB39F8D7E5CB93265568E6713C7CCD
+ 30: 9F60259B759B68E1C8F89CC36C7E170E
+ 31: 7D611F8BFEF0491CED8815C0E3D4CAFF
+ 32: 31E04DE5F9D1403C660E39891DE0D8DE
+

+ 68 - 33
notes/pmac_tv.txt

@@ -352,39 +352,39 @@ PMAC-cast5 (8 byte key)
  16: 87D907CACA80A138
  16: 87D907CACA80A138
 
 
 PMAC-noekeon (16 byte key)
 PMAC-noekeon (16 byte key)
-  0: A1E4C84B5958726557DF0855B37AA551
-  1: 5DE20299CA919D3365B493D3D4895F92
-  2: AF7E70C336571A857F62A18649EDB197
-  3: C5F55CFE1AA119C352B64252AD246CBD
-  4: FEF68A0CE08E8BA315B73B62F861824F
-  5: 8321C2958DE4903DC12C42A8845ECC20
-  6: 370466D1324AECF1F5B42E0E01381613
-  7: 5CB900190F5CACBACFE5EAB0CC289D87
-  8: A13C043E6CAAA1E34601A93C497446A4
-  9: 865E11622A4CC8A9E1408E00F56C4543
- 10: 9DC42C26868374649BD17D69D025CA1B
- 11: 37D33C11B433C91DA09925CA9E86757A
- 12: 1373D769C270E7137C953AC0F8F37941
- 13: 7E81DEC583348B1E2F6267ECF82CB994
- 14: 505B6329338556518FF364CAA730F5E8
- 15: 0C085AEEB315968B0BDE904E8BBC6FD0
- 16: 5FED63259364BE7E5133FF0507DD2D4C
- 17: F7EE5C80A99AAEADB49E7CC69BFFF679
- 18: 4388FA5E763A641130940EB705BEFD08
- 19: 1BC31CA79EBE1674CEBE01BC9988267B
- 20: BE88961637EFFE2D6905D104FEDD51A4
- 21: 9C341004FB22AFCC496094E3207CA761
- 22: B9DAA3620E38FFC7C5D5E7D2D8FE3DE4
- 23: A38D2E571F037061B4400F1131FDBDEA
- 24: 61DB71AE77A6EB47F2E9E14E8CBF2F4B
- 25: 9903A072274CC048EF2C51493266D9ED
- 26: 1EBEA421DD08859C17DDF39B20A82102
- 27: F425858618E1A86F4912E4714EFB9E75
- 28: 3B3D4EA07F7FE6DDFDD02D624ACDFC9F
- 29: CEEE256591D701514EB17DF73B08A970
- 30: 5CC56D5D46120C530A23B6C511C685FC
- 31: 68E484CE18BE28EADD0BBF23291B8237
- 32: ABD58A9CDF8AA68168A1A402074CF520
+  0: 276019CC8E43A1B3F300C47B55B7AA22
+  1: B93E353A2CC21CEAD81C91EC2FCD348E
+  2: E8B9737CAD705C499F246744DCFE9641
+  3: EF36B0FFB5439FF8668F35FD1822D0EA
+  4: B7F5AD89538FC3F03923E98ADF95D0CC
+  5: 558FCA30F602B4BC6697F44053875204
+  6: 6B2D6D5A1CF670BE80E4BBB945CD3871
+  7: 9CFA28FCA22EA12A13AC1093EF5D5EB9
+  8: 04EDA6C71B9F1177F4A5368684FBBAFB
+  9: 43C56B31D440EBECE4C74B90750A4653
+ 10: 23D5FA9AFFB2DC3DD372F22690487BAC
+ 11: FD61731F27CF8E791535AAB579A018B4
+ 12: 502D3A64FDED3CA2A2C8A5E986B27E03
+ 13: 1EABBC65B0A08F6CB15218E7153A6003
+ 14: B05DBC66CF92B045FC99395E9D405C4F
+ 15: EE841A0BF2C91C1E2078F06D022F2E6C
+ 16: EA749FBAC6BA9F672796C9D58A8C3294
+ 17: BBEF3CDFB93E5F462773579986F08374
+ 18: B17F7645F80BF5A2817C228987B43C03
+ 19: C995A102DFBB38FA397A4E508B85093D
+ 20: 9011CA395AC3FCD8594C13E67C22E95B
+ 21: 364BF53974D68B8BCF53CAADC5469DEC
+ 22: 5BAD7041372F28DE28BAAAC1A89C10A8
+ 23: 77874E908BFCE6F5E36888A484A754C0
+ 24: 9BDA525416A3129C55886134B79BAEDE
+ 25: 84E3201FA7958223B302D1BC2AC57D55
+ 26: 2B8FA1A95DADB4DC2F7A308D8E3D8C81
+ 27: F74EBF0ACCC187569BDE549F5FC96C36
+ 28: 7023D209F1965EC32253D11835CDFFA5
+ 29: C3C6397D9B0A1D741335882ACDFAC20D
+ 30: 7BC92905F2AF6754256BE087CC4F54DB
+ 31: 0BBA0A507767530F26C3A465DAB11359
+ 32: D2891C8EA1F574A6B2AB091057E0FB2C
 
 
 PMAC-skipjack (10 byte key)
 PMAC-skipjack (10 byte key)
   0: 9CD94B75BC43B647
   0: 9CD94B75BC43B647
@@ -459,3 +459,38 @@ PMAC-khazad (16 byte key)
  15: 93098DA8A180AA35
  15: 93098DA8A180AA35
  16: BACE2F4DA8A89E32
  16: BACE2F4DA8A89E32
 
 
+PMAC-camellia (16 byte key)
+  0: 33C03F6AA205F3816A17DA92BEE0BAD2
+  1: AD1EC293DD032511579235B2F29CC909
+  2: E71363EAF5A311DCFB035C69BBCE5DC0
+  3: 22661D6CD3496FB5C9B3D89FC62E3981
+  4: B142A96AF9C481B61E55B7B5896847C4
+  5: A286C0769989120F8A31A8DAD7574F22
+  6: 09E711382FDB6B938C802D11A66EF657
+  7: DF9ABA4F5CF5B0647F045C3AA631BB62
+  8: 499A8F68DAEC7FE56E64DB59B0993741
+  9: AFFDA4F40A1BDF673EE9123CAE321F16
+ 10: B6F2E39D0126AA85D9152C4457365235
+ 11: 2922AAC2FF4F0B77DEE4B3E28EF5094F
+ 12: 369D18F985D18B5ADDFFFC1151DE6BBA
+ 13: 1B7641D1A38C4114EE829B7D25BF0EFF
+ 14: DEF9092BA185FD5238A25C6FCF410C52
+ 15: D59FEE8047D64032329318DC7A2277B8
+ 16: B4561A4A092E031F8FE998FAC87F9BFB
+ 17: F27EF7D0823B056F692BA369D1B2E7B4
+ 18: F62C4F7B749CF31A6F5485BFDED7EEBD
+ 19: 22BD3AB334BE6E04C84D6197FF69CAE3
+ 20: E617D108BED8E9ACBA55FAF60863F8C3
+ 21: 0DB60AE0725D37855F3AF1DDF78E98EB
+ 22: C76DD5A075AB30AB66FC448BD19B6588
+ 23: 60231366598BEB2D16D33A1A8019B9A1
+ 24: 247E925C96064801490A1D062A0C1F18
+ 25: 1C1081E20DE3BE26FF24BEC3DFBA9BF2
+ 26: 3B16562B3CD862C00A03B7ADC99E46C5
+ 27: C1E8BA560851254640D523A0CEE846AF
+ 28: C36E8CF324A0A4EBC6C76EA01CDFD158
+ 29: EAED84E721777F5E30184E496DA2C0FA
+ 30: 6655CA0D8741440212AA0DB218E5C7FE
+ 31: D5C0143E1BA233BA5F862EE6E11A8F58
+ 32: C8DAF08BD68F4AE401C6663393C257CB
+

+ 1 - 1
notes/tech0003.txt

@@ -47,6 +47,6 @@ as a hash) CAST5 is perhaps a "runner-up" choice.  CAST5 has been around longer
 fairly fast as well.
 fairly fast as well.
 
 
 You can easily accomplish this via the "config.pl" script. Simply answer "n" to all of the ciphers except the one you want
 You can easily accomplish this via the "config.pl" script. Simply answer "n" to all of the ciphers except the one you want
-and then rebuild the library.  [or you can hand edit mycrypt_custom.h]
+and then rebuild the library.  [or you can hand edit tomcrypt_custom.h]
 
 
 
 

+ 4 - 4
src/ciphers/camellia.c

@@ -10,7 +10,7 @@
  */
  */
 
 
 /**
 /**
-  @file camellia.ca
+  @file camellia.c
   Implementation by Tom St Denis of Elliptic Semiconductor
   Implementation by Tom St Denis of Elliptic Semiconductor
 */
 */
 
 
@@ -711,9 +711,9 @@ void camellia_done(symmetric_key *skey) {}
 
 
 int camellia_keysize(int *keysize)
 int camellia_keysize(int *keysize)
 {
 {
-   if (*keysize > 32) { *keysize = 32; }
-   else if (*keysize > 24) { *keysize = 24; }
-   else if (*keysize > 16) { *keysize = 16; }
+   if (*keysize >= 32) { *keysize = 32; }
+   else if (*keysize >= 24) { *keysize = 24; }
+   else if (*keysize >= 16) { *keysize = 16; }
    else return CRYPT_INVALID_KEYSIZE;
    else return CRYPT_INVALID_KEYSIZE;
    return CRYPT_OK;
    return CRYPT_OK;
 }
 }

+ 47 - 6
src/ciphers/noekeon.c

@@ -59,10 +59,10 @@ static const ulong32 RC[] = {
     a ^= c&b;
     a ^= c&b;
     
     
 #define PI1(a, b, c, d) \
 #define PI1(a, b, c, d) \
-    a = ROLc(a, 1); c = ROLc(c, 5); d = ROLc(d, 2);
+    b = ROLc(b, 1); c = ROLc(c, 5); d = ROLc(d, 2);
     
     
 #define PI2(a, b, c, d) \
 #define PI2(a, b, c, d) \
-    a = RORc(a, 1); c = RORc(c, 5); d = RORc(d, 2);
+    b = RORc(b, 1); c = RORc(c, 5); d = RORc(d, 2);
     
     
  /**
  /**
     Initialize the Noekeon block cipher
     Initialize the Noekeon block cipher
@@ -224,10 +224,51 @@ int noekeon_test(void)
  } tests[] = {
  } tests[] = {
    {
    {
       16,
       16,
-      { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 },
-      { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 },
-      { 0x18, 0xa6, 0xec, 0xe5, 0x28, 0xaa, 0x79, 0x73,
-        0x28, 0xb2, 0xc0, 0x91, 0xa0, 0x2f, 0x54, 0xc5}
+      { 0xAA, 0x3C, 0x8C, 0x86, 0xD9, 0x8B, 0xF8, 0xBE, 0x21, 0xE0, 0x36, 0x09, 0x78, 0xFB, 0xE4, 0x90 },
+      { 0xE4, 0x96, 0x6C, 0xD3, 0x13, 0xA0, 0x6C, 0xAF, 0xD0, 0x23, 0xC9, 0xFD, 0x45, 0x32, 0x23, 0x16 },
+      { 0xA6, 0xEC, 0xB8, 0xA8, 0x61, 0xFD, 0x62, 0xD9, 0x13, 0x02, 0xFE, 0x9E, 0x47, 0x01, 0x3F, 0xC3 }
+   },
+   {
+      16,
+      { 0xED, 0x43, 0xD1, 0x87, 0x21, 0x7E, 0xE0, 0x97, 0x3D, 0x76, 0xC3, 0x37, 0x2E, 0x7D, 0xAE, 0xD3 },
+      { 0xE3, 0x38, 0x32, 0xCC, 0xF2, 0x2F, 0x2F, 0x0A, 0x4A, 0x8B, 0x8F, 0x18, 0x12, 0x20, 0x17, 0xD3 },
+      { 0x94, 0xA5, 0xDF, 0xF5, 0xAE, 0x1C, 0xBB, 0x22, 0xAD, 0xEB, 0xA7, 0x0D, 0xB7, 0x82, 0x90, 0xA0 }
+   },
+   {
+      16,
+      { 0x6F, 0xDC, 0x23, 0x38, 0xF2, 0x10, 0xFB, 0xD3, 0xC1, 0x8C, 0x02, 0xF6, 0xB4, 0x6A, 0xD5, 0xA8 },
+      { 0xDB, 0x29, 0xED, 0xB5, 0x5F, 0xB3, 0x60, 0x3A, 0x92, 0xA8, 0xEB, 0x9C, 0x6D, 0x9D, 0x3E, 0x8F },
+      { 0x78, 0xF3, 0x6F, 0xF8, 0x9E, 0xBB, 0x8C, 0x6A, 0xE8, 0x10, 0xF7, 0x00, 0x22, 0x15, 0x30, 0x3D }
+   },
+   {
+      16,
+      { 0x2C, 0x0C, 0x02, 0xEF, 0x6B, 0xC4, 0xF2, 0x0B, 0x2E, 0xB9, 0xE0, 0xBF, 0xD9, 0x36, 0xC2, 0x4E },
+      { 0x84, 0xE2, 0xFE, 0x64, 0xB1, 0xB9, 0xFE, 0x76, 0xA8, 0x3F, 0x45, 0xC7, 0x40, 0x7A, 0xAF, 0xEE },
+      { 0x2A, 0x08, 0xD6, 0xA2, 0x1C, 0x63, 0x08, 0xB0, 0xF8, 0xBC, 0xB3, 0xA1, 0x66, 0xF7, 0xAE, 0xCF }
+   },
+   {
+      16,
+      { 0x6F, 0x30, 0xF8, 0x9F, 0xDA, 0x6E, 0xA0, 0x91, 0x04, 0x0F, 0x6C, 0x8B, 0x7D, 0xF7, 0x2A, 0x4B },
+      { 0x65, 0xB6, 0xA6, 0xD0, 0x42, 0x14, 0x08, 0x60, 0x34, 0x8D, 0x37, 0x2F, 0x01, 0xF0, 0x46, 0xBE },
+      { 0x66, 0xAC, 0x0B, 0x62, 0x1D, 0x68, 0x11, 0xF5, 0x27, 0xB1, 0x13, 0x5D, 0xF3, 0x2A, 0xE9, 0x18 }
+   },
+   {
+      16,
+      { 0xCA, 0xA4, 0x16, 0xB7, 0x1C, 0x92, 0x2E, 0xAD, 0xEB, 0xA7, 0xDB, 0x69, 0x92, 0xCB, 0x35, 0xEF },
+      { 0x81, 0x6F, 0x8E, 0x4D, 0x96, 0xC6, 0xB3, 0x67, 0x83, 0xF5, 0x63, 0xC7, 0x20, 0x6D, 0x40, 0x23 },
+      { 0x44, 0xF7, 0x63, 0x62, 0xF0, 0x43, 0xBB, 0x67, 0x4A, 0x75, 0x12, 0x42, 0x46, 0x29, 0x28, 0x19 }
+   },
+   {
+      16,
+      { 0x6B, 0xCF, 0x22, 0x2F, 0xE0, 0x1B, 0xB0, 0xAA, 0xD8, 0x3C, 0x91, 0x99, 0x18, 0xB2, 0x28, 0xE8 },
+      { 0x7C, 0x37, 0xC7, 0xD0, 0xAC, 0x92, 0x29, 0xF1, 0x60, 0x82, 0x93, 0x89, 0xAA, 0x61, 0xAA, 0xA9 },
+      { 0xE5, 0x89, 0x1B, 0xB3, 0xFE, 0x8B, 0x0C, 0xA1, 0xA6, 0xC7, 0xBE, 0x12, 0x73, 0x0F, 0xC1, 0x19 }
+   },
+   {
+      16,
+      { 0xE6, 0xD0, 0xF1, 0x03, 0x2E, 0xDE, 0x70, 0x8D, 0xD8, 0x9E, 0x36, 0x5C, 0x05, 0x52, 0xE7, 0x0D },
+      { 0xE2, 0x42, 0xE7, 0x92, 0x0E, 0xF7, 0x82, 0xA2, 0xB8, 0x21, 0x8D, 0x26, 0xBA, 0x2D, 0xE6, 0x32 },
+      { 0x1E, 0xDD, 0x75, 0x22, 0xB9, 0x36, 0x8A, 0x0F, 0x32, 0xFD, 0xD4, 0x48, 0x65, 0x12, 0x5A, 0x2F }
    }
    }
  };
  };
  symmetric_key key;
  symmetric_key key;

+ 43 - 2
src/math/gmp_desc.c

@@ -138,13 +138,49 @@ static int twoexpt(void *a, int n)
 
 
 /* ---- conversions ---- */
 /* ---- conversions ---- */
 
 
+static const char rmap[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/";
+
 /* read ascii string */
 /* read ascii string */
 static int read_radix(void *a, const char *b, int radix)
 static int read_radix(void *a, const char *b, int radix)
 {
 {
+   int ret;
    LTC_ARGCHK(a != NULL);
    LTC_ARGCHK(a != NULL);
    LTC_ARGCHK(b != NULL);
    LTC_ARGCHK(b != NULL);
-   mpz_set_str(a, b, radix);
-   return CRYPT_OK;
+   if (radix == 64) {
+      /* Sadly, GMP only supports radixes up to 62, but we need 64.
+       * So, although this is not the most elegant or efficient way,
+       * let's just convert the base 64 string (6 bits per digit) to
+       * an octal string (3 bits per digit) that's twice as long. */
+      char c, *tmp, *q;
+      const char *p;
+      int i;
+      tmp = XMALLOC (1 + 2 * strlen (b));
+      if (tmp == NULL) {
+         return CRYPT_MEM;
+      }
+      p = b;
+      q = tmp;
+      while ((c = *p++) != 0) {
+         for (i = 0; i < 64; i++) {
+            if (c == rmap[i])
+               break;
+         }
+         if (i == 64) {
+            XFREE (tmp);
+            // printf ("c = '%c'\n", c);
+            return CRYPT_ERROR;
+         }
+         *q++ = '0' + (i / 8);
+         *q++ = '0' + (i % 8);
+      }
+      *q = 0;
+      ret = mpz_set_str(a, tmp, 8);
+      // printf ("ret = %d for '%s'\n", ret, tmp);
+      XFREE (tmp);
+   } else {
+      ret = mpz_set_str(a, b, radix);
+   }
+   return (ret == 0 ? CRYPT_OK : CRYPT_ERROR);
 }
 }
 
 
 /* write one */
 /* write one */
@@ -152,6 +188,11 @@ static int write_radix(void *a, char *b, int radix)
 {
 {
    LTC_ARGCHK(a != NULL);
    LTC_ARGCHK(a != NULL);
    LTC_ARGCHK(b != NULL);
    LTC_ARGCHK(b != NULL);
+   if (radix >= 11 && radix <= 36)
+      /* If radix is positive, GMP uses lowercase, and if negative, uppercase.
+       * We want it to use uppercase, to match the test vectors (presumably
+       * generated with LibTomMath). */
+      radix = -radix;
    mpz_get_str(b, radix, a);
    mpz_get_str(b, radix, a);
    return CRYPT_OK;
    return CRYPT_OK;
 }
 }