/// <summary>Returns the hash in a string format, which includes the generated salt.</summary> /// <param name="password">The password.</param> /// <param name="opsLimit">Represents a maximum amount of computations to perform.</param> /// <param name="memLimit">Is the maximum amount of RAM that the function will use, in bytes.</param> /// <returns>Returns an zero-terminated ASCII encoded string of the computed password and hash.</returns> /// <exception cref="ArgumentNullException"></exception> /// <exception cref="ArgumentOutOfRangeException"></exception> /// <exception cref="OutOfMemoryException"></exception> public static string ScryptHashString(string password, long opsLimit, int memLimit) { if (password == null) { throw new ArgumentNullException("password", "Password cannot be null"); } if (opsLimit <= 0) { throw new ArgumentOutOfRangeException("opsLimit", "opsLimit cannot be zero or negative"); } if (memLimit <= 0) { throw new ArgumentOutOfRangeException("memLimit", "memLimit cannot be zero or negative"); } var buffer = new byte[SCRYPT_SALSA208_SHA256_STRBYTES]; var pass = Encoding.UTF8.GetBytes(password); SodiumCore.Init(); var ret = SodiumLibrary.crypto_pwhash_scryptsalsa208sha256_str(buffer, pass, pass.Length, opsLimit, memLimit); if (ret != 0) { throw new OutOfMemoryException("Internal error, hash failed (usually because the operating system refused to allocate the amount of requested memory)."); } return(Encoding.UTF8.GetString(buffer)); }
/// <summary>Returns the hash in a string format, which includes the generated salt.</summary> /// <param name="password">The password.</param> /// <param name="opsLimit">Represents a maximum amount of computations to perform.</param> /// <param name="memLimit">Is the maximum amount of RAM that the function will use, in bytes.</param> /// <returns>Returns an zero-terminated ASCII encoded string of the computed password and hash.</returns> /// <exception cref="ArgumentNullException"></exception> /// <exception cref="ArgumentOutOfRangeException"></exception> /// <exception cref="OutOfMemoryException"></exception> public static string ScryptHashString(string password, long opsLimit, int memLimit) { if (password == null) { throw new ArgumentNullException("password", "Password cannot be null"); } if (opsLimit <= 0) { throw new ArgumentOutOfRangeException("opsLimit", "opsLimit cannot be zero or negative"); } if (memLimit <= 0) { throw new ArgumentOutOfRangeException("memLimit", "memLimit cannot be zero or negative"); } var buffer = new byte[SCRYPT_SALSA208_SHA256_BYTES]; var pass = Encoding.UTF8.GetBytes(password); var ret = SodiumLibrary.crypto_pwhash_scryptsalsa208sha256_str(buffer, pass, pass.LongLength, opsLimit, memLimit); if (ret != 0) { throw new OutOfMemoryException("Internal error, hash failed"); } return(Encoding.UTF8.GetString(buffer)); }