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.
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 notBytes()
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)