Digest :: SHA2.hexdigest()在哪里定义?

rya*_*ogo 1 ruby ruby-on-rails sha digest

我正在阅读Agile Web Development with Rails一书中的教程,我发现了以下代码:

def User.encrypt_password(password, salt) 
  Digest::SHA2.hexdigest(password + "wibble" + salt)
end
Run Code Online (Sandbox Code Playgroud)

然而,查看Digest源代码(digest.rb以及在我的ruby安装中digest/sha2.rblib目录内),我似乎无法找到hexdigest定义方法的位置,但代码似乎工作得很好.

有人可以告诉我这是怎么发生的吗?我假设我需要寻找一个看起来像某样的代码:

def hexdigest(...)
   ...
end
Run Code Online (Sandbox Code Playgroud)

Per*_*mal 8

hexdigest部分和其他几个类似的方法被写为速度的C扩展.它出现ext/digest/在Ruby源代码中.

static VALUE rb_digest_instance_hexdigest(int argc, VALUE *argv, VALUE self)ext/digest/digest.c在我的Ruby 1.9.2-p0源代码的第216行定义.它只是调用了许多其他函数,但它至少可能是一个起点.

对于SHA2,还有另一个ext/digest/sha2/sha2.c包含这些功能.digest.c只是基础,被其他人"扩展"