[LON-CAPA-cvs] cvs: loncom /auth londes.js

www lon-capa-cvs@mail.lon-capa.org
Sat, 23 Mar 2002 20:40:57 -0000


This is a MIME encoded message

--www1016916057
Content-Type: text/plain

www		Sat Mar 23 15:40:57 2002 EDT

  Modified files:              
    /loncom/auth	londes.js 
  Log:
  Maybe this can be done easier ...
  
  
--www1016916057
Content-Type: text/plain
Content-Disposition: attachment; filename="www-20020323154057.txt"

Index: loncom/auth/londes.js
diff -u loncom/auth/londes.js:1.5 loncom/auth/londes.js:1.6
--- loncom/auth/londes.js:1.5	Sat Mar 23 06:59:22 2002
+++ loncom/auth/londes.js	Sat Mar 23 15:40:57 2002
@@ -3,7 +3,7 @@
 // Encryption Routines according to Data Encryption Standard DES
 // Federal Information Processing Standards Publication 46-2 (1993 Dec 30)
 //
-// $Id: londes.js,v 1.5 2002/03/23 11:59:22 www Exp $
+// $Id: londes.js,v 1.6 2002/03/23 20:40:57 www Exp $
 //
 // Copyright Michigan State University Board of Trustees
 //
@@ -28,7 +28,7 @@
 // http://www.lon-capa.org/
 //
 // JavaScript Implementation by Gerd Kortemeyer
-// 1997,06/27/00,06/28,03/23/02 Gerd Kortemeyer
+// 1997,06/27/00,06/28 Gerd Kortemeyer
 
 // Global variables
 
@@ -68,25 +68,6 @@
 // Text variable
 var text="";
 
-
-// Function to AND with bit i
-
-function andbit(value,i) {
-   return value&bit[i];
-}
-
-// General OR function
-
-function orvalue(a,b) {
-   return a|b;
-}
-
-// Function to OR with bit i
-
-function orbit(value,i) {
-   return orvalue(value,bit[i]);
-}
-
 // Initialize table arrays and perform self test
 
 function init() {
@@ -147,104 +128,6 @@
         etarr[i]=parseInt(et.substring(i*2,i*2+2));
      }
 
-// Selftest
-     window.status="Self test";
-
-// Primitive test, "Cryptography: A New Dimension in Computer Security"
-// C.H. Meyer, S.M. Matyas, John Wiley and Sons, 1982, pg. 160
-
-     uextkey=0x1234567;
-     lextkey=orbit(0x9abcdef,31);
-     ublock=uextkey;
-     lblock=lextkey;
-     ip();
-     if (hexstring(lv)!='cc00ccff') { alert("IP failed: lv."); }
-     if (hexstring(rv)!='f0aaf0aa') { alert("IP failed: rv."); }
-     initkeys();
-     if (hexstring(uk[1])!='000b0267') { alert("Key generation failed: uk"); }
-     if (hexstring(lk[1])!='009b49a5') { alert("Key generation failed: lk"); }
-     stage(1);
-     if (hexstring(uexpand)!='007a1555') { alert("E failed: u"); }
-     if (hexstring(lexpand)!='007a1555') { alert("E failed: l"); }
-     if (hexstring(rv)!='921c209c') { alert("Stage 1 failed"); }
-
-// According to National Bureau of Standards, Special Publication 500-20,
-// "Validating the Correctness of Hardware Implementations of the
-//  NBS Data Encryption Standard", Rev. Sep. 1980.
-
-// PC-1 and PC-2 test
-     ublock=0;
-     lblock=0;     
-     uextkey=0x1010101;
-     lextkey=0x1010102;
-     initkeys();
-     encrypt();    
-     var st=hexstring(ublock);
-     st+=hexstring(lblock);
-     if (st!="869efd7f9f265a09") {
-        st+=": failed PC-1 and PC-2 test!";     
-        alert(st);
-     }
-     window.status="Self test .";
-
-// According to NBS 500-20 IP and E test
-     ublock=orbit(0x66b40b4,28);
-     lblock=orbit(0xaba4bd6,30);
-     uextkey=0x1010101;
-     lextkey=0x1010101;
-     initkeys();
-     encrypt();    
-     var st=hexstring(ublock);
-     st+=hexstring(lblock);
-     if (st!="0000000000000001") {
-        st+=": failed IP and E test!";     
-        alert(st);
-     }
-     window.status="Self test ..";
-    
-// According to NBS 500-20 ptest
-     ublock=0;
-     lblock=0;
-     uextkey=orbit(0x29116,28);
-     lextkey=orbit(orbit(0x8100101,28),31);
-     initkeys();
-     encrypt();    
-     var st=hexstring(ublock);
-     st+=hexstring(lblock);
-     if (st!="1aeac39a61f0a464") {
-        st+=": failed ptest!";     
-        alert(st);
-     }
-     window.status="Self test ...";
-
-// According to NBS 500-20 S-box test
-     ublock=orbit(orbit(0x553228,28),29);
-     lblock=orbit(orbit(0xd6f295a,29),30);
-     var orgu=ublock;
-     var orgl=lblock;
-     uextkey=orbit(0xc587f1c,28);
-     lextkey=orbit(0x3924fef,28);
-     initkeys();
-     encrypt();
-     var st=hexstring(ublock);
-     st+=hexstring(lblock);
-     if (st!="63fac0d034d9f793") {
-        st+=": failed S-box test!";     
-        alert(st);
-     }
-     window.status="Self test ....";
-
-// Decryption test
-     decrypt();
-     if (ublock!=orgu) { alert("Decryption failed for ublock."); }
-     if (lblock!=orgl) { alert("Decryption failed for lblock."); }
-     window.status="Self test .....";
-
-// Reset keys
-
-     uextkey=0;
-     lextkey=0;
-
      window.status="Ready.";
 }
 
