OUTPUT_LANGUAGE = English
USE_WINDOWS_ENCODING = NO
BRIEF_MEMBER_DESC = YES
-REPEAT_BRIEF = YES
+REPEAT_BRIEF = NO
ABBREVIATE_BRIEF = "The $name class" \
"The $name widget" \
"The $name file" \
a \
an \
the
-ALWAYS_DETAILED_SEC = NO
+ALWAYS_DETAILED_SEC = YES
INLINE_INHERITED_MEMB = NO
FULL_PATH_NAMES = YES
STRIP_FROM_PATH = /home/bg/workspace/micro-crypt/
SHORT_NAMES = NO
JAVADOC_AUTOBRIEF = NO
MULTILINE_CPP_IS_BRIEF = NO
-DETAILS_AT_TOP = NO
+DETAILS_AT_TOP = YES
INHERIT_DOCS = YES
SEPARATE_MEMBER_PAGES = NO
TAB_SIZE = 8
-ALIASES = "license=\par License:\n" "email=\par E-Mail:\n"
+ALIASES = "license=\par License:\n" \
+ "email=\par E-Mail:\n"
OPTIMIZE_OUTPUT_FOR_C = YES
OPTIMIZE_OUTPUT_JAVA = NO
BUILTIN_STL_SUPPORT = NO
#---------------------------------------------------------------------------
# Build related configuration options
#---------------------------------------------------------------------------
-EXTRACT_ALL = YES
-EXTRACT_PRIVATE = YES
-EXTRACT_STATIC = YES
+EXTRACT_ALL = NO
+EXTRACT_PRIVATE = NO
+EXTRACT_STATIC = NO
EXTRACT_LOCAL_CLASSES = YES
EXTRACT_LOCAL_METHODS = NO
-HIDE_UNDOC_MEMBERS = NO
-HIDE_UNDOC_CLASSES = NO
+HIDE_UNDOC_MEMBERS = YES
+HIDE_UNDOC_CLASSES = YES
HIDE_FRIEND_COMPOUNDS = NO
HIDE_IN_BODY_DOCS = NO
INTERNAL_DOCS = NO
# configuration options related to the input files
#---------------------------------------------------------------------------
INPUT = /home/bg/workspace/micro-crypt
-FILE_PATTERNS = *.c \
- *.cc \
- *.cxx \
- *.cpp \
- *.c++ \
- *.d \
- *.java \
- *.ii \
- *.ixx \
- *.ipp \
- *.i++ \
- *.inl \
- *.h \
- *.hh \
- *.hxx \
- *.hpp \
- *.h++ \
- *.idl \
- *.odl \
- *.cs \
- *.php \
- *.php3 \
- *.inc \
- *.m \
- *.mm \
+FILE_PATTERNS = *.h \
*.dox \
- *.py \
- *.C \
- *.CC \
- *.C++ \
- *.II \
- *.I++ \
*.H \
*.HH \
*.H++ \
- *.CS \
- *.PHP \
- *.PHP3 \
- *.M \
- *.MM \
- *.PY
+ RECURSIVE \
+ = \
+ NO
RECURSIVE = NO
EXCLUDE =
EXCLUDE_SYMLINKS = NO
#---------------------------------------------------------------------------
# configuration options related to source browsing
#---------------------------------------------------------------------------
-SOURCE_BROWSER = YES
+SOURCE_BROWSER = NO
INLINE_SOURCES = NO
STRIP_CODE_COMMENTS = YES
-REFERENCED_BY_RELATION = YES
-REFERENCES_RELATION = YES
+REFERENCED_BY_RELATION = NO
+REFERENCES_RELATION = NO
REFERENCES_LINK_SOURCE = YES
USE_HTAGS = NO
-VERBATIM_HEADERS = YES
+VERBATIM_HEADERS = NO
#---------------------------------------------------------------------------
# configuration options related to the alphabetical class index
#---------------------------------------------------------------------------
TOC_EXPAND = NO
DISABLE_INDEX = NO
ENUM_VALUES_PER_LINE = 4
-GENERATE_TREEVIEW = NO
+GENERATE_TREEVIEW = YES
TREEVIEW_WIDTH = 250
#---------------------------------------------------------------------------
# configuration options related to the LaTeX output
GROUP_GRAPHS = YES
UML_LOOK = NO
TEMPLATE_RELATIONS = NO
-INCLUDE_GRAPH = YES
-INCLUDED_BY_GRAPH = YES
+INCLUDE_GRAPH = NO
+INCLUDED_BY_GRAPH = NO
CALL_GRAPH = NO
CALLER_GRAPH = NO
GRAPHICAL_HIERARCHY = NO
define MAIN_OBJ_TEMPLATE
$(2): $(3) $(4)
- @echo "[gcc]: $$@"
+ @echo "[ld]: $$@"
# echo $$^
@$(CC) $(CFLAGS) $(LDFLAGS)$(patsubst %.elf,%.map,$(2)) -o \
$(2) \
# Rules for building the .text rom images
%.hex: %.elf
- $(OBJCOPY) -j .text -j .data -O ihex $< $@
+ @echo "[objcopy]: $@"
+ @$(OBJCOPY) -j .text -j .data -O ihex $< $@
%.srec: %.elf
- $(OBJCOPY) -j .text -j .data -O srec $< $@
+ @echo "[objcopy]: $@"
+ @$(OBJCOPY) -j .text -j .data -O srec $< $@
%.bin: %.elf
- $(OBJCOPY) -j .text -j .data -O binary $< $@
+ @echo "[objcopy]: $@"
+ @$(OBJCOPY) -j .text -j .data -O binary $< $@
# Rules for building the .eeprom rom images
%_eeprom.hex: %.elf
- $(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O ihex $< $@
+ @echo "[objcopy]: $@"
+ @$(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O ihex $< $@
%_eeprom.srec: %.elf
- $(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O srec $< $@
+ @echo "[objcopy]: $@"
+ @$(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O srec $< $@
%_eeprom.bin: %.elf
- $(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O binary $< $@
+ @echo "[objcopy]: $@"
+ @$(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O binary $< $@
# Every thing below here is used by avr-libc's build system and can be ignored
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-/**
- *
- * author: Daniel Otte
- * email: daniel.otte@rub.de
- * license: GPLv3
- *
+
+/** \file grain.h
+ * \author Daniel Otte
+ * \email daniel.otte@rub.de
+ * \license GPLv3 or later
+ * \brief implementation of the Grain streamcipher
*/
#ifndef GRAIN_H_
\subsection Hashes Hashes
A Hash function produces a fixed length output (called hash value or message
- digest) from a variable length message input.
+ digest) from a variable length message input. Most hash algorithms have a
+ state which is updated by the hash core function from a block of fixed size
+ from the message. A "lastBlock" function is used to add the last block which
+ is not required to have the fixed length. An addition function is then used
+ to transform the state into the final hash value.
Implemented hash functions:
- MD5 (md5.h)
- SHA-256 (sha256.h)
\subsection MACs Message-Authentification-Codes (MACs)
+ Message-Authentification-Codes work like hash function but take an additional
+ key. The produced output is also called MAC and is highly dependant on the
+ key. They can be thought of symmetric signatures.
+
+ Implemented MAC functions:
- HMAC-SHA-1 (hmac-sha1.h)
- HMAC-SHA-256 (hmac-sha256.h)
\subsection PRNGs Pseudo-Random-Number-Generators (PRNGs)
+ PRNGs produce pseudo random output determinated by the input. They aim to
+ produce an arbitrary length of good cryptographically secure random if the
+ input has enough entropy. PRNGs differ in the way they accept input. Some
+ are seeded only once, other (like the implemented) maintain an entropy pool
+ to which input can be added at virtually any time.
+
+ Implemented PRNGs:
- Entropium (entropium.h)
*/
\ No newline at end of file
#include <stdint.h>
-void memxor(void * dest, const void * src, uint16_t n){
+#include "memxor.h"
+
+void memxor(void* dest, const void* src, uint16_t n){
while(n--){
- ((uint8_t*)dest)[n] ^= ((uint8_t*)src)[n];
+ *((uint8_t*)dest) ^= *((uint8_t*)src);
+ dest = (uint8_t*)dest +1;
+ src = (uint8_t*)src +1;
}
}
#define MEMXOR_H_
#include <stdint.h>
-void memxor(void * dest, const void * src, uint16_t n);
+void memxor(void* dest, const void* src, uint16_t n);
#endif
clr r1
.endm
+push_all_func:
+ pop r31
+ pop r30
+ push_all
+ ijmp
+
+pop_all_func:
+ pop r31
+ pop r30
+ pop_all
+ ijmp
+
.macro xchg a b
eor \a, \b
eor \b, \a
ret
/******************************************************************************/
+#ifndef NOEKEON_NO_ENC
; === noekeon_enc ===
;
; param1: pointer to buffer/state (r24,r25)
;
.global noekeon_enc
noekeon_enc:
- push_all
+ rcall push_all_func
/* load state */
movw r26, r22
ldi r28, 2
lpm r0, Z
push r0
3:
- call round /* pops rc2 & rc1 */
+ rcall round /* pops rc2 & rc1 */
pop r22
dec r22
push r22
ldi r22, 0xD4
eor state0_3, r22
- call theta
+ rcall theta
pop r31
pop r30
dec r22
brne 1b
- pop_all
+ rcall pop_all_func
ret
+#endif
/******************************************************************************/
/******************************************************************************/
+#ifndef NOEKEON_NO_DEC
+
; === noekeon_dec ===
;
; param1: pointer to buffer/state (r24,r25)
;
.global noekeon_dec
noekeon_dec:
- push_all
+ rcall push_all_func
/* allocate 16 bytes on the stack */
in r30, _SFR_IO_ADDR(SPL)
in r31, _SFR_IO_ADDR(SPH)
movw r26, r30
sbiw r26, 16 /* set X back to begining of stack key */
- call theta
+ rcall theta
/* mov state to stackkey */
clr r29
push r0
push r1
3:
- call round /* pops rc2 & rc1 */
+ rcall round /* pops rc2 & rc1 */
pop r22
dec r22
push r22
;----
pop r22
- call theta
+ rcall theta
ldi r22, 0x80
eor state0_3, r22
adiw r30, 16
out _SFR_IO_ADDR(SPH), r31
out _SFR_IO_ADDR(SPL), r30
- pop_all
+ rcall pop_all_func
ret
+#endif
/******************************************************************************/
+
round:
pop r24
pop r25
pop r1
eor state0_3, r1
- call theta
+ rcall theta
pop r1
eor state0_3, r1
push r25
pi_gamma_pi:
ldi r30, pm_lo8(bigendian_rotl32)
ldi r31, pm_hi8(bigendian_rotl32)
- call pi
+ rcall pi
/* pi1 done; now gamma */
- call gamma_1
+ rcall gamma_1
/* a[0] <-> a[3] */
xchg state0_0, state3_0
xchg state0_1, state3_1
op32 eor, state2, state1
op32 eor, state2, state3
- call gamma_1
+ rcall gamma_1
ldi r30, pm_lo8(bigendian_rotr32)
ldi r31, pm_hi8(bigendian_rotr32)
- call pi
+ rcall pi
ret
gamma_1:
noekeon_enc(ctx, nullv);
}
*/
+
+#ifndef NOEKEON_NO_INIT
+
.global noekeon_init
noekeon_init:
; === noekeon_init ===
sbiw r26, 16
movw r24, r26
- call noekeon_enc
+ rcall noekeon_enc
in r30, _SFR_IO_ADDR(SPL)
in r31, _SFR_IO_ADDR(SPH)
out _SFR_IO_ADDR(SPL), r30
ret
-
+#endif
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
- * \file sha256-asm.h
- * \author Daniel Otte
- * \date 2006-05-16
- * \par License
- * GPL
+ * \file sha256.h
+ * \author Daniel Otte
+ * \date 2006-05-16
+ * \license GPLv3 or later
*
*/
#include <stdint.h>
+/** \def SHA256_HASH_BITS
+ * defines the size of a SHA-256 hash value in bits
+ */
+
+/** \def SHA256_HASH_BYTES
+ * defines the size of a SHA-256 hash value in bytes
+ */
+
+/** \def SHA256_BLOCK_BITS
+ * defines the size of a SHA-256 input block in bits
+ */
+
+/** \def SHA256_BLOCK_BYTES
+ * defines the size of a SHA-256 input block in bytes
+ */
#define SHA256_HASH_BITS 256
#define SHA256_HASH_BYTES (SHA256_HASH_BITS/8)
#define SHA256_BLOCK_BITS 512
#define SHA256_BLOCK_BYTES (SHA256_BLOCK_BITS/8)
-/**
- * \brief sha256 context type
+/** \typedef sha256_ctx_t
+ * \brief SHA-256 context type
*
+ * A variable of this type may hold the state of a SHA-256 hashing process
*/
typedef struct {
uint32_t h[8];
uint64_t length;
} sha256_ctx_t;
+/** \typedef sha256_hash_t
+ * \brief SHA-256 hash value type
+ *
+ * A variable of this type may hold the hash value produced by the
+ * sha256_ctx2hash(sha256_hash_t* dest, const sha256_ctx_t* state) function.
+ */
typedef uint8_t sha256_hash_t[SHA256_HASH_BYTES];
+/** \fn void sha256_init(sha256_ctx_t *state)
+ * \brief initialise a SHA-256 context
+ *
+ * This function sets a ::sha256_ctx_t to the initial values for hashing.
+ * \param state pointer to the SHA-256 hashing context
+ */
void sha256_init(sha256_ctx_t *state);
-void sha256_nextBlock (sha256_ctx_t *state, const void* block);
-void sha256_lastBlock(sha256_ctx_t *state, const void* block, uint16_t length_b);
+/** \fn void sha256_nextBlock (sha256_ctx_t* state, const void* block)
+ * \brief update the context with a given block
+ *
+ * This function updates the SHA-256 hash context by processing the given block
+ * of fixed length.
+ * \param state pointer to the SHA-256 hash context
+ * \param block pointer to the block of fixed length (512 bit = 64 byte)
+ */
+void sha256_nextBlock (sha256_ctx_t* state, const void* block);
-void sha256_ctx2hash(sha256_hash_t *dest, const sha256_ctx_t *state);
+/** \fn void sha256_lastBlock(sha256_ctx_t* state, const void* block, uint16_t length_b)
+ * \brief finalize the context with the given block
+ *
+ * This function finalizes the SHA-256 hash context by processing the given block
+ * of variable length.
+ * \param state pointer to the SHA-256 hash context
+ * \param block pointer to the block of fixed length (512 bit = 64 byte)
+ * \param length_b the length of the block in bits
+ */
+void sha256_lastBlock(sha256_ctx_t* state, const void* block, uint16_t length_b);
-/*
- * length in bits!
+/** \fn void sha256_ctx2hash(sha256_hash_t* dest, const sha256_ctx_t* state)
+ * \brief convert the hash state into the hash value
+ * This function reads the context and writes the hash value to the destination
+ * \param dest pointer to the location where the hash value should be written
+ * \param state pointer to the SHA-256 hash context
*/
-void sha256(sha256_hash_t *dest, const void* msg, uint32_t length_b);
-uint32_t change_endian32(uint32_t x);
+void sha256_ctx2hash(sha256_hash_t* dest, const sha256_ctx_t* state);
+/** \fn void sha256(sha256_hash_t* dest, const void* msg, uint32_t length_b)
+ * \brief simple SHA-256 hashing function for direct hashing
+ *
+ * This function automaticaly hashes a given message of arbitary length with
+ * the SHA-256 hashing algorithm.
+ * \param dest pointer to the location where the hash value is going to be written to
+ * \param msg pointer to the message thats going to be hashed
+ * \param length_b length of the message in bits
+ */
+void sha256(sha256_hash_t* dest, const void* msg, uint32_t length_b);
#endif /*SHA256_H_*/