apple / swift-crypto

Open-source implementation of a substantial portion of the API of Apple CryptoKit suitable for use on Linux platforms.
https://apple.github.io/swift-crypto
Apache License 2.0
1.45k stars 157 forks source link

Make Curve25519 `PublicKey`s conform to `Hashable` #175

Open Sajjon opened 1 year ago

Sajjon commented 1 year ago

Make Curve25519 PublicKeys conform to Hashable

N.B. Merge open PR #173 first (or if #173 is closed, close this one too), since this PR builds on top of that.

Checklist

If you've made changes to gyb files

Motivation:

PublicKey's are fundamental building blocks within EC-oriented code bases. They can act as a natural key in Dictionaries and otherwise important property of larger structs, which us developers often would like to make Hashable. Today, Curve25519 public keys prevent auto-synthesis of Hashable for any structs they are members of, thus Curve25519 keys ought to be Hashable!

This poses no security risk nor any performance downgrade.

This PR is an addition of open PR #173.

Modifications:

Curve25519.KeyAgreement.PublicKey and Curve25519.Signing.PublicKey have been made Hashable and unit tests have been added.

Result:

Curve25519.KeyAgreement.PublicKey and Curve25519.Signing.PublicKey are now Hashable