本文简要介绍ruby语言中 Digest::Base类 的用法。
这个抽象类为用 C 编写的消息摘要实现类提供了一个通用接口。
用 C 写一个 Digest 子类
Digest::Base 为用 C 编写的消息摘要类提供通用接口。这些类必须提供类型为 rb_digest_metadata_t 的结构:
typedef int (*rb_digest_hash_init_func_t)(void *);
typedef void (*rb_digest_hash_update_func_t)(void *, unsigned char *, size_t);
typedef int (*rb_digest_hash_finish_func_t)(void *, unsigned char *);
typedef struct {
int api_version;
size_t digest_len;
size_t block_len;
size_t ctx_size;
rb_digest_hash_init_func_t init_func;
rb_digest_hash_update_func_t update_func;
rb_digest_hash_finish_func_t finish_func;
} rb_digest_metadata_t;
此结构必须设置为名为metadata 的实例变量(名称前不带+@+)。举例:
static const rb_digest_metadata_t sha1 = {
RUBY_DIGEST_API_VERSION,
SHA1_DIGEST_LENGTH,
SHA1_BLOCK_LENGTH,
sizeof(SHA1_CTX),
(rb_digest_hash_init_func_t)SHA1_Init,
(rb_digest_hash_update_func_t)SHA1_Update,
(rb_digest_hash_finish_func_t)SHA1_Finish,
};
rb_ivar_set(cDigest_SHA1, rb_intern("metadata"),
Data_Wrap_Struct(0, 0, 0, (void *)&sha1));
相关用法
- Ruby Base64.encode64用法及代码示例
- Ruby Base64.decode64用法及代码示例
- Ruby Base64模块用法及代码示例
- Ruby BasicSocket.send用法及代码示例
- Ruby BasicObject.equal?用法及代码示例
- Ruby BasicSocket.remote_address用法及代码示例
- Ruby BasicSocket.recv用法及代码示例
- Ruby BasicObject.instance_eval用法及代码示例
- Ruby BasicSocket.do_not_reverse_lookup用法及代码示例
- Ruby BasicObject.obj ==用法及代码示例
- Ruby BasicSocket.do_not_reverse_lookup =用法及代码示例
- Ruby BasicSocket.connect_address用法及代码示例
- Ruby BasicObject.method_missing用法及代码示例
- Ruby BasicSocket.recv_nonblock用法及代码示例
- Ruby BasicSocket.recvmsg用法及代码示例
- Ruby BasicSocket.getsockopt用法及代码示例
- Ruby BasicObject.singleton_method_undefined用法及代码示例
- Ruby BasicObject.send用法及代码示例
- Ruby BasicSocket.getpeereid用法及代码示例
- Ruby BasicSocket.local_address用法及代码示例
- Ruby BasicSocket.shutdown用法及代码示例
- Ruby BasicObject类用法及代码示例
- Ruby BasicObject.instance_exec用法及代码示例
- Ruby BasicSocket.close_read用法及代码示例
- Ruby BasicSocket.getpeername用法及代码示例
注:本文由纯净天空筛选整理自ruby-lang.org大神的英文原创作品 Base类。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。
