From bc1d5fb5f2a170433337202dc2d8e6fc71515f58 Mon Sep 17 00:00:00 2001 From: Philipp Crocoll Date: Sun, 2 Feb 2014 23:36:19 +0100 Subject: [PATCH] fixed problems in certificate validation code (updates in Mono?) Also disabled linking in release to avoid problems. --- .../KP2AKdbLibraryBinding.csproj | 5 +- .../libs/mips/libfinal-key.so | Bin 138164 -> 0 bytes .../KeePassLib2Android.csproj | 2 +- .../Serialization/IOConnection.cs | 43 +- src/Kp2aBusinessLogic/IKp2aApp.cs | 45 +- .../Io/BuiltInFileStorage.cs | 24 +- .../Kp2aBusinessLogic.csproj | 14 +- src/Kp2aUnitTests/Kp2aUnitTests.csproj | 5 +- src/Kp2aUnitTests/MainActivity.cs | 5 +- src/Kp2aUnitTests/TestKp2aApp.cs | 41 +- src/Kp2aUnitTests/TestLoadDb.cs | 3 +- .../Resources/Resource.designer.cs | 7685 +++++++++++++---- src/keepass2android/app/App.cs | 97 +- src/keepass2android/keepass2android.csproj | 36 +- 14 files changed, 6152 insertions(+), 1853 deletions(-) delete mode 100644 src/KP2AKdbLibraryBinding/libs/mips/libfinal-key.so diff --git a/src/KP2AKdbLibraryBinding/KP2AKdbLibraryBinding.csproj b/src/KP2AKdbLibraryBinding/KP2AKdbLibraryBinding.csproj index 3c41dfc6..4da19c3e 100644 --- a/src/KP2AKdbLibraryBinding/KP2AKdbLibraryBinding.csproj +++ b/src/KP2AKdbLibraryBinding/KP2AKdbLibraryBinding.csproj @@ -42,9 +42,8 @@ - - - + + diff --git a/src/KP2AKdbLibraryBinding/libs/mips/libfinal-key.so b/src/KP2AKdbLibraryBinding/libs/mips/libfinal-key.so deleted file mode 100644 index 1c4391b8947c5e46086b6748f837874a9acd9cad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 138164 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ž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 MW_|JNW;yP^0QQVo!~g&Q diff --git a/src/KeePassLib2Android/KeePassLib2Android.csproj b/src/KeePassLib2Android/KeePassLib2Android.csproj index 275418c0..9ed5983f 100644 --- a/src/KeePassLib2Android/KeePassLib2Android.csproj +++ b/src/KeePassLib2Android/KeePassLib2Android.csproj @@ -20,7 +20,7 @@ full False bin\Debug - DEBUG;EXCLUDE_TWOFISH;EXCLUDE_KEYBOARD;EXCLUDE_FILECHOOSER;EXCLUDE_JAVAFILESTORAGE;EXCLUDE_KEYTRANSFORM + DEBUG;INCLUDE_TWOFISH;EXCLUDE_KEYBOARD;EXCLUDE_FILECHOOSER;INCLUDE_JAVAFILESTORAGE;INCLUDE_KEYTRANSFORM prompt 4 False diff --git a/src/KeePassLib2Android/Serialization/IOConnection.cs b/src/KeePassLib2Android/Serialization/IOConnection.cs index 8bcf452f..b3daaa2f 100644 --- a/src/KeePassLib2Android/Serialization/IOConnection.cs +++ b/src/KeePassLib2Android/Serialization/IOConnection.cs @@ -68,6 +68,8 @@ namespace KeePassLib.Serialization // get { return m_bSslCertsAcceptInvalid; } set { m_bSslCertsAcceptInvalid = value; } } + + public static RemoteCertificateValidationCallback CertificateValidationCallback { get; set; } #endif // Web request methods @@ -192,11 +194,10 @@ namespace KeePassLib.Serialization private static void PrepareWebAccess() { - if(m_bSslCertsAcceptInvalid) + /* ServicePointManager.ServerCertificateValidationCallback = - IOConnection.AcceptCertificate; - else - ServicePointManager.ServerCertificateValidationCallback = null; + IOConnection.AcceptCertificate;*/ + ServicePointManager.ServerCertificateValidationCallback = CertificateValidationCallback; } private static IOWebClient CreateWebClient(IOConnectionInfo ioc, bool digestAuth) @@ -361,29 +362,25 @@ namespace KeePassLib.Serialization public override void Close() { base.Close(); - try + RepeatWithDigestOnFail(ioc, req => { - uploadData(IOConnection.CreateWebClient(ioc, false)); - } catch (WebException ex) - { - if ((ex.Response is HttpWebResponse) && (((HttpWebResponse) ex.Response).StatusCode == HttpStatusCode.Unauthorized)) - uploadData(IOConnection.CreateWebClient(ioc, true)); - else - throw; - } + req.Headers.Add("Translate: f"); + + if (method != null) + req.Method = method; + var data = this.ToArray(); + + using (Stream s = req.GetRequestStream()) + { + s.Write(data, 0, data.Length); + req.GetResponse(); + s.Close(); + } + }); } - void uploadData(WebClient webClient) - { - if (method != null) - { - webClient.UploadData(destinationFilePath, method, this.ToArray()); - } else - { - webClient.UploadData(destinationFilePath, this.ToArray()); - } - } + } public static Stream OpenWrite(IOConnectionInfo ioc) diff --git a/src/Kp2aBusinessLogic/IKp2aApp.cs b/src/Kp2aBusinessLogic/IKp2aApp.cs index e8c63a19..ec726578 100644 --- a/src/Kp2aBusinessLogic/IKp2aApp.cs +++ b/src/Kp2aBusinessLogic/IKp2aApp.cs @@ -1,4 +1,6 @@ using System; +using System.Net.Security; +using System.Security.Cryptography.X509Certificates; using Android.App; using System.IO; using Android.Content; @@ -14,8 +16,8 @@ namespace keepass2android /// Interface through which Activities and the logic layer can access some app specific functionalities and Application static data /// /// This also contains methods which are UI specific and should be replacable for testing. - public interface IKp2aApp - { + public interface IKp2aApp + { /// /// Locks the currently open database, quicklocking if available (unless false is passed for allowQuickUnlock) /// @@ -24,51 +26,52 @@ namespace keepass2android /// /// Loads the specified data as the currently open database, as unlocked. /// - void LoadDatabase(IOConnectionInfo ioConnectionInfo, MemoryStream memoryStream, CompositeKey compKey, ProgressDialogStatusLogger statusLogger, IDatabaseLoader databaseLoader); + void LoadDatabase(IOConnectionInfo ioConnectionInfo, MemoryStream memoryStream, CompositeKey compKey, + ProgressDialogStatusLogger statusLogger, IDatabaseLoader databaseLoader); /// /// Returns the current database /// - Database GetDb(); + Database GetDb(); /// /// Tell the app that the file from ioc was opened with keyfile. /// - void StoreOpenedFileAsRecent(IOConnectionInfo ioc, string keyfile); + void StoreOpenedFileAsRecent(IOConnectionInfo ioc, string keyfile); /// /// Creates a new database and returns it /// - Database CreateNewDatabase(); + Database CreateNewDatabase(); /// /// Returns the user-displayable string identified by stringKey /// - string GetResourceString(UiStringKey stringKey); + string GetResourceString(UiStringKey stringKey); /// /// Returns the value from the preferences corresponding to key /// - bool GetBooleanPreference(PreferenceKey key); + bool GetBooleanPreference(PreferenceKey key); /// /// Asks the user the question "messageKey" with the options Yes/No/Cancel, calls the handler corresponding to the answer. /// - void AskYesNoCancel(UiStringKey titleKey, UiStringKey messageKey, - EventHandler yesHandler, - EventHandler noHandler, - EventHandler cancelHandler, - Context ctx); + void AskYesNoCancel(UiStringKey titleKey, UiStringKey messageKey, + EventHandler yesHandler, + EventHandler noHandler, + EventHandler cancelHandler, + Context ctx); /// /// Asks the user the question "messageKey" with the options Yes/No/Cancel, but the yes/no strings can be selected freely, calls the handler corresponding to the answer. /// void AskYesNoCancel(UiStringKey titleKey, UiStringKey messageKey, - UiStringKey yesString, UiStringKey noString, - EventHandler yesHandler, - EventHandler noHandler, - EventHandler cancelHandler, - Context ctx); + UiStringKey yesString, UiStringKey noString, + EventHandler yesHandler, + EventHandler noHandler, + EventHandler cancelHandler, + Context ctx); /// /// Returns a Handler object which can run tasks on the UI thread @@ -84,6 +87,8 @@ namespace keepass2android /// Handles a failed certificate validation. Returns true if the users wants to continue, false otherwise. /// see http://msdn.microsoft.com/en-us/library/system.net.icertificatepolicy(v=vs.110).aspx /// - bool OnServerCertificateError(int certificateProblem); - } + //bool OnServerCertificateError(int certificateProblem); + + RemoteCertificateValidationCallback CertificateValidationCallback { get; } + } } \ No newline at end of file diff --git a/src/Kp2aBusinessLogic/Io/BuiltInFileStorage.cs b/src/Kp2aBusinessLogic/Io/BuiltInFileStorage.cs index ce078dd0..df44549e 100644 --- a/src/Kp2aBusinessLogic/Io/BuiltInFileStorage.cs +++ b/src/Kp2aBusinessLogic/Io/BuiltInFileStorage.cs @@ -37,31 +37,13 @@ namespace keepass2android.Io private readonly IKp2aApp _app; - class CertificatePolicity: ICertificatePolicy - { - private readonly IKp2aApp _app; - - public CertificatePolicity(IKp2aApp app) - { - _app = app; - } - - public bool CheckValidationResult(ServicePoint srvPoint, System.Security.Cryptography.X509Certificates.X509Certificate certificate, WebRequest request, - int certificateProblem) - { - if (certificateProblem == 0) //ok - return true; - return _app.OnServerCertificateError(certificateProblem); - } - } - - public BuiltInFileStorage(IKp2aApp app) { _app = app; //use the obsolute CertificatePolicy because the ServerCertificateValidationCallback isn't called in Mono for Android (?) - ServicePointManager.CertificatePolicy = new CertificatePolicity(app); - + //ServicePointManager.CertificatePolicy = new CertificatePolicity(app); + IOConnection.CertificateValidationCallback = app.CertificateValidationCallback; + } public IEnumerable SupportedProtocols diff --git a/src/Kp2aBusinessLogic/Kp2aBusinessLogic.csproj b/src/Kp2aBusinessLogic/Kp2aBusinessLogic.csproj index 5ef6e781..8e4b49ad 100644 --- a/src/Kp2aBusinessLogic/Kp2aBusinessLogic.csproj +++ b/src/Kp2aBusinessLogic/Kp2aBusinessLogic.csproj @@ -20,7 +20,7 @@ full false bin\Debug\ - TRACE;DEBUG;EXCLUDE_TWOFISH;EXCLUDE_KEYBOARD;EXCLUDE_FILECHOOSER;EXCLUDE_JAVAFILESTORAGE;EXCLUDE_KEYTRANSFORM + TRACE;DEBUG;INCLUDE_TWOFISH;EXCLUDE_KEYBOARD;EXCLUDE_FILECHOOSER;INCLUDE_JAVAFILESTORAGE;INCLUDE_KEYTRANSFORM prompt 4 @@ -112,10 +112,22 @@ + + {48574278-4779-4b3a-a9e4-9cf1bc285d0b} + JavaFileStorageBindings + {545b4a6b-8bba-4fbe-92fc-4ac060122a54} KeePassLib2Android + + {70d3844a-d9fa-4a64-b205-a84c6a822196} + KP2AKdbLibraryBinding + + + {5cf675a5-9bee-4720-bed9-d5bf14a2ebf9} + TwofishCipher +