github.com/newrelic/go-agent@v3.26.0+incompatible/internal/obfuscate.go (about)

     1  // Copyright 2020 New Relic Corporation. All rights reserved.
     2  // SPDX-License-Identifier: Apache-2.0
     3  
     4  package internal
     5  
     6  import (
     7  	"encoding/base64"
     8  	"errors"
     9  )
    10  
    11  // Deobfuscate deobfuscates a byte array.
    12  func Deobfuscate(in string, key []byte) ([]byte, error) {
    13  	if len(key) == 0 {
    14  		return nil, errors.New("key cannot be zero length")
    15  	}
    16  
    17  	decoded, err := base64.StdEncoding.DecodeString(in)
    18  	if err != nil {
    19  		return nil, err
    20  	}
    21  
    22  	out := make([]byte, len(decoded))
    23  	for i, c := range decoded {
    24  		out[i] = c ^ key[i%len(key)]
    25  	}
    26  
    27  	return out, nil
    28  }
    29  
    30  // Obfuscate obfuscates a byte array for transmission in CAT and RUM.
    31  func Obfuscate(in, key []byte) (string, error) {
    32  	if len(key) == 0 {
    33  		return "", errors.New("key cannot be zero length")
    34  	}
    35  
    36  	out := make([]byte, len(in))
    37  	for i, c := range in {
    38  		out[i] = c ^ key[i%len(key)]
    39  	}
    40  
    41  	return base64.StdEncoding.EncodeToString(out), nil
    42  }