-
-
Notifications
You must be signed in to change notification settings - Fork 581
Open
Description
I think awesome library would benefit from having age.Encrypt
- not yet write anything to the returned
writer(but do that on the first write). - making the writer creation non-blocking is nice (see below).
The conclusion for that come from trying to wrap an src io.Reader to an encrypted reader (ot be used in other applications, e.g. pushing to an S3 etc).
The following doEncrypt will block cause pr is not yet read when age.Encrypt is called -> block.
package main
import (
"bytes"
"fmt"
"io"
"filippo.io/age"
)
func wrapEncrypt(src io.Reader) (io.Reader, error) {
publicKey := "age1cy0su9fwf3gf9mw868g5yut09p6nytfmmnktexz2ya5uqg9vl9sss4euqm"
recipient, err := age.ParseX25519Recipient(publicKey)
if err != nil {
return nil, err
}
rp, wp := io.Pipe()
encryptedWrite, err := age.Encrypt(wp, recipient)
if err != nil {
return nil, err
}
_, err = io.Copy(encryptedWrite, src)
if err != nil {
return nil, err
}
defer encryptedWrite.Close()
return rp, nil
}
func main() {
inputStr := "this is some secret thing"
input := bytes.NewBufferString(inputStr)
output, err := wrapEncrypt(input)
if err != nil {
panic(err)
}
encryptedContents, err := io.ReadAll(output)
if err != nil {
panic(err)
}
fmt.Println(inputStr)
fmt.Println()
fmt.Println(string(encryptedContents))
}
Metadata
Metadata
Assignees
Labels
No labels