SQLite
Hex Artifact Content
Not logged in

Artifact 0b9e9b855354910d3ca467bf39099d570e73db56:


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 61 20 66 75   implements a fu
01a0: 6e 63 74 69 6f 6e 73 20 74 68 61 74 20 63 6f 6d  nctions that com
01b0: 70 75 74 65 20 53 48 41 31 20 68 61 73 68 65 73  pute SHA1 hashes
01c0: 2e 0a 2a 2a 20 54 77 6f 20 53 51 4c 20 66 75 6e  ..** Two SQL fun
01d0: 63 74 69 6f 6e 73 20 61 72 65 20 69 6d 70 6c 65  ctions are imple
01e0: 6d 65 6e 74 65 64 3a 0a 2a 2a 0a 2a 2a 20 20 20  mented:.**.**   
01f0: 20 20 73 68 61 31 28 58 29 0a 2a 2a 20 20 20 20    sha1(X).**    
0200: 20 73 68 61 31 5f 71 75 65 72 79 28 59 29 0a 2a   sha1_query(Y).*
0210: 2a 0a 2a 2a 20 54 68 65 20 73 68 61 31 28 58 29  *.** The sha1(X)
0220: 20 66 75 6e 63 74 69 6f 6e 20 63 6f 6d 70 75 74   function comput
0230: 65 73 20 74 68 65 20 53 48 41 31 20 68 61 73 68  es the SHA1 hash
0240: 20 6f 66 20 74 68 65 20 69 6e 70 75 74 20 58 2c   of the input X,
0250: 20 6f 72 20 4e 55 4c 4c 20 69 66 0a 2a 2a 20 58   or NULL if.** X
0260: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20   is NULL..**.** 
0270: 54 68 65 20 73 68 61 31 5f 71 75 65 72 79 28 59  The sha1_query(Y
0280: 29 20 66 75 6e 63 74 69 6f 6e 20 65 76 61 6c 75  ) function evalu
0290: 74 65 73 20 61 6c 6c 20 71 75 65 72 69 65 73 20  tes all queries 
02a0: 69 6e 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  in the SQL state
02b0: 6d 65 6e 74 73 20 6f 66 20 59 0a 2a 2a 20 61 6e  ments of Y.** an
02c0: 64 20 72 65 74 75 72 6e 73 20 61 20 68 61 73 68  d returns a hash
02d0: 20 6f 66 20 74 68 65 69 72 20 72 65 73 75 6c 74   of their result
02e0: 73 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22  s..*/.#include "
02f0: 73 71 6c 69 74 65 33 65 78 74 2e 68 22 0a 53 51  sqlite3ext.h".SQ
0300: 4c 49 54 45 5f 45 58 54 45 4e 53 49 4f 4e 5f 49  LITE_EXTENSION_I
0310: 4e 49 54 31 0a 23 69 6e 63 6c 75 64 65 20 3c 61  NIT1.#include <a
0320: 73 73 65 72 74 2e 68 3e 0a 23 69 6e 63 6c 75 64  ssert.h>.#includ
0330: 65 20 3c 73 74 72 69 6e 67 2e 68 3e 0a 23 69 6e  e <string.h>.#in
0340: 63 6c 75 64 65 20 3c 73 74 64 61 72 67 2e 68 3e  clude <stdarg.h>
0350: 0a 0a 2f 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 2a  ****************
03a0: 2a 0a 2a 2a 20 54 68 65 20 48 61 73 68 20 45 6e  *.** The Hash En
03b0: 67 69 6e 65 0a 2a 2f 0a 2f 2a 20 43 6f 6e 74 65  gine.*/./* Conte
03c0: 78 74 20 66 6f 72 20 74 68 65 20 53 48 41 31 20  xt for the SHA1 
03d0: 68 61 73 68 20 2a 2f 0a 74 79 70 65 64 65 66 20  hash */.typedef 
03e0: 73 74 72 75 63 74 20 53 48 41 31 43 6f 6e 74 65  struct SHA1Conte
03f0: 78 74 20 53 48 41 31 43 6f 6e 74 65 78 74 3b 0a  xt SHA1Context;.
0400: 73 74 72 75 63 74 20 53 48 41 31 43 6f 6e 74 65  struct SHA1Conte
0410: 78 74 20 7b 0a 20 20 75 6e 73 69 67 6e 65 64 20  xt {.  unsigned 
0420: 69 6e 74 20 73 74 61 74 65 5b 35 5d 3b 0a 20 20  int state[5];.  
0430: 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 63 6f 75  unsigned int cou
0440: 6e 74 5b 32 5d 3b 0a 20 20 75 6e 73 69 67 6e 65  nt[2];.  unsigne
0450: 64 20 63 68 61 72 20 62 75 66 66 65 72 5b 36 34  d char buffer[64
0460: 5d 3b 0a 7d 3b 0a 0a 0a 23 69 66 20 5f 5f 47 4e  ];.};...#if __GN
0470: 55 43 5f 5f 20 26 26 20 28 64 65 66 69 6e 65 64  UC__ && (defined
0480: 28 5f 5f 69 33 38 36 5f 5f 29 20 7c 7c 20 64 65  (__i386__) || de
0490: 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 5f 5f  fined(__x86_64__
04a0: 29 29 0a 2f 2a 0a 20 2a 20 47 43 43 20 62 79 20  ))./*. * GCC by 
04b0: 69 74 73 65 6c 66 20 6f 6e 6c 79 20 67 65 6e 65  itself only gene
04c0: 72 61 74 65 73 20 6c 65 66 74 20 72 6f 74 61 74  rates left rotat
04d0: 65 73 2e 20 20 55 73 65 20 72 69 67 68 74 20 72  es.  Use right r
04e0: 6f 74 61 74 65 73 20 69 66 0a 20 2a 20 70 6f 73  otates if. * pos
04f0: 73 69 62 6c 65 20 74 6f 20 62 65 20 6b 69 6e 64  sible to be kind
0500: 65 72 20 74 6f 20 64 69 6e 6b 79 20 69 6d 70 6c  er to dinky impl
0510: 65 6d 65 6e 74 61 74 69 6f 6e 73 20 77 69 74 68  ementations with
0520: 20 69 74 65 72 61 74 69 76 65 20 72 6f 74 61 74   iterative rotat
0530: 65 0a 20 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e  e. * instruction
0540: 73 2e 0a 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  s.. */.#define S
0550: 48 41 5f 52 4f 54 28 6f 70 2c 20 78 2c 20 6b 29  HA_ROT(op, x, k)
0560: 20 5c 0a 20 20 20 20 20 20 20 20 28 7b 20 75 6e   \.        ({ un
0570: 73 69 67 6e 65 64 20 69 6e 74 20 79 3b 20 61 73  signed int y; as
0580: 6d 28 6f 70 20 22 20 25 31 2c 25 30 22 20 3a 20  m(op " %1,%0" : 
0590: 22 3d 72 22 20 28 79 29 20 3a 20 22 49 22 20 28  "=r" (y) : "I" (
05a0: 6b 29 2c 20 22 30 22 20 28 78 29 29 3b 20 79 3b  k), "0" (x)); y;
05b0: 20 7d 29 0a 23 64 65 66 69 6e 65 20 72 6f 6c 28   }).#define rol(
05c0: 78 2c 6b 29 20 53 48 41 5f 52 4f 54 28 22 72 6f  x,k) SHA_ROT("ro
05d0: 6c 6c 22 2c 20 78 2c 20 6b 29 0a 23 64 65 66 69  ll", x, k).#defi
05e0: 6e 65 20 72 6f 72 28 78 2c 6b 29 20 53 48 41 5f  ne ror(x,k) SHA_
05f0: 52 4f 54 28 22 72 6f 72 6c 22 2c 20 78 2c 20 6b  ROT("rorl", x, k
0600: 29 0a 0a 23 65 6c 73 65 0a 2f 2a 20 47 65 6e 65  )..#else./* Gene
0610: 72 69 63 20 43 20 65 71 75 69 76 61 6c 65 6e 74  ric C equivalent
0620: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 48 41 5f   */.#define SHA_
0630: 52 4f 54 28 78 2c 6c 2c 72 29 20 28 28 78 29 20  ROT(x,l,r) ((x) 
0640: 3c 3c 20 28 6c 29 20 7c 20 28 78 29 20 3e 3e 20  << (l) | (x) >> 
0650: 28 72 29 29 0a 23 64 65 66 69 6e 65 20 72 6f 6c  (r)).#define rol
0660: 28 78 2c 6b 29 20 53 48 41 5f 52 4f 54 28 78 2c  (x,k) SHA_ROT(x,
0670: 6b 2c 33 32 2d 28 6b 29 29 0a 23 64 65 66 69 6e  k,32-(k)).#defin
0680: 65 20 72 6f 72 28 78 2c 6b 29 20 53 48 41 5f 52  e ror(x,k) SHA_R
0690: 4f 54 28 78 2c 33 32 2d 28 6b 29 2c 6b 29 0a 23  OT(x,32-(k),k).#
06a0: 65 6e 64 69 66 0a 0a 0a 23 64 65 66 69 6e 65 20  endif...#define 
06b0: 62 6c 6b 30 6c 65 28 69 29 20 28 62 6c 6f 63 6b  blk0le(i) (block
06c0: 5b 69 5d 20 3d 20 28 72 6f 72 28 62 6c 6f 63 6b  [i] = (ror(block
06d0: 5b 69 5d 2c 38 29 26 30 78 46 46 30 30 46 46 30  [i],8)&0xFF00FF0
06e0: 30 29 20 5c 0a 20 20 20 20 7c 28 72 6f 6c 28 62  0) \.    |(rol(b
06f0: 6c 6f 63 6b 5b 69 5d 2c 38 29 26 30 78 30 30 46  lock[i],8)&0x00F
0700: 46 30 30 46 46 29 29 0a 23 64 65 66 69 6e 65 20  F00FF)).#define 
0710: 62 6c 6b 30 62 65 28 69 29 20 62 6c 6f 63 6b 5b  blk0be(i) block[
0720: 69 5d 0a 23 64 65 66 69 6e 65 20 62 6c 6b 28 69  i].#define blk(i
0730: 29 20 28 62 6c 6f 63 6b 5b 69 26 31 35 5d 20 3d  ) (block[i&15] =
0740: 20 72 6f 6c 28 62 6c 6f 63 6b 5b 28 69 2b 31 33   rol(block[(i+13
0750: 29 26 31 35 5d 5e 62 6c 6f 63 6b 5b 28 69 2b 38  )&15]^block[(i+8
0760: 29 26 31 35 5d 20 5c 0a 20 20 20 20 5e 62 6c 6f  )&15] \.    ^blo
0770: 63 6b 5b 28 69 2b 32 29 26 31 35 5d 5e 62 6c 6f  ck[(i+2)&15]^blo
0780: 63 6b 5b 69 26 31 35 5d 2c 31 29 29 0a 0a 2f 2a  ck[i&15],1))../*
0790: 0a 20 2a 20 28 52 30 2b 52 31 29 2c 20 52 32 2c  . * (R0+R1), R2,
07a0: 20 52 33 2c 20 52 34 20 61 72 65 20 74 68 65 20   R3, R4 are the 
07b0: 64 69 66 66 65 72 65 6e 74 20 6f 70 65 72 61 74  different operat
07c0: 69 6f 6e 73 20 28 72 6f 75 6e 64 73 29 20 75 73  ions (rounds) us
07d0: 65 64 20 69 6e 20 53 48 41 31 0a 20 2a 0a 20 2a  ed in SHA1. *. *
07e0: 20 52 6c 30 28 29 20 66 6f 72 20 6c 69 74 74 6c   Rl0() for littl
07f0: 65 2d 65 6e 64 69 61 6e 20 61 6e 64 20 52 62 30  e-endian and Rb0
0800: 28 29 20 66 6f 72 20 62 69 67 2d 65 6e 64 69 61  () for big-endia
0810: 6e 2e 20 20 45 6e 64 69 61 6e 6e 65 73 73 20 69  n.  Endianness i
0820: 73 0a 20 2a 20 64 65 74 65 72 6d 69 6e 65 64 20  s. * determined 
0830: 61 74 20 72 75 6e 2d 74 69 6d 65 2e 0a 20 2a 2f  at run-time.. */
0840: 0a 23 64 65 66 69 6e 65 20 52 6c 30 28 76 2c 77  .#define Rl0(v,w
0850: 2c 78 2c 79 2c 7a 2c 69 29 20 5c 0a 20 20 20 20  ,x,y,z,i) \.    
0860: 7a 2b 3d 28 28 77 26 28 78 5e 79 29 29 5e 79 29  z+=((w&(x^y))^y)
0870: 2b 62 6c 6b 30 6c 65 28 69 29 2b 30 78 35 41 38  +blk0le(i)+0x5A8
0880: 32 37 39 39 39 2b 72 6f 6c 28 76 2c 35 29 3b 77  27999+rol(v,5);w
0890: 3d 72 6f 72 28 77 2c 32 29 3b 0a 23 64 65 66 69  =ror(w,2);.#defi
08a0: 6e 65 20 52 62 30 28 76 2c 77 2c 78 2c 79 2c 7a  ne Rb0(v,w,x,y,z
08b0: 2c 69 29 20 5c 0a 20 20 20 20 7a 2b 3d 28 28 77  ,i) \.    z+=((w
08c0: 26 28 78 5e 79 29 29 5e 79 29 2b 62 6c 6b 30 62  &(x^y))^y)+blk0b
08d0: 65 28 69 29 2b 30 78 35 41 38 32 37 39 39 39 2b  e(i)+0x5A827999+
08e0: 72 6f 6c 28 76 2c 35 29 3b 77 3d 72 6f 72 28 77  rol(v,5);w=ror(w
08f0: 2c 32 29 3b 0a 23 64 65 66 69 6e 65 20 52 31 28  ,2);.#define R1(
0900: 76 2c 77 2c 78 2c 79 2c 7a 2c 69 29 20 5c 0a 20  v,w,x,y,z,i) \. 
0910: 20 20 20 7a 2b 3d 28 28 77 26 28 78 5e 79 29 29     z+=((w&(x^y))
0920: 5e 79 29 2b 62 6c 6b 28 69 29 2b 30 78 35 41 38  ^y)+blk(i)+0x5A8
0930: 32 37 39 39 39 2b 72 6f 6c 28 76 2c 35 29 3b 77  27999+rol(v,5);w
0940: 3d 72 6f 72 28 77 2c 32 29 3b 0a 23 64 65 66 69  =ror(w,2);.#defi
0950: 6e 65 20 52 32 28 76 2c 77 2c 78 2c 79 2c 7a 2c  ne R2(v,w,x,y,z,
0960: 69 29 20 5c 0a 20 20 20 20 7a 2b 3d 28 77 5e 78  i) \.    z+=(w^x
0970: 5e 79 29 2b 62 6c 6b 28 69 29 2b 30 78 36 45 44  ^y)+blk(i)+0x6ED
0980: 39 45 42 41 31 2b 72 6f 6c 28 76 2c 35 29 3b 77  9EBA1+rol(v,5);w
0990: 3d 72 6f 72 28 77 2c 32 29 3b 0a 23 64 65 66 69  =ror(w,2);.#defi
09a0: 6e 65 20 52 33 28 76 2c 77 2c 78 2c 79 2c 7a 2c  ne R3(v,w,x,y,z,
09b0: 69 29 20 5c 0a 20 20 20 20 7a 2b 3d 28 28 28 77  i) \.    z+=(((w
09c0: 7c 78 29 26 79 29 7c 28 77 26 78 29 29 2b 62 6c  |x)&y)|(w&x))+bl
09d0: 6b 28 69 29 2b 30 78 38 46 31 42 42 43 44 43 2b  k(i)+0x8F1BBCDC+
09e0: 72 6f 6c 28 76 2c 35 29 3b 77 3d 72 6f 72 28 77  rol(v,5);w=ror(w
09f0: 2c 32 29 3b 0a 23 64 65 66 69 6e 65 20 52 34 28  ,2);.#define R4(
0a00: 76 2c 77 2c 78 2c 79 2c 7a 2c 69 29 20 5c 0a 20  v,w,x,y,z,i) \. 
0a10: 20 20 20 7a 2b 3d 28 77 5e 78 5e 79 29 2b 62 6c     z+=(w^x^y)+bl
0a20: 6b 28 69 29 2b 30 78 43 41 36 32 43 31 44 36 2b  k(i)+0xCA62C1D6+
0a30: 72 6f 6c 28 76 2c 35 29 3b 77 3d 72 6f 72 28 77  rol(v,5);w=ror(w
0a40: 2c 32 29 3b 0a 0a 2f 2a 0a 20 2a 20 48 61 73 68  ,2);../*. * Hash
0a50: 20 61 20 73 69 6e 67 6c 65 20 35 31 32 2d 62 69   a single 512-bi
0a60: 74 20 62 6c 6f 63 6b 2e 20 54 68 69 73 20 69 73  t block. This is
0a70: 20 74 68 65 20 63 6f 72 65 20 6f 66 20 74 68 65   the core of the
0a80: 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 20 2a 2f 0a   algorithm.. */.
0a90: 76 6f 69 64 20 53 48 41 31 54 72 61 6e 73 66 6f  void SHA1Transfo
0aa0: 72 6d 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 20  rm(unsigned int 
0ab0: 73 74 61 74 65 5b 35 5d 2c 20 63 6f 6e 73 74 20  state[5], const 
0ac0: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 62 75  unsigned char bu
0ad0: 66 66 65 72 5b 36 34 5d 29 7b 0a 20 20 75 6e 73  ffer[64]){.  uns
0ae0: 69 67 6e 65 64 20 69 6e 74 20 71 71 5b 35 5d 3b  igned int qq[5];
0af0: 20 2f 2a 20 61 2c 20 62 2c 20 63 2c 20 64 2c 20   /* a, b, c, d, 
0b00: 65 3b 20 2a 2f 0a 20 20 73 74 61 74 69 63 20 69  e; */.  static i
0b10: 6e 74 20 6f 6e 65 20 3d 20 31 3b 0a 20 20 75 6e  nt one = 1;.  un
0b20: 73 69 67 6e 65 64 20 69 6e 74 20 62 6c 6f 63 6b  signed int block
0b30: 5b 31 36 5d 3b 0a 20 20 6d 65 6d 63 70 79 28 62  [16];.  memcpy(b
0b40: 6c 6f 63 6b 2c 20 62 75 66 66 65 72 2c 20 36 34  lock, buffer, 64
0b50: 29 3b 0a 20 20 6d 65 6d 63 70 79 28 71 71 2c 73  );.  memcpy(qq,s
0b60: 74 61 74 65 2c 35 2a 73 69 7a 65 6f 66 28 75 6e  tate,5*sizeof(un
0b70: 73 69 67 6e 65 64 20 69 6e 74 29 29 3b 0a 0a 23  signed int));..#
0b80: 64 65 66 69 6e 65 20 61 20 71 71 5b 30 5d 0a 23  define a qq[0].#
0b90: 64 65 66 69 6e 65 20 62 20 71 71 5b 31 5d 0a 23  define b qq[1].#
0ba0: 64 65 66 69 6e 65 20 63 20 71 71 5b 32 5d 0a 23  define c qq[2].#
0bb0: 64 65 66 69 6e 65 20 64 20 71 71 5b 33 5d 0a 23  define d qq[3].#
0bc0: 64 65 66 69 6e 65 20 65 20 71 71 5b 34 5d 0a 0a  define e qq[4]..
0bd0: 20 20 2f 2a 20 43 6f 70 79 20 70 2d 3e 73 74 61    /* Copy p->sta
0be0: 74 65 5b 5d 20 74 6f 20 77 6f 72 6b 69 6e 67 20  te[] to working 
0bf0: 76 61 72 73 20 2a 2f 0a 20 20 2f 2a 0a 20 20 61  vars */.  /*.  a
0c00: 20 3d 20 73 74 61 74 65 5b 30 5d 3b 0a 20 20 62   = state[0];.  b
0c10: 20 3d 20 73 74 61 74 65 5b 31 5d 3b 0a 20 20 63   = state[1];.  c
0c20: 20 3d 20 73 74 61 74 65 5b 32 5d 3b 0a 20 20 64   = state[2];.  d
0c30: 20 3d 20 73 74 61 74 65 5b 33 5d 3b 0a 20 20 65   = state[3];.  e
0c40: 20 3d 20 73 74 61 74 65 5b 34 5d 3b 0a 20 20 2a   = state[4];.  *
0c50: 2f 0a 0a 20 20 2f 2a 20 34 20 72 6f 75 6e 64 73  /..  /* 4 rounds
0c60: 20 6f 66 20 32 30 20 6f 70 65 72 61 74 69 6f 6e   of 20 operation
0c70: 73 20 65 61 63 68 2e 20 4c 6f 6f 70 20 75 6e 72  s each. Loop unr
0c80: 6f 6c 6c 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20  olled. */.  if( 
0c90: 31 20 3d 3d 20 2a 28 75 6e 73 69 67 6e 65 64 20  1 == *(unsigned 
0ca0: 63 68 61 72 2a 29 26 6f 6e 65 20 29 7b 0a 20 20  char*)&one ){.  
0cb0: 20 20 52 6c 30 28 61 2c 62 2c 63 2c 64 2c 65 2c    Rl0(a,b,c,d,e,
0cc0: 20 30 29 3b 20 52 6c 30 28 65 2c 61 2c 62 2c 63   0); Rl0(e,a,b,c
0cd0: 2c 64 2c 20 31 29 3b 20 52 6c 30 28 64 2c 65 2c  ,d, 1); Rl0(d,e,
0ce0: 61 2c 62 2c 63 2c 20 32 29 3b 20 52 6c 30 28 63  a,b,c, 2); Rl0(c
0cf0: 2c 64 2c 65 2c 61 2c 62 2c 20 33 29 3b 0a 20 20  ,d,e,a,b, 3);.  
0d00: 20 20 52 6c 30 28 62 2c 63 2c 64 2c 65 2c 61 2c    Rl0(b,c,d,e,a,
0d10: 20 34 29 3b 20 52 6c 30 28 61 2c 62 2c 63 2c 64   4); Rl0(a,b,c,d
0d20: 2c 65 2c 20 35 29 3b 20 52 6c 30 28 65 2c 61 2c  ,e, 5); Rl0(e,a,
0d30: 62 2c 63 2c 64 2c 20 36 29 3b 20 52 6c 30 28 64  b,c,d, 6); Rl0(d
0d40: 2c 65 2c 61 2c 62 2c 63 2c 20 37 29 3b 0a 20 20  ,e,a,b,c, 7);.  
0d50: 20 20 52 6c 30 28 63 2c 64 2c 65 2c 61 2c 62 2c    Rl0(c,d,e,a,b,
0d60: 20 38 29 3b 20 52 6c 30 28 62 2c 63 2c 64 2c 65   8); Rl0(b,c,d,e
0d70: 2c 61 2c 20 39 29 3b 20 52 6c 30 28 61 2c 62 2c  ,a, 9); Rl0(a,b,
0d80: 63 2c 64 2c 65 2c 31 30 29 3b 20 52 6c 30 28 65  c,d,e,10); Rl0(e
0d90: 2c 61 2c 62 2c 63 2c 64 2c 31 31 29 3b 0a 20 20  ,a,b,c,d,11);.  
0da0: 20 20 52 6c 30 28 64 2c 65 2c 61 2c 62 2c 63 2c    Rl0(d,e,a,b,c,
0db0: 31 32 29 3b 20 52 6c 30 28 63 2c 64 2c 65 2c 61  12); Rl0(c,d,e,a
0dc0: 2c 62 2c 31 33 29 3b 20 52 6c 30 28 62 2c 63 2c  ,b,13); Rl0(b,c,
0dd0: 64 2c 65 2c 61 2c 31 34 29 3b 20 52 6c 30 28 61  d,e,a,14); Rl0(a
0de0: 2c 62 2c 63 2c 64 2c 65 2c 31 35 29 3b 0a 20 20  ,b,c,d,e,15);.  
0df0: 7d 65 6c 73 65 7b 0a 20 20 20 20 52 62 30 28 61  }else{.    Rb0(a
0e00: 2c 62 2c 63 2c 64 2c 65 2c 20 30 29 3b 20 52 62  ,b,c,d,e, 0); Rb
0e10: 30 28 65 2c 61 2c 62 2c 63 2c 64 2c 20 31 29 3b  0(e,a,b,c,d, 1);
0e20: 20 52 62 30 28 64 2c 65 2c 61 2c 62 2c 63 2c 20   Rb0(d,e,a,b,c, 
0e30: 32 29 3b 20 52 62 30 28 63 2c 64 2c 65 2c 61 2c  2); Rb0(c,d,e,a,
0e40: 62 2c 20 33 29 3b 0a 20 20 20 20 52 62 30 28 62  b, 3);.    Rb0(b
0e50: 2c 63 2c 64 2c 65 2c 61 2c 20 34 29 3b 20 52 62  ,c,d,e,a, 4); Rb
0e60: 30 28 61 2c 62 2c 63 2c 64 2c 65 2c 20 35 29 3b  0(a,b,c,d,e, 5);
0e70: 20 52 62 30 28 65 2c 61 2c 62 2c 63 2c 64 2c 20   Rb0(e,a,b,c,d, 
0e80: 36 29 3b 20 52 62 30 28 64 2c 65 2c 61 2c 62 2c  6); Rb0(d,e,a,b,
0e90: 63 2c 20 37 29 3b 0a 20 20 20 20 52 62 30 28 63  c, 7);.    Rb0(c
0ea0: 2c 64 2c 65 2c 61 2c 62 2c 20 38 29 3b 20 52 62  ,d,e,a,b, 8); Rb
0eb0: 30 28 62 2c 63 2c 64 2c 65 2c 61 2c 20 39 29 3b  0(b,c,d,e,a, 9);
0ec0: 20 52 62 30 28 61 2c 62 2c 63 2c 64 2c 65 2c 31   Rb0(a,b,c,d,e,1
0ed0: 30 29 3b 20 52 62 30 28 65 2c 61 2c 62 2c 63 2c  0); Rb0(e,a,b,c,
0ee0: 64 2c 31 31 29 3b 0a 20 20 20 20 52 62 30 28 64  d,11);.    Rb0(d
0ef0: 2c 65 2c 61 2c 62 2c 63 2c 31 32 29 3b 20 52 62  ,e,a,b,c,12); Rb
0f00: 30 28 63 2c 64 2c 65 2c 61 2c 62 2c 31 33 29 3b  0(c,d,e,a,b,13);
0f10: 20 52 62 30 28 62 2c 63 2c 64 2c 65 2c 61 2c 31   Rb0(b,c,d,e,a,1
0f20: 34 29 3b 20 52 62 30 28 61 2c 62 2c 63 2c 64 2c  4); Rb0(a,b,c,d,
0f30: 65 2c 31 35 29 3b 0a 20 20 7d 0a 20 20 52 31 28  e,15);.  }.  R1(
0f40: 65 2c 61 2c 62 2c 63 2c 64 2c 31 36 29 3b 20 52  e,a,b,c,d,16); R
0f50: 31 28 64 2c 65 2c 61 2c 62 2c 63 2c 31 37 29 3b  1(d,e,a,b,c,17);
0f60: 20 52 31 28 63 2c 64 2c 65 2c 61 2c 62 2c 31 38   R1(c,d,e,a,b,18
0f70: 29 3b 20 52 31 28 62 2c 63 2c 64 2c 65 2c 61 2c  ); R1(b,c,d,e,a,
0f80: 31 39 29 3b 0a 20 20 52 32 28 61 2c 62 2c 63 2c  19);.  R2(a,b,c,
0f90: 64 2c 65 2c 32 30 29 3b 20 52 32 28 65 2c 61 2c  d,e,20); R2(e,a,
0fa0: 62 2c 63 2c 64 2c 32 31 29 3b 20 52 32 28 64 2c  b,c,d,21); R2(d,
0fb0: 65 2c 61 2c 62 2c 63 2c 32 32 29 3b 20 52 32 28  e,a,b,c,22); R2(
0fc0: 63 2c 64 2c 65 2c 61 2c 62 2c 32 33 29 3b 0a 20  c,d,e,a,b,23);. 
0fd0: 20 52 32 28 62 2c 63 2c 64 2c 65 2c 61 2c 32 34   R2(b,c,d,e,a,24
0fe0: 29 3b 20 52 32 28 61 2c 62 2c 63 2c 64 2c 65 2c  ); R2(a,b,c,d,e,
0ff0: 32 35 29 3b 20 52 32 28 65 2c 61 2c 62 2c 63 2c  25); R2(e,a,b,c,
1000: 64 2c 32 36 29 3b 20 52 32 28 64 2c 65 2c 61 2c  d,26); R2(d,e,a,
1010: 62 2c 63 2c 32 37 29 3b 0a 20 20 52 32 28 63 2c  b,c,27);.  R2(c,
1020: 64 2c 65 2c 61 2c 62 2c 32 38 29 3b 20 52 32 28  d,e,a,b,28); R2(
1030: 62 2c 63 2c 64 2c 65 2c 61 2c 32 39 29 3b 20 52  b,c,d,e,a,29); R
1040: 32 28 61 2c 62 2c 63 2c 64 2c 65 2c 33 30 29 3b  2(a,b,c,d,e,30);
1050: 20 52 32 28 65 2c 61 2c 62 2c 63 2c 64 2c 33 31   R2(e,a,b,c,d,31
1060: 29 3b 0a 20 20 52 32 28 64 2c 65 2c 61 2c 62 2c  );.  R2(d,e,a,b,
1070: 63 2c 33 32 29 3b 20 52 32 28 63 2c 64 2c 65 2c  c,32); R2(c,d,e,
1080: 61 2c 62 2c 33 33 29 3b 20 52 32 28 62 2c 63 2c  a,b,33); R2(b,c,
1090: 64 2c 65 2c 61 2c 33 34 29 3b 20 52 32 28 61 2c  d,e,a,34); R2(a,
10a0: 62 2c 63 2c 64 2c 65 2c 33 35 29 3b 0a 20 20 52  b,c,d,e,35);.  R
10b0: 32 28 65 2c 61 2c 62 2c 63 2c 64 2c 33 36 29 3b  2(e,a,b,c,d,36);
10c0: 20 52 32 28 64 2c 65 2c 61 2c 62 2c 63 2c 33 37   R2(d,e,a,b,c,37
10d0: 29 3b 20 52 32 28 63 2c 64 2c 65 2c 61 2c 62 2c  ); R2(c,d,e,a,b,
10e0: 33 38 29 3b 20 52 32 28 62 2c 63 2c 64 2c 65 2c  38); R2(b,c,d,e,
10f0: 61 2c 33 39 29 3b 0a 20 20 52 33 28 61 2c 62 2c  a,39);.  R3(a,b,
1100: 63 2c 64 2c 65 2c 34 30 29 3b 20 52 33 28 65 2c  c,d,e,40); R3(e,
1110: 61 2c 62 2c 63 2c 64 2c 34 31 29 3b 20 52 33 28  a,b,c,d,41); R3(
1120: 64 2c 65 2c 61 2c 62 2c 63 2c 34 32 29 3b 20 52  d,e,a,b,c,42); R
1130: 33 28 63 2c 64 2c 65 2c 61 2c 62 2c 34 33 29 3b  3(c,d,e,a,b,43);
1140: 0a 20 20 52 33 28 62 2c 63 2c 64 2c 65 2c 61 2c  .  R3(b,c,d,e,a,
1150: 34 34 29 3b 20 52 33 28 61 2c 62 2c 63 2c 64 2c  44); R3(a,b,c,d,
1160: 65 2c 34 35 29 3b 20 52 33 28 65 2c 61 2c 62 2c  e,45); R3(e,a,b,
1170: 63 2c 64 2c 34 36 29 3b 20 52 33 28 64 2c 65 2c  c,d,46); R3(d,e,
1180: 61 2c 62 2c 63 2c 34 37 29 3b 0a 20 20 52 33 28  a,b,c,47);.  R3(
1190: 63 2c 64 2c 65 2c 61 2c 62 2c 34 38 29 3b 20 52  c,d,e,a,b,48); R
11a0: 33 28 62 2c 63 2c 64 2c 65 2c 61 2c 34 39 29 3b  3(b,c,d,e,a,49);
11b0: 20 52 33 28 61 2c 62 2c 63 2c 64 2c 65 2c 35 30   R3(a,b,c,d,e,50
11c0: 29 3b 20 52 33 28 65 2c 61 2c 62 2c 63 2c 64 2c  ); R3(e,a,b,c,d,
11d0: 35 31 29 3b 0a 20 20 52 33 28 64 2c 65 2c 61 2c  51);.  R3(d,e,a,
11e0: 62 2c 63 2c 35 32 29 3b 20 52 33 28 63 2c 64 2c  b,c,52); R3(c,d,
11f0: 65 2c 61 2c 62 2c 35 33 29 3b 20 52 33 28 62 2c  e,a,b,53); R3(b,
1200: 63 2c 64 2c 65 2c 61 2c 35 34 29 3b 20 52 33 28  c,d,e,a,54); R3(
1210: 61 2c 62 2c 63 2c 64 2c 65 2c 35 35 29 3b 0a 20  a,b,c,d,e,55);. 
1220: 20 52 33 28 65 2c 61 2c 62 2c 63 2c 64 2c 35 36   R3(e,a,b,c,d,56
1230: 29 3b 20 52 33 28 64 2c 65 2c 61 2c 62 2c 63 2c  ); R3(d,e,a,b,c,
1240: 35 37 29 3b 20 52 33 28 63 2c 64 2c 65 2c 61 2c  57); R3(c,d,e,a,
1250: 62 2c 35 38 29 3b 20 52 33 28 62 2c 63 2c 64 2c  b,58); R3(b,c,d,
1260: 65 2c 61 2c 35 39 29 3b 0a 20 20 52 34 28 61 2c  e,a,59);.  R4(a,
1270: 62 2c 63 2c 64 2c 65 2c 36 30 29 3b 20 52 34 28  b,c,d,e,60); R4(
1280: 65 2c 61 2c 62 2c 63 2c 64 2c 36 31 29 3b 20 52  e,a,b,c,d,61); R
1290: 34 28 64 2c 65 2c 61 2c 62 2c 63 2c 36 32 29 3b  4(d,e,a,b,c,62);
12a0: 20 52 34 28 63 2c 64 2c 65 2c 61 2c 62 2c 36 33   R4(c,d,e,a,b,63
12b0: 29 3b 0a 20 20 52 34 28 62 2c 63 2c 64 2c 65 2c  );.  R4(b,c,d,e,
12c0: 61 2c 36 34 29 3b 20 52 34 28 61 2c 62 2c 63 2c  a,64); R4(a,b,c,
12d0: 64 2c 65 2c 36 35 29 3b 20 52 34 28 65 2c 61 2c  d,e,65); R4(e,a,
12e0: 62 2c 63 2c 64 2c 36 36 29 3b 20 52 34 28 64 2c  b,c,d,66); R4(d,
12f0: 65 2c 61 2c 62 2c 63 2c 36 37 29 3b 0a 20 20 52  e,a,b,c,67);.  R
1300: 34 28 63 2c 64 2c 65 2c 61 2c 62 2c 36 38 29 3b  4(c,d,e,a,b,68);
1310: 20 52 34 28 62 2c 63 2c 64 2c 65 2c 61 2c 36 39   R4(b,c,d,e,a,69
1320: 29 3b 20 52 34 28 61 2c 62 2c 63 2c 64 2c 65 2c  ); R4(a,b,c,d,e,
1330: 37 30 29 3b 20 52 34 28 65 2c 61 2c 62 2c 63 2c  70); R4(e,a,b,c,
1340: 64 2c 37 31 29 3b 0a 20 20 52 34 28 64 2c 65 2c  d,71);.  R4(d,e,
1350: 61 2c 62 2c 63 2c 37 32 29 3b 20 52 34 28 63 2c  a,b,c,72); R4(c,
1360: 64 2c 65 2c 61 2c 62 2c 37 33 29 3b 20 52 34 28  d,e,a,b,73); R4(
1370: 62 2c 63 2c 64 2c 65 2c 61 2c 37 34 29 3b 20 52  b,c,d,e,a,74); R
1380: 34 28 61 2c 62 2c 63 2c 64 2c 65 2c 37 35 29 3b  4(a,b,c,d,e,75);
1390: 0a 20 20 52 34 28 65 2c 61 2c 62 2c 63 2c 64 2c  .  R4(e,a,b,c,d,
13a0: 37 36 29 3b 20 52 34 28 64 2c 65 2c 61 2c 62 2c  76); R4(d,e,a,b,
13b0: 63 2c 37 37 29 3b 20 52 34 28 63 2c 64 2c 65 2c  c,77); R4(c,d,e,
13c0: 61 2c 62 2c 37 38 29 3b 20 52 34 28 62 2c 63 2c  a,b,78); R4(b,c,
13d0: 64 2c 65 2c 61 2c 37 39 29 3b 0a 0a 20 20 2f 2a  d,e,a,79);..  /*
13e0: 20 41 64 64 20 74 68 65 20 77 6f 72 6b 69 6e 67   Add the working
13f0: 20 76 61 72 73 20 62 61 63 6b 20 69 6e 74 6f 20   vars back into 
1400: 63 6f 6e 74 65 78 74 2e 73 74 61 74 65 5b 5d 20  context.state[] 
1410: 2a 2f 0a 20 20 73 74 61 74 65 5b 30 5d 20 2b 3d  */.  state[0] +=
1420: 20 61 3b 0a 20 20 73 74 61 74 65 5b 31 5d 20 2b   a;.  state[1] +
1430: 3d 20 62 3b 0a 20 20 73 74 61 74 65 5b 32 5d 20  = b;.  state[2] 
1440: 2b 3d 20 63 3b 0a 20 20 73 74 61 74 65 5b 33 5d  += c;.  state[3]
1450: 20 2b 3d 20 64 3b 0a 20 20 73 74 61 74 65 5b 34   += d;.  state[4
1460: 5d 20 2b 3d 20 65 3b 0a 0a 23 75 6e 64 65 66 20  ] += e;..#undef 
1470: 61 0a 23 75 6e 64 65 66 20 62 0a 23 75 6e 64 65  a.#undef b.#unde
1480: 66 20 63 0a 23 75 6e 64 65 66 20 64 0a 23 75 6e  f c.#undef d.#un
1490: 64 65 66 20 65 0a 7d 0a 0a 0a 2f 2a 20 49 6e 69  def e.}.../* Ini
14a0: 74 69 61 6c 69 7a 65 20 61 20 53 48 41 31 20 63  tialize a SHA1 c
14b0: 6f 6e 74 65 78 74 20 2a 2f 0a 73 74 61 74 69 63  ontext */.static
14c0: 20 76 6f 69 64 20 68 61 73 68 5f 69 6e 69 74 28   void hash_init(
14d0: 53 48 41 31 43 6f 6e 74 65 78 74 20 2a 70 29 7b  SHA1Context *p){
14e0: 0a 20 20 2f 2a 20 53 48 41 31 20 69 6e 69 74 69  .  /* SHA1 initi
14f0: 61 6c 69 7a 61 74 69 6f 6e 20 63 6f 6e 73 74 61  alization consta
1500: 6e 74 73 20 2a 2f 0a 20 20 70 2d 3e 73 74 61 74  nts */.  p->stat
1510: 65 5b 30 5d 20 3d 20 30 78 36 37 34 35 32 33 30  e[0] = 0x6745230
1520: 31 3b 0a 20 20 70 2d 3e 73 74 61 74 65 5b 31 5d  1;.  p->state[1]
1530: 20 3d 20 30 78 45 46 43 44 41 42 38 39 3b 0a 20   = 0xEFCDAB89;. 
1540: 20 70 2d 3e 73 74 61 74 65 5b 32 5d 20 3d 20 30   p->state[2] = 0
1550: 78 39 38 42 41 44 43 46 45 3b 0a 20 20 70 2d 3e  x98BADCFE;.  p->
1560: 73 74 61 74 65 5b 33 5d 20 3d 20 30 78 31 30 33  state[3] = 0x103
1570: 32 35 34 37 36 3b 0a 20 20 70 2d 3e 73 74 61 74  25476;.  p->stat
1580: 65 5b 34 5d 20 3d 20 30 78 43 33 44 32 45 31 46  e[4] = 0xC3D2E1F
1590: 30 3b 0a 20 20 70 2d 3e 63 6f 75 6e 74 5b 30 5d  0;.  p->count[0]
15a0: 20 3d 20 70 2d 3e 63 6f 75 6e 74 5b 31 5d 20 3d   = p->count[1] =
15b0: 20 30 3b 0a 7d 0a 0a 2f 2a 20 41 64 64 20 6e 65   0;.}../* Add ne
15c0: 77 20 63 6f 6e 74 65 6e 74 20 74 6f 20 74 68 65  w content to the
15d0: 20 53 48 41 31 20 68 61 73 68 20 2a 2f 0a 73 74   SHA1 hash */.st
15e0: 61 74 69 63 20 76 6f 69 64 20 68 61 73 68 5f 73  atic void hash_s
15f0: 74 65 70 28 0a 20 20 53 48 41 31 43 6f 6e 74 65  tep(.  SHA1Conte
1600: 78 74 20 2a 70 2c 20 20 20 20 20 20 20 20 20 20  xt *p,          
1610: 20 20 20 20 20 20 20 2f 2a 20 41 64 64 20 63 6f         /* Add co
1620: 6e 74 65 6e 74 20 74 6f 20 74 68 69 73 20 63 6f  ntent to this co
1630: 6e 74 65 78 74 20 2a 2f 0a 20 20 63 6f 6e 73 74  ntext */.  const
1640: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
1650: 64 61 74 61 2c 20 20 20 20 20 20 2f 2a 20 44 61  data,      /* Da
1660: 74 61 20 74 6f 20 62 65 20 61 64 64 65 64 20 2a  ta to be added *
1670: 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  /.  unsigned int
1680: 20 6c 65 6e 20 20 20 20 20 20 20 20 20 20 20 20   len            
1690: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
16a0: 20 62 79 74 65 73 20 69 6e 20 64 61 74 61 20 2a   bytes in data *
16b0: 2f 0a 29 7b 0a 20 20 75 6e 73 69 67 6e 65 64 20  /.){.  unsigned 
16c0: 69 6e 74 20 69 2c 20 6a 3b 0a 0a 20 20 6a 20 3d  int i, j;..  j =
16d0: 20 70 2d 3e 63 6f 75 6e 74 5b 30 5d 3b 0a 20 20   p->count[0];.  
16e0: 69 66 28 20 28 70 2d 3e 63 6f 75 6e 74 5b 30 5d  if( (p->count[0]
16f0: 20 2b 3d 20 6c 65 6e 20 3c 3c 20 33 29 20 3c 20   += len << 3) < 
1700: 6a 20 29 7b 0a 20 20 20 20 70 2d 3e 63 6f 75 6e  j ){.    p->coun
1710: 74 5b 31 5d 20 2b 3d 20 28 6c 65 6e 3e 3e 32 39  t[1] += (len>>29
1720: 29 2b 31 3b 0a 20 20 7d 0a 20 20 6a 20 3d 20 28  )+1;.  }.  j = (
1730: 6a 20 3e 3e 20 33 29 20 26 20 36 33 3b 0a 20 20  j >> 3) & 63;.  
1740: 69 66 28 20 28 6a 20 2b 20 6c 65 6e 29 20 3e 20  if( (j + len) > 
1750: 36 33 20 29 7b 0a 20 20 20 20 28 76 6f 69 64 29  63 ){.    (void)
1760: 6d 65 6d 63 70 79 28 26 70 2d 3e 62 75 66 66 65  memcpy(&p->buffe
1770: 72 5b 6a 5d 2c 20 64 61 74 61 2c 20 28 69 20 3d  r[j], data, (i =
1780: 20 36 34 2d 6a 29 29 3b 0a 20 20 20 20 53 48 41   64-j));.    SHA
1790: 31 54 72 61 6e 73 66 6f 72 6d 28 70 2d 3e 73 74  1Transform(p->st
17a0: 61 74 65 2c 20 70 2d 3e 62 75 66 66 65 72 29 3b  ate, p->buffer);
17b0: 0a 20 20 20 20 66 6f 72 28 3b 20 69 20 2b 20 36  .    for(; i + 6
17c0: 33 20 3c 20 6c 65 6e 3b 20 69 20 2b 3d 20 36 34  3 < len; i += 64
17d0: 29 7b 0a 20 20 20 20 20 20 53 48 41 31 54 72 61  ){.      SHA1Tra
17e0: 6e 73 66 6f 72 6d 28 70 2d 3e 73 74 61 74 65 2c  nsform(p->state,
17f0: 20 26 64 61 74 61 5b 69 5d 29 3b 0a 20 20 20 20   &data[i]);.    
1800: 7d 0a 20 20 20 20 6a 20 3d 20 30 3b 0a 20 20 7d  }.    j = 0;.  }
1810: 65 6c 73 65 7b 0a 20 20 20 20 69 20 3d 20 30 3b  else{.    i = 0;
1820: 0a 20 20 7d 0a 20 20 28 76 6f 69 64 29 6d 65 6d  .  }.  (void)mem
1830: 63 70 79 28 26 70 2d 3e 62 75 66 66 65 72 5b 6a  cpy(&p->buffer[j
1840: 5d 2c 20 26 64 61 74 61 5b 69 5d 2c 20 6c 65 6e  ], &data[i], len
1850: 20 2d 20 69 29 3b 0a 7d 0a 0a 2f 2a 20 43 6f 6d   - i);.}../* Com
1860: 70 75 74 65 20 61 20 73 74 72 69 6e 67 20 75 73  pute a string us
1870: 69 6e 67 20 73 71 6c 69 74 65 33 5f 76 73 6e 70  ing sqlite3_vsnp
1880: 72 69 6e 74 66 28 29 20 61 6e 64 20 68 61 73 68  rintf() and hash
1890: 20 69 74 20 2a 2f 0a 73 74 61 74 69 63 20 76 6f   it */.static vo
18a0: 69 64 20 68 61 73 68 5f 73 74 65 70 5f 76 66 6f  id hash_step_vfo
18b0: 72 6d 61 74 28 0a 20 20 53 48 41 31 43 6f 6e 74  rmat(.  SHA1Cont
18c0: 65 78 74 20 2a 70 2c 20 20 20 20 20 20 20 20 20  ext *p,         
18d0: 20 20 20 20 20 20 20 20 2f 2a 20 41 64 64 20 63          /* Add c
18e0: 6f 6e 74 65 6e 74 20 74 6f 20 74 68 69 73 20 63  ontent to this c
18f0: 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 63 6f 6e 73  ontext */.  cons
1900: 74 20 63 68 61 72 20 2a 7a 46 6f 72 6d 61 74 2c  t char *zFormat,
1910: 0a 20 20 2e 2e 2e 0a 29 7b 0a 20 20 76 61 5f 6c  .  ....){.  va_l
1920: 69 73 74 20 61 70 3b 0a 20 20 69 6e 74 20 6e 3b  ist ap;.  int n;
1930: 0a 20 20 63 68 61 72 20 7a 42 75 66 5b 35 30 5d  .  char zBuf[50]
1940: 3b 0a 20 20 76 61 5f 73 74 61 72 74 28 61 70 2c  ;.  va_start(ap,
1950: 20 7a 46 6f 72 6d 61 74 29 3b 0a 20 20 73 71 6c   zFormat);.  sql
1960: 69 74 65 33 5f 76 73 6e 70 72 69 6e 74 66 28 73  ite3_vsnprintf(s
1970: 69 7a 65 6f 66 28 7a 42 75 66 29 2c 7a 42 75 66  izeof(zBuf),zBuf
1980: 2c 7a 46 6f 72 6d 61 74 2c 61 70 29 3b 0a 20 20  ,zFormat,ap);.  
1990: 76 61 5f 65 6e 64 28 61 70 29 3b 0a 20 20 6e 20  va_end(ap);.  n 
19a0: 3d 20 28 69 6e 74 29 73 74 72 6c 65 6e 28 7a 42  = (int)strlen(zB
19b0: 75 66 29 3b 0a 20 20 68 61 73 68 5f 73 74 65 70  uf);.  hash_step
19c0: 28 70 2c 20 28 75 6e 73 69 67 6e 65 64 20 63 68  (p, (unsigned ch
19d0: 61 72 2a 29 7a 42 75 66 2c 20 6e 29 3b 0a 7d 0a  ar*)zBuf, n);.}.
19e0: 0a 0a 2f 2a 20 41 64 64 20 70 61 64 64 69 6e 67  ../* Add padding
19f0: 20 61 6e 64 20 63 6f 6d 70 75 74 65 20 74 68 65   and compute the
1a00: 20 6d 65 73 73 61 67 65 20 64 69 67 65 73 74 2e   message digest.
1a10: 20 20 52 65 6e 64 65 72 20 74 68 65 0a 2a 2a 20    Render the.** 
1a20: 6d 65 73 73 61 67 65 20 64 69 67 65 73 74 20 61  message digest a
1a30: 73 20 6c 6f 77 65 72 2d 63 61 73 65 20 68 65 78  s lower-case hex
1a40: 61 64 65 63 69 6d 61 6c 20 61 6e 64 20 70 75 74  adecimal and put
1a50: 20 69 74 20 69 6e 74 6f 0a 2a 2a 20 7a 4f 75 74   it into.** zOut
1a60: 5b 5d 2e 20 20 7a 4f 75 74 5b 5d 20 6d 75 73 74  [].  zOut[] must
1a70: 20 62 65 20 61 74 20 6c 65 61 73 74 20 34 31 20   be at least 41 
1a80: 62 79 74 65 73 20 6c 6f 6e 67 2e 20 2a 2f 0a 73  bytes long. */.s
1a90: 74 61 74 69 63 20 76 6f 69 64 20 68 61 73 68 5f  tatic void hash_
1aa0: 66 69 6e 69 73 68 28 0a 20 20 53 48 41 31 43 6f  finish(.  SHA1Co
1ab0: 6e 74 65 78 74 20 2a 70 2c 20 20 20 20 20 20 20  ntext *p,       
1ac0: 20 20 20 20 2f 2a 20 54 68 65 20 53 48 41 31 20      /* The SHA1 
1ad0: 63 6f 6e 74 65 78 74 20 74 6f 20 66 69 6e 69 73  context to finis
1ae0: 68 20 61 6e 64 20 72 65 6e 64 65 72 20 2a 2f 0a  h and render */.
1af0: 20 20 63 68 61 72 20 2a 7a 4f 75 74 20 20 20 20    char *zOut    
1b00: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
1b10: 74 6f 72 65 20 68 65 78 61 64 65 63 69 6d 61 6c  tore hexadecimal
1b20: 20 68 61 73 68 20 68 65 72 65 20 2a 2f 0a 29 7b   hash here */.){
1b30: 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20  .  unsigned int 
1b40: 69 3b 0a 20 20 75 6e 73 69 67 6e 65 64 20 63 68  i;.  unsigned ch
1b50: 61 72 20 66 69 6e 61 6c 63 6f 75 6e 74 5b 38 5d  ar finalcount[8]
1b60: 3b 0a 20 20 75 6e 73 69 67 6e 65 64 20 63 68 61  ;.  unsigned cha
1b70: 72 20 64 69 67 65 73 74 5b 32 30 5d 3b 0a 20 20  r digest[20];.  
1b80: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61  static const cha
1b90: 72 20 7a 45 6e 63 6f 64 65 5b 5d 20 3d 20 22 30  r zEncode[] = "0
1ba0: 31 32 33 34 35 36 37 38 39 61 62 63 64 65 66 22  123456789abcdef"
1bb0: 3b 0a 0a 20 20 66 6f 72 20 28 69 20 3d 20 30 3b  ;..  for (i = 0;
1bc0: 20 69 20 3c 20 38 3b 20 69 2b 2b 29 7b 0a 20 20   i < 8; i++){.  
1bd0: 20 20 66 69 6e 61 6c 63 6f 75 6e 74 5b 69 5d 20    finalcount[i] 
1be0: 3d 20 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  = (unsigned char
1bf0: 29 28 28 70 2d 3e 63 6f 75 6e 74 5b 28 69 20 3e  )((p->count[(i >
1c00: 3d 20 34 20 3f 20 30 20 3a 20 31 29 5d 0a 20 20  = 4 ? 0 : 1)].  
1c10: 20 20 20 20 20 3e 3e 20 28 28 33 2d 28 69 20 26       >> ((3-(i &
1c20: 20 33 29 29 20 2a 20 38 29 20 29 20 26 20 32 35   3)) * 8) ) & 25
1c30: 35 29 3b 20 2f 2a 20 45 6e 64 69 61 6e 20 69 6e  5); /* Endian in
1c40: 64 65 70 65 6e 64 65 6e 74 20 2a 2f 0a 20 20 7d  dependent */.  }
1c50: 0a 20 20 68 61 73 68 5f 73 74 65 70 28 70 2c 20  .  hash_step(p, 
1c60: 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
1c70: 63 68 61 72 20 2a 29 22 5c 32 30 30 22 2c 20 31  char *)"\200", 1
1c80: 29 3b 0a 20 20 77 68 69 6c 65 20 28 28 70 2d 3e  );.  while ((p->
1c90: 63 6f 75 6e 74 5b 30 5d 20 26 20 35 30 34 29 20  count[0] & 504) 
1ca0: 21 3d 20 34 34 38 29 7b 0a 20 20 20 20 68 61 73  != 448){.    has
1cb0: 68 5f 73 74 65 70 28 70 2c 20 28 63 6f 6e 73 74  h_step(p, (const
1cc0: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
1cd0: 29 22 5c 30 22 2c 20 31 29 3b 0a 20 20 7d 0a 20  )"\0", 1);.  }. 
1ce0: 20 68 61 73 68 5f 73 74 65 70 28 70 2c 20 66 69   hash_step(p, fi
1cf0: 6e 61 6c 63 6f 75 6e 74 2c 20 38 29 3b 20 20 2f  nalcount, 8);  /
1d00: 2a 20 53 68 6f 75 6c 64 20 63 61 75 73 65 20 61  * Should cause a
1d10: 20 53 48 41 31 54 72 61 6e 73 66 6f 72 6d 28 29   SHA1Transform()
1d20: 20 2a 2f 0a 20 20 66 6f 72 20 28 69 20 3d 20 30   */.  for (i = 0
1d30: 3b 20 69 20 3c 20 32 30 3b 20 69 2b 2b 29 7b 0a  ; i < 20; i++){.
1d40: 20 20 20 20 64 69 67 65 73 74 5b 69 5d 20 3d 20      digest[i] = 
1d50: 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
1d60: 28 70 2d 3e 73 74 61 74 65 5b 69 3e 3e 32 5d 20  (p->state[i>>2] 
1d70: 3e 3e 20 28 28 33 2d 28 69 20 26 20 33 29 29 20  >> ((3-(i & 3)) 
1d80: 2a 20 38 29 20 29 20 26 20 32 35 35 29 3b 0a 20  * 8) ) & 255);. 
1d90: 20 7d 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c   }.  for(i=0; i<
1da0: 32 30 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 7a 4f  20; i++){.    zO
1db0: 75 74 5b 69 2a 32 5d 20 3d 20 7a 45 6e 63 6f 64  ut[i*2] = zEncod
1dc0: 65 5b 28 64 69 67 65 73 74 5b 69 5d 3e 3e 34 29  e[(digest[i]>>4)
1dd0: 26 30 78 66 5d 3b 0a 20 20 20 20 7a 4f 75 74 5b  &0xf];.    zOut[
1de0: 69 2a 32 2b 31 5d 20 3d 20 7a 45 6e 63 6f 64 65  i*2+1] = zEncode
1df0: 5b 64 69 67 65 73 74 5b 69 5d 20 26 20 30 78 66  [digest[i] & 0xf
1e00: 5d 3b 0a 20 20 7d 0a 20 20 7a 4f 75 74 5b 69 2a  ];.  }.  zOut[i*
1e10: 32 5d 3d 20 30 3b 0a 7d 0a 2f 2a 20 45 6e 64 20  2]= 0;.}./* End 
1e20: 6f 66 20 74 68 65 20 68 61 73 68 69 6e 67 20 6c  of the hashing l
1e30: 6f 67 69 63 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ogic.***********
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: 2a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 49 6d 70 6c 65  **/../*.** Imple
1e90: 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  mentation of the
1ea0: 20 73 68 61 31 28 58 29 20 66 75 6e 63 74 69 6f   sha1(X) functio
1eb0: 6e 2e 0a 2a 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  n..**.** Return 
1ec0: 61 20 6c 6f 77 65 72 2d 63 61 73 65 20 68 65 78  a lower-case hex
1ed0: 61 64 65 63 69 6d 61 6c 20 72 65 6e 64 65 72 69  adecimal renderi
1ee0: 6e 67 20 6f 66 20 74 68 65 20 53 48 41 31 20 68  ng of the SHA1 h
1ef0: 61 73 68 20 6f 66 20 74 68 65 0a 2a 2a 20 61 72  ash of the.** ar
1f00: 67 75 6d 65 6e 74 20 58 2e 20 20 49 66 20 58 20  gument X.  If X 
1f10: 69 73 20 61 20 42 4c 4f 42 2c 20 69 74 20 69 73  is a BLOB, it is
1f20: 20 68 61 73 68 65 64 20 61 73 20 69 73 2e 20 20   hashed as is.  
1f30: 46 6f 72 20 61 6c 6c 20 6f 74 68 65 72 0a 2a 2a  For all other.**
1f40: 20 74 79 70 65 73 20 6f 66 20 69 6e 70 75 74 2c   types of input,
1f50: 20 58 20 69 73 20 63 6f 6e 76 65 72 74 65 64 20   X is converted 
1f60: 69 6e 74 6f 20 61 20 55 54 46 2d 38 20 73 74 72  into a UTF-8 str
1f70: 69 6e 67 20 61 6e 64 20 74 68 65 20 73 74 72 69  ing and the stri
1f80: 6e 67 0a 2a 2a 20 69 73 20 68 61 73 68 20 77 69  ng.** is hash wi
1f90: 74 68 6f 75 74 20 74 68 65 20 74 72 61 69 6c 69  thout the traili
1fa0: 6e 67 20 30 78 30 30 20 74 65 72 6d 69 6e 61 74  ng 0x00 terminat
1fb0: 6f 72 2e 20 20 54 68 65 20 68 61 73 68 20 6f 66  or.  The hash of
1fc0: 20 61 20 4e 55 4c 4c 0a 2a 2a 20 76 61 6c 75 65   a NULL.** value
1fd0: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 73 74 61   is NULL..*/.sta
1fe0: 74 69 63 20 76 6f 69 64 20 73 68 61 31 46 75 6e  tic void sha1Fun
1ff0: 63 28 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  c(.  sqlite3_con
2000: 74 65 78 74 20 2a 63 6f 6e 74 65 78 74 2c 0a 20  text *context,. 
2010: 20 69 6e 74 20 61 72 67 63 2c 0a 20 20 73 71 6c   int argc,.  sql
2020: 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 72 67  ite3_value **arg
2030: 76 0a 29 7b 0a 20 20 53 48 41 31 43 6f 6e 74 65  v.){.  SHA1Conte
2040: 78 74 20 63 78 3b 0a 20 20 69 6e 74 20 65 54 79  xt cx;.  int eTy
2050: 70 65 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c  pe = sqlite3_val
2060: 75 65 5f 74 79 70 65 28 61 72 67 76 5b 30 5d 29  ue_type(argv[0])
2070: 3b 0a 20 20 69 6e 74 20 6e 42 79 74 65 20 3d 20  ;.  int nByte = 
2080: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62 79  sqlite3_value_by
2090: 74 65 73 28 61 72 67 76 5b 30 5d 29 3b 0a 20 20  tes(argv[0]);.  
20a0: 63 68 61 72 20 7a 4f 75 74 5b 34 34 5d 3b 0a 0a  char zOut[44];..
20b0: 20 20 61 73 73 65 72 74 28 20 61 72 67 63 3d 3d    assert( argc==
20c0: 31 20 29 3b 0a 20 20 69 66 28 20 65 54 79 70 65  1 );.  if( eType
20d0: 3d 3d 53 51 4c 49 54 45 5f 4e 55 4c 4c 20 29 20  ==SQLITE_NULL ) 
20e0: 72 65 74 75 72 6e 3b 0a 20 20 68 61 73 68 5f 69  return;.  hash_i
20f0: 6e 69 74 28 26 63 78 29 3b 0a 20 20 69 66 28 20  nit(&cx);.  if( 
2100: 65 54 79 70 65 3d 3d 53 51 4c 49 54 45 5f 42 4c  eType==SQLITE_BL
2110: 4f 42 20 29 7b 0a 20 20 20 20 68 61 73 68 5f 73  OB ){.    hash_s
2120: 74 65 70 28 26 63 78 2c 20 73 71 6c 69 74 65 33  tep(&cx, sqlite3
2130: 5f 76 61 6c 75 65 5f 62 6c 6f 62 28 61 72 67 76  _value_blob(argv
2140: 5b 30 5d 29 2c 20 6e 42 79 74 65 29 3b 0a 20 20  [0]), nByte);.  
2150: 7d 65 6c 73 65 7b 0a 20 20 20 20 68 61 73 68 5f  }else{.    hash_
2160: 73 74 65 70 28 26 63 78 2c 20 73 71 6c 69 74 65  step(&cx, sqlite
2170: 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 72 67  3_value_text(arg
2180: 76 5b 30 5d 29 2c 20 6e 42 79 74 65 29 3b 0a 20  v[0]), nByte);. 
2190: 20 7d 0a 20 20 68 61 73 68 5f 66 69 6e 69 73 68   }.  hash_finish
21a0: 28 26 63 78 2c 20 7a 4f 75 74 29 3b 0a 20 20 73  (&cx, zOut);.  s
21b0: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65  qlite3_result_te
21c0: 78 74 28 63 6f 6e 74 65 78 74 2c 20 7a 4f 75 74  xt(context, zOut
21d0: 2c 20 34 30 2c 20 53 51 4c 49 54 45 5f 54 52 41  , 40, SQLITE_TRA
21e0: 4e 53 49 45 4e 54 29 3b 0a 7d 0a 0a 2f 2a 0a 2a  NSIENT);.}../*.*
21f0: 2a 20 49 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  * Implementation
2200: 20 6f 66 20 74 68 65 20 73 68 61 31 5f 71 75 65   of the sha1_que
2210: 72 79 28 53 51 4c 29 20 66 75 6e 63 74 69 6f 6e  ry(SQL) function
2220: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e  ..**.** This fun
2230: 63 74 69 6f 6e 20 63 6f 6d 70 69 6c 65 73 20 61  ction compiles a
2240: 6e 64 20 72 75 6e 73 20 74 68 65 20 53 51 4c 20  nd runs the SQL 
2250: 73 74 61 74 65 6d 65 6e 74 28 73 29 20 67 69 76  statement(s) giv
2260: 65 6e 20 69 6e 20 74 68 65 0a 2a 2a 20 61 72 67  en in the.** arg
2270: 75 6d 65 6e 74 2e 20 54 68 65 20 72 65 73 75 6c  ument. The resul
2280: 74 73 20 61 72 65 20 68 61 73 68 65 64 20 75 73  ts are hashed us
2290: 69 6e 67 20 53 48 41 31 20 61 6e 64 20 74 68 61  ing SHA1 and tha
22a0: 74 20 68 61 73 68 20 69 73 20 72 65 74 75 72 6e  t hash is return
22b0: 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6f 72  ed..**.** The or
22c0: 69 67 69 6e 61 6c 20 53 51 4c 20 74 65 78 74 20  iginal SQL text 
22d0: 69 73 20 69 6e 63 6c 75 64 65 64 20 61 73 20 70  is included as p
22e0: 61 72 74 20 6f 66 20 74 68 65 20 68 61 73 68 2e  art of the hash.
22f0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 68 61 73 68 20  .**.** The hash 
2300: 69 73 20 6e 6f 74 20 6a 75 73 74 20 61 20 63 6f  is not just a co
2310: 6e 63 61 74 65 6e 61 74 69 6f 6e 20 6f 66 20 74  ncatenation of t
2320: 68 65 20 6f 75 74 70 75 74 73 2e 20 20 45 61 63  he outputs.  Eac
2330: 68 20 71 75 65 72 79 0a 2a 2a 20 69 73 20 64 65  h query.** is de
2340: 6c 69 6d 69 74 65 64 20 61 6e 64 20 65 61 63 68  limited and each
2350: 20 72 6f 77 20 61 6e 64 20 76 61 6c 75 65 20 77   row and value w
2360: 69 74 68 69 6e 20 74 68 65 20 71 75 65 72 79 20  ithin the query 
2370: 69 73 20 64 65 6c 69 6d 69 74 65 64 2c 0a 2a 2a  is delimited,.**
2380: 20 77 69 74 68 20 61 6c 6c 20 76 61 6c 75 65 73   with all values
2390: 20 62 65 69 6e 67 20 6d 61 72 6b 65 64 20 77 69   being marked wi
23a0: 74 68 20 74 68 65 69 72 20 64 61 74 61 74 79 70  th their datatyp
23b0: 65 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  es..*/.static vo
23c0: 69 64 20 73 68 61 31 51 75 65 72 79 46 75 6e 63  id sha1QueryFunc
23d0: 28 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  (.  sqlite3_cont
23e0: 65 78 74 20 2a 63 6f 6e 74 65 78 74 2c 0a 20 20  ext *context,.  
23f0: 69 6e 74 20 61 72 67 63 2c 0a 20 20 73 71 6c 69  int argc,.  sqli
2400: 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 72 67 76  te3_value **argv
2410: 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  .){.  sqlite3 *d
2420: 62 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  b = sqlite3_cont
2430: 65 78 74 5f 64 62 5f 68 61 6e 64 6c 65 28 63 6f  ext_db_handle(co
2440: 6e 74 65 78 74 29 3b 0a 20 20 63 6f 6e 73 74 20  ntext);.  const 
2450: 63 68 61 72 20 2a 7a 53 71 6c 20 3d 20 28 63 6f  char *zSql = (co
2460: 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65  nst char*)sqlite
2470: 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 61 72 67  3_value_text(arg
2480: 76 5b 30 5d 29 3b 0a 20 20 73 71 6c 69 74 65 33  v[0]);.  sqlite3
2490: 5f 73 74 6d 74 20 2a 70 53 74 6d 74 20 3d 20 30  _stmt *pStmt = 0
24a0: 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b 20 20 20  ;.  int nCol;   
24b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
24d0: 75 6d 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75  umns in the resu
24e0: 6c 74 20 73 65 74 20 2a 2f 0a 20 20 69 6e 74 20  lt set */.  int 
24f0: 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  i;              
2500: 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20          /* Loop 
2510: 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74  counter */.  int
2520: 20 72 63 3b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20   rc;.  int n;.  
2530: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b 0a 20  const char *z;. 
2540: 20 53 48 41 31 43 6f 6e 74 65 78 74 20 63 78 3b   SHA1Context cx;
2550: 0a 20 20 63 68 61 72 20 7a 4f 75 74 5b 34 34 5d  .  char zOut[44]
2560: 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 61 72 67  ;..  assert( arg
2570: 63 3d 3d 31 20 29 3b 0a 20 20 69 66 28 20 7a 53  c==1 );.  if( zS
2580: 71 6c 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b 0a  ql==0 ) return;.
2590: 20 20 68 61 73 68 5f 69 6e 69 74 28 26 63 78 29    hash_init(&cx)
25a0: 3b 0a 20 20 77 68 69 6c 65 28 20 7a 53 71 6c 5b  ;.  while( zSql[
25b0: 30 5d 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  0] ){.    rc = s
25c0: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
25d0: 32 28 64 62 2c 20 7a 53 71 6c 2c 20 2d 31 2c 20  2(db, zSql, -1, 
25e0: 26 70 53 74 6d 74 2c 20 26 7a 53 71 6c 29 3b 0a  &pStmt, &zSql);.
25f0: 20 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20      if( rc ){.  
2600: 20 20 20 20 63 68 61 72 20 2a 7a 4d 73 67 20 3d      char *zMsg =
2610: 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
2620: 28 22 65 72 72 6f 72 20 53 51 4c 20 73 74 61 74  ("error SQL stat
2630: 65 6d 65 6e 74 20 5b 25 73 5d 3a 20 25 73 22 2c  ement [%s]: %s",
2640: 0a 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 20 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65      zSql, sqlite
2670: 33 5f 65 72 72 6d 73 67 28 64 62 29 29 3b 0a 20  3_errmsg(db));. 
2680: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e       sqlite3_fin
2690: 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20  alize(pStmt);.  
26a0: 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75      sqlite3_resu
26b0: 6c 74 5f 65 72 72 6f 72 28 63 6f 6e 74 65 78 74  lt_error(context
26c0: 2c 20 7a 4d 73 67 2c 20 2d 31 29 3b 0a 20 20 20  , zMsg, -1);.   
26d0: 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
26e0: 7a 4d 73 67 29 3b 0a 20 20 20 20 20 20 72 65 74  zMsg);.      ret
26f0: 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  urn;.    }.    i
2700: 66 28 20 21 73 71 6c 69 74 65 33 5f 73 74 6d 74  f( !sqlite3_stmt
2710: 5f 72 65 61 64 6f 6e 6c 79 28 70 53 74 6d 74 29  _readonly(pStmt)
2720: 20 29 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a   ){.      char *
2730: 7a 4d 73 67 20 3d 20 73 71 6c 69 74 65 33 5f 6d  zMsg = sqlite3_m
2740: 70 72 69 6e 74 66 28 22 6e 6f 6e 2d 71 75 65 72  printf("non-quer
2750: 79 3a 20 5b 25 73 5d 22 2c 20 73 71 6c 69 74 65  y: [%s]", sqlite
2760: 33 5f 73 71 6c 28 70 53 74 6d 74 29 29 3b 0a 20  3_sql(pStmt));. 
2770: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e       sqlite3_fin
2780: 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b 0a 20 20  alize(pStmt);.  
2790: 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75      sqlite3_resu
27a0: 6c 74 5f 65 72 72 6f 72 28 63 6f 6e 74 65 78 74  lt_error(context
27b0: 2c 20 7a 4d 73 67 2c 20 2d 31 29 3b 0a 20 20 20  , zMsg, -1);.   
27c0: 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
27d0: 7a 4d 73 67 29 3b 0a 20 20 20 20 20 20 72 65 74  zMsg);.      ret
27e0: 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e  urn;.    }.    n
27f0: 43 6f 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f  Col = sqlite3_co
2800: 6c 75 6d 6e 5f 63 6f 75 6e 74 28 70 53 74 6d 74  lumn_count(pStmt
2810: 29 3b 0a 20 20 20 20 7a 20 3d 20 73 71 6c 69 74  );.    z = sqlit
2820: 65 33 5f 73 71 6c 28 70 53 74 6d 74 29 3b 0a 20  e3_sql(pStmt);. 
2830: 20 20 20 6e 20 3d 20 28 69 6e 74 29 73 74 72 6c     n = (int)strl
2840: 65 6e 28 7a 29 3b 0a 20 20 20 20 68 61 73 68 5f  en(z);.    hash_
2850: 73 74 65 70 5f 76 66 6f 72 6d 61 74 28 26 63 78  step_vformat(&cx
2860: 2c 22 53 25 64 3a 22 2c 6e 29 3b 0a 20 20 20 20  ,"S%d:",n);.    
2870: 68 61 73 68 5f 73 74 65 70 28 26 63 78 2c 28 75  hash_step(&cx,(u
2880: 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 29 7a 2c  nsigned char*)z,
2890: 6e 29 3b 0a 0a 20 20 20 20 2f 2a 20 43 6f 6d 70  n);..    /* Comp
28a0: 75 74 65 20 61 20 68 61 73 68 20 6f 76 65 72 20  ute a hash over 
28b0: 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  the result of th
28c0: 65 20 71 75 65 72 79 20 2a 2f 0a 20 20 20 20 77  e query */.    w
28d0: 68 69 6c 65 28 20 53 51 4c 49 54 45 5f 52 4f 57  hile( SQLITE_ROW
28e0: 3d 3d 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70  ==sqlite3_step(p
28f0: 53 74 6d 74 29 20 29 7b 0a 20 20 20 20 20 20 68  Stmt) ){.      h
2900: 61 73 68 5f 73 74 65 70 28 26 63 78 2c 28 63 6f  ash_step(&cx,(co
2910: 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
2920: 72 2a 29 22 52 22 2c 31 29 3b 0a 20 20 20 20 20  r*)"R",1);.     
2930: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 43 6f 6c   for(i=0; i<nCol
2940: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; i++){.        
2950: 73 77 69 74 63 68 28 20 73 71 6c 69 74 65 33 5f  switch( sqlite3_
2960: 63 6f 6c 75 6d 6e 5f 74 79 70 65 28 70 53 74 6d  column_type(pStm
2970: 74 2c 69 29 20 29 7b 0a 20 20 20 20 20 20 20 20  t,i) ){.        
2980: 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f 4e 55    case SQLITE_NU
2990: 4c 4c 3a 20 7b 0a 20 20 20 20 20 20 20 20 20 20  LL: {.          
29a0: 20 20 68 61 73 68 5f 73 74 65 70 28 26 63 78 2c    hash_step(&cx,
29b0: 20 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64   (const unsigned
29c0: 20 63 68 61 72 2a 29 22 4e 22 2c 31 29 3b 0a 20   char*)"N",1);. 
29d0: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
29e0: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
29f0: 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51 4c          case SQL
2a00: 49 54 45 5f 49 4e 54 45 47 45 52 3a 20 7b 0a 20  ITE_INTEGER: {. 
2a10: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
2a20: 65 33 5f 75 69 6e 74 36 34 20 75 3b 0a 20 20 20  e3_uint64 u;.   
2a30: 20 20 20 20 20 20 20 20 20 69 6e 74 20 6a 3b 0a           int j;.
2a40: 20 20 20 20 20 20 20 20 20 20 20 20 75 6e 73 69              unsi
2a50: 67 6e 65 64 20 63 68 61 72 20 78 5b 39 5d 3b 0a  gned char x[9];.
2a60: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
2a70: 74 65 33 5f 69 6e 74 36 34 20 76 20 3d 20 73 71  te3_int64 v = sq
2a80: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74  lite3_column_int
2a90: 36 34 28 70 53 74 6d 74 2c 69 29 3b 0a 20 20 20  64(pStmt,i);.   
2aa0: 20 20 20 20 20 20 20 20 20 6d 65 6d 63 70 79 28           memcpy(
2ab0: 26 75 2c 20 26 76 2c 20 38 29 3b 0a 20 20 20 20  &u, &v, 8);.    
2ac0: 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 38 3b          for(j=8;
2ad0: 20 6a 3e 3d 31 3b 20 6a 2d 2d 29 7b 0a 20 20 20   j>=1; j--){.   
2ae0: 20 20 20 20 20 20 20 20 20 20 20 78 5b 6a 5d 20             x[j] 
2af0: 3d 20 75 20 26 20 30 78 66 66 3b 0a 20 20 20 20  = u & 0xff;.    
2b00: 20 20 20 20 20 20 20 20 20 20 75 20 3e 3e 3d 20            u >>= 
2b10: 38 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  8;.            }
2b20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 78 5b 30  .            x[0
2b30: 5d 20 3d 20 27 49 27 3b 0a 20 20 20 20 20 20 20  ] = 'I';.       
2b40: 20 20 20 20 20 68 61 73 68 5f 73 74 65 70 28 26       hash_step(&
2b50: 63 78 2c 20 78 2c 20 39 29 3b 0a 20 20 20 20 20  cx, x, 9);.     
2b60: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
2b70: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
2b80: 20 20 20 20 63 61 73 65 20 53 51 4c 49 54 45 5f      case SQLITE_
2b90: 46 4c 4f 41 54 3a 20 7b 0a 20 20 20 20 20 20 20  FLOAT: {.       
2ba0: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 75 69 6e       sqlite3_uin
2bb0: 74 36 34 20 75 3b 0a 20 20 20 20 20 20 20 20 20  t64 u;.         
2bc0: 20 20 20 69 6e 74 20 6a 3b 0a 20 20 20 20 20 20     int j;.      
2bd0: 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 63        unsigned c
2be0: 68 61 72 20 78 5b 39 5d 3b 0a 20 20 20 20 20 20  har x[9];.      
2bf0: 20 20 20 20 20 20 64 6f 75 62 6c 65 20 72 20 3d        double r =
2c00: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
2c10: 64 6f 75 62 6c 65 28 70 53 74 6d 74 2c 69 29 3b  double(pStmt,i);
2c20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6d 65 6d  .            mem
2c30: 63 70 79 28 26 75 2c 20 26 72 2c 20 38 29 3b 0a  cpy(&u, &r, 8);.
2c40: 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 28              for(
2c50: 6a 3d 38 3b 20 6a 3e 3d 31 3b 20 6a 2d 2d 29 7b  j=8; j>=1; j--){
2c60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 78  .              x
2c70: 5b 6a 5d 20 3d 20 75 20 26 20 30 78 66 66 3b 0a  [j] = u & 0xff;.
2c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 20                u 
2c90: 3e 3e 3d 20 38 3b 0a 20 20 20 20 20 20 20 20 20  >>= 8;.         
2ca0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
2cb0: 20 78 5b 30 5d 20 3d 20 27 46 27 3b 0a 20 20 20   x[0] = 'F';.   
2cc0: 20 20 20 20 20 20 20 20 20 68 61 73 68 5f 73 74           hash_st
2cd0: 65 70 28 26 63 78 2c 78 2c 39 29 3b 0a 20 20 20  ep(&cx,x,9);.   
2ce0: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
2cf0: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
2d00: 20 20 20 20 20 20 63 61 73 65 20 53 51 4c 49 54        case SQLIT
2d10: 45 5f 54 45 58 54 3a 20 7b 0a 20 20 20 20 20 20  E_TEXT: {.      
2d20: 20 20 20 20 20 20 69 6e 74 20 6e 32 20 3d 20 73        int n2 = s
2d30: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 79  qlite3_column_by
2d40: 74 65 73 28 70 53 74 6d 74 2c 20 69 29 3b 0a 20  tes(pStmt, i);. 
2d50: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74             const
2d60: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
2d70: 7a 32 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c  z2 = sqlite3_col
2d80: 75 6d 6e 5f 74 65 78 74 28 70 53 74 6d 74 2c 20  umn_text(pStmt, 
2d90: 69 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  i);.            
2da0: 68 61 73 68 5f 73 74 65 70 5f 76 66 6f 72 6d 61  hash_step_vforma
2db0: 74 28 26 63 78 2c 22 54 25 64 3a 22 2c 6e 32 29  t(&cx,"T%d:",n2)
2dc0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 68 61  ;.            ha
2dd0: 73 68 5f 73 74 65 70 28 26 63 78 2c 20 7a 32 2c  sh_step(&cx, z2,
2de0: 20 6e 32 29 3b 0a 20 20 20 20 20 20 20 20 20 20   n2);.          
2df0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20    break;.       
2e00: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 63     }.          c
2e10: 61 73 65 20 53 51 4c 49 54 45 5f 42 4c 4f 42 3a  ase SQLITE_BLOB:
2e20: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69   {.            i
2e30: 6e 74 20 6e 32 20 3d 20 73 71 6c 69 74 65 33 5f  nt n2 = sqlite3_
2e40: 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 70 53 74  column_bytes(pSt
2e50: 6d 74 2c 20 69 29 3b 0a 20 20 20 20 20 20 20 20  mt, i);.        
2e60: 20 20 20 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e      const unsign
2e70: 65 64 20 63 68 61 72 20 2a 7a 32 20 3d 20 73 71  ed char *z2 = sq
2e80: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f  lite3_column_blo
2e90: 62 28 70 53 74 6d 74 2c 20 69 29 3b 0a 20 20 20  b(pStmt, i);.   
2ea0: 20 20 20 20 20 20 20 20 20 68 61 73 68 5f 73 74           hash_st
2eb0: 65 70 5f 76 66 6f 72 6d 61 74 28 26 63 78 2c 22  ep_vformat(&cx,"
2ec0: 42 25 64 3a 22 2c 6e 32 29 3b 0a 20 20 20 20 20  B%d:",n2);.     
2ed0: 20 20 20 20 20 20 20 68 61 73 68 5f 73 74 65 70         hash_step
2ee0: 28 26 63 78 2c 20 7a 32 2c 20 6e 32 29 3b 0a 20  (&cx, z2, n2);. 
2ef0: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
2f00: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
2f10: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
2f20: 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
2f30: 33 5f 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74  3_finalize(pStmt
2f40: 29 3b 0a 20 20 7d 0a 20 20 68 61 73 68 5f 66 69  );.  }.  hash_fi
2f50: 6e 69 73 68 28 26 63 78 2c 20 7a 4f 75 74 29 3b  nish(&cx, zOut);
2f60: 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  .  sqlite3_resul
2f70: 74 5f 74 65 78 74 28 63 6f 6e 74 65 78 74 2c 20  t_text(context, 
2f80: 7a 4f 75 74 2c 20 34 30 2c 20 53 51 4c 49 54 45  zOut, 40, SQLITE
2f90: 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 7d 0a 0a  _TRANSIENT);.}..
2fa0: 0a 23 69 66 64 65 66 20 5f 57 49 4e 33 32 0a 5f  .#ifdef _WIN32._
2fb0: 5f 64 65 63 6c 73 70 65 63 28 64 6c 6c 65 78 70  _declspec(dllexp
2fc0: 6f 72 74 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20  ort).#endif.int 
2fd0: 73 71 6c 69 74 65 33 5f 73 68 61 5f 69 6e 69 74  sqlite3_sha_init
2fe0: 28 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c  (.  sqlite3 *db,
2ff0: 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d  .  char **pzErrM
3000: 73 67 2c 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69  sg,.  const sqli
3010: 74 65 33 5f 61 70 69 5f 72 6f 75 74 69 6e 65 73  te3_api_routines
3020: 20 2a 70 41 70 69 0a 29 7b 0a 20 20 69 6e 74 20   *pApi.){.  int 
3030: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
3040: 20 20 53 51 4c 49 54 45 5f 45 58 54 45 4e 53 49    SQLITE_EXTENSI
3050: 4f 4e 5f 49 4e 49 54 32 28 70 41 70 69 29 3b 0a  ON_INIT2(pApi);.
3060: 20 20 28 76 6f 69 64 29 70 7a 45 72 72 4d 73 67    (void)pzErrMsg
3070: 3b 20 20 2f 2a 20 55 6e 75 73 65 64 20 70 61 72  ;  /* Unused par
3080: 61 6d 65 74 65 72 20 2a 2f 0a 20 20 72 63 20 3d  ameter */.  rc =
3090: 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f   sqlite3_create_
30a0: 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 22 73 68  function(db, "sh
30b0: 61 31 22 2c 20 31 2c 20 53 51 4c 49 54 45 5f 55  a1", 1, SQLITE_U
30c0: 54 46 38 2c 20 30 2c 0a 20 20 20 20 20 20 20 20  TF8, 0,.        
30d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30e0: 20 20 20 20 20 20 20 73 68 61 31 46 75 6e 63 2c         sha1Func,
30f0: 20 30 2c 20 30 29 3b 0a 20 20 69 66 28 20 72 63   0, 0);.  if( rc
3100: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
3110: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
3120: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28  create_function(
3130: 64 62 2c 20 22 73 68 61 31 5f 71 75 65 72 79 22  db, "sha1_query"
3140: 2c 20 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  , 1, SQLITE_UTF8
3150: 2c 20 30 2c 0a 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 20 20 73 68 61 31 51 75 65 72 79 46        sha1QueryF
3180: 75 6e 63 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a  unc, 0, 0);.  }.
3190: 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d 0a       return rc;.}.