krypt-core 0.0.1 → 0.0.2.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. checksums.yaml +7 -0
  2. data/README.rdoc +14 -0
  3. data/Rakefile +88 -0
  4. data/ext/krypt/core/krypt-core.c +1 -2
  5. data/ext/krypt/core/krypt-core.h +0 -12
  6. data/ext/krypt/core/krypt_asn1_parser.c +2 -2
  7. data/ext/krypt/core/krypt_missing.c +75 -0
  8. data/ext/krypt/core/krypt_missing.h +5 -0
  9. data/ext/krypt/core/krypt_pem.c +1 -1
  10. data/lib/{krypt-core.rb → krypt/core.rb} +8 -1
  11. metadata +40 -80
  12. data/ext/krypt/core/Makefile +0 -221
  13. data/ext/krypt/core/extconf.h +0 -8
  14. data/ext/krypt/core/krypt-core.o +0 -0
  15. data/ext/krypt/core/krypt-provider.h +0 -86
  16. data/ext/krypt/core/krypt_asn1-internal.o +0 -0
  17. data/ext/krypt/core/krypt_asn1.o +0 -0
  18. data/ext/krypt/core/krypt_asn1_codec.o +0 -0
  19. data/ext/krypt/core/krypt_asn1_in_adapter.o +0 -0
  20. data/ext/krypt/core/krypt_asn1_in_chunked.o +0 -0
  21. data/ext/krypt/core/krypt_asn1_in_definite.o +0 -0
  22. data/ext/krypt/core/krypt_asn1_parser.o +0 -0
  23. data/ext/krypt/core/krypt_asn1_template.o +0 -0
  24. data/ext/krypt/core/krypt_asn1_template_encoder.o +0 -0
  25. data/ext/krypt/core/krypt_asn1_template_parser.o +0 -0
  26. data/ext/krypt/core/krypt_b64.o +0 -0
  27. data/ext/krypt/core/krypt_digest.c +0 -391
  28. data/ext/krypt/core/krypt_digest.h +0 -51
  29. data/ext/krypt/core/krypt_digest.o +0 -0
  30. data/ext/krypt/core/krypt_error.o +0 -0
  31. data/ext/krypt/core/krypt_hex.o +0 -0
  32. data/ext/krypt/core/krypt_io.o +0 -0
  33. data/ext/krypt/core/krypt_io_in_pem.o +0 -0
  34. data/ext/krypt/core/krypt_missing.o +0 -0
  35. data/ext/krypt/core/krypt_pem.o +0 -0
  36. data/ext/krypt/core/krypt_provider-internal.h +0 -40
  37. data/ext/krypt/core/krypt_provider.c +0 -136
  38. data/ext/krypt/core/krypt_provider.o +0 -0
  39. data/ext/krypt/core/kryptcore.so +0 -0
  40. data/ext/krypt/core/mkmf.log +0 -130
  41. data/lib/krypt-core/version.rb +0 -3
  42. data/lib/kryptcore.so +0 -0
  43. data/spec/README +0 -2
  44. data/test/README +0 -2
  45. data/test/res/certificate.cer +0 -0
  46. data/test/resources.rb +0 -48
  47. data/test/scratch.rb +0 -17
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: d544e2c899e9a8eb9b8b526d21086e7c90b5cca8
4
+ data.tar.gz: 5b4f288dbca756ba15e47631221c8133985b671f
5
+ SHA512:
6
+ metadata.gz: e4ec5681d1746859827612c4d7b412e2dbb0b193a3f852822d566a1ecc449c621f92769c313a094736ce2517b5f4f415e383bc36a7e202276ff95a140b839ed4
7
+ data.tar.gz: 4a1a55537650dfa7c460ab2e95e87bc1de30566b907009caabab6da8d106eda06659a53a64098fd890c940e27915c9d18450dba112ce5083accacf46612e7723
data/README.rdoc ADDED
@@ -0,0 +1,14 @@
1
+ == krypt-core-c
2
+
3
+ The C implementation of the krypt-core API.
4
+
5
+ == krypt
6
+
7
+ For more information about krypt, please have a
8
+ look at the project and its wiki at
9
+
10
+ https://github.com/krypt/krypt
11
+
12
+ Copyright (c) 2011-2013
13
+ Hiroshi Nakamura <nahi@ruby-lang.org>
14
+ Martin Bosslet <Martin.Bosslet@gmail.com>
data/Rakefile ADDED
@@ -0,0 +1,88 @@
1
+ require 'rake'
2
+ require 'rake/extensiontask'
3
+ require 'rspec/core/rake_task'
4
+ require 'rdoc/task'
5
+
6
+ KRYPT_HOME = '../krypt'
7
+
8
+ $config_options = []
9
+
10
+ task :default => :compile
11
+
12
+ task :clean do
13
+ rm_f FileList['*.gcov']
14
+ end
15
+
16
+ Rake::ExtensionTask.new('kryptcore') do |ext|
17
+ ext.ext_dir = "ext/krypt/core"
18
+ ext.lib_dir = "lib"
19
+ ext.config_options = $config_options
20
+ ext.cross_compile = true
21
+ ext.cross_platform = 'i386-mswin32'
22
+ end
23
+
24
+ RSpec::Core::RakeTask.new('spec-run') do |spec|
25
+ spec.pattern = File.join(KRYPT_HOME, 'spec/**/*_spec.rb')
26
+ spec.fail_on_error = false
27
+ end
28
+
29
+ task 'enable-coverage' do
30
+ # ugly, but we cannot define 2 ExtensionTasks for the same ext.name.
31
+ $config_options << '-g'
32
+ end
33
+
34
+ task 'enable-profiler' do
35
+ #to enable profiling run
36
+ #rake build:profiler -- --with-profiler-dir=<path_to>/gperftools/'
37
+ $config_options << '-p'
38
+ end
39
+
40
+ desc 'requires gcov and lcov in $PATH'
41
+ task 'report-coverage' do
42
+ outdir = File.dirname(Dir['tmp/**/Makefile'].first)
43
+ curdir = Dir.pwd
44
+ Dir.chdir(outdir) do
45
+ sh "lcov -c -i -d . -o kryptcore_base.info"
46
+ Dir.entries("#{curdir}/ext/krypt/core").each do |f|
47
+ next if File.directory? f || f !~ /\.[hc]$/
48
+ # See http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=535755
49
+ sh "gcov -o . #{f}"
50
+ end
51
+ sh "lcov -c -d . -o kryptcore.info"
52
+ sh "lcov -a kryptcore.info -a kryptcore_base.info -o kryptcore_total.info"
53
+ sh "lcov -r kryptcore_total.info ruby.h --output-file kryptcore_total.info"
54
+ sh "lcov -r kryptcore_total.info '*include*' --output-file kryptcore_total.info"
55
+ sh "genhtml -o coverage kryptcore_total.info"
56
+ end
57
+ end
58
+
59
+ desc 'Build ext for coverage and generate a coverage report of spec.'
60
+ task 'coverage' => ['clean', 'enable-coverage', 'compile', 'spec-run', 'report-coverage']
61
+
62
+ desc 'Build and run RSpec code examples'
63
+ task 'spec' => ['compile', 'spec-run']
64
+
65
+ task 'build' => 'compile'
66
+
67
+ task 'build-debug' => ['enable-coverage', 'build']
68
+ task 'build-profiler' => ['enable-profiler', 'build']
69
+
70
+ Rake::RDocTask.new("doc") do |rdoc|
71
+ rdoc.rdoc_dir = 'doc'
72
+ rdoc.title = "Krypt-Core API"
73
+ rdoc.rdoc_files.include('README.rdoc')
74
+ rdoc.rdoc_files.include('ext/**/*')
75
+ end
76
+
77
+ desc 'Ensure that bundle is installed for spec run'
78
+ task 'bundler-install' do
79
+ sh 'bundle install'
80
+ end
81
+
82
+ desc 'Run the specs for valgrind analysis'
83
+ task 'valgrind-spec-run' do
84
+ sh 'valgrind --suppressions=.ruby.supp --leak-check=full --num-callers=50 --partial-loads-ok=yes --undef-value-errors=no --trace-children=yes bundle exec rake spec'
85
+ end
86
+
87
+ desc 'Build from scratch with debug symbols and run valgrind on a spec run (requires valgrind on PATH)'
88
+ task 'valgrind' => ['clean', 'build-debug', 'bundler-install', 'valgrind-spec-run']
@@ -103,8 +103,7 @@ Init_kryptcore(void)
103
103
  sKrypt_ID_SORT = rb_intern("sort");
