Files
Go_I2p/lib/crypto/README.md
2025-02-26 21:03:51 -05:00

16 KiB

crypto

-- import "github.com/go-i2p/go-i2p/lib/crypto"

crypto.svg

package for i2p specific crpytography

Usage

const (
	IPAD = byte(0x36)
	OPAD = byte(0x5C)
)
var (
	Ed25519EncryptTooBig    = oops.Errorf("failed to encrypt data, too big for Ed25519")
	ErrInvalidPublicKeySize = oops.Errorf("failed to verify: invalid ed25519 public key size")
)
var (
	ElgDecryptFail   = oops.Errorf("failed to decrypt elgamal encrypted data")
	ElgEncryptTooBig = oops.Errorf("failed to encrypt data, too big for elgamal")
)
var (
	ErrBadSignatureSize = oops.Errorf("bad signature size")
	ErrInvalidKeyFormat = oops.Errorf("invalid key format")
	ErrInvalidSignature = oops.Errorf("invalid signature")
)
var Curve25519EncryptTooBig = oops.Errorf("failed to encrypt data, too big for Curve25519")
var SHA256 = sha256.Sum256

func ElgamalGenerate

func ElgamalGenerate(priv *elgamal.PrivateKey, rand io.Reader) (err error)

generate an elgamal key pair

type AESSymmetricDecrypter

type AESSymmetricDecrypter struct {
	Key []byte
	IV  []byte
}

AESSymmetricDecrypter implements the Decrypter interface using AES

func (*AESSymmetricDecrypter) Decrypt

func (d *AESSymmetricDecrypter) Decrypt(data []byte) ([]byte, error)

Decrypt decrypts data using AES-CBC with PKCS#7 padding

func (*AESSymmetricDecrypter) DecryptNoPadding

func (d *AESSymmetricDecrypter) DecryptNoPadding(data []byte) ([]byte, error)

DecryptNoPadding decrypts data using AES-CBC without padding

type AESSymmetricEncrypter

type AESSymmetricEncrypter struct {
	Key []byte
	IV  []byte
}

AESSymmetricEncrypter implements the Encrypter interface using AES

func (*AESSymmetricEncrypter) Encrypt

func (e *AESSymmetricEncrypter) Encrypt(data []byte) ([]byte, error)

Encrypt encrypts data using AES-CBC with PKCS#7 padding

func (*AESSymmetricEncrypter) EncryptNoPadding

func (e *AESSymmetricEncrypter) EncryptNoPadding(data []byte) ([]byte, error)

EncryptNoPadding encrypts data using AES-CBC without padding

type AESSymmetricKey

type AESSymmetricKey struct {
	Key []byte // AES key (must be 16, 24, or 32 bytes for AES-128, AES-192, AES-256)
	IV  []byte // Initialization Vector (must be 16 bytes for AES)
}

AESSymmetricKey represents a symmetric key for AES encryption/decryption

func (*AESSymmetricKey) Len

func (k *AESSymmetricKey) Len() int

Len returns the length of the key

func (*AESSymmetricKey) NewDecrypter

func (k *AESSymmetricKey) NewDecrypter() (Decrypter, error)

NewDecrypter creates a new AESSymmetricDecrypter

func (*AESSymmetricKey) NewEncrypter

func (k *AESSymmetricKey) NewEncrypter() (Encrypter, error)

NewEncrypter creates a new AESSymmetricEncrypter

type Curve25519Encryption

type Curve25519Encryption struct {
}

func (*Curve25519Encryption) Encrypt

func (curve25519 *Curve25519Encryption) Encrypt(data []byte) (enc []byte, err error)

func (*Curve25519Encryption) EncryptPadding

func (curve25519 *Curve25519Encryption) EncryptPadding(data []byte, zeroPadding bool) (encrypted []byte, err error)

type Curve25519PrivateKey

type Curve25519PrivateKey curve25519.PrivateKey

type Curve25519PublicKey

type Curve25519PublicKey []byte

func (Curve25519PublicKey) Len

func (k Curve25519PublicKey) Len() int

func (Curve25519PublicKey) NewEncrypter

func (elg Curve25519PublicKey) NewEncrypter() (enc Encrypter, err error)

func (Curve25519PublicKey) NewVerifier

func (k Curve25519PublicKey) NewVerifier() (v Verifier, err error)

type Curve25519Signer

type Curve25519Signer struct {
}

func (*Curve25519Signer) Sign

