Hex Artifact Content
Not logged in

Artifact 77d09eda590ff9253372afddcb3d62506294056e:


0000: 2f 2a 20 70 68 70 5f 72 68 61 73 68 2e 63 20 2a  /* php_rhash.c *
0010: 2f 0a 23 69 66 64 65 66 20 48 41 56 45 5f 43 4f  /.#ifdef HAVE_CO
0020: 4e 46 49 47 5f 48 0a 23 69 6e 63 6c 75 64 65 20  NFIG_H.#include 
0030: 22 63 6f 6e 66 69 67 2e 68 22 0a 23 65 6e 64 69  "config.h".#endi
0040: 66 0a 0a 23 69 6e 63 6c 75 64 65 20 3c 72 68 61  f..#include <rha
0050: 73 68 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 22  sh.h>.#include "
0060: 70 68 70 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  php.h".#include 
0070: 22 70 68 70 5f 69 6e 69 2e 68 22 0a 23 69 6e 63  "php_ini.h".#inc
0080: 6c 75 64 65 20 22 65 78 74 2f 73 74 61 6e 64 61  lude "ext/standa
0090: 72 64 2f 69 6e 66 6f 2e 68 22 0a 23 69 6e 63 6c  rd/info.h".#incl
00a0: 75 64 65 20 22 70 68 70 5f 73 74 72 65 61 6d 73  ude "php_streams
00b0: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 68  .h".#include "ph
00c0: 70 5f 72 68 61 73 68 2e 68 22 0a 23 69 6e 63 6c  p_rhash.h".#incl
00d0: 75 64 65 20 22 70 68 70 5f 63 6f 6d 70 61 74 69  ude "php_compati
00e0: 62 69 6c 69 74 79 2e 68 22 0a 0a 23 64 65 66 69  bility.h"..#defi
00f0: 6e 65 20 50 48 50 5f 52 48 41 53 48 5f 56 45 52  ne PHP_RHASH_VER
0100: 53 49 4f 4e 20 22 31 2e 32 2e 39 22 0a 0a 2f 2a  SION "1.2.9"../*
0110: 20 7b 7b 7b 20 61 72 67 69 6e 66 6f 20 2a 2f 0a   {{{ arginfo */.
0120: 5a 45 4e 44 5f 42 45 47 49 4e 5f 41 52 47 5f 49  ZEND_BEGIN_ARG_I
0130: 4e 46 4f 28 61 72 67 69 6e 66 6f 5f 72 68 61 73  NFO(arginfo_rhas
0140: 68 5f 63 6f 75 6e 74 2c 20 30 29 0a 5a 45 4e 44  h_count, 0).ZEND
0150: 5f 45 4e 44 5f 41 52 47 5f 49 4e 46 4f 28 29 0a  _END_ARG_INFO().
0160: 0a 5a 45 4e 44 5f 42 45 47 49 4e 5f 41 52 47 5f  .ZEND_BEGIN_ARG_
0170: 49 4e 46 4f 28 61 72 67 69 6e 66 6f 5f 72 68 61  INFO(arginfo_rha
0180: 73 68 5f 67 65 74 5f 64 69 67 65 73 74 5f 73 69  sh_get_digest_si
0190: 7a 65 2c 20 30 29 0a 09 5a 45 4e 44 5f 41 52 47  ze, 0)..ZEND_ARG
01a0: 5f 49 4e 46 4f 28 30 2c 20 68 61 73 68 5f 69 64  _INFO(0, hash_id
01b0: 29 0a 5a 45 4e 44 5f 45 4e 44 5f 41 52 47 5f 49  ).ZEND_END_ARG_I
01c0: 4e 46 4f 28 29 0a 0a 5a 45 4e 44 5f 42 45 47 49  NFO()..ZEND_BEGI
01d0: 4e 5f 41 52 47 5f 49 4e 46 4f 28 61 72 67 69 6e  N_ARG_INFO(argin
01e0: 66 6f 5f 72 68 61 73 68 5f 69 73 5f 62 61 73 65  fo_rhash_is_base
01f0: 33 32 2c 20 30 29 0a 09 5a 45 4e 44 5f 41 52 47  32, 0)..ZEND_ARG
0200: 5f 49 4e 46 4f 28 30 2c 20 68 61 73 68 5f 69 64  _INFO(0, hash_id
0210: 29 0a 5a 45 4e 44 5f 45 4e 44 5f 41 52 47 5f 49  ).ZEND_END_ARG_I
0220: 4e 46 4f 28 29 0a 0a 5a 45 4e 44 5f 42 45 47 49  NFO()..ZEND_BEGI
0230: 4e 5f 41 52 47 5f 49 4e 46 4f 28 61 72 67 69 6e  N_ARG_INFO(argin
0240: 66 6f 5f 72 68 61 73 68 5f 67 65 74 5f 6e 61 6d  fo_rhash_get_nam
0250: 65 2c 20 30 29 0a 09 5a 45 4e 44 5f 41 52 47 5f  e, 0)..ZEND_ARG_
0260: 49 4e 46 4f 28 30 2c 20 68 61 73 68 5f 69 64 29  INFO(0, hash_id)
0270: 0a 5a 45 4e 44 5f 45 4e 44 5f 41 52 47 5f 49 4e  .ZEND_END_ARG_IN
0280: 46 4f 28 29 0a 0a 5a 45 4e 44 5f 42 45 47 49 4e  FO()..ZEND_BEGIN
0290: 5f 41 52 47 5f 49 4e 46 4f 28 61 72 67 69 6e 66  _ARG_INFO(arginf
02a0: 6f 5f 72 68 61 73 68 5f 6d 73 67 2c 20 30 29 0a  o_rhash_msg, 0).
02b0: 09 5a 45 4e 44 5f 41 52 47 5f 49 4e 46 4f 28 30  .ZEND_ARG_INFO(0
02c0: 2c 20 68 61 73 68 5f 69 64 29 0a 09 5a 45 4e 44  , hash_id)..ZEND
02d0: 5f 41 52 47 5f 49 4e 46 4f 28 30 2c 20 6d 65 73  _ARG_INFO(0, mes
02e0: 73 61 67 65 29 0a 5a 45 4e 44 5f 45 4e 44 5f 41  sage).ZEND_END_A
02f0: 52 47 5f 49 4e 46 4f 28 29 0a 0a 5a 45 4e 44 5f  RG_INFO()..ZEND_
0300: 42 45 47 49 4e 5f 41 52 47 5f 49 4e 46 4f 28 61  BEGIN_ARG_INFO(a
0310: 72 67 69 6e 66 6f 5f 72 68 61 73 68 5f 66 69 6c  rginfo_rhash_fil
0320: 65 2c 20 30 29 0a 09 5a 45 4e 44 5f 41 52 47 5f  e, 0)..ZEND_ARG_
0330: 49 4e 46 4f 28 30 2c 20 68 61 73 68 5f 69 64 29  INFO(0, hash_id)
0340: 0a 09 5a 45 4e 44 5f 41 52 47 5f 49 4e 46 4f 28  ..ZEND_ARG_INFO(
0350: 30 2c 20 70 61 74 68 29 0a 5a 45 4e 44 5f 45 4e  0, path).ZEND_EN
0360: 44 5f 41 52 47 5f 49 4e 46 4f 28 29 0a 0a 5a 45  D_ARG_INFO()..ZE
0370: 4e 44 5f 42 45 47 49 4e 5f 41 52 47 5f 49 4e 46  ND_BEGIN_ARG_INF
0380: 4f 28 61 72 67 69 6e 66 6f 5f 72 68 61 73 68 5f  O(arginfo_rhash_
0390: 6d 61 67 6e 65 74 5f 66 75 6e 63 2c 20 30 29 0a  magnet_func, 0).
03a0: 09 5a 45 4e 44 5f 41 52 47 5f 49 4e 46 4f 28 30  .ZEND_ARG_INFO(0
03b0: 2c 20 68 61 73 68 5f 69 64 29 0a 09 5a 45 4e 44  , hash_id)..ZEND
03c0: 5f 41 52 47 5f 49 4e 46 4f 28 30 2c 20 70 61 74  _ARG_INFO(0, pat
03d0: 68 29 0a 5a 45 4e 44 5f 45 4e 44 5f 41 52 47 5f  h).ZEND_END_ARG_
03e0: 49 4e 46 4f 28 29 0a 2f 2a 20 7d 7d 7d 20 2a 2f  INFO()./* }}} */
03f0: 0a 0a 2f 2a 20 7b 7b 7b 20 54 68 65 20 74 61 62  ../* {{{ The tab
0400: 6c 65 20 6f 66 20 67 6c 6f 62 61 6c 20 66 75 6e  le of global fun
0410: 63 74 69 6f 6e 73 0a 2a 2f 0a 73 74 61 74 69 63  ctions.*/.static
0420: 20 7a 65 6e 64 5f 66 75 6e 63 74 69 6f 6e 5f 65   zend_function_e
0430: 6e 74 72 79 20 72 68 61 73 68 5f 66 75 6e 63 74  ntry rhash_funct
0440: 69 6f 6e 73 5b 5d 20 3d 20 7b 0a 09 50 48 50 5f  ions[] = {..PHP_
0450: 46 45 28 72 68 61 73 68 5f 63 6f 75 6e 74 2c 20  FE(rhash_count, 
0460: 61 72 67 69 6e 66 6f 5f 72 68 61 73 68 5f 63 6f  arginfo_rhash_co
0470: 75 6e 74 29 0a 09 50 48 50 5f 46 45 28 72 68 61  unt)..PHP_FE(rha
0480: 73 68 5f 67 65 74 5f 64 69 67 65 73 74 5f 73 69  sh_get_digest_si
0490: 7a 65 2c 20 61 72 67 69 6e 66 6f 5f 72 68 61 73  ze, arginfo_rhas
04a0: 68 5f 67 65 74 5f 64 69 67 65 73 74 5f 73 69 7a  h_get_digest_siz
04b0: 65 29 0a 09 50 48 50 5f 46 45 28 72 68 61 73 68  e)..PHP_FE(rhash
04c0: 5f 69 73 5f 62 61 73 65 33 32 2c 20 61 72 67 69  _is_base32, argi
04d0: 6e 66 6f 5f 72 68 61 73 68 5f 69 73 5f 62 61 73  nfo_rhash_is_bas
04e0: 65 33 32 29 0a 09 50 48 50 5f 46 45 28 72 68 61  e32)..PHP_FE(rha
04f0: 73 68 5f 67 65 74 5f 6e 61 6d 65 2c 20 61 72 67  sh_get_name, arg
0500: 69 6e 66 6f 5f 72 68 61 73 68 5f 67 65 74 5f 6e  info_rhash_get_n
0510: 61 6d 65 29 0a 09 50 48 50 5f 46 45 28 72 68 61  ame)..PHP_FE(rha
0520: 73 68 5f 6d 73 67 2c 20 61 72 67 69 6e 66 6f 5f  sh_msg, arginfo_
0530: 72 68 61 73 68 5f 6d 73 67 29 0a 09 50 48 50 5f  rhash_msg)..PHP_
0540: 46 45 28 72 68 61 73 68 5f 66 69 6c 65 2c 20 61  FE(rhash_file, a
0550: 72 67 69 6e 66 6f 5f 72 68 61 73 68 5f 66 69 6c  rginfo_rhash_fil
0560: 65 29 0a 09 50 48 50 5f 46 45 28 72 68 61 73 68  e)..PHP_FE(rhash
0570: 5f 6d 61 67 6e 65 74 2c 20 61 72 67 69 6e 66 6f  _magnet, arginfo
0580: 5f 72 68 61 73 68 5f 6d 61 67 6e 65 74 5f 66 75  _rhash_magnet_fu
0590: 6e 63 29 0a 09 50 48 50 5f 46 45 5f 45 4e 44 0a  nc)..PHP_FE_END.
05a0: 7d 3b 0a 2f 2a 20 7d 7d 7d 20 2a 2f 0a 0a 0a 2f  };./* }}} */.../
05b0: 2a 20 7b 7b 7b 20 61 72 67 69 6e 66 6f 20 2a 2f  * {{{ arginfo */
05c0: 0a 5a 45 4e 44 5f 42 45 47 49 4e 5f 41 52 47 5f  .ZEND_BEGIN_ARG_
05d0: 49 4e 46 4f 5f 45 58 28 61 72 67 69 6e 66 6f 5f  INFO_EX(arginfo_
05e0: 72 68 61 73 68 5f 5f 63 6f 6e 73 74 72 75 63 74  rhash__construct
05f0: 2c 20 30 2c 20 30 2c 20 30 29 0a 09 5a 45 4e 44  , 0, 0, 0)..ZEND
0600: 5f 41 52 47 5f 49 4e 46 4f 28 30 2c 20 68 61 73  _ARG_INFO(0, has
0610: 68 5f 69 64 29 0a 5a 45 4e 44 5f 45 4e 44 5f 41  h_id).ZEND_END_A
0620: 52 47 5f 49 4e 46 4f 28 29 0a 0a 5a 45 4e 44 5f  RG_INFO()..ZEND_
0630: 42 45 47 49 4e 5f 41 52 47 5f 49 4e 46 4f 28 61  BEGIN_ARG_INFO(a
0640: 72 67 69 6e 66 6f 5f 72 68 61 73 68 5f 75 70 64  rginfo_rhash_upd
0650: 61 74 65 2c 20 30 29 0a 09 5a 45 4e 44 5f 41 52  ate, 0)..ZEND_AR
0660: 47 5f 49 4e 46 4f 28 30 2c 20 6d 65 73 73 61 67  G_INFO(0, messag
0670: 65 29 0a 5a 45 4e 44 5f 45 4e 44 5f 41 52 47 5f  e).ZEND_END_ARG_
0680: 49 4e 46 4f 28 29 0a 0a 5a 45 4e 44 5f 42 45 47  INFO()..ZEND_BEG
0690: 49 4e 5f 41 52 47 5f 49 4e 46 4f 5f 45 58 28 61  IN_ARG_INFO_EX(a
06a0: 72 67 69 6e 66 6f 5f 72 68 61 73 68 5f 75 70 64  rginfo_rhash_upd
06b0: 61 74 65 5f 73 74 72 65 61 6d 2c 20 30 2c 20 30  ate_stream, 0, 0
06c0: 2c 20 31 29 0a 09 5a 45 4e 44 5f 41 52 47 5f 49  , 1)..ZEND_ARG_I
06d0: 4e 46 4f 28 30 2c 20 68 61 6e 64 6c 65 29 0a 09  NFO(0, handle)..
06e0: 5a 45 4e 44 5f 41 52 47 5f 49 4e 46 4f 28 30 2c  ZEND_ARG_INFO(0,
06f0: 20 73 74 61 72 74 29 0a 09 5a 45 4e 44 5f 41 52   start)..ZEND_AR
0700: 47 5f 49 4e 46 4f 28 30 2c 20 73 69 7a 65 29 0a  G_INFO(0, size).
0710: 5a 45 4e 44 5f 45 4e 44 5f 41 52 47 5f 49 4e 46  ZEND_END_ARG_INF
0720: 4f 28 29 0a 0a 5a 45 4e 44 5f 42 45 47 49 4e 5f  O()..ZEND_BEGIN_
0730: 41 52 47 5f 49 4e 46 4f 5f 45 58 28 61 72 67 69  ARG_INFO_EX(argi
0740: 6e 66 6f 5f 72 68 61 73 68 5f 75 70 64 61 74 65  nfo_rhash_update
0750: 5f 66 69 6c 65 2c 20 30 2c 20 30 2c 20 31 29 0a  _file, 0, 0, 1).
0760: 09 5a 45 4e 44 5f 41 52 47 5f 49 4e 46 4f 28 30  .ZEND_ARG_INFO(0
0770: 2c 20 70 61 74 68 29 0a 09 5a 45 4e 44 5f 41 52  , path)..ZEND_AR
0780: 47 5f 49 4e 46 4f 28 30 2c 20 73 74 61 72 74 29  G_INFO(0, start)
0790: 0a 09 5a 45 4e 44 5f 41 52 47 5f 49 4e 46 4f 28  ..ZEND_ARG_INFO(
07a0: 30 2c 20 73 69 7a 65 29 0a 5a 45 4e 44 5f 45 4e  0, size).ZEND_EN
07b0: 44 5f 41 52 47 5f 49 4e 46 4f 28 29 0a 0a 5a 45  D_ARG_INFO()..ZE
07c0: 4e 44 5f 42 45 47 49 4e 5f 41 52 47 5f 49 4e 46  ND_BEGIN_ARG_INF
07d0: 4f 28 61 72 67 69 6e 66 6f 5f 72 68 61 73 68 5f  O(arginfo_rhash_
07e0: 66 69 6e 61 6c 2c 20 30 29 0a 5a 45 4e 44 5f 45  final, 0).ZEND_E
07f0: 4e 44 5f 41 52 47 5f 49 4e 46 4f 28 29 0a 0a 5a  ND_ARG_INFO()..Z
0800: 45 4e 44 5f 42 45 47 49 4e 5f 41 52 47 5f 49 4e  END_BEGIN_ARG_IN
0810: 46 4f 28 61 72 67 69 6e 66 6f 5f 72 68 61 73 68  FO(arginfo_rhash
0820: 5f 72 65 73 65 74 2c 20 30 29 0a 5a 45 4e 44 5f  _reset, 0).ZEND_
0830: 45 4e 44 5f 41 52 47 5f 49 4e 46 4f 28 29 0a 0a  END_ARG_INFO()..
0840: 5a 45 4e 44 5f 42 45 47 49 4e 5f 41 52 47 5f 49  ZEND_BEGIN_ARG_I
0850: 4e 46 4f 28 61 72 67 69 6e 66 6f 5f 72 68 61 73  NFO(arginfo_rhas
0860: 68 5f 68 61 73 68 65 64 5f 6c 65 6e 67 74 68 2c  h_hashed_length,
0870: 20 30 29 0a 5a 45 4e 44 5f 45 4e 44 5f 41 52 47   0).ZEND_END_ARG
0880: 5f 49 4e 46 4f 28 29 0a 0a 5a 45 4e 44 5f 42 45  _INFO()..ZEND_BE
0890: 47 49 4e 5f 41 52 47 5f 49 4e 46 4f 5f 45 58 28  GIN_ARG_INFO_EX(
08a0: 61 72 67 69 6e 66 6f 5f 72 68 61 73 68 5f 68 61  arginfo_rhash_ha
08b0: 73 68 2c 20 30 2c 20 30 2c 20 30 29 0a 09 5a 45  sh, 0, 0, 0)..ZE
08c0: 4e 44 5f 41 52 47 5f 49 4e 46 4f 28 30 2c 20 68  ND_ARG_INFO(0, h
08d0: 61 73 68 5f 69 64 29 0a 5a 45 4e 44 5f 45 4e 44  ash_id).ZEND_END
08e0: 5f 41 52 47 5f 49 4e 46 4f 28 29 0a 0a 5a 45 4e  _ARG_INFO()..ZEN
08f0: 44 5f 42 45 47 49 4e 5f 41 52 47 5f 49 4e 46 4f  D_BEGIN_ARG_INFO
0900: 5f 45 58 28 61 72 67 69 6e 66 6f 5f 72 68 61 73  _EX(arginfo_rhas
0910: 68 5f 72 61 77 2c 20 30 2c 20 30 2c 20 30 29 0a  h_raw, 0, 0, 0).
0920: 09 5a 45 4e 44 5f 41 52 47 5f 49 4e 46 4f 28 30  .ZEND_ARG_INFO(0
0930: 2c 20 68 61 73 68 5f 69 64 29 0a 5a 45 4e 44 5f  , hash_id).ZEND_
0940: 45 4e 44 5f 41 52 47 5f 49 4e 46 4f 28 29 0a 0a  END_ARG_INFO()..
0950: 5a 45 4e 44 5f 42 45 47 49 4e 5f 41 52 47 5f 49  ZEND_BEGIN_ARG_I
0960: 4e 46 4f 5f 45 58 28 61 72 67 69 6e 66 6f 5f 72  NFO_EX(arginfo_r
0970: 68 61 73 68 5f 68 65 78 2c 20 30 2c 20 30 2c 20  hash_hex, 0, 0, 
0980: 30 29 0a 09 5a 45 4e 44 5f 41 52 47 5f 49 4e 46  0)..ZEND_ARG_INF
0990: 4f 28 30 2c 20 68 61 73 68 5f 69 64 29 0a 5a 45  O(0, hash_id).ZE
09a0: 4e 44 5f 45 4e 44 5f 41 52 47 5f 49 4e 46 4f 28  ND_END_ARG_INFO(
09b0: 29 0a 0a 5a 45 4e 44 5f 42 45 47 49 4e 5f 41 52  )..ZEND_BEGIN_AR
09c0: 47 5f 49 4e 46 4f 5f 45 58 28 61 72 67 69 6e 66  G_INFO_EX(arginf
09d0: 6f 5f 72 68 61 73 68 5f 62 61 73 65 33 32 2c 20  o_rhash_base32, 
09e0: 30 2c 20 30 2c 20 30 29 0a 09 5a 45 4e 44 5f 41  0, 0, 0)..ZEND_A
09f0: 52 47 5f 49 4e 46 4f 28 30 2c 20 68 61 73 68 5f  RG_INFO(0, hash_
0a00: 69 64 29 0a 5a 45 4e 44 5f 45 4e 44 5f 41 52 47  id).ZEND_END_ARG
0a10: 5f 49 4e 46 4f 28 29 0a 0a 5a 45 4e 44 5f 42 45  _INFO()..ZEND_BE
0a20: 47 49 4e 5f 41 52 47 5f 49 4e 46 4f 5f 45 58 28  GIN_ARG_INFO_EX(
0a30: 61 72 67 69 6e 66 6f 5f 72 68 61 73 68 5f 62 61  arginfo_rhash_ba
0a40: 73 65 36 34 2c 20 30 2c 20 30 2c 20 30 29 0a 09  se64, 0, 0, 0)..
0a50: 5a 45 4e 44 5f 41 52 47 5f 49 4e 46 4f 28 30 2c  ZEND_ARG_INFO(0,
0a60: 20 68 61 73 68 5f 69 64 29 0a 5a 45 4e 44 5f 45   hash_id).ZEND_E
0a70: 4e 44 5f 41 52 47 5f 49 4e 46 4f 28 29 0a 0a 5a  ND_ARG_INFO()..Z
0a80: 45 4e 44 5f 42 45 47 49 4e 5f 41 52 47 5f 49 4e  END_BEGIN_ARG_IN
0a90: 46 4f 5f 45 58 28 61 72 67 69 6e 66 6f 5f 72 68  FO_EX(arginfo_rh
0aa0: 61 73 68 5f 6d 61 67 6e 65 74 2c 20 30 2c 20 30  ash_magnet, 0, 0
0ab0: 2c 20 30 29 0a 09 5a 45 4e 44 5f 41 52 47 5f 49  , 0)..ZEND_ARG_I
0ac0: 4e 46 4f 28 30 2c 20 66 69 6c 65 6e 61 6d 65 29  NFO(0, filename)
0ad0: 0a 5a 45 4e 44 5f 45 4e 44 5f 41 52 47 5f 49 4e  .ZEND_END_ARG_IN
0ae0: 46 4f 28 29 0a 2f 2a 20 7d 7d 7d 20 2a 2f 0a 0a  FO()./* }}} */..
0af0: 2f 2a 20 7b 7b 7b 20 54 68 65 20 74 61 62 6c 65  /* {{{ The table
0b00: 20 6f 66 20 74 68 65 20 52 48 61 73 68 20 63 6c   of the RHash cl
0b10: 61 73 73 20 6d 65 74 68 6f 64 73 0a 2a 2f 0a 7a  ass methods.*/.z
0b20: 65 6e 64 5f 66 75 6e 63 74 69 6f 6e 5f 65 6e 74  end_function_ent
0b30: 72 79 20 72 68 61 73 68 5f 6d 65 74 68 6f 64 73  ry rhash_methods
0b40: 5b 5d 20 3d 20 7b 0a 09 50 48 50 5f 4d 45 28 52  [] = {..PHP_ME(R
0b50: 48 61 73 68 2c 20 20 5f 5f 63 6f 6e 73 74 72 75  Hash,  __constru
0b60: 63 74 2c 20 20 20 20 20 61 72 67 69 6e 66 6f 5f  ct,     arginfo_
0b70: 72 68 61 73 68 5f 5f 63 6f 6e 73 74 72 75 63 74  rhash__construct
0b80: 2c 20 5a 45 4e 44 5f 41 43 43 5f 50 55 42 4c 49  , ZEND_ACC_PUBLI
0b90: 43 20 7c 20 5a 45 4e 44 5f 41 43 43 5f 43 54 4f  C | ZEND_ACC_CTO
0ba0: 52 29 0a 09 50 48 50 5f 4d 45 28 52 48 61 73 68  R)..PHP_ME(RHash
0bb0: 2c 20 20 75 70 64 61 74 65 2c 20 20 20 20 20 20  ,  update,      
0bc0: 20 20 20 20 61 72 67 69 6e 66 6f 5f 72 68 61 73      arginfo_rhas
0bd0: 68 5f 75 70 64 61 74 65 2c 20 5a 45 4e 44 5f 41  h_update, ZEND_A
0be0: 43 43 5f 50 55 42 4c 49 43 29 0a 09 50 48 50 5f  CC_PUBLIC)..PHP_
0bf0: 4d 45 28 52 48 61 73 68 2c 20 20 75 70 64 61 74  ME(RHash,  updat
0c00: 65 5f 73 74 72 65 61 6d 2c 20 20 20 61 72 67 69  e_stream,   argi
0c10: 6e 66 6f 5f 72 68 61 73 68 5f 75 70 64 61 74 65  nfo_rhash_update
0c20: 5f 73 74 72 65 61 6d 2c 20 5a 45 4e 44 5f 41 43  _stream, ZEND_AC
0c30: 43 5f 50 55 42 4c 49 43 29 0a 09 50 48 50 5f 4d  C_PUBLIC)..PHP_M
0c40: 45 28 52 48 61 73 68 2c 20 20 75 70 64 61 74 65  E(RHash,  update
0c50: 5f 66 69 6c 65 2c 20 20 20 20 20 61 72 67 69 6e  _file,     argin
0c60: 66 6f 5f 72 68 61 73 68 5f 75 70 64 61 74 65 5f  fo_rhash_update_
0c70: 66 69 6c 65 2c 20 5a 45 4e 44 5f 41 43 43 5f 50  file, ZEND_ACC_P
0c80: 55 42 4c 49 43 29 0a 09 50 48 50 5f 4d 45 28 52  UBLIC)..PHP_ME(R
0c90: 48 61 73 68 2c 20 20 66 69 6e 61 6c 2c 20 20 20  Hash,  final,   
0ca0: 20 20 20 20 20 20 20 20 61 72 67 69 6e 66 6f 5f          arginfo_
0cb0: 72 68 61 73 68 5f 66 69 6e 61 6c 2c 20 5a 45 4e  rhash_final, ZEN
0cc0: 44 5f 41 43 43 5f 50 55 42 4c 49 43 29 0a 09 50  D_ACC_PUBLIC)..P
0cd0: 48 50 5f 4d 45 28 52 48 61 73 68 2c 20 20 72 65  HP_ME(RHash,  re
0ce0: 73 65 74 2c 20 20 20 20 20 20 20 20 20 20 20 61  set,           a
0cf0: 72 67 69 6e 66 6f 5f 72 68 61 73 68 5f 72 65 73  rginfo_rhash_res
0d00: 65 74 2c 20 5a 45 4e 44 5f 41 43 43 5f 50 55 42  et, ZEND_ACC_PUB
0d10: 4c 49 43 29 0a 09 50 48 50 5f 4d 45 28 52 48 61  LIC)..PHP_ME(RHa
0d20: 73 68 2c 20 20 68 61 73 68 65 64 5f 6c 65 6e 67  sh,  hashed_leng
0d30: 74 68 2c 20 20 20 61 72 67 69 6e 66 6f 5f 72 68  th,   arginfo_rh
0d40: 61 73 68 5f 68 61 73 68 65 64 5f 6c 65 6e 67 74  ash_hashed_lengt
0d50: 68 2c 20 5a 45 4e 44 5f 41 43 43 5f 50 55 42 4c  h, ZEND_ACC_PUBL
0d60: 49 43 29 0a 09 50 48 50 5f 4d 45 28 52 48 61 73  IC)..PHP_ME(RHas
0d70: 68 2c 20 20 68 61 73 68 2c 20 20 20 20 20 20 20  h,  hash,       
0d80: 20 20 20 20 20 61 72 67 69 6e 66 6f 5f 72 68 61       arginfo_rha
0d90: 73 68 5f 68 61 73 68 2c 20 5a 45 4e 44 5f 41 43  sh_hash, ZEND_AC
0da0: 43 5f 50 55 42 4c 49 43 29 0a 09 50 48 50 5f 4d  C_PUBLIC)..PHP_M
0db0: 45 28 52 48 61 73 68 2c 20 20 72 61 77 2c 20 20  E(RHash,  raw,  
0dc0: 20 20 20 20 20 20 20 20 20 20 20 61 72 67 69 6e             argin
0dd0: 66 6f 5f 72 68 61 73 68 5f 72 61 77 2c 20 5a 45  fo_rhash_raw, ZE
0de0: 4e 44 5f 41 43 43 5f 50 55 42 4c 49 43 29 0a 09  ND_ACC_PUBLIC)..
0df0: 50 48 50 5f 4d 45 28 52 48 61 73 68 2c 20 20 68  PHP_ME(RHash,  h
0e00: 65 78 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  ex,             
0e10: 61 72 67 69 6e 66 6f 5f 72 68 61 73 68 5f 68 65  arginfo_rhash_he
0e20: 78 2c 20 5a 45 4e 44 5f 41 43 43 5f 50 55 42 4c  x, ZEND_ACC_PUBL
0e30: 49 43 29 0a 09 50 48 50 5f 4d 45 28 52 48 61 73  IC)..PHP_ME(RHas
0e40: 68 2c 20 20 62 61 73 65 33 32 2c 20 20 20 20 20  h,  base32,     
0e50: 20 20 20 20 20 61 72 67 69 6e 66 6f 5f 72 68 61       arginfo_rha
0e60: 73 68 5f 62 61 73 65 33 32 2c 20 5a 45 4e 44 5f  sh_base32, ZEND_
0e70: 41 43 43 5f 50 55 42 4c 49 43 29 0a 09 50 48 50  ACC_PUBLIC)..PHP
0e80: 5f 4d 45 28 52 48 61 73 68 2c 20 20 62 61 73 65  _ME(RHash,  base
0e90: 36 34 2c 20 20 20 20 20 20 20 20 20 20 61 72 67  64,          arg
0ea0: 69 6e 66 6f 5f 72 68 61 73 68 5f 62 61 73 65 36  info_rhash_base6
0eb0: 34 2c 20 5a 45 4e 44 5f 41 43 43 5f 50 55 42 4c  4, ZEND_ACC_PUBL
0ec0: 49 43 29 0a 09 50 48 50 5f 4d 45 28 52 48 61 73  IC)..PHP_ME(RHas
0ed0: 68 2c 20 20 6d 61 67 6e 65 74 2c 20 20 20 20 20  h,  magnet,     
0ee0: 20 20 20 20 20 61 72 67 69 6e 66 6f 5f 72 68 61       arginfo_rha
0ef0: 73 68 5f 6d 61 67 6e 65 74 2c 20 5a 45 4e 44 5f  sh_magnet, ZEND_
0f00: 41 43 43 5f 50 55 42 4c 49 43 29 0a 09 50 48 50  ACC_PUBLIC)..PHP
0f10: 5f 46 45 5f 45 4e 44 0a 7d 3b 0a 2f 2a 20 7d 7d  _FE_END.};./* }}
0f20: 7d 20 2a 2f 0a 0a 7a 65 6e 64 5f 63 6c 61 73 73  } */..zend_class
0f30: 5f 65 6e 74 72 79 20 2a 72 68 61 73 68 5f 63 65  _entry *rhash_ce
0f40: 3b 0a 7a 65 6e 64 5f 6f 62 6a 65 63 74 5f 68 61  ;.zend_object_ha
0f50: 6e 64 6c 65 72 73 20 72 68 61 73 68 5f 6f 62 6a  ndlers rhash_obj
0f60: 65 63 74 5f 68 61 6e 64 6c 65 72 73 3b 0a 0a 2f  ect_handlers;../
0f70: 2a 20 7b 7b 7b 20 4d 6f 64 75 6c 65 20 73 74 72  * {{{ Module str
0f80: 75 63 74 0a 2a 2f 0a 7a 65 6e 64 5f 6d 6f 64 75  uct.*/.zend_modu
0f90: 6c 65 5f 65 6e 74 72 79 20 72 68 61 73 68 5f 6d  le_entry rhash_m
0fa0: 6f 64 75 6c 65 5f 65 6e 74 72 79 20 3d 20 7b 0a  odule_entry = {.
0fb0: 23 69 66 20 5a 45 4e 44 5f 4d 4f 44 55 4c 45 5f  #if ZEND_MODULE_
0fc0: 41 50 49 5f 4e 4f 20 3e 3d 20 32 30 30 31 30 39  API_NO >= 200109
0fd0: 30 31 0a 09 53 54 41 4e 44 41 52 44 5f 4d 4f 44  01..STANDARD_MOD
0fe0: 55 4c 45 5f 48 45 41 44 45 52 2c 0a 23 65 6e 64  ULE_HEADER,.#end
0ff0: 69 66 0a 09 22 72 68 61 73 68 22 2c 20 20 20 20  if.."rhash",    
1000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1010: 2a 20 65 78 74 65 6e 73 69 6f 6e 20 6e 61 6d 65  * extension name
1020: 20 2a 2f 0a 09 72 68 61 73 68 5f 66 75 6e 63 74   */..rhash_funct
1030: 69 6f 6e 73 2c 20 20 20 20 20 20 20 20 20 20 20  ions,           
1040: 2f 2a 20 66 75 6e 63 74 69 6f 6e 20 6c 69 73 74  /* function list
1050: 20 2a 2f 0a 09 50 48 50 5f 4d 49 4e 49 54 28 72   */..PHP_MINIT(r
1060: 68 61 73 68 29 2c 20 20 20 20 20 20 20 20 20 20  hash),          
1070: 2f 2a 20 70 72 6f 63 65 73 73 20 73 74 61 72 74  /* process start
1080: 75 70 20 2a 2f 0a 09 50 48 50 5f 4d 53 48 55 54  up */..PHP_MSHUT
1090: 44 4f 57 4e 28 72 68 61 73 68 29 2c 20 20 20 20  DOWN(rhash),    
10a0: 20 20 2f 2a 20 70 72 6f 63 65 73 73 20 73 68 75    /* process shu
10b0: 74 64 6f 77 6e 20 2a 2f 0a 09 4e 55 4c 4c 2c 0a  tdown */..NULL,.
10c0: 09 4e 55 4c 4c 2c 0a 09 50 48 50 5f 4d 49 4e 46  .NULL,..PHP_MINF
10d0: 4f 28 72 68 61 73 68 29 2c 20 20 20 20 20 20 20  O(rhash),       
10e0: 20 20 20 2f 2a 20 65 78 74 65 6e 73 69 6f 6e 20     /* extension 
10f0: 69 6e 66 6f 20 2a 2f 0a 23 69 66 20 5a 45 4e 44  info */.#if ZEND
1100: 5f 4d 4f 44 55 4c 45 5f 41 50 49 5f 4e 4f 20 3e  _MODULE_API_NO >
1110: 3d 20 32 30 30 31 30 39 30 31 0a 09 50 48 50 5f  = 20010901..PHP_
1120: 52 48 41 53 48 5f 56 45 52 53 49 4f 4e 2c 20 20  RHASH_VERSION,  
1130: 20 20 20 20 20 20 20 2f 2a 20 65 78 74 65 6e 73         /* extens
1140: 69 6f 6e 20 76 65 72 73 69 6f 6e 20 2a 2f 0a 23  ion version */.#
1150: 65 6e 64 69 66 0a 09 53 54 41 4e 44 41 52 44 5f  endif..STANDARD_
1160: 4d 4f 44 55 4c 45 5f 50 52 4f 50 45 52 54 49 45  MODULE_PROPERTIE
1170: 53 0a 7d 3b 0a 2f 2a 20 7d 7d 7d 20 2a 2f 0a 0a  S.};./* }}} */..
1180: 23 69 66 64 65 66 20 43 4f 4d 50 49 4c 45 5f 44  #ifdef COMPILE_D
1190: 4c 5f 52 48 41 53 48 0a 5a 45 4e 44 5f 47 45 54  L_RHASH.ZEND_GET
11a0: 5f 4d 4f 44 55 4c 45 28 72 68 61 73 68 29 0a 23  _MODULE(rhash).#
11b0: 65 6e 64 69 66 0a 0a 23 64 65 66 69 6e 65 20 52  endif..#define R
11c0: 45 47 49 53 54 45 52 5f 52 48 41 53 48 5f 43 4f  EGISTER_RHASH_CO
11d0: 4e 53 54 41 4e 54 28 63 29 20 52 45 47 49 53 54  NSTANT(c) REGIST
11e0: 45 52 5f 4c 4f 4e 47 5f 43 4f 4e 53 54 41 4e 54  ER_LONG_CONSTANT
11f0: 28 23 63 2c 20 63 2c 20 43 4f 4e 53 54 5f 43 53  (#c, c, CONST_CS
1200: 20 7c 20 43 4f 4e 53 54 5f 50 45 52 53 49 53 54   | CONST_PERSIST
1210: 45 4e 54 29 0a 23 64 65 66 69 6e 65 20 52 48 41  ENT).#define RHA
1220: 53 48 5f 41 4c 4c 20 52 48 41 53 48 5f 41 4c 4c  SH_ALL RHASH_ALL
1230: 5f 48 41 53 48 45 53 0a 0a 0a 23 69 66 20 50 48  _HASHES...#if PH
1240: 50 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e 20  P_MAJOR_VERSION 
1250: 3c 20 37 0a 74 79 70 65 64 65 66 20 73 74 72 75  < 7.typedef stru
1260: 63 74 20 5f 72 68 61 73 68 5f 6f 62 6a 65 63 74  ct _rhash_object
1270: 20 7b 0a 09 7a 65 6e 64 5f 6f 62 6a 65 63 74 20   {..zend_object 
1280: 20 20 20 20 7a 6f 62 6a 3b 0a 09 72 68 61 73 68      zobj;..rhash
1290: 20 20 20 20 20 20 20 20 20 20 20 72 68 61 73 68             rhash
12a0: 3b 0a 7d 20 72 68 61 73 68 5f 6f 62 6a 65 63 74  ;.} rhash_object
12b0: 3b 0a 0a 23 20 64 65 66 69 6e 65 20 67 65 74 5f  ;..# define get_
12c0: 72 68 61 73 68 5f 6f 62 6a 65 63 74 28 74 68 69  rhash_object(thi
12d0: 73 5f 7a 76 61 6c 29 20 28 28 72 68 61 73 68 5f  s_zval) ((rhash_
12e0: 6f 62 6a 65 63 74 2a 29 7a 65 6e 64 5f 6f 62 6a  object*)zend_obj
12f0: 65 63 74 5f 73 74 6f 72 65 5f 67 65 74 5f 6f 62  ect_store_get_ob
1300: 6a 65 63 74 28 74 68 69 73 5f 7a 76 61 6c 20 54  ject(this_zval T
1310: 53 52 4d 4c 53 5f 43 43 29 29 0a 23 20 64 65 66  SRMLS_CC)).# def
1320: 69 6e 65 20 67 65 74 5f 72 68 61 73 68 5f 6f 62  ine get_rhash_ob
1330: 6a 65 63 74 5f 66 72 6f 6d 5f 7a 65 6e 64 5f 6f  ject_from_zend_o
1340: 62 6a 65 63 74 28 6f 62 6a 65 63 74 29 20 28 72  bject(object) (r
1350: 68 61 73 68 5f 6f 62 6a 65 63 74 20 2a 29 28 6f  hash_object *)(o
1360: 62 6a 65 63 74 29 0a 23 65 6c 73 65 0a 74 79 70  bject).#else.typ
1370: 65 64 65 66 20 73 74 72 75 63 74 20 5f 72 68 61  edef struct _rha
1380: 73 68 5f 6f 62 6a 65 63 74 20 7b 0a 09 72 68 61  sh_object {..rha
1390: 73 68 20 20 20 20 20 20 20 20 20 20 20 72 68 61  sh           rha
13a0: 73 68 3b 0a 09 7a 65 6e 64 5f 6f 62 6a 65 63 74  sh;..zend_object
13b0: 20 20 20 20 20 7a 6f 62 6a 3b 0a 7d 20 72 68 61       zobj;.} rha
13c0: 73 68 5f 6f 62 6a 65 63 74 3b 0a 0a 73 74 61 74  sh_object;..stat
13d0: 69 63 20 72 68 61 73 68 5f 6f 62 6a 65 63 74 20  ic rhash_object 
13e0: 2a 20 67 65 74 5f 72 68 61 73 68 5f 6f 62 6a 65  * get_rhash_obje
13f0: 63 74 28 7a 76 61 6c 20 2a 74 68 69 73 5f 7a 76  ct(zval *this_zv
1400: 61 6c 29 0a 7b 0a 09 7a 65 6e 64 5f 6f 62 6a 65  al).{..zend_obje
1410: 63 74 20 2a 7a 6f 62 6a 20 3d 20 5a 5f 4f 42 4a  ct *zobj = Z_OBJ
1420: 5f 50 28 74 68 69 73 5f 7a 76 61 6c 29 3b 0a 09  _P(this_zval);..
1430: 72 65 74 75 72 6e 20 28 72 68 61 73 68 5f 6f 62  return (rhash_ob
1440: 6a 65 63 74 20 2a 29 28 28 63 68 61 72 20 2a 29  ject *)((char *)
1450: 7a 6f 62 6a 20 2d 20 58 74 4f 66 66 73 65 74 4f  zobj - XtOffsetO
1460: 66 28 72 68 61 73 68 5f 6f 62 6a 65 63 74 2c 20  f(rhash_object, 
1470: 7a 6f 62 6a 29 29 3b 0a 7d 0a 23 20 64 65 66 69  zobj));.}.# defi
1480: 6e 65 20 67 65 74 5f 72 68 61 73 68 5f 6f 62 6a  ne get_rhash_obj
1490: 65 63 74 5f 66 72 6f 6d 5f 7a 65 6e 64 5f 6f 62  ect_from_zend_ob
14a0: 6a 65 63 74 28 6f 62 6a 65 63 74 29 20 28 72 68  ject(object) (rh
14b0: 61 73 68 5f 6f 62 6a 65 63 74 20 2a 29 28 28 63  ash_object *)((c
14c0: 68 61 72 20 2a 29 6f 62 6a 65 63 74 20 2d 20 58  har *)object - X
14d0: 74 4f 66 66 73 65 74 4f 66 28 72 68 61 73 68 5f  tOffsetOf(rhash_
14e0: 6f 62 6a 65 63 74 2c 20 7a 6f 62 6a 29 29 3b 0a  object, zobj));.
14f0: 23 65 6e 64 69 66 0a 0a 73 74 61 74 69 63 20 76  #endif..static v
1500: 6f 69 64 20 72 68 61 73 68 5f 66 72 65 65 5f 6f  oid rhash_free_o
1510: 62 6a 65 63 74 28 7a 65 6e 64 5f 6f 62 6a 65 63  bject(zend_objec
1520: 74 20 2a 6f 62 6a 65 63 74 20 54 53 52 4d 4c 53  t *object TSRMLS
1530: 5f 44 43 29 0a 7b 0a 09 72 68 61 73 68 5f 6f 62  _DC).{..rhash_ob
1540: 6a 65 63 74 20 2a 6f 62 6a 20 3d 20 67 65 74 5f  ject *obj = get_
1550: 72 68 61 73 68 5f 6f 62 6a 65 63 74 5f 66 72 6f  rhash_object_fro
1560: 6d 5f 7a 65 6e 64 5f 6f 62 6a 65 63 74 28 6f 62  m_zend_object(ob
1570: 6a 65 63 74 29 3b 0a 09 69 66 20 28 6f 62 6a 2d  ject);..if (obj-
1580: 3e 72 68 61 73 68 29 0a 09 09 72 68 61 73 68 5f  >rhash)...rhash_
1590: 66 72 65 65 28 6f 62 6a 2d 3e 72 68 61 73 68 29  free(obj->rhash)
15a0: 3b 0a 0a 09 2f 2a 20 63 61 6c 6c 20 5a 65 6e 64  ;.../* call Zend
15b0: 27 73 20 66 72 65 65 20 68 61 6e 64 6c 65 72 2c  's free handler,
15c0: 20 77 68 69 63 68 20 77 69 6c 6c 20 66 72 65 65   which will free
15d0: 20 6f 62 6a 65 63 74 20 70 72 6f 70 65 72 74 69   object properti
15e0: 65 73 20 2a 2f 0a 09 7a 65 6e 64 5f 6f 62 6a 65  es */..zend_obje
15f0: 63 74 5f 73 74 64 5f 64 74 6f 72 28 6f 62 6a 65  ct_std_dtor(obje
1600: 63 74 20 54 53 52 4d 4c 53 5f 43 43 29 3b 0a 23  ct TSRMLS_CC);.#
1610: 69 66 20 50 48 50 5f 4d 41 4a 4f 52 5f 56 45 52  if PHP_MAJOR_VER
1620: 53 49 4f 4e 20 3c 20 37 0a 09 65 66 72 65 65 28  SION < 7..efree(
1630: 6f 62 6a 65 63 74 29 3b 0a 23 65 6e 64 69 66 0a  object);.#endif.
1640: 7d 0a 0a 2f 2a 20 41 6c 6c 6f 63 61 74 65 20 6d  }../* Allocate m
1650: 65 6d 6f 72 79 20 66 6f 72 20 6e 65 77 20 72 68  emory for new rh
1660: 61 73 68 5f 6f 62 6a 65 63 74 20 2a 2f 0a 23 69  ash_object */.#i
1670: 66 20 50 48 50 5f 4d 41 4a 4f 52 5f 56 45 52 53  f PHP_MAJOR_VERS
1680: 49 4f 4e 20 3c 20 37 0a 73 74 61 74 69 63 20 7a  ION < 7.static z
1690: 65 6e 64 5f 6f 62 6a 65 63 74 5f 76 61 6c 75 65  end_object_value
16a0: 20 72 68 61 73 68 5f 63 72 65 61 74 65 5f 6f 62   rhash_create_ob
16b0: 6a 65 63 74 28 7a 65 6e 64 5f 63 6c 61 73 73 5f  ject(zend_class_
16c0: 65 6e 74 72 79 20 2a 63 65 20 54 53 52 4d 4c 53  entry *ce TSRMLS
16d0: 5f 44 43 29 0a 7b 0a 09 7a 65 6e 64 5f 6f 62 6a  _DC).{..zend_obj
16e0: 65 63 74 5f 76 61 6c 75 65 20 72 65 74 76 61 6c  ect_value retval
16f0: 3b 0a 0a 09 72 68 61 73 68 5f 6f 62 6a 65 63 74  ;...rhash_object
1700: 20 2a 6f 62 6a 20 3d 20 28 72 68 61 73 68 5f 6f   *obj = (rhash_o
1710: 62 6a 65 63 74 20 2a 29 65 6d 61 6c 6c 6f 63 28  bject *)emalloc(
1720: 73 69 7a 65 6f 66 28 72 68 61 73 68 5f 6f 62 6a  sizeof(rhash_obj
1730: 65 63 74 29 29 3b 0a 09 6d 65 6d 73 65 74 28 6f  ect));..memset(o
1740: 62 6a 2c 20 30 2c 20 73 69 7a 65 6f 66 28 72 68  bj, 0, sizeof(rh
1750: 61 73 68 5f 6f 62 6a 65 63 74 29 29 3b 0a 09 7a  ash_object));..z
1760: 65 6e 64 5f 6f 62 6a 65 63 74 5f 73 74 64 5f 69  end_object_std_i
1770: 6e 69 74 28 26 6f 62 6a 2d 3e 7a 6f 62 6a 2c 20  nit(&obj->zobj, 
1780: 63 65 20 54 53 52 4d 4c 53 5f 43 43 29 3b 0a 09  ce TSRMLS_CC);..
1790: 6f 62 6a 2d 3e 72 68 61 73 68 20 3d 20 4e 55 4c  obj->rhash = NUL
17a0: 4c 3b 0a 0a 09 2f 2a 20 63 61 6c 6c 20 6f 62 6a  L;.../* call obj
17b0: 65 63 74 5f 70 72 6f 70 65 72 74 69 65 73 5f 69  ect_properties_i
17c0: 6e 69 74 28 29 2c 20 62 65 63 61 75 73 65 20 65  nit(), because e
17d0: 78 74 65 6e 64 69 6e 67 20 63 6c 61 73 73 65 73  xtending classes
17e0: 20 6d 61 79 20 75 73 65 20 70 72 6f 70 65 72 74   may use propert
17f0: 69 65 73 2e 20 2a 2f 0a 09 6f 62 6a 65 63 74 5f  ies. */..object_
1800: 70 72 6f 70 65 72 74 69 65 73 5f 69 6e 69 74 28  properties_init(
1810: 26 6f 62 6a 2d 3e 7a 6f 62 6a 2c 20 63 65 29 3b  &obj->zobj, ce);
1820: 0a 0a 09 72 65 74 76 61 6c 2e 68 61 6e 64 6c 65  ...retval.handle
1830: 20 3d 20 7a 65 6e 64 5f 6f 62 6a 65 63 74 73 5f   = zend_objects_
1840: 73 74 6f 72 65 5f 70 75 74 28 6f 62 6a 2c 0a 09  store_put(obj,..
1850: 09 28 7a 65 6e 64 5f 6f 62 6a 65 63 74 73 5f 73  .(zend_objects_s
1860: 74 6f 72 65 5f 64 74 6f 72 5f 74 29 20 7a 65 6e  tore_dtor_t) zen
1870: 64 5f 6f 62 6a 65 63 74 73 5f 64 65 73 74 72 6f  d_objects_destro
1880: 79 5f 6f 62 6a 65 63 74 2c 0a 09 09 28 7a 65 6e  y_object,...(zen
1890: 64 5f 6f 62 6a 65 63 74 73 5f 66 72 65 65 5f 6f  d_objects_free_o
18a0: 62 6a 65 63 74 5f 73 74 6f 72 61 67 65 5f 74 29  bject_storage_t)
18b0: 72 68 61 73 68 5f 66 72 65 65 5f 6f 62 6a 65 63  rhash_free_objec
18c0: 74 2c 20 4e 55 4c 4c 20 54 53 52 4d 4c 53 5f 43  t, NULL TSRMLS_C
18d0: 43 29 3b 0a 09 72 65 74 76 61 6c 2e 68 61 6e 64  C);..retval.hand
18e0: 6c 65 72 73 20 3d 20 26 72 68 61 73 68 5f 6f 62  lers = &rhash_ob
18f0: 6a 65 63 74 5f 68 61 6e 64 6c 65 72 73 3b 0a 09  ject_handlers;..
1900: 72 65 74 75 72 6e 20 72 65 74 76 61 6c 3b 0a 7d  return retval;.}
1910: 0a 23 65 6c 73 65 0a 73 74 61 74 69 63 20 7a 65  .#else.static ze
1920: 6e 64 5f 6f 62 6a 65 63 74 20 2a 72 68 61 73 68  nd_object *rhash
1930: 5f 63 72 65 61 74 65 5f 6f 62 6a 65 63 74 28 7a  _create_object(z
1940: 65 6e 64 5f 63 6c 61 73 73 5f 65 6e 74 72 79 20  end_class_entry 
1950: 2a 63 65 20 54 53 52 4d 4c 53 5f 44 43 29 0a 7b  *ce TSRMLS_DC).{
1960: 0a 09 72 68 61 73 68 5f 6f 62 6a 65 63 74 20 2a  ..rhash_object *
1970: 6f 62 6a 20 3d 20 65 63 61 6c 6c 6f 63 28 31 2c  obj = ecalloc(1,
1980: 20 73 69 7a 65 6f 66 28 2a 6f 62 6a 29 20 2b 20   sizeof(*obj) + 
1990: 7a 65 6e 64 5f 6f 62 6a 65 63 74 5f 70 72 6f 70  zend_object_prop
19a0: 65 72 74 69 65 73 5f 73 69 7a 65 28 63 65 29 29  erties_size(ce))
19b0: 3b 0a 09 7a 65 6e 64 5f 6f 62 6a 65 63 74 5f 73  ;..zend_object_s
19c0: 74 64 5f 69 6e 69 74 28 26 6f 62 6a 2d 3e 7a 6f  td_init(&obj->zo
19d0: 62 6a 2c 20 63 65 20 54 53 52 4d 4c 53 5f 43 43  bj, ce TSRMLS_CC
19e0: 29 3b 0a 0a 09 6f 62 6a 2d 3e 7a 6f 62 6a 2e 68  );...obj->zobj.h
19f0: 61 6e 64 6c 65 72 73 20 3d 20 26 72 68 61 73 68  andlers = &rhash
1a00: 5f 6f 62 6a 65 63 74 5f 68 61 6e 64 6c 65 72 73  _object_handlers
1a10: 3b 0a 09 72 65 74 75 72 6e 20 26 6f 62 6a 2d 3e  ;..return &obj->
1a20: 7a 6f 62 6a 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  zobj;.}.#endif..
1a30: 2f 2a 20 7b 7b 7b 20 50 48 50 5f 4d 49 4e 49 54  /* {{{ PHP_MINIT
1a40: 5f 46 55 4e 43 54 49 4f 4e 28 72 68 61 73 68 29  _FUNCTION(rhash)
1a50: 20 2a 2f 0a 50 48 50 5f 4d 49 4e 49 54 5f 46 55   */.PHP_MINIT_FU
1a60: 4e 43 54 49 4f 4e 28 72 68 61 73 68 29 0a 7b 0a  NCTION(rhash).{.
1a70: 09 7a 65 6e 64 5f 63 6c 61 73 73 5f 65 6e 74 72  .zend_class_entr
1a80: 79 20 63 65 3b 0a 09 72 68 61 73 68 5f 6c 69 62  y ce;..rhash_lib
1a90: 72 61 72 79 5f 69 6e 69 74 28 29 3b 20 2f 2a 20  rary_init(); /* 
1aa0: 69 6e 69 74 69 61 6c 69 7a 65 20 4c 69 62 52 48  initialize LibRH
1ab0: 61 73 68 20 2a 2f 0a 0a 09 2f 2a 20 72 65 67 69  ash */.../* regi
1ac0: 73 74 65 72 20 52 48 61 73 68 20 63 6c 61 73 73  ster RHash class
1ad0: 2c 20 69 74 73 20 6d 65 74 68 6f 64 73 20 61 6e  , its methods an
1ae0: 64 20 68 61 6e 64 6c 65 72 73 20 2a 2f 0a 09 49  d handlers */..I
1af0: 4e 49 54 5f 43 4c 41 53 53 5f 45 4e 54 52 59 28  NIT_CLASS_ENTRY(
1b00: 63 65 2c 20 22 52 48 61 73 68 22 2c 20 72 68 61  ce, "RHash", rha
1b10: 73 68 5f 6d 65 74 68 6f 64 73 29 3b 0a 09 72 68  sh_methods);..rh
1b20: 61 73 68 5f 63 65 20 3d 20 7a 65 6e 64 5f 72 65  ash_ce = zend_re
1b30: 67 69 73 74 65 72 5f 69 6e 74 65 72 6e 61 6c 5f  gister_internal_
1b40: 63 6c 61 73 73 28 26 63 65 20 54 53 52 4d 4c 53  class(&ce TSRMLS
1b50: 5f 43 43 29 3b 0a 09 72 68 61 73 68 5f 63 65 2d  _CC);..rhash_ce-
1b60: 3e 63 72 65 61 74 65 5f 6f 62 6a 65 63 74 20 3d  >create_object =
1b70: 20 72 68 61 73 68 5f 63 72 65 61 74 65 5f 6f 62   rhash_create_ob
1b80: 6a 65 63 74 3b 0a 0a 09 6d 65 6d 63 70 79 28 26  ject;...memcpy(&
1b90: 72 68 61 73 68 5f 6f 62 6a 65 63 74 5f 68 61 6e  rhash_object_han
1ba0: 64 6c 65 72 73 2c 0a 09 09 7a 65 6e 64 5f 67 65  dlers,...zend_ge
1bb0: 74 5f 73 74 64 5f 6f 62 6a 65 63 74 5f 68 61 6e  t_std_object_han
1bc0: 64 6c 65 72 73 28 29 2c 20 73 69 7a 65 6f 66 28  dlers(), sizeof(
1bd0: 7a 65 6e 64 5f 6f 62 6a 65 63 74 5f 68 61 6e 64  zend_object_hand
1be0: 6c 65 72 73 29 29 3b 0a 09 72 68 61 73 68 5f 6f  lers));..rhash_o
1bf0: 62 6a 65 63 74 5f 68 61 6e 64 6c 65 72 73 2e 63  bject_handlers.c
1c00: 6c 6f 6e 65 5f 6f 62 6a 20 3d 20 4e 55 4c 4c 3b  lone_obj = NULL;
1c10: 0a 23 69 66 20 50 48 50 5f 4d 41 4a 4f 52 5f 56  .#if PHP_MAJOR_V
1c20: 45 52 53 49 4f 4e 20 3e 3d 20 37 0a 09 72 68 61  ERSION >= 7..rha
1c30: 73 68 5f 6f 62 6a 65 63 74 5f 68 61 6e 64 6c 65  sh_object_handle
1c40: 72 73 2e 66 72 65 65 5f 6f 62 6a 20 3d 20 72 68  rs.free_obj = rh
1c50: 61 73 68 5f 66 72 65 65 5f 6f 62 6a 65 63 74 3b  ash_free_object;
1c60: 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68 65 20   /* This is the 
1c70: 66 72 65 65 20 68 61 6e 64 6c 65 72 20 2a 2f 0a  free handler */.
1c80: 09 72 68 61 73 68 5f 6f 62 6a 65 63 74 5f 68 61  .rhash_object_ha
1c90: 6e 64 6c 65 72 73 2e 6f 66 66 73 65 74 20 20 20  ndlers.offset   
1ca0: 3d 20 58 74 4f 66 66 73 65 74 4f 66 28 72 68 61  = XtOffsetOf(rha
1cb0: 73 68 5f 6f 62 6a 65 63 74 2c 20 7a 6f 62 6a 29  sh_object, zobj)
1cc0: 3b 0a 23 65 6e 64 69 66 0a 0a 09 52 45 47 49 53  ;.#endif...REGIS
1cd0: 54 45 52 5f 52 48 41 53 48 5f 43 4f 4e 53 54 41  TER_RHASH_CONSTA
1ce0: 4e 54 28 52 48 41 53 48 5f 43 52 43 33 32 29 3b  NT(RHASH_CRC32);
1cf0: 0a 09 52 45 47 49 53 54 45 52 5f 52 48 41 53 48  ..REGISTER_RHASH
1d00: 5f 43 4f 4e 53 54 41 4e 54 28 52 48 41 53 48 5f  _CONSTANT(RHASH_
1d10: 4d 44 34 29 3b 0a 09 52 45 47 49 53 54 45 52 5f  MD4);..REGISTER_
1d20: 52 48 41 53 48 5f 43 4f 4e 53 54 41 4e 54 28 52  RHASH_CONSTANT(R
1d30: 48 41 53 48 5f 4d 44 35 29 3b 0a 09 52 45 47 49  HASH_MD5);..REGI
1d40: 53 54 45 52 5f 52 48 41 53 48 5f 43 4f 4e 53 54  STER_RHASH_CONST
1d50: 41 4e 54 28 52 48 41 53 48 5f 53 48 41 31 29 3b  ANT(RHASH_SHA1);
1d60: 0a 09 52 45 47 49 53 54 45 52 5f 52 48 41 53 48  ..REGISTER_RHASH
1d70: 5f 43 4f 4e 53 54 41 4e 54 28 52 48 41 53 48 5f  _CONSTANT(RHASH_
1d80: 54 49 47 45 52 29 3b 0a 09 52 45 47 49 53 54 45  TIGER);..REGISTE
1d90: 52 5f 52 48 41 53 48 5f 43 4f 4e 53 54 41 4e 54  R_RHASH_CONSTANT
1da0: 28 52 48 41 53 48 5f 54 54 48 29 3b 0a 09 52 45  (RHASH_TTH);..RE
1db0: 47 49 53 54 45 52 5f 52 48 41 53 48 5f 43 4f 4e  GISTER_RHASH_CON
1dc0: 53 54 41 4e 54 28 52 48 41 53 48 5f 42 54 49 48  STANT(RHASH_BTIH
1dd0: 29 3b 0a 09 52 45 47 49 53 54 45 52 5f 52 48 41  );..REGISTER_RHA
1de0: 53 48 5f 43 4f 4e 53 54 41 4e 54 28 52 48 41 53  SH_CONSTANT(RHAS
1df0: 48 5f 45 44 32 4b 29 3b 0a 09 52 45 47 49 53 54  H_ED2K);..REGIST
1e00: 45 52 5f 52 48 41 53 48 5f 43 4f 4e 53 54 41 4e  ER_RHASH_CONSTAN
1e10: 54 28 52 48 41 53 48 5f 41 49 43 48 29 3b 0a 09  T(RHASH_AICH);..
1e20: 52 45 47 49 53 54 45 52 5f 52 48 41 53 48 5f 43  REGISTER_RHASH_C
1e30: 4f 4e 53 54 41 4e 54 28 52 48 41 53 48 5f 57 48  ONSTANT(RHASH_WH
1e40: 49 52 4c 50 4f 4f 4c 29 3b 0a 09 52 45 47 49 53  IRLPOOL);..REGIS
1e50: 54 45 52 5f 52 48 41 53 48 5f 43 4f 4e 53 54 41  TER_RHASH_CONSTA
1e60: 4e 54 28 52 48 41 53 48 5f 52 49 50 45 4d 44 31  NT(RHASH_RIPEMD1
1e70: 36 30 29 3b 0a 09 52 45 47 49 53 54 45 52 5f 52  60);..REGISTER_R
1e80: 48 41 53 48 5f 43 4f 4e 53 54 41 4e 54 28 52 48  HASH_CONSTANT(RH
1e90: 41 53 48 5f 47 4f 53 54 29 3b 0a 09 52 45 47 49  ASH_GOST);..REGI
1ea0: 53 54 45 52 5f 52 48 41 53 48 5f 43 4f 4e 53 54  STER_RHASH_CONST
1eb0: 41 4e 54 28 52 48 41 53 48 5f 47 4f 53 54 5f 43  ANT(RHASH_GOST_C
1ec0: 52 59 50 54 4f 50 52 4f 29 3b 0a 09 52 45 47 49  RYPTOPRO);..REGI
1ed0: 53 54 45 52 5f 52 48 41 53 48 5f 43 4f 4e 53 54  STER_RHASH_CONST
1ee0: 41 4e 54 28 52 48 41 53 48 5f 48 41 53 31 36 30  ANT(RHASH_HAS160
1ef0: 29 3b 0a 09 52 45 47 49 53 54 45 52 5f 52 48 41  );..REGISTER_RHA
1f00: 53 48 5f 43 4f 4e 53 54 41 4e 54 28 52 48 41 53  SH_CONSTANT(RHAS
1f10: 48 5f 53 4e 45 46 52 55 31 32 38 29 3b 0a 09 52  H_SNEFRU128);..R
1f20: 45 47 49 53 54 45 52 5f 52 48 41 53 48 5f 43 4f  EGISTER_RHASH_CO
1f30: 4e 53 54 41 4e 54 28 52 48 41 53 48 5f 53 4e 45  NSTANT(RHASH_SNE
1f40: 46 52 55 32 35 36 29 3b 0a 09 52 45 47 49 53 54  FRU256);..REGIST
1f50: 45 52 5f 52 48 41 53 48 5f 43 4f 4e 53 54 41 4e  ER_RHASH_CONSTAN
1f60: 54 28 52 48 41 53 48 5f 53 48 41 32 32 34 29 3b  T(RHASH_SHA224);
1f70: 0a 09 52 45 47 49 53 54 45 52 5f 52 48 41 53 48  ..REGISTER_RHASH
1f80: 5f 43 4f 4e 53 54 41 4e 54 28 52 48 41 53 48 5f  _CONSTANT(RHASH_
1f90: 53 48 41 32 35 36 29 3b 0a 09 52 45 47 49 53 54  SHA256);..REGIST
1fa0: 45 52 5f 52 48 41 53 48 5f 43 4f 4e 53 54 41 4e  ER_RHASH_CONSTAN
1fb0: 54 28 52 48 41 53 48 5f 53 48 41 33 38 34 29 3b  T(RHASH_SHA384);
1fc0: 0a 09 52 45 47 49 53 54 45 52 5f 52 48 41 53 48  ..REGISTER_RHASH
1fd0: 5f 43 4f 4e 53 54 41 4e 54 28 52 48 41 53 48 5f  _CONSTANT(RHASH_
1fe0: 53 48 41 35 31 32 29 3b 0a 09 52 45 47 49 53 54  SHA512);..REGIST
1ff0: 45 52 5f 52 48 41 53 48 5f 43 4f 4e 53 54 41 4e  ER_RHASH_CONSTAN
2000: 54 28 52 48 41 53 48 5f 45 44 4f 4e 52 32 35 36  T(RHASH_EDONR256
2010: 29 3b 0a 09 52 45 47 49 53 54 45 52 5f 52 48 41  );..REGISTER_RHA
2020: 53 48 5f 43 4f 4e 53 54 41 4e 54 28 52 48 41 53  SH_CONSTANT(RHAS
2030: 48 5f 45 44 4f 4e 52 35 31 32 29 3b 0a 09 52 45  H_EDONR512);..RE
2040: 47 49 53 54 45 52 5f 52 48 41 53 48 5f 43 4f 4e  GISTER_RHASH_CON
2050: 53 54 41 4e 54 28 52 48 41 53 48 5f 53 48 41 33  STANT(RHASH_SHA3
2060: 5f 32 32 34 29 3b 0a 09 52 45 47 49 53 54 45 52  _224);..REGISTER
2070: 5f 52 48 41 53 48 5f 43 4f 4e 53 54 41 4e 54 28  _RHASH_CONSTANT(
2080: 52 48 41 53 48 5f 53 48 41 33 5f 32 35 36 29 3b  RHASH_SHA3_256);
2090: 0a 09 52 45 47 49 53 54 45 52 5f 52 48 41 53 48  ..REGISTER_RHASH
20a0: 5f 43 4f 4e 53 54 41 4e 54 28 52 48 41 53 48 5f  _CONSTANT(RHASH_
20b0: 53 48 41 33 5f 33 38 34 29 3b 0a 09 52 45 47 49  SHA3_384);..REGI
20c0: 53 54 45 52 5f 52 48 41 53 48 5f 43 4f 4e 53 54  STER_RHASH_CONST
20d0: 41 4e 54 28 52 48 41 53 48 5f 53 48 41 33 5f 35  ANT(RHASH_SHA3_5
20e0: 31 32 29 3b 0a 09 52 45 47 49 53 54 45 52 5f 52  12);..REGISTER_R
20f0: 48 41 53 48 5f 43 4f 4e 53 54 41 4e 54 28 52 48  HASH_CONSTANT(RH
2100: 41 53 48 5f 41 4c 4c 29 3b 0a 0a 09 72 65 74 75  ASH_ALL);...retu
2110: 72 6e 20 53 55 43 43 45 53 53 3b 0a 7d 0a 2f 2a  rn SUCCESS;.}./*
2120: 20 7d 7d 7d 20 2a 2f 0a 0a 2f 2a 20 7b 7b 7b 20   }}} */../* {{{ 
2130: 50 48 50 5f 4d 53 48 55 54 44 4f 57 4e 5f 46 55  PHP_MSHUTDOWN_FU
2140: 4e 43 54 49 4f 4e 28 72 68 61 73 68 29 20 2a 2f  NCTION(rhash) */
2150: 0a 50 48 50 5f 4d 53 48 55 54 44 4f 57 4e 5f 46  .PHP_MSHUTDOWN_F
2160: 55 4e 43 54 49 4f 4e 28 72 68 61 73 68 29 0a 7b  UNCTION(rhash).{
2170: 0a 09 72 65 74 75 72 6e 20 53 55 43 43 45 53 53  ..return SUCCESS
2180: 3b 0a 7d 0a 2f 2a 20 7d 7d 7d 20 2a 2f 0a 0a 2f  ;.}./* }}} */../
2190: 2a 20 7b 7b 7b 20 50 48 50 5f 4d 49 4e 46 4f 5f  * {{{ PHP_MINFO_
21a0: 46 55 4e 43 54 49 4f 4e 28 72 68 61 73 68 29 20  FUNCTION(rhash) 
21b0: 2a 2f 0a 50 48 50 5f 4d 49 4e 46 4f 5f 46 55 4e  */.PHP_MINFO_FUN
21c0: 43 54 49 4f 4e 28 72 68 61 73 68 29 0a 7b 0a 09  CTION(rhash).{..
21d0: 70 68 70 5f 69 6e 66 6f 5f 70 72 69 6e 74 5f 74  php_info_print_t
21e0: 61 62 6c 65 5f 73 74 61 72 74 28 29 3b 0a 09 70  able_start();..p
21f0: 68 70 5f 69 6e 66 6f 5f 70 72 69 6e 74 5f 74 61  hp_info_print_ta
2200: 62 6c 65 5f 72 6f 77 28 32 2c 20 22 72 68 61 73  ble_row(2, "rhas
2210: 68 20 73 75 70 70 6f 72 74 22 2c 20 22 65 6e 61  h support", "ena
2220: 62 6c 65 64 22 29 3b 0a 09 70 68 70 5f 69 6e 66  bled");..php_inf
2230: 6f 5f 70 72 69 6e 74 5f 74 61 62 6c 65 5f 65 6e  o_print_table_en
2240: 64 28 29 3b 0a 7d 0a 2f 2a 20 7d 7d 7d 20 2a 2f  d();.}./* }}} */
2250: 0a 0a 2f 2a 20 47 6c 6f 62 61 6c 20 66 75 6e 63  ../* Global func
2260: 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 20 7b 7b 7b  tions */../* {{{
2270: 20 70 72 6f 74 6f 20 69 6e 74 20 72 68 61 73 68   proto int rhash
2280: 5f 63 6f 75 6e 74 28 29 0a 20 20 20 52 65 74 75  _count().   Retu
2290: 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  rns the number o
22a0: 66 20 73 75 70 70 6f 72 74 65 64 20 68 61 73 68  f supported hash
22b0: 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 50 48   functions */.PH
22c0: 50 5f 46 55 4e 43 54 49 4f 4e 28 72 68 61 73 68  P_FUNCTION(rhash
22d0: 5f 63 6f 75 6e 74 29 20 7b 0a 09 52 45 54 55 52  _count) {..RETUR
22e0: 4e 5f 4c 4f 4e 47 28 72 68 61 73 68 5f 63 6f 75  N_LONG(rhash_cou
22f0: 6e 74 28 29 29 3b 0a 7d 0a 2f 2a 20 7d 7d 7d 20  nt());.}./* }}} 
2300: 2a 2f 0a 0a 2f 2a 20 7b 7b 7b 20 70 72 6f 74 6f  */../* {{{ proto
2310: 20 69 6e 74 20 72 68 61 73 68 5f 67 65 74 5f 64   int rhash_get_d
2320: 69 67 65 73 74 5f 73 69 7a 65 28 69 6e 74 20 68  igest_size(int h
2330: 61 73 68 5f 69 64 29 0a 20 20 20 52 65 74 75 72  ash_id).   Retur
2340: 6e 73 20 74 68 65 20 73 69 7a 65 20 69 6e 20 62  ns the size in b
2350: 79 74 65 73 20 6f 66 20 6d 65 73 73 61 67 65 20  ytes of message 
2360: 64 69 67 65 73 74 20 6f 66 20 74 68 65 20 73 70  digest of the sp
2370: 65 63 69 66 69 65 64 20 68 61 73 68 20 66 75 6e  ecified hash fun
2380: 63 74 69 6f 6e 20 2a 2f 0a 50 48 50 5f 46 55 4e  ction */.PHP_FUN
2390: 43 54 49 4f 4e 28 72 68 61 73 68 5f 67 65 74 5f  CTION(rhash_get_
23a0: 64 69 67 65 73 74 5f 73 69 7a 65 29 20 7b 0a 09  digest_size) {..
23b0: 7a 65 6e 64 5f 6c 6f 6e 67 20 68 61 73 68 5f 69  zend_long hash_i
23c0: 64 3b 0a 0a 09 69 66 20 28 7a 65 6e 64 5f 70 61  d;...if (zend_pa
23d0: 72 73 65 5f 70 61 72 61 6d 65 74 65 72 73 28 5a  rse_parameters(Z
23e0: 45 4e 44 5f 4e 55 4d 5f 41 52 47 53 28 29 20 54  END_NUM_ARGS() T
23f0: 53 52 4d 4c 53 5f 43 43 2c 20 22 6c 22 2c 20 26  SRMLS_CC, "l", &
2400: 68 61 73 68 5f 69 64 29 20 3d 3d 20 46 41 49 4c  hash_id) == FAIL
2410: 55 52 45 29 20 7b 0a 09 09 52 45 54 55 52 4e 5f  URE) {...RETURN_
2420: 46 41 4c 53 45 3b 0a 09 7d 0a 09 52 45 54 55 52  FALSE;..}..RETUR
2430: 4e 5f 4c 4f 4e 47 28 72 68 61 73 68 5f 67 65 74  N_LONG(rhash_get
2440: 5f 64 69 67 65 73 74 5f 73 69 7a 65 28 28 75 6e  _digest_size((un
2450: 73 69 67 6e 65 64 29 68 61 73 68 5f 69 64 29 29  signed)hash_id))
2460: 3b 0a 7d 0a 2f 2a 20 7d 7d 7d 20 2a 2f 0a 0a 2f  ;.}./* }}} */../
2470: 2a 20 7b 7b 7b 20 70 72 6f 74 6f 20 62 6f 6f 6c  * {{{ proto bool
2480: 65 61 6e 20 72 68 61 73 68 5f 69 73 5f 62 61 73  ean rhash_is_bas
2490: 65 33 32 28 69 6e 74 20 68 61 73 68 5f 69 64 29  e32(int hash_id)
24a0: 0a 20 20 20 52 65 74 75 72 6e 73 20 74 72 75 65  .   Returns true
24b0: 20 69 66 20 64 65 66 61 75 6c 74 20 66 6f 72 6d   if default form
24c0: 61 74 20 6f 66 20 6d 65 73 73 61 67 65 20 64 69  at of message di
24d0: 67 65 73 74 20 69 73 20 62 61 73 65 33 32 20 61  gest is base32 a
24e0: 6e 64 20 66 61 6c 73 65 20 69 66 20 69 74 27 73  nd false if it's
24f0: 20 68 65 78 61 64 65 63 69 6d 61 6c 20 2a 2f 0a   hexadecimal */.
2500: 50 48 50 5f 46 55 4e 43 54 49 4f 4e 28 72 68 61  PHP_FUNCTION(rha
2510: 73 68 5f 69 73 5f 62 61 73 65 33 32 29 20 7b 0a  sh_is_base32) {.
2520: 09 7a 65 6e 64 5f 6c 6f 6e 67 20 68 61 73 68 5f  .zend_long hash_
2530: 69 64 3b 0a 0a 09 69 66 20 28 7a 65 6e 64 5f 70  id;...if (zend_p
2540: 61 72 73 65 5f 70 61 72 61 6d 65 74 65 72 73 28  arse_parameters(
2550: 5a 45 4e 44 5f 4e 55 4d 5f 41 52 47 53 28 29 20  ZEND_NUM_ARGS() 
2560: 54 53 52 4d 4c 53 5f 43 43 2c 20 22 6c 22 2c 20  TSRMLS_CC, "l", 
2570: 26 68 61 73 68 5f 69 64 29 20 3d 3d 20 46 41 49  &hash_id) == FAI
2580: 4c 55 52 45 29 20 7b 0a 09 09 52 45 54 55 52 4e  LURE) {...RETURN
2590: 5f 46 41 4c 53 45 3b 0a 09 7d 0a 09 52 45 54 55  _FALSE;..}..RETU
25a0: 52 4e 5f 42 4f 4f 4c 28 72 68 61 73 68 5f 69 73  RN_BOOL(rhash_is
25b0: 5f 62 61 73 65 33 32 28 28 75 6e 73 69 67 6e 65  _base32((unsigne
25c0: 64 29 68 61 73 68 5f 69 64 29 29 3b 0a 7d 0a 2f  d)hash_id));.}./
25d0: 2a 20 7d 7d 7d 20 2a 2f 0a 0a 2f 2a 20 7b 7b 7b  * }}} */../* {{{
25e0: 20 70 72 6f 74 6f 20 73 74 72 69 6e 67 20 72 68   proto string rh
25f0: 61 73 68 5f 67 65 74 5f 6e 61 6d 65 28 69 6e 74  ash_get_name(int
2600: 20 68 61 73 68 5f 69 64 29 0a 20 20 20 52 65 74   hash_id).   Ret
2610: 75 72 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  urns the name of
2620: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 68   the specified h
2630: 61 73 68 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ash function */.
2640: 50 48 50 5f 46 55 4e 43 54 49 4f 4e 28 72 68 61  PHP_FUNCTION(rha
2650: 73 68 5f 67 65 74 5f 6e 61 6d 65 29 20 7b 0a 09  sh_get_name) {..
2660: 7a 65 6e 64 5f 6c 6f 6e 67 20 68 61 73 68 5f 69  zend_long hash_i
2670: 64 3b 0a 0a 09 69 66 20 28 7a 65 6e 64 5f 70 61  d;...if (zend_pa
2680: 72 73 65 5f 70 61 72 61 6d 65 74 65 72 73 28 5a  rse_parameters(Z
2690: 45 4e 44 5f 4e 55 4d 5f 41 52 47 53 28 29 20 54  END_NUM_ARGS() T
26a0: 53 52 4d 4c 53 5f 43 43 2c 20 22 6c 22 2c 20 26  SRMLS_CC, "l", &
26b0: 68 61 73 68 5f 69 64 29 20 3d 3d 20 46 41 49 4c  hash_id) == FAIL
26c0: 55 52 45 29 20 7b 0a 09 09 52 45 54 55 52 4e 5f  URE) {...RETURN_
26d0: 46 41 4c 53 45 3b 0a 09 7d 0a 09 5f 52 45 54 55  FALSE;..}.._RETU
26e0: 52 4e 5f 53 54 52 49 4e 47 28 72 68 61 73 68 5f  RN_STRING(rhash_
26f0: 67 65 74 5f 6e 61 6d 65 28 28 75 6e 73 69 67 6e  get_name((unsign
2700: 65 64 29 68 61 73 68 5f 69 64 29 29 3b 0a 7d 0a  ed)hash_id));.}.
2710: 2f 2a 20 7d 7d 7d 20 2a 2f 0a 0a 2f 2a 20 7b 7b  /* }}} */../* {{
2720: 7b 20 70 72 6f 74 6f 20 73 74 72 69 6e 67 20 72  { proto string r
2730: 68 61 73 68 5f 6d 73 67 28 69 6e 74 20 68 61 73  hash_msg(int has
2740: 68 5f 69 64 2c 20 73 74 72 69 6e 67 20 6d 65 73  h_id, string mes
2750: 73 61 67 65 29 0a 20 20 20 52 65 74 75 72 6e 73  sage).   Returns
2760: 20 6d 65 73 73 61 67 65 20 64 69 67 65 73 74 20   message digest 
2770: 66 6f 72 20 74 68 65 20 6d 65 73 73 61 67 65 20  for the message 
2780: 73 74 72 69 6e 67 20 2a 2f 0a 50 48 50 5f 46 55  string */.PHP_FU
2790: 4e 43 54 49 4f 4e 28 72 68 61 73 68 5f 6d 73 67  NCTION(rhash_msg
27a0: 29 20 7b 0a 09 7a 65 6e 64 5f 6c 6f 6e 67 20 68  ) {..zend_long h
27b0: 61 73 68 5f 69 64 3b 0a 09 63 68 61 72 20 2a 73  ash_id;..char *s
27c0: 3b 0a 09 73 74 72 73 69 7a 65 5f 74 20 73 5f 6c  ;..strsize_t s_l
27d0: 65 6e 3b 0a 09 73 74 72 73 69 7a 65 5f 74 20 6c  en;..strsize_t l
27e0: 65 6e 67 74 68 3b 0a 09 72 68 61 73 68 20 63 6f  ength;..rhash co
27f0: 6e 74 65 78 74 20 3d 20 4e 55 4c 4c 3b 0a 09 63  ntext = NULL;..c
2800: 68 61 72 20 62 75 66 66 65 72 5b 31 33 30 5d 3b  har buffer[130];
2810: 0a 0a 09 69 66 20 28 7a 65 6e 64 5f 70 61 72 73  ...if (zend_pars
2820: 65 5f 70 61 72 61 6d 65 74 65 72 73 28 5a 45 4e  e_parameters(ZEN
2830: 44 5f 4e 55 4d 5f 41 52 47 53 28 29 20 54 53 52  D_NUM_ARGS() TSR
2840: 4d 4c 53 5f 43 43 2c 20 22 6c 73 22 2c 20 26 68  MLS_CC, "ls", &h
2850: 61 73 68 5f 69 64 2c 20 26 73 2c 20 26 73 5f 6c  ash_id, &s, &s_l
2860: 65 6e 29 20 3d 3d 20 46 41 49 4c 55 52 45 29 20  en) == FAILURE) 
2870: 7b 0a 09 09 52 45 54 55 52 4e 5f 4e 55 4c 4c 28  {...RETURN_NULL(
2880: 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 28 63 6f  );..}...if (!(co
2890: 6e 74 65 78 74 20 3d 20 72 68 61 73 68 5f 69 6e  ntext = rhash_in
28a0: 69 74 28 28 75 6e 73 69 67 6e 65 64 29 68 61 73  it((unsigned)has
28b0: 68 5f 69 64 29 29 29 20 7b 0a 09 09 52 45 54 55  h_id))) {...RETU
28c0: 52 4e 5f 4e 55 4c 4c 28 29 3b 0a 09 7d 0a 0a 09  RN_NULL();..}...
28d0: 72 68 61 73 68 5f 75 70 64 61 74 65 28 63 6f 6e  rhash_update(con
28e0: 74 65 78 74 2c 20 73 2c 20 73 5f 6c 65 6e 29 3b  text, s, s_len);
28f0: 0a 09 72 68 61 73 68 5f 66 69 6e 61 6c 28 63 6f  ..rhash_final(co
2900: 6e 74 65 78 74 2c 20 30 29 3b 0a 09 6c 65 6e 67  ntext, 0);..leng
2910: 74 68 20 3d 20 72 68 61 73 68 5f 70 72 69 6e 74  th = rhash_print
2920: 28 62 75 66 66 65 72 2c 20 63 6f 6e 74 65 78 74  (buffer, context
2930: 2c 20 28 75 6e 73 69 67 6e 65 64 29 68 61 73 68  , (unsigned)hash
2940: 5f 69 64 2c 20 30 29 3b 0a 09 72 68 61 73 68 5f  _id, 0);..rhash_
2950: 66 72 65 65 28 63 6f 6e 74 65 78 74 29 3b 0a 09  free(context);..
2960: 5f 52 45 54 55 52 4e 5f 53 54 52 49 4e 47 4c 28  _RETURN_STRINGL(
2970: 62 75 66 66 65 72 2c 20 6c 65 6e 67 74 68 29 3b  buffer, length);
2980: 0a 7d 0a 0a 2f 2a 20 43 61 6c 63 75 6c 61 74 65  .}../* Calculate
2990: 20 68 61 73 68 20 66 6f 72 20 61 20 70 68 70 20   hash for a php 
29a0: 73 74 72 65 61 6d 2e 20 52 65 74 75 72 6e 73 20  stream. Returns 
29b0: 53 55 43 43 45 53 53 20 6f 72 20 46 41 49 4c 55  SUCCESS or FAILU
29c0: 52 45 2e 20 2a 2f 0a 73 74 61 74 69 63 20 73 74  RE. */.static st
29d0: 72 73 69 7a 65 5f 74 20 5f 70 68 70 5f 72 68 61  rsize_t _php_rha
29e0: 73 68 5f 73 74 72 65 61 6d 28 49 4e 54 45 52 4e  sh_stream(INTERN
29f0: 41 4c 5f 46 55 4e 43 54 49 4f 4e 5f 50 41 52 41  AL_FUNCTION_PARA
2a00: 4d 45 54 45 52 53 2c 20 72 68 61 73 68 20 63 6f  METERS, rhash co
2a10: 6e 74 65 78 74 2c 20 70 68 70 5f 73 74 72 65 61  ntext, php_strea
2a20: 6d 20 2a 73 74 72 65 61 6d 2c 20 7a 65 6e 64 5f  m *stream, zend_
2a30: 6c 6f 6e 67 20 73 74 61 72 74 2c 20 7a 65 6e 64  long start, zend
2a40: 5f 6c 6f 6e 67 20 73 69 7a 65 29 0a 7b 0a 09 63  _long size).{..c
2a50: 68 61 72 20 64 61 74 61 5b 38 31 39 32 5d 3b 0a  har data[8192];.
2a60: 09 69 66 20 28 63 6f 6e 74 65 78 74 20 3d 3d 20  .if (context == 
2a70: 4e 55 4c 4c 29 20 7b 0a 09 09 72 68 61 73 68 5f  NULL) {...rhash_
2a80: 6f 62 6a 65 63 74 20 2a 6f 62 6a 20 3d 20 67 65  object *obj = ge
2a90: 74 5f 72 68 61 73 68 5f 6f 62 6a 65 63 74 28 67  t_rhash_object(g
2aa0: 65 74 54 68 69 73 28 29 29 3b 0a 09 09 69 66 20  etThis());...if 
2ab0: 28 28 63 6f 6e 74 65 78 74 20 3d 20 6f 62 6a 2d  ((context = obj-
2ac0: 3e 72 68 61 73 68 29 20 3d 3d 20 4e 55 4c 4c 29  >rhash) == NULL)
2ad0: 20 72 65 74 75 72 6e 20 46 41 49 4c 55 52 45 3b   return FAILURE;
2ae0: 0a 09 7d 0a 0a 09 69 66 20 28 73 74 61 72 74 20  ..}...if (start 
2af0: 3e 3d 20 30 29 20 7b 0a 09 09 69 66 20 28 70 68  >= 0) {...if (ph
2b00: 70 5f 73 74 72 65 61 6d 5f 73 65 65 6b 28 73 74  p_stream_seek(st
2b10: 72 65 61 6d 2c 20 73 74 61 72 74 2c 20 53 45 45  ream, start, SEE
2b20: 4b 5f 53 45 54 29 20 3c 20 30 29 20 72 65 74 75  K_SET) < 0) retu
2b30: 72 6e 20 46 41 49 4c 55 52 45 3b 0a 09 7d 0a 0a  rn FAILURE;..}..
2b40: 09 69 66 20 28 73 69 7a 65 20 3e 3d 20 30 29 20  .if (size >= 0) 
2b50: 7b 0a 09 09 77 68 69 6c 65 20 28 73 69 7a 65 20  {...while (size 
2b60: 3e 20 30 20 26 26 20 21 70 68 70 5f 73 74 72 65  > 0 && !php_stre
2b70: 61 6d 5f 65 6f 66 28 73 74 72 65 61 6d 29 29 20  am_eof(stream)) 
2b80: 7b 0a 09 09 09 69 6e 74 20 6c 65 6e 67 74 68 20  {....int length 
2b90: 3d 20 70 68 70 5f 73 74 72 65 61 6d 5f 72 65 61  = php_stream_rea
2ba0: 64 28 73 74 72 65 61 6d 2c 20 64 61 74 61 2c 20  d(stream, data, 
2bb0: 28 73 69 7a 65 20 3c 20 38 31 39 32 20 3f 20 73  (size < 8192 ? s
2bc0: 69 7a 65 20 3a 20 38 31 39 32 29 29 3b 0a 09 09  ize : 8192));...
2bd0: 09 69 66 20 28 21 6c 65 6e 67 74 68 29 20 72 65  .if (!length) re
2be0: 74 75 72 6e 20 46 41 49 4c 55 52 45 3b 0a 09 09  turn FAILURE;...
2bf0: 09 73 69 7a 65 20 2d 3d 20 6c 65 6e 67 74 68 3b  .size -= length;
2c00: 0a 09 09 09 72 68 61 73 68 5f 75 70 64 61 74 65  ....rhash_update
2c10: 28 63 6f 6e 74 65 78 74 2c 20 64 61 74 61 2c 20  (context, data, 
2c20: 6c 65 6e 67 74 68 29 3b 0a 09 09 7d 0a 09 7d 20  length);...}..} 
2c30: 65 6c 73 65 20 7b 0a 09 09 77 68 69 6c 65 20 28  else {...while (
2c40: 21 70 68 70 5f 73 74 72 65 61 6d 5f 65 6f 66 28  !php_stream_eof(
2c50: 73 74 72 65 61 6d 29 29 20 7b 0a 09 09 09 69 6e  stream)) {....in
2c60: 74 20 6c 65 6e 67 74 68 20 3d 20 70 68 70 5f 73  t length = php_s
2c70: 74 72 65 61 6d 5f 72 65 61 64 28 73 74 72 65 61  tream_read(strea
2c80: 6d 2c 20 64 61 74 61 2c 20 38 31 39 32 29 3b 0a  m, data, 8192);.
2c90: 09 09 09 69 66 20 28 21 6c 65 6e 67 74 68 29 20  ...if (!length) 
2ca0: 72 65 74 75 72 6e 20 46 41 49 4c 55 52 45 3b 0a  return FAILURE;.
2cb0: 09 09 09 72 68 61 73 68 5f 75 70 64 61 74 65 28  ...rhash_update(
2cc0: 63 6f 6e 74 65 78 74 2c 20 64 61 74 61 2c 20 6c  context, data, l
2cd0: 65 6e 67 74 68 29 3b 0a 09 09 7d 0a 09 7d 0a 09  ength);...}..}..
2ce0: 72 65 74 75 72 6e 20 53 55 43 43 45 53 53 3b 0a  return SUCCESS;.
2cf0: 7d 0a 2f 2a 20 7d 7d 7d 20 2a 2f 0a 0a 2f 2a 20  }./* }}} */../* 
2d00: 43 61 6c 63 75 6c 61 74 65 20 68 61 73 68 20 6f  Calculate hash o
2d10: 66 20 74 68 65 20 67 69 76 65 6e 20 66 69 6c 65  f the given file
2d20: 20 6f 72 20 69 74 73 20 70 61 72 74 2e 20 52 65   or its part. Re
2d30: 74 75 72 6e 73 20 53 55 43 43 45 53 53 20 6f 72  turns SUCCESS or
2d40: 20 46 41 49 4c 55 52 45 2e 20 2a 2f 0a 73 74 61   FAILURE. */.sta
2d50: 74 69 63 20 73 74 72 73 69 7a 65 5f 74 20 5f 70  tic strsize_t _p
2d60: 68 70 5f 72 68 61 73 68 5f 66 69 6c 65 28 49 4e  hp_rhash_file(IN
2d70: 54 45 52 4e 41 4c 5f 46 55 4e 43 54 49 4f 4e 5f  TERNAL_FUNCTION_
2d80: 50 41 52 41 4d 45 54 45 52 53 2c 20 72 68 61 73  PARAMETERS, rhas
2d90: 68 20 63 6f 6e 74 65 78 74 2c 20 63 68 61 72 2a  h context, char*
2da0: 20 70 61 74 68 2c 20 7a 65 6e 64 5f 6c 6f 6e 67   path, zend_long
2db0: 20 73 74 61 72 74 2c 20 7a 65 6e 64 5f 6c 6f 6e   start, zend_lon
2dc0: 67 20 73 69 7a 65 29 0a 7b 0a 09 73 74 72 73 69  g size).{..strsi
2dd0: 7a 65 5f 74 20 72 65 73 3b 0a 09 70 68 70 5f 73  ze_t res;..php_s
2de0: 74 72 65 61 6d 20 2a 73 74 72 65 61 6d 20 3d 20  tream *stream = 
2df0: 70 68 70 5f 73 74 72 65 61 6d 5f 6f 70 65 6e 5f  php_stream_open_
2e00: 77 72 61 70 70 65 72 28 70 61 74 68 2c 20 22 72  wrapper(path, "r
2e10: 62 22 2c 20 30 2c 20 30 29 3b 0a 09 69 66 20 28  b", 0, 0);..if (
2e20: 73 74 72 65 61 6d 20 3d 3d 20 4e 55 4c 4c 29 20  stream == NULL) 
2e30: 72 65 74 75 72 6e 20 46 41 49 4c 55 52 45 3b 0a  return FAILURE;.
2e40: 0a 09 72 65 73 20 3d 20 5f 70 68 70 5f 72 68 61  ..res = _php_rha
2e50: 73 68 5f 73 74 72 65 61 6d 28 49 4e 54 45 52 4e  sh_stream(INTERN
2e60: 41 4c 5f 46 55 4e 43 54 49 4f 4e 5f 50 41 52 41  AL_FUNCTION_PARA
2e70: 4d 5f 50 41 53 53 54 48 52 55 2c 20 63 6f 6e 74  M_PASSTHRU, cont
2e80: 65 78 74 2c 20 73 74 72 65 61 6d 2c 20 73 74 61  ext, stream, sta
2e90: 72 74 2c 20 73 69 7a 65 29 3b 0a 09 70 68 70 5f  rt, size);..php_
2ea0: 73 74 72 65 61 6d 5f 63 6c 6f 73 65 28 73 74 72  stream_close(str
2eb0: 65 61 6d 29 3b 0a 09 72 65 74 75 72 6e 20 72 65  eam);..return re
2ec0: 73 3b 0a 7d 0a 2f 2a 20 7d 7d 7d 20 2a 2f 0a 0a  s;.}./* }}} */..
2ed0: 2f 2a 20 7b 7b 7b 20 70 72 6f 74 6f 20 73 74 72  /* {{{ proto str
2ee0: 69 6e 67 20 72 68 61 73 68 5f 66 69 6c 65 28 69  ing rhash_file(i
2ef0: 6e 74 20 68 61 73 68 5f 69 64 2c 20 73 74 72 69  nt hash_id, stri
2f00: 6e 67 20 70 61 74 68 29 0a 20 20 20 43 6f 6d 70  ng path).   Comp
2f10: 75 74 65 73 20 61 6e 64 20 72 65 74 75 72 6e 73  utes and returns
2f20: 20 6d 65 73 73 61 67 65 20 64 69 67 65 73 74 20   message digest 
2f30: 66 6f 72 20 61 20 66 69 6c 65 2e 20 52 65 74 75  for a file. Retu
2f40: 72 6e 73 20 4e 55 4c 4c 20 6f 6e 20 66 61 69 6c  rns NULL on fail
2f50: 75 72 65 2e 20 2a 2f 0a 50 48 50 5f 46 55 4e 43  ure. */.PHP_FUNC
2f60: 54 49 4f 4e 28 72 68 61 73 68 5f 66 69 6c 65 29  TION(rhash_file)
2f70: 20 7b 0a 09 7a 65 6e 64 5f 6c 6f 6e 67 20 68 61   {..zend_long ha
2f80: 73 68 5f 69 64 20 3d 20 30 3b 0a 09 63 68 61 72  sh_id = 0;..char
2f90: 20 2a 70 61 74 68 3b 0a 09 73 74 72 73 69 7a 65   *path;..strsize
2fa0: 5f 74 20 70 61 74 68 5f 6c 65 6e 3b 0a 09 72 68  _t path_len;..rh
2fb0: 61 73 68 20 63 6f 6e 74 65 78 74 20 3d 20 4e 55  ash context = NU
2fc0: 4c 4c 3b 0a 09 63 68 61 72 20 62 75 66 66 65 72  LL;..char buffer
2fd0: 5b 31 33 30 5d 3b 0a 09 69 6e 74 20 62 75 66 66  [130];..int buff
2fe0: 65 72 5f 6c 65 6e 67 74 68 3b 0a 09 73 74 72 73  er_length;..strs
2ff0: 69 7a 65 5f 74 20 72 65 73 3b 0a 0a 09 69 66 20  ize_t res;...if 
3000: 28 7a 65 6e 64 5f 70 61 72 73 65 5f 70 61 72 61  (zend_parse_para
3010: 6d 65 74 65 72 73 28 5a 45 4e 44 5f 4e 55 4d 5f  meters(ZEND_NUM_
3020: 41 52 47 53 28 29 20 54 53 52 4d 4c 53 5f 43 43  ARGS() TSRMLS_CC
3030: 2c 20 22 6c 70 22 2c 20 26 68 61 73 68 5f 69 64  , "lp", &hash_id
3040: 2c 20 26 70 61 74 68 2c 20 26 70 61 74 68 5f 6c  , &path, &path_l
3050: 65 6e 29 20 3d 3d 20 46 41 49 4c 55 52 45 29 20  en) == FAILURE) 
3060: 7b 0a 09 09 52 45 54 55 52 4e 5f 4e 55 4c 4c 28  {...RETURN_NULL(
3070: 29 3b 0a 09 7d 0a 09 69 66 20 28 21 68 61 73 68  );..}..if (!hash
3080: 5f 69 64 20 7c 7c 20 21 28 63 6f 6e 74 65 78 74  _id || !(context
3090: 20 3d 20 72 68 61 73 68 5f 69 6e 69 74 28 68 61   = rhash_init(ha
30a0: 73 68 5f 69 64 29 29 29 20 7b 0a 09 09 52 45 54  sh_id))) {...RET
30b0: 55 52 4e 5f 4e 55 4c 4c 28 29 0a 09 7d 0a 09 72  URN_NULL()..}..r
30c0: 65 73 20 3d 20 5f 70 68 70 5f 72 68 61 73 68 5f  es = _php_rhash_
30d0: 66 69 6c 65 28 49 4e 54 45 52 4e 41 4c 5f 46 55  file(INTERNAL_FU
30e0: 4e 43 54 49 4f 4e 5f 50 41 52 41 4d 5f 50 41 53  NCTION_PARAM_PAS
30f0: 53 54 48 52 55 2c 20 63 6f 6e 74 65 78 74 2c 20  STHRU, context, 
3100: 70 61 74 68 2c 20 2d 31 2c 20 2d 31 29 3b 0a 09  path, -1, -1);..
3110: 72 68 61 73 68 5f 66 69 6e 61 6c 28 63 6f 6e 74  rhash_final(cont
3120: 65 78 74 2c 20 30 29 3b 0a 09 62 75 66 66 65 72  ext, 0);..buffer
3130: 5f 6c 65 6e 67 74 68 20 3d 20 72 68 61 73 68 5f  _length = rhash_
3140: 70 72 69 6e 74 28 62 75 66 66 65 72 2c 20 63 6f  print(buffer, co
3150: 6e 74 65 78 74 2c 20 68 61 73 68 5f 69 64 2c 20  ntext, hash_id, 
3160: 30 29 3b 0a 09 72 68 61 73 68 5f 66 72 65 65 28  0);..rhash_free(
3170: 63 6f 6e 74 65 78 74 29 3b 0a 0a 09 2f 2a 20 72  context);.../* r
3180: 65 74 75 72 6e 20 4e 55 4c 4c 20 6f 6e 20 66 61  eturn NULL on fa
3190: 69 6c 75 72 65 20 2a 2f 0a 09 69 66 20 28 72 65  ilure */..if (re
31a0: 73 20 21 3d 20 53 55 43 43 45 53 53 29 20 7b 0a  s != SUCCESS) {.
31b0: 09 09 52 45 54 55 52 4e 5f 4e 55 4c 4c 28 29 3b  ..RETURN_NULL();
31c0: 0a 09 7d 0a 09 5f 52 45 54 55 52 4e 5f 53 54 52  ..}.._RETURN_STR
31d0: 49 4e 47 4c 28 62 75 66 66 65 72 2c 20 62 75 66  INGL(buffer, buf
31e0: 66 65 72 5f 6c 65 6e 67 74 68 29 3b 0a 7d 0a 2f  fer_length);.}./
31f0: 2a 20 7d 7d 7d 20 2a 2f 0a 0a 2f 2a 20 7b 7b 7b  * }}} */../* {{{
3200: 20 70 72 6f 74 6f 20 73 74 72 69 6e 67 20 72 68   proto string rh
3210: 61 73 68 5f 6d 61 67 6e 65 74 28 69 6e 74 20 68  ash_magnet(int h
3220: 61 73 68 5f 69 64 2c 20 73 74 72 69 6e 67 20 70  ash_id, string p
3230: 61 74 68 29 0a 20 20 20 43 6f 6d 70 75 74 65 73  ath).   Computes
3240: 20 61 6e 64 20 72 65 74 75 72 6e 73 20 6d 61 67   and returns mag
3250: 6e 65 74 20 6c 69 6e 6b 20 66 6f 72 20 61 20 66  net link for a f
3260: 69 6c 65 2e 20 52 65 74 75 72 6e 73 20 4e 55 4c  ile. Returns NUL
3270: 4c 20 6f 6e 20 66 61 69 6c 75 72 65 2e 20 2a 2f  L on failure. */
3280: 0a 50 48 50 5f 46 55 4e 43 54 49 4f 4e 28 72 68  .PHP_FUNCTION(rh
3290: 61 73 68 5f 6d 61 67 6e 65 74 29 20 7b 0a 09 7a  ash_magnet) {..z
32a0: 65 6e 64 5f 6c 6f 6e 67 20 68 61 73 68 5f 69 64  end_long hash_id
32b0: 20 3d 20 30 3b 0a 09 63 68 61 72 20 2a 70 61 74   = 0;..char *pat
32c0: 68 3b 0a 09 73 74 72 73 69 7a 65 5f 74 20 70 61  h;..strsize_t pa
32d0: 74 68 5f 6c 65 6e 3b 0a 09 72 68 61 73 68 20 63  th_len;..rhash c
32e0: 6f 6e 74 65 78 74 20 3d 20 4e 55 4c 4c 3b 0a 09  ontext = NULL;..
32f0: 7a 65 6e 64 5f 73 74 72 69 6e 67 2a 20 73 74 72  zend_string* str
3300: 3b 0a 09 73 69 7a 65 5f 74 20 62 75 66 66 65 72  ;..size_t buffer
3310: 5f 73 69 7a 65 3b 0a 09 73 74 72 73 69 7a 65 5f  _size;..strsize_
3320: 74 20 72 65 73 3b 0a 0a 09 69 66 20 28 7a 65 6e  t res;...if (zen
3330: 64 5f 70 61 72 73 65 5f 70 61 72 61 6d 65 74 65  d_parse_paramete
3340: 72 73 28 5a 45 4e 44 5f 4e 55 4d 5f 41 52 47 53  rs(ZEND_NUM_ARGS
3350: 28 29 20 54 53 52 4d 4c 53 5f 43 43 2c 20 22 6c  () TSRMLS_CC, "l
3360: 70 22 2c 20 26 68 61 73 68 5f 69 64 2c 20 26 70  p", &hash_id, &p
3370: 61 74 68 2c 20 26 70 61 74 68 5f 6c 65 6e 29 20  ath, &path_len) 
3380: 3d 3d 20 46 41 49 4c 55 52 45 29 20 7b 0a 09 09  == FAILURE) {...
3390: 52 45 54 55 52 4e 5f 4e 55 4c 4c 28 29 3b 0a 09  RETURN_NULL();..
33a0: 7d 0a 09 69 66 20 28 21 68 61 73 68 5f 69 64 20  }..if (!hash_id 
33b0: 7c 7c 20 21 28 63 6f 6e 74 65 78 74 20 3d 20 72  || !(context = r
33c0: 68 61 73 68 5f 69 6e 69 74 28 68 61 73 68 5f 69  hash_init(hash_i
33d0: 64 29 29 29 20 7b 0a 09 09 52 45 54 55 52 4e 5f  d))) {...RETURN_
33e0: 4e 55 4c 4c 28 29 3b 0a 09 7d 0a 09 72 65 73 20  NULL();..}..res 
33f0: 3d 20 5f 70 68 70 5f 72 68 61 73 68 5f 66 69 6c  = _php_rhash_fil
3400: 65 28 49 4e 54 45 52 4e 41 4c 5f 46 55 4e 43 54  e(INTERNAL_FUNCT
3410: 49 4f 4e 5f 50 41 52 41 4d 5f 50 41 53 53 54 48  ION_PARAM_PASSTH
3420: 52 55 2c 20 63 6f 6e 74 65 78 74 2c 20 70 61 74  RU, context, pat
3430: 68 2c 20 2d 31 2c 20 2d 31 29 3b 0a 09 69 66 20  h, -1, -1);..if 
3440: 28 72 65 73 20 21 3d 20 53 55 43 43 45 53 53 29  (res != SUCCESS)
3450: 20 52 45 54 55 52 4e 5f 4e 55 4c 4c 28 29 3b 0a   RETURN_NULL();.
3460: 09 72 68 61 73 68 5f 66 69 6e 61 6c 28 63 6f 6e  .rhash_final(con
3470: 74 65 78 74 2c 20 30 29 3b 0a 0a 09 62 75 66 66  text, 0);...buff
3480: 65 72 5f 73 69 7a 65 20 3d 20 72 68 61 73 68 5f  er_size = rhash_
3490: 70 72 69 6e 74 5f 6d 61 67 6e 65 74 28 30 2c 20  print_magnet(0, 
34a0: 70 61 74 68 2c 20 63 6f 6e 74 65 78 74 2c 20 68  path, context, h
34b0: 61 73 68 5f 69 64 2c 20 52 48 50 52 5f 46 49 4c  ash_id, RHPR_FIL
34c0: 45 53 49 5a 45 29 3b 0a 0a 09 73 74 72 20 3d 20  ESIZE);...str = 
34d0: 7a 65 6e 64 5f 73 74 72 69 6e 67 5f 61 6c 6c 6f  zend_string_allo
34e0: 63 28 62 75 66 66 65 72 5f 73 69 7a 65 20 2d 20  c(buffer_size - 
34f0: 31 2c 20 30 29 3b 0a 09 69 66 20 28 21 73 74 72  1, 0);..if (!str
3500: 29 20 7b 0a 09 09 72 68 61 73 68 5f 66 72 65 65  ) {...rhash_free
3510: 28 63 6f 6e 74 65 78 74 29 3b 0a 09 09 52 45 54  (context);...RET
3520: 55 52 4e 5f 4e 55 4c 4c 28 29 3b 0a 09 7d 0a 0a  URN_NULL();..}..
3530: 09 72 68 61 73 68 5f 70 72 69 6e 74 5f 6d 61 67  .rhash_print_mag
3540: 6e 65 74 28 73 74 72 2d 3e 76 61 6c 2c 20 70 61  net(str->val, pa
3550: 74 68 2c 20 63 6f 6e 74 65 78 74 2c 20 68 61 73  th, context, has
3560: 68 5f 69 64 2c 20 52 48 50 52 5f 46 49 4c 45 53  h_id, RHPR_FILES
3570: 49 5a 45 29 3b 0a 09 72 68 61 73 68 5f 66 72 65  IZE);..rhash_fre
3580: 65 28 63 6f 6e 74 65 78 74 29 3b 0a 09 52 45 54  e(context);..RET
3590: 55 52 4e 5f 4e 45 57 5f 53 54 52 28 73 74 72 29  URN_NEW_STR(str)
35a0: 3b 0a 7d 0a 2f 2a 20 7d 7d 7d 20 2a 2f 0a 0a 0a  ;.}./* }}} */...
35b0: 2f 2a 20 52 48 61 73 68 20 63 6c 61 73 73 20 6d  /* RHash class m
35c0: 65 74 68 6f 64 73 20 2a 2f 0a 0a 2f 2a 20 7b 7b  ethods */../* {{
35d0: 7b 20 70 72 6f 74 6f 20 52 48 61 73 68 3a 3a 5f  { proto RHash::_
35e0: 5f 63 6f 6e 73 74 72 75 63 74 28 5b 69 6e 74 20  _construct([int 
35f0: 68 61 73 68 5f 69 64 5d 29 0a 20 20 20 43 72 65  hash_id]).   Cre
3600: 61 74 65 73 20 6e 65 77 20 52 48 61 73 68 20 6f  ates new RHash o
3610: 62 6a 65 63 74 20 2a 2f 0a 50 48 50 5f 4d 45 54  bject */.PHP_MET
3620: 48 4f 44 28 52 48 61 73 68 2c 20 5f 5f 63 6f 6e  HOD(RHash, __con
3630: 73 74 72 75 63 74 29 0a 7b 0a 09 7a 65 6e 64 5f  struct).{..zend_
3640: 6c 6f 6e 67 20 68 61 73 68 5f 69 64 20 3d 20 30  long hash_id = 0
3650: 3b 0a 09 72 68 61 73 68 20 63 6f 6e 74 65 78 74  ;..rhash context
3660: 20 3d 20 4e 55 4c 4c 3b 0a 09 72 68 61 73 68 5f   = NULL;..rhash_
3670: 6f 62 6a 65 63 74 20 2a 6f 62 6a 3b 0a 0a 09 69  object *obj;...i
3680: 66 20 28 7a 65 6e 64 5f 70 61 72 73 65 5f 70 61  f (zend_parse_pa
3690: 72 61 6d 65 74 65 72 73 28 5a 45 4e 44 5f 4e 55  rameters(ZEND_NU
36a0: 4d 5f 41 52 47 53 28 29 20 54 53 52 4d 4c 53 5f  M_ARGS() TSRMLS_
36b0: 43 43 2c 20 22 7c 6c 22 2c 20 26 68 61 73 68 5f  CC, "|l", &hash_
36c0: 69 64 29 20 3d 3d 20 46 41 49 4c 55 52 45 29 20  id) == FAILURE) 
36d0: 7b 0a 09 09 52 45 54 55 52 4e 5f 4e 55 4c 4c 28  {...RETURN_NULL(
36e0: 29 3b 0a 09 7d 0a 09 69 66 20 28 21 68 61 73 68  );..}..if (!hash
36f0: 5f 69 64 29 0a 09 09 68 61 73 68 5f 69 64 20 3d  _id)...hash_id =
3700: 20 52 48 41 53 48 5f 41 4c 4c 5f 48 41 53 48 45   RHASH_ALL_HASHE
3710: 53 3b 0a 09 69 66 20 28 21 28 63 6f 6e 74 65 78  S;..if (!(contex
3720: 74 20 3d 20 72 68 61 73 68 5f 69 6e 69 74 28 68  t = rhash_init(h
3730: 61 73 68 5f 69 64 29 29 29 20 7b 0a 09 09 52 45  ash_id))) {...RE
3740: 54 55 52 4e 5f 4e 55 4c 4c 28 29 3b 0a 09 7d 0a  TURN_NULL();..}.
3750: 09 72 68 61 73 68 5f 73 65 74 5f 61 75 74 6f 66  .rhash_set_autof
3760: 69 6e 61 6c 28 63 6f 6e 74 65 78 74 2c 20 30 29  inal(context, 0)
3770: 3b 0a 09 6f 62 6a 20 3d 20 67 65 74 5f 72 68 61  ;..obj = get_rha
3780: 73 68 5f 6f 62 6a 65 63 74 28 67 65 74 54 68 69  sh_object(getThi
3790: 73 28 29 29 3b 0a 09 6f 62 6a 2d 3e 72 68 61 73  s());..obj->rhas
37a0: 68 20 3d 20 63 6f 6e 74 65 78 74 3b 0a 7d 0a 2f  h = context;.}./
37b0: 2a 20 7d 7d 7d 20 2a 2f 0a 0a 2f 2a 20 7b 7b 7b  * }}} */../* {{{
37c0: 20 70 72 6f 74 6f 20 52 48 61 73 68 20 52 48 61   proto RHash RHa
37d0: 73 68 3a 3a 75 70 64 61 74 65 28 73 74 72 69 6e  sh::update(strin
37e0: 67 20 6d 65 73 73 61 67 65 29 0a 20 20 20 55 70  g message).   Up
37f0: 64 61 74 65 73 20 52 48 61 73 68 20 6f 62 6a 65  dates RHash obje
3800: 63 74 20 77 69 74 68 20 6e 65 77 20 64 61 74 61  ct with new data
3810: 20 63 68 75 6e 6b 20 61 6e 64 20 72 65 74 75 72   chunk and retur
3820: 6e 73 20 24 74 68 69 73 20 2a 2f 0a 50 48 50 5f  ns $this */.PHP_
3830: 4d 45 54 48 4f 44 28 52 48 61 73 68 2c 20 75 70  METHOD(RHash, up
3840: 64 61 74 65 29 0a 7b 0a 09 63 68 61 72 20 2a 73  date).{..char *s
3850: 3b 0a 09 73 74 72 73 69 7a 65 5f 74 20 73 5f 6c  ;..strsize_t s_l
3860: 65 6e 3b 0a 09 7a 76 61 6c 20 2a 6f 62 6a 65 63  en;..zval *objec
3870: 74 20 3d 20 67 65 74 54 68 69 73 28 29 3b 0a 09  t = getThis();..
3880: 72 68 61 73 68 5f 6f 62 6a 65 63 74 20 2a 6f 62  rhash_object *ob
3890: 6a 20 3d 20 20 67 65 74 5f 72 68 61 73 68 5f 6f  j =  get_rhash_o
38a0: 62 6a 65 63 74 28 6f 62 6a 65 63 74 29 3b 0a 09  bject(object);..
38b0: 0a 09 69 66 20 28 6f 62 6a 2d 3e 72 68 61 73 68  ..if (obj->rhash
38c0: 20 3d 3d 20 4e 55 4c 4c 20 7c 7c 0a 09 09 7a 65   == NULL ||...ze
38d0: 6e 64 5f 70 61 72 73 65 5f 70 61 72 61 6d 65 74  nd_parse_paramet
38e0: 65 72 73 28 5a 45 4e 44 5f 4e 55 4d 5f 41 52 47  ers(ZEND_NUM_ARG
38f0: 53 28 29 20 54 53 52 4d 4c 53 5f 43 43 2c 20 22  S() TSRMLS_CC, "
3900: 73 22 2c 20 26 73 2c 20 26 73 5f 6c 65 6e 29 20  s", &s, &s_len) 
3910: 3d 3d 20 46 41 49 4c 55 52 45 29 20 7b 0a 09 09  == FAILURE) {...
3920: 52 45 54 55 52 4e 5f 46 41 4c 53 45 3b 0a 09 7d  RETURN_FALSE;..}
3930: 0a 09 72 68 61 73 68 5f 75 70 64 61 74 65 28 6f  ..rhash_update(o
3940: 62 6a 2d 3e 72 68 61 73 68 2c 20 73 2c 20 73 5f  bj->rhash, s, s_
3950: 6c 65 6e 29 3b 0a 09 5a 5f 41 44 44 52 45 46 28  len);..Z_ADDREF(
3960: 2a 6f 62 6a 65 63 74 29 3b 0a 09 2a 72 65 74 75  *object);..*retu
3970: 72 6e 5f 76 61 6c 75 65 20 3d 20 2a 6f 62 6a 65  rn_value = *obje
3980: 63 74 3b 0a 7d 0a 2f 2a 20 7d 7d 7d 20 2a 2f 0a  ct;.}./* }}} */.
3990: 0a 2f 2a 20 7b 7b 7b 20 70 72 6f 74 6f 20 62 6f  ./* {{{ proto bo
39a0: 6f 6c 65 61 6e 20 52 48 61 73 68 3a 3a 75 70 64  olean RHash::upd
39b0: 61 74 65 5f 73 74 72 65 61 6d 28 72 65 73 6f 75  ate_stream(resou
39c0: 72 63 65 20 68 61 6e 64 6c 65 5b 2c 20 69 6e 74  rce handle[, int
39d0: 20 73 74 61 72 74 5b 2c 20 69 6e 74 20 73 69 7a   start[, int siz
39e0: 65 5d 5d 29 0a 20 20 20 52 65 74 75 72 6e 73 20  e]]).   Returns 
39f0: 74 72 75 65 20 69 66 20 73 75 63 63 65 73 73 66  true if successf
3a00: 75 6c 6c 79 20 63 61 6c 63 75 6c 61 74 65 64 20  ully calculated 
3a10: 68 61 73 68 65 73 20 66 6f 72 20 61 20 28 70 61  hashes for a (pa
3a20: 72 74 20 6f 66 29 20 73 74 72 65 61 6d 2c 20 66  rt of) stream, f
3a30: 61 6c 73 65 20 6f 6e 20 65 72 72 6f 72 20 2a 2f  alse on error */
3a40: 0a 50 48 50 5f 4d 45 54 48 4f 44 28 52 48 61 73  .PHP_METHOD(RHas
3a50: 68 2c 20 75 70 64 61 74 65 5f 73 74 72 65 61 6d  h, update_stream
3a60: 29 0a 7b 0a 09 7a 76 61 6c 20 2a 68 61 6e 64 6c  ).{..zval *handl
3a70: 65 3b 0a 09 73 74 72 73 69 7a 65 5f 74 20 72 65  e;..strsize_t re
3a80: 73 3b 0a 09 7a 65 6e 64 5f 6c 6f 6e 67 20 73 74  s;..zend_long st
3a90: 61 72 74 20 3d 20 2d 31 2c 20 73 69 7a 65 20 3d  art = -1, size =
3aa0: 20 2d 31 3b 0a 09 70 68 70 5f 73 74 72 65 61 6d   -1;..php_stream
3ab0: 20 2a 73 74 72 65 61 6d 3b 0a 09 69 66 20 28 7a   *stream;..if (z
3ac0: 65 6e 64 5f 70 61 72 73 65 5f 70 61 72 61 6d 65  end_parse_parame
3ad0: 74 65 72 73 28 5a 45 4e 44 5f 4e 55 4d 5f 41 52  ters(ZEND_NUM_AR
3ae0: 47 53 28 29 20 54 53 52 4d 4c 53 5f 43 43 2c 20  GS() TSRMLS_CC, 
3af0: 22 72 7c 6c 6c 22 2c 20 26 68 61 6e 64 6c 65 2c  "r|ll", &handle,
3b00: 20 26 73 74 61 72 74 2c 20 26 73 69 7a 65 29 20   &start, &size) 
3b10: 3d 3d 20 46 41 49 4c 55 52 45 29 20 7b 0a 09 09  == FAILURE) {...
3b20: 52 45 54 55 52 4e 5f 46 41 4c 53 45 3b 0a 09 7d  RETURN_FALSE;..}
3b30: 0a 23 69 66 20 50 48 50 5f 4d 41 4a 4f 52 5f 56  .#if PHP_MAJOR_V
3b40: 45 52 53 49 4f 4e 20 3c 20 37 0a 09 70 68 70 5f  ERSION < 7..php_
3b50: 73 74 72 65 61 6d 5f 66 72 6f 6d 5f 7a 76 61 6c  stream_from_zval
3b60: 5f 6e 6f 5f 76 65 72 69 66 79 28 73 74 72 65 61  _no_verify(strea
3b70: 6d 2c 20 26 68 61 6e 64 6c 65 29 3b 0a 23 65 6c  m, &handle);.#el
3b80: 73 65 0a 09 70 68 70 5f 73 74 72 65 61 6d 5f 66  se..php_stream_f
3b90: 72 6f 6d 5f 7a 76 61 6c 5f 6e 6f 5f 76 65 72 69  rom_zval_no_veri
3ba0: 66 79 28 73 74 72 65 61 6d 2c 20 68 61 6e 64 6c  fy(stream, handl
3bb0: 65 29 3b 0a 23 65 6e 64 69 66 0a 09 69 66 20 28  e);.#endif..if (
3bc0: 73 74 72 65 61 6d 20 3d 3d 20 4e 55 4c 4c 29 20  stream == NULL) 
3bd0: 52 45 54 55 52 4e 5f 46 41 4c 53 45 3b 0a 09 72  RETURN_FALSE;..r
3be0: 65 73 20 3d 20 5f 70 68 70 5f 72 68 61 73 68 5f  es = _php_rhash_
3bf0: 73 74 72 65 61 6d 28 49 4e 54 45 52 4e 41 4c 5f  stream(INTERNAL_
3c00: 46 55 4e 43 54 49 4f 4e 5f 50 41 52 41 4d 5f 50  FUNCTION_PARAM_P
3c10: 41 53 53 54 48 52 55 2c 20 30 2c 20 73 74 72 65  ASSTHRU, 0, stre
3c20: 61 6d 2c 20 73 74 61 72 74 2c 20 73 69 7a 65 29  am, start, size)
3c30: 3b 0a 09 52 45 54 55 52 4e 5f 42 4f 4f 4c 28 72  ;..RETURN_BOOL(r
3c40: 65 73 20 3d 3d 20 53 55 43 43 45 53 53 29 3b 0a  es == SUCCESS);.
3c50: 7d 0a 2f 2a 20 7d 7d 7d 20 2a 2f 0a 0a 2f 2a 20  }./* }}} */../* 
3c60: 7b 7b 7b 20 70 72 6f 74 6f 20 62 6f 6f 6c 65 61  {{{ proto boolea
3c70: 6e 20 52 48 61 73 68 3a 3a 75 70 64 61 74 65 5f  n RHash::update_
3c80: 66 69 6c 65 28 73 74 72 69 6e 67 20 70 61 74 68  file(string path
3c90: 5b 2c 20 69 6e 74 20 73 74 61 72 74 5b 2c 20 69  [, int start[, i
3ca0: 6e 74 20 73 69 7a 65 5d 5d 29 0a 20 20 20 52 65  nt size]]).   Re
3cb0: 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 73 75  turns true if su
3cc0: 63 63 65 73 73 66 75 6c 6c 79 20 63 61 6c 63 75  ccessfully calcu
3cd0: 6c 61 74 65 64 20 68 61 73 68 65 73 20 66 6f 72  lated hashes for
3ce0: 20 61 20 28 70 61 72 74 20 6f 66 29 20 66 69 6c   a (part of) fil
3cf0: 65 2c 20 66 61 6c 73 65 20 6f 6e 20 65 72 72 6f  e, false on erro
3d00: 72 20 2a 2f 0a 50 48 50 5f 4d 45 54 48 4f 44 28  r */.PHP_METHOD(
3d10: 52 48 61 73 68 2c 20 75 70 64 61 74 65 5f 66 69  RHash, update_fi
3d20: 6c 65 29 0a 7b 0a 09 63 68 61 72 20 2a 70 61 74  le).{..char *pat
3d30: 68 3b 0a 09 73 74 72 73 69 7a 65 5f 74 20 6c 65  h;..strsize_t le
3d40: 6e 3b 0a 09 7a 65 6e 64 5f 6c 6f 6e 67 20 73 74  n;..zend_long st
3d50: 61 72 74 20 3d 20 2d 31 2c 20 73 69 7a 65 20 3d  art = -1, size =
3d60: 20 2d 31 3b 0a 09 73 74 72 73 69 7a 65 5f 74 20   -1;..strsize_t 
3d70: 72 65 73 20 3d 20 7a 65 6e 64 5f 70 61 72 73 65  res = zend_parse
3d80: 5f 70 61 72 61 6d 65 74 65 72 73 28 5a 45 4e 44  _parameters(ZEND
3d90: 5f 4e 55 4d 5f 41 52 47 53 28 29 20 54 53 52 4d  _NUM_ARGS() TSRM
3da0: 4c 53 5f 43 43 2c 20 22 70 7c 6c 6c 22 2c 20 26  LS_CC, "p|ll", &
3db0: 70 61 74 68 2c 20 26 6c 65 6e 2c 20 26 73 74 61  path, &len, &sta
3dc0: 72 74 2c 20 26 73 69 7a 65 29 3b 0a 09 69 66 20  rt, &size);..if 
3dd0: 28 72 65 73 20 3d 3d 20 53 55 43 43 45 53 53 29  (res == SUCCESS)
3de0: 20 7b 0a 09 09 72 65 73 20 3d 20 5f 70 68 70 5f   {...res = _php_
3df0: 72 68 61 73 68 5f 66 69 6c 65 28 49 4e 54 45 52  rhash_file(INTER
3e00: 4e 41 4c 5f 46 55 4e 43 54 49 4f 4e 5f 50 41 52  NAL_FUNCTION_PAR
3e10: 41 4d 5f 50 41 53 53 54 48 52 55 2c 20 30 2c 20  AM_PASSTHRU, 0, 
3e20: 70 61 74 68 2c 20 73 74 61 72 74 2c 20 73 69 7a  path, start, siz
3e30: 65 29 3b 0a 09 7d 0a 09 52 45 54 55 52 4e 5f 42  e);..}..RETURN_B
3e40: 4f 4f 4c 28 72 65 73 20 3d 3d 20 53 55 43 43 45  OOL(res == SUCCE
3e50: 53 53 29 3b 0a 7d 0a 2f 2a 20 7d 7d 7d 20 2a 2f  SS);.}./* }}} */
3e60: 0a 0a 2f 2a 20 7b 7b 7b 20 70 72 6f 74 6f 20 52  ../* {{{ proto R
3e70: 48 61 73 68 20 52 48 61 73 68 3a 3a 66 69 6e 61  Hash RHash::fina
3e80: 6c 28 29 0a 20 20 20 46 69 6e 61 6c 69 7a 65 73  l().   Finalizes
3e90: 20 63 61 6c 63 75 6c 61 74 69 6f 6e 20 66 6f 72   calculation for
3ea0: 20 61 6c 6c 20 68 61 73 68 65 64 20 64 61 74 61   all hashed data
3eb0: 20 61 6e 64 20 72 65 74 75 72 6e 73 20 24 74 68   and returns $th
3ec0: 69 73 20 2a 2f 0a 50 48 50 5f 4d 45 54 48 4f 44  is */.PHP_METHOD
3ed0: 28 52 48 61 73 68 2c 20 66 69 6e 61 6c 29 0a 7b  (RHash, final).{
3ee0: 0a 09 7a 76 61 6c 20 2a 6f 62 6a 65 63 74 20 3d  ..zval *object =
3ef0: 20 67 65 74 54 68 69 73 28 29 3b 0a 09 72 68 61   getThis();..rha
3f00: 73 68 5f 6f 62 6a 65 63 74 20 2a 6f 62 6a 20 3d  sh_object *obj =
3f10: 20 67 65 74 5f 72 68 61 73 68 5f 6f 62 6a 65 63   get_rhash_objec
3f20: 74 28 6f 62 6a 65 63 74 29 3b 0a 09 69 66 20 28  t(object);..if (
3f30: 6f 62 6a 2d 3e 72 68 61 73 68 20 3d 3d 20 4e 55  obj->rhash == NU
3f40: 4c 4c 29 20 52 45 54 55 52 4e 5f 46 41 4c 53 45  LL) RETURN_FALSE
3f50: 3b 0a 09 72 68 61 73 68 5f 66 69 6e 61 6c 28 6f  ;..rhash_final(o
3f60: 62 6a 2d 3e 72 68 61 73 68 2c 20 4e 55 4c 4c 29  bj->rhash, NULL)
3f70: 3b 0a 09 5a 5f 41 44 44 52 45 46 28 2a 6f 62 6a  ;..Z_ADDREF(*obj
3f80: 65 63 74 29 3b 0a 09 2a 72 65 74 75 72 6e 5f 76  ect);..*return_v
3f90: 61 6c 75 65 20 3d 20 2a 6f 62 6a 65 63 74 3b 0a  alue = *object;.
3fa0: 7d 0a 2f 2a 20 7d 7d 7d 20 2a 2f 0a 0a 2f 2a 20  }./* }}} */../* 
3fb0: 7b 7b 7b 20 70 72 6f 74 6f 20 52 48 61 73 68 20  {{{ proto RHash 
3fc0: 52 48 61 73 68 3a 3a 72 65 73 65 74 28 29 0a 20  RHash::reset(). 
3fd0: 20 20 52 65 73 65 74 73 20 52 48 61 73 68 20 6f    Resets RHash o
3fe0: 62 6a 65 63 74 20 74 6f 20 69 6e 69 74 69 61 6c  bject to initial
3ff0: 20 73 74 61 74 65 20 61 6e 64 20 72 65 74 75 72   state and retur
4000: 6e 73 20 24 74 68 69 73 20 2a 2f 0a 50 48 50 5f  ns $this */.PHP_
4010: 4d 45 54 48 4f 44 28 52 48 61 73 68 2c 20 72 65  METHOD(RHash, re
4020: 73 65 74 29 0a 7b 0a 09 7a 76 61 6c 20 2a 6f 62  set).{..zval *ob
4030: 6a 65 63 74 20 3d 20 67 65 74 54 68 69 73 28 29  ject = getThis()
4040: 3b 0a 09 72 68 61 73 68 5f 6f 62 6a 65 63 74 20  ;..rhash_object 
4050: 2a 6f 62 6a 20 3d 20 67 65 74 5f 72 68 61 73 68  *obj = get_rhash
4060: 5f 6f 62 6a 65 63 74 28 6f 62 6a 65 63 74 29 3b  _object(object);
4070: 0a 09 69 66 20 28 6f 62 6a 2d 3e 72 68 61 73 68  ..if (obj->rhash
4080: 20 3d 3d 20 4e 55 4c 4c 29 20 52 45 54 55 52 4e   == NULL) RETURN
4090: 5f 46 41 4c 53 45 3b 0a 09 72 68 61 73 68 5f 72  _FALSE;..rhash_r
40a0: 65 73 65 74 28 6f 62 6a 2d 3e 72 68 61 73 68 29  eset(obj->rhash)
40b0: 3b 0a 09 5a 5f 41 44 44 52 45 46 28 2a 6f 62 6a  ;..Z_ADDREF(*obj
40c0: 65 63 74 29 3b 0a 09 2a 72 65 74 75 72 6e 5f 76  ect);..*return_v
40d0: 61 6c 75 65 20 3d 20 2a 6f 62 6a 65 63 74 3b 0a  alue = *object;.
40e0: 7d 0a 2f 2a 20 7d 7d 7d 20 2a 2f 0a 0a 2f 2a 20  }./* }}} */../* 
40f0: 7b 7b 7b 20 70 72 6f 74 6f 20 69 6e 74 20 52 48  {{{ proto int RH
4100: 61 73 68 3a 3a 68 61 73 68 65 64 5f 6c 65 6e 67  ash::hashed_leng
4110: 74 68 28 29 0a 20 20 20 52 65 74 75 72 6e 73 20  th().   Returns 
4120: 6c 65 6e 67 74 68 20 69 6e 20 62 79 74 65 73 20  length in bytes 
4130: 6f 66 20 74 68 65 20 68 61 73 68 65 64 20 64 61  of the hashed da
4140: 74 61 20 2a 2f 0a 50 48 50 5f 4d 45 54 48 4f 44  ta */.PHP_METHOD
4150: 28 52 48 61 73 68 2c 20 68 61 73 68 65 64 5f 6c  (RHash, hashed_l
4160: 65 6e 67 74 68 29 0a 7b 0a 09 72 68 61 73 68 5f  ength).{..rhash_
4170: 6f 62 6a 65 63 74 20 2a 6f 62 6a 20 3d 20 67 65  object *obj = ge
4180: 74 5f 72 68 61 73 68 5f 6f 62 6a 65 63 74 28 67  t_rhash_object(g
4190: 65 74 54 68 69 73 28 29 29 3b 0a 09 69 66 20 28  etThis());..if (
41a0: 6f 62 6a 2d 3e 72 68 61 73 68 20 3d 3d 20 4e 55  obj->rhash == NU
41b0: 4c 4c 29 20 52 45 54 55 52 4e 5f 46 41 4c 53 45  LL) RETURN_FALSE
41c0: 3b 0a 09 52 45 54 55 52 4e 5f 4c 4f 4e 47 28 28  ;..RETURN_LONG((
41d0: 6c 6f 6e 67 29 6f 62 6a 2d 3e 72 68 61 73 68 2d  long)obj->rhash-
41e0: 3e 6d 73 67 5f 73 69 7a 65 29 3b 0a 7d 0a 2f 2a  >msg_size);.}./*
41f0: 20 7d 7d 7d 20 2a 2f 0a 0a 2f 2a 20 7b 7b 7b 20   }}} */../* {{{ 
4200: 5f 70 68 70 5f 67 65 74 5f 68 61 73 68 28 52 48  _php_get_hash(RH
4210: 61 73 68 20 74 68 69 73 5f 63 6c 61 73 73 5b 2c  ash this_class[,
4220: 20 69 6e 74 20 68 61 73 68 5f 69 64 5d 2c 20 69   int hash_id], i
4230: 6e 74 20 70 72 69 6e 74 5f 66 6c 61 67 73 29 0a  nt print_flags).
4240: 20 20 20 52 65 74 75 72 6e 73 20 63 61 6c 63 75     Returns calcu
4250: 6c 61 74 65 64 20 68 61 73 68 20 69 6e 20 74 68  lated hash in th
4260: 65 20 73 70 65 63 69 66 69 65 64 20 66 6f 72 6d  e specified form
4270: 61 74 20 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  at */.static voi
4280: 64 20 5f 70 68 70 5f 67 65 74 5f 68 61 73 68 28  d _php_get_hash(
4290: 49 4e 54 45 52 4e 41 4c 5f 46 55 4e 43 54 49 4f  INTERNAL_FUNCTIO
42a0: 4e 5f 50 41 52 41 4d 45 54 45 52 53 2c 20 69 6e  N_PARAMETERS, in
42b0: 74 20 70 72 69 6e 74 5f 66 6c 61 67 73 29 0a 7b  t print_flags).{
42c0: 0a 09 7a 65 6e 64 5f 6c 6f 6e 67 20 68 61 73 68  ..zend_long hash
42d0: 5f 69 64 20 3d 20 30 3b 0a 09 63 68 61 72 20 62  _id = 0;..char b
42e0: 75 66 66 65 72 5b 31 33 30 5d 3b 0a 09 69 6e 74  uffer[130];..int
42f0: 20 6c 65 6e 67 74 68 3b 0a 09 72 68 61 73 68 5f   length;..rhash_
4300: 6f 62 6a 65 63 74 20 2a 6f 62 6a 20 3d 20 67 65  object *obj = ge
4310: 74 5f 72 68 61 73 68 5f 6f 62 6a 65 63 74 28 67  t_rhash_object(g
4320: 65 74 54 68 69 73 28 29 29 3b 0a 09 69 66 20 28  etThis());..if (
4330: 6f 62 6a 2d 3e 72 68 61 73 68 20 3d 3d 20 4e 55  obj->rhash == NU
4340: 4c 4c 20 7c 7c 0a 09 09 7a 65 6e 64 5f 70 61 72  LL ||...zend_par
4350: 73 65 5f 70 61 72 61 6d 65 74 65 72 73 28 5a 45  se_parameters(ZE
4360: 4e 44 5f 4e 55 4d 5f 41 52 47 53 28 29 20 54 53  ND_NUM_ARGS() TS
4370: 52 4d 4c 53 5f 43 43 2c 20 22 7c 6c 22 2c 20 26  RMLS_CC, "|l", &
4380: 68 61 73 68 5f 69 64 29 20 3d 3d 20 46 41 49 4c  hash_id) == FAIL
4390: 55 52 45 29 20 7b 0a 09 09 52 45 54 55 52 4e 5f  URE) {...RETURN_
43a0: 46 41 4c 53 45 3b 0a 09 7d 0a 09 6c 65 6e 67 74  FALSE;..}..lengt
43b0: 68 20 3d 20 72 68 61 73 68 5f 70 72 69 6e 74 28  h = rhash_print(
43c0: 62 75 66 66 65 72 2c 20 6f 62 6a 2d 3e 72 68 61  buffer, obj->rha
43d0: 73 68 2c 20 68 61 73 68 5f 69 64 2c 20 70 72 69  sh, hash_id, pri
43e0: 6e 74 5f 66 6c 61 67 73 29 3b 0a 09 5f 52 45 54  nt_flags);.._RET
43f0: 55 52 4e 5f 53 54 52 49 4e 47 4c 28 62 75 66 66  URN_STRINGL(buff
4400: 65 72 2c 20 6c 65 6e 67 74 68 29 0a 7d 0a 2f 2a  er, length).}./*
4410: 20 7d 7d 7d 20 2a 2f 0a 0a 2f 2a 20 7b 7b 7b 20   }}} */../* {{{ 
4420: 70 72 6f 74 6f 20 73 74 72 69 6e 67 20 52 48 61  proto string RHa
4430: 73 68 3a 3a 68 61 73 68 28 5b 69 6e 74 20 68 61  sh::hash([int ha
4440: 73 68 5f 69 64 5d 29 0a 20 20 20 52 65 74 75 72  sh_id]).   Retur
4450: 6e 73 20 68 61 73 68 20 76 61 6c 75 65 20 69 6e  ns hash value in
4460: 20 64 65 66 61 75 6c 74 20 66 6f 72 6d 61 74 20   default format 
4470: 2a 2f 0a 50 48 50 5f 4d 45 54 48 4f 44 28 52 48  */.PHP_METHOD(RH
4480: 61 73 68 2c 20 68 61 73 68 29 0a 7b 0a 09 5f 70  ash, hash).{.._p
4490: 68 70 5f 67 65 74 5f 68 61 73 68 28 49 4e 54 45  hp_get_hash(INTE
44a0: 52 4e 41 4c 5f 46 55 4e 43 54 49 4f 4e 5f 50 41  RNAL_FUNCTION_PA
44b0: 52 41 4d 5f 50 41 53 53 54 48 52 55 2c 20 30 29  RAM_PASSTHRU, 0)
44c0: 3b 0a 7d 0a 2f 2a 20 7d 7d 7d 20 2a 2f 0a 0a 2f  ;.}./* }}} */../
44d0: 2a 20 7b 7b 7b 20 70 72 6f 74 6f 20 73 74 72 69  * {{{ proto stri
44e0: 6e 67 20 52 48 61 73 68 3a 3a 72 61 77 28 5b 69  ng RHash::raw([i
44f0: 6e 74 20 68 61 73 68 5f 69 64 5d 29 0a 20 20 20  nt hash_id]).   
4500: 52 65 74 75 72 6e 73 20 68 61 73 68 20 76 61 6c  Returns hash val
4510: 75 65 20 61 73 20 72 61 77 20 62 79 74 65 73 20  ue as raw bytes 
4520: 2a 2f 0a 50 48 50 5f 4d 45 54 48 4f 44 28 52 48  */.PHP_METHOD(RH
4530: 61 73 68 2c 20 72 61 77 29 0a 7b 0a 09 5f 70 68  ash, raw).{.._ph
4540: 70 5f 67 65 74 5f 68 61 73 68 28 49 4e 54 45 52  p_get_hash(INTER
4550: 4e 41 4c 5f 46 55 4e 43 54 49 4f 4e 5f 50 41 52  NAL_FUNCTION_PAR
4560: 41 4d 5f 50 41 53 53 54 48 52 55 2c 20 52 48 50  AM_PASSTHRU, RHP
4570: 52 5f 52 41 57 29 3b 0a 7d 0a 2f 2a 20 7d 7d 7d  R_RAW);.}./* }}}
4580: 20 2a 2f 0a 0a 2f 2a 20 7b 7b 7b 20 70 72 6f 74   */../* {{{ prot
4590: 6f 20 73 74 72 69 6e 67 20 52 48 61 73 68 3a 3a  o string RHash::
45a0: 68 65 78 28 5b 69 6e 74 20 68 61 73 68 5f 69 64  hex([int hash_id
45b0: 5d 29 0a 20 20 20 52 65 74 75 72 6e 73 20 68 61  ]).   Returns ha
45c0: 73 68 20 76 61 6c 75 65 20 61 73 20 68 65 78 61  sh value as hexa
45d0: 64 65 63 69 6d 61 6c 20 73 74 72 69 6e 67 20 2a  decimal string *
45e0: 2f 0a 50 48 50 5f 4d 45 54 48 4f 44 28 52 48 61  /.PHP_METHOD(RHa
45f0: 73 68 2c 20 68 65 78 29 0a 7b 0a 09 5f 70 68 70  sh, hex).{.._php
4600: 5f 67 65 74 5f 68 61 73 68 28 49 4e 54 45 52 4e  _get_hash(INTERN
4610: 41 4c 5f 46 55 4e 43 54 49 4f 4e 5f 50 41 52 41  AL_FUNCTION_PARA
4620: 4d 5f 50 41 53 53 54 48 52 55 2c 20 52 48 50 52  M_PASSTHRU, RHPR
4630: 5f 48 45 58 29 3b 0a 7d 0a 2f 2a 20 7d 7d 7d 20  _HEX);.}./* }}} 
4640: 2a 2f 0a 0a 2f 2a 20 7b 7b 7b 20 70 72 6f 74 6f  */../* {{{ proto
4650: 20 73 74 72 69 6e 67 20 52 48 61 73 68 3a 3a 62   string RHash::b
4660: 61 73 65 33 32 28 5b 69 6e 74 20 68 61 73 68 5f  ase32([int hash_
4670: 69 64 5d 29 0a 20 20 20 52 65 74 75 72 6e 73 20  id]).   Returns 
4680: 68 61 73 68 20 76 61 6c 75 65 20 61 73 20 62 61  hash value as ba
4690: 73 65 33 32 20 73 74 72 69 6e 67 20 2a 2f 0a 50  se32 string */.P
46a0: 48 50 5f 4d 45 54 48 4f 44 28 52 48 61 73 68 2c  HP_METHOD(RHash,
46b0: 20 62 61 73 65 33 32 29 0a 7b 0a 09 5f 70 68 70   base32).{.._php
46c0: 5f 67 65 74 5f 68 61 73 68 28 49 4e 54 45 52 4e  _get_hash(INTERN
46d0: 41 4c 5f 46 55 4e 43 54 49 4f 4e 5f 50 41 52 41  AL_FUNCTION_PARA
46e0: 4d 5f 50 41 53 53 54 48 52 55 2c 20 52 48 50 52  M_PASSTHRU, RHPR
46f0: 5f 42 41 53 45 33 32 29 3b 0a 7d 0a 2f 2a 20 7d  _BASE32);.}./* }
4700: 7d 7d 20 2a 2f 0a 0a 2f 2a 20 7b 7b 7b 20 70 72  }} */../* {{{ pr
4710: 6f 74 6f 20 73 74 72 69 6e 67 20 52 48 61 73 68  oto string RHash
4720: 3a 3a 62 61 73 65 36 34 28 5b 69 6e 74 20 68 61  ::base64([int ha
4730: 73 68 5f 69 64 5d 29 0a 20 20 20 52 65 74 75 72  sh_id]).   Retur
4740: 6e 73 20 68 61 73 68 20 76 61 6c 75 65 20 61 73  ns hash value as
4750: 20 62 61 73 65 36 34 20 73 74 72 69 6e 67 20 2a   base64 string *
4760: 2f 0a 50 48 50 5f 4d 45 54 48 4f 44 28 52 48 61  /.PHP_METHOD(RHa
4770: 73 68 2c 20 62 61 73 65 36 34 29 0a 7b 0a 09 5f  sh, base64).{.._
4780: 70 68 70 5f 67 65 74 5f 68 61 73 68 28 49 4e 54  php_get_hash(INT
4790: 45 52 4e 41 4c 5f 46 55 4e 43 54 49 4f 4e 5f 50  ERNAL_FUNCTION_P
47a0: 41 52 41 4d 5f 50 41 53 53 54 48 52 55 2c 20 52  ARAM_PASSTHRU, R
47b0: 48 50 52 5f 42 41 53 45 36 34 29 3b 0a 7d 0a 2f  HPR_BASE64);.}./
47c0: 2a 20 7d 7d 7d 20 2a 2f 0a 0a 2f 2a 20 7b 7b 7b  * }}} */../* {{{
47d0: 20 70 72 6f 74 6f 20 73 74 72 69 6e 67 20 52 48   proto string RH
47e0: 61 73 68 3a 3a 6d 61 67 6e 65 74 28 5b 73 74 72  ash::magnet([str
47f0: 69 6e 67 20 66 69 6c 65 6e 61 6d 65 5d 29 0a 20  ing filename]). 
4800: 20 20 52 65 74 75 72 6e 73 20 6d 61 67 6e 65 74    Returns magnet
4810: 20 6c 69 6e 6b 20 77 69 74 68 20 61 6c 6c 20 68   link with all h
4820: 61 73 68 65 73 20 63 6f 6d 70 75 74 65 64 20 62  ashes computed b
4830: 79 20 74 68 65 20 52 48 61 73 68 20 6f 62 6a 65  y the RHash obje
4840: 63 74 20 2a 2f 0a 50 48 50 5f 4d 45 54 48 4f 44  ct */.PHP_METHOD
4850: 28 52 48 61 73 68 2c 20 6d 61 67 6e 65 74 29 0a  (RHash, magnet).
4860: 7b 0a 09 63 68 61 72 20 2a 73 20 3d 20 30 3b 0a  {..char *s = 0;.
4870: 09 73 74 72 73 69 7a 65 5f 74 20 73 5f 6c 65 6e  .strsize_t s_len
4880: 3b 0a 09 73 69 7a 65 5f 74 20 62 75 66 5f 73 69  ;..size_t buf_si
4890: 7a 65 3b 0a 09 7a 65 6e 64 5f 73 74 72 69 6e 67  ze;..zend_string
48a0: 20 2a 6d 61 67 6e 65 74 5f 73 74 72 3b 0a 09 72   *magnet_str;..r
48b0: 68 61 73 68 5f 6f 62 6a 65 63 74 20 2a 6f 62 6a  hash_object *obj
48c0: 20 3d 20 67 65 74 5f 72 68 61 73 68 5f 6f 62 6a   = get_rhash_obj
48d0: 65 63 74 28 67 65 74 54 68 69 73 28 29 29 3b 0a  ect(getThis());.
48e0: 0a 09 69 66 20 28 6f 62 6a 2d 3e 72 68 61 73 68  ..if (obj->rhash
48f0: 20 3d 3d 20 4e 55 4c 4c 20 7c 7c 0a 09 09 7a 65   == NULL ||...ze
4900: 6e 64 5f 70 61 72 73 65 5f 70 61 72 61 6d 65 74  nd_parse_paramet
4910: 65 72 73 28 5a 45 4e 44 5f 4e 55 4d 5f 41 52 47  ers(ZEND_NUM_ARG
4920: 53 28 29 20 54 53 52 4d 4c 53 5f 43 43 2c 20 22  S() TSRMLS_CC, "
4930: 7c 73 22 2c 20 26 73 2c 20 26 73 5f 6c 65 6e 29  |s", &s, &s_len)
4940: 20 3d 3d 20 46 41 49 4c 55 52 45 29 20 7b 0a 09   == FAILURE) {..
4950: 09 52 45 54 55 52 4e 5f 46 41 4c 53 45 3b 0a 09  .RETURN_FALSE;..
4960: 7d 0a 0a 09 62 75 66 5f 73 69 7a 65 20 3d 20 72  }...buf_size = r
4970: 68 61 73 68 5f 70 72 69 6e 74 5f 6d 61 67 6e 65  hash_print_magne
4980: 74 28 30 2c 20 73 2c 20 6f 62 6a 2d 3e 72 68 61  t(0, s, obj->rha
4990: 73 68 2c 20 52 48 41 53 48 5f 41 4c 4c 5f 48 41  sh, RHASH_ALL_HA
49a0: 53 48 45 53 2c 20 52 48 50 52 5f 46 49 4c 45 53  SHES, RHPR_FILES
49b0: 49 5a 45 29 3b 0a 09 6d 61 67 6e 65 74 5f 73 74  IZE);..magnet_st
49c0: 72 20 3d 20 7a 65 6e 64 5f 73 74 72 69 6e 67 5f  r = zend_string_
49d0: 61 6c 6c 6f 63 28 62 75 66 5f 73 69 7a 65 20 2d  alloc(buf_size -
49e0: 20 31 2c 20 30 29 3b 0a 09 69 66 20 28 21 6d 61   1, 0);..if (!ma
49f0: 67 6e 65 74 5f 73 74 72 29 20 52 45 54 55 52 4e  gnet_str) RETURN
4a00: 5f 46 41 4c 53 45 3b 0a 0a 09 72 68 61 73 68 5f  _FALSE;...rhash_
4a10: 70 72 69 6e 74 5f 6d 61 67 6e 65 74 28 6d 61 67  print_magnet(mag
4a20: 6e 65 74 5f 73 74 72 2d 3e 76 61 6c 2c 20 73 2c  net_str->val, s,
4a30: 20 6f 62 6a 2d 3e 72 68 61 73 68 2c 20 52 48 41   obj->rhash, RHA
4a40: 53 48 5f 41 4c 4c 5f 48 41 53 48 45 53 2c 20 52  SH_ALL_HASHES, R
4a50: 48 50 52 5f 46 49 4c 45 53 49 5a 45 29 3b 0a 09  HPR_FILESIZE);..
4a60: 52 45 54 55 52 4e 5f 4e 45 57 5f 53 54 52 28 6d  RETURN_NEW_STR(m
4a70: 61 67 6e 65 74 5f 73 74 72 29 3b 0a 7d 0a 2f 2a  agnet_str);.}./*
4a80: 20 7d 7d 7d 20 2a 2f 0a                           }}} */.