Documentation ¶
Overview ¶
ephemeral secret - ECDHE based on Curve25519 meets XChaCha20-Poly1305 AEAD supported by SHAKE256 hashed payload and secret salted with argon2.
This package provides functions to easily generate keys to en-/decrypt data through a derived key of the consensus secret from these keys (private/public). The knowledge of the senders (private) and receivers (public) keys are the base to exchange data through encrypted messages.
Protocol: Version[4], Sender's Public Key[32], Salt[32], Ciphertext[NonceSizeX[24]+Overhead[16]+Payload[x]], Hash[64]
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Message ¶
type Message struct {
// contains filtered or unexported fields
}
func New ¶
New needs my Key (private key) to Encrypt and uses your corresponding public key to Decrypt. If my is nil, then a new random key is generated and used. (one-way communication)
func (*Message) Decrypt ¶
Decrypt data for receivers (private) key in relation to parameters in Message.
Example ¶
package main import ( "fmt" "log" "catinello.eu/es" ) var Data []byte = []byte("Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.") func main() { // KEY MANAGEMENT AND ENCRYPTION // create new random private key for sender sender, err := es.NewKey() if err != nil { log.Fatal(err) } // create new random private key for receiver receiver, err := es.NewKey() if err != nil { log.Fatal(err) } // retrieve public key for receiver receiverPub, err := receiver.Public() if err != nil { log.Fatal(err) } // create new message for sender m1, err := es.New(sender) if err != nil { log.Fatal(err) } // encrypt Data in message (m1) for receiver's public key ct, err := m1.Encrypt(receiverPub, Data) if err != nil { log.Fatal(err) } // DECRYPTION // create new message for receiver m2, err := es.New(receiver) if err != nil { log.Fatal(err) } // decrypt ciphertext for message (m2) pt, err := m2.Decrypt(ct) if err != nil { log.Fatal(err) } // print first 11 bytes fmt.Println(string(pt[:11])) }
Output: Lorem ipsum
func (*Message) Encrypt ¶
Encrypt data for receiver (public) key in relation to parameters in Message.
Example ¶
package main import ( "fmt" "log" "catinello.eu/es" ) var Data []byte = []byte("Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.") func main() { // create new message with random keys as anonymous sender m, err := es.New(nil) if err != nil { log.Fatal(err) } // create new random private key k, err := es.NewKey() if err != nil { log.Fatal(err) } // retrieve public key from new private key (k) pub, err := k.Public() if err != nil { log.Fatal(err) } // encrypt Data in message (m) for receiver (pub = public key) ct, err := m.Encrypt(pub, Data) if err != nil { log.Fatal(err) } // ciphertext is 763 bytes long fmt.Println(len(ct)) }
Output: 763