update bcrypt binding
diff --git a/lib/ptlsbcrypt.c b/lib/ptlsbcrypt.c
index 2ffac7b..89da77d 100644
--- a/lib/ptlsbcrypt.c
+++ b/lib/ptlsbcrypt.c
@@ -476,13 +476,18 @@
}
}
-static void ptls_bcrypt_aead_xor_iv(ptls_aead_context_t *_ctx, const void *_bytes, size_t len)
+static void ptls_bcrypt_aead_get_iv(ptls_aead_context_t *_ctx, void *iv)
{
struct ptls_bcrypt_aead_context_t *ctx = (struct ptls_bcrypt_aead_context_t *)_ctx;
- const uint8_t *bytes = _bytes;
- for (size_t i = 0; i < len; ++i)
- ctx->bctx.iv[i] ^= bytes[i];
+ memcpy(iv, ctx->bctx.iv, ctx->super.algo->iv_size);
+}
+
+static void ptls_bcrypt_aead_set_iv(ptls_aead_context_t *_ctx, const void *iv)
+{
+ struct ptls_bcrypt_aead_context_t *ctx = (struct ptls_bcrypt_aead_context_t *)_ctx;
+
+ memcpy(ctx->bctx.iv, iv, ctx->super.algo->iv_size);
}
static int ptls_bcrypt_aead_setup_crypto(ptls_aead_context_t *_ctx, int is_enc, const void *key, const void *iv,
@@ -539,7 +544,8 @@
memcpy(ctx->bctx.iv_static, iv, ctx->super.algo->iv_size);
if (is_enc) {
ctx->super.dispose_crypto = ptls_bcrypt_aead_dispose_crypto;
- ctx->super.do_xor_iv = ptls_bcrypt_aead_xor_iv;
+ ctx->super.do_get_iv = ptls_bcrypt_aead_get_iv;
+ ctx->super.do_set_iv = ptls_bcrypt_aead_set_iv;
ctx->super.do_decrypt = NULL;
ctx->super.do_encrypt_init = ptls_bcrypt_aead_do_encrypt_init;
ctx->super.do_encrypt_update = ptls_bcrypt_aead_do_encrypt_update;