Shawn Andrews' Portfolio
Head shot
My name is Shawn Andrews (BSc hons.) and I am finishing my last year as a student in Regina, Saskatchewan, Canada.

Most recent projects:
  - SAES: A GPU Accelerated AES Encryption System (C++/CUDA) (Win/Linux)
  - WinAPI Cryptography (C++) (Win)
  - Cloud Storage website (HTML/BOOTSTRAP/JQUERY/PHP)
  - Data Miner (C++) (Win/Linux)
  - HTTPClient library (C++) (Win/Linux)
  - Polished IRC (C++/OpenGL) (Win)
  - Polished Model Viewer (C++/OpenGL) (Win)
  - Polished First Person Shooter (C++/SDL) (Win)

SAES:
A GPU Accelerated AES Encryption System
(C++/CUDA) (Windows/Linux)

Description: This program uses standard AES-CTR cryptography with an NVIDIA GPU on the user's system to accelerate AES throughput during encryption and decryption. As well, users can select from single and multi-core CPU execution modes.

Features:
(i)Cross-platform between Windows and Linux.
(ii)It is modular and can work with your existing program as a 3rd party library dependency.
(iii)Ability to choose from various key sizes such as 128, 192 and 256.
(iv).Performance accelerated by parallelizing chunks of 16-byte AES blocks on the GPU.

Restrictions:
(i)Maximum file size is 2gb(Can be removed, if needed).

How to use in Windows(MSVC):
(i)Go to the program's directory, then change directory to the program's executable and execute the help command "saes.exe -help" to obtain correct formatting information for file encryption/decryption.
(ii)Enter the command-line arguments along with the file(s) you wish to be encrypted/decrypted.
(iii)If you have a NVIDIA GPU device installed on your system it will list which GPU was used followed by the execution time. If no such device can be found, multi-core CPU execution will, instead, be used.

How to use in Linux(GNU):
(i)Copy the saes executable into your root /bin directory, then execute the help command "saes -help" to obtain correct formatting information for file encryption/decryption.
(ii)Enter the command-line arguments along with the file(s) you wish to be encrypted/decrypted.
(iii)If you have a NVIDIA GPU device installed on your system it will list which GPU was used followed by the execution time. If no such device can be found, multi-core CPU execution will, instead, be used.

Example of usage:
(For Linux)
i.)"saes -e -p SomePassword -k 128 -f *.jpg" Encrypt using the GPU all JPG files in the current directory with 128-bit AES encryption.
ii.)"saes -ef -p SomePassword -k 256 -f log.txt" Encrypt using single-core CPU a single log.txt files in the current directory with 256-bit AES encryption.
iii.)"saes -dfm -p SomePassword -f C:\..\log.saes" Decrypt using multi-core CPU mode a single encrypted log.saes file using absolute file pathing.
(For Windows)
"saes -e -p SomePassword -k 128 -f cat.jpg" Encrypt using the GPU a single JPG file in the current directory with 128-bit AES encryption.

Download (Source files included):
--> (Unreleased, ask admin for permission to download)


WinAPI Cryptography
(C++) (Windows)

Description: This program demonstrates secure network transmission between unsecure networks by using the RSA key-exchange mechanism with AES symmetric session keys for fast and efficient encryption/decryption.

Features:
(i)Uses RSA 1024-bit encryption as a secure key-exchange mechanism between untrusted networks.
(ii)Uses AES 256-bit session keys for fast message encryption and decryption.
(iii)Uses Winsock 2 and WinAPI's Cryptography library for network communication and encryption.
(iv)Ability to see how the key-exchange process and symmetric encryption in unsigned decimal representation form of the packet as it travels across the network.

Restrictions:
(i)Certificates for public-keys are not available in this version of the program. (See PDF for full example)
(ii)Digital Signatures for messages are not available in this version of the program. (See PDF for full example)

How to use in Windows(MSVC):
(i)Run both the CryptServer and CryptClient programs.
(ii)In the client program, type the address on which the server is being run. If both programs are being run on the same network, type "localhost".
(iii)You are now free to demonstrate secure message communication by typing a string and pressing enter. To check if you received a message, simply press enter with an empty string.

Document that presents secure communication between Winsock applications on untrusted networks: PDF Document

Download (Source files included):
--> Server download
--> Client download

Video:



Cloud Storage
(Website) (HTML/BOOTSTRAP/JQUERY/PHP)

Description: This website gives users the ability to upload files and later download them for easy cloud storage.

Features:
(i)Single and multi-file upload of files.
(ii)Anonymous download links that can be given to colleagues or friends so they can download your uploaded files.
(iii) MySQL database used for restricting number of uploads per IP and storing other information that can be used for data analysis.
(iv) Tracking of number of downloads per file.

Restrictions:
(i)Files uploaded are limited to 5Mbs file size.
(ii)IP addresses are limited to 5 file uploads within a 1 week time period.

How to use in browser:
(i)Click on the "Browse..." button.
(ii)Choose one or many files to be uploaded.
(iii)Click the "Upload" button.
(iv)Distribute the download link attributed to your files.
(v)Visit your download link and click the "Download" button.

Website:
cloud.saportfolio.ca

Responsive screenshots:
Mobile: Click here
Tablet: Click here
Desktop: Click here


DataMiner
(C++) (Windows/Linux)

Description: This program takes a user-given input, a keyword, and searches the web for words associated with the given keyword along with a record of how often they appeared so that you can easily detect patterns or trends.

