r509 1.0 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/{CONTRIBUTING.mdown → CONTRIBUTING.md} +0 -0
- data/{README.mdown → README.md} +44 -38
- data/doc/R509.html +4 -4
- data/doc/R509/ASN1.html +2 -2
- data/doc/R509/ASN1/GeneralName.html +2 -2
- data/doc/R509/ASN1/GeneralNames.html +2 -2
- data/doc/R509/CRL.html +3 -3
- data/doc/R509/CRL/Administrator.html +2 -2
- data/doc/R509/CRL/FileReaderWriter.html +2 -2
- data/doc/R509/CRL/ReaderWriter.html +2 -2
- data/doc/R509/CRL/SQLiteReaderWriter.html +2 -2
- data/doc/R509/CRL/SignedList.html +2 -2
- data/doc/R509/CSR.html +2 -2
- data/doc/R509/Cert.html +3 -3
- data/doc/R509/Cert/Extensions.html +3 -3
- data/doc/R509/Cert/Extensions/AuthorityInfoAccess.html +2 -2
- data/doc/R509/Cert/Extensions/AuthorityKeyIdentifier.html +2 -2
- data/doc/R509/Cert/Extensions/BasicConstraints.html +2 -2
- data/doc/R509/Cert/Extensions/CRLDistributionPoints.html +2 -2
- data/doc/R509/Cert/Extensions/CertificatePolicies.html +2 -2
- data/doc/R509/Cert/Extensions/ExtendedKeyUsage.html +2 -2
- data/doc/R509/Cert/Extensions/GeneralNamesMixin.html +2 -2
- data/doc/R509/Cert/Extensions/InhibitAnyPolicy.html +2 -2
- data/doc/R509/Cert/Extensions/KeyUsage.html +2 -2
- data/doc/R509/Cert/Extensions/NameConstraints.html +2 -2
- data/doc/R509/Cert/Extensions/NoticeReference.html +2 -2
- data/doc/R509/Cert/Extensions/OCSPNoCheck.html +2 -2
- data/doc/R509/Cert/Extensions/PolicyConstraints.html +2 -2
- data/doc/R509/Cert/Extensions/PolicyInformation.html +2 -2
- data/doc/R509/Cert/Extensions/PolicyQualifiers.html +2 -2
- data/doc/R509/Cert/Extensions/SubjectAlternativeName.html +2 -2
- data/doc/R509/Cert/Extensions/SubjectKeyIdentifier.html +2 -2
- data/doc/R509/Cert/Extensions/UserNotice.html +2 -2
- data/doc/R509/Cert/Extensions/ValidationMixin.html +2 -2
- data/doc/R509/CertificateAuthority.html +2 -2
- data/doc/R509/CertificateAuthority/OptionsBuilder.html +2 -2
- data/doc/R509/CertificateAuthority/Signer.html +2 -2
- data/doc/R509/Config.html +2 -2
- data/doc/R509/Config/CAConfig.html +2 -2
- data/doc/R509/Config/CAConfigPool.html +2 -2
- data/doc/R509/Config/CertProfile.html +2 -2
- data/doc/R509/Config/SubjectItemPolicy.html +2 -2
- data/doc/R509/Engine.html +2 -2
- data/doc/R509/Helpers.html +2 -2
- data/doc/R509/MessageDigest.html +3 -3
- data/doc/R509/NameSanitizer.html +2 -2
- data/doc/R509/OCSP.html +2 -2
- data/doc/R509/OCSP/Request.html +2 -2
- data/doc/R509/OCSP/Request/Nonce.html +2 -2
- data/doc/R509/OCSP/Response.html +2 -2
- data/doc/R509/OIDMapper.html +26 -16
- data/doc/R509/PrivateKey.html +2 -2
- data/doc/R509/R509Error.html +2 -2
- data/doc/R509/SPKI.html +2 -2
- data/doc/R509/Subject.html +2 -2
- data/doc/R509/Validity.html +2 -2
- data/doc/R509/Validity/Checker.html +2 -2
- data/doc/R509/Validity/DefaultChecker.html +2 -2
- data/doc/R509/Validity/DefaultWriter.html +2 -2
- data/doc/R509/Validity/Status.html +2 -2
- data/doc/R509/Validity/Writer.html +2 -2
- data/doc/_index.html +2 -8
- data/doc/file.LICENSE.html +2 -2
- data/doc/file.README.html +15 -7
- data/doc/file.r509.html +2 -2
- data/doc/file_list.html +0 -10
- data/doc/index.html +15 -7
- data/doc/method_list.html +300 -300
- data/doc/top-level-namespace.html +2 -2
- data/lib/r509/message_digest.rb +1 -3
- data/lib/r509/oid_mapper.rb +6 -1
- data/lib/r509/version.rb +1 -1
- data/spec/csr_spec.rb +6 -6
- data/spec/fixtures/csr4.pem +25 -25
- data/spec/message_digest_spec.rb +0 -15
- data/spec/oid_mapper_spec.rb +5 -0
- data/spec/spki_spec.rb +1 -1
- metadata +14 -35
- checksums.yaml.gz.sig +0 -1
- data.tar.gz.sig +0 -0
- metadata.gz.sig +0 -0
@@ -196,9 +196,9 @@
|
|
196
196
|
</div>
|
197
197
|
|
198
198
|
<div id="footer">
|
199
|
-
Generated on
|
199
|
+
Generated on Thu Nov 2 12:48:00 2017 by
|
200
200
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
201
|
-
0.9.5 (ruby-2.4.
|
201
|
+
0.9.5 (ruby-2.4.2).
|
202
202
|
</div>
|
203
203
|
|
204
204
|
</div>
|
data/lib/r509/message_digest.rb
CHANGED
@@ -4,7 +4,7 @@ module R509
|
|
4
4
|
# MessageDigest allows you to specify MDs in a more friendly fashion
|
5
5
|
class MessageDigest
|
6
6
|
# a list of message digests that this class understands
|
7
|
-
KNOWN_MDS = ['SHA1', 'SHA224', 'SHA256', 'SHA384', 'SHA512', '
|
7
|
+
KNOWN_MDS = ['SHA1', 'SHA224', 'SHA256', 'SHA384', 'SHA512', 'MD5']
|
8
8
|
|
9
9
|
# this constant defines the default message digest if it is not supplied
|
10
10
|
# or an invalid digest is passed
|
@@ -37,7 +37,6 @@ module R509
|
|
37
37
|
when 'sha384' then OpenSSL::Digest::SHA384.new
|
38
38
|
when 'sha512' then OpenSSL::Digest::SHA512.new
|
39
39
|
when 'md5' then OpenSSL::Digest::MD5.new
|
40
|
-
when 'dss1' then OpenSSL::Digest::DSS1.new
|
41
40
|
else
|
42
41
|
@name = DEFAULT_MD.downcase
|
43
42
|
translate_name_to_digest
|
@@ -53,7 +52,6 @@ module R509
|
|
53
52
|
when OpenSSL::Digest::SHA384 then 'sha384'
|
54
53
|
when OpenSSL::Digest::SHA512 then 'sha512'
|
55
54
|
when OpenSSL::Digest::MD5 then 'md5'
|
56
|
-
when OpenSSL::Digest::DSS1 then 'dss1'
|
57
55
|
else
|
58
56
|
raise ArgumentError, "Unknown digest"
|
59
57
|
end
|
data/lib/r509/oid_mapper.rb
CHANGED
@@ -12,7 +12,12 @@ module R509
|
|
12
12
|
if long_name.nil?
|
13
13
|
long_name = short_name
|
14
14
|
end
|
15
|
-
|
15
|
+
|
16
|
+
begin
|
17
|
+
OpenSSL::ASN1::ObjectId.register(oid, short_name, long_name)
|
18
|
+
rescue OpenSSL::ASN1::ASN1Error
|
19
|
+
false
|
20
|
+
end
|
16
21
|
end
|
17
22
|
|
18
23
|
# Register a batch of OIDs so we have friendly short names
|
data/lib/r509/version.rb
CHANGED
data/spec/csr_spec.rb
CHANGED
@@ -78,18 +78,18 @@ describe R509::CSR do
|
|
78
78
|
it "raises an exception if you provide a list of domains with an existing CSR" do
|
79
79
|
expect { R509::CSR.new(:csr => @csr, :san_names => ['moredomainsiwanttoadd.com']) }.to raise_error(ArgumentError, 'You can\'t add domains to an existing CSR')
|
80
80
|
end
|
81
|
-
it "changes the message_digest to
|
81
|
+
it "changes the message_digest to SHA256 when passed a DSA key" do
|
82
82
|
csr = R509::CSR.new(:subject => [["CN", "dsasigned.com"]], :key => @dsa_key)
|
83
|
-
expect(csr.message_digest.name).to eq('
|
84
|
-
expect(csr.signature_algorithm).to eq('
|
83
|
+
expect(csr.message_digest.name).to eq('sha256')
|
84
|
+
expect(csr.signature_algorithm).to eq('dsa_with_SHA256')
|
85
85
|
# dss1 is actually the same as SHA1
|
86
86
|
# Yes this is confusing
|
87
87
|
# see http://www.ruby-doc.org/stdlib-1.9.3/libdoc/openssl/rdoc/OpenSSL/PKey/DSA.html
|
88
88
|
end
|
89
|
-
it "changes the message_digest to
|
89
|
+
it "changes the message_digest to SHA256 when creating a DSA key" do
|
90
90
|
csr = R509::CSR.new(:subject => [["CN", "dsasigned.com"]], :type => "dsa", :bit_length => 512)
|
91
|
-
expect(csr.message_digest.name).to eq('
|
92
|
-
expect(csr.signature_algorithm).to eq('
|
91
|
+
expect(csr.message_digest.name).to eq('sha256')
|
92
|
+
expect(csr.signature_algorithm).to eq('dsa_with_SHA256')
|
93
93
|
# dss1 is actually the same as SHA1
|
94
94
|
# Yes this is confusing
|
95
95
|
# see http://www.ruby-doc.org/stdlib-1.9.3/libdoc/openssl/rdoc/OpenSSL/PKey/DSA.html
|
data/spec/fixtures/csr4.pem
CHANGED
@@ -1,25 +1,25 @@
|
|
1
|
-
-----BEGIN CERTIFICATE REQUEST-----
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
-----END CERTIFICATE REQUEST-----
|
1
|
+
-----BEGIN NEW CERTIFICATE REQUEST-----
|
2
|
+
MIIEKjCCAxICAQAwgYoxCzAJBgNVBAYTAlVTMR0wGwYDVQQIDBREaXN0cmljdCBP
|
3
|
+
ZiBDb2x1bWJpYTETMBEGA1UEBwwKV2FzaGluZ3RvbjERMA8GA1UECwwIT3JnIFVu
|
4
|
+
aXQxEzARBgNVBAoMCk15IENvbXBhbnkxHzAdBgNVBAMMFmNvbmNlbnRyYXRvci52
|
5
|
+
cG4ubG9jYWwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC5WNJl0Oxh
|
6
|
+
pu8A5uybAWjjOyQDr/UXeu+/xylNR3C7y7WEPsA5IUv8aa83lw8ag5+OZjN1lpIw
|
7
|
+
dy2yHCm9wzfBaxwd4GnU1jQf8hi9wAQsGrJI194eG0gUEHtVVUEmZAEvbiySfGH8
|
8
|
+
9+tL+iemD9Ua1YwDOCErSeqNg9ROZLHw31NuzJawByf5EoKwbZ0G7Rm0T5qUXGW2
|
9
|
+
Is8iIq74o2l7haEPSpWeQEXAigyEhB8l2Rr8icuhmVC/IEdz6B2rPe20psMO6vzF
|
10
|
+
Apx+WTgm7XzuSfqz0Tv7NABy63dRwGUW3yZn+3yN6EfC5CtkOzm1w2Na1I6wRlVH
|
11
|
+
XDJZlj3UxwzTAgMBAAGgggFYMBoGCisGAQQBgjcNAgMxDBYKNi4xLjc2MDEuMjBL
|
12
|
+
BgkrBgEEAYI3FRQxPjA8AgEFDBxWQ0hJLUVOLVJHRkZUMS50cnVzdHdhdmUuY29t
|
13
|
+
DBBUUlVTVFdBVkVcZGxhbXBhDAdNTUMuRVhFMHIGCisGAQQBgjcNAgIxZDBiAgEB
|
14
|
+
HloATQBpAGMAcgBvAHMAbwBmAHQAIABSAFMAQQAgAFMAQwBoAGEAbgBuAGUAbAAg
|
15
|
+
AEMAcgB5AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIDAQAw
|
16
|
+
eQYJKoZIhvcNAQkOMWwwajA8BgNVHREENTAzggthZG9tYWluLmNvbYIRYW5vdGhl
|
17
|
+
cmRvbWFpbi5jb22CEWp1c3RhbmV4YW1wbGUuY29tMB0GA1UdDgQWBBQ6Y8EqbqGM
|
18
|
+
hQZOg6Z8u5ro9HvFwTALBgNVHQ8EBAMCBSAwDQYJKoZIhvcNAQEFBQADggEBAGdu
|
19
|
+
Cz9tnTWtkGSdUjG3u8RlIWtnwNI+lsw2wYperb2r/eWMYCa8o2k/HsmWbISWiqWO
|
20
|
+
HmS5VHoItUTimItRpaMwjDHpz1xrpILRW5vY2RZMh6+/DbZJFnXHuIIQF2gk1G8f
|
21
|
+
Z4rYm71EGnvETy7xdbQfMIZegvzyBCdWuT/67OrbBWhPL2VIqkqAn5eEfl2nKv30
|
22
|
+
SFyz9Yy63b4bBqYDOkmGlAZxFuPIMuxeiwlqzmXavV4mIB8e+qZnvjTzTjk7VnGb
|
23
|
+
b9r4r/Dl4nzFq1c6iii5EBGBcPTDBa/6uanM03nPXSudPEDpT33epUotM9+rsQX9
|
24
|
+
dPth/F/Do0QBAyOCyS0=
|
25
|
+
-----END NEW CERTIFICATE REQUEST-----
|
data/spec/message_digest_spec.rb
CHANGED
@@ -53,16 +53,6 @@ describe R509::MessageDigest do
|
|
53
53
|
expect(md.name).to eq("md5")
|
54
54
|
expect(md.digest.is_a?(OpenSSL::Digest::MD5)).to eq(true)
|
55
55
|
end
|
56
|
-
it "translates dss1 name -> digest" do
|
57
|
-
md = R509::MessageDigest.new("dss1")
|
58
|
-
expect(md.name).to eq("dss1")
|
59
|
-
expect(md.digest.is_a?(OpenSSL::Digest::DSS1)).to eq(true)
|
60
|
-
end
|
61
|
-
it "translates DSS1 name -> digest" do
|
62
|
-
md = R509::MessageDigest.new("DSS1")
|
63
|
-
expect(md.name).to eq("dss1")
|
64
|
-
expect(md.digest.is_a?(OpenSSL::Digest::DSS1)).to eq(true)
|
65
|
-
end
|
66
56
|
it "translates unknown name -> digest" do
|
67
57
|
md = R509::MessageDigest.new("unknown")
|
68
58
|
expect(md.name).to eq("sha256")
|
@@ -98,11 +88,6 @@ describe R509::MessageDigest do
|
|
98
88
|
expect(md.name).to eq("md5")
|
99
89
|
expect(md.digest.is_a?(OpenSSL::Digest::MD5)).to eq(true)
|
100
90
|
end
|
101
|
-
it "translates dss1 digest -> name" do
|
102
|
-
md = R509::MessageDigest.new(OpenSSL::Digest::DSS1.new)
|
103
|
-
expect(md.name).to eq("dss1")
|
104
|
-
expect(md.digest.is_a?(OpenSSL::Digest::DSS1)).to eq(true)
|
105
|
-
end
|
106
91
|
it "creates a default digest with no params or nil" do
|
107
92
|
md = R509::MessageDigest.new
|
108
93
|
expect(md.name).to eq(R509::MessageDigest::DEFAULT_MD.downcase)
|
data/spec/oid_mapper_spec.rb
CHANGED
@@ -17,6 +17,11 @@ describe R509::OIDMapper do
|
|
17
17
|
expect(subject_new['myOIDName']).to eq('random_oid')
|
18
18
|
end
|
19
19
|
|
20
|
+
it "returns false when registering an oid that already exists" do
|
21
|
+
allow(OpenSSL::ASN1::ObjectId).to receive(:register).and_raise(OpenSSL::ASN1::ASN1Error)
|
22
|
+
expect(R509::OIDMapper.register('1.4.3.2.1.2.7.4.4.4.4', 'someOtherName')).to eq(false)
|
23
|
+
end
|
24
|
+
|
20
25
|
it "registers a batch of new oids" do
|
21
26
|
expect { R509::Subject.new [['testOIDName', 'random_oid']] }.to raise_error(OpenSSL::X509::NameError, 'invalid field name')
|
22
27
|
expect { R509::Subject.new [['anotherOIDName', 'second_random']] }.to raise_error(OpenSSL::X509::NameError, 'invalid field name')
|
data/spec/spki_spec.rb
CHANGED
@@ -22,7 +22,7 @@ shared_examples_for "create spki with private key" do
|
|
22
22
|
when @key.rsa?
|
23
23
|
expect(spki.signature_algorithm).to(match(/sha256/i))
|
24
24
|
when @key.dsa?
|
25
|
-
expect(spki.signature_algorithm).to(match(/
|
25
|
+
expect(spki.signature_algorithm).to(match(/sha256/i))
|
26
26
|
end
|
27
27
|
spki.verify_signature
|
28
28
|
end
|
metadata
CHANGED
@@ -1,35 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: r509
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Paul Kehrer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
|
-
cert_chain:
|
11
|
-
-
|
12
|
-
-----BEGIN CERTIFICATE-----
|
13
|
-
MIIDPDCCAiSgAwIBAgIBAzANBgkqhkiG9w0BAQUFADBEMRYwFAYDVQQDDA1wYXVs
|
14
|
-
Lmwua2VocmVyMRUwEwYKCZImiZPyLGQBGRYFZ21haWwxEzARBgoJkiaJk/IsZAEZ
|
15
|
-
FgNjb20wHhcNMTYxMjA2MTUzMDAyWhcNMTcxMjA2MTUzMDAyWjBEMRYwFAYDVQQD
|
16
|
-
DA1wYXVsLmwua2VocmVyMRUwEwYKCZImiZPyLGQBGRYFZ21haWwxEzARBgoJkiaJ
|
17
|
-
k/IsZAEZFgNjb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDLVC6U
|
18
|
-
0ZyX4C4HllJxHW0Uq39bvRvfNXc0RXMSvIRklxjupx3EICVATpAJzg4qBxbpxRTe
|
19
|
-
XcsmuYfaZAriSH2M97C2sBJnVEAr63ws2vmBQKw9cXHV3RjQTeqQUTQudE790DTI
|
20
|
-
7pc1ObprB4pM2j3O6JtPVzmJ/PGACjtyg4bys6bx7JQJW5liunK26mS6w6mAAcAV
|
21
|
-
scAz7oh6fmOI0OSS45l3ycOEh5sb42cZzs7TNzcvVmEppTRa4wBP4/eDTuohxlPH
|
22
|
-
skuIPWcdU6YTo2LWwqEaGgUItj8lRqXGDcEZ1FhKyZ6HUD3l1zPGxojW8BKr0Svj
|
23
|
-
/cMP+y0YH5OeoD+vAgMBAAGjOTA3MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0G
|
24
|
-
A1UdDgQWBBRG/XG7L1orNzHDGQaIv97hRgJYajANBgkqhkiG9w0BAQUFAAOCAQEA
|
25
|
-
nhyFPJjIrxxka6vXSxaeSSLAJ6q/oeRqHxoJtT46JYPWeeT7j/vjFwS96oY5gWJk
|
26
|
-
STjSuGp+wFKKrdttswO2+GzpoTrOabQMw6kg1Y0hYXjJ5O52EDHmDPFKXK+yOYkK
|
27
|
-
GOAQZ8KXEnczOXTWiigLkwkEI5eH+vCMYSSvVpYlSmsgj6nYjl0K+XxWfXseBLv2
|
28
|
-
rLKOPJOyqpW2fuOxutEfQ3ZvgjeuzUnjXSuOuwZNrQSOODC2sYXyebd7UbjU+AsD
|
29
|
-
eJKxcHs4mnzJUqy/5FZbS/i8lMYMDy0elcc44zd+qDsY7zreRzpoB2XinMWV99vd
|
30
|
-
rHOwDzJDt8KFQ4zf0Bsrvg==
|
31
|
-
-----END CERTIFICATE-----
|
32
|
-
date: 2016-12-06 00:00:00.000000000 Z
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-11-02 00:00:00.000000000 Z
|
33
12
|
dependencies:
|
34
13
|
- !ruby/object:Gem::Dependency
|
35
14
|
name: rspec
|
@@ -82,9 +61,9 @@ executables:
|
|
82
61
|
extensions: []
|
83
62
|
extra_rdoc_files: []
|
84
63
|
files:
|
85
|
-
- CONTRIBUTING.
|
64
|
+
- CONTRIBUTING.md
|
86
65
|
- LICENSE
|
87
|
-
- README.
|
66
|
+
- README.md
|
88
67
|
- Rakefile
|
89
68
|
- bin/r509
|
90
69
|
- bin/r509-parse
|
@@ -356,7 +335,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
356
335
|
requirements:
|
357
336
|
- - ">="
|
358
337
|
- !ruby/object:Gem::Version
|
359
|
-
version:
|
338
|
+
version: '2.0'
|
360
339
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
361
340
|
requirements:
|
362
341
|
- - ">="
|
@@ -364,20 +343,20 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
364
343
|
version: '0'
|
365
344
|
requirements: []
|
366
345
|
rubyforge_project:
|
367
|
-
rubygems_version: 2.6.
|
346
|
+
rubygems_version: 2.6.14
|
368
347
|
signing_key:
|
369
348
|
specification_version: 4
|
370
349
|
summary: A (relatively) simple X.509 certification authority API
|
371
350
|
test_files:
|
351
|
+
- spec/oid_mapper_spec.rb
|
372
352
|
- spec/asn1_spec.rb
|
373
353
|
- spec/cert_spec.rb
|
374
|
-
- spec/csr_spec.rb
|
375
|
-
- spec/engine_spec.rb
|
376
|
-
- spec/message_digest_spec.rb
|
377
|
-
- spec/ocsp_spec.rb
|
378
|
-
- spec/oid_mapper_spec.rb
|
379
354
|
- spec/private_key_spec.rb
|
355
|
+
- spec/ocsp_spec.rb
|
356
|
+
- spec/validity_spec.rb
|
357
|
+
- spec/subject_spec.rb
|
380
358
|
- spec/r509_spec.rb
|
359
|
+
- spec/engine_spec.rb
|
360
|
+
- spec/csr_spec.rb
|
361
|
+
- spec/message_digest_spec.rb
|
381
362
|
- spec/spki_spec.rb
|
382
|
-
- spec/subject_spec.rb
|
383
|
-
- spec/validity_spec.rb
|
checksums.yaml.gz.sig
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
���EwX�Y�����թ"�}R'֔W2`���:ՙnL5�CW���ڼB����N�q+�y.wYFR!&C�*=}=uY�[�':�e����c��Z�K`�T'W��F�y��F%�^KUZ��+�+�&��ؙ�����贳�P��UN8+I8��n�Ctp�'9ۨ(���Z��P�8/`���2���{H���n �D��YO�
|
data.tar.gz.sig
DELETED
Binary file
|
metadata.gz.sig
DELETED
Binary file
|