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 'opad: '.$opad.chr(13); $hashedIpadData =$algo($ipad.$data); echo 'hashedIpadData: '.$hashedIpadData.chr(13); $opadPack = $opad.pack($p[$algo],$hashedIpadData); echo 'opadPack: '.$opadPack.chr(13); return($algo($opadPack)); } # 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 = 'secret'; $min = 'D544248794'; $invoice = 1234; # XXX Invoice $sum = '22.80'; # XXX Ammount $exp_date = '01.08.2020'; # XXX Expiration date $descr = 'Test'; # XXX Description $data = <<<DATA MIN={$min} INVOICE={$invoice} AMOUNT={$sum} EXP_TIME={$exp_date} DESCR={$descr} DATA; # XXX Packet: # (MIN or EMAIL)= REQUIRED # INVOICE= REQUIRED # AMOUNT= REQUIRED # EXP_TIME= REQUIRED # DESCR= OPTIONAL $ENCODED = base64_encode($data); $CHECKSUM = hmac('sha1', $ENCODED, $secret); # XXX SHA-1 algorithm REQUIRED 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/rFpmk
function name:  (null)
number of ops:  35
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
-------------------------------------------------------------------------------------
   40     0  E >   ASSIGN                                                   !0, 'https%3A%2F%2Fdevep2.datamax.bg%2Fep2%2Fepay2_demo%2F'
   42     1        ASSIGN                                                   !1, 'secret'
   44     2        ASSIGN                                                   !2, 'D544248794'
   45     3        ASSIGN                                                   !3, 1234
   46     4        ASSIGN                                                   !4, '22.80'
   47     5        ASSIGN                                                   !5, '01.08.2020'
   48     6        ASSIGN                                                   !6, 'Test'
   51     7        ROPE_INIT                                    10  ~18     'MIN%3D'
          8        ROPE_ADD                                      1  ~18     ~18, !2
          9        ROPE_ADD                                      2  ~18     ~18, '%0AINVOICE%3D'
   52    10        ROPE_ADD                                      3  ~18     ~18, !3
         11        ROPE_ADD                                      4  ~18     ~18, '%0AAMOUNT%3D'
   53    12        ROPE_ADD                                      5  ~18     ~18, !4
         13        ROPE_ADD                                      6  ~18     ~18, '%0AEXP_TIME%3D'
   54    14        ROPE_ADD                                      7  ~18     ~18, !5
         15        ROPE_ADD                                      8  ~18     ~18, '%0ADESCR%3D'
   55    16        ROPE_END                                      9  ~17     ~18, !6
   50    17        ASSIGN                                                   !7, ~17
   65    18        INIT_FCALL                                               'base64_encode'
         19        SEND_VAR                                                 !7
         20        DO_ICALL                                         $24     
         21        ASSIGN                                                   !8, $24
   66    22        INIT_FCALL                                               'hmac'
         23        SEND_VAL                                                 'sha1'
         24        SEND_VAR                                                 !8
         25        SEND_VAR                                                 !1
         26        DO_FCALL                                      0  $26     
         27        ASSIGN                                                   !9, $26
   69    28        ROPE_INIT                                     5  ~29     '%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'
   74    29        ROPE_ADD                                      1  ~29     ~29, !8
         30        ROPE_ADD                                      2  ~29     ~29, '%3C%2Fp%3E%0A%3Cp%3E'
   75    31        ROPE_ADD                                      3  ~29     ~29, !9
         32        ROPE_END                                      4  ~28     ~29, '%3C%2Fp%3E'
         33        ECHO                                                     ~28
   77    34      > RETURN                                                   1

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

End of function hmac

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
159.49 ms | 1407 KiB | 26 Q