/* CryptTest.c D. Swinehart September 7, 1982 5:31 PM L. Stewart October 20, 1982 9:31 PM L. Stewart December 27, 1982 2:58 PM flush nested declarations L. Stewart January 1, 1983 4:10 PM flush AllocZero L. Stewart January 3, 1983 1:14 PM flush CStringToString L. Stewart March 6, 1983 4:39 PM return of CStringToString */ #include <Alloc.h> #include <Queue.h> #include <Ec.h> #include <Env.h> #include <Signal.h> #include <rpc.h> #include <rpcinternal.h> #include <rpclupine.h> #include <RPCBind.h> #include <encrypt.h> extern AddToDispatcherSpecs(); extern AddType(); extern dBlock(); extern int *Allocate(); extern struct ShortSTRING *CStringToString(); extern Block(); extern CallContext(); extern int CallFormatted(); extern CallSwat(); extern int CONT(); extern Dismiss(); extern Free(); extern int ExportFailed; extern ExportInterface(); extern InitOS(); extern int ImportFailed; extern int ImportInterface(); extern struct VersionRange *matchAllVersions; extern Move2(); extern MoveBlock(); extern int mySoc; extern RPCInitialize(); extern RPCInitializeCtx(); extern int *StartDispatcherSpecs(); extern StartNProcess(); extern int StdDispatcher(); extern Zero(); extern ReadCalendar(); extern int largest, totAv, routSent, routRcvd, calSent, calRcvd; extern struct ZN *sysZone; extern struct EncryptionKey nullKeyB; static struct Queue ctxQ; static int/*BOOL*/ running; static int/*BOOL*/ beUser; static int/*BOOL*/ beServer; static struct ShortSTRING *retRope; static struct ShortSTRING *srvr, *usr; static struct ShortSTRING *spNl, *spWd, *spSt, *spSt2, *spSq; static int remote; static struct Conversation *shhhh; /* RPC Procedure indices */ #define NullCrypt 4 #define EZCrypt 5 #define CheckCrypt 6 extern/*forward*/ Client(); int key[4]; int nullK[4]; int nullSeed[4]; int unenc[20]; Main() { srvr = usr = 0; shhhh = unencrypted; InitOS(); /* Sets up sysZone */ Zero(&ctxQ, 2); RPCInitialize(&ctxQ); spNl = (struct ShortSTRING *) Allocate(sysZone, 2); spSq = CStringToString("K"); Zero(nullK, 4); Zero(nullSeed, 4); CorrectParity(nullK); StuffBlock(key, CStringToString("8765DEF043219ABC")); CorrectParity(key); StartNProcess("client", &ctxQ, &Client, 350, 90); /* ?? */ while (true) { CallContext(ctxQ.head); }; }; StuffBlock(key, string) char key[]; struct ShortSTRING *string; { int i; for (i=0; i<((string->length)/2); ++i) key[i] = (Hex(string->text[i*2])<<4)+Hex(string->text[i*2+1]); }; int Hex(c) int c; { if (c<'A') return (c-'0'); return (10+(c-'A')); }; static int time[2]; static struct ImportInstance handle[1]; static struct Seal sl; static struct InterfaceName *clientInterface; static struct ShortSTRING *tibet; static struct ShortSTRING *seqRope; static int *res; static int teddyMode; /* Silent, but fast. */ int args[10]; static Client() { int c, go; while (true) { go=false; remote=false; teddyMode=false; Wf("\r."); c = MyGetChar(); putchar(c); switch (c) { case 'i': remote = true; Initialize(); break; case 'b': Bind(); break case '1': res=CallFormatted(handle, NullCrypt, spNl, spSq, 0); DecryptBlock(nullK, &res[1], unenc); Wf2("res, unenc = %xH, %xH\n", res, unenc); res=res; break; case '2': res = CallFormatted(handle, EZCrypt, spNl, spSq, 0); DecryptBlock(key, &res[1], unenc); Wf2("res, unenc = %xH, %xH\n", &res[1], unenc); res=res; break; case '3': res = CallFormatted(handle, CheckCrypt, spNl, spSq, 0); CBCCheckDecrypt(key, 4, &res[1], unenc, nullSeed); Wf2("res, unenc = %xH, %xH\n", res, unenc); res=res; break; default: Wf(" ?? "); break; }; }; }; static int MyGetChar() { while (!chav()) Block(); return getchar(); }; static Initialize() { RPCInitializeCtx(true); AddType('Z', 0); AddType('K', dBlock(16, 1, 0, true, false)); /* Word Sequence, no byte swaps */ Zero(handle, lenImportInstance); clientInterface = (struct InterfaceName *) Allocate(sysZone, lenInterfaceName); clientInterface->type = CStringToString("Authenticator.Lark"); clientInterface->instance = usr; Move2(&clientInterface->version, matchAllVersions); tibet = CStringToString("This rope went to Everest"); seqRope = CStringToString("This is really a sequence"); }; static Bind () { { /* Implicit loop until ENABLE succeeds */ int serverMachine; serverMachine = 0; if (ENABLE(ImportFailed, &CONT, &sl)) CallSwat(ecPup1+100); ImportInterface(serverMachine, clientInterface, handle); }; /* endloop */ };