Class: Object
- Inherits:
- BasicObject
- Defined in:
- lib/decentworks/hexdigest_support/object.rb,
sig/decentworks/hexdigest_support/object.rbs
Instance Method Summary collapse
-
#to_hexdigest_input ⇒ ::String
ハッシュ値化の入力(型 + 値).
-
#to_hexdigest_source ⇒ ::String
ハッシュ値を求めるためのオリジナルの値.
-
#to_hexdigest_type ⇒ ::String
ハッシュ値化に用いる型の識別子.
-
#to_md5_hexdigest ⇒ ::String
(also: #to_md_hexdigest)
MD5でハッシュ値化(16進数).
-
#to_rmd160_hexdigest ⇒ ::String
(also: #to_rmd_hexdigest)
RMD160でハッシュ値化(16進数).
-
#to_salted_hexdigest_input ⇒ ::String
ソルトを前置したハッシュ値化の入力.
-
#to_sha1_hexdigest ⇒ ::String
SHA1でハッシュ値化(16進数).
-
#to_sha256_hexdigest ⇒ ::String
(also: #to_sha_hexdigest)
SHA256でハッシュ値化(16進数).
-
#to_sha384_hexdigest ⇒ ::String
SHA384でハッシュ値化(16進数).
-
#to_sha512_hexdigest ⇒ ::String
SHA512でハッシュ値化(16進数).
Instance Method Details
#to_hexdigest_input ⇒ ::String
ハッシュ値化の入力(型 + 値)
MEMO: #to_hexdigest_sourceは値を文字列へ射影するだけなので単射にならない。 型を添えないと :a と "a"、1 と "1" が同じ入力になり、内容の異なる オブジェクト同士が同じダイジェストになってしまう
MEMO: 引用・エスケープと決定性の検査はHexdigestSupport側へ切り出している。 #inspectに任せると実行環境のロケールで出力が変わるため (詳細はinput.rbのMEMOを参照)
MEMO: 検査を#to_hexdigest_sourceではなく本メソッドで行うのは、ここが すべての値が通る唯一の経路であるため。オーバーライドされた #to_hexdigest_sourceが返した値も同じように検査される
MEMO: 循環参照の検出も同じ理由でここに置く。要素を辿るのは各型の #to_hexdigest_sourceだが、その入り口は必ず本メソッドを通るため、 独自クラス同士が参照しあう循環も検出できる
63 64 65 66 67 68 |
# File 'lib/decentworks/hexdigest_support/object.rb', line 63 def to_hexdigest_input source = ::Decentworks::HexdigestSupport.detect_circular_reference(self) { to_hexdigest_source } ::Decentworks::HexdigestSupport.validate_source!(source, self) "#{to_hexdigest_type}:#{::Decentworks::HexdigestSupport.quote(source)}" end |
#to_hexdigest_source ⇒ ::String
ハッシュ値を求めるためのオリジナルの値
MEMO: #to_s以外で値を指定する場合は、本メソッドをオーバーライドすること。 型の識別は#to_hexdigest_inputが担うため、オーバーライド側で 型を意識する必要はない
MEMO: #to_sも本メソッドも実装していないオブジェクトは、既定のObject#to_sが 返すオブジェクトIDが値になってしまう。#to_hexdigest_inputで検査して 例外にしているため、そのままダイジェストになることはない
90 |
# File 'lib/decentworks/hexdigest_support/object.rb', line 90 def to_hexdigest_source = to_s |
#to_hexdigest_type ⇒ ::String
ハッシュ値化に用いる型の識別子
MEMO: 無名クラスは#nameがnilのため、名前を持つ祖先クラスまで遡る。 #ancestorsではなく#superclassを辿るのは、無名クラスがincludeしている モジュール名を型として拾ってしまうのを避けるため
75 76 77 78 79 |
# File 'lib/decentworks/hexdigest_support/object.rb', line 75 def to_hexdigest_type klass = self.class klass = klass.superclass until klass.name klass.name end |
#to_md5_hexdigest ⇒ ::String Also known as: to_md_hexdigest
MD5でハッシュ値化(16進数)
10 |
# File 'lib/decentworks/hexdigest_support/object.rb', line 10 def to_md5_hexdigest = ::Digest::MD5.hexdigest(to_salted_hexdigest_input) |
#to_rmd160_hexdigest ⇒ ::String Also known as: to_rmd_hexdigest
RMD160でハッシュ値化(16進数)
13 |
# File 'lib/decentworks/hexdigest_support/object.rb', line 13 def to_rmd160_hexdigest = ::Digest::RMD160.hexdigest(to_salted_hexdigest_input) |
#to_salted_hexdigest_input ⇒ ::String
ソルトを前置したハッシュ値化の入力
MEMO: ソルトはダイジェストを求める直前に一度だけ前置する。#to_hexdigest_inputに 含めてしまうと、配列やハッシュの要素ごとに再帰的にソルトが混入し、 構造によってソルトの出現回数が変わってしまう
44 |
# File 'lib/decentworks/hexdigest_support/object.rb', line 44 def to_salted_hexdigest_input = "#{::Decentworks::HexdigestSupport.salt}#{to_hexdigest_input}" |
#to_sha1_hexdigest ⇒ ::String
SHA1でハッシュ値化(16進数)
16 |
# File 'lib/decentworks/hexdigest_support/object.rb', line 16 def to_sha1_hexdigest = ::Digest::SHA1.hexdigest(to_salted_hexdigest_input) |
#to_sha256_hexdigest ⇒ ::String Also known as: to_sha_hexdigest
SHA256でハッシュ値化(16進数)
19 |
# File 'lib/decentworks/hexdigest_support/object.rb', line 19 def to_sha256_hexdigest = ::Digest::SHA256.hexdigest(to_salted_hexdigest_input) |
#to_sha384_hexdigest ⇒ ::String
SHA384でハッシュ値化(16進数)
22 |
# File 'lib/decentworks/hexdigest_support/object.rb', line 22 def to_sha384_hexdigest = ::Digest::SHA384.hexdigest(to_salted_hexdigest_input) |
#to_sha512_hexdigest ⇒ ::String
SHA512でハッシュ値化(16進数)
25 |
# File 'lib/decentworks/hexdigest_support/object.rb', line 25 def to_sha512_hexdigest = ::Digest::SHA512.hexdigest(to_salted_hexdigest_input) |