X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Fsec%2Fcipher.c;h=ba4ae981d6da8298447671086022d77927fac872;hb=1997bcac9db9a289afa5ca6d4fea4b75aef329d6;hp=22bebe605de4a736cb409b4d1976b8464cdb7a23;hpb=1693246bbcc6381e53a1cbfae1aa5322363d731e;p=bertos.git diff --git a/bertos/sec/cipher.c b/bertos/sec/cipher.c index 22bebe60..ba4ae981 100644 --- a/bertos/sec/cipher.c +++ b/bertos/sec/cipher.c @@ -64,19 +64,40 @@ static void ctr_increment(void *buf, size_t len) return; } +void cipher_ctr_step(BlockCipher *c, void *block) +{ + memcpy(block, c->buf, c->block_len); + c->enc_block(c, block); + ctr_increment(c->buf, c->block_len); +} + void cipher_ctr_encrypt(BlockCipher *c, void *block) { uint8_t temp[c->block_len]; - memcpy(temp, c->buf, c->block_len); - c->enc_block(c, temp); + cipher_ctr_step(c, temp); xor_block(block, block, temp, c->block_len); PURGE(temp); - ctr_increment(c->buf, c->block_len); } 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); +}