4 * The counter (CTR) mode of operation for block ciphers.
\r
6 * @author Paulo S. L. M. Barreto
\r
8 * This software is hereby placed in the public domain.
\r
10 * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ''AS IS'' AND ANY EXPRESS
\r
11 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
\r
12 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
\r
13 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE
\r
14 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
\r
15 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
\r
16 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
\r
17 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
\r
18 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
\r
19 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
\r
20 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\r
25 #include "BlockCipher.h"
\r
29 typedef unsigned char byte;
\r
30 typedef unsigned long uint; /* assuming sizeof(uint) == 4 */
\r
31 #endif /* USUAL_TYPES */
\r
36 CTR(BlockCipher* E);
\r
40 * Start encrypting/decrypting a message using a given nonce.
\r
42 * @param N the normalized nonce (initial counter value)
\r
44 void init(const byte* N);
\r
47 * Either encrypt or decrypt a message chunk.
\r
49 * @param M message chunk
\r
50 * @param m its length in bytes
\r
51 * @param C the resulting encrypted/decrypted message chunk
\r
53 void update(const byte* M, uint m, byte* C);
\r
56 BlockCipher *E; // block cipher context
\r
58 byte* N; // CTR counter (block_size bytes)
\r
59 byte* S; // CTR mask (block_size bytes)
\r
60 uint s; // available mask bytes on S
\r
63 #endif /* __CTR_H */
\r