1919 */
2020final class EncryptionTest extends PHPUnit \Framework \TestCase
2121{
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+
2239 public function testDeterministicEncrypt (): void
2340 {
24- $ contentEncoding = " aes128gcm " ;
41+ $ contentEncoding = ' aes128gcm ' ;
2542 $ plaintext = 'When I grow up, I want to be a watermelon ' ;
26- $ this ->assertEquals ('V2hlbiBJIGdyb3cgdXAsIEkgd2FudCB0byBiZSBhIHdhdGVybWVsb24 ' , Base64UrlSafe::encodeUnpadded ($ plaintext ));
2743
2844 $ payload = Encryption::padPayload ($ plaintext , 0 , $ contentEncoding );
29- $ this ->assertEquals ('V2hlbiBJIGdyb3cgdXAsIEkgd2FudCB0byBiZSBhIHdhdGVybWVsb24C ' , Base64UrlSafe:: encodeUnpadded ($ payload ));
45+ $ this ->assertEquals ('V2hlbiBJIGdyb3cgdXAsIEkgd2FudCB0byBiZSBhIHdhdGVybWVsb24C ' , $ this -> base64Encode ($ payload ));
3046
3147 $ userPublicKey = 'BCVxsr7N_eNgVRqvHtD0zTZsEc6-VV-JvLexhqUzORcxaOzi6-AYWXvTBHm4bjyPjs7Vd8pZGH6SRpkNtoIAiw4 ' ;
3248 $ userAuthToken = 'BTBZMqHH6r4Tts7J_aSIgg ' ;
3349
34- $ localPublicKey = Base64UrlSafe:: decodeNoPadding ('BP4z9KsN6nGRTbVYI_c7VJSPQTBtkgcy27mlmlMoZIIgDll6e3vCYLocInmYWAmS6TlzAC8wEqKK6PBru3jl7A8 ' );
35- $ salt = Base64UrlSafe:: decodeNoPadding ('DGv6ra1nlYgDCS1FRnbzlw ' );
50+ $ localPublicKey = $ this -> base64Decode ('BP4z9KsN6nGRTbVYI_c7VJSPQTBtkgcy27mlmlMoZIIgDll6e3vCYLocInmYWAmS6TlzAC8wEqKK6PBru3jl7A8 ' );
51+ $ salt = $ this -> base64Decode ('DGv6ra1nlYgDCS1FRnbzlw ' );
3652
3753 [$ localPublicKeyObjectX , $ localPublicKeyObjectY ] = Utils::unserializePublicKey ($ localPublicKey );
3854 $ localJwk = new JWK ([
3955 'kty ' => 'EC ' ,
4056 'crv ' => 'P-256 ' ,
4157 'd ' => 'yfWPiYE-n46HLnH0KqZOF1fJJU3MYrct3AELtAQ-oRw ' ,
42- 'x ' => Base64UrlSafe:: encodeUnpadded ($ localPublicKeyObjectX ),
43- 'y ' => Base64UrlSafe:: encodeUnpadded ($ localPublicKeyObjectY ),
58+ 'x ' => $ this -> base64Encode ($ localPublicKeyObjectX ),
59+ 'y ' => $ this -> base64Encode ($ localPublicKeyObjectY ),
4460 ]);
4561
4662 $ expected = [
4763 'localPublicKey ' => $ localPublicKey ,
4864 'salt ' => $ salt ,
49- 'cipherText ' => Base64UrlSafe:: decodeNoPadding ('8pfeW0KbunFT06SuDKoJH9Ql87S1QUrdirN6GcG7sFz1y1sqLgVi1VhjVkHsUoEsbI_0LpXMuGvnzQ ' ),
65+ 'cipherText ' => $ this -> base64Decode ('8pfeW0KbunFT06SuDKoJH9Ql87S1QUrdirN6GcG7sFz1y1sqLgVi1VhjVkHsUoEsbI_0LpXMuGvnzQ ' ),
5066 ];
5167
5268 $ result = Encryption::deterministicEncrypt (
@@ -59,17 +75,17 @@ public function testDeterministicEncrypt(): void
5975 );
6076
6177 $ this ->assertEquals (Utils::safeStrlen ($ expected ['cipherText ' ]), Utils::safeStrlen ($ result ['cipherText ' ]));
62- $ this ->assertEquals (Base64UrlSafe:: encodeUnpadded ($ expected ['cipherText ' ]), Base64UrlSafe:: encodeUnpadded ($ result ['cipherText ' ]));
78+ $ this ->assertEquals ($ this -> base64Encode ($ expected ['cipherText ' ]), $ this -> base64Encode ($ result ['cipherText ' ]));
6379 $ this ->assertEquals ($ expected , $ result );
6480 }
6581
6682 public function testGetContentCodingHeader (): void
6783 {
68- $ localPublicKey = Base64UrlSafe:: decodeNoPadding ('BP4z9KsN6nGRTbVYI_c7VJSPQTBtkgcy27mlmlMoZIIgDll6e3vCYLocInmYWAmS6TlzAC8wEqKK6PBru3jl7A8 ' );
69- $ salt = Base64UrlSafe:: decodeNoPadding ('DGv6ra1nlYgDCS1FRnbzlw ' );
84+ $ localPublicKey = $ this -> base64Decode ('BP4z9KsN6nGRTbVYI_c7VJSPQTBtkgcy27mlmlMoZIIgDll6e3vCYLocInmYWAmS6TlzAC8wEqKK6PBru3jl7A8 ' );
85+ $ salt = $ this -> base64Decode ('DGv6ra1nlYgDCS1FRnbzlw ' );
7086
7187 $ result = Encryption::getContentCodingHeader ($ salt , $ localPublicKey , "aes128gcm " );
72- $ expected = Base64UrlSafe:: decodeNoPadding ('DGv6ra1nlYgDCS1FRnbzlwAAEABBBP4z9KsN6nGRTbVYI_c7VJSPQTBtkgcy27mlmlMoZIIgDll6e3vCYLocInmYWAmS6TlzAC8wEqKK6PBru3jl7A8 ' );
88+ $ expected = $ this -> base64Decode ('DGv6ra1nlYgDCS1FRnbzlwAAEABBBP4z9KsN6nGRTbVYI_c7VJSPQTBtkgcy27mlmlMoZIIgDll6e3vCYLocInmYWAmS6TlzAC8wEqKK6PBru3jl7A8 ' );
7389
7490 $ this ->assertEquals (Utils::safeStrlen ($ expected ), Utils::safeStrlen ($ result ));
7591 $ this ->assertEquals ($ expected , $ result );
@@ -81,7 +97,7 @@ public function testGetContentCodingHeader(): void
8197 #[dataProvider('payloadProvider ' )]
8298 public function testPadPayload (string $ payload , int $ maxLengthToPad , int $ expectedResLength ): void
8399 {
84- $ res = Encryption::padPayload ($ payload , $ maxLengthToPad , " aesgcm " );
100+ $ res = Encryption::padPayload ($ payload , $ maxLengthToPad , ' aesgcm ' );
85101
86102 $ this ->assertStringContainsString ('test ' , $ res );
87103 $ this ->assertEquals ($ expectedResLength , Utils::safeStrlen ($ res ));
@@ -99,4 +115,14 @@ public static function payloadProvider(): array
99115 [str_repeat ('test ' , 1019 ).'te ' , Encryption::MAX_PAYLOAD_LENGTH , Encryption::MAX_PAYLOAD_LENGTH + 2 ],
100116 ];
101117 }
118+
119+ protected function base64Decode (string $ value ): string
120+ {
121+ return Base64UrlSafe::decodeNoPadding ($ value );
122+ }
123+
124+ protected function base64Encode (string $ value ): string
125+ {
126+ return Base64UrlSafe::encodeUnpadded ($ value );
127+ }
102128}
0 commit comments