créer le chachaengine dans la méthode crypt

This commit is contained in:
odrling 2018-01-10 15:35:42 +01:00
parent 3508a71fb0
commit 2d030cdac1

View file

@ -5,7 +5,6 @@ import org.bouncycastle.crypto.params.KeyParameter
import org.bouncycastle.crypto.params.ParametersWithIV
import java.io.ByteArrayInputStream
import java.io.ByteArrayOutputStream
import java.util.concurrent.locks.ReentrantLock
/**
* Classe permettant de chiffrer et déchiffrer les messages de l'application selon l'algorithme ChaCha20.
@ -26,7 +25,6 @@ class ChaCha constructor(val key: ByteArray) {
* Taille du vecteur d'initialisation en octets
*/
private val IV_SIZE = 8
/**
* Taille des buffers utilisés pendant le chiffrement et le déchiffrement en octets
*/
@ -56,21 +54,11 @@ class ChaCha constructor(val key: ByteArray) {
}
/**
* Instance de la classe effectuant le chiffrement
*/
private val engine = ChaChaEngine()
/**
* La clé de chiffrement
*/
private val keyParameter = KeyParameter(key)
/**
* Verrou empêchant l'utilisation des utilisations concurrentes de la méthode crypt pour une
* instance de ChaCha donnée
*/
private val cryptLock = ReentrantLock()
/**
* Si le encrypt est Vrai alors le message text est chiffré
* sinon le message text est déchiffré
@ -80,51 +68,44 @@ class ChaCha constructor(val key: ByteArray) {
* @return Le message chiffré ou déchiffré en fonction de la valeur de encrypt
*/
private fun crypt(encrypt: Boolean, text: ByteArray): ByteArray {
this.cryptLock.lock()
val input = ByteArrayInputStream(text)
val output = ByteArrayOutputStream()
try {
val input = ByteArrayInputStream(text)
val output = ByteArrayOutputStream()
val inputBuffer = ByteArray(BUFFER_SIZE)
val outputBuffer = ByteArray(BUFFER_SIZE)
val inputBuffer = ByteArray(BUFFER_SIZE)
val outputBuffer = ByteArray(BUFFER_SIZE)
// instanciation du vecteur d'initialisation
val params: ParametersWithIV
if (encrypt) {
// génèrer le vecteur d'initialisation si le message doit être chiffré
val iv = generateIV()
output.write(iv)
params = ParametersWithIV(keyParameter, iv)
} else {
// lire le vecteur d'initialisation lors du déchiffrement du message
val iv = ByteArray(8)
input.read(iv)
params = ParametersWithIV(keyParameter, iv)
}
// chiffrement/déchiffrement du message
val engine = this.engine
engine.init(encrypt, params)
// lecture de la première partie du message
var len = input.read(inputBuffer)
while (len != -1) {
// chiffrement/déchiffrement de la partie du message
engine.processBytes(inputBuffer, 0, len, outputBuffer, 0)
// écrire le texte chiffré/déchiffré dans le stream de sortie
output.write(outputBuffer, 0, len)
// lecture de la prochaine partie du message
len = input.read(inputBuffer)
}
// retourner le message chiffré/déchiffré sous forme d'octets
return output.toByteArray()
} finally {
// relacher le verrou
this.cryptLock.unlock()
// instanciation du vecteur d'initialisation
val params: ParametersWithIV
if (encrypt) {
// génèrer le vecteur d'initialisation si le message doit être chiffré
val iv = generateIV()
output.write(iv)
params = ParametersWithIV(keyParameter, iv)
} else {
// lire le vecteur d'initialisation lors du déchiffrement du message
val iv = ByteArray(8)
input.read(iv)
params = ParametersWithIV(keyParameter, iv)
}
// chiffrement/déchiffrement du message
val engine = ChaChaEngine()
engine.init(encrypt, params)
// lecture de la première partie du message
var len = input.read(inputBuffer)
while (len != -1) {
// chiffrement/déchiffrement de la partie du message
engine.processBytes(inputBuffer, 0, len, outputBuffer, 0)
// écrire le texte chiffré/déchiffré dans le stream de sortie
output.write(outputBuffer, 0, len)
// lecture de la prochaine partie du message
len = input.read(inputBuffer)
}
// retourner le message chiffré/déchiffré sous forme d'octets
return output.toByteArray()
}
/**