]> git.cryptolib.org Git - avr-crypto-lib.git/commitdiff
adding documentation
authorbg <bg@b1d182e4-1ff8-0310-901f-bddb46175740>
Sat, 2 Aug 2008 04:38:17 +0000 (04:38 +0000)
committerbg <bg@b1d182e4-1ff8-0310-901f-bddb46175740>
Sat, 2 Aug 2008 04:38:17 +0000 (04:38 +0000)
14 files changed:
A5_1.h
Doxyfile
Makefile
arcfour-asm.S
arcfour.c
arcfour.h
cast5.c
cast5.h
des.c
des.h
entropium.c
entropium.h
main-shabea-test.c
main.dox [new file with mode: 0644]

diff --git a/A5_1.h b/A5_1.h
index 95f345c5e10df6cbf26d017ab6382986b2b718ac..1c857507a0ccfffb3d44fcd5b483a26bb600a4ce 100644 (file)
--- a/A5_1.h
+++ b/A5_1.h
@@ -17,9 +17,9 @@
     along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 /* 
- * File:               A5_1.h
- * Author:     Daniel Otte
- * Date:       24.06.2006
+ * File:    A5_1.h
+ * Author:  Daniel Otte
+ * Date:    24.06.2006
  * License: GPL
  * Description: Implementation of the A5/1 stream cipher algorithm, as used in GSM.
  * ! Warning, this is weak crypto !
index 2d42cc6ef7321e799a8b637a31ba803a45af1650..3eed9fc0c9c1c91fbaaa2434841e938875ea9a0c 100644 (file)
--- a/Doxyfile
+++ b/Doxyfile
@@ -34,7 +34,7 @@ DETAILS_AT_TOP         = NO
 INHERIT_DOCS           = YES
 SEPARATE_MEMBER_PAGES  = NO
 TAB_SIZE               = 8
-ALIASES                = 
+ALIASES                = "license=\par License:\n" "email=\par E-Mail:\n" 
 OPTIMIZE_OUTPUT_FOR_C  = YES
 OPTIMIZE_OUTPUT_JAVA   = NO
 BUILTIN_STL_SUPPORT    = NO
@@ -127,7 +127,7 @@ FILE_PATTERNS          = *.c \
 RECURSIVE              = NO
 EXCLUDE                = 
 EXCLUDE_SYMLINKS       = NO
-EXCLUDE_PATTERNS       = 
+EXCLUDE_PATTERNS       = main-*
 EXAMPLE_PATH           = 
 EXAMPLE_PATTERNS       = *
 EXAMPLE_RECURSIVE      = NO
@@ -248,16 +248,16 @@ PERL_PATH              = /usr/bin/perl
 CLASS_DIAGRAMS         = NO
 HIDE_UNDOC_RELATIONS   = YES
 HAVE_DOT               = YES
-CLASS_GRAPH            = YES
+CLASS_GRAPH            = NO
 COLLABORATION_GRAPH    = YES
 GROUP_GRAPHS           = YES
 UML_LOOK               = NO
 TEMPLATE_RELATIONS     = NO
 INCLUDE_GRAPH          = YES
 INCLUDED_BY_GRAPH      = YES
-CALL_GRAPH             = YES
+CALL_GRAPH             = NO
 CALLER_GRAPH           = NO
-GRAPHICAL_HIERARCHY    = YES
+GRAPHICAL_HIERARCHY    = NO
 DIRECTORY_GRAPH        = YES
 DOT_IMAGE_FORMAT       = png
 DOT_PATH               = 
index efae2b4f89b3acd85a4830ffc2998362bf2fc6e4..8033ad2a7a703224878e8be9fdb29d4aa5e6cb0a 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -183,9 +183,9 @@ clean:
 xclean: clean
        rm -rf $(DEP_DIR)*.d
 
-flash:
-       $(ERASECMD)
-       $(FLASHCMD)
+docu:
+       doxygen
+
 
 %.lst: %.elf
        $(OBJDUMP) -h -S $< > $@
index ec0eeebc879aa7b6706f45031f40a0b257fbea41..d3ecadbf4857f6fc7e4cfd627c5b38a11120e094 100644 (file)
@@ -16,6 +16,7 @@
     You should have received a copy of the GNU General Public License
     along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
+
 /* 
  * File:        arcfour-asm.S
  * Author:      Daniel Otte
index f8d01a6f12037fca303fd7c105a6a6c7873c9176..13fb159e7aff4e559e69e91327935e2feb93aca9 100644 (file)
--- a/arcfour.c
+++ b/arcfour.c
  * length is length of key in bytes!
  */
 
