Skip to main content

Ethereum: How to generate Ed25519 public key from private key using libsodium?

By February 13, 2025CRYPTOCURRENCY

Generating Ed25519 public key from private key using libsodium

As more cryptocurrencies and blockchain projects begin to adopt advanced cryptographic technologies, understanding how to securely generate keys becomes increasingly important. In this article, we will examine the process of generating Ed25519 public key from Ed25519 private key in JavaScript using the popular libsodium library.

What is Ed25519?

Ethereum: How to generate Ed25519 public key from private key using libsodium?

Ed25519 is a digital signature scheme that uses Elliptic Curve Cryptography (ECC) to provide secure public key encryption and digital signatures. It is designed to be faster than RSA in most use cases and to provide better performance compared to hardware implementations. Ed25519 keys are typically generated using a pair of private and public keys known as ECDSA (Elliptic Curve Digital Signature Algorithm).

Why do we need this guide?

While many cryptocurrencies and blockchain projects may already be using Ed25519 technology, understanding how to securely generate keys from private keys is essential to ensuring the security and integrity of cryptographic operations.

In this article, we will show you how to use libsodium, a lightweight library for cryptographic operations, to generate an Ed25519 public key from an Ed25519 private key. We will cover creating a new public key using a private key (called “re-encryption”) and creating a new private key using a public key.

Installation

Before you begin, make sure that libsodium is installed on your system. You can install it using npm:

npm install libsodium

Generating the Ed25519 public key from the Ed25519 private key using libsodium

Here is an example code snippet that shows how to generate the Ed25519 public key from the Ed25519 private key using libsodium:

const sodium = require('libsodium');

// Load Ed25519's private and public keys into memory

sodium.loadKeyFile(privateKey, (err, privateKey) => {

if (error) {

console error(err);

return;

}

// Export the private key as a string

const privateKeyStr = sodium.exportPrivateKey(privateKey, 'hex');

// Create public key Ed25519 from private key

const publicKey = sodium.publickeyFromPrivate(privateKeyStr);

// Print the generated public key

console.log(Ed25519 Public Key: ${sodium.exportPublicKey(publicKey)});

});

In this code snippet:

  • We load Ed25519’s private and public keys into memory using sodium.loadKeyFile.

  • The private key is exported as a string in hexadecimal format, which can be easily stored or transferred.

  • We create the public key Ed25519 from the private key using sodium.publickeyFromPrivate and print it to the console.

Generating private key from public key using libsodium

Here’s another example code snippet that shows how to create a new private key from an existing Ed25519 public key using libsodium:

const sodium = require('libsodium');

// Load Ed25519's public key into memory

sodium.loadKeyFile(publicKey, (err, publicKey) => {

if (error) {

console error(err);

return;

}

// Export the public key as a string in hexadecimal format

const publicKeyStr = sodium.exportPublicKey(publicKey);

// Create a new private key from the public key

const privateKey = sodium.privatekeyFromPublic(keyPoint: publicKeyStr);

// Print the generated private key

console.log(private key Ed25519 (new key): ${sodium.exportPrivateKey(privateKey, 'hex')});

});

In this code snippet:

  • We load the Ed25519 public key into memory using sodium.loadKeyFile.

  • Export the public key as a string in hexadecimal format and print it to the console.
  • We create a new private key from the public key using sodium.privatekeyFromPublic and store it in the privateKey variable.

Ethereum Encoding

Leave a Reply