paddalgo.c

Go to the documentation of this file.
00001 /***************************************************************************
00002  $RCSfile$
00003                              -------------------
00004     cvs         : $Id: crypttoken.h 1113 2007-01-10 09:14:16Z martin $
00005     begin       : Wed Mar 16 2005
00006     copyright   : (C) 2005 by Martin Preuss
00007     email       : martin@libchipcard.de
00008 
00009  ***************************************************************************
00010  *          Please see toplevel file COPYING for license details           *
00011  ***************************************************************************/
00012 
00013 #ifdef HAVE_CONFIG_H
00014 # include <config.h>
00015 #endif
00016 
00017 
00018 #include "paddalgo_p.h"
00019 #include <gwenhywfar/misc.h>
00020 #include <gwenhywfar/debug.h>
00021 
00022 
00023 
00024 GWEN_LIST2_FUNCTIONS(GWEN_CRYPT_PADDALGO, GWEN_Crypt_PaddAlgo)
00025 
00026 
00027 
00028 GWEN_CRYPT_PADDALGOID GWEN_Crypt_PaddAlgoId_fromString(const char *s) {
00029   assert(s);
00030   if (strcasecmp(s, "none")==0)
00031     return GWEN_Crypt_PaddAlgoId_None;
00032   else if (strcasecmp(s, "iso9796_1")==0)
00033     return GWEN_Crypt_PaddAlgoId_Iso9796_1;
00034   else if (strcasecmp(s, "iso9796_1a4")==0)
00035     return GWEN_Crypt_PaddAlgoId_Iso9796_1A4;
00036   else if (strcasecmp(s, "iso9796_2")==0)
00037     return GWEN_Crypt_PaddAlgoId_Iso9796_2;
00038   else if (strcasecmp(s, "pkcs1_1")==0)
00039     return GWEN_Crypt_PaddAlgoId_Pkcs1_1;
00040   else if (strcasecmp(s, "pkcs1_2")==0)
00041     return GWEN_Crypt_PaddAlgoId_Pkcs1_2;
00042   else if (strcasecmp(s, "leftzero")==0)
00043     return GWEN_Crypt_PaddAlgoId_LeftZero;
00044   else if (strcasecmp(s, "rightzero")==0)
00045     return GWEN_Crypt_PaddAlgoId_RightZero;
00046   else if (strcasecmp(s, "ansix9_23")==0)
00047     return GWEN_Crypt_PaddAlgoId_AnsiX9_23;
00048   else if (strcasecmp(s, "any")==0)
00049     return GWEN_Crypt_PaddAlgoId_Any;
00050   return GWEN_Crypt_PaddAlgoId_Unknown;
00051 }
00052 
00053 
00054 
00055 const char *GWEN_Crypt_PaddAlgoId_toString(GWEN_CRYPT_PADDALGOID a) {
00056   switch(a) {
00057   case GWEN_Crypt_PaddAlgoId_None:
00058     return "none";
00059   case GWEN_Crypt_PaddAlgoId_Iso9796_1:
00060     return "iso9796_1";
00061   case GWEN_Crypt_PaddAlgoId_Iso9796_1A4:
00062     return "iso9796_1a4";
00063   case GWEN_Crypt_PaddAlgoId_Iso9796_2:
00064     return "iso9796_2";
00065   case GWEN_Crypt_PaddAlgoId_Pkcs1_1:
00066     return "pkcs1_1";
00067   case GWEN_Crypt_PaddAlgoId_Pkcs1_2:
00068     return "pkcs1_2";
00069   case GWEN_Crypt_PaddAlgoId_LeftZero:
00070     return "leftzero";
00071   case GWEN_Crypt_PaddAlgoId_RightZero:
00072     return "rightzero";
00073   case GWEN_Crypt_PaddAlgoId_AnsiX9_23:
00074     return "ansix9_23";
00075   case GWEN_Crypt_PaddAlgoId_Any:
00076     return "any";
00077   default:
00078     return "unknown";
00079   }
00080 }
00081 
00082 
00083 
00084 GWEN_CRYPT_PADDALGO *GWEN_Crypt_PaddAlgo_new(GWEN_CRYPT_PADDALGOID id) {
00085   GWEN_CRYPT_PADDALGO *a;
00086 
00087   GWEN_NEW_OBJECT(GWEN_CRYPT_PADDALGO, a);
00088   a->refCount=1;
00089 
00090   a->id=id;
00091 
00092   return a;
00093 }
00094 
00095 
00096 
00097 void GWEN_Crypt_PaddAlgo_Attach(GWEN_CRYPT_PADDALGO *a) {
00098   assert(a);
00099   assert(a->refCount);
00100   a->refCount++;
00101 }
00102 
00103 
00104 
00105 GWEN_CRYPT_PADDALGO *GWEN_Crypt_PaddAlgo_fromDb(GWEN_DB_NODE *db) {
00106   const char *s;
00107 
00108   assert(db);
00109   s=GWEN_DB_GetCharValue(db, "id", 0, NULL);
00110   if (s) {
00111     GWEN_CRYPT_PADDALGO *a;
00112     GWEN_CRYPT_PADDALGOID id;
00113 
00114     id=GWEN_Crypt_PaddAlgoId_fromString(s);
00115     if (id==GWEN_Crypt_PaddAlgoId_Unknown) {
00116       DBG_INFO(GWEN_LOGDOMAIN, "Unknown paddalgo id [%s]", s);
00117       return NULL;
00118     }
00119     a=GWEN_Crypt_PaddAlgo_new(id);
00120     assert(a);
00121 
00122     a->paddSize=GWEN_DB_GetIntValue(db, "paddSize", 0, 0);
00123 
00124     return a;
00125   }
00126   else {
00127     DBG_INFO(GWEN_LOGDOMAIN, "Missing paddalgo id");
00128     return NULL;
00129   }
00130 }
00131 
00132 
00133 
00134 int GWEN_Crypt_PaddAlgo_toDb(const GWEN_CRYPT_PADDALGO *a, GWEN_DB_NODE *db) {
00135   assert(a);
00136   assert(a->refCount);
00137 
00138   GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS,
00139                        "id",
00140                        GWEN_Crypt_PaddAlgoId_toString(a->id));
00141   GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS,
00142                       "paddSize", a->paddSize);
00143   return 0;
00144 }
00145 
00146 
00147 
00148 GWEN_CRYPT_PADDALGO *GWEN_Crypt_PaddAlgo_dup(const GWEN_CRYPT_PADDALGO *na) {
00149   GWEN_CRYPT_PADDALGO *a;
00150 
00151   assert(na);
00152   a=GWEN_Crypt_PaddAlgo_new(na->id);
00153   a->paddSize=na->paddSize;
00154   return a;
00155 }
00156 
00157 
00158 
00159 void GWEN_Crypt_PaddAlgo_free(GWEN_CRYPT_PADDALGO *a) {
00160   if (a) {
00161     assert(a->refCount);
00162     if (a->refCount==1) {
00163       a->refCount--;
00164       GWEN_FREE_OBJECT(a);
00165     }
00166     else {
00167       a->refCount--;
00168     }
00169   }
00170 }
00171 
00172 
00173 
00174 GWEN_CRYPT_PADDALGOID GWEN_Crypt_PaddAlgo_GetId(const GWEN_CRYPT_PADDALGO *a){
00175   assert(a);
00176   assert(a->refCount);
00177   return a->id;
00178 }
00179 
00180 
00181 
00182 int GWEN_Crypt_PaddAlgo_GetPaddSize(const GWEN_CRYPT_PADDALGO *a){
00183   assert(a);
00184   assert(a->refCount);
00185   return a->paddSize;
00186 }
00187 
00188 
00189 
00190 void GWEN_Crypt_PaddAlgo_SetPaddSize(GWEN_CRYPT_PADDALGO *a, int s){
00191   assert(a);
00192   assert(a->refCount);
00193   a->paddSize=s;
00194 }
00195 
00196 
00197 
00198 

Generated on Wed Jul 9 13:12:28 2008 for gwenhywfar by  doxygen 1.5.6