Commit 1e3bdaa
authored
feat: Readonly span support (#252)
# Changes
## Spans buffers and spans
Adds new methods that allow passing in a buffer
```
CreatePasswordHash(ReadOnlySpan<char> inputKey, ReadOnlySpan<char> salt,
Span<char> outputBuffer, out int outputBufferWritten,
HashType hashType = HashType.None,
EnhancedHashDelegate enhancedHashKeyGen = null)
```
Adds in buffer zeroing when no longer needed to reduce time in memory.
Changed targeting and csproj defined constants to ensure net8 still
gains the available support for span that came with the memory package
and netstandard support. This could potentially start at 4.7.2 but the
netstandard integration was iffy.
## Validate input length (Breaking)
If the usage doesn't make use of the enhanced hash generation to retain
entropy (aka the standard use) the library will throw when the input to
hash length is greater than 72 bytes.
This isn't standard behaviour in most bcrypt libraries where truncating
silently is the default.
But I believe this is necessary, should always have been in place, and
will force developers to decide deliberately to truncate input at 72 if
they wish to retain existing behaviour.
## Enhanced Hashing V3
* Split 'enhanced' versions into separate classes
* Swap func for delegate
* Add span based calls
Along with switching the func to a bog standard delegate, splitting the
enhanced versions into separate classes simplified maintaining the
previous versions and adding in the new version.
The v3 enhanced hash adds in keyed HMAC which apart from protecting
against theorical risks of shucking adds a further uniqueness to the
produced key material.
## Experimental SafeString support
Hate SafeString, it's filled with lies and was really only a useful
feature in Windows. In an API it should never be touched but there are
some cases in Windows apps where people still require it to tick a box
so I've added a sort of basic implementation
This code requires unsafe enabled so will probably be disabled
initially.
## SecureEquals check
This basically needed to be made for the span handling but also allowed
a few minor optimizations which mimic the code in the .net codebase.
## Net 10
We basically try to tag against the lts releases; the code may be
updated to target sts between releases to assertain if there is any
performance improvement worth having but otherwise its lts.
## Examples
The api uses the identity extension to enable bcrypt passwords; chucked
in a maui to test performance on android as we've been asked before by
people doing the hashing at the device level
## Release Benchmarks
Separate project that tests previous nuget package versions; its mostly
as a simple way to test for regressions in performance while the other
benchmark project is for testing components in a more targeted way.
Resolves #211170 files changed
Lines changed: 7193 additions & 33074 deletions
File tree
- .config
- .github
- codeql
- workflows
- benchmarks
- Diagnostic-Benchmarks
- Method-Benchmarks
- 3.2.1
- 3.5.perfmerge_1
- 4.0.0
- 4.0.3
- DecodeB64
- EncodeB64
- HashParser
- Release-Benchmarks
- benchmark
- docs
- docs
- examples
- AndroidTest
- Platforms
- Android
- Resources/values
- MacCatalyst
- Tizen
- Windows
- iOS
- Resources
- Properties
- Resources
- AppIcon
- Fonts
- Images
- Raw
- Splash
- Styles
- Api/WebApi
- wwwroot/lib
- bootstrap/dist/js
- jquery-validation-unobtrusive
- jquery-validation
- dist
- jquery
- dist
- ConsoleApp/ExampleConsoleApp
- src
- BCrypt.Net.IdentityExtensions
- Properties
- BCrypt.Net
- Properties
- tests
- BCrypt.Net.IdentityExtensions.Tests
- UnitTests
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
79 | 79 | | |
80 | 80 | | |
81 | 81 | | |
82 | | - | |
83 | | - | |
| 82 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
9 | 9 | | |
10 | 10 | | |
11 | 11 | | |
12 | | - | |
13 | | - | |
14 | 12 | | |
15 | 13 | | |
16 | 14 | | |
17 | 15 | | |
18 | 16 | | |
19 | | - | |
20 | | - | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
8 | 8 | | |
9 | 9 | | |
10 | 10 | | |
11 | | - | |
12 | | - | |
13 | | - | |
| 11 | + | |
14 | 12 | | |
15 | 13 | | |
16 | 14 | | |
| |||
29 | 27 | | |
30 | 28 | | |
31 | 29 | | |
32 | | - | |
| 30 | + | |
33 | 31 | | |
34 | 32 | | |
35 | 33 | | |
36 | 34 | | |
37 | | - | |
| 35 | + | |
38 | 36 | | |
39 | 37 | | |
40 | 38 | | |
41 | 39 | | |
42 | | - | |
| 40 | + | |
43 | 41 | | |
44 | | - | |
| 42 | + | |
45 | 43 | | |
46 | 44 | | |
47 | 45 | | |
| |||
56 | 54 | | |
57 | 55 | | |
58 | 56 | | |
59 | | - | |
60 | | - | |
61 | | - | |
62 | 57 | | |
63 | 58 | | |
64 | 59 | | |
65 | 60 | | |
66 | | - | |
| 61 | + | |
67 | 62 | | |
68 | 63 | | |
69 | 64 | | |
| |||
73 | 68 | | |
74 | 69 | | |
75 | 70 | | |
76 | | - | |
| 71 | + | |
77 | 72 | | |
78 | | - | |
| 73 | + | |
79 | 74 | | |
80 | 75 | | |
81 | 76 | | |
| |||
This file was deleted.
0 commit comments