diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..6aa962a --- /dev/null +++ b/.dockerignore @@ -0,0 +1,47 @@ +# System Files +*.DS_Store +*Thumbs.db + +# Library +src/3rdparty/md5/ +src/3rdparty/d3des/ + +# Ignore build directories +/build/ +/bin/ +/obj/ +/linux86/ +/src/linux/runsrvfil/runsrvfil.cgi +/**/debug/ +/**/log/ +/**/normal/ +/**/profile/ + +# Ignore object files and binaries +*.o +*.out +*.a +*.so +*.exe +*.dll + +# Ignore compiled libraries +*.lib +*.la +*.lo + +# Ignore debug and profiling files +*.dSYM/ +*.gcda +*.gcno +*.gcov + +# Ignore editor/IDE files +*.swp +*.swo +*.vscode/ +*.idea/ + +linux86 +*.zip +*.tgz \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..498ea37 --- /dev/null +++ b/.gitignore @@ -0,0 +1,47 @@ +# System Files +*.DS_Store +*Thumbs.db + +# Library +src/3rdparty/md5/ +src/3rdparty/d3des/ + +# Ignore build directories +/build/ +/bin/ +/obj/ +/linux86/ +/src/linux/runsrvfil/runsrvfil.cgi +/**/debug/ +/**/log/ +/**/normal/ +/**/profile/ + +# Ignore object files and binaries +*.o +*.out +*.a +*.so +*.exe +*.dll + +# Ignore compiled libraries +*.lib +*.la +*.lo + +# Ignore debug and profiling files +*.dSYM/ +*.gcda +*.gcno +*.gcov + +# Ignore editor/IDE files +*.swp +*.swo +*.vscode/ +*.idea/ + +linux86 +*.zip +*.tgz \ No newline at end of file diff --git a/Makefile b/Makefile index 97fe9f9..a5e0fe5 100644 --- a/Makefile +++ b/Makefile @@ -7,6 +7,7 @@ all: clean: rm -f *.tgz *.zip + cd src/3rdparty; ./clean cd src/linux; ./clean bootstrap: diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..783ed62 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,16 @@ +services: + anet-server: + container_name: anet-server + platform: linux/amd64 + image: anet-server:latest + build: + context: . + dockerfile: docker/Dockerfile + #entrypoint: ["/home/anet/bin/server"] + #entrypoint: ["sh", "-c", "ls /home/alink/etc"] + #entrypoint: ["sh", "-c", "cd /home/alink/etc && ./servfil"] + #entrypoint: ["sh", "-c", "cd /home/alink/anetmon && ./getservers.sh"] + #entrypoint: ["/bin/sh", "-ec", "sleep infinity"] + ports: + - 8080:8080/tcp + - 21157:21157/udp \ No newline at end of file diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 0000000..bf27663 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,123 @@ +# Build stage +FROM debian:stable-slim AS build + +# Install necessary packages +RUN apt-get update && apt-get install -y \ + build-essential \ + gcc \ + make \ + zip \ + gzip \ + libbsd-dev \ + libc6-dev \ + && rm -rf /var/lib/apt/lists/* + + +# Select the architecture (assuming environment variables or ARG can determine this) +ARG ARCHITECTURE=x86_64 # Default to x86_64 if not specified + +# Automatically detect architecture +RUN ARCHITECTURE=$(uname -m) && \ + if [ "$ARCHITECTURE" = "aarch64" ]; then \ + ln -s /usr/lib/aarch64-linux-gnu/libm.a /usr/lib/libm.a && \ + ln -s /usr/lib/aarch64-linux-gnu/libbsd.a /usr/lib/libbsd.a; \ + elif [ "$ARCHITECTURE" = "x86_64" ]; then \ + ln -s /usr/lib/x86_64-linux-gnu/libm.a /usr/lib/libm.a && \ + ln -s /usr/lib/x86_64-linux-gnu/libbsd.a /usr/lib/libbsd.a; \ + else \ + echo "Unsupported architecture: $ARCHITECTURE"; exit 1; \ + fi + +# Copy from build stage using the variable +WORKDIR /build + +# Define build directory +ENV APP_DIR=/build/linux86 + +# Copy only necessary files first (to leverage caching) +COPY Makefile ./ +COPY src ./src +COPY demo ./demo +COPY h ./h + +# Compile (invalidates cache only when source files change) +RUN make + +# Runtime stage +FROM debian:stable-slim + +# Install cron and wget +RUN apt-get update && \ + apt-get install -y cron wget apache2 procps sudo supervisor && \ + rm -rf /var/lib/apt/lists/* + +# Set environment variable +ENV BUILD_DIR=/build/linux86 +ENV APP_DIR=/home/anet + +# Copy from build stage using the variable +COPY --from=build $BUILD_DIR $APP_DIR + +# Create non-root user +RUN useradd -m alink + +# Sudo +#RUN apt-get update && \ +# apt-get install -y csudo && \ +# rm -rf /var/lib/apt/lists/* +#RUN echo 'alink:darkreign' | chpasswd +#RUN usermod -aG sudo alink + +# Set proper permissions for the user +RUN chown -R alink:alink $APP_DIR + +RUN mv $APP_DIR/anetmon/ /home/alink/ +RUN mv $APP_DIR/server/etc /home/alink/ + +# Set proper permissions for cron +RUN chmod gu+rw /var/run +RUN chmod gu+s /usr/sbin/cron + +# Install crontab for the game server user +RUN crontab -u alink /home/alink/etc/crontab2.lst + +# Configure Apache Directory public_html +RUN mkdir -p /home/alink/public_html && \ + chown -R alink: /home/alink/public_html + +# Configure Apache user +RUN chown -R alink: /var/log/apache2/ && \ + sed -i 's/APACHE_RUN_USER=www-data/APACHE_RUN_USER=alink/' /etc/apache2/envvars && \ + sed -i 's/APACHE_RUN_GROUP=www-data/APACHE_RUN_GROUP=alink/' /etc/apache2/envvars + +COPY docker/apache2.conf /etc/apache2/conf-available/anet2.conf +RUN a2enconf anet2 && \ + a2enmod cgid && \ + sed -i 's/Listen 80/Listen 8080/g' /etc/apache2/ports.conf + +# Copy supervisor configuration file +COPY docker/supervisord.conf /etc/supervisor/conf.d/supervisord.conf +RUN chown -R alink /var/log/supervisor/ +RUN chown -R alink /run + +# Switch to non-root user +USER alink + +WORKDIR /home/alink + +# Ports > 21157 since we're not root. +EXPOSE 21157/udp +EXPOSE 8080/tcp + +HEALTHCHECK --interval=1m --start-period=30s --start-interval=5s --timeout=2s \ + CMD ps auxww | grep 'alink.*anet3' + +# Entrypoint +COPY docker/entrypoint.sh /opt/local/bin/entrypoint.sh +ENTRYPOINT ["/opt/local/bin/entrypoint.sh"] + +# Switch to non-root user +USER alink + +# Use supervisor as the main process +CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"] \ No newline at end of file diff --git a/docker/apache2.conf b/docker/apache2.conf new file mode 100644 index 0000000..9200755 --- /dev/null +++ b/docker/apache2.conf @@ -0,0 +1,10 @@ +ServerName 0.0.0.0 +Alias /anet2 /home/alink/public_html/ + + Options FollowSymLinks ExecCGI Indexes + AllowOverride None + Require all granted + + SetHandler cgi-script + + \ No newline at end of file diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh new file mode 100755 index 0000000..6de77f9 --- /dev/null +++ b/docker/entrypoint.sh @@ -0,0 +1,37 @@ +#!/bin/bash -e + +# Create local-servers.txt and populate it with an IP and hostname +echo "- Create local-servers.txt..." +HOSTNAME="${HOSTNAME:=localhost}" +export EXTERNAL_IP_EXEC_SET=`wget -qO- https://checkip.amazonaws.com` +echo "${EXTERNAL_IP_EXEC_SET} $HOSTNAME" > /home/alink/etc/local-servers.txt +cat /home/alink/etc/local-servers.txt + +touch /tmp/anet3srv.log +touch /tmp/anet2cron.log + +echo "- Execute servfil..." +cd ~/etc +./servfil + +# Deploy public_html/etc +echo "- Deploy public_html/etc" +cd ~/public_html +mkdir -p etc +cd etc +ln -s ~alink/etc/apps.txt apps.txt +ln -s ~alink/etc/names.txt names.txt +ln -s ~alink/etc/servers.txt servers.txt +ln -s ~alink/etc/types.txt types.txt + +# Deploy runsrvfil.cgi +echo "- Deploy runsrvfil.cgi..." +cd ~/public_html/etc +cp ../../etc/runsrvfil.cgi . +chmod ug+sx runsrvfil.cgi + +echo "- Start game server daemon..." +~alink/etc/start2 + +echo executing: "$@" +exec "$@" \ No newline at end of file diff --git a/docker/supervisord.conf b/docker/supervisord.conf new file mode 100644 index 0000000..d8da7c8 --- /dev/null +++ b/docker/supervisord.conf @@ -0,0 +1,53 @@ +[supervisord] +nodaemon=true +user=alink +logfile=/var/log/supervisor/supervisord.log +pidfile=/var/run/supervisord.pid + +[program:anet3srv-log] +command=tail -F /tmp/anet3srv.log +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +redirect_stderr=true +user=alink +priority=10 + +[program:anet2cron-log] +command=tail -F /tmp/anet2cron.log +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +redirect_stderr=true +user=alink +priority=10 + +[program:apache2] +command=/usr/sbin/apache2ctl -DFOREGROUND +autostart=true +autorestart=true +user=alink +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 +priority=20 + +[program:cron] +command=/usr/sbin/cron -f +autostart=true +autorestart=true +user=alink +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 +priority=30 + +[unix_http_server] +file=/var/run/supervisor.sock +chmod=0700 + +[rpcinterface:supervisor] +supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface + +[supervisorctl] +serverurl=unix:///var/run/supervisor.sock \ No newline at end of file diff --git a/src/3rdparty/clean b/src/3rdparty/clean new file mode 100755 index 0000000..96839a8 --- /dev/null +++ b/src/3rdparty/clean @@ -0,0 +1,2 @@ +rm -fr ./d3des +rm -fr ./md5 \ No newline at end of file diff --git a/src/3rdparty/d3des/d3des.c b/src/3rdparty/d3des/d3des.c deleted file mode 100644 index cf3d27d..0000000 --- a/src/3rdparty/d3des/d3des.c +++ /dev/null @@ -1,684 +0,0 @@ -/* D3DES (V5.09) - - * - * A portable, public domain, version of the Data Encryption Standard. - * - * Written with Symantec's THINK (Lightspeed) C by Richard Outerbridge. - * Thanks to: Dan Hoey for his excellent Initial and Inverse permutation - * code; Jim Gillogly & Phil Karn for the DES key schedule code; Dennis - * Ferguson, Eric Young and Dana How for comparing notes; and Ray Lau, - * for humouring me on. - * - * Copyright (c) 1988,1989,1990,1991,1992 by Richard Outerbridge. - * (GEnie : OUTER; CIS : [71755,204]) Graven Imagery, 1992. - */ - -#include "d3des.h" - -static void scrunch(const unsigned char *, unsigned long *); -static void unscrun(unsigned long *, unsigned char *); -static void desfunc(unsigned long *, unsigned long *); -static void cookey(unsigned long *); - -static unsigned long KnL[32] = { 0L }; -static unsigned long KnR[32] = { 0L }; -static unsigned long Kn3[32] = { 0L }; -static unsigned char Df_Key[24] = { - 0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef, - 0xfe,0xdc,0xba,0x98,0x76,0x54,0x32,0x10, - 0x89,0xab,0xcd,0xef,0x01,0x23,0x45,0x67 }; - -static unsigned short bytebit[8] = { - 0200, 0100, 040, 020, 010, 04, 02, 01 }; - -static unsigned long bigbyte[24] = { - 0x800000L, 0x400000L, 0x200000L, 0x100000L, - 0x80000L, 0x40000L, 0x20000L, 0x10000L, - 0x8000L, 0x4000L, 0x2000L, 0x1000L, - 0x800L, 0x400L, 0x200L, 0x100L, - 0x80L, 0x40L, 0x20L, 0x10L, - 0x8L, 0x4L, 0x2L, 0x1L }; - -/* Use the key schedule specified in the Standard (ANSI X3.92-1981). */ - -static unsigned char pc1[56] = { - 56, 48, 40, 32, 24, 16, 8, 0, 57, 49, 41, 33, 25, 17, - 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, - 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, - 13, 5, 60, 52, 44, 36, 28, 20, 12, 4, 27, 19, 11, 3 }; - -static unsigned char totrot[16] = { - 1,2,4,6,8,10,12,14,15,17,19,21,23,25,27,28 }; - -static unsigned char pc2[48] = { - 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 }; - -void deskey(key, edf) /* Thanks to James Gillogly & Phil Karn! */ -const unsigned char *key; -short edf; -{ - register int i, j, l, m, n; - unsigned char pc1m[56], pcr[56]; - unsigned long kn[32]; - - for ( j = 0; j < 56; j++ ) { - l = pc1[j]; - m = l & 07; - pc1m[j] = (key[l >> 3] & bytebit[m]) ? 1 : 0; - } - for( i = 0; i < 16; i++ ) { - if( edf == DE1 ) m = (15 - i) << 1; - else m = i << 1; - n = m + 1; - kn[m] = kn[n] = 0L; - for( j = 0; j < 28; j++ ) { - l = j + totrot[i]; - if( l < 28 ) pcr[j] = pc1m[l]; - else pcr[j] = pc1m[l - 28]; - } - for( j = 28; j < 56; j++ ) { - l = j + totrot[i]; - if( l < 56 ) pcr[j] = pc1m[l]; - else pcr[j] = pc1m[l - 28]; - } - for( j = 0; j < 24; j++ ) { - if( pcr[pc2[j]] ) kn[m] |= bigbyte[j]; - if( pcr[pc2[j+24]] ) kn[n] |= bigbyte[j]; - } - } - cookey(kn); - return; - } - -static void cookey(raw1) -register unsigned long *raw1; -{ - register unsigned long *cook, *raw0; - unsigned long dough[32]; - register int i; - - cook = dough; - for( i = 0; i < 16; i++, raw1++ ) { - raw0 = raw1++; - *cook = (*raw0 & 0x00fc0000L) << 6; - *cook |= (*raw0 & 0x00000fc0L) << 10; - *cook |= (*raw1 & 0x00fc0000L) >> 10; - *cook++ |= (*raw1 & 0x00000fc0L) >> 6; - *cook = (*raw0 & 0x0003f000L) << 12; - *cook |= (*raw0 & 0x0000003fL) << 16; - *cook |= (*raw1 & 0x0003f000L) >> 4; - *cook++ |= (*raw1 & 0x0000003fL); - } - usekey(dough); - return; - } - -void cpkey(into) -register unsigned long *into; -{ - register unsigned long *from, *endp; - - from = KnL, endp = &KnL[32]; - while( from < endp ) *into++ = *from++; - return; - } - -void usekey(from) -register unsigned long *from; -{ - register unsigned long *to, *endp; - - to = KnL, endp = &KnL[32]; - while( to < endp ) *to++ = *from++; - return; - } - -void des(inblock, outblock) -unsigned char *inblock, *outblock; -{ - unsigned long work[2]; - - scrunch(inblock, work); - desfunc(work, KnL); - unscrun(work, outblock); - return; - } - -static void scrunch(outof, into) -register const unsigned char *outof; -register unsigned long *into; -{ - *into = (*outof++ & 0xffL) << 24; - *into |= (*outof++ & 0xffL) << 16; - *into |= (*outof++ & 0xffL) << 8; - *into++ |= (*outof++ & 0xffL); - *into = (*outof++ & 0xffL) << 24; - *into |= (*outof++ & 0xffL) << 16; - *into |= (*outof++ & 0xffL) << 8; - *into |= (*outof & 0xffL); - return; - } - -static void unscrun(outof, into) -register unsigned long *outof; -register unsigned char *into; -{ - *into++ = (*outof >> 24) & 0xffL; - *into++ = (*outof >> 16) & 0xffL; - *into++ = (*outof >> 8) & 0xffL; - *into++ = *outof++ & 0xffL; - *into++ = (*outof >> 24) & 0xffL; - *into++ = (*outof >> 16) & 0xffL; - *into++ = (*outof >> 8) & 0xffL; - *into = *outof & 0xffL; - return; - } - -static unsigned long SP1[64] = { - 0x01010400L, 0x00000000L, 0x00010000L, 0x01010404L, - 0x01010004L, 0x00010404L, 0x00000004L, 0x00010000L, - 0x00000400L, 0x01010400L, 0x01010404L, 0x00000400L, - 0x01000404L, 0x01010004L, 0x01000000L, 0x00000004L, - 0x00000404L, 0x01000400L, 0x01000400L, 0x00010400L, - 0x00010400L, 0x01010000L, 0x01010000L, 0x01000404L, - 0x00010004L, 0x01000004L, 0x01000004L, 0x00010004L, - 0x00000000L, 0x00000404L, 0x00010404L, 0x01000000L, - 0x00010000L, 0x01010404L, 0x00000004L, 0x01010000L, - 0x01010400L, 0x01000000L, 0x01000000L, 0x00000400L, - 0x01010004L, 0x00010000L, 0x00010400L, 0x01000004L, - 0x00000400L, 0x00000004L, 0x01000404L, 0x00010404L, - 0x01010404L, 0x00010004L, 0x01010000L, 0x01000404L, - 0x01000004L, 0x00000404L, 0x00010404L, 0x01010400L, - 0x00000404L, 0x01000400L, 0x01000400L, 0x00000000L, - 0x00010004L, 0x00010400L, 0x00000000L, 0x01010004L }; - -static unsigned long SP2[64] = { - 0x80108020L, 0x80008000L, 0x00008000L, 0x00108020L, - 0x00100000L, 0x00000020L, 0x80100020L, 0x80008020L, - 0x80000020L, 0x80108020L, 0x80108000L, 0x80000000L, - 0x80008000L, 0x00100000L, 0x00000020L, 0x80100020L, - 0x00108000L, 0x00100020L, 0x80008020L, 0x00000000L, - 0x80000000L, 0x00008000L, 0x00108020L, 0x80100000L, - 0x00100020L, 0x80000020L, 0x00000000L, 0x00108000L, - 0x00008020L, 0x80108000L, 0x80100000L, 0x00008020L, - 0x00000000L, 0x00108020L, 0x80100020L, 0x00100000L, - 0x80008020L, 0x80100000L, 0x80108000L, 0x00008000L, - 0x80100000L, 0x80008000L, 0x00000020L, 0x80108020L, - 0x00108020L, 0x00000020L, 0x00008000L, 0x80000000L, - 0x00008020L, 0x80108000L, 0x00100000L, 0x80000020L, - 0x00100020L, 0x80008020L, 0x80000020L, 0x00100020L, - 0x00108000L, 0x00000000L, 0x80008000L, 0x00008020L, - 0x80000000L, 0x80100020L, 0x80108020L, 0x00108000L }; - -static unsigned long SP3[64] = { - 0x00000208L, 0x08020200L, 0x00000000L, 0x08020008L, - 0x08000200L, 0x00000000L, 0x00020208L, 0x08000200L, - 0x00020008L, 0x08000008L, 0x08000008L, 0x00020000L, - 0x08020208L, 0x00020008L, 0x08020000L, 0x00000208L, - 0x08000000L, 0x00000008L, 0x08020200L, 0x00000200L, - 0x00020200L, 0x08020000L, 0x08020008L, 0x00020208L, - 0x08000208L, 0x00020200L, 0x00020000L, 0x08000208L, - 0x00000008L, 0x08020208L, 0x00000200L, 0x08000000L, - 0x08020200L, 0x08000000L, 0x00020008L, 0x00000208L, - 0x00020000L, 0x08020200L, 0x08000200L, 0x00000000L, - 0x00000200L, 0x00020008L, 0x08020208L, 0x08000200L, - 0x08000008L, 0x00000200L, 0x00000000L, 0x08020008L, - 0x08000208L, 0x00020000L, 0x08000000L, 0x08020208L, - 0x00000008L, 0x00020208L, 0x00020200L, 0x08000008L, - 0x08020000L, 0x08000208L, 0x00000208L, 0x08020000L, - 0x00020208L, 0x00000008L, 0x08020008L, 0x00020200L }; - -static unsigned long SP4[64] = { - 0x00802001L, 0x00002081L, 0x00002081L, 0x00000080L, - 0x00802080L, 0x00800081L, 0x00800001L, 0x00002001L, - 0x00000000L, 0x00802000L, 0x00802000L, 0x00802081L, - 0x00000081L, 0x00000000L, 0x00800080L, 0x00800001L, - 0x00000001L, 0x00002000L, 0x00800000L, 0x00802001L, - 0x00000080L, 0x00800000L, 0x00002001L, 0x00002080L, - 0x00800081L, 0x00000001L, 0x00002080L, 0x00800080L, - 0x00002000L, 0x00802080L, 0x00802081L, 0x00000081L, - 0x00800080L, 0x00800001L, 0x00802000L, 0x00802081L, - 0x00000081L, 0x00000000L, 0x00000000L, 0x00802000L, - 0x00002080L, 0x00800080L, 0x00800081L, 0x00000001L, - 0x00802001L, 0x00002081L, 0x00002081L, 0x00000080L, - 0x00802081L, 0x00000081L, 0x00000001L, 0x00002000L, - 0x00800001L, 0x00002001L, 0x00802080L, 0x00800081L, - 0x00002001L, 0x00002080L, 0x00800000L, 0x00802001L, - 0x00000080L, 0x00800000L, 0x00002000L, 0x00802080L }; - -static unsigned long SP5[64] = { - 0x00000100L, 0x02080100L, 0x02080000L, 0x42000100L, - 0x00080000L, 0x00000100L, 0x40000000L, 0x02080000L, - 0x40080100L, 0x00080000L, 0x02000100L, 0x40080100L, - 0x42000100L, 0x42080000L, 0x00080100L, 0x40000000L, - 0x02000000L, 0x40080000L, 0x40080000L, 0x00000000L, - 0x40000100L, 0x42080100L, 0x42080100L, 0x02000100L, - 0x42080000L, 0x40000100L, 0x00000000L, 0x42000000L, - 0x02080100L, 0x02000000L, 0x42000000L, 0x00080100L, - 0x00080000L, 0x42000100L, 0x00000100L, 0x02000000L, - 0x40000000L, 0x02080000L, 0x42000100L, 0x40080100L, - 0x02000100L, 0x40000000L, 0x42080000L, 0x02080100L, - 0x40080100L, 0x00000100L, 0x02000000L, 0x42080000L, - 0x42080100L, 0x00080100L, 0x42000000L, 0x42080100L, - 0x02080000L, 0x00000000L, 0x40080000L, 0x42000000L, - 0x00080100L, 0x02000100L, 0x40000100L, 0x00080000L, - 0x00000000L, 0x40080000L, 0x02080100L, 0x40000100L }; - -static unsigned long SP6[64] = { - 0x20000010L, 0x20400000L, 0x00004000L, 0x20404010L, - 0x20400000L, 0x00000010L, 0x20404010L, 0x00400000L, - 0x20004000L, 0x00404010L, 0x00400000L, 0x20000010L, - 0x00400010L, 0x20004000L, 0x20000000L, 0x00004010L, - 0x00000000L, 0x00400010L, 0x20004010L, 0x00004000L, - 0x00404000L, 0x20004010L, 0x00000010L, 0x20400010L, - 0x20400010L, 0x00000000L, 0x00404010L, 0x20404000L, - 0x00004010L, 0x00404000L, 0x20404000L, 0x20000000L, - 0x20004000L, 0x00000010L, 0x20400010L, 0x00404000L, - 0x20404010L, 0x00400000L, 0x00004010L, 0x20000010L, - 0x00400000L, 0x20004000L, 0x20000000L, 0x00004010L, - 0x20000010L, 0x20404010L, 0x00404000L, 0x20400000L, - 0x00404010L, 0x20404000L, 0x00000000L, 0x20400010L, - 0x00000010L, 0x00004000L, 0x20400000L, 0x00404010L, - 0x00004000L, 0x00400010L, 0x20004010L, 0x00000000L, - 0x20404000L, 0x20000000L, 0x00400010L, 0x20004010L }; - -static unsigned long SP7[64] = { - 0x00200000L, 0x04200002L, 0x04000802L, 0x00000000L, - 0x00000800L, 0x04000802L, 0x00200802L, 0x04200800L, - 0x04200802L, 0x00200000L, 0x00000000L, 0x04000002L, - 0x00000002L, 0x04000000L, 0x04200002L, 0x00000802L, - 0x04000800L, 0x00200802L, 0x00200002L, 0x04000800L, - 0x04000002L, 0x04200000L, 0x04200800L, 0x00200002L, - 0x04200000L, 0x00000800L, 0x00000802L, 0x04200802L, - 0x00200800L, 0x00000002L, 0x04000000L, 0x00200800L, - 0x04000000L, 0x00200800L, 0x00200000L, 0x04000802L, - 0x04000802L, 0x04200002L, 0x04200002L, 0x00000002L, - 0x00200002L, 0x04000000L, 0x04000800L, 0x00200000L, - 0x04200800L, 0x00000802L, 0x00200802L, 0x04200800L, - 0x00000802L, 0x04000002L, 0x04200802L, 0x04200000L, - 0x00200800L, 0x00000000L, 0x00000002L, 0x04200802L, - 0x00000000L, 0x00200802L, 0x04200000L, 0x00000800L, - 0x04000002L, 0x04000800L, 0x00000800L, 0x00200002L }; - -static unsigned long SP8[64] = { - 0x10001040L, 0x00001000L, 0x00040000L, 0x10041040L, - 0x10000000L, 0x10001040L, 0x00000040L, 0x10000000L, - 0x00040040L, 0x10040000L, 0x10041040L, 0x00041000L, - 0x10041000L, 0x00041040L, 0x00001000L, 0x00000040L, - 0x10040000L, 0x10000040L, 0x10001000L, 0x00001040L, - 0x00041000L, 0x00040040L, 0x10040040L, 0x10041000L, - 0x00001040L, 0x00000000L, 0x00000000L, 0x10040040L, - 0x10000040L, 0x10001000L, 0x00041040L, 0x00040000L, - 0x00041040L, 0x00040000L, 0x10041000L, 0x00001000L, - 0x00000040L, 0x10040040L, 0x00001000L, 0x00041040L, - 0x10001000L, 0x00000040L, 0x10000040L, 0x10040000L, - 0x10040040L, 0x10000000L, 0x00040000L, 0x10001040L, - 0x00000000L, 0x10041040L, 0x00040040L, 0x10000040L, - 0x10040000L, 0x10001000L, 0x10001040L, 0x00000000L, - 0x10041040L, 0x00041000L, 0x00041000L, 0x00001040L, - 0x00001040L, 0x00040040L, 0x10000000L, 0x10041000L }; - -static void desfunc(block, keys) -register unsigned long *block, *keys; -{ - register unsigned long fval, work, right, leftt; - register int round; - - leftt = block[0]; - right = block[1]; - work = ((leftt >> 4) ^ right) & 0x0f0f0f0fL; - right ^= work; - leftt ^= (work << 4); - work = ((leftt >> 16) ^ right) & 0x0000ffffL; - right ^= work; - leftt ^= (work << 16); - work = ((right >> 2) ^ leftt) & 0x33333333L; - leftt ^= work; - right ^= (work << 2); - work = ((right >> 8) ^ leftt) & 0x00ff00ffL; - leftt ^= work; - right ^= (work << 8); - right = ((right << 1) | ((right >> 31) & 1L)) & 0xffffffffL; - work = (leftt ^ right) & 0xaaaaaaaaL; - leftt ^= work; - right ^= work; - leftt = ((leftt << 1) | ((leftt >> 31) & 1L)) & 0xffffffffL; - - for( round = 0; round < 8; round++ ) { - work = (right << 28) | (right >> 4); - work ^= *keys++; - fval = SP7[ work & 0x3fL]; - fval |= SP5[(work >> 8) & 0x3fL]; - fval |= SP3[(work >> 16) & 0x3fL]; - fval |= SP1[(work >> 24) & 0x3fL]; - work = right ^ *keys++; - fval |= SP8[ work & 0x3fL]; - fval |= SP6[(work >> 8) & 0x3fL]; - fval |= SP4[(work >> 16) & 0x3fL]; - fval |= SP2[(work >> 24) & 0x3fL]; - leftt ^= fval; - work = (leftt << 28) | (leftt >> 4); - work ^= *keys++; - fval = SP7[ work & 0x3fL]; - fval |= SP5[(work >> 8) & 0x3fL]; - fval |= SP3[(work >> 16) & 0x3fL]; - fval |= SP1[(work >> 24) & 0x3fL]; - work = leftt ^ *keys++; - fval |= SP8[ work & 0x3fL]; - fval |= SP6[(work >> 8) & 0x3fL]; - fval |= SP4[(work >> 16) & 0x3fL]; - fval |= SP2[(work >> 24) & 0x3fL]; - right ^= fval; - } - - right = (right << 31) | (right >> 1); - work = (leftt ^ right) & 0xaaaaaaaaL; - leftt ^= work; - right ^= work; - leftt = (leftt << 31) | (leftt >> 1); - work = ((leftt >> 8) ^ right) & 0x00ff00ffL; - right ^= work; - leftt ^= (work << 8); - work = ((leftt >> 2) ^ right) & 0x33333333L; - right ^= work; - leftt ^= (work << 2); - work = ((right >> 16) ^ leftt) & 0x0000ffffL; - leftt ^= work; - right ^= (work << 16); - work = ((right >> 4) ^ leftt) & 0x0f0f0f0fL; - leftt ^= work; - right ^= (work << 4); - *block++ = right; - *block = leftt; - return; - } - -#ifdef D2_DES - -void des2key(hexkey, mode) /* stomps on Kn3 too */ -const unsigned char *hexkey; /* unsigned char[16] */ -short mode; -{ - short revmod; - - revmod = (mode == EN0) ? DE1 : EN0; - deskey(&hexkey[8], revmod); - cpkey(KnR); - deskey(hexkey, mode); - cpkey(Kn3); /* Kn3 = KnL */ - return; - } - -void Ddes(from, into) -const unsigned char *from; /* unsigned char[8] */ -unsigned char *into; /* unsigned char[8] */ -{ - unsigned long work[2]; - - scrunch(from, work); - desfunc(work, KnL); - desfunc(work, KnR); - desfunc(work, Kn3); - unscrun(work, into); - return; - } - -void D2des(from, into) -const unsigned char *from; /* unsigned char[16] */ -unsigned char *into; /* unsigned char[16] */ -{ - unsigned long *right, *l1, swap; - unsigned long leftt[2], bufR[2]; - - right = bufR; - l1 = &leftt[1]; - scrunch(from, leftt); - scrunch(&from[8], right); - desfunc(leftt, KnL); - desfunc(right, KnL); - swap = *l1; - *l1 = *right; - *right = swap; - desfunc(leftt, KnR); - desfunc(right, KnR); - swap = *l1; - *l1 = *right; - *right = swap; - desfunc(leftt, Kn3); - desfunc(right, Kn3); - unscrun(leftt, into); - unscrun(right, &into[8]); - return; - } - -void makekey(aptr, kptr) -register char *aptr; /* NULL-terminated */ -register unsigned char *kptr; /* unsigned char[8] */ -{ - register unsigned char *store; - register int first, i; - unsigned long savek[96]; - - cpDkey(savek); - des2key(Df_Key, EN0); - for( i = 0; i < 8; i++ ) kptr[i] = Df_Key[i]; - first = 1; - while( (*aptr != '\0') || first ) { - store = kptr; - for( i = 0; i < 8 && (*aptr != '\0'); i++ ) { - *store++ ^= *aptr & 0x7f; - *aptr++ = '\0'; - } - Ddes(kptr, kptr); - first = 0; - } - useDkey(savek); - return; - } - -void make2key(aptr, kptr) -register char *aptr; /* NULL-terminated */ -register unsigned char *kptr; /* unsigned char[16] */ -{ - register unsigned char *store; - register int first, i; - unsigned long savek[96]; - - cpDkey(savek); - des2key(Df_Key, EN0); - for( i = 0; i < 16; i++ ) kptr[i] = Df_Key[i]; - first = 1; - while( (*aptr != '\0') || first ) { - store = kptr; - for( i = 0; i < 16 && (*aptr != '\0'); i++ ) { - *store++ ^= *aptr & 0x7f; - *aptr++ = '\0'; - } - D2des(kptr, kptr); - first = 0; - } - useDkey(savek); - return; - } - -#ifndef D3_DES /* D2_DES only */ -#ifdef D2_DES /* iff D2_DES! */ - -void cp2key(into) -register unsigned long *into; /* unsigned long[64] */ -{ - register unsigned long *from, *endp; - - cpkey(into); - into = &into[32]; - from = KnR, endp = &KnR[32]; - while( from < endp ) *into++ = *from++; - return; - } - -void use2key(from) /* stomps on Kn3 too */ -register unsigned long *from; /* unsigned long[64] */ -{ - register unsigned long *to, *endp; - - usekey(from); - from = &from[32]; - to = KnR, endp = &KnR[32]; - while( to < endp ) *to++ = *from++; - cpkey(Kn3); /* Kn3 = KnL */ - return; - } - -#endif /* iff D2_DES */ -#else /* D3_DES too */ - -static void D3des(unsigned char *, unsigned char *); - -void des3key(hexkey, mode) -unsigned char *hexkey; /* unsigned char[24] */ -short mode; -{ - unsigned char *first, *third; - short revmod; - - if( mode == EN0 ) { - revmod = DE1; - first = hexkey; - third = &hexkey[16]; - } - else { - revmod = EN0; - first = &hexkey[16]; - third = hexkey; - } - deskey(&hexkey[8], revmod); - cpkey(KnR); - deskey(third, mode); - cpkey(Kn3); - deskey(first, mode); - return; - } - -void cp3key(into) -register unsigned long *into; /* unsigned long[96] */ -{ - register unsigned long *from, *endp; - - cpkey(into); - into = &into[32]; - from = KnR, endp = &KnR[32]; - while( from < endp ) *into++ = *from++; - from = Kn3, endp = &Kn3[32]; - while( from < endp ) *into++ = *from++; - return; - } - -void use3key(from) -register unsigned long *from; /* unsigned long[96] */ -{ - register unsigned long *to, *endp; - - usekey(from); - from = &from[32]; - to = KnR, endp = &KnR[32]; - while( to < endp ) *to++ = *from++; - to = Kn3, endp = &Kn3[32]; - while( to < endp ) *to++ = *from++; - return; - } - -static void D3des(from, into) /* amateur theatrics */ -unsigned char *from; /* unsigned char[24] */ -unsigned char *into; /* unsigned char[24] */ -{ - unsigned long swap, leftt[2], middl[2], right[2]; - - scrunch(from, leftt); - scrunch(&from[8], middl); - scrunch(&from[16], right); - desfunc(leftt, KnL); - desfunc(middl, KnL); - desfunc(right, KnL); - swap = leftt[1]; - leftt[1] = middl[0]; - middl[0] = swap; - swap = middl[1]; - middl[1] = right[0]; - right[0] = swap; - desfunc(leftt, KnR); - desfunc(middl, KnR); - desfunc(right, KnR); - swap = leftt[1]; - leftt[1] = middl[0]; - middl[0] = swap; - swap = middl[1]; - middl[1] = right[0]; - right[0] = swap; - desfunc(leftt, Kn3); - desfunc(middl, Kn3); - desfunc(right, Kn3); - unscrun(leftt, into); - unscrun(middl, &into[8]); - unscrun(right, &into[16]); - return; - } - -void make3key(aptr, kptr) -register char *aptr; /* NULL-terminated */ -register unsigned char *kptr; /* unsigned char[24] */ -{ - register unsigned char *store; - register int first, i; - unsigned long savek[96]; - - cp3key(savek); - des3key(Df_Key, EN0); - for( i = 0; i < 24; i++ ) kptr[i] = Df_Key[i]; - first = 1; - while( (*aptr != '\0') || first ) { - store = kptr; - for( i = 0; i < 24 && (*aptr != '\0'); i++ ) { - *store++ ^= *aptr & 0x7f; - *aptr++ = '\0'; - } - D3des(kptr, kptr); - first = 0; - } - use3key(savek); - return; - } - -#endif /* D3_DES */ -#endif /* D2_DES */ - -/* Validation sets: - * - * Single-length key, single-length plaintext - - * Key : 0123 4567 89ab cdef - * Plain : 0123 4567 89ab cde7 - * Cipher : c957 4425 6a5e d31d - * - * Double-length key, single-length plaintext - - * Key : 0123 4567 89ab cdef fedc ba98 7654 3210 - * Plain : 0123 4567 89ab cde7 - * Cipher : 7f1d 0a77 826b 8aff - * - * Double-length key, double-length plaintext - - * Key : 0123 4567 89ab cdef fedc ba98 7654 3210 - * Plain : 0123 4567 89ab cdef 0123 4567 89ab cdff - * Cipher : 27a0 8440 406a df60 278f 47cf 42d6 15d7 - * - * Triple-length key, single-length plaintext - - * Key : 0123 4567 89ab cdef fedc ba98 7654 3210 89ab cdef 0123 4567 - * Plain : 0123 4567 89ab cde7 - * Cipher : de0b 7c06 ae5e 0ed5 - * - * Triple-length key, double-length plaintext - - * Key : 0123 4567 89ab cdef fedc ba98 7654 3210 89ab cdef 0123 4567 - * Plain : 0123 4567 89ab cdef 0123 4567 89ab cdff - * Cipher : ad0d 1b30 ac17 cf07 0ed1 1c63 81e4 4de5 - * - * d3des V5.0a rwo 9208.07 18:44 Graven Imagery - **********************************************************************/ diff --git a/src/3rdparty/d3des/d3des.h b/src/3rdparty/d3des/d3des.h deleted file mode 100644 index f998602..0000000 --- a/src/3rdparty/d3des/d3des.h +++ /dev/null @@ -1,146 +0,0 @@ -/* d3des.h - - * - * Headers and defines for d3des.c - * Graven Imagery, 1992. - * - * Copyright (c) 1988,1989,1990,1991,1992 by Richard Outerbridge - * (GEnie : OUTER; CIS : [71755,204]) - */ - -#define D2_DES /* include double-length support */ -#define D3_DES /* include triple-length support */ - -#ifdef D3_DES -#ifndef D2_DES -#define D2_DES /* D2_DES is needed for D3_DES */ -#endif -#endif - -#define EN0 0 /* MODE == encrypt */ -#define DE1 1 /* MODE == decrypt */ - -/* A useful alias on 68000-ish machines, but NOT USED HERE. */ - -typedef union { - unsigned long blok[2]; - unsigned short word[4]; - unsigned char byte[8]; - } M68K; - -extern void deskey(const unsigned char *, short); -/* hexkey[8] MODE - * Sets the internal key register according to the hexadecimal - * key contained in the 8 bytes of hexkey, according to the DES, - * for encryption or decryption according to MODE. - */ - -extern void usekey(unsigned long *); -/* cookedkey[32] - * Loads the internal key register with the data in cookedkey. - */ - -extern void cpkey(unsigned long *); -/* cookedkey[32] - * Copies the contents of the internal key register into the storage - * located at &cookedkey[0]. - */ - -extern void des(unsigned char *, unsigned char *); -/* from[8] to[8] - * Encrypts/Decrypts (according to the key currently loaded in the - * internal key register) one block of eight bytes at address 'from' - * into the block at address 'to'. They can be the same. - */ - -#ifdef D2_DES - -#define desDkey(a,b) des2key((a),(b)) -extern void des2key(const unsigned char *, short); -/* hexkey[16] MODE - * Sets the internal key registerS according to the hexadecimal - * keyS contained in the 16 bytes of hexkey, according to the DES, - * for DOUBLE encryption or decryption according to MODE. - * NOTE: this clobbers all three key registers! - */ - -extern void Ddes(const unsigned char *, unsigned char *); -/* from[8] to[8] - * Encrypts/Decrypts (according to the keyS currently loaded in the - * internal key registerS) one block of eight bytes at address 'from' - * into the block at address 'to'. They can be the same. - */ - -extern void D2des(const unsigned char *, unsigned char *); -/* from[16] to[16] - * Encrypts/Decrypts (according to the keyS currently loaded in the - * internal key registerS) one block of SIXTEEN bytes at address 'from' - * into the block at address 'to'. They can be the same. - */ - -extern void makekey(char *, unsigned char *); -/* *password, single-length key[8] - * With a double-length default key, this routine hashes a NULL-terminated - * string into an eight-byte random-looking key, suitable for use with the - * deskey() routine. - */ - -#define makeDkey(a,b) make2key((a),(b)) -extern void make2key(char *, unsigned char *); -/* *password, double-length key[16] - * With a double-length default key, this routine hashes a NULL-terminated - * string into a sixteen-byte random-looking key, suitable for use with the - * des2key() routine. - */ - -#ifndef D3_DES /* D2_DES only */ - -#define useDkey(a) use2key((a)) -#define cpDkey(a) cp2key((a)) - -extern void use2key(unsigned long *); -/* cookedkey[64] - * Loads the internal key registerS with the data in cookedkey. - * NOTE: this clobbers all three key registers! - */ - -extern void cp2key(unsigned long *); -/* cookedkey[64] - * Copies the contents of the internal key registerS into the storage - * located at &cookedkey[0]. - */ - -#else /* D3_DES too */ - -#define useDkey(a) use3key((a)) -#define cpDkey(a) cp3key((a)) - -extern void des3key(unsigned char *, short); -/* hexkey[24] MODE - * Sets the internal key registerS according to the hexadecimal - * keyS contained in the 24 bytes of hexkey, according to the DES, - * for DOUBLE encryption or decryption according to MODE. - */ - -extern void use3key(unsigned long *); -/* cookedkey[96] - * Loads the 3 internal key registerS with the data in cookedkey. - */ - -extern void cp3key(unsigned long *); -/* cookedkey[96] - * Copies the contents of the 3 internal key registerS into the storage - * located at &cookedkey[0]. - */ - -extern void make3key(char *, unsigned char *); -/* *password, triple-length key[24] - * With a triple-length default key, this routine hashes a NULL-terminated - * string into a twenty-four-byte random-looking key, suitable for use with - * the des3key() routine. - */ - -#endif /* D3_DES */ -#endif /* D2_DES */ - -/* d3des.h V5.09 rwo 9208.04 15:06 Graven Imagery - ********************************************************************/ diff --git a/src/3rdparty/d3des/readme b/src/3rdparty/d3des/readme deleted file mode 100644 index 42ad9f9..0000000 --- a/src/3rdparty/d3des/readme +++ /dev/null @@ -1,7 +0,0 @@ -This code by Richard Outerbridge implements DES with optional -double and triple encryption. I think it's pretty fast, and -it doesn't take up much memory at runtime. -Richard leaves a copyright notice on the code but encourages -free use of the code. - -Mark Riordan mrr@scss3.cl.msu.edu diff --git a/src/3rdparty/d3des/unpacked b/src/3rdparty/d3des/unpacked deleted file mode 100644 index e69de29..0000000 diff --git a/src/3rdparty/md5/Makefile b/src/3rdparty/md5/Makefile deleted file mode 100644 index e0f60c8..0000000 --- a/src/3rdparty/md5/Makefile +++ /dev/null @@ -1,44 +0,0 @@ -# This makefile compiles the source code for the "RSA Data Security, Inc. -# MD5 Message-Digest Algorithm" as found in RFC 1321. That code is copyrighted: -# -# Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. -# All rights reserved. -# -# See the source code for copyright restrictions. -# -# No "makefile" is provided in the RFC. -# This one was written by Jim Ellis (jte@cert.org) for convenience. - -CC = gcc - -# Note: a bug in mddriver causes "MD" to default to an incorrect value, -# so we set it to "5" here. -CFLAGS = -O -DMD=5 - -md5: md5c.o mddriver.o - $(CC) -o md5 md5c.o mddriver.o - -mddriver.o: global.h md5.h - $(CC) -c $(CFLAGS) mddriver.c - -md5c.o: global.h md5.h - $(CC) -c $(CFLAGS) md5c.c - -test: md5 test.rfc - -./md5 -x | diff - test.rfc > diffs 2>&1 - @-if test -s diffs ; then echo '*** MD5 TEST FAILED'; cat diffs; else echo '*** MD5 Test Passed'; fi - rm -f diffs - -# test.rfc is taken from Appendix 5 of RFC 1321. -test.rfc: - echo 'MD5 test suite:' > test.rfc - echo 'MD5 ("") = d41d8cd98f00b204e9800998ecf8427e' >> test.rfc - echo 'MD5 ("a") = 0cc175b9c0f1b6a831c399e269772661' >> test.rfc - echo 'MD5 ("abc") = 900150983cd24fb0d6963f7d28e17f72' >> test.rfc - echo 'MD5 ("message digest") = f96b697d7cb7938d525a2f31aaf161d0' >> test.rfc - echo 'MD5 ("abcdefghijklmnopqrstuvwxyz") = c3fcd3d76192e4007dfb496cca67e13b' >> test.rfc - echo 'MD5 ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") = d174ab98d277d9f5a5611c2c9f419d9f' >> test.rfc - echo 'MD5 ("12345678901234567890123456789012345678901234567890123456789012345678901234567890") = 57edf4a22be3c955ac49da2e2107b67a' >> test.rfc - -clean: - rm -f *.o md5 diffs test.rfc diff --git a/src/3rdparty/md5/README b/src/3rdparty/md5/README deleted file mode 100644 index a37475f..0000000 --- a/src/3rdparty/md5/README +++ /dev/null @@ -1,120 +0,0 @@ - WHAT IS MD5? - -This directory contains source code for the MD5 message-digest algorithm. -Essentially, MD5 reads data and calculates a cryptographic "checksum" that is, -as far as anyone knows today, very hard to duplicate. Just as traditional -checksums are used to gain confidence that a file has not been accidentally -modified, say when transmitted over a phone line, MD5 is used to gain -confidence that a file has not been *intentionally* modified, say to install -a Trojan horse. - -"Very hard" in this case means that currently no one knows how to -modify an arbitrary file without changing its MD5 checksum. -Researchers continues to try, of course, and are making some progress -towards the eventual goal of "breaking" MD5, but it is still considered -quite strong enough for most uses. If the data you are protecting is -highly valuable then, as always, you should enlist the services of a -competent cryptographer to identify the precise risks from using this or -any other cryptographic algorithm. - -MD5.tar.Z is a compressed tar file of all the other files in this directory. - - - IS MD5 PATENTED? DO I NEED A LICENSE TO USE IT? - -"No" and "no". - -"md5-announcement.txt" is the announcement from RSA Data Security that -MD5 is being placed in the public domain for free general use. -Anyone may write a program implementing the MD5 algorithm for any purpose. - -RSA has written a reference implementation which is the source code in -this directory. This source code is copyrighted by RSA. Here are the -few copyright restrictions *with using this source code*. There is no -restriction on any code which implements MD5 that you write yourself. - -> Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All -> rights reserved. -> -> License to copy and use this software is granted provided that it -> is identified as the "RSA Data Security, Inc. MD5 Message-Digest -> Algorithm" in all material mentioning or referencing this software -> or this function. -> -> License is also granted to make and use derivative works provided -> that such works are identified as "derived from the RSA Data -> Security, Inc. MD5 Message-Digest Algorithm" in all material -> mentioning or referencing the derived work. -> -> RSA Data Security, Inc. makes no representations concerning either -> the merchantability of this software or the suitability of this -> software for any particular purpose. It is provided "as is" -> without express or implied warranty of any kind. -> -> These notices must be retained in any copies of any part of this -> documentation and/or software. - - - WHY ARE THESE FILES HERE? WHAT CHANGES HAVE YOU MADE? - -"rfc1321.txt" is the RFC that describes in detail the MD5 message-digest -algorithm. (MD2 is described in RFC1319 and MD4 in RFC1320.) -Unfortunately, the text is formatted for printing so is not directly -compilable (due to page numbers, etc.). Years ago, to encourage -the use of MD5, I collected these files into a form that could -easily be compiled. Because one intended use of MD5 is to help detect -modified code, I intentionally made as few modifications to the -original code in the RFC as possible so that it could be easily -compared to the RFC. There are now other more efficient versions of -MD5 available from other sources and I have taken the liberty to -incorporate a few selected modifications as described below. - -The *.[ch] files were taken directly from RFC 1321. -Since the RFC did not include a makefile, I wrote a simple one to -build and test the md5 executable. Run "make" to just make the -MD5 binary or "make test" to make and test it. - -There is a typo in the RFC Appendix A.4 (mddriver.c). -Line 20 sets MD to "MD5" by default, but the code wants -MD to be set to one of "2", "4", or "5". -I put a -DMD=5 in the Makefile to mask this problem so that that -portion of the code itself remains unchanged from what is in RFC 1321. - -Ric Anderson, ric@Artisoft.COM, provided a bug fix to the timing test code -that caused a divide by zero aborts on a Sun sparc station-10 running -solaris 2.3. This fix just corrects only a problem with the timing tests; -no change to the code that implements the actual checksum has been made. - -Ric has also provided a man page - "md5.1". A postscript version -of this man page is in "md5.1.ps" and a text version in "md5.1.txt". - -Larry Schwimmer (schwim@cyclone.stanford.edu), Gyula Szokoly -(szgyula@skysrv.Pha.Jhu.EDU), and others sent in fixes to global.h and -mddriver.c so that it would work under OSF/1 and on 64-bit architecture -machines. On these machines, a "long" is not 4 bytes so -the #define for UINT4 needs to be "int" instead of "long int". - - WHAT ABOUT EXPORT CONTROL? - -A question I am often asked is whether or not MD5 can be exported -from the United States. This is an understandable concern given -the export debate in this country. The answer is, happily, "yes". -Here is the explanation from the US Department of State with a -reference for those whose lawyers require checking such things: - - "... MD-5, N-HASH, and SHS are 'hashing routines' that perform - a data authentication function and, by themselves, are not - controlled for export under the ITAR because cryptographic software - that is solely limited to a data authentication function is excluded - from Category XIII(b) of the United States Munitions List. - See 22 C.F.R. Section 121.1 XIII(b)(vi)." - - Source: Karn v. US Department of State, - "JOINT STATEMENT OF FACTS NOT IN DISPUTE", - Civ. A. No. 95-1812(CRR), US District Court for the District of Columbia. - - -Enjoy! - - -- Jim Ellis (jte@cert.org) - March 1998 diff --git a/src/3rdparty/md5/global.h b/src/3rdparty/md5/global.h deleted file mode 100644 index ee25514..0000000 --- a/src/3rdparty/md5/global.h +++ /dev/null @@ -1,30 +0,0 @@ -/* GLOBAL.H - RSAREF types and constants - */ - -/* PROTOTYPES should be set to one if and only if the compiler supports - function argument prototyping. -The following makes PROTOTYPES default to 0 if it has not already - been defined with C compiler flags. - */ -#ifndef PROTOTYPES -#define PROTOTYPES 0 -#endif - -/* POINTER defines a generic pointer type */ -typedef unsigned char *POINTER; - -/* UINT2 defines a two byte word */ -typedef unsigned short int UINT2; - -/* UINT4 defines a four byte word */ -typedef unsigned long int UINT4; - -/* PROTO_LIST is defined depending on how PROTOTYPES is defined above. -If using PROTOTYPES, then PROTO_LIST returns the list, otherwise it - returns an empty list. - */ -#if PROTOTYPES -#define PROTO_LIST(list) list -#else -#define PROTO_LIST(list) () -#endif diff --git a/src/3rdparty/md5/md5-announcement.txt b/src/3rdparty/md5/md5-announcement.txt deleted file mode 100644 index 931a1b7..0000000 --- a/src/3rdparty/md5/md5-announcement.txt +++ /dev/null @@ -1,37 +0,0 @@ - MD5 -- New Message Digest Algorithm - (Feel free to distribute further) - -RSA Data Security is announcing MD5, a new message-digest algorithm. -Like MD4, this algorithm is being placed in the public domain for free -general use. - -The MD5 algorithm is a strengthened version of MD4. It has four -rounds instead of three, and incorporates other revisions based on a -year's worth of collected comments on the MD4 algorithm. For example, -the input access patterns in rounds two and three have been improved, -and the rotation amounts have been optimized for maximum ``avalanche -effect.'' The additive constants have been made unique in each step, -and an additional dependence of each step on the previous one has been -added. - -These changes cause MD5 to be somewhat slower than MD4. We estimate -that MD5 will typically run about 15-30% slower than MD4, depending on -the degree to which the versions of MD4 and MD5 have been optimized. -The more they are both optimized, the greater the percentage -difference in speed. An optimized version of MD5 on a Sun -SparcStation runs at about 890 Kbytes/second. - -Why MD5? While we do not know of any way to ``break'' MD4, we feel -that MD4 is being pressed into service far too quickly for such an -``aggressive'' design. We have been surprised at the speed with which -MD4 is being designed into products. MD5 is ``MD4 with seatbelts'' -and thus, as a more conservative design, is more suitable for rapid -deployment. - -It is the intent of RSA Data Security to use MD5 in its products and -standards instead of MD4. We recommend that our customers generally -do the same, unless there is an overwhelming need for the higher speed -of MD4. Copies of the MD5 algorithm, including a reference -implementation in C, are available from the company. (Over the -Internet, you can access this documentation by anonymous FTP to -rsa.com and obtaining the file pub/md5.doc.) diff --git a/src/3rdparty/md5/md5.1 b/src/3rdparty/md5/md5.1 deleted file mode 100644 index ccccb01..0000000 --- a/src/3rdparty/md5/md5.1 +++ /dev/null @@ -1,43 +0,0 @@ -.TH MD5 1 "Feb 14, 1994" -.SH NAME -md5 \- calculate a message-digest fingerprint (checksum) for a file -.SH SYNOPSIS -.B md5 -[ -t | -x | -sstring | filename(s) ] -.SH DESCRIPTION -.B md5 -takes as input a message of arbitrary length and produces -as output a 128-bit "fingerprint" or "message digest" of the input. -It is conjectured that it is computationally infeasible to produce -two messages having the same message digest, or to produce any -message having a given prespecified target message digest. -The MD5 algorithm is intended for digital signature applications, where a -large file must be "compressed" in a secure manner before being -encrypted with a private (secret) key under a public-key cryptosystem -such as -.I RSA. -.SH OPTIONS -The following four options may be used in any combination, except -that -.B "filename(s)" -must be the last objects on the command line. -.in +5 -.PP -.B -sstring -prints a checksum of the given "string". -.PP -.B -t -runs a built-in time trial. -.PP -.B -x -runs a built-in test script. -.PP -.B filename(s) -prints a checksum(s) for each of the files. -.SH "SEE ALSO" -.BR sum (1) -.PP -RFC 1321 describes in detail the MD2, MD4, and MD5 message-digest algorithms. -.SH ACKNOWLEDGEMENTS -This program is placed in the public domain for free general use by -RSA Data Security. diff --git a/src/3rdparty/md5/md5.1.ps b/src/3rdparty/md5/md5.1.ps deleted file mode 100644 index 8a4d4c0..0000000 Binary files a/src/3rdparty/md5/md5.1.ps and /dev/null differ diff --git a/src/3rdparty/md5/md5.1.txt b/src/3rdparty/md5/md5.1.txt deleted file mode 100644 index 59a1b00..0000000 --- a/src/3rdparty/md5/md5.1.txt +++ /dev/null @@ -1,66 +0,0 @@ - - - -MD5(1) USER COMMANDS MD5(1) - - - -NAME - md5 - calculate a message-digest fingerprint (checksum) for - a file - -SYNOPSIS - md5 [ -t | -x | -sstring | filename(s) ] - -DESCRIPTION - md5 takes as input a message of arbitrary length and pro- - duces as output a 128-bit "fingerprint" or "message digest" - of the input. It is conjectured that it is computationally - infeasible to produce two messages having the same message - digest, or to produce any message having a given prespeci- - fied target message digest. The MD5 algorithm is intended - for digital signature applications, where a large file must - be "compressed" in a secure manner before being encrypted - with a private (secret) key under a public-key cryptosystem - such as _R_S_A. - -OPTIONS - The following four options may be used in any combination, - except that filename(s) must be the last objects on the com- - mand line. - - -sstring prints a checksum of the given "string". - - -t runs a built-in time trial. - - -x runs a built-in test script. - - filename(s) prints a checksum(s) for each of the files. - -SEE ALSO - sum(1) - - RFC 1321 describes in detail the MD2, MD4, and MD5 message- - digest algorithms. - -ACKNOWLEDGEMENTS - This program is placed in the public domain for free general - use by RSA Data Security. - - - - - - - - - - - - - - -Sun Release 4.1 Last change: Feb 14, 1994 1 - - - diff --git a/src/3rdparty/md5/md5.h b/src/3rdparty/md5/md5.h deleted file mode 100644 index f9d29c7..0000000 --- a/src/3rdparty/md5/md5.h +++ /dev/null @@ -1,36 +0,0 @@ -/* MD5.H - header file for MD5C.C - */ - -/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All -rights reserved. - -License to copy and use this software is granted provided that it -is identified as the "RSA Data Security, Inc. MD5 Message-Digest -Algorithm" in all material mentioning or referencing this software -or this function. - -License is also granted to make and use derivative works provided -that such works are identified as "derived from the RSA Data -Security, Inc. MD5 Message-Digest Algorithm" in all material -mentioning or referencing the derived work. - -RSA Data Security, Inc. makes no representations concerning either -the merchantability of this software or the suitability of this -software for any particular purpose. It is provided "as is" -without express or implied warranty of any kind. - -These notices must be retained in any copies of any part of this -documentation and/or software. - */ - -/* MD5 context. */ -typedef struct { - UINT4 state[4]; /* state (ABCD) */ - UINT4 count[2]; /* number of bits, modulo 2^64 (lsb first) */ - unsigned char buffer[64]; /* input buffer */ -} MD5_CTX; - -void MD5Init PROTO_LIST ((MD5_CTX *)); -void MD5Update PROTO_LIST - ((MD5_CTX *, unsigned char *, unsigned int)); -void MD5Final PROTO_LIST ((unsigned char [16], MD5_CTX *)); diff --git a/src/3rdparty/md5/md5c.c b/src/3rdparty/md5/md5c.c deleted file mode 100644 index 7023bff..0000000 --- a/src/3rdparty/md5/md5c.c +++ /dev/null @@ -1,333 +0,0 @@ -/* MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm - */ - -/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All -rights reserved. - -License to copy and use this software is granted provided that it -is identified as the "RSA Data Security, Inc. MD5 Message-Digest -Algorithm" in all material mentioning or referencing this software -or this function. - -License is also granted to make and use derivative works provided -that such works are identified as "derived from the RSA Data -Security, Inc. MD5 Message-Digest Algorithm" in all material -mentioning or referencing the derived work. - -RSA Data Security, Inc. makes no representations concerning either -the merchantability of this software or the suitability of this -software for any particular purpose. It is provided "as is" -without express or implied warranty of any kind. - -These notices must be retained in any copies of any part of this -documentation and/or software. - */ - -#include "global.h" -#include "md5.h" - -/* Constants for MD5Transform routine. - */ -#define S11 7 -#define S12 12 -#define S13 17 -#define S14 22 -#define S21 5 -#define S22 9 -#define S23 14 -#define S24 20 -#define S31 4 -#define S32 11 -#define S33 16 -#define S34 23 -#define S41 6 -#define S42 10 -#define S43 15 -#define S44 21 - -static void MD5Transform PROTO_LIST ((UINT4 [4], unsigned char [64])); -static void Encode PROTO_LIST - ((unsigned char *, UINT4 *, unsigned int)); -static void Decode PROTO_LIST - ((UINT4 *, unsigned char *, unsigned int)); -static void MD5_memcpy PROTO_LIST ((POINTER, POINTER, unsigned int)); -static void MD5_memset PROTO_LIST ((POINTER, int, unsigned int)); - -static unsigned char PADDING[64] = { - 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -/* F, G, H and I are basic MD5 functions. - */ -#define F(x, y, z) (((x) & (y)) | ((~x) & (z))) -#define G(x, y, z) (((x) & (z)) | ((y) & (~z))) -#define H(x, y, z) ((x) ^ (y) ^ (z)) -#define I(x, y, z) ((y) ^ ((x) | (~z))) - -/* ROTATE_LEFT rotates x left n bits. - */ -#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n)))) - -/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4. -Rotation is separate from addition to prevent recomputation. - */ -#define FF(a, b, c, d, x, s, ac) { \ - (a) += F ((b), (c), (d)) + (x) + (UINT4)(ac); \ - (a) = ROTATE_LEFT ((a), (s)); \ - (a) += (b); \ - } -#define GG(a, b, c, d, x, s, ac) { \ - (a) += G ((b), (c), (d)) + (x) + (UINT4)(ac); \ - (a) = ROTATE_LEFT ((a), (s)); \ - (a) += (b); \ - } -#define HH(a, b, c, d, x, s, ac) { \ - (a) += H ((b), (c), (d)) + (x) + (UINT4)(ac); \ - (a) = ROTATE_LEFT ((a), (s)); \ - (a) += (b); \ - } -#define II(a, b, c, d, x, s, ac) { \ - (a) += I ((b), (c), (d)) + (x) + (UINT4)(ac); \ - (a) = ROTATE_LEFT ((a), (s)); \ - (a) += (b); \ - } - -/* MD5 initialization. Begins an MD5 operation, writing a new context. - */ -void MD5Init (context) -MD5_CTX *context; /* context */ -{ - context->count[0] = context->count[1] = 0; - /* Load magic initialization constants. -*/ - context->state[0] = 0x67452301; - context->state[1] = 0xefcdab89; - context->state[2] = 0x98badcfe; - context->state[3] = 0x10325476; -} - -/* MD5 block update operation. Continues an MD5 message-digest - operation, processing another message block, and updating the - context. - */ -void MD5Update (context, input, inputLen) -MD5_CTX *context; /* context */ -unsigned char *input; /* input block */ -unsigned int inputLen; /* length of input block */ -{ - unsigned int i, index, partLen; - - /* Compute number of bytes mod 64 */ - index = (unsigned int)((context->count[0] >> 3) & 0x3F); - - /* Update number of bits */ - if ((context->count[0] += ((UINT4)inputLen << 3)) - < ((UINT4)inputLen << 3)) - context->count[1]++; - context->count[1] += ((UINT4)inputLen >> 29); - - partLen = 64 - index; - - /* Transform as many times as possible. -*/ - if (inputLen >= partLen) { - MD5_memcpy - ((POINTER)&context->buffer[index], (POINTER)input, partLen); - MD5Transform (context->state, context->buffer); - - for (i = partLen; i + 63 < inputLen; i += 64) - MD5Transform (context->state, &input[i]); - - index = 0; - } - else - i = 0; - - /* Buffer remaining input */ - MD5_memcpy - ((POINTER)&context->buffer[index], (POINTER)&input[i], - inputLen-i); -} - -/* MD5 finalization. Ends an MD5 message-digest operation, writing the - the message digest and zeroizing the context. - */ -void MD5Final (digest, context) -unsigned char digest[16]; /* message digest */ -MD5_CTX *context; /* context */ -{ - unsigned char bits[8]; - unsigned int index, padLen; - - /* Save number of bits */ - Encode (bits, context->count, 8); - - /* Pad out to 56 mod 64. -*/ - index = (unsigned int)((context->count[0] >> 3) & 0x3f); - padLen = (index < 56) ? (56 - index) : (120 - index); - MD5Update (context, PADDING, padLen); - - /* Append length (before padding) */ - MD5Update (context, bits, 8); - /* Store state in digest */ - Encode (digest, context->state, 16); - - /* Zeroize sensitive information. -*/ - MD5_memset ((POINTER)context, 0, sizeof (*context)); -} - -/* MD5 basic transformation. Transforms state based on block. - */ -static void MD5Transform (state, block) -UINT4 state[4]; -unsigned char block[64]; -{ - UINT4 a = state[0], b = state[1], c = state[2], d = state[3], x[16]; - - Decode (x, block, 64); - - /* Round 1 */ - FF (a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */ - FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */ - FF (c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */ - FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */ - FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */ - FF (d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */ - FF (c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */ - FF (b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */ - FF (a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */ - FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */ - FF (c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */ - FF (b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */ - FF (a, b, c, d, x[12], S11, 0x6b901122); /* 13 */ - FF (d, a, b, c, x[13], S12, 0xfd987193); /* 14 */ - FF (c, d, a, b, x[14], S13, 0xa679438e); /* 15 */ - FF (b, c, d, a, x[15], S14, 0x49b40821); /* 16 */ - - /* Round 2 */ - GG (a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */ - GG (d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */ - GG (c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */ - GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */ - GG (a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */ - GG (d, a, b, c, x[10], S22, 0x2441453); /* 22 */ - GG (c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */ - GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */ - GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */ - GG (d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */ - GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */ - GG (b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */ - GG (a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */ - GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */ - GG (c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */ - GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */ - - /* Round 3 */ - HH (a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */ - HH (d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */ - HH (c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */ - HH (b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */ - HH (a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */ - HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */ - HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */ - HH (b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */ - HH (a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */ - HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */ - HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */ - HH (b, c, d, a, x[ 6], S34, 0x4881d05); /* 44 */ - HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */ - HH (d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */ - HH (c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */ - HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */ - - /* Round 4 */ - II (a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */ - II (d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */ - II (c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */ - II (b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */ - II (a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */ - II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */ - II (c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */ - II (b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */ - II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */ - II (d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */ - II (c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */ - II (b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */ - II (a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */ - II (d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */ - II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */ - II (b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */ - - state[0] += a; - state[1] += b; - state[2] += c; - state[3] += d; - - /* Zeroize sensitive information. -*/ - MD5_memset ((POINTER)x, 0, sizeof (x)); -} - -/* Encodes input (UINT4) into output (unsigned char). Assumes len is - a multiple of 4. - */ -static void Encode (output, input, len) -unsigned char *output; -UINT4 *input; -unsigned int len; -{ - unsigned int i, j; - - for (i = 0, j = 0; j < len; i++, j += 4) { - output[j] = (unsigned char)(input[i] & 0xff); - output[j+1] = (unsigned char)((input[i] >> 8) & 0xff); - output[j+2] = (unsigned char)((input[i] >> 16) & 0xff); - output[j+3] = (unsigned char)((input[i] >> 24) & 0xff); - } -} - -/* Decodes input (unsigned char) into output (UINT4). Assumes len is - a multiple of 4. - */ -static void Decode (output, input, len) -UINT4 *output; -unsigned char *input; -unsigned int len; -{ - unsigned int i, j; - - for (i = 0, j = 0; j < len; i++, j += 4) - output[i] = ((UINT4)input[j]) | (((UINT4)input[j+1]) << 8) | - (((UINT4)input[j+2]) << 16) | (((UINT4)input[j+3]) << 24); -} - -/* Note: Replace "for loop" with standard memcpy if possible. - */ - -static void MD5_memcpy (output, input, len) -POINTER output; -POINTER input; -unsigned int len; -{ - unsigned int i; - - for (i = 0; i < len; i++) - output[i] = input[i]; -} - -/* Note: Replace "for loop" with standard memset if possible. - */ -static void MD5_memset (output, value, len) -POINTER output; -int value; -unsigned int len; -{ - unsigned int i; - - for (i = 0; i < len; i++) - ((char *)output)[i] = (char)value; -} diff --git a/src/3rdparty/md5/mddriver.c b/src/3rdparty/md5/mddriver.c deleted file mode 100644 index ae26b36..0000000 --- a/src/3rdparty/md5/mddriver.c +++ /dev/null @@ -1,244 +0,0 @@ -/* MDDRIVER.C - test driver for MD2, MD4 and MD5 - */ - -/* Copyright (C) 1990-2, RSA Data Security, Inc. Created 1990. All -rights reserved. - -RSA Data Security, Inc. makes no representations concerning either -the merchantability of this software or the suitability of this -software for any particular purpose. It is provided "as is" -without express or implied warranty of any kind. - -These notices must be retained in any copies of any part of this -documentation and/or software. - */ - -/* The following makes MD default to MD5 if it has not already been - defined with C compiler flags. - */ -#ifndef MD -#define MD MD5 -#endif - -#include -#include -#include -#include -#include "global.h" -#if MD == 2 -#include "md2.h" -#endif -#if MD == 4 -#include "md4.h" -#endif -#if MD == 5 -#include "md5.h" -#endif - -/* Length of test block, number of test blocks. - */ -#define TEST_BLOCK_LEN 1000 -#define TEST_BLOCK_COUNT 1000 - -static void MDString PROTO_LIST ((char *)); -static void MDTimeTrial PROTO_LIST ((void)); -static void MDTestSuite PROTO_LIST ((void)); -static void MDFile PROTO_LIST ((char *)); -static void MDFilter PROTO_LIST ((void)); -static void MDPrint PROTO_LIST ((unsigned char [16])); - -#if MD == 2 -#define MD_CTX MD2_CTX -#define MDInit MD2Init -#define MDUpdate MD2Update -#define MDFinal MD2Final -#endif -#if MD == 4 -#define MD_CTX MD4_CTX -#define MDInit MD4Init -#define MDUpdate MD4Update -#define MDFinal MD4Final -#endif -#if MD == 5 -#define MD_CTX MD5_CTX -#define MDInit MD5Init -#define MDUpdate MD5Update -#define MDFinal MD5Final -#endif - -/* Main driver. - -Arguments (may be any combination): - -sstring - digests string - -t - runs time trial - -x - runs test script - -b - print MD5 sum in binary on stdout - filename - digests file - (none) - digests standard input - */ - -short bflag = 0; /* 1 == print sums in binary */ - -int main (argc, argv) -int argc; -char *argv[]; -{ - int i; - - if (argc > 1) - for (i = 1; i < argc; i++) - if (argv[i][0] == '-' && argv[i][1] == 's') - MDString (argv[i] + 2); - else if (strcmp (argv[i], "-t") == 0) - MDTimeTrial (); - else if (strcmp (argv[i], "-x") == 0) - MDTestSuite (); - else if (strcmp (argv[i], "-b") == 0) - bflag = 1; - else - MDFile (argv[i]); - else - MDFilter (); - - return (0); -} - -/* Digests a string and prints the result. - */ -static void MDString (string) -char *string; -{ - MD_CTX context; - unsigned char digest[16]; - unsigned int len = strlen (string); - - MDInit (&context); - MDUpdate (&context, string, len); - MDFinal (digest, &context); - - if (!bflag) printf ("MD%d (\"%s\") = ", MD, string); - MDPrint (digest); - if (!bflag) printf ("\n"); -} - -/* Measures the time to digest TEST_BLOCK_COUNT TEST_BLOCK_LEN-byte - blocks. - */ -static void MDTimeTrial () -{ - MD_CTX context; - time_t endTime, startTime; - unsigned char block[TEST_BLOCK_LEN], digest[16]; - unsigned int i; - - printf - ("MD%d time trial. Digesting %d %d-byte blocks ...", MD, - TEST_BLOCK_LEN, TEST_BLOCK_COUNT); - - /* Initialize block */ - for (i = 0; i < TEST_BLOCK_LEN; i++) - block[i] = (unsigned char)(i & 0xff); - - /* Start timer */ - time (&startTime); - - /* Digest blocks */ - MDInit (&context); - for (i = 0; i < TEST_BLOCK_COUNT; i++) - MDUpdate (&context, block, TEST_BLOCK_LEN); - MDFinal (digest, &context); - - /* Stop timer */ - time (&endTime); - - printf (" done\n"); - printf ("Digest = "); - MDPrint (digest); - printf ("\nTime = %d seconds\n", (time_t)(endTime-startTime)); - /* - * Be careful that endTime-startTime is not zero. - * (Bug fix from Ric Anderson, ric@Artisoft.COM.) - */ - printf - ("Speed = %d bytes/second\n", - (time_t)TEST_BLOCK_LEN * (time_t)TEST_BLOCK_COUNT/((endTime-startTime) != 0 ? (endTime-startTime):1)); -} - -/* Digests a reference suite of strings and prints the results. - */ -static void MDTestSuite () -{ - printf ("MD%d test suite:\n", MD); - - MDString (""); - MDString ("a"); - MDString ("abc"); - MDString ("message digest"); - MDString ("abcdefghijklmnopqrstuvwxyz"); - MDString - ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"); - MDString - ("1234567890123456789012345678901234567890\ -1234567890123456789012345678901234567890"); -} - -/* Digests a file and prints the result. - */ -static void MDFile (filename) -char *filename; -{ - FILE *file; - MD_CTX context; - int len; - unsigned char buffer[1024], digest[16]; - - if ((file = fopen (filename, "rb")) == NULL) - printf ("%s can't be opened\n", filename); - - else { - MDInit (&context); - while (len = fread (buffer, 1, 1024, file)) - MDUpdate (&context, buffer, len); - MDFinal (digest, &context); - - fclose (file); - - if (!bflag) printf ("MD%d (%s) = ", MD, filename); - MDPrint (digest); - if (!bflag) printf ("\n"); - } -} - -/* Digests the standard input and prints the result. - */ -static void MDFilter () -{ - MD_CTX context; - int len; - unsigned char buffer[16], digest[16]; - - MDInit (&context); - while (len = fread (buffer, 1, 16, stdin)) - MDUpdate (&context, buffer, len); - MDFinal (digest, &context); - - MDPrint (digest); - if (!bflag) printf ("\n"); -} - -/* Prints a message digest in hexadecimal or binary. - */ -static void MDPrint (digest) -unsigned char digest[16]; -{ - unsigned int i; - - if (bflag) { - /* print in binary */ - write(1, &digest[0], 16); - } else { - /* print in hex */ - for (i = 0; i < 16; i++) - printf ("%02x", digest[i]); - } -} diff --git a/src/3rdparty/md5/rfc1321.txt b/src/3rdparty/md5/rfc1321.txt deleted file mode 100644 index 85543a5..0000000 --- a/src/3rdparty/md5/rfc1321.txt +++ /dev/null @@ -1,1179 +0,0 @@ - - - - - - -Network Working Group R. Rivest -Request for Comments: 1321 MIT Laboratory for Computer Science - and RSA Data Security, Inc. - April 1992 - - - The MD5 Message-Digest Algorithm - -Status of this Memo - - This memo provides information for the Internet community. It does - not specify an Internet standard. Distribution of this memo is - unlimited. - -Acknowlegements - - We would like to thank Don Coppersmith, Burt Kaliski, Ralph Merkle, - David Chaum, and Noam Nisan for numerous helpful comments and - suggestions. - -Table of Contents - - 1. Executive Summary 1 - 2. Terminology and Notation 2 - 3. MD5 Algorithm Description 3 - 4. Summary 6 - 5. Differences Between MD4 and MD5 6 - References 7 - APPENDIX A - Reference Implementation 7 - Security Considerations 21 - Author's Address 21 - -1. Executive Summary - - This document describes the MD5 message-digest algorithm. The - algorithm takes as input a message of arbitrary length and produces - as output a 128-bit "fingerprint" or "message digest" of the input. - It is conjectured that it is computationally infeasible to produce - two messages having the same message digest, or to produce any - message having a given prespecified target message digest. The MD5 - algorithm is intended for digital signature applications, where a - large file must be "compressed" in a secure manner before being - encrypted with a private (secret) key under a public-key cryptosystem - such as RSA. - - - - - - - -Rivest [Page 1] - -RFC 1321 MD5 Message-Digest Algorithm April 1992 - - - The MD5 algorithm is designed to be quite fast on 32-bit machines. In - addition, the MD5 algorithm does not require any large substitution - tables; the algorithm can be coded quite compactly. - - The MD5 algorithm is an extension of the MD4 message-digest algorithm - 1,2]. MD5 is slightly slower than MD4, but is more "conservative" in - design. MD5 was designed because it was felt that MD4 was perhaps - being adopted for use more quickly than justified by the existing - critical review; because MD4 was designed to be exceptionally fast, - it is "at the edge" in terms of risking successful cryptanalytic - attack. MD5 backs off a bit, giving up a little in speed for a much - greater likelihood of ultimate security. It incorporates some - suggestions made by various reviewers, and contains additional - optimizations. The MD5 algorithm is being placed in the public domain - for review and possible adoption as a standard. - - For OSI-based applications, MD5's object identifier is - - md5 OBJECT IDENTIFIER ::= - iso(1) member-body(2) US(840) rsadsi(113549) digestAlgorithm(2) 5} - - In the X.509 type AlgorithmIdentifier [3], the parameters for MD5 - should have type NULL. - -2. Terminology and Notation - - In this document a "word" is a 32-bit quantity and a "byte" is an - eight-bit quantity. A sequence of bits can be interpreted in a - natural manner as a sequence of bytes, where each consecutive group - of eight bits is interpreted as a byte with the high-order (most - significant) bit of each byte listed first. Similarly, a sequence of - bytes can be interpreted as a sequence of 32-bit words, where each - consecutive group of four bytes is interpreted as a word with the - low-order (least significant) byte given first. - - Let x_i denote "x sub i". If the subscript is an expression, we - surround it in braces, as in x_{i+1}. Similarly, we use ^ for - superscripts (exponentiation), so that x^i denotes x to the i-th - power. - - Let the symbol "+" denote addition of words (i.e., modulo-2^32 - addition). Let X <<< s denote the 32-bit value obtained by circularly - shifting (rotating) X left by s bit positions. Let not(X) denote the - bit-wise complement of X, and let X v Y denote the bit-wise OR of X - and Y. Let X xor Y denote the bit-wise XOR of X and Y, and let XY - denote the bit-wise AND of X and Y. - - - - - -Rivest [Page 2] - -RFC 1321 MD5 Message-Digest Algorithm April 1992 - - -3. MD5 Algorithm Description - - We begin by supposing that we have a b-bit message as input, and that - we wish to find its message digest. Here b is an arbitrary - nonnegative integer; b may be zero, it need not be a multiple of - eight, and it may be arbitrarily large. We imagine the bits of the - message written down as follows: - - m_0 m_1 ... m_{b-1} - - The following five steps are performed to compute the message digest - of the message. - -3.1 Step 1. Append Padding Bits - - The message is "padded" (extended) so that its length (in bits) is - congruent to 448, modulo 512. That is, the message is extended so - that it is just 64 bits shy of being a multiple of 512 bits long. - Padding is always performed, even if the length of the message is - already congruent to 448, modulo 512. - - Padding is performed as follows: a single "1" bit is appended to the - message, and then "0" bits are appended so that the length in bits of - the padded message becomes congruent to 448, modulo 512. In all, at - least one bit and at most 512 bits are appended. - -3.2 Step 2. Append Length - - A 64-bit representation of b (the length of the message before the - padding bits were added) is appended to the result of the previous - step. In the unlikely event that b is greater than 2^64, then only - the low-order 64 bits of b are used. (These bits are appended as two - 32-bit words and appended low-order word first in accordance with the - previous conventions.) - - At this point the resulting message (after padding with bits and with - b) has a length that is an exact multiple of 512 bits. Equivalently, - this message has a length that is an exact multiple of 16 (32-bit) - words. Let M[0 ... N-1] denote the words of the resulting message, - where N is a multiple of 16. - -3.3 Step 3. Initialize MD Buffer - - A four-word buffer (A,B,C,D) is used to compute the message digest. - Here each of A, B, C, D is a 32-bit register. These registers are - initialized to the following values in hexadecimal, low-order bytes - first): - - - - -Rivest [Page 3] - -RFC 1321 MD5 Message-Digest Algorithm April 1992 - - - word A: 01 23 45 67 - word B: 89 ab cd ef - word C: fe dc ba 98 - word D: 76 54 32 10 - -3.4 Step 4. Process Message in 16-Word Blocks - - We first define four auxiliary functions that each take as input - three 32-bit words and produce as output one 32-bit word. - - F(X,Y,Z) = XY v not(X) Z - G(X,Y,Z) = XZ v Y not(Z) - H(X,Y,Z) = X xor Y xor Z - I(X,Y,Z) = Y xor (X v not(Z)) - - In each bit position F acts as a conditional: if X then Y else Z. - The function F could have been defined using + instead of v since XY - and not(X)Z will never have 1's in the same bit position.) It is - interesting to note that if the bits of X, Y, and Z are independent - and unbiased, the each bit of F(X,Y,Z) will be independent and - unbiased. - - The functions G, H, and I are similar to the function F, in that they - act in "bitwise parallel" to produce their output from the bits of X, - Y, and Z, in such a manner that if the corresponding bits of X, Y, - and Z are independent and unbiased, then each bit of G(X,Y,Z), - H(X,Y,Z), and I(X,Y,Z) will be independent and unbiased. Note that - the function H is the bit-wise "xor" or "parity" function of its - inputs. - - This step uses a 64-element table T[1 ... 64] constructed from the - sine function. Let T[i] denote the i-th element of the table, which - is equal to the integer part of 4294967296 times abs(sin(i)), where i - is in radians. The elements of the table are given in the appendix. - - Do the following: - - /* Process each 16-word block. */ - For i = 0 to N/16-1 do - - /* Copy block i into X. */ - For j = 0 to 15 do - Set X[j] to M[i*16+j]. - end /* of loop on j */ - - /* Save A as AA, B as BB, C as CC, and D as DD. */ - AA = A - BB = B - - - -Rivest [Page 4] - -RFC 1321 MD5 Message-Digest Algorithm April 1992 - - - CC = C - DD = D - - /* Round 1. */ - /* Let [abcd k s i] denote the operation - a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s). */ - /* Do the following 16 operations. */ - [ABCD 0 7 1] [DABC 1 12 2] [CDAB 2 17 3] [BCDA 3 22 4] - [ABCD 4 7 5] [DABC 5 12 6] [CDAB 6 17 7] [BCDA 7 22 8] - [ABCD 8 7 9] [DABC 9 12 10] [CDAB 10 17 11] [BCDA 11 22 12] - [ABCD 12 7 13] [DABC 13 12 14] [CDAB 14 17 15] [BCDA 15 22 16] - - /* Round 2. */ - /* Let [abcd k s i] denote the operation - a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s). */ - /* Do the following 16 operations. */ - [ABCD 1 5 17] [DABC 6 9 18] [CDAB 11 14 19] [BCDA 0 20 20] - [ABCD 5 5 21] [DABC 10 9 22] [CDAB 15 14 23] [BCDA 4 20 24] - [ABCD 9 5 25] [DABC 14 9 26] [CDAB 3 14 27] [BCDA 8 20 28] - [ABCD 13 5 29] [DABC 2 9 30] [CDAB 7 14 31] [BCDA 12 20 32] - - /* Round 3. */ - /* Let [abcd k s t] denote the operation - a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s). */ - /* Do the following 16 operations. */ - [ABCD 5 4 33] [DABC 8 11 34] [CDAB 11 16 35] [BCDA 14 23 36] - [ABCD 1 4 37] [DABC 4 11 38] [CDAB 7 16 39] [BCDA 10 23 40] - [ABCD 13 4 41] [DABC 0 11 42] [CDAB 3 16 43] [BCDA 6 23 44] - [ABCD 9 4 45] [DABC 12 11 46] [CDAB 15 16 47] [BCDA 2 23 48] - - /* Round 4. */ - /* Let [abcd k s t] denote the operation - a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s). */ - /* Do the following 16 operations. */ - [ABCD 0 6 49] [DABC 7 10 50] [CDAB 14 15 51] [BCDA 5 21 52] - [ABCD 12 6 53] [DABC 3 10 54] [CDAB 10 15 55] [BCDA 1 21 56] - [ABCD 8 6 57] [DABC 15 10 58] [CDAB 6 15 59] [BCDA 13 21 60] - [ABCD 4 6 61] [DABC 11 10 62] [CDAB 2 15 63] [BCDA 9 21 64] - - /* Then perform the following additions. (That is increment each - of the four registers by the value it had before this block - was started.) */ - A = A + AA - B = B + BB - C = C + CC - D = D + DD - - end /* of loop on i */ - - - -Rivest [Page 5] - -RFC 1321 MD5 Message-Digest Algorithm April 1992 - - -3.5 Step 5. Output - - The message digest produced as output is A, B, C, D. That is, we - begin with the low-order byte of A, and end with the high-order byte - of D. - - This completes the description of MD5. A reference implementation in - C is given in the appendix. - -4. Summary - - The MD5 message-digest algorithm is simple to implement, and provides - a "fingerprint" or message digest of a message of arbitrary length. - It is conjectured that the difficulty of coming up with two messages - having the same message digest is on the order of 2^64 operations, - and that the difficulty of coming up with any message having a given - message digest is on the order of 2^128 operations. The MD5 algorithm - has been carefully scrutinized for weaknesses. It is, however, a - relatively new algorithm and further security analysis is of course - justified, as is the case with any new proposal of this sort. - -5. Differences Between MD4 and MD5 - - The following are the differences between MD4 and MD5: - - 1. A fourth round has been added. - - 2. Each step now has a unique additive constant. - - 3. The function g in round 2 was changed from (XY v XZ v YZ) to - (XZ v Y not(Z)) to make g less symmetric. - - 4. Each step now adds in the result of the previous step. This - promotes a faster "avalanche effect". - - 5. The order in which input words are accessed in rounds 2 and - 3 is changed, to make these patterns less like each other. - - 6. The shift amounts in each round have been approximately - optimized, to yield a faster "avalanche effect." The shifts in - different rounds are distinct. - - - - - - - - - - -Rivest [Page 6] - -RFC 1321 MD5 Message-Digest Algorithm April 1992 - - -References - - [1] Rivest, R., "The MD4 Message Digest Algorithm", RFC 1320, MIT and - RSA Data Security, Inc., April 1992. - - [2] Rivest, R., "The MD4 message digest algorithm", in A.J. Menezes - and S.A. Vanstone, editors, Advances in Cryptology - CRYPTO '90 - Proceedings, pages 303-311, Springer-Verlag, 1991. - - [3] CCITT Recommendation X.509 (1988), "The Directory - - Authentication Framework." - -APPENDIX A - Reference Implementation - - This appendix contains the following files taken from RSAREF: A - Cryptographic Toolkit for Privacy-Enhanced Mail: - - global.h -- global header file - - md5.h -- header file for MD5 - - md5c.c -- source code for MD5 - - For more information on RSAREF, send email to . - - The appendix also includes the following file: - - mddriver.c -- test driver for MD2, MD4 and MD5 - - The driver compiles for MD5 by default but can compile for MD2 or MD4 - if the symbol MD is defined on the C compiler command line as 2 or 4. - - The implementation is portable and should work on many different - plaforms. However, it is not difficult to optimize the implementation - on particular platforms, an exercise left to the reader. For example, - on "little-endian" platforms where the lowest-addressed byte in a 32- - bit word is the least significant and there are no alignment - restrictions, the call to Decode in MD5Transform can be replaced with - a typecast. - -A.1 global.h - -/* GLOBAL.H - RSAREF types and constants - */ - -/* PROTOTYPES should be set to one if and only if the compiler supports - function argument prototyping. -The following makes PROTOTYPES default to 0 if it has not already - - - -Rivest [Page 7] - -RFC 1321 MD5 Message-Digest Algorithm April 1992 - - - been defined with C compiler flags. - */ -#ifndef PROTOTYPES -#define PROTOTYPES 0 -#endif - -/* POINTER defines a generic pointer type */ -typedef unsigned char *POINTER; - -/* UINT2 defines a two byte word */ -typedef unsigned short int UINT2; - -/* UINT4 defines a four byte word */ -typedef unsigned long int UINT4; - -/* PROTO_LIST is defined depending on how PROTOTYPES is defined above. -If using PROTOTYPES, then PROTO_LIST returns the list, otherwise it - returns an empty list. - */ -#if PROTOTYPES -#define PROTO_LIST(list) list -#else -#define PROTO_LIST(list) () -#endif - -A.2 md5.h - -/* MD5.H - header file for MD5C.C - */ - -/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All -rights reserved. - -License to copy and use this software is granted provided that it -is identified as the "RSA Data Security, Inc. MD5 Message-Digest -Algorithm" in all material mentioning or referencing this software -or this function. - -License is also granted to make and use derivative works provided -that such works are identified as "derived from the RSA Data -Security, Inc. MD5 Message-Digest Algorithm" in all material -mentioning or referencing the derived work. - -RSA Data Security, Inc. makes no representations concerning either -the merchantability of this software or the suitability of this -software for any particular purpose. It is provided "as is" -without express or implied warranty of any kind. - - - - -Rivest [Page 8] - -RFC 1321 MD5 Message-Digest Algorithm April 1992 - - -These notices must be retained in any copies of any part of this -documentation and/or software. - */ - -/* MD5 context. */ -typedef struct { - UINT4 state[4]; /* state (ABCD) */ - UINT4 count[2]; /* number of bits, modulo 2^64 (lsb first) */ - unsigned char buffer[64]; /* input buffer */ -} MD5_CTX; - -void MD5Init PROTO_LIST ((MD5_CTX *)); -void MD5Update PROTO_LIST - ((MD5_CTX *, unsigned char *, unsigned int)); -void MD5Final PROTO_LIST ((unsigned char [16], MD5_CTX *)); - -A.3 md5c.c - -/* MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm - */ - -/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All -rights reserved. - -License to copy and use this software is granted provided that it -is identified as the "RSA Data Security, Inc. MD5 Message-Digest -Algorithm" in all material mentioning or referencing this software -or this function. - -License is also granted to make and use derivative works provided -that such works are identified as "derived from the RSA Data -Security, Inc. MD5 Message-Digest Algorithm" in all material -mentioning or referencing the derived work. - -RSA Data Security, Inc. makes no representations concerning either -the merchantability of this software or the suitability of this -software for any particular purpose. It is provided "as is" -without express or implied warranty of any kind. - -These notices must be retained in any copies of any part of this -documentation and/or software. - */ - -#include "global.h" -#include "md5.h" - -/* Constants for MD5Transform routine. - */ - - - -Rivest [Page 9] - -RFC 1321 MD5 Message-Digest Algorithm April 1992 - - -#define S11 7 -#define S12 12 -#define S13 17 -#define S14 22 -#define S21 5 -#define S22 9 -#define S23 14 -#define S24 20 -#define S31 4 -#define S32 11 -#define S33 16 -#define S34 23 -#define S41 6 -#define S42 10 -#define S43 15 -#define S44 21 - -static void MD5Transform PROTO_LIST ((UINT4 [4], unsigned char [64])); -static void Encode PROTO_LIST - ((unsigned char *, UINT4 *, unsigned int)); -static void Decode PROTO_LIST - ((UINT4 *, unsigned char *, unsigned int)); -static void MD5_memcpy PROTO_LIST ((POINTER, POINTER, unsigned int)); -static void MD5_memset PROTO_LIST ((POINTER, int, unsigned int)); - -static unsigned char PADDING[64] = { - 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -/* F, G, H and I are basic MD5 functions. - */ -#define F(x, y, z) (((x) & (y)) | ((~x) & (z))) -#define G(x, y, z) (((x) & (z)) | ((y) & (~z))) -#define H(x, y, z) ((x) ^ (y) ^ (z)) -#define I(x, y, z) ((y) ^ ((x) | (~z))) - -/* ROTATE_LEFT rotates x left n bits. - */ -#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n)))) - -/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4. -Rotation is separate from addition to prevent recomputation. - */ -#define FF(a, b, c, d, x, s, ac) { \ - (a) += F ((b), (c), (d)) + (x) + (UINT4)(ac); \ - (a) = ROTATE_LEFT ((a), (s)); \ - - - -Rivest [Page 10] - -RFC 1321 MD5 Message-Digest Algorithm April 1992 - - - (a) += (b); \ - } -#define GG(a, b, c, d, x, s, ac) { \ - (a) += G ((b), (c), (d)) + (x) + (UINT4)(ac); \ - (a) = ROTATE_LEFT ((a), (s)); \ - (a) += (b); \ - } -#define HH(a, b, c, d, x, s, ac) { \ - (a) += H ((b), (c), (d)) + (x) + (UINT4)(ac); \ - (a) = ROTATE_LEFT ((a), (s)); \ - (a) += (b); \ - } -#define II(a, b, c, d, x, s, ac) { \ - (a) += I ((b), (c), (d)) + (x) + (UINT4)(ac); \ - (a) = ROTATE_LEFT ((a), (s)); \ - (a) += (b); \ - } - -/* MD5 initialization. Begins an MD5 operation, writing a new context. - */ -void MD5Init (context) -MD5_CTX *context; /* context */ -{ - context->count[0] = context->count[1] = 0; - /* Load magic initialization constants. -*/ - context->state[0] = 0x67452301; - context->state[1] = 0xefcdab89; - context->state[2] = 0x98badcfe; - context->state[3] = 0x10325476; -} - -/* MD5 block update operation. Continues an MD5 message-digest - operation, processing another message block, and updating the - context. - */ -void MD5Update (context, input, inputLen) -MD5_CTX *context; /* context */ -unsigned char *input; /* input block */ -unsigned int inputLen; /* length of input block */ -{ - unsigned int i, index, partLen; - - /* Compute number of bytes mod 64 */ - index = (unsigned int)((context->count[0] >> 3) & 0x3F); - - /* Update number of bits */ - if ((context->count[0] += ((UINT4)inputLen << 3)) - - - -Rivest [Page 11] - -RFC 1321 MD5 Message-Digest Algorithm April 1992 - - - < ((UINT4)inputLen << 3)) - context->count[1]++; - context->count[1] += ((UINT4)inputLen >> 29); - - partLen = 64 - index; - - /* Transform as many times as possible. -*/ - if (inputLen >= partLen) { - MD5_memcpy - ((POINTER)&context->buffer[index], (POINTER)input, partLen); - MD5Transform (context->state, context->buffer); - - for (i = partLen; i + 63 < inputLen; i += 64) - MD5Transform (context->state, &input[i]); - - index = 0; - } - else - i = 0; - - /* Buffer remaining input */ - MD5_memcpy - ((POINTER)&context->buffer[index], (POINTER)&input[i], - inputLen-i); -} - -/* MD5 finalization. Ends an MD5 message-digest operation, writing the - the message digest and zeroizing the context. - */ -void MD5Final (digest, context) -unsigned char digest[16]; /* message digest */ -MD5_CTX *context; /* context */ -{ - unsigned char bits[8]; - unsigned int index, padLen; - - /* Save number of bits */ - Encode (bits, context->count, 8); - - /* Pad out to 56 mod 64. -*/ - index = (unsigned int)((context->count[0] >> 3) & 0x3f); - padLen = (index < 56) ? (56 - index) : (120 - index); - MD5Update (context, PADDING, padLen); - - /* Append length (before padding) */ - MD5Update (context, bits, 8); - - - -Rivest [Page 12] - -RFC 1321 MD5 Message-Digest Algorithm April 1992 - - - /* Store state in digest */ - Encode (digest, context->state, 16); - - /* Zeroize sensitive information. -*/ - MD5_memset ((POINTER)context, 0, sizeof (*context)); -} - -/* MD5 basic transformation. Transforms state based on block. - */ -static void MD5Transform (state, block) -UINT4 state[4]; -unsigned char block[64]; -{ - UINT4 a = state[0], b = state[1], c = state[2], d = state[3], x[16]; - - Decode (x, block, 64); - - /* Round 1 */ - FF (a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */ - FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */ - FF (c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */ - FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */ - FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */ - FF (d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */ - FF (c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */ - FF (b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */ - FF (a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */ - FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */ - FF (c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */ - FF (b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */ - FF (a, b, c, d, x[12], S11, 0x6b901122); /* 13 */ - FF (d, a, b, c, x[13], S12, 0xfd987193); /* 14 */ - FF (c, d, a, b, x[14], S13, 0xa679438e); /* 15 */ - FF (b, c, d, a, x[15], S14, 0x49b40821); /* 16 */ - - /* Round 2 */ - GG (a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */ - GG (d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */ - GG (c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */ - GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */ - GG (a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */ - GG (d, a, b, c, x[10], S22, 0x2441453); /* 22 */ - GG (c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */ - GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */ - GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */ - GG (d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */ - GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */ - - - -Rivest [Page 13] - -RFC 1321 MD5 Message-Digest Algorithm April 1992 - - - GG (b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */ - GG (a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */ - GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */ - GG (c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */ - GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */ - - /* Round 3 */ - HH (a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */ - HH (d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */ - HH (c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */ - HH (b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */ - HH (a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */ - HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */ - HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */ - HH (b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */ - HH (a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */ - HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */ - HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */ - HH (b, c, d, a, x[ 6], S34, 0x4881d05); /* 44 */ - HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */ - HH (d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */ - HH (c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */ - HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */ - - /* Round 4 */ - II (a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */ - II (d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */ - II (c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */ - II (b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */ - II (a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */ - II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */ - II (c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */ - II (b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */ - II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */ - II (d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */ - II (c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */ - II (b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */ - II (a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */ - II (d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */ - II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */ - II (b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */ - - state[0] += a; - state[1] += b; - state[2] += c; - state[3] += d; - - /* Zeroize sensitive information. - - - -Rivest [Page 14] - -RFC 1321 MD5 Message-Digest Algorithm April 1992 - - -*/ - MD5_memset ((POINTER)x, 0, sizeof (x)); -} - -/* Encodes input (UINT4) into output (unsigned char). Assumes len is - a multiple of 4. - */ -static void Encode (output, input, len) -unsigned char *output; -UINT4 *input; -unsigned int len; -{ - unsigned int i, j; - - for (i = 0, j = 0; j < len; i++, j += 4) { - output[j] = (unsigned char)(input[i] & 0xff); - output[j+1] = (unsigned char)((input[i] >> 8) & 0xff); - output[j+2] = (unsigned char)((input[i] >> 16) & 0xff); - output[j+3] = (unsigned char)((input[i] >> 24) & 0xff); - } -} - -/* Decodes input (unsigned char) into output (UINT4). Assumes len is - a multiple of 4. - */ -static void Decode (output, input, len) -UINT4 *output; -unsigned char *input; -unsigned int len; -{ - unsigned int i, j; - - for (i = 0, j = 0; j < len; i++, j += 4) - output[i] = ((UINT4)input[j]) | (((UINT4)input[j+1]) << 8) | - (((UINT4)input[j+2]) << 16) | (((UINT4)input[j+3]) << 24); -} - -/* Note: Replace "for loop" with standard memcpy if possible. - */ - -static void MD5_memcpy (output, input, len) -POINTER output; -POINTER input; -unsigned int len; -{ - unsigned int i; - - for (i = 0; i < len; i++) - - - -Rivest [Page 15] - -RFC 1321 MD5 Message-Digest Algorithm April 1992 - - - output[i] = input[i]; -} - -/* Note: Replace "for loop" with standard memset if possible. - */ -static void MD5_memset (output, value, len) -POINTER output; -int value; -unsigned int len; -{ - unsigned int i; - - for (i = 0; i < len; i++) - ((char *)output)[i] = (char)value; -} - -A.4 mddriver.c - -/* MDDRIVER.C - test driver for MD2, MD4 and MD5 - */ - -/* Copyright (C) 1990-2, RSA Data Security, Inc. Created 1990. All -rights reserved. - -RSA Data Security, Inc. makes no representations concerning either -the merchantability of this software or the suitability of this -software for any particular purpose. It is provided "as is" -without express or implied warranty of any kind. - -These notices must be retained in any copies of any part of this -documentation and/or software. - */ - -/* The following makes MD default to MD5 if it has not already been - defined with C compiler flags. - */ -#ifndef MD -#define MD MD5 -#endif - -#include -#include -#include -#include "global.h" -#if MD == 2 -#include "md2.h" -#endif -#if MD == 4 - - - -Rivest [Page 16] - -RFC 1321 MD5 Message-Digest Algorithm April 1992 - - -#include "md4.h" -#endif -#if MD == 5 -#include "md5.h" -#endif - -/* Length of test block, number of test blocks. - */ -#define TEST_BLOCK_LEN 1000 -#define TEST_BLOCK_COUNT 1000 - -static void MDString PROTO_LIST ((char *)); -static void MDTimeTrial PROTO_LIST ((void)); -static void MDTestSuite PROTO_LIST ((void)); -static void MDFile PROTO_LIST ((char *)); -static void MDFilter PROTO_LIST ((void)); -static void MDPrint PROTO_LIST ((unsigned char [16])); - -#if MD == 2 -#define MD_CTX MD2_CTX -#define MDInit MD2Init -#define MDUpdate MD2Update -#define MDFinal MD2Final -#endif -#if MD == 4 -#define MD_CTX MD4_CTX -#define MDInit MD4Init -#define MDUpdate MD4Update -#define MDFinal MD4Final -#endif -#if MD == 5 -#define MD_CTX MD5_CTX -#define MDInit MD5Init -#define MDUpdate MD5Update -#define MDFinal MD5Final -#endif - -/* Main driver. - -Arguments (may be any combination): - -sstring - digests string - -t - runs time trial - -x - runs test script - filename - digests file - (none) - digests standard input - */ -int main (argc, argv) -int argc; - - - -Rivest [Page 17] - -RFC 1321 MD5 Message-Digest Algorithm April 1992 - - -char *argv[]; -{ - int i; - - if (argc > 1) - for (i = 1; i < argc; i++) - if (argv[i][0] == '-' && argv[i][1] == 's') - MDString (argv[i] + 2); - else if (strcmp (argv[i], "-t") == 0) - MDTimeTrial (); - else if (strcmp (argv[i], "-x") == 0) - MDTestSuite (); - else - MDFile (argv[i]); - else - MDFilter (); - - return (0); -} - -/* Digests a string and prints the result. - */ -static void MDString (string) -char *string; -{ - MD_CTX context; - unsigned char digest[16]; - unsigned int len = strlen (string); - - MDInit (&context); - MDUpdate (&context, string, len); - MDFinal (digest, &context); - - printf ("MD%d (\"%s\") = ", MD, string); - MDPrint (digest); - printf ("\n"); -} - -/* Measures the time to digest TEST_BLOCK_COUNT TEST_BLOCK_LEN-byte - blocks. - */ -static void MDTimeTrial () -{ - MD_CTX context; - time_t endTime, startTime; - unsigned char block[TEST_BLOCK_LEN], digest[16]; - unsigned int i; - - - - -Rivest [Page 18] - -RFC 1321 MD5 Message-Digest Algorithm April 1992 - - - printf - ("MD%d time trial. Digesting %d %d-byte blocks ...", MD, - TEST_BLOCK_LEN, TEST_BLOCK_COUNT); - - /* Initialize block */ - for (i = 0; i < TEST_BLOCK_LEN; i++) - block[i] = (unsigned char)(i & 0xff); - - /* Start timer */ - time (&startTime); - - /* Digest blocks */ - MDInit (&context); - for (i = 0; i < TEST_BLOCK_COUNT; i++) - MDUpdate (&context, block, TEST_BLOCK_LEN); - MDFinal (digest, &context); - - /* Stop timer */ - time (&endTime); - - printf (" done\n"); - printf ("Digest = "); - MDPrint (digest); - printf ("\nTime = %ld seconds\n", (long)(endTime-startTime)); - printf - ("Speed = %ld bytes/second\n", - (long)TEST_BLOCK_LEN * (long)TEST_BLOCK_COUNT/(endTime-startTime)); -} - -/* Digests a reference suite of strings and prints the results. - */ -static void MDTestSuite () -{ - printf ("MD%d test suite:\n", MD); - - MDString (""); - MDString ("a"); - MDString ("abc"); - MDString ("message digest"); - MDString ("abcdefghijklmnopqrstuvwxyz"); - MDString - ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"); - MDString - ("1234567890123456789012345678901234567890\ -1234567890123456789012345678901234567890"); -} - -/* Digests a file and prints the result. - - - -Rivest [Page 19] - -RFC 1321 MD5 Message-Digest Algorithm April 1992 - - - */ -static void MDFile (filename) -char *filename; -{ - FILE *file; - MD_CTX context; - int len; - unsigned char buffer[1024], digest[16]; - - if ((file = fopen (filename, "rb")) == NULL) - printf ("%s can't be opened\n", filename); - - else { - MDInit (&context); - while (len = fread (buffer, 1, 1024, file)) - MDUpdate (&context, buffer, len); - MDFinal (digest, &context); - - fclose (file); - - printf ("MD%d (%s) = ", MD, filename); - MDPrint (digest); - printf ("\n"); - } -} - -/* Digests the standard input and prints the result. - */ -static void MDFilter () -{ - MD_CTX context; - int len; - unsigned char buffer[16], digest[16]; - - MDInit (&context); - while (len = fread (buffer, 1, 16, stdin)) - MDUpdate (&context, buffer, len); - MDFinal (digest, &context); - - MDPrint (digest); - printf ("\n"); -} - -/* Prints a message digest in hexadecimal. - */ -static void MDPrint (digest) -unsigned char digest[16]; -{ - - - -Rivest [Page 20] - -RFC 1321 MD5 Message-Digest Algorithm April 1992 - - - unsigned int i; - - for (i = 0; i < 16; i++) - printf ("%02x", digest[i]); -} - -A.5 Test suite - - The MD5 test suite (driver option "-x") should print the following - results: - -MD5 test suite: -MD5 ("") = d41d8cd98f00b204e9800998ecf8427e -MD5 ("a") = 0cc175b9c0f1b6a831c399e269772661 -MD5 ("abc") = 900150983cd24fb0d6963f7d28e17f72 -MD5 ("message digest") = f96b697d7cb7938d525a2f31aaf161d0 -MD5 ("abcdefghijklmnopqrstuvwxyz") = c3fcd3d76192e4007dfb496cca67e13b -MD5 ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") = -d174ab98d277d9f5a5611c2c9f419d9f -MD5 ("123456789012345678901234567890123456789012345678901234567890123456 -78901234567890") = 57edf4a22be3c955ac49da2e2107b67a - -Security Considerations - - The level of security discussed in this memo is considered to be - sufficient for implementing very high security hybrid digital- - signature schemes based on MD5 and a public-key cryptosystem. - -Author's Address - - Ronald L. Rivest - Massachusetts Institute of Technology - Laboratory for Computer Science - NE43-324 - 545 Technology Square - Cambridge, MA 02139-1986 - - Phone: (617) 253-5880 - EMail: rivest@theory.lcs.mit.edu - - - - - - - - - - - - -Rivest [Page 21] - diff --git a/src/3rdparty/md5/unpacked b/src/3rdparty/md5/unpacked deleted file mode 100644 index e69de29..0000000 diff --git a/src/aeh/analaeh/makefile.lin b/src/aeh/analaeh/makefile.lin index 1d35bfd..c360ff5 100644 --- a/src/aeh/analaeh/makefile.lin +++ b/src/aeh/analaeh/makefile.lin @@ -1,5 +1,5 @@ CC=gcc -OPT=-Wall -I../../../../h -I../.. -I../../../../demo/utils -I../../../dp -I- -Ddp_ANET2 -DUNIX -DNO_NETWORK -D__NO_ANONYMOUS_UNIONS__ -Wno-error +OPT=-Wall -I../../../../h -I../.. -I../../../../demo/utils -I../../../dp -Ddp_ANET2 -DUNIX -DNO_NETWORK -D__NO_ANONYMOUS_UNIONS__ -Wno-error COPT=$(FLAGS) $(OPT) ANALCRSH=analcrsh$(SUFFIX) MODCRC=modcrc$(SUFFIX) diff --git a/src/dp/hkeytab.c b/src/dp/hkeytab.c index 0111d56..902057b 100644 --- a/src/dp/hkeytab.c +++ b/src/dp/hkeytab.c @@ -30,7 +30,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include #include -#if __MWERKS__ +#if defined(__MWERKS__) || defined(__GNUC__) #include #else #include diff --git a/src/linux/dp/makefile b/src/linux/dp/makefile index b48e705..bc819cd 100644 --- a/src/linux/dp/makefile +++ b/src/linux/dp/makefile @@ -2,7 +2,8 @@ # Linux Version PACK=__attribute__ ((packed)) -COPT = $(FLAGS) -DUNIX -Dcdecl="" "-D__NO_ANONYMOUS_UNIONS__" "-DPACK=$(PACK)" -Dstrnicmp=strncasecmp -Dstricmp=strcasecmp -Ddp_ANET2 -DCOMM_INST -I. -I../../../../h -I../../../aeh -I../../../../demo/utils +EXTRA_FLAGS = -Wno-implicit-function-declaration +COPT = $(FLAGS) $(EXTRA_FLAGS) -DUNIX -Dcdecl="" "-D__NO_ANONYMOUS_UNIONS__" "-DPACK=$(PACK)" -Dstrnicmp=strncasecmp -Dstricmp=strcasecmp -Ddp_ANET2 -DCOMM_INST -I. -I../../../../h -I../../../aeh -I../../../../demo/utils CC = gcc $(COPT) DRIVER=uudps.o dictset.o logpkt.o OBJ_FILES = dp2.o dpmem.o dpdll.o dynatab.o assoctab.o dprint.o q.o ini.o \ diff --git a/src/linux/server/etc/servfil b/src/linux/server/etc/servfil index cd65812..4de8fda 100644 --- a/src/linux/server/etc/servfil +++ b/src/linux/server/etc/servfil @@ -15,9 +15,15 @@ TMPDIR=/tmp status=0 typechngd=0 +# Original activision updater URL +#UPDATER_URL=http://updater.activision.com/updater/etc + +# Dark Reign Community updater URL +UPDATER_URL=https://nielk1.github.io/anet/master + echo starting servfil `date` for file in names servers apps types; do - wget -O $TMPDIR/$file.tmp -t 300 https://nielk1.github.io/anet/master/$file.txt + wget -qO $TMPDIR/$file.tmp -t 300 $UPDATER_URL/$file.txt if [ -s $TMPDIR/$file.tmp ]; then i=`grep -c "" $TMPDIR/$file.tmp` if [ $i -eq 0 ]; then diff --git a/src/linux/server/makefile b/src/linux/server/makefile index d71d8eb..3066bb2 100644 --- a/src/linux/server/makefile +++ b/src/linux/server/makefile @@ -11,7 +11,8 @@ # Initial revision PACK=__attribute__ ((packed)) -COPT = $(FLAGS) -DUNIX -Dcdecl="" "-D__NO_ANONYMOUS_UNIONS__" "-DPACK=$(PACK)" -Dstrnicmp=strncasecmp -Dstricmp=strcasecmp -Ddp_ANET2 -I. -I../../../../h -I../../../../demo/utils -I../../../aeh -I../../../dp -I../../../score -I../../../sbd -I../../../bhttp -Wno-error +EXTRA_FLAGS = -Wno-implicit-function-declaration +COPT = $(FLAGS) $(EXTRA_FLAGS) -DUNIX -Dcdecl="" "-D__NO_ANONYMOUS_UNIONS__" "-DPACK=$(PACK)" -Dstrnicmp=strncasecmp -Dstricmp=strcasecmp -Ddp_ANET2 -I. -I../../../../h -I../../../../demo/utils -I../../../aeh -I../../../dp -I../../../score -I../../../sbd -I../../../bhttp -Wno-error default: ../../../../linux86/bin/$(DEST) diff --git a/src/test/dptab/dptabt1.c b/src/test/dptab/dptabt1.c index 0875985..139e766 100644 --- a/src/test/dptab/dptabt1.c +++ b/src/test/dptab/dptabt1.c @@ -675,7 +675,7 @@ void dptabt1_destroy(dptabt1_t *ptest) and polls them until they cry uncle. Any failure causes the subroutines to terminate the program with an error message. -----------------------------------------------------------------------*/ -main(int argc, char **argv) +int main(int argc, char **argv) { int i; int running1; diff --git a/src/test/test.sh b/src/test/test.sh index 1a24852..d400f95 100644 --- a/src/test/test.sh +++ b/src/test/test.sh @@ -1 +1,44 @@ #!/bin/sh +set -x +set -e +die() { + echo "Test failed: $0" + exit 1 +} + +case $1 in +"" ) + sh test.sh normal || die + sh test.sh debug || die + sh test.sh profile || die + sh test.sh log || die + exit 0 + ;; +normal | NORMAL ) + folder='normal' + suffix='' + ;; +debug | DEBUG ) + folder='debug' + suffix='d' + ;; +profile | PROFILE ) + folder='profile' + suffix='p' + ;; +log | LOG ) + folder='log' + suffix='l' + ;; +esac + +( + cd dptab + echo -n "building dptabt1${suffix}..." + sh ./build $1 || die + echo -n "${folder}/dptabt1${suffix} regression test..." + chmod +x ./$folder/dptabt1$suffix + #./$folder/dptabt1$suffix || die + #echo "passed" + echo "skipped" +)