diff options
Diffstat (limited to 'src/Ryujinx.HLE/HOS/Services/Ssl')
15 files changed, 90 insertions, 96 deletions
diff --git a/src/Ryujinx.HLE/HOS/Services/Ssl/BuiltInCertificateManager.cs b/src/Ryujinx.HLE/HOS/Services/Ssl/BuiltInCertificateManager.cs index dae0698c..e31092fd 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ssl/BuiltInCertificateManager.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ssl/BuiltInCertificateManager.cs @@ -23,7 +23,7 @@ namespace Ryujinx.HLE.HOS.Services.Ssl { private const long CertStoreTitleId = 0x0100000000000800; - private readonly string CertStoreTitleMissingErrorMessage = "CertStore system title not found! SSL CA retrieving will not work, provide the system archive to fix this error. (See https://github.com/Ryujinx/Ryujinx/wiki/Ryujinx-Setup-&-Configuration-Guide#initial-setup-continued---installation-of-firmware for more information)"; + private const string CertStoreTitleMissingErrorMessage = "CertStore system title not found! SSL CA retrieving will not work, provide the system archive to fix this error. (See https://github.com/Ryujinx/Ryujinx/wiki/Ryujinx-Setup-&-Configuration-Guide#initial-setup-continued---installation-of-firmware for more information)"; private static BuiltInCertificateManager _instance; @@ -31,10 +31,7 @@ namespace Ryujinx.HLE.HOS.Services.Ssl { get { - if (_instance == null) - { - _instance = new BuiltInCertificateManager(); - } + _instance ??= new BuiltInCertificateManager(); return _instance; } @@ -52,12 +49,12 @@ namespace Ryujinx.HLE.HOS.Services.Ssl { private const uint ValidMagic = 0x546C7373; -#pragma warning disable CS0649 +#pragma warning disable CS0649 // Field is never assigned to public uint Magic; public uint EntriesCount; #pragma warning restore CS0649 - public bool IsValid() + public readonly bool IsValid() { return Magic == ValidMagic; } @@ -65,7 +62,7 @@ namespace Ryujinx.HLE.HOS.Services.Ssl private struct CertStoreFileEntry { -#pragma warning disable CS0649 +#pragma warning disable CS0649 // Field is never assigned to public CaCertificateId Id; public TrustedCertStatus Status; public uint DataSize; @@ -109,7 +106,7 @@ namespace Ryujinx.HLE.HOS.Services.Ssl { Id = entry.Id, Status = entry.Status, - Data = data + Data = data, }; } @@ -125,9 +122,9 @@ namespace Ryujinx.HLE.HOS.Services.Ssl if (HasCertStoreTitle()) { - using LocalStorage ncaFile = new LocalStorage(_virtualFileSystem.SwitchPathToSystemPath(GetCertStoreTitleContentPath()), FileAccess.Read, FileMode.Open); + using LocalStorage ncaFile = new(VirtualFileSystem.SwitchPathToSystemPath(GetCertStoreTitleContentPath()), FileAccess.Read, FileMode.Open); - Nca nca = new Nca(_virtualFileSystem.KeySet, ncaFile); + Nca nca = new(_virtualFileSystem.KeySet, ncaFile); IFileSystem romfs = nca.OpenFileSystem(NcaSectionType.Data, _fsIntegrityCheckLevel); diff --git a/src/Ryujinx.HLE/HOS/Services/Ssl/ISslService.cs b/src/Ryujinx.HLE/HOS/Services/Ssl/ISslService.cs index 7741ef7e..5e4a0c53 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ssl/ISslService.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ssl/ISslService.cs @@ -19,8 +19,10 @@ namespace Ryujinx.HLE.HOS.Services.Ssl // CreateContext(nn::ssl::sf::SslVersion, u64, pid) -> object<nn::ssl::sf::ISslContext> public ResultCode CreateContext(ServiceCtx context) { - SslVersion sslVersion = (SslVersion)context.RequestData.ReadUInt32(); - ulong pidPlaceholder = context.RequestData.ReadUInt64(); + SslVersion sslVersion = (SslVersion)context.RequestData.ReadUInt32(); +#pragma warning disable IDE0059 // Remove unnecessary value assignment + ulong pidPlaceholder = context.RequestData.ReadUInt64(); +#pragma warning restore IDE0059 MakeObject(context, new ISslContext(context.Request.HandleDesc.PId, sslVersion)); @@ -71,7 +73,7 @@ namespace Ryujinx.HLE.HOS.Services.Ssl Id = entries[i].Id, Status = entries[i].Status, CertificateDataSize = (ulong)entries[i].Data.Length, - CertificateDataOffset = (ulong)(rawData.Length - certificatesData.Length) + CertificateDataOffset = (ulong)(rawData.Length - certificatesData.Length), }; certificatesData = certificatesData[entries[i].Data.Length..]; @@ -84,7 +86,7 @@ namespace Ryujinx.HLE.HOS.Services.Ssl Id = CaCertificateId.All, Status = TrustedCertStatus.Invalid, CertificateDataSize = 0, - CertificateDataOffset = 0 + CertificateDataOffset = 0, }; } } @@ -122,4 +124,4 @@ namespace Ryujinx.HLE.HOS.Services.Ssl return ResultCode.Success; } } -}
\ No newline at end of file +} diff --git a/src/Ryujinx.HLE/HOS/Services/Ssl/ResultCode.cs b/src/Ryujinx.HLE/HOS/Services/Ssl/ResultCode.cs index 862c79cd..6aae11fe 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ssl/ResultCode.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ssl/ResultCode.cs @@ -2,19 +2,19 @@ { public enum ResultCode { - OsModuleId = 123, + OsModuleId = 123, ErrorCodeShift = 9, - Success = 0, - NoSocket = (103 << ErrorCodeShift) | OsModuleId, - InvalidSocket = (106 << ErrorCodeShift) | OsModuleId, + Success = 0, + NoSocket = (103 << ErrorCodeShift) | OsModuleId, + InvalidSocket = (106 << ErrorCodeShift) | OsModuleId, InvalidCertBufSize = (112 << ErrorCodeShift) | OsModuleId, - InvalidOption = (126 << ErrorCodeShift) | OsModuleId, + InvalidOption = (126 << ErrorCodeShift) | OsModuleId, CertBufferTooSmall = (202 << ErrorCodeShift) | OsModuleId, - AlreadyInUse = (203 << ErrorCodeShift) | OsModuleId, - WouldBlock = (204 << ErrorCodeShift) | OsModuleId, - Timeout = (205 << ErrorCodeShift) | OsModuleId, - ConnectionReset = (209 << ErrorCodeShift) | OsModuleId, - ConnectionAbort = (210 << ErrorCodeShift) | OsModuleId + AlreadyInUse = (203 << ErrorCodeShift) | OsModuleId, + WouldBlock = (204 << ErrorCodeShift) | OsModuleId, + Timeout = (205 << ErrorCodeShift) | OsModuleId, + ConnectionReset = (209 << ErrorCodeShift) | OsModuleId, + ConnectionAbort = (210 << ErrorCodeShift) | OsModuleId, } } diff --git a/src/Ryujinx.HLE/HOS/Services/Ssl/SslService/ISslConnection.cs b/src/Ryujinx.HLE/HOS/Services/Ssl/SslService/ISslConnection.cs index b9087f40..b5c608d3 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ssl/SslService/ISslConnection.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ssl/SslService/ISslConnection.cs @@ -15,7 +15,7 @@ namespace Ryujinx.HLE.HOS.Services.Ssl.SslService private bool _skipDefaultVerify; private bool _enableAlpn; - private SslVersion _sslVersion; + private readonly SslVersion _sslVersion; private IoMode _ioMode; private VerifyOption _verifyOption; private SessionCacheMode _sessionCacheMode; @@ -206,13 +206,12 @@ namespace Ryujinx.HLE.HOS.Services.Ssl.SslService { if (_getServerCertChain) { - using (WritableRegion region = context.Memory.GetWritableRegion(context.Request.ReceiveBuff[0].Position, (int)context.Request.ReceiveBuff[0].Size)) - { - result = _connection.GetServerCertificate(_hostName, region.Memory.Span, out uint bufferSize, out uint certificateCount); + using WritableRegion region = context.Memory.GetWritableRegion(context.Request.ReceiveBuff[0].Position, (int)context.Request.ReceiveBuff[0].Size); - context.ResponseData.Write(bufferSize); - context.ResponseData.Write(certificateCount); - } + result = _connection.GetServerCertificate(_hostName, region.Memory.Span, out uint bufferSize, out uint certificateCount); + + context.ResponseData.Write(bufferSize); + context.ResponseData.Write(certificateCount); } else { @@ -235,15 +234,13 @@ namespace Ryujinx.HLE.HOS.Services.Ssl.SslService ResultCode result; - using (WritableRegion region = context.Memory.GetWritableRegion(context.Request.ReceiveBuff[0].Position, (int)context.Request.ReceiveBuff[0].Size)) - { - // TODO: Better error management. - result = _connection.Read(out int readCount, region.Memory); + using WritableRegion region = context.Memory.GetWritableRegion(context.Request.ReceiveBuff[0].Position, (int)context.Request.ReceiveBuff[0].Size); + // TODO: Better error management. + result = _connection.Read(out int readCount, region.Memory); - if (result == ResultCode.Success) - { - context.ResponseData.Write(readCount); - } + if (result == ResultCode.Success) + { + context.ResponseData.Write(readCount); } return result; @@ -297,15 +294,15 @@ namespace Ryujinx.HLE.HOS.Services.Ssl.SslService ResultCode result; - using (WritableRegion region = context.Memory.GetWritableRegion(context.Request.ReceiveBuff[0].Position, (int)context.Request.ReceiveBuff[0].Size)) - { - // TODO: Better error management. - result = _connection.Peek(out int peekCount, region.Memory); + using WritableRegion region = context.Memory.GetWritableRegion(context.Request.ReceiveBuff[0].Position, (int)context.Request.ReceiveBuff[0].Size); - if (result == ResultCode.Success) - { - context.ResponseData.Write(peekCount); - } + + // TODO: Better error management. + result = _connection.Peek(out int peekCount, region.Memory); + + if (result == ResultCode.Success) + { + context.ResponseData.Write(peekCount); } return result; @@ -381,7 +378,7 @@ namespace Ryujinx.HLE.HOS.Services.Ssl.SslService // SetOption(b8 value, nn::ssl::sf::OptionType option) public ResultCode SetOption(ServiceCtx context) { - bool value = context.RequestData.ReadUInt32() != 0; + bool value = context.RequestData.ReadUInt32() != 0; OptionType option = (OptionType)context.RequestData.ReadUInt32(); Logger.Stub?.PrintStub(LogClass.ServiceSsl, new { option, value }); @@ -516,4 +513,4 @@ namespace Ryujinx.HLE.HOS.Services.Ssl.SslService _connection?.Dispose(); } } -}
\ No newline at end of file +} diff --git a/src/Ryujinx.HLE/HOS/Services/Ssl/SslService/ISslConnectionBase.cs b/src/Ryujinx.HLE/HOS/Services/Ssl/SslService/ISslConnectionBase.cs index 18e03e49..500e2b89 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ssl/SslService/ISslConnectionBase.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ssl/SslService/ISslConnectionBase.cs @@ -3,7 +3,7 @@ using System; namespace Ryujinx.HLE.HOS.Services.Ssl.SslService { - interface ISslConnectionBase: IDisposable + interface ISslConnectionBase : IDisposable { int SocketFd { get; } diff --git a/src/Ryujinx.HLE/HOS/Services/Ssl/SslService/ISslContext.cs b/src/Ryujinx.HLE/HOS/Services/Ssl/SslService/ISslContext.cs index b38ff921..7b371d29 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ssl/SslService/ISslContext.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ssl/SslService/ISslContext.cs @@ -47,8 +47,10 @@ namespace Ryujinx.HLE.HOS.Services.Ssl.SslService { CertificateFormat certificateFormat = (CertificateFormat)context.RequestData.ReadUInt32(); +#pragma warning disable IDE0059 // Remove unnecessary value assignment ulong certificateDataPosition = context.Request.SendBuff[0].Position; - ulong certificateDataSize = context.Request.SendBuff[0].Size; + ulong certificateDataSize = context.Request.SendBuff[0].Size; +#pragma warning restore IDE0059 context.ResponseData.Write(_serverCertificateId++); @@ -61,11 +63,13 @@ namespace Ryujinx.HLE.HOS.Services.Ssl.SslService // ImportClientPki(buffer<bytes, 5> certificate, buffer<bytes, 5> ascii_password) -> u64 certificateId public ResultCode ImportClientPki(ServiceCtx context) { +#pragma warning disable IDE0059 // Remove unnecessary value assignment ulong certificateDataPosition = context.Request.SendBuff[0].Position; - ulong certificateDataSize = context.Request.SendBuff[0].Size; + ulong certificateDataSize = context.Request.SendBuff[0].Size; +#pragma warning restore IDE0059 ulong asciiPasswordDataPosition = context.Request.SendBuff[1].Position; - ulong asciiPasswordDataSize = context.Request.SendBuff[1].Size; + ulong asciiPasswordDataSize = context.Request.SendBuff[1].Size; byte[] asciiPasswordData = new byte[asciiPasswordDataSize]; @@ -80,4 +84,4 @@ namespace Ryujinx.HLE.HOS.Services.Ssl.SslService return ResultCode.Success; } } -}
\ No newline at end of file +} diff --git a/src/Ryujinx.HLE/HOS/Services/Ssl/SslService/SslManagedSocketConnection.cs b/src/Ryujinx.HLE/HOS/Services/Ssl/SslService/SslManagedSocketConnection.cs index 47d3eddb..dab099aa 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ssl/SslService/SslManagedSocketConnection.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ssl/SslService/SslManagedSocketConnection.cs @@ -15,8 +15,8 @@ namespace Ryujinx.HLE.HOS.Services.Ssl.SslService public ISocket Socket { get; } - private BsdContext _bsdContext; - private SslVersion _sslVersion; + private readonly BsdContext _bsdContext; + private readonly SslVersion _sslVersion; private SslStream _stream; private bool _isBlockingSocket; private int _previousReadTimeout; @@ -67,25 +67,19 @@ namespace Ryujinx.HLE.HOS.Services.Ssl.SslService EndSslOperation(); } -// NOTE: We silence warnings about TLS 1.0 and 1.1 as games will likely use it. + // NOTE: We silence warnings about TLS 1.0 and 1.1 as games will likely use it. #pragma warning disable SYSLIB0039 - private static SslProtocols TranslateSslVersion(SslVersion version) + private SslProtocols TranslateSslVersion(SslVersion version) { - switch (version & SslVersion.VersionMask) + return (version & SslVersion.VersionMask) switch { - case SslVersion.Auto: - return SslProtocols.Tls | SslProtocols.Tls11 | SslProtocols.Tls12 | SslProtocols.Tls13; - case SslVersion.TlsV10: - return SslProtocols.Tls; - case SslVersion.TlsV11: - return SslProtocols.Tls11; - case SslVersion.TlsV12: - return SslProtocols.Tls12; - case SslVersion.TlsV13: - return SslProtocols.Tls13; - default: - throw new NotImplementedException(version.ToString()); - } + SslVersion.Auto => SslProtocols.Tls | SslProtocols.Tls11 | SslProtocols.Tls12 | SslProtocols.Tls13, + SslVersion.TlsV10 => SslProtocols.Tls, + SslVersion.TlsV11 => SslProtocols.Tls11, + SslVersion.TlsV12 => SslProtocols.Tls12, + SslVersion.TlsV13 => SslProtocols.Tls13, + _ => throw new NotImplementedException(version.ToString()), + }; } #pragma warning restore SYSLIB0039 @@ -114,7 +108,7 @@ namespace Ryujinx.HLE.HOS.Services.Ssl.SslService return 0; } - private static bool TryTranslateWinSockError(bool isBlocking, WsaError error, out ResultCode resultCode) + private bool TryTranslateWinSockError(bool isBlocking, WsaError error, out ResultCode resultCode) { switch (error) { diff --git a/src/Ryujinx.HLE/HOS/Services/Ssl/Types/CaCertificateId.cs b/src/Ryujinx.HLE/HOS/Services/Ssl/Types/CaCertificateId.cs index 5c84579a..a351ce54 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ssl/Types/CaCertificateId.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ssl/Types/CaCertificateId.cs @@ -63,6 +63,6 @@ GTSRootR4, SecurityCommunicationRootCA, - All = uint.MaxValue + All = uint.MaxValue, } } diff --git a/src/Ryujinx.HLE/HOS/Services/Ssl/Types/CertificateFormat.cs b/src/Ryujinx.HLE/HOS/Services/Ssl/Types/CertificateFormat.cs index 1d80f739..35842e85 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ssl/Types/CertificateFormat.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ssl/Types/CertificateFormat.cs @@ -3,6 +3,6 @@ enum CertificateFormat : uint { Pem = 1, - Der = 2 + Der = 2, } -}
\ No newline at end of file +} diff --git a/src/Ryujinx.HLE/HOS/Services/Ssl/Types/IoMode.cs b/src/Ryujinx.HLE/HOS/Services/Ssl/Types/IoMode.cs index 1cd06d6d..c8b3889c 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ssl/Types/IoMode.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ssl/Types/IoMode.cs @@ -2,7 +2,7 @@ { enum IoMode : uint { - Blocking = 1, - NonBlocking = 2 + Blocking = 1, + NonBlocking = 2, } -}
\ No newline at end of file +} diff --git a/src/Ryujinx.HLE/HOS/Services/Ssl/Types/OptionType.cs b/src/Ryujinx.HLE/HOS/Services/Ssl/Types/OptionType.cs index 3673200a..85a813dc 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ssl/Types/OptionType.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ssl/Types/OptionType.cs @@ -5,6 +5,6 @@ DoNotCloseSocket, GetServerCertChain, // 3.0.0+ SkipDefaultVerify, // 5.0.0+ - EnableAlpn // 9.0.0+ + EnableAlpn, // 9.0.0+ } -}
\ No newline at end of file +} diff --git a/src/Ryujinx.HLE/HOS/Services/Ssl/Types/SessionCacheMode.cs b/src/Ryujinx.HLE/HOS/Services/Ssl/Types/SessionCacheMode.cs index cec7b745..b9c73937 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ssl/Types/SessionCacheMode.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ssl/Types/SessionCacheMode.cs @@ -4,6 +4,6 @@ { None, SessionId, - SessionTicket + SessionTicket, } -}
\ No newline at end of file +} diff --git a/src/Ryujinx.HLE/HOS/Services/Ssl/Types/SslVersion.cs b/src/Ryujinx.HLE/HOS/Services/Ssl/Types/SslVersion.cs index 7110fd85..7026596e 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ssl/Types/SslVersion.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ssl/Types/SslVersion.cs @@ -5,12 +5,12 @@ namespace Ryujinx.HLE.HOS.Services.Ssl.Types [Flags] enum SslVersion : uint { - Auto = 1 << 0, + Auto = 1 << 0, TlsV10 = 1 << 3, TlsV11 = 1 << 4, TlsV12 = 1 << 5, TlsV13 = 1 << 6, // 11.0.0+ - VersionMask = 0xFFFFFF + VersionMask = 0xFFFFFF, } -}
\ No newline at end of file +} diff --git a/src/Ryujinx.HLE/HOS/Services/Ssl/Types/TrustedCertStatus.cs b/src/Ryujinx.HLE/HOS/Services/Ssl/Types/TrustedCertStatus.cs index 7fd5efd6..e9d348c1 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ssl/Types/TrustedCertStatus.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ssl/Types/TrustedCertStatus.cs @@ -7,6 +7,6 @@ EnabledNotTrusted, Revoked, - Invalid = uint.MaxValue + Invalid = uint.MaxValue, } } diff --git a/src/Ryujinx.HLE/HOS/Services/Ssl/Types/VerifyOption.cs b/src/Ryujinx.HLE/HOS/Services/Ssl/Types/VerifyOption.cs index d25bb6c3..1c13e80f 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ssl/Types/VerifyOption.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ssl/Types/VerifyOption.cs @@ -5,11 +5,11 @@ namespace Ryujinx.HLE.HOS.Services.Ssl.Types [Flags] enum VerifyOption : uint { - PeerCa = 1 << 0, - HostName = 1 << 1, - DateCheck = 1 << 2, - EvCertPartial = 1 << 3, - EvPolicyOid = 1 << 4, // 6.0.0+ - EvCertFingerprint = 1 << 5 // 6.0.0+ + PeerCa = 1 << 0, + HostName = 1 << 1, + DateCheck = 1 << 2, + EvCertPartial = 1 << 3, + EvPolicyOid = 1 << 4, // 6.0.0+ + EvCertFingerprint = 1 << 5, // 6.0.0+ } -}
\ No newline at end of file +} |