package ixee.cryptopals.utils import ixee.cryptopals.utils.crypto._ import javax.crypto.Cipher import javax.crypto.spec.SecretKeySpec object CryptoUtils { def pkcs7pad(s: Seq[Byte], blockSize: Int): Seq[Byte] = { val padLength = blockSize - (s.length % blockSize) s ++ Stream.continually(padLength.toByte).take(padLength) } def cbcDecryptInstance(cipherPrim: String, key: Seq[Byte], iv: Seq[Byte]): CBCDecrypter = { val keySpec = new SecretKeySpec(key.toArray, cipherPrim) val cipher = Cipher.getInstance(s"$cipherPrim/ECB/NoPadding") cipher.init(Cipher.DECRYPT_MODE, keySpec) new CBCDecrypter(cipher, iv) } def cbcEncryptInstance(cipherPrim: String, key: Seq[Byte], iv: Seq[Byte]): CBCEncrypter = { val keySpec = new SecretKeySpec(key.toArray, cipherPrim) val cipher = Cipher.getInstance(s"$cipherPrim/ECB/NoPadding") cipher.init(Cipher.ENCRYPT_MODE, keySpec) new CBCEncrypter(cipher, iv) } }