Add FreeRTOS-Plus directory with new directory structure so it matches the FreeRTOS directory.

This commit is contained in:
Richard Barry 2013-04-18 09:17:05 +00:00
parent 80f7e8cdd4
commit 64a3ab321a
528 changed files with 228252 additions and 0 deletions

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
gcc -c -fpic cyassl_adds.c
gcc -shared -flat_namespace cyassl_adds.o cyassl_wrap.o -lcyassl $pythonLibs -o _cyassl.so
python runme.py

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

View file

@ -0,0 +1,63 @@
/* cyassl.i
*
* Copyright (C) 2006-2011 Sawtooth Consulting Ltd.
*
* This file is part of CyaSSL.
*
* CyaSSL is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* CyaSSL is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
%module cyassl
%{
#include <cyassl/ssl.h>
#include <cyassl/ctaocrypt/rsa.h>
/* defn adds */
char* CyaSSL_error_string(int err);
int CyaSSL_swig_connect(CYASSL*, const char* server, int port);
RNG* GetRng(void);
RsaKey* GetRsaPrivateKey(const char* file);
void FillSignStr(unsigned char*, const char*, int);
%}
CYASSL_METHOD* CyaTLSv1_client_method(void);
CYASSL_CTX* CyaSSL_CTX_new(CYASSL_METHOD*);
int CyaSSL_CTX_load_verify_locations(CYASSL_CTX*, const char*, const char*);
CYASSL* CyaSSL_new(CYASSL_CTX*);
int CyaSSL_get_error(CYASSL*, int);
int CyaSSL_write(CYASSL*, const char*, int);
int CyaSSL_Debugging_ON(void);
int CyaSSL_Init(void);
char* CyaSSL_error_string(int);
int CyaSSL_swig_connect(CYASSL*, 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 CyaSSL_read(CYASSL*, unsigned char*, int);
#define SSL_FAILURE 0
#define SSL_SUCCESS 1

View file

@ -0,0 +1,232 @@
/* cyassl_adds.c
*
* Copyright (C) 2006-2012 Sawtooth Consulting Ltd.
*
* This file is part of CyaSSL.
*
* CyaSSL is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* CyaSSL is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#ifndef _WIN32
#define HAVE_CONFIG_H
#endif
#include <cyassl/ssl.h>
#include <cyassl/ctaocrypt/rsa.h>
#include <cyassl/ctaocrypt/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_swig_connect(CYASSL* ssl, const char* server, int port)
{
SOCKET_T sockfd;
int ret = tcp_connect(&sockfd, server, port);
if (ret != 0) return ret;
CyaSSL_set_fd(ssl, sockfd);
return CyaSSL_connect(ssl);
}
char* CyaSSL_error_string(int err)
{
static char buffer[80];
return CyaSSL_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);
}

View file

@ -0,0 +1,12 @@
# vim:ft=automake
# All paths should be given relative to the root
EXTRA_DIST+= \
swig/PythonBuild.sh \
swig/README \
swig/cyassl.i \
swig/cyassl_adds.c \
swig/python_cyassl.vcproj \
swig/rsasign.py \
swig/runme.py

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>

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)

View file

@ -0,0 +1,40 @@
# file: runme.py
import cyassl
print ""
print "Trying to connect to the echo server..."
cyassl.CyaSSL_Init()
#cyassl.CyaSSL_Debugging_ON()
ctx = cyassl.CyaSSL_CTX_new(cyassl.CyaTLSv1_client_method())
if ctx == None:
print "Couldn't get SSL CTX for TLSv1"
exit(-1)
ret = cyassl.CyaSSL_CTX_load_verify_locations(ctx, "../certs/ca-cert.pem", None)
if ret != cyassl.SSL_SUCCESS:
print "Couldn't do SSL_CTX_load_verify_locations "
print "error string = ", ret
exit(-1)
ssl = cyassl.CyaSSL_new(ctx)
ret = cyassl.CyaSSL_swig_connect(ssl, "localhost", 11111)
if ret != cyassl.SSL_SUCCESS:
print "Couldn't do SSL connect"
err = cyassl.CyaSSL_get_error(ssl, 0)
print "error string = ", cyassl.CyaSSL_error_string(err)
exit(-1)
print "...Connected"
written = cyassl.CyaSSL_write(ssl, "hello from python\r\n", 19)
if written > 0:
print "Wrote ", written, " bytes"
byteArray = cyassl.byteArray(100)
readBytes = cyassl.CyaSSL_read(ssl, byteArray, 100)
print "server reply: ", cyassl.cdata(byteArray, readBytes)