func (s *Curve25519Signer) Sign(data []byte) (sig []byte, err error)

func (*Curve25519Signer) SignHash

func (s *Curve25519Signer) SignHash(h []byte) (sig []byte, err error)

type Curve25519Verifier

type Curve25519Verifier struct {
}

func (*Curve25519Verifier) Verify

func (v *Curve25519Verifier) Verify(data, sig []byte) (err error)

func (*Curve25519Verifier) VerifyHash

func (v *Curve25519Verifier) VerifyHash(h, sig []byte) (err error)

type DSAPrivateKey

type DSAPrivateKey [20]byte

func (DSAPrivateKey) Generate

func (k DSAPrivateKey) Generate() (s DSAPrivateKey, err error)

func (DSAPrivateKey) Len

func (k DSAPrivateKey) Len() int

func (DSAPrivateKey) NewSigner

func (k DSAPrivateKey) NewSigner() (s Signer, err error)

create a new dsa signer

func (DSAPrivateKey) Public

func (k DSAPrivateKey) Public() (pk DSAPublicKey, err error)

type DSAPublicKey

type DSAPublicKey [128]byte

func (DSAPublicKey) Bytes

func (k DSAPublicKey) Bytes() []byte

func (DSAPublicKey) Len

func (k DSAPublicKey) Len() int

func (DSAPublicKey) NewVerifier

func (k DSAPublicKey) NewVerifier() (v Verifier, err error)

create a new dsa verifier

type DSASigner

type DSASigner struct {
}

func (*DSASigner) Sign

func (ds *DSASigner) Sign(data []byte) (sig []byte, err error)

func (*DSASigner) SignHash

func (ds *DSASigner) SignHash(h []byte) (sig []byte, err error)

type DSAVerifier

type DSAVerifier struct {
}

func (*DSAVerifier) Verify

func (v *DSAVerifier) Verify(data, sig []byte) (err error)

verify data with a dsa public key

func (*DSAVerifier) VerifyHash

func (v *DSAVerifier) VerifyHash(h, sig []byte) (err error)

verify hash of data with a dsa public key

type Decrypter

type Decrypter interface {
	// decrypt a block of data
	// return decrypted block or nil and error if error happens
	Decrypt(data []byte) ([]byte, error)
}

decrypts data

type ECDSAVerifier

type ECDSAVerifier struct {
}

func (*ECDSAVerifier) Verify

func (v *ECDSAVerifier) Verify(data, sig []byte) (err error)

verify a block of data by hashing it and comparing the hash against the signature

func (*ECDSAVerifier) VerifyHash

func (v *ECDSAVerifier) VerifyHash(h, sig []byte) (err error)

verify a signature given the hash

type ECP256PrivateKey

type ECP256PrivateKey [32]byte

type ECP256PublicKey

type ECP256PublicKey [64]byte

func (ECP256PublicKey) Bytes

func (k ECP256PublicKey) Bytes() []byte

func (ECP256PublicKey) Len

func (k ECP256PublicKey) Len() int

func (ECP256PublicKey) NewVerifier

func (k ECP256PublicKey) NewVerifier() (Verifier, error)

type ECP384PrivateKey

type ECP384PrivateKey [48]byte

type ECP384PublicKey

type ECP384PublicKey [96]byte

func (ECP384PublicKey) Bytes

func (k ECP384PublicKey) Bytes() []byte

func (ECP384PublicKey) Len

func (k ECP384PublicKey) Len() int

func (ECP384PublicKey) NewVerifier

func (k ECP384PublicKey) NewVerifier() (Verifier, error)

type ECP521PrivateKey

type ECP521PrivateKey [66]byte

type ECP521PublicKey

type ECP521PublicKey [132]byte

func (ECP521PublicKey) Bytes

func (k ECP521PublicKey) Bytes() []byte

func (ECP521PublicKey) Len

func (k ECP521PublicKey) Len() int

func (ECP521PublicKey) NewVerifier

func (k ECP521PublicKey) NewVerifier() (Verifier, error)

type Ed25519Decrypter

type Ed25519Decrypter struct {
}

func (*Ed25519Decrypter) Decrypt

func (d *Ed25519Decrypter) Decrypt(data []byte) ([]byte, error)

func (*Ed25519Decrypter) DecryptPadding

func (d *Ed25519Decrypter) DecryptPadding(data []byte, zeroPadding bool) ([]byte, error)

type Ed25519Encryption

type Ed25519Encryption struct {
}

