github.com/crewjam/saml@v0.4.14/xmlenc/xmlenc_test.go (about)

     1  package xmlenc
     2  
     3  import (
     4  	"math/rand"
     5  	"os"
     6  	"testing"
     7  
     8  	"github.com/beevik/etree"
     9  	"gotest.tools/assert"
    10  	is "gotest.tools/assert/cmp"
    11  )
    12  
    13  func TestDataAES128(t *testing.T) {
    14  	t.Run("CBC", func(t *testing.T) {
    15  		RandReader = rand.New(rand.NewSource(0)) //nolint:gosec  // deterministic random numbers for tests
    16  		plaintext, err := os.ReadFile("testdata/encrypt-data-aes128-cbc.data")
    17  		assert.Check(t, err)
    18  
    19  		var ciphertext string
    20  		{
    21  			encrypter := AES128CBC
    22  			cipherEl, encErr := encrypter.Encrypt([]byte("abcdefghijklmnop"), plaintext, nil)
    23  			assert.Check(t, encErr)
    24  
    25  			doc := etree.NewDocument()
    26  			doc.SetRoot(cipherEl)
    27  			doc.IndentTabs()
    28  			ciphertext, err = doc.WriteToString()
    29  			assert.Check(t, err)
    30  		}
    31  
    32  		{
    33  			decrypter := AES128CBC
    34  			doc := etree.NewDocument()
    35  			err = doc.ReadFromString(ciphertext)
    36  			assert.Check(t, err)
    37  
    38  			actualPlaintext, err := decrypter.Decrypt(
    39  				[]byte("abcdefghijklmnop"), doc.Root())
    40  			assert.Check(t, err)
    41  			assert.Check(t, is.DeepEqual(plaintext, actualPlaintext))
    42  		}
    43  
    44  		{
    45  			decrypter := AES128CBC
    46  			doc := etree.NewDocument()
    47  			err := doc.ReadFromFile("testdata/encrypt-data-aes128-cbc.xml")
    48  			assert.Check(t, err)
    49  
    50  			actualPlaintext, err := decrypter.Decrypt([]byte("abcdefghijklmnop"), doc.Root())
    51  			assert.Check(t, err)
    52  			assert.Check(t, is.DeepEqual(plaintext, actualPlaintext))
    53  		}
    54  	})
    55  
    56  	t.Run("GCM", func(t *testing.T) {
    57  		RandReader = rand.New(rand.NewSource(0)) //nolint:gosec  // deterministic random numbers for tests
    58  		plaintext := "top secret message to use with gcm"
    59  
    60  		{
    61  			encrypter := AES128GCM
    62  			cipherEl, encErr := encrypter.Encrypt([]byte("abcdefghijklmnop"), []byte(plaintext), []byte("1234567890AZ"))
    63  			assert.Check(t, encErr)
    64  
    65  			doc := etree.NewDocument()
    66  			doc.SetRoot(cipherEl)
    67  			doc.IndentTabs()
    68  			_, err := doc.WriteToString()
    69  			assert.Check(t, err)
    70  		}
    71  	})
    72  }
    73  
    74  /*
    75  func TestAES256CBC(t *testing.T) {
    76  	RandReader = rand.New(rand.NewSource(0)) // deterministic random numbers for tests
    77  	doc := etree.NewDocument()
    78  	err := doc.ReadFromFile("testdata/plaintext.xml")
    79  	assert.NoError(t, err)
    80  
    81  	el := doc.FindElement("//PaymentInfo")
    82  	assert.NotNil(t, el)
    83  
    84  	tmpDoc := etree.NewDocument()
    85  	tmpDoc.SetRoot(el.Copy())
    86  	tmpBuf, _ := tmpDoc.WriteToString()
    87  
    88  	encrypter := AES256CBC
    89  	cipherEl, err := encrypter.Encrypt(
    90  		[]byte("abcdefghijklmnopqrstuvwxyz012345"), []byte(tmpBuf))
    91  	assert.NoError(t, err)
    92  
    93  	el.Child = nil
    94  	el.AddChild(cipherEl)
    95  
    96  	doc.IndentTabs()
    97  	s, _ := doc.WriteToString()
    98  	fmt.Println(s)
    99  }
   100  */