* some retabbing
authorDavor Ocelic <docelic@spinlock.hr>
Wed, 28 Jan 2009 19:41:58 +0000 (20:41 +0100)
committerDavor Ocelic <docelic@spinlock.hr>
Wed, 28 Jan 2009 19:41:58 +0000 (20:41 +0100)
src/aes.h
src/auth.h
src/commands.h
src/crypt.h
src/ctapi.h
src/fs.h
src/fstream.h
src/hal-emu.c

index 451a581..5508a8e 100644 (file)
--- a/src/aes.h
+++ b/src/aes.h
@@ -12,8 +12,8 @@
 
 #include <types.h>
 
-#define AES_KEY_LEN            16      //!< AES key size.
-#define AES_BLOCK_LEN  16      //!< AES block length.
+#define AES_KEY_LEN   16  //!< AES key size.
+#define AES_BLOCK_LEN 16  //!< AES block length.
 
 /*! \brief AES encryption function.
 
index c19f100..d355537 100644 (file)
 #include <types.h>
 
 //! Flag for authstate signalling a successful PIN verification.
-#define AUTH_FLAG_PIN  0x01
+#define AUTH_FLAG_PIN   0x01
 //! Flag for authstate signalling a successful external authentication or key verification.
-#define AUTH_FLAG_KEY  0x02
+#define AUTH_FLAG_KEY   0x02
 
-#define AUTH_AC_ALW    0x0     //!< Access Condition: Always.
-#define AUTH_AC_PIN    0x1     //!< Access Condition: PIN.
-#define AUTH_AC_ADM    0x2     //!< Access Condition: Key.
-#define AUTH_AC_POA    0x3     //!< Access Condition: PIN or Key.
-#define AUTH_AC_PAA    0x4     //!< Access Condition: PIN and Key.
-#define AUTH_AC_NEV    0xF     //!< Access Condition: Never.
+#define AUTH_AC_ALW     0x0 //!< Access Condition: Always.
+#define AUTH_AC_PIN     0x1 //!< Access Condition: PIN.
+#define AUTH_AC_ADM     0x2 //!< Access Condition: Key.
+#define AUTH_AC_POA     0x3 //!< Access Condition: PIN or Key.
+#define AUTH_AC_PAA     0x4 //!< Access Condition: PIN and Key.
+#define AUTH_AC_NEV     0xF //!< Access Condition: Never.
 
-#define PIN_MAX_RETRIES        3       //!< Default max. retries for PIN.
-#define PUK_MAX_RETRIES        10      //!< Default max. retries for PUK.
+#define PIN_MAX_RETRIES 3 //!< Default max. retries for PIN.
+#define PUK_MAX_RETRIES 10  //!< Default max. retries for PUK.
 
-#define PIN_TYPE_PIN   0       //!< PIN type: PIN.
-#define PIN_TYPE_PUK   1       //!< PIN type: PUK.
-#define PIN_TYPE_EXT   2       //!< PIN type: Key for external authentication.
-#define PIN_TYPE_INT   3       //!< PIN type: Key for internal authentication.
-#define PIN_TYPE_KEY   4       //!< PIN type: Key. (XXX just to solve compile problem)
+#define PIN_TYPE_PIN    0 //!< PIN type: PIN.
+#define PIN_TYPE_PUK    1 //!< PIN type: PUK.
+#define PIN_TYPE_EXT    2 //!< PIN type: Key for external authentication.
+#define PIN_TYPE_INT    3 //!< PIN type: Key for internal authentication.
+#define PIN_TYPE_KEY    4 //!< PIN type: Key. (XXX just to solve compile problem)
 
-#define KEY_MAX_RETRIES 10     //!< Default max. retries for keys.
+#define KEY_MAX_RETRIES 10  //!< Default max. retries for keys.
 
 /*! \brief FID for file with external authentication key.
 
        It is only searched for the file in the MF and not in any DF.
 */
-#define AUTH_FID_EXTAUTH       0xFF00
+#define AUTH_FID_EXTAUTH 0xFF00
 /*! \brief FID for file with internal authentication key.
 
        It is only searched for the file in the MF and not in any DF.
 */
-#define AUTH_FID_INTAUTH       0xFF01
+#define AUTH_FID_INTAUTH 0xFF01
 /*! \brief FID for file with PIN and PUK.
 
        It is only searched for the file in the MF and not in any DF.
 */
