[DRE-maint] Bug#593082: about digest.rb
Hideki Yamane
henrich at debian.or.jp
Tue Dec 21 11:01:33 UTC 2010
Hi,
I've got updated digest.rb from upstream author, so it would be better
to use this. Please consider to apply to your package, thanks.
## -*- Ruby -*-
## DOMHASH test implementation
## 1999 by yoshidam
##
## Apr 20, 1999 Change for draft-hiroshi-dom-hash-01.txt
##
require 'xml/dom/core'
require 'digest/md5'
module XML
module DOM
def self.tou16(str)
if defined?(::Encoding)
str.encode(::Encoding::UTF_16BE).force_encoding(::Encoding::ASCII_8BIT)
else
str.unpack("U*").map {|v|
if v >= 0x10000 && v <= 0x10ffff
## surrogate pair
hi = ((v - 0x10000) >> 10) | 0xd800
low = (v & 1023) | 0xdc00
[hi, low].pack("n*")
else
[v].pack("n*")
end
}.join
end
end
class Node
def getDigest(algorithm = Digest::MD5, force = false)
nil
end
end
class Text
def getDigest(algorithm = Digest::MD5, force = false)
(!force && @digest) ||
@digest = algorithm.digest([TEXT_NODE].pack("N") + DOM.tou16(nodeValue))
@digest
end
end
## class Comment
## def getDigest(algorithm = Digest::MD5, force = false)
## (!force && @digest) ||
## @digest = algorithm.digest([COMMENT_NODE].pack("N") + DOM.tou16(data)).digest
## end
## end
class ProcessingInstruction
def getDigest(algorithm = Digest::MD5, force = false)
(!force && @digest) ||
@digest = algorithm.digest([PROCESSING_INSTRUCTION_NODE].pack("N") +
DOM.tou16(target) + "\0\0" + DOM.tou16(data))
end
end
class Attr
def getDigest(algorithm = Digest::MD5, force = false)
(!force && @digest) ||
@digest = algorithm.digest([ATTRIBUTE_NODE].pack("N") +
DOM.tou16(nodeName) + "\0\0" + DOM.tou16(nodeValue))
end
end
class NamedNodeMap
include Enumerable
end
class NodeList
include Enumerable
end
class Element
def getDigest(algorithm = Digest::MD5, force = false)
return @digest if (!force && @digest)
attr = attributes
children = childNodes
attr_digests = ""
children_digests = ""
if attr
attr_array = attr.sort {|a, b|
DOM.tou16(a.nodeName) <=> DOM.tou16(b.nodeName)}
attr_array.each {|a|
attr_digests << a.getDigest(algorithm, force)
}
end
children_num = 0
children.each {|c|
next if c.nodeType == COMMENT_NODE
children_num += 1
children_digests << c.getDigest(algorithm, force)
}
@digest = algorithm.digest([ELEMENT_NODE].pack("N") +
DOM.tou16(nodeName) +
"\0\0" +
[attr.length].pack("N") +
attr_digests +
[children_num].pack("N") +
children_digests)
end
end
end
end
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: not available
URL: <http://lists.alioth.debian.org/pipermail/pkg-ruby-extras-maintainers/attachments/20101221/80374d18/attachment-0001.pgp>
More information about the Pkg-ruby-extras-maintainers
mailing list