diff --git a/jdk/test/javax/crypto/Cipher/ExampleVectors/CheckExampleVectors.java b/jdk/test/javax/crypto/Cipher/ExampleVectors/CheckExampleVectors.java new file mode 100644 index 00000000000..08cddef6bb8 --- /dev/null +++ b/jdk/test/javax/crypto/Cipher/ExampleVectors/CheckExampleVectors.java @@ -0,0 +1,248 @@ +/* + * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8006259 + * @summary Test several modes of operation using vectors from SP 800-38A + * @modules java.xml.bind + * @run main CheckExampleVectors + */ + +import java.io.*; +import java.security.*; +import java.util.*; +import java.util.function.*; +import javax.xml.bind.DatatypeConverter; +import javax.crypto.*; +import javax.crypto.spec.*; + +public class CheckExampleVectors { + + private enum Mode { + ECB, + CBC, + CFB1, + CFB8, + CFB128, + OFB, + CTR + } + + private enum Operation { + Encrypt, + Decrypt + } + + private static class Block { + private byte[] input; + private byte[] output; + + public Block() { + + } + public Block(String settings) { + String[] settingsParts = settings.split(","); + input = stringToBytes(settingsParts[0]); + output = stringToBytes(settingsParts[1]); + } + public byte[] getInput() { + return input; + } + public byte[] getOutput() { + return output; + } + } + + private static class TestVector { + private Mode mode; + private Operation operation; + private byte[] key; + private byte[] iv; + private List blocks = new ArrayList(); + + public TestVector(String settings) { + String[] settingsParts = settings.split(","); + mode = Mode.valueOf(settingsParts[0]); + operation = Operation.valueOf(settingsParts[1]); + key = stringToBytes(settingsParts[2]); + if (settingsParts.length > 3) { + iv = stringToBytes(settingsParts[3]); + } + } + + public Mode getMode() { + return mode; + } + public Operation getOperation() { + return operation; + } + public byte[] getKey() { + return key; + } + public byte[] getIv() { + return iv; + } + public void addBlock (Block b) { + blocks.add(b); + } + public Iterable getBlocks() { + return blocks; + } + } + + private static final String VECTOR_FILE_NAME = "NIST_800_38A_vectors.txt"; + private static final Mode[] REQUIRED_MODES = {Mode.ECB, Mode.CBC, Mode.CTR}; + private static Set supportedModes = new HashSet(); + + public static void main(String[] args) throws Exception { + checkAllProviders(); + checkSupportedModes(); + } + + private static byte[] stringToBytes(String v) { + if (v.equals("")) { + return null; + } + return DatatypeConverter.parseBase64Binary(v); + } + + private static String toModeString(Mode mode) { + return mode.toString(); + } + + private static int toCipherOperation(Operation op) { + switch (op) { + case Encrypt: + return Cipher.ENCRYPT_MODE; + case Decrypt: + return Cipher.DECRYPT_MODE; + } + + throw new RuntimeException("Unknown operation: " + op); + } + + private static void log(String str) { + System.out.println(str); + } + + private static void checkVector(String providerName, TestVector test) { + + String modeString = toModeString(test.getMode()); + String cipherString = "AES" + "/" + modeString + "/" + "NoPadding"; + log("checking: " + cipherString + " on " + providerName); + try { + Cipher cipher = Cipher.getInstance(cipherString, providerName); + SecretKeySpec key = new SecretKeySpec(test.getKey(), "AES"); + if (test.getIv() != null) { + IvParameterSpec iv = new IvParameterSpec(test.getIv()); + cipher.init(toCipherOperation(test.getOperation()), key, iv); + } + else { + cipher.init(toCipherOperation(test.getOperation()), key); + } + int blockIndex = 0; + for (Block curBlock : test.getBlocks()) { + byte[] blockOutput = cipher.update(curBlock.getInput()); + byte[] expectedBlockOutput = curBlock.getOutput(); + if (!Arrays.equals(blockOutput, expectedBlockOutput)) { + throw new RuntimeException("Blocks do not match at index " + + blockIndex); + } + blockIndex++; + } + log("success"); + supportedModes.add(test.getMode()); + } catch (NoSuchAlgorithmException ex) { + log("algorithm not supported"); + } catch (NoSuchProviderException | NoSuchPaddingException + | InvalidKeyException | InvalidAlgorithmParameterException ex) { + throw new RuntimeException(ex); + } + } + + private static boolean isComment(String line) { + return (line != null) && line.startsWith("//"); + } + + private static TestVector readVector(BufferedReader in) throws IOException { + String line; + while (isComment(line = in.readLine())) { + // skip comment lines + } + if (line == null || line.isEmpty()) { + return null; + } + + TestVector newVector = new TestVector(line); + String numBlocksStr = in.readLine(); + int numBlocks = Integer.parseInt(numBlocksStr); + for (int i = 0; i < numBlocks; i++) { + Block newBlock = new Block(in.readLine()); + newVector.addBlock(newBlock); + } + + return newVector; + } + + private static void checkAllProviders() throws IOException { + File dataFile = new File(System.getProperty("test.src", "."), + VECTOR_FILE_NAME); + BufferedReader in = new BufferedReader(new FileReader(dataFile)); + List allTests = new ArrayList<>(); + TestVector newTest; + while ((newTest = readVector(in)) != null) { + allTests.add(newTest); + } + + for (Provider provider : Security.getProviders()) { + checkProvider(provider.getName(), allTests); + } + } + + private static void checkProvider(String providerName, + List allVectors) + throws IOException { + + for (TestVector curVector : allVectors) { + checkVector(providerName, curVector); + } + } + + /* + * This method helps ensure that the test is working properly by + * verifying that the test was able to check the test vectors for + * some of the modes of operation. + */ + private static void checkSupportedModes() { + for (Mode curMode : REQUIRED_MODES) { + if (!supportedModes.contains(curMode)) { + throw new RuntimeException( + "Mode not supported by any provider: " + curMode); + } + } + + } + +} + diff --git a/jdk/test/javax/crypto/Cipher/ExampleVectors/NIST_800_38A_vectors.txt b/jdk/test/javax/crypto/Cipher/ExampleVectors/NIST_800_38A_vectors.txt new file mode 100644 index 00000000000..aca903e487f --- /dev/null +++ b/jdk/test/javax/crypto/Cipher/ExampleVectors/NIST_800_38A_vectors.txt @@ -0,0 +1,418 @@ +// Example vectors from NIST Special Publication 800-38A +// Recommentation for Block Cipher Modes of Operation +// +// format for each vector entry is as follows: +// mode,encrypt/decrypt,key,initialization vector +// number of blocks +// (for each block) input,output +// All key, IV, input, and output values are encoded in Base64 +// +ECB,Encrypt,K34VFiiu0qar9xWICc9PPA==, +4 +a8G+4i5An5bpPX4Rc5MXKg==,Otd7tA16NmConsrzJGbvlw== +ri2KVx4DrJyet2+sRa+OUQ==,9dPVhQO5aZ3nhYlalv26rw== +MMgcRqNc5BHl+8EZGgpS7w==,Q7HNf1mOziOIGwDj7QMGiA== +9p8kRd9PmxetK0F75mw3EA==,ewx4XiforT+CIyBxBHJd1A== +ECB,Decrypt,K34VFiiu0qar9xWICc9PPA==, +4 +Otd7tA16NmConsrzJGbvlw==,a8G+4i5An5bpPX4Rc5MXKg== +9dPVhQO5aZ3nhYlalv26rw==,ri2KVx4DrJyet2+sRa+OUQ== +Q7HNf1mOziOIGwDj7QMGiA==,MMgcRqNc5BHl+8EZGgpS7w== +ewx4XiforT+CIyBxBHJd1A==,9p8kRd9PmxetK0F75mw3EA== +ECB,Encrypt,jnOw99oOZFLIEPMrgJB55WL46tJSLGt7, +4 +a8G+4i5An5bpPX4Rc5MXKg==,vTNPHW5F8l/3EqIUVx+lzA== +ri2KVx4DrJyet2+sRa+OUQ==,l0EEhG0K0613NOyz7O5O7w== +MMgcRqNc5BHl+8EZGgpS7w==,73r9InDi5grc4LovrOZETg== +9p8kRd9PmxetK0F75mw3EA==,mktBunONbHL7FmkWA8GODg== +ECB,Decrypt,jnOw99oOZFLIEPMrgJB55WL46tJSLGt7, +4 +vTNPHW5F8l/3EqIUVx+lzA==,a8G+4i5An5bpPX4Rc5MXKg== +l0EEhG0K0613NOyz7O5O7w==,ri2KVx4DrJyet2+sRa+OUQ== +73r9InDi5grc4LovrOZETg==,MMgcRqNc5BHl+8EZGgpS7w== +mktBunONbHL7FmkWA8GODg==,9p8kRd9PmxetK0F75mw3EA== +ECB,Encrypt,YD3rEBXKcb4rc67whX13gR81LAc7YQjXLZgQowkU3/Q=, +4 +a8G+4i5An5bpPX4Rc5MXKg==,8+7RvbXSoDwGS1p+PbGB+A== +ri2KVx4DrJyet2+sRa+OUQ==,WRzLENQQ7SbcW6dKMTYocA== +MMgcRqNc5BHl+8EZGgpS7w==,tu0huZym9PnxU+exvq/tHQ== +9p8kRd9PmxetK0F75mw3EA==,IzBLejn58/8GfY2PniTsxw== +ECB,Decrypt,YD3rEBXKcb4rc67whX13gR81LAc7YQjXLZgQowkU3/Q=, +4 +8+7RvbXSoDwGS1p+PbGB+A==,a8G+4i5An5bpPX4Rc5MXKg== +WRzLENQQ7SbcW6dKMTYocA==,ri2KVx4DrJyet2+sRa+OUQ== +tu0huZym9PnxU+exvq/tHQ==,MMgcRqNc5BHl+8EZGgpS7w== +IzBLejn58/8GfY2PniTsxw==,9p8kRd9PmxetK0F75mw3EA== +CBC,Encrypt,K34VFiiu0qar9xWICc9PPA==,AAECAwQFBgcICQoLDA0ODw== +4 +a8G+4i5An5bpPX4Rc5MXKg==,dkmrrIEZskbO6Y6bEukZfQ== +ri2KVx4DrJyet2+sRa+OUQ==,UIbLm1ByGe6V2xE6kXZ4sg== +MMgcRqNc5BHl+8EZGgpS7w==,c77WuOPBdDtxFuaeIiKVFg== +9p8kRd9PmxetK0F75mw3EA==,P/HKoWgfrAkSDsowdYbhpw== +CBC,Decrypt,K34VFiiu0qar9xWICc9PPA==,AAECAwQFBgcICQoLDA0ODw== +4 +dkmrrIEZskbO6Y6bEukZfQ==,a8G+4i5An5bpPX4Rc5MXKg== +UIbLm1ByGe6V2xE6kXZ4sg==,ri2KVx4DrJyet2+sRa+OUQ== +c77WuOPBdDtxFuaeIiKVFg==,MMgcRqNc5BHl+8EZGgpS7w== +P/HKoWgfrAkSDsowdYbhpw==,9p8kRd9PmxetK0F75mw3EA== +CBC,Encrypt,jnOw99oOZFLIEPMrgJB55WL46tJSLGt7,AAECAwQFBgcICQoLDA0ODw== +4 +a8G+4i5An5bpPX4Rc5MXKg==,TwIdskO8Yz1xeBg6n6Bx6A== +ri2KVx4DrJyet2+sRa+OUQ==,tNmtqa197fTl5zh2P2kUWg== +MMgcRqNc5BHl+8EZGgpS7w==,VxskIBL7euB/qbqsPfEC4A== +9p8kRd9PmxetK0F75mw3EA==,CLDieYhZiIHZIKnmT1YVzQ== +CBC,Decrypt,jnOw99oOZFLIEPMrgJB55WL46tJSLGt7,AAECAwQFBgcICQoLDA0ODw== +4 +TwIdskO8Yz1xeBg6n6Bx6A==,a8G+4i5An5bpPX4Rc5MXKg== +tNmtqa197fTl5zh2P2kUWg==,ri2KVx4DrJyet2+sRa+OUQ== +VxskIBL7euB/qbqsPfEC4A==,MMgcRqNc5BHl+8EZGgpS7w== +CLDieYhZiIHZIKnmT1YVzQ==,9p8kRd9PmxetK0F75mw3EA== +CBC,Encrypt,YD3rEBXKcb4rc67whX13gR81LAc7YQjXLZgQowkU3/Q=,AAECAwQFBgcICQoLDA0ODw== +4 +a8G+4i5An5bpPX4Rc5MXKg==,9YxMBNbl8bp3nqv7X3v71g== +ri2KVx4DrJyet2+sRa+OUQ==,nPxOln7bgI1nn3d7xnAsfQ== +MMgcRqNc5BHl+8EZGgpS7w==,OfIzaanZus+lMOJjBCMUYQ== +9p8kRd9PmxetK0F75mw3EA==,susF4sOb6fzabBkHjGqdGw== +CBC,Decrypt,YD3rEBXKcb4rc67whX13gR81LAc7YQjXLZgQowkU3/Q=,AAECAwQFBgcICQoLDA0ODw== +4 +9YxMBNbl8bp3nqv7X3v71g==,a8G+4i5An5bpPX4Rc5MXKg== +nPxOln7bgI1nn3d7xnAsfQ==,ri2KVx4DrJyet2+sRa+OUQ== +OfIzaanZus+lMOJjBCMUYQ==,MMgcRqNc5BHl+8EZGgpS7w== +susF4sOb6fzabBkHjGqdGw==,9p8kRd9PmxetK0F75mw3EA== +CFB1,Encrypt,K34VFiiu0qar9xWICc9PPA==,AAECAwQFBgcICQoLDA0ODw== +16 +AA==,AA== +AQ==,AQ== +AQ==,AQ== +AA==,AA== +AQ==,AQ== +AA==,AA== +AQ==,AQ== +AQ==,AA== +AQ==,AQ== +AQ==,AA== +AA==,AQ== +AA==,AQ== +AA==,AA== +AA==,AA== +AA==,AQ== +AQ==,AQ== +CFB1,Decrypt,K34VFiiu0qar9xWICc9PPA==,AAECAwQFBgcICQoLDA0ODw== +16 +AA==,AA== +AQ==,AQ== +AQ==,AQ== +AA==,AA== +AQ==,AQ== +AA==,AA== +AA==,AQ== +AA==,AQ== +AQ==,AQ== +AA==,AQ== +AQ==,AA== +AQ==,AA== +AA==,AA== +AA==,AA== +AQ==,AA== +AQ==,AQ== +CFB1,Encrypt,jnOw99oOZFLIEPMrgJB55WL46tJSLGt7,AAECAwQFBgcICQoLDA0ODw== +16 +AA==,AQ== +AQ==,AA== +AQ==,AA== +AA==,AQ== +AQ==,AA== +AA==,AA== +AQ==,AQ== +AQ==,AQ== +AQ==,AA== +AQ==,AQ== +AA==,AA== +AA==,AQ== +AA==,AQ== +AA==,AA== +AA==,AA== +AQ==,AQ== +CFB1,Decrypt,jnOw99oOZFLIEPMrgJB55WL46tJSLGt7,AAECAwQFBgcICQoLDA0ODw== +16 +AQ==,AA== +AA==,AQ== +AA==,AQ== +AQ==,AA== +AA==,AQ== +AA==,AA== +AQ==,AQ== +AQ==,AQ== +AA==,AQ== +AQ==,AQ== +AA==,AA== +AQ==,AA== +AQ==,AA== +AA==,AA== +AA==,AA== +AQ==,AQ== +CFB1,Encrypt,YD3rEBXKcb4rc67whX13gR81LAc7YQjXLZgQowkU3/Q=,AAECAwQFBgcICQoLDA0ODw== +16 +AA==,AQ== +AQ==,AA== +AQ==,AA== +AA==,AQ== +AQ==,AA== +AA==,AA== +AQ==,AA== +AQ==,AA== +AQ==,AA== +AQ==,AA== +AA==,AQ== +AA==,AA== +AA==,AQ== +AA==,AA== +AA==,AA== +AQ==,AQ== +CFB1,Decrypt,YD3rEBXKcb4rc67whX13gR81LAc7YQjXLZgQowkU3/Q=,AAECAwQFBgcICQoLDA0ODw== +16 +AQ==,AA== +AA==,AQ== +AA==,AQ== +AQ==,AA== +AA==,AQ== +AA==,AA== +AA==,AQ== +AA==,AQ== +AA==,AQ== +AA==,AQ== +AQ==,AA== +AA==,AA== +AQ==,AA== +AA==,AA== +AA==,AA== +AQ==,AQ== +CFB8,Encrypt,K34VFiiu0qar9xWICc9PPA==,AAECAwQFBgcICQoLDA0ODw== +18 +aw==,Ow== +wQ==,eQ== +vg==,Qg== +4g==,TA== +Lg==,nA== +QA==,DQ== +nw==,1A== +lg==,Ng== +6Q==,ug== +PQ==,zg== +fg==,ng== +EQ==,Dg== +cw==,1A== +kw==,WA== +Fw==,ag== +Kg==,Tw== +rg==,Mg== +LQ==,uQ== +CFB8,Decrypt,K34VFiiu0qar9xWICc9PPA==,AAECAwQFBgcICQoLDA0ODw== +18 +Ow==,aw== +eQ==,wQ== +Qg==,vg== +TA==,4g== +nA==,Lg== +DQ==,QA== +1A==,nw== +Ng==,lg== +ug==,6Q== +zg==,PQ== +ng==,fg== +Dg==,EQ== +1A==,cw== +WA==,kw== +ag==,Fw== +Tw==,Kg== +Mg==,rg== +uQ==,LQ== +CFB8,Encrypt,jnOw99oOZFLIEPMrgJB55WL46tJSLGt7,AAECAwQFBgcICQoLDA0ODw== +18 +aw==,zQ== +wQ==,og== +vg==,Ug== +4g==,Hg== +Lg==,8A== +QA==,qQ== +nw==,BQ== +lg==,yg== +6Q==,RA== +PQ==,zQ== +fg==,BQ== +EQ==,fA== +cw==,vw== +kw==,DQ== +Fw==,Rw== +Kg==,oA== +rg==,Zw== +LQ==,ig== +CFB8,Decrypt,jnOw99oOZFLIEPMrgJB55WL46tJSLGt7,AAECAwQFBgcICQoLDA0ODw== +18 +zQ==,aw== +og==,wQ== +Ug==,vg== +Hg==,4g== +8A==,Lg== +qQ==,QA== +BQ==,nw== +yg==,lg== +RA==,6Q== +zQ==,PQ== +BQ==,fg== +fA==,EQ== +vw==,cw== +DQ==,kw== +Rw==,Fw== +oA==,Kg== +Zw==,rg== +ig==,LQ== +CFB8,Encrypt,YD3rEBXKcb4rc67whX13gR81LAc7YQjXLZgQowkU3/Q=,AAECAwQFBgcICQoLDA0ODw== +18 +aw==,3A== +wQ==,Hw== +vg==,Gg== +4g==,hQ== +Lg==,IA== +QA==,pg== +nw==,TQ== +lg==,tQ== +6Q==,Xw== +PQ==,zA== +fg==,ig== +EQ==,xQ== +cw==,VA== +kw==,hA== +Fw==,Tg== +Kg==,iA== +rg==,lw== +LQ==,AA== +CFB8,Decrypt,YD3rEBXKcb4rc67whX13gR81LAc7YQjXLZgQowkU3/Q=,AAECAwQFBgcICQoLDA0ODw== +18 +3A==,aw== +Hw==,wQ== +Gg==,vg== +hQ==,4g== +IA==,Lg== +pg==,QA== +TQ==,nw== +tQ==,lg== +Xw==,6Q== +zA==,PQ== +ig==,fg== +xQ==,EQ== +VA==,cw== +hA==,kw== +Tg==,Fw== +iA==,Kg== +lw==,rg== +AA==,LQ== +CFB128,Encrypt,K34VFiiu0qar9xWICc9PPA==,AAECAwQFBgcICQoLDA0ODw== +4 +a8G+4i5An5bpPX4Rc5MXKg==,Oz/ZLrctrSAzNEn46Dz7Sg== +ri2KVx4DrJyet2+sRa+OUQ==,yKZFN6CzqT/N482tnxzliw== +MMgcRqNc5BHl+8EZGgpS7w==,JnUfZ6PLsUCxgIzxh6T03w== +9p8kRd9PmxetK0F75mw3EA==,wEsFNXxdHA7qxMZvn/fy5g== +CFB128,Decrypt,K34VFiiu0qar9xWICc9PPA==,AAECAwQFBgcICQoLDA0ODw== +4 +Oz/ZLrctrSAzNEn46Dz7Sg==,a8G+4i5An5bpPX4Rc5MXKg== +yKZFN6CzqT/N482tnxzliw==,ri2KVx4DrJyet2+sRa+OUQ== +JnUfZ6PLsUCxgIzxh6T03w==,MMgcRqNc5BHl+8EZGgpS7w== +wEsFNXxdHA7qxMZvn/fy5g==,9p8kRd9PmxetK0F75mw3EA== +CFB128,Encrypt,jnOw99oOZFLIEPMrgJB55WL46tJSLGt7,AAECAwQFBgcICQoLDA0ODw== +4 +a8G+4i5An5bpPX4Rc5MXKg==,zcgNb93xjKs0wlkJyZpBdA== +ri2KVx4DrJyet2+sRa+OUQ==,Z85/f4EXNiGWGitwFx09eg== +MMgcRqNc5BHl+8EZGgpS7w==,Lh6KHdWbiLHI5g/tHvrEyQ== +9p8kRd9PmxetK0F75mw3EA==,wF+fnKmDT6BCro+6WEsJ/w== +CFB128,Decrypt,jnOw99oOZFLIEPMrgJB55WL46tJSLGt7,AAECAwQFBgcICQoLDA0ODw== +4 +zcgNb93xjKs0wlkJyZpBdA==,a8G+4i5An5bpPX4Rc5MXKg== +Z85/f4EXNiGWGitwFx09eg==,ri2KVx4DrJyet2+sRa+OUQ== +Lh6KHdWbiLHI5g/tHvrEyQ==,MMgcRqNc5BHl+8EZGgpS7w== +wF+fnKmDT6BCro+6WEsJ/w==,9p8kRd9PmxetK0F75mw3EA== +CFB128,Encrypt,YD3rEBXKcb4rc67whX13gR81LAc7YQjXLZgQowkU3/Q=,AAECAwQFBgcICQoLDA0ODw== +4 +a8G+4i5An5bpPX4Rc5MXKg==,3H6Ev9p5Fkt+zYSGmF04YA== +ri2KVx4DrJyet2+sRa+OUQ==,Of/tFDsoscgyETxjMeVAew== +MMgcRqNc5BHl+8EZGgpS7w==,3xATJBXlS5KhPtCoJnri+Q== +9p8kRd9PmxetK0F75mw3EA==,daOFdBq5zvggMWI9VbHkcQ== +CFB128,Decrypt,YD3rEBXKcb4rc67whX13gR81LAc7YQjXLZgQowkU3/Q=,AAECAwQFBgcICQoLDA0ODw== +4 +3H6Ev9p5Fkt+zYSGmF04YA==,a8G+4i5An5bpPX4Rc5MXKg== +Of/tFDsoscgyETxjMeVAew==,ri2KVx4DrJyet2+sRa+OUQ== +3xATJBXlS5KhPtCoJnri+Q==,MMgcRqNc5BHl+8EZGgpS7w== +daOFdBq5zvggMWI9VbHkcQ==,9p8kRd9PmxetK0F75mw3EA== +OFB,Encrypt,K34VFiiu0qar9xWICc9PPA==,AAECAwQFBgcICQoLDA0ODw== +4 +a8G+4i5An5bpPX4Rc5MXKg==,Oz/ZLrctrSAzNEn46Dz7Sg== +ri2KVx4DrJyet2+sRa+OUQ==,d4lQjRaRjwP1PFLaxU7YJQ== +MMgcRqNc5BHl+8EZGgpS7w==,l0AFHpxf7PZDRPeoImDtzA== +9p8kRd9PmxetK0F75mw3EA==,MExlKPZZx3hmpRDZwdauXg== +OFB,Decrypt,K34VFiiu0qar9xWICc9PPA==,AAECAwQFBgcICQoLDA0ODw== +4 +Oz/ZLrctrSAzNEn46Dz7Sg==,a8G+4i5An5bpPX4Rc5MXKg== +d4lQjRaRjwP1PFLaxU7YJQ==,ri2KVx4DrJyet2+sRa+OUQ== +l0AFHpxf7PZDRPeoImDtzA==,MMgcRqNc5BHl+8EZGgpS7w== +MExlKPZZx3hmpRDZwdauXg==,9p8kRd9PmxetK0F75mw3EA== +OFB,Encrypt,jnOw99oOZFLIEPMrgJB55WL46tJSLGt7,AAECAwQFBgcICQoLDA0ODw== +4 +a8G+4i5An5bpPX4Rc5MXKg==,zcgNb93xjKs0wlkJyZpBdA== +ri2KVx4DrJyet2+sRa+OUQ==,/MKLjUxjg3wJ6BcAwRAEAQ== +MMgcRqNc5BHl+8EZGgpS7w==,jZqa6sD2WW9VnG1Nr1ml8g== +9p8kRd9PmxetK0F75mw3EA==,bZ8gCFfKbD6crFJL2azJKg== +OFB,Decrypt,jnOw99oOZFLIEPMrgJB55WL46tJSLGt7,AAECAwQFBgcICQoLDA0ODw== +4 +zcgNb93xjKs0wlkJyZpBdA==,a8G+4i5An5bpPX4Rc5MXKg== +/MKLjUxjg3wJ6BcAwRAEAQ==,ri2KVx4DrJyet2+sRa+OUQ== +jZqa6sD2WW9VnG1Nr1ml8g==,MMgcRqNc5BHl+8EZGgpS7w== +bZ8gCFfKbD6crFJL2azJKg==,9p8kRd9PmxetK0F75mw3EA== +OFB,Encrypt,YD3rEBXKcb4rc67whX13gR81LAc7YQjXLZgQowkU3/Q=,AAECAwQFBgcICQoLDA0ODw== +4 +a8G+4i5An5bpPX4Rc5MXKg==,3H6Ev9p5Fkt+zYSGmF04YA== +ri2KVx4DrJyet2+sRa+OUQ==,T+vcZ0DSCzrIj2rYKk+wjQ== +MMgcRqNc5BHl+8EZGgpS7w==,catHoIbobu3znRxbupfECA== +9p8kRd9PmxetK0F75mw3EA==,ASYUHWfze+hTj1qL50DkhA== +OFB,Decrypt,YD3rEBXKcb4rc67whX13gR81LAc7YQjXLZgQowkU3/Q=,AAECAwQFBgcICQoLDA0ODw== +4 +3H6Ev9p5Fkt+zYSGmF04YA==,a8G+4i5An5bpPX4Rc5MXKg== +T+vcZ0DSCzrIj2rYKk+wjQ==,ri2KVx4DrJyet2+sRa+OUQ== +catHoIbobu3znRxbupfECA==,MMgcRqNc5BHl+8EZGgpS7w== +ASYUHWfze+hTj1qL50DkhA==,9p8kRd9PmxetK0F75mw3EA== +CTR,Encrypt,K34VFiiu0qar9xWICc9PPA==,8PHy8/T19vf4+fr7/P3+/w== +4 +a8G+4i5An5bpPX4Rc5MXKg==,h01hkbYg4yYb72hkmQ22zg== +ri2KVx4DrJyet2+sRa+OUQ==,mAb2a3lw/f+GFxh7uf/9/w== +MMgcRqNc5BHl+8EZGgpS7w==,WuTfPtvV015bTwkCDbA+qw== +9p8kRd9PmxetK0F75mw3EA==,HgMd2i++A9F5IXCg8wCc7g== +CTR,Decrypt,K34VFiiu0qar9xWICc9PPA==,8PHy8/T19vf4+fr7/P3+/w== +4 +h01hkbYg4yYb72hkmQ22zg==,a8G+4i5An5bpPX4Rc5MXKg== +mAb2a3lw/f+GFxh7uf/9/w==,ri2KVx4DrJyet2+sRa+OUQ== +WuTfPtvV015bTwkCDbA+qw==,MMgcRqNc5BHl+8EZGgpS7w== +HgMd2i++A9F5IXCg8wCc7g==,9p8kRd9PmxetK0F75mw3EA== +CTR,Encrypt,jnOw99oOZFLIEPMrgJB55WL46tJSLGt7,8PHy8/T19vf4+fr7/P3+/w== +4 +a8G+4i5An5bpPX4Rc5MXKg==,GryTJBdSHKJPKwRZ/n5uCw== +ri2KVx4DrJyet2+sRa+OUQ==,CQM57Aqm+u/VzMLG9M6OlA== +MMgcRqNc5BHl+8EZGgpS7w==,Hjaya9HrxnDRvR1mViCr9w== +9p8kRd9PmxetK0F75mw3EA==,T3in9tKYCVhal9rsWMawUA== +CTR,Decrypt,jnOw99oOZFLIEPMrgJB55WL46tJSLGt7,8PHy8/T19vf4+fr7/P3+/w== +4 +GryTJBdSHKJPKwRZ/n5uCw==,a8G+4i5An5bpPX4Rc5MXKg== +CQM57Aqm+u/VzMLG9M6OlA==,ri2KVx4DrJyet2+sRa+OUQ== +Hjaya9HrxnDRvR1mViCr9w==,MMgcRqNc5BHl+8EZGgpS7w== +T3in9tKYCVhal9rsWMawUA==,9p8kRd9PmxetK0F75mw3EA== +CTR,Encrypt,YD3rEBXKcb4rc67whX13gR81LAc7YQjXLZgQowkU3/Q=,8PHy8/T19vf4+fr7/P3+/w== +4 +a8G+4i5An5bpPX4Rc5MXKg==,YB7DE3dXiaW3p/UEu/PSKA== +ri2KVx4DrJyet2+sRa+OUQ==,9EPjyk1itZrKhOmQysr1xQ== +MMgcRqNc5BHl+8EZGgpS7w==,Kwkw2qI96UzocBe6LYSYjQ== +9p8kRd9PmxetK0F75mw3EA==,38nFjbZ6raYTwt0IRXlBpg== +CTR,Decrypt,YD3rEBXKcb4rc67whX13gR81LAc7YQjXLZgQowkU3/Q=,8PHy8/T19vf4+fr7/P3+/w== +4 +YB7DE3dXiaW3p/UEu/PSKA==,a8G+4i5An5bpPX4Rc5MXKg== +9EPjyk1itZrKhOmQysr1xQ==,ri2KVx4DrJyet2+sRa+OUQ== +Kwkw2qI96UzocBe6LYSYjQ==,MMgcRqNc5BHl+8EZGgpS7w== +38nFjbZ6raYTwt0IRXlBpg==,9p8kRd9PmxetK0F75mw3EA== +