Line | |
---|
1 | require 'digest.so'
|
---|
2 |
|
---|
3 | module Digest
|
---|
4 | def self.const_missing(name)
|
---|
5 | case name
|
---|
6 | when :SHA256, :SHA384, :SHA512
|
---|
7 | lib = 'digest/sha2.so'
|
---|
8 | else
|
---|
9 | lib = File.join('digest', name.to_s.downcase)
|
---|
10 | end
|
---|
11 |
|
---|
12 | begin
|
---|
13 | require lib
|
---|
14 | rescue LoadError => e
|
---|
15 | raise LoadError, "library not found for class Digest::#{name} -- #{lib}"
|
---|
16 | end
|
---|
17 |
|
---|
18 | Digest.const_get(name)
|
---|
19 | end
|
---|
20 |
|
---|
21 | class ::Digest::Class
|
---|
22 | # creates a digest object and reads a given file, _name_.
|
---|
23 | #
|
---|
24 | # p Digest::SHA256.file("X11R6.8.2-src.tar.bz2").hexdigest
|
---|
25 | # # => "f02e3c85572dc9ad7cb77c2a638e3be24cc1b5bea9fdbb0b0299c9668475c534"
|
---|
26 | def self.file(name)
|
---|
27 | new.file(name)
|
---|
28 | end
|
---|
29 | end
|
---|
30 |
|
---|
31 | module Instance
|
---|
32 | # updates the digest with the contents of a given file _name_ and
|
---|
33 | # returns self.
|
---|
34 | def file(name)
|
---|
35 | File.open(name, "rb") {|f|
|
---|
36 | buf = ""
|
---|
37 | while f.read(16384, buf)
|
---|
38 | update buf
|
---|
39 | end
|
---|
40 | }
|
---|
41 | self
|
---|
42 | end
|
---|
43 | end
|
---|
44 | end
|
---|
45 |
|
---|
46 | def Digest(name)
|
---|
47 | Digest.const_get(name)
|
---|
48 | end
|
---|
Note:
See
TracBrowser
for help on using the repository browser.