TclPKCS11

Diff
Login

Diff

Differences From Artifact [621c9705a3]:

To Artifact [adf04fca8e]:


236
237
238
239
240
241
242

243

244
245

246
247
248
249
250
251
252
253



254


255
256
257
258
259
260
261
236
237
238
239
240
241
242
243

244
245

246

247
248
249
250
251


252
253
254
255
256
257
258
259
260
261
262
263
264







+
-
+

-
+
-





-
-
+
+
+

+
+







			return(Tcl_NewStringObj("PKCS11_ERROR VENDOR_DEFINED", -1));
	}

	return(Tcl_NewStringObj("PKCS11_ERROR UNKNOWN", -1));
}

MODULE_SCOPE Tcl_Obj *tclpkcs11_bytearray_to_string(const unsigned char *data, unsigned long datalen) {
	static char alphabet[] = "0123456789abcdef";
	unsigned long idx;
	unsigned long idx, bufidx;
	Tcl_Obj *retval;

	char buf[1024];
	retval = Tcl_NewObj();

	if (data == NULL) {
		return(retval);
	}

	for (idx = 0; idx < datalen; idx++) {
		Tcl_AppendObjToObj(retval, Tcl_ObjPrintf("%02x", data[idx]));
	for (bufidx = idx = 0; (idx < datalen) && (bufidx < sizeof(buf)); idx++) {
		buf[bufidx++] = (data[idx] >> 4) & 0xf;
		buf[bufidx++] = data[idx] & 0xf;
	}

	retval = Tcl_NewByteArrayObj(buf, bufidx);

	return(retval);
}

MODULE_SCOPE unsigned long tclpkcs11_string_to_bytearray(Tcl_Obj *data, unsigned char *outbuf, unsigned long outbuflen) {
	unsigned long outbufidx = 0;
	char tmpbuf[5];
552
553
554
555
556
557
558

559

560
561
562
563
564
565
566
555
556
557
558
559
560
561
562

563
564
565
566
567
568
569
570







+
-
+







		Tcl_SetObjResult(interp, tclpkcs11_pkcs11_error(chk_rv));

		return(TCL_ERROR);
	}

	interpdata = (struct tclpkcs11_interpdata *) cd;

	tcl_handle = Tcl_NewStringObj("pkcsmod", -1);
	tcl_handle = Tcl_ObjPrintf("pkcsmod%lu", interpdata->handles_idx);
	Tcl_AppendObjToObj(tcl_handle, Tcl_NewLongObj(interpdata->handles_idx));
	(interpdata->handles_idx)++;

	tcl_handle_entry = Tcl_CreateHashEntry(&interpdata->handles, (const char *) tcl_handle, &is_new_entry);
	if (!tcl_handle_entry) {
		Tcl_SetObjResult(interp, Tcl_NewStringObj("unable to create new hash entry", -1));

		return(TCL_ERROR);