Project

eciesrb

0.0
No release in over 3 years
Elliptic Curve Integrated Encryption Scheme for secp256k1 in Ruby, based on libsecp256k1 and OpenSSL.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
 Dependencies

Runtime

~> 0.6.1
~> 3.3
 Project Readme

eciesrb

Gem Version License CI

Elliptic Curve Integrated Encryption Scheme for secp256k1 in Ruby.

This is a Ruby port of eciespy.

Prerequisite

Make sure you have secp256k1 and openssl installed, if not:

brew install secp256k1 openssl

Then set environment variables:

export C_INCLUDE_PATH=$(brew --prefix secp256k1)/include

Install

gem install eciesrb

Quick Start

# examples/quickstart.rb
require "ecies"

# Generate a secret key
sk = Ecies.generate_key
raw_sk = Ecies.decode_hex(sk.send(:serialize))
raw_pk = sk.pubkey.serialize(compressed: false)

# Encrypt data with the receiver's public key
plaintext = "Hello, World!"
encrypted = Ecies.encrypt(raw_pk, plaintext)

# Decrypt data with the receiver's secret key
decrypted = Ecies.decrypt(raw_sk, encrypted)
puts decrypted  # => "Hello, World!"

Sponsors

dotenvx

Configuration

You can customize the encryption behavior using a Config object:

# examples/config.rb
require "ecies"

Ecies::DEFAULT_CONFIG.is_ephemeral_key_compressed = true   # Use compressed ephemeral public key
Ecies::DEFAULT_CONFIG.is_hkdf_key_compressed = true        # Use compressed key for HKDF
Ecies::DEFAULT_CONFIG.symmetric_nonce_length = 16          # Nonce length for AES-GCM (default: 16)

Configuration Parameters

  • is_ephemeral_key_compressed (Boolean): Whether to use compressed format for the ephemeral public key. Default: false
  • is_hkdf_key_compressed (Boolean): Whether to use compressed format for HKDF key derivation. Default: false
  • symmetric_nonce_length (Integer): The nonce length for AES-GCM encryption. Options: 12, 16. Default: 16

API Reference

encrypt(receiver_pk, data, config = DEFAULT_CONFIG)

Encrypts data using the receiver's public key.

Parameters:

  • receiver_pk (String): The receiver's public key (raw bytes, serialized)
  • data (String): The plaintext data to encrypt (raw bytes)
  • config (Ecies::Config): Optional configuration object

Returns: (String) The encrypted data (ephemeral public key + encrypted data)

decrypt(receiver_sk, data, config = DEFAULT_CONFIG)

Decrypts data using the receiver's secret key.

Parameters:

  • receiver_sk (String): The receiver's secret key (raw bytes, serialized)
  • data (String): The encrypted data (ephemeral public key + encrypted data)
  • config (Ecies::Config): Optional configuration object

Returns: (String) The decrypted plaintext data (raw bytes)

Changelog

See CHANGELOG.md.