rubysl-digest 2.0.3 → 2.0.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +8 -10
- data/MRI_LICENSE +56 -0
- data/ext/rubysl/digest/bubblebabble/bubblebabble.c +27 -28
- data/ext/rubysl/digest/defs.h +1 -1
- data/ext/rubysl/digest/digest.c +142 -58
- data/ext/rubysl/digest/digest.h +25 -5
- data/ext/rubysl/digest/digest_conf.rb +28 -0
- data/ext/rubysl/digest/extconf.rb +1 -1
- data/ext/rubysl/digest/md5/extconf.rb +3 -13
- data/ext/rubysl/digest/md5/md5.c +9 -7
- data/ext/rubysl/digest/md5/md5.h +3 -3
- data/ext/rubysl/digest/md5/md5cc.h +12 -0
- data/ext/rubysl/digest/md5/md5init.c +12 -5
- data/ext/rubysl/digest/md5/md5ossl.h +4 -2
- data/ext/rubysl/digest/rmd160/extconf.rb +3 -12
- data/ext/rubysl/digest/rmd160/rmd160.c +12 -6
- data/ext/rubysl/digest/rmd160/rmd160.h +3 -3
- data/ext/rubysl/digest/rmd160/rmd160init.c +10 -5
- data/ext/rubysl/digest/rmd160/rmd160ossl.h +3 -2
- data/ext/rubysl/digest/sha1/extconf.rb +3 -12
- data/ext/rubysl/digest/sha1/sha1.c +5 -3
- data/ext/rubysl/digest/sha1/sha1.h +3 -3
- data/ext/rubysl/digest/sha1/sha1cc.h +14 -0
- data/ext/rubysl/digest/sha1/sha1init.c +12 -5
- data/ext/rubysl/digest/sha1/sha1ossl.h +4 -2
- data/ext/rubysl/digest/sha2/extconf.rb +7 -8
- data/ext/rubysl/digest/sha2/sha2.c +235 -73
- data/ext/rubysl/digest/sha2/sha2.h +142 -26
- data/ext/rubysl/digest/sha2/sha2cc.h +31 -0
- data/ext/rubysl/digest/sha2/sha2init.c +12 -4
- data/ext/rubysl/digest/sha2/sha2ossl.h +27 -0
- data/ext/rubysl/openssl/deprecation.rb +21 -0
- data/lib/digest/sha2.rb +42 -9
- data/lib/rubysl/digest/digest.rb +27 -7
- data/lib/rubysl/digest/version.rb +1 -1
- data/spec/fixtures/dir/common.rb +171 -0
- data/spec/md5/file_spec.rb +1 -1
- data/spec/sha1/file_spec.rb +1 -1
- data/spec/sha256/file_spec.rb +1 -1
- data/spec/sha384/file_spec.rb +1 -1
- data/spec/sha512/file_spec.rb +1 -1
- data/spec/shared/file/read.rb +21 -0
- metadata +15 -5
- data/ext/rubysl/digest/bubblebabble/depend +0 -3
- data/ext/rubysl/digest/bubblebabble/extconf.h +0 -4
data/ext/rubysl/digest/digest.h
CHANGED
@@ -2,24 +2,25 @@
|
|
2
2
|
|
3
3
|
digest.h - header file for ruby digest modules
|
4
4
|
|
5
|
-
$Author
|
5
|
+
$Author$
|
6
6
|
created at: Fri May 25 08:54:56 JST 2001
|
7
7
|
|
8
8
|
|
9
9
|
Copyright (C) 2001-2006 Akinori MUSHA
|
10
10
|
|
11
11
|
$RoughId: digest.h,v 1.3 2001/07/13 15:38:27 knu Exp $
|
12
|
-
$Id
|
12
|
+
$Id$
|
13
13
|
|
14
14
|
************************************************/
|
15
15
|
|
16
16
|
#include "ruby.h"
|
17
|
+
#include "ruby/encoding.h"
|
17
18
|
|
18
|
-
#define RUBY_DIGEST_API_VERSION
|
19
|
+
#define RUBY_DIGEST_API_VERSION 3
|
19
20
|
|
20
|
-
typedef
|
21
|
+
typedef int (*rb_digest_hash_init_func_t)(void *);
|
21
22
|
typedef void (*rb_digest_hash_update_func_t)(void *, unsigned char *, size_t);
|
22
|
-
typedef
|
23
|
+
typedef int (*rb_digest_hash_finish_func_t)(void *, unsigned char *);
|
23
24
|
|
24
25
|
typedef struct {
|
25
26
|
int api_version;
|
@@ -30,3 +31,22 @@ typedef struct {
|
|
30
31
|
rb_digest_hash_update_func_t update_func;
|
31
32
|
rb_digest_hash_finish_func_t finish_func;
|
32
33
|
} rb_digest_metadata_t;
|
34
|
+
|
35
|
+
#define DEFINE_UPDATE_FUNC_FOR_UINT(name) \
|
36
|
+
void \
|
37
|
+
rb_digest_##name##_update(void *ctx, unsigned char *ptr, size_t size) \
|
38
|
+
{ \
|
39
|
+
const unsigned int stride = 16384; \
|
40
|
+
\
|
41
|
+
for (; size > stride; size -= stride, ptr += stride) { \
|
42
|
+
name##_Update(ctx, ptr, stride); \
|
43
|
+
} \
|
44
|
+
if (size > 0) name##_Update(ctx, ptr, size); \
|
45
|
+
}
|
46
|
+
|
47
|
+
#define DEFINE_FINISH_FUNC_FROM_FINAL(name) \
|
48
|
+
int \
|
49
|
+
rb_digest_##name##_finish(void *ctx, unsigned char *ptr) \
|
50
|
+
{ \
|
51
|
+
return name##_Final(ptr, ctx); \
|
52
|
+
}
|
@@ -0,0 +1,28 @@
|
|
1
|
+
def digest_conf(name, hdr = name, funcs = nil)
|
2
|
+
unless with_config("bundled-#{name}")
|
3
|
+
cc = with_config("common-digest")
|
4
|
+
if cc == true or /\b#{name}\b/ =~ cc
|
5
|
+
if File.exist?("#$srcdir/#{name}cc.h") and
|
6
|
+
have_header("CommonCrypto/CommonDigest.h")
|
7
|
+
$defs << "-D#{name.upcase}_USE_COMMONDIGEST"
|
8
|
+
return :commondigest
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
dir_config("openssl")
|
13
|
+
pkg_config("openssl")
|
14
|
+
require File.expand_path('../../openssl/deprecation', __FILE__)
|
15
|
+
if have_library("crypto")
|
16
|
+
funcs ||= name.upcase
|
17
|
+
funcs = Array(funcs)
|
18
|
+
hdr = "openssl/#{hdr}.h"
|
19
|
+
if funcs.all? {|func| OpenSSL.check_func("#{func}_Transform", hdr)} &&
|
20
|
+
funcs.all? {|func| have_type("#{func}_CTX", hdr)}
|
21
|
+
$defs << "-D#{name.upcase}_USE_OPENSSL"
|
22
|
+
return :ossl
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
$objs << "#{name}.#{$OBJEXT}"
|
27
|
+
return
|
28
|
+
end
|
@@ -1,29 +1,19 @@
|
|
1
|
+
# -*- coding: us-ascii -*-
|
1
2
|
# $RoughId: extconf.rb,v 1.3 2001/08/14 19:54:51 knu Exp $
|
2
3
|
# $Id$
|
3
4
|
|
4
5
|
require "mkmf"
|
6
|
+
require File.expand_path("../../digest_conf", __FILE__)
|
5
7
|
|
6
8
|
$defs << "-DHAVE_CONFIG_H"
|
7
9
|
$INCFLAGS << " -I$(srcdir)/.."
|
8
10
|
|
9
11
|
$objs = [ "md5init.#{$OBJEXT}" ]
|
10
12
|
|
11
|
-
|
12
|
-
|
13
|
-
if !with_config("bundled-md5") &&
|
14
|
-
have_library("crypto") && have_header("openssl/md5.h")
|
15
|
-
$objs << "md5ossl.#{$OBJEXT}"
|
16
|
-
|
17
|
-
else
|
18
|
-
$objs << "md5.#{$OBJEXT}"
|
19
|
-
end
|
13
|
+
digest_conf("md5")
|
20
14
|
|
21
15
|
have_header("sys/cdefs.h")
|
22
16
|
|
23
|
-
have_header("inttypes.h")
|
24
|
-
|
25
|
-
have_header("unistd.h")
|
26
|
-
|
27
17
|
$preload = %w[digest]
|
28
18
|
|
29
19
|
create_makefile("digest/md5/md5")
|
data/ext/rubysl/digest/md5/md5.c
CHANGED
@@ -49,10 +49,9 @@
|
|
49
49
|
|
50
50
|
/*$OrigId: md5c.c,v 1.2 2001/03/26 08:57:14 matz Exp $ */
|
51
51
|
/*$RoughId: md5.c,v 1.2 2001/07/13 19:48:41 knu Exp $ */
|
52
|
-
/*$Id
|
52
|
+
/*$Id$ */
|
53
53
|
|
54
54
|
#include "md5.h"
|
55
|
-
#include <string.h>
|
56
55
|
|
57
56
|
#ifdef TEST
|
58
57
|
/*
|
@@ -60,8 +59,9 @@
|
|
60
59
|
* The test program should print out the same values as given in section
|
61
60
|
* A.5 of RFC 1321, reproduced below.
|
62
61
|
*/
|
62
|
+
#include <string.h>
|
63
63
|
int
|
64
|
-
main()
|
64
|
+
main(void)
|
65
65
|
{
|
66
66
|
static const char *const test[7*2] = {
|
67
67
|
"", "d41d8cd98f00b204e9800998ecf8427e",
|
@@ -102,7 +102,7 @@ main()
|
|
102
102
|
#ifdef COMPUTE_T_VALUES
|
103
103
|
#include <math.h>
|
104
104
|
int
|
105
|
-
main()
|
105
|
+
main(void)
|
106
106
|
{
|
107
107
|
int i;
|
108
108
|
for (i = 1; i <= 64; ++i) {
|
@@ -350,7 +350,7 @@ md5_process(MD5_CTX *pms, const uint8_t *data /*[64]*/)
|
|
350
350
|
pms->state[3] += d;
|
351
351
|
}
|
352
352
|
|
353
|
-
|
353
|
+
int
|
354
354
|
MD5_Init(MD5_CTX *pms)
|
355
355
|
{
|
356
356
|
pms->count[0] = pms->count[1] = 0;
|
@@ -358,6 +358,7 @@ MD5_Init(MD5_CTX *pms)
|
|
358
358
|
pms->state[1] = /*0xefcdab89*/ T_MASK ^ 0x10325476;
|
359
359
|
pms->state[2] = /*0x98badcfe*/ T_MASK ^ 0x67452301;
|
360
360
|
pms->state[3] = 0x10325476;
|
361
|
+
return 1;
|
361
362
|
}
|
362
363
|
|
363
364
|
void
|
@@ -368,7 +369,7 @@ MD5_Update(MD5_CTX *pms, const uint8_t *data, size_t nbytes)
|
|
368
369
|
size_t offset = (pms->count[0] >> 3) & 63;
|
369
370
|
uint32_t nbits = (uint32_t)(nbytes << 3);
|
370
371
|
|
371
|
-
if (nbytes
|
372
|
+
if (nbytes == 0)
|
372
373
|
return;
|
373
374
|
|
374
375
|
/* Update the message length. */
|
@@ -398,7 +399,7 @@ MD5_Update(MD5_CTX *pms, const uint8_t *data, size_t nbytes)
|
|
398
399
|
memcpy(pms->buffer, p, left);
|
399
400
|
}
|
400
401
|
|
401
|
-
|
402
|
+
int
|
402
403
|
MD5_Finish(MD5_CTX *pms, uint8_t *digest)
|
403
404
|
{
|
404
405
|
static const uint8_t pad[64] = {
|
@@ -419,4 +420,5 @@ MD5_Finish(MD5_CTX *pms, uint8_t *digest)
|
|
419
420
|
MD5_Update(pms, data, 8);
|
420
421
|
for (i = 0; i < 16; ++i)
|
421
422
|
digest[i] = (uint8_t)(pms->state[i >> 2] >> ((i & 3) << 3));
|
423
|
+
return 1;
|
422
424
|
}
|
data/ext/rubysl/digest/md5/md5.h
CHANGED
@@ -41,7 +41,7 @@
|
|
41
41
|
|
42
42
|
/* $OrigId: md5.h,v 1.2 2001/03/26 08:57:14 matz Exp $ */
|
43
43
|
/* $RoughId: md5.h,v 1.3 2002/02/24 08:14:31 knu Exp $ */
|
44
|
-
/* $Id
|
44
|
+
/* $Id$ */
|
45
45
|
|
46
46
|
#ifndef MD5_INCLUDED
|
47
47
|
# define MD5_INCLUDED
|
@@ -69,9 +69,9 @@ typedef struct md5_state_s {
|
|
69
69
|
#define MD5_Finish rb_Digest_MD5_Finish
|
70
70
|
#endif
|
71
71
|
|
72
|
-
|
72
|
+
int MD5_Init _((MD5_CTX *pms));
|
73
73
|
void MD5_Update _((MD5_CTX *pms, const uint8_t *data, size_t nbytes));
|
74
|
-
|
74
|
+
int MD5_Finish _((MD5_CTX *pms, uint8_t *digest));
|
75
75
|
|
76
76
|
#define MD5_BLOCK_LENGTH 64
|
77
77
|
#define MD5_DIGEST_LENGTH 16
|
@@ -0,0 +1,12 @@
|
|
1
|
+
#define COMMON_DIGEST_FOR_OPENSSL 1
|
2
|
+
#include <CommonCrypto/CommonDigest.h>
|
3
|
+
|
4
|
+
#define MD5_BLOCK_LENGTH CC_MD5_BLOCK_BYTES
|
5
|
+
|
6
|
+
static DEFINE_UPDATE_FUNC_FOR_UINT(MD5);
|
7
|
+
static DEFINE_FINISH_FUNC_FROM_FINAL(MD5);
|
8
|
+
|
9
|
+
#undef MD5_Update
|
10
|
+
#undef MD5_Finish
|
11
|
+
#define MD5_Update rb_digest_MD5_update
|
12
|
+
#define MD5_Finish rb_digest_MD5_finish
|
@@ -1,9 +1,11 @@
|
|
1
1
|
/* $RoughId: md5init.c,v 1.2 2001/07/13 19:49:10 knu Exp $ */
|
2
|
-
/* $Id
|
2
|
+
/* $Id$ */
|
3
3
|
|
4
4
|
#include "digest.h"
|
5
|
-
#if defined(
|
5
|
+
#if defined(MD5_USE_OPENSSL)
|
6
6
|
#include "md5ossl.h"
|
7
|
+
#elif defined(MD5_USE_COMMONDIGEST)
|
8
|
+
#include "md5cc.h"
|
7
9
|
#else
|
8
10
|
#include "md5.h"
|
9
11
|
#endif
|
@@ -24,15 +26,20 @@ static const rb_digest_metadata_t md5 = {
|
|
24
26
|
* RFC1321.
|
25
27
|
*/
|
26
28
|
void
|
27
|
-
Init_md5()
|
29
|
+
Init_md5(void)
|
28
30
|
{
|
29
31
|
VALUE mDigest, cDigest_Base, cDigest_MD5;
|
30
32
|
|
33
|
+
#if 0
|
34
|
+
mDigest = rb_define_module("Digest"); /* let rdoc know */
|
35
|
+
#endif
|
31
36
|
mDigest = rb_path2class("Digest");
|
32
37
|
cDigest_Base = rb_path2class("Digest::Base");
|
33
38
|
|
34
39
|
cDigest_MD5 = rb_define_class_under(mDigest, "MD5", cDigest_Base);
|
35
40
|
|
36
|
-
|
37
|
-
|
41
|
+
#undef RUBY_UNTYPED_DATA_WARNING
|
42
|
+
#define RUBY_UNTYPED_DATA_WARNING 0
|
43
|
+
rb_iv_set(cDigest_MD5, "metadata",
|
44
|
+
Data_Wrap_Struct(0, 0, 0, (void *)&md5));
|
38
45
|
}
|
@@ -1,4 +1,4 @@
|
|
1
|
-
/* $Id
|
1
|
+
/* $Id$ */
|
2
2
|
|
3
3
|
#ifndef MD5OSSL_H_INCLUDED
|
4
4
|
#define MD5OSSL_H_INCLUDED
|
@@ -8,6 +8,8 @@
|
|
8
8
|
|
9
9
|
#define MD5_BLOCK_LENGTH MD5_CBLOCK
|
10
10
|
|
11
|
-
|
11
|
+
static DEFINE_FINISH_FUNC_FROM_FINAL(MD5);
|
12
|
+
#undef MD5_Finish
|
13
|
+
#define MD5_Finish rb_digest_MD5_finish
|
12
14
|
|
13
15
|
#endif
|
@@ -1,28 +1,19 @@
|
|
1
|
+
# -*- coding: us-ascii -*-
|
1
2
|
# $RoughId: extconf.rb,v 1.3 2001/08/14 19:54:51 knu Exp $
|
2
3
|
# $Id$
|
3
4
|
|
4
5
|
require "mkmf"
|
6
|
+
require File.expand_path("../../digest_conf", __FILE__)
|
5
7
|
|
6
8
|
$defs << "-DNDEBUG" << "-DHAVE_CONFIG_H"
|
7
9
|
$INCFLAGS << " -I$(srcdir)/.."
|
8
10
|
|
9
11
|
$objs = [ "rmd160init.#{$OBJEXT}" ]
|
10
12
|
|
11
|
-
|
12
|
-
|
13
|
-
if !with_config("bundled-rmd160") &&
|
14
|
-
have_library("crypto") && have_header("openssl/ripemd.h")
|
15
|
-
$objs << "rmd160ossl.#{$OBJEXT}"
|
16
|
-
else
|
17
|
-
$objs << "rmd160.#{$OBJEXT}"
|
18
|
-
end
|
13
|
+
digest_conf("rmd160", "ripemd", "RIPEMD160")
|
19
14
|
|
20
15
|
have_header("sys/cdefs.h")
|
21
16
|
|
22
|
-
have_header("inttypes.h")
|
23
|
-
|
24
|
-
have_header("unistd.h")
|
25
|
-
|
26
17
|
$preload = %w[digest]
|
27
18
|
|
28
19
|
create_makefile("digest/rmd160/rmd160")
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/* $NetBSD: rmd160.c,v 1.1.1.1 2001/03/06 11:21:05 agc Exp $ */
|
2
2
|
/* $RoughId: rmd160.c,v 1.2 2001/07/13 19:49:10 knu Exp $ */
|
3
|
-
/* $Id
|
3
|
+
/* $Id$ */
|
4
4
|
|
5
5
|
/********************************************************************\
|
6
6
|
*
|
@@ -124,7 +124,7 @@
|
|
124
124
|
|
125
125
|
/********************************************************************/
|
126
126
|
|
127
|
-
|
127
|
+
int
|
128
128
|
RMD160_Init(RMD160_CTX *context)
|
129
129
|
{
|
130
130
|
|
@@ -138,6 +138,7 @@ RMD160_Init(RMD160_CTX *context)
|
|
138
138
|
context->state[4] = 0xc3d2e1f0U;
|
139
139
|
context->length[0] = context->length[1] = 0;
|
140
140
|
context->buflen = 0;
|
141
|
+
return 1;
|
141
142
|
}
|
142
143
|
|
143
144
|
/********************************************************************/
|
@@ -362,16 +363,20 @@ RMD160_Update(RMD160_CTX *context, const uint8_t *data, size_t nbytes)
|
|
362
363
|
_DIAGASSERT(data != NULL);
|
363
364
|
|
364
365
|
/* update length[] */
|
366
|
+
#if SIZEOF_SIZE_T * CHAR_BIT > 32
|
367
|
+
context->length[1] += (uint32_t)((context->length[0] + nbytes) >> 32);
|
368
|
+
#else
|
365
369
|
if (context->length[0] + nbytes < context->length[0])
|
366
370
|
context->length[1]++; /* overflow to msb of length */
|
367
|
-
|
371
|
+
#endif
|
372
|
+
context->length[0] += (uint32_t)nbytes;
|
368
373
|
|
369
374
|
(void)memset(X, 0, sizeof(X));
|
370
375
|
|
371
376
|
if ( context->buflen + nbytes < 64 )
|
372
377
|
{
|
373
378
|
(void)memcpy(context->bbuffer + context->buflen, data, nbytes);
|
374
|
-
context->buflen += nbytes;
|
379
|
+
context->buflen += (uint32_t)nbytes;
|
375
380
|
}
|
376
381
|
else
|
377
382
|
{
|
@@ -401,14 +406,14 @@ RMD160_Update(RMD160_CTX *context, const uint8_t *data, size_t nbytes)
|
|
401
406
|
/*
|
402
407
|
* Put last bytes from data into context's buffer
|
403
408
|
*/
|
404
|
-
context->buflen = nbytes & 63;
|
409
|
+
context->buflen = (uint32_t)nbytes & 63;
|
405
410
|
memcpy(context->bbuffer, data + (64 * i) + ofs, context->buflen);
|
406
411
|
}
|
407
412
|
}
|
408
413
|
|
409
414
|
/********************************************************************/
|
410
415
|
|
411
|
-
|
416
|
+
int
|
412
417
|
RMD160_Finish(RMD160_CTX *context, uint8_t digest[20])
|
413
418
|
{
|
414
419
|
uint32_t i;
|
@@ -452,6 +457,7 @@ RMD160_Finish(RMD160_CTX *context, uint8_t digest[20])
|
|
452
457
|
digest[i + 3] = (context->state[i>>2] >> 24);
|
453
458
|
}
|
454
459
|
}
|
460
|
+
return 1;
|
455
461
|
}
|
456
462
|
|
457
463
|
/************************ end of file rmd160.c **********************/
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/* $NetBSD: rmd160.h,v 1.2 2000/07/07 10:47:06 ad Exp $ */
|
2
2
|
/* $RoughId: rmd160.h,v 1.3 2002/02/24 08:14:31 knu Exp $ */
|
3
|
-
/* $Id
|
3
|
+
/* $Id$ */
|
4
4
|
|
5
5
|
/********************************************************************\
|
6
6
|
*
|
@@ -43,10 +43,10 @@ typedef struct {
|
|
43
43
|
#endif
|
44
44
|
|
45
45
|
__BEGIN_DECLS
|
46
|
-
|
46
|
+
int RMD160_Init _((RMD160_CTX *));
|
47
47
|
void RMD160_Transform _((uint32_t[5], const uint32_t[16]));
|
48
48
|
void RMD160_Update _((RMD160_CTX *, const uint8_t *, size_t));
|
49
|
-
|
49
|
+
int RMD160_Finish _((RMD160_CTX *, uint8_t[20]));
|
50
50
|
__END_DECLS
|
51
51
|
|
52
52
|
#define RMD160_BLOCK_LENGTH 64
|
@@ -1,8 +1,8 @@
|
|
1
1
|
/* $RoughId: rmd160init.c,v 1.3 2001/07/13 20:00:43 knu Exp $ */
|
2
|
-
/* $Id
|
2
|
+
/* $Id$ */
|
3
3
|
|
4
4
|
#include "digest.h"
|
5
|
-
#if defined(
|
5
|
+
#if defined(RMD160_USE_OPENSSL)
|
6
6
|
#include "rmd160ossl.h"
|
7
7
|
#else
|
8
8
|
#include "rmd160.h"
|
@@ -24,15 +24,20 @@ static const rb_digest_metadata_t rmd160 = {
|
|
24
24
|
* Bosselaers, and Bart Preneel.
|
25
25
|
*/
|
26
26
|
void
|
27
|
-
Init_rmd160()
|
27
|
+
Init_rmd160(void)
|
28
28
|
{
|
29
29
|
VALUE mDigest, cDigest_Base, cDigest_RMD160;
|
30
30
|
|
31
|
+
#if 0
|
32
|
+
mDigest = rb_define_module("Digest"); /* let rdoc know */
|
33
|
+
#endif
|
31
34
|
mDigest = rb_path2class("Digest");
|
32
35
|
cDigest_Base = rb_path2class("Digest::Base");
|
33
36
|
|
34
37
|
cDigest_RMD160 = rb_define_class_under(mDigest, "RMD160", cDigest_Base);
|
35
38
|
|
36
|
-
|
37
|
-
|
39
|
+
#undef RUBY_UNTYPED_DATA_WARNING
|
40
|
+
#define RUBY_UNTYPED_DATA_WARNING 0
|
41
|
+
rb_iv_set(cDigest_RMD160, "metadata",
|
42
|
+
Data_Wrap_Struct(0, 0, 0, (void *)&rmd160));
|
38
43
|
}
|