func (*Ed25519Encryption) Encrypt

func (ed25519 *Ed25519Encryption) Encrypt(data []byte) (enc []byte, err error)

func (*Ed25519Encryption) EncryptPadding

func (ed25519 *Ed25519Encryption) EncryptPadding(data []byte, zeroPadding bool) (encrypted []byte, err error)

type Ed25519PrivateKey

type Ed25519PrivateKey ed25519.PrivateKey

func (Ed25519PrivateKey) Bytes

func (k Ed25519PrivateKey) Bytes() []byte

func (Ed25519PrivateKey) Generate

func (k Ed25519PrivateKey) Generate() (SigningPrivateKey, error)

func (Ed25519PrivateKey) Len

func (k Ed25519PrivateKey) Len() int

func (Ed25519PrivateKey) NewDecrypter

func (k Ed25519PrivateKey) NewDecrypter() (Decrypter, error)

func (Ed25519PrivateKey) NewSigner

func (k Ed25519PrivateKey) NewSigner() (Signer, error)

func (Ed25519PrivateKey) Public

func (k Ed25519PrivateKey) Public() (SigningPublicKey, error)

func (Ed25519PrivateKey) Zero

func (k Ed25519PrivateKey) Zero()

type Ed25519PublicKey

type Ed25519PublicKey []byte

func CreateEd25519PublicKeyFromBytes

func CreateEd25519PublicKeyFromBytes(data []byte) (Ed25519PublicKey, error)

func (Ed25519PublicKey) Bytes

func (k Ed25519PublicKey) Bytes() []byte

func (Ed25519PublicKey) Len

func (k Ed25519PublicKey) Len() int

func (Ed25519PublicKey) NewEncrypter

func (elg Ed25519PublicKey) NewEncrypter() (enc Encrypter, err error)

func (Ed25519PublicKey) NewVerifier

func (k Ed25519PublicKey) NewVerifier() (v Verifier, err error)

type Ed25519Signer

type Ed25519Signer struct {
}

func (*Ed25519Signer) Sign

func (s *Ed25519Signer) Sign(data []byte) (sig []byte, err error)

func (*Ed25519Signer) SignHash

func (s *Ed25519Signer) SignHash(h []byte) (sig []byte, err error)

type Ed25519Verifier

type Ed25519Verifier struct {
}

func (*Ed25519Verifier) Verify

func (v *Ed25519Verifier) Verify(data, sig []byte) (err error)

func (*Ed25519Verifier) VerifyHash

func (v *Ed25519Verifier) VerifyHash(h, sig []byte) (err error)

type ElgPrivateKey

type ElgPrivateKey [256]byte

func (ElgPrivateKey) Len

func (elg ElgPrivateKey) Len() int

func (ElgPrivateKey) NewDecrypter

func (elg ElgPrivateKey) NewDecrypter() (dec Decrypter, err error)

type ElgPublicKey

type ElgPublicKey [256]byte

func (ElgPublicKey) Bytes

func (elg ElgPublicKey) Bytes() []byte

func (ElgPublicKey) Len

func (elg ElgPublicKey) Len() int

func (ElgPublicKey) NewEncrypter

func (elg ElgPublicKey) NewEncrypter() (enc Encrypter, err error)

type ElgamalEncryption

type ElgamalEncryption struct {
}

func (*ElgamalEncryption) Encrypt

func (elg *ElgamalEncryption) Encrypt(data []byte) (enc []byte, err error)

func (*ElgamalEncryption) EncryptPadding

func (elg *ElgamalEncryption) EncryptPadding(data []byte, zeroPadding bool) (encrypted []byte, err error)

type Encrypter

type Encrypter interface {
	// encrypt a block of data
	// return encrypted block or nil and error if an error happened
	Encrypt(data []byte) (enc []byte, err error)
}

encrypts data

type HMACDigest

type HMACDigest [16]byte

func I2PHMAC

func I2PHMAC(data []byte, k HMACKey) (d HMACDigest)

do i2p hmac

type HMACKey

type HMACKey [32]byte

type PrivateEncryptionKey

type PrivateEncryptionKey interface {
	// create a new decryption object for this private key to decrypt data encrypted to our public key
	// returns decrypter or nil and error if the private key is in a bad format
	NewDecrypter() (Decrypter, error)
}

type PrivateKey

type PrivateKey interface {
	// Public returns the public key corresponding to this private key
	Public() (SigningPublicKey, error)
	// Bytes returns the raw bytes of this private key
	Bytes() []byte
	// Zero clears all sensitive data from the private key
	Zero()
}

