openssl: typed data
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47799 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
1e46f02394
commit
163cb5b43d
@ -15,11 +15,11 @@
|
|||||||
if (!(bn)) { \
|
if (!(bn)) { \
|
||||||
ossl_raise(rb_eRuntimeError, "BN wasn't initialized!"); \
|
ossl_raise(rb_eRuntimeError, "BN wasn't initialized!"); \
|
||||||
} \
|
} \
|
||||||
(obj) = Data_Wrap_Struct((klass), 0, BN_clear_free, (bn)); \
|
(obj) = TypedData_Wrap_Struct((klass), &ossl_bn_type, (bn)); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define GetBN(obj, bn) do { \
|
#define GetBN(obj, bn) do { \
|
||||||
Data_Get_Struct((obj), BIGNUM, (bn)); \
|
TypedData_Get_Struct((obj), BIGNUM, &ossl_bn_type, (bn)); \
|
||||||
if (!(bn)) { \
|
if (!(bn)) { \
|
||||||
ossl_raise(rb_eRuntimeError, "BN wasn't initialized!"); \
|
ossl_raise(rb_eRuntimeError, "BN wasn't initialized!"); \
|
||||||
} \
|
} \
|
||||||
@ -30,6 +30,25 @@
|
|||||||
GetBN((obj), (bn)); \
|
GetBN((obj), (bn)); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
static void
|
||||||
|
ossl_bn_free(void *ptr)
|
||||||
|
{
|
||||||
|
BN_clear_free(ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
static size_t
|
||||||
|
ossl_bn_size(const void *ptr)
|
||||||
|
{
|
||||||
|
return sizeof(BIGNUM);
|
||||||
|
}
|
||||||
|
|
||||||
|
static const rb_data_type_t ossl_bn_type = {
|
||||||
|
"OpenSSL/BN",
|
||||||
|
{0, ossl_bn_free, ossl_bn_size,},
|
||||||
|
NULL, NULL,
|
||||||
|
RUBY_TYPED_FREE_IMMEDIATELY,
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Classes
|
* Classes
|
||||||
*/
|
*/
|
||||||
|
@ -11,13 +11,13 @@
|
|||||||
#include "ossl.h"
|
#include "ossl.h"
|
||||||
|
|
||||||
#define WrapCipher(obj, klass, ctx) \
|
#define WrapCipher(obj, klass, ctx) \
|
||||||
(obj) = Data_Wrap_Struct((klass), 0, ossl_cipher_free, (ctx))
|
(obj) = TypedData_Wrap_Struct((klass), &ossl_cipher_type, (ctx))
|
||||||
#define MakeCipher(obj, klass, ctx) \
|
#define MakeCipher(obj, klass, ctx) \
|
||||||
(obj) = Data_Make_Struct((klass), EVP_CIPHER_CTX, 0, ossl_cipher_free, (ctx))
|
(obj) = TypedData_Make_Struct((klass), EVP_CIPHER_CTX, &ossl_cipher_type, (ctx))
|
||||||
#define AllocCipher(obj, ctx) \
|
#define AllocCipher(obj, ctx) \
|
||||||
memset(DATA_PTR(obj) = (ctx) = ALLOC(EVP_CIPHER_CTX), 0, sizeof(EVP_CIPHER_CTX))
|
(DATA_PTR(obj) = (ctx) = ZALLOC(EVP_CIPHER_CTX))
|
||||||
#define GetCipherInit(obj, ctx) do { \
|
#define GetCipherInit(obj, ctx) do { \
|
||||||
Data_Get_Struct((obj), EVP_CIPHER_CTX, (ctx)); \
|
TypedData_Get_Struct((obj), EVP_CIPHER_CTX, &ossl_cipher_type, (ctx)); \
|
||||||
} while (0)
|
} while (0)
|
||||||
#define GetCipher(obj, ctx) do { \
|
#define GetCipher(obj, ctx) do { \
|
||||||
GetCipherInit((obj), (ctx)); \
|
GetCipherInit((obj), (ctx)); \
|
||||||
@ -37,6 +37,15 @@ VALUE cCipher;
|
|||||||
VALUE eCipherError;
|
VALUE eCipherError;
|
||||||
|
|
||||||
static VALUE ossl_cipher_alloc(VALUE klass);
|
static VALUE ossl_cipher_alloc(VALUE klass);
|
||||||
|
static void ossl_cipher_free(void *ptr);
|
||||||
|
static size_t ossl_cipher_memsize(const void *ptr);
|
||||||
|
|
||||||
|
static const rb_data_type_t ossl_cipher_type = {
|
||||||
|
"OpenSSL/Cipher",
|
||||||
|
{0, ossl_cipher_free, ossl_cipher_memsize,},
|
||||||
|
NULL, NULL,
|
||||||
|
RUBY_TYPED_FREE_IMMEDIATELY,
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* PUBLIC
|
* PUBLIC
|
||||||
@ -70,14 +79,22 @@ ossl_cipher_new(const EVP_CIPHER *cipher)
|
|||||||
* PRIVATE
|
* PRIVATE
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
ossl_cipher_free(EVP_CIPHER_CTX *ctx)
|
ossl_cipher_free(void *ptr)
|
||||||
{
|
{
|
||||||
|
EVP_CIPHER_CTX *ctx = ptr;
|
||||||
if (ctx) {
|
if (ctx) {
|
||||||
EVP_CIPHER_CTX_cleanup(ctx);
|
EVP_CIPHER_CTX_cleanup(ctx);
|
||||||
ruby_xfree(ctx);
|
ruby_xfree(ctx);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static size_t
|
||||||
|
ossl_cipher_memsize(const void *ptr)
|
||||||
|
{
|
||||||
|
const EVP_CIPHER_CTX *ctx = ptr;
|
||||||
|
return ctx ? sizeof(*ctx) : 0;
|
||||||
|
}
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
ossl_cipher_alloc(VALUE klass)
|
ossl_cipher_alloc(VALUE klass)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user