-#define        AUTH_FID_PINPUK         0xFF02
+#define AUTH_FID_PINPUK 0xFF02
 
 /*! \brief Validity of challenge.
 
index fecde9a..d3ba44e 100644 (file)
 #ifndef ATMOS_COMMANDS_H
 #define ATMOS_COMMANDS_H
 
-#define CLA_PROP                       0x80    //!< CLA byte: Proprietary
-
-#define INS_WRITE                      0x02    //!< INS byte: Write EEPROM
-#define INS_READ                       0x04    //!< INS byte: Read EEPROM
-#define INS_LED                                0x06    //!< INS byte: LED Effects
-
-#define INS_CHANGE_PIN         0x24    //!< INS byte: Change PIN
-#define INS_CREATE                     0xE0    //!< INS byte: Create File
-#define INS_DELETE                     0xE4    //!< INS byte: Delete File (ISO 0E)
-#define INS_EXTERNAL_AUTH      0x82    //!< INS byte: External Authentication
-#define INS_GET_CHALLENGE      0x84    //!< INS byte: Get Challenge
-#define INS_GET_RESPONSE       0xC0    //!< INS byte: Get Response
-#define INS_INTERNAL_AUTH      0x88    //!< INS byte: Internal Authentication
-#define INS_READ_BINARY                0xB0    //!< INS byte: Read Binary
+#define CLA_PROP          0x80  //!< CLA byte: Proprietary
+
+#define INS_WRITE         0x02  //!< INS byte: Write EEPROM
+#define INS_READ          0x04  //!< INS byte: Read EEPROM
+#define INS_LED           0x06  //!< INS byte: LED Effects
+
+#define INS_CHANGE_PIN    0x24  //!< INS byte: Change PIN
+#define INS_CREATE        0xE0  //!< INS byte: Create File
+#define INS_DELETE        0xE4  //!< INS byte: Delete File (ISO 0E)
+#define INS_EXTERNAL_AUTH 0x82  //!< INS byte: External Authentication
+#define INS_GET_CHALLENGE 0x84  //!< INS byte: Get Challenge
+#define INS_GET_RESPONSE  0xC0  //!< INS byte: Get Response
+#define INS_INTERNAL_AUTH 0x88  //!< INS byte: Internal Authentication
+#define INS_READ_BINARY   0xB0  //!< INS byte: Read Binary
 // READ RECORDS ISO B2
-#define INS_SELECT                     0xA4    //!< INS byte: Select File
-#define INS_UNBLOCK_PIN                0x2C    //!< INS byte: Unblock PIN
-#define INS_UPDATE_BINARY      0xD6    //!< INS byte: Update Binary
-#define INS_VERIFY_KEY         0x2A    //!< INS byte: Verify Key
-#define INS_VERIFY_PIN         0x20    //!< INS byte: Verify PIN
+#define INS_SELECT        0xA4  //!< INS byte: Select File
+#define INS_UNBLOCK_PIN   0x2C  //!< INS byte: Unblock PIN
+#define INS_UPDATE_BINARY 0xD6  //!< INS byte: Update Binary
+#define INS_VERIFY_KEY    0x2A  //!< INS byte: Verify Key
+#define INS_VERIFY_PIN    0x20  //!< INS byte: Verify PIN
 //  MANAGE CHANNEL ISO 70
 // ENVELOPE C2
 // GET DATA CA
index 9e65f79..4ac90da 100644 (file)
@@ -1,26 +1,26 @@
 /*
-       Simple Operating System for Smartcard Education
-       Copyright (C) 2002      Matthias Bruestle <m@mbsks.franken.de>
-
-       This program is free software; you can redistribute it and/or modify
-       it under the terms of the GNU General Public License as published by
-       the Free Software Foundation; either version 2 of the License, or
-       (at your option) any later version.
-
-       This program is distributed in the hope that it will be useful,
-       but WITHOUT ANY WARRANTY; without even the implied warranty of
-       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-       GNU General Public License for more details.
-
-       You should have received a copy of the GNU General Public License
-       along with this program; if not, write to the Free Software
-       Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+  Simple Operating System for Smartcard Education
+  Copyright (C) 2002  Matthias Bruestle <m@mbsks.franken.de>
+
+  This program is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2 of the License, or
+  (at your option) any later version.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this program; if not, write to the Free Software
+  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */
 
 /*! @file
-       \brief Crypto declarations.
+  \brief Crypto declarations.
 
-       $Id: crypt.h,v 1.1 2003/03/30 12:42:21 m Exp $
+  $Id: crypt.h,v 1.1 2003/03/30 12:42:21 m Exp $
 */
 
 #ifndef ATMOS_CRYPT_H
 #include <string.h>
 #include <types.h>
 
