2
0
mirror of https://github.com/KDE/kdeconnect-android synced 2025-09-05 16:45:08 +00:00
Commit Graph

60 Commits

Author SHA1 Message Date
Albert Vaca Cintora
31fce7fdb0 Use Elliptic Curve encryption instead of RSA
This should fix SFTP not working when using GSConnect (which
doesn't specify the SSH parameters we do to allow old cyphers).

Requires API 23, so on pre-23 we still use RSA.
2023-09-20 18:38:34 +00:00
Albert Vaca Cintora
b14df9d09c Fail earlier if we don't have a certificate 2023-06-05 10:29:27 +02:00
Albert Vaca Cintora
03f50994ee Remove unused imports 2023-06-02 18:41:58 +02:00
Albert Vaca Cintora
acb869b21c Bump the TLS version to 1.2
TLSv1.2 is supported on all the Android versions we support now.
TLSv1.3 is only supported in API 29+. Although we could conditionally
enable it on 29+, it seems to cause problems (disconnects & reconnects
when the LanLink gets refreshed) also on newer devices.
2023-04-24 20:52:45 +00:00
Albert Vaca Cintora
f16a770fee Revert "Do not force TLS v1"
Breaks compatibility with older desktop clients.
We need to bump the protocol version to do this.

This reverts commit e2dbc39e3a.
2023-04-22 14:02:10 +02:00
Albert Vaca Cintora
e2dbc39e3a Do not force TLS v1
Stop specifying the TLS version we want and let the system chose

Co-authored-by: Daniel Tang <danielzgtg.opensource@gmail.com>
2023-04-13 11:07:29 +00:00
Albert Vaca Cintora
33e8e0407b Upgrade from SpongyCastle 1.58 to BouncyCastle 1.70
SpongyCastle was a fork of BouncyCastle needed before Android 3.0 because
of a conflict with Android's own version of BC. It's no longer needed and
rarely receives updates anymore [1]. Furthermore the version we were using
was from 2015 and had security issues (although I'm not sure we were
affected by them since we only use it to generate certificates).

With this change we now also use Java's standard library to read the certs
from a byte[] since the standard CertificateFactory can already do that.


[1] https://github.com/rtyley/spongycastle/issues/34
2023-03-19 23:00:25 +00:00
Albert Vaca Cintora
aae3518bb9 Remove specific list of ciphers
We can let the system use the full list when negotiating since we no longer
support Android < 5.0
2023-03-07 13:04:30 +00:00
Albert Vaca Cintora
298b00a82e Reuse a single TrustManager 2023-03-05 22:11:58 +01:00
Albert Vaca Cintora
6734efd227 Fix obviously broken out-of-bounds in loop 2023-03-05 21:42:17 +01:00
Albert Vaca Cintora
5b73c2bac2 Remove checks for SDK versions older than our target SDK
Removes conditional code for older Android versions (IceCreamSandwitch, JellyBean, KitKat, Lollipop) since we no longer support Android older than Lollipop (5.0).

This doesn't remove KitKat support in the SFTP plugin since it's a bit more convoluted. It will be done in a separate MR.
2023-03-05 16:14:01 +00:00
Ravi Mistry
8f49ff57ab Fix byte array conversions
## Summary

Currently, KDE Connect for Android doesn't show the last 2 characters of the verification key when pairing a device. This MR solves this issue.

This bug is caused by incomplete conversions from byte arrays to strings in `SslHelper.java`:

```java
for (int i = 0; i < hash.length - 1; i++) {
    formatter.format("%02x", hash[i]);
}
```
The ```i < hash.length -1``` converts the bytes in the array up to (inclusive) the penultimate one. Removing the ```- 1``` allows for the last byte to be converted (this is the missing 2 characters).

BUG: 445955

## Test Plan

### Before:
Selecting a desktop from the available devices, then clicking the `Request Pairing` button causes a 62 character key to be displayed. It is 2 characters short of the actual key, which can be seen on the desktop KDE Connect app.

### After:
Selecting the `Request Pairing` button now shows the whole verification key, as intended.
2022-05-30 21:28:03 +00:00
George Hopkins
a799854f36 Allow AES-GCM ciphers with RSA certificates 2021-01-12 16:43:30 +00:00
Albert Vaca Cintora
d09ad45e11 Add a verification key that's displayed when pairing
The key is a sha256 of both devices' certificates. Both should generate the
same key, so hey user can check they are pairing against the right device.

Thanks Matthias Gerstner <mgerstner@suse.de> for reporting this.
2020-11-26 11:30:53 +01:00
Nicolas Fella
b3b74f25f4 Convert license headers to SPDX 2020-08-17 16:17:20 +02:00
Isira Seneviratne
7458adc7d6 Use ArrayUtils.EMPTY_STRING_ARRAY constant. 2020-07-26 21:50:10 +00:00
Isira Seneviratne
03b61f7d1d Use Java 8 Date/Time API instead of the legacy API. 2020-07-02 13:31:07 +05:30
Erik Duisters
ef55d6d783 Certificate generation fails when locale is set to Arabic 2019-12-22 18:57:36 +00:00
Albert Vaca Cintora
ea136498b4 Re-generate cert if it's for a different device ID
This would happen to people who transferred their KDE Connect config from
one phone to another (mostly with backup apps that only work on rooted
phones). This led to a state where other devices would always reject the
connection because the certificate CN didn't match the device ID.

On the PC side this is not a problem because the certificate is the source
of truth for the device ID.
2019-05-21 00:25:11 +02:00
Albert Vaca Cintora
168b16527c Remove compat with protocol 6 with RSA encryption
Since we already removed compat with protocol 7 ^.^u
2019-04-18 19:52:30 +02:00
Nicolas Fella
f1194e88c2 Use Log.e instead of printStackTrace 2019-03-31 20:09:44 +02:00
Nicolas Fella
9c62631d63 [Android] Don't force TLS version
Summary:
Use the default configuration from Android

BUG: 400883

Test Plan: Pairing still works

Reviewers: #kde_connect, albertvaka

Reviewed By: #kde_connect, albertvaka

Subscribers: albertvaka, thomasp, kdeconnect

Tags: #kde_connect

Differential Revision: https://phabricator.kde.org/D18219
2019-01-18 09:07:11 +01:00
Erik Duisters
96b0a9ea9b A SO_TIMEOUT of 1 second often leads to the socket timing out when transferring large files.
Summary:
When receiving large files (even worse when uploading multiple files) the receiving socket
often times-out.

Test Plan:
Send 1 or 2 big files from desktop to android without this patch and you should see 1 or both transfers
fail because of a SO_TIMEOUT

Apply this patch and re-run the test and both transfers should now complete without an SO_TIMEOUT

Reviewers: #kde_connect, albertvaka

Reviewed By: #kde_connect, albertvaka

Subscribers: zhigalin, albertvaka, kdeconnect

Tags: #kde_connect

Differential Revision: https://phabricator.kde.org/D16758
2018-11-20 13:50:07 +01:00
Albert Vaca
9e1e479650 Disable bad cipher suites now that we dropped support for API<14
BUG: 400722
2018-11-07 16:24:00 +01:00
Nicolas Fella
a5e6fa14d7 Do not use presized arrays 2018-10-27 00:45:05 +02:00
Nicolas Fella
a49a145d69 Only use required access modifiers 2018-10-26 23:59:20 +02:00
Nicolas Fella
7a24310cea Remove unneeded version checks
We require API 14 now which makes some checks needless
2018-10-26 22:51:13 +02:00
Albert Vaca
f5254e504d Hopefully fixed crash in Android 8.1 2018-05-15 00:55:28 +02:00
Nicolas Fella
fa5a37c472 Apply coding style to whole project
Summary: Sorry for the huge diff, but all I did was applying Android Studio's 'Reformat Code' to all files. If everyone does that before submitting a patch we can keep it clean easily.

Test Plan: Compiles

Reviewers: #kde_connect, mtijink

Reviewed By: #kde_connect, mtijink

Subscribers: mtijink, sredman, #kde_connect

Tags: #kde_connect

Differential Revision: https://phabricator.kde.org/D10905
2018-03-03 16:09:52 +01:00
Nicolas Fella
79a933708e Remove unneded return 2018-03-01 02:45:21 +01:00
Matthijs Tijink
56fc69b3de Add new encryption cipher for Android 2.3 (API 9+) support
Summary:
Arch linux recently updated libraries which dropped support for RC4, used for connections to Android before Android 3 Honeycomb. Other distributions may also be affected (or will be affected in the future).

This adds a new cipher, supported by Android API 9+.

Test Plan: With this change (and corresponding desktop change) the app can connect again.

Reviewers: #kde_connect, albertvaka

Reviewed By: #kde_connect, albertvaka

Differential Revision: https://phabricator.kde.org/D9449
2017-12-22 13:26:19 +01:00
Albert Vaca
b25ec2d133 Added cipher list for Android versions between 11 and 21.
BUG: 368172
2016-09-19 16:16:30 +02:00
Albert Vaca
9c40374b00 Unpair only when there is no certificate
Unpairing on every error was a bit too aggressive.

BUG: 367937
2016-08-29 11:48:30 +02:00
Albert Vaca
1a04bfbbea Fixed simple issues detected by lint 2016-06-21 16:44:21 +02:00
Albert Vaca
4fc6ca8d4f Further simplified lanbackend 2016-06-20 14:26:49 +02:00
Albert Vaca
71dc713578 Getting rid of netty WIP 2016-06-16 23:48:16 +02:00
Albert Vaca
097d1f5fa5 Removed log 2016-06-16 00:40:37 +02:00
Albert Vaca
0836453c35 Project-wise optimize imports 2016-06-09 13:42:54 +02:00
Albert Vaca
2c513b598a Cleanup 2016-03-08 07:31:04 -08:00
Albert Vaca
0eba461654 Moved all the bouncy(spongy)castle code to the SslHelper class 2016-03-03 15:42:39 -08:00
Albert Vaca
4d553518f6 BouncyCastle doesn't work on Android 2.3, but spongy does
Now we have to make sshd work with spongy
2016-03-03 11:11:39 -08:00
Albert Vaca
f4c221cf66 Re-using a single SecureRandom, as it's expensive to initialize 2016-02-17 04:48:19 -08:00
Albert Vaca
89a65ab3e2 Specify the TLS version we want
We need v1 to support Androids before API16
2016-02-17 04:07:12 -08:00
Albert Vaca
d07ff5a802 SSHD gets confused if spongycastle is present. Changed to BouncyCastle.
It sees it as bouncycastle, tries to load some clases by they classpath and
fails.
2016-01-10 08:46:52 -08:00
Albert Vaca
f5725b7c8d Merge branch 'master' into ssl
# Conflicts:
#	build.gradle
#	src/org/kde/kdeconnect/Backends/BaseLink.java
#	src/org/kde/kdeconnect/Backends/BaseLinkProvider.java
#	src/org/kde/kdeconnect/Backends/LanBackend/LanLink.java
#	src/org/kde/kdeconnect/Backends/LanBackend/LanLinkProvider.java
#	src/org/kde/kdeconnect/Backends/LoopbackBackend/LoopbackLink.java
#	src/org/kde/kdeconnect/BackgroundService.java
#	src/org/kde/kdeconnect/Device.java
#	src/org/kde/kdeconnect/Helpers/DeviceHelper.java
#	src/org/kde/kdeconnect/UserInterface/DeviceActivity.java
#	src/org/kde/kdeconnect/UserInterface/PairActivity.java
#	tests/org/kde/kdeconnect/LanLinkProviderTest.java
#	tests/org/kde/kdeconnect/LanLinkTest.java
2015-09-11 09:24:35 -07:00
Vineet Garg
b87aead06b Using reverse connection strategy for device with android version less than ICS
Enabled cipher suites manually due to issues caused by DHE by older devices
2015-08-25 01:06:49 +05:30
Vineet Garg
f908f5d8a1 Added spongy castle back, to support certificate generation on older devices which is not possible using bouncy castle due to same class name conflict
Fixed TLS version to TLSv1, this saves a connection failure due to TLSv1.2 hello message from devices with latest android versions

If device with new android version enquires about certificate from device with old version (<14) using setNeedClientAuth, connection fails on older device due to variation in certificate request code. So disabled server loop on older devices and using reverse connection hack for successful connection. But due to this, they can't connect to devices with similar android vesion since server is disabled on both and for a successful connection one should be server and one should be client
2015-08-24 02:03:55 +05:30
Vineet Garg
c4a27255a7 Removed spongycastle, now using bouncy castle version
Added reverse connection blacklist again
2015-08-23 00:11:36 +05:30
Vineet Garg
50fcea2cd9 Removed conscrypt
Fixed issue in netty, currently use custom build netty
Removed multi dex
2015-08-17 22:56:18 +05:30
Vineet Garg
7fec58d6b2 We generate certificate for years present date - 1 to present date + 9, this avoid the case of certificate not valid due to different time zones on devices 2015-08-14 17:49:35 +05:30