Posted to tcl by mjanssen at Sun Jun 29 11:52:24 GMT 2008view raw

  1. critcl::ccommand MixColumns {cd interp objc objv} {
  2. Tcl_Obj * resObj = Tcl_NewListObj (0,0);
  3. Tcl_Obj * tempObj = NULL;
  4. int i;
  5. int r0,r1,r2,r3,s0,s1,s2,s3;
  6. Tcl_WideInt w;
  7. for (i=0;i<4;i++) {
  8. Tcl_ListObjIndex(interp,objv[1],i,&tempObj);
  9. Tcl_GetWideIntFromObj(interp,tempObj,&w);
  10. r0= (w >> 24) & 255;
  11. r1= (w >> 16) & 255;
  12. r2= (w >> 8 ) & 255;
  13. r3= w & 255;
  14. s0= xtime[r0] ^ (r1^xtime[r1]) ^ r2 ^ r3;
  15. s1= r0 ^ xtime[r1] ^ (r2^xtime[r2])^ r3;
  16. s2= r0 ^ r1 ^ (xtime[r2]) ^ (r3^xtime[r3]);
  17. s3= r0^xtime[r0] ^ r1 ^ r2 ^ xtime[r3];
  18. Tcl_Obj * l=Tcl_NewWideIntObj((s0 << 24) | (s1 << 16) | (s2 << | s3 );
  19. Tcl_ListObjAppendElement(interp,resObj,l);
  20. }
  21. Tcl_SetObjResult(interp,resObj);
  22. return TCL_OK;
  23. }