J. Duke | 319a3b9 | 2007-12-01 00:00:00 +0000 | [diff] [blame^] | 1 | /* |
| 2 | * Copyright 2002-2007 Sun Microsystems, Inc. All Rights Reserved. |
| 3 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
| 4 | * |
| 5 | * This code is free software; you can redistribute it and/or modify it |
| 6 | * under the terms of the GNU General Public License version 2 only, as |
| 7 | * published by the Free Software Foundation. |
| 8 | * |
| 9 | * This code is distributed in the hope that it will be useful, but WITHOUT |
| 10 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
| 11 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
| 12 | * version 2 for more details (a copy is included in the LICENSE file that |
| 13 | * accompanied this code). |
| 14 | * |
| 15 | * You should have received a copy of the GNU General Public License version |
| 16 | * 2 along with this work; if not, write to the Free Software Foundation, |
| 17 | * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
| 18 | * |
| 19 | * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, |
| 20 | * CA 95054 USA or visit www.sun.com if you need additional information or |
| 21 | * have any questions. |
| 22 | */ |
| 23 | |
| 24 | /* |
| 25 | * @test |
| 26 | * @bug 4635086 |
| 27 | * @library ../UTIL |
| 28 | * @build TestUtil |
| 29 | * @run main TestKATForECB_VT |
| 30 | * @summary Known Answer Test for AES cipher with ECB mode |
| 31 | * @author Valerie Peng |
| 32 | */ |
| 33 | import java.security.*; |
| 34 | import javax.crypto.*; |
| 35 | import javax.crypto.spec.*; |
| 36 | import java.math.*; |
| 37 | import com.sun.crypto.provider.*; |
| 38 | |
| 39 | import java.util.*; |
| 40 | |
| 41 | public class TestKATForECB_VT |
| 42 | { |
| 43 | private static final String ALGO = "AES"; |
| 44 | private static final String MODE = "ECB"; |
| 45 | private static final String PADDING = "NoPadding"; |
| 46 | |
| 47 | private static String[][] CTS = { |
| 48 | // Cipher Texts for 128-bit key |
| 49 | { |
| 50 | "3AD78E726C1EC02B7EBFE92B23D9EC34", |
| 51 | "45BC707D29E8204D88DFBA2F0B0CAD9B", |
| 52 | "161556838018F52805CDBD6202002E3F", |
| 53 | "F5569B3AB6A6D11EFDE1BF0A64C6854A", |
| 54 | "64E82B50E501FBD7DD4116921159B83E", |
| 55 | "BAAC12FB613A7DE11450375C74034041", |
| 56 | "BCF176A7EAAD8085EBACEA362462A281", |
| 57 | "47711816E91D6FF059BBBF2BF58E0FD3", |
| 58 | "B970DFBE40698AF1638FE38BD3DF3B2F", |
| 59 | "F95B59A44F391E14CF20B74BDC32FCFF", |
| 60 | "720F74AE04A2A435B9A7256E49378F5B", |
| 61 | "2A0445F61D36BFA7E277070730CF76DA", |
| 62 | "8D0536B997AEFEC1D94011BAB6699A03", |
| 63 | "674F002E19F6ED47EFF319E51FAD4498", |
| 64 | "292C02C5CB9163C80AC0F6CF1DD8E92D", |
| 65 | "FA321CF18EF5FE727DD82A5C1E945141", |
| 66 | "A5A7AFE1034C39CCCEBE3C584BC0BE05", |
| 67 | "4FF5A52E697E77D081205DBDB21CEA39", |
| 68 | "209E88DC94C9003000CE0769AF7B7166", |
| 69 | "5DEE41AF864CB4B650E5F51551824D38", |
| 70 | "A79A63FA7E4503AE6D6E09F5F9053030", |
| 71 | "A48316749FAE7FAC7002031A6AFD8BA7", |
| 72 | "D6EEE8A7357A0E1D64262CA9C337AC42", |
| 73 | "B013CA8A62A858053E9FB667ED39829E", |
| 74 | "DF6EA9E4538A45A52D5C1A43C88F4B55", |
| 75 | "7D03BA451371591D3FD5547D9165C73B", |
| 76 | "0E0426281A6277E186499D365D5F49FF", |
| 77 | "DBC02169DD2059E6CC4C57C1FEDF5AB4", |
| 78 | "826590E05D167DA6F00DCC75E22788EB", |
| 79 | "34A73F21A04421D9786335FAAB49423A", |
| 80 | "ED347D0E0128EE1A7392A1D36AB78AA9", |
| 81 | "EE944B2FE6E9FC888042608DA9615F75", |
| 82 | "9E7C85A909EF7218BA7947CFB4718F46", |
| 83 | "811AE07A0B2B1F816587FA73699AE77D", |
| 84 | "68466FBF43C2FE13D4B18F7EC5EA745F", |
| 85 | "D20B015C7191B219780956E6101F9354", |
| 86 | "5939D5C1BBF54EE1B3E326D757BDDE25", |
| 87 | "B1FDAFE9A0240E8FFEA19CE94B5105D3", |
| 88 | "D62962ECE02CDD68C06BDFEFB2F9495B", |
| 89 | "B3BB2DE6F3C26587BA8BAC4F7AD9499A", |
| 90 | "E0B1072D6D9FF703D6FBEF77852B0A6B", |
| 91 | "D8DD51C907F478DE0228E83E61FD1758", |
| 92 | "A42DFFE6E7C1671C06A25236FDD10017", |
| 93 | "25ACF141550BFAB9EF451B6C6A5B2163", |
| 94 | "4DA7FCA3949B16E821DBC84F19581018", |
| 95 | "7D49B6347CBCC8919C7FA96A37A7A215", |
| 96 | "900024B29A08C6721B95BA3B753DDB4D", |
| 97 | "6D2182FB283B6934D90BA7848CAB5E66", |
| 98 | "F73EF01B448D23A4D90DE8B2F9666E7A", |
| 99 | "4AD9CDA2418643E9A3D926AF5E6B0412", |
| 100 | "7CAEC8E7E5953997D545B033201C8C5B", |
| 101 | "3C43CA1F6B6864503E27B48D88230CF5", |
| 102 | "44F779B93108FE9FEEC880D79BA74488", |
| 103 | "9E50E8D9CFD3A682A78E527C9072A1CF", |
| 104 | "68D000CBC838BBE3C505D6F814C01F28", |
| 105 | "2CB2A9FEC1ACD1D9B0FA05205E304F57", |
| 106 | "01EB2806606E46444520A5CC6180CD4B", |
| 107 | "DAA9B25168CC702326F217F1A0C0B162", |
| 108 | "3E07E648975D9578D03555B1755807ED", |
| 109 | "0B45F52E802C8B8DE09579425B80B711", |
| 110 | "659595DA0B68F6DF0DD6CA77202986E1", |
| 111 | "05FF42873893536E58C8FA98A45C73C4", |
| 112 | "B5B03421DE8BBFFC4EADEC767339A9BD", |
| 113 | "788BCD111ECF73D4E78D2E21BEF55460", |
| 114 | "909CD9EC6790359F982DC6F2393D5315", |
| 115 | "332950F361535FF24EFAC8C76293F12C", |
| 116 | "A68CCD4E330FFDA9D576DA436DB53D75", |
| 117 | "27C8A1CCFDB0B015D1ED5B3E77143791", |
| 118 | "D76A4B95887A77DF610DD3E1D3B20325", |
| 119 | "C068AB0DE71C66DAE83C361EF4B2D989", |
| 120 | "C2120BCD49EDA9A288B3B4BE79AC8158", |
| 121 | "0C546F62BF2773CD0F564FCECA7BA688", |
| 122 | "18F3462BEDE4920213CCB66DAB1640AA", |
| 123 | "FE42F245EDD0E24B216AEBD8B392D690", |
| 124 | "3D3EEBC8D3D1558A194C2D00C337FF2B", |
| 125 | "29AAEDF043E785DB42836F79BE6CBA28", |
| 126 | "215F90C6744E2944358E78619159A611", |
| 127 | "8606B1AA9E1D548E5442B06551E2C6DC", |
| 128 | "987BB4B8740EC0EDE7FEA97DF033B5B1", |
| 129 | "C0A3500DA5B0AE07D2F450930BEEDF1B", |
| 130 | "525FDF8312FE8F32C781481A8DAAAE37", |
| 131 | "BFD2C56AE5FB9C9DE33A6944572A6487", |
| 132 | "7975A57A425CDF5AA1FA929101F650B0", |
| 133 | "BF174BC49609A8709B2CD8366DAA79FE", |
| 134 | "06C50C43222F56C874B1704E9F44BF7D", |
| 135 | "0CEC48CD34043EA29CA3B8ED5278721E", |
| 136 | "9548EA34A1560197B304D0ACB8A1698D", |
| 137 | "22F9E9B1BD73B6B5B7D3062C986272F3", |
| 138 | "FEE8E934BD0873295059002230E298D4", |
| 139 | "1B08E2E3EB820D139CB4ABBDBE81D00D", |
| 140 | "0021177681E4D90CEAF69DCED0145125", |
| 141 | "4A8E314452CA8A8A3619FC54BC423643", |
| 142 | "65047474F7222C94C6965425FF1BFD0A", |
| 143 | "E123F551A9C4A8489622B16F961A9AA4", |
| 144 | "EF05530948B80915028BB2B6FE429380", |
| 145 | "72535B7FE0F0F777CEDCD55CD77E2DDF", |
| 146 | "3423D8EFC31FA2F4C365C77D8F3B5C63", |
| 147 | "DE0E51C264663F3C5DBC59580A98D8E4", |
| 148 | "B2D9391166680947AB09264156719679", |
| 149 | "10DB79F23B06D263835C424AF749ADB7", |
| 150 | "DDF72D27E6B01EC107EA3E005B59563B", |
| 151 | "8266B57485A5954A4236751DE07F6694", |
| 152 | "669A501E1F1ADE6E5523DE01D6DBC987", |
| 153 | "C20C48F2989725D461D1DB589DC0896E", |
| 154 | "DE35158E7810ED1191825D2AA98FA97D", |
| 155 | "4FE294F2C0F34D0671B693A237EBDDC8", |
| 156 | "087AE74B10CCBFDF6739FEB9559C01A4", |
| 157 | "5DC278970B7DEF77A5536C77AB59C207", |
| 158 | "7607F078C77085184EAA9B060C1FBFFF", |
| 159 | "9DB841531BCBE7998DAD19993FB3CC00", |
| 160 | "D6A089B654854A94560BAE13298835B8", |
| 161 | "E1E223C4CF90CC5D195B370D65114622", |
| 162 | "1CBED73C50D053BDAD372CEEE54836A1", |
| 163 | "D309E69376D257ADF2BFDA152B26555F", |
| 164 | "740F7649117F0DEE6EAA7789A9994C36", |
| 165 | "76AE64417C297184D668C5FD908B3CE5", |
| 166 | "6095FEA4AA8035591F1787A819C48787", |
| 167 | "D1FF4E7ACD1C79967FEBAB0F7465D450", |
| 168 | "5F5AD3C42B9489557BB63BF49ECF5F8A", |
| 169 | "FB56CC09B680B1D07C5A52149E29F07C", |
| 170 | "FF49B8DF4A97CBE03833E66197620DAD", |
| 171 | "5E070ADE533D2E090ED0F5BE13BC0983", |
| 172 | "3AB4FB1D2B7BA376590A2C241D1F508D", |
| 173 | "58B2431BC0BEDE02550F40238969EC78", |
| 174 | "0253786E126504F0DAB90C48A30321DE", |
| 175 | "200211214E7394DA2089B6ACD093ABE0", |
| 176 | "0388DACE60B6A392F328C2B971B2FE78", |
| 177 | "58E2FCCEFA7E3061367F1D57A4E7455A" |
| 178 | }, |
| 179 | // Cipher Texts for 192-bit key |
| 180 | { |
| 181 | "6CD02513E8D4DC986B4AFE087A60BD0C", |
| 182 | "423D2772A0CA56DAABB48D2129062987", |
| 183 | "1021F2A8DA70EB2219DC16804445FF98", |
| 184 | "C636E35B402577F96974D8804295EBB8", |
| 185 | "1566D2E57E8393C19E29F892EA28A9A7", |
| 186 | "883C878FED70B36CC09D040F9619DD19", |
| 187 | "06734593A974965790E715594FC34AA9", |
| 188 | "F19B389948D9A45534E5BD36C984134A", |
| 189 | "D8410DFC14FA6D175EC968EA8CAC514C", |
| 190 | "7E6C6EBB4029A177CF7B2FDD9AC6BB7A", |
| 191 | "4B51DD4850DC0A6C3A46D924003D2C27", |
| 192 | "2E510A9D917B15BE32A192B12A668F23", |
| 193 | "88F6F79962B0FB77FEA8E7C632D3108E", |
| 194 | "A3A35AB1D88DAF07B52794A0F065383A", |
| 195 | "DC6CC878433E2B3BB193049A4ECBFC53", |
| 196 | "EFCD3763EB7B1A415938248A9A5B4FD5", |
| 197 | "AB7E9FB9A66DBE5BB44854F07D9015EE", |
| 198 | "8B8E9D3365F8F6743ECF7E33E99255A4", |
| 199 | "54D37B4F176FF3D8F6AFC866066D8572", |
| 200 | "E83310889480FBF3C00342E3126D0D02", |
| 201 | "D321AB2511F92F098174AA2DE6E85DA2", |
| 202 | "D8E3F40B1112D5149D58C481DFA9983F", |
| 203 | "2454C4E0806639DDF19854D6C68054AD", |
| 204 | "A5506D410F7CA32F3955DD79D9D09418", |
| 205 | "7908EE40677699568A7DC1AA317C7E4E", |
| 206 | "B4B7B29DD43B2F5CF765E25192273982", |
| 207 | "92AFE9668159BEFFE2A86F8503260164", |
| 208 | "5C36A232FBA6D187A84657AD4028B18F", |
| 209 | "A2E994DFAB3A798DF8F54F6DA87E58E2", |
| 210 | "6CDAB10A72ADF77D71D0765BAAE95631", |
| 211 | "9FE3C801BCAAF7BB800F2E6BF3278E21", |
| 212 | "B459D90D9A6C392E5493BC91CF5A0863", |
| 213 | "0518A9FA5007F6787E0FB4E5AC27D758", |
| 214 | "BED9795415D28599700ED7952384A963", |
| 215 | "F0140421173D60251EF6CAB0229B1B50", |
| 216 | "460EB4652B3F6779EA28CB11B37529ED", |
| 217 | "C4283D351C960A6AC13CD19CCF03AE38", |
| 218 | "6815A10047B2C834A798EBDCC6786C75", |
| 219 | "99BA19F0CDD5990D0386B32CE56C9C4C", |
| 220 | "DE76F62C61E07915162DA13E79679DEC", |
| 221 | "DD0325D6854803D06D1D2277D5FB8D67", |
| 222 | "580B71A41DE37D6FAC83CCB0B3BB1C97", |
| 223 | "E9B1AB470A1B02EF0FF5E6754A092C96", |
| 224 | "8590620F5AF5993B7410282F4126BC1F", |
| 225 | "8D4914D2F1B22B2E268E66E532D29D7C", |
| 226 | "FD826CE48E62C5E30867044B86BA4B56", |
| 227 | "100E7B831C9F35FA1271F5F1316C6FCF", |
| 228 | "0A2DD0C17F68B996AA96C007003D0B31", |
| 229 | "C95F68C57E06B0A2E1F623C83C5D80BF", |
| 230 | "571CAFC92C7C8A5EC54C0741E186905C", |
| 231 | "22514353E95312C112255E1EED0B2DF6", |
| 232 | "791A8BF462BD17580BD9152C6D11C6C5", |
| 233 | "5882A0178D548F84A165DB809C60DC28", |
| 234 | "3CE4A90EED4458CA6039E42DDADB71C3", |
| 235 | "D3CBAB261207A16BE2751E77044FD7C9", |
| 236 | "24E32B698A7B32217093628B01F424AB", |
| 237 | "9F6AFC0AF27CF565110C77E3C24F4F5B", |
| 238 | "E088AA5CDA20EF267BB039B00C72C45B", |
| 239 | "5CF1018B7E0BA1775601C2E279900360", |
| 240 | "3B1A7388B89FB9416AD8753CF5AF35D2", |
| 241 | "137FA4ED00AFCD9F5D8BC0D14BD5837A", |
| 242 | "806F5C9B663559BB56F234881E4A3E60", |
| 243 | "8069A449152292DF2DE8642992C632B6", |
| 244 | "37C6CF2A1ABD1B1F1922B46C7B4A280D", |
| 245 | "7A2835260E5A0AA2B5DC301800EC8438", |
| 246 | "EE81FAF2F9058213FFCACF281CB8509E", |
| 247 | "57F22D93C37129BA331FDBA38E005A1E", |
| 248 | "EC798782E87B7D9F780CC3C3A46519B5", |
| 249 | "43EA28497F5D40E3A4744FA2EDAA42DE", |
| 250 | "91F004E7DEBF41B3414DD8C5C317372C", |
| 251 | "C249EAE54E7B4DF43B938C1B4CC28314", |
| 252 | "32C289D7EEFB99D2F17AD7B7D45FE1EC", |
| 253 | "A675FB2E8DDBF810CEF01CF2B728CD2B", |
| 254 | "A418AAAB6E6921CC731AA8A349386080", |
| 255 | "2E2B0F44863E67D9B0215C4ABD60417F", |
| 256 | "F0AF7CB19E911D481F6426DAEFDD2240", |
| 257 | "CB1304DAAA2DF6878F56AC2E0F887E04", |
| 258 | "B1B70A7E6A0CD1916D9B78BEA19084AE", |
| 259 | "0CDE9F9BE646A5FCE3436B794A9CFC65", |
| 260 | "68C7946D476A0A36674B36AFD7E5DF33", |
| 261 | "48770159A07DD8DFFF06C80105F8D57C", |
| 262 | "665E62801B3260E3C45BD3BE34DFDEBE", |
| 263 | "4159C1F686BFBE5B0E50BDB0DA532B69", |
| 264 | "6333100A5A4AD917DC2D4E78A04869A3", |
| 265 | "866A4519AB1D199F25886B89D0539ACC", |
| 266 | "EC0CFD37E4CBC7E8BE385283F7AEA75A", |
| 267 | "CA2F383AACCA0810AA13F3E710621422", |
| 268 | "1D0EEF6870444F950937831EC0A55D98", |
| 269 | "37839B35ED6801E7670496D479A95017", |
| 270 | "02317C8C7098C4F94AB867AC7A49DD8D", |
| 271 | "FFB4CB4E3F7F8BF3367EBD43236518B4", |
| 272 | "36BEDEF1E4AA3E4A40A305741713FCBF", |
| 273 | "B2DFE3C4870269C1E3FEEC39161540D9", |
| 274 | "147EF2518AD45DA0026056ECBF6A3DFA", |
| 275 | "027A75E4DE635790E47ACE90D7928804", |
| 276 | "C4CF3CCB59BF87D0AFBD629F48CFBB7B", |
| 277 | "35165C93F564C97E1C32EF97E8151A87", |
| 278 | "449DE37F7D5A1BBD628ABBE7E061701D", |
| 279 | "B1D45EAF218F1799B149BAD677FE129F", |
| 280 | "BE08AC6DB6BD0583AA9D2ABC71C73DCD", |
| 281 | "BCC835BD3DF1A79E4C7C145B899A5C25", |
| 282 | "3D311EA611FF5AF371301C58A8E9912D", |
| 283 | "A5A1BEA594ACC7CA80F09EA5ADDB5C71", |
| 284 | "0F09492429FE7222D6CD8190D9F2FFBF", |
| 285 | "816D2220A16B8AAEE71364FD43636C6F", |
| 286 | "D7E8702408419ED73191B107EAF75A0B", |
| 287 | "9B170EFB1E235B433C78E276BEA082F0", |
| 288 | "03BBECC5598AE974430F29395522F096", |
| 289 | "DB53517766C0E8CF42059607CBA89380", |
| 290 | "2E2AF4B7931F0AEFFAC5471148A5BB97", |
| 291 | "C872C0408266403B984F635FF5683DE4", |
| 292 | "15DCF750B0E3A68AD1F4EFD07E8967B4", |
| 293 | "B41092048E9E6A749F6FD8CE515A23A3", |
| 294 | "4DA9267D62507994312BD5C99ADDE730", |
| 295 | "9E2FCA6D1D626E9C6A924EBF7DBF618A", |
| 296 | "E092E8D7EF2C2465AEFB2493C3063590", |
| 297 | "1C0E58DA37D1068378A88DBE2EDE4E10", |
| 298 | "19063F854232B8509A6A3A6D46809959", |
| 299 | "447FB09E54EFA285F7530F25C4EA0022", |
| 300 | "F6ABE86321BE40E1FBFDAFED37CC1D9B", |
| 301 | "4E8506CD006666341D6CF51F98B41F35", |
| 302 | "53995DE0009CA18BECAFB8307C54C14C", |
| 303 | "2006BF99F4C58B6CC2627856593FAEEA", |
| 304 | "2DA697D2737CB30B744A4644FA1CBC6E", |
| 305 | "47A22ACDB60C3A986A8F76ECD0EA3433", |
| 306 | "FDAA17C2CDE20268FE36E164EA532151", |
| 307 | "98E7247C07F0FE411C267E4384B0F600", |
| 308 | "CD33B28AC773F74BA00ED1F312572435" |
| 309 | }, |
| 310 | // Cipher Texts for 256-bit key |
| 311 | { |
| 312 | "DDC6BF790C15760D8D9AEB6F9A75FD4E", |
| 313 | "C7098C217C334D0C9BDF37EA13B0822C", |
| 314 | "60F0FB0D4C56A8D4EEFEC5264204042D", |
| 315 | "73376FBBF654D0686E0E84001477106B", |
| 316 | "2F443B52BA5F0C6EA0602C7C4FD259B6", |
| 317 | "75D11B0E3A68C4223D88DBF017977DD7", |
| 318 | "779B38D15BFFB63D8D609D551A5CC98E", |
| 319 | "5275F3D86B4FB8684593133EBFA53CD3", |
| 320 | "1CEF2074B336CEC62F12DEA2F6AB1481", |
| 321 | "1AEF5ABBAD9D7160874578DCD8BAE172", |
| 322 | "46C525DB17E72F26BF03216846B6F609", |
| 323 | "E24411F941BBE08788781E3EC52CBAA4", |
| 324 | "83A3DEDD1DD27018F6A6477E40527581", |
| 325 | "B68F8A2CDBAB0C923C67FC8F0F1087DE", |
| 326 | "649944A70C32BF87A7409E7AE128FDE8", |
| 327 | "2846526D67387539C89314DE9E0C2D02", |
| 328 | "A9A0B8402E53C70DD1688054BA58DDFD", |
| 329 | "4A72E6E1B79C83AC4BE3EBA5699EED48", |
| 330 | "B0E36B867BA4FF2B77D0614B0E364E4C", |
| 331 | "49B57DE141F6418E3090F24DDD4014B6", |
| 332 | "A6C0D5B9797258E1987AC5F6CD20146D", |
| 333 | "426CF4BDCAA369175965D26E7C71EEA2", |
| 334 | "E27F484CE54BC99BC1A52BDA3B518A26", |
| 335 | "D16D186284C7E6EE64B8104E0EF20BA5", |
| 336 | "6431F8538AD54E1E044A9F71F8EF556B", |
| 337 | "ECD57CEB451D27EB96C55B2042257E8E", |
| 338 | "4F0F188DC911B1954AFBC734C9F68872", |
| 339 | "B54DEF0337626B65614E81EDFDE620F3", |
| 340 | "6655D8074CAE0B90B0D3A3FE72D4D9DB", |
| 341 | "C6B74B6B9EB4FC0C9A237DB1B616D09A", |
| 342 | "D7B5D076EA56EC2B20791D7AD51CCF8F", |
| 343 | "FE160C224BF003CE3BDDC90CB52ED22C", |
| 344 | "5E00DA9BA94B5EC0D258D8A8002E0F6A", |
| 345 | "09AC6DCFF4DACFF1651E2BA212A292A3", |
| 346 | "B283617E318D99AF83A05D9810BA89F7", |
| 347 | "0B5F70CCB40B0EF2538AE9B4A9770B35", |
| 348 | "43282BF180248FB517839B37F4DDAAE4", |
| 349 | "DDBD534C8B2E6D30A268F88C55AD765B", |
| 350 | "A41A164E50EC2D9F175E752B755E0B5C", |
| 351 | "37BFF99FF2F7AA97779E4ADF6F13FB10", |
| 352 | "9BA4F7BD298152903A683C4CEC669216", |
| 353 | "5FB750C7CE10DE7B4504248914D0DA06", |
| 354 | "3E748BFA108E086F51D56EC74A9E0FB9", |
| 355 | "31D4E56B99F5B73C1B8437DF332AFB98", |
| 356 | "9DC6717B84FC55D266E7B1D9B5C52A5F", |
| 357 | "8EF8BA007F23C0A50FC120E07041BCCD", |
| 358 | "C58F38E1839FC1918A12B8C9E88C66B6", |
| 359 | "B695D72A3FCF508C4050E12E40061C2D", |
| 360 | "5D2736AD478A50583BC8C11BEFF16D7A", |
| 361 | "DF0EACA8F17847AD41F9578F14C7B56B", |
| 362 | "E5AA14AD48AD0A3C47CC35D5F8020E51", |
| 363 | "11BE6C8F58EBD8CEF1A53F591A68E8CE", |
| 364 | "ECFE7BAFCBF42C1FEE015488770B3053", |
| 365 | "E552649F8D8EC4A1E1CD6DF50B6E6777", |
| 366 | "521C0629DE93B9119CDB1DDC5809DDEA", |
| 367 | "CB38A62A0BAB1784156BA038CBA99BF6", |
| 368 | "76CCEE8AAACD394DE1EEF3DDA10CB54B", |
| 369 | "6AFF910FA1D5673140E2DB59B8416049", |
| 370 | "064A12C0EF73FB386801BF4F35F3120D", |
| 371 | "2240E374929D5B1BB8FF0FFDDDF640EC", |
| 372 | "D4BA15C904C7692185DE85C02052E180", |
| 373 | "1714A315AB0166728A44CD91D4AE9018", |
| 374 | "6C970BDD9F0E222722EA31A1D12DD0AD", |
| 375 | "F5956EDF02BD36A401BBB6CE77C3D3FB", |
| 376 | "0CA11F122CCD7C259DC597EED3DF9BC4", |
| 377 | "50109AB4912AD2560B206F331B62EB6C", |
| 378 | "DBE7C91A4175614889A2D4BEFD64845E", |
| 379 | "0D3322853A571A6B46B79C0228E0DD25", |
| 380 | "96E4EE0BB9A11C6FB8522F285BADDEB6", |
| 381 | "96705C52D2CFCE82E630C93477C79C49", |
| 382 | "C50130AED6A126149D71F3888C83C232", |
| 383 | "4816EFE3DEB380566EBA0C17BF582090", |
| 384 | "0390857B4C8C98E4CF7A2B6F3394C507", |
| 385 | "422E73A02025EBE8B8B5D6E0FA24FCB2", |
| 386 | "3271AA7F4BF1D7C38050A43076D4FF76", |
| 387 | "D2074946F0D37B8975607BFC2E70234C", |
| 388 | "1A509194C1270AB92E5A42D3A9F8D98B", |
| 389 | "512438946360CCC4A5C6D73F6EED7130", |
| 390 | "98CFCDEC46EBEA1A286B3004F2746A0D", |
| 391 | "A1CF369949677A3AF3D58E3EABF2741B", |
| 392 | "D84C2E1A0E4A52166FA8FF6889D1E5E2", |
| 393 | "4AD91CCEEF60119B5078FD162D2735DE", |
| 394 | "2860793D818E97AAFF1D339D7702438D", |
| 395 | "6F9068BE73364AE250D89D78A6C9CE6F", |
| 396 | "024FC3FEF4883FEB1A8DD005305FECCE", |
| 397 | "08A61FE0816D75EA15EB3C9FB9CCDED6", |
| 398 | "449C86DFA13F260175CE39797686FFA4", |
| 399 | "4FFFFC29A59858E1133F2BFB1A8A4817", |
| 400 | "19425D1F6480B25096561295697DC2B7", |
| 401 | "31974727ECDD2C77C3A428FC3A8CB3FC", |
| 402 | "A57CD704B3C95E744D08DF443458F2F5", |
| 403 | "486D8C193DB1ED73ACB17990442FC40B", |
| 404 | "5E4DBF4E83AB3BC055B9FCC7A6B3A763", |
| 405 | "ACF2E0A693FBBCBA4D41B861E0D89E37", |
| 406 | "32A7CB2AE066A51D2B78FC4B4CFCB608", |
| 407 | "677D494DBB73CAF55C1990158DA12F14", |
| 408 | "082A0D2367512ADF0D75A151BFBE0A17", |
| 409 | "5E5BB7337923C482CE8CBA249E6A8C7D", |
| 410 | "D3001BA7C7026EE3E5003179530AFCFC", |
| 411 | "46EC44F8931E629FE8FD8961312EDDE1", |
| 412 | "C5F8ECD79C7B30E81D17E32079969310", |
| 413 | "5B8AD6919E24CAEBCC55401AEE0C9802", |
| 414 | "C2302B7E701B5CC7F8B29E3516DBBFA6", |
| 415 | "A1D04D6A76F9F7A94D49FAA64A87F244", |
| 416 | "7FB6F92D35B5CB6C631600EDB9E860BA", |
| 417 | "B2EF7078BCFACE07AEEC3F9B48830EB3", |
| 418 | "F475A7493D24C7036E53390374C378B3", |
| 419 | "B36802AC987377A37BD8EADC97C57D60", |
| 420 | "ADDCD3D19689C4DDC738CE5F69DC9505", |
| 421 | "0DAF8CA22884915403C0F0BB1F4BD74F", |
| 422 | "4AF36BAE2660503B3248E4685059FD05", |
| 423 | "7D5631814DD8E917D97A0D514C743971", |
| 424 | "BC3352500FC0CBB9DB5B5F6B491C1BE8", |
| 425 | "6A4A30BA87E87AF65C90AEB7AFEDC76B", |
| 426 | "77E6125897668AC8E73E8C79A6FF8336", |
| 427 | "3FA9D39104EBB323C7AAAA248960DD1E", |
| 428 | "FAD75AD76AB10ADC49036B250E229D39", |
| 429 | "2FACAA5FE35B228A16AC74088D702EC4", |
| 430 | "88B6CBCFDFEF8AD91720A1BB69A1F33E", |
| 431 | "C7E9D250998632D444356242EF04058D", |
| 432 | "B14DAD8D3D9153F46C0D3A1AD63C7A05", |
| 433 | "60ABA678A506608D0845966D29B5F790", |
| 434 | "482DC43F2388EF25D24144E144BD834E", |
| 435 | "1490A05A7CEE43BDE98B56E309DC0126", |
| 436 | "ABFA77CD6E85DA245FB0BDC5E52CFC29", |
| 437 | "DD4AB1284D4AE17B41E85924470C36F7", |
| 438 | "CEA7403D4D606B6E074EC5D3BAF39D18", |
| 439 | "530F8AFBC74536B9A963B4F1C4CB738B" |
| 440 | } |
| 441 | }; |
| 442 | |
| 443 | private static int[] KEY_SIZES = { |
| 444 | 16, 24, 32 |
| 445 | }; |
| 446 | |
| 447 | /** |
| 448 | * Constructs an AES Key according to the specified key size. |
| 449 | * @param len key size in bytes, i.e. 16, 24, or 32 |
| 450 | */ |
| 451 | private static SecretKey constructAESKey(int len) |
| 452 | throws IllegalArgumentException { |
| 453 | if ((len != 16) && (len != 24) && (len != 32)) { |
| 454 | throw new IllegalArgumentException("Wrong Key Length: " + len); |
| 455 | } |
| 456 | byte[] keyval = new byte[len]; |
| 457 | return new SecretKeySpec(keyval, "AES"); |
| 458 | } |
| 459 | /** |
| 460 | * Constructs plain text byte array according to the specified round |
| 461 | * number. |
| 462 | * @param rounds round number starting from 0, i.e. valid from 0 |
| 463 | * to 127. |
| 464 | */ |
| 465 | private static byte[] constructPT(int rounds) { |
| 466 | byte[] tempValue = new byte[16]; |
| 467 | Arrays.fill(tempValue, (byte)0); |
| 468 | |
| 469 | int whichByte = rounds/8; |
| 470 | int whichDigit = rounds % 8; |
| 471 | if ((whichByte >= 16) || (whichDigit < 0) || |
| 472 | (whichDigit > 8)) { |
| 473 | throw new IllegalArgumentException("Invalid rounds: " + |
| 474 | rounds); |
| 475 | } |
| 476 | switch (whichDigit) { |
| 477 | case 0: |
| 478 | tempValue[whichByte] = (byte)0x80; |
| 479 | break; |
| 480 | case 1: |
| 481 | tempValue[whichByte] = (byte)0x40; |
| 482 | break; |
| 483 | case 2: |
| 484 | tempValue[whichByte] = (byte)0x20; |
| 485 | break; |
| 486 | case 3: |
| 487 | tempValue[whichByte] = (byte)0x10; |
| 488 | break; |
| 489 | case 4: |
| 490 | tempValue[whichByte] = (byte)0x08; |
| 491 | break; |
| 492 | case 5: |
| 493 | tempValue[whichByte] = (byte)0x04; |
| 494 | break; |
| 495 | case 6: |
| 496 | tempValue[whichByte] = (byte)0x02; |
| 497 | break; |
| 498 | case 7: |
| 499 | tempValue[whichByte] = (byte)0x01; |
| 500 | break; |
| 501 | } |
| 502 | return tempValue; |
| 503 | } |
| 504 | |
| 505 | private static byte[] constructByteArray(String s) { |
| 506 | int len = s.length()/2; |
| 507 | byte[] tempValue = new byte[len]; |
| 508 | for (int i = 0; i < len; i++) { |
| 509 | tempValue[i] = Integer.valueOf(s.substring(2*i, 2*i+2), |
| 510 | 16).byteValue(); |
| 511 | } |
| 512 | return tempValue; |
| 513 | } |
| 514 | |
| 515 | public boolean execute() throws Exception { |
| 516 | String transformation = ALGO+"/"+MODE+"/"+PADDING; |
| 517 | Cipher c = Cipher.getInstance(transformation, "SunJCE"); |
| 518 | |
| 519 | for (int i=0; i<KEY_SIZES.length; i++) { |
| 520 | if (KEY_SIZES[i]*8 > |
| 521 | Cipher.getMaxAllowedKeyLength(transformation)) { |
| 522 | // skip if this key length is larger than what's |
| 523 | // configured in the jce jurisdiction policy files |
| 524 | continue; |
| 525 | } |
| 526 | SecretKey aesKey = constructAESKey(KEY_SIZES[i]); |
| 527 | byte[] plainText = null; |
| 528 | byte[] cipherText = null; |
| 529 | try { |
| 530 | for (int j=0; j < 128; j++) { |
| 531 | plainText = constructPT(j); |
| 532 | c.init(Cipher.ENCRYPT_MODE, aesKey); |
| 533 | cipherText = c.doFinal(plainText); |
| 534 | byte[] answer = constructByteArray(CTS[i][j]); |
| 535 | if (!Arrays.equals(cipherText, answer)) { |
| 536 | throw new Exception((i+1) + |
| 537 | "th known answer test failed for encryption"); |
| 538 | } |
| 539 | c.init(Cipher.DECRYPT_MODE, aesKey); |
| 540 | byte[] restored = c.doFinal(cipherText); |
| 541 | if (!Arrays.equals(plainText, restored)) { |
| 542 | throw new Exception((i+1) + |
| 543 | "th known answer test failed for decryption"); |
| 544 | } |
| 545 | } |
| 546 | System.out.println( |
| 547 | "Finished KAT for " + KEY_SIZES[i] + "-byte key"); |
| 548 | } catch (SecurityException se) { |
| 549 | TestUtil.handleSE(se); |
| 550 | } |
| 551 | } |
| 552 | |
| 553 | // passed all tests...hooray! |
| 554 | return true; |
| 555 | } |
| 556 | |
| 557 | public static void main (String[] args) throws Exception { |
| 558 | Security.addProvider(new com.sun.crypto.provider.SunJCE()); |
| 559 | |
| 560 | TestKATForECB_VT test = new TestKATForECB_VT(); |
| 561 | String testName = test.getClass().getName() + "[" + ALGO + |
| 562 | "/" + MODE + "/" + PADDING + "]"; |
| 563 | if (test.execute()) { |
| 564 | System.out.println(testName + ": Passed!"); |
| 565 | } |
| 566 | } |
| 567 | } |