1<?php 2 3//define('OBS_DEBUG', 2); 4 5include(dirname(__FILE__) . '/../includes/sql-config.inc.php'); 6//include(dirname(__FILE__) . '/../includes/defaults.inc.php'); 7//include(dirname(__FILE__) . '/../config.php'); 8//include(dirname(__FILE__) . '/../includes/definitions.inc.php'); 9//include(dirname(__FILE__) . '/../includes/functions.inc.php'); 10 11class IncludesEncryptTest extends \PHPUnit\Framework\TestCase 12{ 13 14 /** 15 * @dataProvider providerSafeBase64 16 * @group base64 17 */ 18 public function testSafeBase64Encode($string, $result) 19 { 20 $this->assertSame($result, safe_base64_encode($string)); 21 } 22 23 /** 24 * @depends testSafeBase64Encode 25 * @dataProvider providerSafeBase64 26 * @group base64 27 */ 28 public function testSafeBase64Decode($result, $string) 29 { 30 $this->assertSame($result, safe_base64_decode($string)); 31 } 32 33 /** 34 * @depends testSafeBase64Encode 35 * @dataProvider providerSafeBase64Random 36 * @group base64 37 */ 38 public function testSafeBase64Random($string) 39 { 40 $encode = safe_base64_encode($string); 41 $decode = safe_base64_decode($encode); 42 $this->assertSame($decode, $string); 43 } 44 45 public function providerSafeBase64() 46 { 47 $result = array( 48 array('Zlwv(,/E%>ieDr25Mr,-?ZOiL', 'Wmx3digsL0UlPmllRHIyNU1yLC0_Wk9pTA'), 49 array('w&8=K@.3}ULxnw"8+j`I\'yRQyL%RDijctN."', 'dyY4PUtALjN9VUx4bnciOCtqYEkneVJReUwlUkRpamN0Ti4i'), 50 array('T_\\u[WGG6c{o;i*J1/}\'5"\'nJJ.RY', 'VF9cdVtXR0c2Y3tvO2kqSjEvfSc1IiduSkouUlk'), 51 array('(?fY".Q/g7>=cjtK@p[m$v,', 'KD9mWSIuUS9nNz49Y2p0S0BwW20kdiw'), 52 array('kaoaDKPg;ek"rVi`4{mA,=KQZ%yOz<J;2~E', 'a2FvYURLUGc7ZWsiclZpYDR7bUEsPUtRWiV5T3o8SjsyfkU'), 53 array('Bow[#R+\'A*\':gIpRsL{3q-*2s', 'Qm93WyNSKydBKic6Z0lwUnNMezNxLSoycw'), 54 array('NG6JqTVjnZ>j}NP&#u%|e=i`n2@*QQ^T#o":xo/', 'Tkc2SnFUVmpuWj5qfU5QJiN1JXxlPWlgbjJAKlFRXlQjbyI6eG8v'), 55 array('e\',n,5S/UJoVZOTCHZx6Tn9Hsk7Cn2p', 'ZScsbiw1Uy9VSm9WWk9UQ0haeDZUbjlIc2s3Q24ycA'), 56 array('7+Wz}\'GgFUl=;=A8M]~b1GfS3P`mJCV#', 'NytXen0nR2dGVWw9Oz1BOE1dfmIxR2ZTM1BgbUpDViM'), 57 array('}.X8sPK0D)./=mQmVw,!A|VG', 'fS5YOHNQSzBEKS4vPW1RbVZ3LCFBfFZH'), 58 array('cDlpvOGgnIlojBkDmU?:vHLVo9{oYaj7u0^jx', 'Y0RscHZPR2duSWxvakJrRG1VPzp2SExWbzl7b1lhajd1MF5qeA'), 59 array('*loZQI@L[P?nq4f-px?J<~TDxK%BmLE,xdLs(C!]', 'KmxvWlFJQExbUD9ucTRmLXB4P0o8flREeEslQm1MRSx4ZExzKEMhXQ'), 60 array('{Nx6#5tgz">e"gLh2\\wkqYOH/ZvX&U*97NBL', 'e054NiM1dGd6Ij5lImdMaDJcd2txWU9IL1p2WCZVKjk3TkJM'), 61 array('ZGYP`R\\!{4`pZ^s1~4gSrbr^>mk', 'WkdZUGBSXCF7NGBwWl5zMX40Z1NyYnJePm1r'), 62 array('"J4l*A8%6D<#Q;0F~m3~m[|D938', 'Iko0bCpBOCU2RDwjUTswRn5tM35tW3xEOTM4'), 63 array('JzY:LY$(^0<Rv*TjAwAx[q/+mRGhA+I;,[2(y', 'SnpZOkxZJCheMDxSdipUakF3QXhbcS8rbVJHaEErSTssWzIoeQ'), 64 array('GQ&>l5tMX!CA<?5Wo-dMuw', 'R1EmPmw1dE1YIUNBPD81V28tZE11dw'), 65 array('!V=K\\?NkP^4ruh_*?<.UA&L6\\', 'IVY9S1w_TmtQXjRydWhfKj88LlVBJkw2XA'), 66 array('8,G(?\'A>_7p`>qbr!;9``1ssc$WZpc\'>KxD*?Py3', 'OCxHKD8nQT5fN3BgPnFiciE7OWBgMXNzYyRXWnBjJz5LeEQqP1B5Mw'), 67 array('6K\')zm&][xm0m/}G}<I)u)', 'NksnKXptJl1beG0wbS99R308SSl1KQ'), 68 ); 69 return $result; 70 } 71 72 public function providerSafeBase64Random() 73 { 74 $charlist = ' 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ`~!@#$%^&*()_+-=[]{}\|/?,.<>;:"'."'"; 75 $result = array(); 76 for ($i=0; $i<20; $i++) 77 { 78 $string = generate_random_string(mt_rand(20, 40), $charlist); 79 $result[] = array($string); 80 } 81 return $result; 82 } 83 84 /** 85 * @dataProvider providerEncrypt 86 * @group encrypt 87 */ 88 public function testEncrypt($string, $key, $result) 89 { 90 // Fot tests use static nonce 91 if (OBS_ENCRYPT_MODULE == 'sodium') 92 { 93 $nonce = 'test'; 94 } else { 95 $nonce = NULL; 96 } 97 98 $this->assertSame($result, encrypt($string, $key, $nonce)); 99 } 100 101 /** 102 * @dataProvider providerEncrypt 103 * @group decrypt 104 */ 105 public function testDecrypt($result, $key, $string) 106 { 107 // Fot tests use static nonce 108 if (OBS_ENCRYPT_MODULE == 'sodium') 109 { 110 $nonce = 'test'; 111 } else { 112 $nonce = NULL; 113 } 114 115 $this->assertSame($result, decrypt($string, $key, $nonce)); 116 } 117 118 /** 119 * @dataProvider providerEncryptIncorrect 120 * @group decrypt 121 */ 122 public function testDecryptIncorrect($result, $key, $string) 123 { 124 $this->assertFalse(decrypt($string, $key)); 125 } 126 127 /** 128 * @dataProvider providerEncryptRandom 129 * @group random 130 */ 131 public function testEncryptRandom($string, $key) 132 { 133 $encrypt = encrypt($string, $key); 134 $decrypt = decrypt($encrypt, $key); 135 $this->assertSame($decrypt, $string); 136 } 137 138 /** 139 * @requires extension sodium 140 * @dataProvider providerEncryptSodiumRandom 141 * @group random 142 */ 143 public function testEncryptSodiumRandom($string, $key) 144 { 145 $encrypt = encrypt_sodium($string, $key); 146 $decrypt = decrypt_sodium($encrypt, $key); 147 148 $this->assertSame($decrypt, $string); 149 } 150 151 public function providerEncrypt() 152 { 153 if (OBS_ENCRYPT_MODULE == 'sodium') 154 { 155 $result = array( 156 array('1)AEo@^Cq&n[i&K5Rbk)YmYto|iK6&:j,3w.9', '1e78V2', 'po1Yr3rjOhi04wDOsyt2W-DEbObyBNLtssRuIxENOe3worH1MiuqNr5ZGmbAElwoU76DFho'), 157 array(',>3(K!$eu0QXr6SBW[$', 'jPpz9', '8u73mdXrtw4ToQw9CBvMLfrugtd7gS_JtoU695dyInfpnm0'), 158 array('Xm+0JOu1pZ#mLu4k !h<J~nRC', 'q1I5LcMX', 'MgXHgCN6WtNNsjUW1i5p6sp9j79gT_BGDXhSYUFnRftEi8rZMn3bsgA'), 159 array('nU1I|X61$s WT \'{Ia)25|\'f.F', 'tTfKUX6', 'Ut5IyaVVRaCYW2aJPAXc5qiiLsdJ1jd7sUAfr8LDqORrpk9NQcSd4aj-'), 160 array('3UrLXOOI/*/VW3\\@l8#DkLFpm(8U@$%bsKTmC', '803aRMNF', 'CRqvvvSTUaUCK3pQr2ScK4P1gewotrT76bIcCfeTX2Kz-USHTS1KjO2TAEykRtK3ITdiFIE'), 161 array('g&W$w[K(rt(jwWC{fYDw\'M;I/1gNo', 'MpRE', 'PVenPWwrPzd15RhKLLjIm9ma8iFAcNZnH34Ts2Br4pI5U5Hsw3fDjzpLwtMs'), 162 array('*R$oh3nu-pe2#}ovVT!Wr/Rk?hj<', 'EGqi', '2BlR5cS-6WGPz-xXHdh8mv79wncsR4Ca4HHDKiqh2pgtCeppn8-9RCFpK2A'), 163 array('CUo<&\\Te-s2O[zsQg&m%_', 'Jbyjh', 'Apxo7cRz4oQYzviARjDmYkZpNiCmS29i0quCu--sJJj58v6fmw'), 164 array('y+U/0i&:Z$]+\\G`<rPc|\\{-7e^', 'LuMhrEPs', 'wwtra16iR0qbMMhGWNmRlTFbjVDmZpanKoQOJ_-d4DFMi4cJ4S9Tu7Hs'), 165 array('=V>00QV807A7*seug3 fh^n;7\'w&CX0x!3P~', 'zbOj0', 'w5AKoKG_iGY41NzzeP4T3dZAqFnUUwo-Wky4WjbRB_fPNOtGuXxFpVuO3awmeV_ZiAwJDA'), 166 array('rl3yLUk<{bApLXJ@a@\\Y{M\\,z:4', 'QCGdqu', '4F6MQxnzl71QpP3vJ3yutgpLqFRYkCnez1gMVFIkhIZ4qN7RIl3x1Y6k_Q'), 167 array('*rF@W)b9GOu<[`RR1/,#FnQCE3PgI', 'QQOd', 'c6baoXI9uni5BAWaRYCYQF8v2WgHcGpeqeHkWP3Dp2QJ7KHKUxF2zNrarwpD'), 168 array('j$kY#JNym311~0hVo%HX@7Fsks(g', 'PxFdn97J', 'TwtFAgU85cU7ypq8EEx75BPk8RZaTS0bj7nEak3_4Rx6KTWFdB4RkM_Pwy8'), 169 array(']&rQB>~nOf!A4h7}X~G$\\!uD$zGc*a', '9wlzwu78', 'YwsuhTT5r9LGTCJoOzWLtrNJQqqCEHPTcqPzMTtY3LHQodU_QIm3z-TQccH62A'), 170 array('Y7RZTJV>U\\"mx3(C!5hKgBw-', '7RyavjK', 'osFXadNstXIwlACmVYICQXV-djwzcY1dYx1So7UcGYEAU-SJ_GwuBQ'), 171 array('!t#.;(bK}k@kVrf;#}Q-jp|;?hE|+.O', 'i1txZiB', 'e33OXAxT2XWXLODhYPgLNsed3EVvHfbTXShFS8IJNWkmKEyl3xKKTySwYk4MP-I'), 172 array('>1`k@Lr4|3ot4WrgA!g||8}vSZhBT=c13|,/_{', 'OGHuN', 'rO5gPJnZM8zHs3M-MzJHU-86zxvJBNwe_1cXGaJoR_nmcNNXaLJss0kaTp1zmS2zec_XmJb5'), 173 array('\\0TcEC6wGL# >JXv6 `eJ', '7zaLTGW', 'Fl2wMTFWLFP0pb02RlrGGut-HNm1DvAB7vC0xt0CXNJ1h4_hxg'), 174 array(':r")v$eXry,13E!{7?K.U%-@SDD', 'hvHW', 'kQwfSPwLmHBgz_n8wbQPhipQL_pD7ZJkdbc9IuUTE7MGpucR2ZeeibP5iw'), 175 array('q%S/wOQhM%f3G06C1#uJgjIMWf\\`', '4Zlb', 'A4uDbyfqHaXVSmRB2Hs6C4gIJKgKij7w_H0pgWJcTFskDlhR32h0jZdb2LI'), 176 ); 177 } else { 178 // Mcrypt based encode 179 $result = array( 180 array('1)AEo@^Cq&n[i&K5Rbk)YmYto|iK6&:j,3w.9', '1e78V2', '22x_TJwDCwSvVmx5eGYgZwR70vN03nytSZGiAgNPYebjrQmwYs-oBAqUmRd5B9jHlk4Dmq6B45clMfEDZj4Amg'), 181 array(',>3(K!$eu0QXr6SBW[$', 'jPpz9', 'shwqhvs-EBr4cPKAhKwx8Tg6hSMSyNjPHDh8p-e94qU'), 182 array('Xm+0JOu1pZ#mLu4k !h<J~nRC', 'q1I5LcMX', '3Ze4oHSqI5oN2AwGfFLqKerVIkIO8hcpTRmMFrpVMiY'), 183 array('nU1I|X61$s WT \'{Ia)25|\'f.F', 'tTfKUX6', 'UBBFIuqdWz-D59B1W9v4axN5N5BONcVxK13E_cVj6jM'), 184 array('3UrLXOOI/*/VW3\\@l8#DkLFpm(8U@$%bsKTmC', '803aRMNF', '7e7bKnx43eHNaz-BF3DcRDIyRXc_n7i8ANX4I0vtifzjpPPofy4GAuacKA5lWmhxLcPmm0hooEfR7NbR2RpqQA'), 185 array('g&W$w[K(rt(jwWC{fYDw\'M;I/1gNo', 'MpRE', '35tNZp_7BdOdl78Kr7g6C9l-tGUWsDGjnPaLSVvsdk4'), 186 array('*R$oh3nu-pe2#}ovVT!Wr/Rk?hj<', 'EGqi', 'tp1QhPUl_OY_SdSXlEk8uUj06J2ODFMG069SfR1UWTY'), 187 array('CUo<&\\Te-s2O[zsQg&m%_', 'Jbyjh', 'FH1bgmum4IhTeWT_WUS_P4aKUXTBUux-UDdpBxoypmI'), 188 array('y+U/0i&:Z$]+\\G`<rPc|\\{-7e^', 'LuMhrEPs', 'i9Q4ugsCpZS5M0xYwmm3rnvQcupBCNEzXvhYljpI6K8'), 189 array('=V>00QV807A7*seug3 fh^n;7\'w&CX0x!3P~', 'zbOj0', 'DzzUC_QTjgm09jUP6opubGBec-_y2t_qTzznu6GDW5dQH-9OwogLsh8bv1E56gMtBzneWrgyb0zv9ljdKi0ssQ'), 190 array('rl3yLUk<{bApLXJ@a@\\Y{M\\,z:4', 'QCGdqu', 'JTUFKcO0og8-NJtvl0PY8vQbLcjpBQzOI18doptwju8'), 191 array('*rF@W)b9GOu<[`RR1/,#FnQCE3PgI', 'QQOd', 'PoWS8Yy7cjN8cfk44Wd_mz3wiwf_zVVDk-Sh75UAt94'), 192 array('j$kY#JNym311~0hVo%HX@7Fsks(g', 'PxFdn97J', 'hWwJI1bh6LM6y6lsbekda6e4Gcedf7zkZRdKe882CAE'), 193 array(']&rQB>~nOf!A4h7}X~G$\\!uD$zGc*a', '9wlzwu78', 'uAL00RVr8X9MSU8Z4o63CpyoU8AQv8etF5aB1ZVayfU'), 194 array('Y7RZTJV>U\\"mx3(C!5hKgBw-', '7RyavjK', 'M55vgEwiLOKLMSPmLGldunnkBBRAPQAEcUwpgRRrxW0'), 195 array('!t#.;(bK}k@kVrf;#}Q-jp|;?hE|+.O', 'i1txZiB', 'Db7ktjeBwCfp1ZNT1B3EuGN0zoJOA7Ie6C_0JINuLvU'), 196 array('>1`k@Lr4|3ot4WrgA!g||8}vSZhBT=c13|,/_{', 'OGHuN', 'Vc9BEP_JFshoM65Cvn7cs82W9IybUZdUtn5iBin5QGgOgTc8Gko2bVrtYC9TZ7__3v4diH8tRdN4CmBQBt9GAg'), 197 array('\\0TcEC6wGL# >JXv6 `eJ', '7zaLTGW', 'JPz__8TD8GIYX3IoLbicq67PU4BqC-3oyTniwirQvY8'), 198 array(':r")v$eXry,13E!{7?K.U%-@SDD', 'hvHW', 'x_fL0dKsVf7Rv_cWYbyB_7FGniyZgFiI_VfdLRyPPRc'), 199 array('q%S/wOQhM%f3G06C1#uJgjIMWf\\`', '4Zlb', 'rscMSDQGtZBBEZtj9ToKAPp1oTPZuNFJYePmGNVQMyo'), 200 ); 201 } 202 return $result; 203 } 204 205 public function providerEncryptIncorrect() 206 { 207 if (OBS_ENCRYPT_MODULE == 'sodium') 208 { 209 $result = array( 210 array('1)AEo@^Cq&n[i&K5Rbk)YmYto|iK6&:j,3w.9', '1e78V2', 'po1Yr3rjOhi04wDOsyt2W-DEbObyBNLtssRuIxENOe3wH1MiuqNr5ZGmbAElwoU76DFho'), 211 array(',>3(K!$eu0QXr6SBW[$', 'jPpz900', '8u73mdXrtw4ToQw9CBvMLfrugtd7gS_JtoU695dyInfpnm0'), 212 ); 213 } else { 214 // Mcrypt based encode 215 $result = array( 216 array('1)AEo@^Cq&n[i&K5Rbk)YmYto|iK6&:j,3w.9', '1e78V2', '22x_TJwDCwSvVmx5eGYgZwR70vN03nytSrQmwYs-oBAqUmRd5B9jHlk4Dmq6B45clMfEDZj4Amg'), 217 array(',>3(K!$eu0QXr6SBW[$', 'jPpz900', 'shwqhvs-EBr4cPKAhKwx8Tg6hSMSyNjPHDh8p-e94qU'), 218 ); 219 } 220 return $result; 221 } 222 223 public function providerEncryptRandom() 224 { 225 $charlist = ' 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ`~!@#$%^&*()_+-=[]{}\|/?,.<>;:"'."'"; 226 $result = array(); 227 for ($i=0; $i<20; $i++) 228 { 229 $string = generate_random_string(mt_rand(20, 40), $charlist); 230 $key = generate_random_string(mt_rand(4, 8)); 231 $result[] = array($string, $key); 232 } 233 return $result; 234 } 235 236 public function providerEncryptSodiumRandom() 237 { 238 $charlist = ' 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ`~!@#$%^&*()_+-=[]{}\|/?,.<>;:"'."'"; 239 $string = generate_random_string(mt_rand(20, 40), $charlist); 240 241 $result = array(); 242 $result[] = array($string, generate_random_string(SODIUM_CRYPTO_SECRETBOX_KEYBYTES - 1), generate_random_string(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES - 1)); 243 $result[] = array($string, generate_random_string(SODIUM_CRYPTO_SECRETBOX_KEYBYTES - 1), generate_random_string(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES)); 244 $result[] = array($string, generate_random_string(SODIUM_CRYPTO_SECRETBOX_KEYBYTES - 1), generate_random_string(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES + 1)); 245 $result[] = array($string, generate_random_string(SODIUM_CRYPTO_SECRETBOX_KEYBYTES), generate_random_string(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES - 1)); 246 $result[] = array($string, generate_random_string(SODIUM_CRYPTO_SECRETBOX_KEYBYTES), generate_random_string(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES)); 247 $result[] = array($string, generate_random_string(SODIUM_CRYPTO_SECRETBOX_KEYBYTES), generate_random_string(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES + 1)); 248 //$result[] = array($string, generate_random_string(SODIUM_CRYPTO_SECRETBOX_KEYBYTES + 1), generate_random_string(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES - 1)); 249 //$result[] = array($string, generate_random_string(SODIUM_CRYPTO_SECRETBOX_KEYBYTES + 1), generate_random_string(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES)); 250 //$result[] = array($string, generate_random_string(SODIUM_CRYPTO_SECRETBOX_KEYBYTES + 1), generate_random_string(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES + 1)); 251 252 return $result; 253 } 254} 255 256// EOF 257