104
104
 
105
105
  /* Init components */
106
+ Init_krypt_helper();
106
107
  Init_krypt_io();
107
108
  Init_krypt_asn1();
108
- Init_krypt_native_provider();
109
- Init_krypt_digest();
110
109
  }
@@ -29,8 +29,6 @@
29
29
  #if !defined(_KRYPT_CORE_H_)
30
30
  #define _KRYPT_CORE_H_
31
31
 
32
- #include RUBY_EXTCONF_H
33
-
34
32
  #if defined(__cplusplus)
35
33
  extern "C" {
36
34
  #endif
@@ -38,11 +36,6 @@ extern "C" {
38
36
  #define RSTRING_NOT_MODIFIED 1
39
37
  #define RUBY_READONLY_STRING 1
40
38
 
41
- #include <ruby.h>
42
-
43
- #if defined(HAVE_RUBY_IO_H)
44
- #include <ruby/io.h>
45
- #endif
46
39
 
47
40
  /* This is just a precaution to take remind us of thread safety
48
41
  * issues in case there would be no GVL */
@@ -60,17 +53,12 @@ extern ID sKrypt_ID_EQUALS;
60
53
  extern ID sKrypt_ID_SORT_BANG;
61
54
  extern ID sKrypt_ID_SORT;
62
55
 
63
- /** krypt-provider interface */
64
- #include "krypt-provider.h"
65
- #include "krypt_provider-internal.h"
66
-
67
56
  /** krypt-core headers **/
68
57
  #include "krypt_error.h"
69
58
  #include "krypt_missing.h"
70
59
  #include "krypt_io.h"
71
60
  #include "krypt_asn1.h"
72
61
  #include "krypt_asn1_template.h"
73
- #include "krypt_digest.h"
74
62
 
75
63
  VALUE krypt_to_der_if_possible(VALUE obj);
76
64
  VALUE krypt_to_der(VALUE obj);
@@ -105,8 +105,8 @@ int_asn1_header_new(binyo_instream *in, krypt_asn1_header *header)
105
105
  parsed_header->tag_class = ID2SYM(tag_class);
106
106
  parsed_header->constructed = header->is_constructed ? Qtrue : Qfalse;
107
107
  parsed_header->infinite = header->is_infinite ? Qtrue : Qfalse;
108
- parsed_header->length = LONG2NUM(header->length);
109
- parsed_header->header_length = LONG2NUM(header->tag_len + header->length_len);
108
+ parsed_header->length = SIZET2NUM(header->length);
109
+ parsed_header->header_length = SIZET2NUM(header->tag_len + header->length_len);
110
110
  parsed_header->in = in;
111
111
  parsed_header->header = header;
112
112
  parsed_header->value = Qnil;
@@ -28,6 +28,9 @@
28
28
 
29
29
  #include "krypt-core.h"
30
30
 
31
+ VALUE mKryptHelper;
32
+ VALUE mKryptHelperString;
33
+
31
34
  #ifndef HAVE_RB_STR_ENCODE
32
35
  VALUE
33
36
  rb_str_encode(VALUE str, VALUE to, int ecflags, VALUE ecopts)
@@ -236,3 +239,75 @@ int krypt_asn1_decode_bignum(uint8_t *bytes, size_t len, VALUE *out)
236
239
  }
237
240
  #endif
238
241
 
242
+ static VALUE
243
+ krypt_helper_string_buffer(VALUE self, VALUE size)
244
+ {
245
+ return rb_str_buf_new(NUM2LONG(size));
246
+ }
247
+
248
+ static inline long
249
+ int_check_and_get_len(VALUE s1, VALUE s2)
250
+ {
251
+ long len = RSTRING_LEN(s1);
252
+ if (RSTRING_LEN(s2) != len) {
253
+ rb_raise(eKryptError, "String sizes don't match");
254
+ }
255
+ return len;
256
+ }
257
+
258
+ static inline void
259
+ int_xor(char *source1, char *source2, char *target, long len)
260
+ {
261
+ int i;
262
+ for (i = 0; i < len; i++) {
263
+ target[i] = source1[i] ^ source2[i];
264
+ }
265
+ }
266
+
267
+
268
+ static VALUE
269
+ krypt_helper_string_xor(VALUE self, VALUE s1, VALUE s2)
270
+ {
271
+ long len = int_check_and_get_len(s1, s2);
272
+ char *result = ALLOCA_N(char, len);
273
+
274
+ int_xor(RSTRING_PTR(s1), RSTRING_PTR(s2), result, len);
275
+ return rb_str_new(result, len);
276
+ }
277
+
278
+ static VALUE
279
+ krypt_helper_string_xor_bang(VALUE self, VALUE s1, VALUE s2)
280
+ {
281
+ long len = int_check_and_get_len(s1, s2);
282
+ #ifndef HAVE_RB_STR_PTR_READONLY
283
+ char *result = RSTRING_PTR(s1);
284
+ #else
285
+ /* Rubinius: We use RUBY_READ_ONLY_STRING, so we can't write to the
286
+ RSTRING_PTR directly */
287
+ char *result = rb_str_ptr(s1);
288
+ #endif
289
+ int_xor(result, RSTRING_PTR(s2), result, len);
290
+ return s1;
291
+ }
292
+
293
+ void Init_krypt_helper(void)
294
+ {
295
+ #if 0
296
+ mKrypt = rb_define_module("Krypt"); /* Let RDoc know */
297
+ #endif
298
+
299
+ mKryptHelper = rb_path2class("Krypt::Helper");
300
+
301
+ /*
302
+ * Document-module: Krypt::Helper::String
303
+ *
304
+ * Provides features not available in the String class itself to deal
305
+ * efficiently with binary data.
306
+ */
307
+ mKryptHelperString = rb_define_module_under(mKryptHelper, "String");
308
+
309
+ rb_define_module_function(mKryptHelperString, "buffer", krypt_helper_string_buffer, 1);
310
+ rb_define_module_function(mKryptHelperString, "xor", krypt_helper_string_xor, 2);
311
+ rb_define_module_function(mKryptHelperString, "xor!", krypt_helper_string_xor_bang, 2);
312
+ }
313
+
@@ -55,6 +55,11 @@ struct tm *krypt_gmtime_r(const time_t *tp, struct tm *result);
55
55
  #define gmtime_r(t, tm) krypt_gmtime_r((t), (tm))
56
56
  #endif
57
57
 
58
+ extern VALUE mKryptHelper;
59
+ extern VALUE mKryptHelperString;
60
+
61
+ void Init_krypt_helper(void);
62
+
58
63
  int krypt_asn1_encode_bignum(VALUE bignum, uint8_t **out, size_t *len);
59
64
  int krypt_asn1_decode_bignum(uint8_t *bytes, size_t len, VALUE *out);
60
65
 
@@ -118,7 +118,7 @@ krypt_pem_decode(VALUE self, VALUE pem)
118
118
  if (krypt_pem_get_last_name(in, &name, &len) == BINYO_ERR) goto error;
119
119
  vname = rb_str_new((const char *) name, len);
120
120
  xfree(name);
121
- rb_yield_values(3, der, vname, LONG2NUM(i++));
121
+ rb_yield_values(3, der, vname, SIZET2NUM(i++));
122
122
  }
123
123
  krypt_pem_continue_stream(in);
124
124
  }
@@ -30,6 +30,13 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
30
30
 
31
31
  =end
32
32
 
33
+ # The order is important - kryptcore.so depends on binyo
33
34
  require 'binyo'
34
35
  require 'kryptcore.so'
35
- require 'krypt-provider-openssl'
36
+ require 'krypt/provider/openssl'
37
+
38
+ begin
39
+ ossl = Krypt::Provider::OpenSSL.new
40
+ Krypt::Provider.register(ossl)
41
+ end
42
+
metadata CHANGED
@@ -1,48 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: krypt-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
5
- prerelease:
4
+ version: 0.0.2.rc1
6
5
  platform: ruby
7
6
  authors:
8
7
  - Hiroshi Nakamura, Martin Bosslet
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-02-27 00:00:00.000000000 Z
11
+ date: 2014-02-23 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: binyo
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - '='
20
18
  - !ruby/object:Gem::Version
21
- version: 0.0.1
19
+ version: 0.0.2.rc1
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - '='
28
25
  - !ruby/object:Gem::Version
29
- version: 0.0.1
26
+ version: 0.0.2.rc1
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: krypt-provider-openssl
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
31
  - - '='
36
32
  - !ruby/object:Gem::Version
37
- version: 0.0.1
33
+ version: 0.0.2.rc1
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
38
  - - '='
