3v4l.org

run code in 300+ PHP versions simultaneously
<?php if (!(function_exists('openssl_sign') && defined('OPENSSL_ALGO_SHA256'))) { die('Unsupported version'); } $privateKey = <<<EOT -----BEGIN PRIVATE KEY----- MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCrYL5Zq4rvXwEn acjPDXjrl0UnAKfAchtNQIyEdf/a41tFgZkw1DXS2s+9eWNBarWYEwGhFoiOeeop ShU7qa5IKL7pwLaO8vPbTPNWZZ9sy3Vx18lB54IyRPBX5lrLU+n0XuYyFcZa1+Gd Dtgu+AQQqjDGGuSJecuABWH+rzzfumMi9K4gP9S0J8vq60mRna6R47Ati7t/jBJm b2vSoSaWjtKf0LJoRPnbc7SgYF8D4JWJ3xQnsa8LrrBudV5j+N3uRDMimUeHL6iW 1KoAb8g1Iql/b3/2C0Z0M/O/13sECytFxDBVP9W+lvHwNF7pZR+C/BvhFH6FnrFI fRismw8BAgMBAAECggEBAIsHKqS4Azf5TIhayusdtND6oMDpSS1X5EohaV00FOHP u4WBg3MXVKq/k/PT++9fz/2UvaefDhz3Tj08ukjyeE5Vr7sV+YOyGJ35qRaXzmOG ErrOIZjzZK2/O3MzjsiQRKVYL0rGW2nq5D5zgnFoBnQ2fObZfjkAs1QiCcOBCdM8 nttTO31JCwyBuTKGK3KaJdoba6dVze5Xhm1b/haCmq2EJOML5G73jK7m8aYkVDFb FJOShYATyz5Xju33QEPz+HWcMrk/TKZFRQYSjWFAzy0/ENrMptIVff3UN0KL0YSl 0hNHlJwHStDEZAiMw4A20ojtKqfUkyR1kPzxpWdi/BkCgYEA4VVFhv5RNSJUGm1I zhJT54UlfIW57c/NWx/Tqbhe0QYg//sM4c/s8lw45lvmRc7vKs6C/ZGo18p+XNT+ BaZdNFlxbtKJisM61Cegc8pIwzv4mbTyo9SjoWswxt20zVp8sIGeF4w7X94gPVZ0 f8D3OELujXqk2i34blLDbTGF3TsCgYEAwrOkxvZ1cdj4ouFqmTFuCvEKVGxsSQeT Pc4/e/GsjzXGnIkLnsYbUnTXKzt7gLuu0I8B3gF0DqqPCJoGHQv6RIYdY8g6KLF+ 4eGfYSJj6zjKOx4yKP7NT3vQLZehhIKbA723rWQVZ9N3e05P65OBkIp8f5MOfNgJ O+OKVe49MPMCgYBA6S6JL7O3CbeOkVK6wj7XX9ynnWItJoJysJ1ps8nkjs5szyYr 2pjYTEa73VddXro465qCbzZjS1rRZS3z9LO+w9FQamfiyFCnEu8+y9PgIeOAa8bF +RhWBKndb7qIuXtX4U7oW6Yy/Kru4HvY3X6Z/3X23ZClpT5+kWrohq6YRwKBgE/Q uPHfQtIC8hpDciGOw9+0ZFmrgNCHTHL/w8KZlfW3Q84T2DGkYLryrupIHh7t0YIp vcg2rE7+2FfcXDk4GcZRfGbVRBI+gRc0GNQG9xMMWsrVXBa2LZAx32txR4M8zzM/ aLap2qSPaeGgft7Bv1FzlAnwTPYc0dw9MQ589ZTFAoGBAJrB3sNh1ysIUdA3X1Jf vUZfBCofmP+7Cqzln8gdeYA9iXUOoE4VTPw0jK71ZzsmlUejBz9S2ZUfs9q1Srge yFo8Glr/8AXXUAt7iSJS4j7sz07EZbj14LfoooSem+w/ZONy8Sdtm/WMox/iBg7S s+Ix44bf/PXcAri2w7OQp/G6 -----END PRIVATE KEY----- EOT ; $publicKey = <<<EOT -----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAq2C+WauK718BJ2nIzw14 65dFJwCnwHIbTUCMhHX/2uNbRYGZMNQ10trPvXljQWq1mBMBoRaIjnnqKUoVO6mu SCi+6cC2jvLz20zzVmWfbMt1cdfJQeeCMkTwV+Zay1Pp9F7mMhXGWtfhnQ7YLvgE EKowxhrkiXnLgAVh/q8837pjIvSuID/UtCfL6utJkZ2ukeOwLYu7f4wSZm9r0qEm lo7Sn9CyaET523O0oGBfA+CVid8UJ7GvC66wbnVeY/jd7kQzIplHhy+oltSqAG/I NSKpf29/9gtGdDPzv9d7BAsrRcQwVT/Vvpbx8DRe6WUfgvwb4RR+hZ6xSH0YrJsP AQIDAQAB -----END PUBLIC KEY----- EOT ; $data = 'eyJub25jZSI6IlpSQ0VyNXpDRmVlOVNnOGxCVzMtNEhHRG8tdGtuckxDQV96Y3VDUDg5ZTgiLCJhbGciOiJSUzI1NiIsImp3ayI6eyJlIjoiQVFBQiIsImt0eSI6IlJTQSIsIm4iOiJxMkMtV2F1SzcxOEJKMm5JencxNDY1ZEZKd0Nud0hJYlRVQ01oSFhfMnVOYlJZR1pNTlExMHRyUHZYbGpRV3ExbUJNQm9SYUlqbm5xS1VvVk82bXVTQ2ktNmNDMmp2THoyMHp6Vm1XZmJNdDFjZGZKUWVlQ01rVHdWLVpheTFQcDlGN21NaFhHV3RmaG5RN1lMdmdFRUtvd3hocmtpWG5MZ0FWaF9xODgzN3BqSXZTdUlEX1V0Q2ZMNnV0SmtaMnVrZU93TFl1N2Y0d1NabTlyMHFFbWxvN1NuOUN5YUVUNTIzTzBvR0JmQS1DVmlkOFVKN0d2QzY2d2JuVmVZX2pkN2tReklwbEhoeS1vbHRTcUFHX0lOU0twZjI5XzlndEdkRFB6djlkN0JBc3JSY1F3VlRfVnZwYng4RFJlNldVZmd2d2I0UlItaFo2eFNIMFlySnNQQVEifX0.eyJjb250YWN0IjpbIm1haWx0bzptbG9jYXRpQGdtYWlsLmNvbSJdLCJhZ3JlZW1lbnQiOiJodHRwOi8vMTI3LjAuMC4xOjQwMDEvdGVybXMvdjEiLCJyZXNvdXJjZSI6Im5ldy1yZWcifQ'; $signature = null; if (openssl_sign( $data, $signature, $privateKey, OPENSSL_ALGO_SHA256 ) !== true) { die('openssl_sign() failed'); } $lineLength = 24; for ($base = 0; $base < strlen($signature); $base += $lineLength) { echo substr('00000000'.strtoupper(dechex($base)), -8).' '; for ($offset = 0; $offset < $lineLength; $offset++) { echo ' '; if (($offset % 4) === 0) { echo ' '; } $absolute = $base + $offset; if ($absolute >= strlen($signature)) { echo ' '; } else { echo strtoupper(substr('00'.dechex(ord($signature[$absolute])), -2)); } } echo ' '; for ($offset = 0; $offset < $lineLength; $offset++) { $absolute = $base + $offset; if ($absolute >= strlen($signature)) { break; } $c = $signature[$absolute]; $a = ord($c); echo ($a >= 32 && $a <= 127) ? $c : '.'; } echo "\n"; } die();
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 46) Position 1 = 4, Position 2 = 6
Branch analysis from position: 4
2 jumps found. (Code = 43) Position 1 = 8, Position 2 = 9
Branch analysis from position: 8
1 jumps found. (Code = 79) Position 1 = -2
Branch analysis from position: 9
2 jumps found. (Code = 43) Position 1 = 22, Position 2 = 23
Branch analysis from position: 22
1 jumps found. (Code = 79) Position 1 = -2
Branch analysis from position: 23
1 jumps found. (Code = 42) Position 1 = 101
Branch analysis from position: 101
2 jumps found. (Code = 44) Position 1 = 104, Position 2 = 26
Branch analysis from position: 104
1 jumps found. (Code = 79) Position 1 = -2
Branch analysis from position: 26
1 jumps found. (Code = 42) Position 1 = 70
Branch analysis from position: 70
2 jumps found. (Code = 44) Position 1 = 72, Position 2 = 41
Branch analysis from position: 72
1 jumps found. (Code = 42) Position 1 = 97
Branch analysis from position: 97
2 jumps found. (Code = 44) Position 1 = 99, Position 2 = 75
Branch analysis from position: 99
2 jumps found. (Code = 44) Position 1 = 104, Position 2 = 26
Branch analysis from position: 104
Branch analysis from position: 26
Branch analysis from position: 75
2 jumps found. (Code = 43) Position 1 = 80, Position 2 = 81
Branch analysis from position: 80
1 jumps found. (Code = 42) Position 1 = 99
Branch analysis from position: 99
Branch analysis from position: 81
2 jumps found. (Code = 46) Position 1 = 89, Position 2 = 91
Branch analysis from position: 89
2 jumps found. (Code = 43) Position 1 = 92, Position 2 = 94
Branch analysis from position: 92
1 jumps found. (Code = 42) Position 1 = 95
Branch analysis from position: 95
2 jumps found. (Code = 44) Position 1 = 99, Position 2 = 75
Branch analysis from position: 99
Branch analysis from position: 75
Branch analysis from position: 94
2 jumps found. (Code = 44) Position 1 = 99, Position 2 = 75
Branch analysis from position: 99
Branch analysis from position: 75
Branch analysis from position: 91
Branch analysis from position: 41
2 jumps found. (Code = 43) Position 1 = 45, Position 2 = 46
Branch analysis from position: 45
2 jumps found. (Code = 43) Position 1 = 51, Position 2 = 53
Branch analysis from position: 51
1 jumps found. (Code = 42) Position 1 = 69
Branch analysis from position: 69
2 jumps found. (Code = 44) Position 1 = 72, Position 2 = 41
Branch analysis from position: 72
Branch analysis from position: 41
Branch analysis from position: 53
2 jumps found. (Code = 44) Position 1 = 72, Position 2 = 41
Branch analysis from position: 72
Branch analysis from position: 41
Branch analysis from position: 46
Branch analysis from position: 6
filename:       /in/vTsoQ
function name:  (null)
number of ops:  106
compiled vars:  !0 = $privateKey, !1 = $publicKey, !2 = $data, !3 = $signature, !4 = $lineLength, !5 = $base, !6 = $offset, !7 = $absolute, !8 = $c, !9 = $a
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    3     0  E >   INIT_FCALL                                               'function_exists'
          1        SEND_VAL                                                 'openssl_sign'
          2        DO_ICALL                                         $10     
          3      > JMPZ_EX                                          ~11     $10, ->6
          4    >   DEFINED                                          ~12     'OPENSSL_ALGO_SHA256'
          5        BOOL                                             ~11     ~12
          6    >   BOOL_NOT                                         ~13     ~11
          7      > JMPZ                                                     ~13, ->9
    4     8    > > EXIT                                                     'Unsupported+version'
    7     9    >   ASSIGN                                                   !0, '-----BEGIN+PRIVATE+KEY-----%0AMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCrYL5Zq4rvXwEn%0AacjPDXjrl0UnAKfAchtNQIyEdf%2Fa41tFgZkw1DXS2s%2B9eWNBarWYEwGhFoiOeeop%0AShU7qa5IKL7pwLaO8vPbTPNWZZ9sy3Vx18lB54IyRPBX5lrLU%2Bn0XuYyFcZa1%2BGd%0ADtgu%2BAQQqjDGGuSJecuABWH%2BrzzfumMi9K4gP9S0J8vq60mRna6R47Ati7t%2FjBJm%0Ab2vSoSaWjtKf0LJoRPnbc7SgYF8D4JWJ3xQnsa8LrrBudV5j%2BN3uRDMimUeHL6iW%0A1KoAb8g1Iql%2Fb3%2F2C0Z0M%2FO%2F13sECytFxDBVP9W%2BlvHwNF7pZR%2BC%2FBvhFH6FnrFI%0AfRismw8BAgMBAAECggEBAIsHKqS4Azf5TIhayusdtND6oMDpSS1X5EohaV00FOHP%0Au4WBg3MXVKq%2Fk%2FPT%2B%2B9fz%2F2UvaefDhz3Tj08ukjyeE5Vr7sV%2BYOyGJ35qRaXzmOG%0AErrOIZjzZK2%2FO3MzjsiQRKVYL0rGW2nq5D5zgnFoBnQ2fObZfjkAs1QiCcOBCdM8%0AnttTO31JCwyBuTKGK3KaJdoba6dVze5Xhm1b%2FhaCmq2EJOML5G73jK7m8aYkVDFb%0AFJOShYATyz5Xju33QEPz%2BHWcMrk%2FTKZFRQYSjWFAzy0%2FENrMptIVff3UN0KL0YSl%0A0hNHlJwHStDEZAiMw4A20ojtKqfUkyR1kPzxpWdi%2FBkCgYEA4VVFhv5RNSJUGm1I%0AzhJT54UlfIW57c%2FNWx%2FTqbhe0QYg%2F%2FsM4c%2Fs8lw45lvmRc7vKs6C%2FZGo18p%2BXNT%2B%0ABaZdNFlxbtKJisM61Cegc8pIwzv4mbTyo9SjoWswxt20zVp8sIGeF4w7X94gPVZ0%0Af8D3OELujXqk2i34blLDbTGF3TsCgYEAwrOkxvZ1cdj4ouFqmTFuCvEKVGxsSQeT%0APc4%2Fe%2FGsjzXGnIkLnsYbUnTXKzt7gLuu0I8B3gF0DqqPCJoGHQv6RIYdY8g6KLF%2B%0A4eGfYSJj6zjKOx4yKP7NT3vQLZehhIKbA723rWQVZ9N3e05P65OBkIp8f5MOfNgJ%0AO%2BOKVe49MPMCgYBA6S6JL7O3CbeOkVK6wj7XX9ynnWItJoJysJ1ps8nkjs5szyYr%0A2pjYTEa73VddXro465qCbzZjS1rRZS3z9LO%2Bw9FQamfiyFCnEu8%2By9PgIeOAa8bF%0A%2BRhWBKndb7qIuXtX4U7oW6Yy%2FKru4HvY3X6Z%2F3X23ZClpT5%2BkWrohq6YRwKBgE%2FQ%0AuPHfQtIC8hpDciGOw9%2B0ZFmrgNCHTHL%2Fw8KZlfW3Q84T2DGkYLryrupIHh7t0YIp%0Avcg2rE7%2B2FfcXDk4GcZRfGbVRBI%2BgRc0GNQG9xMMWsrVXBa2LZAx32txR4M8zzM%2F%0AaLap2qSPaeGgft7Bv1FzlAnwTPYc0dw9MQ589ZTFAoGBAJrB3sNh1ysIUdA3X1Jf%0AvUZfBCofmP%2B7Cqzln8gdeYA9iXUOoE4VTPw0jK71ZzsmlUejBz9S2ZUfs9q1Srge%0AyFo8Glr%2F8AXXUAt7iSJS4j7sz07EZbj14LfoooSem%2Bw%2FZONy8Sdtm%2FWMox%2FiBg7S%0As%2BIx44bf%2FPXcAri2w7OQp%2FG6%0A-----END+PRIVATE+KEY-----'
   38    10        ASSIGN                                                   !1, '-----BEGIN+PUBLIC+KEY-----%0AMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAq2C%2BWauK718BJ2nIzw14%0A65dFJwCnwHIbTUCMhHX%2F2uNbRYGZMNQ10trPvXljQWq1mBMBoRaIjnnqKUoVO6mu%0ASCi%2B6cC2jvLz20zzVmWfbMt1cdfJQeeCMkTwV%2BZay1Pp9F7mMhXGWtfhnQ7YLvgE%0AEKowxhrkiXnLgAVh%2Fq8837pjIvSuID%2FUtCfL6utJkZ2ukeOwLYu7f4wSZm9r0qEm%0Alo7Sn9CyaET523O0oGBfA%2BCVid8UJ7GvC66wbnVeY%2Fjd7kQzIplHhy%2BoltSqAG%2FI%0ANSKpf29%2F9gtGdDPzv9d7BAsrRcQwVT%2FVvpbx8DRe6WUfgvwb4RR%2BhZ6xSH0YrJsP%0AAQIDAQAB%0A-----END+PUBLIC+KEY-----'
   50    11        ASSIGN                                                   !2, 'eyJub25jZSI6IlpSQ0VyNXpDRmVlOVNnOGxCVzMtNEhHRG8tdGtuckxDQV96Y3VDUDg5ZTgiLCJhbGciOiJSUzI1NiIsImp3ayI6eyJlIjoiQVFBQiIsImt0eSI6IlJTQSIsIm4iOiJxMkMtV2F1SzcxOEJKMm5JencxNDY1ZEZKd0Nud0hJYlRVQ01oSFhfMnVOYlJZR1pNTlExMHRyUHZYbGpRV3ExbUJNQm9SYUlqbm5xS1VvVk82bXVTQ2ktNmNDMmp2THoyMHp6Vm1XZmJNdDFjZGZKUWVlQ01rVHdWLVpheTFQcDlGN21NaFhHV3RmaG5RN1lMdmdFRUtvd3hocmtpWG5MZ0FWaF9xODgzN3BqSXZTdUlEX1V0Q2ZMNnV0SmtaMnVrZU93TFl1N2Y0d1NabTlyMHFFbWxvN1NuOUN5YUVUNTIzTzBvR0JmQS1DVmlkOFVKN0d2QzY2d2JuVmVZX2pkN2tReklwbEhoeS1vbHRTcUFHX0lOU0twZjI5XzlndEdkRFB6djlkN0JBc3JSY1F3VlRfVnZwYng4RFJlNldVZmd2d2I0UlItaFo2eFNIMFlySnNQQVEifX0.eyJjb250YWN0IjpbIm1haWx0bzptbG9jYXRpQGdtYWlsLmNvbSJdLCJhZ3JlZW1lbnQiOiJodHRwOi8vMTI3LjAuMC4xOjQwMDEvdGVybXMvdjEiLCJyZXNvdXJjZSI6Im5ldy1yZWcifQ'
   52    12        ASSIGN                                                   !3, null
   53    13        INIT_FCALL_BY_NAME                                       'openssl_sign'
   54    14        SEND_VAR_EX                                              !2
         15        SEND_VAR_EX                                              !3
         16        SEND_VAR_EX                                              !0
   57    17        FETCH_CONSTANT                                   ~18     'OPENSSL_ALGO_SHA256'
         18        SEND_VAL_EX                                              ~18
         19        DO_FCALL                                      0  $19     
   58    20        TYPE_CHECK                                  1014          $19
         21      > JMPZ                                                     ~20, ->23
   59    22    > > EXIT                                                     'openssl_sign%28%29+failed'
   62    23    >   ASSIGN                                                   !4, 24
   63    24        ASSIGN                                                   !5, 0
         25      > JMP                                                      ->101
   64    26    >   INIT_FCALL                                               'substr'
         27        INIT_FCALL                                               'strtoupper'
         28        INIT_FCALL                                               'dechex'
         29        SEND_VAR                                                 !5
         30        DO_ICALL                                         $23     
         31        SEND_VAR                                                 $23
         32        DO_ICALL                                         $24     
         33        CONCAT                                           ~25     '00000000', $24
         34        SEND_VAL                                                 ~25
         35        SEND_VAL                                                 -8
         36        DO_ICALL                                         $26     
         37        CONCAT                                           ~27     $26, '+'
         38        ECHO                                                     ~27
   65    39        ASSIGN                                                   !6, 0
         40      > JMP                                                      ->70
   66    41    >   ECHO                                                     '+'
   67    42        MOD                                              ~29     !6, 4
         43        IS_IDENTICAL                                             ~29, 0
         44      > JMPZ                                                     ~30, ->46
   68    45    >   ECHO                                                     '+'
   70    46    >   ADD                                              ~31     !5, !6
         47        ASSIGN                                                   !7, ~31
   71    48        STRLEN                                           ~33     !3
         49        IS_SMALLER_OR_EQUAL                                      ~33, !7
         50      > JMPZ                                                     ~34, ->53
   72    51    >   ECHO                                                     '++'
         52      > JMP                                                      ->69
   74    53    >   INIT_FCALL                                               'strtoupper'
         54        INIT_FCALL                                               'substr'
         55        INIT_FCALL                                               'dechex'
         56        INIT_FCALL                                               'ord'
         57        FETCH_DIM_R                                      ~35     !3, !7
         58        SEND_VAL                                                 ~35
         59        DO_ICALL                                         $36     
         60        SEND_VAR                                                 $36
         61        DO_ICALL                                         $37     
         62        CONCAT                                           ~38     '00', $37
         63        SEND_VAL                                                 ~38
         64        SEND_VAL                                                 -2
         65        DO_ICALL                                         $39     
         66        SEND_VAR                                                 $39
         67        DO_ICALL                                         $40     
         68        ECHO                                                     $40
   65    69    >   PRE_INC                                                  !6
         70    >   IS_SMALLER                                               !6, !4
         71      > JMPNZ                                                    ~42, ->41
   77    72    >   ECHO                                                     '++'
   78    73        ASSIGN                                                   !6, 0
         74      > JMP                                                      ->97
   79    75    >   ADD                                              ~44     !5, !6
         76        ASSIGN                                                   !7, ~44
   80    77        STRLEN                                           ~46     !3
         78        IS_SMALLER_OR_EQUAL                                      ~46, !7
         79      > JMPZ                                                     ~47, ->81
   81    80    > > JMP                                                      ->99
   83    81    >   FETCH_DIM_R                                      ~48     !3, !7
         82        ASSIGN                                                   !8, ~48
   84    83        INIT_FCALL                                               'ord'
         84        SEND_VAR                                                 !8
         85        DO_ICALL                                         $50     
         86        ASSIGN                                                   !9, $50
   85    87        IS_SMALLER_OR_EQUAL                              ~52     32, !9
         88      > JMPZ_EX                                          ~52     ~52, ->91
         89    >   IS_SMALLER_OR_EQUAL                              ~53     !9, 127
         90        BOOL                                             ~52     ~53
         91    > > JMPZ                                                     ~52, ->94
         92    >   QM_ASSIGN                                        ~54     !8
         93      > JMP                                                      ->95
         94    >   QM_ASSIGN                                        ~54     '.'
         95    >   ECHO                                                     ~54
   78    96        PRE_INC                                                  !6
         97    >   IS_SMALLER                                               !6, !4
         98      > JMPNZ                                                    ~56, ->75
   87    99    >   ECHO                                                     '%0A'
   63   100        ASSIGN_OP                                     1          !5, !4
        101    >   STRLEN                                           ~58     !3
        102        IS_SMALLER                                               !5, ~58
        103      > JMPNZ                                                    ~59, ->26
   90   104    > > EXIT                                                     
        105*     > RETURN                                                   1

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
187.45 ms | 1408 KiB | 23 Q