Hex Artifact Content
Not logged in

Artifact b528b5772acba1e1bd16550924450214c63aad8d:


0000: 2f 2a 20 61 69 63 68 2e 68 20 2a 2f 0a 23 69 66  /* aich.h */.#if
0010: 6e 64 65 66 20 41 49 43 48 5f 48 0a 23 64 65 66  ndef AICH_H.#def
0020: 69 6e 65 20 41 49 43 48 5f 48 0a 23 69 6e 63 6c  ine AICH_H.#incl
0030: 75 64 65 20 22 73 68 61 31 2e 68 22 0a 0a 23 69  ude "sha1.h"..#i
0040: 66 64 65 66 20 5f 5f 63 70 6c 75 73 70 6c 75 73  fdef __cplusplus
0050: 0a 65 78 74 65 72 6e 20 22 43 22 20 7b 0a 23 65  .extern "C" {.#e
0060: 6e 64 69 66 0a 0a 2f 2a 20 61 6c 67 6f 72 69 74  ndif../* algorit
0070: 68 6d 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 74 79  hm context */.ty
0080: 70 65 64 65 66 20 73 74 72 75 63 74 20 61 69 63  pedef struct aic
0090: 68 5f 63 74 78 0a 7b 0a 09 73 68 61 31 5f 63 74  h_ctx.{..sha1_ct
00a0: 78 20 73 68 61 31 5f 63 6f 6e 74 65 78 74 3b 20  x sha1_context; 
00b0: 2f 2a 20 63 6f 6e 74 65 78 74 20 75 73 65 64 20  /* context used 
00c0: 74 6f 20 68 61 73 68 20 74 72 65 65 20 6c 65 61  to hash tree lea
00d0: 76 65 73 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e  ves */.#if defin
00e0: 65 64 28 55 53 45 5f 4f 50 45 4e 53 53 4c 29 20  ed(USE_OPENSSL) 
00f0: 7c 7c 20 64 65 66 69 6e 65 64 28 4f 50 45 4e 53  || defined(OPENS
0100: 53 4c 5f 52 55 4e 54 49 4d 45 29 0a 09 75 6e 73  SL_RUNTIME)..uns
0110: 69 67 6e 65 64 20 6c 6f 6e 67 20 72 65 73 65 72  igned long reser
0120: 76 65 64 3b 20 2f 2a 20 6e 65 65 64 20 6d 6f 72  ved; /* need mor
0130: 65 20 73 70 61 63 65 20 66 6f 72 20 6f 70 65 6e  e space for open
0140: 73 73 6c 20 73 68 61 31 20 63 6f 6e 74 65 78 74  ssl sha1 context
0150: 20 2a 2f 0a 09 76 6f 69 64 20 2a 73 68 61 5f 69   */..void *sha_i
0160: 6e 69 74 2c 20 2a 73 68 61 5f 75 70 64 61 74 65  nit, *sha_update
0170: 2c 20 2a 73 68 61 5f 66 69 6e 61 6c 3b 0a 23 65  , *sha_final;.#e
0180: 6e 64 69 66 0a 09 75 6e 73 69 67 6e 65 64 20 69  ndif..unsigned i
0190: 6e 64 65 78 3b 20 20 20 20 20 20 20 20 2f 2a 20  ndex;        /* 
01a0: 61 6c 67 6f 72 69 74 68 6d 20 70 6f 73 69 74 69  algorithm positi
01b0: 6f 6e 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e  on in the curren
01c0: 74 20 65 64 32 6b 20 63 68 75 6e 6b 20 2a 2f 0a  t ed2k chunk */.
01d0: 09 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 28  .unsigned char (
01e0: 2a 62 6c 6f 63 6b 5f 68 61 73 68 65 73 29 5b 73  *block_hashes)[s
01f0: 68 61 31 5f 68 61 73 68 5f 73 69 7a 65 5d 3b 0a  ha1_hash_size];.
0200: 0a 09 76 6f 69 64 2a 2a 20 63 68 75 6e 6b 5f 74  ..void** chunk_t
0210: 61 62 6c 65 3b 20 20 20 20 2f 2a 20 74 61 62 6c  able;    /* tabl
0220: 65 20 6f 66 20 63 68 75 6e 6b 20 68 61 73 68 65  e of chunk hashe
0230: 73 20 2a 2f 0a 09 73 69 7a 65 5f 74 20 61 6c 6c  s */..size_t all
0240: 6f 63 61 74 65 64 3b 20 20 20 20 20 20 2f 2a 20  ocated;      /* 
0250: 61 6c 6c 6f 63 61 74 65 64 20 73 69 7a 65 20 6f  allocated size o
0260: 66 20 74 68 65 20 63 68 75 6e 6b 5f 74 61 62 6c  f the chunk_tabl
0270: 65 20 2a 2f 0a 09 73 69 7a 65 5f 74 20 63 68 75  e */..size_t chu
0280: 6e 6b 73 5f 6e 75 6d 62 65 72 3b 20 20 2f 2a 20  nks_number;  /* 
0290: 6e 75 6d 62 65 72 20 6f 66 20 65 64 32 6b 20 63  number of ed2k c
02a0: 68 75 6e 6b 73 20 68 61 73 68 65 64 20 2a 2f 0a  hunks hashed */.
02b0: 09 69 6e 74 20 65 72 72 6f 72 3b 20 20 20 20 20  .int error;     
02c0: 20 20 20 20 20 20 20 20 2f 2a 20 6e 6f 6e 2d 7a          /* non-z
02d0: 65 72 6f 20 69 66 20 61 20 6d 65 6d 6f 72 79 20  ero if a memory 
02e0: 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 2c 20  error occurred, 
02f0: 30 20 6f 74 68 65 72 77 69 73 65 20 2a 2f 0a 7d  0 otherwise */.}
0300: 20 61 69 63 68 5f 63 74 78 3b 0a 0a 2f 2a 20 68   aich_ctx;../* h
0310: 61 73 68 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  ash functions */
0320: 0a 0a 76 6f 69 64 20 72 68 61 73 68 5f 61 69 63  ..void rhash_aic
0330: 68 5f 69 6e 69 74 28 61 69 63 68 5f 63 74 78 20  h_init(aich_ctx 
0340: 2a 63 74 78 29 3b 0a 76 6f 69 64 20 72 68 61 73  *ctx);.void rhas
0350: 68 5f 61 69 63 68 5f 75 70 64 61 74 65 28 61 69  h_aich_update(ai
0360: 63 68 5f 63 74 78 20 2a 63 74 78 2c 20 63 6f 6e  ch_ctx *ctx, con
0370: 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
0380: 2a 20 6d 73 67 2c 20 73 69 7a 65 5f 74 20 73 69  * msg, size_t si
0390: 7a 65 29 3b 0a 76 6f 69 64 20 72 68 61 73 68 5f  ze);.void rhash_
03a0: 61 69 63 68 5f 66 69 6e 61 6c 28 61 69 63 68 5f  aich_final(aich_
03b0: 63 74 78 20 2a 63 74 78 2c 20 75 6e 73 69 67 6e  ctx *ctx, unsign
03c0: 65 64 20 63 68 61 72 20 72 65 73 75 6c 74 5b 32  ed char result[2
03d0: 30 5d 29 3b 0a 0a 2f 2a 20 43 6c 65 61 6e 20 75  0]);../* Clean u
03e0: 70 20 63 6f 6e 74 65 78 74 20 62 79 20 66 72 65  p context by fre
03f0: 65 69 6e 67 20 61 6c 6c 6f 63 61 74 65 64 20 6d  eing allocated m
0400: 65 6d 6f 72 79 2e 0a 20 2a 20 54 68 65 20 66 75  emory.. * The fu
0410: 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65 64  nction is called
0420: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 62   automatically b
0430: 79 20 72 68 61 73 68 5f 61 69 63 68 5f 66 69 6e  y rhash_aich_fin
0440: 61 6c 2e 0a 20 2a 20 53 68 61 6c 6c 20 62 65 20  al.. * Shall be 
0450: 63 61 6c 6c 65 64 20 77 68 65 6e 20 61 62 6f 72  called when abor
0460: 74 69 6e 67 20 68 61 73 68 20 63 61 6c 63 75 6c  ting hash calcul
0470: 61 74 69 6f 6e 73 2e 20 2a 2f 0a 76 6f 69 64 20  ations. */.void 
0480: 72 68 61 73 68 5f 61 69 63 68 5f 63 6c 65 61 6e  rhash_aich_clean
0490: 75 70 28 61 69 63 68 5f 63 74 78 2a 20 63 74 78  up(aich_ctx* ctx
04a0: 29 3b 0a 0a 23 69 66 64 65 66 20 5f 5f 63 70 6c  );..#ifdef __cpl
04b0: 75 73 70 6c 75 73 0a 7d 20 2f 2a 20 65 78 74 65  usplus.} /* exte
04c0: 72 6e 20 22 43 22 20 2a 2f 0a 23 65 6e 64 69 66  rn "C" */.#endif
04d0: 20 2f 2a 20 5f 5f 63 70 6c 75 73 70 6c 75 73 20   /* __cplusplus 
04e0: 2a 2f 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 41 49  */..#endif /* AI
04f0: 43 48 5f 48 20 2a 2f 0a                          CH_H */.