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 <freeradius-devel/ident.h>
\r
26 RCSIDH(CTR_h, "$Id$")
\r
28 #include "BlockCipher.h"
\r
32 typedef unsigned char byte;
\r
33 typedef unsigned long uint; /* assuming sizeof(uint) == 4 */
\r
34 #endif /* USUAL_TYPES */
\r
39 CTR(BlockCipher* E);
\r
43 * Start encrypting/decrypting a message using a given nonce.
\r
45 * @param N the normalized nonce (initial counter value)
\r
47 void init(const byte* N);
\r
50 * Either encrypt or decrypt a message chunk.
\r
52 * @param M message chunk
\r
53 * @param m its length in bytes
\r
54 * @param C the resulting encrypted/decrypted message chunk
\r
56 void update(const byte* M, uint m, byte* C);
\r
59 BlockCipher *E; // block cipher context
\r
61 byte* N; // CTR counter (block_size bytes)
\r
62 byte* S; // CTR mask (block_size bytes)
\r
63 uint s; // available mask bytes on S
\r
66 #endif /* __CTR_H */
\r