ruby-sslyze 0.2.1 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +6 -4
- data/.travis.yml +15 -7
- data/ChangeLog.md +29 -12
- data/Gemfile +3 -2
- data/LICENSE.txt +1 -1
- data/README.md +5 -5
- data/Rakefile +1 -1
- data/lib/sslyze/cipher_suites.rb +176 -0
- data/lib/sslyze/program.rb +8 -8
- data/lib/sslyze/task.rb +40 -33
- data/lib/sslyze/version.rb +1 -1
- data/lib/sslyze/{certificate/domain_name.rb → x509/domain.rb} +5 -3
- data/lib/sslyze/x509/extension.rb +15 -0
- data/lib/sslyze/x509/extension_set.rb +140 -0
- data/lib/sslyze/x509/extensions.rb +6 -0
- data/lib/sslyze/x509/extensions/basic_constraints.rb +41 -0
- data/lib/sslyze/x509/extensions/certificate_policies.rb +108 -0
- data/lib/sslyze/x509/extensions/crl_distribution_points.rb +47 -0
- data/lib/sslyze/x509/extensions/extended_key_usage.rb +58 -0
- data/lib/sslyze/x509/extensions/key_usage.rb +66 -0
- data/lib/sslyze/x509/extensions/subject_alt_name.rb +144 -0
- data/lib/sslyze/x509/name.rb +194 -0
- data/lib/sslyze/x509/public_key.rb +53 -0
- data/lib/sslyze/xml.rb +26 -37
- data/lib/sslyze/xml/attributes.rb +5 -0
- data/lib/sslyze/xml/attributes/error.rb +30 -0
- data/lib/sslyze/xml/attributes/exception.rb +30 -0
- data/lib/sslyze/xml/attributes/is_supported.rb +29 -0
- data/lib/sslyze/xml/attributes/is_vulnerable.rb +29 -0
- data/lib/sslyze/xml/attributes/title.rb +31 -0
- data/lib/sslyze/xml/certinfo.rb +67 -0
- data/lib/sslyze/xml/certinfo/certificate.rb +202 -0
- data/lib/sslyze/xml/certinfo/certificate_validation.rb +69 -0
- data/lib/sslyze/xml/certinfo/certificate_validation/hostname_validation.rb +54 -0
- data/lib/sslyze/xml/certinfo/certificate_validation/path_validation.rb +84 -0
- data/lib/sslyze/xml/certinfo/certificate_validation/verified_certificate_chain.rb +41 -0
- data/lib/sslyze/xml/certinfo/has_certificates.rb +102 -0
- data/lib/sslyze/xml/certinfo/ocsp_stapling.rb +45 -0
- data/lib/sslyze/xml/certinfo/ocsp_stapling/ocsp_response.rb +87 -0
- data/lib/sslyze/xml/certinfo/received_certificate_chain.rb +48 -0
- data/lib/sslyze/xml/compression.rb +33 -0
- data/lib/sslyze/xml/compression/compression_method.rb +38 -0
- data/lib/sslyze/xml/fallback.rb +34 -0
- data/lib/sslyze/xml/fallback/tls_fallback_scsv.rb +27 -0
- data/lib/sslyze/xml/heartbleed.rb +38 -0
- data/lib/sslyze/xml/heartbleed/openssl_heartbleed.rb +29 -0
- data/lib/sslyze/xml/http_headers.rb +42 -0
- data/lib/sslyze/xml/http_headers/http_public_key_pinning.rb +121 -0
- data/lib/sslyze/xml/http_headers/http_strict_transport_security.rb +59 -0
- data/lib/sslyze/xml/invalid_target.rb +33 -0
- data/lib/sslyze/xml/openssl_ccs.rb +34 -0
- data/lib/sslyze/xml/openssl_ccs/openssl_ccs_injection.rb +26 -0
- data/lib/sslyze/xml/plugin.rb +27 -0
- data/lib/sslyze/xml/protocol.rb +143 -0
- data/lib/sslyze/xml/protocol/cipher_suite.rb +93 -0
- data/lib/sslyze/xml/protocol/cipher_suite/key_exchange.rb +127 -0
- data/lib/sslyze/xml/reneg.rb +28 -0
- data/lib/sslyze/xml/reneg/session_renegotiation.rb +51 -0
- data/lib/sslyze/xml/resum.rb +42 -0
- data/lib/sslyze/xml/resum/session_resumption_with_session_ids.rb +94 -0
- data/lib/sslyze/xml/resum/session_resumption_with_tls_tickets.rb +69 -0
- data/lib/sslyze/xml/resum_rate.rb +30 -0
- data/lib/sslyze/xml/target.rb +371 -0
- data/lib/sslyze/xml/types.rb +19 -0
- data/ruby-sslyze.gemspec +3 -3
- data/spec/spec_helper.rb +2 -4
- data/spec/sslyze.xml +2356 -2580
- data/spec/x509/domain_spec.rb +125 -0
- data/spec/x509/extension_set_spec.rb +208 -0
- data/spec/x509/extension_spec.rb +58 -0
- data/spec/x509/extensions/basic_constraints_spec.rb +41 -0
- data/spec/x509/extensions/certificate_policies_spec.rb +38 -0
- data/spec/x509/extensions/crl_distribution_points_spec.rb +38 -0
- data/spec/x509/extensions/extended_key_usage_spec.rb +58 -0
- data/spec/x509/extensions/key_usage_spec.rb +84 -0
- data/spec/x509/extensions/subject_alt_name_spec.rb +146 -0
- data/spec/x509/name_spec.rb +85 -0
- data/spec/x509/public_key_spec.rb +113 -0
- data/spec/xml/certinfo/certificate_spec.rb +166 -0
- data/spec/xml/certinfo/certificate_validation/hostname_validation_spec.rb +23 -0
- data/spec/xml/certinfo/certificate_validation/path_validation_spec.rb +107 -0
- data/spec/xml/certinfo/certificate_validation/verified_certificate_chain_spec.rb +163 -0
- data/spec/xml/certinfo/certificate_validation_spec.rb +40 -0
- data/spec/xml/certinfo/ocsp_stapling/ocsp_response_spec.rb +61 -0
- data/spec/xml/certinfo/ocsp_stapling_spec.rb +31 -0
- data/spec/xml/certinfo/received_certificate_chain_spec.rb +165 -0
- data/spec/xml/certinfo_spec.rb +45 -0
- data/spec/xml/compression/compression_method_spec.rb +23 -0
- data/spec/xml/compression_spec.rb +23 -0
- data/spec/xml/heartbleed/openssl_heartbleed_spec.rb +17 -0
- data/spec/xml/heartbleed_spec.rb +37 -0
- data/spec/xml/http_headers/http_public_key_pinning_spec.rb +73 -0
- data/spec/xml/http_headers/http_strict_transport_security_spec.rb +107 -0
- data/spec/xml/http_headers_spec.rb +63 -0
- data/spec/xml/invalid_target_spec.rb +23 -0
- data/spec/xml/plugin_examples.rb +14 -0
- data/spec/{key_exchange_spec.rb → xml/protocol/cipher_suite/key_exchange_spec.rb} +9 -3
- data/spec/xml/protocol/cipher_suite_spec.rb +66 -0
- data/spec/xml/protocol_spec.rb +115 -0
- data/spec/xml/reneg/session_renegotiation_spec.rb +23 -0
- data/spec/xml/reneg_spec.rb +35 -0
- data/spec/xml/resum/session_resumption_with_session_ids_spec.rb +103 -0
- data/spec/xml/resum/session_resumption_with_tls_tickets_spec.rb +121 -0
- data/spec/xml/resum_rate_spec.rb +30 -0
- data/spec/xml/resum_spec.rb +47 -0
- data/spec/{target_spec.rb → xml/target_spec.rb} +73 -27
- data/spec/xml_spec.rb +13 -21
- metadata +138 -61
- data/lib/sslyze/cert_info.rb +0 -57
- data/lib/sslyze/certificate.rb +0 -139
- data/lib/sslyze/certificate/extensions.rb +0 -127
- data/lib/sslyze/certificate/extensions/authority_information_access.rb +0 -38
- data/lib/sslyze/certificate/extensions/extension.rb +0 -26
- data/lib/sslyze/certificate/extensions/x509v3_basic_constraints.rb +0 -60
- data/lib/sslyze/certificate/extensions/x509v3_certificate_policies.rb +0 -50
- data/lib/sslyze/certificate/extensions/x509v3_crl_distribution_points.rb +0 -32
- data/lib/sslyze/certificate/extensions/x509v3_extended_key_usage.rb +0 -32
- data/lib/sslyze/certificate/extensions/x509v3_key_usage.rb +0 -50
- data/lib/sslyze/certificate/extensions/x509v3_subject_alternative_name.rb +0 -71
- data/lib/sslyze/certificate/issuer.rb +0 -56
- data/lib/sslyze/certificate/public_key.rb +0 -9
- data/lib/sslyze/certificate/subject.rb +0 -117
- data/lib/sslyze/certificate/subject_public_key_info.rb +0 -53
- data/lib/sslyze/certificate/validity.rb +0 -9
- data/lib/sslyze/certificate_chain.rb +0 -89
- data/lib/sslyze/certificate_validation.rb +0 -70
- data/lib/sslyze/cipher_suite.rb +0 -237
- data/lib/sslyze/invalid_target.rb +0 -35
- data/lib/sslyze/key_exchange.rb +0 -106
- data/lib/sslyze/ocsp_response.rb +0 -87
- data/lib/sslyze/protocol.rb +0 -133
- data/lib/sslyze/target.rb +0 -312
- data/lib/sslyze/types.rb +0 -17
- data/spec/cert_info_spec.rb +0 -29
- data/spec/certificate/subject_name_spec.rb +0 -72
- data/spec/certificate_chain_spec.rb +0 -61
- data/spec/certificate_spec.rb +0 -330
- data/spec/certificate_validation_spec.rb +0 -39
- data/spec/cipher_suite_spec.rb +0 -50
- data/spec/invalid_target_spec.rb +0 -21
- data/spec/issuer_spec.rb +0 -33
- data/spec/ocsp_response_spec.rb +0 -59
- data/spec/protocol_spec.rb +0 -99
- data/spec/subject_public_key_info_spec.rb +0 -35
- data/spec/subject_spec.rb +0 -69
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
require 'sslyze/xml/plugin'
|
|
2
|
+
require 'sslyze/xml/types'
|
|
3
|
+
require 'sslyze/xml/certinfo/has_certificates'
|
|
4
|
+
|
|
5
|
+
module SSLyze
|
|
6
|
+
class XML
|
|
7
|
+
class Certinfo < Plugin
|
|
8
|
+
#
|
|
9
|
+
# Represents the `<receivedCertificateChain>` XML element.
|
|
10
|
+
#
|
|
11
|
+
# @since 1.0.0
|
|
12
|
+
#
|
|
13
|
+
class ReceivedCertificateChain
|
|
14
|
+
|
|
15
|
+
include Types
|
|
16
|
+
include HasCertificates
|
|
17
|
+
|
|
18
|
+
#
|
|
19
|
+
# Initializes the {ReceivedCertificateChain} object.
|
|
20
|
+
#
|
|
21
|
+
# @param [Nokogiri::XML::Element] node
|
|
22
|
+
#
|
|
23
|
+
def initialize(node)
|
|
24
|
+
@node = node
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
#
|
|
28
|
+
# Parses the `isChainOrderValid` XML attribute.
|
|
29
|
+
#
|
|
30
|
+
# @return [Boolean]
|
|
31
|
+
#
|
|
32
|
+
def is_chain_order_valid?
|
|
33
|
+
Boolean[@node['isChainOrderValid']]
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
#
|
|
37
|
+
# Parses the `containsAnchorCertificate` XML attribute.
|
|
38
|
+
#
|
|
39
|
+
# @return [Boolean]
|
|
40
|
+
#
|
|
41
|
+
def contains_anchor_certificate?
|
|
42
|
+
Boolean[@node['containsAnchorCertificate']]
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
require 'sslyze/xml/plugin'
|
|
2
|
+
require 'sslyze/xml/compression/compression_method'
|
|
3
|
+
|
|
4
|
+
module SSLyze
|
|
5
|
+
class XML
|
|
6
|
+
#
|
|
7
|
+
# Represents the `<compression>` XML element.
|
|
8
|
+
#
|
|
9
|
+
# @since 1.0.0
|
|
10
|
+
#
|
|
11
|
+
class Compression < Plugin
|
|
12
|
+
|
|
13
|
+
#
|
|
14
|
+
# Parses the `<compressionMethod>` XML element.
|
|
15
|
+
#
|
|
16
|
+
# @return [CompressionMethod]
|
|
17
|
+
#
|
|
18
|
+
def deflate
|
|
19
|
+
@compression_method ||= CompressionMethod.new(
|
|
20
|
+
@node.at_xpath('compressionMethod[@type="DEFLATE"]')
|
|
21
|
+
)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
#
|
|
25
|
+
# @see CompressionMethod#is_supported?
|
|
26
|
+
#
|
|
27
|
+
def deflate?
|
|
28
|
+
deflate.is_supported?
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
require 'sslyze/xml/plugin'
|
|
2
|
+
require 'sslyze/xml/attributes/is_supported'
|
|
3
|
+
|
|
4
|
+
module SSLyze
|
|
5
|
+
class XML
|
|
6
|
+
class Compression < Plugin
|
|
7
|
+
#
|
|
8
|
+
# Represents the `<compressionMethod>` XML element.
|
|
9
|
+
#
|
|
10
|
+
# @since 1.0.0
|
|
11
|
+
#
|
|
12
|
+
class CompressionMethod
|
|
13
|
+
|
|
14
|
+
include Attributes::IsSupported
|
|
15
|
+
|
|
16
|
+
#
|
|
17
|
+
# Initializes the {CompressionMethod} object.
|
|
18
|
+
#
|
|
19
|
+
# @param [Nokogiri::XML::Element] node
|
|
20
|
+
# The `<compressionMethod>` XML element.
|
|
21
|
+
#
|
|
22
|
+
def initialize(node)
|
|
23
|
+
@node = node
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
#
|
|
27
|
+
# The type of compression.
|
|
28
|
+
#
|
|
29
|
+
# @return [Symbol]
|
|
30
|
+
#
|
|
31
|
+
def type
|
|
32
|
+
@type ||= @node['type'].to_sym
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
require 'sslyze/xml/plugin'
|
|
2
|
+
|
|
3
|
+
module SSLyze
|
|
4
|
+
class XML
|
|
5
|
+
#
|
|
6
|
+
# Represents the `<fallback>` XML element.
|
|
7
|
+
#
|
|
8
|
+
# @since 1.0.0
|
|
9
|
+
#
|
|
10
|
+
class Fallback < Plugin
|
|
11
|
+
|
|
12
|
+
#
|
|
13
|
+
# Parses the `<tlsFallbackScsv>` XML element.
|
|
14
|
+
#
|
|
15
|
+
# @return [TLSFallbackSCSV]
|
|
16
|
+
#
|
|
17
|
+
def tls_fallback_scsv
|
|
18
|
+
@tls_fallback_scsv ||= TLSFallbackSCSV.new(
|
|
19
|
+
@node.at_xpath('tlsFallbackScsv')
|
|
20
|
+
)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
#
|
|
24
|
+
# @see TLSFallbackSCSV#is_supported?
|
|
25
|
+
#
|
|
26
|
+
def is_supported?
|
|
27
|
+
tls_fallback_scsv.is_supported?
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
alias supported? is_supported?
|
|
31
|
+
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
require 'sslyze/xml/plugin'
|
|
2
|
+
require 'sslyze/xml/is_supported'
|
|
3
|
+
|
|
4
|
+
module SSLyze
|
|
5
|
+
class XML
|
|
6
|
+
class Fallback < Plugin
|
|
7
|
+
#
|
|
8
|
+
# Represents the `<tlsFallbackScsv>` XML element.
|
|
9
|
+
#
|
|
10
|
+
class TLSFallbackSCSV
|
|
11
|
+
|
|
12
|
+
include IsSupported
|
|
13
|
+
|
|
14
|
+
#
|
|
15
|
+
# Initializes the {TLSFallbackSCSV} object.
|
|
16
|
+
#
|
|
17
|
+
# @param [Nokogiri::XML::Element] node
|
|
18
|
+
# The `<tlsFallbackScsv>` XML element.
|
|
19
|
+
#
|
|
20
|
+
def initialize(node)
|
|
21
|
+
@node = node
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
require 'sslyze/xml/plugin'
|
|
2
|
+
require 'sslyze/xml/types'
|
|
3
|
+
require 'sslyze/xml/heartbleed/openssl_heartbleed'
|
|
4
|
+
|
|
5
|
+
module SSLyze
|
|
6
|
+
class XML
|
|
7
|
+
#
|
|
8
|
+
# Represents the `<heartbleed>` XML element.
|
|
9
|
+
#
|
|
10
|
+
# @since 1.0.0
|
|
11
|
+
#
|
|
12
|
+
class Heartbleed < Plugin
|
|
13
|
+
|
|
14
|
+
#
|
|
15
|
+
# Parses the `<openSslHeartbleed>` XML element.
|
|
16
|
+
#
|
|
17
|
+
# @return [OpenSSLHeartbleed]
|
|
18
|
+
#
|
|
19
|
+
def openssl_heartbleed
|
|
20
|
+
@openssl_heartbleed ||= if (element = @node.at_xpath('openSslHeartbleed'))
|
|
21
|
+
OpenSSLHeartbleed.new(element)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
alias openssl openssl_heartbleed
|
|
26
|
+
|
|
27
|
+
#
|
|
28
|
+
# @see #has_openssl_heartbleed?
|
|
29
|
+
#
|
|
30
|
+
def is_vulnerable?
|
|
31
|
+
openssl_heartbleed && openssl_heartbleed.is_vulnerable?
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
alias vulnerable? is_vulnerable?
|
|
35
|
+
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
require 'sslyze/xml/plugin'
|
|
2
|
+
require 'sslyze/xml/attributes/is_vulnerable'
|
|
3
|
+
|
|
4
|
+
module SSLyze
|
|
5
|
+
class XML
|
|
6
|
+
class Heartbleed < Plugin
|
|
7
|
+
#
|
|
8
|
+
# Represents the `<openSslHeartbleed>` XML element.
|
|
9
|
+
#
|
|
10
|
+
# @since 1.0.0
|
|
11
|
+
#
|
|
12
|
+
class OpenSSLHeartbleed
|
|
13
|
+
|
|
14
|
+
include Attributes::IsVulnerable
|
|
15
|
+
|
|
16
|
+
#
|
|
17
|
+
# Initializes the {OpenSSLHeartbleed} object.
|
|
18
|
+
#
|
|
19
|
+
# @param [Nokogiri::XML::Element] node
|
|
20
|
+
# The `<openSslHeartbleed>` XML element.
|
|
21
|
+
#
|
|
22
|
+
def initialize(node)
|
|
23
|
+
@node = node
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
require 'sslyze/xml/plugin'
|
|
2
|
+
require 'sslyze/xml/http_headers/http_strict_transport_security'
|
|
3
|
+
require 'sslyze/xml/http_headers/http_public_key_pinning'
|
|
4
|
+
|
|
5
|
+
module SSLyze
|
|
6
|
+
class XML
|
|
7
|
+
#
|
|
8
|
+
# Represents the `<http_headers>` XML element.
|
|
9
|
+
#
|
|
10
|
+
# @since 1.0.0
|
|
11
|
+
#
|
|
12
|
+
class HTTPHeaders < Plugin
|
|
13
|
+
|
|
14
|
+
#
|
|
15
|
+
# HTTP Strict-Transport-Security header information.
|
|
16
|
+
#
|
|
17
|
+
# @return [HTTPStrictTransportSecurity, nil]
|
|
18
|
+
#
|
|
19
|
+
def http_strict_transport_security
|
|
20
|
+
@http_strict_transport_security ||= if (element = @node.at_xpath('httpStrictTransportSecurity'))
|
|
21
|
+
HTTPStrictTransportSecurity.new(element)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
alias strict_transport_security http_strict_transport_security
|
|
26
|
+
|
|
27
|
+
#
|
|
28
|
+
# HTTP Public-Key-Pinning header information.
|
|
29
|
+
#
|
|
30
|
+
# @return [HTTPPublicKeyPinning, nil]
|
|
31
|
+
#
|
|
32
|
+
def http_public_key_pinning
|
|
33
|
+
@http_public_key_pinning ||= if (element = @node.at_xpath('httpPublicKeyPinning'))
|
|
34
|
+
HTTPPublicKeyPinning.new(element)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
alias public_key_pinning http_public_key_pinning
|
|
39
|
+
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
require 'sslyze/xml/plugin'
|
|
2
|
+
require 'sslyze/xml/types'
|
|
3
|
+
require 'sslyze/xml/attributes/is_supported'
|
|
4
|
+
require 'sslyze/xml/attributes/exception'
|
|
5
|
+
|
|
6
|
+
module SSLyze
|
|
7
|
+
class XML
|
|
8
|
+
class HTTPHeaders < Plugin
|
|
9
|
+
#
|
|
10
|
+
# Represents the `<httpPublicKeyPinning>` XML element.
|
|
11
|
+
#
|
|
12
|
+
# @since 1.0.0
|
|
13
|
+
#
|
|
14
|
+
class HTTPPublicKeyPinning
|
|
15
|
+
|
|
16
|
+
include Types
|
|
17
|
+
include Attributes::IsSupported
|
|
18
|
+
include Attributes::Exception
|
|
19
|
+
|
|
20
|
+
#
|
|
21
|
+
# Initializes the {HTTPPublicKeyPinning} element.
|
|
22
|
+
#
|
|
23
|
+
def initialize(node)
|
|
24
|
+
@node = node
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
#
|
|
28
|
+
# Parses each `pinSha256` XML element.
|
|
29
|
+
#
|
|
30
|
+
# @yield [sha256]
|
|
31
|
+
# Yields each SHA256 checksum.
|
|
32
|
+
#
|
|
33
|
+
# @yieldparam [String] sha256
|
|
34
|
+
# An individual pinned SHA256 checksum.
|
|
35
|
+
#
|
|
36
|
+
# @return [Enumerator]
|
|
37
|
+
#
|
|
38
|
+
def each_pin_sha256
|
|
39
|
+
return enum_for(__method__) unless block_given?
|
|
40
|
+
|
|
41
|
+
@node.xpath('pinSha256').each do |element|
|
|
42
|
+
yield element.inner_text
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
alias each_sha256 each_pin_sha256
|
|
47
|
+
|
|
48
|
+
#
|
|
49
|
+
# @return [Array<String>]
|
|
50
|
+
#
|
|
51
|
+
# @see #each_pin_sha256
|
|
52
|
+
#
|
|
53
|
+
def pin_sha256s
|
|
54
|
+
each_pin_sha256.to_a
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
alias sha256s pin_sha256s
|
|
58
|
+
|
|
59
|
+
#
|
|
60
|
+
# Parses the `includeSubDomains` XML attribute.
|
|
61
|
+
#
|
|
62
|
+
# @return [Boolean]
|
|
63
|
+
#
|
|
64
|
+
def include_sub_domains?
|
|
65
|
+
Boolean[@node['includeSubDomains']]
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
#
|
|
69
|
+
# Parses the `maxAge` attribute.
|
|
70
|
+
#
|
|
71
|
+
# @return [Integer, nil]
|
|
72
|
+
#
|
|
73
|
+
def max_age
|
|
74
|
+
@max_age ||= if (value = @node['maxAge'])
|
|
75
|
+
value.to_i
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
#
|
|
80
|
+
# Parses the `reportOnly` XML attribute.
|
|
81
|
+
#
|
|
82
|
+
# @return [Boolean]
|
|
83
|
+
#
|
|
84
|
+
def report_only
|
|
85
|
+
Boolean[@node['reportOnly']]
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
#
|
|
89
|
+
# Parses the `reportUri` XML attribute.
|
|
90
|
+
#
|
|
91
|
+
# @return [String, nil]
|
|
92
|
+
#
|
|
93
|
+
def report_uri
|
|
94
|
+
@report_uri ||= case (value = @node['reportUri'])
|
|
95
|
+
when nil, 'None' then nil
|
|
96
|
+
else value
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
#
|
|
101
|
+
# Parses the `isValidPinConfigured` XML attribute.
|
|
102
|
+
#
|
|
103
|
+
# @return [Boolean]
|
|
104
|
+
#
|
|
105
|
+
def is_valid_pin_configured?
|
|
106
|
+
Boolean[@node['isValidPinConfigured']]
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
#
|
|
110
|
+
# Parses the `isBackupPinConfigured` XML attribute.
|
|
111
|
+
#
|
|
112
|
+
# @return [Boolean]
|
|
113
|
+
#
|
|
114
|
+
def is_backup_pin_configured?
|
|
115
|
+
Boolean[@node['isBackupPinConfigured']]
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
require 'sslyze/xml/plugin'
|
|
2
|
+
require 'sslyze/xml/types'
|
|
3
|
+
require 'sslyze/xml/attributes/is_supported'
|
|
4
|
+
require 'sslyze/xml/attributes/exception'
|
|
5
|
+
|
|
6
|
+
module SSLyze
|
|
7
|
+
class XML
|
|
8
|
+
class HTTPHeaders < Plugin
|
|
9
|
+
#
|
|
10
|
+
# Represents the `<httpStrictTransportSecurity/>` XML element.
|
|
11
|
+
#
|
|
12
|
+
# @since 1.0.0
|
|
13
|
+
#
|
|
14
|
+
class HTTPStrictTransportSecurity
|
|
15
|
+
|
|
16
|
+
include Types
|
|
17
|
+
include Attributes::IsSupported
|
|
18
|
+
include Attributes::Exception
|
|
19
|
+
|
|
20
|
+
#
|
|
21
|
+
# Initializes the {HTTPStrictTransportSecurity} object.
|
|
22
|
+
#
|
|
23
|
+
def initialize(node)
|
|
24
|
+
@node = node
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
#
|
|
28
|
+
# Parses the `includeSubDomains` XML attribute.
|
|
29
|
+
#
|
|
30
|
+
# @return [Boolean]
|
|
31
|
+
#
|
|
32
|
+
def include_sub_domains?
|
|
33
|
+
Boolean[@node['includeSubDomains']]
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
#
|
|
37
|
+
# Parses the `maxAge` XML attribute.
|
|
38
|
+
#
|
|
39
|
+
# @return [Integer, nil]
|
|
40
|
+
#
|
|
41
|
+
def max_age
|
|
42
|
+
@max_age ||= if (value = @node['maxAge'])
|
|
43
|
+
value.to_i
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
#
|
|
48
|
+
# Parses the `preload` XML attribute.
|
|
49
|
+
#
|
|
50
|
+
# @return [Boolean]
|
|
51
|
+
#
|
|
52
|
+
def preload?
|
|
53
|
+
Boolean[@node['preload']]
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|