virgil-crypto 2.1.2 → 2.1.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (35) hide show
  1. checksums.yaml +4 -4
  2. data/ext/native/src/CMakeLists.txt +3 -3
  3. data/ext/native/src/ChangeLog +58 -0
  4. data/ext/native/src/Dockerfile_Golang +41 -0
  5. data/ext/native/src/Jenkinsfile +12 -1
  6. data/ext/native/src/VERSION +1 -1
  7. data/ext/native/src/cmake/find_host_utils.cmake +6 -0
  8. data/ext/native/src/cmake/virgil_depends_local.cmake +1 -1
  9. data/ext/native/src/lib/include/CMakeLists.txt +0 -2
  10. data/ext/native/src/lib/include/virgil/crypto/VirgilCipherBase.h +0 -6
  11. data/ext/native/src/lib/include/virgil/crypto/VirgilCryptoError.h +6 -6
  12. data/ext/native/src/lib/include/virgil/crypto/VirgilCryptoException.h +1 -1
  13. data/ext/native/src/lib/include/virgil/crypto/VirgilKeyPair.h +4 -2
  14. data/ext/native/src/lib/include/virgil/crypto/VirgilStreamCipher.h +0 -1
  15. data/ext/native/src/lib/include/virgil/crypto/foundation/VirgilHash.h +10 -13
  16. data/ext/native/src/lib/include/virgil/crypto/foundation/VirgilKDF.h +3 -6
  17. data/ext/native/src/lib/include/virgil/crypto/foundation/VirgilPBE.h +1 -1
  18. data/ext/native/src/lib/include/virgil/crypto/foundation/VirgilPBKDF.h +1 -4
  19. data/ext/native/src/lib/include/virgil/crypto/foundation/VirgilRandom.h +0 -2
  20. data/ext/native/src/lib/include/virgil/crypto/foundation/VirgilSymmetricCipher.h +4 -2
  21. data/ext/native/src/lib/include/virgil/crypto/foundation/VirgilSystemCryptoError.h +6 -6
  22. data/ext/native/src/lib/include/virgil/crypto/foundation/asn1/VirgilAsn1Writer.h +2 -2
  23. data/ext/native/src/lib/mainpage.dox +4 -4
  24. data/ext/native/src/lib/src/VirgilAsymmetricCipher.cxx +1 -1
  25. data/ext/native/src/lib/src/VirgilSymmetricCipher.cxx +4 -0
  26. data/ext/native/src/lib/src/VirgilTinyCipher.cxx +4 -4
  27. data/ext/native/src/libs_ext/mbedtls/mbedtls.cmake +2 -2
  28. data/ext/native/src/tests/test_asymmetric_cipher.cxx +42 -1
  29. data/ext/native/src/tests/test_symmetric_cipher.cxx +20 -2
  30. data/ext/native/src/utils/build.sh +10 -0
  31. data/ext/native/src/wrappers/ruby/CMakeLists.txt +30 -1
  32. data/lib/virgil/crypto/version.rb +1 -1
  33. data/lib/virgil/crypto/virgil_stream_data_sink.rb +1 -1
  34. data/lib/virgil/crypto/virgil_stream_data_source.rb +1 -1
  35. metadata +4 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6080543e6b52aef32d11bd1efc81321e2c3112a2
4
- data.tar.gz: eed1f1f61e2b82374aa4e1c71f6098faa95da619
3
+ metadata.gz: a182cddff92e3dc3bca871c4be88be1e0f002177
4
+ data.tar.gz: c29d49a12780c7b9ff509b5037876e19fc8ccef2
5
5
  SHA512:
6
- metadata.gz: 53b4d004ecced81ba05f11e3b95ef68309ea8a1818125dc6e32b52538e2b848202035b2be1e55860d30731fa46db5e936202d087b7301ed3ba631ae063e7b72f
7
- data.tar.gz: bfc762dda3aac9a4832ccf547e94884cc9fb4569c531a021351ae34a76ef3f96872e39c5d2c00376b6bbcb7a9ffab3bfd78e00a5361e082a00ff40c47b376042
6
+ metadata.gz: 0c10d7298396093557b605a604787cd4baf636f68f8a4dc3e77a9a41b88fac55a7e932c0c391db8ddbb002518560a2b58f1ffc9ca036fbee6b7674b81f37ba55
7
+ data.tar.gz: 3807971910e5519f6f87d17282c61e821e4b09a022c77f61c91b33ba9e2768ff6de583b5d241a03f2b2d3123d3932da36654fb3a203c41b9e196e1a89309a90d
@@ -98,8 +98,8 @@ project (VirgilSecurity)
98
98
  # Set library version
99
99
  set (VIRGIL_VERSION_MAJOR 2)
100
100
  set (VIRGIL_VERSION_MINOR 1)
101
- set (VIRGIL_VERSION_PATCH 0)
102
- set (VIRGIL_VERSION_FEATURE dev)
101
+ set (VIRGIL_VERSION_PATCH 2)
102
+ set (VIRGIL_VERSION_FEATURE)
103
103
  set (VIRGIL_VERSION ${VIRGIL_VERSION_MAJOR}.${VIRGIL_VERSION_MINOR}.${VIRGIL_VERSION_PATCH})
104
104
  set (VIRGIL_SOVERSION 2)
105
105
 
@@ -109,7 +109,7 @@ else (VIRGIL_VERSION_FEATURE)
109
109
  set (VIRGIL_VERSION_FULL_NAME ${VIRGIL_VERSION})
110
110
  endif (VIRGIL_VERSION_FEATURE)
111
111
 
112
- message (STATUS "Virgil version: " ${VIRGIL_VERSION})
112
+ message (STATUS "Virgil version: " ${VIRGIL_VERSION_FULL_NAME})
113
113
  message (STATUS "Virgil soversion: " ${VIRGIL_SOVERSION})
114
114
 
115
115
  # Configure path to custom modules
@@ -1,5 +1,63 @@
1
1
  virgil ChangeLog (Sorted per date)
