3v4l.org

run code in 300+ PHP versions simultaneously
<?php //Enter your code here, enjoy! function hmac($algo,$data,$passwd){ /* md5 and sha1 only */ $algo=strtolower($algo); //echo $algo; $p=array('md5'=>'greatherH32','sha1'=>'H40'); if(strlen($passwd)>64) { $passwd=pack($p[$algo],$algo($passwd)); //echo 'pass greater than 64'.chr(13); //echo $passwd; } if(strlen($passwd)<64) { $passwd=str_pad($passwd,64,chr(0)); //echo 'pass smaller than 64'.chr(13); //echo $passwd; } $ipad=substr($passwd,0,64) ^ str_repeat(chr(0x36),64); #echo 'ipad: '.$ipad.chr(13); $opad=substr($passwd,0,64) ^ str_repeat(chr(0x5C),64); echo 'Hex IPAD'.bin2hex($ipad).chr(13); echo 'Hex OPAD'.bin2hex($opad).chr(13); #echo 'opad: '.$opad.chr(13); $hashedIpadData =$algo($ipad.$data); echo 'hashedIpadData: '.$hashedIpadData.chr(13); $packedIpdatData=pack($p[$algo],$hashedIpadData); echo 'packedIpdatData: '.$packedIpdatData.chr(13); #echo 'packed to hex'.bin2hex($packedIpdatData); #echo strlen($packedIpdatData).chr(13); $opadPack = $opad.$packedIpdatData; echo 'opadPack: '.$opadPack.chr(13); return $algo($opadPack); #return($algo($opad.pack($p[$algo],$algo($ipad.$data)))); } # XXX ePay.bg URL (https://devep2.datamax.bg/ep2/epay2_demo/ if POST to DEMO system) $submit_url = 'https://devep2.datamax.bg/ep2/epay2_demo/'; # XXX Secret word with which merchant make CHECKSUM on the ENCODED packet $secret = 'YYBW64GVCVRRP5759A0QFDRXBYZQF5HV3SLTYN14RTWGRPTX8YF2R5UUET7BCT6E'; $min = 'D544248794'; $invoice = '173910'; # XXX Invoice $sum = '16.99'; # XXX Ammount $exp_date = '08.01.2014 12:24:44'; # XXX Expiration date $descr = 'Order: 173910, Product: 9626'; # XXX Description $data = <<<DATA MIN={$min} INVOICE={$invoice} AMOUNT={$sum} EXP_TIME={$exp_date} DESCR={$descr} ENCODING=utf-8 DATA; $ENCODED = base64_encode($data); $CHECKSUM = hmac('sha1', $ENCODED, $secret); # XXX SHA-1 algorithm REQUIRED echo mb_internal_encoding() . '<br />'; echo mb_regex_encoding(); echo chr(0x36).chr(13); echo chr(0x5C).chr(13); echo <<<HTML <HTML> <head> <meta http-equiv="content-type" content="text/html; charset=windows-1251"> </head> <BODY TEXT=#000000 BGCOLOR=#FFFFFF> <p>{$ENCODED}</p> <p>{$CHECKSUM}</p> HTML; ?>
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/9rsbQ
function name:  (null)
number of ops:  45
compiled vars:  !0 = $submit_url, !1 = $secret, !2 = $min, !3 = $invoice, !4 = $sum, !5 = $exp_date, !6 = $descr, !7 = $data, !8 = $ENCODED, !9 = $CHECKSUM
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   50     0  E >   ASSIGN                                                   !0, 'https%3A%2F%2Fdevep2.datamax.bg%2Fep2%2Fepay2_demo%2F'
   52     1        ASSIGN                                                   !1, 'YYBW64GVCVRRP5759A0QFDRXBYZQF5HV3SLTYN14RTWGRPTX8YF2R5UUET7BCT6E'
   54     2        ASSIGN                                                   !2, 'D544248794'
   55     3        ASSIGN                                                   !3, '173910'
   56     4        ASSIGN                                                   !4, '16.99'
   57     5        ASSIGN                                                   !5, '08.01.2014+12%3A24%3A44'
   58     6        ASSIGN                                                   !6, 'Order%3A+173910%2C+Product%3A+9626'
   61     7        ROPE_INIT                                    11  ~18     'MIN%3D'
          8        ROPE_ADD                                      1  ~18     ~18, !2
          9        ROPE_ADD                                      2  ~18     ~18, '%0AINVOICE%3D'
   62    10        ROPE_ADD                                      3  ~18     ~18, !3
         11        ROPE_ADD                                      4  ~18     ~18, '%0AAMOUNT%3D'
   63    12        ROPE_ADD                                      5  ~18     ~18, !4
         13        ROPE_ADD                                      6  ~18     ~18, '%0AEXP_TIME%3D'
   64    14        ROPE_ADD                                      7  ~18     ~18, !5
         15        ROPE_ADD                                      8  ~18     ~18, '%0ADESCR%3D'
   65    16        ROPE_ADD                                      9  ~18     ~18, !6
         17        ROPE_END                                     10  ~17     ~18, '%0AENCODING%3Dutf-8'
   60    18        ASSIGN                                                   !7, ~17
   68    19        INIT_FCALL                                               'base64_encode'
         20        SEND_VAR                                                 !7
         21        DO_ICALL                                         $25     
         22        ASSIGN                                                   !8, $25
   69    23        INIT_FCALL                                               'hmac'
         24        SEND_VAL                                                 'sha1'
         25        SEND_VAR                                                 !8
         26        SEND_VAR                                                 !1
         27        DO_FCALL                                      0  $27     
         28        ASSIGN                                                   !9, $27
   71    29        INIT_FCALL                                               'mb_internal_encoding'
         30        DO_ICALL                                         $29     
         31        CONCAT                                           ~30     $29, '%3Cbr+%2F%3E'
         32        ECHO                                                     ~30
   72    33        INIT_FCALL                                               'mb_regex_encoding'
         34        DO_ICALL                                         $31     
         35        ECHO                                                     $31
   73    36        ECHO                                                     '6%0D'
   74    37        ECHO                                                     '%5C%0D'
   77    38        ROPE_INIT                                     5  ~33     '%3CHTML%3E%0A%3Chead%3E%0A++++%3Cmeta+http-equiv%3D%22content-type%22+content%3D%22text%2Fhtml%3B+charset%3Dwindows-1251%22%3E%0A%3C%2Fhead%3E%0A%3CBODY+TEXT%3D%23000000+BGCOLOR%3D%23FFFFFF%3E%0A%3Cp%3E'
   82    39        ROPE_ADD                                      1  ~33     ~33, !8
         40        ROPE_ADD                                      2  ~33     ~33, '%3C%2Fp%3E%0A%3Cp%3E'
   83    41        ROPE_ADD                                      3  ~33     ~33, !9
         42        ROPE_END                                      4  ~32     ~33, '%3C%2Fp%3E'
         43        ECHO                                                     ~32
   85    44      > RETURN                                                   1

