File: tc_tlsa.rb

package info (click to toggle)
dnsruby 1.61.5-3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 1,520 kB
  • sloc: ruby: 17,811; makefile: 3
file content (191 lines) | stat: -rw-r--r-- 10,964 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
require_relative 'spec_helper'

require 'openssl'
require 'digest'

class TLSATest < Minitest::Test
  include Dnsruby

  INPUT = ['_443._tcp.example.jp. IN TLSA 3 0 1 ( 6609173804b9e31895f550db027ef7c7fa6f1bc9326c99371b61f1ba5 '\
            'cb3595d )',
           '_443._tcp.example.jp. IN TLSA 255 255 255 ( 6609173804b9e31895f550db027ef7c7fa6f1bc9326c99371b61f1ba5 '\
            'cb3595d )',
           '_443._tcp.data.iana.org. IN TLSA 3 0 0 ( 308206833082056ba003020102021009cabbe2191c8f569dd4b6dd250 '\
             'f21d8300d06092a864886f70d01010b05003070310b30090603550406 '\
             '1302555331153013060355040a130c446967694365727420496e63311 '\
             '93017060355040b13107777772e64696769636572742e636f6d312f30 '\
             '2d0603550403132644696769436572742053484132204869676820417 '\
             '3737572616e636520536572766572204341301e170d31343130323730 '\
             '30303030305a170d3138303130333132303030305a3081a3310b30090 '\
             '60355040613025553311330110603550408130a43616c69666f726e69 '\
             '61311430120603550407130b4c6f7320416e67656c6573313c303a060 '\
             '355040a1333496e7465726e657420436f72706f726174696f6e20666f '\
             '722041737369676e6564204e616d657320616e64204e756d626572733 '\
             '1163014060355040b130d4954204f7065726174696f6e733113301106 '\
             '035504030c0a2a2e69616e612e6f726730820222300d06092a864886f '\
             '70d01010105000382020f003082020a02820201009dbdfddeb5cae53a '\
             '559747e2fda63728e4aba60f18b79a69f03310bf0164e5ee7db6b15bf '\
             '56df23fddbae6a1bb38449b8c883f18102bbd8bb655ac0e2dac2ee3ed '\
             '5cf4315868d2c598068284854b24894dcd4bd37811f0ad3a282cd4b4e '\
             '599ffd07d8d2d3f2478554f81020b320ee12f44948e2ea1edbc990b83 '\
             '0ca5cca6b4a839fb27b51850c9847eac74f26609eb24365b9751fb1c3 '\
             '208f56913bacbcae49201347c78b7e54a9d99979404c37f00fb65db84 '\
             '9fd75e3a68770c30f2abe65b33256fb59b450050b00d8139d4d80d36f '\
             '7bc46daf303e48f0f0791b2fdd72ec60b2cb3ad533c3f288c9c194e49 '\
             '337a69c496731f086d4f1f9825900713e2a551d05cb6057567850d91e '\
             '6001c4ce27176f0957873a95b880acbec19e7bd9bcf1286d0452b7378 '\
             '9c41905dd470971cd73aea52c77b080cd779af58234f337225c26f87a '\
             '8c13e2a65e9dd4e03a5b41d7e06b3353f38129b2327a531ec9627a21d '\
             'c423733aa029d4989448ba3322891c1a5690ddf2d25c8ec8aaa894b14 '\
             'aa92130c6b6d969a21ff671b60c4c923a94a93ea1dd0492c93393ca6e '\
             'dd61f33ca77e9208d01d6bd15107662ec088733df4c876a7e1608b829 '\
             '73a0f7592e84ed15579d181e79024ae8a7e4b9f0078eb2005b23f9d09 '\
             'a1df1bbc7de2a5a6085a3646d9fadb0e9da273a5f403cdd42831ce6f0 '\
             'ca46889585602bb8bc36bb3be861ff6d1a62e350203010001a38201e3 '\
             '308201df301f0603551d230418301680145168ff90af0207753cccd96 '\
             '56462a212b859723b301d0603551d0e04160414c7d0acef898b20e4b9 '\
             '14668933032394f6bf3a61301f0603551d1104183016820a2a2e69616 '\
             'e612e6f7267820869616e612e6f7267300e0603551d0f0101ff040403 '\
             '0205a0301d0603551d250416301406082b0601050507030106082b060 '\
             '1050507030230750603551d1f046e306c3034a032a030862e68747470 '\
             '3a2f2f63726c332e64696769636572742e636f6d2f736861322d68612 '\
             'd7365727665722d67332e63726c3034a032a030862e687474703a2f2f '\
             '63726c342e64696769636572742e636f6d2f736861322d68612d73657 '\
             '27665722d67332e63726c30420603551d20043b303930370609608648 '\
             '0186fd6c0101302a302806082b06010505070201161c68747470733a2 '\
             'f2f7777772e64696769636572742e636f6d2f43505330818306082b06 '\
             '01050507010104773075302406082b060105050730018618687474703 '\
             'a2f2f6f6373702e64696769636572742e636f6d304d06082b06010505 '\
             '0730028641687474703a2f2f636163657274732e64696769636572742 '\
             'e636f6d2f446967694365727453484132486967684173737572616e63 '\
             '6553657276657243412e637274300c0603551d130101ff04023000300 '\
             'd06092a864886f70d01010b0500038201010070314c38e7c02fd80810 '\
             '500b9df6dae85de9b23e29fbd68bfdb5f23411c89acfaf9ae05af9123 '\
             'a8aa6bce6954a4e68dc7cfc480a65d76f229c4bd5f5674b0c9ac6d06a '\
             '37a1a1c145c3956120b8efe67c887ab4ff7d6aa950ff3698f27c4a19d '\
             '59d93a39aca5a7b6d6c75e34974e50f5a590005b3cb665ddbd7074f9f '\
             'cbcbf9c50228d5e25596b64ada160b48f77a93aaced22617bfe005e00 '\
             'fe20a532a0adcb818c878dc5d6649277777ca1a814e21d0b53308af40 '\
             '78be4554715e4ce4828b012f25ffa13a6ceb30d20a75deba8a344e41d '\
             '627fa638feff38a3063a0187519b39b053f7134d9cd83e6091accf5d2 '\
             'e3a05edfa1dfbe181a87ad86ba24fe6b97fe )',
           '_443._tcp.data.iana.org. IN TLSA 3 0 1 ( 2760bc55bbb8cf398e4c90da21018b2eaafc9e375f7428cf0708e7c88 '\
             '8261b49',
           '_443._tcp.data.iana.org. IN TLSA 3 0 2 ( e6f38e78b1c9f8e0969e81c555e2770eeccb3f120986558adfb2c48aa '\
             'dc6f85d3596f0cc7362a6a6cda7b6dea222a968fef5aeeaf6d334c8b9 '\
             '725543f27683db )',
           '_443._tcp.data.iana.org. IN TLSA 3 1 0 (30820222300d06092a864886f70d01010105000382020f003082020a0 '\
             '2820201009dbdfddeb5cae53a559747e2fda63728e4aba60f18b79a69 '\
             'f03310bf0164e5ee7db6b15bf56df23fddbae6a1bb38449b8c883f181 '\
             '02bbd8bb655ac0e2dac2ee3ed5cf4315868d2c598068284854b24894d '\
             'cd4bd37811f0ad3a282cd4b4e599ffd07d8d2d3f2478554f81020b320 '\
             'ee12f44948e2ea1edbc990b830ca5cca6b4a839fb27b51850c9847eac '\
             '74f26609eb24365b9751fb1c3208f56913bacbcae49201347c78b7e54 '\
             'a9d99979404c37f00fb65db849fd75e3a68770c30f2abe65b33256fb5 '\
             '9b450050b00d8139d4d80d36f7bc46daf303e48f0f0791b2fdd72ec60 '\
             'b2cb3ad533c3f288c9c194e49337a69c496731f086d4f1f9825900713 '\
             'e2a551d05cb6057567850d91e6001c4ce27176f0957873a95b880acbe '\
             'c19e7bd9bcf1286d0452b73789c41905dd470971cd73aea52c77b080c '\
             'd779af58234f337225c26f87a8c13e2a65e9dd4e03a5b41d7e06b3353 '\
             'f38129b2327a531ec9627a21dc423733aa029d4989448ba3322891c1a '\
             '5690ddf2d25c8ec8aaa894b14aa92130c6b6d969a21ff671b60c4c923 '\
             'a94a93ea1dd0492c93393ca6edd61f33ca77e9208d01d6bd15107662e '\
             'c088733df4c876a7e1608b82973a0f7592e84ed15579d181e79024ae8 '\
             'a7e4b9f0078eb2005b23f9d09a1df1bbc7de2a5a6085a3646d9fadb0e '\
             '9da273a5f403cdd42831ce6f0ca46889585602bb8bc36bb3be861ff6d '\
             '1a62e350203010001 )',
           '_443._tcp.data.iana.org. IN TLSA 3 1 1 ( d56f85824b6ed2ab15b9040c20b574515d9a0ab415ca253b42cbc915a '\
             '11de18d )',
           '_443._tcp.data.iana.org. IN TLSA 3 1 2 ( ba8b1b6f74782cb681373c314cf7bf4d2468c6a9dee47909fae1381ca '\
             '6447249c42cb2a4d6d808fa1486ba70b7c1bb70dd76657a281441110b '\
             'b4043007ee5ce3 )'
  ].freeze
  CERT = "-----BEGIN CERTIFICATE-----
