cobreaktws 1.0.4
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 +7 -0
- data/.vscode/settings.json +10 -0
- data/Gemfile +18 -0
- data/README.md +72 -0
- data/bin/cbrdb +95 -0
- data/bin/cobreak +11 -0
- data/cobreak.gemspec +28 -0
- data/ext/cobreak/cobreak.c +17 -0
- data/ext/cobreak/cobreak_cipher.c +341 -0
- data/ext/cobreak/cobreak_cipher.h +10 -0
- data/ext/cobreak/cobreak_gcrypt.c +556 -0
- data/ext/cobreak/cobreak_gcrypt.h +14 -0
- data/ext/cobreak/cobreak_openmp.c +9 -0
- data/ext/cobreak/cobreak_openmp.h +14 -0
- data/ext/cobreak/cobreak_openssl.c +438 -0
- data/ext/cobreak/cobreak_openssl.h +21 -0
- data/ext/cobreak/cobreak_ruby.h +24 -0
- data/ext/cobreak/extconf.rb +27 -0
- data/lib/cobreak/binary.rb +10 -0
- data/lib/cobreak/cesar.rb +30 -0
- data/lib/cobreak/cifrado.rb +30 -0
- data/lib/cobreak/cobreak_opt.rb +77 -0
- data/lib/cobreak/config/database.db +0 -0
- data/lib/cobreak/decifrado.rb +30 -0
- data/lib/cobreak/decrypt.rb +98 -0
- data/lib/cobreak/details.rb +19 -0
- data/lib/cobreak/encrypt.rb +114 -0
- data/lib/cobreak/force.rb +226 -0
- data/lib/cobreak/force_brute.rb +62 -0
- data/lib/cobreak/force_chars.rb +54 -0
- data/lib/cobreak/function_db.rb +26 -0
- data/lib/cobreak/function_hash.rb +28 -0
- data/lib/cobreak/hash/hash.db +1 -0
- data/lib/cobreak/info_author.rb +20 -0
- data/lib/cobreak/list_all.rb +41 -0
- data/lib/cobreak/optionpr.rb +148 -0
- data/lib/cobreak/run.rb +9 -0
- data/lib/cobreak/version.rb +5 -0
- data/lib/cobreak.rb +4 -0
- metadata +185 -0
@@ -0,0 +1,438 @@
|
|
1
|
+
#include<cobreak_openssl.h>
|
2
|
+
#define BLOCK_SIZE 64
|
3
|
+
#define HASH_SIZE_512 64
|
4
|
+
#define HASH_SIZE 32
|
5
|
+
#define NUM_ROUNDS 12
|
6
|
+
|
7
|
+
VALUE mCoBreakOpenSSL;
|
8
|
+
VALUE cCoBreakOpenSSLmd4;
|
9
|
+
VALUE cCoBreakOpenSSLmd5;
|
10
|
+
VALUE cCoBreakOpenSSLhalf_md5;
|
11
|
+
VALUE cCoBreakOpenSSLsha1;
|
12
|
+
VALUE cCoBreakOpenSSLsha2_224;
|
13
|
+
VALUE cCoBreakOpenSSLsha2_256;
|
14
|
+
VALUE cCoBreakOpenSSLsha2_384;
|
15
|
+
VALUE cCoBreakOpenSSLsha2_512;
|
16
|
+
VALUE cCoBreakOpenSSLsha3_224;
|
17
|
+
VALUE cCoBreakOpenSSLsha3_256;
|
18
|
+
VALUE cCoBreakOpenSSLsha3_384;
|
19
|
+
VALUE cCoBreakOpenSSLsha3_512;
|
20
|
+
VALUE cCoBreakOpenSSLripemd160;
|
21
|
+
|
22
|
+
|
23
|
+
VALUE ripemd160_hexdigest(VALUE self, VALUE full){
|
24
|
+
char *str = RSTRING_PTR(full);
|
25
|
+
int n;
|
26
|
+
RIPEMD160_CTX c;
|
27
|
+
unsigned char digest[65];
|
28
|
+
char *out = (char*)malloc(33);
|
29
|
+
int length = strlen(str);
|
30
|
+
|
31
|
+
RIPEMD160_Init(&c);
|
32
|
+
|
33
|
+
while (length > 0) {
|
34
|
+
if (length > 512) {
|
35
|
+
RIPEMD160_Update(&c, str, 512);
|
36
|
+
} else {
|
37
|
+
RIPEMD160_Update(&c, str, length);
|
38
|
+
}
|
39
|
+
length -= 512;
|
40
|
+
str += 512;
|
41
|
+
}
|
42
|
+
|
43
|
+
RIPEMD160_Final(digest, &c);
|
44
|
+
|
45
|
+
for (n = 0; n < RIPEMD160_DIGEST_LENGTH; ++n) {
|
46
|
+
snprintf(&(out[n*2]), RIPEMD160_DIGEST_LENGTH*2, "%02x", (unsigned int)digest[n]);
|
47
|
+
}
|
48
|
+
|
49
|
+
return rb_str_new2(out);
|
50
|
+
free(out);
|
51
|
+
}
|
52
|
+
|
53
|
+
VALUE md4_hexdigest(VALUE self, VALUE input) {
|
54
|
+
// Convertir el valor Ruby a una cadena C
|
55
|
+
char *str = RSTRING_PTR(input);
|
56
|
+
int length = RSTRING_LEN(input); // Obtener la longitud de la cadena
|
57
|
+
unsigned char digest[MD4_DIGEST_LENGTH]; // MD4 produce un hash de 16 bytes
|
58
|
+
char out[33]; // 16 bytes * 2 para hexadecimal + 1 para el terminador
|
59
|
+
|
60
|
+
// Calcular el hash MD4
|
61
|
+
MD4((unsigned char*)str, length, digest);
|
62
|
+
|
63
|
+
// Convertir el hash a una cadena hexadecimal
|
64
|
+
for (int n = 0; n < MD4_DIGEST_LENGTH; ++n) {
|
65
|
+
sprintf(&(out[n * 2]), "%02x", (unsigned int)digest[n]);
|
66
|
+
}
|
67
|
+
out[32] = '\0'; // Terminar la cadena
|
68
|
+
|
69
|
+
VALUE result = rb_str_new2(out); // Crear una nueva cadena Ruby
|
70
|
+
return result;
|
71
|
+
}
|
72
|
+
|
73
|
+
VALUE md5_hexdigest(VALUE self, VALUE input) {
|
74
|
+
// Convertir el valor Ruby a una cadena C
|
75
|
+
char *str = RSTRING_PTR(input);
|
76
|
+
int length = RSTRING_LEN(input); // Obtener la longitud de la cadena
|
77
|
+
unsigned char digest[MD5_DIGEST_LENGTH]; // MD5 produce un hash de 16 bytes
|
78
|
+
char out[33]; // 16 bytes * 2 para hexadecimal + 1 para el terminador
|
79
|
+
|
80
|
+
// Calcular el hash MD5
|
81
|
+
MD5((unsigned char*)str, length, digest);
|
82
|
+
|
83
|
+
// Convertir el hash a una cadena hexadecimal
|
84
|
+
for (int n = 0; n < MD5_DIGEST_LENGTH; ++n) {
|
85
|
+
sprintf(&(out[n * 2]), "%02x", (unsigned int)digest[n]);
|
86
|
+
}
|
87
|
+
out[32] = '\0'; // Terminar la cadena
|
88
|
+
|
89
|
+
VALUE result = rb_str_new2(out); // Crear una nueva cadena Ruby
|
90
|
+
return result;
|
91
|
+
}
|
92
|
+
|
93
|
+
VALUE half_md5_hexdigest(VALUE self, VALUE input) {
|
94
|
+
// Convertir el valor Ruby a una cadena C
|
95
|
+
char *str = RSTRING_PTR(input);
|
96
|
+
int length = RSTRING_LEN(input); // Obtener la longitud de la cadena
|
97
|
+
unsigned char digest[MD5_DIGEST_LENGTH]; // MD5 produce un hash de 16 bytes
|
98
|
+
char out[17]; // 8 bytes * 2 para hexadecimal + 1 para el terminador
|
99
|
+
|
100
|
+
// Calcular el hash MD5
|
101
|
+
MD5((unsigned char*)str, length, digest);
|
102
|
+
|
103
|
+
// Convertir solo los primeros 8 bytes del hash a una cadena hexadecimal
|
104
|
+
for (int n = 0; n < 8; ++n) {
|
105
|
+
sprintf(&(out[n * 2]), "%02x", (unsigned int)digest[n]);
|
106
|
+
}
|
107
|
+
out[16] = '\0'; // Terminar la cadena
|
108
|
+
|
109
|
+
VALUE result = rb_str_new2(out); // Crear una nueva cadena Ruby
|
110
|
+
return result;
|
111
|
+
}
|
112
|
+
|
113
|
+
VALUE sha1_hexdigest(VALUE self, VALUE input) {
|
114
|
+
// Convertir el valor Ruby a una cadena C
|
115
|
+
char *str = RSTRING_PTR(input);
|
116
|
+
int length = RSTRING_LEN(input); // Obtener la longitud de la cadena
|
117
|
+
unsigned char digest[SHA_DIGEST_LENGTH]; // SHA-1 produce un hash de 20 bytes
|
118
|
+
char out[41]; // 20 bytes * 2 para hexadecimal + 1 para el terminador
|
119
|
+
|
120
|
+
// Calcular el hash SHA-1
|
121
|
+
SHA1((unsigned char*)str, length, digest);
|
122
|
+
|
123
|
+
// Convertir el hash a una cadena hexadecimal
|
124
|
+
for (int n = 0; n < SHA_DIGEST_LENGTH; ++n) {
|
125
|
+
sprintf(&(out[n * 2]), "%02x", (unsigned int)digest[n]);
|
126
|
+
}
|
127
|
+
out[40] = '\0'; // Terminar la cadena
|
128
|
+
|
129
|
+
VALUE result = rb_str_new2(out); // Crear una nueva cadena Ruby
|
130
|
+
return result;
|
131
|
+
}
|
132
|
+
|
133
|
+
VALUE sha2_224_hexdigest(VALUE self, VALUE input) {
|
134
|
+
// Convertir el valor Ruby a una cadena C
|
135
|
+
char *str = RSTRING_PTR(input);
|
136
|
+
int length = RSTRING_LEN(input); // Obtener la longitud de la cadena
|
137
|
+
unsigned char digest[SHA224_DIGEST_LENGTH]; // SHA-224 produce un hash de 28 bytes
|
138
|
+
char out[57]; // 28 bytes * 2 para hexadecimal + 1 para el terminador
|
139
|
+
|
140
|
+
// Calcular el hash SHA-224
|
141
|
+
SHA224((unsigned char*)str, length, digest);
|
142
|
+
|
143
|
+
// Convertir el hash a una cadena hexadecimal
|
144
|
+
for (int n = 0; n < SHA224_DIGEST_LENGTH; ++n) {
|
145
|
+
sprintf(&(out[n * 2]), "%02x", (unsigned int)digest[n]);
|
146
|
+
}
|
147
|
+
out[56] = '\0'; // Terminar la cadena
|
148
|
+
|
149
|
+
VALUE result = rb_str_new2(out); // Crear una nueva cadena Ruby
|
150
|
+
return result;
|
151
|
+
}
|
152
|
+
|
153
|
+
VALUE sha2_256_hexdigest(VALUE self, VALUE input) {
|
154
|
+
// Convertir el valor Ruby a una cadena C
|
155
|
+
char *str = RSTRING_PTR(input);
|
156
|
+
int length = RSTRING_LEN(input); // Obtener la longitud de la cadena
|
157
|
+
unsigned char digest[SHA256_DIGEST_LENGTH]; // SHA-256 produce un hash de 32 bytes
|
158
|
+
char out[65]; // 32 bytes * 2 para hexadecimal + 1 para el terminador
|
159
|
+
|
160
|
+
// Calcular el hash SHA-256
|
161
|
+
SHA256((unsigned char*)str, length, digest);
|
162
|
+
|
163
|
+
// Convertir el hash a una cadena hexadecimal
|
164
|
+
for (int n = 0; n < SHA256_DIGEST_LENGTH; ++n) {
|
165
|
+
sprintf(&(out[n * 2]), "%02x", (unsigned int)digest[n]);
|
166
|
+
}
|
167
|
+
out[64] = '\0'; // Terminar la cadena
|
168
|
+
|
169
|
+
VALUE result = rb_str_new2(out); // Crear una nueva cadena Ruby
|
170
|
+
return result;
|
171
|
+
}
|
172
|
+
|
173
|
+
VALUE sha2_384_hexdigest(VALUE self, VALUE input) {
|
174
|
+
// Convertir el valor Ruby a una cadena C
|
175
|
+
char *str = RSTRING_PTR(input);
|
176
|
+
int length = RSTRING_LEN(input); // Obtener la longitud de la cadena
|
177
|
+
unsigned char digest[SHA384_DIGEST_LENGTH]; // SHA-384 produce un hash de 48 bytes
|
178
|
+
char out[97]; // 48 bytes * 2 para hexadecimal + 1 para el terminador
|
179
|
+
|
180
|
+
// Calcular el hash SHA-384
|
181
|
+
SHA384((unsigned char*)str, length, digest);
|
182
|
+
|
183
|
+
// Convertir el hash a una cadena hexadecimal
|
184
|
+
for (int n = 0; n < SHA384_DIGEST_LENGTH; ++n) {
|
185
|
+
sprintf(&(out[n * 2]), "%02x", (unsigned int)digest[n]);
|
186
|
+
}
|
187
|
+
out[96] = '\0'; // Terminar la cadena
|
188
|
+
|
189
|
+
VALUE result = rb_str_new2(out); // Crear una nueva cadena Ruby
|
190
|
+
return result;
|
191
|
+
}
|
192
|
+
|
193
|
+
VALUE sha2_512_hexdigest(VALUE self, VALUE input) {
|
194
|
+
// Convertir el valor Ruby a una cadena C
|
195
|
+
char *str = RSTRING_PTR(input);
|
196
|
+
int length = RSTRING_LEN(input); // Obtener la longitud de la cadena
|
197
|
+
unsigned char digest[SHA512_DIGEST_LENGTH]; // SHA-512 produce un hash de 64 bytes
|
198
|
+
char out[129]; // 64 bytes * 2 para hexadecimal + 1 para el terminador
|
199
|
+
|
200
|
+
// Calcular el hash SHA-512
|
201
|
+
SHA512((unsigned char*)str, length, digest);
|
202
|
+
|
203
|
+
// Convertir el hash a una cadena hexadecimal
|
204
|
+
for (int n = 0; n < SHA512_DIGEST_LENGTH; ++n) {
|
205
|
+
sprintf(&(out[n * 2]), "%02x", (unsigned int)digest[n]);
|
206
|
+
}
|
207
|
+
out[128] = '\0'; // Terminar la cadena
|
208
|
+
|
209
|
+
VALUE result = rb_str_new2(out); // Crear una nueva cadena Ruby
|
210
|
+
return result;
|
211
|
+
}
|
212
|
+
|
213
|
+
VALUE sha3_224_hexdigest(VALUE self, VALUE input) {
|
214
|
+
|
215
|
+
// Asegúrate de que el input es una cadena
|
216
|
+
|
217
|
+
Check_Type(input, T_STRING);
|
218
|
+
|
219
|
+
|
220
|
+
// Crear un contexto para el hash
|
221
|
+
|
222
|
+
EVP_MD_CTX *ctx = EVP_MD_CTX_new();
|
223
|
+
|
224
|
+
const EVP_MD *md = EVP_sha3_224();
|
225
|
+
|
226
|
+
|
227
|
+
|
228
|
+
// Inicializar el contexto y calcular el hash
|
229
|
+
|
230
|
+
EVP_DigestInit_ex(ctx, md, NULL);
|
231
|
+
|
232
|
+
EVP_DigestUpdate(ctx, (unsigned char *)StringValueCStr(input), RSTRING_LEN(input));
|
233
|
+
|
234
|
+
|
235
|
+
|
236
|
+
unsigned char output[EVP_MAX_MD_SIZE];
|
237
|
+
|
238
|
+
unsigned int output_len;
|
239
|
+
|
240
|
+
|
241
|
+
EVP_DigestFinal_ex(ctx, output, &output_len);
|
242
|
+
|
243
|
+
EVP_MD_CTX_free(ctx);
|
244
|
+
|
245
|
+
|
246
|
+
// Convertir el hash a una cadena hexadecimal
|
247
|
+
|
248
|
+
VALUE hex_string = rb_str_new("", 0);
|
249
|
+
|
250
|
+
for (unsigned int i = 0; i < output_len; i++) {
|
251
|
+
|
252
|
+
rb_str_catf(hex_string, "%02x", output[i]);
|
253
|
+
|
254
|
+
}
|
255
|
+
|
256
|
+
|
257
|
+
return hex_string;
|
258
|
+
}
|
259
|
+
|
260
|
+
VALUE sha3_256_hexdigest(VALUE self, VALUE input) {
|
261
|
+
|
262
|
+
// Asegúrate de que el input es una cadena
|
263
|
+
|
264
|
+
Check_Type(input, T_STRING);
|
265
|
+
|
266
|
+
|
267
|
+
// Crear un contexto para el hash
|
268
|
+
|
269
|
+
EVP_MD_CTX *ctx = EVP_MD_CTX_new();
|
270
|
+
|
271
|
+
const EVP_MD *md = EVP_sha3_256();
|
272
|
+
|
273
|
+
|
274
|
+
|
275
|
+
// Inicializar el contexto y calcular el hash
|
276
|
+
|
277
|
+
EVP_DigestInit_ex(ctx, md, NULL);
|
278
|
+
|
279
|
+
EVP_DigestUpdate(ctx, (unsigned char *)StringValueCStr(input), RSTRING_LEN(input));
|
280
|
+
|
281
|
+
|
282
|
+
|
283
|
+
unsigned char output[EVP_MAX_MD_SIZE];
|
284
|
+
|
285
|
+
unsigned int output_len;
|
286
|
+
|
287
|
+
|
288
|
+
EVP_DigestFinal_ex(ctx, output, &output_len);
|
289
|
+
|
290
|
+
EVP_MD_CTX_free(ctx);
|
291
|
+
// Convertir el hash a una cadena hexadecimal
|
292
|
+
|
293
|
+
VALUE hex_string = rb_str_new("", 0);
|
294
|
+
|
295
|
+
for (unsigned int i = 0; i < output_len; i++) {
|
296
|
+
|
297
|
+
rb_str_catf(hex_string, "%02x", output[i]);
|
298
|
+
|
299
|
+
}
|
300
|
+
return hex_string;
|
301
|
+
}
|
302
|
+
|
303
|
+
VALUE sha3_384_hexdigest(VALUE self, VALUE input) {
|
304
|
+
|
305
|
+
// Asegúrate de que el input es una cadena
|
306
|
+
|
307
|
+
Check_Type(input, T_STRING);
|
308
|
+
|
309
|
+
|
310
|
+
// Crear un contexto para el hash
|
311
|
+
|
312
|
+
EVP_MD_CTX *ctx = EVP_MD_CTX_new();
|
313
|
+
|
314
|
+
const EVP_MD *md = EVP_sha3_384();
|
315
|
+
|
316
|
+
|
317
|
+
|
318
|
+
// Inicializar el contexto y calcular el hash
|
319
|
+
|
320
|
+
EVP_DigestInit_ex(ctx, md, NULL);
|
321
|
+
|
322
|
+
EVP_DigestUpdate(ctx, (unsigned char *)StringValueCStr(input), RSTRING_LEN(input));
|
323
|
+
|
324
|
+
|
325
|
+
|
326
|
+
unsigned char output[EVP_MAX_MD_SIZE];
|
327
|
+
|
328
|
+
unsigned int output_len;
|
329
|
+
|
330
|
+
|
331
|
+
EVP_DigestFinal_ex(ctx, output, &output_len);
|
332
|
+
|
333
|
+
EVP_MD_CTX_free(ctx);
|
334
|
+
|
335
|
+
|
336
|
+
// Convertir el hash a una cadena hexadecimal
|
337
|
+
|
338
|
+
VALUE hex_string = rb_str_new("", 0);
|
339
|
+
|
340
|
+
for (unsigned int i = 0; i < output_len; i++) {
|
341
|
+
|
342
|
+
rb_str_catf(hex_string, "%02x", output[i]);
|
343
|
+
|
344
|
+
}
|
345
|
+
return hex_string;
|
346
|
+
}
|
347
|
+
|
348
|
+
VALUE sha3_512_hexdigest(VALUE self, VALUE input) {
|
349
|
+
|
350
|
+
// Asegúrate de que el input es una cadena
|
351
|
+
|
352
|
+
Check_Type(input, T_STRING);
|
353
|
+
|
354
|
+
|
355
|
+
// Crear un contexto para el hash
|
356
|
+
|
357
|
+
EVP_MD_CTX *ctx = EVP_MD_CTX_new();
|
358
|
+
|
359
|
+
const EVP_MD *md = EVP_sha3_512();
|
360
|
+
|
361
|
+
|
362
|
+
|
363
|
+
// Inicializar el contexto y calcular el hash
|
364
|
+
|
365
|
+
EVP_DigestInit_ex(ctx, md, NULL);
|
366
|
+
|
367
|
+
EVP_DigestUpdate(ctx, (unsigned char *)StringValueCStr(input), RSTRING_LEN(input));
|
368
|
+
|
369
|
+
|
370
|
+
|
371
|
+
unsigned char output[EVP_MAX_MD_SIZE];
|
372
|
+
|
373
|
+
unsigned int output_len;
|
374
|
+
|
375
|
+
|
376
|
+
EVP_DigestFinal_ex(ctx, output, &output_len);
|
377
|
+
|
378
|
+
EVP_MD_CTX_free(ctx);
|
379
|
+
|
380
|
+
|
381
|
+
// Convertir el hash a una cadena hexadecimal
|
382
|
+
|
383
|
+
VALUE hex_string = rb_str_new("", 0);
|
384
|
+
|
385
|
+
for (unsigned int i = 0; i < output_len; i++) {
|
386
|
+
|
387
|
+
rb_str_catf(hex_string, "%02x", output[i]);
|
388
|
+
|
389
|
+
}
|
390
|
+
|
391
|
+
|
392
|
+
return hex_string;
|
393
|
+
|
394
|
+
}
|
395
|
+
|
396
|
+
void init_cobreak_openssl(){
|
397
|
+
//Define module OpenSSL in mCoBreak
|
398
|
+
mCoBreakOpenSSL = rb_define_module_under(mCoBreak, "OpenSSL");
|
399
|
+
//Define Class MD4 encrypt mode
|
400
|
+
cCoBreakOpenSSLmd4 = rb_define_class_under(mCoBreakOpenSSL, "MD4", rb_cObject);
|
401
|
+
rb_define_singleton_method(cCoBreakOpenSSLmd4, "hexdigest", md4_hexdigest, 1);
|
402
|
+
//Define Class MD5 encrypt mode
|
403
|
+
cCoBreakOpenSSLmd5 = rb_define_class_under(mCoBreakOpenSSL, "MD5", rb_cObject);
|
404
|
+
rb_define_singleton_method(cCoBreakOpenSSLmd5, "hexdigest", md5_hexdigest, 1);
|
405
|
+
//Define Class MD5 encrypt mode
|
406
|
+
cCoBreakOpenSSLhalf_md5 = rb_define_class_under(mCoBreakOpenSSL, "HALF_MD5", rb_cObject);
|
407
|
+
rb_define_singleton_method(cCoBreakOpenSSLhalf_md5, "hexdigest", half_md5_hexdigest, 1);
|
408
|
+
//Define Class SHA-1 encrypt mode
|
409
|
+
cCoBreakOpenSSLsha1 = rb_define_class_under(mCoBreakOpenSSL, "SHA1", rb_cObject);
|
410
|
+
rb_define_singleton_method(cCoBreakOpenSSLsha1, "hexdigest", sha1_hexdigest, 1);
|
411
|
+
//Define Class SHA2-224 encrypt mode
|
412
|
+
cCoBreakOpenSSLsha2_224 = rb_define_class_under(mCoBreakOpenSSL, "SHA2_224", rb_cObject);
|
413
|
+
rb_define_singleton_method(cCoBreakOpenSSLsha2_224, "hexdigest", sha2_224_hexdigest, 1);
|
414
|
+
//Define Class SHA2-256 encrypt mode
|
415
|
+
cCoBreakOpenSSLsha2_256 = rb_define_class_under(mCoBreakOpenSSL, "SHA2_256", rb_cObject);
|
416
|
+
rb_define_singleton_method(cCoBreakOpenSSLsha2_256, "hexdigest", sha2_256_hexdigest, 1);
|
417
|
+
//Define Class SHA2-384 encrypt mode
|
418
|
+
cCoBreakOpenSSLsha2_384 = rb_define_class_under(mCoBreakOpenSSL, "SHA2_384", rb_cObject);
|
419
|
+
rb_define_singleton_method(cCoBreakOpenSSLsha2_384, "hexdigest", sha2_384_hexdigest, 1);
|
420
|
+
//Define Class SHA2-512 encrypt mode
|
421
|
+
cCoBreakOpenSSLsha2_512 = rb_define_class_under(mCoBreakOpenSSL, "SHA2_512", rb_cObject);
|
422
|
+
rb_define_singleton_method(cCoBreakOpenSSLsha2_512, "hexdigest", sha2_512_hexdigest, 1);
|
423
|
+
//Define Class SHA3-224 encrypt mode
|
424
|
+
cCoBreakOpenSSLsha3_224 = rb_define_class_under(mCoBreakOpenSSL, "SHA3_224", rb_cObject);
|
425
|
+
rb_define_singleton_method(cCoBreakOpenSSLsha3_224, "hexdigest", sha3_224_hexdigest, 1);
|
426
|
+
//Define Class SHA3-224 encrypt mode
|
427
|
+
cCoBreakOpenSSLsha3_256 = rb_define_class_under(mCoBreakOpenSSL, "SHA3_256", rb_cObject);
|
428
|
+
rb_define_singleton_method(cCoBreakOpenSSLsha3_256, "hexdigest", sha3_256_hexdigest, 1);
|
429
|
+
//Define Class SHA3-224 encrypt mode
|
430
|
+
cCoBreakOpenSSLsha3_384 = rb_define_class_under(mCoBreakOpenSSL, "SHA3_384", rb_cObject);
|
431
|
+
rb_define_singleton_method(cCoBreakOpenSSLsha3_384, "hexdigest", sha3_384_hexdigest, 1);
|
432
|
+
//Define Class SHA3-224 encrypt mode
|
433
|
+
cCoBreakOpenSSLsha3_512 = rb_define_class_under(mCoBreakOpenSSL, "SHA3_512", rb_cObject);
|
434
|
+
rb_define_singleton_method(cCoBreakOpenSSLsha3_512, "hexdigest", sha3_512_hexdigest, 1);
|
435
|
+
//Define Class RIPEMD-160 encrypt mode
|
436
|
+
cCoBreakOpenSSLripemd160 = rb_define_class_under(mCoBreakOpenSSL, "RIPEMD_160", rb_cObject);
|
437
|
+
rb_define_singleton_method(cCoBreakOpenSSLripemd160, "hexdigest", ripemd160_hexdigest, 1);
|
438
|
+
}
|
@@ -0,0 +1,21 @@
|
|
1
|
+
#ifndef COBREAK_OPENSSL_RUBY
|
2
|
+
#define COBREAK_OPENSS_RUBY
|
3
|
+
|
4
|
+
//include library <cobreak_ruby.h> for project
|
5
|
+
#include<cobreak_ruby.h>
|
6
|
+
|
7
|
+
//definition body for file <header>
|
8
|
+
#include<openssl/sha.h>
|
9
|
+
//#include<openssl/sha3.h>
|
10
|
+
#include<openssl/md4.h>
|
11
|
+
#include<openssl/md5.h>
|
12
|
+
#include<openssl/ripemd.h>
|
13
|
+
#include <openssl/evp.h>
|
14
|
+
#include <openssl/err.h>
|
15
|
+
//#include<crypto.h>
|
16
|
+
//#include<ssl.h>
|
17
|
+
|
18
|
+
//initialize function
|
19
|
+
void init_cobreak_openssl();
|
20
|
+
|
21
|
+
#endif
|
@@ -0,0 +1,24 @@
|
|
1
|
+
#ifndef COBREAK_RUBY
|
2
|
+
#define COBREAK_RUBY
|
3
|
+
|
4
|
+
#include<ruby.h>
|
5
|
+
#include<string.h>
|
6
|
+
#include<stdbool.h>
|
7
|
+
#include<stdlib.h>
|
8
|
+
#include<stdio.h>
|
9
|
+
#include<stdint.h>
|
10
|
+
|
11
|
+
extern VALUE mCoBreak;
|
12
|
+
#if 0
|
13
|
+
VALUE mCoBreak = rb_define_module("CoBreak");
|
14
|
+
#endif
|
15
|
+
|
16
|
+
|
17
|
+
|
18
|
+
|
19
|
+
#include<cobreak_openssl.h>
|
20
|
+
#include<cobreak_gcrypt.h>
|
21
|
+
#include<cobreak_cipher.h>
|
22
|
+
//#include<cobreak_exception.h>
|
23
|
+
//continue...
|
24
|
+
#endif
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require "mkmf"
|
2
|
+
|
3
|
+
#Welcome to CoBreak ExtConf
|
4
|
+
|
5
|
+
abort "Missing library crypto" unless have_library("crypto")
|
6
|
+
#if not have_header("openssl/ssl.h") and have_header("nettle/nettle-types.h") and have_library("crypto")
|
7
|
+
# abort("missing libreries of openssl / nettle / crypto")
|
8
|
+
#end
|
9
|
+
if (`gem search sqlite3 --installed` == "true\n")
|
10
|
+
#dir of configuration
|
11
|
+
dir_config("cobreak")
|
12
|
+
# if have_header("cobreak_ruby.h")
|
13
|
+
# have_header("string.h")
|
14
|
+
# if RUBY_PLATFORM =~ /mswin|darwin/
|
15
|
+
# have_header("window.h")
|
16
|
+
# end
|
17
|
+
create_header
|
18
|
+
have_library( 'stdc++' );
|
19
|
+
have_library('gcrypt');
|
20
|
+
$CFLAGS << " -Wall"
|
21
|
+
create_makefile("cobreak/cobreak")
|
22
|
+
# else
|
23
|
+
# abort("missing header's of CoBreak")
|
24
|
+
# end
|
25
|
+
else
|
26
|
+
abort("missing libreries, use (gem install sqlite3)")
|
27
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
class CesarCifrado
|
2
|
+
def cesar(dato, rotasiones, orientacion = 1)
|
3
|
+
cesar = OpenStruct.new
|
4
|
+
cesar.cad_rot = []
|
5
|
+
alfa_mayus = ('A'..'Z').to_a
|
6
|
+
alfa_minus = ('a'..'z').to_a
|
7
|
+
alf = 26
|
8
|
+
lit_mayus = 65
|
9
|
+
lit_minus = 97
|
10
|
+
cad_rot = ""
|
11
|
+
for letra in dato.chars
|
12
|
+
if !letra.match(/^[[:alpha:]]$/)
|
13
|
+
cad_rot += letra
|
14
|
+
next
|
15
|
+
end
|
16
|
+
alfabeto = alfa_mayus
|
17
|
+
limit = lit_mayus
|
18
|
+
if letra == letra.downcase
|
19
|
+
alfabeto = alfa_minus
|
20
|
+
limit = lit_minus
|
21
|
+
end
|
22
|
+
var_ascii = letra.ord
|
23
|
+
rot_ver = rotasiones * orientacion
|
24
|
+
new_pos = (var_ascii - limit + rot_ver) % alf
|
25
|
+
cesar.cad_rot << alfabeto[new_pos]
|
26
|
+
end
|
27
|
+
return cesar.cad_rot.join('')
|
28
|
+
end
|
29
|
+
end
|
30
|
+
Cesar = CesarCifrado.new
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'ascii85'
|
2
|
+
|
3
|
+
module CoBreak
|
4
|
+
class Cifrado
|
5
|
+
def self.cipher(mode, dato)
|
6
|
+
cipher = OpenStruct.new
|
7
|
+
cipher.mode = mode
|
8
|
+
cipher.dato = dato
|
9
|
+
if (cipher.mode.eql?('base16'))
|
10
|
+
cipher.result = CoBreak::Cipher::Base16.encode(dato)
|
11
|
+
elsif (cipher.mode.eql?('base32'))
|
12
|
+
cipher.result = CoBreak::Cipher::Base32.encode(dato)
|
13
|
+
elsif (cipher.mode.eql?('base64'))
|
14
|
+
cipher.result = CoBreak::Cipher::Base64.encode(dato)
|
15
|
+
elsif (cipher.mode.eql?('ascii85'))
|
16
|
+
cipher.result = Ascii85.encode(dato)
|
17
|
+
elsif (cipher.mode.eql?('cesar'))
|
18
|
+
cipher.result = CoBreak::Cipher::Cesar.encode(dato, ARGV[0].to_i)
|
19
|
+
elsif (cipher.mode.eql?('binary'))
|
20
|
+
cipher.result = CoBreak::Cipher::Binary.encode(dato)
|
21
|
+
end
|
22
|
+
unless (cipher.result.nil?) or (cipher.result.eql?(cipher.dato))
|
23
|
+
puts "\n\e[1;32m[\e[37m+\e[1;32m]\e[37m Ciphertext: #{cipher.result}"
|
24
|
+
puts "\e[1;32m[\e[37m+\e[1;32m]\e[37m Number Rotations: #{ARGV[0]}" if (cipher.mode.eql?('cesar'))
|
25
|
+
else
|
26
|
+
puts "\e[1;31m[\e[37m+\e[1;31m]\e[37m Not Cipher Text..."
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
#!/bin/env ruby
|
2
|
+
module CoBreak
|
3
|
+
class Box
|
4
|
+
def self.var(options)
|
5
|
+
@options = options
|
6
|
+
$options = options
|
7
|
+
end
|
8
|
+
begin
|
9
|
+
require 'cobreak/cifrado'
|
10
|
+
require 'cobreak/decifrado'
|
11
|
+
require 'cobreak/encrypt'
|
12
|
+
require 'cobreak/decrypt'
|
13
|
+
rescue LoadError => e
|
14
|
+
puts e.message
|
15
|
+
puts "A file is missing from the repository"
|
16
|
+
puts ""
|
17
|
+
exit(1)
|
18
|
+
end
|
19
|
+
#encoding and decoding algoritmhs
|
20
|
+
class Cipher
|
21
|
+
def self.coding()
|
22
|
+
@options = $options
|
23
|
+
@options.enc = "" if @options.enc.nil? == true
|
24
|
+
@options.dec = "" if @options.dec.nil? == true
|
25
|
+
@options.cipher = %w[Base16 Base32 Base64 Ascii85 Binary Cesar]
|
26
|
+
if (@options.cipher.include?(@options.enc.capitalize)) or (@options.cipher.include?(@options.dec.capitalize));
|
27
|
+
if (File.exists?(@options.algo));
|
28
|
+
IO.foreach(@options.algo){|line|
|
29
|
+
line.chomp!
|
30
|
+
if (@options.cipher?(@options.enc.capitalize))
|
31
|
+
CoBreak::Cifrado.cipher(line.to_s)
|
32
|
+
end
|
33
|
+
if (@options.cipher.include?(@options.dec.capitalize))
|
34
|
+
CoBreak::Decifrado.cipher(line.to_s)
|
35
|
+
end
|
36
|
+
}
|
37
|
+
else
|
38
|
+
if (@options.cipher.include?(@options.enc.capitalize))
|
39
|
+
CoBreak::Cifrado::cipher(@options.enc, @options.algo.to_s)
|
40
|
+
end
|
41
|
+
if (@options.cipher.include?(@options.dec.capitalize))
|
42
|
+
CoBreak::Decifrado::cipher(@options.dec,@options.algo.to_s)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
class Cryptgraphy
|
49
|
+
def self.crypt()
|
50
|
+
@options = $options
|
51
|
+
@options.encrypt = "" if @options.encrypt.nil? == true
|
52
|
+
@options.decrypt = "" if @options.decrypt.nil? == true
|
53
|
+
show = OpenStruct.new
|
54
|
+
show.crypt = %w[MD4 MD5 HALF-MD5 SHA1 SHA2-224 SHA2-256 SHA2-384 SHA2-512 SHA3-224 SHA3-256 SHA3-384 SHA3-512 RIPEMD-160 TIGER-160 DOUBLE-SHA1 BLAKE2S-128 BLAKE2S-160 BLAKE2B-160 BLAKE2S-224 BLAKE2S-256 BLAKE2B-256 BLAKE2B-384 BLAKE2B-512 WHIRLPOOL GOST-STREEBOG-256 GOST-STREEBOG-512 SHAKE-128]
|
55
|
+
if (show.crypt.include?(@options.encrypt.upcase)) or (show.crypt.include?(@options.decrypt.upcase));
|
56
|
+
if (File.exists?(@options.algo));
|
57
|
+
IO.foreach(@options.algo){|line|
|
58
|
+
line.chomp!
|
59
|
+
EnCrypt::show(@options.encrypt, line) if (show.crypt.include?(@options.encrypt.upcase))
|
60
|
+
DeCrypt::show(@options.decrypt, line) if (show.crypt.include?(@options.decrypt.upcase))
|
61
|
+
}
|
62
|
+
else
|
63
|
+
if (show.crypt.include?(@options.encrypt.upcase))
|
64
|
+
EnCrypt::show(@options.encrypt, @options.algo)
|
65
|
+
end
|
66
|
+
if (show.crypt.include?(@options.decrypt.upcase))
|
67
|
+
DeCrypt::show(@options.decrypt.upcase, @options.algo)
|
68
|
+
#DeCrypt::show(@options.decrypt, @options.algo)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
else
|
72
|
+
abort "\e[31m[\e[37m✘\e[31m]\e[37m Invalid Hash Format"
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
File without changes
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'ascii85'
|
2
|
+
|
3
|
+
module CoBreak
|
4
|
+
class Decifrado
|
5
|
+
def self.cipher(mode, dato)
|
6
|
+
decipher = OpenStruct.new
|
7
|
+
decipher.mode = mode
|
8
|
+
decipher.dato = dato
|
9
|
+
if (decipher.mode.eql?('base16'))
|
10
|
+
decipher.result = CoBreak::Cipher::Base16.decode(decipher.dato)
|
11
|
+
elsif (decipher.mode.eql?('base32'))
|
12
|
+
decipher.result = CoBreak::Cipher::Base32.decode(decipher.dato)
|
13
|
+
elsif (decipher.mode.eql?('base64'))
|
14
|
+
decipher.result = CoBreak::Cipher::Base64.decode(decipher.dato)
|
15
|
+
elsif (decipher.mode.eql?('ascii85'))
|
16
|
+
decipher.result = Ascii85.decode(decipher.dato)
|
17
|
+
elsif (decipher.mode.eql?('cesar'))
|
18
|
+
decipher.result = CoBreak::Cipher::Cesar.decode(decipher.dato, ARGV[0].to_i)
|
19
|
+
elsif (decipher.mode.eql?('binary'))
|
20
|
+
decipher.result = CoBreak::Cipher::Binary.decode(decipher.dato)
|
21
|
+
end
|
22
|
+
unless (decipher.result.nil?) or (decipher.result.eql?(decipher.dato))
|
23
|
+
puts "\n\e[1;32m[\e[37m+\e[1;32m]\e[37m DecipherText: #{decipher.result}"
|
24
|
+
puts "\e[1;32m[\e[37m+\e[1;32m]\e[37m Number Rotations: #{ARGV[0]}" if (decipher.mode.eql?('cesar'))
|
25
|
+
else
|
26
|
+
puts "\e[1;31m[\e[37m+\e[1;31m]\e[37m Not Cipher Text..."
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|