Add depot, attendant, jetfire, optimus, ota services with kustomize overlays
This commit is contained in:
104
services/ota_update_go/utils/fileencryptor.go
Normal file
104
services/ota_update_go/utils/fileencryptor.go
Normal file
@@ -0,0 +1,104 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
"otaupdate/services"
|
||||
|
||||
"github.com/fiskerinc/cloud-services/pkg/common"
|
||||
"github.com/fiskerinc/cloud-services/pkg/security"
|
||||
"github.com/fiskerinc/cloud-services/pkg/utils/randomvalues"
|
||||
)
|
||||
|
||||
type FileEncryptor struct {
|
||||
FileID string
|
||||
encrypter security.IEncryptor
|
||||
streamer security.IEncryptedStream
|
||||
fileKey *common.FileKey
|
||||
}
|
||||
|
||||
func NewEncryptor() (*FileEncryptor, error) {
|
||||
instance := FileEncryptor{}
|
||||
err := instance.init()
|
||||
return &instance, err
|
||||
}
|
||||
|
||||
func (fe *FileEncryptor) SaveFileKey()(err error){
|
||||
err = fe.saveData(fe.fileKey)
|
||||
return
|
||||
}
|
||||
|
||||
func (fe *FileEncryptor) init() error {
|
||||
filekey, err := fe.getKey()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
fe.fileKey = filekey
|
||||
/* err = fe.saveData(filekey)
|
||||
if err != nil {
|
||||
return err
|
||||
} */
|
||||
|
||||
encrypter, _, err := security.NewEncryptor(filekey.Key, filekey.Auth, filekey.Nonce)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
streamer, err := security.NewEncryptedStream(encrypter, security.WithUniqueId([]byte(filekey.FileID)))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
fe.FileID = filekey.FileID
|
||||
fe.encrypter = encrypter
|
||||
fe.streamer = streamer
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (fe *FileEncryptor) saveData(filekey *common.FileKey) error {
|
||||
_, err := services.GetDB().GetFileKeys().Insert(*filekey)
|
||||
return err
|
||||
}
|
||||
|
||||
func (fe *FileEncryptor) getKey() (*common.FileKey, error) {
|
||||
var err error
|
||||
generator := randomvalues.NewGenerator("")
|
||||
filekey := common.FileKey{}
|
||||
|
||||
filekey.FileID, err = generator.GetUniformDistHex()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
value, err := generator.GetBytes(32)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
filekey.Key = value
|
||||
|
||||
value, err = generator.GetBytes(16)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
filekey.Auth = value
|
||||
|
||||
value, err = generator.GetBytes(12)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
filekey.Nonce = value
|
||||
|
||||
return &filekey, nil
|
||||
|
||||
}
|
||||
|
||||
func (fe *FileEncryptor) Encrypt(input []byte) []byte {
|
||||
return fe.streamer.Write(input)
|
||||
}
|
||||
|
||||
func (fe *FileEncryptor) Close() {
|
||||
fe.FileID = ""
|
||||
fe.encrypter.Close()
|
||||
fe.encrypter = nil
|
||||
fe.streamer = nil
|
||||
}
|
||||
Reference in New Issue
Block a user