ARMEBS4  revision-26.06.2015
hash.c
Go to the documentation of this file.
1 /**
2  * \file heivs/hash.c
3  * \see heivs/hash.h
4  */
5 
6 #include "heivs/hash.h"
7 
8 status_e hash_init(struct heivs_hash_t *hash, void *state, size_t state_size)
9 {
10  status_e status;
11 
12  if (hash->state != HASH_STATE_IDLE)
13  {
14  return ERROR_AGAIN;
15  }
16 
17  if (state_size < hash->state_size)
18  {
19  return ERROR_BAD_PARAM;
20  }
21 
22  if (state == NULL)
23  {
24  return ERROR_NULL_PARAM;
25  }
26 
27  status = hash->init(hash, state, state_size);
28  if (status != NO_ERROR)
29  {
30  return status;
31  }
32 
33  hash->state = HASH_STATE_BUSY;
34 
35  return NO_ERROR;
36 }
37 
38 status_e hash_run(struct heivs_hash_t *hash, void *state, const void *data, size_t size)
39 {
40  status_e status;
41 
42  if (hash->state != HASH_STATE_BUSY)
43  {
44  return ERROR_BAD_STATE;
45  }
46 
47  status = hash->run(hash, state, data, size);
48  if (status != NO_ERROR)
49  {
50  hash->state = HASH_STATE_IDLE;
51  return status;
52  }
53 
54  return NO_ERROR;
55 }
56 
57 status_e hash_finish(struct heivs_hash_t *hash, void *state)
58 {
59  status_e status;
60 
61  if (hash->state != HASH_STATE_BUSY)
62  {
63  return ERROR_BAD_STATE;
64  }
65 
66  status = hash->finish(hash, state);
67  if (status != NO_ERROR)
68  {
69  hash->state = HASH_STATE_IDLE;
70  return status;
71  }
72 
73  hash->state = HASH_STATE_IDLE;
74 
75  return NO_ERROR;
76 }
hash abstraction
Function called at bad time.
Definition: error.h:67
Parameter unsupported.
Definition: error.h:56
Retry later.
Definition: error.h:49
status_e
Known errors.
Definition: error.h:21
No error.
Definition: error.h:28
NULL parameter.
Definition: error.h:42