ice_cipher 0.1

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: e21b1fc7709e2726d8f06377019721545c0220f1
4
+ data.tar.gz: 3445b94daef4d3be508c33831ca254d2894af12d
5
+ SHA512:
6
+ metadata.gz: 48502fa53a0e7da28a2ab76c441ad34560fc746b58d638afaa577ce313a0564e8c001f4a3957ad1739c1f84dff9ff0f61b764eed2095421a0f9b420f36980937
7
+ data.tar.gz: b4fccc874728b26704f418a46b33bc37e047e3f92f01c7d5cfaabc6797f2a8122652642da701b1754396a1f64feb5254e04261e4b81aceece30e9ad6e49ea97f
@@ -0,0 +1,10 @@
1
+ #include "bindings.h"
2
+ #include "ice_cipher.h"
3
+
4
+ VALUE kIceModule = Qnil;
5
+
6
+ void Init_ice_cipher() {
7
+ kIceModule = rb_define_module("ICE");
8
+
9
+ Init_ice_cipher_class();
10
+ }
@@ -0,0 +1,10 @@
1
+ #ifndef __ICE_CIPHER_H
2
+ #define __ICE_CIPHER_H
3
+
4
+ #include <ruby.h>
5
+
6
+ extern VALUE kIceModule;
7
+
8
+ extern void Init_ice_cipher();
9
+
10
+ #endif
@@ -0,0 +1,6 @@
1
+ # encoding: utf-8
2
+
3
+ require 'mkmf'
4
+
5
+ dir_config 'ice_cipher'
6
+ create_makefile 'ice_cipher'
@@ -0,0 +1,422 @@
1
+ /*
2
+ * Implementation of the ICE encryption algorithm.
3
+ *
4
+ * Written by Matthew Kwan - July 1996
5
+ */
6
+
7
+ #include "ice.h"
8
+ #include <stdio.h>
9
+ #include <stdlib.h>
10
+
11
+
12
+ /* Structure of a single round subkey */
13
+ typedef unsigned long ICE_SUBKEY[3];
14
+
15
+
16
+ /* Internal structure of the ICE_KEY structure */
17
+ struct ice_key_struct {
18
+ int ik_size;
19
+ int ik_rounds;
20
+ ICE_SUBKEY *ik_keysched;
21
+ };
22
+
23
+ /* The S-boxes */
24
+ static unsigned long ice_sbox[4][1024];
25
+ static int ice_sboxes_initialised = 0;
26
+
27
+
28
+ /* Modulo values for the S-boxes */
29
+ static const int ice_smod[4][4] = {
30
+ {333, 313, 505, 369},
31
+ {379, 375, 319, 391},
32
+ {361, 445, 451, 397},
33
+ {397, 425, 395, 505}};
34
+
35
+ /* XOR values for the S-boxes */
36
+ static const int ice_sxor[4][4] = {
37
+ {0x83, 0x85, 0x9b, 0xcd},
38
+ {0xcc, 0xa7, 0xad, 0x41},
39
+ {0x4b, 0x2e, 0xd4, 0x33},
40
+ {0xea, 0xcb, 0x2e, 0x04}};
41
+
42
+ /* Expanded permutation values for the P-box */
43
+ static const unsigned long ice_pbox[32] = {
44
+ 0x00000001, 0x00000080, 0x00000400, 0x00002000,
45
+ 0x00080000, 0x00200000, 0x01000000, 0x40000000,
46
+ 0x00000008, 0x00000020, 0x00000100, 0x00004000,
47
+ 0x00010000, 0x00800000, 0x04000000, 0x20000000,
48
+ 0x00000004, 0x00000010, 0x00000200, 0x00008000,
49
+ 0x00020000, 0x00400000, 0x08000000, 0x10000000,
50
+ 0x00000002, 0x00000040, 0x00000800, 0x00001000,
51
+ 0x00040000, 0x00100000, 0x02000000, 0x80000000};
52
+
53
+ /* The key rotation schedule */
54
+ static const int ice_keyrot[16] = {
55
+ 0, 1, 2, 3, 2, 1, 3, 0,
56
+ 1, 3, 2, 0, 3, 1, 0, 2};
57
+
58
+
59
+ /*
60
+ * Galois Field multiplication of a by b, modulo m.
61
+ * Just like arithmetic multiplication, except that additions and
62
+ * subtractions are replaced by XOR.
63
+ */
64
+
65
+ static unsigned int
66
+ gf_mult (
67
+ register unsigned int a,
68
+ register unsigned int b,
69
+ register unsigned int m
70
+ ) {
71
+ register unsigned int res = 0;
72
+
73
+ while (b) {
74
+ if (b & 1)
75
+ res ^= a;
76
+
77
+ a <<= 1;
78
+ b >>= 1;
79
+
80
+ if (a >= 256)
81
+ a ^= m;
82
+ }
83
+
84
+ return (res);
85
+ }
86
+
87
+
88
+ /*
89
+ * Galois Field exponentiation.
90
+ * Raise the base to the power of 7, modulo m.
91
+ */
92
+
93
+ static unsigned long
94
+ gf_exp7 (
95
+ register unsigned int b,
96
+ unsigned int m
97
+ ) {
98
+ register unsigned int x;
99
+
100
+ if (b == 0)
101
+ return (0);
102
+
103
+ x = gf_mult (b, b, m);
104
+ x = gf_mult (b, x, m);
105
+ x = gf_mult (x, x, m);
106
+ return (gf_mult (b, x, m));
107
+ }
108
+
109
+
110
+ /*
111
+ * Carry out the ICE 32-bit P-box permutation.
112
+ */
113
+
114
+ static unsigned long
115
+ ice_perm32 (
116
+ register unsigned long x
117
+ ) {
118
+ register unsigned long res = 0;
119
+ register const unsigned long *pbox = ice_pbox;
120
+
121
+ while (x) {
122
+ if (x & 1)
123
+ res |= *pbox;
124
+ pbox++;
125
+ x >>= 1;
126
+ }
127
+
128
+ return (res);
129
+ }
130
+
131
+
132
+ /*
133
+ * Initialise the ICE S-boxes.
134
+ * This only has to be done once.
135
+ */
136
+
137
+ static void
138
+ ice_sboxes_init (void)
139
+ {
140
+ register int i;
141
+
142
+ for (i=0; i<1024; i++) {
143
+ int col = (i >> 1) & 0xff;
144
+ int row = (i & 0x1) | ((i & 0x200) >> 8);
145
+ unsigned long x;
146
+
147
+ x = gf_exp7 (col ^ ice_sxor[0][row], ice_smod[0][row]) << 24;
148
+ ice_sbox[0][i] = ice_perm32 (x);
149
+
150
+ x = gf_exp7 (col ^ ice_sxor[1][row], ice_smod[1][row]) << 16;
151
+ ice_sbox[1][i] = ice_perm32 (x);
152
+
153
+ x = gf_exp7 (col ^ ice_sxor[2][row], ice_smod[2][row]) << 8;
154
+ ice_sbox[2][i] = ice_perm32 (x);
155
+
156
+ x = gf_exp7 (col ^ ice_sxor[3][row], ice_smod[3][row]);
157
+ ice_sbox[3][i] = ice_perm32 (x);
158
+ }
159
+ }
160
+
161
+
162
+ /*
163
+ * Create a new ICE key.
164
+ */
165
+
166
+ ICE_KEY *
167
+ ice_key_create (
168
+ int n
169
+ ) {
170
+ ICE_KEY *ik;
171
+
172
+ if (!ice_sboxes_initialised) {
173
+ ice_sboxes_init ();
174
+ ice_sboxes_initialised = 1;
175
+ }
176
+
177
+ if ((ik = (ICE_KEY *) malloc (sizeof (ICE_KEY))) == NULL)
178
+ return (NULL);
179
+
180
+ if (n < 1) {
181
+ ik->ik_size = 1;
182
+ ik->ik_rounds = 8;
183
+ } else {
184
+ ik->ik_size = n;
185
+ ik->ik_rounds = n * 16;
186
+ }
187
+
188
+ if ((ik->ik_keysched = (ICE_SUBKEY *) malloc (ik->ik_rounds
189
+ * sizeof (ICE_SUBKEY))) == NULL) {
190
+ free (ik);
191
+ return (NULL);
192
+ }
193
+
194
+ return (ik);
195
+ }
196
+
197
+
198
+ /*
199
+ * Destroy an ICE key.
200
+ * Zero out the memory to prevent snooping.
201
+ */
202
+
203
+ void
204
+ ice_key_destroy (
205
+ ICE_KEY *ik
206
+ ) {
207
+ int i, j;
208
+
209
+ if (ik == NULL)
210
+ return;
211
+
212
+ for (i=0; i<ik->ik_rounds; i++)
213
+ for (j=0; j<3; j++)
214
+ ik->ik_keysched[i][j] = 0;
215
+
216
+ ik->ik_rounds = ik->ik_size = 0;
217
+
218
+ if (ik->ik_keysched != NULL)
219
+ free (ik->ik_keysched);
220
+
221
+ free (ik);
222
+ }
223
+
224
+
225
+ /*
226
+ * The single round ICE f function.
227
+ */
228
+
229
+ static unsigned long
230
+ ice_f (
231
+ register unsigned long p,
232
+ const ICE_SUBKEY sk
233
+ ) {
234
+ unsigned long tl, tr; /* Expanded 40-bit values */
235
+ unsigned long al, ar; /* Salted expanded 40-bit values */
236
+
237
+ /* Left half expansion */
238
+ tl = ((p >> 16) & 0x3ff) | (((p >> 14) | (p << 18)) & 0xffc00);
239
+
240
+ /* Right half expansion */
241
+ tr = (p & 0x3ff) | ((p << 2) & 0xffc00);
242
+
243
+ /* Perform the salt permutation */
244
+ /* al = (tr & sk[2]) | (tl & ~sk[2]); */
245
+ /* ar = (tl & sk[2]) | (tr & ~sk[2]); */
246
+ al = sk[2] & (tl ^ tr);
247
+ ar = al ^ tr;
248
+ al ^= tl;
249
+
250
+ al ^= sk[0]; /* XOR with the subkey */
251
+ ar ^= sk[1];
252
+
253
+ /* S-box lookup and permutation */
254
+ return (ice_sbox[0][al >> 10] | ice_sbox[1][al & 0x3ff]
255
+ | ice_sbox[2][ar >> 10] | ice_sbox[3][ar & 0x3ff]);
256
+ }
257
+
258
+
259
+ /*
260
+ * Encrypt a block of 8 bytes of data with the given ICE key.
261
+ */
262
+
263
+ void
264
+ ice_key_encrypt (
265
+ const ICE_KEY *ik,
266
+ const unsigned char *ptext,
267
+ unsigned char *ctext
268
+ ) {
269
+ register int i;
270
+ register unsigned long l, r;
271
+
272
+ l = (((unsigned long) ptext[0]) << 24)
273
+ | (((unsigned long) ptext[1]) << 16)
274
+ | (((unsigned long) ptext[2]) << 8) | ptext[3];
275
+ r = (((unsigned long) ptext[4]) << 24)
276
+ | (((unsigned long) ptext[5]) << 16)
277
+ | (((unsigned long) ptext[6]) << 8) | ptext[7];
278
+
279
+ for (i = 0; i < ik->ik_rounds; i += 2) {
280
+ l ^= ice_f (r, ik->ik_keysched[i]);
281
+ r ^= ice_f (l, ik->ik_keysched[i + 1]);
282
+ }
283
+
284
+ for (i = 0; i < 4; i++) {
285
+ ctext[3 - i] = r & 0xff;
286
+ ctext[7 - i] = l & 0xff;
287
+
288
+ r >>= 8;
289
+ l >>= 8;
290
+ }
291
+ }
292
+
293
+
294
+ /*
295
+ * Decrypt a block of 8 bytes of data with the given ICE key.
296
+ */
297
+
298
+ void
299
+ ice_key_decrypt (
300
+ const ICE_KEY *ik,
301
+ const unsigned char *ctext,
302
+ unsigned char *ptext
303
+ ) {
304
+ register int i;
305
+ register unsigned long l, r;
306
+
307
+ l = (((unsigned long) ctext[0]) << 24)
308
+ | (((unsigned long) ctext[1]) << 16)
309
+ | (((unsigned long) ctext[2]) << 8) | ctext[3];
310
+ r = (((unsigned long) ctext[4]) << 24)
311
+ | (((unsigned long) ctext[5]) << 16)
312
+ | (((unsigned long) ctext[6]) << 8) | ctext[7];
313
+
314
+ for (i = ik->ik_rounds - 1; i > 0; i -= 2) {
315
+ l ^= ice_f (r, ik->ik_keysched[i]);
316
+ r ^= ice_f (l, ik->ik_keysched[i - 1]);
317
+ }
318
+
319
+ for (i = 0; i < 4; i++) {
320
+ ptext[3 - i] = r & 0xff;
321
+ ptext[7 - i] = l & 0xff;
322
+
323
+ r >>= 8;
324
+ l >>= 8;
325
+ }
326
+ }
327
+
328
+
329
+ /*
330
+ * Set 8 rounds [n, n+7] of the key schedule of an ICE key.
331
+ */
332
+
333
+ static void
334
+ ice_key_sched_build (
335
+ ICE_KEY *ik,
336
+ unsigned short *kb,
337
+ int n,
338
+ const int *keyrot
339
+ ) {
340
+ int i;
341
+
342
+ for (i=0; i<8; i++) {
343
+ register int j;
344
+ register int kr = keyrot[i];
345
+ ICE_SUBKEY *isk = &ik->ik_keysched[n + i];
346
+
347
+ for (j=0; j<3; j++)
348
+ (*isk)[j] = 0;
349
+
350
+ for (j=0; j<15; j++) {
351
+ register int k;
352
+ unsigned long *curr_sk = &(*isk)[j % 3];
353
+
354
+ for (k=0; k<4; k++) {
355
+ unsigned short *curr_kb = &kb[(kr + k) & 3];
356
+ register int bit = *curr_kb & 1;
357
+
358
+ *curr_sk = (*curr_sk << 1) | bit;
359
+ *curr_kb = (*curr_kb >> 1) | ((bit ^ 1) << 15);
360
+ }
361
+ }
362
+ }
363
+ }
364
+
365
+
366
+ /*
367
+ * Set the key schedule of an ICE key.
368
+ */
369
+
370
+ void
371
+ ice_key_set (
372
+ ICE_KEY *ik,
373
+ const unsigned char *key
374
+ ) {
375
+ int i;
376
+
377
+ if (ik->ik_rounds == 8) {
378
+ unsigned short kb[4];
379
+
380
+ for (i=0; i<4; i++)
381
+ kb[3 - i] = (key[i*2] << 8) | key[i*2 + 1];
382
+
383
+ ice_key_sched_build (ik, kb, 0, ice_keyrot);
384
+ return;
385
+ }
386
+
387
+ for (i = 0; i < ik->ik_size; i++) {
388
+ int j;
389
+ unsigned short kb[4];
390
+
391
+ for (j=0; j<4; j++)
392
+ kb[3 - j] = (key[i*8 + j*2] << 8) | key[i*8 + j*2 + 1];
393
+
394
+ ice_key_sched_build (ik, kb, i*8, ice_keyrot);
395
+ ice_key_sched_build (ik, kb, ik->ik_rounds - 8 - i*8,
396
+ &ice_keyrot[8]);
397
+ }
398
+ }
399
+
400
+
401
+ /*
402
+ * Return the key size, in bytes.
403
+ */
404
+
405
+ int
406
+ ice_key_key_size (
407
+ const ICE_KEY *ik
408
+ ) {
409
+ return (ik->ik_size * 8);
410
+ }
411
+
412
+
413
+ /*
414
+ * Return the block size, in bytes.
415
+ */
416
+
417
+ int
418
+ ice_key_block_size (
419
+ const ICE_KEY *ik
420
+ ) {
421
+ return (8);
422
+ }
@@ -0,0 +1,30 @@
1
+ /*
2
+ * Header file for the ICE encryption library.
3
+ *
4
+ * Written by Matthew Kwan - July 1996
5
+ */
6
+
7
+ #ifndef _ICE_H
8
+ #define _ICE_H
9
+
10
+ typedef struct ice_key_struct ICE_KEY;
11
+
12
+ #if __STDC__
13
+ #define P_(x) x
14
+ #else
15
+ #define P_(x) ()
16
+ #endif
17
+
18
+ extern ICE_KEY *ice_key_create P_((int n));
19
+ extern void ice_key_destroy P_((ICE_KEY *ik));
20
+ extern void ice_key_set P_((ICE_KEY *ik, const unsigned char *k));
21
+ extern void ice_key_encrypt P_((const ICE_KEY *ik,
22
+ const unsigned char *ptxt, unsigned char *ctxt));
23
+ extern void ice_key_decrypt P_((const ICE_KEY *ik,
24
+ const unsigned char *ctxt, unsigned char *ptxt));
25
+ extern int ice_key_key_size P_((const ICE_KEY *ik));
26
+ extern int ice_key_block_size P_((const ICE_KEY *ik));
27
+
28
+ #undef P_
29
+
30
+ #endif
@@ -0,0 +1,182 @@
1
+ #include "bindings.h"
2
+ #include "ice_cipher.h"
3
+ #include "ice.h"
4
+
5
+ void ice_cipher_deallocate(void* data)
6
+ {
7
+ ICE_KEY* key = (ICE_KEY*)data;
8
+
9
+ ice_key_destroy(key);
10
+ }
11
+
12
+ VALUE ice_cipher_allocate(VALUE klass)
13
+ {
14
+ ICE_KEY* key = ice_key_create(0);
15
+
16
+ return Data_Wrap_Struct(klass, NULL, ice_cipher_deallocate, key);
17
+ }
18
+
19
+ void Init_ice_cipher_class()
20
+ {
21
+ VALUE cIcecipher = rb_define_class_under(kIceModule, "Cipher", rb_cObject);
22
+
23
+ rb_define_alloc_func(cIcecipher, ice_cipher_allocate);
24
+ rb_define_method(cIcecipher, "initialize", ice_cipher_initialize, 1);
25
+ rb_define_method(cIcecipher, "key_size", ice_cipher_key_size, 0);
26
+ rb_define_method(cIcecipher, "block_size", ice_cipher_block_size, 0);
27
+ rb_define_method(cIcecipher, "key=", ice_cipher_set_key, 1);
28
+ rb_define_method(cIcecipher, "encrypt", ice_cipher_encrypt, 1);
29
+ rb_define_method(cIcecipher, "decrypt", ice_cipher_decrypt, 1);
30
+ }
31
+
32
+ VALUE ice_cipher_initialize(VALUE self, VALUE level)
33
+ {
34
+ Check_Type(level, T_FIXNUM);
35
+
36
+ ice_cipher_create_key(self, NUM2INT(level), NULL);
37
+
38
+ return self;
39
+ }
40
+
41
+ void ice_cipher_create_key(VALUE self, int level, unsigned char* key)
42
+ {
43
+ // Destroy the current key
44
+ ICE_KEY* ik;
45
+
46
+ Data_Get_Struct(self, ICE_KEY, ik);
47
+
48
+ if (ik != NULL)
49
+ {
50
+ ice_key_destroy(ik);
51
+ }
52
+
53
+ // Create a new key
54
+ ik = ice_key_create(level);
55
+
56
+ if (key != NULL)
57
+ {
58
+ // Set an cipher key
59
+ ice_key_set(ik, key);
60
+ }
61
+ }
62
+
63
+ VALUE ice_cipher_key_size(VALUE self)
64
+ {
65
+ ICE_KEY* key;
66
+
67
+ Data_Get_Struct(self, ICE_KEY, key);
68
+
69
+ return INT2NUM(ice_key_key_size(key));
70
+ }
71
+
72
+ VALUE ice_cipher_block_size(VALUE self)
73
+ {
74
+ ICE_KEY* key;
75
+
76
+ Data_Get_Struct(self, ICE_KEY, key);
77
+
78
+ return INT2NUM(ice_key_block_size(key));
79
+ }
80
+
81
+ VALUE ice_cipher_set_key(VALUE self, VALUE value)
82
+ {
83
+ ICE_KEY* key;
84
+
85
+ Check_Type(value, T_STRING);
86
+ Data_Get_Struct(self, ICE_KEY, key);
87
+
88
+ if (key != NULL)
89
+ {
90
+ ice_key_set(key, (unsigned char*)StringValuePtr(value));
91
+
92
+ return value;
93
+ }
94
+
95
+ return Qnil;
96
+ }
97
+
98
+ VALUE ice_cipher_encrypt(VALUE self, VALUE text)
99
+ {
100
+ ICE_KEY* key;
101
+ VALUE result;
102
+ unsigned int textLength;
103
+ unsigned char* plainText;
104
+ unsigned char* cipherText;
105
+
106
+ // Get the string length
107
+ textLength = RSTRING_LEN(text);
108
+
109
+ // Check that the string is divisible by 8
110
+ if (textLength % 8 != 0)
111
+ {
112
+ rb_raise(rb_eArgError, "expected argument to be divisible by 8, but length is %d", textLength);
113
+
114
+ return Qnil;
115
+ }
116
+
117
+ // Get the contents of the string
118
+ plainText = (unsigned char*)StringValuePtr(text);
119
+
120
+ // Allocate space for the cipher text
121
+ cipherText = (unsigned char*)malloc(textLength);
122
+
123
+ // Get the data struct
124
+ Data_Get_Struct(self, ICE_KEY, key);
125
+
126
+ // Decrypt the cipher text
127
+ ice_key_encrypt(key, (const unsigned char*)plainText, cipherText);
128
+
129
+ if (cipherText != NULL)
130
+ {
131
+ result = rb_str_new((const char*)cipherText, textLength);
132
+ }
133
+ else
134
+ {
135
+ result = Qnil;
136
+ }
137
+
138
+ return result;
139
+ }
140
+
141
+ VALUE ice_cipher_decrypt(VALUE self, VALUE text)
142
+ {
143
+ ICE_KEY* key;
144
+ VALUE result;
145
+ unsigned int textLength;
146
+ unsigned char* plainText;
147
+ unsigned char* cipherText;
148
+
149
+ // Get the string length
150
+ textLength = RSTRING_LEN(text);
151
+
152
+ // Check that the string is divisible by 8
153
+ if (textLength % 8 != 0)
154
+ {
155
+ rb_raise(rb_eArgError, "expected argument to be divisible by 8, but length is %d", textLength);
156
+
157
+ return Qnil;
158
+ }
159
+
160
+ // Get the contents of the string
161
+ cipherText = (unsigned char*)StringValuePtr(text);
162
+
163
+ // Allocate space for the decrypted text
164
+ plainText = (unsigned char*)malloc(textLength);
165
+
166
+ // Get the data struct
167
+ Data_Get_Struct(self, ICE_KEY, key);
168
+
169
+ // Decrypt the cipher text
170
+ ice_key_decrypt(key, (const unsigned char*)cipherText, plainText);
171
+
172
+ if (plainText != NULL)
173
+ {
174
+ result = rb_str_new((const char*)plainText, textLength);
175
+ }
176
+ else
177
+ {
178
+ result = Qnil;
179
+ }
180
+
181
+ return result;
182
+ }
@@ -0,0 +1,17 @@
1
+ #ifndef __RUBY_ICE_KEY_H
2
+ #define __RUBY_ICE_KEY_H
3
+ #include <ruby.h>
4
+
5
+ void Init_ice_cipher_class();
6
+
7
+ void ice_cipher_create_key(VALUE self, int level, unsigned char* key);
8
+ void ice_cipher_deallocate(void *ik);
9
+ VALUE ice_cipher_allocate(VALUE klass);
10
+ VALUE ice_cipher_initialize(VALUE self, VALUE level);
11
+ VALUE ice_cipher_set_key(VALUE self, VALUE key);
12
+ VALUE ice_cipher_key_size(VALUE self);
13
+ VALUE ice_cipher_block_size(VALUE self);
14
+ VALUE ice_cipher_encrypt(VALUE self, VALUE text);
15
+ VALUE ice_cipher_decrypt(VALUE self, VALUE ciphertext);
16
+
17
+ #endif
@@ -0,0 +1,8 @@
1
+ # encoding: utf-8
2
+
3
+ # Load the extension
4
+ require 'ice-cipher/ice_cipher'
5
+
6
+ module ICE
7
+ Version = "0.1"
8
+ end
metadata ADDED
@@ -0,0 +1,80 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ice_cipher
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.1'
5
+ platform: ruby
6
+ authors:
7
+ - Mikkel Kroman
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-09-14 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rspec
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake-compiler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description:
42
+ email: mk@uplink.io
43
+ executables: []
44
+ extensions:
45
+ - extension/ice_cipher/extconf.rb
46
+ extra_rdoc_files: []
47
+ files:
48
+ - library/ice-cipher.rb
49
+ - extension/ice_cipher/extconf.rb
50
+ - extension/ice_cipher/ice.c
51
+ - extension/ice_cipher/ice_cipher.h
52
+ - extension/ice_cipher/ice.h
53
+ - extension/ice_cipher/bindings.c
54
+ - extension/ice_cipher/ice_cipher.c
55
+ - extension/ice_cipher/bindings.h
56
+ homepage:
57
+ licenses:
58
+ - Internet Systems Consortium (ISC)
59
+ metadata: {}
60
+ post_install_message:
61
+ rdoc_options: []
62
+ require_paths:
63
+ - library
64
+ required_ruby_version: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: 1.9.1
69
+ required_rubygems_version: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - '>='
72
+ - !ruby/object:Gem::Version
73
+ version: '0'
74
+ requirements: []
75
+ rubyforge_project:
76
+ rubygems_version: 2.1.3
77
+ signing_key:
78
+ specification_version: 4
79
+ summary: ICE encryption library
80
+ test_files: []