virgil-crypto 2.0.2b2 → 2.0.6r1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +5 -1
  3. data/Gemfile +3 -0
  4. data/Rakefile +5 -4
  5. data/bin/console +1 -0
  6. data/ext/native/src/CMakeLists.txt +55 -3
  7. data/ext/native/src/ChangeLog +30 -0
  8. data/ext/native/src/VERSION +1 -1
  9. data/ext/native/src/lib/include/virgil/crypto/VirgilCryptoException.h +7 -0
  10. data/ext/native/src/lib/include/virgil/crypto/foundation/VirgilPBKDF.h +1 -1
  11. data/ext/native/src/lib/src/VirgilAsn1Writer.cxx +4 -4
  12. data/ext/native/src/lib/src/VirgilCryptoException.cxx +4 -0
  13. data/ext/native/src/lib/src/stream/VirgilStreamDataSource.cxx +1 -1
  14. data/ext/native/src/libs_ext/mbedtls/mbedtls.cmake +2 -2
  15. data/ext/native/src/tests/test_asn1_writer.cxx +6 -70
  16. data/ext/native/src/tests/test_cipher.cxx +20 -0
  17. data/ext/native/src/tests/test_stream_data_source.cxx +58 -0
  18. data/ext/native/src/utils/build.sh +8 -3
  19. data/ext/native/src/wrappers/go/CMakeLists.txt +92 -0
  20. data/ext/native/src/wrappers/net/CMakeLists.txt +1 -1
  21. data/ext/native/src/wrappers/net/src/VirgilStreamDataSink.cs +1 -3
  22. data/ext/native/src/wrappers/net/src/VirgilStreamDataSource.cs +1 -3
  23. data/ext/native/src/wrappers/ruby/CMakeLists.txt +4 -6
  24. data/ext/native/src/wrappers/swig/common.i +7 -0
  25. data/ext/native/src/wrappers/swig/go/common.i.in +66 -0
  26. data/ext/native/src/wrappers/swig/util.i +1 -0
  27. data/ext/rakefile.rb +65 -0
  28. data/lib/virgil/crypto.rb +2 -2
  29. data/lib/virgil/crypto/bytes.rb +4 -0
  30. data/lib/virgil/crypto/version.rb +1 -1
  31. data/lib/virgil/crypto/virgil_stream_data_sink.rb +4 -3
  32. data/lib/virgil/crypto/virgil_stream_data_source.rb +4 -3
  33. data/lib/virgil/native_crypto.rb +100 -0
  34. data/lib/virgil/os.rb +17 -0
  35. data/virgil-crypto.gemspec +12 -6
  36. metadata +20 -13
  37. data/ext/native/extconf.rb +0 -35
