summaryrefslogtreecommitdiffstats
path: root/README.md
blob: 23ecd55611ca9a87bda6321c8d55d44f167a9edc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183

Cipherpack - A Cryprographic Stream Processor

Original document location.

Git Repository

This project's canonical repositories is hosted on Gothel Software.

Overview

Cipherpack, a secure stream processor utilizing public-key signatures to authenticate the sender and public-key encryption of a symmetric-key for multiple receiver ensuring their privacy and high-performance payload encryption.

A Cipherpack can be understood as a message, which can be streamed via any media, while file via ByteInStream_File and all libcurl network protocols via ByteInStream_URL are build-in and supported.

A user may use the media agnostic ByteInStream_Feed to produce the input stream by injecting data off-thread and a CipherpackListener to receive the processed output stream.

Cipherpack is implemented using C++17 and accessible via C++ and Java.

Please find the more detailed overview in the API doc.

Original use-case is a secure update process, elevating your installed firm- and software.
Hence original project name was Elevator.

See details on the C++ and Java API including its different C++ API level modules.

Supported Platforms

C++17 and better.

Programming with Cipherpack

API

API Documentation

Up to date API documentation can be found:

Building Binaries

This project uses the following git submodules

Build Dependencies

Installing build dependencies on Debian (10 or 11):

apt install git
apt install build-essential g++ gcc libc-dev libpthread-stubs0-dev 
apt install libunwind8 libunwind-dev
apt install cmake cmake-extras extra-cmake-modules pkg-config
apt install doxygen graphviz
apt install libcurl4 libcurl4-gnutls-dev
apt install mini-httpd

Build Procedure

To fetch the source tree use:

git clone --recurse-submodule git://jausoft.com/srv/scm/cipherpack.git
cd cipherpack

From here on we assume to be in the cipherpack project folder.

For a generic build use:

CPU_COUNT=`getconf _NPROCESSORS_ONLN`
mkdir build
cd build
cmake -DBUILDJAVA=ON -DBUILDEXAMPLES=ON -DBUILD_TESTING=ON ..
make -j $CPU_COUNT install test doc

The install target of the last command will create the include/ and lib/ directories with a copy of the headers and library objects respectively in your build location. Note that doing an out-of-source build may cause issues when rebuilding later on.

Our cmake configure has a number of options, cmake-gui or ccmake can show you all the options. The interesting ones are detailed below:

Changing install path from /usr/local to /usr

-DCMAKE_INSTALL_PREFIX=/usr

Building debug build:

-DDEBUG=ON

Disable stripping native lib even in non debug build:

-DUSE_STRIP=OFF

Disable using libunwind (default: enabled for all but arm32, armhf)

-DUSE_LIBUNWIND=OFF

Disable using C++ Runtime Type Information (RTTI) (default: enabled)

-DDONT_USE_RTTI=ON

Building debug and instrumentation (sanitizer) build:

-DDEBUG=ON -DINSTRUMENTATION=ON

Using clang instead of gcc:

-DCMAKE_C_COMPILER=/usr/bin/clang -DCMAKE_CXX_COMPILER=/usr/bin/clang++

Cross-compiling on a different system:

-DCMAKE_CXX_FLAGS:STRING=-m32 -march=i586
-DCMAKE_C_FLAGS:STRING=-m32 -march=i586

To build documentation run:

make doc

Support

Cipherpack is provided by Gothel Software and Zafena ICT.

If you like to utilize Cipherpack in a commercial setting, please contact Gothel Software to setup a potential support contract.

Changes

1.0.0

  • First stable release (TODO)

0.6.0

  • Completed restructuring incl. stream CIPHERPACK_0003 and API doc
  • Completed Java binding, all tests passed

0.5.0

  • Renamed from Elevator to Cipherpack
  • namespace elevator::cipherpack -> cipherpack
  • Added pure streaming encryptThenSign() and checkSignThenDecrypt() base function

0.4.0

  • Working version with universal jau::io::ByteInStream and matured unit testing OK and error cases

0.0.0

  • Kick-off