1
0
mirror of https://codeberg.org/Freeyourgadget/Gadgetbridge synced 2024-06-20 12:00:51 +02:00

[Huawei] Fix transactions encryption

This commit is contained in:
Damien 'Psolyca' Gaignon 2024-02-08 11:23:32 +01:00
parent d5cecc4a84
commit 510b8096ed
No known key found for this signature in database
GPG Key ID: 9E9404E5D9E11843
2 changed files with 8 additions and 12 deletions

View File

@ -248,25 +248,21 @@ public class HuaweiCrypto {
}
}
public static byte[] encrypt(byte authMode, byte[] message, byte[] key, byte[] iv) throws CryptoException {
public static byte[] encrypt(byte encryptMethod, byte[] message, byte[] key, byte[] iv) throws CryptoException {
try {
if (authMode == 0x04) {
if (encryptMethod == 0x01)
return CryptoUtils.encryptAES_GCM_NoPad(message, key, iv, null);
} else {
return CryptoUtils.encryptAES_CBC_Pad(message, key, iv);
}
return CryptoUtils.encryptAES_CBC_Pad(message, key, iv);
} catch (InvalidAlgorithmParameterException | NoSuchPaddingException | IllegalBlockSizeException | NoSuchAlgorithmException | BadPaddingException | InvalidKeyException | IllegalArgumentException e) {
throw new CryptoException(e);
}
}
public static byte[] decrypt(byte authMode, byte[] message, byte[] key, byte[] iv) throws CryptoException {
public static byte[] decrypt(byte encryptMethod, byte[] message, byte[] key, byte[] iv) throws CryptoException {
try {
if (authMode == 0x04) {
if (encryptMethod == 0x01)
return CryptoUtils.decryptAES_GCM_NoPad(message, key, iv, null);
} else {
return CryptoUtils.decryptAES_CBC_Pad(message, key, iv);
}
return CryptoUtils.decryptAES_CBC_Pad(message, key, iv);
} catch (InvalidAlgorithmParameterException | NoSuchPaddingException | IllegalBlockSizeException | NoSuchAlgorithmException | BadPaddingException | InvalidKeyException | IllegalArgumentException e) {
throw new CryptoException(e);
}

View File

@ -291,7 +291,7 @@ public class HuaweiTLV {
byte[] serializedTLV = serialize();
byte[] key = paramsProvider.getSecretKey();
byte[] nonce = paramsProvider.getIv();
byte[] encryptedTLV = HuaweiCrypto.encrypt(paramsProvider.getDeviceSupportType(), serializedTLV, key, nonce);
byte[] encryptedTLV = HuaweiCrypto.encrypt(paramsProvider.getEncryptMethod(), serializedTLV, key, nonce);
return new HuaweiTLV()
.put(CryptoTags.encryption, (byte) 0x01)
.put(CryptoTags.initVector, nonce)
@ -300,7 +300,7 @@ public class HuaweiTLV {
public void decrypt(ParamsProvider paramsProvider) throws CryptoException, HuaweiPacket.MissingTagException {
byte[] key = paramsProvider.getSecretKey();
byte[] decryptedTLV = HuaweiCrypto.decrypt(paramsProvider.getDeviceSupportType(), getBytes(CryptoTags.cipherText), key, getBytes(CryptoTags.initVector));
byte[] decryptedTLV = HuaweiCrypto.decrypt(paramsProvider.getEncryptMethod(), getBytes(CryptoTags.cipherText), key, getBytes(CryptoTags.initVector));
this.valueMap = new ArrayList<>();
parse(decryptedTLV);
}