-//#define CRYPT_ALGO_TEA                       0       //!< Algorithm ID: TEA
-//#define CRYPT_ALGO_SKIPJACK          1       //!< Algorithm ID: Skipjack
-//#define CRYPT_ALGO_NEWDESSK          2       //!< Algorithm ID: NEWDES-SK
-//#define CRYPT_ALGO_AES               3       //!< Algorithm ID: AES
+//#define CRYPT_ALGO_TEA      0 //!< Algorithm ID: TEA
+//#define CRYPT_ALGO_SKIPJACK   1 //!< Algorithm ID: Skipjack
+//#define CRYPT_ALGO_NEWDESSK   2 //!< Algorithm ID: NEWDES-SK
+//#define CRYPT_ALGO_AES    3 //!< Algorithm ID: AES
 
 #if CONF_WITH_CRYPT_ALGO==0
 /* TEA */
 #include <tea.h>
 //! Length of key in octets.
-#define CRYPT_KEY_LEN  TEA_KEY_LEN
+#define CRYPT_KEY_LEN TEA_KEY_LEN
 //! Length of cipher block in octets.
-#define CRYPT_BLOCK_LEN        TEA_BLOCK_LEN
+#define CRYPT_BLOCK_LEN TEA_BLOCK_LEN
 //! Single block encryption function.
 #define crypt_enc(v,k) tea_enc((iu32*)(v),(iu32*)(k))
 //! Single block decryption function.
 #elif CONF_WITH_CRYPT_ALGO==1
 /* SKIPJACK */
 #include <skipjack.h>
-#define CRYPT_KEY_LEN  SKIPJACK_KEY_LEN
-#define CRYPT_BLOCK_LEN        SKIPJACK_BLOCK_LEN
+#define CRYPT_KEY_LEN SKIPJACK_KEY_LEN
+#define CRYPT_BLOCK_LEN SKIPJACK_BLOCK_LEN
 #define crypt_enc(v,k) skipjack_enc((iu8*)(v),(iu8*)(k))
 #define crypt_dec(v,k) skipjack_dec((iu8*)(v),(iu8*)(k))
 
 #elif CONF_WITH_CRYPT_ALGO==2
 /* NEWDES-SK */
 #include <newdes-sk.h>
-#define CRYPT_KEY_LEN  NEWDESSK_KEY_LEN
-#define CRYPT_BLOCK_LEN        NEWDESSK_BLOCK_LEN
+#define CRYPT_KEY_LEN NEWDESSK_KEY_LEN
+#define CRYPT_BLOCK_LEN NEWDESSK_BLOCK_LEN
 #define crypt_enc(v,k) newdessk_enc((iu8*)(v),(iu8*)(k))
 #define crypt_dec(v,k) newdessk_dec((iu8*)(v),(iu8*)(k))
 
 #elif CONF_WITH_CRYPT_ALGO==3
-/* NEWDES-SK */
+/* AES */
 #include <aes.h>
-#define CRYPT_KEY_LEN  AES_KEY_LEN
-#define CRYPT_BLOCK_LEN        AES_BLOCK_LEN
+#define CRYPT_KEY_LEN AES_KEY_LEN
+#define CRYPT_BLOCK_LEN AES_BLOCK_LEN
 #define crypt_enc(v,k) aes_enc((iu8*)(v),(iu16*)(k),8)
 #define crypt_dec(v,k) aes_dec((iu8*)(v),(iu16*)(k),8)
 
