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, "pkcs1_pss_sha256")==0)
00049     return GWEN_Crypt_PaddAlgoId_Pkcs1_Pss_Sha256;
00050   else if (strcasecmp(s, "any")==0)
00051     return GWEN_Crypt_PaddAlgoId_Any;
00052   return GWEN_Crypt_PaddAlgoId_Unknown;
00053 }
00054 
00055 
00056 
00057 const char *GWEN_Crypt_PaddAlgoId_toString(GWEN_CRYPT_PADDALGOID a) {
00058   switch(a) {
00059   case GWEN_Crypt_PaddAlgoId_None:
00060     return "none";
00061   case GWEN_Crypt_PaddAlgoId_Iso9796_1:
00062     return "iso9796_1";
00063   case GWEN_Crypt_PaddAlgoId_Iso9796_1A4:
00064     return "iso9796_1a4";
00065   case GWEN_Crypt_PaddAlgoId_Iso9796_2:
00066     return "iso9796_2";
00067   case GWEN_Crypt_PaddAlgoId_Pkcs1_1:
00068     return "pkcs1_1";
00069   case GWEN_Crypt_PaddAlgoId_Pkcs1_2:
00070     return "pkcs1_2";
00071   case GWEN_Crypt_PaddAlgoId_LeftZero:
00072     return "leftzero";
00073   case GWEN_Crypt_PaddAlgoId_RightZero:
00074     return "rightzero";
00075   case GWEN_Crypt_PaddAlgoId_AnsiX9_23:
00076     return "ansix9_23";
00077   case GWEN_Crypt_PaddAlgoId_Pkcs1_Pss_Sha256:
00078     return "pkcs1_pss_sha256";
00079   case GWEN_Crypt_PaddAlgoId_Any:
00080     return "any";
00081   default:
00082     return "unknown";
00083   }
00084 }
00085 
00086 
00087 
00088 GWEN_CRYPT_PADDALGO *GWEN_Crypt_PaddAlgo_new(GWEN_CRYPT_PADDALGOID id) {
00089   GWEN_CRYPT_PADDALGO *a;
00090 
00091   GWEN_NEW_OBJECT(GWEN_CRYPT_PADDALGO, a);
00092   a->refCount=1;
00093 
00094   a->id=id;
00095 
00096   return a;
00097 }
00098 
00099 
00100 
00101 void GWEN_Crypt_PaddAlgo_Attach(GWEN_CRYPT_PADDALGO *a) {
00102   assert(a);
00103   assert(a->refCount);
00104   a->refCount++;
00105 }
00106 
00107 
00108 
00109 GWEN_CRYPT_PADDALGO *GWEN_Crypt_PaddAlgo_fromDb(GWEN_DB_NODE *db) {
00110   const char *s;
00111 
00112   assert(db);
00113   s=GWEN_DB_GetCharValue(db, "id", 0, NULL);
00114   if (s) {
00115     GWEN_CRYPT_PADDALGO *a;
00116     GWEN_CRYPT_PADDALGOID id;
00117 
00118     id=GWEN_Crypt_PaddAlgoId_fromString(s);
00119     if (id==GWEN_Crypt_PaddAlgoId_Unknown) {
00120       DBG_INFO(GWEN_LOGDOMAIN, "Unknown paddalgo id [%s]", s);
00121       return NULL;
00122     }
00123     a=GWEN_Crypt_PaddAlgo_new(id);
00124     assert(a);
00125 
00126     a->paddSize=GWEN_DB_GetIntValue(db, "paddSize", 0, 0);
00127 
00128     return a;
00129   }
00130   else {
00131     DBG_INFO(GWEN_LOGDOMAIN, "Missing paddalgo id");
00132     return NULL;
00133   }
00134 }
00135 
00136 
00137 
00138 int GWEN_Crypt_PaddAlgo_toDb(const GWEN_CRYPT_PADDALGO *a, GWEN_DB_NODE *db) {
00139   assert(a);
00140   assert(a->refCount);
00141 
00142   GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS,
00143                        "id",
00144                        GWEN_Crypt_PaddAlgoId_toString(a->id));
00145   GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS,
00146                       "paddSize", a->paddSize);
00147   return 0;
00148 }
00149 
00150 
00151 
00152 GWEN_CRYPT_PADDALGO *GWEN_Crypt_PaddAlgo_dup(const GWEN_CRYPT_PADDALGO *na) {
00153   GWEN_CRYPT_PADDALGO *a;
00154 
00155   assert(na);
00156   a=GWEN_Crypt_PaddAlgo_new(na->id);
00157   a->paddSize=na->paddSize;
00158   return a;
00159 }
00160 
00161 
00162 
00163 void GWEN_Crypt_PaddAlgo_free(GWEN_CRYPT_PADDALGO *a) {
00164   if (a) {
00165     assert(a->refCount);
00166     if (a->refCount==1) {
00167       a->refCount--;
00168       GWEN_FREE_OBJECT(a);
00169     }
00170     else {
00171       a->refCount--;
00172     }
00173   }
00174 }
00175 
00176 
00177 
00178 GWEN_CRYPT_PADDALGOID GWEN_Crypt_PaddAlgo_GetId(const GWEN_CRYPT_PADDALGO *a){
00179   assert(a);
00180   assert(a->refCount);
00181   return a->id;
00182 }
00183 
00184 
00185 
00186 int GWEN_Crypt_PaddAlgo_GetPaddSize(const GWEN_CRYPT_PADDALGO *a){
00187   assert(a);
00188   assert(a->refCount);
00189   return a->paddSize;
00190 }
00191 
00192 
00193 
00194 void GWEN_Crypt_PaddAlgo_SetPaddSize(GWEN_CRYPT_PADDALGO *a, int s){
00195   assert(a);
00196   assert(a->refCount);
00197   a->paddSize=s;
00198 }
00199 
00200 
00201 
00202 

Generated on Thu Aug 20 13:54:39 2009 for gwenhywfar by  doxygen 1.5.9