41 lines
1.1 KiB
Go
41 lines
1.1 KiB
Go
package files
|
|
|
|
import (
|
|
"io"
|
|
|
|
"github.com/didiercrunch/filou/asymetric"
|
|
"github.com/didiercrunch/filou/contract"
|
|
"github.com/didiercrunch/filou/envelop"
|
|
"github.com/didiercrunch/filou/helper"
|
|
"github.com/didiercrunch/filou/payload"
|
|
)
|
|
|
|
func getEncryptorAndSigner(acceptedContract *contract.AcceptedContract) (asymetric.PublicKeyEncryptor, asymetric.Signer, error) {
|
|
errs := make([]error, 0, 2)
|
|
signer, err := asymetric.GetSigner(acceptedContract)
|
|
if err != nil {
|
|
errs = append(errs, err)
|
|
}
|
|
|
|
encryptor, err := asymetric.GetPublicKeyEncryptor(acceptedContract)
|
|
if err != nil {
|
|
errs = append(errs, err)
|
|
}
|
|
return encryptor, signer, helper.JoinErrors(errs)
|
|
}
|
|
|
|
func EncryptFile(reader io.Reader, writer io.Writer, acceptedContract *contract.AcceptedContract) error {
|
|
encryptor, signer, err := getEncryptorAndSigner(acceptedContract)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
payload_, err := payload.GetPayload(reader, acceptedContract)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
envelop := envelop.NewEnveloper(encryptor, payload_, signer)
|
|
return envelop.WriteToWriter(writer)
|
|
}
|