Features:
(i)Returns an XML file containing statistics on how the data mine went and a sorted list of words with their frequency.
(ii)Makes use the Bing search engine as a method of obtaining valuable data quickly.
(iii)Takes advantage of the cross-platform HTTPClient library for fast and easy HTTP requests and responses.
(iv)Able to identify certain social events, news, weather or stock alerts tied to a specific town or company, respectively.
(v)Takes advantage of multi-core processors by scaling in performance relative to the number of cores through multi-threading and concurrent programming only available in C++11.

Restrictions:
(i)Limited to the amount of data the Bing search engine can provide.

How to use in Windows(MSVC):
(i)Move into the WindowsRelease/ directory.
(ii)In the console window, you will be prompted to enter a keyword.
(iii)After the program has finished, a data.xml file containing the search results will be available in the current directory.

How to use in Linux(GNU):
(i)cd into the LinuxRelease/ directory.
(ii)In the terminal under the current directory, execute the program with your keyword to search for by typing "./main keyword here".
(iii)After the program has finished, a data.xml file containing the search results will be available in the current directory.

Example of usage:
(For Linux) ./main saportfolio canada
(For Windows) -> saportfolio canada

Download (Source files included):
--> Click here


HTTPClient Library
(C++) (Windows/Linux)

Description: This library makes it possible to easily retrieve the HMTL code of any webpage in one method call for such uses as data mining.

Features:
(i)Easy-to-use library that takes only a couple lines of code to use.
(ii)Uses the latest Winsock 2.2 library for fast and reliable TCP/IP communication on Windows.
(iii)Takes advantage of the HTTP/2 over HTTP/1 protocol to perform faster download speeds for consequtive requests to different webpages.
(iv)Uses a static library for easy linkage with existing projects.

Restrictions:
(i)Unable to follow webpage redirects.
(ii)Unable to connect to HTTPS websites.

How to use in Windows(MSVC):
(i)Add the /include directory to the project's list of include directories.
(ii)Include the HTTPClient header file: "#include <HTTPClient.h>".
(iii)Create an HTTPClient object and call the method httpRequestWebpage to retrieve any webpage's HTML.

How to use in Linux(GNU):
(i)(Optional) If you wish to compile the library file (HTTPClient.a) yourself, simply ls into the /Linux/src directory and execute a "make".
(ii)Add to the project's list of include directories by appending "-Idir", where dir is the /include directory, during compilation.
(iii)Include the HTTPClient header file: "#include <HTTPClient.h>".
(iv)Add to the project's list of lib directories by appending "-Ldir", where dir is the /lib directory, during compilation.
(v)Create an HTTPClient object and call the method httpRequestWebpage to retrieve any webpage's HTML.

Example of usage:
HTTPClient c;
char* h tml = NULL;
try {
    c.httpRequestWebpage("www.saportfolio.ca/", HC_DEFAULT_PORT, &html);
    printf("\n%s\n", html);
    delete[] html;
    html = NULL;
}catch (HTTPClientException& ex){
    printf(ex.what());
}

Online docs:
void HTTPClient::httpRequestWebpage(const char* webpage, int port, char** returnedWebpageHtml); throw (HTTPClientException);
Parameters:
    webpage: The full URL of the document you're trying to retrieve. Ex: www.google.ca/
    port: The port on which the web server is running. Use HC_DEFAULT_PORT for port 80.
    returnedWebpageHtml: The address of a char* which will hold the requested HTML including HTTP response text.

Download (Source files included):
--> Click here


Polished IRC
(C++/OpenGL) (Windows)

Features:
(i)Reliable winsock API using TCP.
(ii)Ability to quickly create a room id that enables others to join your room.
(iii)Able to support 10 rooms at 100 users per room.
(iv)Client-Server architecture
(v)640x480 resolution(windowed or full-screen)
(vi)Custom, hand-written GUI
(vii)Simple to use with no account creation necessary.
(viii)Chat log holds 170 of your room's past messages to browse.
(ix)Lightweight

Restrictions:
(i)Room Limit:10 || Users per room limit: 100

Video:



Polished Model Viewer
(C++/OpenGL) (Windows)

Features:
(i)Free-flying camera (WASD controls)
(ii)Rotating Light
(iii)GLSL(Vertex and Fragment) shading
(iv)Grid-style environment
(v)720x480 resolution
(vi)Scale and rotate model
(vii)Custom, hand-written GUI
(viii)Import models(.3DS) (*Only use .3DS files exported through 3ds Max)
(ix)Lightweight

Restrictions:
(i)No textures
(ii)No more than 1 light supported
(iii)Only static models
(iv)Must hardcode light and material values in shader

Video:




Polished First Person Shooter
(C++/OpenGL) (Windows)

Features:
(i)Full screen, 1780x1050 resolution at 30FPS
(ii)3 unique guns with their own attributes
(iii)GLSL(Vertex and Fragment) shading
(iv)Random scene generation
(v)Timed missions
(vi)Smooth camera and gun movement
(vii)Custom, hand-written GUI and 3D model importer
(viii)Written from scratch with OpenGL

Restrictions:
(i)No textures

Video:



The Shapes Game
(C++/SDL) (Windows)

Game #2.1 Game #2.2 Game #2.3


Experience in the following languages, mark-ups, services or technologies:
  • HTML
  • CSS/Bootstrap
  • Javascript/JQuery
  • PHP
  • C++
  • SQL Server/MySQL