-void arcfour_init(arcfour_ctx_t *c, uint8_t *key, uint8_t length){
+void arcfour_init(arcfour_ctx_t *ctx, void *key, uint8_t length_B){
        uint8_t t;
        unsigned x,y=0;
        for(x=0; x<= 255; ++x)
-               c->s[x]=x;
+               ctx->s[x]=x;
        
        for(x=0; x<= 255; ++x){
-               y += c->s[x] + key[x % length];
+               y += ctx->s[x] + ((uint8_t*)key)[x % length_B];
                y &= 0xff;
-               t = c->s[y];
-               c->s[y] = c->s[x];
-               c->s[x] = t;
-       };
-               
-       c->i = c->j = 0;
+               t = ctx->s[y];
+               ctx->s[y] = ctx->s[x];
+               ctx->s[x] = t;
+       }       
+       ctx->i = ctx->j = 0;
 }
 
-uint8_t arcfour_gen(arcfour_ctx_t *c){
+uint8_t arcfour_gen(arcfour_ctx_t *ctx){
        uint8_t t;
-       c->i++;
-       c->j += c->s[c->i];
-       t = c->s[c->j];
-       c->s[c->j] = c->s[c->i];
-       c->s[c->i] = t;
-       return c->s[(c->s[c->j] + c->s[c->i]) & 0xff];
+       ctx->i++;
+       ctx->j += ctx->s[ctx->i];
+       t = ctx->s[ctx->j];
+       ctx->s[ctx->j] = ctx->s[ctx->i];
+       ctx->s[ctx->i] = t;
+       return ctx->s[(ctx->s[ctx->j] + ctx->s[ctx->i]) & 0xff];
 }
 
index 38ab40d0c26da1f8cebbff45812eea4045341adf..1f5af2fe6ce82445e119cb64620b813e7dd251ce 100644 (file)
--- a/arcfour.h
+++ b/arcfour.h
  * File:       arcfour.h
  * Author:     Daniel Otte
  * Date:       2006-06-07
- * License: GPL
+ * License: GPLv3+
  * Description: Implementation of the ARCFOUR (RC4 compatible) stream cipher algorithm. 
  */
-/* 
+/** 
  * \file       arcfour.h
  * \author     Daniel Otte
  * \date       2006-06-07
- * \par License
- *      GPL
- * \brief   Implementation of the ARCFOUR (RC4 compatible) stream cipher algorithm. 
+ * \license GPLv3+
+ * \brief Implementation of the ARCFOUR (RC4 compatible) stream cipher algorithm. 
+ * 
+ * This header file defines the interface of the ARCFOUR cipher implementation.
+ * 
+ * This implementation aims to be compatible with the ARCFOUR description
+ * availabe at 
+ * http://www.mozilla.org/projects/security/pki/nss/draft-kaukonen-cipher-arcfour-03.txt
  */
  
  
 
 #include <stdint.h>
 
-typedef struct {
+/** \typedef arcfour_ctx_t
+ * \brief type for arcfour context
+ * 
+ * A variable of this type may contain a complete ARCFOUR context.
+ * The context is used to store the state of the cipher and gets
+ * created by the arcfour_init(arcfour_ctx_t *c, uint8_t *key, uint8_t length_B)
+ * function. The context is of the fixed size of 258 bytes
+ */
+/** \struct arcfour_ctx_st
+ * \brief base for ::arcfour_ctx_t
+ * 
+ * The struct holds the two indices and the S-Box
+ */
+typedef struct arcfour_ctx_st {
        uint8_t i,j;
        uint8_t s[256];
 } arcfour_ctx_t;
  
 
+/** \fn void arcfour_init(arcfour_ctx_t *ctx, void *key, uint8_t length_B)
+ * \brief setup a context with a key
+ * 
+ * This function sets up a ::arcfour_ctx_t context using
+ * the supplied key of the given length.
+ * \param ctx pointer to the context
+ * \param key pointer to the key
+ * \param length_B length of the key in bytes (between 1 and 255)
+ */
+void arcfour_init(arcfour_ctx_t *ctx, void *key, uint8_t length_B);
 
-void arcfour_init(arcfour_ctx_t *c, uint8_t *key, uint8_t length);
-uint8_t arcfour_gen(arcfour_ctx_t *c);
+/** \fn uint8_t arcfour_gen(arcfour_ctx_t *ctx)
+ * \brief generates a byte of keystream
+ * 
+ * This function generates the next byte of keystream
+ * from the supplied ::arcfour_ctx_t context which is updated acordingly
+ *  
+ * \param ctx pointer to the context
+ * \return byte of keystream
+ */
+uint8_t arcfour_gen(arcfour_ctx_t *ctx);
 
 #endif
diff --git a/cast5.c b/cast5.c
index 8a71e6dda5f731757cd98a8037b4331438fb5466..0ed3ddfdaa6fec6bcf32f3ac0925799e4ba902e8 100644 (file)
--- a/cast5.c
+++ b/cast5.c
@@ -107,13 +107,8 @@ void cast5_init_rM(uint8_t *klo, uint8_t *khi, uint8_t offset, uint8_t *src, boo
 
 
 
-/**
- * \brief sets up round keys (context) for cast5 en/decryption.
- * @param s Pointer to cast5 context.
- * @param key Pointer to binary key.
- * @param keylength length of keydata in bits.
- */
-void cast5_init(uint8_t* key, uint8_t keylength_b, cast5_ctx_t* s){
+
+void cast5_init(void* key, uint8_t keylength_b, cast5_ctx_t* s){
         /* we migth return if the key is valid and if setup was sucessfull */
        uint32_t x[4], z[4];
        #define BPX ((uint8_t*)&(x[0]))
@@ -270,12 +265,7 @@ uint32_t cast5_f3(uint32_t d, uint32_t m, uint8_t r){
 
 /*************************************************************************/
 
-/**
- * \brief encrypts a datablock with cast5
- * @param block Pointer to datablock
- * @param s Pointer to cast5 roundkeys (context)
- */
-void cast5_enc(void* block, cast5_ctx_t *s){
+void cast5_enc(void* block, const cast5_ctx_t *s){
        uint32_t l,r, x, y;
        uint8_t i;
        cast5_f_t* f[]={cast5_f1,cast5_f2,cast5_f3};
@@ -299,12 +289,7 @@ void cast5_enc(void* block, cast5_ctx_t *s){
 
 /*************************************************************************/
 
-/**
- * \brief decrypts a datablock with cast5
- * @param block Pointer to datablock
- * @param s Pointer to cast5 roundkeys (context)
- */
-void cast5_dec(void* block, cast5_ctx_t *s){
+void cast5_dec(void* block, const cast5_ctx_t *s){
        uint32_t l,r, x, y;
        int8_t i, rounds;
        cast5_f_t* f[]={cast5_f1,cast5_f2,cast5_f3};
diff --git a/cast5.h b/cast5.h
index 717c5d7b7a9e1ac7059e115d1b8016581f7bbff0..aa81ca19a8fb0f5308ccd440363796f937c87938 100644 (file)
--- a/cast5.h
+++ b/cast5.h
  * Description: Implementation of the CAST5 (aka CAST-128) cipher algorithm as described in RFC 2144
  * 
  */
+
+/** 
+ * \file       cast5.h
+ * \author     Daniel Otte
+ * \date       2006-07-26
+ * \license GPL
+ * \brief Implementation of the CAST5 (aka CAST-128) cipher algorithm as described in RFC 2144
+ * 
+ */
+
 #ifndef CAST5_H_
 #define CAST5_H_ 
 
  #endif
 #endif
 
-
+/** \typedef cast5_ctx_t
+ * \brief CAST-5 context
+ * 
+ * A variable of this type may hold a keyschedule for the CAST-5 cipher. 
+ * This context is regulary generated by the 
+ * cast5_init(uint8_t* key, uint8_t keylength_b, cast5_ctx_t* s) funtion.
+ */
 typedef struct cast5_ctx_st{
        uint32_t        mask[16];
        uint8_t         rotl[8];        /* 4 bit from every rotation key is stored here */
@@ -48,9 +64,39 @@ typedef struct cast5_ctx_st{
        bool            shortkey;
 } cast5_ctx_t;
 
-void cast5_init(uint8_t* key, uint8_t keylength_b, cast5_ctx_t* s);
-void cast5_enc(void* block, cast5_ctx_t *s);
-void cast5_dec(void* block, cast5_ctx_t *s);
+
+/** \fn void cast5_init(void* key, uint8_t keylength_b, cast5_ctx_t* s);
+ * \brief generate keyschedule/contex for CAST-5
+ * 
+ * This function generates the keyschedule from the supplied key for the 
+ * CAST-5 cipher and stores it in a supplied ::cast5_ctx_t context.
+ * \param key pointer to the key
+ * \param keylength_b length of the key in bits (maximum 128 bits)
+ * \param s pointer to the context
+ */
+void cast5_init(void* key, uint8_t keylength_b, cast5_ctx_t* s);
+
+/** \fn void cast5_enc(void* block, const cast5_ctx_t *s);
+ * \brief encrypt a block with the CAST-5 algorithm
+ * 
+ * This function encrypts a block of 64 bits (8 bytes) with the CAST-5 algorithm.
+ * It uses a keyschedule as generated by the 
+ * cast5_init(void* key, uint8_t keylength_b, cast5_ctx_t* s) function.
+ * \param block pointer to the block which gets encrypted
+ * \param s pointer to the keyschedule/context
+ */
+void cast5_enc(void* block, const cast5_ctx_t *s);
+
+/** \fn void cast5_dec(void* block, const cast5_ctx_t *s);
+ * \brief decrypt a block with the CAST-5 algorithm
+ * 
+ * This function decrypts a block of 64 bits (8 bytes) with the CAST-5 algorithm.
+ * It uses a keyschedule as generated by the 
+ * cast5_init(void* key, uint8_t keylength_b, cast5_ctx_t* s) function.
+ * \param block pointer to the block which gets decrypted
+ * \param s pointer to the keyschedule/context
+ */
+void cast5_dec(void* block, const cast5_ctx_t *s);
 
 
 
diff --git a/des.c b/des.c
index 33e6a76be96a707f5d1d50c0cbb1b239410d6e3b..4a5277e53e6865175c8a5444312104ecc1eed0c2 100644 (file)
--- a/des.c
+++ b/des.c
     along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 /**
- * \file        des.c
- * \author      Daniel Otte
- * \email       daniel.otte@rub.de
- * \date        2007-06-16
- * \brief       DES and EDE-DES implementation
- * \par License        
- * GPLv3 or later
+ * \file     des.c
+ * \author   Daniel Otte
+ * \email    daniel.otte@rub.de
+ * \date     2007-06-16
+ * \brief    DES and EDE-DES implementation
+ * \license     GPLv3 or later
  * 
  */
 #include "config.h"
 #include "debug.h"
 #include "uart.h"
+#include <stdint.h>
 #include <string.h>
 #include <util/delay.h>
 #include <avr/pgmspace.h>
@@ -207,7 +207,7 @@ prog_uint8_t shiftkeyinv_permtab[] = {
 #define ROTTABLE_INV  0x3F7E
 /******************************************************************************/
 
-void permute(prog_uint8_t *ptable, uint8_t *in, uint8_t *out){
+void permute(prog_uint8_t *ptable, const uint8_t *in, uint8_t *out){
        uint8_t ib, ob; /* in-bytes and out-bytes */
        uint8_t byte, bit; /* counter for bit and byte */
        ib = pgm_read_byte(&(ptable[0]));
@@ -302,15 +302,15 @@ uint32_t des_f(uint32_t r, uint8_t* kr){
 
 /******************************************************************************/
 
-void des_enc(uint8_t* out, uint8_t* in, uint8_t* key){
+void des_enc(void* out, const void* in, const void* key){
 #define R *((uint32_t*)&(data[4]))
 #define L *((uint32_t*)&(data[0]))
 
        uint8_t data[8],kr[6],k[7];
        uint8_t i;
        
-       permute((prog_uint8_t*)ip_permtab, in, data);
-       permute((prog_uint8_t*)pc1_permtab, key, k);
+       permute((prog_uint8_t*)ip_permtab, (uint8_t*)in, data);
+       permute((prog_uint8_t*)pc1_permtab, (uint8_t*)key, k);
        for(i=0; i<8; ++i){
                shiftkey(k);
                if(ROTTABLE&((1<<((i<<1)+0))) )
@@ -330,20 +330,20 @@ void des_enc(uint8_t* out, uint8_t* in, uint8_t* key){
        L ^= R;
        R ^= L;
        
-       permute((prog_uint8_t*)inv_ip_permtab, data, out);
+       permute((prog_uint8_t*)inv_ip_permtab, data, (uint8_t*)out);
 }
 
 /******************************************************************************/
 
-void des_dec(uint8_t* out, uint8_t* in, uint8_t* key){
+void des_dec(void* out, const void* in, const uint8_t* key){
 #define R *((uint32_t*)&(data[4]))
 #define L *((uint32_t*)&(data[0]))
 
        uint8_t data[8],kr[6],k[7];
        int8_t i;
        
-       permute((prog_uint8_t*)ip_permtab, in, data);
-       permute((prog_uint8_t*)pc1_permtab, key, k);
+       permute((prog_uint8_t*)ip_permtab, (uint8_t*)in, data);
+       permute((prog_uint8_t*)pc1_permtab, (uint8_t*)key, k);
        for(i=7; i>=0; --i){
                
                permute((prog_uint8_t*)pc2_permtab, k, kr);
@@ -366,23 +366,23 @@ void des_dec(uint8_t* out, uint8_t* in, uint8_t* key){
        L ^= R;
        R ^= L;
        
-       permute((prog_uint8_t*)inv_ip_permtab, data, out);
+       permute((prog_uint8_t*)inv_ip_permtab, data, (uint8_t*)out);
 }
 
 /******************************************************************************/
 
-void tdes_enc(uint8_t* out, uint8_t* in, uint8_t* key){
-       des_enc(out,  in, key + 0);
-       des_dec(out, out, key + 8);
-       des_enc(out, out, key +16);
+void tdes_enc(void* out, void* in, const void* key){
+       des_enc(out,  in, (uint8_t*)key + 0);
+       des_dec(out, out, (uint8_t*)key + 8);
+       des_enc(out, out, (uint8_t*)key +16);
 }
 
 /******************************************************************************/
 
-void tdes_dec(uint8_t* out, uint8_t* in, uint8_t* key){
-       des_dec(out,  in, key + 0);
-       des_enc(out, out, key + 8);
-       des_dec(out, out, key +16);
+void tdes_dec(void* out, void* in, const uint8_t* key){
+       des_dec(out,  in, (uint8_t*)key + 0);
+       des_enc(out, out, (uint8_t*)key + 8);
+       des_dec(out, out, (uint8_t*)key +16);
 }
 
 /******************************************************************************/
diff --git a/des.h b/des.h
index 61bcd361d7928adf7668f3777405fe49f4b61578..456dee188a051598b964e9fbd25bd15f6875574b 100644 (file)
--- a/des.h
+++ b/des.h
  * \author     Daniel Otte 
  * \date       2007-06-16
  * \brief      des and tdes declarations
- * \par License        
- * GPL
+ * \license    GPLv3 or later
  * 
  */
 #ifndef DES_H_
 #define DES_H_
 
-#include <stdint.h>
 /* the FIPS 46-3 (1999-10-25) name for triple DES is triple data encryption algorithm so TDEA.
  * Also we only implement the three key mode  */
+
+/** \def tdea_enc
+ * \brief defining an alias for void tdes_enc(void* out, const void* in, const void* key)
+ */
+
+/** \def tdea_dec
+ * \brief defining an alias for void tdes_dec(void* out, const void* in, const void* key)
+ */
+
 #define tdea_enc tdes_enc
 #define tdea_dec tdes_dec
 
-void des_enc(uint8_t* out, uint8_t* in, uint8_t* key);
-void des_dec(uint8_t* out, uint8_t* in, uint8_t* key);
-void tdes_enc(uint8_t* out, uint8_t* in, uint8_t* key);
-void tdes_dec(uint8_t* out, uint8_t* in, uint8_t* key);
+/** \fn void des_enc(void* out, const void* in, const void* key)
+ * \brief encrypt a block with DES
+ * 
+ * This function encrypts a block of 64 bits (8 bytes) with the DES algorithm.
+ * Key expansion is done automatically. The key is 64 bits long, but note that
+ * only 56 bits are used (the LSB of each byte is droped). The input and output
+ * blocks may overlap.
+ * 
+ * \param out pointer to the block (64 bit = 8 byte) where the ciphertext is written to
+ * \param in  pointer to the block (64 bit = 8 byte) where the plaintext is read from
+ * \param key pointer to the key (64 bit = 8 byte)
+ */
+void des_enc(void* out, const void* in, const void* key);
+
+/** \fn void des_dec(void* out, const void* in, const void* key)
+ * \brief decrypt a block with DES
+ * 
+ * This function decrypts a block of 64 bits (8 bytes) with the DES algorithm.
+ * Key expansion is done automatically. The key is 64 bits long, but note that
+ * only 56 bits are used (the LSB of each byte is droped). The input and output
+ * blocks may overlap.
+ * 
+ * \param out pointer to the block (64 bit = 8 byte) where the plaintext is written to
+ * \param in  pointer to the block (64 bit = 8 byte) where the ciphertext is read from
+ * \param key pointer to the key (64 bit = 8 byte)
+ */
+void des_dec(void* out, const void* in, const void* key);
+
+/** \fn void tdes_enc(void* out, const void* in, const void* key)
+ * \brief encrypt a block with Tripple-DES
+ * 
+ * This function encrypts a block of 64 bits (8 bytes) with the Tripple-DES (EDE)
+ * algorithm. Key expansion is done automatically. The key is 192 bits long, but
+ * note that only 178 bits are used (the LSB of each byte is droped). The input
+ * and output blocks may overlap.
+ * 
+ * \param out pointer to the block (64 bit = 8 byte) where the ciphertext is written to
+ * \param in  pointer to the block (64 bit = 8 byte) where the plaintext is read from
+ * \param key pointer to the key (192 bit = 24 byte)
+ */
+void tdes_enc(void* out, const void* in, const void* key);
+
+/** \fn void tdes_dec(void* out, const void* in, const void* key)
+ * \brief decrypt a block with Tripple-DES
+ * 
+ * This function decrypts a block of 64 bits (8 bytes) with the Tripple-DES (EDE)
+ * algorithm. Key expansion is done automatically. The key is 192 bits long, but
+ * note that only 178 bits are used (the LSB of each byte is droped). The input
+ * and output blocks may overlap.
+ * 
+ * \param out pointer to the block (64 bit = 8 byte) where the plaintext is written to
+ * \param in  pointer to the block (64 bit = 8 byte) where the ciphertext is read from
+ * \param key pointer to the key (192 bit = 24 byte)
+ */
+ void tdes_dec(void* out, const void* in, const void* key);
 
 #endif /*DES_H_*/
index fdbf13cf4b8e5977ba411e0346f732f58482b0cf..625e468682af943f680c7e9fd6de40289c5f3345 100644 (file)
     along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 /**
- * \file        entropium.c
- * \author      Daniel Otte
- * \email       daniel.otte@rub.de
- * \date        2006-05-17
- * \par License:
- *     GPLv3 or later
+ * \file    entropium.c
+ * \author  Daniel Otte
+ * \email   daniel.otte@rub.de
+ * \date    2006-05-17
+ * \license    GPLv3 or later
  * \brief      This file contains an implementaition of a pseudo-random-number generator.
  * 
  * Extension 1:
  *     rndCore is expanded to 512 bits for more security.
  *
- * \verbatim
- *                      ################################################################################################
- *                      #                                                                                              #
- *                      #         +---------------------------+                                                        #
- *                      #         |                           |                             +---+                      #
- *                      #         V                           |                             |   |                      #
- *                      #      (concat)                       |                             |   V                      #
- *  +---------------+   #    o---------o             (xor)+---------+      o---------o      | o----o     o---------o   #    +--------------+
- *  | entropy Block | -----> | sha-256 | --(offset)-<     | rndCore | ---> | sha-256 | --+--+-| +1 |---> | sha-256 | -----> | random Block |
- *  +---------------+   #    o---------o             (xor)+---------+      o---------o   |    o----o     o---------o   #    +--------------+
- *                      #                                 (xor) (xor)                    |                             #
- *                      #                                   ^     ^                      |                             #
- *                      #                                    \   /                       |                             #
- *                      #                                   (offset)---------------------+                             #
- *                      #                                                                                              #
- *                      ################################################################################################
- * \endverbatim
- */
-
- /* \verbatim
- *                      ################################################################################################
- *                      #                                                                                              #
- *                      #         +---------------------------+                                                        #
- *                      #         |                           |                             +---+                      #
- *                      #         V                           |                             |   |                      #
- *                      #      (concat)                       |                             |   V                      #
- *  +---------------+   #    o---------o             (xor)+---------+      o---------o      | o----o     o---------o   #    +--------------+
- *  | entropy Block | -----> | sha-256 | --(offset)-<     | rndCore | ---> | sha-256 | --+--+-| +1 |---> | sha-256 | -----> | random Block |
- *  +---------------+   #    o---------o             (xor)+---------+      o---------o   |    o----o     o---------o   #    +--------------+
- *                      #                                 (xor) (xor)                    |                             #
- *                      #                                   ^     ^                      |                             #
- *                      #                                    \   /                       |                             #
- *                      #                                   (offset)---------------------+                             #
- *                      #                                                                                              #
- *                      ################################################################################################
- * \endverbatim
+  \verbatim
+                       ################################################################################################
+                       #                                                                                              #
+                       #         +---------------------------+                                                        #
+                       #         |                           |                                                        #
+                       #         V                           |                                                        #
+                       #      (concat)                       |                                                        #
+   +---------------+   #    o---------o             (xor)+---------+      o---------o        o----o     o---------o   #    +--------------+
+   | entropy Block | -----> | sha-256 | --(offset)-<     | rndCore | ---> | sha-256 | --+----| +1 |---> | sha-256 | -----> | random Block |
+   +---------------+   #    o---------o             (xor)+---------+      o---------o   |    o----o     o---------o   #    +--------------+
+                       #                                 (xor) (xor)                    |                             #
+                       #                                   ^     ^                      |                             #
+                       #                                    \   /                       |                             #
+                       #                                   (offset)---------------------+                             #
+                       #                                                                                              #
+                       ################################################################################################
+  \endverbatim
  */
 
 #include <stdint.h>
@@ -79,12 +59,6 @@ uint32_t rndCore[16];
 
 /*************************************************************************/
 
-/**
- * \brief This function adds entropy to the central entropy pool
- * 
- * @param length This ist the length of the random data in BITS. 
- * @param data This is the random data which should be added to the entropy pool
-*/
 /* idea is: hash the message and add it via xor to rndCore
  *
  * length in bits 
@@ -110,10 +84,7 @@ void entropium_addEntropy(unsigned length_b, const void* data){
 }
 
 /*************************************************************************/
-/**
- * \brief This function fills a given buffer with 32 random bytes
- * @param b Pointer to buffer wich is to fill
- */
+
 void entropium_getRandomBlock(void *b){
        sha256_ctx_t s;
        uint8_t offset=8;
@@ -133,11 +104,7 @@ void entropium_getRandomBlock(void *b){
 }
 
 /*************************************************************************/
-/**
- * \brief This function simply returns a random byte
- * @return a random byte
- */
+
 uint8_t entropium_getRandomByte(void){
        static uint8_t block[32];
        static uint8_t i=32;
@@ -149,13 +116,6 @@ uint8_t entropium_getRandomByte(void){
        return block[i++];
 }
 
-/*************************************************************************/
-/**
- * \brief This function fills the given bock with length random bytes
- * @return a random byte
- */
 void entropium_fillBlockRandom(void* block, unsigned length_B){
        while(length_B>ENTROPIUM_RANDOMBLOCK_SIZE){
                entropium_getRandomBlock(block);
index 02aa3172faf3d5146a4b57bbb344c6a7947a3c52..7b4081e1971c819eaadd68e40f851900ed22fcd8 100644 (file)
@@ -16,6 +16,7 @@
     You should have received a copy of the GNU General Public License
     along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
+
 /**
  * File:               entropium.h
  * Author:             Daniel Otte
  * Description:        This file contains the declarations for the pseudo-random-number generator.
  **/
 
+/**
+ * \file    entropium.h
+ * \author  Daniel Otte
+ * \date    23.07.2006
+ * \license    GPLv3 or later
+ * \brief      This file contains the declarations for the pseudo-random-number generator.
+ **/
+
+
 #ifndef ENTROPIUM_H_
 #define ENTROPIUM_H_
 
  */
 #define ENTROPIUM_RANDOMBLOCK_SIZE 32 /* bytes */
  
+/** \fn void entropium_addEntropy(unsigned length_b, const void* data)
+ * \brief add entropy to the prng
+ * 
+ * This function adds data to the internal entropy pool
+ * \param length_b length of the data block in bits
+ * \param data pointer to the data
+ */
 void entropium_addEntropy(unsigned length_b, const void* data); 
+
+/** \fn void entropium_getRandomBlock(void* b)
+ * \brief generate a fixed size block of random data 
+ * 
+ * This function writes 32 bytes of random extracted from the entropy pool
+ * in the supplied buffer.
+ * \param b buffer where the random data gets written
+ */
 void entropium_getRandomBlock(void* b);
-/* this does some simple buffering */
+
+/** \fn uint8_t entropium_getRandomByte(void)
+ * \brief get a single byte of random data
+ * 
+ * This function utilizes a internal buffer which gets automatically filled
+ * again. 
+ * \return a byte of random data
+ */ 
 uint8_t entropium_getRandomByte(void);
 
+/** \fn void entropium_fillBlockRandom(void* block, unsigned length_B)
+ * \brief get a block of random data
+ * 
+ * This function writes random data extracted from the entropy pool in the 
+ * supplied buffer. It shares a internal buffer with the 
+ * entropium_getRandomByte() function.
+ * \param block pointer to the buffer where the random data goes
+ * \param length_B number of bytes to be written to the buffer
+ */
 void entropium_fillBlockRandom(void* block, unsigned length_B);
 
 #endif /*PRNG_H_*/
index aadebd0904232ab4623decf50f05f59b0fef59b8..f221fd54af6b108b9eb005cb49f1f9e61cddf8e0 100644 (file)
 char* cipher_name = "Shabea";
 
 /*****************************************************************************
- *  additional validation-functions                                                                                     *
+ *  additional validation-functions                                          *
  *****************************************************************************/
-void shabea_genctx_dummy(uint8_t* key, uint16_t keysize, void* ctx){
-       memcpy(ctx, key, keysize);
+void shabea_genctx_dummy(uint8_t* key, uint16_t keysize_b, void* ctx){
+       memcpy(ctx, key, (keysize_b+7)/8);
 }
 
 void shabea_enc_dummy(void* buffer, void* ctx){
diff --git a/main.dox b/main.dox
new file mode 100644 (file)
index 0000000..199a398
--- /dev/null
+++ b/main.dox
@@ -0,0 +1,57 @@
+/** \mainpage Documentation for microcrypt-lib
+ \section Algorithms Available algorithms
+ \subsection Stream-ciphers Stream ciphers
+  A stream cipher generates a keystream which is normaly XORed with the
+  plaintext to produce the the ciphertext. Stream ciphers therfore have a 
+  state which is automaticaly updated to produce the next element of the 
+  keystream. Most Streamciphers produce a fixed length of keytream per 
+  iteration which may be a byte, a bit or any other data unit.
+  
+  Implemented stream ciphers: 
+   - A5/1 (A5_1.h)
+   - ARCFOUR (RC4 compatible) (arcfour.h)
+   - Grain (grain.h)
+   - Trivium (trivium.h)
+   
+ \subsection Block-ciphers Block ciphers 
+  Block cipher encrypt/decrypt fixed length blocks (mostly 64 bits or 128 bits)
+  with a key. Most block ciphers iterate a round function which uses a so-called
+  round key. The round keys are generated on the fly or with a special init
+  function (this is cipher specific). Round keys are stored in a context which
+  is not modifyed by the encryption or decryption function. Also the same 
+  context can be used for encryption and decryption and depends only on the key
+  and its length.
+  
+  Implemented block ciphers:
+   - Camellia (camellia.h)
+   - CAST5 (a.k.a CAST-128) (cast5.h)
+   - CAST6 (a.k.a CAST-256) (cast6.h)
+   - DES & Tripple-DES (EDE) (des.h)
+   - Noekeon (noekeon.h)
+   - RC5 (rc5.h)
+   - RC6 (rc6.h)
+   - SEED (seed.h)
+   - Serpent (serpent.h)
+   - Shabea (shabea.h)
+   - SHACAL-1 (encryption only) (shacal1_enc.h)
+   - SHACAL-2 (encryption only) (shacal2_enc.h)
+   - Skipjack (skipjack.h)
+   - XTEA (xtea.h)
+   
+ \subsection Hashes Hashes
+  A Hash function produces a fixed length output (called hash value or message
+  digest) from a variable length message input. 
+  
+  Implemented hash functions:
+   - MD5 (md5.h)
+   - SHA-1 (sha1.h)
+   - SHA-256 (sha256.h)
+   
+ \subsection MACs Message-Authentification-Codes (MACs)
+   - HMAC-SHA-1 (hmac-sha1.h)
+   - HMAC-SHA-256 (hmac-sha256.h)
+
+ \subsection PRNGs Pseudo-Random-Number-Generators (PRNGs)
+   - Entropium (entropium.h)
+   
+*/
\ No newline at end of file