Looking for an experienced C++ developer to modify an existing open source application called KeePassX for Mac OSX. [login to view URL] The application will have to be modified to support communication to our CyberGate card over Bluetooth classic.
KeePassX creates an in-memory database file that will be sent and stored on the card anytime it’s created, updated, or modified in any way.
*** Please specify cost and estimated duration in your proposal.
The CyberGate card is a credit card-size computer that has a CPU, flash memory, Bluetooth, and a battery encapsulated in plastic.
We want to use “Storage Provider” feature for remote storage of the KeePass database file. The plug-in must keep the database file in memory and store on the card when changes are made. No local copy of the file is persisted to the file system of the Android device. For security reasons, we do not want a local copy of the database file stored locally on the file system.
This project requires an understanding of Bluetooth communication and the sending and receiving of low-level communication using data packets. We are using SPP (Serial Port Profile) to send and receive data. We have exposed an API on the card to allow the sending and receiving of data. This is called the CyberGate FTPx API.
CyberGate FTPx API
This will be using a custom protocol that is very close to FTP commands over Bluetooth. We call it FTPx, since we have some product specific header information. The primary FTP commands we will use is STOR, RETR, LIST, DELE.
STOR: This method is used to store files on the card.
RETR: This method is used to download files from the card.
LIST: This is used to list the contents of a folder
DELE: This is used to delete a file
The CyberGate API full documentation:
[login to view URL]
Protocol Packet Format
The string command packet that is sent to the card over Bluetooth is in the following format.
First byte command channel 01 or 02. Next two byte total length including header and suffix. Called Least Significant bit and Most Significant bit.
(End of String): First byte carriage return. Second byte line feed. Third and fourth byte checksum. Which is currently not used.
0D 0A 00 00
This is an example of sending a LIST command to the card. Notice the packet structure includes a header and suffix.
________Command or data channel
| ____Total length including header
| | and suffix string ( "00 1E" == 30 characters)
01 00 1E
01 00 1E 4C 49 53 54 20 2F 61 70 70 73 2F 76 61 75 6C 74 2F 64 61 74 61 2F 2A 0D 0A 00 00
...150 Opening connection
....Jdrw-rw-rw- 1 root root 0 Jan 00 1980 SomeFile
.....226 Transfer Complete
We will provide a CyberGate card and charging cable for development purposes.
Git and GitHub will be used for source control. Some example source code and access to our technical support team will be available to answer questions.