@@ -255,7 +138,7 @@
      var hchr="0123456789abcdef";
      for (var k=28; k>=0; k=k-4) {
          j=0;
-         for (var m=0; m<=3; m++) { if (andbit(i,k+m)!=0) { j=orbit(j,m); } }
+         for (var m=0; m<=3; m++) { if ((i&bit[k+m])!=0) { j=j|bit[m]; } }
          hstr+=hchr.substring(j,j+1);
      }   
      return(hstr);
@@ -264,7 +147,7 @@
 // Shift a 28-bit register one time
 
 function shift(sreg) {
-     var bit27=andbit(sreg,0)<<27;
+     var bit27=(sreg&bit[0])<<27;
      return (sreg>>1)|bit27;
 }
         
@@ -291,15 +174,15 @@
      for (var i=0; i<=27;i++) {
           bt=parseInt(celements.substring(i*2,i*2+2));
           if (bt<=32) {
-              if (andbit(uextkey,31-(bt-1)) != 0) { c=orbit(c,i); }
+              if ((uextkey & bit[31-(bt-1)]) != 0) { c=c|bit[i]; }
           } else {
-              if (andbit(lextkey,31-(bt-33)) != 0) { c=orbit(c,i); }
+              if ((lextkey & bit[31-(bt-33)]) != 0) { c=c|bit[i]; }
           }
           bt=parseInt(delements.substring(i*2,i*2+2));
           if (bt<=32) {
-              if (andbit(uextkey,31-(bt-1)) != 0) { d=orbit(d,i); }
+              if ((uextkey & bit[31-(bt-1)]) != 0) { d=d|bit[i]; }
           } else {
-              if (andbit(lextkey,31-(bt-33)) != 0) { d=orbit(d,i); }
+              if ((lextkey & bit[31-(bt-33)]) != 0) { d=d|bit[i]; }
           }
       }
 // Initialize the k vectors
@@ -315,8 +198,8 @@
           uk[i]=0;
           lk[i]=0;
           for (j=0; j<=23;j++) {            
-            if (andbit(d,ukarr[j]-29)!=0) { lk[i]=orbit(lk[i],23-j); }
-            if (andbit(c,lkarr[j]-1)!=0)  { uk[i]=orbit(uk[i],23-j); }
+            if ((d&bit[ukarr[j]-29])!=0) { lk[i]=lk[i]|bit[23-j]; }
+            if ((c&bit[lkarr[j]-1])!=0) { uk[i]=uk[i]|bit[23-j]; }
           }
       }
 }
