Merge pull request #8 from cybertier/fix-empty-iv

fix empty iv
pull/5/head
Felix PK 2019-07-16 14:01:45 +02:00 committed by GitHub
commit 25762d6a49
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 24 additions and 10 deletions

View File

@ -2,16 +2,26 @@ package lu.circl.mispbump.security;
import android.util.Base64;
import javax.crypto.*;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.*;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.PublicKey;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.X509EncodedKeySpec;
import java.util.Arrays;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyAgreement;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
/**
* This class provides the functionality generate a shared secret key.
* Furthermore it contains the encryption/decryption methods.
@ -39,10 +49,11 @@ public class DiffieHellman {
/**
* Singleton pattern
*
* @return {@link DiffieHellman}
*/
public static DiffieHellman getInstance() {
if(instance == null) {
if (instance == null) {
instance = new DiffieHellman();
}
@ -71,6 +82,7 @@ public class DiffieHellman {
/**
* Encrypts data.
*
* @param data data to encrypt
* @return To String converted and encrypted data
*/
@ -82,16 +94,16 @@ public class DiffieHellman {
byte[] cipherText = c.doFinal(data.getBytes(StandardCharsets.UTF_8));
return Base64.encodeToString(cipherText, Base64.NO_WRAP);
} catch (BadPaddingException | InvalidKeyException | NoSuchPaddingException | IllegalBlockSizeException | NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (InvalidAlgorithmParameterException e) {
} catch (BadPaddingException | InvalidKeyException | NoSuchPaddingException | IllegalBlockSizeException | NoSuchAlgorithmException | InvalidAlgorithmParameterException e) {
e.printStackTrace();
}
return data;
}
/**
* Decrypts data with the current shared secret.
*
* @param data data to decrypt
* @return To String converted and decrypted data
*/
@ -113,6 +125,7 @@ public class DiffieHellman {
/**
* Generates a shared secret and derives an initialisation vector from it.
*
* @param pk public key of the sync partner
*/
public void setForeignPublicKey(PublicKey pk) {
@ -122,8 +135,9 @@ public class DiffieHellman {
byte[] tmpSharedSecret = keyAgreement.generateSecret();
sharedSecret = Arrays.copyOfRange(tmpSharedSecret, 0, 32);
byte[] inputVector = Arrays.copyOfRange(sharedSecret, 32, 48);
byte[] inputVector = Arrays.copyOfRange(tmpSharedSecret, 32, 48);
ivParameterSpec = new IvParameterSpec(inputVector);
} catch (InvalidKeyException e) {
e.printStackTrace();
}