Apply suggestions from code review

more minor fixes before I do larger fixes

Co-Authored-By: LogicalPhallacy <44458166+LogicalPhallacy@users.noreply.github.com>
This commit is contained in:
Bond-009 2019-03-07 02:41:44 -08:00 committed by GitHub
parent bef665be36
commit c31b0b311b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 70 additions and 70 deletions

View File

@ -83,7 +83,7 @@ namespace Emby.Server.Implementations.Cryptography
{ {
//downgrading for now as we need this library to be dotnetstandard compliant //downgrading for now as we need this library to be dotnetstandard compliant
//with this downgrade we'll add a check to make sure we're on the downgrade method at the moment //with this downgrade we'll add a check to make sure we're on the downgrade method at the moment
if(method == DefaultHashMethod) if (method == DefaultHashMethod)
{ {
using (var r = new Rfc2898DeriveBytes(bytes, salt, iterations)) using (var r = new Rfc2898DeriveBytes(bytes, salt, iterations))
{ {
@ -96,7 +96,7 @@ namespace Emby.Server.Implementations.Cryptography
public byte[] ComputeHash(string hashMethod, byte[] bytes) public byte[] ComputeHash(string hashMethod, byte[] bytes)
{ {
return ComputeHash(hashMethod, bytes, new byte[0]); return ComputeHash(hashMethod, bytes, Array.Empty<byte>());
} }
public byte[] ComputeHashWithDefaultMethod(byte[] bytes) public byte[] ComputeHashWithDefaultMethod(byte[] bytes)
@ -106,7 +106,7 @@ namespace Emby.Server.Implementations.Cryptography
public byte[] ComputeHash(string hashMethod, byte[] bytes, byte[] salt) public byte[] ComputeHash(string hashMethod, byte[] bytes, byte[] salt)
{ {
if(hashMethod == DefaultHashMethod) if (hashMethod == DefaultHashMethod)
{ {
return PBKDF2(hashMethod, bytes, salt, _defaultIterations); return PBKDF2(hashMethod, bytes, salt, _defaultIterations);
} }

View File

@ -101,7 +101,7 @@ namespace Emby.Server.Implementations.Library
if (!user.Password.Contains("$")) if (!user.Password.Contains("$"))
{ {
string hash = user.Password; string hash = user.Password;
user.Password = String.Format("$SHA1${0}", hash); user.Password = string.Format("$SHA1${0}", hash);
} }
if (user.EasyPassword != null && !user.EasyPassword.Contains("$")) if (user.EasyPassword != null && !user.EasyPassword.Contains("$"))

View File

@ -8,34 +8,34 @@ namespace MediaBrowser.Model.Cryptography
{ {
// Defined from this hash storage spec // Defined from this hash storage spec
// https://github.com/P-H-C/phc-string-format/blob/master/phc-sf-spec.md // https://github.com/P-H-C/phc-string-format/blob/master/phc-sf-spec.md
// $<id>[$<param>=<value>(,<param>=<value>)*][$<salt>[$<hash>]] // $<id>[$<param>=<value>(,<param>=<value>)*][$<salt>[$<hash>]]
// with one slight amendment to ease the transition, we're writing out the bytes in hex // with one slight amendment to ease the transition, we're writing out the bytes in hex
// rather than making them a BASE64 string with stripped padding // rather than making them a BASE64 string with stripped padding
private string _id; private string _id;
private Dictionary<string, string> _parameters = new Dictionary<string, string>(); private Dictionary<string, string> _parameters = new Dictionary<string, string>();
private string _salt; private string _salt;
private byte[] _saltBytes; private byte[] _saltBytes;
private string _hash; private string _hash;
private byte[] _hashBytes;
public string Id { get => _id; set => _id = value; }
public Dictionary<string, string> Parameters { get => _parameters; set => _parameters = value; }
public string Salt { get => _salt; set => _salt = value; }
public byte[] SaltBytes { get => _saltBytes; set => _saltBytes = value; }
public string Hash { get => _hash; set => _hash = value; }
public byte[] HashBytes { get => _hashBytes; set => _hashBytes = value; }
private byte[] _hashBytes;
public string Id { get => _id; set => _id = value; }
public Dictionary<string, string> Parameters { get => _parameters; set => _parameters = value; }
public string Salt { get => _salt; set => _salt = value; }
public byte[] SaltBytes { get => _saltBytes; set => _saltBytes = value; }
public string Hash { get => _hash; set => _hash = value; }
public byte[] HashBytes { get => _hashBytes; set => _hashBytes = value; }
public PasswordHash(string storageString) public PasswordHash(string storageString)
{ {
string[] splitted = storageString.Split('$'); string[] splitted = storageString.Split('$');
@ -46,14 +46,14 @@ namespace MediaBrowser.Model.Cryptography
{ {
if (!string.IsNullOrEmpty(paramset)) if (!string.IsNullOrEmpty(paramset))
{ {
string[] fields = paramset.Split('='); string[] fields = paramset.Split('=');
if (fields.Length == 2) if (fields.Length == 2)
{ {
_parameters.Add(fields[0], fields[1]); _parameters.Add(fields[0], fields[1]);
} }
else else
{ {
throw new Exception($"Malformed parameter in password hash string {paramset}"); throw new Exception($"Malformed parameter in password hash string {paramset}");
} }
} }
} }
@ -89,31 +89,31 @@ namespace MediaBrowser.Model.Cryptography
} }
} }
public PasswordHash(ICryptoProvider cryptoProvider) public PasswordHash(ICryptoProvider cryptoProvider)
{ {
_id = cryptoProvider.DefaultHashMethod; _id = cryptoProvider.DefaultHashMethod;
_saltBytes = cryptoProvider.GenerateSalt(); _saltBytes = cryptoProvider.GenerateSalt();
_salt = ConvertToByteString(SaltBytes); _salt = ConvertToByteString(SaltBytes);
} }
public static byte[] ConvertFromByteString(string byteString) public static byte[] ConvertFromByteString(string byteString)
{ {
List<byte> bytes = new List<byte>(); List<byte> bytes = new List<byte>();
for (int i = 0; i < byteString.Length; i += 2) for (int i = 0; i < byteString.Length; i += 2)
{ {
// TODO: NetStandard2.1 switch this to use a span instead of a substring. // TODO: NetStandard2.1 switch this to use a span instead of a substring.
bytes.Add(Convert.ToByte(byteString.Substring(i, 2),16)); bytes.Add(Convert.ToByte(byteString.Substring(i, 2), 16));
} }
return bytes.ToArray(); return bytes.ToArray();
} }
public static string ConvertToByteString(byte[] bytes) public static string ConvertToByteString(byte[] bytes)
{ {
return BitConverter.ToString(bytes).Replace("-", ""); return BitConverter.ToString(bytes).Replace("-", "");
} }
private string SerializeParameters() private string SerializeParameters()
{ {
@ -121,33 +121,33 @@ namespace MediaBrowser.Model.Cryptography
foreach (var KVP in _parameters) foreach (var KVP in _parameters)
{ {
ReturnString += $",{KVP.Key}={KVP.Value}"; ReturnString += $",{KVP.Key}={KVP.Value}";
} }
if ((!string.IsNullOrEmpty(ReturnString)) && ReturnString[0] == ',') if ((!string.IsNullOrEmpty(ReturnString)) && ReturnString[0] == ',')
{ {
ReturnString = ReturnString.Remove(0, 1); ReturnString = ReturnString.Remove(0, 1);
} }
return ReturnString; return ReturnString;
} }
public override string ToString() public override string ToString()
{ {
string outString = "$" +_id; string outString = "$" + _id;
string paramstring = SerializeParameters(); string paramstring = SerializeParameters();
if (!string.IsNullOrEmpty(paramstring)) if (!string.IsNullOrEmpty(paramstring))
{ {
outString += $"${paramstring}"; outString += $"${paramstring}";
} }
if (!string.IsNullOrEmpty(_salt)) if (!string.IsNullOrEmpty(_salt))
{ {
outString += $"${_salt}"; outString += $"${_salt}";
} }
outString += $"${_hash}"; outString += $"${_hash}";
return outString; return outString;
} }
} }
} }