51 broke -E logic completely, rewise it
[tfcrypt.git] / tfdef.h
diff --git a/tfdef.h b/tfdef.h
index 463e5fb7c0f4d83be1549ef8bdaa7b0666c8658c..539ed42da8c9a9cfd646ef93233d3fe29c5e8f1e 100644 (file)
--- a/tfdef.h
+++ b/tfdef.h
 #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)
@@ -87,6 +92,18 @@ static inline void data_to_words(void *p, size_t l)
 #endif
 }
 
+static inline void xor_block(void *dst, const void *src, size_t sz)
+{
+       const size_t *sx = (const size_t *)src;
+       const TF_BYTE_TYPE *usx = (const TF_BYTE_TYPE *)src;
+       size_t *dx = (size_t *)dst;
+       TF_BYTE_TYPE *udx = (TF_BYTE_TYPE *)dst;
+       size_t sl = sz;
+
+       for (sl = 0; sl < (sz / sizeof(size_t)); sl++) dx[sl] ^= sx[sl];
+       if (sz - (sl * sizeof(size_t))) for (sl *= sizeof(size_t); sl < sz; sl++) udx[sl] ^= usx[sl];
+}
+
 static inline void ctr_inc(TF_UNIT_TYPE *x, size_t xl)
 {
        size_t z;
@@ -122,14 +139,17 @@ void tf_decrypt_block(const void *key, void *out, const void *in);
 
 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);
 void tf_cbc_encrypt(const void *key, void *iv, void *out, const void *in, size_t sz);
 void tf_cbc_decrypt(const void *key, void *iv, void *out, const void *in, size_t sz);
+void tf_pcbc_encrypt(const void *key, void *iv, void *out, const void *in, size_t sz);
+void tf_pcbc_decrypt(const void *key, void *iv, void *out, const void *in, size_t sz);
 void tf_xts_encrypt(const void *keyx, const void *keyz, void *ctr, void *out, const void *in, size_t sz, size_t bpi);
 void tf_xts_decrypt(const void *keyx, const void *keyz, void *ctr, void *out, const void *in, size_t sz, size_t bpi);
-void tf_ocb_encrypt(const void *key, void *ctr, void *out, void *tag, const void *in, size_t sz, size_t bpi);
-void tf_ocb_decrypt(const void *key, void *ctr, void *out, void *tag, const void *in, size_t sz, size_t bpi);
 
 #endif