home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume38 / circ / part03 < prev    next >
Internet Message Format  |  1993-08-11  |  42KB

  1. From: newsham@wiliki.eng.hawaii.edu (Timothy Newsham)
  2. Newsgroups: comp.sources.misc
  3. Subject: v38i012:  circ - encrypted irc package, Part03/03
  4. Date: 19 Jun 1993 08:31:31 +0100
  5. Sender: aem@aber.ac.uk
  6. Approved: aem@aber.ac.uk
  7. Message-ID: <1vufcj$jl5@uk-usenet.UK.Sun.COM>
  8. X-Md4-Signature: 1f8533d775165c54632730a6a0ce5d1b
  9.  
  10. Submitted-by: newsham@wiliki.eng.hawaii.edu (Timothy Newsham)
  11. Posting-number: Volume 38, Issue 12
  12. Archive-name: circ/part03
  13. Environment: C UNIX
  14.  
  15. #! /bin/sh
  16. # into a shell via "sh file" or similar.  To overwrite existing files,
  17. # type "sh file -c".
  18. # The tool that generated this appeared in the comp.sources.unix newsgroup;
  19. # send mail to comp-sources-unix@uunet.uu.net if you want that tool.
  20. # Contents:  Circ/LOG Circ/Makefile Circ/RSA/MANIFEST
  21. #   Circ/RSA/Make.amiga Circ/RSA/Make.unix Circ/RSA/Makefile
  22. #   Circ/RSA/README Circ/RSA/README.english Circ/RSA/WARNING
  23. #   Circ/RSA/arith.h Circ/RSA/genprim.c Circ/RSA/genrsa.c
  24. #   Circ/RSA/makekey Circ/RSA/nio.h Circ/RSA/patchlevel.h
  25. #   Circ/RSA/prim.h Circ/RSA/rnd.c Circ/RSA/rnd.h Circ/RSA/rsa.hdr
  26. #   Circ/RSA/test.c Circ/crypt.c Circ/crypt.irc2 Circ/d3des/main.c
  27. #   Circ/d3des/readme Circ/ignore.irc Circ/pubkeys/al Circ/sock.h
  28. #   POSTER
  29. # Wrapped by alecm@uk-usenet on Sat Jun 19 08:26:21 1993
  30. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  31. echo If this archive is complete, you will see the following message:
  32. echo '          "shar: End of archive 3 (of 3)."'
  33. if test -f 'Circ/LOG' -a "${1}" != "-c" ; then 
  34.   echo shar: Will not clobber existing file \"'Circ/LOG'\"
  35. else
  36.   echo shar: Extracting \"'Circ/LOG'\" \(20 characters\)
  37.   sed "s/^X//" >'Circ/LOG' <<'END_OF_FILE'
  38. X16 cycles
  39. X25 cycles
  40. END_OF_FILE
  41.   if test 20 -ne `wc -c <'Circ/LOG'`; then
  42.     echo shar: \"'Circ/LOG'\" unpacked with wrong size!
  43.   fi
  44.   # end of 'Circ/LOG'
  45. fi
  46. if test -f 'Circ/Makefile' -a "${1}" != "-c" ; then 
  47.   echo shar: Will not clobber existing file \"'Circ/Makefile'\"
  48. else
  49.   echo shar: Extracting \"'Circ/Makefile'\" \(1048 characters\)
  50.   sed "s/^X//" >'Circ/Makefile' <<'END_OF_FILE'
  51. X
  52. X# Make:
  53. X#     all   - make 'new' and make keys. 
  54. X#     sock  - make 'sock'
  55. X#     new   - make 'new'
  56. X#     clean - remove .o's and core
  57. X#     clobber - remove everything that can be made with Make
  58. X#     archive - archive into a tar.Z in directory above us.
  59. X
  60. X# $IRCNICK should hold your irc nickname, change this
  61. X# if you dont have $IRCNICK set already (else will use $LOGNAME)
  62. XNICK = public
  63. X
  64. Xnew : new.o d3des.o crypt.o RSA/do_rsa.o
  65. X    cc new.o d3des.o crypt.o RSA/do_rsa.o -o new
  66. X
  67. Xall : new keys
  68. X
  69. Xsock : sock2.o d3des.o crypt.o RSA/do_rsa.o
  70. X    cc sock2.o d3des.o crypt.o RSA/do_rsa.o -o sock
  71. X
  72. Xkeys : RSA/genprim RSA/genrsa
  73. X    cd RSA;makekey $(NICK)
  74. X
  75. XRSA/genprim :
  76. X    cd RSA;make genprim
  77. X
  78. XRSA/genrsa :
  79. X    cd RSA;make genrsa
  80. X
  81. Xsock2.o : sock2.c sock.h
  82. X
  83. Xnew.o : new.c
  84. X
  85. Xd3des.o : d3des/d3des.c d3des/d3des.h
  86. X    cc -O -c d3des/d3des.c
  87. X
  88. Xcrypt.o : crypt.c
  89. X
  90. XRSA/do_rsa.o :  RSA/rsa.c
  91. X    cd RSA;make do_rsa.o
  92. X
  93. Xclean :
  94. X    rm -f RSA/*.o *.o core
  95. X
  96. Xclobber :
  97. X    rm -f RSA/*.o *.o new sock secret RSA/genrsa RSA/genprim core
  98. X
  99. Xarchive :
  100. X    cd ..;tar -cf irc.tar irc;compress irc.tar
  101. END_OF_FILE
  102.   if test 1048 -ne `wc -c <'Circ/Makefile'`; then
  103.     echo shar: \"'Circ/Makefile'\" unpacked with wrong size!
  104.   fi
  105.   # end of 'Circ/Makefile'
  106. fi
  107. if test -f 'Circ/RSA/MANIFEST' -a "${1}" != "-c" ; then 
  108.   echo shar: Will not clobber existing file \"'Circ/RSA/MANIFEST'\"
  109. else
  110.   echo shar: Extracting \"'Circ/RSA/MANIFEST'\" \(389 characters\)
  111.   sed "s/^X//" >'Circ/RSA/MANIFEST' <<'END_OF_FILE'
  112. XMakefile
  113. Xconf.h            gundlegende Definitionen
  114. Xarith.c            grundlegende arithmetische Routinen
  115. Xarith.h
  116. Xprim.c            Routinen zur probabilistischen Primzahl-Berechnung
  117. Xprim.h
  118. Xnio.c            IO-Routinen
  119. Xnio.h
  120. Xrnd.c            Zufalls-Zahl Erzeugungs Routinen
  121. Xrnd.h
  122. Xgenprim.c        Erzeugung von Primzahlen mit vorgegebener Stellenzahl
  123. Xgenrsa.c        Erzeugung der oeffendlichen/geheimen Schluessel
  124. Xrsa.c            Ver/Entschluesselung
  125. END_OF_FILE
  126.   if test 389 -ne `wc -c <'Circ/RSA/MANIFEST'`; then
  127.     echo shar: \"'Circ/RSA/MANIFEST'\" unpacked with wrong size!
  128.   fi
  129.   # end of 'Circ/RSA/MANIFEST'
  130. fi
  131. if test -f 'Circ/RSA/Make.amiga' -a "${1}" != "-c" ; then 
  132.   echo shar: Will not clobber existing file \"'Circ/RSA/Make.amiga'\"
  133. else
  134.   echo shar: Extracting \"'Circ/RSA/Make.amiga'\" \(768 characters\)
  135.   sed "s/^X//" >'Circ/RSA/Make.amiga' <<'END_OF_FILE'
  136. X
  137. XCFLAGS = -dAUTOKEY -dSTANDALONE
  138. X
  139. Xall:    genprim genrsa rsa
  140. X
  141. Xgenprim:    genprim.o rnd.o prim.o nio.o arith.o
  142. X    blink from lib:c.o,genprim.o,rnd.o,nio.o,prim.o,arith.o to genprim lib lib:lc.lib,lib:amiga.lib,lib:lcm.lib
  143. X
  144. Xgenrsa:        genrsa.o rnd.o prim.o nio.o arith.o
  145. X    blink from lib:c.o,genrsa.o,rnd.o,nio.o,prim.o,arith.o to genrsa lib lib:lc.lib,lib:amiga.lib,lib:lcm.lib
  146. X
  147. X
  148. Xrsa:        rsa.o nio.o arith.o
  149. X    blink lib:c.o,rsa.o,nio.o,arith.o to rsa lib lib:lc.lib,lib:amiga.lib
  150. X    copy rsa rsaencode   #ln rsa rsaencode
  151. X    copy rsa rsadecode   #ln rsa rsadecode
  152. X
  153. X#rsa.o genrsa.o genprim.o nio.o prim.o arith.o:    conf.h
  154. X#rsa.o genrsa.o genprim.o nio.o prim.o arith.o:    arith.h
  155. X#rsa.o genrsa.o genprim.o nio.o:    nio.h
  156. X#genrsa.o genprim.o prim.o:    prim.h
  157. X#genrsa.o genprim.o rnd.o:    rnd.h
  158. X
  159. X
  160. X
  161. END_OF_FILE
  162.   if test 768 -ne `wc -c <'Circ/RSA/Make.amiga'`; then
  163.     echo shar: \"'Circ/RSA/Make.amiga'\" unpacked with wrong size!
  164.   fi
  165.   # end of 'Circ/RSA/Make.amiga'
  166. fi
  167. if test -f 'Circ/RSA/Make.unix' -a "${1}" != "-c" ; then 
  168.   echo shar: Will not clobber existing file \"'Circ/RSA/Make.unix'\"
  169. else
  170.   echo shar: Extracting \"'Circ/RSA/Make.unix'\" \(1013 characters\)
  171.   sed "s/^X//" >'Circ/RSA/Make.unix' <<'END_OF_FILE'
  172. X
  173. X# if you want an executable,  -DSTANDALONE while compiling
  174. X# rsa.c,  and uncomment the ln's below
  175. X
  176. XSHELL=/bin/sh
  177. X
  178. X# add -DSTANDALONE to CFLAGS if you want a standalone
  179. X#CFLAGS= -O +Aa
  180. XCFLAGS= -DAUTOKEY -O  # -g
  181. XLDFLAGS=
  182. X
  183. Xall:    genprim genrsa rsa # do_rsa.o 
  184. X
  185. Xgenprim:    genprim.o rnd.o prim.o nio.o arith.o
  186. X    $(CC) $(LDFLAGS) -o genprim genprim.o rnd.o nio.o prim.o arith.o
  187. X
  188. Xgenrsa:        genrsa.o rnd.o prim.o nio.o arith.o
  189. X    $(CC) $(LDFLAGS) -o genrsa genrsa.o rnd.o nio.o prim.o arith.o
  190. X
  191. Xdo_rsa.o:        rsa.o nio.o arith.o
  192. X    $(CC) $(LDFLAGS) -C -o do_rsa.o rsa.o nio.o arith.o
  193. X
  194. Xrsa:        test.o rsa.c nio.o arith.o
  195. X    $(CC) $(LDFLAGS) -o rsa -DSTANDALONE rsa.c nio.o arith.o
  196. X    ln rsa rsaencode
  197. X    ln rsa rsadecode
  198. X
  199. Xrsa.o genrsa.o genprim.o nio.o prim.o arith.o:    conf.h
  200. Xrsa.o genrsa.o genprim.o nio.o prim.o arith.o:    arith.h
  201. Xrsa.o genrsa.o genprim.o nio.o:    nio.h
  202. Xgenrsa.o genprim.o prim.o:    prim.h
  203. Xgenrsa.o genprim.o rnd.o:    rnd.h
  204. X
  205. Xclean:
  206. X    rm -f *.bak *.ba *~ \#* core *.o
  207. X
  208. Xclobber: clean
  209. X    rm -f genrsa genprim rsa rsadecode rsaencode 
  210. END_OF_FILE
  211.   if test 1013 -ne `wc -c <'Circ/RSA/Make.unix'`; then
  212.     echo shar: \"'Circ/RSA/Make.unix'\" unpacked with wrong size!
  213.   fi
  214.   # end of 'Circ/RSA/Make.unix'
  215. fi
  216. if test -f 'Circ/RSA/Makefile' -a "${1}" != "-c" ; then 
  217.   echo shar: Will not clobber existing file \"'Circ/RSA/Makefile'\"
  218. else
  219.   echo shar: Extracting \"'Circ/RSA/Makefile'\" \(1021 characters\)
  220.   sed "s/^X//" >'Circ/RSA/Makefile' <<'END_OF_FILE'
  221. X
  222. X# if you want an executable,  -DSTANDALONE while compiling
  223. X# rsa.c,  and uncomment the ln's below
  224. X
  225. XSHELL=/bin/sh
  226. X
  227. X# add -DSTANDALONE to CFLAGS if you want a standalone
  228. X#CFLAGS= -O +Aa
  229. XCFLAGS= -DAUTOKEY -O  # -g
  230. XLDFLAGS=
  231. XLD = ld
  232. X
  233. Xall:    genprim genrsa rsa # do_rsa.o 
  234. X
  235. Xgenprim:    genprim.o rnd.o prim.o nio.o arith.o
  236. X    $(CC) $(LDFLAGS) -o genprim genprim.o rnd.o nio.o prim.o arith.o
  237. X
  238. Xgenrsa:        genrsa.o rnd.o prim.o nio.o arith.o
  239. X    $(CC) $(LDFLAGS) -o genrsa genrsa.o rnd.o nio.o prim.o arith.o
  240. X
  241. Xdo_rsa.o:        rsa.o nio.o arith.o
  242. X    $(LD) $(LDFLAGS) -r -o do_rsa.o rsa.o nio.o arith.o
  243. X
  244. Xrsa:        test.o rsa.c nio.o arith.o
  245. X    $(CC) $(LDFLAGS) -o rsa -DSTANDALONE rsa.c nio.o arith.o
  246. X    ln rsa rsaencode
  247. X    ln rsa rsadecode
  248. X
  249. Xrsa.o genrsa.o genprim.o nio.o prim.o arith.o:    conf.h
  250. Xrsa.o genrsa.o genprim.o nio.o prim.o arith.o:    arith.h
  251. Xrsa.o genrsa.o genprim.o nio.o:    nio.h
  252. Xgenrsa.o genprim.o prim.o:    prim.h
  253. Xgenrsa.o genprim.o rnd.o:    rnd.h
  254. X
  255. Xclean:
  256. X    rm -f *.bak *.ba *~ \#* core *.o
  257. X
  258. Xclobber: clean
  259. X    rm -f genrsa genprim rsa rsadecode rsaencode 
  260. END_OF_FILE
  261.   if test 1021 -ne `wc -c <'Circ/RSA/Makefile'`; then
  262.     echo shar: \"'Circ/RSA/Makefile'\" unpacked with wrong size!
  263.   fi
  264.   # end of 'Circ/RSA/Makefile'
  265. fi
  266. if test -f 'Circ/RSA/README' -a "${1}" != "-c" ; then 
  267.   echo shar: Will not clobber existing file \"'Circ/RSA/README'\"
  268. else
  269.   echo shar: Extracting \"'Circ/RSA/README'\" \(4029 characters\)
  270.   sed "s/^X//" >'Circ/RSA/README' <<'END_OF_FILE'
  271. X
  272. X********************************************************************************
  273. X*                                           *
  274. X*                R S A - Verfahren                   *
  275. X*                                           *
  276. X********************************************************************************
  277. X
  278. XDie Schluessel-Generierung laeuft in 2 Stufen ab.
  279. X
  280. XA)    Es muessen 2 Primzahlen mit genprim berechnet werden. Die
  281. X    Groessenordnung dieser Zahlen sollte 80-130 sein, und sich um
  282. X    eine unterscheiden. Diese Zahlen muessen in einer Datei, mit
  283. X    einem beliebigen Trennzeichen (z.B. '#') dazwischen, abgelegt
  284. X    werden.
  285. X
  286. X        Alle Zahlen werden als Hexadezimalzahlen (fuer
  287. X        Puristen: Sedizimal :-) ein-/ausgegeben.  Bei
  288. X        Ein-/Ausgabe sind White-Spaces (Blank,Tab,Newline)
  289. X        nicht signifikant.
  290. X
  291. X    Der zweite Parameter von genprim gibt die Wahrscheinlichkeit an,
  292. X    mit der die gefundene Zahl wirklich eine Primzahl ist.  Fuer
  293. X    eine Parameter n ist die Wahrscheinlichkeit 1-0.5^n. Fuer n=20
  294. X    ist ein Programierfehler von mir schon wahrscheinlicher :-).
  295. X    Das der Test nur probabilistisch ist, verringert bei vernuenftiger
  296. X    Wahl von n die Aussagekraeftigkeit nur unwesendlich.
  297. X
  298. XB)    Genrsa generiert daraus eine Datei mit oeffendlichem/geheimen
  299. X    Schluessel.  Diese Datei enthaelt 3 Zahlen.  Aus dieser Datei
  300. X    gewinnt man die geheime, in dem man die letzte Zahl (mit Trenn-
  301. X    zeichen) entfernt.  Den oeffendlichen erhaelt man duch Entfernung
  302. X    der zweiten Zahl.
  303. X
  304. XBeispiel:
  305. X    $ genrsa 10 20 >p1        # erste Primzahl
  306. X    $ cat p1
  307. X    2023A0B0BE5
  308. X    $ genrsa 11 20 >p2        # zweite Primzahl
  309. X    $ cat p2
  310. X    537A985EC975
  311. X    $ echo "#" | cat p1 - p2 >pd    # Eingabe fuer genrsa
  312. X    $ genrsa <pd >rd        # Alle Zahlen fertig
  313. X    $ cat rd
  314. X    A7AF134EFB73D789793CA9
  315. X    #
  316. X    9245F9009636D26B7CA5ED
  317. X    #
  318. X    80F408891D5932D10C2585
  319. X
  320. XDieses File rd muss man auf 2 Files verteilen:
  321. X
  322. X    $ cat geheim
  323. X    A7AF134EFB73D789793CA9
  324. X    #
  325. X    9245F9009636D26B7CA5ED
  326. X    $ cat oeffendlich
  327. X    A7AF134EFB73D789793CA9
  328. X    #
  329. X    80F408891D5932D10C2585
  330. X
  331. XDie Dateien p1,p2,pd und rd sollte man schnell wieder loeschen.
  332. X
  333. X    $ rsaencode oeffendlich <data >crypt    # Verschluesseln
  334. X    $ rsadecode geheim <crypt >clear    # Entschluesseln
  335. X
  336. XDie Verschluesselung laeuft in Bloecken ab, deren Groesse von der der
  337. Xersten Zahl des Schluessels Abhaengt.  Alle Bloecke werden als binaere
  338. XDaten behandelt.  Allerdings wird beim Entschluesseln der letzte Block
  339. Xmit ASCII-NULL aufgefuellt.  Dieses ist kein Fehler des RSA-Verfahrens,
  340. Xsondern liegt an meiner Verwendung.  Das RSA-Verfahren verschluesselt
  341. Xeinfach Zahlen. Meiner Umwandlung von Daten in Zahlen ist das Manko
  342. Xanzulasten.  Deshalb muss auch der verschluesselte Text mit btoa oder
  343. Xaehnlichem mailbar gemacht werden.  Zur Reduktion der Blockanzahl kann
  344. Xman natuerlich vorher den Text compressen, da er sowieso binaer behandelt
  345. Xwird.
  346. X
  347. XBei mir (386-er mit 20 MHz) dauert die Ver-/Entschluesselung eines
  348. XBlocks (aus 125 & 124 stelliger Primzahl) 20 Minuten !!!!!!
  349. XDafuer laeuft die Primzahlberechnung in 1-20 Stunden ab :-) !!!!!
  350. XDas haengt von dem zufaelligen Startpunkt der Suche ab.
  351. X
  352. XWer Lust hat, die Verschluesselung so zu modifizieren, dass nur ein
  353. XBlock mit RSA verschluesselt wird, und alle anderen, mit einem darin
  354. Xuebergebenen weiteren Schuessel, mit DES zu verschluesseln, der ist
  355. Xherzlich eingeladen ein solches Programm analog rsa.c zu erstellen.
  356. XDie eigendliche Verschluesselung ist mit den Routinen aus arith.c
  357. Xtrivial.  Es kostet allerding Zeit :-).
  358. X
  359. XAls Warnung fuer Leute, die mit den Routinen arbeiten wollen:
  360. X
  361. XAlle Routinen sind auf Laufzeit optimiert, und enthalten fast keine
  362. XUeberpruefungen auf Ueberlauf o.ae. .  Wenn ein Fehler entdeckt wird
  363. X(was selten ist :-), gibts eine core.  Alle Zahlen muessen >= 0 sein.
  364. X
  365. XMein Wissen ueber RSA und die anderen verwendeten Verfahren hab ich
  366. Xaus:
  367. X    Horster, Patrick:
  368. X    Kryptologie / von Patrick Horster. - Mannheim;
  369. X    Wien; Zuerich: Bibliographisches Institut, 1985.
  370. X        (Reihe Informatik; 47)
  371. X        ISBN 3-411-03106-9
  372. X    NE: GT
  373. X
  374. XMartin Nicolay        ( martin@trillian.megalon.de )
  375. XFliederstr. 23
  376. X4100 Duisburg 1
  377. XW-Germany
  378. X
  379. XPS:    Falls rand.h nicht vorhanden ist: darin sind nur die Funktionen
  380. X    wie drand48 usw. deklariert.
  381. END_OF_FILE
  382.   if test 4029 -ne `wc -c <'Circ/RSA/README'`; then
  383.     echo shar: \"'Circ/RSA/README'\" unpacked with wrong size!
  384.   fi
  385.   # end of 'Circ/RSA/README'
  386. fi
  387. if test -f 'Circ/RSA/README.english' -a "${1}" != "-c" ; then 
  388.   echo shar: Will not clobber existing file \"'Circ/RSA/README.english'\"
  389. else
  390.   echo shar: Extracting \"'Circ/RSA/README.english'\" \(1320 characters\)
  391.   sed "s/^X//" >'Circ/RSA/README.english' <<'END_OF_FILE'
  392. XI don't know german. But, with the help of a friend of mine who speaks
  393. Xgerman as his first language I managed to make this program work and
  394. Xit worked truly well indeed. Here are very brief instructions to start with
  395. Xthis little beastie:
  396. X
  397. X* generate two primes 10 and 11 digits long, prime with 1/2^20
  398. X  probabilistic precision:
  399. X
  400. X    $ genprim 10 20 >p1        # the first prime
  401. X    $ cat p1
  402. X    2023A0B0BE5
  403. X    $ genprim 11 20 >p2              # the second one
  404. X    $ cat p2
  405. X    537A985EC975
  406. X    $ echo "#" | cat p1 - p2 >pd    # Put a `#' between the two primes
  407. X
  408. X* generate public and private key:
  409. X    $ genrsa <pd >rd
  410. X    $ cat rd
  411. X    A7AF134EFB73D789793CA9
  412. X    #
  413. X    9245F9009636D26B7CA5ED
  414. X    #
  415. X    80F408891D5932D10C2585
  416. X
  417. X* you have to edit the `rd' file. The secret key is obtained by
  418. X  taking the first and the second number. The public key is
  419. X  obtained by taking the first and third number.
  420. X
  421. X    $ cat secret
  422. X    A7AF134EFB73D789793CA9
  423. X    #
  424. X    9245F9009636D26B7CA5ED
  425. X    $ cat public
  426. X    A7AF134EFB73D789793CA9
  427. X    #
  428. X    80F408891D5932D10C2585
  429. X
  430. X* now you are able to crypt / encrypt your data:
  431. X
  432. X    $ rsaencode public <data >crypt        # encryption
  433. X    $ rsadecode secret <crypt >plaintext    # decryption
  434. X
  435. X* pure RSA encryption is used. I mean, we don't use DES or any other
  436. X  cipher to speed up the process. This means that the encryption
  437. X  process is slow.
  438. X
  439. X
  440. XEnjoy!        vince@ghost.dsi.unimi.it
  441. END_OF_FILE
  442.   if test 1320 -ne `wc -c <'Circ/RSA/README.english'`; then
  443.     echo shar: \"'Circ/RSA/README.english'\" unpacked with wrong size!
  444.   fi
  445.   # end of 'Circ/RSA/README.english'
  446. fi
  447. if test -f 'Circ/RSA/WARNING' -a "${1}" != "-c" ; then 
  448.   echo shar: Will not clobber existing file \"'Circ/RSA/WARNING'\"
  449. else
  450.   echo shar: Extracting \"'Circ/RSA/WARNING'\" \(1398 characters\)
  451.   sed "s/^X//" >'Circ/RSA/WARNING' <<'END_OF_FILE'
  452. XThere are most certainly legal problems with using this software in the U.S.A.,
  453. Xand probably also in several other countries, relating to a patent which 
  454. Xcovers the techniques used here.
  455. X
  456. XALSO BE SURE TO LOOK AT THE FILE PATCHES IN THIS DIRECTORY!!!
  457. X
  458. XThe following comes directly from PKP on the use of RSA within the 
  459. XU.S. and Canada. It seems to indicate that we may use RSA without
  460. Xa licence for non-commercial purposes. I presume this applies to PGP
  461. Xwhich is an RSA based system, but I really don't know. At least it
  462. Xapplies to RSAREF, the library being made available by RSA Inc
  463. Xto North American users. 
  464. X
  465. XFor information on RSAREF send mail to rsaref@rsa.com. They'll send
  466. Xit to you provided you state that you are either an American
  467. Xor Canadian citizen or U.S. Permanent Resident located in the U.S.
  468. Xor Canada and state that you agree to comply with the licence  
  469. Xagreement.
  470. X
  471. X"In North America, a license is needed to ``make, use or sell'' RSA. However,
  472. XPKP has a policy that anyone may use RSA non-commercially for a 
  473. Xpersonal, academic or intellectual reason without a license; an example 
  474. Xof such use would be the implementation of RSA as a programming project 
  475. Xfor a computer class. RSA Laboratories has made available (in the U.S. and
  476. XCanada) at no charge a collection of cryptographic routines in 
  477. Xsource code, including the RSA algorithm; it can be used for non-commercial
  478. Xpurposes"
  479. X
  480. END_OF_FILE
  481.   if test 1398 -ne `wc -c <'Circ/RSA/WARNING'`; then
  482.     echo shar: \"'Circ/RSA/WARNING'\" unpacked with wrong size!
  483.   fi
  484.   # end of 'Circ/RSA/WARNING'
  485. fi
  486. if test -f 'Circ/RSA/arith.h' -a "${1}" != "-c" ; then 
  487.   echo shar: Will not clobber existing file \"'Circ/RSA/arith.h'\"
  488. else
  489.   echo shar: Extracting \"'Circ/RSA/arith.h'\" \(1464 characters\)
  490.   sed "s/^X//" >'Circ/RSA/arith.h' <<'END_OF_FILE'
  491. X/*******************************************************************************
  492. X*                                           *
  493. X*    Copyright (c) Martin Nicolay,  22. Nov. 1988                   *
  494. X*                                           *
  495. X*    Wenn diese (oder sinngemaess uebersetzte) Copyright-Angabe enthalten   *
  496. X*    bleibt, darf diese Source fuer jeden nichtkomerziellen Zweck weiter    *
  497. X*    verwendet werden.                               *
  498. X*                                           *
  499. X*    martin@trillian.megalon.de                           *
  500. X*                                           *
  501. X*******************************************************************************/
  502. X
  503. X#ifndef    _arith_h_
  504. X#define    _arith_h_
  505. X
  506. X#ifndef    _conf_h_
  507. X#include    "conf.h"
  508. X#endif
  509. X
  510. Xextern NUMBER a_one,a_two;
  511. X
  512. X/*
  513. X * Prototypes
  514. X */
  515. X
  516. Xvoid    a_add        P(( NUMBER*, NUMBER*, NUMBER* ));
  517. Xvoid    a_assign    P(( NUMBER*, NUMBER* ));
  518. Xint    a_cmp        P(( NUMBER*, NUMBER* ));
  519. Xvoid    a_div        P(( NUMBER*, NUMBER*, NUMBER*, NUMBER* ));
  520. Xvoid    a_div2        P(( NUMBER* ));
  521. Xvoid    a_ggt        P(( NUMBER*, NUMBER*, NUMBER* ));
  522. Xvoid    a_imult        P(( NUMBER*, INT, NUMBER* ));
  523. Xvoid    a_mult        P(( NUMBER*, NUMBER*, NUMBER* ));
  524. Xvoid    a_sub        P(( NUMBER*, NUMBER*, NUMBER* ));
  525. Xvoid    m_init        P(( NUMBER*, NUMBER* ));
  526. Xvoid    m_add        P(( NUMBER*, NUMBER*, NUMBER* ));
  527. Xvoid    m_mult        P(( NUMBER*, NUMBER*, NUMBER* ));
  528. Xvoid    m_exp        P(( NUMBER*, NUMBER*, NUMBER* ));
  529. Xint    n_bits        P(( NUMBER*, int));
  530. Xvoid    n_div        P(( NUMBER*, NUMBER*, NUMBER*, NUMBER* ));
  531. Xint    n_cmp        P(( INT*, INT*, int ));
  532. Xint    n_mult        P(( INT*, INT, INT*, int ));
  533. Xint    n_sub        P(( INT*, INT*, INT*, int, int ));
  534. Xint    n_bitlen    P(( NUMBER* ));
  535. X
  536. X#endif
  537. END_OF_FILE
  538.   if test 1464 -ne `wc -c <'Circ/RSA/arith.h'`; then
  539.     echo shar: \"'Circ/RSA/arith.h'\" unpacked with wrong size!
  540.   fi
  541.   # end of 'Circ/RSA/arith.h'
  542. fi
  543. if test -f 'Circ/RSA/genprim.c' -a "${1}" != "-c" ; then 
  544.   echo shar: Will not clobber existing file \"'Circ/RSA/genprim.c'\"
  545. else
  546.   echo shar: Extracting \"'Circ/RSA/genprim.c'\" \(1416 characters\)
  547.   sed "s/^X//" >'Circ/RSA/genprim.c' <<'END_OF_FILE'
  548. X/*******************************************************************************
  549. X*                                           *
  550. X*    Copyright (c) Martin Nicolay,  22. Nov. 1988                   *
  551. X*                                           *
  552. X*    Wenn diese (oder sinngemaess uebersetzte) Copyright-Angabe enthalten   *
  553. X*    bleibt, darf diese Source fuer jeden nichtkomerziellen Zweck weiter    *
  554. X*    verwendet werden.                               *
  555. X*                                           *
  556. X*    martin@trillian.megalon.de                           *
  557. X*                                           *
  558. X*******************************************************************************/
  559. X
  560. X#include    <stdio.h>
  561. X
  562. X#include    "arith.h"
  563. X#include    "prim.h"
  564. X#include    "nio.h"
  565. X#include    "rnd.h"
  566. X
  567. Xchar *prog;
  568. X
  569. XNUMBER a_three,a_four;
  570. X
  571. Xusage()
  572. X{
  573. X    fprintf(stderr,"usage: %s digits [probability]\n",prog);
  574. X    exit (1);
  575. X}
  576. X
  577. Xmain( argc, argv )
  578. Xchar **argv;
  579. X{
  580. X    NUMBER prim;
  581. X    int len,i,prob;
  582. X    
  583. X    prog = argv[0];    
  584. X    
  585. X    if ( argc < 2 || 3 < argc )
  586. X        usage();
  587. X    
  588. X    len = atoi( argv[1] );
  589. X    if (argc > 2)
  590. X        prob = atoi( argv[2] );
  591. X    else
  592. X        prob = 10;
  593. X
  594. X    a_add( &a_one, &a_two, &a_three );
  595. X    a_add( &a_two, &a_two, &a_four );
  596. X
  597. X    init_rnd();
  598. X    
  599. X    do {
  600. X        gen_number( len, &prim );
  601. X    } while ( !prim.n_len );
  602. X    
  603. X    a_mult( &prim, &a_two, &prim );
  604. X    a_mult( &prim, &a_three, &prim );
  605. X    a_add( &prim, &a_one, &prim );
  606. X    
  607. X    for (i=1 ;; i++) {
  608. X        if (p_prim( &prim, prob ))
  609. X            break;
  610. X        if (i % 2)
  611. X            a_add( &prim, &a_four, &prim );
  612. X        else
  613. X            a_add( &prim, &a_two, &prim );
  614. X    }
  615. X    fprintf(stderr,"%d cycles\n",i);
  616. X    
  617. X    num_fput( &prim, stdout );
  618. X}
  619. END_OF_FILE
  620.   if test 1416 -ne `wc -c <'Circ/RSA/genprim.c'`; then
  621.     echo shar: \"'Circ/RSA/genprim.c'\" unpacked with wrong size!
  622.   fi
  623.   # end of 'Circ/RSA/genprim.c'
  624. fi
  625. if test -f 'Circ/RSA/genrsa.c' -a "${1}" != "-c" ; then 
  626.   echo shar: Will not clobber existing file \"'Circ/RSA/genrsa.c'\"
  627. else
  628.   echo shar: Extracting \"'Circ/RSA/genrsa.c'\" \(2515 characters\)
  629.   sed "s/^X//" >'Circ/RSA/genrsa.c' <<'END_OF_FILE'
  630. X/*******************************************************************************
  631. X*                                           *
  632. X*    Copyright (c) Martin Nicolay,  22. Nov. 1988                   *
  633. X*                                           *
  634. X*    Wenn diese (oder sinngemaess uebersetzte) Copyright-Angabe enthalten   *
  635. X*    bleibt, darf diese Source fuer jeden nichtkomerziellen Zweck weiter    *
  636. X*    verwendet werden.                               *
  637. X*                                           *
  638. X*    martin@trillian.megalon.de                           *
  639. X*                                           *
  640. X*******************************************************************************/
  641. X
  642. X#include    <stdio.h>
  643. X
  644. X#include    "arith.h"
  645. X#include    "nio.h"
  646. X#include    "prim.h"
  647. X#include    "rnd.h"
  648. X
  649. X/* files that we use if we are on autopilot */
  650. X#ifdef AUTOKEY
  651. X#define PUBLIC "public"
  652. X#define PRIVATE "secret"
  653. X#include <fcntl.h>
  654. X#endif AUTOKEY
  655. X
  656. Xmain()
  657. X{
  658. X    NUMBER p1,p2,n,d,e,phi,*max_p;
  659. X    int len;
  660. X#ifdef AUTOKEY
  661. X        FILE *fdpub,*fdpriv;
  662. X        FILE *fd;
  663. X
  664. X    if((fdpub=fopen(PUBLIC,"w"))==0) {
  665. X        perror(PUBLIC);
  666. X        exit(1);
  667. X    }
  668. X    if((fdpriv=fopen(PRIVATE,"w"))==0) {
  669. X        perror(PRIVATE);
  670. X        exit(1);
  671. X    }
  672. X    system("genprim 63 20 >ptemp");   /* 63 and 65 x4 bit primes */
  673. X        system("echo '#' >>ptemp");       /* 252 + 260 = 512 bit modulus */
  674. X    system("genprim 65 20 >>ptemp");  
  675. X
  676. X    fd=fopen("ptemp","r");
  677. X        if(fd==NULL) {
  678. X        printf("Cant open temp file\n");
  679. X        exit(1);
  680. X    }
  681. X    num_fget( &p1, fd ); getc(fd);
  682. X    num_fget( &p2, fd );
  683. X     fclose(fd);
  684. X    system("rm -f ptemp\n");
  685. X#else
  686. X    num_fget( &p1, stdin ); getchar();
  687. X    num_fget( &p2, stdin );
  688. X#endif AUTOKEY
  689. X    
  690. X    if ( !a_cmp( &p1, &p2 ) ) {
  691. X        fprintf(stderr,"the prime numbers must not be identical!\n");
  692. X        exit(1);
  693. X    }
  694. X    
  695. X    if (a_cmp( &p1, &p2 ) > 0)
  696. X        max_p = &p1;
  697. X    else
  698. X        max_p = &p2;
  699. X
  700. X    a_mult( &p1, &p2, &n );
  701. X    
  702. X    a_sub( &p1, &a_one, &phi );
  703. X    a_sub( &p2, &a_one, &e );
  704. X    a_mult( &phi, &e, &phi );
  705. X    
  706. X    len = n_bitlen( &phi );
  707. X    len = ( len + 3 ) / 4;
  708. X    
  709. X    a_assign( &p1, &phi );
  710. X    a_sub( &p1, &a_one, &p1 );
  711. X    init_rnd();
  712. X    do {
  713. X        do {
  714. X            gen_number( len, &d );
  715. X        } while (a_cmp( &d, max_p ) <= 0 || a_cmp( &d, &p1 ) >= 0);
  716. X                
  717. X        a_ggt( &d, &phi, &e );
  718. X    } while ( a_cmp( &e, &a_one ) );
  719. X    
  720. X    
  721. X    inv( &d, &phi, &e );
  722. X    
  723. X#ifndef AUTOKEY
  724. X    num_fput( &n, stdout ); puts("#"); fflush(stdout);
  725. X    num_fput( &d, stdout ); puts("#"); fflush(stdout);
  726. X    num_fput( &e, stdout );
  727. X#else AUTOKEY
  728. X        /* priv is first and second of above,  */
  729. X        /* public is first and third of above  */
  730. X    num_fput( &n, fdpub ); fprintf(fdpub,"#\n");
  731. X    num_fput( &n, fdpriv ); fprintf(fdpriv,"#\n");
  732. X    num_fput( &d, fdpriv );
  733. X    num_fput( &e, fdpub );
  734. X
  735. X    fclose(fdpub);
  736. X    fclose(fdpriv);
  737. X#endif AUTOKEY
  738. X}
  739. X
  740. END_OF_FILE
  741.   if test 2515 -ne `wc -c <'Circ/RSA/genrsa.c'`; then
  742.     echo shar: \"'Circ/RSA/genrsa.c'\" unpacked with wrong size!
  743.   fi
  744.   # end of 'Circ/RSA/genrsa.c'
  745. fi
  746. if test -f 'Circ/RSA/makekey' -a "${1}" != "-c" ; then 
  747.   echo shar: Will not clobber existing file \"'Circ/RSA/makekey'\"
  748. else
  749.   echo shar: Extracting \"'Circ/RSA/makekey'\" \(420 characters\)
  750.   sed "s/^X//" >'Circ/RSA/makekey' <<'END_OF_FILE'
  751. X#!/bin/sh
  752. X
  753. XNICK=$1
  754. X
  755. Xif [ $IRCNICK ] 
  756. Xthen
  757. X  NICK=$IRCNICK;
  758. Xelse
  759. X  if [ $LOGNAME ]
  760. X  then
  761. X    NICK=$LOGNAME;
  762. X  else
  763. X    if [ $USER ]
  764. X    then
  765. X      NICK=$USER
  766. X    fi
  767. X  fi 
  768. Xfi
  769. Xecho "Making keys."
  770. Xecho "Putting secret key in file 'secret' and"
  771. Xecho "public key in file '$NICK'"
  772. Xecho "This takes a while.  Putting the job in the background."
  773. X (genrsa 2>../LOG; mv public ../$NICK; mv secret ..; echo "Done making keys" ) &
  774. X
  775. END_OF_FILE
  776.   if test 420 -ne `wc -c <'Circ/RSA/makekey'`; then
  777.     echo shar: \"'Circ/RSA/makekey'\" unpacked with wrong size!
  778.   fi
  779.   chmod +x 'Circ/RSA/makekey'
  780.   # end of 'Circ/RSA/makekey'
  781. fi
  782. if test -f 'Circ/RSA/nio.h' -a "${1}" != "-c" ; then 
  783.   echo shar: Will not clobber existing file \"'Circ/RSA/nio.h'\"
  784. else
  785.   echo shar: Extracting \"'Circ/RSA/nio.h'\" \(780 characters\)
  786.   sed "s/^X//" >'Circ/RSA/nio.h' <<'END_OF_FILE'
  787. X/*******************************************************************************
  788. X*                                           *
  789. X*    Copyright (c) Martin Nicolay,  22. Nov. 1988                   *
  790. X*                                           *
  791. X*    Wenn diese (oder sinngemaess uebersetzte) Copyright-Angabe enthalten   *
  792. X*    bleibt, darf diese Source fuer jeden nichtkomerziellen Zweck weiter    *
  793. X*    verwendet werden.                               *
  794. X*                                           *
  795. X*    martin@trillian.megalon.de                           *
  796. X*                                           *
  797. X*******************************************************************************/
  798. X
  799. X#ifndef    _nio_h_
  800. X#define    _nio_h_
  801. X
  802. X#ifndef _arith_h_
  803. X#include    "arith.h"
  804. X#endif
  805. X
  806. X/*
  807. X * Prototypes
  808. X */
  809. X
  810. Xint    num_sput    P(( NUMBER*, char*, int ));
  811. Xint    num_fput    P(( NUMBER*, FILE* ));
  812. Xint    num_sget    P(( NUMBER*, char* ));
  813. Xint    num_fget    P(( NUMBER*, FILE* ));
  814. X
  815. X#endif
  816. END_OF_FILE
  817.   if test 780 -ne `wc -c <'Circ/RSA/nio.h'`; then
  818.     echo shar: \"'Circ/RSA/nio.h'\" unpacked with wrong size!
  819.   fi
  820.   # end of 'Circ/RSA/nio.h'
  821. fi
  822. if test -f 'Circ/RSA/patchlevel.h' -a "${1}" != "-c" ; then 
  823.   echo shar: Will not clobber existing file \"'Circ/RSA/patchlevel.h'\"
  824. else
  825.   echo shar: Extracting \"'Circ/RSA/patchlevel.h'\" \(32 characters\)
  826.   sed "s/^X//" >'Circ/RSA/patchlevel.h' <<'END_OF_FILE'
  827. X#define       PATCHLEVEL      1
  828. END_OF_FILE
  829.   if test 32 -ne `wc -c <'Circ/RSA/patchlevel.h'`; then
  830.     echo shar: \"'Circ/RSA/patchlevel.h'\" unpacked with wrong size!
  831.   fi
  832.   # end of 'Circ/RSA/patchlevel.h'
  833. fi
  834. if test -f 'Circ/RSA/prim.h' -a "${1}" != "-c" ; then 
  835.   echo shar: Will not clobber existing file \"'Circ/RSA/prim.h'\"
  836. else
  837.   echo shar: Extracting \"'Circ/RSA/prim.h'\" \(688 characters\)
  838.   sed "s/^X//" >'Circ/RSA/prim.h' <<'END_OF_FILE'
  839. X/*******************************************************************************
  840. X*                                           *
  841. X*    Copyright (c) Martin Nicolay,  22. Nov. 1988                   *
  842. X*                                           *
  843. X*    Wenn diese (oder sinngemaess uebersetzte) Copyright-Angabe enthalten   *
  844. X*    bleibt, darf diese Source fuer jeden nichtkomerziellen Zweck weiter    *
  845. X*    verwendet werden.                               *
  846. X*                                           *
  847. X*    martin@trillian.megalon.de                           *
  848. X*                                           *
  849. X*******************************************************************************/
  850. X
  851. X#ifndef    _prim_h_
  852. X#define    _prim_h_
  853. X
  854. X#ifndef _arith_h_
  855. X#include    "arith.h"
  856. X#endif
  857. X
  858. Xint    p_prim        P(( NUMBER*, int ));
  859. Xvoid    inv        P(( NUMBER*, NUMBER*, NUMBER* ));
  860. X
  861. X#endif
  862. END_OF_FILE
  863.   if test 688 -ne `wc -c <'Circ/RSA/prim.h'`; then
  864.     echo shar: \"'Circ/RSA/prim.h'\" unpacked with wrong size!
  865.   fi
  866.   # end of 'Circ/RSA/prim.h'
  867. fi
  868. if test -f 'Circ/RSA/rnd.c' -a "${1}" != "-c" ; then 
  869.   echo shar: Will not clobber existing file \"'Circ/RSA/rnd.c'\"
  870. else
  871.   echo shar: Extracting \"'Circ/RSA/rnd.c'\" \(1177 characters\)
  872.   sed "s/^X//" >'Circ/RSA/rnd.c' <<'END_OF_FILE'
  873. X/*******************************************************************************
  874. X*                                           *
  875. X*    Copyright (c) Martin Nicolay,  22. Nov. 1988                   *
  876. X*                                           *
  877. X*    Wenn diese (oder sinngemaess uebersetzte) Copyright-Angabe enthalten   *
  878. X*    bleibt, darf diese Source fuer jeden nichtkomerziellen Zweck weiter    *
  879. X*    verwendet werden.                               *
  880. X*                                           *
  881. X*    martin@trillian.megalon.de                           *
  882. X*                                           *
  883. X*******************************************************************************/
  884. X
  885. X#include    <stdio.h>
  886. X
  887. X#include    "rnd.h"
  888. X
  889. X#include    "nio.h"
  890. X
  891. Xvoid gen_number( len, n )
  892. XNUMBER *n;
  893. X{
  894. X    char *hex = "0123456789ABCDEF" ;
  895. X    char num[ MAXLEN*MAXBIT/4 +1 ];
  896. X    char *p;
  897. X    int i,l;
  898. X    
  899. X    p= &num[ sizeof(num) -1];
  900. X    *p-- = '\0';
  901. X    
  902. X    for (l=len; l--; p-- ) {
  903. X        i = lrand48() % 16;
  904. X        *p = hex[ i ];
  905. X    }
  906. X    p++;
  907. X    
  908. X    while (len-- && *p == '0')
  909. X        p++;
  910. X    
  911. X    num_sget( n, p );
  912. X}
  913. X
  914. X#ifdef AMIGA
  915. Xint getpid()        /* we got no getpid on amiga */
  916. X{
  917. X    return(time((long *)0));
  918. X}
  919. X#endif
  920. X
  921. Xvoid init_rnd()
  922. X{
  923. X    long time();
  924. X    short seed[3];
  925. X
  926. X    seed[0] = time((long *)0) & 0xFFFF;
  927. X    seed[1] = getpid() & 0xFFFF;
  928. X    seed[2] = (time((long *)0) >> 16) & 0xFFFF;
  929. X    (void)seed48( seed );
  930. X}    
  931. X
  932. X
  933. END_OF_FILE
  934.   if test 1177 -ne `wc -c <'Circ/RSA/rnd.c'`; then
  935.     echo shar: \"'Circ/RSA/rnd.c'\" unpacked with wrong size!
  936.   fi
  937.   # end of 'Circ/RSA/rnd.c'
  938. fi
  939. if test -f 'Circ/RSA/rnd.h' -a "${1}" != "-c" ; then 
  940.   echo shar: Will not clobber existing file \"'Circ/RSA/rnd.h'\"
  941. else
  942.   echo shar: Extracting \"'Circ/RSA/rnd.h'\" \(673 characters\)
  943.   sed "s/^X//" >'Circ/RSA/rnd.h' <<'END_OF_FILE'
  944. X/*******************************************************************************
  945. X*                                           *
  946. X*    Copyright (c) Martin Nicolay,  22. Nov. 1988                   *
  947. X*                                           *
  948. X*    Wenn diese (oder sinngemaess uebersetzte) Copyright-Angabe enthalten   *
  949. X*    bleibt, darf diese Source fuer jeden nichtkomerziellen Zweck weiter    *
  950. X*    verwendet werden.                               *
  951. X*                                           *
  952. X*    martin@trillian.megalon.de                           *
  953. X*                                           *
  954. X*******************************************************************************/
  955. X
  956. X#ifndef    _rnd_h_
  957. X#define    _rnd_h_
  958. X
  959. X#ifndef _arith_h_
  960. X#include    "arith.h"
  961. X#endif
  962. X
  963. Xvoid    gen_number    P(( int, NUMBER* ));
  964. Xvoid    init_rnd    P(( void ));
  965. X
  966. X#endif
  967. END_OF_FILE
  968.   if test 673 -ne `wc -c <'Circ/RSA/rnd.h'`; then
  969.     echo shar: \"'Circ/RSA/rnd.h'\" unpacked with wrong size!
  970.   fi
  971.   # end of 'Circ/RSA/rnd.h'
  972. fi
  973. if test -f 'Circ/RSA/rsa.hdr' -a "${1}" != "-c" ; then 
  974.   echo shar: Will not clobber existing file \"'Circ/RSA/rsa.hdr'\"
  975. else
  976.   echo shar: Extracting \"'Circ/RSA/rsa.hdr'\" \(1342 characters\)
  977.   sed "s/^X//" >'Circ/RSA/rsa.hdr' <<'END_OF_FILE'
  978. XFrom: martin@trillian.UUCP (Martin Nicolay)
  979. XNewsgroups: sub.sources.unix,sub.sources.misc
  980. XSubject: RSA-Routinen
  981. XDate: 22 Nov 88 02:24:25 GMT
  982. XReply-To: martin@trillian.megalon.de (Martin Nicolay)
  983. XOrganization: Home
  984. XXref: lan sub.sources.unix:2 sub.sources.misc:10
  985. X
  986. XIch hab eine Implementation des RSA-Verfahrens (Public-Key-Crypt) zusammen
  987. Xgestrickt.  Enthalten sind dafuer auch Funktionen fuer Arithmetik mit grossen
  988. XZahlen (obere Schranke ist Compile-Option).
  989. X
  990. XJetzt kann endlich kein Sysop mehr die private Post lesen :-).
  991. X
  992. XDas Programm, dass den Text verschluesselt, ist noch verbesserungswuerdig.
  993. XZ.B. nur einen Block mit RSA (weil rechenintensiv) verschluesseln und darin
  994. Xeine Key uebergeben, mit dem der Rest mit DES verschluesselt wird.
  995. X
  996. XViel Spass bei der sicheren Mail!
  997. X
  998. XPS:  Mein oeffendlicher Schluessel ist :
  999. X    10875FDCBBC59099500630B241458A52B1830D35E6816A739C74534E8017E3F1
  1000. X    B9ACB73BDC84C47F954047EAFFBE0EFD5499B4431C815130766E78ED0F1E671D
  1001. X    F926171D67BDECB92374AAB07629C5F0263FCCDCD920F7D90779A8CF439538B1
  1002. X    6FAF35CE95A06051A6BFD3A7D7AF8B51FE8545C439E4C9F0ADAB7E13303
  1003. X    #
  1004. X    C6A65AE2A755FFE2026134AF1B8EC469017D0D9F3884F4D1132D273F066DBE57
  1005. X    86960811590F6873E52792D387604168183A7C22AA9FDF0F401454C4E65CE274
  1006. X    78C94992F154F380886E2F410707209665B5629864A358EDE68E0C11F94DA275
  1007. X    4C84D5F8BE6D7A6DC516FB6C4A4D7ABF13E701CCB2B8ED937E50438C2D
  1008. X
  1009. END_OF_FILE
  1010.   if test 1342 -ne `wc -c <'Circ/RSA/rsa.hdr'`; then
  1011.     echo shar: \"'Circ/RSA/rsa.hdr'\" unpacked with wrong size!
  1012.   fi
  1013.   # end of 'Circ/RSA/rsa.hdr'
  1014. fi
  1015. if test -f 'Circ/RSA/test.c' -a "${1}" != "-c" ; then 
  1016.   echo shar: Will not clobber existing file \"'Circ/RSA/test.c'\"
  1017. else
  1018.   echo shar: Extracting \"'Circ/RSA/test.c'\" \(453 characters\)
  1019.   sed "s/^X//" >'Circ/RSA/test.c' <<'END_OF_FILE'
  1020. X
  1021. X#include <fcntl.h>
  1022. X
  1023. Xmain()
  1024. X{
  1025. X   char buf[8192];
  1026. X   char *data="hey there\n";
  1027. X   int a,x,log1,log2;
  1028. X
  1029. X   log1=open("log1",O_CREAT|O_WRONLY);
  1030. X   log2=open("log2",O_CREAT|O_WRONLY);
  1031. X   a=(char)strlen(data);
  1032. X   strcpy(buf+1,"hey there.\n");
  1033. X   buf[0]=a;
  1034. X   x=do_rsa("public",buf,a+1,8192);
  1035. X   write(log1,buf,8192);
  1036. X   do_rsa("secret",buf,x);
  1037. X   write(log2,buf,8192);
  1038. X   close(log1);
  1039. X   close(log2);
  1040. X   write(1,buf+1,(int) buf[0]);
  1041. X   write(1,"\n",1);
  1042. X   
  1043. X}
  1044. END_OF_FILE
  1045.   if test 453 -ne `wc -c <'Circ/RSA/test.c'`; then
  1046.     echo shar: \"'Circ/RSA/test.c'\" unpacked with wrong size!
  1047.   fi
  1048.   # end of 'Circ/RSA/test.c'
  1049. fi
  1050. if test -f 'Circ/crypt.c' -a "${1}" != "-c" ; then 
  1051.   echo shar: Will not clobber existing file \"'Circ/crypt.c'\"
  1052. else
  1053.   echo shar: Extracting \"'Circ/crypt.c'\" \(608 characters\)
  1054.   sed "s/^X//" >'Circ/crypt.c' <<'END_OF_FILE'
  1055. X
  1056. X#include "d3des/d3des.h"
  1057. X
  1058. X#define HUGE 1024
  1059. X
  1060. Xunsigned long enkey[96],dekey[96];
  1061. X
  1062. Xchar *en_crypt(buf,len,len2)
  1063. Xchar *buf;
  1064. Xint len,*len2;
  1065. X{
  1066. X  static char ret[HUGE];
  1067. X  int i;
  1068. X
  1069. X  use3key(enkey);
  1070. X  for(i=0;i<len;i+=8)
  1071. X    Ddes(buf+i,ret+i);
  1072. X  *len2=i;
  1073. X  return(ret);
  1074. X}
  1075. X
  1076. Xchar *de_crypt(buf,len,len2)
  1077. Xchar *buf;
  1078. Xint len,*len2;
  1079. X{
  1080. X  static char ret[HUGE];
  1081. X  int i;
  1082. X
  1083. X  use3key(dekey);
  1084. X  for(i=0;i<len;i+=8)
  1085. X    Ddes(buf+i,ret+i);
  1086. X  *len2=i;
  1087. X  return(ret);
  1088. X}
  1089. Xset_key(key)
  1090. Xchar *key;
  1091. X{
  1092. X  des3key(key,0);
  1093. X  cp3key(enkey);     /* set encryption key */
  1094. X  des3key(key,1);
  1095. X  cp3key(dekey);     /* set decryption key */
  1096. X}
  1097. X
  1098. END_OF_FILE
  1099.   if test 608 -ne `wc -c <'Circ/crypt.c'`; then
  1100.     echo shar: \"'Circ/crypt.c'\" unpacked with wrong size!
  1101.   fi
  1102.   # end of 'Circ/crypt.c'
  1103. fi
  1104. if test -f 'Circ/crypt.irc2' -a "${1}" != "-c" ; then 
  1105.   echo shar: Will not clobber existing file \"'Circ/crypt.irc2'\"
  1106. else
  1107.   echo shar: Extracting \"'Circ/crypt.irc2'\" \(1550 characters\)
  1108.   sed "s/^X//" >'Circ/crypt.irc2' <<'END_OF_FILE'
  1109. X# this is ver ircII 2.2.4
  1110. X# for some reason, /on ^public acts differently
  1111. X
  1112. X# Start up the proggie
  1113. X/^exec -name crypt exec new
  1114. X
  1115. X# automatically pick out protocol messages
  1116. X#    crypt processor gets:   !send nick!CLIPPER:...etc
  1117. X#    or   !our nick!SKPJACK:...etc 
  1118. X# under 2.2.4 public has:  nick channel message
  1119. X#   the version I use has  nick message
  1120. X#   this is the difference between the two script versions
  1121. X/on ^public "* * CLIPPER:*" /msg %crypt !$0!$2-
  1122. X/on ^public "* * SKPJACK:*" /msg %crypt OURNICK:$N;/msg %crypt !$0!$2-
  1123. X/on ^public_other "* * CLIPPER:*" /msg %crypt !$0:$1!$2-
  1124. X/on ^public_other "* * SKPJACK:*" /msg %crypt OURNICK:$N;/msg %crypt !$0:$1!$2-
  1125. X
  1126. X/on ^msg "* CLIPPER:*" /msg %crypt !*$0*!$1-
  1127. X/on ^msg "* SKPJACK:*" /msg %crypt OURNICK:$N;/msg %crypt !*$0*!$1-
  1128. X
  1129. X# messages comming back from crypt, to server or screen?
  1130. X/on ^exec "crypt TCHANNL: *" /msg $C $2-
  1131. X/on ^exec "crypt TSCREEN: *" /echo $2-
  1132. X/on ^exec "crypt TNICKNM: *" /msg $2 $3-
  1133. X
  1134. X# our irc commands:
  1135. X#    /key nick  or /key nick filename
  1136. X#    /die
  1137. X#    /e message to be encrypted
  1138. X#    /p message to be plaintext
  1139. X#    /crypt   (turn on automatic encryption)
  1140. X#    /plain   (turn off automatic encryption)
  1141. X#    /emsg nick text  send an encrypted message
  1142. X/alias key /echo K->*$0* Sending Key;/^msg %crypt SENDKEY: $0-
  1143. X/alias die /^msg %crypt QUITDIE:;/query 
  1144. X/alias e /echo E> $0-;/^msg %crypt CRYPTME:$0-
  1145. X/alias p /msg $C $0-
  1146. X/alias crypt /query %crypt
  1147. X/alias plain /query
  1148. X/alias emsg /echo E->*$0* $1-;/^msg %crypt !$0!CRYPTME:$1-
  1149. X
  1150. X/echo *** Encrypted Irc Protocol loaded. 
  1151. END_OF_FILE
  1152.   if test 1550 -ne `wc -c <'Circ/crypt.irc2'`; then
  1153.     echo shar: \"'Circ/crypt.irc2'\" unpacked with wrong size!
  1154.   fi
  1155.   # end of 'Circ/crypt.irc2'
  1156. fi
  1157. if test -f 'Circ/d3des/main.c' -a "${1}" != "-c" ; then 
  1158.   echo shar: Will not clobber existing file \"'Circ/d3des/main.c'\"
  1159. else
  1160.   echo shar: Extracting \"'Circ/d3des/main.c'\" \(711 characters\)
  1161.   sed "s/^X//" >'Circ/d3des/main.c' <<'END_OF_FILE'
  1162. X
  1163. X#include "d3des.h"
  1164. Xunsigned long enkey[96],dekey[96];
  1165. Xunsigned long e1[32],e2[32],e3[32];
  1166. Xunsigned long d1[32],d2[32],d3[32];
  1167. X
  1168. Xmain()
  1169. X{
  1170. X  char *a,b[100],*k,*k1,*k2,*k3;
  1171. X
  1172. X  strcpy(b,"this is a test");
  1173. X  k="testing123423456789212345678";
  1174. X  k1="testing1";
  1175. X  k2="23423456";
  1176. X  k3="78921234";
  1177. X  deskey(k1,0); cpkey(e1);
  1178. X  deskey(k2,1); cpkey(d2);
  1179. X  deskey(k3,0); cpkey(e3);
  1180. X  des3key(k,0); cp3key(enkey);    /* set up long keys , encrypt */
  1181. X  des3key(k,1); cp3key(dekey);    /* decrypt */
  1182. X  use3key(enkey); Ddes(b,b);      /* encrypt b */
  1183. X  write(1,b,16);
  1184. X  use3key(dekey); Ddes(b,b);      /* decrypt b */
  1185. X  write(1,b,16);
  1186. X
  1187. X  usekey(e1); des(b,b);
  1188. X  usekey(d2); des(b,b);
  1189. X  usekey(e3); des(b,b);
  1190. X  write(1,b,16);
  1191. X}
  1192. X
  1193. END_OF_FILE
  1194.   if test 711 -ne `wc -c <'Circ/d3des/main.c'`; then
  1195.     echo shar: \"'Circ/d3des/main.c'\" unpacked with wrong size!
  1196.   fi
  1197.   # end of 'Circ/d3des/main.c'
  1198. fi
  1199. if test -f 'Circ/d3des/readme' -a "${1}" != "-c" ; then 
  1200.   echo shar: Will not clobber existing file \"'Circ/d3des/readme'\"
  1201. else
  1202.   echo shar: Extracting \"'Circ/d3des/readme'\" \(286 characters\)
  1203.   sed "s/^X//" >'Circ/d3des/readme' <<'END_OF_FILE'
  1204. XThis code by Richard Outerbridge implements DES with optional
  1205. Xdouble and triple encryption.  I think it's pretty fast, and
  1206. Xit doesn't take up much memory at runtime.
  1207. XRichard leaves a copyright notice on the code but encourages
  1208. Xfree use of the code.
  1209. X
  1210. XMark Riordan   mrr@scss3.cl.msu.edu
  1211. END_OF_FILE
  1212.   if test 286 -ne `wc -c <'Circ/d3des/readme'`; then
  1213.     echo shar: \"'Circ/d3des/readme'\" unpacked with wrong size!
  1214.   fi
  1215.   # end of 'Circ/d3des/readme'
  1216. fi
  1217. if test -f 'Circ/ignore.irc' -a "${1}" != "-c" ; then 
  1218.   echo shar: Will not clobber existing file \"'Circ/ignore.irc'\"
  1219. else
  1220.   echo shar: Extracting \"'Circ/ignore.irc'\" \(156 characters\)
  1221.   sed "s/^X//" >'Circ/ignore.irc' <<'END_OF_FILE'
  1222. X/on ^public "* CLIPPER:*" /comment
  1223. X/on ^public "* SKPJACK:*" /comment
  1224. X/on ^public_other "* * CLIPPER:*" /comment
  1225. X/on ^public_other "* * SKPJACK:*" /comment
  1226. END_OF_FILE
  1227.   if test 156 -ne `wc -c <'Circ/ignore.irc'`; then
  1228.     echo shar: \"'Circ/ignore.irc'\" unpacked with wrong size!
  1229.   fi
  1230.   # end of 'Circ/ignore.irc'
  1231. fi
  1232. if test -f 'Circ/pubkeys/al' -a "${1}" != "-c" ; then 
  1233.   echo shar: Will not clobber existing file \"'Circ/pubkeys/al'\"
  1234. else
  1235.   echo shar: Extracting \"'Circ/pubkeys/al'\" \(261 characters\)
  1236.   sed "s/^X//" >'Circ/pubkeys/al' <<'END_OF_FILE'
  1237. XC21265D382D4E4F2C01C6CAEAEDF0278843A06DF78F4A4BA79FC09607471336B
  1238. X085AF92ED74A442160B5D3A8DA75F255E30E05C6D564633524DBBB9B614B7C99
  1239. X#
  1240. XDA4803B1FFE436844CBE6EFDA5405005B76BC8E90C575DD391723ACF8F9079BE
  1241. X277B1992A12EB70AA3C84FE460ACDAFA22EA71C4306EC79F9B7B398E6ABFDF5
  1242. END_OF_FILE
  1243.   if test 261 -ne `wc -c <'Circ/pubkeys/al'`; then
  1244.     echo shar: \"'Circ/pubkeys/al'\" unpacked with wrong size!
  1245.   fi
  1246.   # end of 'Circ/pubkeys/al'
  1247. fi
  1248. if test -f 'Circ/sock.h' -a "${1}" != "-c" ; then 
  1249.   echo shar: Will not clobber existing file \"'Circ/sock.h'\"
  1250. else
  1251.   echo shar: Extracting \"'Circ/sock.h'\" \(1318 characters\)
  1252.   sed "s/^X//" >'Circ/sock.h' <<'END_OF_FILE'
  1253. X#define DEFAULTSERVER   "netsys1.netsys.com"
  1254. X
  1255. X/*
  1256. X  Please fix these for your site: A FEW US SERVERS:
  1257. X  csd.bu.edu  mit.irc.edu  cm22.eng.umd.edu  ccwf.cc.utexas.edu
  1258. X  nic.funet.fi  cs.hut.fi  wpi.wpi.edu  chaos.cs.brandeis.edu 
  1259. X  emoryu1.cc.emory.edu  kvart.ifi.uio.no  vesuv.unisg.ch  ircserv.imp.ch 
  1260. X  stork.doc.ic.ac.uk  alf.uib.no  irc.nada.kth.se  eff.org  st6000.sct.edu 
  1261. X  husc10.harvard.edu  phoenix.princeton.edu  penfold.ece.uiuc.edu 
  1262. X  ucsu.colorado.EDU   badger.ugcs.caltech.edu  freedom.nmsu.edu  nuscc.nus.sg
  1263. X  kum.kaist.ac.kr  silver.ucs.indiana.edu  sapienza.roma.it  
  1264. X  bigvax.cs.biu.ac.il  hermes.tcad.ee.ufl.edu  tjeeves.acc.virginia.edu
  1265. X
  1266. X  Try to pick one CLOSEST to your domain if not in your domain.  There are
  1267. X  MANY more, but this is just ment to get you started, I just tried to give
  1268. X  a smattering of sites across the world.  I tried to cover every suffix 
  1269. X  that I could think of.  These are off the top of my head, so it's by no
  1270. X  means complete.  Use one if yours isn't listed and when you get on irc
  1271. X  ask someone if there's a closer site, try /who *.your.domain to find
  1272. X  people closest to you.
  1273. X
  1274. X  Notice how documentation is bigger than the code? :)
  1275. X */
  1276. X#define DEFAULTPORT    6667
  1277. X#define COMMANDCHAR    '/'
  1278. X
  1279. X/* couple fixes for non-ansi-c systems */
  1280. X#ifdef pyr
  1281. X#define strchr index
  1282. X#endif
  1283. X
  1284. END_OF_FILE
  1285.   if test 1318 -ne `wc -c <'Circ/sock.h'`; then
  1286.     echo shar: \"'Circ/sock.h'\" unpacked with wrong size!
  1287.   fi
  1288.   # end of 'Circ/sock.h'
  1289. fi
  1290. if test -f 'POSTER' -a "${1}" != "-c" ; then 
  1291.   echo shar: Will not clobber existing file \"'POSTER'\"
  1292. else
  1293.   echo shar: Extracting \"'POSTER'\" \(982 characters\)
  1294.   sed "s/^X//" >'POSTER' <<'END_OF_FILE'
  1295. XFrom: Timothy Newsham <newsham@wiliki.eng.hawaii.edu>
  1296. XSubject: Re: Circ - encrypted irc package
  1297. X
  1298. XThe following (in uuencoded tar-Z format) is The first release (V1.0) of
  1299. Xthe Circ package.  It works in conjunction with the ircII client (chat
  1300. Xprogram: available at csd.bu.edu in pub/irc/clients)
  1301. X
  1302. XThe program allows for key management, key exchange and the exchange of
  1303. Xencrypted messages in real time over the IRC chat network.
  1304. X
  1305. XThe current version has been tested on Ultrix (decstation) and HPUX 9.0
  1306. X(hp9000) machines.  Previous versions have been tested on other
  1307. Xplatforms, the code is mostly made up of STDIO routines and should
  1308. Xcompile on most unix machines.
  1309. X
  1310. XAll code written by me is released into the public domain.
  1311. X
  1312. XThe code in the RSA and d3des directories were not authored by me but
  1313. Xare freely distributable.
  1314. X
  1315. X--
  1316. XModerators note:
  1317. XCirc was supplied to me as a single 127Kb shar file.  Since this was too
  1318. Xlarge to post directly, I've split it into 3 separate issues.
  1319. X
  1320. X+Alec-
  1321. END_OF_FILE
  1322.   if test 982 -ne `wc -c <'POSTER'`; then
  1323.     echo shar: \"'POSTER'\" unpacked with wrong size!
  1324.   fi
  1325.   # end of 'POSTER'
  1326. fi
  1327. echo shar: End of archive 3 \(of 3\).
  1328. cp /dev/null ark3isdone
  1329. MISSING=""
  1330. for I in 1 2 3 ; do
  1331.     if test ! -f ark${I}isdone ; then
  1332.     MISSING="${MISSING} ${I}"
  1333.     fi
  1334. done
  1335. if test "${MISSING}" = "" ; then
  1336.     echo You have unpacked all 3 archives.
  1337.     rm -f ark[1-9]isdone
  1338. else
  1339.     echo You still must unpack the following archives:
  1340.     echo "        " ${MISSING}
  1341. fi
  1342. exit 0
  1343. exit 0 # Just in case...
  1344.