@@ -0,0 +1,100 @@
1
+ require 'virgil/crypto/version'
2
+ require 'virgil/os'
3
+ require 'net/http'
4
+ require 'open-uri'
5
+ require 'zlib'
6
+ require 'fileutils'
7
+ require 'rake'
8
+
9
+ class NativeCrypto
10
+ LIBRARY_LIST_URL = "https://cdn.virgilsecurity.com/virgil-crypto/ruby/"
11
+
12
+ def self.load_library
13
+ library_file_name = 'virgil_crypto_ruby.'
14
+ library_file_name += required_library_os == 'linux' ? 'os' : 'bundle'
15
+ crypto_folder_path = "#{lib_path}/virgil/crypto"
16
+ download_library(get_library_path, library_file_name, crypto_folder_path)
17
+ end
18
+
19
+
20
+ def self.get_library_path
21
+ body = get_https(LIBRARY_LIST_URL)
22
+ raise "Can't download native library. Please try later." unless body
23
+ ruby_version = RUBY_VERSION.sub(/\.[^\.]+$/, "")
24
+ href_template = /virgil-crypto-#{required_library_version}\b-.+\b?-ruby-#{ruby_version}-#{required_library_os}(?!tgz).+tgz"/
25
+ href_list = body.scan href_template
26
+
27
+ if href_list.last.nil?
28
+ raise "Sorry. Correct version #{required_library_version} of Native Library is missing."
29
+ end
30
+
31
+ href_list.last.sub(/"$/, '')
32
+
33
+ end
34
+
35
+ def self.get_https(url)
36
+ uri = URI(url)
37
+ Net::HTTP.start(uri.host, uri.port,
38
+ :use_ssl => true) do |http|
39
+ http.read_timeout = 100
40
+ request = Net::HTTP::Get.new uri
41
+ response = http.request request
42
+ case response
43
+ when Net::HTTPSuccess
44
+ response.body
45
+ when Net::HTTPServerError
46
+ warn "#{response.message}: try again later?"
47
+ nil
48
+ else
49
+ warn response.message
50
+ nil
51
+ end
52
+ end
53
+ end
54
+
55
+ def self.required_library_version
56
+ Virgil::Crypto::VERSION.scan(/\d+\.\d+\.\d+(\D*\d*)$/) do |postfix|
57
+ return Virgil::Crypto::VERSION.sub(postfix.last, '')
58
+ end
59
+ return ''
60
+ end
61
+
62
+ def self.required_library_os
63
+ if OS.linux?
64
+ "linux"
65
+ elsif OS.mac?
66
+ "darwin"
67
+ end
68
+ end
69
+
70
+ def self.download_library(source_path, file_name, folder_path)
71
+
72
+ system('mkdir -p tmp')
73
+ archive_path = 'tmp/native_library.tar.gz'
74
+
75
+ open(archive_path, 'w') do |local_file|
76
+ begin
77
+ open(LIBRARY_LIST_URL + source_path) do |remote_file|
78
+ local_file.write(Zlib::GzipReader.new(remote_file).read)
79
+ end
80
+ rescue Exception => e
81
+ raise "Can't download native library from #{source_path} by reason: #{e}"
82
+ end
83
+ end
84
+
85
+ library_folder_name = source_path.sub('.tgz', '')
86
+
87
+ system("tar xvf #{archive_path} -C tmp/")
88
+
89
+
90
+ system("cp tmp/#{library_folder_name}/lib/#{file_name} #{folder_path}/#{file_name}")
91
+ system('rm -rf tmp')
92
+
93
+ end
94
+
95
+ def self.lib_path
96
+ File.expand_path('../../..', __FILE__) + "/lib"
97
+ end
98
+
99
+
100
+ end
data/lib/virgil/os.rb ADDED
@@ -0,0 +1,17 @@
1
+ module OS
2
+ def OS.windows?
3
+ (/cygwin|mswin|mingw|bccwin|wince|emx/ =~ RUBY_PLATFORM) != nil
4
+ end
5
+
6
+ def OS.mac?
7
+ (/darwin/ =~ RUBY_PLATFORM) != nil
8
+ end
9
+
10
+ def OS.unix?
11
+ !OS.windows?
12
+ end
13
+
14
+ def OS.linux?
15
+ OS.unix? and not OS.mac?
16
+ end
17
+ end
@@ -1,31 +1,36 @@
1
1
  # coding: utf-8
2
2
  lib = File.expand_path('../lib', __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'virgil/os'
4
5
  require 'virgil/crypto/version'
5
6
 
7
+ abort "Windows is not supported yet." if OS.windows?
8
+
9
+
6
10
  Gem::Specification.new do |spec|
7
11
  spec.name = "virgil-crypto"
8
12
  spec.version = Virgil::Crypto::VERSION
9
- spec.authors = ["Dmitriy Dudkin"]
10
- spec.email = ["dudkin.dmitriy@gmail.com"]
13
+ spec.authors = ["Dmitriy Dudkin", "Sergey Seroshtan"]
14
+ spec.email = ["dudkin.dmitriy@gmail.com", "sseroshtan@virgilsecurity.com"]
11
15
 
12
16
  spec.summary = %q{Virgil Crypto library wrapper}
13
17
  spec.description = %q{Virgil Crypto library wrapper}
14
18
  spec.homepage = "http://github.com/VirgilSecurity/virgil-crypto-ruby"
15
- spec.licenses = ['Nonstandard']
19
+ spec.licenses = ['BSD-3-Clause']
16
20
 
17
21
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
22
  spec.bindir = "exe"
19
23
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
24
  spec.require_paths = ["lib"]
21
- spec.extensions = ['ext/native/extconf.rb']
22
-
23
- spec.add_development_dependency "rake-compiler", "~> 1.0"
25
+ spec.extensions = [ 'ext/rakefile.rb']
26
+ spec.required_ruby_version = '>= 2.1.10'
24
27
  spec.add_development_dependency "bundler", "~> 1.12"
28
+ spec.add_development_dependency "rake-compiler", "~> 1.0"
25
29
  spec.add_development_dependency "rake", "~> 10.0"
26
30
  spec.add_development_dependency "minitest-reporters", "~> 1.1"
27
31
 
28
32
  current_dir = File.expand_path(File.dirname(__FILE__))
33
+
29
34
  # get an array of submodule dirs by executing 'pwd' inside each submodule
30
35
  `git submodule --quiet foreach pwd`.split($\).each do |submodule_path|
31
36
  # for each submodule, change working directory to that submodule
@@ -51,3 +56,4 @@ Gem::Specification.new do |spec|
51
56
  end
52
57
  end
53
58
  end
59
+
metadata CHANGED
@@ -1,43 +1,44 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: virgil-crypto
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.2b2
4
+ version: 2.0.6r1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dmitriy Dudkin
8
+ - Sergey Seroshtan
8
9
  autorequire:
9
10
  bindir: exe
10
11
  cert_chain: []
11
- date: 2016-11-23 00:00:00.000000000 Z
12
+ date: 2017-02-23 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
- name: rake-compiler
15
+ name: bundler
15
16
  requirement: !ruby/object:Gem::Requirement
16
17
  requirements:
17
18
  - - "~>"
18
19
  - !ruby/object:Gem::Version
19
- version: '1.0'
20
+ version: '1.12'
20
21
  type: :development
21
22
  prerelease: false
22
23
  version_requirements: !ruby/object:Gem::Requirement
23
24
  requirements:
24
25
  - - "~>"
25
26
  - !ruby/object:Gem::Version
26
- version: '1.0'
27
+ version: '1.12'
27
28
  - !ruby/object:Gem::Dependency
28
- name: bundler
29
+ name: rake-compiler
29
30
  requirement: !ruby/object:Gem::Requirement
30
31
  requirements:
31
32
  - - "~>"
32
33
  - !ruby/object:Gem::Version
33
- version: '1.12'
34
+ version: '1.0'
34
35
  type: :development
35
36
  prerelease: false
36
37
  version_requirements: !ruby/object:Gem::Requirement
37
38
  requirements:
38
39
  - - "~>"
39
40
  - !ruby/object:Gem::Version
40
- version: '1.12'
41
+ version: '1.0'
41
42
  - !ruby/object:Gem::Dependency
42
43
  name: rake
43
44
  requirement: !ruby/object:Gem::Requirement
@@ -69,9 +70,10 @@ dependencies:
69
70
  description: Virgil Crypto library wrapper
70
71
  email:
71
72
  - dudkin.dmitriy@gmail.com
73
+ - sseroshtan@virgilsecurity.com
72
74
  executables: []
73
75
  extensions:
74
- - ext/native/extconf.rb
76
+ - ext/rakefile.rb
75
77
  extra_rdoc_files: []
76
78
  files:
77
79
  - ".gitignore"
@@ -81,7 +83,6 @@ files:
81
83
  - Rakefile
82
84
  - bin/console
83
85
  - bin/setup
84
- - ext/native/extconf.rb
85
86
  - ext/native/src/.gitignore
86
87
  - ext/native/src/.travis.yml
87
88
  - ext/native/src/CMakeLists.txt
@@ -234,6 +235,7 @@ files:
234
235
  - ext/native/src/tests/test_runner.cxx
235
236
  - ext/native/src/tests/test_signer.cxx
236
237
  - ext/native/src/tests/test_stream_cipher.cxx
238
+ - ext/native/src/tests/test_stream_data_source.cxx
237
239
  - ext/native/src/tests/test_symmetric_cipher.cxx
238
240
  - ext/native/src/tests/test_tag_filter.cxx
239
241
  - ext/native/src/tests/test_tiny_cipher.cxx
@@ -248,6 +250,7 @@ files:
248
250
  - ext/native/src/wrappers/asmjs/helpers.js
249
251
  - ext/native/src/wrappers/asmjs/patch_embind.pl
250
252
  - ext/native/src/wrappers/asmjs/wrapper.cxx
253
+ - ext/native/src/wrappers/go/CMakeLists.txt
251
254
  - ext/native/src/wrappers/java/CMakeLists.txt
252
255
  - ext/native/src/wrappers/java/src/VirgilStreamDataSink.java
253
256
  - ext/native/src/wrappers/java/src/VirgilStreamDataSource.java
@@ -939,21 +942,25 @@ files:
939
942
  - ext/native/src/wrappers/swig/csharp/VirgilByteArray.i
940
943
  - ext/native/src/wrappers/swig/csharp/common.i
941
944
  - ext/native/src/wrappers/swig/csharp/csharphead.swg.in
945
+ - ext/native/src/wrappers/swig/go/common.i.in
942
946
  - ext/native/src/wrappers/swig/java/VirgilByteArray.i
943
947
  - ext/native/src/wrappers/swig/java/common.i
944
948
  - ext/native/src/wrappers/swig/php/VirgilByteArray.i
945
949
  - ext/native/src/wrappers/swig/php/common.i
946
950
  - ext/native/src/wrappers/swig/util.i
947
951
  - ext/native/src/wrappers/swig/wrapper.i.in
952
+ - ext/rakefile.rb
948
953
  - lib/virgil/crypto.rb
949
954
  - lib/virgil/crypto/bytes.rb
950
955
  - lib/virgil/crypto/version.rb
951
956
  - lib/virgil/crypto/virgil_stream_data_sink.rb
952
957
  - lib/virgil/crypto/virgil_stream_data_source.rb
958
+ - lib/virgil/native_crypto.rb
959
+ - lib/virgil/os.rb
953
960
  - virgil-crypto.gemspec
954
961
  homepage: http://github.com/VirgilSecurity/virgil-crypto-ruby
955
962
  licenses:
956
- - Nonstandard
963
+ - BSD-3-Clause
957
964
  metadata: {}
958
965
  post_install_message:
959
966
  rdoc_options: []
@@ -963,7 +970,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
963
970
  requirements:
964
971
  - - ">="
965
972
  - !ruby/object:Gem::Version
966
- version: '0'
973
+ version: 2.1.10
967
974
  required_rubygems_version: !ruby/object:Gem::Requirement
968
975
  requirements:
969
976
  - - ">"
@@ -971,7 +978,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
971
978
  version: 1.3.1
972
979
  requirements: []
973
980
  rubyforge_project:
974
- rubygems_version: 2.6.8
981
+ rubygems_version: 2.4.5.2
975
982
  signing_key:
976
983
  specification_version: 4
977
984
  summary: Virgil Crypto library wrapper
@@ -1,35 +0,0 @@
1
- require 'mkmf'
2
-
3
- CMAKE = find_executable "cmake"
4
- abort "cmake >= 3.2 is required" unless CMAKE
5
-
6
- SCRIPT_DIR = File.expand_path('../', __FILE__)
7
- SRC_DIR = File.join(SCRIPT_DIR, 'src')
8
- CURRENT_DIR = Dir.pwd
9
- LIB_DIR = File.expand_path('../../lib', SCRIPT_DIR)
10
- INSTALL_DIR = File.join(LIB_DIR, 'virgil', 'crypto')
11
- INCLUDE_DIRS = [
12
- RUBY_INCLUDE_DIR = RbConfig::CONFIG['rubyhdrdir'],
13
- RUBY_CONFIG_INCLUDE_DIR=RbConfig::CONFIG['rubyarchhdrdir']
14
- ].join(' ').quote
15
- RUBY_LIB_DIR = RbConfig::CONFIG['libdir']
16
-
17
- CMAKE_COMMAND = [
18
- CMAKE,
19
- '-DCMAKE_BUILD_TYPE=Release',
20
- "-DRUBY_VERSION=#{RUBY_VERSION}",
21
- "-DRUBY_INCLUDE_DIR=#{RUBY_INCLUDE_DIR}",
22
- "-DRUBY_CONFIG_INCLUDE_DIR=#{RUBY_CONFIG_INCLUDE_DIR}",
23
- "-DRUBY_INCLUDE_DIRS=#{INCLUDE_DIRS}",
24
- "-DRUBY_LIBRARY=#{RUBY_LIB_DIR}",
25
- '-DRUBY_LIB_NAME=native',
26
- '-DSWIG_MODULE_NAME=\"virgil::crypto::native\"',
27
- '-DCMAKE_SWIG_FLAGS=-autorename',
28
- "-DCMAKE_INSTALL_PREFIX=#{CURRENT_DIR}",
29
- "-DINSTALL_API_DIR_NAME=#{INSTALL_DIR}",
30
- "-DINSTALL_LIB_DIR_NAME=#{INSTALL_DIR}",
31
- '-DLANG=ruby',
32
- SRC_DIR
33
- ].join(' ')
34
-
35
- system(CMAKE_COMMAND)