1.8.8 init

This commit is contained in:
Todd A Ouska
2011-02-05 11:14:47 -08:00
commit 6b88eb05b1
225 changed files with 60614 additions and 0 deletions

9
swig/PythonBuild.sh Executable file
View File

@@ -0,0 +1,9 @@
#!/bin/bash
echo
swig -python cyassl.i
pythonIncludes=`python-config --includes`
pythonLibs=`python-config --libs`
gcc -c -fpic cyassl_wrap.c -I$pythonIncludes -I/usr/local/cyassl/include -DHAVE_CONFIG_H
gcc -c -fpic cyassl_adds.c -I/usr/local/cyassl/include
gcc -shared -flat_namespace cyassl_adds.o cyassl_wrap.o -lcyassl -L/usr/local/cyassl/lib $pythonLibs -o _cyassl.so
python runme.py

44
swig/README Normal file
View File

@@ -0,0 +1,44 @@
Initial swig interface file
Please send questions to support@yassl.com
**Python Support**
For Linux, OS X, or *nix
1) build CyaSSL with fpic on Linux, not needed on OS X
./configure --disable-shared CFLAGS=-fpic
make
sudo make install
2) start the example echoserver from the examples/echoserver directory
./echoserver
3) run ./PtyonBuild.sh from this directory it will
a) build the swig wrapper file
b) compile the swig wrapper and cyassl wrapper files
c) place them into a cyassl shared library for python
d) run runme.py which will connect to the CyaSSL echo server, write a
string, then read the result and output it
Windows only
1) Make sure the install path to cyassl doesn't have any spaces anywhere in the
directory path because swig doesn't like that
2) Have python for Windows installed, note install directory
3) Have swigwin installed, note install directory
4) Make sure swigwin install direcotry is added to PATH env. variable
5) Make sure env. variables PYTHON_INCLUDE and PYTHON_LIB are set correctly e.g.
PYTHON_INCLUE="c:\Python26\include"
PYTHON_LIB="c:\Python26\libs\python26.lib"
6) Build python_cyassl in Release mode only, Debug build fails to find a debug
python library that isn't included by default
7) The outputs _cyassl.pyd and cyassl.py are the cyassl import library
8) Can now run python runme.py from the swig directory

42
swig/cyassl.i Normal file
View File

@@ -0,0 +1,42 @@
%module cyassl
%{
#include "openssl/ssl.h"
#include "rsa.h"
/* defn adds */
char* CyaSSL_error_string(int err);
int CyaSSL_connect(SSL*, const char* server, int port);
RNG* GetRng(void);
RsaKey* GetRsaPrivateKey(const char* file);
void FillSignStr(unsigned char*, const char*, int);
%}
SSL_METHOD* TLSv1_client_method(void);
SSL_CTX* SSL_CTX_new(SSL_METHOD*);
int SSL_CTX_load_verify_locations(SSL_CTX*, const char*, const char*);
SSL* SSL_new(SSL_CTX*);
int SSL_get_error(SSL*, int);
int SSL_write(SSL*, const char*, int);
char* CyaSSL_error_string(int);
int CyaSSL_connect(SSL*, const char* server, int port);
int RsaSSL_Sign(const unsigned char* in, int inLen, unsigned char* out, int outLen, RsaKey* key, RNG* rng);
int RsaSSL_Verify(const unsigned char* in, int inLen, unsigned char* out, int outLen, RsaKey* key);
RNG* GetRng(void);
RsaKey* GetRsaPrivateKey(const char* file);
void FillSignStr(unsigned char*, const char*, int);
%include carrays.i
%include cdata.i
%array_class(unsigned char, byteArray);
int SSL_read(SSL*, unsigned char*, int);
#define SSL_FAILURE 0
#define SSL_SUCCESS 1

208
swig/cyassl_adds.c Normal file
View File

