X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=tfe.c;h=eea50d36e46c45cc81b8e5ce0ac7be4bc8164c10;hb=e16562d4f4180c1364181c92d6d8f285f322f12c;hp=544bcc7bed097f853140bb3c1f78ff3d5a6be8ce;hpb=efa545d64b910923248233618e774ca3b87efebb;p=tfcrypt.git diff --git a/tfe.c b/tfe.c index 544bcc7..eea50d3 100644 --- a/tfe.c +++ b/tfe.c @@ -6,11 +6,7 @@ void tfe_init_iv(struct tfe_stream *tfe, const void *key, const void *iv) { memset(tfe, 0, sizeof(struct tfe_stream)); memcpy(tfe->key, key, TF_KEY_SIZE); - data_to_words(tfe->key, TF_KEY_SIZE); - if (iv) { - memcpy(tfe->iv, iv, TF_BLOCK_SIZE); - data_to_words(tfe->iv, TF_BLOCK_SIZE); - } + if (iv) memcpy(tfe->iv, iv, TF_BLOCK_SIZE); tfe->carry_bytes = 0; } @@ -53,9 +49,13 @@ void tfe_emit(void *dst, size_t szdst, struct tfe_stream *tfe) } if (sz) { + TF_UNIT_TYPE t[TF_NR_BLOCK_UNITS]; + tf_encrypt_rawblk(tfe->iv, tfe->iv, tfe->key); - memcpy(udst, tfe->iv, sz); - data_to_words(udst, TF_BLOCK_SIZE); + memcpy(t, tfe->iv, TF_BLOCK_SIZE); + data_to_words(t, TF_BLOCK_SIZE); + memcpy(udst, t, sz); + memset(t, 0, TF_BLOCK_SIZE); udst = (TF_BYTE_TYPE *)tfe->iv; tfe->carry_bytes = TF_BLOCK_SIZE-sz; memcpy(tfe->carry_block, udst+sz, tfe->carry_bytes);