From d6e6f65a1cf8723a398689b549dd970121655053 Mon Sep 17 00:00:00 2001 From: Andreas Baumann Date: Sun, 19 Apr 2015 21:08:54 +0200 Subject: integrated libcaptcha and working on captcha in login form --- 3rdParty/CMakeLists.txt | 3 + 3rdParty/captcha/LICENSE | 22 +++++ 3rdParty/captcha/Makefile | 209 +++++++++++++++++++++++++++++++++++++++++++++ 3rdParty/captcha/captcha.c | 193 +++++++++++++++++++++++++++++++++++++++++ 3rdParty/captcha/font.h | 58 +++++++++++++ 3rdParty/captcha/logo.gif | Bin 0 -> 17646 bytes 3rdParty/captcha/test.c | 18 ++++ 3rdParty/captcha/unfont.c | 58 +++++++++++++ 8 files changed, 561 insertions(+) create mode 100644 3rdParty/CMakeLists.txt create mode 100644 3rdParty/captcha/LICENSE create mode 100644 3rdParty/captcha/Makefile create mode 100644 3rdParty/captcha/captcha.c create mode 100644 3rdParty/captcha/font.h create mode 100644 3rdParty/captcha/logo.gif create mode 100644 3rdParty/captcha/test.c create mode 100644 3rdParty/captcha/unfont.c (limited to '3rdParty') diff --git a/3rdParty/CMakeLists.txt b/3rdParty/CMakeLists.txt new file mode 100644 index 0000000..55b2953 --- /dev/null +++ b/3rdParty/CMakeLists.txt @@ -0,0 +1,3 @@ +cmake_minimum_required(VERSION 2.6 FATAL_ERROR) + +add_subdirectory(captcha) diff --git a/3rdParty/captcha/LICENSE b/3rdParty/captcha/LICENSE new file mode 100644 index 0000000..c5995d5 --- /dev/null +++ b/3rdParty/captcha/LICENSE @@ -0,0 +1,22 @@ + http://brokestream.com/captcha.html + + Copyright (C) 2009 Ivan Tikhonov + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Ivan Tikhonov, kefeer@brokestream.com + diff --git a/3rdParty/captcha/Makefile b/3rdParty/captcha/Makefile new file mode 100644 index 0000000..17b9314 --- /dev/null +++ b/3rdParty/captcha/Makefile @@ -0,0 +1,209 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.2 + +# Default target executed when no arguments are given to make. +default_target: all +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. +.NOTPARALLEL: + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/abaumann/strusCms + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/abaumann/strusCms + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake cache editor..." + /usr/bin/ccmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache +.PHONY : edit_cache/fast + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..." + /usr/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache +.PHONY : rebuild_cache/fast + +# The main all target +all: cmake_check_build_system + cd /home/abaumann/strusCms && $(CMAKE_COMMAND) -E cmake_progress_start /home/abaumann/strusCms/CMakeFiles /home/abaumann/strusCms/3rdParty/captcha/CMakeFiles/progress.marks + cd /home/abaumann/strusCms && $(MAKE) -f CMakeFiles/Makefile2 3rdParty/captcha/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/abaumann/strusCms/CMakeFiles 0 +.PHONY : all + +# The main clean target +clean: + cd /home/abaumann/strusCms && $(MAKE) -f CMakeFiles/Makefile2 3rdParty/captcha/clean +.PHONY : clean + +# The main clean target +clean/fast: clean +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + cd /home/abaumann/strusCms && $(MAKE) -f CMakeFiles/Makefile2 3rdParty/captcha/preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + cd /home/abaumann/strusCms && $(MAKE) -f CMakeFiles/Makefile2 3rdParty/captcha/preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + cd /home/abaumann/strusCms && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +# Convenience name for target. +3rdParty/captcha/CMakeFiles/captcha.dir/rule: + cd /home/abaumann/strusCms && $(MAKE) -f CMakeFiles/Makefile2 3rdParty/captcha/CMakeFiles/captcha.dir/rule +.PHONY : 3rdParty/captcha/CMakeFiles/captcha.dir/rule + +# Convenience name for target. +captcha: 3rdParty/captcha/CMakeFiles/captcha.dir/rule +.PHONY : captcha + +# fast build rule for target. +captcha/fast: + cd /home/abaumann/strusCms && $(MAKE) -f 3rdParty/captcha/CMakeFiles/captcha.dir/build.make 3rdParty/captcha/CMakeFiles/captcha.dir/build +.PHONY : captcha/fast + +# Convenience name for target. +3rdParty/captcha/CMakeFiles/unfont.dir/rule: + cd /home/abaumann/strusCms && $(MAKE) -f CMakeFiles/Makefile2 3rdParty/captcha/CMakeFiles/unfont.dir/rule +.PHONY : 3rdParty/captcha/CMakeFiles/unfont.dir/rule + +# Convenience name for target. +unfont: 3rdParty/captcha/CMakeFiles/unfont.dir/rule +.PHONY : unfont + +# fast build rule for target. +unfont/fast: + cd /home/abaumann/strusCms && $(MAKE) -f 3rdParty/captcha/CMakeFiles/unfont.dir/build.make 3rdParty/captcha/CMakeFiles/unfont.dir/build +.PHONY : unfont/fast + +captcha.o: captcha.c.o +.PHONY : captcha.o + +# target to build an object file +captcha.c.o: + cd /home/abaumann/strusCms && $(MAKE) -f 3rdParty/captcha/CMakeFiles/captcha.dir/build.make 3rdParty/captcha/CMakeFiles/captcha.dir/captcha.c.o +.PHONY : captcha.c.o + +captcha.i: captcha.c.i +.PHONY : captcha.i + +# target to preprocess a source file +captcha.c.i: + cd /home/abaumann/strusCms && $(MAKE) -f 3rdParty/captcha/CMakeFiles/captcha.dir/build.make 3rdParty/captcha/CMakeFiles/captcha.dir/captcha.c.i +.PHONY : captcha.c.i + +captcha.s: captcha.c.s +.PHONY : captcha.s + +# target to generate assembly for a file +captcha.c.s: + cd /home/abaumann/strusCms && $(MAKE) -f 3rdParty/captcha/CMakeFiles/captcha.dir/build.make 3rdParty/captcha/CMakeFiles/captcha.dir/captcha.c.s +.PHONY : captcha.c.s + +unfont.o: unfont.c.o +.PHONY : unfont.o + +# target to build an object file +unfont.c.o: + cd /home/abaumann/strusCms && $(MAKE) -f 3rdParty/captcha/CMakeFiles/unfont.dir/build.make 3rdParty/captcha/CMakeFiles/unfont.dir/unfont.c.o +.PHONY : unfont.c.o + +unfont.i: unfont.c.i +.PHONY : unfont.i + +# target to preprocess a source file +unfont.c.i: + cd /home/abaumann/strusCms && $(MAKE) -f 3rdParty/captcha/CMakeFiles/unfont.dir/build.make 3rdParty/captcha/CMakeFiles/unfont.dir/unfont.c.i +.PHONY : unfont.c.i + +unfont.s: unfont.c.s +.PHONY : unfont.s + +# target to generate assembly for a file +unfont.c.s: + cd /home/abaumann/strusCms && $(MAKE) -f 3rdParty/captcha/CMakeFiles/unfont.dir/build.make 3rdParty/captcha/CMakeFiles/unfont.dir/unfont.c.s +.PHONY : unfont.c.s + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... edit_cache" + @echo "... rebuild_cache" + @echo "... captcha" + @echo "... unfont" + @echo "... captcha.o" + @echo "... captcha.i" + @echo "... captcha.s" + @echo "... unfont.o" + @echo "... unfont.i" + @echo "... unfont.s" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + cd /home/abaumann/strusCms && $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/3rdParty/captcha/captcha.c b/3rdParty/captcha/captcha.c new file mode 100644 index 0000000..7881b90 --- /dev/null +++ b/3rdParty/captcha/captcha.c @@ -0,0 +1,193 @@ + +const int gifsize; +void captcha(unsigned char im[70*200], unsigned char l[6]); +void makegif(unsigned char im[70*200], unsigned char gif[gifsize]); + +#include +#include +#include +#include + +static int8_t *lt[]; +const int gifsize=17646; + +void makegif(unsigned char im[70*200], unsigned char gif[gifsize]) { + // tag ; widthxheight ; GCT:0:0:7 ; bgcolor + aspect // GCT + // Image Separator // left x top // widthxheight // Flags + // LZW code size + memcpy(gif,"GIF89a" "\xc8\0\x46\0" "\x83" "\0\0" + "\x00\x00\x00" + "\x10\x10\x10" + "\x20\x20\x20" + "\x30\x30\x30" + "\x40\x40\x40" + "\x50\x50\x50" + "\x60\x60\x60" + "\x70\x70\x70" + "\x80\x80\x80" + "\x90\x90\x90" + "\xa0\xa0\xa0" + "\xb0\xb0\xb0" + "\xc0\xc0\xc0" + "\xd0\xd0\xd0" + "\xe0\xe0\xe0" + "\xff\xff\xff" + "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",13+48+10+1); + + int x,y; + unsigned char *i=im; + unsigned char *p=gif+13+48+10+1; + for(y=0;y<70;y++) { + *p++=250; // Data length 5*50=250 + for(x=0;x<50;x++) + { + unsigned char a=i[0]>>4,b=i[1]>>4,c=i[2]>>4,d=i[3]>>4; + + p[0]=16|(a<<5); // bbb10000 + p[1]=(a>>3)|64|(b<<7); // b10000xb + p[2]=b>>1; // 0000xbbb + p[3]=1|(c<<1); // 00xbbbb1 + p[4]=4|(d<<3); // xbbbb100 + i+=4; + p+=5; + } + } + + // Data length // End of LZW (b10001) // Terminator // GIF End + memcpy(gif+gifsize-4,"\x01" "\x11" "\x00" ";",4); +} + +static const int8_t sw[200]={0, 4, 8, 12, 16, 20, 23, 27, 31, 35, 39, 43, 47, 50, 54, 58, 61, 65, 68, 71, 75, 78, 81, 84, 87, 90, 93, 96, 98, 101, 103, 105, 108, 110, 112, 114, 115, 117, 119, 120, 121, 122, 123, 124, 125, 126, 126, 127, 127, 127, 127, 127, 127, 127, 126, 126, 125, 124, 123, 122, 121, 120, 119, 117, 115, 114, 112, 110, 108, 105, 103, 101, 98, 96, 93, 90, 87, 84, 81, 78, 75, 71, 68, 65, 61, 58, 54, 50, 47, 43, 39, 35, 31, 27, 23, 20, 16, 12, 8, 4, 0, -4, -8, -12, -16, -20, -23, -27, -31, -35, -39, -43, -47, -50, -54, -58, -61, -65, -68, -71, -75, -78, -81, -84, -87, -90, -93, -96, -98, -101, -103, -105, -108, -110, -112, -114, -115, -117, -119, -120, -121, -122, -123, -124, -125, -126, -126, -127, -127, -127, -127, -127, -127, -127, -126, -126, -125, -124, -123, -122, -121, -120, -119, -117, -115, -114, -112, -110, -108, -105, -103, -101, -98, -96, -93, -90, -87, -84, -81, -78, -75, -71, -68, -65, -61, -58, -54, -50, -47, -43, -39, -35, -31, -27, -23, -20, -16, -12, -8, -4}; + + +#define MAX(x,y) ((x>y)?(x):(y)) + +static int letter(int n, int pos, unsigned char im[70*200], unsigned char swr[200], uint8_t s1, uint8_t s2) { + int8_t *p=lt[n]; + unsigned char *r=im+200*16+pos; + unsigned char *i=r; + int sk1=s1+pos; + int sk2=s2+pos; + int mpos=pos; + int row=0; + for(;*p!=-101;p++) { + if(*p<0) { + if(*p==-100) { r+=200; i=r; sk1=s1+pos; row++; continue; } + i+=-*p; + continue; + } + + if(sk1>=200) sk1=sk1%200; + int skew=sw[sk1]/16; + sk1+=(swr[pos+i-r]&0x1)+1; + + if(sk2>=200) sk2=sk2%200; + int skewh=sw[sk2]/70; + sk2+=(swr[row]&0x1); + + unsigned char *x=i+skew*200+skewh; + mpos=MAX(mpos,pos+i-r); + + if((x-im)<70*200) *x=(*p)<<4; + i++; + } + return mpos; +} + +#define NDOTS 100 + +uint32_t dr[NDOTS]; + +static void line(unsigned char im[70*200], unsigned char swr[200], uint8_t s1) { + int x; + int sk1=s1; + for(x=0;x<199;x++) { + if(sk1>=200) sk1=sk1%200; + int skew=sw[sk1]/16; + sk1+=swr[x]&0x3+1; + unsigned char *i= im+(200*(45+skew)+x); + i[0]=0; i[1]=0; i[200]=0; i[201]=0; + } +} + +static void dots(unsigned char im[70*200]) { + int n; + for(n=0;n0xf0 && i[1]<0xf0) { o[0]=0; o[1]=0; } + else if(i[0]<0xf0 && i[1]>0xf0) { o[0]=0; o[1]=0; } + + i++; + o++; + } + } + + memmove(im,om,sizeof(om)); +} + +static const char *letters="abcdafahijklmnopqrstuvwxyz"; + +void captcha(unsigned char im[70*200], unsigned char l[6]) { + unsigned char swr[200]; + uint8_t s1,s2; + + int f=open("/dev/urandom",O_RDONLY); + read(f,l,5); read(f,swr,200); read(f,dr,sizeof(dr)); read(f,&s1,1); read(f,&s2,1); + close(f); + + memset(im,0xff,200*70); s1=s1&0x7f; s2=s2&0x3f; l[0]%=25; l[1]%=25; l[2]%=25; l[3]%=25; l[4]%=25; l[5]=0; + int p=30; p=letter(l[0],p,im,swr,s1,s2); p=letter(l[1],p,im,swr,s1,s2); p=letter(l[2],p,im,swr,s1,s2); p=letter(l[3],p,im,swr,s1,s2); letter(l[4],p,im,swr,s1,s2); + dots(im); blur(im); filter(im); line(im,swr,s1); + l[0]=letters[l[0]]; l[1]=letters[l[1]]; l[2]=letters[l[2]]; l[3]=letters[l[3]]; l[4]=letters[l[4]]; +} + +#ifdef CAPTCHA + +int main() { + char l[6]; + unsigned char im[70*200]; + unsigned char gif[gifsize]; + + captcha(im,l); + makegif(im,gif); + + write(1,gif,gifsize); + write(2,l,5); + + return 0; +} + +#endif + +#include "f.h" diff --git a/3rdParty/captcha/font.h b/3rdParty/captcha/font.h new file mode 100644 index 0000000..bd05d8f --- /dev/null +++ b/3rdParty/captcha/font.h @@ -0,0 +1,58 @@ +int width=1327; +int height=52; + +char colors[9]={0xc,0xd,0x5,0,0x3,0xb,0x1,0x7,0x9}; + +static char *im[] = { +" a a a a a a a a a a a a a a a a a a a a a a a a a ", +" a a a a a a a a a a a a a a a a a a a a a a a a a ", +" a bcde a a a a a a a a a a a a a a a a a a a a a a a a ", +" a fgdddh a a a a a a a a a a fhf a a a a a a a a a a a a a a ", +" a hddddde a a fed a a biegdgcb a a bhgi a cgdef a cdgcb a igb a feddc a a a a a a a a a a a a a a ", +" a beddddddc a a beddd a a hddddddde a a bhddde a hdddddf a cddddg a bcdddf a cddddc a a a a a a a a a a a a a a ", +" a gdddddddi a a ieddddd a a eddddddddg a a hdddddc a gdddddc a gdddddb a bcdddddf a fgdddddh a a a a a a a a a a a a a a ", +" a gdddddddb a a eddddddd a a cddddddddde a a gddddddh a ddddddc a dddddd a bgddddddf a hdddddddh a a a a a a a a a a a a a a ", +" a bedddddg a a dddddddd a a bddebigddddf a a eddddddh a cdddddf a cdddde a edddddddf a ddddddddi a a a a a a a a a a a a a a ", +" a cddddc a a igdddddd a a iddb bcdgi a a bhdddddi a hddei a hgdcb a feddddddf a hdddddddi a a a a a a a a a a a a a a ", +" a ddddi a a bcdddd a a cdd a a cddddi a b a a bdddddf a igddddi a a a a a a a a cdc a a a a a a ", +" a ddddf a a gddd a a gdg a a fddddi a a a iddddf a fddddf a a a a a a a a bdddh a a a a a a ", +" a ddddf a a eddd a a gdd a a ddddi a a a ddddf a ddddf a a a a a a a a hdddi a a a a a a ", +" a ddddi a a gddd a a ddd a a ddddf a a a ddddf a ddddf a a a a a a a a edddb a a a a a a ", +" a ddddf a a dddd a a dddb a a ddddf a a a ddddf a ddddf a a a a a a a a fdddd a a a a a a ", +" a ddddf a a bdddd a a dddi a a ddddf a a a ddddf a ddddf a a a a a a a a edddd a a a a a a ", +" a ddddf a a bdddd a a dddh a a ddddf a a a ddddf a ddddf a a a a fh a hf a a a cddddg a bigdb fcgc a a b a a a ", +" fhcegdddgehb a ddddebicegddgeci a bhegddgehb a fcegddgcibbdddd a bcggdgeib a dddc a fhegddgehb bhchf a ddddf a fedi a bhedb a ddddf a ddddf a fcd hgdei a bhedb bhgddeh a bhegddgci a feddhfcedddgci a fcgddgcf cde a bcde iegdde a bhgdgeifiib a edddddh a feddddf fcddddg a bigeb bgddddgei a cddgggeech hdddddddddf eddddddgef a a bb bbfffb ffffffffb a ", +" feddddddddddddi a ddddddddddddddddgb a iddddddddddcb a beddddddddddedddd a cdddddddddi a bhddddi bfb a feddddddddddcbbcddddd a ddddf fcgdgh a iedddi a hddddf a ddddf a ddddf a hdddb fcggdgh fedddddc a cdddd bedddddddh a hdddddddddgh a feddddddddddddddc a beddddddddgfbcddg a fedddd hdddddddc a bgdddddddddc a bgddddddgf a beddddddf hgddddddh a gdddddddddg gddddddddi a cdddddddgh iddddddddgf igddddddgb a bb bicgdgcb a edddddddddde gddddddddg a bgddddddddddddddddh ", +" hddddddeifieddddb a dddddcb bficddddgb a bedddcbbhdddddgb a bgddddcf bfedddddd a fgddef bhgdddi a edddddddddddddi a idddcb biedddddddddddg a ddddf bedddddde a fgdddddh a hgdddddf a ddddf eddddddddde a ddddf a fgddddf igdddddddi bcddddddddh a hgddddd hddddddddddb a fgddgib bfcdddeb a bcdddddddghfb bedddc a bgddgcf feddddde a idddddd eddddddddg a gdcb bfedddg a edddddddddddddcb a cdddddddf cddddddddf a edddddddddc eddddddddb a bcdddddb bcddddde iddddc a eddddddddgh gdddddddddg a hddddddddddc eddddddddi a gddddddddddddddddde ", +" idddddde edddh a ddddg bgdddc a bgdddi hdddddg a bgddddh fddddd a idddgb eddg a edddddddddddddi a fdddc cdddddfbiedi a ddddf hdddddddddi a gddddddh a bdddddddf a ddddf cdddddddghb a ddddf a beddddddhbedddgddddddh bhdddddddddddf a gddddddbigdcfb feddddi a fdddeb bgdddb a gddddddde hdddh a bgdde eddddc a dddddddfedddddddddg a idg idddb a gdddddddddddddc a fgddddddf iddddddddf a iedddddcb biddddgf a cdddd fddddi iddi a gddddddddgf hdddddddddc a fcddddddf fddddghb a dddddeifb eddddddgb ", +" cdddddgb idddg a edddc bddddf a bgdddi cdddddb a eddddi fdddd a iddddb fdddi a fb hddddc bfb a bddddb gddddb a ddddffedcf bigddde a gddddddi a fedddddf a ddddf idddgi a ddddf a edddddddgddcf fdddddddeibb hddddc a bedddddggh eddde a fdddgb bdddc a gdddddddf hdddb a bgdddb hddddc a edddddddddddddddddi a edi fgdi a iddddhb a fgddddf bhedddddf a hdddd hddc a gdddb fddde de a bhddddddb bcddddcib a fddddd iddgb a idddcb cdddddh ", +" hddddgb bdddd a ddddi hdddc a cddde gddde a iddddh fdddd a bddddi dddg a ddddf a gdddh hddddh a ddddedgf gdddb a fdddddi a iddddf a ddddf bgddh a ddddf a bedddddddhb edddddi cdddg a gddddh bdddg a ddddi cdddf a fcdddddf gdde a edddc fddddh a hddddddhb fhegef a dd bgc a ddddf a iddddf iddddf a ddddi idc a hdddf bddddb idf a bedddde bddcb a hddddb iddb a eddf idddddf ", +" igdcb ddddb a gdddf bdddd a bddddf bede a gddddb fdddd a cddddb edddf a ddddf a ddddi fdddde a dddddc fdddf a hddddf a gdddf a ddddf cdeb a ddddf a fddddde iddddh fdddd a hdddd gddd a hdddg bdddg a hddddf cdddf a iddddf bddddi a edddde a ddf bf a gdddf a fddddf ddddf a cdddg cdf a bdddh fddddh gg a eddddc hdh a gdddi cdc a gdf bgddddf ", +" ddddf a edddf edddf a hdddg a fdddde fdddd a ddddd bgdddc a ddddf a ddddf ddddg a ddddf dddh a ddddb a edddf a ddddf cdc a ddddf a eddddh bdddd fdddd a idddd gdddb a gdddc gdddi a iddddf idddc a edddd bddddi a hddddi a bddgb a gdddf a bddddf ddddf a fddddi dg a cddg hdddde cf a eddddf fdi a hddde gdb a b cddddh ", +" ddddf a gdddf hdddh a cdddc a cddddb fdddd a idddddef bfgddddg a ddddf a ddddf ddddd a ddddb dddh a gddd a cdddf a ddddf cgf a ddddf a hddddf dddd fdddg a fdddd edddb a fddddf cddde a fddddf fddddb a gdddg ddddi a fddddb a bdddgi a ddddf a ddddf ddddf a gddde idh a fdddi gdddddb a cdddg fdh a bddddb fdg a iddddc ", +" ddddf a ddddf iddde a edddi a eddde fdddd a cddddddddddddddddddd a ddddf a ddddi bddddg a ddddf dddh a gdddb a cdddf a ddddf feg a ddddf a fddddf dddd fddde a fdddd cdddf a hddddb idddd a fddddf bddddf a dddde ddddf a bdddd a ddddddci a ddddf a ddddf ddddf a hddddb edb a ddde idebdddh c a edddgffdh a cdddh hdh a bgdddg ", +" bcddddf a ddddf fdddg a gdddf a ddddh fdddd a edddddddddddddddddde a ddddf a edddc iddddh a ddddf dddh a gdddb a cdddf a ddddf feddg a ddddf a bddddf bdddd fdddc a fdddd edddf a eddddb fdddd a bddddf ddddf a ddddc ddddf a dddd a cdddddddghb a ddddf a ddddf ddddf a bddddh bde a edddb gdf edde g a bgdddddh a fddde gdf a eddddb ", +" bicgddddddf a ddddf fdddg a ddddf a ddddf fdddd a gdddgb a ddddf a bgdddb cddddb a ddddb dddi a ddddf a cdddf a ddddfidddddf a ddddf a bddddf fdddd fdddc a fdddd gdddf a gdddd fdddg a bddddf ddddf a ddddi ddddf a ddddb a bddddddddddi a ddddf a ddddf ddddf a edddg hdf a idddi fde hdddb fg a bgddddi a gdddb bde a iddddi ", +" bhegddddggddddf a ddddf fdddd a ddddf a ddddf fdddd a ddddf a ddddf a fdddeb hddddf a ddddb dddi a ddddf a edddf a ddddddgdddde a ddddf a ddddb idddd fdddc a fdddd ddddf a ddddd fdddg a bddddf ddddf a ddddf ddddf a ddddb a bgdddddddddh a gdddf a ddddf ddddf a iddddi dg a bddde cdi bdddh ce a fddddg a hdddh hdi a bddddc ", +" bcdddddcib ddddf a ddddf idddd a ddddf a ddddf fdddd a ddddf a ddddf a hdddgib bhdddgf a dddd dddf a ddddf a edddf a dddddi fgdddi a ddddf a ddddb fdddd fddde a fdddd ddddf a dddddb fdddd a ddddf ddddb a ddddf ddddf a ddddb a fcddddddddh a edddf a ddddf ddddf a bdddde hdh a edddb gg dddg gh a dddddh a bddde gg a edddgb ", +" bgddddh ddddf a ddddf hddde a ddddi a gdddi fdddd a gdddi a ddddf a bdddddddddddcb a dddg dddb a ddddf a gdddf a ddddc edddf a ddddf a ddddb fdddd fdddd a fdddd gdddf a gddddb idddg a ddddf ddddb a gdddf ddddf a ddddf a icddddddb a cdddf a ddddf ddddf a cddddf gdb a idddc bdh cdddi idb a iddddddf a cdddb idh a iddddf ", +" bgddddb ddddf a ddddf edddh a gdddc a edddh fdddd a edddh a ddddf a bddddddgeci a dddg dddb a ddddf a gdddb a ddddf bgdddb a ddddf a bdddg bdddd fdddd a fdddd edddf a cddddf cddde a ddddb dddd a edddi ddddf a ddddf a bhddddh a edddf a ddddf ddddf a fddddg idc a gdddb hg fdddg ge a idcbedddgb a fdddebgdb a bddddh ", +" cddddc ddddf a ddddf ddddf a cddddb a hddde fdddd a hdddc a ddddf a bcdf a ddde ddd a ddddf a gdddb a ddddf fdddgb a ddddf a fdddb dddd fdddd a fdddd edddf a iddddi edddh a dddi ddde a hdddc ddddf a ddddf a bedde a edddf a gdddf bddddf a gddddc gdf a hdddgbgc gdddbidi a fde bgdddgb a gddddde a gddde ", +" dddddf ddddf a ddddf iddde a fddddh a bddddb bdddd a bddddf a ddddf a bgdd a ddde ddd a ddddf a gdddb a ddddf eddde a ddddf a dddf dddd fdddd a fddddb cdddf a gdddc ddddf a ddde dddi a fdddd ddddf a ddddf a ddd a gdddi a gdddf cddddf a hddddddde a bddddddf hdddgdg a fdeb bgdddgb a idddddi a cddddb bede ", +" dddddb bddddf a ddddi edddf a eddddb a edddc dddd a cdddgb a ddddf a edddghb a ddde ddd a ddddf a gdddb a ddddf fddddh a ddddf a bddde bddddb idddd a fddddb cdddf a iddde bddde a ddddb dddb a gdddh fddddf a ddddf a hc gdd a ddddc a cdddh hdddddf a bdddddddi a edddde bdddddi a idgb fddddgb a gdddg a hddddi idddd ", +" gdddd idddddi i a dddde fdddc a fdddde i a bddddf dddd a bgdddgb bf a ddddf a dddddddgehifb a ddde bdddb a bddddh a gdddb a ddddf eddddh a ddddf a hddddb fddddf hddddb a fddddi cdddi a edddb hdddf a ddddf cddd a iddddb iddddf a ddddf a gdc gde a ddddg a hddddb bcddddddf a edddddg a iddddc eddddb a iddh iddddgf a cdddh a idddde feddddc ", +" cddddeb fedddddddibec a bdddddi fgdde a hddddeb ige a hdddgb bddddb a fddddgb bgg a ddddh a cdddddddddddddgecf a dddg bdddf a bddddg a gddd a bddddf bdddddh a ddddh a eddddi cddddc cddddh a hddddc edddh a bgdde bdddh a ddddf hdddh a edddgb cddddf a ddddi a ddde ddi a gddddf a bddddgf bfcddhcddddeb a idddddh a bddddf idddg a cdddb hdddddi a idddb a idddddh bfihgdddddg ", +" bddddddggdddgfiddddddgb a hddddddhb biedddeb a cddddgi ieddf a cdddgf cddddi a fdddddhb fhddi a bcdddddhb a fhgddddddddddddddgf a idddd fdddc a hdddddi a gddd a beddddh iddddddef a cdddddb a bedddddgf idddddde fgddddgb a bgddddgf fcdddddei a bgddeb bgddc a ddddc iddde a bedddgib bhdddddf a beddddgb a gdddeb cde a eddddgb icge a edddddddddeb ddddddh a dddddb a eddd eddc a beddddb bddddddc a bdde a gddddddddddddddddddi ", +" fgddddddddc idddddf a bddcbfgdddddddddh a cddddddgggddddf a cddddeib bfgdddddddc a fgdddddgggddddh a cdddddddddddgf a bddddddddddddddddi a hdddddcb beddddh a hdddddddde a gddg a gddddddddge dddddddddde a igdddddddgi a fddddddddde eddddddddc gddddddddi a gdddddddde eddddddddde a bgddghb idddh a dddddefb idddg a igdddddgddddddddf a eddddddddddb a hddddghfbbiedgb a iddddddddddc a fdddddddgi ddddddd a cdddg a fddh bggb a iegddddddgf fgdddddddgeb a ddi a ddddddddddddddddddd ", +" bhedddehb idgei a if hegddgcib a igdddddddddeb a igddddddddedddddddgb a bcdddddddddgi a hgddddddddgehb a igdeibbfhedddddddddb a cdddddddde gddddddgef a icggddggec a gdde a hgddddddddh eddddddggci a cgdddddddgf a bgdddddddgi gdddddddgc gddddddddh a ddddddddde cgddddddddg a hdddddddddef a ddddchdddggdddgb a fhegddci bddddf a cgddddddddeb a bdddddddddddeb a cddddddddc a bcgdgei egehifb a bgddh a ff a eddddddddde fcegdddggec a dg a hchifbb bbficgdddgf ", +" a a fhegdgehf a iegddehb fgdgchf a bhedddgci a a hgddi fhedddddc a a a dddc a a a a a bheddddef a ddddf icgddeh a ddddb a a ceihegddgcf a iegddgcf a a fgc a a bbbb a bdh a ", +" a a a b a a a iddde fgddg a a a dddh a a a a a a ddddf a ddddb a a a a a a a a hdf a ", +" a a a a a a gdddi ddd a a a dddf a a a a a a ddddf a ddddb a a a a a a a a gd a ", +" a a a a a a ddddi bddg a a a fdddccddc a a a a a a ddddf a ddddb a a a a a a a a hdgh fde a ", +" a a a a a a edddg hddc a a a edddddde a a a a a a ddddh a bddddb a a a a a a a a fddddgibfgdi a ", +" a a a a a a fddddc fdddb a a a dddddddb a a a a a a dddde a iddddf a a a a a a a a eddddddddde a ", +" a a a a a a fgdddghfb bbficegddeb a a a gdddddf a a a a a a hdddddi a gddddc a a a a a a a a dddddddddgb a ", +" a a a a a a iedddddddddddddgi a a a beddef a a a a a a cddddddddddc a hcgddddddgei a a a a a a a a hdddddddgb a ", +" a a a a a a iheggddggehf a a a a a a a a a egdddddddddc a bgddddddddddh a a a a a a a a ieddgeh a ", +" a a a a a a a a a a a a a a a b a a a a a a a a a a ", +" a a a a a a a a a a a a a a a a a a a a a a a a a "}; diff --git a/3rdParty/captcha/logo.gif b/3rdParty/captcha/logo.gif new file mode 100644 index 0000000..fd9c504 Binary files /dev/null and b/3rdParty/captcha/logo.gif differ diff --git a/3rdParty/captcha/test.c b/3rdParty/captcha/test.c new file mode 100644 index 0000000..e46308c --- /dev/null +++ b/3rdParty/captcha/test.c @@ -0,0 +1,18 @@ +const int gifsize; +void captcha(unsigned char im[70*200], unsigned char l[6]); +void makegif(unsigned char im[70*200], unsigned char gif[gifsize]); + +int main() { + char l[6]; + unsigned char im[70*200]; + unsigned char gif[gifsize]; + + captcha(im,l); + makegif(im,gif); + + write(1,gif,gifsize); + write(2,l,5); + + return 0; +} + diff --git a/3rdParty/captcha/unfont.c b/3rdParty/captcha/unfont.c new file mode 100644 index 0000000..724f7a8 --- /dev/null +++ b/3rdParty/captcha/unfont.c @@ -0,0 +1,58 @@ +#include +#include "font.h" + +void copy(int s, int e, int idx) { + int r,i; + for(i=s;is;i--) { + for(r=0;r<50;r++) { + if(im[r][i]!=' ') goto go; + } + } + + go: e=i+1; + + printf("static int8_t lt%u[]={",idx); + + for(r=0;r<50;r++) { + int l=0; + for(i=s;i