44
39
  - !ruby/object:Gem::Version
45
- version: 0.0.1
40
+ version: 0.0.2.rc1
46
41
  description: krypt-core API for C(++)-based Rubies
47
42
  email: Martin.Bosslet@gmail.com
48
43
  executables: []
@@ -51,100 +46,65 @@ extensions:
51
46
  extra_rdoc_files: []
52
47
  files:
53
48
  - LICENSE
54
- - ext/krypt/core/krypt_asn1_template.o
55
- - ext/krypt/core/krypt_io.h
56
- - ext/krypt/core/krypt_asn1_in_adapter.c
57
- - ext/krypt/core/krypt_missing.h
58
- - ext/krypt/core/krypt_asn1_in_definite.c
59
- - ext/krypt/core/krypt-core.h
60
- - ext/krypt/core/Makefile
61
- - ext/krypt/core/binyo-io-buffer.h
62
- - ext/krypt/core/krypt_asn1.h
63
- - ext/krypt/core/krypt_io_in_pem.c
64
- - ext/krypt/core/krypt_io_in_pem.o
65
- - ext/krypt/core/krypt_hex.c
66
- - ext/krypt/core/krypt_asn1_in_definite.o
67
- - ext/krypt/core/krypt_asn1_template-internal.h
68
- - ext/krypt/core/krypt_provider.c
69
- - ext/krypt/core/krypt_b64.o
49
+ - README.rdoc
50
+ - Rakefile
70
51
  - ext/krypt/core/binyo-error.h