@@ -0,0 +1,208 @@
/* cyassl_adds.c */
#ifndef _WIN32
#define HAVE_CONFIG_H
#endif
#include "openssl/ssl.h"
#include "rsa.h"
#include "asn.h"
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <ctype.h>
#ifdef _WIN32
#include <winsock2.h>
#include <process.h>
#ifdef TEST_IPV6 /* don't require newer SDK for IPV4 */
#include <ws2tcpip.h>
#include <wspiapi.h>
#endif
#define SOCKET_T int
#else
#include <string.h>
#include <unistd.h>
#include <netdb.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/ioctl.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <pthread.h>
#ifdef NON_BLOCKING
#include <fcntl.h>
#endif
#ifdef TEST_IPV6
#include <netdb.h>
#endif
#define SOCKET_T unsigned int
#endif /* _WIN32 */
#ifdef _MSC_VER
/* disable conversion warning */
/* 4996 warning to use MS extensions e.g., strcpy_s instead of strncpy */
#pragma warning(disable:4244 4996)
#endif
#if defined(__MACH__) || defined(_WIN32)
#ifndef _SOCKLEN_T
typedef int socklen_t;
#endif
#endif
/* HPUX doesn't use socklent_t for third parameter to accept */
#if !defined(__hpux__)
typedef socklen_t* ACCEPT_THIRD_T;
#else
typedef int* ACCEPT_THIRD_T;
#endif
#ifdef _WIN32
#define CloseSocket(s) closesocket(s)
#define StartTCP() { WSADATA wsd; WSAStartup(0x0002, &wsd); }
#else
#define CloseSocket(s) close(s)
#define StartTCP()
#endif
#ifdef TEST_IPV6
typedef struct sockaddr_in6 SOCKADDR_IN_T;
#define AF_INET_V AF_INET6
#else
typedef struct sockaddr_in SOCKADDR_IN_T;
#define AF_INET_V AF_INET
#endif
enum {
SSL_BLOCKING = 2,
SSL_NONBLOCKING = 4
};
static int tcp_socket(SOCKET_T* sockfd, SOCKADDR_IN_T* addr, const char* peer,
short port)
{
const char* host = peer;
/* peer could be in human readable form */
if (isalpha(peer[0])) {
struct hostent* entry = gethostbyname(peer);
if (entry) {
struct sockaddr_in tmp;
memset(&tmp, 0, sizeof(struct sockaddr_in));
memcpy(&tmp.sin_addr.s_addr, entry->h_addr_list[0],entry->h_length);
host = inet_ntoa(tmp.sin_addr);
}
else
return -1; /* no entry for host */
}
*sockfd = socket(AF_INET, SOCK_STREAM, 0);
memset(addr, 0, sizeof(SOCKADDR_IN_T));
addr->sin_family = AF_INET;
addr->sin_port = htons(port);
addr->sin_addr.s_addr = inet_addr(host);
#ifdef SO_NOSIGPIPE
{
int on = 1;
socklen_t len = sizeof(on);
setsockopt(*sockfd, SOL_SOCKET, SO_NOSIGPIPE, &on, len);
}
#endif
return 0;
}
static int tcp_connect(SOCKET_T* sockfd, const char* ip, short port)
{
SOCKADDR_IN_T addr;
int ret = tcp_socket(sockfd, &addr, ip, port);
if (ret != 0) return ret;
if (connect(*sockfd, (const struct sockaddr*)&addr, sizeof(addr)) != 0)
return -2; /* can't connect */
return 0;
}
int CyaSSL_connect(SSL* ssl, const char* server, int port)
{
SOCKET_T sockfd;
int ret = tcp_connect(&sockfd, server, port);
if (ret != 0) return ret;
SSL_set_fd(ssl, sockfd);
return SSL_connect(ssl);
}
char* CyaSSL_error_string(int err)
{
static char buffer[80];
return ERR_error_string(err, buffer);
}
RNG* GetRng(void)
{
RNG* rng = (RNG*)malloc(sizeof(RNG));
if (rng)
if (InitRng(rng) != 0) {
free(rng);
rng = 0;
}
return rng;
}
RsaKey* GetRsaPrivateKey(const char* keyFile)
{
RsaKey* key = (RsaKey*)malloc(sizeof(RsaKey));
if (key) {
byte tmp[1024];
size_t bytes;
int ret;
word32 idx = 0;
FILE* file = fopen(keyFile, "rb");
if (!file) {
free(key);
return 0;
}
bytes = fread(tmp, 1, sizeof(tmp), file);
fclose(file);
InitRsaKey(key, 0);
ret = RsaPrivateKeyDecode(tmp, &idx, key, (word32)bytes);
if (ret != 0) {
FreeRsaKey(key);
free(key);
return 0;
}
}
return key;
}
void FillSignStr(unsigned char* dst, const char* src, int size)
{
memcpy(dst, src, size);
}

225
swig/python_cyassl.vcproj Executable file
View File