2
2
 
3
+ = Version 2.1.2 released 2017-03-22
4
+
5
+ ## Bugfix
6
+
7
+ [Build] Fix MSVC build by updating underlying MbedTLS library to the version: mbedtls-2.4.2-virgil-2.0.3
8
+
9
+
10
+ = Version 2.1.1 released 2017-03-22
11
+
12
+ ## Bugfix
13
+
14
+ [Lib] Fix: Got unexpected error when process encrypted private key and omit password
15
+ [Lib] Update to mbed TLS version 2.4.2
16
+
17
+
18
+ = Version 2.1.0 released 2017-03-16
19
+
20
+ ## Bugfix
21
+
22
+ [OSX] Add minimum required OSX version (Yosemite)
23
+ [Lib] Fix extra compiler warnings and documentation warnings
24
+
25
+ ## Changes
26
+
27
+ [OSX] Add minimum required OSX version (Yosemite)
28
+
29
+ ## Features
30
+
31
+ [CI] Add Dockerfile with Golang environment
32
+ [Lib] Expose low level API for targets that use C/C++ headers
33
+ [Lib] Add AES-128 to the symmetric cipher
34
+
35
+
36
+ = Version 2.0.7 released 2017-03-06
37
+
38
+ ## Bugfix
39
+
40
+ * [Doc] Fix doxygen warnings
41
+
42
+
43
+ = Version 2.0.6 released 2017-02-24
44
+
45
+ ## Features
46
+
47
+ * [Ruby] Add support for ruby versions: 2.2, 2.3, 2.4
48
+
49
+
50
+ = Version 2.0.5 released 2017-02-20
51
+
52
+ ## Bugfix
53
+
54
+ * [Ruby] Fix linkage issue - link Ruby wrapper to the native Ruby ruby library
55
+
56
+ ## Changes
57
+
58
+ * [Ruby] Add flag '-autorename' for Ruby Swig wrapper, which apply Ruby naming conventions
59
+
60
+
3
61
  = Version 2.0.4 released 2017-01-10
4
62
 
5
63
  ## Bugfix
@@ -0,0 +1,41 @@
1
+ FROM ubuntu:16.04
2
+
3
+ # gcc for cgo
4
+ RUN apt-get update && apt-get install -y --no-install-recommends \
5
+ g++ \
6
+ gcc \
7
+ libc6-dev \
8
+ make \
9
+ pkg-config \
10
+ cmake \
11
+ swig \
12
+ doxygen \
13
+ curl \
14
+ ca-certificates \
15
+ git \
16
+ && rm -rf /var/lib/apt/lists/*
17
+
18
+ # install golang
19
+ ENV GOLANG_VERSION 1.7.5
20
+ ENV GOLANG_DOWNLOAD_URL https://golang.org/dl/go$GOLANG_VERSION.linux-amd64.tar.gz
21
+ ENV GOLANG_DOWNLOAD_SHA256 2e4dd6c44f0693bef4e7b46cc701513d74c3cc44f2419bf519d7868b12931ac3
22
+
23
+ RUN curl -fsSL "$GOLANG_DOWNLOAD_URL" -o golang.tar.gz \
24
+ && echo "$GOLANG_DOWNLOAD_SHA256 golang.tar.gz" | sha256sum -c - \
25
+ && tar -C /usr/local -xzf golang.tar.gz \
26
+ && rm golang.tar.gz
27
+
28
+ ENV GOPATH /go
29
+ ENV PATH $GOPATH/bin:/usr/local/go/bin:$PATH
30
+
31
+ RUN mkdir -p "$GOPATH/src" "$GOPATH/bin" && chmod -R 777 "$GOPATH"
32
+ WORKDIR $GOPATH
33
+
34
+ # build virgil-crypto-go
35
+ ADD . virgil-crypto
36
+ RUN cd virgil-crypto \
37
+ && cmake -H. -B_build -DCMAKE_INSTALL_PREFIX=_install -DLANG=go -DINSTALL_CORE_LIBS=ON \
38
+ && cmake --build _build --target install \
39
+ && go get -d gopkg.in/virgilsecurity/virgil-crypto-go.v4 \
40
+ && cp -r _install/* $GOPATH/src/gopkg.in/virgilsecurity/virgil-crypto-go.v4 \
41
+ && cd - && rm -rf virgil-crypto
@@ -41,7 +41,18 @@ def createNativeUnixBuild(slave) {
41
41
  // C++
42
42
  sh './utils/build.sh cpp'
43
43
  // Ruby
44
- sh './utils/build.sh ruby'
44
+ withEnv(["PATH=${env.HOME}/.rbenv/bin:${env.PATH}"]){
45
+ writeFile file: './utils/env.sh', text: ['eval "$(rbenv init -)"'].join("\n")
46
+ writeFile file: '.ruby-version', text: ['2.0.0-p648'].join("\n")
47
+ sh './utils/build.sh ruby-2.0'
48
+ writeFile file: '.ruby-version', text: ['2.2.6'].join("\n")
49
+ sh './utils/build.sh ruby-2.2'
50
+ writeFile file: '.ruby-version', text: ['2.3.3'].join("\n")
51
+ sh './utils/build.sh ruby-2.3'
52
+ writeFile file: '.ruby-version', text: ['2.4.0'].join("\n")
53
+ sh './utils/build.sh ruby-2.4'
54
+ }
55
+ organizeFilesUnix('install/ruby')
45
56
  // Python
46
57
  if (slave.contains('centos7')) {
47
58
  sh './utils/build.sh python-2.7'
@@ -1 +1 @@
1
- 2.1.0-dev
1
+ 2.1.2
@@ -52,3 +52,9 @@ if (NOT COMMAND find_host_library)
52
52
  find_library (${ARGN})
53
53
  endmacro ()
54
54
  endif ()
55
+
56
+ if (NOT COMMAND find_host_path)
57
+ macro (find_host_path)
58
+ find_path (${ARGN})
59
+ endmacro ()
60
+ endif ()
@@ -128,7 +128,7 @@ function (virgil_depends_create_cache_file cache_path)
128
128
  # Pass compiler flags if not toolchain case
129
129
  if (NOT CMAKE_CROSSCOMPILING)
130
130
  string (TOUPPER "${CMAKE_BUILD_TYPE}" configuration)
131
- foreach (lang C CXX)
131
+ foreach (lang ASM C CXX)
132
132
  virgil_depends_write_cache_var ("${cache_path}" "CMAKE_${lang}_COMPILER")
133
133
  virgil_depends_write_cache_var ("${cache_path}" "CMAKE_${lang}_FLAGS")
134
134
  virgil_depends_write_cache_var ("${cache_path}" "CMAKE_${lang}_FLAGS_${configuration}")
@@ -53,11 +53,9 @@ else ()
53
53
  PATTERN "*.h"
54
54
  PATTERN "cms" EXCLUDE
55
55
  PATTERN "internal" EXCLUDE
56
- PATTERN "VirgilOID.h" EXCLUDE
57
56
  PATTERN "VirgilAsn1Reader.h" EXCLUDE
58
57
  PATTERN "VirgilAsn1Writer.h" EXCLUDE
59
58
  PATTERN "VirgilKDF.h" EXCLUDE
60
- PATTERN "PolarsslException.h" EXCLUDE
61
59
  PATTERN "VirgilKeyPairGenerator.h" EXCLUDE
62
60
  PATTERN "VirgilSymmetricCipher.h" EXCLUDE
63
61
  PATTERN "VirgilAsymmetricCipher.h" EXCLUDE
@@ -136,9 +136,6 @@ public:
136
136
  * for future decription in secure form.
137
137
  */
