in src/generic/crypt.c [146:239]
int doencrypt(Tcl_Interp * interp, Tcl_Obj * in, int internal)
{
CryptData *cryptData = NULL;
int lobjc = -1;
Tcl_Obj **lobjv = NULL;
int i = -1;
if ((interp == NULL) || (in == NULL))
return TCL_ERROR;
cryptData =
(CryptData *) Tcl_GetAssocData(interp, WEB_CRYPT_ASSOC_DATA, NULL);
WebAssertData(interp, cryptData, "doencrypt", TCL_ERROR);
WebAssertData(interp, cryptData->encryptChain, "doencrypt", TCL_ERROR);
/* ------------------------------------------------------------------------
* get elements from encryptchain
* --------------------------------------------------------------------- */
if (Tcl_ListObjGetElements(interp, cryptData->encryptChain,
&lobjc, &lobjv) == TCL_ERROR) {
LOG_MSG(interp, WRITE_LOG | SET_RESULT,
__FILE__, __LINE__,
"web::encrypt", WEBLOG_ERROR,
"error accessing encryptchain", NULL);
return TCL_ERROR;
}
/* --------------------------------------------------------------------------
* ... and loop
* ----------------------------------------------------------------------- */
for (i = 0; i <= lobjc; i++) {
int res = 0;
Tcl_Obj *cmd = NULL;
if (i < lobjc) {
if (lobjv[i] != NULL) {
cmd = Tcl_DuplicateObj(lobjv[i]);
Tcl_IncrRefCount(cmd);
} else {
cmd = NULL;
}
}
else {
if (!internal) {
Tcl_SetObjResult(interp, in);
return TCL_OK;
}
cmd = Tcl_NewListObj(0, NULL);
Tcl_IncrRefCount(cmd);
Tcl_ListObjAppendElement(interp, cmd,
Tcl_NewStringObj("web::list2uri", -1));
}
if (cmd != NULL) {
if (Tcl_ListObjAppendElement(interp, cmd, in) != TCL_OK) {
Tcl_DecrRefCount(cmd);
return TCL_ERROR;
}
res = Tcl_EvalObjEx(interp, cmd, TCL_EVAL_DIRECT);
Tcl_DecrRefCount(cmd);
switch (res) {
case TCL_OK:
return TCL_OK;
break;
case TCL_CONTINUE:
break;
default:
if (i < lobjc) {
LOG_MSG(interp, WRITE_LOG | SET_RESULT,
__FILE__, __LINE__,
"web::encrypt", WEBLOG_ERROR,
"encrypt method \"", Tcl_GetString(lobjv[i]),
"\": ", Tcl_GetStringResult(interp), NULL);
}
return TCL_ERROR;
break;
}
}
}
LOG_MSG(interp, WRITE_LOG | SET_RESULT,
__FILE__, __LINE__,
"web::encrypt", WEBLOG_ERROR,
"no matching encryption method found", NULL);
return TCL_ERROR;
}