Feature Request
Details
Problem Description
The overloads currently exposed in the public API are all using string parameters. Since .NET Core, spans have been widely preferred for a variety of reasons involving performance, and are adopted in many cases.
Proposed Solution
Either change all string parameters to ReadOnlySpan<char> parameters, or provide overloads taking ROS<char> parameters, optionally using the OverloadResolutionPriority attribute to enhance their visibility.
For HashPassword, we can also provide overloads accepting the input as ROS<char>, and outputting the value into a user-provided Span<char> buffer:
public void HashPassword(ReadOnlySpan<char> inputKey, Span<char> output);
public void HashPassword(ReadOnlySpan<char> inputKey, ReadOnlySpan<char> salt, Span<char> output);
...
Alternatives considered
The current workaround is to manually convert the ROS<char> into a newly allocated string in order to pass it into this library's functions. This is suboptimal for critical performance scenaria.
Additional context
With the 5.0.0 release nearing, this would also be a good breaking change to include. Another release with even more breaking changes would probably not be ideal.
Feature Request
Details
Problem Description
The overloads currently exposed in the public API are all using
stringparameters. Since .NET Core, spans have been widely preferred for a variety of reasons involving performance, and are adopted in many cases.Proposed Solution
Either change all
stringparameters toReadOnlySpan<char>parameters, or provide overloads takingROS<char>parameters, optionally using theOverloadResolutionPriorityattribute to enhance their visibility.For
HashPassword, we can also provide overloads accepting the input asROS<char>, and outputting the value into a user-providedSpan<char>buffer:Alternatives considered
The current workaround is to manually convert the
ROS<char>into a newly allocated string in order to pass it into this library's functions. This is suboptimal for critical performance scenaria.Additional context
With the 5.0.0 release nearing, this would also be a good breaking change to include. Another release with even more breaking changes would probably not be ideal.