138
138
  ///@{
139
- /**
140
- * @brief Returns encrypted data info.
141
- */
142
139
  /**
143
140
  * @brief Return content info.
144
141
  *
@@ -225,9 +222,6 @@ protected:
225
222
  * @note cipher's input vector is randomly generated.
226
223
  */
227
224
  virgil::crypto::foundation::VirgilSymmetricCipher& initEncryption();
228
- /**
229
- * @brief Configures symmetric cipher for encryption.
230
- */
231
225
  /**
232
226
  * @brief Configures symmetric cipher for decryption.
233
227
  * @param encryptedDataInfo - serialized encrypted data info.
@@ -46,7 +46,7 @@ namespace virgil { namespace crypto {
46
46
 
47
47
  /**
48
48
  * @brief Specific error codes for the crypto library.
49
- * @ingroup Error
49
+ * @ingroup error
50
50
  */
51
51
  enum class VirgilCryptoError {
52
52
  Reserved = 0, ///< Should not be used.
@@ -71,7 +71,7 @@ enum class VirgilCryptoError {
71
71
 
72
72
  /**
73
73
  * @brief This is specific error category that contains information about crypto library errors.
74
- * @ingroup Error
74
+ * @ingroup error
75
75
  */
76
76
  class VirgilCryptoErrorCategory : public std::error_category {
77
77
  public:
@@ -92,7 +92,7 @@ public:
92
92
  /**
93
93
  * @brief Return singleton instance of the crypto error category.
94
94
  * @return Instance of the crypto error categoty.
95
- * @ingroup Error
95
+ * @ingroup error
96
96
  */
97
97
  const VirgilCryptoErrorCategory& crypto_category() noexcept;
98
98
 
@@ -101,7 +101,7 @@ const VirgilCryptoErrorCategory& crypto_category() noexcept;
101
101
  * @param ev Error value.
102
102
  * @return Exception with given error value and corresond error category.
103
103
  * @see VirgilCryptoError for specific error values.
104
- * @ingroup Error
104
+ * @ingroup error
105
105
  */
106
106
  inline VirgilCryptoException make_error(VirgilCryptoError ev) {
107
107
  return VirgilCryptoException(static_cast<int>(ev), crypto_category());
@@ -113,7 +113,7 @@ inline VirgilCryptoException make_error(VirgilCryptoError ev) {
113
113
  * @param what Additional error description.
114
114
  * @return Exception with given error value and corresond error category.
115
115
  * @see VirgilCryptoError for specific error values.
116
- * @ingroup Error
116
+ * @ingroup error
117
117
  */
118
118
  inline VirgilCryptoException make_error(VirgilCryptoError ev, const std::string& what) {
119
119
  return VirgilCryptoException(static_cast<int>(ev), crypto_category(), what);
@@ -125,7 +125,7 @@ inline VirgilCryptoException make_error(VirgilCryptoError ev, const std::string&
125
125
  * @param what Additional error description.
126
126
  * @return Exception with given error value and corresond error category.
127
127
  * @see VirgilCryptoError for specific error values.
128
- * @ingroup Error
128
+ * @ingroup error
129
129
  */
130
130
  inline VirgilCryptoException make_error(VirgilCryptoError ev, const char* what) {
131
131
  return VirgilCryptoException(static_cast<int>(ev), crypto_category(), what);
@@ -49,7 +49,7 @@ namespace virgil { namespace crypto {
49
49
  * To determine the real exception reason, error codes with conjuction with error category are used.
50
50
  * Error codes can be found in the enumeration @link VirgilCryptoError @endlink.
51
51
  *
52
- * @ingroup Error
52
+ * @ingroup error
53
53
  */
54
54
  class VirgilCryptoException : public std::exception {
55
55
  public:
@@ -228,7 +228,8 @@ public:
228
228
  /**
229
229
  * @brief Convert given private key to the PEM format.
230
230
  *
231
- * @param publicKey - Private Key to be converted.
231
+ * @param privateKey - Private Key to be converted.
232
+ * @param privateKeyPassword - password for the Private Key.
232
233
  * @return Private Key in the PEM fromat.
233
234
  * @throw VirgilCryptoException, with VirgilCryptoError::InvalidPrivateKeyPassword if password is wrong.
234
235
  * @throw VirgilCryptoException, with VirgilCryptoError::InvalidFormat if key has invalid format.
@@ -239,7 +240,8 @@ public:
239
240
  /**
240
241
  * @brief Convert given private key to the DER format.
241
242
  *
242
- * @param publicKey - Private Key to be converted.
243
+ * @param privateKey - Private Key to be converted.
244
+ * @param privateKeyPassword - password for the Private Key.
243
245
  * @return Private Key in the DER fromat.
244
246
  * @throw VirgilCryptoException, with VirgilCryptoError::InvalidPrivateKeyPassword if password is wrong.
245
247
  * @throw VirgilCryptoException, with VirgilCryptoError::InvalidFormat if key has invalid format.
@@ -57,7 +57,6 @@ public:
57
57
  * @param embedContentInfo - determines whether to embed content info the the encrypted data, or not.
58
58
  * @note Store content info to use it for decription process, if embedContentInfo parameter is false.
59
59
  * @see getContentInfo()
60
- * @return encrypted data.
61
60
  */
62
61
  void encrypt(VirgilDataSource& source, VirgilDataSink& sink, bool embedContentInfo = true);
63
62
 
@@ -47,7 +47,7 @@ namespace virgil { namespace crypto { namespace foundation {
47
47
 
48
48
  /**
49
49
  * @brief Provides hashing (message digest) algorithms.
50
- * @ingroup Hash
50
+ * @ingroup hash
51
51
  */
52
52
  class VirgilHash : public virgil::crypto::foundation::asn1::VirgilAsn1Compatible {
53
53
  public:
@@ -91,12 +91,9 @@ public:
91
91
  */
92
92
  explicit VirgilHash(const char* name);
93
93
  ///@}
94
- /**
95
- * @brief
96
- */
97
94
  /**
98
95
  * @name Info
99
- * @brief Provide detail information about object.
96
+ * Provide detail information about object.
100
97
  */
101
98
  ///@{
102
99
  /**
@@ -114,7 +111,7 @@ public:
114
111
 
115
112
  /**
116
113
  * @name Immediate Hashing
117
- * @brief This methods can be used to get the message hash immediately.
114
+ * This methods can be used to get the message hash immediately.
118
115
  */
119
116
  ///@{
120
117
  /**
@@ -131,7 +128,7 @@ public:
131
128
  /**
132
129
  * @name Chain Hashing
133
130
  *
134
- * @brief This methods provide mechanism to hash long message,
131
+ * This methods provide mechanism to hash long message,
135
132
  * that can be splitted to a shorter chunks and be processed separately.
136
133
  */
137
134
  ///@{
@@ -147,22 +144,22 @@ public:
147
144
  * This method MAY be called multiple times to process long message splitted to a shorter chunks.
148
145
  *
149
146
  * @param data - message to be hashed.
150
- * @see @link start() @endlink
147
+ * @see start()
151
148
  */
152
149
  void update(const virgil::crypto::VirgilByteArray& data);
153
150
 
154
151
  /**
155
152
  * @brief Return final message hash.
156
153
  * @return Message hash processed by series of @link update() @endlink method.
157
- * @see @link start() @endlink
158
- * @see @link update() @endlink
154
+ * @see start()
155
+ * @see update()
159
156
  */
160
157
  virgil::crypto::VirgilByteArray finish();
161
158
  ///@}
162
159
 
163
160
  /**
164
161
  * @name HMAC Immediate Hashing
165
- * @brief This methods can be used to get the message HMAC hash immediately.
162
+ * This methods can be used to get the message HMAC hash immediately.
166
163
  */
167
164
  ///@{
168
165
  /**
@@ -182,7 +179,7 @@ public:
182
179
  /**
183
180
  * @name HMAC Chain Hashing
184
181
  *
185
- * @brief This methods provide mechanism to get HMAC hash of the long message,
182
+ * This methods provide mechanism to get HMAC hash of the long message,
186
183
  * that can be splitted to a shorter chunks and be processed separately.
187
184
  */
188
185
  ///@{
@@ -253,7 +250,7 @@ namespace std {
253
250
  /**
254
251
  * @brief Returns string representation of the Hash algorithm.
255
252
  * @return Hash algorithm as string.
256
- * @ingroup Hash
253
+ * @ingroup hash
257
254
  */
258
255
  string to_string(virgil::crypto::foundation::VirgilHash::Algorithm alg);
259
256
  }
@@ -47,7 +47,7 @@ namespace virgil { namespace crypto { namespace foundation {
47
47
 
48
48
  /**
49
49
  * @brief Provides key derivation function algorithms.
50
- * @ingroup KDF
50
+ * @ingroup kdf
51
51
  */
52
52
  class VirgilKDF : public asn1::VirgilAsn1Compatible {
53
53
  public:
@@ -86,12 +86,9 @@ public:
86
86
  */
87
87
  explicit VirgilKDF(const char* name);
88
88
  ///@}
89
- /**
90
- * @brief
91
- */
92
89
  /**
93
90
  * @name Info
94
- * @brief Provide detail information about object.
91
+ * Provide detail information about object.
95
92
  */
96
93
  ///@{
97
94
  /**
@@ -167,7 +164,7 @@ namespace std {
167
164
  /**
168
165
  * @brief Returns string representation of the KDF algorithm.
169
166
  * @return KDF algorithm as string.
170
- * @ingroup KDF
167
+ * @ingroup kdf
171
168
  */
172
169
  string to_string(virgil::crypto::foundation::VirgilKDF::Algorithm alg);
173
170
  }
@@ -47,7 +47,7 @@ namespace virgil { namespace crypto { namespace foundation {
47
47
 
48
48
  /**
49
49
  * @brief Provides Password-Based Cryptography. Now PKCS#5 and PKCS#12 are partially supported.
50
- * @ingroup Cipher
50
+ * @ingroup cipher
51
51
  */
52
52
  class VirgilPBE : public asn1::VirgilAsn1Compatible {
53
53
  public:
@@ -82,12 +82,9 @@ public:
82
82
  */
83
83
  VirgilPBKDF(const virgil::crypto::VirgilByteArray& salt, unsigned int iterationCount = kIterationCount_Default);
84
84
  ///@}
85
- /**
86
- * @brief
87
- */
88
85
  /**
89
86
  * @name Configuration / Info
90
- * @brief Provide methods that allow precise algorithm configuration and get information about it.
87
+ * Provide methods that allow precise algorithm configuration and get information about it.
91
88
  */
92
89
  ///@{
93
90
  /**
@@ -57,14 +57,12 @@ public:
57
57
  * @brief Initialize randomization module with personalization data.
58
58
  *
59
59
  * @param personalInfo (@see section 8.7.1 of NIST Special Publication 800-90A).
60
- * @return Random bytes.
61
60
  */
62
61
  explicit VirgilRandom(const virgil::crypto::VirgilByteArray& personalInfo);
63
62
  /**
64
63
  * @brief Initialize randomization module with personalization data.
65
64
  *
66
65
  * @param personalInfo (@see section 8.7.1 of NIST Special Publication 800-90A).
67
- * @return Random bytes.
68
66
  */
69
67
  explicit VirgilRandom(const std::string& personalInfo);
70
68
  ///@}
@@ -47,7 +47,7 @@ namespace virgil { namespace crypto { namespace foundation {
47
47
 
48
48
  /**
49
49
  * @brief Provides symmetric ciphers algorithms.
50
- * @ingroup Cipher
50
+ * @ingroup cipher
51
51
  */
52
52
  class VirgilSymmetricCipher : public virgil::crypto::foundation::asn1::VirgilAsn1Compatible {
53
53
  public:
@@ -70,6 +70,8 @@ public:
70
70
  * Enumerates possible Symmetric Cipher algorithms.
71
71
  */
72
72
  enum class Algorithm {
73
+ AES_128_CBC, ///< Cipher algorithm: AES-128, mode: CBC
74
+ AES_128_GCM, ///< Cipher algorithm: AES-128, mode: GCM
73
75
  AES_256_CBC, ///< Cipher algorithm: AES-256, mode: CBC
74
76
  AES_256_GCM ///< Cipher algorithm: AES-256, mode: GCM
75
77
  };
@@ -297,7 +299,7 @@ namespace std {
297
299
  /**
298
300
  * @brief Returns string representation of the Hash algorithm.
299
301
  * @return Symmetric cipher algorithm as string.
300
- * @ingroup Cipher
302
+ * @ingroup cipher
301
303
  */
302
304
  string to_string(virgil::crypto::foundation::VirgilSymmetricCipher::Algorithm alg);
303
305
  }
@@ -45,7 +45,7 @@ namespace virgil { namespace crypto { namespace foundation {
45
45
 
46
46
  /**
47
47
  * @brief Error category that handles error codes from the system crypto library.
48
- * @ingroup Error
48
+ * @ingroup error
49
49
  */
50
50
  class VirgilSystemCryptoErrorCategory : public std::error_category {
51
51
  public:
@@ -66,7 +66,7 @@ public:
66
66
  /**
67
67
  * @brief Return singleton instance of the system crypto error category.
68
68
  * @return Instance of the syste, crypto error categoty.
69
- * @ingroup Error
69
+ * @ingroup error
70
70
  */
71
71
  const VirgilSystemCryptoErrorCategory& system_crypto_category() noexcept;
72
72
 
@@ -79,7 +79,7 @@ const VirgilSystemCryptoErrorCategory& system_crypto_category() noexcept;
79
79
  * @param result Value returned by system crypto library.
80
80
  * @return Value if it's not an error.
81
81
  * @throw VirgilCryptoException with given error code and correspond category, if given value represents an error.
82
- * @ingroup Error
82
+ * @ingroup error
83
83
  */
84
84
  inline int system_crypto_handler_get_result(int result) {
85
85
  if (result >= 0) { return result; }
@@ -94,7 +94,7 @@ inline int system_crypto_handler_get_result(int result) {
94
94
  *
95
95
  * @param result Value returned by system crypto library.
96
96
  * @throw VirgilCryptoException with given error code and correspond category, if given value represents an error.
97
- * @ingroup Error
97
+ * @ingroup error
98
98
  */
99
99
  inline void system_crypto_handler(int result) {
100
100
  (void) system_crypto_handler_get_result(result);
@@ -113,7 +113,7 @@ inline void system_crypto_handler(int result) {
113
113
  * @param catch_handler Function that can handle the error in a different way.
114
114
  *
115
115
  * @return Value if it's not an error.
116
- * @ingroup Error
116
+ * @ingroup error
117
117
  */
118
118
  template<typename CatchHandler>
119
119
  inline int system_crypto_handler_get_result(int result, CatchHandler catch_handler) {
@@ -137,7 +137,7 @@ inline int system_crypto_handler_get_result(int result, CatchHandler catch_handl
137
137
  *
138
138
  * @param result Value returned by system crypto library.
139
139
  * @param catch_handler Function that can handle the error in a different way.
140
- * @ingroup Error
140
+ * @ingroup error
141
141
  */
142
142
  template<typename CatchHandler>
143
143
  inline void system_crypto_handler(int result, CatchHandler catch_handler) {
@@ -55,14 +55,14 @@ class VirgilAsn1Writer {
55
55
  public:
56
56
  /**
57
57
  * @brief Initialize internal state for the first use.
58
- * @see @link reset @endlink method for reusing this class to create new ASN.1 stucture.
58
+ * @see reset() method for reusing this class to create new ASN.1 stucture.
59
59
  */
60
60
  VirgilAsn1Writer();
61
61
 
62
62
  /**
63
63
  * @brief Initialize internal state for the first use.
64
64
  * @param capacity - expected ASN.1 final size
65
- * @see @link reset @endlink method for reusing this class to create new ASN.1 stucture.
65
+ * @see reset() method for reusing this class to create new ASN.1 stucture.
66
66
  */
67
67
  VirgilAsn1Writer(size_t capacity);
68
68
 
@@ -36,25 +36,25 @@
36
36
  */
37
37
 
38
38
  /**
39
- * @defgroup Error
39
+ * @defgroup error Error
40
40
  *
41
41
  * @brief This group contains interfaces for error handling mechanism that is used in the library.
42
42
  */
43
43
 
44
44
  /**
45
- * @defgroup Hash
45
+ * @defgroup hash Hash
46
46
  *
47
47
  * @brief This group contains interfaces for producing cryptographic hashes.
48
48
  */
49
49
 
50
50
  /**
51
- * @defgroup KDF
51
+ * @defgroup kdf KDF
52
52
  *
53
53
  * @brief This group contains interfaces to Key Derivation Function algorithms.
54
54
  */
55
55
 
56
56
  /**
57
- * @defgroup Cipher
57
+ * @defgroup cipher Cipher
58
58
  *
59
59
  * @brief This group contains interfaces to encryption and to decryption algorithms.
60
60
  */
@@ -226,7 +226,7 @@ static VirgilByteArray fixKey(const VirgilByteArray& key) {
226
226
  if (std::search(key.begin(), key.end(), pemHeaderBegin.begin(), pemHeaderBegin.end()) != key.end()) {
227
227
  VirgilByteArray fixedKey(key.begin(), key.end());
228
228
  fixedKey.push_back(0);
229
- return std::move(fixedKey);
229
+ return fixedKey;
230
230
  }
231
231
  return key;
232
232
  }
@@ -342,6 +342,10 @@ void VirgilSymmetricCipher::asn1Read(VirgilAsn1Reader& asn1Reader) {
342
342
 
343
343
  std::string std::to_string(virgil::crypto::foundation::VirgilSymmetricCipher::Algorithm alg) {
344
344
  switch (alg) {
345
+ case VirgilSymmetricCipher::Algorithm::AES_128_CBC:
346
+ return "AES-128-CBC";
347
+ case VirgilSymmetricCipher::Algorithm::AES_128_GCM:
348
+ return "AES-128-GCM";
345
349
  case VirgilSymmetricCipher::Algorithm::AES_256_CBC:
346
350
  return "AES-256-CBC";
347
351
  case VirgilSymmetricCipher::Algorithm::AES_256_GCM:
@@ -178,7 +178,7 @@ static size_t calc_master_package_payload_size(size_t packageSize, size_t public
178
178
  /**
179
179
  * @brief Produce additional authenticated data for AEAD cipher.
180
180
  *
181
- * @param packageCount- package count
181
+ * @param packageCount - package count
182
182
  * @param ephemeralContext - asymmetric cipher context that handles ephemeral public key
183
183
  * @param isSigned - defines that package is signed
184
184
  */
@@ -188,7 +188,7 @@ static VirgilByteArray
188
188
  /**
189
189
  * @brief Read header from the package and parse it.
190
190
  *
191
- * @param[inout] packageIt - current parse position in the package
191
+ * @param[in,out] packageIt - current parse position in the package
192
192
  * @param[in] end - end of the package
193
193
  * @param[out] isMaster - defines that package is master
194
194
  * @param[out] isSigned - defines that package is signed
@@ -412,9 +412,9 @@ void VirgilTinyCipher::encryptAndSign(
412
412
  throw make_error(VirgilCryptoError::InvalidState, "Package size overflow.");
413
413
  }
414
414
 
415
- const size_t spaceLeft = impl_->packageSize - package.size();
415
+ const std::ptrdiff_t spaceLeft = impl_->packageSize - package.size();
416
416
  const std::ptrdiff_t payloadAvailable = encryptedData.end() - payloadIt;
417
- const size_t payloadSize = spaceLeft > payloadAvailable ? (size_t) payloadAvailable : spaceLeft;
417
+ const std::ptrdiff_t payloadSize = spaceLeft > payloadAvailable ? payloadAvailable : spaceLeft;
418
418
  package.insert(package.end(), payloadIt, payloadIt + payloadSize);
419
419
  payloadIt += payloadSize;
420
420
 
@@ -89,8 +89,8 @@ endif ()
89
89
 
90
90
  ExternalProject_Add (${PROJECT_NAME}
91
91
  DOWNLOAD_DIR "@VIRGIL_DEPENDS_PACKAGE_DOWNLOAD_DIR@"
92
- URL "https://github.com/VirgilSecurity/mbedtls/archive/mbedtls-2.4.0-virgil-2.0.1.tar.gz"
93
- URL_HASH SHA1=8fe17bd30e644cefffdb2811c51c0e603e00e09b
92
+ URL "https://github.com/VirgilSecurity/mbedtls/archive/mbedtls-2.4.2-virgil-2.0.3.tar.gz"
93
+ URL_HASH SHA1=98a836e2030b6e00c9f0dab7b0e81ee37e395e57
94
94
  PREFIX "@VIRGIL_DEPENDS_PACKAGE_BUILD_DIR@"
95
95
  CMAKE_ARGS "@VIRGIL_DEPENDS_CMAKE_ARGS@" "${MBEDTLS_CMAKE_ARGS}"
96
96
  UPDATE_COMMAND ${CMAKE_COMMAND} -E copy_directory
@@ -68,6 +68,22 @@ static const char* const kPrivateKey1 =
68
68
  "qS/jikzHqj7JwTOgmgSMhVzzOsJhXTD5Tp4M1gbz\n"
69
69
  "-----END EC PRIVATE KEY-----\n";
70
70
 
71
+ static const char* const kPrivateKey1DER =
72
+ "3081DB0201010441009E17CF991D24E4"
73
+ "BE392799B659A12341C679AE66C93CB7"
74
+ "2BB61DD7E7DA0BD9B27D3D9B3E659EC5"
75
+ "0B499270E967CEFB1E6F8AE0D8FDA4DE"
76
+ "8F7777E7CD09CBBCE0A00B06092B2403"
77
+ "03020801010DA1818503818200045955"
78
+ "E0E67649AC5A689924B3B9913CBCDB3F"
79
+ "DCFB2B4196932AE070E9D3DDCA0F0D64"
80
+ "C5034E36A1C66E783F5E2F396E82C3A3"
81
+ "EDAD7D1AE774D9A904C2D2011046964F"
82
+ "C77EFCAD956632792CC18FA72DC62B5D"
83
+ "F0467661EC11B8257A20CC89216224CA"
84
+ "A92FE38A4CC7AA3EC9C133A09A048C85"
85
+ "5CF33AC2615D30F94E9E0CD606F3";
86
+
71
87
  static const char* const kMalformedPrivateKey1 =
72
88
  "-----BEGIN EC PRIVATE KEY-----\n"
73
89
  "MIHbAgEBBEEAnhfPmR0k5L45J5m2WaEjQcZ5rmbJPLcrth3X59oL2bJ9PZs+ZZ7F\n"
@@ -96,6 +112,27 @@ static const char* const kPrivateKey2 =
96
112
  "sMaFiu8OBbyVfjhr9g==\n"
97
113
  "-----END ENCRYPTED PRIVATE KEY-----\n";
98
114
 
115
+ static const char* const kPrivateKey2DER =
116
+ "308201293034060A2A864886F70D010C"
117
+ "0103302604209D8267D5C3EFDB1EE2C5"
118
+ "8EF33681F28A0A91FD4847F7329A6A31"
119
+ "347D297B6CC2020220000481F073EA64"
120
+ "D31E8DDCE3B0F78B26B2E3D525DD112F"
121
+ "053948160DB22114B9BFE86DE5782362"
122
+ "FFBB1C8083B0A2893F7F9A842F7C9D1E"
123
+ "86D7718AEBE4BB65AF9A3906C48110B0"
124
+ "4024AA1429C5A6BBC02E6F4DEFFF021E"
125
+ "4CDB1587103FE269F9920B3A070269E7"
126
+ "DA0E0EFD18AA944016C310B1725A5E37"
127
+ "8F556A4A2EC0C0A284FC59AD2CE5C7CF"
128
+ "B5444DCD45101BB08E6A43783C5D3531"
129
+ "7807604B2F73FCA05C8FD05072013F00"
130
+ "5557B6F1DE5215D710F2E5608D8017DD"
131
+ "10477C96E4DA233775E58EDA868A0003"
132
+ "D2B55833C486DAB4825F231B9BD26D9F"
133
+ "8109A30D778DFE1A4B27A3873DA01919"
134
+ "B0C6858AEF0E05BC957E386BF6";
135
+
99
136
  static const char* const kMalformedPrivateKey2 =
100
137
  "-----BEGIN ENC PRIVATE KEY-----\n"
101
138
  "MIIBKTA0BgoqhkiG9w0BDAEDMCYEIJ2CZ9XD79se4sWO8zaB8ooKkf1IR/cymmox\n"
@@ -127,10 +164,14 @@ TEST_CASE("Asymmetric Cipher - Keys Validation", "[asymmetric-cipher]") {
127
164
  REQUIRE_FALSE(VirgilAsymmetricCipher::checkPrivateKeyPassword(
128
165
  str2bytes(kPrivateKey2), str2bytes(kWrongPwdPrivateKey2)));
129
166
  }
130
- SECTION("check if private key is encrypted") {
167
+ SECTION("check if private key is encrypted (PEM)") {
131
168
  REQUIRE(VirgilAsymmetricCipher::isPrivateKeyEncrypted(str2bytes(kPrivateKey2)));
132
169
  REQUIRE_FALSE(VirgilAsymmetricCipher::isPrivateKeyEncrypted(str2bytes(kPrivateKey1)));
133
170
  }
171
+ SECTION("check if private key is encrypted (DER)") {
172
+ REQUIRE(VirgilAsymmetricCipher::isPrivateKeyEncrypted(hex2bytes(kPrivateKey2DER)));
173
+ REQUIRE_FALSE(VirgilAsymmetricCipher::isPrivateKeyEncrypted(hex2bytes(kPrivateKey1DER)));
174
+ }
134
175
  SECTION("check malformed private key throws") {
135
176
  REQUIRE_THROWS(VirgilAsymmetricCipher::checkPrivateKeyPassword(str2bytes(kMalformedPrivateKey2),
136
177
  str2bytes(kPwdPrivateKey2)));
@@ -53,10 +53,11 @@ using virgil::crypto::VirgilByteArray;
53
53
  using virgil::crypto::foundation::VirgilSymmetricCipher;
54
54
  using virgil::crypto::foundation::VirgilRandom;
55
55
 
56
- TEST_CASE("Symmetric Cipher", "[symmetric-cipher]") {
57
- VirgilSymmetricCipher cipher(VirgilSymmetricCipher::Algorithm::AES_256_GCM);
56
+ static void test_symmetric_cipher(VirgilSymmetricCipher::Algorithm algorithm) {
58
57
  VirgilByteArray plainData = str2bytes("data to be encrypted with symmetric cipher");
59
58
 
59
+ VirgilSymmetricCipher cipher(algorithm);
60
+
60
61
  SECTION("with known KEY and IV") {
61
62
  // Init keys
62
63
  VirgilByteArray key = hex2bytes("194122b1bee2f8c25ea5e0f02b1a3376d3a3dd1252365a2acefabead3cf6ab4c");
@@ -103,3 +104,20 @@ TEST_CASE("Symmetric Cipher", "[symmetric-cipher]") {
103
104
  REQUIRE(bytes2str(plainData) == bytes2str(decryptedData));
104
105
  }
105
106
  }
107
+
108
+ TEST_CASE("Symmetric Cipher", "[symmetric-cipher]") {
109
+
110
+ SECTION("AES-128-CBC") {
111
+ test_symmetric_cipher(VirgilSymmetricCipher::Algorithm::AES_128_CBC);
112
+ }
113
+ SECTION("AES-256-CBC") {
114
+ test_symmetric_cipher(VirgilSymmetricCipher::Algorithm::AES_256_CBC);
115
+ }
116
+ SECTION("AES-128-GCM") {
117
+ test_symmetric_cipher(VirgilSymmetricCipher::Algorithm::AES_128_GCM);
118
+ }
119
+ SECTION("AES-256-GCM") {
120
+ test_symmetric_cipher(VirgilSymmetricCipher::Algorithm::AES_256_GCM);
121
+ }
122
+
123
+ }
@@ -239,6 +239,11 @@ show_info "<install_dir>: ${INSTALL_DIR}"
239
239
  # Define common build parameters
240
240
  CMAKE_ARGS="-DCMAKE_BUILD_TYPE=Release"
241
241
 
242
+ if [[ ${TARGET_NAME} =~ ^(cpp|osx|ios|appletvos|applewatchos)$ ]]; then
243
+ # Expose low level API for targets that use C/C++ headers
244
+ CMAKE_ARGS+=" -DLIB_LOW_LEVEL_API=ON"
245
+ fi
246
+
242
247
  if [[ ${TARGET_NAME} =~ ^(cpp|osx|java|net|php|python|ruby|nodejs|go)$ ]]; then
243
248
  CMAKE_ARGS+=" -DPLATFORM_ARCH=$(uname -m)"
244
249
  fi
@@ -266,6 +271,11 @@ if [[ ${TARGET_NAME} =~ ^(cpp|java|net|php|python|ruby|nodejs|go)$ ]]; then
266
271
  fi
267
272
 
268
273
  if [ "${TARGET_NAME}" == "osx" ]; then
274
+ # Add minimim OSX version flag
275
+ osx_version_min="10.10" # Yosemite
276
+ CMAKE_ARGS+=" -DCMAKE_ASM_FLAGS=-mmacosx-version-min=${osx_version_min}"
277
+ CMAKE_ARGS+=" -DCMAKE_C_FLAGS=-mmacosx-version-min=${osx_version_min}"
278
+ CMAKE_ARGS+=" -DCMAKE_CXX_FLAGS=-mmacosx-version-min=${osx_version_min}"
269
279
  # Build
270
280
  cmake ${CMAKE_ARGS} -DLANG=cpp -DPLATFORM=${TARGET_NAME} -DPLATFORM_VERSION=${SYSTEM_KERNEL_RELEASE_VERSION} "${SRC_DIR}"
271
281
  make -j4 install
@@ -42,7 +42,36 @@ set (CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH})
42
42
  set (RUBY_MODULE_NAME ${PROJECT_NAME})
43
43
  set (SWIG_MODULE_NAME ${RUBY_MODULE_NAME})
44
44
 
45
- find_host_package (Ruby REQUIRED)
45
+ # Find Ruby package
46
+ if (LANG_VERSION)
47
+ find_host_package (Ruby "${LANG_VERSION}" EXACT REQUIRED)
48
+ else ()
49
+ find_host_package (Ruby REQUIRED)
50
+ endif (LANG_VERSION)
51
+
52
+ # Find Ruby headers in given path - not system
53
+ find_host_path (RUBY_INCLUDE_DIR_LOCAL
54
+ NAMES ruby.h
55
+ HINTS
56
+ ${RUBY_HDR_DIR}
57
+ ${RUBY_ARCH_DIR}
58
+ NO_DEFAULT_PATH
59
+ )
60
+
61
+ find_host_path (RUBY_CONFIG_INCLUDE_DIR_LOCAL
62
+ NAMES ruby/config.h config.h
63
+ HINTS
64
+ ${RUBY_HDR_DIR}/${RUBY_ARCH}
65
+ ${RUBY_ARCH_DIR}
66
+ ${RUBY_ARCHHDR_DIR}
67
+ NO_DEFAULT_PATH
68
+ )
69
+
70
+ # Replace system ruby include dirs with found within RbConfig
71
+ set (RUBY_INCLUDE_DIRS
72
+ "${RUBY_INCLUDE_DIR_LOCAL}" "${RUBY_CONFIG_INCLUDE_DIR_LOCAL}"
73
+ CACHE STRING "Ruby include directories" FORCE
74
+ )
46
75
  include_directories (SYSTEM ${RUBY_INCLUDE_DIRS})
47
76
 
48
77
  if (RUBY_VERSION)
@@ -1,5 +1,5 @@
1
1
  module Virgil
2
2
  module Crypto
3
- VERSION = '2.1.2'
3
+ VERSION = '2.1.2.1'
4
4
  end
5
5
  end
@@ -43,7 +43,7 @@ module Virgil
43
43
  end
44
44
 
45
45
  def is_good
46
- !stream.closed_write?
46
+ !stream.closed?
47
47
  end
48
48
 
49
49
  def write(data)
@@ -44,7 +44,7 @@ module Virgil
44
44
  end
45
45
 
46
46
  def has_data
47
- !stream.closed_read? && !stream.eof?
47
+ !stream.closed? && !stream.eof?
48
48
  end
49
49
 
50
50
  def read
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: virgil-crypto
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.2
4
+ version: 2.1.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dmitriy Dudkin
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2017-03-27 00:00:00.000000000 Z
12
+ date: 2017-04-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -87,6 +87,7 @@ files:
87
87
  - ext/native/src/.travis.yml
88
88
  - ext/native/src/CMakeLists.txt
89
89
  - ext/native/src/ChangeLog
90
+ - ext/native/src/Dockerfile_Golang
90
91
  - ext/native/src/Jenkinsfile
91
92
  - ext/native/src/LICENSE
92
93
  - ext/native/src/README.md
@@ -978,7 +979,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
978
979
  version: '0'
979
980
  requirements: []
980
981
  rubyforge_project:
981
- rubygems_version: 2.6.8
982
+ rubygems_version: 2.5.2
982
983
  signing_key:
983
984
  specification_version: 4
984
985
  summary: Virgil Crypto library wrapper