From 70b549033c032e86f29583e66c7f80658be4050d Mon Sep 17 00:00:00 2001 From: Tom Hacohen Date: Thu, 6 Apr 2017 16:15:42 +0100 Subject: [PATCH] Crypto: add an exception to when crypto version is too new. --- .../etesync/syncadapter/journalmanager/Crypto.java | 4 ++-- .../syncadapter/journalmanager/Exceptions.java | 14 +++++++++++++- .../syncadapter/journalmanager/JournalManager.java | 2 +- .../syncadapter/CalendarSyncManager.java | 2 +- .../syncadapter/ContactsSyncManager.java | 2 +- .../syncadapter/SyncAdapterService.java | 2 +- .../syncadapter/syncadapter/SyncManager.java | 2 +- .../syncadapter/ui/CreateCollectionFragment.java | 2 +- .../syncadapter/ui/DeleteCollectionFragment.java | 2 +- 9 files changed, 22 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/etesync/syncadapter/journalmanager/Crypto.java b/app/src/main/java/com/etesync/syncadapter/journalmanager/Crypto.java index dc879496..3f8c8332 100644 --- a/app/src/main/java/com/etesync/syncadapter/journalmanager/Crypto.java +++ b/app/src/main/java/com/etesync/syncadapter/journalmanager/Crypto.java @@ -41,12 +41,12 @@ public class Crypto { private final byte[] cipherKey; private final byte[] hmacKey; - public CryptoManager(int version, @NonNull String keyBase64, @NonNull String salt) throws Exceptions.IntegrityException { + public CryptoManager(int version, @NonNull String keyBase64, @NonNull String salt) throws Exceptions.IntegrityException, Exceptions.VersionTooNewException { byte[] derivedKey; if (version > Byte.MAX_VALUE) { throw new Exceptions.IntegrityException("Version is out of range."); } else if (version > Constants.CURRENT_VERSION) { - throw new RuntimeException("Journal version is newer than expected."); + throw new Exceptions.VersionTooNewException("Version to new: " + String.valueOf(version)); } else if (version == 1) { derivedKey = Base64.decode(keyBase64, Base64.NO_WRAP); } else { diff --git a/app/src/main/java/com/etesync/syncadapter/journalmanager/Exceptions.java b/app/src/main/java/com/etesync/syncadapter/journalmanager/Exceptions.java index 123b728a..1e2384df 100644 --- a/app/src/main/java/com/etesync/syncadapter/journalmanager/Exceptions.java +++ b/app/src/main/java/com/etesync/syncadapter/journalmanager/Exceptions.java @@ -45,8 +45,20 @@ public class Exceptions { } } - public static class HttpException extends Exception implements Serializable { + public static class GenericCryptoException extends Exception { + public GenericCryptoException(String message) { + super(message); + } + } + + public static class VersionTooNewException extends GenericCryptoException { + public VersionTooNewException(String message) { + super(message); + } + } + + public static class HttpException extends Exception implements Serializable { final int status; final String message; diff --git a/app/src/main/java/com/etesync/syncadapter/journalmanager/JournalManager.java b/app/src/main/java/com/etesync/syncadapter/journalmanager/JournalManager.java index ef36112b..3c3070a1 100644 --- a/app/src/main/java/com/etesync/syncadapter/journalmanager/JournalManager.java +++ b/app/src/main/java/com/etesync/syncadapter/journalmanager/JournalManager.java @@ -38,7 +38,7 @@ public class JournalManager extends BaseManager { this.client = httpClient; } - public List getJournals(String keyBase64) throws Exceptions.HttpException, Exceptions.IntegrityException { + public List getJournals(String keyBase64) throws Exceptions.HttpException, Exceptions.IntegrityException, Exceptions.GenericCryptoException { Request request = new Request.Builder() .get() .url(remote) diff --git a/app/src/main/java/com/etesync/syncadapter/syncadapter/CalendarSyncManager.java b/app/src/main/java/com/etesync/syncadapter/syncadapter/CalendarSyncManager.java index 8d091566..de871b88 100644 --- a/app/src/main/java/com/etesync/syncadapter/syncadapter/CalendarSyncManager.java +++ b/app/src/main/java/com/etesync/syncadapter/syncadapter/CalendarSyncManager.java @@ -45,7 +45,7 @@ public class CalendarSyncManager extends SyncManager { final private HttpUrl remote; - public CalendarSyncManager(Context context, Account account, AccountSettings settings, Bundle extras, String authority, SyncResult result, LocalCalendar calendar, HttpUrl remote) throws InvalidAccountException, Exceptions.IntegrityException { + public CalendarSyncManager(Context context, Account account, AccountSettings settings, Bundle extras, String authority, SyncResult result, LocalCalendar calendar, HttpUrl remote) throws InvalidAccountException, Exceptions.IntegrityException, Exceptions.GenericCryptoException { super(context, account, settings, extras, authority, result, calendar.getName(), CollectionInfo.Type.CALENDAR); localCollection = calendar; this.remote = remote; diff --git a/app/src/main/java/com/etesync/syncadapter/syncadapter/ContactsSyncManager.java b/app/src/main/java/com/etesync/syncadapter/syncadapter/ContactsSyncManager.java index 42d059c1..4b10a969 100644 --- a/app/src/main/java/com/etesync/syncadapter/syncadapter/ContactsSyncManager.java +++ b/app/src/main/java/com/etesync/syncadapter/syncadapter/ContactsSyncManager.java @@ -60,7 +60,7 @@ public class ContactsSyncManager extends SyncManager { final private ContentProviderClient provider; final private HttpUrl remote; - public ContactsSyncManager(Context context, Account account, AccountSettings settings, Bundle extras, String authority, ContentProviderClient provider, SyncResult result, HttpUrl principal, CollectionInfo info) throws InvalidAccountException, Exceptions.IntegrityException { + public ContactsSyncManager(Context context, Account account, AccountSettings settings, Bundle extras, String authority, ContentProviderClient provider, SyncResult result, HttpUrl principal, CollectionInfo info) throws InvalidAccountException, Exceptions.IntegrityException, Exceptions.GenericCryptoException { super(context, account, settings, extras, authority, result, info.url, CollectionInfo.Type.ADDRESS_BOOK); this.provider = provider; this.remote = principal; diff --git a/app/src/main/java/com/etesync/syncadapter/syncadapter/SyncAdapterService.java b/app/src/main/java/com/etesync/syncadapter/syncadapter/SyncAdapterService.java index 3d2a3110..02a649dd 100644 --- a/app/src/main/java/com/etesync/syncadapter/syncadapter/SyncAdapterService.java +++ b/app/src/main/java/com/etesync/syncadapter/syncadapter/SyncAdapterService.java @@ -142,7 +142,7 @@ public abstract class SyncAdapterService extends Service { dbHelper = new ServiceDB.OpenHelper(context); } - void run() throws Exceptions.HttpException, Exceptions.IntegrityException, InvalidAccountException { + void run() throws Exceptions.HttpException, Exceptions.IntegrityException, InvalidAccountException, Exceptions.GenericCryptoException { try { @Cleanup SQLiteDatabase db = dbHelper.getWritableDatabase(); diff --git a/app/src/main/java/com/etesync/syncadapter/syncadapter/SyncManager.java b/app/src/main/java/com/etesync/syncadapter/syncadapter/SyncManager.java index 7aeee7f8..627944c2 100644 --- a/app/src/main/java/com/etesync/syncadapter/syncadapter/SyncManager.java +++ b/app/src/main/java/com/etesync/syncadapter/syncadapter/SyncManager.java @@ -95,7 +95,7 @@ abstract public class SyncManager { private List localDeleted; private LocalResource[] localDirty; - public SyncManager(Context context, Account account, AccountSettings settings, Bundle extras, String authority, SyncResult syncResult, String journalUid, CollectionInfo.Type serviceType) throws InvalidAccountException, Exceptions.IntegrityException { + public SyncManager(Context context, Account account, AccountSettings settings, Bundle extras, String authority, SyncResult syncResult, String journalUid, CollectionInfo.Type serviceType) throws InvalidAccountException, Exceptions.IntegrityException, Exceptions.GenericCryptoException { this.context = context; this.account = account; this.settings = settings; diff --git a/app/src/main/java/com/etesync/syncadapter/ui/CreateCollectionFragment.java b/app/src/main/java/com/etesync/syncadapter/ui/CreateCollectionFragment.java index d21dd623..c6fbb059 100644 --- a/app/src/main/java/com/etesync/syncadapter/ui/CreateCollectionFragment.java +++ b/app/src/main/java/com/etesync/syncadapter/ui/CreateCollectionFragment.java @@ -179,7 +179,7 @@ public class CreateCollectionFragment extends DialogFragment implements LoaderMa return e; } catch (InvalidAccountException e) { return e; - } catch (Exceptions.IntegrityException e) { + } catch (Exceptions.IntegrityException|Exceptions.GenericCryptoException e) { return e; } finally { dbHelper.close(); diff --git a/app/src/main/java/com/etesync/syncadapter/ui/DeleteCollectionFragment.java b/app/src/main/java/com/etesync/syncadapter/ui/DeleteCollectionFragment.java index cf14920e..505619df 100644 --- a/app/src/main/java/com/etesync/syncadapter/ui/DeleteCollectionFragment.java +++ b/app/src/main/java/com/etesync/syncadapter/ui/DeleteCollectionFragment.java @@ -128,7 +128,7 @@ public class DeleteCollectionFragment extends DialogFragment implements LoaderMa data.update(journalEntity); return null; - } catch (Exceptions.HttpException|Exceptions.IntegrityException e) { + } catch (Exceptions.HttpException|Exceptions.IntegrityException|Exceptions.GenericCryptoException e) { return e; } catch (InvalidAccountException e) { return e;