...
1 package edgeencrypt
2
3 import (
4 "context"
5 "crypto/rand"
6 "crypto/rsa"
7 "crypto/sha256"
8 _ "embed"
9 "testing"
10
11 "github.com/google/uuid"
12 )
13
14 var (
15
16 tlog []byte
17 )
18
19 func TestEncryptDecryptData(t *testing.T) {
20
21
22 privateKey, err := rsa.GenerateKey(rand.Reader, RSA2048)
23 if err != nil {
24 t.Fatalf("failed to generate private key: %v", err)
25 }
26 publicKey := &privateKey.PublicKey
27
28 pemPublicKey, err := ConvertRSAPublicKeyToPEM(publicKey)
29 if err != nil {
30 t.Fatalf("failed to convert public key to pem: %v", err)
31 }
32
33
34 data, err := EncryptData(pemPublicKey, tlog)
35 if err != nil {
36 t.Fatalf("failed to encrypt data: %v", err)
37 }
38
39 e := &EncryptedData{
40 BannerEdgeID: uuid.NewString(),
41 Channel: "my-channel",
42 ChannelID: uuid.NewString(),
43 KeyVersion: "1",
44 Data: data,
45 }
46 err = e.Valid()
47 if err != nil {
48 t.Fatalf("invalid encrypted data: %v", err)
49 }
50
51 ec := &EncryptionClaims{
52 ChannelID: e.ChannelID,
53 Channel: DecryptionJWTSecret,
54 Role: Decryption,
55 }
56 err = ec.Valid()
57 if err != nil {
58 t.Fatalf("invalid encryption claims data: %v", err)
59 }
60
61
62 decryptedData, err := DecryptData(context.Background(), e, ec,
63 func(_ context.Context, _, _, _ string, aesKey []byte) ([]byte, error) {
64 return rsa.DecryptOAEP(sha256.New(), rand.Reader, privateKey, aesKey, nil)
65 })
66 if err != nil {
67 t.Fatalf("failed to decrypt data: %v", err)
68 }
69
70 if string(tlog) != string(decryptedData) {
71 t.Fatalf("decrypted data is not equal to original data")
72 }
73 }
74
View as plain text