16 KiB
crypto
-- import "github.com/go-i2p/go-i2p/lib/crypto"
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