8006259: Add Test Vectors for NIST 800-38A to the JCE Unit Tests

Added AES Cipher test vectors from Appendix F of NIST 800-38A

Reviewed-by: valeriep
This commit is contained in:
Adam Petcher 2017-02-28 02:31:59 +00:00
parent 4e1bc5c2a9
commit d2960c732a
2 changed files with 666 additions and 0 deletions

View File

@ -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<Block> blocks = new ArrayList<Block>();
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<Block> 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<Mode> supportedModes = new HashSet<Mode>();
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<TestVector> 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<TestVector> 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);
}
}
}
}

View File

@ -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==