PrivateKey is an interface for private keys

type PublicEncryptionKey

type PublicEncryptionKey interface {
	// create a new encrypter to encrypt data to this public key
	NewEncrypter() (Encrypter, error)

	// length of this public key in bytes
	Len() int
}

type PublicKey

type PublicKey interface {
	Len() int
	Bytes() []byte
}

type RSA2048PrivateKey

type RSA2048PrivateKey [512]byte

type RSA2048PublicKey

type RSA2048PublicKey [256]byte

func (RSA2048PublicKey) Bytes

func (r RSA2048PublicKey) Bytes() []byte

Bytes implements SigningPublicKey.

func (RSA2048PublicKey) Len

func (r RSA2048PublicKey) Len() int

Len implements SigningPublicKey.

func (RSA2048PublicKey) NewVerifier

func (r RSA2048PublicKey) NewVerifier() (Verifier, error)

NewVerifier implements SigningPublicKey.

type RSA3072PrivateKey

type RSA3072PrivateKey [786]byte

type RSA3072PublicKey

type RSA3072PublicKey [384]byte

func (RSA3072PublicKey) Bytes

func (r RSA3072PublicKey) Bytes() []byte

Bytes implements SigningPublicKey.

func (RSA3072PublicKey) Len

func (r RSA3072PublicKey) Len() int

Len implements SigningPublicKey.

func (RSA3072PublicKey) NewVerifier

func (r RSA3072PublicKey) NewVerifier() (Verifier, error)

NewVerifier implements SigningPublicKey.

type RSA4096PrivateKey

type RSA4096PrivateKey [1024]byte

type RSA4096PublicKey

type RSA4096PublicKey [512]byte

func (RSA4096PublicKey) Bytes

func (r RSA4096PublicKey) Bytes() []byte

Bytes implements SigningPublicKey.

func (RSA4096PublicKey) Len

func (r RSA4096PublicKey) Len() int

Len implements SigningPublicKey.

func (RSA4096PublicKey) NewVerifier

func (r RSA4096PublicKey) NewVerifier() (Verifier, error)

NewVerifier implements SigningPublicKey.

type RecievingPublicKey

type RecievingPublicKey interface {
	Len() int
	Bytes() []byte
	NewEncrypter() (Encrypter, error)
}

type Signer

type Signer interface {
	// sign data with our private key by calling SignHash after hashing the data we are given
	// return signature or nil signature and error if an error happened
	Sign(data []byte) (sig []byte, err error)

	// sign hash of data with our private key
	// return signature or nil signature and error if an error happened
	SignHash(h []byte) (sig []byte, err error)
}

type for signing data

type SigningPrivateKey

type SigningPrivateKey interface {
	// create a new signer to sign data
	// return signer or nil and error if key format is invalid
	NewSigner() (Signer, error)
	// length of this private key
	Len() int
	// get public key or return nil and error if invalid key data in private key
	Public() (SigningPublicKey, error)
	// generate a new private key, put it into itself
	// returns itself or nil and error if an error occurs
	Generate() (SigningPrivateKey, error)
}

key for signing data

type SigningPublicKey

type SigningPublicKey interface {
	// create new Verifier to verify the validity of signatures
	// return verifier or nil and error if key format is invalid
	NewVerifier() (Verifier, error)
	// get the size of this public key
	Len() int
	Bytes() []byte
}

key for verifying data

type Tunnel

type Tunnel struct {
}

func NewTunnelCrypto

func NewTunnelCrypto(layerKey, ivKey TunnelKey) (t *Tunnel, err error)

func (*Tunnel) Decrypt

func (t *Tunnel) Decrypt(td *TunnelData)

func (*Tunnel) Encrypt

func (t *Tunnel) Encrypt(td *TunnelData)

encrypt tunnel data in place

type TunnelData

type TunnelData [1028]byte

type TunnelIV

type TunnelIV []byte

The initialization vector for a tunnel message

type TunnelKey

type TunnelKey [32]byte

A symetric key for encrypting tunnel messages

type Verifier

type Verifier interface {
	// verify hashed data with this signing key
	// return nil on valid signature otherwise error
	VerifyHash(h, sig []byte) error
	// verify an unhashed piece of data by hashing it and calling VerifyHash
	Verify(data, sig []byte) error
}

type for verifying signatures

crypto

github.com/go-i2p/go-i2p/lib/crypto