#define TF_BLOCK_SIZE (TF_SIZE_UNIT * TF_NR_BLOCK_UNITS)
#define TF_KEY_SIZE (TF_SIZE_UNIT * TF_NR_KEY_UNITS)
+#define TF_NR_TWEAK_UNITS 2
+#define TF_NR_TWEAK_BITS 128
+#define TF_TWEAK_SIZE (TF_SIZE_UNIT * TF_NR_TWEAK_UNITS)
+#define TF_TWEAKEY_SIZE (TF_KEY_SIZE - (2 * TF_TWEAK_SIZE))
+#define TF_NR_TWEAKEY_BITS (TF_NR_KEY_BITS - (2 * TF_NR_TWEAK_BITS))
#define TF_TWEAK_WORD1 (TF_NR_KEY_UNITS-3)
#define TF_TWEAK_WORD2 (TF_NR_KEY_UNITS-2)
#define TF_TWEAK_WORD3 (TF_NR_KEY_UNITS-1)
#endif
}
-static inline void ctr_inc(TF_UNIT_TYPE *x, size_t l)
+static inline void ctr_inc(TF_UNIT_TYPE *x, size_t xl)
{
- size_t i;
+ size_t z;
- for (i = 0; i < l; i++) {
- x[i] = ((x[i] + (TF_UNIT_TYPE)1) & ((TF_UNIT_TYPE)~0));
- if (x[i]) break;
+ for (z = 0; z < xl; z++) {
+ x[z] = ((x[z] + (TF_UNIT_TYPE)1) & ((TF_UNIT_TYPE)~0));
+ if (x[z]) break;
}
}
-static inline void ctr_add(TF_UNIT_TYPE *x, const TF_UNIT_TYPE *y, size_t l)
+static inline void ctr_add(TF_UNIT_TYPE *x, size_t xl, const TF_UNIT_TYPE *y, size_t yl)
{
- size_t i, f = 0;
+ size_t z, cf;
TF_UNIT_TYPE t;
- for (i = 0; i < l; i++) {
- t = x[i];
- x[i] += y[i]; x[i] &= ((TF_UNIT_TYPE)~0);
- if (x[i] < t) {
-_again: f++;
- t = x[f-i];
- x[f-i]++;
- if (x[f-i] < t) goto _again;
- else f = 0;
- }
+ for (z = 0, cf = 0; z < xl; z++) {
+ t = x[z] + (z >= yl ? (TF_UNIT_TYPE)0 : y[z]) + cf;
+ if (cf) cf = (x[z] >= t ? 1 : 0);
+ else cf = (x[z] > t ? 1 : 0);
+ x[z] = t;
}
}
void tf_ctr_set(void *ctr, const void *sctr, size_t sctrsz);
void tf_ctr_crypt(const void *key, void *ctr, void *out, const void *in, size_t sz);
+
+void tf_tweak_set(void *key, const void *tweak);
+
void tf_stream_crypt(struct tfe_stream *tfe, void *out, const void *in, size_t sz);
void tf_ecb_encrypt(const void *key, void *out, const void *in, size_t sz);
void tf_ecb_decrypt(const void *key, void *out, const void *in, size_t sz);