Lines Matching refs:state

20 bool __weak pico_sha256_lock(pico_sha256_state_t *state) {  in pico_sha256_lock()  argument
23 state->locked = true; in pico_sha256_lock()
27 void __weak pico_sha256_unlock(pico_sha256_state_t *state) { in pico_sha256_unlock() argument
28 assert(state->locked); in pico_sha256_unlock()
30 state->locked = false; in pico_sha256_unlock()
33 int pico_sha256_try_start(pico_sha256_state_t *state, enum sha256_endianness endianness, bool use_d… in pico_sha256_try_start() argument
34 memset(state, 0, sizeof(*state)); in pico_sha256_try_start()
35 if (!pico_sha256_lock(state)) return PICO_ERROR_RESOURCE_IN_USE; in pico_sha256_try_start()
36 state->endianness = endianness; in pico_sha256_try_start()
38 state->channel = (int8_t)dma_claim_unused_channel(false); in pico_sha256_try_start()
39 if (state->channel < 0) { in pico_sha256_try_start()
40 pico_sha256_unlock(state); in pico_sha256_try_start()
43 state->config = dma_channel_get_default_config(state->channel); in pico_sha256_try_start()
44 channel_config_set_transfer_data_size(&state->config, DMA_SIZE_8); in pico_sha256_try_start()
45 channel_config_set_read_increment(&state->config, true); in pico_sha256_try_start()
46 channel_config_set_write_increment(&state->config, false); in pico_sha256_try_start()
47 channel_config_set_dreq(&state->config, DREQ_SHA256); in pico_sha256_try_start()
50 state->channel = -1; in pico_sha256_try_start()
55 state->total_data_size = 0; in pico_sha256_try_start()
59 int pico_sha256_start_blocking_until(pico_sha256_state_t *state, enum sha256_endianness endianness,… in pico_sha256_start_blocking_until() argument
62 rc = pico_sha256_try_start(state, endianness, use_dma); in pico_sha256_start_blocking_until()
72 static void write_to_hardware(pico_sha256_state_t *state, const uint8_t *data, size_t data_size_byt… in write_to_hardware() argument
73 if (state->channel >= 0) { in write_to_hardware()
74 dma_channel_wait_for_finish_blocking(state->channel); in write_to_hardware()
78 state->channel, in write_to_hardware()
79 &state->config, in write_to_hardware()
86 if (!state->cache_used && !(((uintptr_t)data)&3u)) { in write_to_hardware()
99 state->cache.bytes[state->cache_used++] = *data++; in write_to_hardware()
100 if (state->cache_used == 4) { in write_to_hardware()
101 state->cache_used = 0; in write_to_hardware()
103 sha256_put_word(state->cache.word); in write_to_hardware()
109 static void update_internal(pico_sha256_state_t *state, const uint8_t *data, size_t data_size_bytes… in update_internal() argument
110 assert(state->locked); in update_internal()
112 …size_t bytes_left = ((state->total_data_size + (SHA256_BLOCK_SIZE_BYTES - 1)) & ~(SHA256_BLOCK_SIZ… in update_internal()
115 write_to_hardware(state, data, bytes_left); in update_internal()
116 state->total_data_size += bytes_left; in update_internal()
122 write_to_hardware(state, data, data_size_bytes); in update_internal()
123 state->total_data_size += data_size_bytes; in update_internal()
127 static void add_zero_bytes(pico_sha256_state_t *state, size_t data_size_bytes) { in add_zero_bytes() argument
132 update_internal(state, (uint8_t *)&zero, MIN(4, data_size_bytes)); in add_zero_bytes()
137 void pico_sha256_update(pico_sha256_state_t *state, const uint8_t *data, size_t data_size_bytes) { in pico_sha256_update() argument
138 update_internal(state, data, data_size_bytes); in pico_sha256_update()
141 void pico_sha256_update_blocking(pico_sha256_state_t *state, const uint8_t *data, size_t data_size_… in pico_sha256_update_blocking() argument
142 update_internal(state, data, data_size_bytes); in pico_sha256_update_blocking()
143 if (state->channel >= 0) { in pico_sha256_update_blocking()
144 dma_channel_wait_for_finish_blocking(state->channel); in pico_sha256_update_blocking()
149 static void write_padding(pico_sha256_state_t *state) { in write_padding() argument
151 …uint64_t size = (state->total_data_size + SHA256_PADDING_DATA_BYTES + (SHA256_BLOCK_SIZE_BYTES - 1… in write_padding()
152 const size_t user_data_size = state->total_data_size; in write_padding()
153 const size_t padding_size_bytes = size - state->total_data_size; in write_padding()
157 update_internal(state, &one_bit, 1); in write_padding()
160 add_zero_bytes(state, padding_size_bytes - SHA256_PADDING_DATA_BYTES); in write_padding()
164 update_internal(state, (uint8_t*)&size, sizeof(uint64_t)); // last write in write_padding()
167 void pico_sha256_finish(pico_sha256_state_t *state, sha256_result_t *out) { in pico_sha256_finish() argument
168 assert(state->locked); in pico_sha256_finish()
171 write_padding(state); in pico_sha256_finish()
172 if (state->channel >= 0) { in pico_sha256_finish()
173 dma_channel_wait_for_finish_blocking(state->channel); in pico_sha256_finish()
177 sha256_get_result(out, state->endianness); in pico_sha256_finish()
179 if (state->channel >= 0) { in pico_sha256_finish()
180 dma_channel_cleanup(state->channel); in pico_sha256_finish()
181 dma_channel_unclaim(state->channel); in pico_sha256_finish()
182 state->channel = -1; in pico_sha256_finish()
184 pico_sha256_unlock(state); in pico_sha256_finish()