Hi,
I’m trying to generate an ED25519 public key from a secret key using Erlang’s crypto application. I’m able to generate a random keypair using:
iex(3)> {p, s} = :crypto.generate_key(:ecdh, :x25519)
{<<139, 150, 158, 47, 97, 82, 64, 37, 96, 216, 224, 34, 120, 116, 57, 178, 35,
123, 99, 142, 109, 65, 68, 80, 236, 154, 22, 112, 0, 37, 68, 114>>,
<<32, 123, 30, 206, 152, 213, 66, 101, 231, 22, 173, 128, 18, 84, 98, 91, 73,
205, 66, 27, 0, 12, 241, 122, 6, 207, 155, 100, 134, 170, 29, 125>>}
But if I want just to generate a public key from an existing secret key I get the following error:
iex(4)> :crypto.generate_key(:ecdh, :x25519, s)
** (ArgumentError) argument error
(crypto) :crypto.ec_key_generate({:evp, :x25519}, <<32, 123, 30, 206, 152, 213, 66, 101, 231, 22, 173, 128, 18, 84, 98, 91, 73, 205, 66, 27, 0, 12, 241, 122, 6, 207, 155, 100, 134, 170, 29, 125>>)
It looks like the ec_key_generate() function is implemented as a NIF and I can’t figure out what I’m doing wrong here.