Module: Puppet::Util::Checksums
Overview
A stand-alone module for calculating checksums in a generic way.
Defined Under Namespace
Classes: DigestLite, FakeChecksum
Constant Summary
collapse
- KNOWN_CHECKSUMS =
[
:sha256, :sha256lite,
:md5, :md5lite,
:sha1, :sha1lite,
:sha512,
:sha384,
:sha224,
:mtime, :ctime, :none
].freeze
Class Method Summary
collapse
-
.checksum?(string) ⇒ Boolean
Is the provided string a checksum?.
-
.checksum_file(digest, filename, lite = false) ⇒ Object
Perform an incremental checksum on a file.
-
.checksum_stream(digest, block, lite = false) ⇒ Object
-
.ctime(content) ⇒ Object
-
.ctime?(string) ⇒ Boolean
-
.ctime_file(filename) ⇒ Object
Return the :ctime of a file.
-
.ctime_stream(&block) ⇒ Object
-
.known_checksum_types ⇒ Object
It’s not a good idea to use some of these in some contexts: for example, I wouldn’t try bucketing a file using the :none checksum type.
-
.md5(content) ⇒ Object
Calculate a checksum using Digest::MD5.
-
.md5?(string) ⇒ Boolean
-
.md5_file(filename, lite = false) ⇒ Object
Calculate a checksum of a file’s content using Digest::MD5.
-
.md5_hex_length ⇒ Object
-
.md5_stream(lite = false, &block) ⇒ Object
-
.md5lite(content) ⇒ Object
Calculate a checksum of the first 500 chars of the content using Digest::MD5.
-
.md5lite?(string) ⇒ Boolean
-
.md5lite_file(filename) ⇒ Object
Calculate a checksum of the first 500 chars of a file’s content using Digest::MD5.
-
.md5lite_hex_length ⇒ Object
-
.md5lite_stream(&block) ⇒ Object
-
.mtime(content) ⇒ Object
-
.mtime?(string) ⇒ Boolean
-
.mtime_file(filename) ⇒ Object
Return the :mtime timestamp of a file.
-
.mtime_stream {|noop_digest| ... } ⇒ Object
by definition this doesn’t exist but we still need to execute the block given.
-
.none(content) ⇒ Object
-
.none?(string) ⇒ Boolean
-
.none_file(filename) ⇒ Object
-
.none_stream {|noop_digest| ... } ⇒ Object
-
.sha1(content) ⇒ Object
Calculate a checksum using Digest::SHA1.
-
.sha1?(string) ⇒ Boolean
-
.sha1_file(filename, lite = false) ⇒ Object
Calculate a checksum of a file’s content using Digest::SHA1.
-
.sha1_hex_length ⇒ Object
-
.sha1_stream(lite = false, &block) ⇒ Object
-
.sha1lite(content) ⇒ Object
Calculate a checksum of the first 500 chars of the content using Digest::SHA1.
-
.sha1lite?(string) ⇒ Boolean
-
.sha1lite_file(filename) ⇒ Object
Calculate a checksum of the first 500 chars of a file’s content using Digest::SHA1.
-
.sha1lite_hex_length ⇒ Object
-
.sha1lite_stream(&block) ⇒ Object
-
.sha224(content) ⇒ Object
Calculate a checksum using Digest::SHA224.
-
.sha224?(string) ⇒ Boolean
-
.sha224_file(filename, lite = false) ⇒ Object
-
.sha224_hex_length ⇒ Object
-
.sha224_stream(lite = false, &block) ⇒ Object
-
.sha256(content) ⇒ Object
Calculate a checksum using Digest::SHA256.
-
.sha256?(string) ⇒ Boolean
-
.sha256_file(filename, lite = false) ⇒ Object
-
.sha256_hex_length ⇒ Object
-
.sha256_stream(lite = false, &block) ⇒ Object
-
.sha256lite(content) ⇒ Object
-
.sha256lite?(string) ⇒ Boolean
-
.sha256lite_file(filename) ⇒ Object
-
.sha256lite_hex_length ⇒ Object
-
.sha256lite_stream(&block) ⇒ Object
-
.sha384(content) ⇒ Object
Calculate a checksum using Digest::SHA384.
-
.sha384?(string) ⇒ Boolean
-
.sha384_file(filename, lite = false) ⇒ Object
-
.sha384_hex_length ⇒ Object
-
.sha384_stream(lite = false, &block) ⇒ Object
-
.sha512(content) ⇒ Object
Calculate a checksum using Digest::SHA512.
-
.sha512?(string) ⇒ Boolean
-
.sha512_file(filename, lite = false) ⇒ Object
-
.sha512_hex_length ⇒ Object
-
.sha512_stream(lite = false, &block) ⇒ Object
-
.sumdata(checksum) ⇒ Object
Strip the checksum type from an existing checksum.
-
.sumtype(checksum) ⇒ Object
Strip the checksum type from an existing checksum.
-
.valid_checksum?(type, value) ⇒ Boolean
Class Method Details
.checksum?(string) ⇒ Boolean
Is the provided string a checksum?
41
42
43
44
|
# File 'lib/puppet/util/checksums.rb', line 41
def checksum?(string)
string =~ /^\{(\w{3,10})\}\S+/
end
|
.checksum_file(digest, filename, lite = false) ⇒ Object
Perform an incremental checksum on a file.
363
364
365
366
367
368
369
370
371
372
373
|
# File 'lib/puppet/util/checksums.rb', line 363
def checksum_file(digest, filename, lite = false)
buffer = lite ? 512 : 4096
File.open(filename, 'rb') do |file|
while content = file.read(buffer) digest << content
break if lite
end
end
digest.hexdigest
end
|
.checksum_stream(digest, block, lite = false) ⇒ Object
375
376
377
378
|
# File 'lib/puppet/util/checksums.rb', line 375
def checksum_stream(digest, block, lite = false)
block.call(DigestLite.new(digest, lite))
digest.hexdigest
end
|
.ctime(content) ⇒ Object
301
302
303
|
# File 'lib/puppet/util/checksums.rb', line 301
def ctime(content)
""
end
|
.ctime?(string) ⇒ Boolean
305
306
307
308
309
310
311
|
# File 'lib/puppet/util/checksums.rb', line 305
def ctime?(string)
return true if string.is_a? Time
!!DateTime.parse(string)
rescue
false
end
|
.ctime_file(filename) ⇒ Object
Return the :ctime of a file.
314
315
316
|
# File 'lib/puppet/util/checksums.rb', line 314
def ctime_file(filename)
Puppet::FileSystem.stat(filename).ctime
end
|
.ctime_stream(&block) ⇒ Object
318
319
320
|
# File 'lib/puppet/util/checksums.rb', line 318
def ctime_stream(&block)
mtime_stream(&block)
end
|
.known_checksum_types ⇒ Object
It’s not a good idea to use some of these in some contexts: for example, I wouldn’t try bucketing a file using the :none checksum type.
24
25
26
|
# File 'lib/puppet/util/checksums.rb', line 24
def known_checksum_types
KNOWN_CHECKSUMS
end
|
.md5(content) ⇒ Object
Calculate a checksum using Digest::MD5.
185
186
187
|
# File 'lib/puppet/util/checksums.rb', line 185
def md5(content)
Digest::MD5.hexdigest(content)
end
|
.md5?(string) ⇒ Boolean
189
190
191
|
# File 'lib/puppet/util/checksums.rb', line 189
def md5?(string)
string =~ /^\h{32}$/
end
|
.md5_file(filename, lite = false) ⇒ Object
Calculate a checksum of a file’s content using Digest::MD5.
194
195
196
197
|
# File 'lib/puppet/util/checksums.rb', line 194
def md5_file(filename, lite = false)
digest = Digest::MD5.new
checksum_file(digest, filename, lite)
end
|
.md5_hex_length ⇒ Object
204
205
206
|
# File 'lib/puppet/util/checksums.rb', line 204
def md5_hex_length
32
end
|
.md5_stream(lite = false, &block) ⇒ Object
199
200
201
202
|
# File 'lib/puppet/util/checksums.rb', line 199
def md5_stream(lite = false, &block)
digest = Digest::MD5.new
checksum_stream(digest, block, lite)
end
|
.md5lite(content) ⇒ Object
Calculate a checksum of the first 500 chars of the content using Digest::MD5.
209
210
211
|
# File 'lib/puppet/util/checksums.rb', line 209
def md5lite(content)
md5(content[0..511])
end
|
.md5lite?(string) ⇒ Boolean
213
214
215
|
# File 'lib/puppet/util/checksums.rb', line 213
def md5lite?(string)
md5?(string)
end
|
.md5lite_file(filename) ⇒ Object
Calculate a checksum of the first 500 chars of a file’s content using Digest::MD5.
218
219
220
|
# File 'lib/puppet/util/checksums.rb', line 218
def md5lite_file(filename)
md5_file(filename, true)
end
|
.md5lite_hex_length ⇒ Object
226
227
228
|
# File 'lib/puppet/util/checksums.rb', line 226
def md5lite_hex_length
md5_hex_length
end
|
.md5lite_stream(&block) ⇒ Object
222
223
224
|
# File 'lib/puppet/util/checksums.rb', line 222
def md5lite_stream(&block)
md5_stream(true, &block)
end
|
.mtime(content) ⇒ Object
230
231
232
|
# File 'lib/puppet/util/checksums.rb', line 230
def mtime(content)
""
end
|
.mtime?(string) ⇒ Boolean
234
235
236
237
238
239
240
|
# File 'lib/puppet/util/checksums.rb', line 234
def mtime?(string)
return true if string.is_a? Time
!!DateTime.parse(string)
rescue
false
end
|
.mtime_file(filename) ⇒ Object
Return the :mtime timestamp of a file.
243
244
245
|
# File 'lib/puppet/util/checksums.rb', line 243
def mtime_file(filename)
Puppet::FileSystem.stat(filename).mtime
end
|
.mtime_stream {|noop_digest| ... } ⇒ Object
by definition this doesn’t exist but we still need to execute the block given
249
250
251
252
253
|
# File 'lib/puppet/util/checksums.rb', line 249
def mtime_stream(&block)
noop_digest = FakeChecksum.new
yield noop_digest
nil
end
|
.none(content) ⇒ Object
322
323
324
|
# File 'lib/puppet/util/checksums.rb', line 322
def none(content)
""
end
|
.none?(string) ⇒ Boolean
326
327
328
|
# File 'lib/puppet/util/checksums.rb', line 326
def none?(string)
string.empty?
end
|
.none_file(filename) ⇒ Object
331
332
333
|
# File 'lib/puppet/util/checksums.rb', line 331
def none_file(filename)
""
end
|
.none_stream {|noop_digest| ... } ⇒ Object
335
336
337
338
339
|
# File 'lib/puppet/util/checksums.rb', line 335
def none_stream
noop_digest = FakeChecksum.new
yield noop_digest
""
end
|
.sha1(content) ⇒ Object
Calculate a checksum using Digest::SHA1.
256
257
258
|
# File 'lib/puppet/util/checksums.rb', line 256
def sha1(content)
Digest::SHA1.hexdigest(content)
end
|
.sha1?(string) ⇒ Boolean
260
261
262
|
# File 'lib/puppet/util/checksums.rb', line 260
def sha1?(string)
string =~ /^\h{40}$/
end
|
.sha1_file(filename, lite = false) ⇒ Object
Calculate a checksum of a file’s content using Digest::SHA1.
265
266
267
268
|
# File 'lib/puppet/util/checksums.rb', line 265
def sha1_file(filename, lite = false)
digest = Digest::SHA1.new
checksum_file(digest, filename, lite)
end
|
.sha1_hex_length ⇒ Object
275
276
277
|
# File 'lib/puppet/util/checksums.rb', line 275
def sha1_hex_length
40
end
|
.sha1_stream(lite = false, &block) ⇒ Object
270
271
272
273
|
# File 'lib/puppet/util/checksums.rb', line 270
def sha1_stream(lite = false, &block)
digest = Digest::SHA1.new
checksum_stream(digest, block, lite)
end
|
.sha1lite(content) ⇒ Object
Calculate a checksum of the first 500 chars of the content using Digest::SHA1.
280
281
282
|
# File 'lib/puppet/util/checksums.rb', line 280
def sha1lite(content)
sha1(content[0..511])
end
|
.sha1lite?(string) ⇒ Boolean
284
285
286
|
# File 'lib/puppet/util/checksums.rb', line 284
def sha1lite?(string)
sha1?(string)
end
|
.sha1lite_file(filename) ⇒ Object
Calculate a checksum of the first 500 chars of a file’s content using Digest::SHA1.
289
290
291
|
# File 'lib/puppet/util/checksums.rb', line 289
def sha1lite_file(filename)
sha1_file(filename, true)
end
|
.sha1lite_hex_length ⇒ Object
297
298
299
|
# File 'lib/puppet/util/checksums.rb', line 297
def sha1lite_hex_length
sha1_hex_length
end
|
.sha1lite_stream(&block) ⇒ Object
293
294
295
|
# File 'lib/puppet/util/checksums.rb', line 293
def sha1lite_stream(&block)
sha1_stream(true, &block)
end
|
.sha224(content) ⇒ Object
Calculate a checksum using Digest::SHA224.
158
159
160
161
|
# File 'lib/puppet/util/checksums.rb', line 158
def sha224(content)
require_relative '../../puppet/ssl/openssl_loader'
OpenSSL::Digest.new('SHA224').hexdigest(content)
end
|
.sha224?(string) ⇒ Boolean
163
164
165
|
# File 'lib/puppet/util/checksums.rb', line 163
def sha224?(string)
string =~ /^\h{56}$/
end
|
.sha224_file(filename, lite = false) ⇒ Object
167
168
169
170
171
172
|
# File 'lib/puppet/util/checksums.rb', line 167
def sha224_file(filename, lite = false)
require_relative '../../puppet/ssl/openssl_loader'
digest = OpenSSL::Digest.new('SHA224')
checksum_file(digest, filename, lite)
end
|
.sha224_hex_length ⇒ Object
180
181
182
|
# File 'lib/puppet/util/checksums.rb', line 180
def sha224_hex_length
56
end
|
.sha224_stream(lite = false, &block) ⇒ Object
174
175
176
177
178
|
# File 'lib/puppet/util/checksums.rb', line 174
def sha224_stream(lite = false, &block)
require_relative '../../puppet/ssl/openssl_loader'
digest = OpenSSL::Digest.new('SHA224')
checksum_stream(digest, block, lite)
end
|
.sha256(content) ⇒ Object
Calculate a checksum using Digest::SHA256.
57
58
59
60
|
# File 'lib/puppet/util/checksums.rb', line 57
def sha256(content)
require 'digest/sha2'
Digest::SHA256.hexdigest(content)
end
|
.sha256?(string) ⇒ Boolean
62
63
64
|
# File 'lib/puppet/util/checksums.rb', line 62
def sha256?(string)
string =~ /^\h{64}$/
end
|
.sha256_file(filename, lite = false) ⇒ Object
66
67
68
69
70
71
|
# File 'lib/puppet/util/checksums.rb', line 66
def sha256_file(filename, lite = false)
require 'digest/sha2'
digest = Digest::SHA256.new
checksum_file(digest, filename, lite)
end
|
.sha256_hex_length ⇒ Object
79
80
81
|
# File 'lib/puppet/util/checksums.rb', line 79
def sha256_hex_length
64
end
|
.sha256_stream(lite = false, &block) ⇒ Object
73
74
75
76
77
|
# File 'lib/puppet/util/checksums.rb', line 73
def sha256_stream(lite = false, &block)
require 'digest/sha2'
digest = Digest::SHA256.new
checksum_stream(digest, block, lite)
end
|
.sha256lite(content) ⇒ Object
83
84
85
|
# File 'lib/puppet/util/checksums.rb', line 83
def sha256lite(content)
sha256(content[0..511])
end
|
.sha256lite?(string) ⇒ Boolean
87
88
89
|
# File 'lib/puppet/util/checksums.rb', line 87
def sha256lite?(string)
sha256?(string)
end
|
.sha256lite_file(filename) ⇒ Object
91
92
93
|
# File 'lib/puppet/util/checksums.rb', line 91
def sha256lite_file(filename)
sha256_file(filename, true)
end
|
.sha256lite_hex_length ⇒ Object
99
100
101
|
# File 'lib/puppet/util/checksums.rb', line 99
def sha256lite_hex_length
sha256_hex_length
end
|
.sha256lite_stream(&block) ⇒ Object
95
96
97
|
# File 'lib/puppet/util/checksums.rb', line 95
def sha256lite_stream(&block)
sha256_stream(true, &block)
end
|
.sha384(content) ⇒ Object
Calculate a checksum using Digest::SHA384.
104
105
106
107
|
# File 'lib/puppet/util/checksums.rb', line 104
def sha384(content)
require 'digest/sha2'
Digest::SHA384.hexdigest(content)
end
|
.sha384?(string) ⇒ Boolean
109
110
111
|
# File 'lib/puppet/util/checksums.rb', line 109
def sha384?(string)
string =~ /^\h{96}$/
end
|
.sha384_file(filename, lite = false) ⇒ Object
113
114
115
116
117
118
|
# File 'lib/puppet/util/checksums.rb', line 113
def sha384_file(filename, lite = false)
require 'digest/sha2'
digest = Digest::SHA384.new
checksum_file(digest, filename, lite)
end
|
.sha384_hex_length ⇒ Object
126
127
128
|
# File 'lib/puppet/util/checksums.rb', line 126
def sha384_hex_length
96
end
|
.sha384_stream(lite = false, &block) ⇒ Object
120
121
122
123
124
|
# File 'lib/puppet/util/checksums.rb', line 120
def sha384_stream(lite = false, &block)
require 'digest/sha2'
digest = Digest::SHA384.new
checksum_stream(digest, block, lite)
end
|
.sha512(content) ⇒ Object
Calculate a checksum using Digest::SHA512.
131
132
133
134
|
# File 'lib/puppet/util/checksums.rb', line 131
def sha512(content)
require 'digest/sha2'
Digest::SHA512.hexdigest(content)
end
|
.sha512?(string) ⇒ Boolean
136
137
138
|
# File 'lib/puppet/util/checksums.rb', line 136
def sha512?(string)
string =~ /^\h{128}$/
end
|
.sha512_file(filename, lite = false) ⇒ Object
140
141
142
143
144
145
|
# File 'lib/puppet/util/checksums.rb', line 140
def sha512_file(filename, lite = false)
require 'digest/sha2'
digest = Digest::SHA512.new
checksum_file(digest, filename, lite)
end
|
.sha512_hex_length ⇒ Object
153
154
155
|
# File 'lib/puppet/util/checksums.rb', line 153
def sha512_hex_length
128
end
|
.sha512_stream(lite = false, &block) ⇒ Object
147
148
149
150
151
|
# File 'lib/puppet/util/checksums.rb', line 147
def sha512_stream(lite = false, &block)
require 'digest/sha2'
digest = Digest::SHA512.new
checksum_stream(digest, block, lite)
end
|
.sumdata(checksum) ⇒ Object
Strip the checksum type from an existing checksum
47
48
49
|
# File 'lib/puppet/util/checksums.rb', line 47
def sumdata(checksum)
checksum =~ /^\{(\w+)\}(.+)/ ? ::Regexp.last_match(2) : nil
end
|
.sumtype(checksum) ⇒ Object
Strip the checksum type from an existing checksum
52
53
54
|
# File 'lib/puppet/util/checksums.rb', line 52
def sumtype(checksum)
checksum =~ /^\{(\w+)\}/ ? ::Regexp.last_match(1) : nil
end
|
.valid_checksum?(type, value) ⇒ Boolean
28
29
30
31
32
|
# File 'lib/puppet/util/checksums.rb', line 28
def valid_checksum?(type, value)
!!send("#{type}?", value)
rescue NoMethodError
false
end
|