MIIGgzCCBWugAwIBAgIQCcq74hkcj1ad1LbdJQ8h2DANBgkqhkiG9w0BAQsFADBw
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
d3cuZGlnaWNlcnQuY29tMS8wLQYDVQQDEyZEaWdpQ2VydCBTSEEyIEhpZ2ggQXNz
dXJhbmNlIFNlcnZlciBDQTAeFw0xNDEwMjcwMDAwMDBaFw0xODAxMDMxMjAwMDBa
MIGjMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEUMBIGA1UEBxML
TG9zIEFuZ2VsZXMxPDA6BgNVBAoTM0ludGVybmV0IENvcnBvcmF0aW9uIGZvciBB
c3NpZ25lZCBOYW1lcyBhbmQgTnVtYmVyczEWMBQGA1UECxMNSVQgT3BlcmF0aW9u
czETMBEGA1UEAwwKKi5pYW5hLm9yZzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCC
AgoCggIBAJ29/d61yuU6VZdH4v2mNyjkq6YPGLeaafAzEL8BZOXufbaxW/Vt8j/d
uuahuzhEm4yIPxgQK72LtlWsDi2sLuPtXPQxWGjSxZgGgoSFSySJTc1L03gR8K06
KCzUtOWZ/9B9jS0/JHhVT4ECCzIO4S9ElI4uoe28mQuDDKXMprSoOfsntRhQyYR+
rHTyZgnrJDZbl1H7HDII9WkTusvK5JIBNHx4t+VKnZmXlATDfwD7ZduEn9deOmh3
DDDyq+ZbMyVvtZtFAFCwDYE51NgNNve8RtrzA+SPDweRsv3XLsYLLLOtUzw/KIyc
GU5JM3ppxJZzHwhtTx+YJZAHE+KlUdBctgV1Z4UNkeYAHEzicXbwlXhzqVuICsvs
Gee9m88ShtBFK3N4nEGQXdRwlxzXOupSx3sIDNd5r1gjTzNyJcJvh6jBPipl6d1O
A6W0HX4GszU/OBKbIyelMeyWJ6IdxCNzOqAp1JiUSLozIokcGlaQ3fLSXI7IqqiU
sUqpITDGttlpoh/2cbYMTJI6lKk+od0Ekskzk8pu3WHzPKd+kgjQHWvRUQdmLsCI
cz30yHan4WCLgpc6D3WS6E7RVXnRgeeQJK6KfkufAHjrIAWyP50Jod8bvH3ipaYI
WjZG2frbDp2ic6X0A83UKDHObwykaIlYVgK7i8Nrs76GH/bRpi41AgMBAAGjggHj
MIIB3zAfBgNVHSMEGDAWgBRRaP+QrwIHdTzM2WVkYqISuFlyOzAdBgNVHQ4EFgQU
x9Cs74mLIOS5FGaJMwMjlPa/OmEwHwYDVR0RBBgwFoIKKi5pYW5hLm9yZ4IIaWFu
YS5vcmcwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEF
BQcDAjB1BgNVHR8EbjBsMDSgMqAwhi5odHRwOi8vY3JsMy5kaWdpY2VydC5jb20v
c2hhMi1oYS1zZXJ2ZXItZzMuY3JsMDSgMqAwhi5odHRwOi8vY3JsNC5kaWdpY2Vy
dC5jb20vc2hhMi1oYS1zZXJ2ZXItZzMuY3JsMEIGA1UdIAQ7MDkwNwYJYIZIAYb9
bAEBMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMw
gYMGCCsGAQUFBwEBBHcwdTAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNl
cnQuY29tME0GCCsGAQUFBzAChkFodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20v
RGlnaUNlcnRTSEEySGlnaEFzc3VyYW5jZVNlcnZlckNBLmNydDAMBgNVHRMBAf8E
AjAAMA0GCSqGSIb3DQEBCwUAA4IBAQBwMUw458Av2AgQUAud9troXemyPin71ov9
tfI0Eciaz6+a4Fr5EjqKprzmlUpOaNx8/EgKZddvIpxL1fVnSwyaxtBqN6GhwUXD
lWEguO/mfIh6tP99aqlQ/zaY8nxKGdWdk6Oaylp7bWx140l05Q9aWQAFs8tmXdvX
B0+fy8v5xQIo1eJVlrZK2hYLSPd6k6rO0iYXv+AF4A/iClMqCty4GMh43F1mSSd3
d8oagU4h0LUzCK9AeL5FVHFeTOSCiwEvJf+hOmzrMNIKdd66ijROQdYn+mOP7/OK
MGOgGHUZs5sFP3E02c2D5gkazPXS46Be36Hfvhgah62GuiT+a5f+
-----END CERTIFICATE-----".freeze

  def test_tlsa_from_string
    t1 = Dnsruby::RR.create(INPUT[0])
    assert_equal(3, t1.usage)
    assert_equal(0, t1.selector)
    assert_equal(1, t1.matching_type)
    assert_equal('6609173804b9e31895f550db027ef7c7fa6f1bc9326c99371b61f1ba5 cb3595d', t1.data)

    t2 = Dnsruby::RR.create(INPUT[1])
    assert_equal(255, t2.usage)
    assert_equal(255, t2.selector)
    assert_equal(255, t2.matching_type)
    assert_equal('6609173804b9e31895f550db027ef7c7fa6f1bc9326c99371b61f1ba5 cb3595d', t2.data)
  end

  def test_tlsa_from_data
    t1 = Dnsruby::RR.create(INPUT[0])
    m = Dnsruby::Message.new
    m.add_additional(t1)
    data = m.encode
    m2 = Dnsruby::Message.decode(data)
    t3 = m2.additional[0]
    assert_equal(t1.to_s, t3.to_s)
  end

  def test_tlsa_verify_rsa_cert
    cert = OpenSSL::X509::Certificate.new(CERT)
    der = cert.to_der
    t4 = Dnsruby::RR.create(INPUT[2])
    assert_equal(t4.databin, der)

    t5 = Dnsruby::RR.create(INPUT[3])
    assert_equal(t5.databin, OpenSSL::Digest::SHA256.digest(der))

    t6 = Dnsruby::RR.create(INPUT[4])
    assert_equal(t6.databin, OpenSSL::Digest::SHA512.digest(der))
  end

  def test_tlsa_verify_rsa_pkey
    cert = OpenSSL::X509::Certificate.new(CERT)
    pkey = cert.public_key.to_der

    t7 = Dnsruby::RR.create(INPUT[5])
    assert_equal(t7.databin, pkey)

    t8 = Dnsruby::RR.create(INPUT[6])
    assert_equal(t8.databin, OpenSSL::Digest::SHA256.digest(pkey))

    t9 = Dnsruby::RR.create(INPUT[7])
    assert_equal(t9.databin, OpenSSL::Digest::SHA512.digest(pkey))
  end
end