@@ -330,14 +213,14 @@
      for (var i=0; i<=31;i++) {
           bt=riparr[i];
           if (bt<=32) {
-              if (andbit(lblock,bt-1) != 0) { rv=orbit(rv,i); }
+              if ((lblock & bit[bt-1]) != 0) { rv=rv|bit[i]; }
           } else {
-              if (andbit(ublock,bt-33) != 0) { rv=orbit(rv,i); }
+              if ((ublock & bit[bt-33]) != 0) { rv=rv|bit[i]; }
           }
           if (bt<=33) {
-              if (andbit(lblock,bt-2) != 0) { lv=orbit(lv,i); }
+              if ((lblock & bit[bt-2]) != 0) { lv=lv|bit[i]; }
           } else {
-              if (andbit(ublock,bt-34) != 0) { lv=orbit(lv,i); }
+              if ((ublock & bit[bt-34]) != 0) { lv=lv|bit[i]; }
           }     
      }
 }
@@ -350,11 +233,11 @@
      lblock=0;
      for (var i=0; i<=15;i++) {
           bt=liiparr[i];
-          if (andbit(rv,bt-1) != 0) { lblock=orbit(lblock,i*2); }
-          if (andbit(lv,bt-1) != 0) { lblock=orbit(lblock,i*2+1); }
+          if ((rv & bit[bt-1]) != 0) { lblock=lblock|bit[i*2]; }
+          if ((lv & bit[bt-1]) != 0) { lblock=lblock|bit[i*2+1]; }
           bt=uiiparr[i];
-          if (andbit(rv,bt-1) != 0) { ublock=orbit(ublock,i*2); }
-          if (andbit(lv,bt-1) != 0) { ublock=orbit(ublock,i*2+1); }
+          if ((rv & bit[bt-1]) != 0) { ublock=ublock|bit[i*2]; }
+          if ((lv & bit[bt-1]) != 0) { ublock=ublock|bit[i*2+1]; }
      }
 }
 
@@ -366,11 +249,11 @@
     lexpand=0;
     for (var i=0; i<=23; i++) {
        bt=etarr[i];
-       if (andbit(rv,bt-1)!=0) { lexpand=orbit(lexpand,i); } 
+       if (rv & bit[bt-1]) { lexpand=lexpand|bit[i]; } 
     }
     for (i=24; i<=47; i++) {
        bt=etarr[i];
-       if (andbit(rv,bt-1)!=0) { uexpand=orbit(uexpand,i-24); }
+       if (rv & bit[bt-1]) { uexpand=uexpand|bit[i-24]; }
     }
 }
 
@@ -380,7 +263,7 @@
     var prv=rv;
     rv=0;
     for (var i=0; i<=31; i++) {
-       if (andbit(prv,31-(pparr[i]-1))!=0) { rv=orbit(rv,31-i); }
+       if ((prv&bit[31-(pparr[i]-1)])!=0) { rv=rv|bit[31-i]; }
     }
 }
 
@@ -395,25 +278,25 @@
     for (var ki=42;ki>=24;ki=ki-6) {
        rv=rv<<4;
        var i=0;
-       if (andbit(uadd,ki-24)!=0) { i=orbit(i,0); }
-       if (andbit(uadd,ki-19)!=0) { i=orbit(i,1); }
+       if ((uadd&bit[ki-24])!=0) { i=i|bit[0]; }
+       if ((uadd&bit[ki-19])!=0) { i=i|bit[1]; }
        var j=0;
        for (var kj=0; kj<=3; kj++) {
-          if (andbit(uadd,ki-23+kj)!=0) { j=orbit(j,kj); }
+          if ((uadd&bit[ki-23+kj])!=0) { j=j|bit[kj]; }
        }
-       rv=orvalue(rv,sbarr[ks*64+i*16+j]);
+       rv=rv|sbarr[ks*64+i*16+j];
        ks++;
     } 
     for (var ki=18;ki>=0;ki=ki-6) {
        rv=rv<<4;
        var i=0;
-       if (andbit(ladd,ki)  !=0) { i=orbit(i,0); }
-       if (andbit(ladd,ki+5)!=0) { i=orbit(i,1); }
+       if ((ladd&bit[ki]  )!=0) { i=i|bit[0]; }
+       if ((ladd&bit[ki+5])!=0) { i=i|bit[1]; }
        var j=0;
        for (var kj=0; kj<=3; kj++) {
-          if (andbit(ladd,ki+1+kj)!=0) { j=orbit(j,kj); }
+          if ((ladd&bit[ki+1+kj])!=0) { j=j|bit[kj]; }
        }
-       rv=orvalue(rv,sbarr[ks*64+i*16+j]);
+       rv=rv|sbarr[ks*64+i*16+j];
        ks++;
     }
     permute();

--www1016916057--