2023-09-21 12:07:18 +00:00
|
|
|
package model
|
|
|
|
|
|
|
|
import (
|
|
|
|
"cli-go/internal/crypto"
|
2023-09-23 04:05:37 +00:00
|
|
|
"cli-go/utils/encoding"
|
2023-09-21 12:07:18 +00:00
|
|
|
"log"
|
|
|
|
)
|
|
|
|
|
|
|
|
type EncString struct {
|
|
|
|
CipherText string `json:"cipherText"`
|
|
|
|
Nonce string `json:"nonce"`
|
|
|
|
}
|
|
|
|
|
2023-09-22 16:15:01 +00:00
|
|
|
func MakeEncString(plainTextBytes []byte, key []byte) *EncString {
|
|
|
|
cipher, nonce, err := crypto.EncryptChaCha20poly1305(plainTextBytes, key)
|
2023-09-21 12:07:18 +00:00
|
|
|
if err != nil {
|
|
|
|
log.Fatalf("failed to encrypt %s", err)
|
|
|
|
}
|
|
|
|
return &EncString{
|
2023-09-23 04:05:37 +00:00
|
|
|
CipherText: encoding.EncodeBase64(cipher),
|
|
|
|
Nonce: encoding.EncodeBase64(nonce),
|
2023-09-21 12:07:18 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-09-22 16:15:01 +00:00
|
|
|
func (e *EncString) MustDecrypt(key []byte) []byte {
|
2023-09-23 04:05:37 +00:00
|
|
|
plainBytes, err := crypto.DecryptChaCha20poly1305(encoding.DecodeBase64(e.CipherText), key, encoding.DecodeBase64(e.Nonce))
|
2023-09-21 12:07:18 +00:00
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
2023-09-22 16:15:01 +00:00
|
|
|
return plainBytes
|
2023-09-21 12:07:18 +00:00
|
|
|
}
|