elgamal

package
v0.0.0-...-2e5819c Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 24, 2023 License: BSD-3-Clause Imports: 5 Imported by: 0

Documentation

Overview

Package elgamal implements ElGamal encryption, suitable for OpenPGP, as specified in "A Public-Key Cryptosystem and a Signature Scheme Based on Discrete Logarithms," IEEE Transactions on Information Theory, v. IT-31, n. 4, 1985, pp. 469-472.

This form of ElGamal embeds PKCS#1 v1.5 padding, which may make it unsuitable for other protocols. RSA should be used in preference in any case.

Deprecated: this package was only provided to support ElGamal encryption in OpenPGP. The golang.org/x/crypto/openpgp package is now deprecated (see https://golang.org/issue/44226), and ElGamal in the OpenPGP ecosystem has compatibility and security issues (see https://eprint.iacr.org/2021/923). Moreover, this package doesn't protect against side-channel attacks.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Decrypt

func Decrypt(priv *PrivateKey, c1, c2 *big.Int) (msg []byte, err error)

Decrypt takes two integers, resulting from an ElGamal encryption, and returns the plaintext of the message. An error can result only if the ciphertext is invalid. Users should keep in mind that this is a padding oracle and thus, if exposed to an adaptive chosen ciphertext attack, can be used to break the cryptosystem. See “Chosen Ciphertext Attacks Against Protocols Based on the RSA Encryption Standard PKCS #1”, Daniel Bleichenbacher, Advances in Cryptology (Crypto '98),

func Encrypt

func Encrypt(random io.Reader, pub *PublicKey, msg []byte) (c1, c2 *big.Int, err error)

Encrypt encrypts the given message to the given public key. The result is a pair of integers. Errors can result from reading random, or because msg is too large to be encrypted to the public key.

Types

type PrivateKey

type PrivateKey struct {
	PublicKey
	X *big.Int
}

PrivateKey represents an ElGamal private key.

type PublicKey

type PublicKey struct {
	G, P, Y *big.Int
}

PublicKey represents an ElGamal public key.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL