30 #define RMD160_BLOCK_LENGTH 64 31 #define RMD160_DIGEST_LENGTH 20 32 #define RMD160_DIGEST_STRING_LENGTH (RMD160_DIGEST_LENGTH * 2 + 1) 35 typedef struct RMD160Context {
38 u_int8_t buffer[RMD160_BLOCK_LENGTH];
41 void RMD160Init(RMD160_CTX *);
42 void RMD160Transform(u_int32_t [5],
const u_int8_t [RMD160_BLOCK_LENGTH])
43 __attribute__((__bounded__(__minbytes__,1,5)))
44 __attribute__((__bounded__(__minbytes__,2,RMD160_BLOCK_LENGTH)));
45 void RMD160Update(RMD160_CTX *, const u_int8_t *,
size_t)
46 __attribute__((__bounded__(__string__,2,3)));
47 void RMD160Pad(RMD160_CTX *);
48 void RMD160Final(u_int8_t [RMD160_DIGEST_LENGTH], RMD160_CTX *)
49 __attribute__((__bounded__(__minbytes__,1,RMD160_DIGEST_LENGTH)));
50 char *RMD160End(RMD160_CTX *,
char *)
51 __attribute__((__bounded__(__minbytes__,2,RMD160_DIGEST_STRING_LENGTH)));
52 char *RMD160File(const
char *,
char *)
53 __attribute__((__bounded__(__minbytes__,2,RMD160_DIGEST_STRING_LENGTH)));
54 char *RMD160FileChunk(const
char *,
char *, off_t, off_t)
55 __attribute__((__bounded__(__minbytes__,2,RMD160_DIGEST_STRING_LENGTH)));
56 char *RMD160Data(const u_int8_t *,
size_t,
char *)
57 __attribute__((__bounded__(__string__,1,2)))
58 __attribute__((__bounded__(__minbytes__,3,RMD160_DIGEST_STRING_LENGTH)));