X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=tfdef.h;h=539ed42da8c9a9cfd646ef93233d3fe29c5e8f1e;hb=HEAD;hp=72c713df4764b331452e311b7c9380c3ec43cf2b;hpb=f402e6aa2dd18138ec26e9bfb340dae294637aec;p=tfcrypt.git diff --git a/tfdef.h b/tfdef.h index 72c713d..539ed42 100644 --- a/tfdef.h +++ b/tfdef.h @@ -92,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; @@ -135,9 +147,9 @@ 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