Hex Artifact Content
Not logged in

Artifact 32f1f3b7406aba61d8bb6d6fa96a7333d3756bdc:


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 2f 2a 2a 0a 20 2a 20 4a 61 76 61 20  */../**. * Java 
0360: 62 69 6e 64 69 6e 67 73 20 66 6f 72 20 6c 69 62  bindings for lib
0370: 72 68 61 73 68 2e 0a 20 2a 20 4c 69 62 72 68 61  rhash.. * Librha
0380: 73 68 20 69 73 20 61 20 6c 69 62 72 61 72 79 20  sh is a library 
0390: 66 6f 72 20 63 6f 6d 70 75 74 69 6e 67 20 61 6e  for computing an
03a0: 64 20 76 65 72 69 66 79 69 6e 67 20 68 61 73 68  d verifying hash
03b0: 20 73 75 6d 73 2e 0a 20 2a 20 4c 69 73 74 20 6f   sums.. * List o
03c0: 66 20 61 6c 6c 20 73 75 70 70 6f 72 74 65 64 20  f all supported 
03d0: 68 61 73 68 20 66 75 6e 63 74 69 6f 6e 73 20 63  hash functions c
03e0: 61 6e 20 62 65 20 66 6f 75 6e 64 20 69 6e 0a 20  an be found in. 
03f0: 2a 20 7b 40 6c 69 6e 6b 20 6f 72 67 2e 73 66 2e  * {@link org.sf.
0400: 72 68 61 73 68 2e 48 61 73 68 54 79 70 65 7d 20  rhash.HashType} 
0410: 63 6c 61 73 73 20 64 65 73 63 72 69 70 74 69 6f  class descriptio
0420: 6e 2e 0a 20 2a 20 3c 70 3e 0a 20 2a 20 49 6e 20  n.. * <p>. * In 
0430: 69 74 73 20 73 69 6d 70 6c 65 73 74 20 75 73 61  its simplest usa
0440: 67 65 20 74 6f 20 63 61 6c 63 75 6c 61 74 65 20  ge to calculate 
0450: 61 20 68 61 73 68 20 66 6f 72 20 6d 65 73 73 61  a hash for messa
0460: 67 65 20 6f 72 20 66 69 6c 65 0a 20 2a 20 79 6f  ge or file. * yo
0470: 75 20 6a 75 73 74 20 6e 65 65 64 20 74 6f 20 75  u just need to u
0480: 73 65 20 6f 6e 65 20 6f 66 20 3c 63 6f 64 65 3e  se one of <code>
0490: 52 48 61 73 68 2e 63 6f 6d 70 75 74 65 48 61 73  RHash.computeHas
04a0: 68 28 29 3c 2f 63 6f 64 65 3e 0a 20 2a 20 6d 65  h()</code>. * me
04b0: 74 68 6f 64 73 3a 0a 20 2a 20 3c 70 72 65 3e 0a  thods:. * <pre>.
04c0: 20 2a 20 20 20 20 20 52 48 61 73 68 2e 63 6f 6d   *     RHash.com
04d0: 70 75 74 65 48 61 73 68 28 22 48 65 6c 6c 6f 2c  puteHash("Hello,
04e0: 20 77 6f 72 6c 64 21 22 29 3b 0a 20 2a 20 20 20   world!");. *   
04f0: 20 20 52 48 61 73 68 2e 63 6f 6d 70 75 74 65 48    RHash.computeH
0500: 61 73 68 28 6e 65 77 20 62 79 74 65 5b 5d 20 7b  ash(new byte[] {
0510: 20 30 2c 20 31 2c 20 32 2c 20 33 7d 29 3b 0a 20   0, 1, 2, 3});. 
0520: 2a 20 20 20 20 20 52 48 61 73 68 2e 63 6f 6d 70  *     RHash.comp
0530: 75 74 65 48 61 73 68 28 6e 65 77 20 46 69 6c 65  uteHash(new File
0540: 28 22 53 6f 6d 65 46 69 6c 65 2e 74 78 74 22 29  ("SomeFile.txt")
0550: 29 3b 3c 2f 70 72 65 3e 0a 20 2a 20 54 68 65 73  );</pre>. * Thes
0560: 65 20 6d 65 74 68 6f 64 73 20 72 65 74 75 72 6e  e methods return
0570: 20 76 61 6c 75 65 20 6f 66 20 74 79 70 65 20 3c   value of type <
0580: 63 6f 64 65 3e 44 69 67 65 73 74 3c 2f 63 6f 64  code>Digest</cod
0590: 65 3e 20 77 68 69 63 68 20 69 73 0a 20 2a 20 61  e> which is. * a
05a0: 20 6d 65 73 73 61 67 65 20 64 69 67 65 73 74 2e   message digest.
05b0: 20 54 6f 20 63 6f 6e 76 65 72 74 20 3c 63 6f 64   To convert <cod
05c0: 65 3e 44 69 67 65 73 74 3c 2f 63 6f 64 65 3e 20  e>Digest</code> 
05d0: 69 6e 20 68 75 6d 61 6e 20 72 65 61 64 61 62 6c  in human readabl
05e0: 65 0a 20 2a 20 66 6f 72 6d 61 74 20 79 6f 75 20  e. * format you 
05f0: 6d 69 67 68 74 20 75 73 65 20 6f 6e 65 20 6f 66  might use one of
0600: 20 6d 65 74 68 6f 64 73 0a 20 2a 20 7b 40 6c 69   methods. * {@li
0610: 6e 6b 20 6f 72 67 2e 73 66 2e 72 68 61 73 68 2e  nk org.sf.rhash.
0620: 44 69 67 65 73 74 23 68 65 78 28 29 20 68 65 78  Digest#hex() hex
0630: 28 29 7d 2c 0a 20 2a 20 7b 40 6c 69 6e 6b 20 6f  ()},. * {@link o
0640: 72 67 2e 73 66 2e 72 68 61 73 68 2e 44 69 67 65  rg.sf.rhash.Dige
0650: 73 74 23 62 61 73 65 33 32 28 29 20 62 61 73 65  st#base32() base
0660: 33 32 28 29 7d 2c 0a 20 2a 20 7b 40 6c 69 6e 6b  32()},. * {@link
0670: 20 6f 72 67 2e 73 66 2e 72 68 61 73 68 2e 44 69   org.sf.rhash.Di
0680: 67 65 73 74 23 62 61 73 65 36 34 28 29 20 62 61  gest#base64() ba
0690: 73 65 36 34 28 29 7d 20 6f 72 0a 20 2a 20 7b 40  se64()} or. * {@
06a0: 6c 69 6e 6b 20 6f 72 67 2e 73 66 2e 72 68 61 73  link org.sf.rhas
06b0: 68 2e 44 69 67 65 73 74 23 72 61 77 28 29 20 72  h.Digest#raw() r
06c0: 61 77 28 29 7d 2e 0a 20 2a 20 3c 2f 70 3e 3c 70  aw()}.. * </p><p
06d0: 3e 0a 20 2a 20 4e 65 78 74 2c 20 3c 63 6f 64 65  >. * Next, <code
06e0: 3e 52 48 61 73 68 3c 2f 63 6f 64 65 3e 20 61 6c  >RHash</code> al
06f0: 6c 6f 77 73 20 79 6f 75 20 74 6f 20 64 6f 20 69  lows you to do i
0700: 6e 63 72 65 6d 65 6e 74 61 6c 20 68 61 73 68 69  ncremental hashi
0710: 6e 67 2c 0a 20 2a 20 70 72 6f 63 65 73 73 69 6e  ng,. * processin
0720: 67 20 64 61 74 61 20 67 69 76 65 6e 20 69 6e 20  g data given in 
0730: 70 6f 72 74 69 6f 6e 73 20 6c 69 6b 65 20 69 74  portions like it
0740: 20 77 61 73 20 6f 6e 65 20 62 69 67 20 62 79 74   was one big byt
0750: 65 20 73 65 71 75 65 6e 63 65 2e 0a 20 2a 20 54  e sequence.. * T
0760: 6f 20 64 6f 20 74 68 69 73 20 79 6f 75 20 66 69  o do this you fi
0770: 72 73 74 20 6e 65 65 64 20 74 6f 20 63 72 65 61  rst need to crea
0780: 74 65 20 3c 63 6f 64 65 3e 52 48 61 73 68 3c 2f  te <code>RHash</
0790: 63 6f 64 65 3e 20 69 6e 73 74 61 6e 63 65 0a 20  code> instance. 
07a0: 2a 20 77 69 74 68 20 61 20 73 65 74 20 6f 66 20  * with a set of 
07b0: 6e 65 65 64 65 64 20 68 61 73 68 20 61 6c 67 6f  needed hash algo
07c0: 72 69 74 68 6d 73 20 61 6e 64 20 74 68 65 6e 20  rithms and then 
07d0: 74 6f 20 66 69 6c 6c 20 69 74 20 75 73 69 6e 67  to fill it using
07e0: 0a 20 2a 20 3c 63 6f 64 65 3e 75 70 64 61 74 65  . * <code>update
07f0: 28 29 3c 2f 63 6f 64 65 3e 3a 0a 20 2a 20 3c 70  ()</code>:. * <p
0800: 72 65 3e 0a 20 2a 20 20 20 20 20 52 48 61 73 68  re>. *     RHash
0810: 20 68 61 73 68 65 72 20 3d 20 6e 65 77 20 52 48   hasher = new RH
0820: 61 73 68 28 48 61 73 68 54 79 70 65 2e 4d 44 35  ash(HashType.MD5
0830: 29 3b 0a 20 2a 20 20 20 20 20 68 61 73 68 65 72  );. *     hasher
0840: 2e 75 70 64 61 74 65 28 22 46 6f 6f 22 29 2e 75  .update("Foo").u
0850: 70 64 61 74 65 28 6e 65 77 20 46 69 6c 65 28 22  pdate(new File("
0860: 42 61 72 2e 7a 69 70 22 29 29 2e 66 69 6e 69 73  Bar.zip")).finis
0870: 68 28 29 3b 0a 20 2a 20 20 20 20 20 44 69 67 65  h();. *     Dige
0880: 73 74 20 72 65 73 75 6c 74 20 3d 20 68 61 73 68  st result = hash
0890: 65 72 2e 67 65 74 44 69 67 65 73 74 28 29 3b 3c  er.getDigest();<
08a0: 2f 70 72 65 3e 0a 20 2a 20 4d 65 74 68 6f 64 20  /pre>. * Method 
08b0: 3c 63 6f 64 65 3e 66 69 6e 69 73 68 28 29 3c 2f  <code>finish()</
08c0: 63 6f 64 65 3e 20 73 68 6f 75 6c 64 20 62 65 20  code> should be 
08d0: 63 61 6c 6c 65 64 20 62 65 66 6f 72 65 20 6f 62  called before ob
08e0: 74 61 69 6e 69 6e 67 0a 20 2a 20 64 69 67 65 73  taining. * diges
08f0: 74 20 74 6f 20 65 6e 64 20 61 6c 6c 20 63 61 6c  t to end all cal
0900: 63 75 6c 61 74 69 6f 6e 73 20 61 6e 64 20 67 65  culations and ge
0910: 6e 65 72 61 74 65 20 72 65 73 75 6c 74 2e 0a 20  nerate result.. 
0920: 2a 20 3c 2f 70 3e 3c 70 3e 0a 20 2a 20 59 6f 75  * </p><p>. * You
0930: 20 63 61 6e 20 73 65 74 75 70 20 3c 63 6f 64 65   can setup <code
0940: 3e 52 48 61 73 68 3c 2f 63 6f 64 65 3e 20 74 6f  >RHash</code> to
0950: 20 63 61 6c 63 75 6c 61 74 65 20 73 65 76 65 72   calculate sever
0960: 61 6c 20 64 69 67 65 73 74 73 0a 20 2a 20 61 74  al digests. * at
0970: 20 6f 6e 63 65 2c 20 70 61 73 73 69 6e 67 20 63   once, passing c
0980: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 3c 63 6f  orresponding <co
0990: 64 65 3e 48 61 73 68 54 79 70 65 3c 2f 63 6f 64  de>HashType</cod
09a0: 65 3e 73 20 69 6e 0a 20 2a 20 63 6f 6e 73 74 72  e>s in. * constr
09b0: 75 63 74 6f 72 2e 20 53 70 65 63 69 66 69 63 61  uctor. Specifica
09c0: 6c 6c 79 2c 20 79 6f 75 20 63 61 6e 20 63 61 6c  lly, you can cal
09d0: 63 75 6c 61 74 65 20 61 6c 6c 20 6f 66 20 74 68  culate all of th
09e0: 65 6d 20 63 72 65 61 74 69 6e 67 0a 20 2a 20 3c  em creating. * <
09f0: 63 6f 64 65 3e 52 48 61 73 68 3c 2f 63 6f 64 65  code>RHash</code
0a00: 3e 20 6c 69 6b 65 0a 20 2a 20 3c 70 72 65 3e 0a  > like. * <pre>.
0a10: 20 2a 20 20 20 20 20 6e 65 77 20 52 68 61 73 68   *     new Rhash
0a20: 28 45 6e 75 6d 53 65 74 2e 61 6c 6c 4f 66 28 48  (EnumSet.allOf(H
0a30: 61 73 68 54 79 70 65 2e 63 6c 61 73 73 29 29 3b  ashType.class));
0a40: 3c 2f 70 72 65 3e 0a 20 2a 20 49 6e 20 74 68 69  </pre>. * In thi
0a50: 73 20 63 61 73 65 20 74 6f 20 6f 62 74 61 69 6e  s case to obtain
0a60: 20 64 69 67 65 73 74 20 66 6f 72 20 70 61 72 74   digest for part
0a70: 69 63 75 6c 61 72 20 68 61 73 68 20 74 79 70 65  icular hash type
0a80: 20 75 73 65 0a 20 2a 20 7b 40 6c 69 6e 6b 20 6f   use. * {@link o
0a90: 72 67 2e 73 66 2e 72 68 61 73 68 2e 52 48 61 73  rg.sf.rhash.RHas
0aa0: 68 23 67 65 74 44 69 67 65 73 74 28 48 61 73 68  h#getDigest(Hash
0ab0: 54 79 70 65 29 20 7d 0a 20 2a 20 6d 65 74 68 6f  Type) }. * metho
0ac0: 64 2e 0a 20 2a 20 3c 2f 70 3e 0a 20 2a 2f 0a 70  d.. * </p>. */.p
0ad0: 61 63 6b 61 67 65 20 6f 72 67 2e 73 66 2e 72 68  ackage org.sf.rh
0ae0: 61 73 68 3b 0a                                   ash;.