story.html
47998632ba636d90eef97165561eef6a3f6a12297df2d3b9447aa59a625fc3d5
<HTML>
<HEAD>
<TITLE>The quest for the most diminutive munitions program</TITLE>
</HEAD>
<BODY>
<H2>The quest for the most diminutive munitions program</H2>
There have been a number of revisions of the RSA in perl hack as
people have contributed ways to shorten it. Here are the interesting
ones, the smallest and most recent first:
<P>
<H3>Current best, perl5 and dc</H3>
Currently there is no explanation for this one, but is similar to the
3 line version in the way that it works, see below.
<HR>
<XMP>
print pack"C*",split/\D+/,`echo "16iII*o\U@{$/=$z;[(pop,pop,unpack"H*",<>
)]}\EsMsKsN0[lN*1lK[d2%Sa2/d0<X+d*lMLa^*lN%0]dsXx++lMlN/dsM0<J]dsJxp"|dc`
</XMP>
<HR>
<H3>Previous best, works with perl4 and dc</H3>
There is an <A HREF="story2.html">explanation</A> of how this works in
detail.
<HR>
<XMP>
#!/bin/perl -sp0777i<X+d*lMLa^*lN%0]dsXx++lMlN/dsM0<j]dsj
$/=unpack('H*',$_);$_=`echo 16dio\U$k"SK$/SM$n\EsN0p[lN*1
lK[d2%Sa2/d0$^Ixp"|dc`;s/\W//g;$_=pack('H*',/((..)*)$/)
</XMP>
<HR>
<H3>Prior to that</H3>
(this one is the one on many
<A HREF="http://www.obscura.com/~shirt/">T-shirts</A>,
and the one in the tattoo):
<HR>
<XMP>
#!/bin/perl -s-- -export-a-crypto-system-sig -RSA-3-lines-PERL
$m=unpack(H.$w,$m."\0"x$w),$_=`echo "16do$w 2+4Oi0$d*-^1[d2%Sa
2/d0<X+d*La1=z\U$n%0]SX$k"[$m*]\EszlXx++p|dc`,s/^.|\W//g,print
pack('H*',$_)while read(STDIN,$m,($w=2*$d-1+length$n&~1)/2)
</XMP>
<HR>
<H3>Original version which started the trend</H3>
<A HREF="org-post.html">9 March 1995</A> The original version which
started this trend of perl crypto hacks.
<P>
An <A HREF="hal-reply.html">explanation</A> of how this one works was
posted to the cypherpunks list by Hal Finney shortly after I posted it.
<HR>
<XMP>
#!/usr/local/bin/perl -- export-a-crypto-system sig, RSA in 5 lines of PERL:
($s,$k,$n)=@ARGV;$w=length$n;$k="0$k"if length($k)&1;$n="0$n",$w++if$w&1;die
"$0 -d|-e key mod <in >out\n"if$s!~/^-[de]$/||$#ARGV<2;$v=$w;$s=~/d/?$v-=2:
$w-=2;$_=unpack('B*',pack('H*',$k));s/^0*//g;s/0/d*ln%/g;s/1/d*ln%lm*ln%/g;
$c="1${_}p";while(read(STDIN,$m,$w/2)){$m=unpack("H$w",$m);chop($a=
`echo 16o16i\U$m\Esm\U$n\Esn$c|dc`);print pack('H*','0'x($v-length$a).$a);}
</XMP>
<HR>
<H3>Pure perl version</H3>
<A HREF="pureperl.html">Pure perl</A> version by Clifford Adams in 5
lines of perl.
<HR>
<XMP>
#!/usr/local/bin/perl -s
do 'bigint.pl';($_,$n)=@ARGV;s/^.(..)*$/0$&/;($k=unpack('B*',pack('H*',$_)))=~
s/^0*//;$x=0;$z=$n=~s/./$x=&badd(&bmul($x,16),hex$&)/ge;while(read(STDIN,$_,$w
=((2*$d-1+$z)&~1)/2)){$r=1;$_=substr($_."\0"x$w,$c=0,$w);s/.|\n/$c=&badd(&bmul
($c,256),ord$&)/ge;$_=$k;s/./$r=&bmod(&bmul($r,$r),$x),$&?$r=&bmod(&bmul($r,$c
),$x):0,""/ge;($r,$t)=&bdiv($r,256),$_=pack(C,$t).$_ while$w--+1-2*$d;print}
</XMP>
<HR>
<EM>
Comments, html bugs to me
(<A HREF="http://www.dcs.ex.ac.uk/~aba/">Adam Back</A>) at
<A HREF="mailto:aba@dcs.ex.ac.uk"><aba@dcs.ex.ac.uk></A>
</EM>
</BODY>
</HTML>