Lines Matching refs:ctx
65 static enum pkcs11_rc init_ae_aes_context(struct ae_aes_context *ctx) in init_ae_aes_context() argument
70 assert(!ctx->out_data && !ctx->out_count && in init_ae_aes_context()
71 !ctx->pending_tag && !ctx->pending_size); in init_ae_aes_context()
74 pending_tag = TEE_Malloc(ctx->tag_byte_len, TEE_MALLOC_FILL_ZERO); in init_ae_aes_context()
82 ctx->pending_tag = pending_tag; in init_ae_aes_context()
83 ctx->out_data = out_data; in init_ae_aes_context()
88 static void release_ae_aes_context(struct ae_aes_context *ctx) in release_ae_aes_context() argument
92 for (n = 0; n < ctx->out_count; n++) in release_ae_aes_context()
93 TEE_Free(ctx->out_data[n].data); in release_ae_aes_context()
95 TEE_Free(ctx->out_data); in release_ae_aes_context()
96 ctx->out_data = NULL; in release_ae_aes_context()
97 ctx->out_count = 0; in release_ae_aes_context()
99 TEE_Free(ctx->pending_tag); in release_ae_aes_context()
100 ctx->pending_tag = NULL; in release_ae_aes_context()
101 ctx->pending_size = 0; in release_ae_aes_context()
118 struct ae_aes_context *ctx = session->processing->extra_ctx; in tee_ae_decrypt_update() local
137 if (ctx->pending_size + in_size <= ctx->tag_byte_len) { in tee_ae_decrypt_update()
143 TEE_MemMove(ctx->pending_tag + ctx->pending_size, in, in_size); in tee_ae_decrypt_update()
145 ctx->pending_size += in_size; in tee_ae_decrypt_update()
151 data_len = in_size + ctx->pending_size - ctx->tag_byte_len; in tee_ae_decrypt_update()
154 if (ctx->pending_size && in tee_ae_decrypt_update()
155 (ctx->pending_size + in_size) >= ctx->tag_byte_len) { in tee_ae_decrypt_update()
156 uint32_t len = MIN(data_len, ctx->pending_size); in tee_ae_decrypt_update()
159 ctx->pending_tag, len, NULL, &ct_size); in tee_ae_decrypt_update()
178 ctx->pending_tag, len, ct, &ct_size); in tee_ae_decrypt_update()
187 TEE_MemMove(ctx->pending_tag, ctx->pending_tag + len, in tee_ae_decrypt_update()
188 ctx->pending_size - len); in tee_ae_decrypt_update()
190 ctx->pending_size -= len; in tee_ae_decrypt_update()
228 if (data_len > (ctx->tag_byte_len - ctx->pending_size)) { in tee_ae_decrypt_update()
235 TEE_MemMove(ctx->pending_tag + ctx->pending_size, in tee_ae_decrypt_update()
238 ctx->pending_size += data_len; in tee_ae_decrypt_update()
243 ptr = TEE_Realloc(ctx->out_data, (ctx->out_count + 1) * in tee_ae_decrypt_update()
249 ctx->out_data = ptr; in tee_ae_decrypt_update()
250 ctx->out_data[ctx->out_count].size = ct_size; in tee_ae_decrypt_update()
251 ctx->out_data[ctx->out_count].data = ct; in tee_ae_decrypt_update()
252 ctx->out_count++; in tee_ae_decrypt_update()
264 static enum pkcs11_rc reveal_ae_data(struct ae_aes_context *ctx, in reveal_ae_data() argument
271 for (req_size = 0, n = 0; n < ctx->out_count; n++) in reveal_ae_data()
272 req_size += ctx->out_data[n].size; in reveal_ae_data()
282 for (n = 0; n < ctx->out_count; n++) { in reveal_ae_data()
283 TEE_MemMove(out_ptr, ctx->out_data[n].data, in reveal_ae_data()
284 ctx->out_data[n].size); in reveal_ae_data()
285 out_ptr += ctx->out_data[n].size; in reveal_ae_data()
288 release_ae_aes_context(ctx); in reveal_ae_data()
298 struct ae_aes_context *ctx = session->processing->extra_ctx; in tee_ae_decrypt_final() local
310 if (!ctx->pending_tag) in tee_ae_decrypt_final()
311 return reveal_ae_data(ctx, out, out_size); in tee_ae_decrypt_final()
313 if (ctx->pending_size != ctx->tag_byte_len) { in tee_ae_decrypt_final()
315 ctx->pending_size, ctx->tag_byte_len); in tee_ae_decrypt_final()
323 ctx->pending_tag, ctx->tag_byte_len); in tee_ae_decrypt_final()
334 ctx->pending_tag, ctx->tag_byte_len); in tee_ae_decrypt_final()
339 TEE_Free(ctx->pending_tag); in tee_ae_decrypt_final()
340 ctx->pending_tag = NULL; in tee_ae_decrypt_final()
349 tmp_ptr = TEE_Realloc(ctx->out_data, (ctx->out_count + 1) * in tee_ae_decrypt_final()
355 ctx->out_data = tmp_ptr; in tee_ae_decrypt_final()
356 ctx->out_data[ctx->out_count].size = data_size; in tee_ae_decrypt_final()
357 ctx->out_data[ctx->out_count].data = data_ptr; in tee_ae_decrypt_final()
358 ctx->out_count++; in tee_ae_decrypt_final()
363 rc = reveal_ae_data(ctx, out, out_size); in tee_ae_decrypt_final()
374 struct ae_aes_context *ctx = session->processing->extra_ctx; in tee_ae_encrypt_final() local
388 if (tag_len != ctx->tag_byte_len || in tee_ae_encrypt_final()
391 tag_len, ctx->tag_byte_len, res); in tee_ae_encrypt_final()
406 if (tag_len != ctx->tag_byte_len) { in tee_ae_encrypt_final()
549 struct ae_aes_context *ctx = session->processing->extra_ctx; in tee_release_gcm_operation() local
551 release_ae_aes_context(ctx); in tee_release_gcm_operation()
559 struct ae_aes_context *ctx = session->processing->extra_ctx; in tee_ae_reinit_gcm_operation() local
564 release_ae_aes_context(ctx); in tee_ae_reinit_gcm_operation()
566 return init_ae_aes_context(ctx); in tee_ae_reinit_gcm_operation()