tu.crossing.JavaCryptographicArchitecture.3.1.2.source-code.Cipher.crysl Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of JavaCryptographicArchitecture
Show all versions of JavaCryptographicArchitecture
JavaCryptographicArchitecture CrySL ruleset
The newest version!
SPEC javax.crypto.Cipher
OBJECTS
java.lang.String transformation;
int encmode;
java.security.Key key;
java.security.cert.Certificate certificate;
java.security.spec.AlgorithmParameterSpec paramSpec;
java.security.AlgorithmParameters params;
int prePlainTextOffset;
int preCipherTextOffset;
int plainTextOffset;
int cipherTextOffset;
int aadOffset;
int prePlainTextLen;
int plainTextLen;
int aadLen;
byte[] prePlainText;
byte[] preCipherText;
java.nio.ByteBuffer prePlainTextByteBuffer;
java.nio.ByteBuffer preCipherTextByteBuffer;
byte[] plainText;
byte[] cipherText;
byte[] wrappedKeyBytes;
java.nio.ByteBuffer plainTextByteBuffer;
java.nio.ByteBuffer cipherTextByteBuffer;
byte[] aadBytes;
java.nio.ByteBuffer aadByteBuffer;
java.security.SecureRandom random;
java.security.Key wrappedKey;
EVENTS
g1: getInstance(transformation);
g2: getInstance(transformation, _);
Get := g1 | g2;
i1: init(encmode, certificate);
i2: init(encmode, certificate, random);
i3: init(encmode, key);
i4: init(encmode, key, paramSpec);
i5: init(encmode, key, params);
i6: init(encmode, key, paramSpec, random);
i7: init(encmode, key, params, random);
i8: init(encmode, key, random);
IWOIV := i1 | i2 | i3 | i8;
IWIV := i4 | i5 | i6 | i7;
Init := IWOIV | IWIV;
u1: preCipherText = update(prePlainText);
u2: preCipherText = update(prePlainText, prePlainTextOffset, prePlainTextLen);
u3: update(prePlainText, prePlainTextOffset, prePlainTextLen, preCipherText);
u4: update(prePlainText, prePlainTextOffset, prePlainTextLen, preCipherText, preCipherTextOffset);
u5: update(prePlainTextByteBuffer, preCipherTextByteBuffer);
Update := u1 | u2 | u3 | u4 | u5;
ua1: updateAAD(aadBytes);
ua2: updateAAD(aadBytes, aadOffset, aadLen);
ua3: updateAAD(aadByteBuffer);
AADUpdate := ua1 | ua2 | ua3;
f1: cipherText = doFinal();
f2: cipherText = doFinal(plainText);
f3: doFinal(cipherText, cipherTextOffset);
f4: cipherText = doFinal(plainText, plainTextOffset, plainTextLen);
f5: doFinal(plainText, plainTextOffset, plainTextLen, cipherText);
f6: doFinal(plainText, plainTextOffset, plainTextLen, cipherText, cipherTextOffset);
f7: doFinal(plainTextByteBuffer, cipherTextByteBuffer);
FINWOU := f2 | f4 | f5 | f6 | f7;
DoFinal := FINWOU | f1 | f3;
wkb1: wrappedKeyBytes = wrap(wrappedKey);
WKB := wkb1;
iv1: getIV();
IV := iv1;
ORDER
Get, Init+, AADUpdate*, WKB+ | (FINWOU | (Update+, DoFinal))+
CONSTRAINTS
instanceOf[key, java.security.PublicKey] || instanceOf[key, java.security.PrivateKey] || instanceOf[certificate, java.security.cert.Certificate] ||
encmode in {3, 4} => alg(transformation) in {"RSA"};
instanceOf[key, javax.crypto.SecretKey] => alg(transformation) in {"AES", "PBEWithHmacSHA224AndAES_128", "PBEWithHmacSHA256AndAES_128",
"PBEWithHmacSHA384AndAES_128", "PBEWithHmacSHA512AndAES_128",
"PBEWithHmacSHA224AndAES_256", "PBEWithHmacSHA256AndAES_256",
"PBEWithHmacSHA384AndAES_256", "PBEWithHmacSHA512AndAES_256"};
noCallTo[Init] => alg(transformation) in {"AES", "RSA", "PBEWithHmacSHA224AndAES_128", "PBEWithHmacSHA256AndAES_128",
"PBEWithHmacSHA384AndAES_128", "PBEWithHmacSHA512AndAES_128", "PBEWithHmacSHA224AndAES_256",
"PBEWithHmacSHA256AndAES_256", "PBEWithHmacSHA384AndAES_256", "PBEWithHmacSHA512AndAES_256"};
alg(transformation) in {"AES"} => mode(transformation) in { "GCM", "CTR", "CTS", "CFB", "OFB"};
alg(transformation) in {"RSA"} => mode(transformation) in {"", "ECB"};
alg(transformation) in {"PBEWithHmacSHA224AndAES_128", "PBEWithHmacSHA256AndAES_128", "PBEWithHmacSHA384AndAES_128",
"PBEWithHmacSHA512AndAES_128", "PBEWithHmacSHA224AndAES_256", "PBEWithHmacSHA256AndAES_256",
"PBEWithHmacSHA384AndAES_256", "PBEWithHmacSHA512AndAES_256"} => pad(transformation) in {"PKCS5Padding"};
alg(transformation) in {"RSA"} && mode(transformation) in {""} => pad(transformation) in {""};
alg(transformation) in {"RSA"} && mode(transformation) in {"ECB"} => pad(transformation) in {"NoPadding", "PKCS1Padding",
"OAEPWithMD5AndMGF1Padding", "OAEPWithSHA-224AndMGF1Padding",
"OAEPWithSHA-256AndMGF1Padding", "OAEPWithSHA-384AndMGF1Padding",
"OAEPWithSHA-512AndMGF1Padding"};
alg(transformation) in {"AES"} && mode(transformation) in {"GCM", "CTR", "CTS", "CFB", "OFB"} => pad(transformation) in {"NoPadding"};
mode(transformation) in {"CTR", "CTS", "CFB", "OFB"} && encmode != 1 => noCallTo[IWOIV];
mode(transformation) in {"CTR", "CTS", "CFB", "OFB"} && encmode == 1 => callTo[IV];
mode(transformation) in {"CTR", "CTS", "CFB", "ECB", "OFB"} => noCallTo[AADUpdate];
encmode in {1,2,3,4};
length[prePlainText] >= prePlainTextOffset + prePlainTextLen;
length[preCipherText] >= preCipherTextOffset;
prePlainTextOffset >= 0;
prePlainTextLen > 0;
preCipherTextOffset >= 0;
length[plainText] >= plainTextOffset + plainTextLen;
length[cipherText] >= cipherTextOffset;
plainTextOffset >= 0;
plainTextLen > 0;
cipherTextOffset >= 0;
REQUIRES
generatedKey[key, alg(transformation)] || generatedPubkey[key] || generatedPrivkey[key];
randomized[random];
preparedAlg[params, alg(transformation)];
!macced[this, plainText];
mode(transformation) in {"CTR", "CTS", "CFB", "OFB"} && encmode == 1 => preparedIV[paramSpec];
mode(transformation) in {"GCM"} => preparedGCM[paramSpec];
mode(transformation) in {"OAEPWithMD5AndMGF1Padding", "OAEPWithSHA-224AndMGF1Padding", "OAEPWithSHA-256AndMGF1Padding",
"OAEPWithSHA-384AndMGF1Padding", "OAEPWithSHA-512AndMGF1Padding"} => preparedOAEP[paramSpec];
ENSURES
generatedCipher[this] after Init;
encrypted[preCipherText, prePlainText] after Update;
encrypted[cipherText, plainText];
encrypted[cipherTextByteBuffer, plainTextByteBuffer];
wrappedKey[wrappedKeyBytes, wrappedKey];