-
Notifications
You must be signed in to change notification settings - Fork 2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
x/crypto/bcrypt: add cooperative scheduling and cancellation to bcrypt #236
base: master
Are you sure you want to change the base?
Conversation
This PR (HEAD: 1c7e1d0) has been imported to Gerrit for code review. Please visit https://go-review.googlesource.com/c/crypto/+/444957 to see it. Tip: You can toggle comments from me using the |
Message from Gopher Robot: Patch Set 1: Congratulations on opening your first change. Thank you for your contribution! Next steps: Most changes in the Go project go through a few rounds of revision. This can be During May-July and Nov-Jan the Go project is in a code freeze, during which Please don’t reply on this GitHub thread. Visit golang.org/cl/444957. |
1c7e1d0
to
212fc8a
Compare
This PR (HEAD: 212fc8a) has been imported to Gerrit for code review. Please visit https://go-review.googlesource.com/c/crypto/+/444957 to see it. Tip: You can toggle comments from me using the |
Message from Roland Shoemaker: Patch Set 4: Hold+1 (1 comment) Please don’t reply on this GitHub thread. Visit golang.org/cl/444957. |
Message from Stojan Dimitrovski: Patch Set 5: (1 comment) Please don’t reply on this GitHub thread. Visit golang.org/cl/444957. |
Message from Gopher Robot: Patch Set 1: Congratulations on opening your first change. Thank you for your contribution! Next steps: Most changes in the Go project go through a few rounds of revision. This can be During May-July and Nov-Jan the Go project is in a code freeze, during which Please don’t reply on this GitHub thread. Visit golang.org/cl/444957. |
Message from Roland Shoemaker: Patch Set 4: Hold+1 (1 comment) Please don’t reply on this GitHub thread. Visit golang.org/cl/444957. |
Message from Stojan Dimitrovski: Patch Set 5: (1 comment) Please don’t reply on this GitHub thread. Visit golang.org/cl/444957. |
Password hashing functions like bcrypt are very CPU intensive and long running. On my Apple m1 chip, it takes about 75,455 microseconds for one password hash to be generated with the current DefaultCost of 10. Furthermore, the current algorithm is not cooperative with the rest of the Goroutines in the system, which can relatively easily create latency issues on other less CPU intensive Goroutines. This is in-particular a major issue in web servers implementing sign-in / sign-up with password.
This PR adds
CompareHashAndPasswordWithContext
andGenerateHashWithContext
functions that call intoruntime.Gosched()
every 64 bcrypt rounds (i.e. about every 4.7 ms on m1). These also allow obeying a cancellation signal from the context. The existing functions are intentionally not cooperative.(I'm open to tweaking the number of rounds.)
Fixes #56416