@@ -0,0 +1,225 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="9.00"
Name="python_cyassl"
ProjectGUID="{47A3ABA9-EC54-4788-BC7E-370595B2011A}"
RootNamespace="python_cyassl"
Keyword="Win32Proj"
TargetFrameworkVersion="196613"
>
<Platforms>
<Platform
Name="Win32"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="2"
CharacterSet="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="../include;../ctaocrypt/include;&quot;$(PYTHON_INCLUDE)&quot;"
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;PYTHON_CYASSL_EXPORTS"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
WarningLevel="3"
DebugInformationFormat="4"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="$(PYTHON_LIB) Ws2_32.lib"
OutputFile="_cyassl.pyd"
LinkIncremental="2"
GenerateDebugInformation="true"
SubSystem="2"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="2"
CharacterSet="1"
WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="2"
EnableIntrinsicFunctions="true"
AdditionalIncludeDirectories="../include;../ctaocrypt/include;&quot;$(PYTHON_INCLUDE)&quot;"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;PYTHON_CYASSL_EXPORTS"
RuntimeLibrary="2"
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
WarningLevel="3"
DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="$(PYTHON_LIB) Ws2_32.lib"
OutputFile="_cyassl.pyd"
LinkIncremental="1"
GenerateDebugInformation="true"
SubSystem="2"
OptimizeReferences="2"
EnableCOMDATFolding="2"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="Source Files"
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
>
<File
RelativePath=".\cyassl_adds.c"
>
</File>
<File
RelativePath=".\cyassl_wrap.c"
>
</File>
</Filter>
<Filter
Name="Header Files"
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
>
</Filter>
<Filter
Name="Resource Files"
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
>
</Filter>
<File
RelativePath=".\cyassl.i"
>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCustomBuildTool"
CommandLine="echo In order to function correctly, please ensure the following environment variables are correctly set:&#x0D;&#x0A;echo PYTHON_INCLUDE: %PYTHON_INCLUDE%&#x0D;&#x0A;echo PYTHON_LIB: %PYTHON_LIB%&#x0D;&#x0A;echo on&#x0D;&#x0A;swig.exe -python $(InputPath)&#x0D;&#x0A;"
Outputs="$(InputName)_wrap.c"
/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCustomBuildTool"
CommandLine="echo In order to function correctly, please ensure the following environment variables are correctly set:&#x0D;&#x0A;echo PYTHON_INCLUDE: %PYTHON_INCLUDE%&#x0D;&#x0A;echo PYTHON_LIB: %PYTHON_LIB%&#x0D;&#x0A;echo on&#x0D;&#x0A;swig.exe -python $(InputPath)"
Outputs="$(InputName)_wrap.c"
/>
</FileConfiguration>
</File>
</Files>
<Globals>
</Globals>
</VisualStudioProject>

35
swig/rsasign.py Normal file
View File

@@ -0,0 +1,35 @@
# file: rsasign.py
import cyassl
# start Random Number Generator
rng = cyassl.GetRng()
if rng == None:
print "Couldn't get an RNG"
exit(-1)
# load RSA private key in DER format
key = cyassl.GetRsaPrivateKey("../certs/client-key.der")
if key == None:
print "Couldn't load DER private key file"
exit(-1)
# Make byte Arrays and fill input
signOutput = cyassl.byteArray(128) # 128 allows 1024 bit private key
signStr = cyassl.byteArray(25) # input can't be larger then key size
# 64 for 512 bit 128 for 1024 bit
cyassl.FillSignStr(signStr, "Everybody gets Friday off", 25)
# Do RSA Sign
signedSize = cyassl.RsaSSL_Sign(signStr, 25, signOutput, 128, key, rng)
# Show output
print "Signed Size = ", signedSize, " signed array = ", cyassl.cdata(signOutput, signedSize)
# let's verify this worked
signVerify = cyassl.byteArray(signedSize)
verifySize = cyassl.RsaSSL_Verify(signOutput, signedSize, signVerify, signedSize, key)
print "Verify Size = ", verifySize, " verify array = ", cyassl.cdata(signVerify, verifySize)

30
swig/runme.py Normal file
View File

@@ -0,0 +1,30 @@
# file: runme.py
import cyassl
print ""
print "Trying to connect to the echo server..."
ctx = cyassl.SSL_CTX_new(cyassl.TLSv1_client_method())
ret = cyassl.SSL_CTX_load_verify_locations(ctx, "../certs/ca-cert.pem", None)
ssl = cyassl.SSL_new(ctx)
ret = cyassl.CyaSSL_connect(ssl, "localhost", 11111)
if ret != cyassl.SSL_SUCCESS:
print "Couldn't do SSL connect"
err = cyassl.SSL_get_error(ssl, 0)
print "error string = ", cyassl.CyaSSL_error_string(err)
exit(-1)
print "...Connected"
written = cyassl.SSL_write(ssl, "hello from python\r\n", 19)
if written > 0:
print "Wrote ", written, " bytes"
byteArray = cyassl.byteArray(100)
readBytes = cyassl.SSL_read(ssl, byteArray, 100)
print "server reply: ", cyassl.cdata(byteArray, readBytes)