SEC: extract the CTR step into a public function, for algorithms that might use it.
authorrasky <rasky@38d2e660-2303-0410-9eaa-f027e97ec537>
Wed, 29 Sep 2010 16:35:39 +0000 (16:35 +0000)
committerrasky <rasky@38d2e660-2303-0410-9eaa-f027e97ec537>
Wed, 29 Sep 2010 16:35:39 +0000 (16:35 +0000)
git-svn-id: https://src.develer.com/svnoss/bertos/trunk@4359 38d2e660-2303-0410-9eaa-f027e97ec537

bertos/sec/cipher.c
bertos/sec/cipher.h

index 22bebe605de4a736cb409b4d1976b8464cdb7a23..7977cc4632b83460dbc1cb59da77e5c22dc50773 100644 (file)
@@ -64,16 +64,21 @@ 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)
index f0f37a36e600fce33169ebdaec7075a11944c637..f67cb809d00d8a0530acb7b8069403aeee563418 100644 (file)
@@ -149,13 +149,23 @@ INLINE void cipher_ctr_begin(BlockCipher *c, void *counter)
 }
 
 /**
- * Encrypt a block (in-place) using the current key in CBC mode.
+ * Encrypt a block (in-place) using the current key in CTR mode.
  */
 void cipher_ctr_encrypt(BlockCipher *c, void *block);
 
 /**
- * Decrypt a block (in-place) using the current key in CBC mode.
+ * Decrypt a block (in-place) using the current key in CTR mode.
  */
 void cipher_ctr_decrypt(BlockCipher *c, void *block);
 
+/**
+ * Generate the crypted stream block in CTR mode for the current
+ * counter, and then bump it.
+ *
+ * This function is basically the core CTR operation, without the final
+ * XOR pass with the plaintext or ciphertext. For normal CTR usage,
+ * you never need to call it.
+ */
+void cipher_ctr_step(BlockCipher *c, void *block);
+
 #endif /* SEC_CIPHER_H */