3 use PHPUnit\Framework\TestCase;
5 require_once
'SSOEncryption.i';
10 $this->key = substr(hash(
"md5", $this->Cu.
":testkeysuffix"), 0, 24);
11 $this->key_pub = substr(hash(
"md5", $this->Cu.
":testkeypub"), 0, 24);
12 $this->common_cbc_iv = base64_decode(
"QvkbnYUwcyw=");
15 function test_3des_cbc_ticket_chkfree() {
16 $digeststr =
"ts=yyyy&ss=xxxx&pw=pwdpwd}";
17 $digest = base64_encode(sha1(
"$digeststr",
true));
18 $ticket =
"$digeststr&dg=$digest";
21 $ticket_padded_openssl) = encrypt_ticket_openssl($ticket,
23 $this->common_cbc_iv);
25 $dec_openssl = decrypt_ticket_openssl($enc_openssl,
27 $this->common_cbc_iv);
29 $this->assertEquals($dec_openssl, $ticket_padded_openssl);
31 if (function_exists(
"mdecrypt_generic") && function_exists(
"mcrypt_generic")) {
35 $ticket_padded_mcrypt) = encrypt_ticket_mcrypt($ticket,
37 $this->common_cbc_iv);
39 $dec_mcrypt = decrypt_ticket_mcrypt($enc_mcrypt,
41 $this->common_cbc_iv);
42 $this->assertEquals($dec_mcrypt, $ticket_padded_mcrypt);
45 $this->assertEquals($enc_openssl, $enc_mcrypt);
48 $this->assertEquals($ticket_padded_openssl, $ticket_padded_mcrypt);
52 $enc_mcrypt_dec_openssl = decrypt_ticket_openssl($enc_mcrypt,
54 $this->common_cbc_iv);
55 $this->assertEquals($enc_mcrypt_dec_openssl, $ticket_padded_mcrypt);
59 function test_3des_cbc_ezcard_sso() {
63 $sv0 = substr(
'00000000' . strval(rand(1, 99999999)), -8);
65 $cardsig=
"68iq1Lg3DZeJsvXtyryOkJEVuAgOp2CxDnu9YgTcaQax";
67 $Ml=
"someone@sampleuser.com";
68 $edate=
"11/13/2009 20:00:00";
71 $sso_request =
"<SSORequest AcctLast4=\"$card4\" AcctSignature=\"$cardsig\" CardType=\"$cardtype\" EmailAddress=\"$Ml\" ExpireDateTime=\"$edate\" sv0=\"$sv0\" />";
72 $priviv = $this->common_cbc_iv;
75 list($sso_request_openssl,
78 $enc_outer_openssl) = encrypt_ezcard_sso($sso_request,
85 $dec_openssl_outer = decrypt_ezcard_openssl($enc_outer_openssl,
88 $this->assertEquals($dec_openssl_outer, $sso_wrap_openssl);
90 $dec_openssl_inner = decrypt_ezcard_openssl($enc_inner_openssl,
93 $this->assertEquals($dec_openssl_inner, $sso_request_openssl);
96 if (function_exists(
"mdecrypt_generic") && function_exists(
"mcrypt_generic")) {
99 list($sso_request_mcrypt,
102 $enc_out) = encrypt_ezcard_sso_mcrypt($sso_request,
110 $dec_mcrypt_outer = decrypt_ezcard_mcrypt($enc_out,
113 $this->assertEquals($dec_mcrypt_outer, $sso_wrap_mcrypt);
117 $this->assertEquals($enc_out, $enc_outer_openssl);
120 $this->assertEquals($sso_wrap_mcrypt, $sso_wrap_openssl);
123 $enc_mcrypt_dec_openssl_out = decrypt_ezcard_openssl($enc_out,
126 $this->assertEquals($enc_mcrypt_dec_openssl_out, $sso_wrap_mcrypt);
130 $dec_mcrypt_inner = decrypt_ezcard_mcrypt($enc_inner,
133 $this->assertEquals($dec_mcrypt_inner, $sso_request_mcrypt);
136 $this->assertEquals($enc_inner, $enc_inner_openssl);
139 $this->assertEquals($sso_request_mcrypt, $sso_request_openssl);
142 $enc_mcrypt_dec_openssl_inner = decrypt_ezcard_openssl($enc_inner,
145 $this->assertEquals($enc_mcrypt_dec_openssl_inner, $sso_request_mcrypt);
149 function test_3des_cbc_ezcard_sso_2() {
152 $clientId =
"052514";
156 $cardsig=
"807vbxwWV9OveEbYK758phggvHWLWarl_wpGXhKodZK3";
158 $Ml=
"anamagana13@yahoo.com";
159 $edate=
"03/25/19 20:50:40";
161 $sso_request =
"<SSORequest AcctLast4=\"${card4}\" AcctSignature=\"${cardsig}\" CardType=\"${cardtype}\" EmailAddress=\"${Ml}\" ExpireDateTime=\"${edate}\" />";
163 $expected_inner_enc =
"5TLwHzkpv1kM4rvZjdegjEmXXKo0rOmJWgXEkkoR-002zQ5-5zuPeA96hmABKG5lhvMRga7f2J5oPZTB6Gsxxon8z8CY2gxFZHDpr-JrS0cWRe1RYH_wPkmxCuRufkmCPnoIGy_mNWkHtzeEYTVvUJ7EWI2uG4K70f98VCuHZZ1rmnNMdL492MFjCDnqoVWRYNbx6x5eAm-Cfe_S3rPdcwrmZiKJjsHbPUQLMZC_P3HdZGYlKgY68A..";
165 $expected_wrap_enc =
"xzzw8hA0oqkvwcEXncNI4gTzhbkMfMb4MWkRDH_7TnqifWxEjAYmcKMSD5-lCMRrqHc5Bqp4sKWjZ1rEOmKRg-BS3mT7-ciLsaEpsEEqXvvXcuOSPz4mbARQmWLm2M4YFLrxkevsbQT2Rgu56tocLnC2WjGZg79EYZGBzMxomVclstKrfImIl76Gf5vxnxcKDhFqxGZujX3C45FHASjuDUEPns-eElR278R3aPAp3mFHP2RGCmqs_mfi_r7KPyLdwMss6BhjXIWKq5mLD_z488cBBRXsCP-tuZ_G4BSBAFFoNZDqjDO6dnEbtN2TBXwydK-WS98eSYD1IysXpfhGrnV8gWVKttCQhU6dstsbTru6r2asUAXdZQUiNYSbyxn1tsZunPQU5rKAbuAfvd307kpNS3MhNfws";
166 $priviv = hex2bin(
"000000000000000000000000");
167 $ezkey_pub = hex2bin(
"BDA30F6A4DEAFDFA8ACEB0931D0A5BC2777F49EE27AE32B4");
168 $ezkey_priv = hex2bin(
"F495840A66DCC85FF61F9C0C65CDBB38BC62E10AF51FCE78");
171 list($sso_request_openssl,
174 $enc_outer_openssl) = encrypt_ezcard_sso($sso_request,
182 $dec_openssl_outer = decrypt_ezcard_openssl($enc_outer_openssl,
185 $this->assertEquals($dec_openssl_outer, $sso_wrap_openssl);
188 $dec_openssl_inner = decrypt_ezcard_openssl($enc_inner_openssl,
191 $this->assertEquals($dec_openssl_inner, $sso_request_openssl);
194 $this->assertEquals($enc_outer_openssl, $expected_wrap_enc);
195 $this->assertEquals($enc_inner_openssl, $expected_inner_enc);
198 if (function_exists(
"mdecrypt_generic") && function_exists(
"mcrypt_generic")) {
201 list($sso_request_mcrypt,
204 $enc_out) = encrypt_ezcard_sso_mcrypt($sso_request,
213 $this->assertEquals($enc_out, $expected_wrap_enc);
214 $this->assertEquals($enc_inner, $expected_inner_enc);
217 $dec_mcrypt_outer = decrypt_ezcard_mcrypt($enc_out,
220 $this->assertEquals($dec_mcrypt_outer, $sso_wrap_mcrypt);
224 $this->assertEquals($enc_out, $enc_outer_openssl);
227 $this->assertEquals($sso_wrap_mcrypt, $sso_wrap_openssl);
230 $enc_mcrypt_dec_openssl_out = decrypt_ezcard_openssl($enc_out,
233 $this->assertEquals($enc_mcrypt_dec_openssl_out, $sso_wrap_mcrypt);
236 $dec_mcrypt_inner = decrypt_ezcard_mcrypt($enc_inner,
240 $this->assertEquals($dec_mcrypt_inner, $sso_request_mcrypt);
243 $this->assertEquals($enc_inner, $enc_inner_openssl);
246 $this->assertEquals($sso_request_mcrypt, $sso_request_openssl);
249 $enc_mcrypt_dec_openssl_inner = decrypt_ezcard_openssl($enc_inner,
252 $this->assertEquals($enc_mcrypt_dec_openssl_inner, $sso_request_mcrypt);
256 function test_3des_ecb_certegy() {
258 $FIID=
"8000"; #CU Institution ID
for testing
260 $ACCOUNT=
"210328770001"; # enrolled
"; 264 list($account_enc_openssl, 265 $account_padded_openssl) = encrypt_certegy_openssl($ACCOUNT, 269 $account_dec_openssl = decrypt_certegy_openssl($account_enc_openssl, $this->key); 270 $this->assertEquals($account_padded_openssl, $account_dec_openssl); 273 if (function_exists("mdecrypt_generic
") && function_exists("mcrypt_generic
")) { 274 // encrypt with mcrypt 275 list($account_enc_mcrypt, $account_padded) = encrypt_certegy_account_mcrypt($ACCOUNT, 278 // assert mcrypt and openssl generate same ciphertext 279 $this->assertEquals($account_enc_openssl, $account_enc_mcrypt); 281 // assert mcrypt and openssl use same padded string before encryption 282 $this->assertequals($account_padded_openssl, $account_padded); 284 // decrypt mcrypt encrypted cipher using openssl 285 $account_enc_mcrypt_dec_openssl = decrypt_certegy_openssl($account_enc_mcrypt, 287 $this->assertEquals($account_padded, $account_enc_mcrypt_dec_openssl); 289 // decrypt with mcrypt 290 $account_dec_mcrypt = decrypt_certegy_account_mcrypt($account_enc_mcrypt, $this->key); 291 $this->assertequals($account_padded, $account_dec_mcrypt); 295 function test_3des_ecb_digital() { 297 $CustID="103
"; #static string assigned by DigitalMailer 299 $servicepass="thisisatest
"; 300 $servicekey="52g2jajrt56syh5j2yf82ngf
"; 301 $showurl=1; # look before we leap 302 $currdate = gmdate('YmdHi'); # using GMT 305 $srcstring = "ACCOUNT={$ACCOUNT}&TIMESTAMP={$currdate}&CID={$CustID}&PASS={$servicepass}&GMT={$GMT}
"; 309 list($digital_enc_openssl, 310 $srcstring_padded_openssl) = encrypt_digital_openssl($srcstring, 313 // // decrypt openssl 314 $digital_dec_openssl = decrypt_digital_openssl($digital_enc_openssl, $servicekey); 315 $this->assertEquals($srcstring_padded_openssl, $digital_dec_openssl); 318 if (function_exists("mdecrypt_generic
") && function_exists("mcrypt_generic
")) { 319 // encrypt with mcrypt 320 list($digital_enc_mcrypt, 321 $srcstring_padded) = encrypt_digital_mcrypt($srcstring, 324 // assert mcrypt and openssl generate the same ciphertext 325 $this->assertEquals($digital_enc_openssl, $digital_enc_mcrypt); 327 // assert mcrypt and openssl encrypt same padded string 328 $this->assertEquals($srcstring_padded_openssl, $srcstring_padded); 330 // decrypt mcrypt encrypted cipher using openssl 331 $digital_enc_mcrypt_dec_openssl = decrypt_digital_openssl($digital_enc_mcrypt, 333 $this->assertEquals($srcstring_padded, $digital_enc_mcrypt_dec_openssl); 335 // decrypt with mcrypt 336 $digital_dec_mcrypt = decrypt_digital_mcrypt($digital_enc_mcrypt, $servicekey); 337 $this->assertequals($srcstring_padded, $digital_dec_mcrypt); 342 function test_3des_ecb_digital_2() { 343 // values for testing, actual values from 344 // the specification documentation 345 $CustID="103
"; #static string assigned by DigitalMailer 347 $servicepass="1test1
"; 348 $servicekey="123456781234567812345678
"; 349 $showurl="1
"; # look before we leap 350 $currdate = "200304210915
"; # using GMT 353 // last 16 bits are for padded characters 354 $expected_enc_with_pads = hex2bin("e553273afd34f4b2fb7c430b0ace9d63b07cb006b2748dbb14091ffe808bf524bae218b3c06ce9fde1fb974e6a695842cdb63fdd92f837de1c569468ee764f7efeb959b7d4642fcb
"); 356 $srcstring = "CID={$CustID}&ACCOUNT={$ACCOUNT}&PASS={$servicepass}&TIMESTAMP={$currdate}&GMT={$GMT}
"; 360 list($digital_enc_openssl, 361 $srcstring_padded_openssl) = encrypt_digital_openssl($srcstring, 364 // verify generated ciphertext 365 $this->assertEquals($digital_enc_openssl, $expected_enc_with_pads); 368 $digital_dec_openssl = decrypt_digital_openssl($digital_enc_openssl, $servicekey); 369 $this->assertEquals($srcstring_padded_openssl, $digital_dec_openssl); 372 if (function_exists("mdecrypt_generic
") && function_exists("mcrypt_generic
")) { 373 // encrypt with mcrypt 374 list($digital_enc_mcrypt, 375 $srcstring_padded) = encrypt_digital_mcrypt($srcstring, 378 // verify generated ciphertext 379 $this->assertEquals($digital_enc_mcrypt, $expected_enc_with_pads); 381 // assert mcrypt and openssl generate the same ciphertext 382 $this->assertEquals($digital_enc_openssl, $digital_enc_mcrypt); 384 // assert mcrypt and openssl encrypt same padded string 385 $this->assertEquals($srcstring_padded_openssl, $srcstring_padded); 387 // decrypt mcrypt encrypted cipher using openssl 388 $digital_enc_mcrypt_dec_openssl = decrypt_digital_openssl($digital_enc_mcrypt, 390 $this->assertEquals($srcstring_padded, $digital_enc_mcrypt_dec_openssl); 392 // decrypt with mcrypt 393 $digital_dec_mcrypt = decrypt_digital_mcrypt($digital_enc_mcrypt, $servicekey); 394 $this->assertequals($srcstring_padded, $digital_dec_mcrypt); 400 function test_cast5_ecb_billpay() { 402 $billpayid = "billpayid sample data
"; 403 $ipaykey = substr($this->key, 0, 16); 407 list($billpayid_enc_openssl, 408 $billpayid_padded_openssl) = encrypt_billpay_openssl($billpayid, 412 $billpayid_dec_openssl = decrypt_billpay_openssl($billpayid_enc_openssl, $ipaykey); 413 $this->assertEquals($billpayid_padded_openssl, $billpayid_dec_openssl); 416 if (function_exists("mdecrypt_generic
") && function_exists("mcrypt_generic
")) { 417 // encrypt with mcrypt 418 list($billpayid_enc_mcrypt, 419 $billpayid_padded) = encrypt_billpay_mcrypt($billpayid, 422 // assert that mcrypt and openssl generate the same encrypted string 423 $this->assertEquals($billpayid_enc_openssl, $billpayid_enc_mcrypt); 425 // assert that mcrypt and openssl apply the same padding before encryption 426 $this->assertEquals($billpayid_padded_openssl, $billpayid_padded); 428 // decrypt mcrypt encrypted cipher using openssl 429 $billpayid_enc_mcrypt_dec_openssl = decrypt_billpay_openssl($billpayid_enc_mcrypt, 431 $this->assertEquals($billpayid_padded, $billpayid_enc_mcrypt_dec_openssl); 433 // decrypt with mcrypt 434 $billpayid_dec_mcrypt = decrypt_billpay_mcrypt($billpayid_enc_mcrypt, 436 $this->assertequals($billpayid_padded, $billpayid_dec_mcrypt); 441 function test_aes_256_ecb_vsoft() { 443 $vsoftquery = "vsoft query sample data
"; 444 $vsoftkey = hash_hmac('md5', "somedata
", "somekey
");// 128bit key 449 list($vsoft_enc_openssl, 450 $vsoftquery_padded_openssl) = encrypt_vsoftquery_openssl($vsoftquery, 453 // // decrypt openssl 454 $vsoft_dec_openssl = decrypt_vsoftquery_openssl($vsoft_enc_openssl, $vsoftkey); 455 $this->assertEquals($vsoftquery_padded_openssl, $vsoft_dec_openssl); 458 if (function_exists("mdecrypt_generic
") && function_exists("mcrypt_generic
")) { 459 // encrypt with mcrypt 460 list($vsoft_enc_mcrypt, 461 $vsoftquery_padded) = encrypt_vsoftquery_mcrypt($vsoftquery, 464 // decrypt mcrypt encrypted cipher using openssl 465 $vsoft_enc_mcrypt_dec_openssl = decrypt_vsoftquery_openssl($vsoft_enc_mcrypt, 467 $this->assertEquals($vsoftquery_padded, $vsoft_enc_mcrypt_dec_openssl); 469 // assert openssl and mcrypt generated the same ciphertext 470 $this->assertEquals($vsoft_enc_openssl, $vsoft_enc_mcrypt); 472 // assert openssl and mcrypt used the same padded string 473 $this->assertEquals($vsoftquery_padded, $vsoftquery_padded_openssl); 475 // decrypt with mcrypt 476 $vsoft_dec_mcrypt = decrypt_vsoftquery_mcrypt($vsoft_enc_mcrypt, 478 $this->assertequals($vsoftquery_padded, $vsoft_dec_mcrypt); 483 function test_hex2bin() { 484 $this->assertEquals(hex2bin("613553673455396d31314d773274495a
"), "a5Sg4U9m11Mw2tIZ
"); 485 $this->assertEquals(bin2hex("a5Sg4U9m11Mw2tIZ
"), "613553673455396d31314d773274495a
"); 488 function test_aes_256_cbc_mvi() { 489 // actual data from the specification document 490 $mvi_query = "2008-06-02 13:28:45,Statements,1234567,,06/01/2008,06/01/2008,0
"; 491 $ckhexkey = "BTikvHBatPdAtgT3317QIQqGFY25WpIz
"; 492 $iv_mvi = "a5Sg4U9m11Mw2tIZ
"; 493 $expected_encrypted_value_hex = "b97f3985245be1065604c5808cebaa2e15813bf938cfaa3c198fd464565c13ced7c91ac6b68326ce5ed5e81cb7de81ac36b1106392bd8303d2aedf2c26161a8a
"; 494 $expected_iv_hex = "613553673455396d31314d773274495a
"; 496 // encrypt with openssl 497 $mvi_cipher_iv_openssl = encrypt_mvi_openssl($mvi_query, $ckhexkey, $iv=$iv_mvi); 498 $this->assertEquals($mvi_cipher_iv_openssl, 499 $expected_encrypted_value_hex.$expected_iv_hex); 501 // decrypt with openssl 502 $mvi_dec_openssl = decrypt_mvi_openssl($mvi_cipher_iv_openssl, 504 $this->assertEquals($mvi_dec_openssl, $mvi_query); 508 if (function_exists("mdecrypt_generic
") && function_exists("mcrypt_generic
")) { 509 // encrypt with mcrypt 510 $mvi_cipher_iv_mcrypt = encrypt_mvi_mcrypt($mvi_query, 511 $ckhexkey,$iv=$iv_mvi); 513 // assert mcrypt and openssl generated same ciphertext 514 $this->assertEquals($mvi_cipher_iv_mcrypt, 515 $expected_encrypted_value_hex.$expected_iv_hex); 516 $this->assertEquals($mvi_cipher_iv_mcrypt, $mvi_cipher_iv_openssl); 519 // decrypt mcrypt encrypted ciphertext with openssl 520 $mvi_enc_mcrypt_dec_openssl = decrypt_mvi_openssl($mvi_cipher_iv_mcrypt, 522 $this->assertEquals($mvi_query, $mvi_enc_mcrypt_dec_openssl); 525 // decrypt with mcrypt 526 $mvi_dec_mcrypt = decrypt_mvi_mcrypt($mvi_cipher_iv_mcrypt, 528 $this->assertEquals($mvi_query, $mvi_dec_mcrypt); 532 function test_aes_256_cbc_mvi_2() { 533 // actual data taken from the logs 534 $mvi_query = "2019-03-25 21:01:20,Checks,1000453728,4930,03/20/2019,03/20/2019,1
"; 536 $ckhexkey = "lPVWJFs1F81j3nSkEIxFQqAI1Cu6YLrU
"; 537 $expected_encrypted_value_hex = "78d4fa151d1bed1a07b68c817172a28a1211a82deec74a5411be558f5645201085e27588e8ccb9943d8ee3fa4e263981eb2dddf788eb83be8ab32c2932426d267ebd7adb87dbb918143843135cf6ca57
"; 538 // inferred from the last 32 hexits of the expected encrypted hex value 539 $expected_iv_hex = "a39235682bb1fbf9ae753f92624fe086
"; 540 $iv_mvi = hex2bin("a39235682bb1fbf9ae753f92624fe086
"); 543 // encrypt with openssl 544 $mvi_cipher_iv_openssl = encrypt_mvi_openssl($mvi_query, $ckhexkey, $iv=$iv_mvi); 545 $this->assertEquals($mvi_cipher_iv_openssl, 546 $expected_encrypted_value_hex.$expected_iv_hex); 548 // decrypt with openssl 549 $mvi_dec_openssl = decrypt_mvi_openssl($mvi_cipher_iv_openssl, 551 $this->assertEquals($mvi_dec_openssl, $mvi_query); 555 if (function_exists("mdecrypt_generic
") && function_exists("mcrypt_generic
")) { 556 // encrypt with mcrypt 557 $mvi_cipher_iv_mcrypt = encrypt_mvi_mcrypt($mvi_query, 558 $ckhexkey,$iv=$iv_mvi); 560 // assert mcrypt and openssl generated same ciphertext 561 $this->assertEquals($mvi_cipher_iv_mcrypt, 562 $expected_encrypted_value_hex.$expected_iv_hex); 563 $this->assertEquals($mvi_cipher_iv_mcrypt, $mvi_cipher_iv_openssl); 566 // decrypt mcrypt encrypted ciphertext with openssl 567 $mvi_enc_mcrypt_dec_openssl = decrypt_mvi_openssl($mvi_cipher_iv_mcrypt, 569 $this->assertEquals($mvi_query, $mvi_enc_mcrypt_dec_openssl); 572 // decrypt with mcrypt 573 $mvi_dec_mcrypt = decrypt_mvi_mcrypt($mvi_cipher_iv_mcrypt, 575 $this->assertEquals($mvi_query, $mvi_dec_mcrypt); 579 function tearDown() {