Add preview of 1984-2019
The 2020 winners are hinted it, but the source code is not there,
nor are the hints. Someone could look into the HTML and
see what was commented out, but that is not a problem because
WHO won is known and the name of their AWARD is known already.
Moreover a number of the winners have talked about what their
entirs do, so the commented out spoiler text is not a bit problem.
One will find HTML commented out with:
<!-- XXX remove when 2020 is ready
2020 links here
XXX remove when 2020 is ready -->
The "XXX remove when 2020 is ready" string is found at the
start and end comment blocks. Again, soneone could read
what was commented out, but that is OK since most of that
information is known or can be known. The following files
have such HTML comment blocks in them.
./winners.html
./years-spoiler.html
./years.html
In addition, ./all/summary.txt was modified to not
include the 2020 entries for the momemt.
The 2020 winner code AND write-ups are NOT part of this set.
p.s. The all/all.tar.bz2 does not contain the 2020 source code (yet?).
This commit is contained in:
1 parent
28efc67f5d
commit
c0663537cb
1683 files changed
+220064
No files matched your search
@@ -0,0 +1,207 @@
|
||||
#!/usr/bin/env make
|
||||
#
|
||||
# 2012 makefile
|
||||
#
|
||||
# This work by Landon Curt Noll, Simon Cooper, and Leonid A. Broukhis
|
||||
# is licensed under:
|
||||
#
|
||||
# Creative Commons Attribution-ShareAlike 3.0 Unported License.
|
||||
#
|
||||
# See: http://creativecommons.org/licenses/by-sa/3.0/
|
||||
|
||||
|
||||
################
|
||||
# tool locations
|
||||
################
|
||||
#
|
||||
SHELL= /bin/bash
|
||||
CP= cp
|
||||
CPP= cpp
|
||||
GUNZIP= gunzip
|
||||
LD= ld
|
||||
MAKE= make
|
||||
RM= rm
|
||||
SED= sed
|
||||
TAR= tar
|
||||
TRUE= true
|
||||
|
||||
# Set X11_LIBDIR to the directory where the X11 library resides
|
||||
#
|
||||
X11_LIBDIR= /usr/X11R6/lib
|
||||
|
||||
# Set X11_INCLUDEDIR to the directory where the X11 include files reside
|
||||
#
|
||||
X11_INCDIR= /usr/X11R6/include
|
||||
|
||||
# Compiler warnings
|
||||
#
|
||||
#CWARN=
|
||||
CWARN= -Wall -W
|
||||
#CWARN= -Wall -W -pedantic
|
||||
|
||||
# compiler standard
|
||||
#
|
||||
#CSTD=
|
||||
#CSTD= -ansi
|
||||
CSTD= -std=c99
|
||||
|
||||
# compiler bit architecture
|
||||
#
|
||||
# Some entries require 32-bitness:
|
||||
# ARCH= -m32
|
||||
#
|
||||
# Some entries require 64-bitess:
|
||||
# ARCH= -m64
|
||||
#
|
||||
# By default we assume nothing:
|
||||
#
|
||||
ARCH=
|
||||
|
||||
# optimization
|
||||
#
|
||||
# Most compiles will safely use -O2. Some can use only -O1 or -O.
|
||||
# A few compilers have broken optimizers or this entry make break
|
||||
# under those buggy optimizers and thus you may not want anything.
|
||||
#
|
||||
#OPT=
|
||||
#OPT= -O
|
||||
#OPT= -O1
|
||||
OPT= -O2
|
||||
#OPT= -O3
|
||||
|
||||
# Libraries needed to build
|
||||
#
|
||||
LIBS=
|
||||
|
||||
# default flags for ANSI C compilation
|
||||
#
|
||||
CFLAGS= ${CWARN} ${CSTD} ${ARCH} ${OPT} ${LIBS}
|
||||
|
||||
# ANSI compiler
|
||||
#
|
||||
# Set CC to the name of your ANSI compiler.
|
||||
#
|
||||
# Some entries seem to need gcc. If you have gcc, set
|
||||
# both CC and MAY_NEED_GCC to gcc.
|
||||
#
|
||||
# If you do not have gcc, set CC to the name of your ANSI compiler, and
|
||||
# set MAY_NEED_GCC to either ${CC} (and hope for the best) or to just :
|
||||
# to disable such programs.
|
||||
#
|
||||
CC= cc
|
||||
#CC=clang
|
||||
MAY_NEED_GCC= gcc
|
||||
|
||||
|
||||
##############################
|
||||
# Special flags for this entry
|
||||
##############################
|
||||
#
|
||||
ENTRY= grothe
|
||||
DATA= cookie_piece1.dat cookie_piece2.dat cookie_piece3.dat \
|
||||
cookie_piece4.dat cookie_recipe.txt
|
||||
ALT_OBJ= grothe.orig.o
|
||||
ALT_ENTRY= grothe.orig
|
||||
|
||||
|
||||
#################
|
||||
# build the entry
|
||||
#################
|
||||
#
|
||||
all: ${ENTRY} ${DATA}
|
||||
@${TRUE}
|
||||
|
||||
${ENTRY}: ${ENTRY}.c
|
||||
${CC} ${CFLAGS} -DBC='break;case' $< -o $@
|
||||
|
||||
# alternative executable
|
||||
#
|
||||
alt: ${ALT_ENTRY}
|
||||
@${TRUE}
|
||||
|
||||
grothe.orig: grothe.orig.c
|
||||
${CC} ${CFLAGS} -DBC='break;case' $< -o $@
|
||||
|
||||
# data files
|
||||
#
|
||||
data: ${DATA}
|
||||
@${TRUE}
|
||||
|
||||
|
||||
###############
|
||||
# utility rules
|
||||
###############
|
||||
#
|
||||
everything: all alt
|
||||
|
||||
clean:
|
||||
${RM} -f ${ENTRY}.o ${ALT_OBJ}
|
||||
|
||||
clobber: clean
|
||||
${RM} -f ${ENTRY} ${ALT_ENTRY}
|
||||
|
||||
nuke: clobber
|
||||
@${TRUE}
|
||||
|
||||
dist_clean: nuke
|
||||
@${TRUE}
|
||||
|
||||
install:
|
||||
@echo "Surely you're joking Mr. Feynman!"
|
||||
@${TRUE}
|
||||
|
||||
# backwards compatibility
|
||||
#
|
||||
build: all
|
||||
@${TRUE}
|
||||
|
||||
|
||||
##################
|
||||
# 133t hacker rulz
|
||||
##################
|
||||
#
|
||||
love:
|
||||
@echo 'not war?'
|
||||
@${TRUE}
|
||||
|
||||
haste:
|
||||
$(MAKE) waste
|
||||
@${TRUE}
|
||||
|
||||
waste:
|
||||
@echo 'waste'
|
||||
@${TRUE}
|
||||
|
||||
easter_egg:
|
||||
@echo you expected to mis-understand this $${RANDOM} magic
|
||||
@echo chongo '<was here>' "/\\oo/\\"
|
||||
@echo Readers shall be disallowed from not being unable to partly misunderstand this partocular final echo.
|
||||
|
||||
# Understand the history of "I Am the Walrus" and
|
||||
# and in particular John Lennon's remarks on that
|
||||
# song and you might be confused about these next
|
||||
# rules in a different way. :-)
|
||||
#
|
||||
supernova: nuke
|
||||
@-if [ -r .code_anal ]; then \
|
||||
${RM} -f .code_anal_v3; \
|
||||
else \
|
||||
echo "You are not expected to understand this"; \
|
||||
fi
|
||||
@${TRUE}
|
||||
|
||||
deep_magic:
|
||||
@-if [ -r .code_anal ]; then \
|
||||
ccode_analysis --deep_magic 1c2c85c7a02c55d1add91967eca491d53c101dc1 --FNV1a_hash 256-bit "${ENTRY}"; \
|
||||
else \
|
||||
echo "Understand different"; \
|
||||
fi
|
||||
@${TRUE}
|
||||
|
||||
magic: deep_magic
|
||||
@-if [ -r .code_anal ]; then \
|
||||
ccode_analysis --mode 21701 --level 23209 --FNV1a_hash 256-bit "${ENTRY}"; \
|
||||
else \
|
||||
echo "These aren't the droids you're looking for Mr. Spock!"; \
|
||||
fi
|
||||
@${TRUE}
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,33 @@
|
||||
This is based on the Urban Legend about Neiman Marcus charging $25,000 for
|
||||
their cookie recipe. No one knows the source, but the recipe does make good
|
||||
cookies and a LOT of them. Recipe is in Public Domain.
|
||||
|
||||
From Steve's Recipe Database http://recipes.stevex.net/
|
||||
|
||||
Title: $25,000 Cookies
|
||||
Yield: 112 Servings
|
||||
|
||||
Ingredients:
|
||||
|
||||
2 c Butter
|
||||
1 ts Salt
|
||||
2 c Sugar
|
||||
2 ts Baking Powder
|
||||
2 c Brown sugar
|
||||
2 ts Baking Soda
|
||||
4 Eggs
|
||||
4 oz Chocolate Chips
|
||||
2 ts Vanilla
|
||||
1 8-Oz Hershey Bar, grated
|
||||
4 c Flour
|
||||
3 c Chopped nuts
|
||||
5 c Blended Oatmeal *
|
||||
|
||||
|
||||
*Blended Oatmeal: Measure and blend in a blender to a fine powder.
|
||||
Cream butter and both sugars. Add eggs and vanilla.
|
||||
Mix together with flour, oatmeal, salt, baking powder, and baking soda.
|
||||
Add chips, candy and nuts.
|
||||
Roll into balls and place two (2) inches apart on a cookie sheet.
|
||||
Bake for six (6) minutes at 375 degrees.
|
||||
Makes 112 cookies, but recipe can be halved.
|
||||
@@ -0,0 +1,27 @@
|
||||
#include<stdio.h>
|
||||
#include<stdlib.h>
|
||||
#include<ctype.h>
|
||||
|
||||
int u,z,q[0400],O[0x101],o[0401],I[257],w[258][0403],W[0x100],Z[0x103],c[0403],k
|
||||
,i,j,n,l,p,m;const char*J[0416],*M[0400];FILE*K[280],*s[0x102];void f(char*n,int
|
||||
a){char*e=n;while(*e!='\0'){if(tolower((int)*e)!=*e)fputc(040,stderr);fputc((*e)
|
||||
-a,stderr);e+=1;}(void)fputc('\n',stderr);}int y(int a,int b);int t(int i,int j)
|
||||
{int k=i&j,l=i^j,n,m=1;for(n=1;k>=n;n<<=1)if(k&n)m=y(m,1<<n|1<<(n-1));return m>1
|
||||
?y(m,1<<l):1<<l;}int y(int a,int b){int n,i=0x0,j;if((n=w[a][b]))return n;for(;a
|
||||
>>i;++i)for(j=0x0;b>>j;j++)if(((a>>i)&1)&&((b>>j)&1))n^=t(i,j);return w[a][b]=w[
|
||||
b][a]=n;}void a(void){for(i=0;i<z;i++){n=0;if(!i[I]){for(j=0;j<u;++j)if(i[O]==q[
|
||||
j])n=Z[j];}else for(j=0;j<u;j++)n^=w[Z[j]][w[I[i]][W[w[o[j]][O[i]^q[j]]]]];c[i]=
|
||||
n;}}void X(int v,int u){char*y=0;v-=1;switch(v){case(0x2):y ="HckngfVqQrgpKprwv"
|
||||
"Hkng"; BC(4):y="JempihXsStirMrtyxJmpi"; BC(0):y="PointValueTooLarge"; BC 0x1:y=
|
||||
"EvqmjdbufJoqvuQpjou";BC(6):y="TuOtv{zLorky";BC(3):y="WrrPdq|RxwsxwSrlqwv";BC(5)
|
||||
:y="GfiFwlzrjsyX~syf}"; BC(07):y="UvV|{w|{Mpslz";}if(u)exit(0); f(y,v);exit(1);}
|
||||
int main(int t,const char*T[]){for(i=00;i<0x100;++i)for(j=0;j<=i;++j)if(1==y(i,j
|
||||
))W[i]=j,W[j]=i;for(k=0x1;k<t;k++){p=0;for(l=0;(T[k][l]>=toupper('0'))&&(T[k][l]
|
||||
<=tolower('9'));l++){p=p*10+(T[k][l]-'0');if(p>=256)X(1,0);}if(T[k][l]=='-'){for
|
||||
(m=0;m<u;m++)if(q[m]==p)X(2,0);q[u]=p;J[u]=T[k]+l+1;K[u]=fopen(J[u],"r");if(!u[K
|
||||
])X(3,0);u++;}else if(T[k][l]=='+'){if(z>=256)X(4,0); O[z]=p;M[z]=T[k]+l+1;s[z]=
|
||||
fopen(M[z],"w");if(!s[z])X(5,0);z++;}else X(6,0);}if(!(u!=0))X(7,0);if(!(z!= 0))
|
||||
X(8,0);for(i=0;i<u;i++){n=1;for(j=0;j<u; j+=1)if(j!=i)n=w[n][q[i]^q[j]];o[i]=n;}
|
||||
for(i=0;i<z;i++){n=1;for(j=0;j<u;j++)n=w[n][O[i]^q[j]];I[i]=n;}while(!(0)){for(k
|
||||
=0;k<u;k++){int n;n=getc(K[k]); if(n==EOF)X(42,1); Z[k]=n;}a();for(k=0;k<z;k++)(
|
||||
void)putc(c[k],s[k]);}X(11,1);}
|
||||
@@ -0,0 +1,32 @@
|
||||
#include<stdio.h>
|
||||
#include<stdlib.h>
|
||||
#include<ctype.h>
|
||||
|
||||
static const int x[010][8]={{01,02,04,0x8,020,32,0x40,128,},{02,03,0x8,12,32,48,
|
||||
128,192,},{04,0x8,06,11,64,128,96,176,},{0x8,12,11,13,128,192,176,208,},{020,32,
|
||||
64,128,24,44,75,141,},{32,48,128,192,44,52,141,198,},{64,128,96,0260,75,141,103,
|
||||
185,},{0200,192,176,208,0x8D,0306,0271,0xDE,},};static int u,z,q[0400],O[0x101],
|
||||
o[0401],I[257],w[258][0403],W[0x100],Z[0x103],c[0403],k,i,j,n,l,p,m;static const
|
||||
char*J[0416],*M[0400];static FILE *K[280],*s[0x102];static void f(char *n,int a)
|
||||
{char *e=n;while(*e!='\0'){if(tolower((int)*e)!=*e)(void)fputc(040,stderr);fputc
|
||||
((*e)-a,stderr);e+=1;}(void)fputc('\n',stderr);}static int y(int a,int b){int n=
|
||||
0,i=0x0,j;for(;a>>i;++i)for(j=0x0;b>>j;j++)if(((a>>i)&1)&&((b>>j)&1))n^=x[i][j];
|
||||
return n;}static void a(void){for(i=0;i<z;i++){n=0;if(!i[I]){for(j=0;j<u;++j)if(
|
||||
i[O]==q[j])n=Z[j];}else for(j=0;j<u;j++)n^=w[Z[j]][w[I[i]][W[w[o[j]][O[i]^q[j]]]
|
||||
]];c[i]=n;}}static void X(int v,int u){char*y;v-=_STDIO_H;switch(v){case(0x2):y=
|
||||
"H""c""k""ngfVqQrgpKprwvHkng";break;case(4):y="J""e""m""p""ih""XsStirMrtyxJmpi";
|
||||
break;case(EXIT_SUCCESS):y="P""o""i""ntValueTooLarge";break;case 0x1:y="E""v""q"
|
||||
"m""j""d""b""u""f""J""o""q""v""u""Q""p""j""o""u";break;case(6):y="T""u""O""t""v"
|
||||
"{""z""L""o""r""k""y";break;case(3):y="WrrPdq|Rx""w""sx" "wSrlqwv";break;case(5)
|
||||
:y="GfiFwlzrjsyX~syf}";break;case(07):y="U""v""V""|""{""w""|""{""M""p""s""l""z";
|
||||
}if(u)exit(EXIT_SUCCESS);f(y,v);exit(EXIT_FAILURE);}int main(int t,const char*T[
|
||||
]){for(i=00;i<0x100;++i)for(j=0;j<=0xff;++j)w[i][j]=y(i,j);W[0]=0;for(i=1;i<256;
|
||||
i+=1){for(j=1;w[i][j]!=1;j+=1);i[W]=j;}for(k=0x1;k<t;k++){p=0;for(l=0;(T[k][l]>=
|
||||
toupper('0'))&&(T[k][l]<=tolower('9'));l++){p=p*10+(T[k][l]-'0');if(p>=256)X(1,0
|
||||
);}if(T[k][l]=='-'){for(m=0;m<u;m++)if(q[m]==p)X(2,0);q[u]=p;J[u]=T[k]+l+1;K[u]=
|
||||
fopen(J[u],"r");if(!u[K])X(3,0);u++;}else if(T[k][l]=='+'){if(z>=256)X(4,0);O[z]
|
||||
=p;M[z]=T[k]+l+1;s[z]=fopen(M[z],"w");if(!s[z])X(5,0);z++;}else X(6,0);}if(!(u!=
|
||||
0))X(7,0);if(!(z!=0))X(8,0);for(i=0;i<u;i++){n=1;for(j=0;j<u;j+=1)if(j!=i)n=w[n]
|
||||
[q[i]^q[j]];o[i]=n;}for(i=0;i<z;i++){n=1;for(j=0;j<u;j++)n=w[n][O[i]^q[j]];I[i]=
|
||||
n;}while(!(0)){for(k=0;k<u;k++){int n;n=getc(K[k]);if(n==EOF)X(42,1);Z[k]=n;}a()
|
||||
;for(k=0;k<z;k++)(void)putc(c[k],s[k]);}X(11,1);}
|
||||
@@ -0,0 +1,160 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<meta name="GENERATOR" content="mkd2html 2.1.5a DL=DISCOUNT">
|
||||
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
|
||||
<link rel="stylesheet"
|
||||
type="text/css"
|
||||
href="../hint.css">
|
||||
<title>Most conspiratorial</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Most conspiratorial</h1>
|
||||
|
||||
<p>Aaron Grothe<br>
|
||||
2205 South 51st Street<br>
|
||||
Omaha, NE 68106<br>
|
||||
US<br>
|
||||
<a href="mailto:ajgrothe@yahoo.com">ajgrothe@yahoo.com</a></p>
|
||||
|
||||
<p>David Madore<br>
|
||||
<a href="http://www.madore.org/~david/">http://www.madore.org/~david/</a></p>
|
||||
|
||||
<h2>Judges' comments:</h2>
|
||||
|
||||
<h3>To build:</h3>
|
||||
|
||||
<pre><code>make grothe
|
||||
</code></pre>
|
||||
|
||||
<h3>To run:</h3>
|
||||
|
||||
<pre><code># To create a shared secret shared among M people with N+1 needed to reconstruct
|
||||
./grothe -secret 1-/dev/urandom 2-/dev/urandom ... N-/dev/urandom \
|
||||
1+shared1 2+shared2 ... M+sharedM
|
||||
|
||||
# To reconstruct the original (an arbitrary combination of N+1 or
|
||||
# more shared files with their proper numbers)
|
||||
./grothe I-sharedI J-sharedJ K-sharedK ... +reconstructed
|
||||
</code></pre>
|
||||
|
||||
<h3>Try:</h3>
|
||||
|
||||
<pre><code>./grothe -grothe.c 1+grothe.c.1 2+grothe.c.2
|
||||
|
||||
./grothe -cookie_recipe.txt 1-/dev/urandom 2-/dev/urandom \
|
||||
1+cookie_piece1.dat 2+cookie_piece2.dat 3+cookie_piece3.dat 4+cookie_piece4.dat
|
||||
|
||||
./grothe 1-cookie_piece1.dat 2-cookie_piece2.dat 4-cookie_piece4.dat
|
||||
+cookie_recipe_restore.txt
|
||||
</code></pre>
|
||||
|
||||
<h3>Selected Judges Remarks:</h3>
|
||||
|
||||
<p>Also known as Best abuse of the judging process.</p>
|
||||
|
||||
<p>The IOCCC 2012 submission page didn’t enforce the 2048 meaningful
|
||||
character limit. This entry, as submitted, weighed in at 2222 chars
|
||||
but was, luckily for it, extremely easy to bring down below the
|
||||
limit. There were a number of strings that when concatenated allowed
|
||||
the program to slide under the limit.</p>
|
||||
|
||||
<p>It was clear to the judges that the extra size was an entry
|
||||
beautification step. Had it not, this entry would have been
|
||||
rejected in round 0.</p>
|
||||
|
||||
<p>The judges also took some liberty obfuscating this entry a litte more.</p>
|
||||
|
||||
<p>How does this entry work? The only place multiplication is used is
|
||||
to perform the atoi conversion.</p>
|
||||
|
||||
<h2>Author’s comments:</h2>
|
||||
|
||||
<p><strong>Description</strong></p>
|
||||
|
||||
<p>This program implements a version of Shamir’s Secret Sharing. Shamir’s Secret
|
||||
Sharing allows you to encrypt a file into N parts where it will take M parts to
|
||||
recreate the original file. E.g. you can split the secret recipe for Crystal Pepsi
|
||||
into 3 parts and require two of them be available to extract the original recipe.</p>
|
||||
|
||||
<p>Actually surprisingly useful for an IOCCC entry :-)</p>
|
||||
|
||||
<p><strong>Usage</strong></p>
|
||||
|
||||
<p>To share a secret</p>
|
||||
|
||||
<p>E.g.</p>
|
||||
|
||||
<p>file to be shared - cookie_recipe.txt
|
||||
number of pieces - 2 + file to be shared
|
||||
total number of pieces created by program 4
|
||||
pieces needed to reassemble recipe 3 or greater</p>
|
||||
|
||||
<p><strong>example usage</strong></p>
|
||||
|
||||
<p># to share secret into 4 pieces of which at least 3 will be needed to get back the recipe</p>
|
||||
|
||||
<pre><code>./grothe \
|
||||
-cookie_recipe.txt
|
||||
1-/dev/urandom 2-/dev/urandom
|
||||
1+cookie_piece1.dat 2+cookie_piece2.dat 3+cookie_piece3.dat 4+cookie_piece4.dat
|
||||
</code></pre>
|
||||
|
||||
<p># put recipe back together using 1, 2 and 4th piece</p>
|
||||
|
||||
<pre><code>./grothe \
|
||||
1-cookie_piece1.dat 2-cookie_piece2.dat 4-cookie_piece4.dat
|
||||
+cookie_recipe_restore.txt
|
||||
</code></pre>
|
||||
|
||||
<p><strong>Limitations</strong></p>
|
||||
|
||||
<ul>
|
||||
<li>program is limited to 256 input and output files and will slow down dramatically when you get past 20-50 inputs and outputs</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<p><strong>Obfuscations</strong></p>
|
||||
|
||||
<ul>
|
||||
<li>nothing is done consistently throughout the program E.g i+=1, i=i+1, i++ and ++i are all used in the program. The mark of true code buggery. - “A foolish consistency is the hobgoblin of little minds” - Ralph Waldo Emerson</li>
|
||||
<li>uses the most powerful obfuscation of all “Math”. “Any sufficiently advanced cryptography is indistinguasble from magic” - Apologies to Arthur C. Clarke</li>
|
||||
<li>shadows variables by using brackets in main program to create local copies of variables that are the same as global scope variables. -Wshadow should probably be a part of -Wall in gcc</li>
|
||||
<li>uses array_index[array_name] instead of array_name[array_index] in several places. Still don’t know why C continues to allow this
|
||||
( error strings are encoded with offsets that are also used to select them in the case statement. All strings are located in one function for easy localization</li>
|
||||
<li>liberal use of octal numbers, hexadecimal numbers and regular decimal numbers throughout program</li>
|
||||
<li>variables and function names are semi-random and upper and lower case characters are used</li>
|
||||
<li>use of #defines from stdio.h, stdlib.h for values _STDIO_H and EXIT_SUCCESS used to represent 1 and 0 respectively in the program</li>
|
||||
<li>arrays only need to be 256x256 most are set to greater values than they need to be so trying to figure it out can be a bit tough</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<p><strong>References</strong></p>
|
||||
|
||||
<ul>
|
||||
<li>Shamir’s Secret Sharing - <a href="http://en.wikipedia.org/wiki/Shamir%27s_Secret_Sharing">http://en.wikipedia.org/wiki/Shamir%27s_Secret_Sharing</a></li>
|
||||
<li>David Madore’s implementation of Shamir’s Secret Sharing - <a href="http://www.madore.org/~david/programs/programs-1.36.html">http://www.madore.org/~david/programs/programs-1.36.html</a></li>
|
||||
<li>Steve’s Recipe Database - source for the $25k Cookie Recipe - <a href="http://recipes.stevex.net/">http://recipes.stevex.net/</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
<hr />
|
||||
|
||||
<!--
|
||||
(c) Copyright 1984-2015, [Leo Broukhis, Simon Cooper, Landon Curt Noll][judges] - All rights reserved
|
||||
This work is licensed under a [Creative Commons Attribution-ShareAlike 3.0 Unported License][cc].
|
||||
|
||||
[judges]: http://www.ioccc.org/judges.html
|
||||
[cc]: http://creativecommons.org/licenses/by-sa/3.0/
|
||||
-->
|
||||
|
||||
<TABLE><TR>
|
||||
<TD><a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/"><img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-sa/3.0/88x31.png" /></a></TD>
|
||||
<TD><P>© Copyright 1984-2015,
|
||||
<A HREF="/judges.html">Leo Broukhis, Simon Cooper, Landon Curt Noll</A>
|
||||
- All rights reserved<BR>
|
||||
This work is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/">Creative Commons Attribution-ShareAlike 3.0 Unported License</a>.</P></TD>
|
||||
<TD> <!--<a href="http://validator.w3.org/check?uri=referer"><img src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01 Transitional" height="31" width="88"></a>--></TD>
|
||||
</TR></TABLE>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,123 @@
|
||||
# Most conspiratorial
|
||||
|
||||
Aaron Grothe
|
||||
2205 South 51st Street
|
||||
Omaha, NE 68106
|
||||
US
|
||||
<ajgrothe@yahoo.com>
|
||||
|
||||
David Madore
|
||||
<http://www.madore.org/~david/>
|
||||
|
||||
|
||||
## Judges' comments:
|
||||
### To build:
|
||||
|
||||
make grothe
|
||||
|
||||
### To run:
|
||||
|
||||
# To create a shared secret shared among M people with N+1 needed to reconstruct
|
||||
./grothe -secret 1-/dev/urandom 2-/dev/urandom ... N-/dev/urandom \
|
||||
1+shared1 2+shared2 ... M+sharedM
|
||||
|
||||
# To reconstruct the original (an arbitrary combination of N+1 or
|
||||
# more shared files with their proper numbers)
|
||||
./grothe I-sharedI J-sharedJ K-sharedK ... +reconstructed
|
||||
|
||||
### Try:
|
||||
|
||||
./grothe -grothe.c 1+grothe.c.1 2+grothe.c.2
|
||||
|
||||
./grothe -cookie_recipe.txt 1-/dev/urandom 2-/dev/urandom \
|
||||
1+cookie_piece1.dat 2+cookie_piece2.dat 3+cookie_piece3.dat 4+cookie_piece4.dat
|
||||
|
||||
./grothe 1-cookie_piece1.dat 2-cookie_piece2.dat 4-cookie_piece4.dat
|
||||
+cookie_recipe_restore.txt
|
||||
|
||||
### Selected Judges Remarks:
|
||||
|
||||
Also known as Best abuse of the judging process.
|
||||
|
||||
The IOCCC 2012 submission page didn't enforce the 2048 meaningful
|
||||
character limit. This entry, as submitted, weighed in at 2222 chars
|
||||
but was, luckily for it, extremely easy to bring down below the
|
||||
limit. There were a number of strings that when concatenated allowed
|
||||
the program to slide under the limit.
|
||||
|
||||
It was clear to the judges that the extra size was an entry
|
||||
beautification step. Had it not, this entry would have been
|
||||
rejected in round 0.
|
||||
|
||||
The judges also took some liberty obfuscating this entry a litte more.
|
||||
|
||||
How does this entry work? The only place multiplication is used is
|
||||
to perform the atoi conversion.
|
||||
|
||||
|
||||
## Author's comments:
|
||||
**Description**
|
||||
|
||||
This program implements a version of Shamir's Secret Sharing. Shamir's Secret
|
||||
Sharing allows you to encrypt a file into N parts where it will take M parts to
|
||||
recreate the original file. E.g. you can split the secret recipe for Crystal Pepsi
|
||||
into 3 parts and require two of them be available to extract the original recipe.
|
||||
|
||||
Actually surprisingly useful for an IOCCC entry :-)
|
||||
|
||||
**Usage**
|
||||
|
||||
To share a secret
|
||||
|
||||
E.g.
|
||||
|
||||
file to be shared - cookie\_recipe.txt
|
||||
number of pieces - 2 + file to be shared
|
||||
total number of pieces created by program 4
|
||||
pieces needed to reassemble recipe 3 or greater
|
||||
|
||||
**example usage**
|
||||
|
||||
\# to share secret into 4 pieces of which at least 3 will be needed to get back the recipe
|
||||
|
||||
./grothe \
|
||||
-cookie_recipe.txt
|
||||
1-/dev/urandom 2-/dev/urandom
|
||||
1+cookie_piece1.dat 2+cookie_piece2.dat 3+cookie_piece3.dat 4+cookie_piece4.dat
|
||||
|
||||
\# put recipe back together using 1, 2 and 4th piece
|
||||
|
||||
./grothe \
|
||||
1-cookie_piece1.dat 2-cookie_piece2.dat 4-cookie_piece4.dat
|
||||
+cookie_recipe_restore.txt
|
||||
|
||||
**Limitations**
|
||||
|
||||
* program is limited to 256 input and output files and will slow down dramatically when you get past 20-50 inputs and outputs
|
||||
|
||||
**Obfuscations**
|
||||
|
||||
* nothing is done consistently throughout the program E.g i+=1, i=i+1, i++ and ++i are all used in the program. The mark of true code buggery. - "A foolish consistency is the hobgoblin of little minds" - Ralph Waldo Emerson
|
||||
* uses the most powerful obfuscation of all "Math". "Any sufficiently advanced cryptography is indistinguasble from magic" - Apologies to Arthur C. Clarke
|
||||
* shadows variables by using brackets in main program to create local copies of variables that are the same as global scope variables. -Wshadow should probably be a part of -Wall in gcc
|
||||
* uses array\_index[array\_name] instead of array\_name[array\_index] in several places. Still don't know why C continues to allow this
|
||||
( error strings are encoded with offsets that are also used to select them in the case statement. All strings are located in one function for easy localization
|
||||
* liberal use of octal numbers, hexadecimal numbers and regular decimal numbers throughout program
|
||||
* variables and function names are semi-random and upper and lower case characters are used
|
||||
* use of #defines from stdio.h, stdlib.h for values \_STDIO\_H and EXIT\_SUCCESS used to represent 1 and 0 respectively in the program
|
||||
* arrays only need to be 256x256 most are set to greater values than they need to be so trying to figure it out can be a bit tough
|
||||
|
||||
**References**
|
||||
|
||||
* Shamir's Secret Sharing - <a href="http://en.wikipedia.org/wiki/Shamir%27s_Secret_Sharing">http://en.wikipedia.org/wiki/Shamir%27s_Secret_Sharing</a>
|
||||
* David Madore's implementation of Shamir's Secret Sharing - <a href="http://www.madore.org/~david/programs/programs-1.36.html">http://www.madore.org/~david/programs/programs-1.36.html</a>
|
||||
* Steve's Recipe Database - source for the $25k Cookie Recipe - <a href="http://recipes.stevex.net/">http://recipes.stevex.net/</a>
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
<!--
|
||||
(c) Copyright 1984-2015, [Leo Broukhis, Simon Cooper, Landon Curt Noll][judges] - All rights reserved
|
||||
This work is licensed under a [Creative Commons Attribution-ShareAlike 3.0 Unported License][cc].
|
||||
|
||||
[judges]: http://www.ioccc.org/judges.html
|
||||
[cc]: http://creativecommons.org/licenses/by-sa/3.0/
|
||||
-->
|
||||
Reference in new issue
Block a user