protected override IFileSystem CreateFileSystem() { var baseFs = new InMemoryFileSystem(); var keys = new byte[0x20]; var xtsFs = new AesXtsFileSystem(baseFs, keys, 0x4000); return(xtsFs); }
public static SwitchFs OpenSdCard(Keyset keyset, IAttributeFileSystem fileSystem) { var concatFs = new ConcatenationFileSystem(fileSystem); var saveDirFs = new SubdirectoryFileSystem(concatFs, "/Nintendo/save"); var contentDirFs = new SubdirectoryFileSystem(concatFs, "/Nintendo/Contents"); var encSaveFs = new AesXtsFileSystem(saveDirFs, keyset.SdCardKeys[0], 0x4000); var encContentFs = new AesXtsFileSystem(contentDirFs, keyset.SdCardKeys[1], 0x4000); return(new SwitchFs(keyset, encContentFs, encSaveFs)); }
public Result Create(out IFileSystem encryptedFileSystem, IFileSystem baseFileSystem, EncryptedFsKeyId keyId, ReadOnlySpan <byte> encryptionSeed) { encryptedFileSystem = default; if (keyId < EncryptedFsKeyId.Save || keyId > EncryptedFsKeyId.CustomStorage) { return(ResultFs.InvalidArgument.Log()); } // todo: "proper" key generation instead of a lazy hack Keyset.SetSdSeed(encryptionSeed.ToArray()); encryptedFileSystem = new AesXtsFileSystem(baseFileSystem, Keyset.SdCardKeys[(int)keyId], 0x4000); return(Result.Success); }
public static SwitchFs OpenSdCard(Keyset keyset, IAttributeFileSystem fileSystem) { var concatFs = new ConcatenationFileSystem(fileSystem); SubdirectoryFileSystem.CreateNew(out SubdirectoryFileSystem contentDirFs, concatFs, "/Nintendo/Contents".ToU8String()).ThrowIfFailure(); AesXtsFileSystem encSaveFs = null; if (fileSystem.DirectoryExists("/Nintendo/save")) { SubdirectoryFileSystem.CreateNew(out SubdirectoryFileSystem saveDirFs, concatFs, "/Nintendo/save".ToU8String()).ThrowIfFailure(); encSaveFs = new AesXtsFileSystem(saveDirFs, keyset.SdCardKeys[0], 0x4000); } var encContentFs = new AesXtsFileSystem(contentDirFs, keyset.SdCardKeys[1], 0x4000); return(new SwitchFs(keyset, encContentFs, encSaveFs)); }
public static SwitchFs OpenSdCard(KeySet keySet, IAttributeFileSystem fileSystem) { var concatFs = new ConcatenationFileSystem(fileSystem); var contentDirFs = new SubdirectoryFileSystem(concatFs); contentDirFs.Initialize("/Nintendo/Contents".ToU8String()).ThrowIfFailure(); AesXtsFileSystem encSaveFs = null; if (fileSystem.DirectoryExists("/Nintendo/save")) { var saveDirFs = new SubdirectoryFileSystem(concatFs); saveDirFs.Initialize("/Nintendo/save".ToU8String()).ThrowIfFailure(); encSaveFs = new AesXtsFileSystem(saveDirFs, keySet.SdCardEncryptionKeys[0].DataRo.ToArray(), 0x4000); } var encContentFs = new AesXtsFileSystem(contentDirFs, keySet.SdCardEncryptionKeys[1].DataRo.ToArray(), 0x4000); return(new SwitchFs(keySet, encContentFs, encSaveFs)); }