Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
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