ext/rubysl/openssl/ossl_hmac.c in rubysl-openssl-1.0.2 vs ext/rubysl/openssl/ossl_hmac.c in rubysl-openssl-2.0.0
- old
+ new
@@ -1,7 +1,7 @@
/*
- * $Id: ossl_hmac.c 28004 2010-05-24 23:58:49Z shyouhei $
+ * $Id$
* 'OpenSSL for Ruby' project
* Copyright (C) 2001-2002 Michal Rokos <m.rokos@sh.cvut.cz>
* All rights reserved.
*/
/*
@@ -11,20 +11,20 @@
#if !defined(OPENSSL_NO_HMAC)
#include "ossl.h"
#define MakeHMAC(obj, klass, ctx) \
- obj = Data_Make_Struct(klass, HMAC_CTX, 0, ossl_hmac_free, ctx)
+ (obj) = Data_Make_Struct((klass), HMAC_CTX, 0, ossl_hmac_free, (ctx))
#define GetHMAC(obj, ctx) do { \
- Data_Get_Struct(obj, HMAC_CTX, ctx); \
- if (!ctx) { \
+ Data_Get_Struct((obj), HMAC_CTX, (ctx)); \
+ if (!(ctx)) { \
ossl_raise(rb_eRuntimeError, "HMAC wasn't initialized"); \
} \
} while (0)
#define SafeGetHMAC(obj, ctx) do { \
- OSSL_Check_Kind(obj, cHMAC); \
- GetHMAC(obj, ctx); \
+ OSSL_Check_Kind((obj), cHMAC); \
+ GetHMAC((obj), (ctx)); \
} while (0)
/*
* Classes
*/
@@ -51,11 +51,11 @@
HMAC_CTX *ctx;
VALUE obj;
MakeHMAC(obj, klass, ctx);
HMAC_CTX_init(ctx);
-
+
return obj;
}
/*
@@ -68,21 +68,21 @@
{
HMAC_CTX *ctx;
StringValue(key);
GetHMAC(self, ctx);
- HMAC_Init_ex(ctx, RSTRING_PTR(key), RSTRING_LEN(key),
- GetDigestPtr(digest), NULL);
+ HMAC_Init(ctx, RSTRING_PTR(key), RSTRING_LENINT(key),
+ GetDigestPtr(digest));
return self;
}
static VALUE
ossl_hmac_copy(VALUE self, VALUE other)
{
HMAC_CTX *ctx1, *ctx2;
-
+
rb_check_frozen(self);
if (self == other) return self;
GetHMAC(self, ctx1);
SafeGetHMAC(other, ctx2);
@@ -101,17 +101,17 @@
{
HMAC_CTX *ctx;
StringValue(data);
GetHMAC(self, ctx);
- HMAC_Update(ctx, RSTRING_PTR(data), RSTRING_LEN(data));
+ HMAC_Update(ctx, (unsigned char *)RSTRING_PTR(data), RSTRING_LEN(data));
return self;
}
static void
-hmac_final(HMAC_CTX *ctx, char **buf, int *buf_len)
+hmac_final(HMAC_CTX *ctx, unsigned char **buf, unsigned int *buf_len)
{
HMAC_CTX final;
HMAC_CTX_copy(&final, ctx);
if (!(*buf = OPENSSL_malloc(HMAC_size(&final)))) {
@@ -130,18 +130,18 @@
*/
static VALUE
ossl_hmac_digest(VALUE self)
{
HMAC_CTX *ctx;
- char *buf;
- int buf_len;
+ unsigned char *buf;
+ unsigned int buf_len;
VALUE digest;
-
+
GetHMAC(self, ctx);
hmac_final(ctx, &buf, &buf_len);
- digest = ossl_buf2str(buf, buf_len);
-
+ digest = ossl_buf2str((char *)buf, buf_len);
+
return digest;
}
/*
* call-seq:
@@ -150,17 +150,18 @@
*/
static VALUE
ossl_hmac_hexdigest(VALUE self)
{
HMAC_CTX *ctx;
- char *buf, *hexbuf;
- int buf_len;
+ unsigned char *buf;
+ char *hexbuf;
+ unsigned int buf_len;
VALUE hexdigest;
-
+
GetHMAC(self, ctx);
hmac_final(ctx, &buf, &buf_len);
- if (string2hex(buf, buf_len, &hexbuf, NULL) != 2 * buf_len) {
+ if (string2hex(buf, buf_len, &hexbuf, NULL) != 2 * (int)buf_len) {
OPENSSL_free(buf);
ossl_raise(eHMACError, "Memory alloc error");
}
OPENSSL_free(buf);
hexdigest = ossl_buf2str(hexbuf, 2 * buf_len);
@@ -177,11 +178,11 @@
ossl_hmac_reset(VALUE self)
{
HMAC_CTX *ctx;
GetHMAC(self, ctx);
- HMAC_Init_ex(ctx, NULL, 0, NULL, NULL);
+ HMAC_Init(ctx, NULL, 0, NULL);
return self;
}
/*
@@ -190,39 +191,40 @@
*
*/
static VALUE
ossl_hmac_s_digest(VALUE klass, VALUE digest, VALUE key, VALUE data)
{
- char *buf;
- int buf_len;
-
+ unsigned char *buf;
+ unsigned int buf_len;
+
StringValue(key);
StringValue(data);
- buf = HMAC(GetDigestPtr(digest), RSTRING_PTR(key), RSTRING_LEN(key),
- RSTRING_PTR(data), RSTRING_LEN(data), NULL, &buf_len);
+ buf = HMAC(GetDigestPtr(digest), RSTRING_PTR(key), RSTRING_LENINT(key),
+ (unsigned char *)RSTRING_PTR(data), RSTRING_LEN(data), NULL, &buf_len);
- return rb_str_new(buf, buf_len);
+ return rb_str_new((const char *)buf, buf_len);
}
/*
* call-seq:
* HMAC.digest(digest, key, data) -> aString
*
*/
static VALUE
ossl_hmac_s_hexdigest(VALUE klass, VALUE digest, VALUE key, VALUE data)
{
- char *buf, *hexbuf;
- int buf_len;
+ unsigned char *buf;
+ char *hexbuf;
+ unsigned int buf_len;
VALUE hexdigest;
StringValue(key);
StringValue(data);
-
- buf = HMAC(GetDigestPtr(digest), RSTRING_PTR(key), RSTRING_LEN(key),
- RSTRING_PTR(data), RSTRING_LEN(data), NULL, &buf_len);
- if (string2hex(buf, buf_len, &hexbuf, NULL) != 2 * buf_len) {
+
+ buf = HMAC(GetDigestPtr(digest), RSTRING_PTR(key), RSTRING_LENINT(key),
+ (unsigned char *)RSTRING_PTR(data), RSTRING_LEN(data), NULL, &buf_len);
+ if (string2hex(buf, buf_len, &hexbuf, NULL) != 2 * (int)buf_len) {
ossl_raise(eHMACError, "Cannot convert buf to hexbuf");
}
hexdigest = ossl_buf2str(hexbuf, 2 * buf_len);
return hexdigest;
@@ -232,21 +234,21 @@
* INIT
*/
void
Init_ossl_hmac()
{
-#if 0 /* let rdoc know about mOSSL */
- mOSSL = rb_define_module("OpenSSL");
+#if 0
+ mOSSL = rb_define_module("OpenSSL"); /* let rdoc know about mOSSL */
#endif
eHMACError = rb_define_class_under(mOSSL, "HMACError", eOSSLError);
-
+
cHMAC = rb_define_class_under(mOSSL, "HMAC", rb_cObject);
rb_define_alloc_func(cHMAC, ossl_hmac_alloc);
rb_define_singleton_method(cHMAC, "digest", ossl_hmac_s_digest, 3);
rb_define_singleton_method(cHMAC, "hexdigest", ossl_hmac_s_hexdigest, 3);
-
+
rb_define_method(cHMAC, "initialize", ossl_hmac_initialize, 2);
rb_define_copy_func(cHMAC, ossl_hmac_copy);
rb_define_method(cHMAC, "reset", ossl_hmac_reset, 0);
rb_define_method(cHMAC, "update", ossl_hmac_update, 1);