/ Hex Artifact Content
Login

Artifact df0a667211baa2c0612d8486acbf6331b9f8633fd4d605c17c7cccd26d59c6bd:


0000: 2f 2a 0a 2a 2a 20 32 30 31 37 2d 30 31 2d 32 37  /*.** 2017-01-27
0010: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 75 74 68 6f  .**.** The autho
0020: 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79  r disclaims copy
0030: 72 69 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f  right to this so
0040: 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70  urce code.  In p
0050: 6c 61 63 65 20 6f 66 0a 2a 2a 20 61 20 6c 65 67  lace of.** a leg
0060: 61 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20  al notice, here 
0070: 69 73 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 2a  is a blessing:.*
0080: 2a 0a 2a 2a 20 20 20 20 4d 61 79 20 79 6f 75 20  *.**    May you 
0090: 64 6f 20 67 6f 6f 64 20 61 6e 64 20 6e 6f 74 20  do good and not 
00a0: 65 76 69 6c 2e 0a 2a 2a 20 20 20 20 4d 61 79 20  evil..**    May 
00b0: 79 6f 75 20 66 69 6e 64 20 66 6f 72 67 69 76 65  you find forgive
00c0: 6e 65 73 73 20 66 6f 72 20 79 6f 75 72 73 65 6c  ness for yoursel
00d0: 66 20 61 6e 64 20 66 6f 72 67 69 76 65 20 6f 74  f and forgive ot
00e0: 68 65 72 73 2e 0a 2a 2a 20 20 20 20 4d 61 79 20  hers..**    May 
00f0: 79 6f 75 20 73 68 61 72 65 20 66 72 65 65 6c 79  you share freely
0100: 2c 20 6e 65 76 65 72 20 74 61 6b 69 6e 67 20 6d  , never taking m
0110: 6f 72 65 20 74 68 61 6e 20 79 6f 75 20 67 69 76  ore than you giv
0120: 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  e..**.**********
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ****.**.** This 
0180: 53 51 4c 69 74 65 20 65 78 74 65 6e 73 69 6f 6e  SQLite extension
0190: 20 69 6d 70 6c 65 6d 65 6e 74 73 20 66 75 6e 63   implements func
01a0: 74 69 6f 6e 73 20 74 68 61 74 20 63 6f 6d 70 75  tions that compu
01b0: 74 65 20 53 48 41 31 20 68 61 73 68 65 73 2e 0a  te SHA1 hashes..
01c0: 2a 2a 20 54 77 6f 20 53 51 4c 20 66 75 6e 63 74  ** Two SQL funct
01d0: 69 6f 6e 73 20 61 72 65 20 69 6d 70 6c 65 6d 65  ions are impleme
01e0: 6e 74 65 64 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  nted:.**.**     
01f0: 73 68 61 31 28 58 29 0a 2a 2a 20 20 20 20 20 73  sha1(X).**     s
0200: 68 61 31 5f 71 75 65 72 79 28 59 29 0a 2a 2a 0a  ha1_query(Y).**.
0210: 2a 2a 20 54 68 65 20 73 68 61 31 28 58 29 20 66  ** The sha1(X) f
0220: 75 6e 63 74 69 6f 6e 20 63 6f 6d 70 75 74 65 73  unction computes
0230: 20 74 68 65 20 53 48 41 31 20 68 61 73 68 20 6f   the SHA1 hash o
0240: 66 20 74 68 65 20 69 6e 70 75 74 20 58 2c 20 6f  f the input X, o
0250: 72 20 4e 55 4c 4c 20 69 66 0a 2a 2a 20 58 20 69  r NULL if.** X i
0260: 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68  s NULL..**.** Th
0270: 65 20 73 68 61 31 5f 71 75 65 72 79 28 59 29 20  e sha1_query(Y) 
0280: 66 75 6e 63 74 69 6f 6e 20 65 76 61 6c 75 74 65  function evalute
0290: 73 20 61 6c 6c 20 71 75 65 72 69 65 73 20 69 6e  s all queries in
02a0: 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
02b0: 6e 74 73 20 6f 66 20 59 0a 2a 2a 20 61 6e 64 20  nts of Y.** and 
02c0: 72 65 74 75 72 6e 73 20 61 20 68 61 73 68 20 6f  returns a hash o
02d0: 66 20 74 68 65 69 72 20 72 65 73 75 6c 74 73 2e  f their results.
02e0: 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73 71  .*/.#include "sq
02f0: 6c 69 74 65 33 65 78 74 2e 68 22 0a 53 51 4c 49  lite3ext.h".SQLI
0300: 54 45 5f 45 58 54 45 4e 53 49 4f 4e 5f 49 4e 49  TE_EXTENSION_INI
0310: 54 31 0a 23 69 6e 63 6c 75 64 65 20 3c 61 73 73  T1.#include <ass
0320: 65 72 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  ert.h>.#include 
0330: 3c 73 74 72 69 6e 67 2e 68 3e 0a 23 69 6e 63 6c  <string.h>.#incl
0340: 75 64 65 20 3c 73 74 64 61 72 67 2e 68 3e 0a 0a  ude <stdarg.h>..
0350: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
0360: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0370: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0380: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0390: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a  ***************.
03a0: 2a 2a 20 54 68 65 20 48 61 73 68 20 45 6e 67 69  ** The Hash Engi
03b0: 6e 65 0a 2a 2f 0a 2f 2a 20 43 6f 6e 74 65 78 74  ne.*/./* Context
03c0: 20 66 6f 72 20 74 68 65 20 53 48 41 31 20 68 61   for the SHA1 ha
03d0: 73 68 20 2a 2f 0a 74 79 70 65 64 65 66 20 73 74  sh */.typedef st
03e0: 72 75 63 74 20 53 48 41 31 43 6f 6e 74 65 78 74  ruct SHA1Context
03f0: 20 53 48 41 31 43 6f 6e 74 65 78 74 3b 0a 73 74   SHA1Context;.st
0400: 72 75 63 74 20 53 48 41 31 43 6f 6e 74 65 78 74  ruct SHA1Context
0410: 20 7b 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e   {.  unsigned in
0420: 74 20 73 74 61 74 65 5b 35 5d 3b 0a 20 20 75 6e  t state[5];.  un
0430: 73 69 67 6e 65 64 20 69 6e 74 20 63 6f 75 6e 74  signed int count
0440: 5b 32 5d 3b 0a 20 20 75 6e 73 69 67 6e 65 64 20  [2];.  unsigned 
0450: 63 68 61 72 20 62 75 66 66 65 72 5b 36 34 5d 3b  char buffer[64];
0460: 0a 7d 3b 0a 0a 0a 23 69 66 20 5f 5f 47 4e 55 43  .};...#if __GNUC
0470: 5f 5f 20 26 26 20 28 64 65 66 69 6e 65 64 28 5f  __ && (defined(_
0480: 5f 69 33 38 36 5f 5f 29 20 7c 7c 20 64 65 66 69  _i386__) || defi
0490: 6e 65 64 28 5f 5f 78 38 36 5f 36 34 5f 5f 29 29  ned(__x86_64__))
04a0: 0a 2f 2a 0a 20 2a 20 47 43 43 20 62 79 20 69 74  ./*. * GCC by it
04b0: 73 65 6c 66 20 6f 6e 6c 79 20 67 65 6e 65 72 61  self only genera
04c0: 74 65 73 20 6c 65 66 74 20 72 6f 74 61 74 65 73  tes left rotates
04d0: 2e 20 20 55 73 65 20 72 69 67 68 74 20 72 6f 74  .  Use right rot
04e0: 61 74 65 73 20 69 66 0a 20 2a 20 70 6f 73 73 69  ates if. * possi
04f0: 62 6c 65 20 74 6f 20 62 65 20 6b 69 6e 64 65 72  ble to be kinder
0500: 20 74 6f 20 64 69 6e 6b 79 20 69 6d 70 6c 65 6d   to dinky implem
0510: 65 6e 74 61 74 69 6f 6e 73 20 77 69 74 68 20 69  entations with i
0520: 74 65 72 61 74 69 76 65 20 72 6f 74 61 74 65 0a  terative rotate.
0530: 20 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e   * instructions.
0540: 0a 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 48 41  . */.#define SHA
0550: 5f 52 4f 54 28 6f 70 2c 20 78 2c 20 6b 29 20 5c  _ROT(op, x, k) \
0560: 0a 20 20 20 20 20 20 20 20 28 7b 20 75 6e 73 69  .        ({ unsi
0570: 67 6e 65 64 20 69 6e 74 20 79 3b 20 61 73 6d 28  gned int y; asm(
0580: 6f 70 20 22 20 25 31 2c 25 30 22 20 3a 20 22 3d  op " %1,%0" : "=
0590: 72 22 20 28 79 29 20 3a 20 22 49 22 20 28 6b 29  r" (y) : "I" (k)
05a0: 2c 20 22 30 22 20 28 78 29 29 3b 20 79 3b 20 7d  , "0" (x)); y; }
05b0: 29 0a 23 64 65 66 69 6e 65 20 72 6f 6c 28 78 2c  ).#define rol(x,
05c0: 6b 29 20 53 48 41 5f 52 4f 54 28 22 72 6f 6c 6c  k) SHA_ROT("roll
05d0: 22 2c 20 78 2c 20 6b 29 0a 23 64 65 66 69 6e 65  ", x, k).#define
05e0: 20 72 6f 72 28 78 2c 6b 29 20 53 48 41 5f 52 4f   ror(x,k) SHA_RO
05f0: 54 28 22 72 6f 72 6c 22 2c 20 78 2c 20 6b 29 0a  T("rorl", x, k).
0600: 0a 23 65 6c 73 65 0a 2f 2a 20 47 65 6e 65 72 69  .#else./* Generi
0610: 63 20 43 20 65 71 75 69 76 61 6c 65 6e 74 20 2a  c C equivalent *
0620: 2f 0a 23 64 65 66 69 6e 65 20 53 48 41 5f 52 4f  /.#define SHA_RO
0630: 54 28 78 2c 6c 2c 72 29 20 28 28 78 29 20 3c 3c  T(x,l,r) ((x) <<
0640: 20 28 6c 29 20 7c 20 28 78 29 20 3e 3e 20 28 72   (l) | (x) >> (r
0650: 29 29 0a 23 64 65 66 69 6e 65 20 72 6f 6c 28 78  )).#define rol(x
0660: 2c 6b 29 20 53 48 41 5f 52 4f 54 28 78 2c 6b 2c  ,k) SHA_ROT(x,k,
0670: 33 32 2d 28 6b 29 29 0a 23 64 65 66 69 6e 65 20  32-(k)).#define 
0680: 72 6f 72 28 78 2c 6b 29 20 53 48 41 5f 52 4f 54  ror(x,k) SHA_ROT
0690: 28 78 2c 33 32 2d 28 6b 29 2c 6b 29 0a 23 65 6e  (x,32-(k),k).#en
06a0: 64 69 66 0a 0a 0a 23 64 65 66 69 6e 65 20 62 6c  dif...#define bl
06b0: 6b 30 6c 65 28 69 29 20 28 62 6c 6f 63 6b 5b 69  k0le(i) (block[i
06c0: 5d 20 3d 20 28 72 6f 72 28 62 6c 6f 63 6b 5b 69  ] = (ror(block[i
06d0: 5d 2c 38 29 26 30 78 46 46 30 30 46 46 30 30 29  ],8)&0xFF00FF00)
06e0: 20 5c 0a 20 20 20 20 7c 28 72 6f 6c 28 62 6c 6f   \.    |(rol(blo
06f0: 63 6b 5b 69 5d 2c 38 29 26 30 78 30 30 46 46 30  ck[i],8)&0x00FF0
0700: 30 46 46 29 29 0a 23 64 65 66 69 6e 65 20 62 6c  0FF)).#define bl
0710: 6b 30 62 65 28 69 29 20 62 6c 6f 63 6b 5b 69 5d  k0be(i) block[i]
0720: 0a 23 64 65 66 69 6e 65 20 62 6c 6b 28 69 29 20  .#define blk(i) 
0730: 28 62 6c 6f 63 6b 5b 69 26 31 35 5d 20 3d 20 72  (block[i&15] = r
0740: 6f 6c 28 62 6c 6f 63 6b 5b 28 69 2b 31 33 29 26  ol(block[(i+13)&
0750: 31 35 5d 5e 62 6c 6f 63 6b 5b 28 69 2b 38 29 26  15]^block[(i+8)&
0760: 31 35 5d 20 5c 0a 20 20 20 20 5e 62 6c 6f 63 6b  15] \.    ^block
0770: 5b 28 69 2b 32 29 26 31 35 5d 5e 62 6c 6f 63 6b  [(i+2)&15]^block
0780: 5b 69 26 31 35 5d 2c 31 29 29 0a 0a 2f 2a 0a 20  [i&15],1))../*. 
0790: 2a 20 28 52 30 2b 52 31 29 2c 20 52 32 2c 20 52  * (R0+R1), R2, R
07a0: 33 2c 20 52 34 20 61 72 65 20 74 68 65 20 64 69  3, R4 are the di
07b0: 66 66 65 72 65 6e 74 20 6f 70 65 72 61 74 69 6f  fferent operatio
07c0: 6e 73 20 28 72 6f 75 6e 64 73 29 20 75 73 65 64  ns (rounds) used
07d0: 20 69 6e 20 53 48 41 31 0a 20 2a 0a 20 2a 20 52   in SHA1. *. * R
07e0: 6c 30 28 29 20 66 6f 72 20 6c 69 74 74 6c 65 2d  l0() for little-
07f0: 65 6e 64 69 61 6e 20 61 6e 64 20 52 62 30 28 29  endian and Rb0()
0800: 20 66 6f 72 20 62 69 67 2d 65 6e 64 69 61 6e 2e   for big-endian.
0810: 20 20 45 6e 64 69 61 6e 6e 65 73 73 20 69 73 0a    Endianness is.
0820: 20 2a 20 64 65 74 65 72 6d 69 6e 65 64 20 61 74   * determined at
0830: 20 72 75 6e 2d 74 69 6d 65 2e 0a 20 2a 2f 0a 23   run-time.. */.#
0840: 64 65 66 69 6e 65 20 52 6c 30 28 76 2c 77 2c 78  define Rl0(v,w,x
0850: 2c 79 2c 7a 2c 69 29 20 5c 0a 20 20 20 20 7a 2b  ,y,z,i) \.    z+
0860: 3d 28 28 77 26 28 78 5e 79 29 29 5e 79 29 2b 62  =((w&(x^y))^y)+b
0870: 6c 6b 30 6c 65 28 69 29 2b 30 78 35 41 38 32 37  lk0le(i)+0x5A827
0880: 39 39 39 2b 72 6f 6c 28 76 2c 35 29 3b 77 3d 72  999+rol(v,5);w=r
0890: 6f 72 28 77 2c 32 29 3b 0a 23 64 65 66 69 6e 65  or(w,2);.#define
08a0: 20 52 62 30 28 76 2c 77 2c 78 2c 79 2c 7a 2c 69   Rb0(v,w,x,y,z,i
08b0: 29 20 5c 0a 20 20 20 20 7a 2b 3d 28 28 77 26 28  ) \.    z+=((w&(
08c0: 78 5e 79 29 29 5e 79 29 2b 62 6c 6b 30 62 65 28  x^y))^y)+blk0be(
08d0: 69 29 2b 30 78 35 41 38 32 37 39 39 39 2b 72 6f  i)+0x5A827999+ro
08e0: 6c 28 76 2c 35 29 3b 77 3d 72 6f 72 28 77 2c 32  l(v,5);w=ror(w,2
08f0: 29 3b 0a 23 64 65 66 69 6e 65 20 52 31 28 76 2c  );.#define R1(v,
0900: 77 2c 78 2c 79 2c 7a 2c 69 29 20 5c 0a 20 20 20  w,x,y,z,i) \.   
0910: 20 7a 2b 3d 28 28 77 26 28 78 5e 79 29 29 5e 79   z+=((w&(x^y))^y
0920: 29 2b 62 6c 6b 28 69 29 2b 30 78 35 41 38 32 37  )+blk(i)+0x5A827
0930: 39 39 39 2b 72 6f 6c 28 76 2c 35 29 3b 77 3d 72  999+rol(v,5);w=r
0940: 6f 72 28 77 2c 32 29 3b 0a 23 64 65 66 69 6e 65  or(w,2);.#define
0950: 20 52 32 28 76 2c 77 2c 78 2c 79 2c 7a 2c 69 29   R2(v,w,x,y,z,i)
0960: 20 5c 0a 20 20 20 20 7a 2b 3d 28 77 5e 78 5e 79   \.    z+=(w^x^y
0970: 29 2b 62 6c 6b 28 69 29 2b 30 78 36 45 44 39 45  )+blk(i)+0x6ED9E
0980: 42 41 31 2b 72 6f 6c 28 76 2c 35 29 3b 77 3d 72  BA1+rol(v,5);w=r
0990: 6f 72 28 77 2c 32 29 3b 0a 23 64 65 66 69 6e 65  or(w,2);.#define
09a0: 20 52 33 28 76 2c 77 2c 78 2c 79 2c 7a 2c 69 29   R3(v,w,x,y,z,i)
09b0: 20 5c 0a 20 20 20 20 7a 2b 3d 28 28 28 77 7c 78   \.    z+=(((w|x
09c0: 29 26 79 29 7c 28 77 26 78 29 29 2b 62 6c 6b 28  )&y)|(w&x))+blk(
09d0: 69 29 2b 30 78 38 46 31 42 42 43 44 43 2b 72 6f  i)+0x8F1BBCDC+ro
09e0: 6c 28 76 2c 35 29 3b 77 3d 72 6f 72 28 77 2c 32  l(v,5);w=ror(w,2
09f0: 29 3b 0a 23 64 65 66 69 6e 65 20 52 34 28 76 2c  );.#define R4(v,
0a00: 77 2c 78 2c 79 2c 7a 2c 69 29 20 5c 0a 20 20 20  w,x,y,z,i) \.   
0a10: 20 7a 2b 3d 28 77 5e 78 5e 79 29 2b 62 6c 6b 28   z+=(w^x^y)+blk(
0a20: 69 29 2b 30 78 43 41 36 32 43 31 44 36 2b 72 6f  i)+0xCA62C1D6+ro
0a30: 6c 28 76 2c 35 29 3b 77 3d 72 6f 72 28 77 2c 32  l(v,5);w=ror(w,2
0a40: 29 3b 0a 0a 2f 2a 0a 20 2a 20 48 61 73 68 20 61  );../*. * Hash a
0a50: 20 73 69 6e 67 6c 65 20 35 31 32 2d 62 69 74 20   single 512-bit 
0a60: 62 6c 6f 63 6b 2e 20 54 68 69 73 20 69 73 20 74  block. This is t
0a70: 68 65 20 63 6f 72 65 20 6f 66 20 74 68 65 20 61  he core of the a
0a80: 6c 67 6f 72 69 74 68 6d 2e 0a 20 2a 2f 0a 76 6f  lgorithm.. */.vo
0a90: 69 64 20 53 48 41 31 54 72 61 6e 73 66 6f 72 6d  id SHA1Transform
0aa0: 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 73 74  (unsigned int st
0ab0: 61 74 65 5b 35 5d 2c 20 63 6f 6e 73 74 20 75 6e  ate[5], const un
0ac0: 73 69 67 6e 65 64 20 63 68 61 72 20 62 75 66 66  signed char buff
0ad0: 65 72 5b 36 34 5d 29 7b 0a 20 20 75 6e 73 69 67  er[64]){.  unsig
0ae0: 6e 65 64 20 69 6e 74 20 71 71 5b 35 5d 3b 20 2f  ned int qq[5]; /
0af0: 2a 20 61 2c 20 62 2c 20 63 2c 20 64 2c 20 65 3b  * a, b, c, d, e;
0b00: 20 2a 2f 0a 20 20 73 74 61 74 69 63 20 69 6e 74   */.  static int
0b10: 20 6f 6e 65 20 3d 20 31 3b 0a 20 20 75 6e 73 69   one = 1;.  unsi
0b20: 67 6e 65 64 20 69 6e 74 20 62 6c 6f 63 6b 5b 31  gned int block[1
0b30: 36 5d 3b 0a 20 20 6d 65 6d 63 70 79 28 62 6c 6f  6];.  memcpy(blo
0b40: 63 6b 2c 20 62 75 66 66 65 72 2c 20 36 34 29 3b  ck, buffer, 64);
0b50: 0a 20 20 6d 65 6d 63 70 79 28 71 71 2c 73 74 61  .  memcpy(qq,sta
0b60: 74 65 2c 35 2a 73 69 7a 65 6f 66 28 75 6e 73 69  te,5*sizeof(unsi
0b70: 67 6e 65 64 20 69 6e 74 29 29 3b 0a 0a 23 64 65  gned int));..#de
0b80: 66 69 6e 65 20 61 20 71 71 5b 30 5d 0a 23 64 65  fine a qq[0].#de
0b90: 66 69 6e 65 20 62 20 71 71 5b 31 5d 0a 23 64 65  fine b qq[1].#de
0ba0: 66 69 6e 65 20 63 20 71 71 5b 32 5d 0a 23 64 65  fine c qq[2].#de
0bb0: 66 69 6e 65 20 64 20 71 71 5b 33 5d 0a 23 64 65  fine d qq[3].#de
0bc0: 66 69 6e 65 20 65 20 71 71 5b 34 5d 0a 0a 20 20  fine e qq[4]..  
0bd0: 2f 2a 20 43 6f 70 79 20 70 2d 3e 73 74 61 74 65  /* Copy p->state
0be0: 5b 5d 20 74 6f 20 77 6f 72 6b 69 6e 67 20 76 61  [] to working va
0bf0: 72 73 20 2a 2f 0a 20 20 2f 2a 0a 20 20 61 20 3d  rs */.  /*.  a =
0c00: 20 73 74 61 74 65 5b 30 5d 3b 0a 20 20 62 20 3d   state[0];.  b =
0c10: 20 73 74 61 74 65 5b 31 5d 3b 0a 20 20 63 20 3d   state[1];.  c =
0c20: 20 73 74 61 74 65 5b 32 5d 3b 0a 20 20 64 20 3d   state[2];.  d =
0c30: 20 73 74 61 74 65 5b 33 5d 3b 0a 20 20 65 20 3d   state[3];.  e =
0c40: 20 73 74 61 74 65 5b 34 5d 3b 0a 20 20 2a 2f 0a   state[4];.  */.
0c50: 0a 20 20 2f 2a 20 34 20 72 6f 75 6e 64 73 20 6f  .  /* 4 rounds o
0c60: 66 20 32 30 20 6f 70 65 72 61 74 69 6f 6e 73 20  f 20 operations 
0c70: 65 61 63 68 2e 20 4c 6f 6f 70 20 75 6e 72 6f 6c  each. Loop unrol
0c80: 6c 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 31 20  led. */.  if( 1 
0c90: 3d 3d 20 2a 28 75 6e 73 69 67 6e 65 64 20 63 68  == *(unsigned ch
0ca0: 61 72 2a 29 26 6f 6e 65 20 29 7b 0a 20 20 20 20  ar*)&one ){.    
0cb0: 52 6c 30 28 61 2c 62 2c 63 2c 64 2c 65 2c 20 30  Rl0(a,b,c,d,e, 0
0cc0: 29 3b 20 52 6c 30 28 65 2c 61 2c 62 2c 63 2c 64  ); Rl0(e,a,b,c,d
0cd0: 2c 20 31 29 3b 20 52 6c 30 28 64 2c 65 2c 61 2c  , 1); Rl0(d,e,a,
0ce0: 62 2c 63 2c 20 32 29 3b 20 52 6c 30 28 63 2c 64  b,c, 2); Rl0(c,d
0cf0: 2c 65 2c 61 2c 62 2c 20 33 29 3b 0a 20 20 20 20  ,e,a,b, 3);.    
0d00: 52 6c 30 28 62 2c 63 2c 64 2c 65 2c 61 2c 20 34  Rl0(b,c,d,e,a, 4
0d10: 29 3b 20 52 6c 30 28 61 2c 62 2c 63 2c 64 2c 65  ); Rl0(a,b,c,d,e
0d20: 2c 20 35 29 3b 20 52 6c 30 28 65 2c 61 2c 62 2c  , 5); Rl0(e,a,b,
0d30: 63 2c 64 2c 20 36 29 3b 20 52 6c 30 28 64 2c 65  c,d, 6); Rl0(d,e
0d40: 2c 61 2c 62 2c 63 2c 20 37 29 3b 0a 20 20 20 20  ,a,b,c, 7);.    
0d50: 52 6c 30 28 63 2c 64 2c 65 2c 61 2c 62 2c 20 38  Rl0(c,d,e,a,b, 8
0d60: 29 3b 20 52 6c 30 28 62 2c 63 2c 64 2c 65 2c 61  ); Rl0(b,c,d,e,a
0d70: 2c 20 39 29 3b 20 52 6c 30 28 61 2c 62 2c 63 2c  , 9); Rl0(a,b,c,
0d80: 64 2c 65 2c 31 30 29 3b 20 52 6c 30 28 65 2c 61  d,e,10); Rl0(e,a
0d90: 2c 62 2c 63 2c 64 2c 31 31 29 3b 0a 20 20 20 20  ,b,c,d,11);.    
0da0: 52 6c 30 28 64 2c 65 2c 61 2c 62 2c 63 2c 31 32  Rl0(d,e,a,b,c,12
0db0: 29 3b 20 52 6c 30 28 63 2c 64 2c 65 2c 61 2c 62  ); Rl0(c,d,e,a,b
0dc0: 2c 31 33 29 3b 20 52 6c 30 28 62 2c 63 2c 64 2c  ,13); Rl0(b,c,d,
0dd0: 65 2c 61 2c 31 34 29 3b 20 52 6c 30 28 61 2c 62  e,a,14); Rl0(a,b
0de0: 2c 63 2c 64 2c 65 2c 31 35 29 3b 0a 20 20 7d 65  ,c,d,e,15);.  }e
0df0: 6c 73 65 7b 0a 20 20 20 20 52 62 30 28 61 2c 62  lse{.    Rb0(a,b
0e00: 2c 63 2c 64 2c 65 2c 20 30 29 3b 20 52 62 30 28  ,c,d,e, 0); Rb0(
0e10: 65 2c 61 2c 62 2c 63 2c 64 2c 20 31 29 3b 20 52  e,a,b,c,d, 1); R
0e20: 62 30 28 64 2c 65 2c 61 2c 62 2c 63 2c 20 32 29  b0(d,e,a,b,c, 2)
0e30: 3b 20 52 62 30 28 63 2c 64 2c 65 2c 61 2c 62 2c  ; Rb0(c,d,e,a,b,
0e40: 20 33 29 3b 0a 20 20 20 20 52 62 30 28 62 2c 63   3);.    Rb0(b,c
0e50: 2c 64 2c 65 2c 61 2c 20 34 29 3b 20 52 62 30 28  ,d,e,a, 4); Rb0(
0e60: 61 2c 62 2c 63 2c 64 2c 65 2c 20 35 29 3b 20 52  a,b,c,d,e, 5); R
0e70: 62 30 28 65 2c 61 2c 62 2c 63 2c 64 2c 20 36 29  b0(e,a,b,c,d, 6)
0e80: 3b 20 52 62 30 28 64 2c 65 2c 61 2c 62 2c 63 2c  ; Rb0(d,e,a,b,c,
0e90: 20 37 29 3b 0a 20 20 20 20 52 62 30 28 63 2c 64   7);.    Rb0(c,d
0ea0: 2c 65 2c 61 2c 62 2c 20 38 29 3b 20 52 62 30 28  ,e,a,b, 8); Rb0(
0eb0: 62 2c 63 2c 64 2c 65 2c 61 2c 20 39 29 3b 20 52  b,c,d,e,a, 9); R
0ec0: 62 30 28 61 2c 62 2c 63 2c 64 2c 65 2c 31 30 29  b0(a,b,c,d,e,10)
0ed0: 3b 20 52 62 30 28 65 2c 61 2c 62 2c 63 2c 64 2c  ; Rb0(e,a,b,c,d,
0ee0: 31 31 29 3b 0a 20 20 20 20 52 62 30 28 64 2c 65  11);.    Rb0(d,e
0ef0: 2c 61 2c 62 2c 63 2c 31 32 29 3b 20 52 62 30 28  ,a,b,c,12); Rb0(
0f00: 63 2c 64 2c 65 2c 61 2c 62 2c 31 33 29 3b 20 52  c,d,e,a,b,13); R
0f10: 62 30 28 62 2c 63 2c 64 2c 65 2c 61 2c 31 34 29  b0(b,c,d,e,a,14)
0f20: 3b 20 52 62 30 28 61 2c 62 2c 63 2c 64 2c 65 2c  ; Rb0(a,b,c,d,e,
0f30: 31 35 29 3b 0a 20 20 7d 0a 20 20 52 31 28 65 2c  15);.  }.  R1(e,
0f40: 61 2c 62 2c 63 2c 64 2c 31 36 29 3b 20 52 31 28  a,b,c,d,16); R1(
0f50: 64 2c 65 2c 61 2c 62 2c 63 2c 31 37 29 3b 20 52  d,e,a,b,c,17); R
0f60: 31 28 63 2c 64 2c 65 2c 61 2c 62 2c 31 38 29 3b  1(c,d,e,a,b,18);
0f70: 20 52 31 28 62 2c 63 2c 64 2c 65 2c 61 2c 31 39   R1(b,c,d,e,a,19
0f80: 29 3b 0a 20 20 52 32 28 61 2c 62 2c 63 2c 64 2c  );.  R2(a,b,c,d,
0f90: 65 2c 32 30 29 3b 20 52 32 28 65 2c 61 2c 62 2c  e,20); R2(e,a,b,
0fa0: 63 2c 64 2c 32 31 29 3b 20 52 32 28 64 2c 65 2c  c,d,21); R2(d,e,
0fb0: 61 2c 62 2c 63 2c 32 32 29 3b 20 52 32 28 63 2c  a,b,c,22); R2(c,
0fc0: 64 2c 65 2c 61 2c 62 2c 32 33 29 3b 0a 20 20 52  d,e,a,b,23);.  R
0fd0: 32 28 62 2c 63 2c 64 2c 65 2c 61 2c 32 34 29 3b  2(b,c,d,e,a,24);
0fe0: 20 52 32 28 61 2c 62 2c 63 2c 64 2c 65 2c 32 35   R2(a,b,c,d,e,25
0ff0: 29 3b 20 52 32 28 65 2c 61 2c 62 2c 63 2c 64 2c  ); R2(e,a,b,c,d,
1000: 32 36 29 3b 20 52 32 28 64 2c 65 2c 61 2c 62 2c  26); R2(d,e,a,b,
1010: 63 2c 32 37 29 3b 0a 20 20 52 32 28 63 2c 64 2c  c,27);.  R2(c,d,
1020: 65 2c 61 2c 62 2c 32 38 29 3b 20 52 32 28 62 2c  e,a,b,28); R2(b,
1030: 63 2c 64 2c 65 2c 61 2c 32 39 29 3b 20 52 32 28  c,d,e,a,29); R2(
1040: 61 2c 62 2c 63 2c 64 2c 65 2c 33 30 29 3b 20 52  a,b,c,d,e,30); R
1050: 32 28 65 2c 61 2c 62 2c 63 2c 64 2c 33 31 29 3b  2(e,a,b,c,d,31);
1060: 0a 20 20 52 32 28 64 2c 65 2c 61 2c 62 2c 63 2c  .  R2(d,e,a,b,c,
1070: 33 32 29 3b 20 52 32 28 63 2c 64 2c 65 2c 61 2c  32); R2(c,d,e,a,
1080: 62 2c 33 33 29 3b 20 52 32 28 62 2c 63 2c 64 2c  b,33); R2(b,c,d,
1090: 65 2c 61 2c 33 34 29 3b 20 52 32 28 61 2c 62 2c  e,a,34); R2(a,b,
10a0: 63 2c 64 2c 65 2c 33 35 29 3b 0a 20 20 52 32 28  c,d,e,35);.  R2(
10b0: 65 2c 61 2c 62 2c 63 2c 64 2c 33 36 29 3b 20 52  e,a,b,c,d,36); R
10c0: 32 28 64 2c 65 2c 61 2c 62 2c 63 2c 33 37 29 3b  2(d,e,a,b,c,37);
10d0: 20 52 32 28 63 2c 64 2c 65 2c 61 2c 62 2c 33 38   R2(c,d,e,a,b,38
10e0: 29 3b 20 52 32 28 62 2c 63 2c 64 2c 65 2c 61 2c  ); R2(b,c,d,e,a,
10f0: 33 39 29 3b 0a 20 20 52 33 28 61 2c 62 2c 63 2c  39);.  R3(a,b,c,
1100: 64 2c 65 2c 34 30 29 3b 20 52 33 28 65 2c 61 2c  d,e,40); R3(e,a,
1110: 62 2c 63 2c 64 2c 34 31 29 3b 20 52 33 28 64 2c  b,c,d,41); R3(d,
1120: 65 2c 61 2c 62 2c 63 2c 34 32 29 3b 20 52 33 28  e,a,b,c,42); R3(
1130: 63 2c 64 2c 65 2c 61 2c 62 2c 34 33 29 3b 0a 20  c,d,e,a,b,43);. 
1140: 20 52 33 28 62 2c 63 2c 64 2c 65 2c 61 2c 34 34   R3(b,c,d,e,a,44
1150: 29 3b 20 52 33 28 61 2c 62 2c 63 2c 64 2c 65 2c  ); R3(a,b,c,d,e,
1160: 34 35 29 3b 20 52 33 28 65 2c 61 2c 62 2c 63 2c  45); R3(e,a,b,c,
1170: 64 2c 34 36 29 3b 20 52 33 28 64 2c 65 2c 61 2c  d,46); R3(d,e,a,
1180: 62 2c 63 2c 34 37 29 3b 0a 20 20 52 33 28 63 2c  b,c,47);.  R3(c,
1190: 64 2c 65 2c 61 2c 62 2c 34 38 29 3b 20 52 33 28  d,e,a,b,48); R3(
11a0: 62 2c 63 2c 64 2c 65 2c 61 2c 34 39 29 3b 20 52  b,c,d,e,a,49); R
11b0: 33 28 61 2c 62 2c 63 2c 64 2c 65 2c 35 30 29 3b  3(a,b,c,d,e,50);
11c0: 20 52 33 28 65 2c 61 2c 62 2c 63 2c 64 2c 35 31   R3(e,a,b,c,d,51
11d0: 29 3b 0a 20 20 52 33 28 64 2c 65 2c 61 2c 62 2c  );.  R3(d,e,a,b,
11e0: 63 2c 35 32 29 3b 20 52 33 28 63 2c 64 2c 65 2c  c,52); R3(c,d,e,
11f0: 61 2c 62 2c 35 33 29 3b 20 52 33 28 62 2c 63 2c  a,b,53); R3(b,c,
1200: 64 2c 65 2c 61 2c 35 34 29 3b 20 52 33 28 61 2c  d,e,a,54); R3(a,
1210: 62 2c 63 2c 64 2c 65 2c 35 35 29 3b 0a 20 20 52  b,c,d,e,55);.  R
1220: 33 28 65 2c 61 2c 62 2c 63 2c 64 2c 35 36 29 3b  3(e,a,b,c,d,56);
1230: 20 52 33 28 64 2c 65 2c 61 2c 62 2c 63 2c 35 37   R3(d,e,a,b,c,57
1240: 29 3b 20 52 33 28 63 2c 64 2c 65 2c 61 2c 62 2c  ); R3(c,d,e,a,b,
1250: 35 38 29 3b 20 52 33 28 62 2c 63 2c 64 2c 65 2c  58); R3(b,c,d,e,
1260: 61 2c 35 39 29 3b 0a 20 20 52 34 28 61 2c 62 2c  a,59);.  R4(a,b,
1270: 63 2c 64 2c 65 2c 36 30 29 3b 20 52 34 28 65 2c  c,d,e,60); R4(e,
1280: 61 2c 62 2c 63 2c 64 2c 36 31 29 3b 20 52 34 28  a,b,c,d,61); R4(
1290: 64 2c 65 2c 61 2c 62 2c 63 2c 36 32 29 3b 20 52  d,e,a,b,c,62); R
12a0: 34 28 63 2c 64 2c 65 2c 61 2c 62 2c 36 33 29 3b  4(c,d,e,a,b,63);
12b0: 0a 20 20 52 34 28 62 2c 63 2c 64 2c 65 2c 61 2c  .  R4(b,c,d,e,a,
12c0: 36 34 29 3b 20 52 34 28 61 2c 62 2c 63 2c 64 2c  64); R4(a,b,c,d,
12d0: 65 2c 36 35 29 3b 20 52 34 28 65 2c 61 2c 62 2c  e,65); R4(e,a,b,
12e0: 63 2c 64 2c 36 36 29 3b 20 52 34 28 64 2c 65 2c  c,d,66); R4(d,e,
12f0: 61 2c 62 2c 63 2c 36 37 29 3b 0a 20 20 52 34 28  a,b,c,67);.  R4(
1300: 63 2c 64 2c 65 2c 61 2c 62 2c 36 38 29 3b 20 52  c,d,e,a,b,68); R
1310: 34 28 62 2c 63 2c 64 2c 65 2c 61 2c 36 39 29 3b  4(b,c,d,e,a,69);
1320: 20 52 34 28 61 2c 62 2c 63 2c 64 2c 65 2c 37 30   R4(a,b,c,d,e,70
1330: 29 3b 20 52 34 28 65 2c 61 2c 62 2c 63 2c 64 2c  ); R4(e,a,b,c,d,
1340: 37 31 29 3b 0a 20 20 52 34 28 64 2c 65 2c 61 2c  71);.  R4(d,e,a,
1350: 62 2c 63 2c 37 32 29 3b 20 52 34 28 63 2c 64 2c  b,c,72); R4(c,d,
1360: 65 2c 61 2c 62 2c 37 33 29 3b 20 52 34 28 62 2c  e,a,b,73); R4(b,
1370: 63 2c 64 2c 65 2c 61 2c 37 34 29 3b 20 52 34 28  c,d,e,a,74); R4(
1380: 61 2c 62 2c 63 2c 64 2c 65 2c 37 35 29 3b 0a 20  a,b,c,d,e,75);. 
1390: 20 52 34 28 65 2c 61 2c 62 2c 63 2c 64 2c 37 36   R4(e,a,b,c,d,76
13a0: 29 3b 20 52 34 28 64 2c 65 2c 61 2c 62 2c 63 2c  ); R4(d,e,a,b,c,
13b0: 37 37 29 3b 20 52 34 28 63 2c 64 2c 65 2c 61 2c  77); R4(c,d,e,a,
13c0: 62 2c 37 38 29 3b 20 52 34 28 62 2c 63 2c 64 2c  b,78); R4(b,c,d,
13d0: 65 2c 61 2c 37 39 29 3b 0a 0a 20 20 2f 2a 20 41  e,a,79);..  /* A
13e0: 64 64 20 74 68 65 20 77 6f 72 6b 69 6e 67 20 76  dd the working v
13f0: 61 72 73 20 62 61 63 6b 20 69 6e 74 6f 20 63 6f  ars back into co
1400: 6e 74 65 78 74 2e 73 74 61 74 65 5b 5d 20 2a 2f  ntext.state[] */
1410: 0a 20 20 73 74 61 74 65 5b 30 5d 20 2b 3d 20 61  .  state[0] += a
1420: 3b 0a 20 20 73 74 61 74 65 5b 31 5d 20 2b 3d 20  ;.  state[1] += 
1430: 62 3b 0a 20 20 73 74 61 74 65 5b 32 5d 20 2b 3d  b;.  state[2] +=
1440: 20 63 3b 0a 20 20 73 74 61 74 65 5b 33 5d 20 2b   c;.  state[3] +
1450: 3d 20 64 3b 0a 20 20 73 74 61 74 65 5b 34 5d 20  = d;.  state[4] 
1460: 2b 3d 20 65 3b 0a 0a 23 75 6e 64 65 66 20 61 0a  += e;..#undef a.
1470: 23 75 6e 64 65 66 20 62 0a 23 75 6e 64 65 66 20  #undef b.#undef 
1480: 63 0a 23 75 6e 64 65 66 20 64 0a 23 75 6e 64 65  c.#undef d.#unde
1490: 66 20 65 0a 7d 0a 0a 0a 2f 2a 20 49 6e 69 74 69  f e.}.../* Initi
14a0: 61 6c 69 7a 65 20 61 20 53 48 41 31 20 63 6f 6e  alize a SHA1 con
14b0: 74 65 78 74 20 2a 2f 0a 73 74 61 74 69 63 20 76  text */.static v
14c0: 6f 69 64 20 68 61 73 68 5f 69 6e 69 74 28 53 48  oid hash_init(SH
14d0: 41 31 43 6f 6e 74 65 78 74 20 2a 70 29 7b 0a 20  A1Context *p){. 
14e0: 20 2f 2a 20 53 48 41 31 20 69 6e 69 74 69 61 6c   /* SHA1 initial
14f0: 69 7a 61 74 69 6f 6e 20 63 6f 6e 73 74 61 6e 74  ization constant
1500: 73 20 2a 2f 0a 20 20 70 2d 3e 73 74 61 74 65 5b  s */.  p->state[
1510: 30 5d 20 3d 20 30 78 36 37 34 35 32 33 30 31 3b  0] = 0x67452301;
1520: 0a 20 20 70 2d 3e 73 74 61 74 65 5b 31 5d 20 3d  .  p->state[1] =
1530: 20 30 78 45 46 43 44 41 42 38 39 3b 0a 20 20 70   0xEFCDAB89;.  p
1540: 2d 3e 73 74 61 74 65 5b 32 5d 20 3d 20 30 78 39  ->state[2] = 0x9
1550: 38 42 41 44 43 46 45 3b 0a 20 20 70 2d 3e 73 74  8BADCFE;.  p->st
1560: 61 74 65 5b 33 5d 20 3d 20 30 78 31 30 33 32 35  ate[3] = 0x10325
1570: 34 37 36 3b 0a 20 20 70 2d 3e 73 74 61 74 65 5b  476;.  p->state[
1580: 34 5d 20 3d 20 30 78 43 33 44 32 45 31 46 30 3b  4] = 0xC3D2E1F0;
1590: 0a 20 20 70 2d 3e 63 6f 75 6e 74 5b 30 5d 20 3d  .  p->count[0] =
15a0: 20 70 2d 3e 63 6f 75 6e 74 5b 31 5d 20 3d 20 30   p->count[1] = 0
15b0: 3b 0a 7d 0a 0a 2f 2a 20 41 64 64 20 6e 65 77 20  ;.}../* Add new 
15c0: 63 6f 6e 74 65 6e 74 20 74 6f 20 74 68 65 20 53  content to the S
15d0: 48 41 31 20 68 61 73 68 20 2a 2f 0a 73 74 61 74  HA1 hash */.stat
15e0: 69 63 20 76 6f 69 64 20 68 61 73 68 5f 73 74 65  ic void hash_ste
15f0: 70 28 0a 20 20 53 48 41 31 43 6f 6e 74 65 78 74  p(.  SHA1Context
1600: 20 2a 70 2c 20 20 20 20 20 20 20 20 20 20 20 20   *p,            
1610: 20 20 20 20 20 2f 2a 20 41 64 64 20 63 6f 6e 74       /* Add cont
1620: 65 6e 74 20 74 6f 20 74 68 69 73 20 63 6f 6e 74  ent to this cont
1630: 65 78 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75  ext */.  const u
1640: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 64 61  nsigned char *da
1650: 74 61 2c 20 20 20 20 20 20 2f 2a 20 44 61 74 61  ta,      /* Data
1660: 20 74 6f 20 62 65 20 61 64 64 65 64 20 2a 2f 0a   to be added */.
1670: 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6c    unsigned int l
1680: 65 6e 20 20 20 20 20 20 20 20 20 20 20 20 20 20  en              
1690: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
16a0: 79 74 65 73 20 69 6e 20 64 61 74 61 20 2a 2f 0a  ytes in data */.
16b0: 29 7b 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e  ){.  unsigned in
16c0: 74 20 69 2c 20 6a 3b 0a 0a 20 20 6a 20 3d 20 70  t i, j;..  j = p
16d0: 2d 3e 63 6f 75 6e 74 5b 30 5d 3b 0a 20 20 69 66  ->count[0];.  if
16e0: 28 20 28 70 2d 3e 63 6f 75 6e 74 5b 30 5d 20 2b  ( (p->count[0] +
16f0: 3d 20 6c 65 6e 20 3c 3c 20 33 29 20 3c 20 6a 20  = len << 3) < j 
1700: 29 7b 0a 20 20 20 20 70 2d 3e 63 6f 75 6e 74 5b  ){.    p->count[
1710: 31 5d 20 2b 3d 20 28 6c 65 6e 3e 3e 32 39 29 2b  1] += (len>>29)+
1720: 31 3b 0a 20 20 7d 0a 20 20 6a 20 3d 20 28 6a 20  1;.  }.  j = (j 
1730: 3e 3e 20 33 29 20 26 20 36 33 3b 0a 20 20 69 66  >> 3) & 63;.  if
1740: 28 20 28 6a 20 2b 20 6c 65 6e 29 20 3e 20 36 33  ( (j + len) > 63
1750: 20 29 7b 0a 20 20 20 20 28 76 6f 69 64 29 6d 65   ){.    (void)me
1760: 6d 63 70 79 28 26 70 2d 3e 62 75 66 66 65 72 5b  mcpy(&p->buffer[
1770: 6a 5d 2c 20 64 61 74 61 2c 20 28 69 20 3d 20 36  j], data, (i = 6
1780: 34 2d 6a 29 29 3b 0a 20 20 20 20 53 48 41 31 54  4-j));.    SHA1T
1790: 72 61 6e 73 66 6f 72 6d 28 70 2d 3e 73 74 61 74  ransform(p->stat
17a0: 65 2c 20 70 2d 3e 62 75 66 66 65 72 29 3b 0a 20  e, p->buffer);. 
17b0: 20 20 20 66 6f 72 28 3b 20 69 20 2b 20 36 33 20     for(; i + 63 
17c0: 3c 20 6c 65 6e 3b 20 69 20 2b 3d 20 36 34 29 7b  < len; i += 64){
17d0: 0a 20 20 20 20 20 20 53 48 41 31 54 72 61 6e 73  .      SHA1Trans
17e0: 66 6f 72 6d 28 70 2d 3e 73 74 61 74 65 2c 20 26  form(p->state, &
17f0: 64 61 74 61 5b 69 5d 29 3b 0a 20 20 20 20 7d 0a  data[i]);.    }.
1800: 20 20 20 20 6a 20 3d 20 30 3b 0a 20 20 7d 65 6c      j = 0;.  }el
1810: 73 65 7b 0a 20 20 20 20 69 20 3d 20 30 3b 0a 20  se{.    i = 0;. 
1820: 20 7d 0a 20 20 28 76 6f 69 64 29 6d 65 6d 63 70   }.  (void)memcp
1830: 79 28 26 70 2d 3e 62 75 66 66 65 72 5b 6a 5d 2c  y(&p->buffer[j],
1840: 20 26 64 61 74 61 5b 69 5d 2c 20 6c 65 6e 20 2d   &data[i], len -
1850: 20 69 29 3b 0a 7d 0a 0a 2f 2a 20 43 6f 6d 70 75   i);.}../* Compu
1860: 74 65 20 61 20 73 74 72 69 6e 67 20 75 73 69 6e  te a string usin
1870: 67 20 73 71 6c 69 74 65 33 5f 76 73 6e 70 72 69  g sqlite3_vsnpri
1880: 6e 74 66 28 29 20 61 6e 64 20 68 61 73 68 20 69  ntf() and hash i
1890: 74 20 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  t */.static void
18a0: 20 68 61 73 68 5f 73 74 65 70 5f 76 66 6f 72 6d   hash_step_vform
18b0: 61 74 28 0a 20 20 53 48 41 31 43 6f 6e 74 65 78  at(.  SHA1Contex
18c0: 74 20 2a 70 2c 20 20 20 20 20 20 20 20 20 20 20  t *p,           
18d0: 20 20 20 20 20 20 2f 2a 20 41 64 64 20 63 6f 6e        /* Add con
18e0: 74 65 6e 74 20 74 6f 20 74 68 69 73 20 63 6f 6e  tent to this con
18f0: 74 65 78 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  text */.  const 
1900: 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c 0a 20  char *zFormat,. 
1910: 20 2e 2e 2e 0a 29 7b 0a 20 20 76 61 5f 6c 69 73   ....){.  va_lis
1920: 74 20 61 70 3b 0a 20 20 69 6e 74 20 6e 3b 0a 20  t ap;.  int n;. 
1930: 20 63 68 61 72 20 7a 42 75 66 5b 35 30 5d 3b 0a   char zBuf[50];.
1940: 20 20 76 61 5f 73 74 61 72 74 28 61 70 2c 20 7a    va_start(ap, z
1950: 46 6f 72 6d 61 74 29 3b 0a 20 20 73 71 6c 69 74  Format);.  sqlit
1960: 65 33 5f 76 73 6e 70 72 69 6e 74 66 28 73 69 7a  e3_vsnprintf(siz
1970: 65 6f 66 28 7a 42 75 66 29 2c 7a 42 75 66 2c 7a  eof(zBuf),zBuf,z
1980: 46 6f 72 6d 61 74 2c 61 70 29 3b 0a 20 20 76 61  Format,ap);.  va
1990: 5f 65 6e 64 28 61 70 29 3b 0a 20 20 6e 20 3d 20  _end(ap);.  n = 
19a0: 28 69 6e 74 29 73 74 72 6c 65 6e 28 7a 42 75 66  (int)strlen(zBuf
19b0: 29 3b 0a 20 20 68 61 73 68 5f 73 74 65 70 28 70  );.  hash_step(p
19c0: 2c 20 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  , (unsigned char
19d0: 2a 29 7a 42 75 66 2c 20 6e 29 3b 0a 7d 0a 0a 0a  *)zBuf, n);.}...
19e0: 2f 2a 20 41 64 64 20 70 61 64 64 69 6e 67 20 61  /* Add padding a
19f0: 6e 64 20 63 6f 6d 70 75 74 65 20 74 68 65 20 6d  nd compute the m
1a00: 65 73 73 61 67 65 20 64 69 67 65 73 74 2e 20 20  essage digest.  
1a10: 52 65 6e 64 65 72 20 74 68 65 0a 2a 2a 20 6d 65  Render the.** me
1a20: 73 73 61 67 65 20 64 69 67 65 73 74 20 61 73 20  ssage digest as 
1a30: 6c 6f 77 65 72 2d 63 61 73 65 20 68 65 78 61 64  lower-case hexad
1a40: 65 63 69 6d 61 6c 20 61 6e 64 20 70 75 74 20 69  ecimal and put i
1a50: 74 20 69 6e 74 6f 0a 2a 2a 20 7a 4f 75 74 5b 5d  t into.** zOut[]
1a60: 2e 20 20 7a 4f 75 74 5b 5d 20 6d 75 73 74 20 62  .  zOut[] must b
1a70: 65 20 61 74 20 6c 65 61 73 74 20 34 31 20 62 79  e at least 41 by
1a80: 74 65 73 20 6c 6f 6e 67 2e 20 2a 2f 0a 73 74 61  tes long. */.sta
1a90: 74 69 63 20 76 6f 69 64 20 68 61 73 68 5f 66 69  tic void hash_fi
1aa0: 6e 69 73 68 28 0a 20 20 53 48 41 31 43 6f 6e 74  nish(.  SHA1Cont
1ab0: 65 78 74 20 2a 70 2c 20 20 20 20 20 20 20 20 20  ext *p,         
1ac0: 20 20 2f 2a 20 54 68 65 20 53 48 41 31 20 63 6f    /* The SHA1 co
1ad0: 6e 74 65 78 74 20 74 6f 20 66 69 6e 69 73 68 20  ntext to finish 
1ae0: 61 6e 64 20 72 65 6e 64 65 72 20 2a 2f 0a 20 20  and render */.  
1af0: 63 68 61 72 20 2a 7a 4f 75 74 20 20 20 20 20 20  char *zOut      
1b00: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 6f            /* Sto
1b10: 72 65 20 68 65 78 61 64 65 63 69 6d 61 6c 20 68  re hexadecimal h
1b20: 61 73 68 20 68 65 72 65 20 2a 2f 0a 29 7b 0a 20  ash here */.){. 
1b30: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 69 3b   unsigned int i;
1b40: 0a 20 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  .  unsigned char
1b50: 20 66 69 6e 61 6c 63 6f 75 6e 74 5b 38 5d 3b 0a   finalcount[8];.
1b60: 20 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20    unsigned char 
1b70: 64 69 67 65 73 74 5b 32 30 5d 3b 0a 20 20 73 74  digest[20];.  st
1b80: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
1b90: 7a 45 6e 63 6f 64 65 5b 5d 20 3d 20 22 30 31 32  zEncode[] = "012
1ba0: 33 34 35 36 37 38 39 61 62 63 64 65 66 22 3b 0a  3456789abcdef";.
1bb0: 0a 20 20 66 6f 72 20 28 69 20 3d 20 30 3b 20 69  .  for (i = 0; i
1bc0: 20 3c 20 38 3b 20 69 2b 2b 29 7b 0a 20 20 20 20   < 8; i++){.    
1bd0: 66 69 6e 61 6c 63 6f 75 6e 74 5b 69 5d 20 3d 20  finalcount[i] = 
1be0: 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
1bf0: 28 70 2d 3e 63 6f 75 6e 74 5b 28 69 20 3e 3d 20  (p->count[(i >= 
1c00: 34 20 3f 20 30 20 3a 20 31 29 5d 0a 20 20 20 20  4 ? 0 : 1)].    
1c10: 20 20 20 3e 3e 20 28 28 33 2d 28 69 20 26 20 33     >> ((3-(i & 3
1c20: 29 29 20 2a 20 38 29 20 29 20 26 20 32 35 35 29  )) * 8) ) & 255)
1c30: 3b 20 2f 2a 20 45 6e 64 69 61 6e 20 69 6e 64 65  ; /* Endian inde
1c40: 70 65 6e 64 65 6e 74 20 2a 2f 0a 20 20 7d 0a 20  pendent */.  }. 
1c50: 20 68 61 73 68 5f 73 74 65 70 28 70 2c 20 28 63   hash_step(p, (c
1c60: 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
1c70: 61 72 20 2a 29 22 5c 32 30 30 22 2c 20 31 29 3b  ar *)"\200", 1);
1c80: 0a 20 20 77 68 69 6c 65 20 28 28 70 2d 3e 63 6f  .  while ((p->co
1c90: 75 6e 74 5b 30 5d 20 26 20 35 30 34 29 20 21 3d  unt[0] & 504) !=
1ca0: 20 34 34 38 29 7b 0a 20 20 20 20 68 61 73 68 5f   448){.    hash_
1cb0: 73 74 65 70 28 70 2c 20 28 63 6f 6e 73 74 20 75  step(p, (const u
1cc0: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 29 22  nsigned char *)"
1cd0: 5c 30 22 2c 20 31 29 3b 0a 20 20 7d 0a 20 20 68  \0", 1);.  }.  h
1ce0: 61 73 68 5f 73 74 65 70 28 70 2c 20 66 69 6e 61  ash_step(p, fina
1cf0: 6c 63 6f 75 6e 74 2c 20 38 29 3b 20 20 2f 2a 20  lcount, 8);  /* 
1d00: 53 68 6f 75 6c 64 20 63 61 75 73 65 20 61 20 53  Should cause a S
1d10: 48 41 31 54 72 61 6e 73 66 6f 72 6d 28 29 20 2a  HA1Transform() *
1d20: 2f 0a 20 20 66 6f 72 20 28 69 20 3d 20 30 3b 20  /.  for (i = 0; 
1d30: 69 20 3c 20 32 30 3b 20 69 2b 2b 29 7b 0a 20 20  i < 20; i++){.  
1d40: 20 20 64 69 67 65 73 74 5b 69 5d 20 3d 20 28 75    digest[i] = (u
1d50: 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 28 70  nsigned char)((p
1d60: 2d 3e 73 74 61 74 65 5b 69 3e 3e 32 5d 20 3e 3e  ->state[i>>2] >>
1d70: 20 28 28 33 2d 28 69 20 26 20 33 29 29 20 2a 20   ((3-(i & 3)) * 
1d80: 38 29 20 29 20 26 20 32 35 35 29 3b 0a 20 20 7d  8) ) & 255);.  }
1d90: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 32 30  .  for(i=0; i<20
1da0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 7a 4f 75 74  ; i++){.    zOut
1db0: 5b 69 2a 32 5d 20 3d 20 7a 45 6e 63 6f 64 65 5b  [i*2] = zEncode[
1dc0: 28 64 69 67 65 73 74 5b 69 5d 3e 3e 34 29 26 30  (digest[i]>>4)&0
1dd0: 78 66 5d 3b 0a 20 20 20 20 7a 4f 75 74 5b 69 2a  xf];.    zOut[i*
1de0: 32 2b 31 5d 20 3d 20 7a 45 6e 63 6f 64 65 5b 64  2+1] = zEncode[d
1df0: 69 67 65 73 74 5b 69 5d 20 26 20 30 78 66 5d 3b  igest[i] & 0xf];
1e00: 0a 20 20 7d 0a 20 20 7a 4f 75 74 5b 69 2a 32 5d  .  }.  zOut[i*2]
1e10: 3d 20 30 3b 0a 7d 0a 2f 2a 20 45 6e 64 20 6f 66  = 0;.}./* End of
1e20: 20 74 68 65 20 68 61 73 68 69 6e 67 20 6c 6f 67   the hashing log
1e30: 69 63 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ic.*************
1e40: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e50: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e60: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e70: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1e80: 2f 0a 0a 2f 2a 0a 2a 2a 20 49 6d 70 6c 65 6d 65  /../*.** Impleme
1e90: 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73  ntation of the s
1ea0: 68 61 31 28 58 29 20 66 75 6e 63 74 69 6f 6e 2e  ha1(X) function.
1eb0: 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20  .**.** Return a 
1ec0: 6c 6f 77 65 72 2d 63 61 73 65 20 68 65 78 61 64  lower-case hexad
1ed0: 65 63 69 6d 61 6c 20 72 65 6e 64 65 72 69 6e 67  ecimal rendering
1ee0: 20 6f 66 20 74 68 65 20 53 48 41 31 20 68 61 73   of the SHA1 has
1ef0: 68 20 6f 66 20 74 68 65 0a 2a 2a 20 61 72 67 75  h of the.** argu
1f00: 6d 65 6e 74 20 58 2e 20 20 49 66 20 58 20 69 73  ment X.  If X is
1f10: 20 61 20 42 4c 4f 42 2c 20 69 74 20 69 73 20 68   a BLOB, it is h
1f20: 61 73 68 65 64 20 61 73 20 69 73 2e 20 20 46 6f  ashed as is.  Fo
1f30: 72 20 61 6c 6c 20 6f 74 68 65 72 0a 2a 2a 20 74  r all other.** t
1f40: 79 70 65 73 20 6f 66 20 69 6e 70 75 74 2c 20 58  ypes of input, X
1f50: 20 69 73 20 63 6f 6e 76 65 72 74 65 64 20 69 6e   is converted in
1f60: 74 6f 20 61 20 55 54 46 2d 38 20 73 74 72 69 6e  to a UTF-8 strin
1f70: 67 20 61 6e 64 20 74 68 65 20 73 74 72 69 6e 67  g and the string
1f80: 0a 2a 2a 20 69 73 20 68 61 73 68 20 77 69 74 68  .** is hash with
1f90: 6f 75 74 20 74 68 65 20 74 72 61 69 6c 69 6e 67  out the trailing
1fa0: 20 30 78 30 30 20 74 65 72 6d 69 6e 61 74 6f 72   0x00 terminator
1fb0: 2e 20 20 54 68 65 20 68 61 73 68 20 6f 66 20 61  .  The hash of a
1fc0: 20 4e 55 4c 4c 0a 2a 2a 20 76 61 6c 75 65 20 69   NULL.** value i
1fd0: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 73 74 61 74 69  s NULL..*/.stati
1fe0: 63 20 76 6f 69 64 20 73 68 61 31 46 75 6e 63 28  c void sha1Func(
1ff0: 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  .  sqlite3_conte
2000: 78 74 20 2a 63 6f 6e 74 65 78 74 2c 0a 20 20 69  xt *context,.  i
2010: 6e 74 20 61 72 67 63 2c 0a 20 20 73 71 6c 69 74  nt argc,.  sqlit
2020: 65 33 5f 76 61 6c 75 65 20 2a 2a 61 72 67 76 0a  e3_value **argv.
2030: 29 7b 0a 20 20 53 48 41 31 43 6f 6e 74 65 78 74  ){.  SHA1Context
2040: 20 63 78 3b 0a 20 20 69 6e 74 20 65 54 79 70 65   cx;.  int eType
2050: 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65   = sqlite3_value
2060: 5f 74 79 70 65 28 61 72 67 76 5b 30 5d 29 3b 0a  _type(argv[0]);.
2070: 20 20 69 6e 74 20 6e 42 79 74 65 20 3d 20 73 71    int nByte = sq
2080: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79 74 65  lite3_value_byte
2090: 73 28 61 72 67 76 5b 30 5d 29 3b 0a 20 20 63 68  s(argv[0]);.  ch
20a0: 61 72 20 7a 4f 75 74 5b 34 34 5d 3b 0a 0a 20 20  ar zOut[44];..  
20b0: 61 73 73 65 72 74 28 20 61 72 67 63 3d 3d 31 20  assert( argc==1 
20c0: 29 3b 0a 20 20 69 66 28 20 65 54 79 70 65 3d 3d  );.  if( eType==
20d0: 53 51 4c 49 54 45 5f 4e 55 4c 4c 20 29 20 72 65  SQLITE_NULL ) re
20e0: 74 75 72 6e 3b 0a 20 20 68 61 73 68 5f 69 6e 69  turn;.  hash_ini
20f0: 74 28 26 63 78 29 3b 0a 20 20 69 66 28 20 65 54  t(&cx);.  if( eT
2100: 79 70 65 3d 3d 53 51 4c 49 54 45 5f 42 4c 4f 42  ype==SQLITE_BLOB
2110: 20 29 7b 0a 20 20 20 20 68 61 73 68 5f 73 74 65   ){.    hash_ste
2120: 70 28 26 63 78 2c 20 73 71 6c 69 74 65 33 5f 76  p(&cx, sqlite3_v
2130: 61 6c 75 65 5f 62 6c 6f 62 28 61 72 67 76 5b 30  alue_blob(argv[0
2140: 5d 29 2c 20 6e 42 79 74 65 29 3b 0a 20 20 7d 65  ]), nByte);.  }e
2150: 6c 73 65 7b 0a 20 20 20 20 68 61 73 68 5f 73 74  lse{.    hash_st
2160: 65 70 28 26 63 78 2c 20 73 71 6c 69 74 65 33 5f  ep(&cx, sqlite3_
2170: 76 61 6c 75 65 5f 74 65 78 74 28 61 72 67 76 5b  value_text(argv[
2180: 30 5d 29 2c 20 6e 42 79 74 65 29 3b 0a 20 20 7d  0]), nByte);.  }
2190: 0a 20 20 68 61 73 68 5f 66 69 6e 69 73 68 28 26  .  hash_finish(&
21a0: 63 78 2c 20 7a 4f 75 74 29 3b 0a 20 20 73 71 6c  cx, zOut);.  sql
21b0: 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74  ite3_result_text
21c0: 28 63 6f 6e 74 65 78 74 2c 20 7a 4f 75 74 2c 20  (context, zOut, 
21d0: 34 30 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53  40, SQLITE_TRANS
21e0: 49 45 4e 54 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  IENT);.}../*.** 
21f0: 49 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f  Implementation o
2200: 66 20 74 68 65 20 73 68 61 31 5f 71 75 65 72 79  f the sha1_query
2210: 28 53 51 4c 29 20 66 75 6e 63 74 69 6f 6e 2e 0a  (SQL) function..
2220: 2a 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74  **.** This funct
2230: 69 6f 6e 20 63 6f 6d 70 69 6c 65 73 20 61 6e 64  ion compiles and
2240: 20 72 75 6e 73 20 74 68 65 20 53 51 4c 20 73 74   runs the SQL st
2250: 61 74 65 6d 65 6e 74 28 73 29 20 67 69 76 65 6e  atement(s) given
2260: 20 69 6e 20 74 68 65 0a 2a 2a 20 61 72 67 75 6d   in the.** argum
2270: 65 6e 74 2e 20 54 68 65 20 72 65 73 75 6c 74 73  ent. The results
2280: 20 61 72 65 20 68 61 73 68 65 64 20 75 73 69 6e   are hashed usin
2290: 67 20 53 48 41 31 20 61 6e 64 20 74 68 61 74 20  g SHA1 and that 
22a0: 68 61 73 68 20 69 73 20 72 65 74 75 72 6e 65 64  hash is returned
22b0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6f 72 69 67  ..**.** The orig
22c0: 69 6e 61 6c 20 53 51 4c 20 74 65 78 74 20 69 73  inal SQL text is
22d0: 20 69 6e 63 6c 75 64 65 64 20 61 73 20 70 61 72   included as par
22e0: 74 20 6f 66 20 74 68 65 20 68 61 73 68 2e 0a 2a  t of the hash..*
22f0: 2a 0a 2a 2a 20 54 68 65 20 68 61 73 68 20 69 73  *.** The hash is
2300: 20 6e 6f 74 20 6a 75 73 74 20 61 20 63 6f 6e 63   not just a conc
2310: 61 74 65 6e 61 74 69 6f 6e 20 6f 66 20 74 68 65  atenation of the
2320: 20 6f 75 74 70 75 74 73 2e 20 20 45 61 63 68 20   outputs.  Each 
2330: 71 75 65 72 79 0a 2a 2a 20 69 73 20 64 65 6c 69  query.** is deli
2340: 6d 69 74 65 64 20 61 6e 64 20 65 61 63 68 20 72  mited and each r
2350: 6f 77 20 61 6e 64 20 76 61 6c 75 65 20 77 69 74  ow and value wit
2360: 68 69 6e 20 74 68 65 20 71 75 65 72 79 20 69 73  hin the query is
2370: 20 64 65 6c 69 6d 69 74 65 64 2c 0a 2a 2a 20 77   delimited,.** w
2380: 69 74 68 20 61 6c 6c 20 76 61 6c 75 65 73 20 62  ith all values b
2390: 65 69 6e 67 20 6d 61 72 6b 65 64 20 77 69 74 68  eing marked with
23a0: 20 74 68 65 69 72 20 64 61 74 61 74 79 70 65 73   their datatypes
23b0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ..*/.static void
23c0: 20 73 68 61 31 51 75 65 72 79 46 75 6e 63 28 0a   sha1QueryFunc(.
23d0: 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
23e0: 74 20 2a 63 6f 6e 74 65 78 74 2c 0a 20 20 69 6e  t *context,.  in
23f0: 74 20 61 72 67 63 2c 0a 20 20 73 71 6c 69 74 65  t argc,.  sqlite
2400: 33 5f 76 61 6c 75 65 20 2a 2a 61 72 67 76 0a 29  3_value **argv.)
2410: 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20  {.  sqlite3 *db 
2420: 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  = sqlite3_contex
2430: 74 5f 64 62 5f 68 61 6e 64 6c 65 28 63 6f 6e 74  t_db_handle(cont
2440: 65 78 74 29 3b 0a 20 20 63 6f 6e 73 74 20 63 68  ext);.  const ch
2450: 61 72 20 2a 7a 53 71 6c 20 3d 20 28 63 6f 6e 73  ar *zSql = (cons
2460: 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f  t char*)sqlite3_
2470: 76 61 6c 75 65 5f 74 65 78 74 28 61 72 67 76 5b  value_text(argv[
2480: 30 5d 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73  0]);.  sqlite3_s
2490: 74 6d 74 20 2a 70 53 74 6d 74 20 3d 20 30 3b 0a  tmt *pStmt = 0;.
24a0: 20 20 69 6e 74 20 6e 43 6f 6c 3b 20 20 20 20 20    int nCol;     
24b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
24c0: 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
24d0: 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74  ns in the result
24e0: 20 73 65 74 20 2a 2f 0a 20 20 69 6e 74 20 69 3b   set */.  int i;
24f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2500: 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f        /* Loop co
2510: 75 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 72  unter */.  int r
2520: 63 3b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 63 6f  c;.  int n;.  co
2530: 6e 73 74 20 63 68 61 72 20 2a 7a 3b 0a 20 20 53  nst char *z;.  S
2540: 48 41 31 43 6f 6e 74 65 78 74 20 63 78 3b 0a 20  HA1Context cx;. 
2550: 20 63 68 61 72 20 7a 4f 75 74 5b 34 34 5d 3b 0a   char zOut[44];.
2560: 0a 20 20 61 73 73 65 72 74 28 20 61 72 67 63 3d  .  assert( argc=
2570: 3d 31 20 29 3b 0a 20 20 69 66 28 20 7a 53 71 6c  =1 );.  if( zSql
2580: 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20  ==0 ) return;.  
2590: 68 61 73 68 5f 69 6e 69 74 28 26 63 78 29 3b 0a  hash_init(&cx);.
25a0: 20 20 77 68 69 6c 65 28 20 7a 53 71 6c 5b 30 5d    while( zSql[0]
25b0: 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
25c0: 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28  ite3_prepare_v2(
25d0: 64 62 2c 20 7a 53 71 6c 2c 20 2d 31 2c 20 26 70  db, zSql, -1, &p
25e0: 53 74 6d 74 2c 20 26 7a 53 71 6c 29 3b 0a 20 20  Stmt, &zSql);.  
25f0: 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20    if( rc ){.    
2600: 20 20 63 68 61 72 20 2a 7a 4d 73 67 20 3d 20 73    char *zMsg = s
2610: 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22  qlite3_mprintf("
2620: 65 72 72 6f 72 20 53 51 4c 20 73 74 61 74 65 6d  error SQL statem
2630: 65 6e 74 20 5b 25 73 5d 3a 20 25 73 22 2c 0a 20  ent [%s]: %s",. 
2640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2660: 20 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65 33 5f    zSql, sqlite3_
2670: 65 72 72 6d 73 67 28 64 62 29 29 3b 0a 20 20 20  errmsg(db));.   
2680: 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c     sqlite3_final
2690: 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 20 20  ize(pStmt);.    
26a0: 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74    sqlite3_result
26b0: 5f 65 72 72 6f 72 28 63 6f 6e 74 65 78 74 2c 20  _error(context, 
26c0: 7a 4d 73 67 2c 20 2d 31 29 3b 0a 20 20 20 20 20  zMsg, -1);.     
26d0: 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 4d   sqlite3_free(zM
26e0: 73 67 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  sg);.      retur
26f0: 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  n;.    }.    if(
2700: 20 21 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 72   !sqlite3_stmt_r
2710: 65 61 64 6f 6e 6c 79 28 70 53 74 6d 74 29 20 29  eadonly(pStmt) )
2720: 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a 4d  {.      char *zM
2730: 73 67 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72  sg = sqlite3_mpr
2740: 69 6e 74 66 28 22 6e 6f 6e 2d 71 75 65 72 79 3a  intf("non-query:
2750: 20 5b 25 73 5d 22 2c 20 73 71 6c 69 74 65 33 5f   [%s]", sqlite3_
2760: 73 71 6c 28 70 53 74 6d 74 29 29 3b 0a 20 20 20  sql(pStmt));.   
2770: 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c     sqlite3_final
2780: 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20 20 20  ize(pStmt);.    
2790: 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74    sqlite3_result
27a0: 5f 65 72 72 6f 72 28 63 6f 6e 74 65 78 74 2c 20  _error(context, 
27b0: 7a 4d 73 67 2c 20 2d 31 29 3b 0a 20 20 20 20 20  zMsg, -1);.     
27c0: 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 4d   sqlite3_free(zM
27d0: 73 67 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72  sg);.      retur
27e0: 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e 43 6f  n;.    }.    nCo
27f0: 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  l = sqlite3_colu
2800: 6d 6e 5f 63 6f 75 6e 74 28 70 53 74 6d 74 29 3b  mn_count(pStmt);
2810: 0a 20 20 20 20 7a 20 3d 20 73 71 6c 69 74 65 33  .    z = sqlite3
2820: 5f 73 71 6c 28 70 53 74 6d 74 29 3b 0a 20 20 20  _sql(pStmt);.   
2830: 20 6e 20 3d 20 28 69 6e 74 29 73 74 72 6c 65 6e   n = (int)strlen
2840: 28 7a 29 3b 0a 20 20 20 20 68 61 73 68 5f 73 74  (z);.    hash_st
2850: 65 70 5f 76 66 6f 72 6d 61 74 28 26 63 78 2c 22  ep_vformat(&cx,"
2860: 53 25 64 3a 22 2c 6e 29 3b 0a 20 20 20 20 68 61  S%d:",n);.    ha
2870: 73 68 5f 73 74 65 70 28 26 63 78 2c 28 75 6e 73  sh_step(&cx,(uns
2880: 69 67 6e 65 64 20 63 68 61 72 2a 29 7a 2c 6e 29  igned char*)z,n)
2890: 3b 0a 0a 20 20 20 20 2f 2a 20 43 6f 6d 70 75 74  ;..    /* Comput
28a0: 65 20 61 20 68 61 73 68 20 6f 76 65 72 20 74 68  e a hash over th
28b0: 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
28c0: 71 75 65 72 79 20 2a 2f 0a 20 20 20 20 77 68 69  query */.    whi
28d0: 6c 65 28 20 53 51 4c 49 54 45 5f 52 4f 57 3d 3d  le( SQLITE_ROW==
28e0: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70 53 74  sqlite3_step(pSt
28f0: 6d 74 29 20 29 7b 0a 20 20 20 20 20 20 68 61 73  mt) ){.      has
2900: 68 5f 73 74 65 70 28 26 63 78 2c 28 63 6f 6e 73  h_step(&cx,(cons
2910: 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a  t unsigned char*
2920: 29 22 52 22 2c 31 29 3b 0a 20 20 20 20 20 20 66  )"R",1);.      f
2930: 6f 72 28 69 3d 30 3b 20 69 3c 6e 43 6f 6c 3b 20  or(i=0; i<nCol; 
2940: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 73 77  i++){.        sw
2950: 69 74 63 68 28 20 73 71 6c 69 74 65 33 5f 63 6f  itch( sqlite3_co
2960: 6c 75 6d 6e 5f 74 79 70 65 28 70 53 74 6d 74 2c  lumn_type(pStmt,
2970: 69 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  i) ){.          
2980: 63 61 73 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  case SQLITE_NULL
2990: 3a 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  : {.            
29a0: 68 61 73 68 5f 73 74 65 70 28 26 63 78 2c 20 28  hash_step(&cx, (
29b0: 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
29c0: 68 61 72 2a 29 22 4e 22 2c 31 29 3b 0a 20 20 20  har*)"N",1);.   
29d0: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
29e0: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
29f0: 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54        case SQLIT
2a00: 45 5f 49 4e 54 45 47 45 52 3a 20 7b 0a 20 20 20  E_INTEGER: {.   
2a10: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
2a20: 5f 75 69 6e 74 36 34 20 75 3b 0a 20 20 20 20 20  _uint64 u;.     
2a30: 20 20 20 20 20 20 20 69 6e 74 20 6a 3b 0a 20 20         int j;.  
2a40: 20 20 20 20 20 20 20 20 20 20 75 6e 73 69 67 6e            unsign
2a50: 65 64 20 63 68 61 72 20 78 5b 39 5d 3b 0a 20 20  ed char x[9];.  
2a60: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
2a70: 33 5f 69 6e 74 36 34 20 76 20 3d 20 73 71 6c 69  3_int64 v = sqli
2a80: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34  te3_column_int64
2a90: 28 70 53 74 6d 74 2c 69 29 3b 0a 20 20 20 20 20  (pStmt,i);.     
2aa0: 20 20 20 20 20 20 20 6d 65 6d 63 70 79 28 26 75         memcpy(&u
2ab0: 2c 20 26 76 2c 20 38 29 3b 0a 20 20 20 20 20 20  , &v, 8);.      
2ac0: 20 20 20 20 20 20 66 6f 72 28 6a 3d 38 3b 20 6a        for(j=8; j
2ad0: 3e 3d 31 3b 20 6a 2d 2d 29 7b 0a 20 20 20 20 20  >=1; j--){.     
2ae0: 20 20 20 20 20 20 20 20 20 78 5b 6a 5d 20 3d 20           x[j] = 
2af0: 75 20 26 20 30 78 66 66 3b 0a 20 20 20 20 20 20  u & 0xff;.      
2b00: 20 20 20 20 20 20 20 20 75 20 3e 3e 3d 20 38 3b          u >>= 8;
2b10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
2b20: 20 20 20 20 20 20 20 20 20 20 20 78 5b 30 5d 20             x[0] 
2b30: 3d 20 27 49 27 3b 0a 20 20 20 20 20 20 20 20 20  = 'I';.         
2b40: 20 20 20 68 61 73 68 5f 73 74 65 70 28 26 63 78     hash_step(&cx
2b50: 2c 20 78 2c 20 39 29 3b 0a 20 20 20 20 20 20 20  , x, 9);.       
2b60: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
2b70: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
2b80: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 46 4c    case SQLITE_FL
2b90: 4f 41 54 3a 20 7b 0a 20 20 20 20 20 20 20 20 20  OAT: {.         
2ba0: 20 20 20 73 71 6c 69 74 65 33 5f 75 69 6e 74 36     sqlite3_uint6
2bb0: 34 20 75 3b 0a 20 20 20 20 20 20 20 20 20 20 20  4 u;.           
2bc0: 20 69 6e 74 20 6a 3b 0a 20 20 20 20 20 20 20 20   int j;.        
2bd0: 20 20 20 20 75 6e 73 69 67 6e 65 64 20 63 68 61      unsigned cha
2be0: 72 20 78 5b 39 5d 3b 0a 20 20 20 20 20 20 20 20  r x[9];.        
2bf0: 20 20 20 20 64 6f 75 62 6c 65 20 72 20 3d 20 73      double r = s
2c00: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f  qlite3_column_do
2c10: 75 62 6c 65 28 70 53 74 6d 74 2c 69 29 3b 0a 20  uble(pStmt,i);. 
2c20: 20 20 20 20 20 20 20 20 20 20 20 6d 65 6d 63 70             memcp
2c30: 79 28 26 75 2c 20 26 72 2c 20 38 29 3b 0a 20 20  y(&u, &r, 8);.  
2c40: 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d            for(j=
2c50: 38 3b 20 6a 3e 3d 31 3b 20 6a 2d 2d 29 7b 0a 20  8; j>=1; j--){. 
2c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 78 5b 6a               x[j
2c70: 5d 20 3d 20 75 20 26 20 30 78 66 66 3b 0a 20 20  ] = u & 0xff;.  
2c80: 20 20 20 20 20 20 20 20 20 20 20 20 75 20 3e 3e              u >>
2c90: 3d 20 38 3b 0a 20 20 20 20 20 20 20 20 20 20 20  = 8;.           
2ca0: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 78   }.            x
2cb0: 5b 30 5d 20 3d 20 27 46 27 3b 0a 20 20 20 20 20  [0] = 'F';.     
2cc0: 20 20 20 20 20 20 20 68 61 73 68 5f 73 74 65 70         hash_step
2cd0: 28 26 63 78 2c 78 2c 39 29 3b 0a 20 20 20 20 20  (&cx,x,9);.     
2ce0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
2cf0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
2d00: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
2d10: 54 45 58 54 3a 20 7b 0a 20 20 20 20 20 20 20 20  TEXT: {.        
2d20: 20 20 20 20 69 6e 74 20 6e 32 20 3d 20 73 71 6c      int n2 = sql
2d30: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65  ite3_column_byte
2d40: 73 28 70 53 74 6d 74 2c 20 69 29 3b 0a 20 20 20  s(pStmt, i);.   
2d50: 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 75           const u
2d60: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 7a 32  nsigned char *z2
2d70: 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d   = sqlite3_colum
2d80: 6e 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 69 29  n_text(pStmt, i)
2d90: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 68 61  ;.            ha
2da0: 73 68 5f 73 74 65 70 5f 76 66 6f 72 6d 61 74 28  sh_step_vformat(
2db0: 26 63 78 2c 22 54 25 64 3a 22 2c 6e 32 29 3b 0a  &cx,"T%d:",n2);.
2dc0: 20 20 20 20 20 20 20 20 20 20 20 20 68 61 73 68              hash
2dd0: 5f 73 74 65 70 28 26 63 78 2c 20 7a 32 2c 20 6e  _step(&cx, z2, n
2de0: 32 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  2);.            
2df0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20  break;.         
2e00: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 63 61 73   }.          cas
2e10: 65 20 53 51 4c 49 54 45 5f 42 4c 4f 42 3a 20 7b  e SQLITE_BLOB: {
2e20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
2e30: 20 6e 32 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f   n2 = sqlite3_co
2e40: 6c 75 6d 6e 5f 62 79 74 65 73 28 70 53 74 6d 74  lumn_bytes(pStmt
2e50: 2c 20 69 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , i);.          
2e60: 20 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64    const unsigned
2e70: 20 63 68 61 72 20 2a 7a 32 20 3d 20 73 71 6c 69   char *z2 = sqli
2e80: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28  te3_column_blob(
2e90: 70 53 74 6d 74 2c 20 69 29 3b 0a 20 20 20 20 20  pStmt, i);.     
2ea0: 20 20 20 20 20 20 20 68 61 73 68 5f 73 74 65 70         hash_step
2eb0: 5f 76 66 6f 72 6d 61 74 28 26 63 78 2c 22 42 25  _vformat(&cx,"B%
2ec0: 64 3a 22 2c 6e 32 29 3b 0a 20 20 20 20 20 20 20  d:",n2);.       
2ed0: 20 20 20 20 20 68 61 73 68 5f 73 74 65 70 28 26       hash_step(&
2ee0: 63 78 2c 20 7a 32 2c 20 6e 32 29 3b 0a 20 20 20  cx, z2, n2);.   
2ef0: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
2f00: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
2f10: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
2f20: 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f    }.    sqlite3_
2f30: 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b  finalize(pStmt);
2f40: 0a 20 20 7d 0a 20 20 68 61 73 68 5f 66 69 6e 69  .  }.  hash_fini
2f50: 73 68 28 26 63 78 2c 20 7a 4f 75 74 29 3b 0a 20  sh(&cx, zOut);. 
2f60: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
2f70: 74 65 78 74 28 63 6f 6e 74 65 78 74 2c 20 7a 4f  text(context, zO
2f80: 75 74 2c 20 34 30 2c 20 53 51 4c 49 54 45 5f 54  ut, 40, SQLITE_T
2f90: 52 41 4e 53 49 45 4e 54 29 3b 0a 7d 0a 0a 0a 23  RANSIENT);.}...#
2fa0: 69 66 64 65 66 20 5f 57 49 4e 33 32 0a 5f 5f 64  ifdef _WIN32.__d
2fb0: 65 63 6c 73 70 65 63 28 64 6c 6c 65 78 70 6f 72  eclspec(dllexpor
2fc0: 74 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71  t).#endif.int sq
2fd0: 6c 69 74 65 33 5f 73 68 61 5f 69 6e 69 74 28 0a  lite3_sha_init(.
2fe0: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 0a 20    sqlite3 *db,. 
2ff0: 20 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67   char **pzErrMsg
3000: 2c 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65  ,.  const sqlite
3010: 33 5f 61 70 69 5f 72 6f 75 74 69 6e 65 73 20 2a  3_api_routines *
3020: 70 41 70 69 0a 29 7b 0a 20 20 69 6e 74 20 72 63  pApi.){.  int rc
3030: 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
3040: 53 51 4c 49 54 45 5f 45 58 54 45 4e 53 49 4f 4e  SQLITE_EXTENSION
3050: 5f 49 4e 49 54 32 28 70 41 70 69 29 3b 0a 20 20  _INIT2(pApi);.  
3060: 28 76 6f 69 64 29 70 7a 45 72 72 4d 73 67 3b 20  (void)pzErrMsg; 
3070: 20 2f 2a 20 55 6e 75 73 65 64 20 70 61 72 61 6d   /* Unused param
3080: 65 74 65 72 20 2a 2f 0a 20 20 72 63 20 3d 20 73  eter */.  rc = s
3090: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
30a0: 6e 63 74 69 6f 6e 28 64 62 2c 20 22 73 68 61 31  nction(db, "sha1
30b0: 22 2c 20 31 2c 20 53 51 4c 49 54 45 5f 55 54 46  ", 1, SQLITE_UTF
30c0: 38 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20  8, 0,.          
30d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30e0: 20 20 20 20 20 73 68 61 31 46 75 6e 63 2c 20 30       sha1Func, 0
30f0: 2c 20 30 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  , 0);.  if( rc==
3100: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
3110: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63 72   rc = sqlite3_cr
3120: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62  eate_function(db
3130: 2c 20 22 73 68 61 31 5f 71 75 65 72 79 22 2c 20  , "sha1_query", 
3140: 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20  1, SQLITE_UTF8, 
3150: 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  0,.             
3160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3170: 20 20 20 20 73 68 61 31 51 75 65 72 79 46 75 6e      sha1QueryFun
3180: 63 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 20 20  c, 0, 0);.  }.  
3190: 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a           return rc;.}.