From 79243bffdd9b63204a45fba6268d1d48f4c37dfe Mon Sep 17 00:00:00 2001 From: rasky Date: Mon, 4 Oct 2010 18:43:14 +0000 Subject: [PATCH] SEC: add OFB mode to symmetric ciphers. git-svn-id: https://src.develer.com/svnoss/bertos/trunk@4401 38d2e660-2303-0410-9eaa-f027e97ec537 --- bertos/sec/cipher.c | 16 ++++++++++++++++ bertos/sec/cipher.h | 28 ++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/bertos/sec/cipher.c b/bertos/sec/cipher.c index 7977cc46..ba4ae981 100644 --- a/bertos/sec/cipher.c +++ b/bertos/sec/cipher.c @@ -85,3 +85,19 @@ void cipher_ctr_decrypt(BlockCipher *c, void *block) { cipher_ctr_encrypt(c, block); } + +static void ofb_step(BlockCipher *c) +{ + c->enc_block(c, c->buf); +} + +void cipher_ofb_encrypt(BlockCipher *c, void *block) +{ + ofb_step(c); + xor_block(block, block, c->buf, c->block_len); +} + +void cipher_ofb_decrypt(BlockCipher *c, void *block) +{ + cipher_ofb_encrypt(c, block); +} diff --git a/bertos/sec/cipher.h b/bertos/sec/cipher.h index 24c24b0d..845a32d2 100644 --- a/bertos/sec/cipher.h +++ b/bertos/sec/cipher.h @@ -188,4 +188,32 @@ void cipher_ctr_decrypt(BlockCipher *c, void *block); */ void cipher_ctr_step(BlockCipher *c, void *block); + +/*********************************************************************************/ +/* OFB mode */ +/*********************************************************************************/ + +/** + * Initialize OFB by setting the IV. + * + * \note the memory pointed by \a iv will be used and modified by the CBC + * functions. It is caller's responsibility to keep it available until there is + * no more OFB work to do. + */ +INLINE void cipher_ofb_begin(BlockCipher *c, void *iv) +{ + c->buf = iv; +} + +/** + * Encrypt a block (in-place) using the current key in OFB mode. + */ +void cipher_ofb_encrypt(BlockCipher *c, void *block); + +/** + * Decrypt a block (in-place) using the current key in OFB mode. + */ +void cipher_ofb_decrypt(BlockCipher *c, void *block); + + #endif /* SEC_CIPHER_H */ -- 2.25.1