Skip to content
This repository has been archived by the owner on Jan 6, 2023. It is now read-only.

Fix length of generated key for generic curves #5

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

matluca
Copy link

@matluca matluca commented May 20, 2022

According to RFC4492 section 5.10 "the premaster
secret is the x-coordinate of the ECDH shared secret
elliptic curve point represented as an octet string.
Note that this octet string (Z in IEEE 1363 terminology),
as output by FE2OSP (Field Element to Octet String
Conversion Primitive), has constant length for any given
field; leading zeros found in this octet string MUST
NOT be truncated."

Therefore, FillBytes() and not Bytes() must be used
to convert the x-coordinate into []byte.

Notice that this is also done by the standard golang/tls
library when implementing Diffie-Hellman. (https://github.com/golang/go/blob/master/src/crypto/tls/key_schedule.go#L176)

According to RFC8422 section 5.10 "the premaster
secret is the x-coordinate of the ECDH shared secret
elliptic curve point represented as an octet string.
Note that this octet string (Z in IEEE 1363 terminology),
as output by FE2OSP (Field Element to Octet String
Conversion Primitive), has constant length for any given
field; leading zeros found in this octet string MUST
NOT be truncated."

Therefore, `FillBytes()` and not `Bytes()` must be used
to convert the x-coordinate into `[]byte`.

Notice that this is also done by the standard golang/tls
library when implementing Diffie-Hellman.
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

1 participant