78 lines
7.6 KiB
JavaScript
78 lines
7.6 KiB
JavaScript
/*
|
|
* Ported from Flashlight VNC ActionScript implementation:
|
|
* http://www.wizhelp.com/flashlight-vnc/
|
|
*
|
|
* Full attribution follows:
|
|
*
|
|
* -------------------------------------------------------------------------
|
|
*
|
|
* This DES class has been extracted from package Acme.Crypto for use in VNC.
|
|
* The unnecessary odd parity code has been removed.
|
|
*
|
|
* These changes are:
|
|
* Copyright (C) 1999 AT&T Laboratories Cambridge. All Rights Reserved.
|
|
*
|
|
* This software is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
*
|
|
|
|
* DesCipher - the DES encryption method
|
|
*
|
|
* The meat of this code is by Dave Zimmerman <dzimm@widget.com>, and is:
|
|
*
|
|
* Copyright (c) 1996 Widget Workshop, Inc. All Rights Reserved.
|
|
*
|
|
* Permission to use, copy, modify, and distribute this software
|
|
* and its documentation for NON-COMMERCIAL or COMMERCIAL purposes and
|
|
* without fee is hereby granted, provided that this copyright notice is kept
|
|
* intact.
|
|
*
|
|
* WIDGET WORKSHOP MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY
|
|
* OF THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
|
|
* TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
|
* PARTICULAR PURPOSE, OR NON-INFRINGEMENT. WIDGET WORKSHOP SHALL NOT BE LIABLE
|
|
* FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
|
|
* DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
|
|
*
|
|
* THIS SOFTWARE IS NOT DESIGNED OR INTENDED FOR USE OR RESALE AS ON-LINE
|
|
* CONTROL EQUIPMENT IN HAZARDOUS ENVIRONMENTS REQUIRING FAIL-SAFE
|
|
* PERFORMANCE, SUCH AS IN THE OPERATION OF NUCLEAR FACILITIES, AIRCRAFT
|
|
* NAVIGATION OR COMMUNICATION SYSTEMS, AIR TRAFFIC CONTROL, DIRECT LIFE
|
|
* SUPPORT MACHINES, OR WEAPONS SYSTEMS, IN WHICH THE FAILURE OF THE
|
|
* SOFTWARE COULD LEAD DIRECTLY TO DEATH, PERSONAL INJURY, OR SEVERE
|
|
* PHYSICAL OR ENVIRONMENTAL DAMAGE ("HIGH RISK ACTIVITIES"). WIDGET WORKSHOP
|
|
* SPECIFICALLY DISCLAIMS ANY EXPRESS OR IMPLIED WARRANTY OF FITNESS FOR
|
|
* HIGH RISK ACTIVITIES.
|
|
*
|
|
*
|
|
* The rest is:
|
|
*
|
|
* Copyright (C) 1996 by Jef Poskanzer <jef@acme.com>. All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions
|
|
* are met:
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* 2. Redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
* documentation and/or other materials provided with the distribution.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
* SUCH DAMAGE.
|
|
*
|
|
* Visit the ACME Labs Java page for up-to-date versions of this and other
|
|
* fine Java utilities: http://www.acme.com/java/
|
|
*/
|
|
|
|
function DES(r){"use strict";function n(r){var n,o,f,c,t=0,e=r.slice(),i=0;for(o=e[t++]<<24|e[t++]<<16|e[t++]<<8|e[t++],f=e[t++]<<24|e[t++]<<16|e[t++]<<8|e[t++],c=252645135&(o>>>4^f),f^=c,o^=c<<4,c=65535&(o>>>16^f),f^=c,o^=c<<16,c=858993459&(f>>>2^o),o^=c,f^=c<<2,c=16711935&(f>>>8^o),o^=c,f^=c<<8,f=f<<1|f>>>31&1,c=2863311530&(o^f),o^=c,f^=c,o=o<<1|o>>>31&1,t=0;t<8;++t)c=f<<28|f>>>4,c^=d[i++],n=D[63&c],n|=p[c>>>8&63],n|=l[c>>>16&63],n|=s[c>>>24&63],c=f^d[i++],n|=E[63&c],n|=y[c>>>8&63],n|=v[c>>>16&63],n|=a[c>>>24&63],o^=n,c=o<<28|o>>>4,c^=d[i++],n=D[63&c],n|=p[c>>>8&63],n|=l[c>>>16&63],n|=s[c>>>24&63],c=o^d[i++],n|=E[63&c],n|=y[c>>>8&63],n|=v[c>>>16&63],n|=a[c>>>24&63],f^=n;for(f=f<<31|f>>>1,c=2863311530&(o^f),o^=c,f^=c,o=o<<31|o>>>1,c=16711935&(o>>>8^f),f^=c,o^=c<<8,c=858993459&(o>>>2^f),f^=c,o^=c<<2,c=65535&(f>>>16^o),o^=c,f^=c<<16,c=252645135&(f>>>4^o),o^=c,f^=c<<4,c=[f,o],t=0;t<8;t++)e[t]=(c[t>>>2]>>>8*(3-t%4))%256,e[t]<0&&(e[t]+=256);return e}function o(r){return n(r.slice(0,8)).concat(n(r.slice(8,16)))}var f,c,t,e,i,u,s,a,l,v,p,y,D,E,S=[13,16,10,23,0,4,2,27,14,5,20,9,22,18,11,3,25,7,15,6,26,19,12,1,40,51,30,36,46,54,29,39,50,44,32,47,43,48,38,55,33,52,45,41,49,35,28,31],b=[1,2,4,6,8,10,12,14,15,17,19,21,23,25,27,28],d=[];return f=65536,c=1<<24,t=f|c,e=4,i=1024,u=e|i,s=[t|i,0,0|f,t|u,t|e,f|u,0|e,0|f,0|i,t|i,t|u,0|i,c|u,t|e,0|c,0|e,0|u,c|i,c|i,f|i,f|i,0|t,0|t,c|u,f|e,c|e,c|e,f|e,0,0|u,f|u,0|c,0|f,t|u,0|e,0|t,t|i,0|c,0|c,0|i,t|e,0|f,f|i,c|e,0|i,0|e,c|u,f|u,t|u,f|e,0|t,c|u,c|e,0|u,f|u,t|i,0|u,c|i,c|i,0,f|e,f|i,0,t|e],f=1<<20,c=1<<31,t=f|c,e=32,i=32768,u=e|i,a=[t|u,c|i,0|i,f|u,0|f,0|e,t|e,c|u,c|e,t|u,t|i,0|c,c|i,0|f,0|e,t|e,f|i,f|e,c|u,0,0|c,0|i,f|u,0|t,f|e,c|e,0,f|i,0|u,t|i,0|t,0|u,0,f|u,t|e,0|f,c|u,0|t,t|i,0|i,0|t,c|i,0|e,t|u,f|u,0|e,0|i,0|c,0|u,t|i,0|f,c|e,f|e,c|u,c|e,f|e,f|i,0,c|i,0|u,0|c,t|e,t|u,f|i],f=1<<17,c=1<<27,t=f|c,e=8,i=512,u=e|i,l=[0|u,t|i,0,t|e,c|i,0,f|u,c|i,f|e,c|e,c|e,0|f,t|u,f|e,0|t,0|u,0|c,0|e,t|i,0|i,f|i,0|t,t|e,f|u,c|u,f|i,0|f,c|u,0|e,t|u,0|i,0|c,t|i,0|c,f|e,0|u,0|f,t|i,c|i,0,0|i,f|e,t|u,c|i,c|e,0|i,0,t|e,c|u,0|f,0|c,t|u,0|e,f|u,f|i,c|e,0|t,c|u,0|u,0|t,f|u,0|e,t|e,f|i],f=8192,c=1<<23,t=f|c,e=1,i=128,u=e|i,v=[t|e,f|u,f|u,0|i,t|i,c|u,c|e,f|e,0,0|t,0|t,t|u,0|u,0,c|i,c|e,0|e,0|f,0|c,t|e,0|i,0|c,f|e,f|i,c|u,0|e,f|i,c|i,0|f,t|i,t|u,0|u,c|i,c|e,0|t,t|u,0|u,0,0,0|t,f|i,c|i,c|u,0|e,t|e,f|u,f|u,0|i,t|u,0|u,0|e,0|f,c|e,f|e,t|i,c|u,f|e,f|i,0|c,t|e,0|i,0|c,0|f,t|i],f=1<<25,c=1<<30,t=f|c,e=256,i=1<<19,u=e|i,p=[0|e,f|u,f|i,t|e,0|i,0|e,0|c,f|i,c|u,0|i,f|e,c|u,t|e,t|i,0|u,0|c,0|f,c|i,c|i,0,c|e,t|u,t|u,f|e,t|i,c|e,0,0|t,f|u,0|f,0|t,0|u,0|i,t|e,0|e,0|f,0|c,f|i,t|e,c|u,f|e,0|c,t|i,f|u,c|u,0|e,0|f,t|i,t|u,0|u,0|t,t|u,f|i,0,c|i,0|t,0|u,f|e,c|e,0|i,0,c|i,f|u,c|e],f=1<<22,c=1<<29,t=f|c,e=16,i=16384,u=e|i,y=[c|e,0|t,0|i,t|u,0|t,0|e,t|u,0|f,c|i,f|u,0|f,c|e,f|e,c|i,0|c,0|u,0,f|e,c|u,0|i,f|i,c|u,0|e,t|e,t|e,0,f|u,t|i,0|u,f|i,t|i,0|c,c|i,0|e,t|e,f|i,t|u,0|f,0|u,c|e,0|f,c|i,0|c,0|u,c|e,t|u,f|i,0|t,f|u,t|i,0,t|e,0|e,0|i,0|t,f|u,0|i,f|e,c|u,0,t|i,0|c,f|e,c|u],f=1<<21,c=1<<26,t=f|c,e=2,i=2048,u=e|i,D=[0|f,t|e,c|u,0,0|i,c|u,f|u,t|i,t|u,0|f,0,c|e,0|e,0|c,t|e,0|u,c|i,f|u,f|e,c|i,c|e,0|t,t|i,f|e,0|t,0|i,0|u,t|u,f|i,0|e,0|c,f|i,0|c,f|i,0|f,c|u,c|u,t|e,t|e,0|e,f|e,0|c,c|i,0|f,t|i,0|u,f|u,t|i,0|u,c|e,t|u,0|t,f|i,0,0|e,t|u,0,f|u,0|t,0|i,c|e,c|i,0|i,f|e],f=1<<18,c=1<<28,t=f|c,e=64,i=4096,u=e|i,E=[c|u,0|i,0|f,t|u,0|c,c|u,0|e,0|c,f|e,0|t,t|u,f|i,t|i,f|u,0|i,0|e,0|t,c|e,c|i,0|u,f|i,f|e,t|e,t|i,0|u,0,0,t|e,c|e,c|i,f|u,0|f,f|u,0|f,t|i,0|i,0|e,t|e,0|i,f|u,c|i,0|e,c|e,0|t,t|e,0|c,0|f,c|u,0,t|u,f|e,c|e,0|t,c|i,c|u,0,t|u,f|i,f|i,0|u,0|u,f|e,0|c,t|i],function(r){var n,o,f,c,t,e,i,u,s,a,l=[],v=[],p=[];for(o=0,f=56;o<56;++o,f-=8)f+=f<-5?65:f<-3?31:f<-1?63:27===f?35:0,c=7&f,l[o]=0!=(r[f>>>3]&1<<c)?1:0;for(n=0;n<16;++n){for(c=n<<1,t=c+1,p[c]=p[t]=0,e=28;e<59;e+=28)for(o=e-28;o<e;++o)f=o+b[n],v[o]=f<e?l[f]:l[f-28];for(o=0;o<24;++o)0!==v[S[o]]&&(p[c]|=1<<23-o),0!==v[S[o+24]]&&(p[t]|=1<<23-o)}for(n=0,s=0,a=0;n<16;++n)i=p[s++],u=p[s++],d[a]=(16515072&i)<<6,d[a]|=(4032&i)<<10,d[a]|=(16515072&u)>>>10,d[a]|=(4032&u)>>>6,++a,d[a]=(258048&i)<<12,d[a]|=(63&i)<<16,d[a]|=(258048&u)>>>4,d[a]|=63&u,++a}(r),{encrypt:o}} |