Class: OpenSSL::Digest::Digest
- Inherits:
-
Object
- Object
- OpenSSL::Digest::Digest
- Defined in:
- ossl_digest.c
Class Method Summary collapse
Instance Method Summary collapse
- #==(other) ⇒ Object
- #digest ⇒ Object
- #hexdigest ⇒ Object (also: #inspect, #to_s)
- #initialize(*args) ⇒ Object constructor
- #name ⇒ Object
- #reset ⇒ Object
- #size ⇒ Object
- #update(data) ⇒ Object (also: #<<)
Constructor Details
#initialize(*args) ⇒ Object
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
# File 'ossl_digest.c', line 80 static VALUE ossl_digest_initialize(int argc, VALUE *argv, VALUE self) { EVP_MD_CTX *ctx; const EVP_MD *md; char *name; VALUE type, data; rb_scan_args(argc, argv, "11", &type, &data); StringValue(type); if (!NIL_P(data)) StringValue(data); name = StringValuePtr(type); md = EVP_get_digestbyname(name); if (!md) { ossl_raise(rb_eRuntimeError, "Unsupported digest algorithm (%s).", name); } GetDigest(self, ctx); EVP_DigestInit_ex(ctx, md, NULL); if (!NIL_P(data)) return ossl_digest_update(self, data); return self; } |
Class Method Details
.digest(str, data) ⇒ Object
195 196 197 198 199 200 201 202 203 |
# File 'ossl_digest.c', line 195 static VALUE ossl_digest_s_digest(VALUE klass, VALUE str, VALUE data) { VALUE obj = rb_class_new_instance(1, &str, klass); ossl_digest_update(obj, data); return ossl_digest_digest(obj); } |
.hexdigest(str, data) ⇒ Object
205 206 207 208 209 210 211 212 213 |
# File 'ossl_digest.c', line 205 static VALUE ossl_digest_s_hexdigest(VALUE klass, VALUE str, VALUE data) { VALUE obj = rb_class_new_instance(1, &str, klass); ossl_digest_update(obj, data); return ossl_digest_hexdigest(obj); } |
Instance Method Details
#==(other) ⇒ Object
215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 |
# File 'ossl_digest.c', line 215 static VALUE ossl_digest_equal(VALUE self, VALUE other) { EVP_MD_CTX *ctx; VALUE str1, str2; if (rb_obj_is_kind_of(other, cDigest) == Qtrue) { str2 = ossl_digest_digest(other); } else { StringValue(other); str2 = other; } GetDigest(self, ctx); if (RSTRING(str2)->len == EVP_MD_CTX_size(ctx)) { str1 = ossl_digest_digest(self); } else { str1 = ossl_digest_hexdigest(self); } if (RSTRING(str1)->len == RSTRING(str2)->len && rb_str_cmp(str1, str2) == 0) { return Qtrue; } return Qfalse; } |
#digest ⇒ Object
160 161 162 163 164 165 166 167 168 169 170 171 172 173 |
# File 'ossl_digest.c', line 160 static VALUE ossl_digest_digest(VALUE self) { EVP_MD_CTX *ctx; char *buf; int buf_len; VALUE digest; GetDigest(self, ctx); digest_final(ctx, &buf, &buf_len); digest = ossl_buf2str(buf, buf_len); return digest; } |
#hexdigest ⇒ Object Also known as: inspect, to_s
175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 |
# File 'ossl_digest.c', line 175 static VALUE ossl_digest_hexdigest(VALUE self) { EVP_MD_CTX *ctx; char *buf, *hexbuf; int buf_len; VALUE hexdigest; GetDigest(self, ctx); digest_final(ctx, &buf, &buf_len); if (string2hex(buf, buf_len, &hexbuf, NULL) != 2 * buf_len) { OPENSSL_free(buf); ossl_raise(eDigestError, "Memory alloc error"); } OPENSSL_free(buf); hexdigest = ossl_buf2str(hexbuf, 2 * buf_len); return hexdigest; } |
#name ⇒ Object
241 242 243 244 245 246 247 248 249 |
# File 'ossl_digest.c', line 241 static VALUE ossl_digest_name(VALUE self) { EVP_MD_CTX *ctx; GetDigest(self, ctx); return rb_str_new2(EVP_MD_name(EVP_MD_CTX_md(ctx))); } |
#reset ⇒ Object
121 122 123 124 125 126 127 128 129 130 |
# File 'ossl_digest.c', line 121 static VALUE ossl_digest_reset(VALUE self) { EVP_MD_CTX *ctx; GetDigest(self, ctx); EVP_DigestInit_ex(ctx, EVP_MD_CTX_md(ctx), NULL); return self; } |
#size ⇒ Object
251 252 253 254 255 256 257 258 259 |
# File 'ossl_digest.c', line 251 static VALUE ossl_digest_size(VALUE self) { EVP_MD_CTX *ctx; GetDigest(self, ctx); return INT2NUM(EVP_MD_CTX_size(ctx)); } |
#update(data) ⇒ Object Also known as: <<
132 133 134 135 136 137 138 139 140 141 142 |
# File 'ossl_digest.c', line 132 VALUE ossl_digest_update(VALUE self, VALUE data) { EVP_MD_CTX *ctx; StringValue(data); GetDigest(self, ctx); EVP_DigestUpdate(ctx, RSTRING(data)->ptr, RSTRING(data)->len); return self; } |