gwenhywfar
4.3.3
|
00001 /*************************************************************************** 00002 begin : Wed Mar 16 2005 00003 copyright : (C) 2005 by Martin Preuss 00004 email : martin@libchipcard.de 00005 00006 *************************************************************************** 00007 * Please see toplevel file COPYING for license details * 00008 ***************************************************************************/ 00009 00010 #ifdef HAVE_CONFIG_H 00011 # include <config.h> 00012 #endif 00013 00014 00015 #define DISABLE_DEBUGLOG 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