Skip to content

Commit 3fcc6c4

Browse files
committed
partial fixes for sfoware end-to-end encryption issues
currently being blocked by the padding leading to a decryption issue with some error messages Signed-off-by: Matthieu Gallien <[email protected]>
1 parent 943054f commit 3fcc6c4

File tree

2 files changed

+22
-3
lines changed

2 files changed

+22
-3
lines changed

src/libsync/clientsideencryption.cpp

+10-2
Original file line numberDiff line numberDiff line change
@@ -902,7 +902,11 @@ CertificateInformation ClientSideEncryption::getCertificateInformationByFingerpr
902902

903903
int ClientSideEncryption::paddingMode() const
904904
{
905-
return RSA_PKCS1_PADDING;
905+
if (useTokenBasedEncryption()) {
906+
return RSA_PKCS1_PADDING;
907+
} else {
908+
return RSA_PKCS1_OAEP_PADDING;
909+
}
906910
}
907911

908912
CertificateInformation ClientSideEncryption::getTokenCertificateByFingerprint(const QByteArray &expectedFingerprint) const
@@ -2638,6 +2642,10 @@ bool EncryptionHelper::dataDecryption(const QByteArray &key, const QByteArray &i
26382642
qCDebug(lcCse) << "Could not use empty input data";
26392643
}
26402644

2645+
qCInfo(lcCse()) << "key" << key.toBase64();
2646+
qCInfo(lcCse()) << "iv" << iv.toBase64();
2647+
qCInfo(lcCse()) << "input" << input.toBase64();
2648+
26412649
QByteArray inputCopy = input;
26422650

26432651
QBuffer inputBuffer(&inputCopy);
@@ -2714,7 +2722,7 @@ bool EncryptionHelper::dataDecryption(const QByteArray &key, const QByteArray &i
27142722
}
27152723

27162724
if (1 != EVP_DecryptFinal_ex(ctx, unsignedData(out), &len)) {
2717-
qCInfo(lcCse()) << "Could finalize decryption";
2725+
qCInfo(lcCse()) << "Could not finalize decryption";
27182726
return false;
27192727
}
27202728
outputBuffer.write(out, len);

src/libsync/foldermetadata.cpp

+12-1
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,7 @@ void FolderMetadata::setupExistingMetadata(const QByteArray &metadata)
162162
/ Can the attacker use outdated certificate as an attack vector?*/
163163
folderUser.certificatePem = folderUserObject.value(usersCertificateKey).toString().toUtf8();
164164
folderUser.encryptedMetadataKey = QByteArray::fromBase64(folderUserObject.value(usersEncryptedMetadataKey).toString().toUtf8());
165+
qCInfo(lcCseMetadata()) << "folderUser.encryptedMetadataKey" << folderUser.encryptedMetadataKey.toBase64();
165166
_folderUsers[userId] = folderUser;
166167
}
167168

@@ -190,8 +191,11 @@ void FolderMetadata::setupExistingMetadata(const QByteArray &metadata)
190191
if (_folderUsers.contains(_account->davUser())) {
191192
const auto currentFolderUser = _folderUsers.value(_account->davUser());
192193
_e2eCertificateFingerprint = QSslCertificate{currentFolderUser.certificatePem}.digest(QCryptographicHash::Sha256).toBase64();
193-
_metadataKeyForEncryption = QByteArray::fromBase64(decryptDataWithPrivateKey(currentFolderUser.encryptedMetadataKey, _e2eCertificateFingerprint));
194+
_metadataKeyForEncryption = QByteArray::fromBase64(decryptDataWithPrivateKey(currentFolderUser.encryptedMetadataKey.toBase64(), _e2eCertificateFingerprint));
195+
qCInfo(lcCseMetadata()) << "_metadataKeyForEncryption" << _metadataKeyForEncryption.toBase64();
196+
qCInfo(lcCseMetadata()) << "_metadataKeyForEncryption" << _metadataKeyForEncryption;
194197
_metadataKeyForDecryption = _metadataKeyForEncryption;
198+
qCInfo(lcCseMetadata()) << "_metadataKeyForDecryption" << _metadataKeyForDecryption.toBase64();
195199
}
196200

197201
if (!parseFileDropPart(metaDataDoc)) {
@@ -448,12 +452,19 @@ QByteArray FolderMetadata::encryptDataWithPublicKey(const QByteArray &binaryData
448452
QByteArray FolderMetadata::decryptDataWithPrivateKey(const QByteArray &base64Data,
449453
const QByteArray &certificateFingerprint) const
450454
{
455+
qCInfo(lcCseMetadata()) << "base64Data" << base64Data;
456+
const auto certificateInfo = _account->e2e()->getCertificateInformationByFingerprint(certificateFingerprint);
457+
qCInfo(lcCseMetadata()) << "_account->e2e()->_privateKey" << certificateInfo.getPrivateKeyData().toBase64();
458+
451459
const auto decryptBase64Result = EncryptionHelper::decryptStringAsymmetric(_account->e2e()->getCertificateInformationByFingerprint(certificateFingerprint), _account->e2e()->paddingMode(), *_account->e2e(), base64Data);
452460
if (!decryptBase64Result) {
453461
qCDebug(lcCseMetadata()) << "ERROR. Could not decrypt the metadata key";
454462
_account->reportClientStatus(OCC::ClientStatusReportingStatus::E2EeError_GeneralError);
455463
return {};
456464
}
465+
466+
qCInfo(lcCseMetadata()) << "decryptBase64Result" << (*decryptBase64Result);
467+
457468
return *decryptBase64Result;
458469
}
459470

0 commit comments

Comments
 (0)