@@ -13,47 +13,93 @@ import (
1313)
1414
1515func TestCanDecrypt (t * testing.T ) {
16- doc := etree .NewDocument ()
17- err := doc .ReadFromBytes (golden .Get (t , "input.xml" ))
18- assert .Check (t , err )
19-
20- keyPEM := "-----BEGIN RSA PRIVATE KEY-----\n MIICXgIBAAKBgQDU8wdiaFmPfTyRYuFlVPi866WrH/2JubkHzp89bBQopDaLXYxi\n 3PTu3O6Q/KaKxMOFBqrInwqpv/omOGZ4ycQ51O9I+Yc7ybVlW94lTo2gpGf+Y/8E\n PsVbnZaFutRctJ4dVIp9aQ2TpLiGT0xX1OzBO/JEgq9GzDRf+B+eqSuglwIDAQAB\n AoGBAMuy1eN6cgFiCOgBsB3gVDdTKpww87Qk5ivjqEt28SmXO13A1KNVPS6oQ8SJ\n CT5Azc6X/BIAoJCURVL+LHdqebogKljhH/3yIel1kH19vr4E2kTM/tYH+qj8afUS\n JEmArUzsmmK8ccuNqBcllqdwCZjxL4CHDUmyRudFcHVX9oyhAkEA/OV1OkjM3CLU\n N3sqELdMmHq5QZCUihBmk3/N5OvGdqAFGBlEeewlepEVxkh7JnaNXAXrKHRVu/f/\n fbCQxH+qrwJBANeQERF97b9Sibp9xgolb749UWNlAdqmEpmlvmS202TdcaaT1msU\n 4rRLiQN3X9O9mq4LZMSVethrQAdX1whawpkCQQDk1yGf7xZpMJ8F4U5sN+F4rLyM\n Rq8Sy8p2OBTwzCUXXK+fYeXjybsUUMr6VMYTRP2fQr/LKJIX+E5ZxvcIyFmDAkEA\n yfjNVUNVaIbQTzEbRlRvT6MqR+PTCefC072NF9aJWR93JimspGZMR7viY6IM4lrr\n vBkm0F5yXKaYtoiiDMzlOQJADqmEwXl0D72ZG/2KDg8b4QZEmC9i5gidpQwJXUc6\n hU+IVQoLxRq0fBib/36K9tcrrO5Ba4iEvDcNY+D8yGbUtA==\n -----END RSA PRIVATE KEY-----\n "
21- b , _ := pem .Decode ([]byte (keyPEM ))
22- key , err := x509 .ParsePKCS1PrivateKey (b .Bytes )
23- assert .Check (t , err )
24-
25- el := doc .Root ().FindElement ("//EncryptedKey" )
26- buf , err := Decrypt (key , el )
27- assert .Check (t , err )
28- assert .Check (t , is .DeepEqual ([]byte {0xc , 0x70 , 0xa2 , 0xc8 , 0x15 , 0x74 , 0x89 , 0x3f , 0x36 , 0xd2 , 0x7c , 0x14 , 0x2a , 0x9b , 0xaa , 0xd9 },
29- buf ))
30-
31- el = doc .Root ().FindElement ("//EncryptedData" )
32- buf , err = Decrypt (key , el )
33- assert .Check (t , err )
34- golden .Assert (t , string (buf ), "plaintext.xml" )
16+ t .Run ("CBC" , func (t * testing.T ) {
17+ doc := etree .NewDocument ()
18+ err := doc .ReadFromBytes (golden .Get (t , "input.xml" ))
19+ assert .Check (t , err )
20+
21+ keyPEM := "-----BEGIN RSA PRIVATE KEY-----\n MIICXgIBAAKBgQDU8wdiaFmPfTyRYuFlVPi866WrH/2JubkHzp89bBQopDaLXYxi\n 3PTu3O6Q/KaKxMOFBqrInwqpv/omOGZ4ycQ51O9I+Yc7ybVlW94lTo2gpGf+Y/8E\n PsVbnZaFutRctJ4dVIp9aQ2TpLiGT0xX1OzBO/JEgq9GzDRf+B+eqSuglwIDAQAB\n AoGBAMuy1eN6cgFiCOgBsB3gVDdTKpww87Qk5ivjqEt28SmXO13A1KNVPS6oQ8SJ\n CT5Azc6X/BIAoJCURVL+LHdqebogKljhH/3yIel1kH19vr4E2kTM/tYH+qj8afUS\n JEmArUzsmmK8ccuNqBcllqdwCZjxL4CHDUmyRudFcHVX9oyhAkEA/OV1OkjM3CLU\n N3sqELdMmHq5QZCUihBmk3/N5OvGdqAFGBlEeewlepEVxkh7JnaNXAXrKHRVu/f/\n fbCQxH+qrwJBANeQERF97b9Sibp9xgolb749UWNlAdqmEpmlvmS202TdcaaT1msU\n 4rRLiQN3X9O9mq4LZMSVethrQAdX1whawpkCQQDk1yGf7xZpMJ8F4U5sN+F4rLyM\n Rq8Sy8p2OBTwzCUXXK+fYeXjybsUUMr6VMYTRP2fQr/LKJIX+E5ZxvcIyFmDAkEA\n yfjNVUNVaIbQTzEbRlRvT6MqR+PTCefC072NF9aJWR93JimspGZMR7viY6IM4lrr\n vBkm0F5yXKaYtoiiDMzlOQJADqmEwXl0D72ZG/2KDg8b4QZEmC9i5gidpQwJXUc6\n hU+IVQoLxRq0fBib/36K9tcrrO5Ba4iEvDcNY+D8yGbUtA==\n -----END RSA PRIVATE KEY-----\n "
22+ b , _ := pem .Decode ([]byte (keyPEM ))
23+ key , err := x509 .ParsePKCS1PrivateKey (b .Bytes )
24+ assert .Check (t , err )
25+
26+ el := doc .Root ().FindElement ("//EncryptedKey" )
27+ buf , err := Decrypt (key , el )
28+ assert .Check (t , err )
29+ assert .Check (t , is .DeepEqual ([]byte {0xc , 0x70 , 0xa2 , 0xc8 , 0x15 , 0x74 , 0x89 , 0x3f , 0x36 , 0xd2 , 0x7c , 0x14 , 0x2a , 0x9b , 0xaa , 0xd9 },
30+ buf ))
31+
32+ el = doc .Root ().FindElement ("//EncryptedData" )
33+ buf , err = Decrypt (key , el )
34+ assert .Check (t , err )
35+ golden .Assert (t , string (buf ), "plaintext.xml" )
36+ })
37+
38+ t .Run ("GCM" , func (t * testing.T ) {
39+ doc := etree .NewDocument ()
40+ err := doc .ReadFromBytes (golden .Get (t , "input_gcm.xml" ))
41+ assert .Check (t , err )
42+
43+ keyPEM := golden .Get (t , "cert.key" )
44+ b , _ := pem .Decode (keyPEM )
45+ key , err := x509 .ParsePKCS8PrivateKey (b .Bytes )
46+ assert .Check (t , err )
47+
48+ el := doc .Root ().FindElement ("//EncryptedKey" )
49+ _ , err = Decrypt (key , el )
50+ assert .Check (t , err )
51+
52+ el = doc .Root ().FindElement ("//EncryptedData" )
53+ _ , err = Decrypt (key , el )
54+ assert .Check (t , err )
55+ })
3556}
3657
3758func TestCanDecryptWithoutCertificate (t * testing.T ) {
38- doc := etree .NewDocument ()
39- err := doc .ReadFromBytes (golden .Get (t , "input.xml" ))
40- assert .Check (t , err )
41-
42- el := doc .FindElement ("//ds:X509Certificate" )
43- el .Parent ().RemoveChild (el )
44-
45- keyPEM := golden .Get (t , "key.pem" )
46- b , _ := pem .Decode (keyPEM )
47- key , err := x509 .ParsePKCS1PrivateKey (b .Bytes )
48- assert .Check (t , err )
49-
50- el = doc .Root ().FindElement ("//EncryptedKey" )
51- buf , err := Decrypt (key , el )
52- assert .Check (t , err )
53- assert .Check (t , is .DeepEqual ([]byte {0xc , 0x70 , 0xa2 , 0xc8 , 0x15 , 0x74 , 0x89 , 0x3f , 0x36 , 0xd2 , 0x7c , 0x14 , 0x2a , 0x9b , 0xaa , 0xd9 }, buf ))
54-
55- el = doc .Root ().FindElement ("//EncryptedData" )
56- buf , err = Decrypt (key , el )
57- assert .Check (t , err )
58- golden .Assert (t , string (buf ), "plaintext.xml" )
59+ t .Run ("CBC" , func (t * testing.T ) {
60+ doc := etree .NewDocument ()
61+ err := doc .ReadFromBytes (golden .Get (t , "input.xml" ))
62+ assert .Check (t , err )
63+
64+ el := doc .FindElement ("//ds:X509Certificate" )
65+ el .Parent ().RemoveChild (el )
66+
67+ keyPEM := golden .Get (t , "key.pem" )
68+ b , _ := pem .Decode (keyPEM )
69+ key , err := x509 .ParsePKCS1PrivateKey (b .Bytes )
70+ assert .Check (t , err )
71+
72+ el = doc .Root ().FindElement ("//EncryptedKey" )
73+ buf , err := Decrypt (key , el )
74+ assert .Check (t , err )
75+ assert .Check (t , is .DeepEqual ([]byte {0xc , 0x70 , 0xa2 , 0xc8 , 0x15 , 0x74 , 0x89 , 0x3f , 0x36 , 0xd2 , 0x7c , 0x14 , 0x2a , 0x9b , 0xaa , 0xd9 }, buf ))
76+
77+ el = doc .Root ().FindElement ("//EncryptedData" )
78+ buf , err = Decrypt (key , el )
79+ assert .Check (t , err )
80+ golden .Assert (t , string (buf ), "plaintext.xml" )
81+ })
82+
83+ t .Run ("GCM" , func (t * testing.T ) {
84+ doc := etree .NewDocument ()
85+ err := doc .ReadFromBytes (golden .Get (t , "input_gcm.xml" ))
86+ assert .Check (t , err )
87+
88+ el := doc .FindElement ("//ds:X509Certificate" )
89+ el .Parent ().RemoveChild (el )
90+
91+ keyPEM := golden .Get (t , "cert.key" )
92+ b , _ := pem .Decode (keyPEM )
93+ key , err := x509 .ParsePKCS8PrivateKey (b .Bytes )
94+ assert .Check (t , err )
95+
96+ el = doc .Root ().FindElement ("//EncryptedKey" )
97+ _ , err = Decrypt (key , el )
98+ assert .Check (t , err )
99+
100+ el = doc .Root ().FindElement ("//EncryptedData" )
101+ _ , err = Decrypt (key , el )
102+ assert .Check (t , err )
103+ //assertion.NotNil(t, plaintext)
104+ })
59105}
0 commit comments