Skip to content

Commit ddd071d

Browse files
authored
Added onboarding experience on mobile (#91)
1 parent d88444e commit ddd071d

97 files changed

Lines changed: 1313 additions & 177 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

src/Core/SecureFolderFS.Core.Cryptography/Constants.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ public static class KeyTraits
1010
public const int MAC_KEY_LENGTH = 32;
1111
public const int ARGON2_KEK_LENGTH = 32;
1212
public const int CHALLENGE_KEY_PART_LENGTH = 128;
13+
public const int ECIES_SHA256_AESGCM_STDX963_KEY_LENGTH = 32;
1314
}
1415

1516
public static class CipherId

src/Core/SecureFolderFS.Core.FileSystem/Helpers/Paths/Abstract/AbstractPathHelpers.Directory.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,11 @@ namespace SecureFolderFS.Core.FileSystem.Helpers.Paths.Abstract
1010
{
1111
public static partial class AbstractPathHelpers
1212
{
13-
public static async Task<bool> GetDirectoryIdAsync(IFolder folderOfDirectoryId, FileSystemSpecifics specifics,
14-
Memory<byte> directoryId, CancellationToken cancellationToken)
13+
public static async Task<bool> GetDirectoryIdAsync(
14+
IFolder folderOfDirectoryId,
15+
FileSystemSpecifics specifics,
16+
Memory<byte> directoryId,
17+
CancellationToken cancellationToken)
1518
{
1619
if (folderOfDirectoryId.Id == specifics.ContentFolder.Id)
1720
return false;

src/Core/SecureFolderFS.Core.FileSystem/Storage/CryptoFolder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ public async Task<IChildFolder> CreateFolderAsync(string name, bool overwrite =
143143
await directoryIdStream.WriteAsync(directoryId, cancellationToken);
144144

145145
// Set DirectoryID to known IDs
146-
specifics.DirectoryIdCache.CacheSet(directoryIdFile.Id, new(Guid.NewGuid().ToByteArray()));
146+
specifics.DirectoryIdCache.CacheSet(directoryIdFile.Id, new(directoryId));
147147

148148
return (IChildFolder)Wrap(folder, name);
149149
}

src/Core/SecureFolderFS.Core/Constants.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,7 @@ public static class Authentication
2121
public const string AUTH_KEYFILE = "key_file";
2222
public const string AUTH_WINDOWS_HELLO = "windows_hello";
2323
public const string AUTH_HARDWARE_KEY = "hardware_key";
24-
public const string AUTH_APPLE_FACEID = "apple_faceid";
25-
public const string AUTH_APPLE_TOUCHID = "apple_touchid";
24+
public const string AUTH_APPLE_BIOMETRIC = "apple_secure_enclave";
2625
public const string AUTH_ANDROID_BIOMETRIC = "android_biometrics";
2726

2827
public const string AUTH_DEVICE_PING = "device_ping";
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
using System;
2+
using System.ComponentModel;
3+
using System.Text.Json.Serialization;
4+
5+
namespace SecureFolderFS.Core.DataModels
6+
{
7+
[Serializable]
8+
public record class VaultProtectedKeyDataModel : VaultCapabilityDataModel
9+
{
10+
/// <summary>
11+
/// Gets the ciphertext key material.
12+
/// </summary>
13+
[JsonPropertyName("c_protectedkey")]
14+
[DefaultValue(null)]
15+
public byte[]? CiphertextKey { get; set; }
16+
}
17+
}

src/Core/SecureFolderFS.Core/VaultAccess/VaultReader.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,13 +50,14 @@ public async Task<VersionDataModel> ReadVersionAsync(CancellationToken cancellat
5050
return await ReadDataAsync<VersionDataModel>(configFile, _serializer, cancellationToken);
5151
}
5252

53-
public async Task<VaultChallengeDataModel?> ReadAuthenticationAsync(string fileName, CancellationToken cancellationToken)
53+
public async Task<TCapability?> ReadAuthenticationAsync<TCapability>(string fileName, CancellationToken cancellationToken)
54+
where TCapability : VaultCapabilityDataModel
5455
{
5556
try
5657
{
5758
// Try to get authentication file
5859
var authFile = await _vaultFolder.GetFileByNameAsync(fileName, cancellationToken);
59-
return await ReadDataAsync<VaultChallengeDataModel?>(authFile, _serializer, cancellationToken);
60+
return await ReadDataAsync<TCapability?>(authFile, _serializer, cancellationToken);
6061
}
6162
catch (Exception)
6263
{

src/Core/SecureFolderFS.Core/VaultAccess/VaultWriter.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ public async Task WriteConfigurationAsync(VaultConfigurationDataModel? configDat
4242
await WriteDataAsync(configFile, configDataModel, cancellationToken);
4343
}
4444

45-
public async Task WriteAuthenticationAsync(string fileName, VaultChallengeDataModel? authDataModel, CancellationToken cancellationToken)
45+
public async Task WriteAuthenticationAsync<TCapability>(string fileName, TCapability? authDataModel, CancellationToken cancellationToken)
46+
where TCapability : VaultCapabilityDataModel
4647
{
4748
var authFile = authDataModel is null ? null : _vaultFolder switch
4849
{

src/Platforms/Directory.Packages.props

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
<ItemGroup>
33
<PackageVersion Include="AathifMahir.Maui.MauiIcons.Cupertino" Version="4.0.0" />
44
<PackageVersion Include="AathifMahir.Maui.MauiIcons.Material" Version="4.0.0" />
5+
<PackageVersion Include="AcrylicView.Maui" Version="2.1.3" />
56
<PackageVersion Include="CommunityToolkit.Maui" Version="11.2.0" />
67
<PackageVersion Include="CommunityToolkit.Maui.MediaElement" Version="6.0.2" />
78
<PackageVersion Include="CommunityToolkit.WinUI.Animations" Version="8.2.250402" />

src/Platforms/SecureFolderFS.Maui/App.xaml.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ public App()
3232
#if ANDROID
3333
// Load Android-specific resource dictionaries
3434
Resources.MergedDictionaries.Add(new Platforms.Android.Templates.AndroidDataTemplates());
35+
#elif IOS
36+
// Load IOS-specific resource dictionaries
37+
Resources.MergedDictionaries.Add(new Platforms.iOS.Templates.IOSDataTemplates());
3538
#endif
3639

3740
// Configure mappers

src/Platforms/SecureFolderFS.Maui/AppShell.xaml.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ private async void AppShell_Loaded(object? sender, EventArgs e)
3434
var overlayService = DI.Service<IOverlayService>();
3535
var messageOverlay = new MessageOverlayViewModel()
3636
{
37-
Title = SafetyHelpers.NoThrowResult(() => string.Format("ClosedUnexpectedly".ToLocalized(), nameof(SecureFolderFS))),
37+
Title = "ClosedUnexpectedly".ToLocalized(nameof(SecureFolderFS)),
3838
PrimaryText = "Close".ToLocalized(),
3939
Message = sessionException
4040
};

0 commit comments

Comments
 (0)