Hex Artifact Content
Not logged in

Artifact bf2e6000adb247a055513858fa20e62ee4b3a95b:


0000: 2f 2a 0a 20 2a 20 54 68 69 73 20 66 69 6c 65 20  /*. * This file 
0010: 69 73 20 61 20 70 61 72 74 20 6f 66 20 4a 61 76  is a part of Jav
0020: 61 20 42 69 6e 64 69 6e 67 73 20 66 6f 72 20 4c  a Bindings for L
0030: 69 62 72 68 61 73 68 0a 20 2a 20 43 6f 70 79 72  ibrhash. * Copyr
0040: 69 67 68 74 20 28 63 29 20 32 30 31 31 2d 32 30  ight (c) 2011-20
0050: 31 32 2c 20 53 65 72 67 65 79 20 42 61 73 61 6c  12, Sergey Basal
0060: 61 65 76 20 3c 73 62 61 73 61 6c 61 65 76 40 67  aev <sbasalaev@g
0070: 6d 61 69 6c 2e 63 6f 6d 3e 0a 20 2a 20 4c 69 62  mail.com>. * Lib
0080: 72 68 61 73 68 20 69 73 20 28 63 29 20 32 30 31  rhash is (c) 201
0090: 31 2d 32 30 31 32 2c 20 41 6c 65 6b 73 65 79 20  1-2012, Aleksey 
00a0: 4b 72 61 76 63 68 65 6e 6b 6f 20 3c 72 68 61 73  Kravchenko <rhas
00b0: 68 2e 61 64 6d 69 6e 40 67 6d 61 69 6c 2e 63 6f  h.admin@gmail.co
00c0: 6d 3e 0a 20 2a 20 0a 20 2a 20 50 65 72 6d 69 73  m>. * . * Permis
00d0: 73 69 6f 6e 20 69 73 20 68 65 72 65 62 79 20 67  sion is hereby g
00e0: 72 61 6e 74 65 64 2c 20 66 72 65 65 20 6f 66 20  ranted, free of 
00f0: 63 68 61 72 67 65 2c 20 20 74 6f 20 61 6e 79 20  charge,  to any 
0100: 70 65 72 73 6f 6e 20 6f 62 74 61 69 6e 69 6e 67  person obtaining
0110: 20 61 20 63 6f 70 79 0a 20 2a 20 6f 66 20 74 68   a copy. * of th
0120: 69 73 20 73 6f 66 74 77 61 72 65 20 61 6e 64 20  is software and 
0130: 61 73 73 6f 63 69 61 74 65 64 20 64 6f 63 75 6d  associated docum
0140: 65 6e 74 61 74 69 6f 6e 20 66 69 6c 65 73 20 28  entation files (
0150: 74 68 65 20 22 53 6f 66 74 77 61 72 65 22 29 2c  the "Software"),
0160: 20 74 6f 20 64 65 61 6c 0a 20 2a 20 69 6e 20 74   to deal. * in t
0170: 68 65 20 53 6f 66 74 77 61 72 65 20 77 69 74 68  he Software with
0180: 6f 75 74 20 72 65 73 74 72 69 63 74 69 6f 6e 2c  out restriction,
0190: 20 20 69 6e 63 6c 75 64 69 6e 67 20 77 69 74 68    including with
01a0: 6f 75 74 20 6c 69 6d 69 74 61 74 69 6f 6e 20 74  out limitation t
01b0: 68 65 20 72 69 67 68 74 73 0a 20 2a 20 74 6f 20  he rights. * to 
01c0: 20 75 73 65 2c 20 20 63 6f 70 79 2c 20 20 6d 6f   use,  copy,  mo
01d0: 64 69 66 79 2c 20 20 6d 65 72 67 65 2c 20 70 75  dify,  merge, pu
01e0: 62 6c 69 73 68 2c 20 64 69 73 74 72 69 62 75 74  blish, distribut
01f0: 65 2c 20 73 75 62 6c 69 63 65 6e 73 65 2c 20 61  e, sublicense, a
0200: 6e 64 2f 6f 72 20 73 65 6c 6c 0a 20 2a 20 63 6f  nd/or sell. * co
0210: 70 69 65 73 20 20 6f 66 20 20 74 68 65 20 53 6f  pies  of  the So
0220: 66 74 77 61 72 65 2c 20 20 61 6e 64 20 20 74 6f  ftware,  and  to
0230: 20 70 65 72 6d 69 74 20 20 70 65 72 73 6f 6e 73   permit  persons
0240: 20 20 74 6f 20 77 68 6f 6d 20 20 74 68 65 20 53    to whom  the S
0250: 6f 66 74 77 61 72 65 20 20 69 73 0a 20 2a 20 66  oftware  is. * f
0260: 75 72 6e 69 73 68 65 64 20 74 6f 20 64 6f 20 73  urnished to do s
0270: 6f 2e 0a 20 2a 20 0a 20 2a 20 54 68 69 73 20 6c  o.. * . * This l
0280: 69 62 72 61 72 79 20 20 69 73 20 64 69 73 74 72  ibrary  is distr
0290: 69 62 75 74 65 64 20 20 69 6e 20 74 68 65 20 68  ibuted  in the h
02a0: 6f 70 65 20 74 68 61 74 20 69 74 20 77 69 6c 6c  ope that it will
02b0: 20 62 65 20 75 73 65 66 75 6c 2c 20 62 75 74 20   be useful, but 
02c0: 57 49 54 48 4f 55 54 0a 20 2a 20 41 4e 59 20 57  WITHOUT. * ANY W
02d0: 41 52 52 41 4e 54 59 3b 20 77 69 74 68 6f 75 74  ARRANTY; without
02e0: 20 65 76 65 6e 20 74 68 65 20 69 6d 70 6c 69 65   even the implie
02f0: 64 20 77 61 72 72 61 6e 74 79 20 6f 66 20 4d 45  d warranty of ME
0300: 52 43 48 41 4e 54 41 42 49 4c 49 54 59 20 6f 72  RCHANTABILITY or
0310: 20 46 49 54 4e 45 53 53 0a 20 2a 20 46 4f 52 20   FITNESS. * FOR 
0320: 41 20 50 41 52 54 49 43 55 4c 41 52 20 50 55 52  A PARTICULAR PUR
0330: 50 4f 53 45 2e 20 55 73 65 20 69 74 20 61 74 20  POSE. Use it at 
0340: 79 6f 75 72 20 6f 77 6e 20 72 69 73 6b 21 0a 20  your own risk!. 
0350: 2a 2f 0a 0a 70 61 63 6b 61 67 65 20 6f 72 67 2e  */..package org.
0360: 73 66 2e 72 68 61 73 68 3b 0a 0a 2f 2a 2a 0a 20  sf.rhash;../**. 
0370: 2a 20 47 6c 75 65 20 74 6f 20 74 68 65 20 6e 61  * Glue to the na
0380: 74 69 76 65 20 41 50 49 2e 0a 20 2a 2f 0a 66 69  tive API.. */.fi
0390: 6e 61 6c 20 63 6c 61 73 73 20 42 69 6e 64 69 6e  nal class Bindin
03a0: 67 73 20 7b 0a 0a 09 2f 2a 2a 20 54 68 69 73 20  gs {.../** This 
03b0: 63 6c 61 73 73 20 69 73 20 6e 6f 74 20 69 6e 73  class is not ins
03c0: 74 61 6e 74 69 61 62 6c 65 2e 20 2a 2f 0a 09 70  tantiable. */..p
03d0: 72 69 76 61 74 65 20 42 69 6e 64 69 6e 67 73 28  rivate Bindings(
03e0: 29 20 7b 20 7d 0a 0a 09 2f 2a 2a 0a 09 20 2a 20  ) { }.../**.. * 
03f0: 49 6e 69 74 69 61 6c 69 7a 65 73 20 6c 69 62 72  Initializes libr
0400: 61 72 79 2e 0a 09 20 2a 2f 0a 09 73 74 61 74 69  ary... */..stati
0410: 63 20 6e 61 74 69 76 65 20 76 6f 69 64 20 72 68  c native void rh
0420: 61 73 68 5f 6c 69 62 72 61 72 79 5f 69 6e 69 74  ash_library_init
0430: 28 29 3b 0a 09 0a 09 2f 2a 2a 0a 09 20 2a 20 52  ();..../**.. * R
0440: 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65  eturns the numbe
0450: 72 20 6f 66 20 73 75 70 70 6f 72 74 65 64 20 68  r of supported h
0460: 61 73 68 20 61 6c 67 6f 72 69 74 68 6d 73 2e 0a  ash algorithms..
0470: 09 20 2a 2f 0a 09 73 74 61 74 69 63 20 6e 61 74  . */..static nat
0480: 69 76 65 20 69 6e 74 20 72 68 61 73 68 5f 63 6f  ive int rhash_co
0490: 75 6e 74 28 29 3b 0a 0a 09 2f 2a 2a 0a 09 20 2a  unt();.../**.. *
04a0: 20 43 6f 6d 70 75 74 65 73 20 61 20 68 61 73 68   Computes a hash
04b0: 20 6f 66 20 74 68 65 20 67 69 76 65 6e 20 64 61   of the given da
04c0: 74 61 2e 0a 09 20 2a 0a 09 20 2a 20 40 70 61 72  ta... *.. * @par
04d0: 61 6d 20 20 68 61 73 68 5f 69 64 20 20 69 64 20  am  hash_id  id 
04e0: 6f 66 20 68 61 73 68 20 66 75 6e 63 74 69 6f 6e  of hash function
04f0: 0a 09 20 2a 20 40 70 61 72 61 6d 20 20 64 61 74  .. * @param  dat
0500: 61 20 20 20 20 20 74 68 65 20 64 61 74 61 20 74  a     the data t
0510: 6f 20 70 72 6f 63 65 73 73 0a 09 20 2a 20 40 70  o process.. * @p
0520: 61 72 61 6d 20 20 6f 66 73 20 20 20 20 20 20 6f  aram  ofs      o
0530: 66 66 73 65 74 20 69 6e 20 64 61 74 61 20 61 72  ffset in data ar
0540: 72 61 79 20 66 72 6f 6d 20 77 68 69 63 68 20 74  ray from which t
0550: 6f 20 73 74 61 72 74 20 70 72 6f 63 65 73 73 69  o start processi
0560: 6e 67 0a 09 20 2a 20 40 70 61 72 61 6d 20 20 6c  ng.. * @param  l
0570: 65 6e 20 20 20 20 20 20 64 61 74 61 20 6c 65 6e  en      data len
0580: 67 74 68 0a 09 20 2a 20 40 72 65 74 75 72 6e 20  gth.. * @return 
0590: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
05a0: 6e 61 74 69 76 65 20 64 69 67 65 73 74 20 6f 62  native digest ob
05b0: 6a 65 63 74 0a 09 20 2a 2f 0a 09 73 74 61 74 69  ject.. */..stati
05c0: 63 20 6e 61 74 69 76 65 20 6c 6f 6e 67 20 72 68  c native long rh
05d0: 61 73 68 5f 6d 73 67 28 69 6e 74 20 68 61 73 68  ash_msg(int hash
05e0: 5f 69 64 2c 20 62 79 74 65 5b 5d 20 64 61 74 61  _id, byte[] data
05f0: 2c 20 69 6e 74 20 6f 66 73 2c 20 69 6e 74 20 6c  , int ofs, int l
0600: 65 6e 29 3b 0a 09 0a 09 2f 2a 2a 0a 09 20 2a 20  en);..../**.. * 
0610: 50 72 69 6e 74 73 20 74 65 78 74 20 72 65 70 72  Prints text repr
0620: 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61 20  esentation of a 
0630: 67 69 76 65 6e 20 64 69 67 65 73 74 2e 0a 09 20  given digest... 
0640: 2a 0a 09 20 2a 20 40 70 61 72 61 6d 20 20 72 68  *.. * @param  rh
0650: 61 73 68 20 20 70 6f 69 6e 74 65 72 20 74 6f 20  ash  pointer to 
0660: 6e 61 74 69 76 65 20 64 69 67 65 73 74 20 6f 62  native digest ob
0670: 6a 65 63 74 0a 09 20 2a 20 40 70 61 72 61 6d 20  ject.. * @param 
0680: 20 66 6c 61 67 73 20 20 6f 75 74 70 75 74 20 66   flags  output f
0690: 6c 61 67 73 0a 09 20 2a 20 40 72 65 74 75 72 6e  lags.. * @return
06a0: 20 20 74 65 78 74 20 72 65 70 72 65 73 65 6e 74    text represent
06b0: 61 74 69 6f 6e 20 61 73 20 62 79 74 65 20 61 72  ation as byte ar
06c0: 72 61 79 0a 09 20 2a 2f 0a 09 73 74 61 74 69 63  ray.. */..static
06d0: 20 6e 61 74 69 76 65 20 62 79 74 65 5b 5d 20 72   native byte[] r
06e0: 68 61 73 68 5f 70 72 69 6e 74 5f 62 79 74 65 73  hash_print_bytes
06f0: 28 6c 6f 6e 67 20 72 68 61 73 68 2c 20 69 6e 74  (long rhash, int
0700: 20 66 6c 61 67 73 29 3b 0a 0a 09 2f 2a 2a 0a 09   flags);.../**..
0710: 20 2a 20 52 65 74 75 72 6e 73 20 6d 61 67 6e 65   * Returns magne
0720: 74 20 6c 69 6e 6b 20 66 6f 72 20 67 69 76 65 6e  t link for given
0730: 20 68 61 73 68 20 63 6f 6e 74 65 78 74 20 61 6e   hash context an
0740: 64 20 68 61 73 68 69 6e 67 20 61 6c 67 6f 72 69  d hashing algori
0750: 74 68 6d 73 2e 0a 09 20 2a 20 0a 09 20 2a 20 40  thms... * .. * @
0760: 70 61 72 61 6d 20 20 72 68 61 73 68 20 20 20 20  param  rhash    
0770: 20 70 6f 69 6e 74 65 72 20 74 6f 20 6e 61 74 69   pointer to nati
0780: 76 65 20 64 69 67 65 73 74 20 6f 62 6a 65 63 74  ve digest object
0790: 0a 09 20 2a 20 40 70 61 72 61 6d 20 20 66 69 6c  .. * @param  fil
07a0: 65 6e 61 6d 65 20 20 74 68 65 20 6e 61 6d 65 20  ename  the name 
07b0: 6f 66 20 74 68 65 20 66 69 6c 65 20 74 6f 20 69  of the file to i
07c0: 6e 63 6f 72 70 6f 72 61 74 65 20 69 6e 20 6d 61  ncorporate in ma
07d0: 67 6e 65 74 0a 09 20 2a 20 40 70 61 72 61 6d 20  gnet.. * @param 
07e0: 20 66 6c 61 67 73 20 20 20 20 20 6d 61 73 6b 20   flags     mask 
07f0: 6f 66 20 68 61 73 68 5f 69 64 20 76 61 6c 75 65  of hash_id value
0800: 73 0a 09 20 2a 20 40 72 65 74 75 72 6e 20 20 6d  s.. * @return  m
0810: 61 67 6e 65 74 20 73 74 72 69 6e 67 0a 09 20 2a  agnet string.. *
0820: 2f 0a 09 73 74 61 74 69 63 20 6e 61 74 69 76 65  /..static native
0830: 20 53 74 72 69 6e 67 20 72 68 61 73 68 5f 70 72   String rhash_pr
0840: 69 6e 74 5f 6d 61 67 6e 65 74 28 6c 6f 6e 67 20  int_magnet(long 
0850: 72 68 61 73 68 2c 20 53 74 72 69 6e 67 20 66 69  rhash, String fi
0860: 6c 65 6e 61 6d 65 2c 20 69 6e 74 20 66 6c 61 67  lename, int flag
0870: 73 29 3b 0a 0a 09 2f 2a 2a 0a 09 20 2a 20 54 65  s);.../**.. * Te
0880: 73 74 73 20 77 68 65 74 68 65 72 20 67 69 76 65  sts whether give
0890: 6e 20 64 65 66 61 75 6c 74 20 68 61 73 68 20 61  n default hash a
08a0: 6c 67 6f 72 69 74 68 6d 20 6f 75 74 70 75 74 20  lgorithm output 
08b0: 69 73 20 62 61 73 65 33 32 2e 0a 09 20 2a 20 40  is base32... * @
08c0: 70 61 72 61 6d 20 20 68 61 73 68 5f 69 64 20 20  param  hash_id  
08d0: 69 64 20 6f 66 20 68 61 73 68 20 66 75 6e 63 74  id of hash funct
08e0: 69 6f 6e 0a 09 20 2a 20 40 72 65 74 75 72 6e 20  ion.. * @return 
08f0: 3c 63 6f 64 65 3e 74 72 75 65 3c 2f 63 6f 64 65  <code>true</code
0900: 3e 20 69 66 20 64 65 66 61 75 6c 74 20 6f 75 74  > if default out
0910: 70 75 74 20 66 6f 72 20 68 61 73 68 20 61 6c 67  put for hash alg
0920: 6f 72 69 74 68 6d 20 69 73 20 62 61 73 65 33 32  orithm is base32
0930: 2c 0a 09 20 2a 20 20 20 20 20 20 20 20 20 3c 63  ,.. *         <c
0940: 6f 64 65 3e 66 61 6c 73 65 3c 2f 63 6f 64 65 3e  ode>false</code>
0950: 20 6f 74 68 65 72 77 69 73 65 0a 09 20 2a 2f 0a   otherwise.. */.
0960: 09 73 74 61 74 69 63 20 6e 61 74 69 76 65 20 62  .static native b
0970: 6f 6f 6c 65 61 6e 20 72 68 61 73 68 5f 69 73 5f  oolean rhash_is_
0980: 62 61 73 65 33 32 28 69 6e 74 20 68 61 73 68 5f  base32(int hash_
0990: 69 64 29 3b 0a 0a 09 2f 2a 2a 0a 09 20 2a 20 52  id);.../**.. * R
09a0: 65 74 75 72 6e 73 20 73 69 7a 65 20 6f 66 20 62  eturns size of b
09b0: 69 6e 61 72 79 20 6d 65 73 73 61 67 65 20 64 69  inary message di
09c0: 67 65 73 74 2e 0a 09 20 2a 20 40 70 61 72 61 6d  gest... * @param
09d0: 20 68 61 73 68 5f 69 64 20 20 69 64 20 6f 66 20   hash_id  id of 
09e0: 68 61 73 68 20 66 75 6e 63 74 69 6f 6e 0a 09 20  hash function.. 
09f0: 2a 20 40 72 65 74 75 72 6e 20 20 73 69 7a 65 20  * @return  size 
0a00: 6f 66 20 6d 65 73 73 61 67 65 20 64 69 67 65 73  of message diges
0a10: 74 0a 09 20 2a 2f 0a 09 73 74 61 74 69 63 20 6e  t.. */..static n
0a20: 61 74 69 76 65 20 69 6e 74 20 72 68 61 73 68 5f  ative int rhash_
0a30: 67 65 74 5f 64 69 67 65 73 74 5f 73 69 7a 65 28  get_digest_size(
0a40: 69 6e 74 20 68 61 73 68 5f 69 64 29 3b 0a 0a 09  int hash_id);...
0a50: 2f 2a 2a 0a 09 20 2a 20 43 72 65 61 74 65 73 20  /**.. * Creates 
0a60: 6e 65 77 20 68 61 73 68 20 63 6f 6e 74 65 78 74  new hash context
0a70: 2e 0a 09 20 2a 20 40 70 61 72 61 6d 20 20 66 6c  ... * @param  fl
0a80: 61 67 73 20 20 6d 61 73 6b 20 6f 66 20 68 61 73  ags  mask of has
0a90: 68 5f 69 64 20 76 61 6c 75 65 73 0a 09 20 2a 20  h_id values.. * 
0aa0: 40 72 65 74 75 72 6e 20 20 70 6f 69 6e 74 65 72  @return  pointer
0ab0: 20 74 6f 20 74 68 65 20 6e 61 74 69 76 65 20 68   to the native h
0ac0: 61 73 68 20 63 6f 6e 74 65 78 74 0a 09 20 2a 2f  ash context.. */
0ad0: 0a 09 73 74 61 74 69 63 20 6e 61 74 69 76 65 20  ..static native 
0ae0: 6c 6f 6e 67 20 72 68 61 73 68 5f 69 6e 69 74 28  long rhash_init(
0af0: 69 6e 74 20 66 6c 61 67 73 29 3b 0a 0a 09 2f 2a  int flags);.../*
0b00: 2a 0a 09 20 2a 20 55 70 64 61 74 65 73 20 68 61  *.. * Updates ha
0b10: 73 68 20 63 6f 6e 74 65 78 74 20 77 69 74 68 20  sh context with 
0b20: 67 69 76 65 6e 20 64 61 74 61 2e 0a 09 20 2a 20  given data... * 
0b30: 40 70 61 72 61 6d 20 72 68 61 73 68 20 20 70 6f  @param rhash  po
0b40: 69 6e 74 65 72 20 74 6f 20 6e 61 74 69 76 65 20  inter to native 
0b50: 68 61 73 68 20 63 6f 6e 74 65 78 74 0a 09 20 2a  hash context.. *
0b60: 20 40 70 61 72 61 6d 20 64 61 74 61 20 20 20 64   @param data   d
0b70: 61 74 61 20 74 6f 20 70 72 6f 63 65 73 73 0a 09  ata to process..
0b80: 20 2a 20 40 70 61 72 61 6d 20 6f 66 73 20 20 20   * @param ofs   
0b90: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 66 69   index of the fi
0ba0: 72 73 74 20 62 79 74 65 20 74 6f 20 70 72 6f 63  rst byte to proc
0bb0: 65 73 73 0a 09 20 2a 20 40 70 61 72 61 6d 20 6c  ess.. * @param l
0bc0: 65 6e 20 20 20 20 63 6f 75 6e 74 20 6f 66 20 62  en    count of b
0bd0: 79 74 65 73 20 74 6f 20 70 72 6f 63 65 73 73 0a  ytes to process.
0be0: 09 20 2a 2f 0a 09 73 74 61 74 69 63 20 6e 61 74  . */..static nat
0bf0: 69 76 65 20 76 6f 69 64 20 72 68 61 73 68 5f 75  ive void rhash_u
0c00: 70 64 61 74 65 28 6c 6f 6e 67 20 72 68 61 73 68  pdate(long rhash
0c10: 2c 20 62 79 74 65 5b 5d 20 64 61 74 61 2c 20 69  , byte[] data, i
0c20: 6e 74 20 6f 66 73 2c 20 69 6e 74 20 6c 65 6e 29  nt ofs, int len)
0c30: 3b 0a 0a 09 2f 2a 2a 0a 09 20 2a 20 46 69 6e 61  ;.../**.. * Fina
0c40: 6c 69 7a 65 73 20 68 61 73 68 20 63 6f 6e 74 65  lizes hash conte
0c50: 78 74 2e 0a 09 20 2a 20 40 70 61 72 61 6d 20 72  xt... * @param r
0c60: 68 61 73 68 20 20 70 6f 69 6e 74 65 72 20 74 6f  hash  pointer to
0c70: 20 6e 61 74 69 76 65 20 68 61 73 68 20 63 6f 6e   native hash con
0c80: 74 65 78 74 0a 09 20 2a 2f 0a 09 73 74 61 74 69  text.. */..stati
0c90: 63 20 6e 61 74 69 76 65 20 76 6f 69 64 20 72 68  c native void rh
0ca0: 61 73 68 5f 66 69 6e 61 6c 28 6c 6f 6e 67 20 72  ash_final(long r
0cb0: 68 61 73 68 29 3b 0a 0a 09 2f 2a 2a 0a 09 20 2a  hash);.../**.. *
0cc0: 20 52 65 73 65 74 73 20 68 61 73 68 20 63 6f 6e   Resets hash con
0cd0: 74 65 78 74 2e 0a 09 20 2a 20 40 70 61 72 61 6d  text... * @param
0ce0: 20 72 68 61 73 68 20 20 70 6f 69 6e 74 65 72 20   rhash  pointer 
0cf0: 74 6f 20 6e 61 74 69 76 65 20 68 61 73 68 20 63  to native hash c
0d00: 6f 6e 74 65 78 74 0a 09 20 2a 2f 0a 09 73 74 61  ontext.. */..sta
0d10: 74 69 63 20 6e 61 74 69 76 65 20 76 6f 69 64 20  tic native void 
0d20: 72 68 61 73 68 5f 72 65 73 65 74 28 6c 6f 6e 67  rhash_reset(long
0d30: 20 72 68 61 73 68 29 3b 0a 0a 09 2f 2a 2a 0a 09   rhash);.../**..
0d40: 20 2a 20 47 65 6e 65 72 61 74 65 73 20 6d 65 73   * Generates mes
0d50: 73 61 67 65 20 64 69 67 65 73 74 20 66 6f 72 20  sage digest for 
0d60: 67 69 76 65 6e 20 63 6f 6e 74 65 78 74 20 61 6e  given context an
0d70: 64 20 68 61 73 68 5f 69 64 2e 0a 09 20 2a 20 40  d hash_id... * @
0d80: 70 61 72 61 6d 20 20 72 68 61 73 68 20 20 20 20  param  rhash    
0d90: 70 6f 69 6e 74 65 72 20 74 6f 20 6e 61 74 69 76  pointer to nativ
0da0: 65 20 68 61 73 68 20 63 6f 6e 74 65 78 74 0a 09  e hash context..
0db0: 20 2a 20 40 70 61 72 61 6d 20 20 68 61 73 68 5f   * @param  hash_
0dc0: 69 64 20 20 69 64 20 6f 66 20 68 61 73 68 69 6e  id  id of hashin
0dd0: 67 20 61 6c 67 6f 72 69 74 68 6d 0a 09 20 2a 20  g algorithm.. * 
0de0: 40 72 65 74 75 72 6e 20 20 70 6f 69 6e 74 65 72  @return  pointer
0df0: 20 74 6f 20 6e 61 74 69 76 65 20 64 69 67 65 73   to native diges
0e00: 74 0a 09 20 2a 2f 0a 09 73 74 61 74 69 63 20 6e  t.. */..static n
0e10: 61 74 69 76 65 20 6c 6f 6e 67 20 72 68 61 73 68  ative long rhash
0e20: 5f 70 72 69 6e 74 28 6c 6f 6e 67 20 72 68 61 73  _print(long rhas
0e30: 68 2c 20 69 6e 74 20 68 61 73 68 5f 69 64 29 3b  h, int hash_id);
0e40: 0a 0a 09 2f 2a 2a 0a 09 20 2a 20 46 72 65 65 73  .../**.. * Frees
0e50: 20 68 61 73 68 20 63 6f 6e 74 65 78 74 2e 0a 09   hash context...
0e60: 20 2a 20 40 70 61 72 61 6d 20 72 68 61 73 68 20   * @param rhash 
0e70: 20 70 6f 69 6e 74 65 72 20 74 6f 20 6e 61 74 69   pointer to nati
0e80: 76 65 20 68 61 73 68 20 63 6f 6e 74 65 78 74 0a  ve hash context.
0e90: 09 20 2a 2f 0a 09 73 74 61 74 69 63 20 6e 61 74  . */..static nat
0ea0: 69 76 65 20 76 6f 69 64 20 72 68 61 73 68 5f 66  ive void rhash_f
0eb0: 72 65 65 28 6c 6f 6e 67 20 72 68 61 73 68 29 3b  ree(long rhash);
0ec0: 0a 0a 09 2f 2a 2a 0a 09 20 2a 20 43 6f 6d 70 61  .../**.. * Compa
0ed0: 72 65 73 20 74 77 6f 20 6e 61 74 69 76 65 20 68  res two native h
0ee0: 61 73 68 20 6f 62 6a 65 63 74 73 2e 0a 09 20 2a  ash objects... *
0ef0: 20 40 70 61 72 61 6d 20 20 68 61 73 68 31 20 20   @param  hash1  
0f00: 70 6f 69 6e 74 65 72 20 74 6f 20 66 69 72 73 74  pointer to first
0f10: 20 6f 62 6a 65 63 74 0a 09 20 2a 20 40 70 61 72   object.. * @par
0f20: 61 6d 20 20 68 61 73 68 32 20 20 70 6f 69 6e 74  am  hash2  point
0f30: 65 72 20 74 6f 20 73 65 63 6f 6e 64 20 6f 62 6a  er to second obj
0f40: 65 63 74 0a 09 20 2a 20 40 72 65 74 75 72 6e 20  ect.. * @return 
0f50: 20 3c 63 6f 64 65 3e 74 72 75 65 3c 2f 63 6f 64   <code>true</cod
0f60: 65 3e 20 69 66 20 6f 62 6a 65 63 74 73 20 61 72  e> if objects ar
0f70: 65 20 74 68 65 20 73 61 6d 65 2c 0a 09 20 2a 20  e the same,.. * 
0f80: 20 20 20 20 20 20 20 20 20 3c 63 6f 64 65 3e 66           <code>f
0f90: 61 6c 73 65 3c 2f 63 6f 64 65 3e 20 6f 74 68 65  alse</code> othe
0fa0: 72 77 69 73 65 0a 09 20 2a 2f 0a 09 73 74 61 74  rwise.. */..stat
0fb0: 69 63 20 6e 61 74 69 76 65 20 62 6f 6f 6c 65 61  ic native boolea
0fc0: 6e 20 63 6f 6d 70 61 72 65 44 69 67 65 73 74 73  n compareDigests
0fd0: 28 6c 6f 6e 67 20 68 61 73 68 31 2c 20 6c 6f 6e  (long hash1, lon
0fe0: 67 20 68 61 73 68 32 29 3b 0a 0a 09 2f 2a 2a 0a  g hash2);.../**.
0ff0: 09 20 2a 20 43 6f 6d 70 75 74 65 73 20 68 61 73  . * Computes has
1000: 68 63 6f 64 65 20 66 6f 72 20 6e 61 74 69 76 65  hcode for native
1010: 20 64 69 67 65 73 74 20 6f 62 6a 65 63 74 2e 0a   digest object..
1020: 09 20 2a 20 40 70 61 72 61 6d 20 68 61 73 68 20  . * @param hash 
1030: 20 70 6f 69 6e 74 65 72 20 74 6f 20 66 69 72 73   pointer to firs
1040: 74 20 6f 62 6a 65 63 74 0a 09 20 2a 20 40 72 65  t object.. * @re
1050: 74 75 72 6e 20 20 68 61 73 68 20 63 6f 64 65 20  turn  hash code 
1060: 66 6f 72 20 74 68 65 20 6f 62 6a 65 63 74 0a 09  for the object..
1070: 20 2a 2f 0a 09 73 74 61 74 69 63 20 6e 61 74 69   */..static nati
1080: 76 65 20 69 6e 74 20 68 61 73 68 63 6f 64 65 46  ve int hashcodeF
1090: 6f 72 44 69 67 65 73 74 28 6c 6f 6e 67 20 68 61  orDigest(long ha
10a0: 73 68 29 3b 0a 0a 09 2f 2a 2a 0a 09 20 2a 20 46  sh);.../**.. * F
10b0: 72 65 65 73 20 70 72 65 76 69 6f 75 73 6c 79 20  rees previously 
10c0: 63 72 65 61 74 65 64 20 6e 61 74 69 76 65 20 64  created native d
10d0: 69 67 65 73 74 20 6f 62 6a 65 63 74 2e 0a 09 20  igest object... 
10e0: 2a 2f 0a 09 73 74 61 74 69 63 20 6e 61 74 69 76  */..static nativ
10f0: 65 20 76 6f 69 64 20 66 72 65 65 44 69 67 65 73  e void freeDiges
1100: 74 28 6c 6f 6e 67 20 68 61 73 68 29 3b 0a 0a 09  t(long hash);...
1110: 73 74 61 74 69 63 20 7b 0a 09 09 53 79 73 74 65  static {...Syste
1120: 6d 2e 6c 6f 61 64 4c 69 62 72 61 72 79 28 22 72  m.loadLibrary("r
1130: 68 61 73 68 2d 6a 6e 69 22 29 3b 0a 09 09 72 68  hash-jni");...rh
1140: 61 73 68 5f 6c 69 62 72 61 72 79 5f 69 6e 69 74  ash_library_init
1150: 28 29 3b 0a 09 7d 0a 7d 0a 0a                    ();..}.}..