Function hmac:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 43) Position 1 = 11, Position 2 = 20
Branch analysis from position: 11
2 jumps found. (Code = 43) Position 1 = 23, Position 2 = 29
Branch analysis from position: 23
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 29
Branch analysis from position: 20
filename:       /in/9rsbQ
function name:  hmac
number of ops:  90
compiled vars:  !0 = $algo, !1 = $data, !2 = $passwd, !3 = $p, !4 = $ipad, !5 = $opad, !6 = $hashedIpadData, !7 = $packedIpdatData, !8 = $opadPack
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    4     0  E >   RECV                                             !0      
          1        RECV                                             !1      
          2        RECV                                             !2      
    6     3        INIT_FCALL                                               'strtolower'
          4        SEND_VAR                                                 !0
          5        DO_ICALL                                         $9      
          6        ASSIGN                                                   !0, $9
    8     7        ASSIGN                                                   !3, <array>
   10     8        STRLEN                                           ~12     !2
          9        IS_SMALLER                                               64, ~12
         10      > JMPZ                                                     ~13, ->20
   11    11    >   INIT_FCALL                                               'pack'
         12        FETCH_DIM_R                                      ~14     !3, !0
         13        SEND_VAL                                                 ~14
         14        INIT_DYNAMIC_CALL                                        !0
         15        SEND_VAR_EX                                              !2
         16        DO_FCALL                                      0  $15     
         17        SEND_VAR                                                 $15
         18        DO_ICALL                                         $16     
         19        ASSIGN                                                   !2, $16
   16    20    >   STRLEN                                           ~18     !2
         21        IS_SMALLER                                               ~18, 64
         22      > JMPZ                                                     ~19, ->29
   18    23    >   INIT_FCALL                                               'str_pad'
         24        SEND_VAR                                                 !2
         25        SEND_VAL                                                 64
         26        SEND_VAL                                                 '%00'
         27        DO_ICALL                                         $20     
         28        ASSIGN                                                   !2, $20
   24    29    >   INIT_FCALL                                               'substr'
         30        SEND_VAR                                                 !2
         31        SEND_VAL                                                 0
         32        SEND_VAL                                                 64
         33        DO_ICALL                                         $22     
         34        INIT_FCALL                                               'str_repeat'
         35        SEND_VAL                                                 '6'
         36        SEND_VAL                                                 64
         37        DO_ICALL                                         $23     
         38        BW_XOR                                           ~24     $22, $23
         39        ASSIGN                                                   !4, ~24
   26    40        INIT_FCALL                                               'substr'
         41        SEND_VAR                                                 !2
         42        SEND_VAL                                                 0
         43        SEND_VAL                                                 64
         44        DO_ICALL                                         $26     
         45        INIT_FCALL                                               'str_repeat'
         46        SEND_VAL                                                 '%5C'
         47        SEND_VAL                                                 64
         48        DO_ICALL                                         $27     
         49        BW_XOR                                           ~28     $26, $27
         50        ASSIGN                                                   !5, ~28
   28    51        INIT_FCALL                                               'bin2hex'
         52        SEND_VAR                                                 !4
         53        DO_ICALL                                         $30     
         54        CONCAT                                           ~31     'Hex+IPAD', $30
         55        CONCAT                                           ~32     ~31, '%0D'
         56        ECHO                                                     ~32
   29    57        INIT_FCALL                                               'bin2hex'
         58        SEND_VAR                                                 !5
         59        DO_ICALL                                         $33     
         60        CONCAT                                           ~34     'Hex+OPAD', $33
         61        CONCAT                                           ~35     ~34, '%0D'
         62        ECHO                                                     ~35
   33    63        INIT_DYNAMIC_CALL                                        !0
         64        CONCAT                                           ~36     !4, !1
         65        SEND_VAL_EX                                              ~36
         66        DO_FCALL                                      0  $37     
         67        ASSIGN                                                   !6, $37
   34    68        CONCAT                                           ~39     'hashedIpadData%3A+', !6
         69        CONCAT                                           ~40     ~39, '%0D'
         70        ECHO                                                     ~40
   36    71        INIT_FCALL                                               'pack'
         72        FETCH_DIM_R                                      ~41     !3, !0
         73        SEND_VAL                                                 ~41
         74        SEND_VAR                                                 !6
         75        DO_ICALL                                         $42     
         76        ASSIGN                                                   !7, $42
   37    77        CONCAT                                           ~44     'packedIpdatData%3A+', !7
         78        CONCAT                                           ~45     ~44, '%0D'
         79        ECHO                                                     ~45
   40    80        CONCAT                                           ~46     !5, !7
         81        ASSIGN                                                   !8, ~46
   43    82        CONCAT                                           ~48     'opadPack%3A+', !8
         83        CONCAT                                           ~49     ~48, '%0D'
         84        ECHO                                                     ~49
   45    85        INIT_DYNAMIC_CALL                                        !0
         86        SEND_VAR_EX                                              !8
         87        DO_FCALL                                      0  $50     
         88      > RETURN                                                   $50
   47    89*     > RETURN                                                   null

End of function hmac

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
168.37 ms | 1411 KiB | 32 Q