71
- - ext/krypt/core/krypt_error.o
72
- - ext/krypt/core/extconf.rb
73
- - ext/krypt/core/krypt_asn1-internal.c
74
- - ext/krypt/core/krypt_pem.o
75
- - ext/krypt/core/krypt_hex.h
76
- - ext/krypt/core/krypt_digest.h
52
+ - ext/krypt/core/binyo-io-buffer.h
77
53
  - ext/krypt/core/binyo-io.h
78
- - ext/krypt/core/krypt_io.o
79
- - ext/krypt/core/krypt_error.c
80
- - ext/krypt/core/krypt_asn1_template_encoder.c
81
- - ext/krypt/core/krypt_asn1_parser.c
82
- - ext/krypt/core/krypt_b64.h
83
- - ext/krypt/core/krypt_provider.o
54
+ - ext/krypt/core/extconf.rb
84
55
  - ext/krypt/core/krypt-core.c
85
- - ext/krypt/core/krypt_asn1_template_parser.o
86
- - ext/krypt/core/krypt_asn1-internal.o
56
+ - ext/krypt/core/krypt-core.h
57
+ - ext/krypt/core/krypt_asn1-internal.c
87
58
  - ext/krypt/core/krypt_asn1-internal.h
88
- - ext/krypt/core/krypt_asn1_template_encoder.o
89
- - ext/krypt/core/krypt_asn1_in_adapter.o
90
- - ext/krypt/core/krypt_digest.o
91
- - ext/krypt/core/krypt_asn1.o
92
- - ext/krypt/core/krypt_asn1_codec.o
93
- - ext/krypt/core/krypt_io.c
94
- - ext/krypt/core/krypt-core.o
95
- - ext/krypt/core/krypt_digest.c
96
- - ext/krypt/core/krypt_missing.c
97
- - ext/krypt/core/krypt_asn1_template_parser.c
59
+ - ext/krypt/core/krypt_asn1.c
60
+ - ext/krypt/core/krypt_asn1.h
61
+ - ext/krypt/core/krypt_asn1_codec.c
62
+ - ext/krypt/core/krypt_asn1_in_adapter.c
63
+ - ext/krypt/core/krypt_asn1_in_chunked.c
64
+ - ext/krypt/core/krypt_asn1_in_definite.c
65
+ - ext/krypt/core/krypt_asn1_parser.c
66
+ - ext/krypt/core/krypt_asn1_template-internal.h
98
67
  - ext/krypt/core/krypt_asn1_template.c
