Categorygithub.com/ecies/go/v2
modulepackage
2.0.10
Repository: https://github.com/ecies/go.git
Documentation: pkg.go.dev

# README

eciesgo

Go GoDoc Widget Go Report

Elliptic Curve Integrated Encryption Scheme for secp256k1, written in Go with minimal dependencies.

This is the Go version of ecies/py with a built-in class-like secp256k1 API, you may go there for detailed documentation of the mechanism under the hood.

Install

go get github.com/ecies/go/v2

Go 1.22 is required since 2.0.10.

⚠️ Please use version 2.0.3 and later. It's much faster and safer.

Quick Start

package main

import (
	ecies "github.com/ecies/go/v2"
	"log"
)

func main() {
	k, err := ecies.GenerateKey()
	if err != nil {
		panic(err)
	}
	log.Println("key pair has been generated")

	ciphertext, err := ecies.Encrypt(k.PublicKey, []byte("THIS IS THE TEST"))
	if err != nil {
		panic(err)
	}
	log.Printf("plaintext encrypted: %v\n", ciphertext)

	plaintext, err := ecies.Decrypt(k, ciphertext)
	if err != nil {
		panic(err)
	}
	log.Printf("ciphertext decrypted: %s\n", string(plaintext))
}

Benchmarks

With CGO:

goos: linux
goarch: amd64
pkg: github.com/ecies/go/v2
cpu: AMD Ryzen 7 5700G with Radeon Graphics         
BenchmarkEncrypt-16        12250             98122 ns/op            5185 B/op         61 allocs/op
BenchmarkDecrypt-16        23934             50046 ns/op            4097 B/op         46 allocs/op

Without CGO:

goos: linux
goarch: amd64
pkg: github.com/ecies/go/v2
cpu: AMD Ryzen 7 5700G with Radeon Graphics         
BenchmarkEncrypt-16        10000            112632 ns/op            5655 B/op         68 allocs/op
BenchmarkDecrypt-16        14038             85641 ns/op            4725 B/op         56 allocs/op

# Functions

Decrypt decrypts a passed message with a receiver private key, returns plaintext or decryption error.
Encrypt encrypts a passed message with a receiver public key, returns ciphertext or encryption error.
GenerateKey generates secp256k1 key pair.
NewPrivateKeyFromBytes decodes private key raw bytes, computes public key and returns PrivateKey instance.
NewPrivateKeyFromHex decodes hex form of private key raw bytes, computes public key and returns PrivateKey instance.
NewPublicKeyFromBytes decodes public key raw bytes and returns PublicKey instance; Supports both compressed and uncompressed public keys.
NewPublicKeyFromHex decodes hex form of public key raw bytes and returns PublicKey instance.

# Structs

PrivateKey is an instance of secp256k1 private key with nested public key.
PublicKey instance with nested elliptic.Curve interface (secp256k1 instance in our case).