dissimilarity index 66%
index 650dbaa..b41b71f 100644 (file)
@@ -1,89 +1,89 @@
-/*
-       Simple Operating System for Smartcard Education
-       Copyright (C) 2002  Matthias Bruestle <m@mbsks.franken.de>
-
-       This program is free software; you can redistribute it and/or modify
-       it under the terms of the GNU General Public License as published by
-       the Free Software Foundation; either version 2 of the License, or
-       (at your option) any later version.
-
-       This program is distributed in the hope that it will be useful,
-       but WITHOUT ANY WARRANTY; without even the implied warranty of
-       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-       GNU General Public License for more details.
-
-       You should have received a copy of the GNU General Public License
-       along with this program; if not, write to the Free Software
-       Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-*/
-
-/*! @file
-       \brief Declarations for virtual CT-API library.
-
-       $Id: ctapi.h,v 1.2 2002/12/22 23:16:15 m Exp $
-*/
-
-#ifndef H_CTAPI
-#define H_CTAPI
-
-#include <types.h>
-
-#define CTAPI_AD_ICC1                  0
-#define CTAPI_AD_CT                            1
-#define CTAPI_AD_HOST                  2
-
-#define CTAPI_RV_OK                               0
-#define CTAPI_RV_ERR_INVALID     -1
-#define CTAPI_RV_ERR_CT                          -8
-#define CTAPI_RV_ERR_TRANS              -10
-#define CTAPI_RV_ERR_MEMORY             -11
-#define CTAPI_RV_ERR_HOST              -127
-#define CTAPI_RV_ERR_HTSI              -128
-
-#define CTAPI_PORT                             1
-
-#define CTAPI_CLA                              0x20
-#define CTAPI_INS_RESET_CT             0x11
-#define CTAPI_INS_REQUEST_ICC  0x12
-#define CTAPI_INS_GET_STATUS   0x13
-#define CTAPI_INS_EJECT_ICC            0x14
-#define CTAPI_INS_EEPROM               0xE0
-
-typedef unsigned char  IU8;
-typedef signed char            IS8;
-typedef unsigned short IU16;
-typedef signed short   IS16;
-typedef unsigned long  IU32;
-typedef signed long            IS32;
-
-extern int             fd_fromCard[2], fd_toCard[2];
-extern int             loadEepromFile;
-extern int             saveEepromFile;
-extern char            eepromFile[256];
-extern int             fdEepromFile;
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-IS8 CT_forkIcc( void );
-IS8 CT_stopIcc( void );
-IS8 CT_ifdCmdEepromFile( IU16 lenc, IU8 *command, IU16 *lenr, IU8 *response );
-
-IS8 CT_ifdCmdResetCT( IU16 lenc, IU8 *command, IU16 *lenr, IU8 *response );
-IS8 CT_ifdCmdRequestICC( IU16 lenc, IU8 *command, IU16 *lenr, IU8 *response );
-IS8 CT_ifdCmdGetStatus( IU16 lenc, IU8 *command, IU16 *lenr, IU8 *response );
-IS8 CT_ifdCmdEjectICC( IU16 lenc, IU8 *command, IU16 *lenr, IU8 *response );
-IS8 CT_ifdCmd( IU16 lenc, IU8 *command, IU16 *lenr, IU8 *response );
-IS8 CT_iccCmd( IU8 *dad, IU8 *sad, IU16 lenc, IU8 *command,
-       IU16 *lenr, IU8 *response );
-IS8 CT_init( IU16 ctn, IU16 pn );
-IS8 CT_data( IU16 ctn, IU8 *dad, IU8 *sad, IU16 lenc, IU8 *command,
-       IU16 *lenr, IU8 *response );
-IS8 CT_close( IU16 ctn );
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-#endif /* H_CTAPI */
-
+/*
+  Simple Operating System for Smartcard Education
+  Copyright (C) 2002  Matthias Bruestle <m@mbsks.franken.de>
+
+  This program is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2 of the License, or
+  (at your option) any later version.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this program; if not, write to the Free Software
+  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*/
+
+/*! @file
+  \brief Declarations for virtual CT-API library.
+
+  $Id: ctapi.h,v 1.2 2002/12/22 23:16:15 m Exp $
+*/
+
+#ifndef H_CTAPI
+#define H_CTAPI
+
+#include <types.h>
+
+#define CTAPI_AD_ICC1         0
+#define CTAPI_AD_CT           1
+#define CTAPI_AD_HOST         2
+
+#define CTAPI_RV_OK           0
+#define CTAPI_RV_ERR_INVALID -1
+#define CTAPI_RV_ERR_CT      -8
+#define CTAPI_RV_ERR_TRANS   -10
+#define CTAPI_RV_ERR_MEMORY  -11
+#define CTAPI_RV_ERR_HOST    -127
+#define CTAPI_RV_ERR_HTSI    -128
+
+#define CTAPI_PORT            1
+
+#define CTAPI_CLA             0x20
+#define CTAPI_INS_RESET_CT    0x11
+#define CTAPI_INS_REQUEST_ICC 0x12
+#define CTAPI_INS_GET_STATUS  0x13
+#define CTAPI_INS_EJECT_ICC   0x14
+#define CTAPI_INS_EEPROM      0xE0
+
+typedef unsigned char         IU8;
+typedef signed char           IS8;
+typedef unsigned short        IU16;
+typedef signed short          IS16;
+typedef unsigned long         IU32;
+typedef signed long           IS32;
+
+extern int  fd_fromCard[2], fd_toCard[2];
+extern int  loadEepromFile;
+extern int  saveEepromFile;
+extern char eepromFile[256];
+extern int  fdEepromFile;
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+IS8 CT_forkIcc( void );
+IS8 CT_stopIcc( void );
+IS8 CT_ifdCmdEepromFile( IU16 lenc, IU8 *command, IU16 *lenr, IU8 *response );
+
+IS8 CT_ifdCmdResetCT( IU16 lenc, IU8 *command, IU16 *lenr, IU8 *response );
+IS8 CT_ifdCmdRequestICC( IU16 lenc, IU8 *command, IU16 *lenr, IU8 *response );
+IS8 CT_ifdCmdGetStatus( IU16 lenc, IU8 *command, IU16 *lenr, IU8 *response );
+IS8 CT_ifdCmdEjectICC( IU16 lenc, IU8 *command, IU16 *lenr, IU8 *response );
+IS8 CT_ifdCmd( IU16 lenc, IU8 *command, IU16 *lenr, IU8 *response );
+IS8 CT_iccCmd( IU8 *dad, IU8 *sad, IU16 lenc, IU8 *command,
+  IU16 *lenr, IU8 *response );
+IS8 CT_init( IU16 ctn, IU16 pn );
+IS8 CT_data( IU16 ctn, IU8 *dad, IU8 *sad, IU16 lenc, IU8 *command,
+  IU16 *lenr, IU8 *response );
+IS8 CT_close( IU16 ctn );
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+#endif /* H_CTAPI */
+
dissimilarity index 61%
index 0e8f323..b133990 100644 (file)
--- a/src/fs.h
+++ b/src/fs.h
-/*
-       Simple Operating System for Smartcard Education
-       Copyright (C) 2002  Matthias Bruestle <m@mbsks.franken.de>
-
-       This program is free software; you can redistribute it and/or modify
-       it under the terms of the GNU General Public License as published by
-       the Free Software Foundation; either version 2 of the License, or
-       (at your option) any later version.
-
-       This program is distributed in the hope that it will be useful,
-       but WITHOUT ANY WARRANTY; without even the implied warranty of
-       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-       GNU General Public License for more details.
-
-       You should have received a copy of the GNU General Public License
-       along with this program; if not, write to the Free Software
-       Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-*/
-
-/*! @file
-       \brief File system declarations.
-
-       SOSSE implements a very simple file system. Each file starts with
-       following header:
-
-       - 2 Byte: Content size
-       - 2 Byte: ID
-       - 1 Byte: Type
-       - 1 Byte: Access conditions
-
-       Directly after that the content area is located. If the file is a
-       DF, this content area is directly used to add header/content
-       sequences.
-
-       After the content area of a file, a content size of 0 must be
-       writen as an end of data marker. This means the data capacity
-       of a MF or DF is the total content size of it minus 2.
-
-       Currently the file system support only one level of DFs, i.e.
-       the maximum depth is MF:DF:EF.
-
-       There are probably a lot optimization possibilities in this
-       file system, but I think this is not bad for my first designed and
-       implemented file system.
-
-       \todo
-       Here are certainly some optimizations possible to reduce code size.
-
-       $Id: fs.h,v 1.13 2002/12/22 15:42:55 m Exp $
-*/
-
-#ifndef ATMOS_FS_H
-#define ATMOS_FS_H
-
-#include <types.h>
-#include <fstream.h>
-
-/*! \brief File path specifier.
-
-       \todo
-       There is probably a potential for simplification, when the file
-       type (DF/EF) is not handled so rigid.
-*/
-typedef struct s_fpath {
-       iu16 df;        //!< ID of one DF level. Set to FFFF if unused.
-       iu16 ef;        //!< IF of the EF. Set to FFFF if unused.
-} S_FPATH;
-
-/*! \brief File info struct. This is directly written as a file header in the
-       file system.
-*/
-typedef struct s_finfo {
-       iu16 size;      //!< Size of the file content.
-       iu16 fid;               //!< ID of the file.
-       iu8 type;               //!< Type of the file. (FS_TYPE_*)
-       iu8 ac[1];      //!< Access conditions of the file. (See CREATE FILE dox.)
-} S_FINFO;
-
-//! File type DF
-#define FS_TYPE_DF     0x38
-//! File type EF
-#define FS_TYPE_EF     0x00
-
-//! Size of the file header, which is the same as S_FINFO.
-#define FS_HEADER_SIZE sizeof(S_FINFO)
-
-/*! \brief Path specified of the currently selected file.
-
-       \todo
-       Saving here a S_FINFO and/or S_FSTREAM of the selected file might
-       reduce the code size.
-*/
-extern S_FPATH selected;
-
-/*! \brief Initialize file system variables.
-
-       This looks e.g. for the start of the file system and it's size.
-       It must be called after each reset.
-
-    \retval TRUE on success.
-    \retval FALSE on failure. Error code given in sw.
-*/
-bool fs_init( void );
-/*! \brief Look for a file in a stream.
-
-    \param fid File ID to look for.
-    \param fs Pointer to S_FSTREAM, where the FID is searched for. It returns
-               on success a stream on the file found.
-       \param fi Pointer to S_FINFO, which will be filled with data on success.
-       \param type Type of file wanted.
-
-    \retval TRUE on success.
-    \retval FALSE on failure. Error code given in sw.
-
-       \todo
-       There is probably a potential for simplification, when the file
-       type is not handled so rigid.
-*/
-bool fs_seek( iu16 fid, S_FSTREAM *fs, S_FINFO *fi, iu8 type );
-/*! \brief Look for the end of files in the stream.
-
-    \param fs Pointer to S_FSTREAM, which supplies a directory stream and
-               which will be used to return the end position on success.
-
-    \retval TRUE on success.
-    \retval FALSE on failure. Error code given in sw.
-*/
-bool fs_seekEnd( S_FSTREAM *fs );
-/*! \brief Get stream and info for a file specified as a path.
-
-    \param fp Pointer to S_FPATH, which is used to supply the information
-               about the file wanted.
-       \param fs Pointer to S_FSTREAM, which will be filled with data on success.
-       \param fi Pointer to S_FINFO, which will be filled with data on success.
-
-    \retval TRUE on success.
-    \retval FALSE on failure. Error code given in sw.
-*/
-bool fs_getData( S_FPATH *fp, S_FSTREAM *fs, S_FINFO *fi );
-/*! \brief Get path, stream and info for a file specified as a FID.
-
-       The file is searched for in the order described in the SELECT FILE
-       documentation on the main page.
-
-    \param fid File ID to look for.
-       \param fp Pointer to S_FPATH, which will be filled with data on success.
-       \param fs Pointer to S_FSTREAM, which will be filled with data on success.
-               This can be NULL when no data is wanted.
-       \param fi Pointer to S_FINFO, which will be filled with data on success.
-               This can be NULL when no data is wanted.
-
-    \retval TRUE on success.
-    \retval FALSE on failure. Error code given in sw.
-*/
-bool fs_getFPath( iu16 fid, S_FPATH *fp, S_FSTREAM *fs, S_FINFO *fi );
-/*! \brief Delete file specified as fid.
-
-       The function looks for the fid in the current file, which must be
-       a MF or DF. The file, which should be deleted must be the last one
-       in the current MF or DF.
-
-    \param fid ID of the file to delete.
-
-    \retval TRUE on success.
-    \retval FALSE on failure. Error code given in sw.
-*/
-bool fs_delete( iu16 fid );
-/*! \brief The function creates a file.
-
-       The functions creates a file with the data in <EM>fi</EM>. The
-       current file must be a MF or DF. In case the current file is a
-       DF, the file, which should be created, can't be a DF.
-
-    \param fi Pointer to S_FINFO, which contains the data of the file to
-               create.
-
-    \retval TRUE on success.
-    \retval FALSE on failure. Error code given in sw.
-*/
-bool fs_create( S_FINFO *fi );
-
-#endif /* ATMOS_FS_H */
-
+/*
+  Simple Operating System for Smartcard Education
+  Copyright (C) 2002  Matthias Bruestle <m@mbsks.franken.de>
+
+  This program is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2 of the License, or
+  (at your option) any later version.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this program; if not, write to the Free Software
+  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+*/
+
+/*! @file
+  \brief File system declarations.
+
+  SOSSE implements a very simple file system. Each file starts with
+  following header:
+
+  - 2 Byte: Content size
+  - 2 Byte: ID
+  - 1 Byte: Type
+  - 1 Byte: Access conditions
+
+  Directly after that the content area is located. If the file is a
+  DF, this content area is directly used to add header/content
+  sequences.
+
+  After the content area of a file, a content size of 0 must be
+  writen as an end of data marker. This means the data capacity
+  of a MF or DF is the total content size of it minus 2.
+
+  Currently the file system support only one level of DFs, i.e.
+  the maximum depth is MF:DF:EF.
+
+  There are probably a lot optimization possibilities in this
+  file system, but I think this is not bad for my first designed and
+  implemented file system.
+
+  \todo
+  Here are certainly some optimizations possible to reduce code size.
+
+  $Id: fs.h,v 1.13 2002/12/22 15:42:55 m Exp $
+*/
+
+#ifndef ATMOS_FS_H
+#define ATMOS_FS_H
+
+#include <types.h>
+#include <fstream.h>
+
+/*! \brief File path specifier.
+
+  \todo
+  There is probably a potential for simplification, when the file
+  type (DF/EF) is not handled so rigid.
+*/
+typedef struct s_fpath {
+  iu16 df;  //!< ID of one DF level. Set to FFFF if unused.
+  iu16 ef;  //!< IF of the EF. Set to FFFF if unused.
+} S_FPATH;
+
+/*! \brief File info struct. This is directly written as a file header in the
+  file system.
+*/
+typedef struct s_finfo {
+  iu16 size;  //!< Size of the file content.
+  iu16 fid;   //!< ID of the file.
+  iu8 type;   //!< Type of the file. (FS_TYPE_*)
+  iu8 ac[1];  //!< Access conditions of the file. (See CREATE FILE dox.)
+} S_FINFO;
+
+//! File type DF
+#define FS_TYPE_DF  0x38
+//! File type EF
+#define FS_TYPE_EF  0x00
+
+//! Size of the file header, which is the same as S_FINFO.
+#define FS_HEADER_SIZE  sizeof(S_FINFO)
+
+/*! \brief Path specified of the currently selected file.
+
+  \todo
+  Saving here a S_FINFO and/or S_FSTREAM of the selected file might
+  reduce the code size.
+*/
+extern S_FPATH selected;
+
+/*! \brief Initialize file system variables.
+
+  This looks e.g. for the start of the file system and it's size.
+  It must be called after each reset.
+
+    \retval TRUE on success.
+    \retval FALSE on failure. Error code given in sw.
+*/
+bool fs_init( void );
+/*! \brief Look for a file in a stream.
+
+    \param fid File ID to look for.
+    \param fs Pointer to S_FSTREAM, where the FID is searched for. It returns
+    on success a stream on the file found.
+  \param fi Pointer to S_FINFO, which will be filled with data on success.
+  \param type Type of file wanted.
+
+    \retval TRUE on success.
+    \retval FALSE on failure. Error code given in sw.
+
+  \todo
+  There is probably a potential for simplification, when the file
+  type is not handled so rigid.
+*/
+bool fs_seek( iu16 fid, S_FSTREAM *fs, S_FINFO *fi, iu8 type );
+/*! \brief Look for the end of files in the stream.
+
+    \param fs Pointer to S_FSTREAM, which supplies a directory stream and
+    which will be used to return the end position on success.
+
+    \retval TRUE on success.
+    \retval FALSE on failure. Error code given in sw.
+*/
+bool fs_seekEnd( S_FSTREAM *fs );
+/*! \brief Get stream and info for a file specified as a path.
+
+    \param fp Pointer to S_FPATH, which is used to supply the information
+    about the file wanted.
+  \param fs Pointer to S_FSTREAM, which will be filled with data on success.
+  \param fi Pointer to S_FINFO, which will be filled with data on success.
+
+    \retval TRUE on success.
+    \retval FALSE on failure. Error code given in sw.
+*/
+bool fs_getData( S_FPATH *fp, S_FSTREAM *fs, S_FINFO *fi );
+/*! \brief Get path, stream and info for a file specified as a FID.
+
+  The file is searched for in the order described in the SELECT FILE
+  documentation on the main page.
+
+    \param fid File ID to look for.
+  \param fp Pointer to S_FPATH, which will be filled with data on success.
+  \param fs Pointer to S_FSTREAM, which will be filled with data on success.
+    This can be NULL when no data is wanted.
+  \param fi Pointer to S_FINFO, which will be filled with data on success.
+    This can be NULL when no data is wanted.
+
+    \retval TRUE on success.
+    \retval FALSE on failure. Error code given in sw.
+*/
+bool fs_getFPath( iu16 fid, S_FPATH *fp, S_FSTREAM *fs, S_FINFO *fi );
+/*! \brief Delete file specified as fid.
+
+  The function looks for the fid in the current file, which must be
+  a MF or DF. The file, which should be deleted must be the last one
+  in the current MF or DF.
+
+    \param fid ID of the file to delete.
+
+    \retval TRUE on success.
+    \retval FALSE on failure. Error code given in sw.
+*/
+bool fs_delete( iu16 fid );
+/*! \brief The function creates a file.
+
+  The functions creates a file with the data in <EM>fi</EM>. The
+  current file must be a MF or DF. In case the current file is a
+  DF, the file, which should be created, can't be a DF.
+
+    \param fi Pointer to S_FINFO, which contains the data of the file to
+    create.
+
+    \retval TRUE on success.
+    \retval FALSE on failure. Error code given in sw.
+*/
+bool fs_create( S_FINFO *fi );
+
+#endif /* ATMOS_FS_H */
+
index c2c7e1d..44b2706 100644 (file)
@@ -1,33 +1,33 @@
 /*
-       Simple Operating System for Smartcard Education
-       Copyright (C) 2002  Matthias Bruestle <m@mbsks.franken.de>
-
-       This program is free software; you can redistribute it and/or modify
-       it under the terms of the GNU General Public License as published by
-       the Free Software Foundation; either version 2 of the License, or
-       (at your option) any later version.
-
-       This program is distributed in the hope that it will be useful,
-       but WITHOUT ANY WARRANTY; without even the implied warranty of
-       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-       GNU General Public License for more details.
-
-       You should have received a copy of the GNU General Public License
-       along with this program; if not, write to the Free Software
-       Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+  Simple Operating System for Smartcard Education
+  Copyright (C) 2002  Matthias Bruestle <m@mbsks.franken.de>
+
+  This program is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2 of the License, or
+  (at your option) any later version.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this program; if not, write to the Free Software
+  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */
 
 /*! @file
-       \brief File stream declarations.
+  \brief File stream declarations.
 
-       These streams are used to pass more easily EEPROM areas around and
-       to reduce the chances of overwriting unwanted EEPROM areas, e.g.
-       by overflowing the data area.
+  These streams are used to pass more easily EEPROM areas around and
+  to reduce the chances of overwriting unwanted EEPROM areas, e.g.
+  by overflowing the data area.
 
-       This is a very slim version of the streams implemented in cryptlib
-       from Peter Gutmann.
+  This is a very slim version of the streams implemented in cryptlib
+  from Peter Gutmann.
 
-       $Id: fstream.h,v 1.8 2002/12/22 15:42:55 m Exp $
+  $Id: fstream.h,v 1.8 2002/12/22 15:42:55 m Exp $
 */
 
 #ifndef ATMOS_FSTREAM_H
 
 //! Stream struct.
 typedef struct s_fstream {
-       iu16 start;     //!< EEPROM start address of the stream.
-       iu16 size;      //!< Data size of the stream.
-       iu16 pos;               //!< Current position in the stream.
+  iu16 start; //!< EEPROM start address of the stream.
+  iu16 size;  //!< Data size of the stream.
+  iu16 pos;   //!< Current position in the stream.
 } S_FSTREAM;
 
 /*! \brief Read data from a stream.
 
-       Either this functions reads all data or nothing.
+  Either this functions reads all data or nothing.
 
     \param fs Pointer to S_FSTREAM, on which it should be operated.
     \param dst Pointer to the data destination.
@@ -56,7 +56,7 @@ typedef struct s_fstream {
 bool fstream_read( S_FSTREAM *fs, iu8 *dst, iu8 len );
 /*! \brief Write data to a stream.
 
-       This functions tries to write all or nothing.
+  This functions tries to write all or nothing.
 
     \param fs Pointer to S_FSTREAM, on which it should be operated.
     \param src Pointer to data source.
@@ -67,7 +67,7 @@ bool fstream_read( S_FSTREAM *fs, iu8 *dst, iu8 len );
 */
 bool fstream_write( S_FSTREAM *fs, iu8 *src, iu8 len );
 /*! \brief This function tests, if enough space is available to read or
-               write <EM>len</EM> bytes.
+    write <EM>len</EM> bytes.
 
     \param fs Pointer to S_FSTREAM, on which it should be operated.
     \param len Length of the data
index 3dac173..9908724 100644 (file)
@@ -27,7 +27,9 @@
 #if defined(CTAPI)
 #include <ctapi.h>
 #endif
+#ifdef USE_SIO
 #include <sio/sio.h>
+#endif
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>