Skip to content

Conversation

@mrwonko
Copy link

@mrwonko mrwonko commented Nov 7, 2023

This is a followup to #59. crypto/elliptic is deprecated, so I migrated to crypto/ecdh instead.

This may necessitate a major version bump, as Go 1.20 is now required, and VAPID keys are effectively mandatory. See commit message for additional information.

This new test mocks both the user agent (e.g. browser) and the push service
(e.g. Firestore) to verify that encryption and decryption works properly.

I used the RFCs as reference (RFC8291, RFC8292 & RFC 8188), but didn't follow
them to the letter. The result can successfully check all the signatures and
decrypt the content, so it seems to be working.

Instead of the deprecated crypto/elliptic functions, this makes heavy use of
crypto/ecdh, which require Go 1.20. But this is only a test dependency, library
users should not be impacted.
crypto/elliptic is subject for removal soon, use of crypto/ecdh is advised
instead.

This has a number of side-effects:

- the required Go version increases to Go 1.20
- the configured VAPID keys get verified now, and invalid keys are rejected
  - this necessitated changes to some tests
  - VAPID is effectively mandatory now (but all push services I know require it
    anyway)

go.mod has been updated to reflect the new requirement, and I ran `go mod tidy`
to clean up go.sum.

I also added additional error context by wrapping errors with fmt.Errorf's %w
verb. This was introduced in Go 1.13.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants