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 =
If you modify this, update puppet/type/file/checksum.rb too
[ :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?
42 43 44 45 | # File 'lib/puppet/util/checksums.rb', line 42 def checksum?(string) string =~ /^\{(\w{3,10})\}\S+/ end |
.checksum_file(digest, filename, lite = false) ⇒ Object
Perform an incremental checksum on a file.
364 365 366 367 368 369 370 371 372 373 374 | # File 'lib/puppet/util/checksums.rb', line 364 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
376 377 378 379 | # File 'lib/puppet/util/checksums.rb', line 376 def checksum_stream(digest, block, lite = false) block.call(DigestLite.new(digest, lite)) digest.hexdigest end |
.ctime(content) ⇒ Object
302 303 304 | # File 'lib/puppet/util/checksums.rb', line 302 def ctime(content) "" end |
.ctime?(string) ⇒ Boolean
306 307 308 309 310 311 312 | # File 'lib/puppet/util/checksums.rb', line 306 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.
315 316 317 | # File 'lib/puppet/util/checksums.rb', line 315 def ctime_file(filename) Puppet::FileSystem.stat(filename).ctime end |
.ctime_stream(&block) ⇒ Object
319 320 321 | # File 'lib/puppet/util/checksums.rb', line 319 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.
25 26 27 | # File 'lib/puppet/util/checksums.rb', line 25 def known_checksum_types KNOWN_CHECKSUMS end |
.md5(content) ⇒ Object
Calculate a checksum using Digest::MD5.
186 187 188 | # File 'lib/puppet/util/checksums.rb', line 186 def md5(content) Digest::MD5.hexdigest(content) end |
.md5?(string) ⇒ Boolean
190 191 192 | # File 'lib/puppet/util/checksums.rb', line 190 def md5?(string) string =~ /^\h{32}$/ end |
.md5_file(filename, lite = false) ⇒ Object
Calculate a checksum of a file’s content using Digest::MD5.
195 196 197 198 | # File 'lib/puppet/util/checksums.rb', line 195 def md5_file(filename, lite = false) digest = Digest::MD5.new checksum_file(digest, filename, lite) end |
.md5_hex_length ⇒ Object
205 206 207 | # File 'lib/puppet/util/checksums.rb', line 205 def md5_hex_length 32 end |
.md5_stream(lite = false, &block) ⇒ Object
200 201 202 203 | # File 'lib/puppet/util/checksums.rb', line 200 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.
210 211 212 | # File 'lib/puppet/util/checksums.rb', line 210 def md5lite(content) md5(content[0..511]) end |
.md5lite?(string) ⇒ Boolean
214 215 216 | # File 'lib/puppet/util/checksums.rb', line 214 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.
219 220 221 | # File 'lib/puppet/util/checksums.rb', line 219 def md5lite_file(filename) md5_file(filename, true) end |
.md5lite_hex_length ⇒ Object
227 228 229 | # File 'lib/puppet/util/checksums.rb', line 227 def md5lite_hex_length md5_hex_length end |
.md5lite_stream(&block) ⇒ Object
223 224 225 | # File 'lib/puppet/util/checksums.rb', line 223 def md5lite_stream(&block) md5_stream(true, &block) end |
.mtime(content) ⇒ Object
231 232 233 | # File 'lib/puppet/util/checksums.rb', line 231 def mtime(content) "" end |
.mtime?(string) ⇒ Boolean
235 236 237 238 239 240 241 | # File 'lib/puppet/util/checksums.rb', line 235 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.
244 245 246 | # File 'lib/puppet/util/checksums.rb', line 244 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
250 251 252 253 254 | # File 'lib/puppet/util/checksums.rb', line 250 def mtime_stream(&block) noop_digest = FakeChecksum.new yield noop_digest nil end |
.none(content) ⇒ Object
323 324 325 | # File 'lib/puppet/util/checksums.rb', line 323 def none(content) "" end |
.none?(string) ⇒ Boolean
327 328 329 | # File 'lib/puppet/util/checksums.rb', line 327 def none?(string) string.empty? end |
.none_file(filename) ⇒ Object
332 333 334 | # File 'lib/puppet/util/checksums.rb', line 332 def none_file(filename) "" end |
.none_stream {|noop_digest| ... } ⇒ Object
336 337 338 339 340 | # File 'lib/puppet/util/checksums.rb', line 336 def none_stream noop_digest = FakeChecksum.new yield noop_digest "" end |
.sha1(content) ⇒ Object
Calculate a checksum using Digest::SHA1.
257 258 259 | # File 'lib/puppet/util/checksums.rb', line 257 def sha1(content) Digest::SHA1.hexdigest(content) end |
.sha1?(string) ⇒ Boolean
261 262 263 | # File 'lib/puppet/util/checksums.rb', line 261 def sha1?(string) string =~ /^\h{40}$/ end |
.sha1_file(filename, lite = false) ⇒ Object
Calculate a checksum of a file’s content using Digest::SHA1.
266 267 268 269 | # File 'lib/puppet/util/checksums.rb', line 266 def sha1_file(filename, lite = false) digest = Digest::SHA1.new checksum_file(digest, filename, lite) end |
.sha1_hex_length ⇒ Object
276 277 278 | # File 'lib/puppet/util/checksums.rb', line 276 def sha1_hex_length 40 end |
.sha1_stream(lite = false, &block) ⇒ Object
271 272 273 274 | # File 'lib/puppet/util/checksums.rb', line 271 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.
281 282 283 | # File 'lib/puppet/util/checksums.rb', line 281 def sha1lite(content) sha1(content[0..511]) end |
.sha1lite?(string) ⇒ Boolean
285 286 287 | # File 'lib/puppet/util/checksums.rb', line 285 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.
290 291 292 | # File 'lib/puppet/util/checksums.rb', line 290 def sha1lite_file(filename) sha1_file(filename, true) end |
.sha1lite_hex_length ⇒ Object
298 299 300 | # File 'lib/puppet/util/checksums.rb', line 298 def sha1lite_hex_length sha1_hex_length end |
.sha1lite_stream(&block) ⇒ Object
294 295 296 | # File 'lib/puppet/util/checksums.rb', line 294 def sha1lite_stream(&block) sha1_stream(true, &block) end |
.sha224(content) ⇒ Object
Calculate a checksum using Digest::SHA224.
159 160 161 162 | # File 'lib/puppet/util/checksums.rb', line 159 def sha224(content) require_relative '../../puppet/ssl/openssl_loader' OpenSSL::Digest.new('SHA224').hexdigest(content) end |
.sha224?(string) ⇒ Boolean
164 165 166 | # File 'lib/puppet/util/checksums.rb', line 164 def sha224?(string) string =~ /^\h{56}$/ end |
.sha224_file(filename, lite = false) ⇒ Object
168 169 170 171 172 173 | # File 'lib/puppet/util/checksums.rb', line 168 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
181 182 183 | # File 'lib/puppet/util/checksums.rb', line 181 def sha224_hex_length 56 end |
.sha224_stream(lite = false, &block) ⇒ Object
175 176 177 178 179 | # File 'lib/puppet/util/checksums.rb', line 175 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.
58 59 60 61 | # File 'lib/puppet/util/checksums.rb', line 58 def sha256(content) require 'digest/sha2' Digest::SHA256.hexdigest(content) end |
.sha256?(string) ⇒ Boolean
63 64 65 | # File 'lib/puppet/util/checksums.rb', line 63 def sha256?(string) string =~ /^\h{64}$/ end |
.sha256_file(filename, lite = false) ⇒ Object
67 68 69 70 71 72 | # File 'lib/puppet/util/checksums.rb', line 67 def sha256_file(filename, lite = false) require 'digest/sha2' digest = Digest::SHA256.new checksum_file(digest, filename, lite) end |
.sha256_hex_length ⇒ Object
80 81 82 | # File 'lib/puppet/util/checksums.rb', line 80 def sha256_hex_length 64 end |
.sha256_stream(lite = false, &block) ⇒ Object
74 75 76 77 78 | # File 'lib/puppet/util/checksums.rb', line 74 def sha256_stream(lite = false, &block) require 'digest/sha2' digest = Digest::SHA256.new checksum_stream(digest, block, lite) end |
.sha256lite(content) ⇒ Object
84 85 86 | # File 'lib/puppet/util/checksums.rb', line 84 def sha256lite(content) sha256(content[0..511]) end |
.sha256lite?(string) ⇒ Boolean
88 89 90 | # File 'lib/puppet/util/checksums.rb', line 88 def sha256lite?(string) sha256?(string) end |
.sha256lite_file(filename) ⇒ Object
92 93 94 | # File 'lib/puppet/util/checksums.rb', line 92 def sha256lite_file(filename) sha256_file(filename, true) end |
.sha256lite_hex_length ⇒ Object
100 101 102 | # File 'lib/puppet/util/checksums.rb', line 100 def sha256lite_hex_length sha256_hex_length end |
.sha256lite_stream(&block) ⇒ Object
96 97 98 | # File 'lib/puppet/util/checksums.rb', line 96 def sha256lite_stream(&block) sha256_stream(true, &block) end |
.sha384(content) ⇒ Object
Calculate a checksum using Digest::SHA384.
105 106 107 108 | # File 'lib/puppet/util/checksums.rb', line 105 def sha384(content) require 'digest/sha2' Digest::SHA384.hexdigest(content) end |
.sha384?(string) ⇒ Boolean
110 111 112 | # File 'lib/puppet/util/checksums.rb', line 110 def sha384?(string) string =~ /^\h{96}$/ end |
.sha384_file(filename, lite = false) ⇒ Object
114 115 116 117 118 119 | # File 'lib/puppet/util/checksums.rb', line 114 def sha384_file(filename, lite = false) require 'digest/sha2' digest = Digest::SHA384.new checksum_file(digest, filename, lite) end |
.sha384_hex_length ⇒ Object
127 128 129 | # File 'lib/puppet/util/checksums.rb', line 127 def sha384_hex_length 96 end |
.sha384_stream(lite = false, &block) ⇒ Object
121 122 123 124 125 | # File 'lib/puppet/util/checksums.rb', line 121 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.
132 133 134 135 | # File 'lib/puppet/util/checksums.rb', line 132 def sha512(content) require 'digest/sha2' Digest::SHA512.hexdigest(content) end |
.sha512?(string) ⇒ Boolean
137 138 139 | # File 'lib/puppet/util/checksums.rb', line 137 def sha512?(string) string =~ /^\h{128}$/ end |
.sha512_file(filename, lite = false) ⇒ Object
141 142 143 144 145 146 | # File 'lib/puppet/util/checksums.rb', line 141 def sha512_file(filename, lite = false) require 'digest/sha2' digest = Digest::SHA512.new checksum_file(digest, filename, lite) end |
.sha512_hex_length ⇒ Object
154 155 156 | # File 'lib/puppet/util/checksums.rb', line 154 def sha512_hex_length 128 end |
.sha512_stream(lite = false, &block) ⇒ Object
148 149 150 151 152 | # File 'lib/puppet/util/checksums.rb', line 148 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
48 49 50 | # File 'lib/puppet/util/checksums.rb', line 48 def sumdata(checksum) checksum =~ /^\{(\w+)\}(.+)/ ? ::Regexp.last_match(2) : nil end |
.sumtype(checksum) ⇒ Object
Strip the checksum type from an existing checksum
53 54 55 | # File 'lib/puppet/util/checksums.rb', line 53 def sumtype(checksum) checksum =~ /^\{(\w+)\}/ ? ::Regexp.last_match(1) : nil end |
.valid_checksum?(type, value) ⇒ Boolean
29 30 31 32 33 | # File 'lib/puppet/util/checksums.rb', line 29 def valid_checksum?(type, value) !!send("#{type}?", value) rescue NoMethodError false end |