19
19
*/
20
20
final class EncryptionTest extends PHPUnit \Framework \TestCase
21
21
{
22
+ public function testBase64Encode (): void
23
+ {
24
+ $ plaintext = 'When I grow up, I want to be a watermelon ' ;
25
+ $ this ->assertEquals ('V2hlbiBJIGdyb3cgdXAsIEkgd2FudCB0byBiZSBhIHdhdGVybWVsb24 ' , $ this ->base64Encode ($ plaintext ));
26
+ }
27
+
28
+ public function testBase64Decode (): void
29
+ {
30
+ // Base64 URL-safe, no padding
31
+ $ this ->assertEquals ('When I grow up, I want to be a watermelon ' , $ this ->base64Decode ('V2hlbiBJIGdyb3cgdXAsIEkgd2FudCB0byBiZSBhIHdhdGVybWVsb24 ' ));
32
+ $ this ->assertEquals ('<<???>> ' , $ this ->base64Decode ('PDwPz8-Pg ' ));
33
+
34
+ // Standard Base64
35
+ $ this ->assertEquals ('When I grow up, I want to be a watermelon ' , $ this ->base64Decode ('V2hlbiBJIGdyb3cgdXAsIEkgd2FudCB0byBiZSBhIHdhdGVybWVsb24= ' ));
36
+ $ this ->assertEquals ('<<???>> ' , $ this ->base64Decode ('PDw/Pz8+Pg== ' ));
37
+ }
38
+
22
39
public function testDeterministicEncrypt (): void
23
40
{
24
- $ contentEncoding = " aes128gcm " ;
41
+ $ contentEncoding = ' aes128gcm ' ;
25
42
$ plaintext = 'When I grow up, I want to be a watermelon ' ;
26
- $ this ->assertEquals ('V2hlbiBJIGdyb3cgdXAsIEkgd2FudCB0byBiZSBhIHdhdGVybWVsb24 ' , Base64Url::encode ($ plaintext ));
27
43
28
44
$ payload = Encryption::padPayload ($ plaintext , 0 , $ contentEncoding );
29
- $ this ->assertEquals ('V2hlbiBJIGdyb3cgdXAsIEkgd2FudCB0byBiZSBhIHdhdGVybWVsb24C ' , Base64Url:: encode ($ payload ));
45
+ $ this ->assertEquals ('V2hlbiBJIGdyb3cgdXAsIEkgd2FudCB0byBiZSBhIHdhdGVybWVsb24C ' , $ this -> base64Encode ($ payload ));
30
46
31
47
$ userPublicKey = 'BCVxsr7N_eNgVRqvHtD0zTZsEc6-VV-JvLexhqUzORcxaOzi6-AYWXvTBHm4bjyPjs7Vd8pZGH6SRpkNtoIAiw4 ' ;
32
48
$ userAuthToken = 'BTBZMqHH6r4Tts7J_aSIgg ' ;
33
49
34
- $ localPublicKey = Base64Url:: decode ('BP4z9KsN6nGRTbVYI_c7VJSPQTBtkgcy27mlmlMoZIIgDll6e3vCYLocInmYWAmS6TlzAC8wEqKK6PBru3jl7A8 ' );
35
- $ salt = Base64Url:: decode ('DGv6ra1nlYgDCS1FRnbzlw ' );
50
+ $ localPublicKey = $ this -> base64Decode ('BP4z9KsN6nGRTbVYI_c7VJSPQTBtkgcy27mlmlMoZIIgDll6e3vCYLocInmYWAmS6TlzAC8wEqKK6PBru3jl7A8 ' );
51
+ $ salt = $ this -> base64Decode ('DGv6ra1nlYgDCS1FRnbzlw ' );
36
52
37
53
[$ localPublicKeyObjectX , $ localPublicKeyObjectY ] = Utils::unserializePublicKey ($ localPublicKey );
38
54
$ localJwk = new JWK ([
39
55
'kty ' => 'EC ' ,
40
56
'crv ' => 'P-256 ' ,
41
57
'd ' => 'yfWPiYE-n46HLnH0KqZOF1fJJU3MYrct3AELtAQ-oRw ' ,
42
- 'x ' => Base64Url:: encode ($ localPublicKeyObjectX ),
43
- 'y ' => Base64Url:: encode ($ localPublicKeyObjectY ),
58
+ 'x ' => $ this -> base64Encode ($ localPublicKeyObjectX ),
59
+ 'y ' => $ this -> base64Encode ($ localPublicKeyObjectY ),
44
60
]);
45
61
46
62
$ expected = [
47
63
'localPublicKey ' => $ localPublicKey ,
48
64
'salt ' => $ salt ,
49
- 'cipherText ' => Base64Url:: decode ( ' 8pfeW0KbunFT06SuDKoJH9Ql87S1QUrd irN6GcG7sFz1y1sqLgVi1VhjVkHsUoEsbI_0LpXMuGvnzQ ' ),
65
+ 'cipherText ' => $ this -> base64Decode ( ' 8pfeW0KbunFT06SuDKoJH9Ql87S1QUrdirN6GcG7sFz1y1sqLgVi1VhjVkHsUoEsbI_0LpXMuGvnzQ ' ),
50
66
];
51
67
52
68
$ result = Encryption::deterministicEncrypt (
@@ -59,17 +75,17 @@ public function testDeterministicEncrypt(): void
59
75
);
60
76
61
77
$ this ->assertEquals (Utils::safeStrlen ($ expected ['cipherText ' ]), Utils::safeStrlen ($ result ['cipherText ' ]));
62
- $ this ->assertEquals (Base64Url:: encode ($ expected ['cipherText ' ]), Base64Url:: encode ($ result ['cipherText ' ]));
78
+ $ this ->assertEquals ($ this -> base64Encode ($ expected ['cipherText ' ]), $ this -> base64Encode ($ result ['cipherText ' ]));
63
79
$ this ->assertEquals ($ expected , $ result );
64
80
}
65
81
66
82
public function testGetContentCodingHeader (): void
67
83
{
68
- $ localPublicKey = Base64Url:: decode ('BP4z9KsN6nGRTbVYI_c7VJSPQTBtkgcy27mlmlMoZIIgDll6e3vCYLocInmYWAmS6TlzAC8wEqKK6PBru3jl7A8 ' );
69
- $ salt = Base64Url:: decode ('DGv6ra1nlYgDCS1FRnbzlw ' );
84
+ $ localPublicKey = $ this -> base64Decode ('BP4z9KsN6nGRTbVYI_c7VJSPQTBtkgcy27mlmlMoZIIgDll6e3vCYLocInmYWAmS6TlzAC8wEqKK6PBru3jl7A8 ' );
85
+ $ salt = $ this -> base64Decode ('DGv6ra1nlYgDCS1FRnbzlw ' );
70
86
71
87
$ result = Encryption::getContentCodingHeader ($ salt , $ localPublicKey , "aes128gcm " );
72
- $ expected = Base64Url:: decode ('DGv6ra1nlYgDCS1FRnbzlwAAEABBBP4z9KsN6nGRTbVYI_c7VJSPQTBtkgcy27mlmlMoZIIgDll6e3vCYLocInmYWAmS6TlzAC8wEqKK6PBru3jl7A8 ' );
88
+ $ expected = $ this -> base64Decode ('DGv6ra1nlYgDCS1FRnbzlwAAEABBBP4z9KsN6nGRTbVYI_c7VJSPQTBtkgcy27mlmlMoZIIgDll6e3vCYLocInmYWAmS6TlzAC8wEqKK6PBru3jl7A8 ' );
73
89
74
90
$ this ->assertEquals (Utils::safeStrlen ($ expected ), Utils::safeStrlen ($ result ));
75
91
$ this ->assertEquals ($ expected , $ result );
@@ -81,7 +97,7 @@ public function testGetContentCodingHeader(): void
81
97
#[dataProvider('payloadProvider ' )]
82
98
public function testPadPayload (string $ payload , int $ maxLengthToPad , int $ expectedResLength ): void
83
99
{
84
- $ res = Encryption::padPayload ($ payload , $ maxLengthToPad , " aesgcm " );
100
+ $ res = Encryption::padPayload ($ payload , $ maxLengthToPad , ' aesgcm ' );
85
101
86
102
$ this ->assertStringContainsString ('test ' , $ res );
87
103
$ this ->assertEquals ($ expectedResLength , Utils::safeStrlen ($ res ));
@@ -99,4 +115,14 @@ public static function payloadProvider(): array
99
115
[str_repeat ('test ' , 1019 ).'te ' , Encryption::MAX_PAYLOAD_LENGTH , Encryption::MAX_PAYLOAD_LENGTH + 2 ],
100
116
];
101
117
}
118
+
119
+ protected function base64Decode (string $ value ): string
120
+ {
121
+ return Base64Url::decode ($ value );
122
+ }
123
+
124
+ protected function base64Encode (string $ value ): string
125
+ {
126
+ return Base64Url::encode ($ value );
127
+ }
102
128
}
0 commit comments