...

Source file src/edge-infra.dev/pkg/edge/edgeencrypt/encrypt_test.go

Documentation: edge-infra.dev/pkg/edge/edgeencrypt

     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  	//go:embed testdata/tlog.json
    16  	tlog []byte
    17  )
    18  
    19  func TestEncryptDecryptData(t *testing.T) {
    20  	// Generate RSA key pair
    21  	// we will be using gcp kms for this
    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  	// Encrypt data
    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  	// Decrypt data
    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