99
- - ext/krypt/core/mkmf.log
68
+ - ext/krypt/core/krypt_asn1_template.h
69
+ - ext/krypt/core/krypt_asn1_template_encoder.c
70
+ - ext/krypt/core/krypt_asn1_template_parser.c
100
71
  - ext/krypt/core/krypt_b64-internal.h
101
- - ext/krypt/core/kryptcore.so
102
- - ext/krypt/core/krypt_hex.o
103
- - ext/krypt/core/krypt_asn1_parser.o
104
- - ext/krypt/core/krypt_pem.c
105
- - ext/krypt/core/extconf.h
106
- - ext/krypt/core/krypt_asn1_in_chunked.o
107
- - ext/krypt/core/krypt_asn1_codec.c
108
- - ext/krypt/core/krypt_missing.o
109
72
  - ext/krypt/core/krypt_b64.c
73
+ - ext/krypt/core/krypt_b64.h
74
+ - ext/krypt/core/krypt_error.c
110
75
  - ext/krypt/core/krypt_error.h
111
- - ext/krypt/core/krypt_asn1_in_chunked.c
112
76
  - ext/krypt/core/krypt_hex-internal.h
113
- - ext/krypt/core/krypt-provider.h
114
- - ext/krypt/core/krypt_provider-internal.h
115
- - ext/krypt/core/krypt_asn1_template.h
116
- - ext/krypt/core/krypt_asn1.c
117
- - lib/krypt-core.rb
118
- - lib/krypt-core/version.rb
119
- - lib/kryptcore.so
120
- - spec/README
121
- - test/scratch.rb
122
- - test/README
123
- - test/resources.rb
124
- - test/res/certificate.cer
77
+ - ext/krypt/core/krypt_hex.c
78
+ - ext/krypt/core/krypt_hex.h
79
+ - ext/krypt/core/krypt_io.c
80
+ - ext/krypt/core/krypt_io.h
81
+ - ext/krypt/core/krypt_io_in_pem.c
82
+ - ext/krypt/core/krypt_missing.c
83
+ - ext/krypt/core/krypt_missing.h
84
+ - ext/krypt/core/krypt_pem.c
85
+ - lib/krypt/core.rb
125
86
  homepage: https://github.com/krypt/krypt-core-c
126
87
  licenses:
127
88
  - MIT
89
+ metadata: {}
128
90
  post_install_message:
129
91
  rdoc_options: []
130
92
  require_paths:
131
93
  - lib
132
94
  required_ruby_version: !ruby/object:Gem::Requirement
133
- none: false
134
95
  requirements:
135
- - - ! '>='
96
+ - - ">="
136
97
  - !ruby/object:Gem::Version
137
98
  version: 1.9.3
138
99
  required_rubygems_version: !ruby/object:Gem::Requirement
139
- none: false
140
100
  requirements:
141
- - - ! '>='
101
+ - - ">"
142
102
  - !ruby/object:Gem::Version
143
- version: '0'
103
+ version: 1.3.1
144
104
  requirements: []
145
105
  rubyforge_project:
146
- rubygems_version: 1.8.23
106
+ rubygems_version: 2.2.0
147
107
  signing_key:
148
- specification_version: 3
108
+ specification_version: 4
149
109
  summary: C implementation of the krypt-core API
150
110
  test_files: []