ruby-mcrypt 0.1.1 → 0.2.0
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.
- data/README.rdoc +5 -1
- data/Rakefile +6 -3
- data/VERSION +1 -1
- data/cross.sh +17 -0
- data/ext/extconf.rb +5 -0
- data/ext/mcrypt_wrapper.c +21 -5
- data/lib/mcrypt.rb +1 -1
- data/ruby-mcrypt.gemspec +28 -31
- data/test/generate/generate_testcases.c +1 -1
- metadata +15 -19
- data/.gitignore +0 -5
data/README.rdoc
CHANGED
@@ -15,6 +15,10 @@ supports lots of different ciphers and encryption modes.
|
|
15
15
|
Install the gem:
|
16
16
|
gem install ruby-mcrypt --test -- --with-mcrypt-dir=/path/to/mcrypt/prefix
|
17
17
|
|
18
|
+
If you're installing on Ubuntu:
|
19
|
+
sudo apt-get install mcrypt libmcrypt-dev
|
20
|
+
gem install ruby-mcrypt
|
21
|
+
|
18
22
|
If you want to run the longer test suite, do this instead:
|
19
23
|
MCRYPT_TEST_BRUTE=1 \
|
20
24
|
gem install ruby-mcrypt --test -- --with-mcrypt-dir=/path/to/mcrypt/prefix
|
@@ -62,7 +66,7 @@ If you find any bugs, please let the author know.
|
|
62
66
|
|
63
67
|
== Copyright and License
|
64
68
|
|
65
|
-
Copyright (c) 2009-
|
69
|
+
Copyright (c) 2009-2013 Philip Garrett.
|
66
70
|
|
67
71
|
Permission is hereby granted, free of charge, to any person obtaining a
|
68
72
|
copy of this software and associated documentation files (the
|
data/Rakefile
CHANGED
@@ -4,7 +4,9 @@ require 'rake'
|
|
4
4
|
require 'rake/testtask'
|
5
5
|
|
6
6
|
# http://stackoverflow.com/questions/213368/how-can-i-reliably-discover-the-full-path-of-the-ruby-executable
|
7
|
-
RUBY = File.join(
|
7
|
+
RUBY = File.join(RbConfig::CONFIG['bindir'], RbConfig::CONFIG['ruby_install_name']).sub(/.*\s.*/m, '"\&"')
|
8
|
+
|
9
|
+
ENV["MAINTAINER_MODE"] = "1" if File.exists?(File.dirname(__FILE__) + "/MAINTAINER")
|
8
10
|
|
9
11
|
task :default => :test
|
10
12
|
|
@@ -25,13 +27,14 @@ rescue LoadError
|
|
25
27
|
puts "Jeweler not available. Install it with: gem install jeweler"
|
26
28
|
end
|
27
29
|
|
28
|
-
EXTENSION = "ext/mcrypt.#{
|
30
|
+
EXTENSION = "ext/mcrypt.#{RbConfig::CONFIG["DLEXT"]}"
|
29
31
|
|
30
32
|
desc "Compile extension"
|
31
33
|
task :compile => EXTENSION
|
32
34
|
file EXTENSION => FileList["ext/Makefile","ext/*.c"] do
|
33
35
|
Dir.chdir("ext") do
|
34
|
-
|
36
|
+
opts = ENV["MAINTAINER_MODE"] ? ["V=1"] : []
|
37
|
+
system("make", *opts) || raise("could not build ruby-mcrypt")
|
35
38
|
end
|
36
39
|
end
|
37
40
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
data/cross.sh
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
[[ -s ~/.rvm/scripts/rvm ]] && source ~/.rvm/scripts/rvm
|
4
|
+
|
5
|
+
cd "$(dirname "$0")"
|
6
|
+
|
7
|
+
touch MAINTAINER
|
8
|
+
|
9
|
+
for ruby in 1.8.7 1.9.3
|
10
|
+
do
|
11
|
+
rvm use $ruby
|
12
|
+
rake clean
|
13
|
+
rake || {
|
14
|
+
echo "BUILD FAILED!" >&2
|
15
|
+
exit 1
|
16
|
+
}
|
17
|
+
done
|
data/ext/extconf.rb
CHANGED
data/ext/mcrypt_wrapper.c
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
/*
|
2
2
|
* mcrypt_wrapper.c
|
3
3
|
*
|
4
|
-
* Copyright (c) 2009 Philip Garrett.
|
4
|
+
* Copyright (c) 2009-2013 Philip Garrett.
|
5
5
|
*
|
6
6
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
7
7
|
* copy of this software and associated documentation files (the
|
@@ -24,6 +24,7 @@
|
|
24
24
|
*/
|
25
25
|
|
26
26
|
#include "ruby.h"
|
27
|
+
#include <limits.h>
|
27
28
|
#include <string.h>
|
28
29
|
#include <mcrypt.h>
|
29
30
|
|
@@ -50,6 +51,8 @@ static char *dup_rbstring(VALUE o, int include_null);
|
|
50
51
|
|
51
52
|
static VALUE enumerate_key_sizes(int *sizes, int num_of_sizes, int max_size);
|
52
53
|
|
54
|
+
static int safe_len(long orig);
|
55
|
+
|
53
56
|
/* globals */
|
54
57
|
static VALUE cMcrypt;
|
55
58
|
static VALUE cInvalidAlgorithmOrModeError;
|
@@ -106,11 +109,11 @@ static VALUE mc_initialize(int argc, VALUE *argv, VALUE self)
|
|
106
109
|
|
107
110
|
*box = mcrypt_module_open(s_algo, NULL, s_mode, NULL);
|
108
111
|
if (*box == MCRYPT_FAILED) {
|
112
|
+
char message[256];
|
109
113
|
/* MCRYPT_FAILED is currently 0, but we should explicitly set
|
110
114
|
to zero in case they change that. We don't want to attempt to
|
111
115
|
free it later. */
|
112
116
|
*box = 0;
|
113
|
-
char message[256];
|
114
117
|
snprintf(message, sizeof(message),
|
115
118
|
"Could not initialize using algorithm '%s' with mode "
|
116
119
|
"'%s'. Check mcrypt(3) for supported combinations.",
|
@@ -145,7 +148,7 @@ static VALUE mc_generic_init(VALUE self)
|
|
145
148
|
|
146
149
|
rv = mcrypt_generic_init(*box,
|
147
150
|
(void *)RSTRING_PTR(key),
|
148
|
-
RSTRING_LEN(key),
|
151
|
+
safe_len(RSTRING_LEN(key)),
|
149
152
|
RSTR_N(iv));
|
150
153
|
if (rv < 0) {
|
151
154
|
const char *err = mcrypt_strerror(rv);
|
@@ -177,7 +180,8 @@ static VALUE mc_encrypt_generic(VALUE self, VALUE plaintext)
|
|
177
180
|
/* rb_str_dup doesn't actually copy the buffer, hence rb_str_new */
|
178
181
|
ciphertext = rb_str_new(RSTRING_PTR(plaintext), RSTRING_LEN(plaintext));
|
179
182
|
|
180
|
-
rv = mcrypt_generic(*box, (void *)RSTRING_PTR(ciphertext),
|
183
|
+
rv = mcrypt_generic(*box, (void *)RSTRING_PTR(ciphertext),
|
184
|
+
safe_len(RSTRING_LEN(ciphertext)));
|
181
185
|
if (rv != 0)
|
182
186
|
rb_raise(cMcryptRuntimeError, "internal error: mcrypt_generic returned %d", rv);
|
183
187
|
return ciphertext;
|
@@ -196,7 +200,8 @@ static VALUE mc_decrypt_generic(VALUE self, VALUE ciphertext)
|
|
196
200
|
/* rb_str_dup doesn't actually copy the buffer, hence rb_str_new */
|
197
201
|
plaintext = rb_str_new(RSTRING_PTR(ciphertext), RSTRING_LEN(ciphertext));
|
198
202
|
|
199
|
-
rv = mdecrypt_generic(*box, (void *)RSTRING_PTR(plaintext),
|
203
|
+
rv = mdecrypt_generic(*box, (void *)RSTRING_PTR(plaintext),
|
204
|
+
safe_len(RSTRING_LEN(plaintext)));
|
200
205
|
if (rv != 0)
|
201
206
|
rb_raise(cMcryptRuntimeError, "internal error: mdecrypt_generic returned %d", rv);
|
202
207
|
return plaintext;
|
@@ -586,3 +591,14 @@ static VALUE enumerate_key_sizes(int *sizes, int num_of_sizes, int max_size)
|
|
586
591
|
return Qnil; /* quell warning */
|
587
592
|
}
|
588
593
|
}
|
594
|
+
|
595
|
+
static int safe_len(long orig)
|
596
|
+
{
|
597
|
+
int result = (int)orig;
|
598
|
+
if (result != orig) {
|
599
|
+
rb_raise(cMcryptRuntimeError, "The string is too large. "
|
600
|
+
"This version of mcrypt can only handle %d bytes (32-bit signed int)",
|
601
|
+
INT_MAX);
|
602
|
+
}
|
603
|
+
return result;
|
604
|
+
}
|
data/lib/mcrypt.rb
CHANGED
data/ruby-mcrypt.gemspec
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
# Generated by jeweler
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{ruby-mcrypt}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.2.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Philip Garrett"]
|
12
|
-
s.date = %q{
|
12
|
+
s.date = %q{2013-02-24}
|
13
13
|
s.description = %q{= Mcrypt - libmcrypt bindings for Ruby
|
14
14
|
|
15
15
|
Mcrypt provides Ruby-language bindings for libmcrypt(3), a
|
@@ -27,6 +27,10 @@ supports lots of different ciphers and encryption modes.
|
|
27
27
|
Install the gem:
|
28
28
|
gem install ruby-mcrypt --test -- --with-mcrypt-dir=/path/to/mcrypt/prefix
|
29
29
|
|
30
|
+
If you're installing on Ubuntu:
|
31
|
+
sudo apt-get install mcrypt libmcrypt-dev
|
32
|
+
gem install ruby-mcrypt
|
33
|
+
|
30
34
|
If you want to run the longer test suite, do this instead:
|
31
35
|
MCRYPT_TEST_BRUTE=1 \
|
32
36
|
gem install ruby-mcrypt --test -- --with-mcrypt-dir=/path/to/mcrypt/prefix
|
@@ -74,7 +78,7 @@ If you find any bugs, please let the author know.
|
|
74
78
|
|
75
79
|
== Copyright and License
|
76
80
|
|
77
|
-
Copyright (c) 2009-
|
81
|
+
Copyright (c) 2009-2013 Philip Garrett.
|
78
82
|
|
79
83
|
Permission is hereby granted, free of charge, to any person obtaining a
|
80
84
|
copy of this software and associated documentation files (the
|
@@ -101,44 +105,37 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
101
105
|
"README.rdoc"
|
102
106
|
]
|
103
107
|
s.files = [
|
104
|
-
"
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
108
|
+
"Manifest",
|
109
|
+
"README.rdoc",
|
110
|
+
"Rakefile",
|
111
|
+
"VERSION",
|
112
|
+
"cross.sh",
|
113
|
+
"ext/.gitignore",
|
114
|
+
"ext/extconf.rb",
|
115
|
+
"ext/mcrypt_wrapper.c",
|
116
|
+
"lib/.gitignore",
|
117
|
+
"lib/mcrypt.rb",
|
118
|
+
"ruby-mcrypt.gemspec",
|
119
|
+
"test/generate/.gitignore",
|
120
|
+
"test/generate/Makefile",
|
121
|
+
"test/generate/generate_testcases.c",
|
122
|
+
"test/helper.rb",
|
123
|
+
"test/test_basics.rb",
|
124
|
+
"test/test_brute.rb",
|
125
|
+
"test/test_reciprocity.rb"
|
122
126
|
]
|
123
127
|
s.homepage = %q{http://github.com/kingpong/ruby-mcrypt}
|
124
|
-
s.rdoc_options = ["--charset=UTF-8"]
|
125
128
|
s.require_paths = ["lib"]
|
126
129
|
s.required_ruby_version = Gem::Requirement.new(">= 1.8.6")
|
127
130
|
s.requirements = ["libmcrypt (2.5.x or 2.6.x, tested with 2.5.8)"]
|
128
|
-
s.rubygems_version = %q{1.3.
|
131
|
+
s.rubygems_version = %q{1.3.6}
|
129
132
|
s.summary = %q{Ruby bindings for libmcrypt}
|
130
|
-
s.test_files = [
|
131
|
-
"test/helper.rb",
|
132
|
-
"test/test_basics.rb",
|
133
|
-
"test/test_brute.rb",
|
134
|
-
"test/test_reciprocity.rb"
|
135
|
-
]
|
136
133
|
|
137
134
|
if s.respond_to? :specification_version then
|
138
135
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
139
136
|
s.specification_version = 3
|
140
137
|
|
141
|
-
if Gem::Version.new(Gem::
|
138
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
142
139
|
else
|
143
140
|
end
|
144
141
|
else
|
@@ -4,7 +4,7 @@
|
|
4
4
|
* Generates a list of known-good inputs/outputs to be compared against the
|
5
5
|
* output of ruby-mcrypt.
|
6
6
|
*
|
7
|
-
* Copyright (c) 2009 Philip Garrett.
|
7
|
+
* Copyright (c) 2009-2013 Philip Garrett.
|
8
8
|
*
|
9
9
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
10
10
|
* copy of this software and associated documentation files (the
|
metadata
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-mcrypt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: 25
|
5
4
|
prerelease: false
|
6
5
|
segments:
|
7
6
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
7
|
+
- 2
|
8
|
+
- 0
|
9
|
+
version: 0.2.0
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- Philip Garrett
|
@@ -15,7 +14,7 @@ autorequire:
|
|
15
14
|
bindir: bin
|
16
15
|
cert_chain: []
|
17
16
|
|
18
|
-
date:
|
17
|
+
date: 2013-02-24 00:00:00 -05:00
|
19
18
|
default_executable:
|
20
19
|
dependencies: []
|
21
20
|
|
@@ -37,6 +36,10 @@ description: |
|
|
37
36
|
Install the gem:
|
38
37
|
gem install ruby-mcrypt --test -- --with-mcrypt-dir=/path/to/mcrypt/prefix
|
39
38
|
|
39
|
+
If you're installing on Ubuntu:
|
40
|
+
sudo apt-get install mcrypt libmcrypt-dev
|
41
|
+
gem install ruby-mcrypt
|
42
|
+
|
40
43
|
If you want to run the longer test suite, do this instead:
|
41
44
|
MCRYPT_TEST_BRUTE=1 \
|
42
45
|
gem install ruby-mcrypt --test -- --with-mcrypt-dir=/path/to/mcrypt/prefix
|
@@ -84,7 +87,7 @@ description: |
|
|
84
87
|
|
85
88
|
== Copyright and License
|
86
89
|
|
87
|
-
Copyright (c) 2009-
|
90
|
+
Copyright (c) 2009-2013 Philip Garrett.
|
88
91
|
|
89
92
|
Permission is hereby granted, free of charge, to any person obtaining a
|
90
93
|
copy of this software and associated documentation files (the
|
@@ -113,11 +116,11 @@ extensions:
|
|
113
116
|
extra_rdoc_files:
|
114
117
|
- README.rdoc
|
115
118
|
files:
|
116
|
-
- .gitignore
|
117
119
|
- Manifest
|
118
120
|
- README.rdoc
|
119
121
|
- Rakefile
|
120
122
|
- VERSION
|
123
|
+
- cross.sh
|
121
124
|
- ext/.gitignore
|
122
125
|
- ext/extconf.rb
|
123
126
|
- ext/mcrypt_wrapper.c
|
@@ -136,39 +139,32 @@ homepage: http://github.com/kingpong/ruby-mcrypt
|
|
136
139
|
licenses: []
|
137
140
|
|
138
141
|
post_install_message:
|
139
|
-
rdoc_options:
|
140
|
-
|
142
|
+
rdoc_options: []
|
143
|
+
|
141
144
|
require_paths:
|
142
145
|
- lib
|
143
146
|
required_ruby_version: !ruby/object:Gem::Requirement
|
144
|
-
none: false
|
145
147
|
requirements:
|
146
148
|
- - ">="
|
147
149
|
- !ruby/object:Gem::Version
|
148
|
-
hash: 59
|
149
150
|
segments:
|
150
151
|
- 1
|
151
152
|
- 8
|
152
153
|
- 6
|
153
154
|
version: 1.8.6
|
154
155
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
155
|
-
none: false
|
156
156
|
requirements:
|
157
157
|
- - ">="
|
158
158
|
- !ruby/object:Gem::Version
|
159
|
-
hash: 3
|
160
159
|
segments:
|
161
160
|
- 0
|
162
161
|
version: "0"
|
163
162
|
requirements:
|
164
163
|
- libmcrypt (2.5.x or 2.6.x, tested with 2.5.8)
|
165
164
|
rubyforge_project:
|
166
|
-
rubygems_version: 1.3.
|
165
|
+
rubygems_version: 1.3.6
|
167
166
|
signing_key:
|
168
167
|
specification_version: 3
|
169
168
|
summary: Ruby bindings for libmcrypt
|
170
|
-
test_files:
|
171
|
-
|
172
|
-
- test/test_basics.rb
|
173
|
-
- test/test_brute.rb
|
174
|
-
- test/test_reciprocity.rb
|
169
|
+
test_files: []
|
170
|
+
|