func ExampleNewEncryptArmor62Stream() { var err error // Make a new Keyring, initialized to be empty keyring := basic.NewKeyring() // The test message plaintext := "The Magic Words are Squeamish Ossifrage" // Make a secret key for the sender var sender saltpack.BoxSecretKey sender, err = keyring.GenerateBoxKey() if err != nil { return } // And one for the receiver var receiver saltpack.BoxSecretKey receiver, err = keyring.GenerateBoxKey() if err != nil { return } // AllReceivers can contain more receivers (like the sender) // but for now, just the one. var output bytes.Buffer allReceivers := []saltpack.BoxPublicKey{receiver.GetPublicKey()} var input io.WriteCloser input, err = saltpack.NewEncryptArmor62Stream(&output, sender, allReceivers, "") if err != nil { return } // Write plaintext into the returned WriteCloser stream input.Write([]byte(plaintext)) // And close when we're done input.Close() // The decrypted message var plaintextOutput io.Reader _, plaintextOutput, _, err = saltpack.NewDearmor62DecryptStream(&output, keyring) if err != nil { return } // Copy all of the data out of the output decrypted stream, and into standard // output, here for testing / comparison purposes. io.Copy(os.Stdout, plaintextOutput) os.Stdout.Write([]byte{'\n'}) // Output: // The Magic Words are Squeamish Ossifrage }
// SaltpackEncrypt reads from the given source, encrypts it for the given // receivers from the given sender, and writes it to sink. If // Binary is false, the data written to sink will be armored. func SaltpackEncrypt(g *GlobalContext, arg *SaltpackEncryptArg) error { var receiverBoxKeys []saltpack.BoxPublicKey for _, k := range arg.Receivers { if arg.HideRecipients { receiverBoxKeys = append(receiverBoxKeys, hiddenNaclBoxPublicKey(k)) } else { receiverBoxKeys = append(receiverBoxKeys, naclBoxPublicKey(k)) } } var bsk saltpack.BoxSecretKey if !arg.Sender.IsNil() { bsk = naclBoxSecretKey(arg.Sender) } var plainsink io.WriteCloser var err error if arg.Binary { plainsink, err = saltpack.NewEncryptStream(arg.Sink, bsk, receiverBoxKeys) } else { plainsink, err = saltpack.NewEncryptArmor62Stream(arg.Sink, bsk, receiverBoxKeys, KeybaseSaltpackBrand) } if err != nil { return err } n, err := io.Copy(plainsink, arg.Source) if err != nil { return err } g.Log.Debug("Encrypt: wrote %d bytes", n) if err := plainsink.Close(); err != nil { return err } if err := arg.Sink.Close(); err != nil { return err } return nil }