22namespace Authwave \Test ;
33
44use Authwave \InitVector ;
5+ use Authwave \InvalidUserDataSerializationException ;
6+ use Authwave \ResponseCipherDecryptionException ;
57use Authwave \Token ;
8+ use Authwave \UserData ;
69use PHPUnit \Framework \TestCase ;
710
811class TokenTest extends TestCase {
@@ -32,4 +35,65 @@ public function testGetIv() {
3235 $ sut = new Token ("" , null , $ iv );
3336 self ::assertSame ($ iv , $ sut ->getIv ());
3437 }
38+
39+ public function testDecryptResponseCipherInvalid () {
40+ $ cipher = "0123456789abcdef " ;
41+ $ sut = new Token ("test-key " );
42+ self ::expectException (ResponseCipherDecryptionException::class);
43+ $ sut ->decryptResponseCipher ($ cipher );
44+ }
45+
46+ public function testDecryptResponseCipherBadJson () {
47+ $ key = uniqid ("test-key- " );
48+ $ secretIv = self ::createMock (InitVector::class);
49+ $ secretIv ->method ("getBytes " )
50+ ->willReturn (str_repeat ("0 " , 16 ));
51+ $ iv = self ::createMock (InitVector::class);
52+ $ iv ->method ("getBytes " )
53+ ->willReturn (str_repeat ("f " , 16 ));
54+ $ cipher = openssl_encrypt (
55+ "{badly-formed: json] " ,
56+ Token::ENCRYPTION_METHOD ,
57+ implode ("| " , [$ key , $ secretIv ->getBytes ()]),
58+ 0 ,
59+ $ iv ->getBytes ()
60+ );
61+ $ cipher = base64_encode ($ cipher );
62+ $ sut = new Token ($ key , $ secretIv , $ iv );
63+ self ::expectException (InvalidUserDataSerializationException::class);
64+ $ sut ->decryptResponseCipher ($ cipher );
65+ }
66+
67+ public function testDecryptResponseCipher () {
68+ $ key = uniqid ("test-key- " );
69+ $ secretIv = self ::createMock (InitVector::class);
70+ $ secretIv ->method ("getBytes " )
71+ ->willReturn (str_repeat ("0 " , 16 ));
72+ $ iv = self ::createMock (InitVector::class);
73+ $ iv ->method ("getBytes " )
74+ ->willReturn (str_repeat ("f " , 16 ));
75+
76+ $ uuid = "aabb-ccdd-eeff " ;
77+ $ email = "user@example.com " ;
78+ $ json = <<<JSON
79+ {
80+ "uuid": " $ uuid",
81+ "email": " $ email"
82+ }
83+ JSON ;
84+
85+ $ cipher = openssl_encrypt (
86+ $ json ,
87+ Token::ENCRYPTION_METHOD ,
88+ implode ("| " , [$ key , $ secretIv ->getBytes ()]),
89+ 0 ,
90+ $ iv ->getBytes ()
91+ );
92+ $ cipher = base64_encode ($ cipher );
93+ $ sut = new Token ($ key , $ secretIv , $ iv );
94+ $ userData = $ sut ->decryptResponseCipher ($ cipher );
95+ self ::assertInstanceOf (UserData::class, $ userData );
96+ self ::assertEquals ($ uuid , $ userData ->getUuid ());
97+ self ::assertEquals ($ email , $ userData ->getEmail ());
98+ }
3599}
0 commit comments