Openssl 1.1.0h
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
#
|
||||
# SSLeay example configuration file.
|
||||
# This is mostly being used for generation of certificate requests.
|
||||
#
|
||||
|
||||
RANDFILE = ./.rnd
|
||||
|
||||
####################################################################
|
||||
[ req ]
|
||||
default_bits = 2048
|
||||
default_keyfile = keySS.pem
|
||||
distinguished_name = req_distinguished_name
|
||||
encrypt_rsa_key = no
|
||||
default_md = sha1
|
||||
|
||||
[ req_distinguished_name ]
|
||||
countryName = Country Name (2 letter code)
|
||||
countryName_default = AU
|
||||
countryName_value = AU
|
||||
|
||||
organizationName = Organization Name (eg, company)
|
||||
organizationName_value = Dodgy Brothers
|
||||
|
||||
commonName = Common Name (eg, YOUR name)
|
||||
commonName_value = Dodgy CA
|
||||
|
||||
####################################################################
|
||||
[ ca ]
|
||||
default_ca = CA_default # The default ca section
|
||||
|
||||
####################################################################
|
||||
[ CA_default ]
|
||||
|
||||
dir = ./demoCA # Where everything is kept
|
||||
certs = $dir/certs # Where the issued certs are kept
|
||||
crl_dir = $dir/crl # Where the issued crl are kept
|
||||
database = $dir/index.txt # database index file.
|
||||
#unique_subject = no # Set to 'no' to allow creation of
|
||||
# several certificates with same subject.
|
||||
new_certs_dir = $dir/newcerts # default place for new certs.
|
||||
|
||||
certificate = $dir/cacert.pem # The CA certificate
|
||||
serial = $dir/serial # The current serial number
|
||||
crl = $dir/crl.pem # The current CRL
|
||||
private_key = $dir/private/cakey.pem# The private key
|
||||
RANDFILE = $dir/private/.rand # private random number file
|
||||
|
||||
x509_extensions = v3_ca # The extensions to add to the cert
|
||||
|
||||
name_opt = ca_default # Subject Name options
|
||||
cert_opt = ca_default # Certificate field options
|
||||
|
||||
default_days = 365 # how long to certify for
|
||||
default_crl_days= 30 # how long before next CRL
|
||||
default_md = md5 # which md to use.
|
||||
preserve = no # keep passed DN ordering
|
||||
|
||||
policy = policy_anything
|
||||
|
||||
[ policy_anything ]
|
||||
countryName = optional
|
||||
stateOrProvinceName = optional
|
||||
localityName = optional
|
||||
organizationName = optional
|
||||
organizationalUnitName = optional
|
||||
commonName = supplied
|
||||
emailAddress = optional
|
||||
|
||||
|
||||
|
||||
[ v3_ca ]
|
||||
subjectKeyIdentifier=hash
|
||||
authorityKeyIdentifier=keyid:always,issuer:always
|
||||
basicConstraints = critical,CA:true,pathlen:1
|
||||
keyUsage = cRLSign, keyCertSign
|
||||
issuerAltName=issuer:copy
|
||||
@@ -0,0 +1,24 @@
|
||||
#
|
||||
# SSLeay example configuration file.
|
||||
# This is mostly being used for generation of certificate requests.
|
||||
#
|
||||
# hacked by iang to do DH certs - CA
|
||||
|
||||
RANDFILE = ./.rnd
|
||||
|
||||
####################################################################
|
||||
[ req ]
|
||||
distinguished_name = req_distinguished_name
|
||||
encrypt_rsa_key = no
|
||||
|
||||
[ req_distinguished_name ]
|
||||
countryName = Country Name (2 letter code)
|
||||
countryName_default = CU
|
||||
countryName_value = CU
|
||||
|
||||
organizationName = Organization Name (eg, company)
|
||||
organizationName_value = La Junta de la Revolucion
|
||||
|
||||
commonName = Common Name (eg, YOUR name)
|
||||
commonName_value = Junta
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
#
|
||||
# SSLeay example configuration file.
|
||||
# This is mostly being used for generation of certificate requests.
|
||||
#
|
||||
# hacked by iang to do DSA certs - CA
|
||||
|
||||
RANDFILE = ./.rnd
|
||||
|
||||
####################################################################
|
||||
[ req ]
|
||||
distinguished_name = req_distinguished_name
|
||||
encrypt_rsa_key = no
|
||||
|
||||
[ req_distinguished_name ]
|
||||
countryName = Country Name (2 letter code)
|
||||
countryName_default = ES
|
||||
countryName_value = ES
|
||||
|
||||
organizationName = Organization Name (eg, company)
|
||||
organizationName_value = Hermanos Locos
|
||||
|
||||
commonName = Common Name (eg, YOUR name)
|
||||
commonName_value = Hermanos Locos CA
|
||||
@@ -0,0 +1,24 @@
|
||||
#
|
||||
# SSLeay example configuration file.
|
||||
# This is mostly being used for generation of certificate requests.
|
||||
#
|
||||
# create RSA certs - CA
|
||||
|
||||
RANDFILE = ./.rnd
|
||||
|
||||
####################################################################
|
||||
[ req ]
|
||||
distinguished_name = req_distinguished_name
|
||||
encrypt_key = no
|
||||
|
||||
[ req_distinguished_name ]
|
||||
countryName = Country Name (2 letter code)
|
||||
countryName_default = ES
|
||||
countryName_value = ES
|
||||
|
||||
organizationName = Organization Name (eg, company)
|
||||
organizationName_value = Hermanos Locos
|
||||
|
||||
commonName = Common Name (eg, YOUR name)
|
||||
commonName_value = Hermanos Locos CA
|
||||
|
||||
+163
@@ -0,0 +1,163 @@
|
||||
|
||||
#
|
||||
# This config is used by the Time Stamp Authority tests.
|
||||
#
|
||||
|
||||
RANDFILE = ./.rnd
|
||||
|
||||
# Extra OBJECT IDENTIFIER info:
|
||||
oid_section = new_oids
|
||||
|
||||
TSDNSECT = ts_cert_dn
|
||||
INDEX = 1
|
||||
|
||||
[ new_oids ]
|
||||
|
||||
# Policies used by the TSA tests.
|
||||
tsa_policy1 = 1.2.3.4.1
|
||||
tsa_policy2 = 1.2.3.4.5.6
|
||||
tsa_policy3 = 1.2.3.4.5.7
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
[ ca ]
|
||||
default_ca = CA_default # The default ca section
|
||||
|
||||
[ CA_default ]
|
||||
|
||||
dir = ./demoCA
|
||||
certs = $dir/certs # Where the issued certs are kept
|
||||
database = $dir/index.txt # database index file.
|
||||
new_certs_dir = $dir/newcerts # default place for new certs.
|
||||
|
||||
certificate = $dir/cacert.pem # The CA certificate
|
||||
serial = $dir/serial # The current serial number
|
||||
private_key = $dir/private/cakey.pem# The private key
|
||||
RANDFILE = $dir/private/.rand # private random number file
|
||||
|
||||
default_days = 365 # how long to certify for
|
||||
default_md = sha256 # which md to use.
|
||||
preserve = no # keep passed DN ordering
|
||||
|
||||
policy = policy_match
|
||||
|
||||
# For the CA policy
|
||||
[ policy_match ]
|
||||
countryName = supplied
|
||||
stateOrProvinceName = supplied
|
||||
organizationName = supplied
|
||||
organizationalUnitName = optional
|
||||
commonName = supplied
|
||||
emailAddress = optional
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
[ req ]
|
||||
default_bits = 2048
|
||||
default_md = sha1
|
||||
distinguished_name = $ENV::TSDNSECT
|
||||
encrypt_rsa_key = no
|
||||
prompt = no
|
||||
# attributes = req_attributes
|
||||
x509_extensions = v3_ca # The extensions to add to the self signed cert
|
||||
|
||||
string_mask = nombstr
|
||||
|
||||
[ ts_ca_dn ]
|
||||
countryName = HU
|
||||
stateOrProvinceName = Budapest
|
||||
localityName = Budapest
|
||||
organizationName = Gov-CA Ltd.
|
||||
commonName = ca1
|
||||
|
||||
[ ts_cert_dn ]
|
||||
countryName = HU
|
||||
stateOrProvinceName = Budapest
|
||||
localityName = Buda
|
||||
organizationName = Hun-TSA Ltd.
|
||||
commonName = tsa$ENV::INDEX
|
||||
|
||||
[ tsa_cert ]
|
||||
|
||||
# TSA server cert is not a CA cert.
|
||||
basicConstraints=CA:FALSE
|
||||
|
||||
# The following key usage flags are needed for TSA server certificates.
|
||||
keyUsage = nonRepudiation, digitalSignature
|
||||
extendedKeyUsage = critical,timeStamping
|
||||
|
||||
# PKIX recommendations harmless if included in all certificates.
|
||||
subjectKeyIdentifier=hash
|
||||
authorityKeyIdentifier=keyid,issuer:always
|
||||
|
||||
[ non_tsa_cert ]
|
||||
|
||||
# This is not a CA cert and not a TSA cert, either (timeStamping usage missing)
|
||||
basicConstraints=CA:FALSE
|
||||
|
||||
# The following key usage flags are needed for TSA server certificates.
|
||||
keyUsage = nonRepudiation, digitalSignature
|
||||
# timeStamping is not supported by this certificate
|
||||
# extendedKeyUsage = critical,timeStamping
|
||||
|
||||
# PKIX recommendations harmless if included in all certificates.
|
||||
subjectKeyIdentifier=hash
|
||||
authorityKeyIdentifier=keyid,issuer:always
|
||||
|
||||
[ v3_req ]
|
||||
|
||||
# Extensions to add to a certificate request
|
||||
basicConstraints = CA:FALSE
|
||||
keyUsage = nonRepudiation, digitalSignature
|
||||
|
||||
[ v3_ca ]
|
||||
|
||||
# Extensions for a typical CA
|
||||
|
||||
subjectKeyIdentifier=hash
|
||||
authorityKeyIdentifier=keyid:always,issuer:always
|
||||
basicConstraints = critical,CA:true
|
||||
keyUsage = cRLSign, keyCertSign
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
[ tsa ]
|
||||
|
||||
default_tsa = tsa_config1 # the default TSA section
|
||||
|
||||
[ tsa_config1 ]
|
||||
|
||||
# These are used by the TSA reply generation only.
|
||||
dir = . # TSA root directory
|
||||
serial = $dir/tsa_serial # The current serial number (mandatory)
|
||||
signer_cert = $dir/tsa_cert1.pem # The TSA signing certificate
|
||||
# (optional)
|
||||
certs = $dir/tsaca.pem # Certificate chain to include in reply
|
||||
# (optional)
|
||||
signer_key = $dir/tsa_key1.pem # The TSA private key (optional)
|
||||
signer_digest = sha256 # Signing digest to use. (Optional)
|
||||
default_policy = tsa_policy1 # Policy if request did not specify it
|
||||
# (optional)
|
||||
other_policies = tsa_policy2, tsa_policy3 # acceptable policies (optional)
|
||||
digests = sha1, sha256, sha384, sha512 # Acceptable message digests (mandatory)
|
||||
accuracy = secs:1, millisecs:500, microsecs:100 # (optional)
|
||||
ordering = yes # Is ordering defined for timestamps?
|
||||
# (optional, default: no)
|
||||
tsa_name = yes # Must the TSA name be included in the reply?
|
||||
# (optional, default: no)
|
||||
ess_cert_id_chain = yes # Must the ESS cert id chain be included?
|
||||
# (optional, default: no)
|
||||
|
||||
[ tsa_config2 ]
|
||||
|
||||
# This configuration uses a certificate which doesn't have timeStamping usage.
|
||||
# These are used by the TSA reply generation only.
|
||||
dir = . # TSA root directory
|
||||
serial = $dir/tsa_serial # The current serial number (mandatory)
|
||||
signer_cert = $dir/tsa_cert2.pem # The TSA signing certificate
|
||||
# (optional)
|
||||
certs = $dir/demoCA/cacert.pem# Certificate chain to include in reply
|
||||
# (optional)
|
||||
signer_key = $dir/tsa_key2.pem # The TSA private key (optional)
|
||||
signer_digest = sha256 # Signing digest to use. (Optional)
|
||||
default_policy = tsa_policy1 # Policy if request did not specify it
|
||||
# (optional)
|
||||
other_policies = tsa_policy2, tsa_policy3 # acceptable policies (optional)
|
||||
digests = sha1, sha256, sha384, sha512 # Acceptable message digests (mandatory)
|
||||
@@ -0,0 +1,37 @@
|
||||
#
|
||||
# SSLeay example configuration file.
|
||||
# This is mostly being used for generation of certificate requests.
|
||||
#
|
||||
|
||||
RANDFILE = ./.rnd
|
||||
|
||||
####################################################################
|
||||
[ req ]
|
||||
default_bits = 2048
|
||||
default_keyfile = keySS.pem
|
||||
distinguished_name = req_distinguished_name
|
||||
encrypt_rsa_key = no
|
||||
default_md = sha256
|
||||
|
||||
[ req_distinguished_name ]
|
||||
countryName = Country Name (2 letter code)
|
||||
countryName_default = AU
|
||||
countryName_value = AU
|
||||
|
||||
organizationName = Organization Name (eg, company)
|
||||
organizationName_value = Dodgy Brothers
|
||||
|
||||
0.commonName = Common Name (eg, YOUR name)
|
||||
0.commonName_value = Brother 1
|
||||
|
||||
1.commonName = Common Name (eg, YOUR name)
|
||||
1.commonName_value = Brother 2
|
||||
|
||||
2.commonName = Common Name (eg, YOUR name)
|
||||
2.commonName_value = Proxy 1
|
||||
|
||||
[ v3_proxy ]
|
||||
basicConstraints=CA:FALSE
|
||||
subjectKeyIdentifier=hash
|
||||
authorityKeyIdentifier=keyid,issuer:always
|
||||
proxyCertInfo=critical,language:id-ppl-anyLanguage,pathlen:1,policy:text:AB
|
||||
@@ -0,0 +1,45 @@
|
||||
#
|
||||
# SSLeay example configuration file.
|
||||
# This is mostly being used for generation of certificate requests.
|
||||
#
|
||||
|
||||
RANDFILE = ./.rnd
|
||||
|
||||
####################################################################
|
||||
[ req ]
|
||||
default_bits = 2048
|
||||
default_keyfile = keySS.pem
|
||||
distinguished_name = req_distinguished_name
|
||||
encrypt_rsa_key = no
|
||||
default_md = sha256
|
||||
|
||||
[ req_distinguished_name ]
|
||||
countryName = Country Name (2 letter code)
|
||||
countryName_default = AU
|
||||
countryName_value = AU
|
||||
|
||||
organizationName = Organization Name (eg, company)
|
||||
organizationName_value = Dodgy Brothers
|
||||
|
||||
0.commonName = Common Name (eg, YOUR name)
|
||||
0.commonName_value = Brother 1
|
||||
|
||||
1.commonName = Common Name (eg, YOUR name)
|
||||
1.commonName_value = Brother 2
|
||||
|
||||
2.commonName = Common Name (eg, YOUR name)
|
||||
2.commonName_value = Proxy 1
|
||||
|
||||
3.commonName = Common Name (eg, YOUR name)
|
||||
3.commonName_value = Proxy 2
|
||||
|
||||
[ v3_proxy ]
|
||||
basicConstraints=CA:FALSE
|
||||
subjectKeyIdentifier=hash
|
||||
authorityKeyIdentifier=keyid,issuer:always
|
||||
proxyCertInfo=critical,@proxy_ext
|
||||
|
||||
[ proxy_ext ]
|
||||
language=id-ppl-anyLanguage
|
||||
pathlen=0
|
||||
policy=text:BC
|
||||
+109
@@ -0,0 +1,109 @@
|
||||
How to add recipes
|
||||
==================
|
||||
|
||||
For any test that you want to perform, you write a script located in
|
||||
test/recipes/, named {nn}-test_{name}.t, where {nn} is a two digit number and
|
||||
{name} is a unique name of your choice.
|
||||
|
||||
Please note that if a test involves a new testing executable, you will need to
|
||||
do some additions in test/Makefile. More on this later.
|
||||
|
||||
|
||||
Naming conventions
|
||||
=================
|
||||
|
||||
A test executable is named test/{name}test.c
|
||||
|
||||
A test recipe is named test/recipes/{nn}-test_{name}.t, where {nn} is a two
|
||||
digit number and {name} is a unique name of your choice.
|
||||
|
||||
The number {nn} is (somewhat loosely) grouped as follows:
|
||||
|
||||
00-04 sanity, internal and essential API tests
|
||||
05-09 individual symmetric cipher algorithms
|
||||
10-14 math (bignum)
|
||||
15-19 individual asymmetric cipher algorithms
|
||||
20-24 openssl commands (some otherwise not tested)
|
||||
25-29 certificate forms, generation and verification
|
||||
30-35 engine and evp
|
||||
60-79 APIs
|
||||
70 PACKET layer
|
||||
80-89 "larger" protocols (CA, CMS, OCSP, SSL, TSA)
|
||||
90-99 misc
|
||||
|
||||
|
||||
A recipe that just runs a test executable
|
||||
=========================================
|
||||
|
||||
A script that just runs a program looks like this:
|
||||
|
||||
#! /usr/bin/perl
|
||||
|
||||
use OpenSSL::Test::Simple;
|
||||
|
||||
simple_test("test_{name}", "{name}test", "{name}");
|
||||
|
||||
{name} is the unique name you have chosen for your test.
|
||||
|
||||
The second argument to `simple_test' is the test executable, and `simple_test'
|
||||
expects it to be located in test/
|
||||
|
||||
For documentation on OpenSSL::Test::Simple, do
|
||||
`perldoc test/testlib/OpenSSL/Test/Simple.pm'.
|
||||
|
||||
|
||||
A recipe that runs a more complex test
|
||||
======================================
|
||||
|
||||
For more complex tests, you will need to read up on Test::More and
|
||||
OpenSSL::Test. Test::More is normally preinstalled, do `man Test::More' for
|
||||
documentation. For OpenSSL::Test, do `perldoc test/testlib/OpenSSL/Test.pm'.
|
||||
|
||||
A script to start from could be this:
|
||||
|
||||
#! /usr/bin/perl
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use OpenSSL::Test;
|
||||
|
||||
setup("test_{name}");
|
||||
|
||||
plan tests => 2; # The number of tests being performed
|
||||
|
||||
ok(test1, "test1");
|
||||
ok(test2, "test1");
|
||||
|
||||
sub test1
|
||||
{
|
||||
# test feature 1
|
||||
}
|
||||
|
||||
sub test2
|
||||
{
|
||||
# test feature 2
|
||||
}
|
||||
|
||||
|
||||
Changes to test/Makefile
|
||||
========================
|
||||
|
||||
Whenever a new test involves a new test executable you need to do the
|
||||
following (at all times, replace {NAME} and {name} with the name of your
|
||||
test):
|
||||
|
||||
* among the variables for test executables at the beginning, add a line like
|
||||
this:
|
||||
|
||||
{NAME}TEST= {name}test
|
||||
|
||||
* add `$({NAME}TEST)$(EXE_EXT)' to the assignment of EXE:
|
||||
|
||||
* add `$({NAME}TEST).o' to the assignment of OBJ:
|
||||
|
||||
* add `$({NAME}TEST).c' to the assignment of SRC:
|
||||
|
||||
* add the following lines for building the executable:
|
||||
|
||||
$({NAME}TEST)$(EXE_EXT): $({NAME}TEST).o $(DLIBCRYPTO)
|
||||
@target=$({NAME}TEST); $(BUILD_CMD)
|
||||
@@ -0,0 +1,274 @@
|
||||
# SSL tests
|
||||
|
||||
SSL testcases are configured in the `ssl-tests` directory.
|
||||
|
||||
Each `ssl_*.conf.in` file contains a number of test configurations. These files
|
||||
are used to generate testcases in the OpenSSL CONF format.
|
||||
|
||||
The precise test output can be dependent on the library configuration. The test
|
||||
harness generates the output files on the fly.
|
||||
|
||||
However, for verification, we also include checked-in configuration outputs
|
||||
corresponding to the default configuration. These testcases live in
|
||||
`test/ssl-tests/*.conf` files.
|
||||
|
||||
For more details, see `ssl-tests/01-simple.conf.in` for an example.
|
||||
|
||||
## Configuring the test
|
||||
|
||||
First, give your test a name. The names do not have to be unique.
|
||||
|
||||
An example test input looks like this:
|
||||
|
||||
```
|
||||
{
|
||||
name => "test-default",
|
||||
server => { "CipherString" => "DEFAULT" },
|
||||
client => { "CipherString" => "DEFAULT" },
|
||||
test => { "ExpectedResult" => "Success" },
|
||||
}
|
||||
```
|
||||
|
||||
The test section supports the following options
|
||||
|
||||
### Test mode
|
||||
|
||||
* Method - the method to test. One of DTLS or TLS.
|
||||
|
||||
* HandshakeMode - which handshake flavour to test:
|
||||
- Simple - plain handshake (default)
|
||||
- Resume - test resumption
|
||||
- RenegotiateServer - test server initiated renegotiation
|
||||
- RenegotiateClient - test client initiated renegotiation
|
||||
|
||||
When HandshakeMode is Resume or Renegotiate, the original handshake is expected
|
||||
to succeed. All configured test expectations are verified against the second
|
||||
handshake.
|
||||
|
||||
* ApplicationData - amount of application data bytes to send (integer, defaults
|
||||
to 256 bytes). Applies to both client and server. Application data is sent in
|
||||
64kB chunks (but limited by MaxFragmentSize and available parallelization, see
|
||||
below).
|
||||
|
||||
* MaxFragmentSize - maximum send fragment size (integer, defaults to 512 in
|
||||
tests - see `SSL_CTX_set_max_send_fragment` for documentation). Applies to
|
||||
both client and server. Lowering the fragment size will split handshake and
|
||||
application data up between more `SSL_write` calls, thus allowing to exercise
|
||||
different code paths. In particular, if the buffer size (64kB) is at least
|
||||
four times as large as the maximum fragment, interleaved multi-buffer crypto
|
||||
implementations may be used on some platforms.
|
||||
|
||||
### Test expectations
|
||||
|
||||
* ExpectedResult - expected handshake outcome. One of
|
||||
- Success - handshake success
|
||||
- ServerFail - serverside handshake failure
|
||||
- ClientFail - clientside handshake failure
|
||||
- InternalError - some other error
|
||||
|
||||
* ExpectedClientAlert, ExpectedServerAlert - expected alert. See
|
||||
`ssl_test_ctx.c` for known values. Note: the expected alert is currently
|
||||
matched against the _last_ received alert (i.e., a fatal alert or a
|
||||
`close_notify`). Warning alert expectations are not yet supported. (A warning
|
||||
alert will not be correctly matched, if followed by a `close_notify` or
|
||||
another alert.)
|
||||
|
||||
* ExpectedProtocol - expected negotiated protocol. One of
|
||||
SSLv3, TLSv1, TLSv1.1, TLSv1.2.
|
||||
|
||||
* SessionTicketExpected - whether or not a session ticket is expected
|
||||
- Ignore - do not check for a session ticket (default)
|
||||
- Yes - a session ticket is expected
|
||||
- No - a session ticket is not expected
|
||||
|
||||
* ResumptionExpected - whether or not resumption is expected (Resume mode only)
|
||||
- Yes - resumed handshake
|
||||
- No - full handshake (default)
|
||||
|
||||
* ExpectedNPNProtocol, ExpectedALPNProtocol - NPN and ALPN expectations.
|
||||
|
||||
* ExpectedTmpKeyType - the expected algorithm or curve of server temp key
|
||||
|
||||
## Configuring the client and server
|
||||
|
||||
The client and server configurations can be any valid `SSL_CTX`
|
||||
configurations. For details, see the manpages for `SSL_CONF_cmd`.
|
||||
|
||||
Give your configurations as a dictionary of CONF commands, e.g.
|
||||
|
||||
```
|
||||
server => {
|
||||
"CipherString" => "DEFAULT",
|
||||
"MinProtocol" => "TLSv1",
|
||||
}
|
||||
```
|
||||
|
||||
The following sections may optionally be defined:
|
||||
|
||||
* server2 - this section configures a secondary context that is selected via the
|
||||
ServerName test option. This context is used whenever a ServerNameCallback is
|
||||
specified. If the server2 section is not present, then the configuration
|
||||
matches server.
|
||||
* resume_server - this section configures the client to resume its session
|
||||
against a different server. This context is used whenever HandshakeMode is
|
||||
Resume. If the resume_server section is not present, then the configuration
|
||||
matches server.
|
||||
* resume_client - this section configures the client to resume its session with
|
||||
a different configuration. In practice this may occur when, for example,
|
||||
upgraded clients reuse sessions persisted on disk. This context is used
|
||||
whenever HandshakeMode is Resume. If the resume_client section is not present,
|
||||
then the configuration matches client.
|
||||
|
||||
### Configuring callbacks and additional options
|
||||
|
||||
Additional handshake settings can be configured in the `extra` section of each
|
||||
client and server:
|
||||
|
||||
```
|
||||
client => {
|
||||
"CipherString" => "DEFAULT",
|
||||
extra => {
|
||||
"ServerName" => "server2",
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### Supported client-side options
|
||||
|
||||
* ClientVerifyCallback - the client's custom certificate verify callback.
|
||||
Used to test callback behaviour. One of
|
||||
- None - no custom callback (default)
|
||||
- AcceptAll - accepts all certificates.
|
||||
- RejectAll - rejects all certificates.
|
||||
|
||||
* ServerName - the server the client should attempt to connect to. One of
|
||||
- None - do not use SNI (default)
|
||||
- server1 - the initial context
|
||||
- server2 - the secondary context
|
||||
- invalid - an unknown context
|
||||
|
||||
* CTValidation - Certificate Transparency validation strategy. One of
|
||||
- None - no validation (default)
|
||||
- Permissive - SSL_CT_VALIDATION_PERMISSIVE
|
||||
- Strict - SSL_CT_VALIDATION_STRICT
|
||||
|
||||
#### Supported server-side options
|
||||
|
||||
* ServerNameCallback - the SNI switching callback to use
|
||||
- None - no callback (default)
|
||||
- IgnoreMismatch - continue the handshake on SNI mismatch
|
||||
- RejectMismatch - abort the handshake on SNI mismatch
|
||||
|
||||
* BrokenSessionTicket - a special test case where the session ticket callback
|
||||
does not initialize crypto.
|
||||
- No (default)
|
||||
- Yes
|
||||
|
||||
#### Mutually supported options
|
||||
|
||||
* NPNProtocols, ALPNProtocols - NPN and ALPN settings. Server and client
|
||||
protocols can be specified as a comma-separated list, and a callback with the
|
||||
recommended behaviour will be installed automatically.
|
||||
|
||||
### Default server and client configurations
|
||||
|
||||
The default server certificate and CA files are added to the configurations
|
||||
automatically. Server certificate verification is requested by default.
|
||||
|
||||
You can override these options by redefining them:
|
||||
|
||||
```
|
||||
client => {
|
||||
"VerifyCAFile" => "/path/to/custom/file"
|
||||
}
|
||||
```
|
||||
|
||||
or by deleting them
|
||||
|
||||
```
|
||||
client => {
|
||||
"VerifyCAFile" => undef
|
||||
}
|
||||
```
|
||||
|
||||
## Adding a test to the test harness
|
||||
|
||||
1. Add a new test configuration to `test/ssl-tests`, following the examples of
|
||||
existing `*.conf.in` files (for example, `01-simple.conf.in`).
|
||||
|
||||
2. Generate the generated `*.conf` test input file. You can do so by running
|
||||
`generate_ssl_tests.pl`:
|
||||
|
||||
```
|
||||
$ ./config
|
||||
$ cd test
|
||||
$ TOP=.. perl -I testlib/ generate_ssl_tests.pl ssl-tests/my.conf.in \
|
||||
> ssl-tests/my.conf
|
||||
```
|
||||
|
||||
where `my.conf.in` is your test input file.
|
||||
|
||||
For example, to generate the test cases in `ssl-tests/01-simple.conf.in`, do
|
||||
|
||||
```
|
||||
$ TOP=.. perl -I testlib/ generate_ssl_tests.pl ssl-tests/01-simple.conf.in > ssl-tests/01-simple.conf
|
||||
```
|
||||
|
||||
Alternatively (hackish but simple), you can comment out
|
||||
|
||||
```
|
||||
unlink glob $tmp_file;
|
||||
```
|
||||
|
||||
in `test/recipes/80-test_ssl_new.t` and run
|
||||
|
||||
```
|
||||
$ make TESTS=test_ssl_new test
|
||||
```
|
||||
|
||||
This will save the generated output in a `*.tmp` file in the build directory.
|
||||
|
||||
3. Update the number of tests planned in `test/recipes/80-test_ssl_new.t`. If
|
||||
the test suite has any skip conditions, update those too (see
|
||||
`test/recipes/80-test_ssl_new.t` for details).
|
||||
|
||||
## Running the tests with the test harness
|
||||
|
||||
```
|
||||
HARNESS_VERBOSE=yes make TESTS=test_ssl_new test
|
||||
```
|
||||
|
||||
## Running a test manually
|
||||
|
||||
These steps are only needed during development. End users should run `make test`
|
||||
or follow the instructions above to run the SSL test suite.
|
||||
|
||||
To run an SSL test manually from the command line, the `TEST_CERTS_DIR`
|
||||
environment variable to point to the location of the certs. E.g., from the root
|
||||
OpenSSL directory, do
|
||||
|
||||
```
|
||||
$ CTLOG_FILE=test/ct/log_list.conf TEST_CERTS_DIR=test/certs test/ssl_test \
|
||||
test/ssl-tests/01-simple.conf
|
||||
```
|
||||
|
||||
or for shared builds
|
||||
|
||||
```
|
||||
$ CTLOG_FILE=test/ct/log_list.conf TEST_CERTS_DIR=test/certs \
|
||||
util/shlib_wrap.sh test/ssl_test test/ssl-tests/01-simple.conf
|
||||
```
|
||||
|
||||
Note that the test expectations sometimes depend on the Configure settings. For
|
||||
example, the negotiated protocol depends on the set of available (enabled)
|
||||
protocols: a build with `enable-ssl3` has different test expectations than a
|
||||
build with `no-ssl3`.
|
||||
|
||||
The Perl test harness automatically generates expected outputs, so users who
|
||||
just run `make test` do not need any extra steps.
|
||||
|
||||
However, when running a test manually, keep in mind that the repository version
|
||||
of the generated `test/ssl-tests/*.conf` correspond to expected outputs in with
|
||||
the default Configure options. To run `ssl_test` manually from the command line
|
||||
in a build with a different configuration, you may need to generate the right
|
||||
`*.conf` file from the `*.conf.in` input first.
|
||||
@@ -0,0 +1,27 @@
|
||||
#
|
||||
# SSLeay example configuration file.
|
||||
# This is mostly being used for generation of certificate requests.
|
||||
#
|
||||
# hacked by iang to do DSA certs - Server
|
||||
|
||||
RANDFILE = ./.rnd
|
||||
|
||||
####################################################################
|
||||
[ req ]
|
||||
distinguished_name = req_distinguished_name
|
||||
encrypt_rsa_key = no
|
||||
|
||||
[ req_distinguished_name ]
|
||||
countryName = Country Name (2 letter code)
|
||||
countryName_default = ES
|
||||
countryName_value = ES
|
||||
|
||||
organizationName = Organization Name (eg, company)
|
||||
organizationName_value = Tortilleras S.A.
|
||||
|
||||
0.commonName = Common Name (eg, YOUR name)
|
||||
0.commonName_value = Torti
|
||||
|
||||
1.commonName = Common Name (eg, YOUR name)
|
||||
1.commonName_value = Gordita
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
#
|
||||
# SSLeay example configuration file.
|
||||
# This is mostly being used for generation of certificate requests.
|
||||
#
|
||||
# create RSA certs - Server
|
||||
|
||||
RANDFILE = ./.rnd
|
||||
|
||||
####################################################################
|
||||
[ req ]
|
||||
distinguished_name = req_distinguished_name
|
||||
encrypt_key = no
|
||||
|
||||
[ req_distinguished_name ]
|
||||
countryName = Country Name (2 letter code)
|
||||
countryName_default = ES
|
||||
countryName_value = ES
|
||||
|
||||
organizationName = Organization Name (eg, company)
|
||||
organizationName_value = Tortilleras S.A.
|
||||
|
||||
0.commonName = Common Name (eg, YOUR name)
|
||||
0.commonName_value = Torti
|
||||
|
||||
1.commonName = Common Name (eg, YOUR name)
|
||||
1.commonName_value = Gordita
|
||||
@@ -0,0 +1,41 @@
|
||||
#
|
||||
# SSLeay example configuration file.
|
||||
# This is mostly being used for generation of certificate requests.
|
||||
#
|
||||
|
||||
RANDFILE = ./.rnd
|
||||
CN2 = Brother 2
|
||||
|
||||
####################################################################
|
||||
[ req ]
|
||||
default_bits = 2048
|
||||
default_keyfile = keySS.pem
|
||||
distinguished_name = req_distinguished_name
|
||||
encrypt_rsa_key = no
|
||||
default_md = sha256
|
||||
prompt = no
|
||||
|
||||
[ req_distinguished_name ]
|
||||
countryName = AU
|
||||
organizationName = Dodgy Brothers
|
||||
0.commonName = Brother 1
|
||||
1.commonName = $ENV::CN2
|
||||
|
||||
[ v3_ee ]
|
||||
subjectKeyIdentifier=hash
|
||||
authorityKeyIdentifier=keyid,issuer:always
|
||||
basicConstraints = CA:false
|
||||
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
|
||||
|
||||
[ v3_ee_dsa ]
|
||||
subjectKeyIdentifier=hash
|
||||
authorityKeyIdentifier=keyid:always
|
||||
basicConstraints = CA:false
|
||||
keyUsage = nonRepudiation, digitalSignature
|
||||
|
||||
[ v3_ee_ec ]
|
||||
subjectKeyIdentifier=hash
|
||||
authorityKeyIdentifier=keyid:always
|
||||
basicConstraints = CA:false
|
||||
keyUsage = nonRepudiation, digitalSignature, keyAgreement
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
/*
|
||||
* Copyright 2016 The OpenSSL Project Authors. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the OpenSSL license (the "License"). You may not use
|
||||
* this file except in compliance with the License. You can obtain a copy
|
||||
* in the file LICENSE in the source distribution or at
|
||||
* https://www.openssl.org/source/license.html
|
||||
*/
|
||||
|
||||
#include <openssl/crypto.h>
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
OPENSSL_die("Voluntary abort", __FILE__, __LINE__);
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,133 @@
|
||||
/*
|
||||
* Copyright 2016 The OpenSSL Project Authors. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the OpenSSL license (the "License"). You may not use
|
||||
* this file except in compliance with the License. You can obtain a copy
|
||||
* in the file LICENSE in the source distribution or at
|
||||
* https://www.openssl.org/source/license.html
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <openssl/opensslconf.h>
|
||||
|
||||
#ifndef OPENSSL_NO_AFALGENG
|
||||
# include <linux/version.h>
|
||||
# define K_MAJ 4
|
||||
# define K_MIN1 1
|
||||
# define K_MIN2 0
|
||||
# if LINUX_VERSION_CODE < KERNEL_VERSION(K_MAJ, K_MIN1, K_MIN2)
|
||||
/*
|
||||
* If we get here then it looks like there is a mismatch between the linux
|
||||
* headers and the actual kernel version, so we have tried to compile with
|
||||
* afalg support, but then skipped it in e_afalg.c. As far as this test is
|
||||
* concerned we behave as if we had been configured without support
|
||||
*/
|
||||
# define OPENSSL_NO_AFALGENG
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifndef OPENSSL_NO_AFALGENG
|
||||
#include <string.h>
|
||||
#include <openssl/engine.h>
|
||||
#include <openssl/evp.h>
|
||||
#include <openssl/rand.h>
|
||||
|
||||
/* Use a buffer size which is not aligned to block size */
|
||||
#define BUFFER_SIZE (8 * 1024) - 13
|
||||
|
||||
static int test_afalg_aes_128_cbc(ENGINE *e)
|
||||
{
|
||||
EVP_CIPHER_CTX *ctx;
|
||||
const EVP_CIPHER *cipher = EVP_aes_128_cbc();
|
||||
unsigned char key[] = "\x5F\x4D\xCC\x3B\x5A\xA7\x65\xD6\
|
||||
\x1D\x83\x27\xDE\xB8\x82\xCF\x99";
|
||||
unsigned char iv[] = "\x2B\x95\x99\x0A\x91\x51\x37\x4A\
|
||||
\xBD\x8F\xF8\xC5\xA7\xA0\xFE\x08";
|
||||
|
||||
unsigned char in[BUFFER_SIZE];
|
||||
unsigned char ebuf[BUFFER_SIZE + 32];
|
||||
unsigned char dbuf[BUFFER_SIZE + 32];
|
||||
int encl, encf, decl, decf;
|
||||
unsigned int status = 0;
|
||||
|
||||
ctx = EVP_CIPHER_CTX_new();
|
||||
if (ctx == NULL) {
|
||||
fprintf(stderr, "%s() failed to allocate ctx\n", __func__);
|
||||
return 0;
|
||||
}
|
||||
RAND_bytes(in, BUFFER_SIZE);
|
||||
|
||||
if ( !EVP_CipherInit_ex(ctx, cipher, e, key, iv, 1)
|
||||
|| !EVP_CipherUpdate(ctx, ebuf, &encl, in, BUFFER_SIZE)
|
||||
|| !EVP_CipherFinal_ex(ctx, ebuf+encl, &encf)) {
|
||||
fprintf(stderr, "%s() failed encryption\n", __func__);
|
||||
goto end;
|
||||
}
|
||||
encl += encf;
|
||||
|
||||
if ( !EVP_CIPHER_CTX_reset(ctx)
|
||||
|| !EVP_CipherInit_ex(ctx, cipher, e, key, iv, 0)
|
||||
|| !EVP_CipherUpdate(ctx, dbuf, &decl, ebuf, encl)
|
||||
|| !EVP_CipherFinal_ex(ctx, dbuf+decl, &decf)) {
|
||||
fprintf(stderr, "%s() failed decryption\n", __func__);
|
||||
goto end;
|
||||
}
|
||||
decl += decf;
|
||||
|
||||
if ( decl != BUFFER_SIZE
|
||||
|| memcmp(dbuf, in, BUFFER_SIZE)) {
|
||||
fprintf(stderr, "%s() failed Dec(Enc(P)) != P\n", __func__);
|
||||
goto end;
|
||||
}
|
||||
|
||||
status = 1;
|
||||
|
||||
end:
|
||||
EVP_CIPHER_CTX_free(ctx);
|
||||
return status;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
ENGINE *e;
|
||||
|
||||
CRYPTO_set_mem_debug(1);
|
||||
CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON);
|
||||
|
||||
ENGINE_load_builtin_engines();
|
||||
|
||||
# ifndef OPENSSL_NO_STATIC_ENGINE
|
||||
OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_AFALG, NULL);
|
||||
# endif
|
||||
|
||||
e = ENGINE_by_id("afalg");
|
||||
if (e == NULL) {
|
||||
/*
|
||||
* A failure to load is probably a platform environment problem so we
|
||||
* don't treat this as an OpenSSL test failure, i.e. we return 0
|
||||
*/
|
||||
fprintf(stderr,
|
||||
"AFALG Test: Failed to load AFALG Engine - skipping test\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (test_afalg_aes_128_cbc(e) == 0) {
|
||||
ENGINE_free(e);
|
||||
return 1;
|
||||
}
|
||||
|
||||
ENGINE_free(e);
|
||||
printf("PASS\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
#else /* OPENSSL_NO_AFALGENG */
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
fprintf(stderr, "AFALG not supported - skipping AFALG tests\n");
|
||||
printf("PASS\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,382 @@
|
||||
/*
|
||||
* Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the OpenSSL licenses, (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
* https://www.openssl.org/source/license.html
|
||||
* or in the file LICENSE in the source distribution.
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
#include <openssl/ssl.h>
|
||||
#include <openssl/bio.h>
|
||||
#include <openssl/err.h>
|
||||
|
||||
#include "../ssl/packet_locl.h"
|
||||
|
||||
#include "ssltestlib.h"
|
||||
|
||||
/* Should we fragment records or not? 0 = no, !0 = yes*/
|
||||
static int fragment = 0;
|
||||
|
||||
static int async_new(BIO *bi);
|
||||
static int async_free(BIO *a);
|
||||
static int async_read(BIO *b, char *out, int outl);
|
||||
static int async_write(BIO *b, const char *in, int inl);
|
||||
static long async_ctrl(BIO *b, int cmd, long num, void *ptr);
|
||||
static int async_gets(BIO *bp, char *buf, int size);
|
||||
static int async_puts(BIO *bp, const char *str);
|
||||
|
||||
/* Choose a sufficiently large type likely to be unused for this custom BIO */
|
||||
# define BIO_TYPE_ASYNC_FILTER (0x80 | BIO_TYPE_FILTER)
|
||||
|
||||
static BIO_METHOD *methods_async = NULL;
|
||||
|
||||
struct async_ctrs {
|
||||
unsigned int rctr;
|
||||
unsigned int wctr;
|
||||
};
|
||||
|
||||
static const BIO_METHOD *bio_f_async_filter()
|
||||
{
|
||||
if (methods_async == NULL) {
|
||||
methods_async = BIO_meth_new(BIO_TYPE_ASYNC_FILTER, "Async filter");
|
||||
if ( methods_async == NULL
|
||||
|| !BIO_meth_set_write(methods_async, async_write)
|
||||
|| !BIO_meth_set_read(methods_async, async_read)
|
||||
|| !BIO_meth_set_puts(methods_async, async_puts)
|
||||
|| !BIO_meth_set_gets(methods_async, async_gets)
|
||||
|| !BIO_meth_set_ctrl(methods_async, async_ctrl)
|
||||
|| !BIO_meth_set_create(methods_async, async_new)
|
||||
|| !BIO_meth_set_destroy(methods_async, async_free))
|
||||
return NULL;
|
||||
}
|
||||
return methods_async;
|
||||
}
|
||||
|
||||
static int async_new(BIO *bio)
|
||||
{
|
||||
struct async_ctrs *ctrs;
|
||||
|
||||
ctrs = OPENSSL_zalloc(sizeof(struct async_ctrs));
|
||||
if (ctrs == NULL)
|
||||
return 0;
|
||||
|
||||
BIO_set_data(bio, ctrs);
|
||||
BIO_set_init(bio, 1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int async_free(BIO *bio)
|
||||
{
|
||||
struct async_ctrs *ctrs;
|
||||
|
||||
if (bio == NULL)
|
||||
return 0;
|
||||
ctrs = BIO_get_data(bio);
|
||||
OPENSSL_free(ctrs);
|
||||
BIO_set_data(bio, NULL);
|
||||
BIO_set_init(bio, 0);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int async_read(BIO *bio, char *out, int outl)
|
||||
{
|
||||
struct async_ctrs *ctrs;
|
||||
int ret = -1;
|
||||
BIO *next = BIO_next(bio);
|
||||
|
||||
if (outl <= 0)
|
||||
return 0;
|
||||
if (next == NULL)
|
||||
return 0;
|
||||
|
||||
ctrs = BIO_get_data(bio);
|
||||
|
||||
BIO_clear_retry_flags(bio);
|
||||
|
||||
if (ctrs->rctr > 0) {
|
||||
ret = BIO_read(next, out, 1);
|
||||
if (ret <= 0 && BIO_should_read(next))
|
||||
BIO_set_retry_read(bio);
|
||||
ctrs->rctr = 0;
|
||||
} else {
|
||||
ctrs->rctr++;
|
||||
BIO_set_retry_read(bio);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
#define MIN_RECORD_LEN 6
|
||||
|
||||
#define CONTENTTYPEPOS 0
|
||||
#define VERSIONHIPOS 1
|
||||
#define VERSIONLOPOS 2
|
||||
#define DATAPOS 5
|
||||
|
||||
static int async_write(BIO *bio, const char *in, int inl)
|
||||
{
|
||||
struct async_ctrs *ctrs;
|
||||
int ret = -1;
|
||||
size_t written = 0;
|
||||
BIO *next = BIO_next(bio);
|
||||
|
||||
if (inl <= 0)
|
||||
return 0;
|
||||
if (next == NULL)
|
||||
return 0;
|
||||
|
||||
ctrs = BIO_get_data(bio);
|
||||
|
||||
BIO_clear_retry_flags(bio);
|
||||
|
||||
if (ctrs->wctr > 0) {
|
||||
ctrs->wctr = 0;
|
||||
if (fragment) {
|
||||
PACKET pkt;
|
||||
|
||||
if (!PACKET_buf_init(&pkt, (const unsigned char *)in, inl))
|
||||
abort();
|
||||
|
||||
while (PACKET_remaining(&pkt) > 0) {
|
||||
PACKET payload;
|
||||
unsigned int contenttype, versionhi, versionlo, data;
|
||||
|
||||
if ( !PACKET_get_1(&pkt, &contenttype)
|
||||
|| !PACKET_get_1(&pkt, &versionhi)
|
||||
|| !PACKET_get_1(&pkt, &versionlo)
|
||||
|| !PACKET_get_length_prefixed_2(&pkt, &payload))
|
||||
abort();
|
||||
|
||||
/* Pretend we wrote out the record header */
|
||||
written += SSL3_RT_HEADER_LENGTH;
|
||||
|
||||
while (PACKET_get_1(&payload, &data)) {
|
||||
/* Create a new one byte long record for each byte in the
|
||||
* record in the input buffer
|
||||
*/
|
||||
char smallrec[MIN_RECORD_LEN] = {
|
||||
0, /* Content type */
|
||||
0, /* Version hi */
|
||||
0, /* Version lo */
|
||||
0, /* Length hi */
|
||||
1, /* Length lo */
|
||||
0 /* Data */
|
||||
};
|
||||
|
||||
smallrec[CONTENTTYPEPOS] = contenttype;
|
||||
smallrec[VERSIONHIPOS] = versionhi;
|
||||
smallrec[VERSIONLOPOS] = versionlo;
|
||||
smallrec[DATAPOS] = data;
|
||||
ret = BIO_write(next, smallrec, MIN_RECORD_LEN);
|
||||
if (ret <= 0)
|
||||
abort();
|
||||
written++;
|
||||
}
|
||||
/*
|
||||
* We can't fragment anything after the CCS, otherwise we
|
||||
* get a bad record MAC
|
||||
*/
|
||||
if (contenttype == SSL3_RT_CHANGE_CIPHER_SPEC) {
|
||||
fragment = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
/* Write any data we have left after fragmenting */
|
||||
ret = 0;
|
||||
if ((int)written < inl) {
|
||||
ret = BIO_write(next, in + written , inl - written);
|
||||
}
|
||||
|
||||
if (ret <= 0 && BIO_should_write(next))
|
||||
BIO_set_retry_write(bio);
|
||||
else
|
||||
ret += written;
|
||||
} else {
|
||||
ctrs->wctr++;
|
||||
BIO_set_retry_write(bio);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static long async_ctrl(BIO *bio, int cmd, long num, void *ptr)
|
||||
{
|
||||
long ret;
|
||||
BIO *next = BIO_next(bio);
|
||||
|
||||
if (next == NULL)
|
||||
return 0;
|
||||
|
||||
switch (cmd) {
|
||||
case BIO_CTRL_DUP:
|
||||
ret = 0L;
|
||||
break;
|
||||
default:
|
||||
ret = BIO_ctrl(next, cmd, num, ptr);
|
||||
break;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int async_gets(BIO *bio, char *buf, int size)
|
||||
{
|
||||
/* We don't support this - not needed anyway */
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int async_puts(BIO *bio, const char *str)
|
||||
{
|
||||
return async_write(bio, str, strlen(str));
|
||||
}
|
||||
|
||||
#define MAX_ATTEMPTS 100
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
SSL_CTX *serverctx = NULL, *clientctx = NULL;
|
||||
SSL *serverssl = NULL, *clientssl = NULL;
|
||||
BIO *s_to_c_fbio = NULL, *c_to_s_fbio = NULL;
|
||||
int test, err = 1, ret;
|
||||
size_t i, j;
|
||||
const char testdata[] = "Test data";
|
||||
char buf[sizeof(testdata)];
|
||||
|
||||
CRYPTO_set_mem_debug(1);
|
||||
CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON);
|
||||
|
||||
if (argc != 3) {
|
||||
printf("Invalid argument count\n");
|
||||
goto end;
|
||||
}
|
||||
|
||||
if (!create_ssl_ctx_pair(TLS_server_method(), TLS_client_method(),
|
||||
TLS1_VERSION, TLS_MAX_VERSION,
|
||||
&serverctx, &clientctx, argv[1], argv[2])) {
|
||||
printf("Failed to create SSL_CTX pair\n");
|
||||
goto end;
|
||||
}
|
||||
|
||||
/*
|
||||
* We do 2 test runs. The first time around we just do a normal handshake
|
||||
* with lots of async io going on. The second time around we also break up
|
||||
* all records so that the content is only one byte length (up until the
|
||||
* CCS)
|
||||
*/
|
||||
for (test = 1; test < 3; test++) {
|
||||
if (test == 2)
|
||||
fragment = 1;
|
||||
|
||||
|
||||
s_to_c_fbio = BIO_new(bio_f_async_filter());
|
||||
c_to_s_fbio = BIO_new(bio_f_async_filter());
|
||||
if (s_to_c_fbio == NULL || c_to_s_fbio == NULL) {
|
||||
printf("Failed to create filter BIOs\n");
|
||||
BIO_free(s_to_c_fbio);
|
||||
BIO_free(c_to_s_fbio);
|
||||
goto end;
|
||||
}
|
||||
|
||||
/* BIOs get freed on error */
|
||||
if (!create_ssl_objects(serverctx, clientctx, &serverssl, &clientssl,
|
||||
s_to_c_fbio, c_to_s_fbio)) {
|
||||
printf("Test %d failed: Create SSL objects failed\n", test);
|
||||
goto end;
|
||||
}
|
||||
|
||||
if (!create_ssl_connection(serverssl, clientssl)) {
|
||||
printf("Test %d failed: Create SSL connection failed\n", test);
|
||||
goto end;
|
||||
}
|
||||
|
||||
/*
|
||||
* Send and receive some test data. Do the whole thing twice to ensure
|
||||
* we hit at least one async event in both reading and writing
|
||||
*/
|
||||
for (j = 0; j < 2; j++) {
|
||||
int len;
|
||||
|
||||
/*
|
||||
* Write some test data. It should never take more than 2 attempts
|
||||
* (the first one might be a retryable fail).
|
||||
*/
|
||||
for (ret = -1, i = 0, len = 0; len != sizeof(testdata) && i < 2;
|
||||
i++) {
|
||||
ret = SSL_write(clientssl, testdata + len,
|
||||
sizeof(testdata) - len);
|
||||
if (ret > 0) {
|
||||
len += ret;
|
||||
} else {
|
||||
int ssl_error = SSL_get_error(clientssl, ret);
|
||||
|
||||
if (ssl_error == SSL_ERROR_SYSCALL ||
|
||||
ssl_error == SSL_ERROR_SSL) {
|
||||
printf("Test %d failed: Failed to write app data\n", test);
|
||||
err = -1;
|
||||
goto end;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (len != sizeof(testdata)) {
|
||||
err = -1;
|
||||
printf("Test %d failed: Failed to write all app data\n", test);
|
||||
goto end;
|
||||
}
|
||||
/*
|
||||
* Now read the test data. It may take more attempts here because
|
||||
* it could fail once for each byte read, including all overhead
|
||||
* bytes from the record header/padding etc.
|
||||
*/
|
||||
for (ret = -1, i = 0, len = 0; len != sizeof(testdata) &&
|
||||
i < MAX_ATTEMPTS; i++)
|
||||
{
|
||||
ret = SSL_read(serverssl, buf + len, sizeof(buf) - len);
|
||||
if (ret > 0) {
|
||||
len += ret;
|
||||
} else {
|
||||
int ssl_error = SSL_get_error(serverssl, ret);
|
||||
|
||||
if (ssl_error == SSL_ERROR_SYSCALL ||
|
||||
ssl_error == SSL_ERROR_SSL) {
|
||||
printf("Test %d failed: Failed to read app data\n", test);
|
||||
err = -1;
|
||||
goto end;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (len != sizeof(testdata)
|
||||
|| memcmp(buf, testdata, sizeof(testdata)) != 0) {
|
||||
err = -1;
|
||||
printf("Test %d failed: Unexpected app data received\n", test);
|
||||
goto end;
|
||||
}
|
||||
}
|
||||
|
||||
/* Also frees the BIOs */
|
||||
SSL_free(clientssl);
|
||||
SSL_free(serverssl);
|
||||
clientssl = serverssl = NULL;
|
||||
}
|
||||
|
||||
printf("Test success\n");
|
||||
|
||||
err = 0;
|
||||
end:
|
||||
if (err)
|
||||
ERR_print_errors_fp(stderr);
|
||||
|
||||
SSL_free(clientssl);
|
||||
SSL_free(serverssl);
|
||||
SSL_CTX_free(clientctx);
|
||||
SSL_CTX_free(serverctx);
|
||||
|
||||
# ifndef OPENSSL_NO_CRYPTO_MDEBUG
|
||||
CRYPTO_mem_leaks_fp(stderr);
|
||||
# endif
|
||||
|
||||
return err;
|
||||
}
|
||||
@@ -0,0 +1,291 @@
|
||||
/*
|
||||
* Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the OpenSSL license (the "License"). You may not use
|
||||
* this file except in compliance with the License. You can obtain a copy
|
||||
* in the file LICENSE in the source distribution or at
|
||||
* https://www.openssl.org/source/license.html
|
||||
*/
|
||||
|
||||
#ifdef _WIN32
|
||||
# include <windows.h>
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <openssl/async.h>
|
||||
#include <openssl/crypto.h>
|
||||
|
||||
static int ctr = 0;
|
||||
static ASYNC_JOB *currjob = NULL;
|
||||
|
||||
static int only_pause(void *args)
|
||||
{
|
||||
ASYNC_pause_job();
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int add_two(void *args)
|
||||
{
|
||||
ctr++;
|
||||
ASYNC_pause_job();
|
||||
ctr++;
|
||||
|
||||
return 2;
|
||||
}
|
||||
|
||||
static int save_current(void *args)
|
||||
{
|
||||
currjob = ASYNC_get_current_job();
|
||||
ASYNC_pause_job();
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
#define MAGIC_WAIT_FD ((OSSL_ASYNC_FD)99)
|
||||
static int waitfd(void *args)
|
||||
{
|
||||
ASYNC_JOB *job;
|
||||
ASYNC_WAIT_CTX *waitctx;
|
||||
job = ASYNC_get_current_job();
|
||||
if (job == NULL)
|
||||
return 0;
|
||||
waitctx = ASYNC_get_wait_ctx(job);
|
||||
if (waitctx == NULL)
|
||||
return 0;
|
||||
|
||||
/* First case: no fd added or removed */
|
||||
ASYNC_pause_job();
|
||||
|
||||
/* Second case: one fd added */
|
||||
if (!ASYNC_WAIT_CTX_set_wait_fd(waitctx, waitctx, MAGIC_WAIT_FD, NULL, NULL))
|
||||
return 0;
|
||||
ASYNC_pause_job();
|
||||
|
||||
/* Third case: all fd removed */
|
||||
if (!ASYNC_WAIT_CTX_clear_fd(waitctx, waitctx))
|
||||
return 0;
|
||||
ASYNC_pause_job();
|
||||
|
||||
/* Last case: fd added and immediately removed */
|
||||
if (!ASYNC_WAIT_CTX_set_wait_fd(waitctx, waitctx, MAGIC_WAIT_FD, NULL, NULL))
|
||||
return 0;
|
||||
if (!ASYNC_WAIT_CTX_clear_fd(waitctx, waitctx))
|
||||
return 0;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int blockpause(void *args)
|
||||
{
|
||||
ASYNC_block_pause();
|
||||
ASYNC_pause_job();
|
||||
ASYNC_unblock_pause();
|
||||
ASYNC_pause_job();
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int test_ASYNC_init_thread()
|
||||
{
|
||||
ASYNC_JOB *job1 = NULL, *job2 = NULL, *job3 = NULL;
|
||||
int funcret1, funcret2, funcret3;
|
||||
ASYNC_WAIT_CTX *waitctx = NULL;
|
||||
|
||||
if ( !ASYNC_init_thread(2, 0)
|
||||
|| (waitctx = ASYNC_WAIT_CTX_new()) == NULL
|
||||
|| ASYNC_start_job(&job1, waitctx, &funcret1, only_pause, NULL, 0)
|
||||
!= ASYNC_PAUSE
|
||||
|| ASYNC_start_job(&job2, waitctx, &funcret2, only_pause, NULL, 0)
|
||||
!= ASYNC_PAUSE
|
||||
|| ASYNC_start_job(&job3, waitctx, &funcret3, only_pause, NULL, 0)
|
||||
!= ASYNC_NO_JOBS
|
||||
|| ASYNC_start_job(&job1, waitctx, &funcret1, only_pause, NULL, 0)
|
||||
!= ASYNC_FINISH
|
||||
|| ASYNC_start_job(&job3, waitctx, &funcret3, only_pause, NULL, 0)
|
||||
!= ASYNC_PAUSE
|
||||
|| ASYNC_start_job(&job2, waitctx, &funcret2, only_pause, NULL, 0)
|
||||
!= ASYNC_FINISH
|
||||
|| ASYNC_start_job(&job3, waitctx, &funcret3, only_pause, NULL, 0)
|
||||
!= ASYNC_FINISH
|
||||
|| funcret1 != 1
|
||||
|| funcret2 != 1
|
||||
|| funcret3 != 1) {
|
||||
fprintf(stderr, "test_ASYNC_init_thread() failed\n");
|
||||
ASYNC_WAIT_CTX_free(waitctx);
|
||||
ASYNC_cleanup_thread();
|
||||
return 0;
|
||||
}
|
||||
|
||||
ASYNC_WAIT_CTX_free(waitctx);
|
||||
ASYNC_cleanup_thread();
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int test_ASYNC_start_job()
|
||||
{
|
||||
ASYNC_JOB *job = NULL;
|
||||
int funcret;
|
||||
ASYNC_WAIT_CTX *waitctx = NULL;
|
||||
|
||||
ctr = 0;
|
||||
|
||||
if ( !ASYNC_init_thread(1, 0)
|
||||
|| (waitctx = ASYNC_WAIT_CTX_new()) == NULL
|
||||
|| ASYNC_start_job(&job, waitctx, &funcret, add_two, NULL, 0)
|
||||
!= ASYNC_PAUSE
|
||||
|| ctr != 1
|
||||
|| ASYNC_start_job(&job, waitctx, &funcret, add_two, NULL, 0)
|
||||
!= ASYNC_FINISH
|
||||
|| ctr != 2
|
||||
|| funcret != 2) {
|
||||
fprintf(stderr, "test_ASYNC_start_job() failed\n");
|
||||
ASYNC_WAIT_CTX_free(waitctx);
|
||||
ASYNC_cleanup_thread();
|
||||
return 0;
|
||||
}
|
||||
|
||||
ASYNC_WAIT_CTX_free(waitctx);
|
||||
ASYNC_cleanup_thread();
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int test_ASYNC_get_current_job()
|
||||
{
|
||||
ASYNC_JOB *job = NULL;
|
||||
int funcret;
|
||||
ASYNC_WAIT_CTX *waitctx = NULL;
|
||||
|
||||
currjob = NULL;
|
||||
|
||||
if ( !ASYNC_init_thread(1, 0)
|
||||
|| (waitctx = ASYNC_WAIT_CTX_new()) == NULL
|
||||
|| ASYNC_start_job(&job, waitctx, &funcret, save_current, NULL, 0)
|
||||
!= ASYNC_PAUSE
|
||||
|| currjob != job
|
||||
|| ASYNC_start_job(&job, waitctx, &funcret, save_current, NULL, 0)
|
||||
!= ASYNC_FINISH
|
||||
|| funcret != 1) {
|
||||
fprintf(stderr, "test_ASYNC_get_current_job() failed\n");
|
||||
ASYNC_WAIT_CTX_free(waitctx);
|
||||
ASYNC_cleanup_thread();
|
||||
return 0;
|
||||
}
|
||||
|
||||
ASYNC_WAIT_CTX_free(waitctx);
|
||||
ASYNC_cleanup_thread();
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int test_ASYNC_WAIT_CTX_get_all_fds()
|
||||
{
|
||||
ASYNC_JOB *job = NULL;
|
||||
int funcret;
|
||||
ASYNC_WAIT_CTX *waitctx = NULL;
|
||||
OSSL_ASYNC_FD fd = OSSL_BAD_ASYNC_FD, delfd = OSSL_BAD_ASYNC_FD;
|
||||
size_t numfds, numdelfds;
|
||||
|
||||
if ( !ASYNC_init_thread(1, 0)
|
||||
|| (waitctx = ASYNC_WAIT_CTX_new()) == NULL
|
||||
/* On first run we're not expecting any wait fds */
|
||||
|| ASYNC_start_job(&job, waitctx, &funcret, waitfd, NULL, 0)
|
||||
!= ASYNC_PAUSE
|
||||
|| !ASYNC_WAIT_CTX_get_all_fds(waitctx, NULL, &numfds)
|
||||
|| numfds != 0
|
||||
|| !ASYNC_WAIT_CTX_get_changed_fds(waitctx, NULL, &numfds, NULL,
|
||||
&numdelfds)
|
||||
|| numfds != 0
|
||||
|| numdelfds != 0
|
||||
/* On second run we're expecting one added fd */
|
||||
|| ASYNC_start_job(&job, waitctx, &funcret, waitfd, NULL, 0)
|
||||
!= ASYNC_PAUSE
|
||||
|| !ASYNC_WAIT_CTX_get_all_fds(waitctx, NULL, &numfds)
|
||||
|| numfds != 1
|
||||
|| !ASYNC_WAIT_CTX_get_all_fds(waitctx, &fd, &numfds)
|
||||
|| fd != MAGIC_WAIT_FD
|
||||
|| (fd = OSSL_BAD_ASYNC_FD, 0) /* Assign to something else */
|
||||
|| !ASYNC_WAIT_CTX_get_changed_fds(waitctx, NULL, &numfds, NULL,
|
||||
&numdelfds)
|
||||
|| numfds != 1
|
||||
|| numdelfds != 0
|
||||
|| !ASYNC_WAIT_CTX_get_changed_fds(waitctx, &fd, &numfds, NULL,
|
||||
&numdelfds)
|
||||
|| fd != MAGIC_WAIT_FD
|
||||
/* On third run we expect one deleted fd */
|
||||
|| ASYNC_start_job(&job, waitctx, &funcret, waitfd, NULL, 0)
|
||||
!= ASYNC_PAUSE
|
||||
|| !ASYNC_WAIT_CTX_get_all_fds(waitctx, NULL, &numfds)
|
||||
|| numfds != 0
|
||||
|| !ASYNC_WAIT_CTX_get_changed_fds(waitctx, NULL, &numfds, NULL,
|
||||
&numdelfds)
|
||||
|| numfds != 0
|
||||
|| numdelfds != 1
|
||||
|| !ASYNC_WAIT_CTX_get_changed_fds(waitctx, NULL, &numfds, &delfd,
|
||||
&numdelfds)
|
||||
|| delfd != MAGIC_WAIT_FD
|
||||
/* On last run we are not expecting any wait fd */
|
||||
|| ASYNC_start_job(&job, waitctx, &funcret, waitfd, NULL, 0)
|
||||
!= ASYNC_FINISH
|
||||
|| !ASYNC_WAIT_CTX_get_all_fds(waitctx, NULL, &numfds)
|
||||
|| numfds != 0
|
||||
|| !ASYNC_WAIT_CTX_get_changed_fds(waitctx, NULL, &numfds, NULL,
|
||||
&numdelfds)
|
||||
|| numfds != 0
|
||||
|| numdelfds != 0
|
||||
|| funcret != 1) {
|
||||
fprintf(stderr, "test_ASYNC_get_wait_fd() failed\n");
|
||||
ASYNC_WAIT_CTX_free(waitctx);
|
||||
ASYNC_cleanup_thread();
|
||||
return 0;
|
||||
}
|
||||
|
||||
ASYNC_WAIT_CTX_free(waitctx);
|
||||
ASYNC_cleanup_thread();
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int test_ASYNC_block_pause()
|
||||
{
|
||||
ASYNC_JOB *job = NULL;
|
||||
int funcret;
|
||||
ASYNC_WAIT_CTX *waitctx = NULL;
|
||||
|
||||
if ( !ASYNC_init_thread(1, 0)
|
||||
|| (waitctx = ASYNC_WAIT_CTX_new()) == NULL
|
||||
|| ASYNC_start_job(&job, waitctx, &funcret, blockpause, NULL, 0)
|
||||
!= ASYNC_PAUSE
|
||||
|| ASYNC_start_job(&job, waitctx, &funcret, blockpause, NULL, 0)
|
||||
!= ASYNC_FINISH
|
||||
|| funcret != 1) {
|
||||
fprintf(stderr, "test_ASYNC_block_pause() failed\n");
|
||||
ASYNC_WAIT_CTX_free(waitctx);
|
||||
ASYNC_cleanup_thread();
|
||||
return 0;
|
||||
}
|
||||
|
||||
ASYNC_WAIT_CTX_free(waitctx);
|
||||
ASYNC_cleanup_thread();
|
||||
return 1;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
if (!ASYNC_is_capable()) {
|
||||
fprintf(stderr,
|
||||
"OpenSSL build is not ASYNC capable - skipping async tests\n");
|
||||
} else {
|
||||
CRYPTO_set_mem_debug(1);
|
||||
CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON);
|
||||
|
||||
if ( !test_ASYNC_init_thread()
|
||||
|| !test_ASYNC_start_job()
|
||||
|| !test_ASYNC_get_current_job()
|
||||
|| !test_ASYNC_WAIT_CTX_get_all_fds()
|
||||
|| !test_ASYNC_block_pause()) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
printf("PASS\n");
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,624 @@
|
||||
/*
|
||||
* Copyright 2016 The OpenSSL Project Authors. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the OpenSSL license (the "License"). You may not use
|
||||
* this file except in compliance with the License. You can obtain a copy
|
||||
* in the file LICENSE in the source distribution or at
|
||||
* https://www.openssl.org/source/license.html
|
||||
*/
|
||||
|
||||
/*
|
||||
* Unit test for Cisco DTLS1_BAD_VER session resume, as used by
|
||||
* AnyConnect VPN protocol.
|
||||
*
|
||||
* This is designed to exercise the code paths in
|
||||
* http://git.infradead.org/users/dwmw2/openconnect.git/blob/HEAD:/dtls.c
|
||||
* which have frequently been affected by regressions in DTLS1_BAD_VER
|
||||
* support.
|
||||
*
|
||||
* Note that unlike other SSL tests, we don't test against our own SSL
|
||||
* server method. Firstly because we don't have one; we *only* support
|
||||
* DTLS1_BAD_VER as a client. And secondly because even if that were
|
||||
* fixed up it's the wrong thing to test against - because if changes
|
||||
* are made in generic DTLS code which don't take DTLS1_BAD_VER into
|
||||
* account, there's plenty of scope for making those changes such that
|
||||
* they break *both* the client and the server in the same way.
|
||||
*
|
||||
* So we handle the server side manually. In a session resume there isn't
|
||||
* much to be done anyway.
|
||||
*/
|
||||
#include <string.h>
|
||||
|
||||
#include <openssl/opensslconf.h>
|
||||
#include <openssl/bio.h>
|
||||
#include <openssl/crypto.h>
|
||||
#include <openssl/evp.h>
|
||||
#include <openssl/ssl.h>
|
||||
#include <openssl/err.h>
|
||||
#include <openssl/rand.h>
|
||||
#include <openssl/kdf.h>
|
||||
|
||||
#include "../ssl/packet_locl.h"
|
||||
#include "../e_os.h" /* for OSSL_NELEM() */
|
||||
|
||||
/* For DTLS1_BAD_VER packets the MAC doesn't include the handshake header */
|
||||
#define MAC_OFFSET (DTLS1_RT_HEADER_LENGTH + DTLS1_HM_HEADER_LENGTH)
|
||||
|
||||
static unsigned char client_random[SSL3_RANDOM_SIZE];
|
||||
static unsigned char server_random[SSL3_RANDOM_SIZE];
|
||||
|
||||
/* These are all generated locally, sized purely according to our own whim */
|
||||
static unsigned char session_id[32];
|
||||
static unsigned char master_secret[48];
|
||||
static unsigned char cookie[20];
|
||||
|
||||
/* We've hard-coded the cipher suite; we know it's 104 bytes */
|
||||
static unsigned char key_block[104];
|
||||
#define mac_key (key_block + 20)
|
||||
#define dec_key (key_block + 40)
|
||||
#define enc_key (key_block + 56)
|
||||
|
||||
static EVP_MD_CTX *handshake_md;
|
||||
|
||||
static int do_PRF(const void *seed1, int seed1_len,
|
||||
const void *seed2, int seed2_len,
|
||||
const void *seed3, int seed3_len,
|
||||
unsigned char *out, int olen)
|
||||
{
|
||||
EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_TLS1_PRF, NULL);
|
||||
size_t outlen = olen;
|
||||
|
||||
/* No error handling. If it all screws up, the test will fail anyway */
|
||||
EVP_PKEY_derive_init(pctx);
|
||||
EVP_PKEY_CTX_set_tls1_prf_md(pctx, EVP_md5_sha1());
|
||||
EVP_PKEY_CTX_set1_tls1_prf_secret(pctx, master_secret, sizeof(master_secret));
|
||||
EVP_PKEY_CTX_add1_tls1_prf_seed(pctx, seed1, seed1_len);
|
||||
EVP_PKEY_CTX_add1_tls1_prf_seed(pctx, seed2, seed2_len);
|
||||
EVP_PKEY_CTX_add1_tls1_prf_seed(pctx, seed3, seed3_len);
|
||||
EVP_PKEY_derive(pctx, out, &outlen);
|
||||
EVP_PKEY_CTX_free(pctx);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static SSL_SESSION *client_session(void)
|
||||
{
|
||||
static unsigned char session_asn1[] = {
|
||||
0x30, 0x5F, /* SEQUENCE, length 0x5F */
|
||||
0x02, 0x01, 0x01, /* INTEGER, SSL_SESSION_ASN1_VERSION */
|
||||
0x02, 0x02, 0x01, 0x00, /* INTEGER, DTLS1_BAD_VER */
|
||||
0x04, 0x02, 0x00, 0x2F, /* OCTET_STRING, AES128-SHA */
|
||||
0x04, 0x20, /* OCTET_STRING, session id */
|
||||
#define SS_SESSID_OFS 15 /* Session ID goes here */
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x04, 0x30, /* OCTET_STRING, master secret */
|
||||
#define SS_SECRET_OFS 49 /* Master secret goes here */
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
};
|
||||
const unsigned char *p = session_asn1;
|
||||
|
||||
/* Copy the randomly-generated fields into the above ASN1 */
|
||||
memcpy(session_asn1 + SS_SESSID_OFS, session_id, sizeof(session_id));
|
||||
memcpy(session_asn1 + SS_SECRET_OFS, master_secret, sizeof(master_secret));
|
||||
|
||||
return d2i_SSL_SESSION(NULL, &p, sizeof(session_asn1));
|
||||
}
|
||||
|
||||
/* Returns 1 for initial ClientHello, 2 for ClientHello with cookie */
|
||||
static int validate_client_hello(BIO *wbio)
|
||||
{
|
||||
PACKET pkt, pkt2;
|
||||
long len;
|
||||
unsigned char *data;
|
||||
int cookie_found = 0;
|
||||
unsigned int u;
|
||||
|
||||
len = BIO_get_mem_data(wbio, (char **)&data);
|
||||
if (!PACKET_buf_init(&pkt, data, len))
|
||||
return 0;
|
||||
|
||||
/* Check record header type */
|
||||
if (!PACKET_get_1(&pkt, &u) || u != SSL3_RT_HANDSHAKE)
|
||||
return 0;
|
||||
/* Version */
|
||||
if (!PACKET_get_net_2(&pkt, &u) || u != DTLS1_BAD_VER)
|
||||
return 0;
|
||||
/* Skip the rest of the record header */
|
||||
if (!PACKET_forward(&pkt, DTLS1_RT_HEADER_LENGTH - 3))
|
||||
return 0;
|
||||
|
||||
/* Check it's a ClientHello */
|
||||
if (!PACKET_get_1(&pkt, &u) || u != SSL3_MT_CLIENT_HELLO)
|
||||
return 0;
|
||||
/* Skip the rest of the handshake message header */
|
||||
if (!PACKET_forward(&pkt, DTLS1_HM_HEADER_LENGTH - 1))
|
||||
return 0;
|
||||
|
||||
/* Check client version */
|
||||
if (!PACKET_get_net_2(&pkt, &u) || u != DTLS1_BAD_VER)
|
||||
return 0;
|
||||
|
||||
/* Store random */
|
||||
if (!PACKET_copy_bytes(&pkt, client_random, SSL3_RANDOM_SIZE))
|
||||
return 0;
|
||||
|
||||
/* Check session id length and content */
|
||||
if (!PACKET_get_length_prefixed_1(&pkt, &pkt2) ||
|
||||
!PACKET_equal(&pkt2, session_id, sizeof(session_id)))
|
||||
return 0;
|
||||
|
||||
/* Check cookie */
|
||||
if (!PACKET_get_length_prefixed_1(&pkt, &pkt2))
|
||||
return 0;
|
||||
if (PACKET_remaining(&pkt2)) {
|
||||
if (!PACKET_equal(&pkt2, cookie, sizeof(cookie)))
|
||||
return 0;
|
||||
cookie_found = 1;
|
||||
}
|
||||
|
||||
/* Skip ciphers */
|
||||
if (!PACKET_get_net_2(&pkt, &u) || !PACKET_forward(&pkt, u))
|
||||
return 0;
|
||||
|
||||
/* Skip compression */
|
||||
if (!PACKET_get_1(&pkt, &u) || !PACKET_forward(&pkt, u))
|
||||
return 0;
|
||||
|
||||
/* Skip extensions */
|
||||
if (!PACKET_get_net_2(&pkt, &u) || !PACKET_forward(&pkt, u))
|
||||
return 0;
|
||||
|
||||
/* Now we are at the end */
|
||||
if (PACKET_remaining(&pkt))
|
||||
return 0;
|
||||
|
||||
/* Update handshake MAC for second ClientHello (with cookie) */
|
||||
if (cookie_found && !EVP_DigestUpdate(handshake_md, data + MAC_OFFSET,
|
||||
len - MAC_OFFSET))
|
||||
printf("EVP_DigestUpdate() failed\n");
|
||||
|
||||
(void)BIO_reset(wbio);
|
||||
|
||||
return 1 + cookie_found;
|
||||
}
|
||||
|
||||
static int send_hello_verify(BIO *rbio)
|
||||
{
|
||||
static unsigned char hello_verify[] = {
|
||||
0x16, /* Handshake */
|
||||
0x01, 0x00, /* DTLS1_BAD_VER */
|
||||
0x00, 0x00, /* Epoch 0 */
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* Seq# 0 */
|
||||
0x00, 0x23, /* Length */
|
||||
0x03, /* Hello Verify */
|
||||
0x00, 0x00, 0x17, /* Length */
|
||||
0x00, 0x00, /* Seq# 0 */
|
||||
0x00, 0x00, 0x00, /* Fragment offset */
|
||||
0x00, 0x00, 0x17, /* Fragment length */
|
||||
0x01, 0x00, /* DTLS1_BAD_VER */
|
||||
0x14, /* Cookie length */
|
||||
#define HV_COOKIE_OFS 28 /* Cookie goes here */
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
};
|
||||
|
||||
memcpy(hello_verify + HV_COOKIE_OFS, cookie, sizeof(cookie));
|
||||
|
||||
BIO_write(rbio, hello_verify, sizeof(hello_verify));
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int send_server_hello(BIO *rbio)
|
||||
{
|
||||
static unsigned char server_hello[] = {
|
||||
0x16, /* Handshake */
|
||||
0x01, 0x00, /* DTLS1_BAD_VER */
|
||||
0x00, 0x00, /* Epoch 0 */
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, /* Seq# 1 */
|
||||
0x00, 0x52, /* Length */
|
||||
0x02, /* Server Hello */
|
||||
0x00, 0x00, 0x46, /* Length */
|
||||
0x00, 0x01, /* Seq# */
|
||||
0x00, 0x00, 0x00, /* Fragment offset */
|
||||
0x00, 0x00, 0x46, /* Fragment length */
|
||||
0x01, 0x00, /* DTLS1_BAD_VER */
|
||||
#define SH_RANDOM_OFS 27 /* Server random goes here */
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x20, /* Session ID length */
|
||||
#define SH_SESSID_OFS 60 /* Session ID goes here */
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x2f, /* Cipher suite AES128-SHA */
|
||||
0x00, /* Compression null */
|
||||
};
|
||||
static unsigned char change_cipher_spec[] = {
|
||||
0x14, /* Change Cipher Spec */
|
||||
0x01, 0x00, /* DTLS1_BAD_VER */
|
||||
0x00, 0x00, /* Epoch 0 */
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x02, /* Seq# 2 */
|
||||
0x00, 0x03, /* Length */
|
||||
0x01, 0x00, 0x02, /* Message */
|
||||
};
|
||||
|
||||
memcpy(server_hello + SH_RANDOM_OFS, server_random, sizeof(server_random));
|
||||
memcpy(server_hello + SH_SESSID_OFS, session_id, sizeof(session_id));
|
||||
|
||||
if (!EVP_DigestUpdate(handshake_md, server_hello + MAC_OFFSET,
|
||||
sizeof(server_hello) - MAC_OFFSET))
|
||||
printf("EVP_DigestUpdate() failed\n");
|
||||
|
||||
BIO_write(rbio, server_hello, sizeof(server_hello));
|
||||
BIO_write(rbio, change_cipher_spec, sizeof(change_cipher_spec));
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Create header, HMAC, pad, encrypt and send a record */
|
||||
static int send_record(BIO *rbio, unsigned char type, unsigned long seqnr,
|
||||
const void *msg, size_t len)
|
||||
{
|
||||
/* Note that the order of the record header fields on the wire,
|
||||
* and in the HMAC, is different. So we just keep them in separate
|
||||
* variables and handle them individually. */
|
||||
static unsigned char epoch[2] = { 0x00, 0x01 };
|
||||
static unsigned char seq[6] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
static unsigned char ver[2] = { 0x01, 0x00 }; /* DTLS1_BAD_VER */
|
||||
unsigned char lenbytes[2];
|
||||
HMAC_CTX *ctx;
|
||||
EVP_CIPHER_CTX *enc_ctx;
|
||||
unsigned char iv[16];
|
||||
unsigned char pad;
|
||||
unsigned char *enc;
|
||||
|
||||
#ifdef SIXTY_FOUR_BIT_LONG
|
||||
seq[0] = (seqnr >> 40) & 0xff;
|
||||
seq[1] = (seqnr >> 32) & 0xff;
|
||||
#endif
|
||||
seq[2] = (seqnr >> 24) & 0xff;
|
||||
seq[3] = (seqnr >> 16) & 0xff;
|
||||
seq[4] = (seqnr >> 8) & 0xff;
|
||||
seq[5] = seqnr & 0xff;
|
||||
|
||||
pad = 15 - ((len + SHA_DIGEST_LENGTH) % 16);
|
||||
enc = OPENSSL_malloc(len + SHA_DIGEST_LENGTH + 1 + pad);
|
||||
if (enc == NULL)
|
||||
return 0;
|
||||
|
||||
/* Copy record to encryption buffer */
|
||||
memcpy(enc, msg, len);
|
||||
|
||||
/* Append HMAC to data */
|
||||
ctx = HMAC_CTX_new();
|
||||
HMAC_Init_ex(ctx, mac_key, 20, EVP_sha1(), NULL);
|
||||
HMAC_Update(ctx, epoch, 2);
|
||||
HMAC_Update(ctx, seq, 6);
|
||||
HMAC_Update(ctx, &type, 1);
|
||||
HMAC_Update(ctx, ver, 2); /* Version */
|
||||
lenbytes[0] = len >> 8;
|
||||
lenbytes[1] = len & 0xff;
|
||||
HMAC_Update(ctx, lenbytes, 2); /* Length */
|
||||
HMAC_Update(ctx, enc, len); /* Finally the data itself */
|
||||
HMAC_Final(ctx, enc + len, NULL);
|
||||
HMAC_CTX_free(ctx);
|
||||
|
||||
/* Append padding bytes */
|
||||
len += SHA_DIGEST_LENGTH;
|
||||
do {
|
||||
enc[len++] = pad;
|
||||
} while (len % 16);
|
||||
|
||||
/* Generate IV, and encrypt */
|
||||
RAND_bytes(iv, sizeof(iv));
|
||||
enc_ctx = EVP_CIPHER_CTX_new();
|
||||
EVP_CipherInit_ex(enc_ctx, EVP_aes_128_cbc(), NULL, enc_key, iv, 1);
|
||||
EVP_Cipher(enc_ctx, enc, enc, len);
|
||||
EVP_CIPHER_CTX_free(enc_ctx);
|
||||
|
||||
/* Finally write header (from fragmented variables), IV and encrypted record */
|
||||
BIO_write(rbio, &type, 1);
|
||||
BIO_write(rbio, ver, 2);
|
||||
BIO_write(rbio, epoch, 2);
|
||||
BIO_write(rbio, seq, 6);
|
||||
lenbytes[0] = (len + sizeof(iv)) >> 8;
|
||||
lenbytes[1] = (len + sizeof(iv)) & 0xff;
|
||||
BIO_write(rbio, lenbytes, 2);
|
||||
|
||||
BIO_write(rbio, iv, sizeof(iv));
|
||||
BIO_write(rbio, enc, len);
|
||||
|
||||
OPENSSL_free(enc);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int send_finished(SSL *s, BIO *rbio)
|
||||
{
|
||||
static unsigned char finished_msg[DTLS1_HM_HEADER_LENGTH +
|
||||
TLS1_FINISH_MAC_LENGTH] = {
|
||||
0x14, /* Finished */
|
||||
0x00, 0x00, 0x0c, /* Length */
|
||||
0x00, 0x03, /* Seq# 3 */
|
||||
0x00, 0x00, 0x00, /* Fragment offset */
|
||||
0x00, 0x00, 0x0c, /* Fragment length */
|
||||
/* Finished MAC (12 bytes) */
|
||||
};
|
||||
unsigned char handshake_hash[EVP_MAX_MD_SIZE];
|
||||
|
||||
/* Derive key material */
|
||||
do_PRF(TLS_MD_KEY_EXPANSION_CONST, TLS_MD_KEY_EXPANSION_CONST_SIZE,
|
||||
server_random, SSL3_RANDOM_SIZE,
|
||||
client_random, SSL3_RANDOM_SIZE,
|
||||
key_block, sizeof(key_block));
|
||||
|
||||
/* Generate Finished MAC */
|
||||
if (!EVP_DigestFinal_ex(handshake_md, handshake_hash, NULL))
|
||||
printf("EVP_DigestFinal_ex() failed\n");
|
||||
|
||||
do_PRF(TLS_MD_SERVER_FINISH_CONST, TLS_MD_SERVER_FINISH_CONST_SIZE,
|
||||
handshake_hash, EVP_MD_CTX_size(handshake_md),
|
||||
NULL, 0,
|
||||
finished_msg + DTLS1_HM_HEADER_LENGTH, TLS1_FINISH_MAC_LENGTH);
|
||||
|
||||
return send_record(rbio, SSL3_RT_HANDSHAKE, 0,
|
||||
finished_msg, sizeof(finished_msg));
|
||||
}
|
||||
|
||||
static int validate_ccs(BIO *wbio)
|
||||
{
|
||||
PACKET pkt;
|
||||
long len;
|
||||
unsigned char *data;
|
||||
unsigned int u;
|
||||
|
||||
len = BIO_get_mem_data(wbio, (char **)&data);
|
||||
if (!PACKET_buf_init(&pkt, data, len))
|
||||
return 0;
|
||||
|
||||
/* Check record header type */
|
||||
if (!PACKET_get_1(&pkt, &u) || u != SSL3_RT_CHANGE_CIPHER_SPEC)
|
||||
return 0;
|
||||
/* Version */
|
||||
if (!PACKET_get_net_2(&pkt, &u) || u != DTLS1_BAD_VER)
|
||||
return 0;
|
||||
/* Skip the rest of the record header */
|
||||
if (!PACKET_forward(&pkt, DTLS1_RT_HEADER_LENGTH - 3))
|
||||
return 0;
|
||||
|
||||
/* Check ChangeCipherSpec message */
|
||||
if (!PACKET_get_1(&pkt, &u) || u != SSL3_MT_CCS)
|
||||
return 0;
|
||||
/* A DTLS1_BAD_VER ChangeCipherSpec also contains the
|
||||
* handshake sequence number (which is 2 here) */
|
||||
if (!PACKET_get_net_2(&pkt, &u) || u != 0x0002)
|
||||
return 0;
|
||||
|
||||
/* Now check the Finished packet */
|
||||
if (!PACKET_get_1(&pkt, &u) || u != SSL3_RT_HANDSHAKE)
|
||||
return 0;
|
||||
if (!PACKET_get_net_2(&pkt, &u) || u != DTLS1_BAD_VER)
|
||||
return 0;
|
||||
|
||||
/* Check epoch is now 1 */
|
||||
if (!PACKET_get_net_2(&pkt, &u) || u != 0x0001)
|
||||
return 0;
|
||||
|
||||
/* That'll do for now. If OpenSSL accepted *our* Finished packet
|
||||
* then it's evidently remembered that DTLS1_BAD_VER doesn't
|
||||
* include the handshake header in the MAC. There's not a lot of
|
||||
* point in implementing decryption here, just to check that it
|
||||
* continues to get it right for one more packet. */
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
#define NODROP(x) { x##UL, 0 }
|
||||
#define DROP(x) { x##UL, 1 }
|
||||
|
||||
static struct {
|
||||
unsigned long seq;
|
||||
int drop;
|
||||
} tests[] = {
|
||||
NODROP(1), NODROP(3), NODROP(2),
|
||||
NODROP(0x1234), NODROP(0x1230), NODROP(0x1235),
|
||||
NODROP(0xffff), NODROP(0x10001), NODROP(0xfffe), NODROP(0x10000),
|
||||
DROP(0x10001), DROP(0xff), NODROP(0x100000), NODROP(0x800000), NODROP(0x7fffe1),
|
||||
NODROP(0xffffff), NODROP(0x1000000), NODROP(0xfffffe), DROP(0xffffff), NODROP(0x1000010),
|
||||
NODROP(0xfffffd), NODROP(0x1000011), DROP(0x12), NODROP(0x1000012),
|
||||
NODROP(0x1ffffff), NODROP(0x2000000), DROP(0x1ff00fe), NODROP(0x2000001),
|
||||
NODROP(0x20fffff), NODROP(0x2105500), DROP(0x20ffffe), NODROP(0x21054ff),
|
||||
NODROP(0x211ffff), DROP(0x2110000), NODROP(0x2120000)
|
||||
/* The last test should be NODROP, because a DROP wouldn't get tested. */
|
||||
};
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
SSL_SESSION *sess;
|
||||
SSL_CTX *ctx;
|
||||
SSL *con;
|
||||
BIO *rbio;
|
||||
BIO *wbio;
|
||||
BIO *err;
|
||||
time_t now = 0;
|
||||
int testresult = 0;
|
||||
int ret;
|
||||
int i;
|
||||
|
||||
err = BIO_new_fp(stderr, BIO_NOCLOSE | BIO_FP_TEXT);
|
||||
|
||||
CRYPTO_set_mem_debug(1);
|
||||
CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON);
|
||||
|
||||
RAND_bytes(session_id, sizeof(session_id));
|
||||
RAND_bytes(master_secret, sizeof(master_secret));
|
||||
RAND_bytes(cookie, sizeof(cookie));
|
||||
RAND_bytes(server_random + 4, sizeof(server_random) - 4);
|
||||
|
||||
now = time(NULL);
|
||||
memcpy(server_random, &now, sizeof(now));
|
||||
|
||||
sess = client_session();
|
||||
if (sess == NULL) {
|
||||
printf("Failed to generate SSL_SESSION\n");
|
||||
goto end;
|
||||
}
|
||||
|
||||
handshake_md = EVP_MD_CTX_new();
|
||||
if (handshake_md == NULL ||
|
||||
!EVP_DigestInit_ex(handshake_md, EVP_md5_sha1(), NULL)) {
|
||||
printf("Failed to initialise handshake_md\n");
|
||||
goto end;
|
||||
}
|
||||
|
||||
ctx = SSL_CTX_new(DTLS_client_method());
|
||||
if (ctx == NULL) {
|
||||
printf("Failed to allocate SSL_CTX\n");
|
||||
goto end_md;
|
||||
}
|
||||
if (!SSL_CTX_set_min_proto_version(ctx, DTLS1_BAD_VER)) {
|
||||
printf("SSL_CTX_set_min_proto_version() failed\n");
|
||||
goto end_ctx;
|
||||
}
|
||||
if (!SSL_CTX_set_max_proto_version(ctx, DTLS1_BAD_VER)) {
|
||||
printf("SSL_CTX_set_max_proto_version() failed\n");
|
||||
goto end_ctx;
|
||||
}
|
||||
|
||||
if (!SSL_CTX_set_cipher_list(ctx, "AES128-SHA")) {
|
||||
printf("SSL_CTX_set_cipher_list() failed\n");
|
||||
goto end_ctx;
|
||||
}
|
||||
|
||||
con = SSL_new(ctx);
|
||||
if (!SSL_set_session(con, sess)) {
|
||||
printf("SSL_set_session() failed\n");
|
||||
goto end_con;
|
||||
}
|
||||
SSL_SESSION_free(sess);
|
||||
|
||||
rbio = BIO_new(BIO_s_mem());
|
||||
wbio = BIO_new(BIO_s_mem());
|
||||
|
||||
BIO_set_nbio(rbio, 1);
|
||||
BIO_set_nbio(wbio, 1);
|
||||
|
||||
SSL_set_bio(con, rbio, wbio);
|
||||
SSL_set_connect_state(con);
|
||||
|
||||
/* Send initial ClientHello */
|
||||
ret = SSL_do_handshake(con);
|
||||
if (ret > 0 || SSL_get_error(con, ret) != SSL_ERROR_WANT_READ) {
|
||||
printf("Unexpected handshake result at initial call!\n");
|
||||
goto end_con;
|
||||
}
|
||||
|
||||
if (validate_client_hello(wbio) != 1) {
|
||||
printf("Initial ClientHello failed validation\n");
|
||||
goto end_con;
|
||||
}
|
||||
if (send_hello_verify(rbio) != 1) {
|
||||
printf("Failed to send HelloVerify\n");
|
||||
goto end_con;
|
||||
}
|
||||
ret = SSL_do_handshake(con);
|
||||
if (ret > 0 || SSL_get_error(con, ret) != SSL_ERROR_WANT_READ) {
|
||||
printf("Unexpected handshake result after HelloVerify!\n");
|
||||
goto end_con;
|
||||
}
|
||||
if (validate_client_hello(wbio) != 2) {
|
||||
printf("Second ClientHello failed validation\n");
|
||||
goto end_con;
|
||||
}
|
||||
if (send_server_hello(rbio) != 1) {
|
||||
printf("Failed to send ServerHello\n");
|
||||
goto end_con;
|
||||
}
|
||||
ret = SSL_do_handshake(con);
|
||||
if (ret > 0 || SSL_get_error(con, ret) != SSL_ERROR_WANT_READ) {
|
||||
printf("Unexpected handshake result after ServerHello!\n");
|
||||
goto end_con;
|
||||
}
|
||||
if (send_finished(con, rbio) != 1) {
|
||||
printf("Failed to send Finished\n");
|
||||
goto end_con;
|
||||
}
|
||||
ret = SSL_do_handshake(con);
|
||||
if (ret < 1) {
|
||||
printf("Handshake not successful after Finished!\n");
|
||||
goto end_con;
|
||||
}
|
||||
if (validate_ccs(wbio) != 1) {
|
||||
printf("Failed to validate client CCS/Finished\n");
|
||||
goto end_con;
|
||||
}
|
||||
|
||||
/* While we're here and crafting packets by hand, we might as well do a
|
||||
bit of a stress test on the DTLS record replay handling. Not Cisco-DTLS
|
||||
specific but useful anyway for the general case. It's been broken
|
||||
before, and in fact was broken even for a basic 0, 2, 1 test case
|
||||
when this test was first added.... */
|
||||
for (i = 0; i < (int)OSSL_NELEM(tests); i++) {
|
||||
unsigned long recv_buf[2];
|
||||
|
||||
if (send_record(rbio, SSL3_RT_APPLICATION_DATA, tests[i].seq,
|
||||
&tests[i].seq, sizeof(unsigned long)) != 1) {
|
||||
printf("Failed to send data seq #0x%lx (%d)\n",
|
||||
tests[i].seq, i);
|
||||
goto end_con;
|
||||
}
|
||||
|
||||
if (tests[i].drop)
|
||||
continue;
|
||||
|
||||
ret = SSL_read(con, recv_buf, 2 * sizeof(unsigned long));
|
||||
if (ret != sizeof(unsigned long)) {
|
||||
printf("SSL_read failed or wrong size on seq#0x%lx (%d)\n",
|
||||
tests[i].seq, i);
|
||||
goto end_con;
|
||||
}
|
||||
if (recv_buf[0] != tests[i].seq) {
|
||||
printf("Wrong data packet received (0x%lx not 0x%lx) at packet %d\n",
|
||||
recv_buf[0], tests[i].seq, i);
|
||||
goto end_con;
|
||||
}
|
||||
}
|
||||
if (tests[i-1].drop) {
|
||||
printf("Error: last test cannot be DROP()\n");
|
||||
goto end_con;
|
||||
}
|
||||
testresult=1;
|
||||
|
||||
end_con:
|
||||
SSL_free(con);
|
||||
end_ctx:
|
||||
SSL_CTX_free(ctx);
|
||||
end_md:
|
||||
EVP_MD_CTX_free(handshake_md);
|
||||
end:
|
||||
ERR_print_errors_fp(stderr);
|
||||
|
||||
if (!testresult) {
|
||||
printf("Cisco BadDTLS test: FAILED\n");
|
||||
}
|
||||
|
||||
|
||||
#ifndef OPENSSL_NO_CRYPTO_MDEBUG
|
||||
if (CRYPTO_mem_leaks(err) <= 0)
|
||||
testresult = 0;
|
||||
#endif
|
||||
BIO_free(err);
|
||||
|
||||
return testresult?0:1;
|
||||
}
|
||||
+484
@@ -0,0 +1,484 @@
|
||||
/*
|
||||
* Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the OpenSSL license (the "License"). You may not use
|
||||
* this file except in compliance with the License. You can obtain a copy
|
||||
* in the file LICENSE in the source distribution or at
|
||||
* https://www.openssl.org/source/license.html
|
||||
*/
|
||||
|
||||
/*
|
||||
* This has been a quickly hacked 'ideatest.c'. When I add tests for other
|
||||
* RC2 modes, more of the code will be uncommented.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <openssl/opensslconf.h> /* To see if OPENSSL_NO_BF is defined */
|
||||
|
||||
#include "../e_os.h"
|
||||
|
||||
#ifdef OPENSSL_NO_BF
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
printf("No BF support\n");
|
||||
return (0);
|
||||
}
|
||||
#else
|
||||
# include <openssl/blowfish.h>
|
||||
|
||||
# ifdef CHARSET_EBCDIC
|
||||
# include <openssl/ebcdic.h>
|
||||
# endif
|
||||
|
||||
static char bf_key[2][30] = {
|
||||
"abcdefghijklmnopqrstuvwxyz",
|
||||
"Who is John Galt?"
|
||||
};
|
||||
|
||||
/* big endian */
|
||||
static BF_LONG bf_plain[2][2] = {
|
||||
{0x424c4f57L, 0x46495348L},
|
||||
{0xfedcba98L, 0x76543210L}
|
||||
};
|
||||
|
||||
static BF_LONG bf_cipher[2][2] = {
|
||||
{0x324ed0feL, 0xf413a203L},
|
||||
{0xcc91732bL, 0x8022f684L}
|
||||
};
|
||||
|
||||
/************/
|
||||
|
||||
/* Lets use the DES test vectors :-) */
|
||||
# define NUM_TESTS 34
|
||||
static unsigned char ecb_data[NUM_TESTS][8] = {
|
||||
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
|
||||
{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
|
||||
{0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
|
||||
{0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11},
|
||||
{0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF},
|
||||
{0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11},
|
||||
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
|
||||
{0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10},
|
||||
{0x7C, 0xA1, 0x10, 0x45, 0x4A, 0x1A, 0x6E, 0x57},
|
||||
{0x01, 0x31, 0xD9, 0x61, 0x9D, 0xC1, 0x37, 0x6E},
|
||||
{0x07, 0xA1, 0x13, 0x3E, 0x4A, 0x0B, 0x26, 0x86},
|
||||
{0x38, 0x49, 0x67, 0x4C, 0x26, 0x02, 0x31, 0x9E},
|
||||
{0x04, 0xB9, 0x15, 0xBA, 0x43, 0xFE, 0xB5, 0xB6},
|
||||
{0x01, 0x13, 0xB9, 0x70, 0xFD, 0x34, 0xF2, 0xCE},
|
||||
{0x01, 0x70, 0xF1, 0x75, 0x46, 0x8F, 0xB5, 0xE6},
|
||||
{0x43, 0x29, 0x7F, 0xAD, 0x38, 0xE3, 0x73, 0xFE},
|
||||
{0x07, 0xA7, 0x13, 0x70, 0x45, 0xDA, 0x2A, 0x16},
|
||||
{0x04, 0x68, 0x91, 0x04, 0xC2, 0xFD, 0x3B, 0x2F},
|
||||
{0x37, 0xD0, 0x6B, 0xB5, 0x16, 0xCB, 0x75, 0x46},
|
||||
{0x1F, 0x08, 0x26, 0x0D, 0x1A, 0xC2, 0x46, 0x5E},
|
||||
{0x58, 0x40, 0x23, 0x64, 0x1A, 0xBA, 0x61, 0x76},
|
||||
{0x02, 0x58, 0x16, 0x16, 0x46, 0x29, 0xB0, 0x07},
|
||||
{0x49, 0x79, 0x3E, 0xBC, 0x79, 0xB3, 0x25, 0x8F},
|
||||
{0x4F, 0xB0, 0x5E, 0x15, 0x15, 0xAB, 0x73, 0xA7},
|
||||
{0x49, 0xE9, 0x5D, 0x6D, 0x4C, 0xA2, 0x29, 0xBF},
|
||||
{0x01, 0x83, 0x10, 0xDC, 0x40, 0x9B, 0x26, 0xD6},
|
||||
{0x1C, 0x58, 0x7F, 0x1C, 0x13, 0x92, 0x4F, 0xEF},
|
||||
{0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01},
|
||||
{0x1F, 0x1F, 0x1F, 0x1F, 0x0E, 0x0E, 0x0E, 0x0E},
|
||||
{0xE0, 0xFE, 0xE0, 0xFE, 0xF1, 0xFE, 0xF1, 0xFE},
|
||||
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
|
||||
{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
|
||||
{0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF},
|
||||
{0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}
|
||||
};
|
||||
|
||||
static unsigned char plain_data[NUM_TESTS][8] = {
|
||||
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
|
||||
{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
|
||||
{0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01},
|
||||
{0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11},
|
||||
{0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11},
|
||||
{0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF},
|
||||
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
|
||||
{0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF},
|
||||
{0x01, 0xA1, 0xD6, 0xD0, 0x39, 0x77, 0x67, 0x42},
|
||||
{0x5C, 0xD5, 0x4C, 0xA8, 0x3D, 0xEF, 0x57, 0xDA},
|
||||
{0x02, 0x48, 0xD4, 0x38, 0x06, 0xF6, 0x71, 0x72},
|
||||
{0x51, 0x45, 0x4B, 0x58, 0x2D, 0xDF, 0x44, 0x0A},
|
||||
{0x42, 0xFD, 0x44, 0x30, 0x59, 0x57, 0x7F, 0xA2},
|
||||
{0x05, 0x9B, 0x5E, 0x08, 0x51, 0xCF, 0x14, 0x3A},
|
||||
{0x07, 0x56, 0xD8, 0xE0, 0x77, 0x47, 0x61, 0xD2},
|
||||
{0x76, 0x25, 0x14, 0xB8, 0x29, 0xBF, 0x48, 0x6A},
|
||||
{0x3B, 0xDD, 0x11, 0x90, 0x49, 0x37, 0x28, 0x02},
|
||||
{0x26, 0x95, 0x5F, 0x68, 0x35, 0xAF, 0x60, 0x9A},
|
||||
{0x16, 0x4D, 0x5E, 0x40, 0x4F, 0x27, 0x52, 0x32},
|
||||
{0x6B, 0x05, 0x6E, 0x18, 0x75, 0x9F, 0x5C, 0xCA},
|
||||
{0x00, 0x4B, 0xD6, 0xEF, 0x09, 0x17, 0x60, 0x62},
|
||||
{0x48, 0x0D, 0x39, 0x00, 0x6E, 0xE7, 0x62, 0xF2},
|
||||
{0x43, 0x75, 0x40, 0xC8, 0x69, 0x8F, 0x3C, 0xFA},
|
||||
{0x07, 0x2D, 0x43, 0xA0, 0x77, 0x07, 0x52, 0x92},
|
||||
{0x02, 0xFE, 0x55, 0x77, 0x81, 0x17, 0xF1, 0x2A},
|
||||
{0x1D, 0x9D, 0x5C, 0x50, 0x18, 0xF7, 0x28, 0xC2},
|
||||
{0x30, 0x55, 0x32, 0x28, 0x6D, 0x6F, 0x29, 0x5A},
|
||||
{0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF},
|
||||
{0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF},
|
||||
{0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF},
|
||||
{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
|
||||
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
|
||||
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
|
||||
{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}
|
||||
};
|
||||
|
||||
static unsigned char cipher_data[NUM_TESTS][8] = {
|
||||
{0x4E, 0xF9, 0x97, 0x45, 0x61, 0x98, 0xDD, 0x78},
|
||||
{0x51, 0x86, 0x6F, 0xD5, 0xB8, 0x5E, 0xCB, 0x8A},
|
||||
{0x7D, 0x85, 0x6F, 0x9A, 0x61, 0x30, 0x63, 0xF2},
|
||||
{0x24, 0x66, 0xDD, 0x87, 0x8B, 0x96, 0x3C, 0x9D},
|
||||
{0x61, 0xF9, 0xC3, 0x80, 0x22, 0x81, 0xB0, 0x96},
|
||||
{0x7D, 0x0C, 0xC6, 0x30, 0xAF, 0xDA, 0x1E, 0xC7},
|
||||
{0x4E, 0xF9, 0x97, 0x45, 0x61, 0x98, 0xDD, 0x78},
|
||||
{0x0A, 0xCE, 0xAB, 0x0F, 0xC6, 0xA0, 0xA2, 0x8D},
|
||||
{0x59, 0xC6, 0x82, 0x45, 0xEB, 0x05, 0x28, 0x2B},
|
||||
{0xB1, 0xB8, 0xCC, 0x0B, 0x25, 0x0F, 0x09, 0xA0},
|
||||
{0x17, 0x30, 0xE5, 0x77, 0x8B, 0xEA, 0x1D, 0xA4},
|
||||
{0xA2, 0x5E, 0x78, 0x56, 0xCF, 0x26, 0x51, 0xEB},
|
||||
{0x35, 0x38, 0x82, 0xB1, 0x09, 0xCE, 0x8F, 0x1A},
|
||||
{0x48, 0xF4, 0xD0, 0x88, 0x4C, 0x37, 0x99, 0x18},
|
||||
{0x43, 0x21, 0x93, 0xB7, 0x89, 0x51, 0xFC, 0x98},
|
||||
{0x13, 0xF0, 0x41, 0x54, 0xD6, 0x9D, 0x1A, 0xE5},
|
||||
{0x2E, 0xED, 0xDA, 0x93, 0xFF, 0xD3, 0x9C, 0x79},
|
||||
{0xD8, 0x87, 0xE0, 0x39, 0x3C, 0x2D, 0xA6, 0xE3},
|
||||
{0x5F, 0x99, 0xD0, 0x4F, 0x5B, 0x16, 0x39, 0x69},
|
||||
{0x4A, 0x05, 0x7A, 0x3B, 0x24, 0xD3, 0x97, 0x7B},
|
||||
{0x45, 0x20, 0x31, 0xC1, 0xE4, 0xFA, 0xDA, 0x8E},
|
||||
{0x75, 0x55, 0xAE, 0x39, 0xF5, 0x9B, 0x87, 0xBD},
|
||||
{0x53, 0xC5, 0x5F, 0x9C, 0xB4, 0x9F, 0xC0, 0x19},
|
||||
{0x7A, 0x8E, 0x7B, 0xFA, 0x93, 0x7E, 0x89, 0xA3},
|
||||
{0xCF, 0x9C, 0x5D, 0x7A, 0x49, 0x86, 0xAD, 0xB5},
|
||||
{0xD1, 0xAB, 0xB2, 0x90, 0x65, 0x8B, 0xC7, 0x78},
|
||||
{0x55, 0xCB, 0x37, 0x74, 0xD1, 0x3E, 0xF2, 0x01},
|
||||
{0xFA, 0x34, 0xEC, 0x48, 0x47, 0xB2, 0x68, 0xB2},
|
||||
{0xA7, 0x90, 0x79, 0x51, 0x08, 0xEA, 0x3C, 0xAE},
|
||||
{0xC3, 0x9E, 0x07, 0x2D, 0x9F, 0xAC, 0x63, 0x1D},
|
||||
{0x01, 0x49, 0x33, 0xE0, 0xCD, 0xAF, 0xF6, 0xE4},
|
||||
{0xF2, 0x1E, 0x9A, 0x77, 0xB7, 0x1C, 0x49, 0xBC},
|
||||
{0x24, 0x59, 0x46, 0x88, 0x57, 0x54, 0x36, 0x9A},
|
||||
{0x6B, 0x5C, 0x5A, 0x9C, 0x5D, 0x9E, 0x0A, 0x5A},
|
||||
};
|
||||
|
||||
static unsigned char cbc_key[16] = {
|
||||
0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
|
||||
0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87
|
||||
};
|
||||
static unsigned char cbc_iv[8] =
|
||||
{ 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 };
|
||||
static char cbc_data[40] = "7654321 Now is the time for ";
|
||||
static unsigned char cbc_ok[32] = {
|
||||
0x6B, 0x77, 0xB4, 0xD6, 0x30, 0x06, 0xDE, 0xE6,
|
||||
0x05, 0xB1, 0x56, 0xE2, 0x74, 0x03, 0x97, 0x93,
|
||||
0x58, 0xDE, 0xB9, 0xE7, 0x15, 0x46, 0x16, 0xD9,
|
||||
0x59, 0xF1, 0x65, 0x2B, 0xD5, 0xFF, 0x92, 0xCC
|
||||
};
|
||||
|
||||
static unsigned char cfb64_ok[] = {
|
||||
0xE7, 0x32, 0x14, 0xA2, 0x82, 0x21, 0x39, 0xCA,
|
||||
0xF2, 0x6E, 0xCF, 0x6D, 0x2E, 0xB9, 0xE7, 0x6E,
|
||||
0x3D, 0xA3, 0xDE, 0x04, 0xD1, 0x51, 0x72, 0x00,
|
||||
0x51, 0x9D, 0x57, 0xA6, 0xC3
|
||||
};
|
||||
|
||||
static unsigned char ofb64_ok[] = {
|
||||
0xE7, 0x32, 0x14, 0xA2, 0x82, 0x21, 0x39, 0xCA,
|
||||
0x62, 0xB3, 0x43, 0xCC, 0x5B, 0x65, 0x58, 0x73,
|
||||
0x10, 0xDD, 0x90, 0x8D, 0x0C, 0x24, 0x1B, 0x22,
|
||||
0x63, 0xC2, 0xCF, 0x80, 0xDA
|
||||
};
|
||||
|
||||
# define KEY_TEST_NUM 25
|
||||
static unsigned char key_test[KEY_TEST_NUM] = {
|
||||
0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87,
|
||||
0x78, 0x69, 0x5a, 0x4b, 0x3c, 0x2d, 0x1e, 0x0f,
|
||||
0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
|
||||
0x88
|
||||
};
|
||||
|
||||
static unsigned char key_data[8] =
|
||||
{ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10 };
|
||||
|
||||
static unsigned char key_out[KEY_TEST_NUM][8] = {
|
||||
{0xF9, 0xAD, 0x59, 0x7C, 0x49, 0xDB, 0x00, 0x5E},
|
||||
{0xE9, 0x1D, 0x21, 0xC1, 0xD9, 0x61, 0xA6, 0xD6},
|
||||
{0xE9, 0xC2, 0xB7, 0x0A, 0x1B, 0xC6, 0x5C, 0xF3},
|
||||
{0xBE, 0x1E, 0x63, 0x94, 0x08, 0x64, 0x0F, 0x05},
|
||||
{0xB3, 0x9E, 0x44, 0x48, 0x1B, 0xDB, 0x1E, 0x6E},
|
||||
{0x94, 0x57, 0xAA, 0x83, 0xB1, 0x92, 0x8C, 0x0D},
|
||||
{0x8B, 0xB7, 0x70, 0x32, 0xF9, 0x60, 0x62, 0x9D},
|
||||
{0xE8, 0x7A, 0x24, 0x4E, 0x2C, 0xC8, 0x5E, 0x82},
|
||||
{0x15, 0x75, 0x0E, 0x7A, 0x4F, 0x4E, 0xC5, 0x77},
|
||||
{0x12, 0x2B, 0xA7, 0x0B, 0x3A, 0xB6, 0x4A, 0xE0},
|
||||
{0x3A, 0x83, 0x3C, 0x9A, 0xFF, 0xC5, 0x37, 0xF6},
|
||||
{0x94, 0x09, 0xDA, 0x87, 0xA9, 0x0F, 0x6B, 0xF2},
|
||||
{0x88, 0x4F, 0x80, 0x62, 0x50, 0x60, 0xB8, 0xB4},
|
||||
{0x1F, 0x85, 0x03, 0x1C, 0x19, 0xE1, 0x19, 0x68},
|
||||
{0x79, 0xD9, 0x37, 0x3A, 0x71, 0x4C, 0xA3, 0x4F},
|
||||
{0x93, 0x14, 0x28, 0x87, 0xEE, 0x3B, 0xE1, 0x5C},
|
||||
{0x03, 0x42, 0x9E, 0x83, 0x8C, 0xE2, 0xD1, 0x4B},
|
||||
{0xA4, 0x29, 0x9E, 0x27, 0x46, 0x9F, 0xF6, 0x7B},
|
||||
{0xAF, 0xD5, 0xAE, 0xD1, 0xC1, 0xBC, 0x96, 0xA8},
|
||||
{0x10, 0x85, 0x1C, 0x0E, 0x38, 0x58, 0xDA, 0x9F},
|
||||
{0xE6, 0xF5, 0x1E, 0xD7, 0x9B, 0x9D, 0xB2, 0x1F},
|
||||
{0x64, 0xA6, 0xE1, 0x4A, 0xFD, 0x36, 0xB4, 0x6F},
|
||||
{0x80, 0xC7, 0xD7, 0xD4, 0x5A, 0x54, 0x79, 0xAD},
|
||||
{0x05, 0x04, 0x4B, 0x62, 0xFA, 0x52, 0xD0, 0x80},
|
||||
};
|
||||
|
||||
static int test(void);
|
||||
static int print_test_data(void);
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (argc > 1)
|
||||
ret = print_test_data();
|
||||
else
|
||||
ret = test();
|
||||
|
||||
EXIT(ret);
|
||||
}
|
||||
|
||||
static int print_test_data(void)
|
||||
{
|
||||
unsigned int i, j;
|
||||
|
||||
printf("ecb test data\n");
|
||||
printf("key bytes\t\tclear bytes\t\tcipher bytes\n");
|
||||
for (i = 0; i < NUM_TESTS; i++) {
|
||||
for (j = 0; j < 8; j++)
|
||||
printf("%02X", ecb_data[i][j]);
|
||||
printf("\t");
|
||||
for (j = 0; j < 8; j++)
|
||||
printf("%02X", plain_data[i][j]);
|
||||
printf("\t");
|
||||
for (j = 0; j < 8; j++)
|
||||
printf("%02X", cipher_data[i][j]);
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
printf("set_key test data\n");
|
||||
printf("data[8]= ");
|
||||
for (j = 0; j < 8; j++)
|
||||
printf("%02X", key_data[j]);
|
||||
printf("\n");
|
||||
for (i = 0; i < KEY_TEST_NUM - 1; i++) {
|
||||
printf("c=");
|
||||
for (j = 0; j < 8; j++)
|
||||
printf("%02X", key_out[i][j]);
|
||||
printf(" k[%2u]=", i + 1);
|
||||
for (j = 0; j < i + 1; j++)
|
||||
printf("%02X", key_test[j]);
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
printf("\nchaining mode test data\n");
|
||||
printf("key[16] = ");
|
||||
for (j = 0; j < 16; j++)
|
||||
printf("%02X", cbc_key[j]);
|
||||
printf("\niv[8] = ");
|
||||
for (j = 0; j < 8; j++)
|
||||
printf("%02X", cbc_iv[j]);
|
||||
printf("\ndata[%d] = '%s'", (int)strlen(cbc_data) + 1, cbc_data);
|
||||
printf("\ndata[%d] = ", (int)strlen(cbc_data) + 1);
|
||||
for (j = 0; j < strlen(cbc_data) + 1; j++)
|
||||
printf("%02X", cbc_data[j]);
|
||||
printf("\n");
|
||||
printf("cbc cipher text\n");
|
||||
printf("cipher[%d]= ", 32);
|
||||
for (j = 0; j < 32; j++)
|
||||
printf("%02X", cbc_ok[j]);
|
||||
printf("\n");
|
||||
|
||||
printf("cfb64 cipher text\n");
|
||||
printf("cipher[%d]= ", (int)strlen(cbc_data) + 1);
|
||||
for (j = 0; j < strlen(cbc_data) + 1; j++)
|
||||
printf("%02X", cfb64_ok[j]);
|
||||
printf("\n");
|
||||
|
||||
printf("ofb64 cipher text\n");
|
||||
printf("cipher[%d]= ", (int)strlen(cbc_data) + 1);
|
||||
for (j = 0; j < strlen(cbc_data) + 1; j++)
|
||||
printf("%02X", ofb64_ok[j]);
|
||||
printf("\n");
|
||||
return (0);
|
||||
}
|
||||
|
||||
static int test(void)
|
||||
{
|
||||
unsigned char cbc_in[40], cbc_out[40], iv[8];
|
||||
int i, n, err = 0;
|
||||
BF_KEY key;
|
||||
BF_LONG data[2];
|
||||
unsigned char out[8];
|
||||
BF_LONG len;
|
||||
|
||||
# ifdef CHARSET_EBCDIC
|
||||
ebcdic2ascii(cbc_data, cbc_data, strlen(cbc_data));
|
||||
# endif
|
||||
|
||||
printf("testing blowfish in raw ecb mode\n");
|
||||
for (n = 0; n < 2; n++) {
|
||||
# ifdef CHARSET_EBCDIC
|
||||
ebcdic2ascii(bf_key[n], bf_key[n], strlen(bf_key[n]));
|
||||
# endif
|
||||
BF_set_key(&key, strlen(bf_key[n]), (unsigned char *)bf_key[n]);
|
||||
|
||||
data[0] = bf_plain[n][0];
|
||||
data[1] = bf_plain[n][1];
|
||||
BF_encrypt(data, &key);
|
||||
if (memcmp(&(bf_cipher[n][0]), &(data[0]), 8) != 0) {
|
||||
printf("BF_encrypt error encrypting\n");
|
||||
printf("got :");
|
||||
for (i = 0; i < 2; i++)
|
||||
printf("%08lX ", (unsigned long)data[i]);
|
||||
printf("\n");
|
||||
printf("expected:");
|
||||
for (i = 0; i < 2; i++)
|
||||
printf("%08lX ", (unsigned long)bf_cipher[n][i]);
|
||||
err = 1;
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
BF_decrypt(&(data[0]), &key);
|
||||
if (memcmp(&(bf_plain[n][0]), &(data[0]), 8) != 0) {
|
||||
printf("BF_encrypt error decrypting\n");
|
||||
printf("got :");
|
||||
for (i = 0; i < 2; i++)
|
||||
printf("%08lX ", (unsigned long)data[i]);
|
||||
printf("\n");
|
||||
printf("expected:");
|
||||
for (i = 0; i < 2; i++)
|
||||
printf("%08lX ", (unsigned long)bf_plain[n][i]);
|
||||
printf("\n");
|
||||
err = 1;
|
||||
}
|
||||
}
|
||||
|
||||
printf("testing blowfish in ecb mode\n");
|
||||
|
||||
for (n = 0; n < NUM_TESTS; n++) {
|
||||
BF_set_key(&key, 8, ecb_data[n]);
|
||||
|
||||
BF_ecb_encrypt(&(plain_data[n][0]), out, &key, BF_ENCRYPT);
|
||||
if (memcmp(&(cipher_data[n][0]), out, 8) != 0) {
|
||||
printf("BF_ecb_encrypt blowfish error encrypting\n");
|
||||
printf("got :");
|
||||
for (i = 0; i < 8; i++)
|
||||
printf("%02X ", out[i]);
|
||||
printf("\n");
|
||||
printf("expected:");
|
||||
for (i = 0; i < 8; i++)
|
||||
printf("%02X ", cipher_data[n][i]);
|
||||
err = 1;
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
BF_ecb_encrypt(out, out, &key, BF_DECRYPT);
|
||||
if (memcmp(&(plain_data[n][0]), out, 8) != 0) {
|
||||
printf("BF_ecb_encrypt error decrypting\n");
|
||||
printf("got :");
|
||||
for (i = 0; i < 8; i++)
|
||||
printf("%02X ", out[i]);
|
||||
printf("\n");
|
||||
printf("expected:");
|
||||
for (i = 0; i < 8; i++)
|
||||
printf("%02X ", plain_data[n][i]);
|
||||
printf("\n");
|
||||
err = 1;
|
||||
}
|
||||
}
|
||||
|
||||
printf("testing blowfish set_key\n");
|
||||
for (n = 1; n < KEY_TEST_NUM; n++) {
|
||||
BF_set_key(&key, n, key_test);
|
||||
BF_ecb_encrypt(key_data, out, &key, BF_ENCRYPT);
|
||||
/* mips-sgi-irix6.5-gcc vv -mabi=64 bug workaround */
|
||||
if (memcmp(out, &(key_out[i = n - 1][0]), 8) != 0) {
|
||||
printf("blowfish setkey error\n");
|
||||
err = 1;
|
||||
}
|
||||
}
|
||||
|
||||
printf("testing blowfish in cbc mode\n");
|
||||
len = strlen(cbc_data) + 1;
|
||||
|
||||
BF_set_key(&key, 16, cbc_key);
|
||||
memset(cbc_in, 0, sizeof(cbc_in));
|
||||
memset(cbc_out, 0, sizeof(cbc_out));
|
||||
memcpy(iv, cbc_iv, sizeof(iv));
|
||||
BF_cbc_encrypt((unsigned char *)cbc_data, cbc_out, len,
|
||||
&key, iv, BF_ENCRYPT);
|
||||
if (memcmp(cbc_out, cbc_ok, 32) != 0) {
|
||||
err = 1;
|
||||
printf("BF_cbc_encrypt encrypt error\n");
|
||||
for (i = 0; i < 32; i++)
|
||||
printf("0x%02X,", cbc_out[i]);
|
||||
}
|
||||
memcpy(iv, cbc_iv, 8);
|
||||
BF_cbc_encrypt(cbc_out, cbc_in, len, &key, iv, BF_DECRYPT);
|
||||
if (memcmp(cbc_in, cbc_data, strlen(cbc_data) + 1) != 0) {
|
||||
printf("BF_cbc_encrypt decrypt error\n");
|
||||
err = 1;
|
||||
}
|
||||
|
||||
printf("testing blowfish in cfb64 mode\n");
|
||||
|
||||
BF_set_key(&key, 16, cbc_key);
|
||||
memset(cbc_in, 0, 40);
|
||||
memset(cbc_out, 0, 40);
|
||||
memcpy(iv, cbc_iv, 8);
|
||||
n = 0;
|
||||
BF_cfb64_encrypt((unsigned char *)cbc_data, cbc_out, (long)13,
|
||||
&key, iv, &n, BF_ENCRYPT);
|
||||
BF_cfb64_encrypt((unsigned char *)&(cbc_data[13]), &(cbc_out[13]),
|
||||
len - 13, &key, iv, &n, BF_ENCRYPT);
|
||||
if (memcmp(cbc_out, cfb64_ok, (int)len) != 0) {
|
||||
err = 1;
|
||||
printf("BF_cfb64_encrypt encrypt error\n");
|
||||
for (i = 0; i < (int)len; i++)
|
||||
printf("0x%02X,", cbc_out[i]);
|
||||
}
|
||||
n = 0;
|
||||
memcpy(iv, cbc_iv, 8);
|
||||
BF_cfb64_encrypt(cbc_out, cbc_in, 17, &key, iv, &n, BF_DECRYPT);
|
||||
BF_cfb64_encrypt(&(cbc_out[17]), &(cbc_in[17]), len - 17,
|
||||
&key, iv, &n, BF_DECRYPT);
|
||||
if (memcmp(cbc_in, cbc_data, (int)len) != 0) {
|
||||
printf("BF_cfb64_encrypt decrypt error\n");
|
||||
err = 1;
|
||||
}
|
||||
|
||||
printf("testing blowfish in ofb64\n");
|
||||
|
||||
BF_set_key(&key, 16, cbc_key);
|
||||
memset(cbc_in, 0, 40);
|
||||
memset(cbc_out, 0, 40);
|
||||
memcpy(iv, cbc_iv, 8);
|
||||
n = 0;
|
||||
BF_ofb64_encrypt((unsigned char *)cbc_data, cbc_out, (long)13, &key, iv,
|
||||
&n);
|
||||
BF_ofb64_encrypt((unsigned char *)&(cbc_data[13]), &(cbc_out[13]),
|
||||
len - 13, &key, iv, &n);
|
||||
if (memcmp(cbc_out, ofb64_ok, (int)len) != 0) {
|
||||
err = 1;
|
||||
printf("BF_ofb64_encrypt encrypt error\n");
|
||||
for (i = 0; i < (int)len; i++)
|
||||
printf("0x%02X,", cbc_out[i]);
|
||||
}
|
||||
n = 0;
|
||||
memcpy(iv, cbc_iv, 8);
|
||||
BF_ofb64_encrypt(cbc_out, cbc_in, 17, &key, iv, &n);
|
||||
BF_ofb64_encrypt(&(cbc_out[17]), &(cbc_in[17]), len - 17, &key, iv, &n);
|
||||
if (memcmp(cbc_in, cbc_data, (int)len) != 0) {
|
||||
printf("BF_ofb64_encrypt decrypt error\n");
|
||||
err = 1;
|
||||
}
|
||||
|
||||
return (err);
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,138 @@
|
||||
/*
|
||||
* Copyright 2016 The OpenSSL Project Authors. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the OpenSSL license (the "License"). You may not use
|
||||
* this file except in compliance with the License. You can obtain a copy
|
||||
* in the file LICENSE in the source distribution or at
|
||||
* https://www.openssl.org/source/license.html
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <openssl/evp.h>
|
||||
#include <openssl/bio.h>
|
||||
#include <openssl/rand.h>
|
||||
|
||||
int main()
|
||||
{
|
||||
BIO *b;
|
||||
static const unsigned char key[16] = { 0 };
|
||||
static unsigned char inp[1024] = { 0 };
|
||||
unsigned char out[1024], ref[1024];
|
||||
int i, lref, len;
|
||||
|
||||
/* Fill buffer with non-zero data so that over steps can be detected */
|
||||
if (RAND_bytes(inp, sizeof(inp)) <= 0)
|
||||
return -1;
|
||||
|
||||
/*
|
||||
* Exercise CBC cipher
|
||||
*/
|
||||
|
||||
/* reference output for single-chunk operation */
|
||||
b = BIO_new(BIO_f_cipher());
|
||||
if (!BIO_set_cipher(b, EVP_aes_128_cbc(), key, NULL, 0))
|
||||
return -1;
|
||||
BIO_push(b, BIO_new_mem_buf(inp, sizeof(inp)));
|
||||
lref = BIO_read(b, ref, sizeof(ref));
|
||||
BIO_free_all(b);
|
||||
|
||||
/* perform split operations and compare to reference */
|
||||
for (i = 1; i < lref; i++) {
|
||||
b = BIO_new(BIO_f_cipher());
|
||||
if (!BIO_set_cipher(b, EVP_aes_128_cbc(), key, NULL, 0))
|
||||
return -1;
|
||||
BIO_push(b, BIO_new_mem_buf(inp, sizeof(inp)));
|
||||
memset(out, 0, sizeof(out));
|
||||
out[i] = ~ref[i];
|
||||
len = BIO_read(b, out, i);
|
||||
/* check for overstep */
|
||||
if (out[i] != (unsigned char)~ref[i]) {
|
||||
fprintf(stderr, "CBC output overstep@%d\n", i);
|
||||
return 1;
|
||||
}
|
||||
len += BIO_read(b, out + len, sizeof(out) - len);
|
||||
BIO_free_all(b);
|
||||
|
||||
if (len != lref || memcmp(out, ref, len)) {
|
||||
fprintf(stderr, "CBC output mismatch@%d\n", i);
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
|
||||
/* perform small-chunk operations and compare to reference */
|
||||
for (i = 1; i < lref / 2; i++) {
|
||||
int delta;
|
||||
|
||||
b = BIO_new(BIO_f_cipher());
|
||||
if (!BIO_set_cipher(b, EVP_aes_128_cbc(), key, NULL, 0))
|
||||
return -1;
|
||||
BIO_push(b, BIO_new_mem_buf(inp, sizeof(inp)));
|
||||
memset(out, 0, sizeof(out));
|
||||
for (len = 0; (delta = BIO_read(b, out + len, i)); ) {
|
||||
len += delta;
|
||||
}
|
||||
BIO_free_all(b);
|
||||
|
||||
if (len != lref || memcmp(out, ref, len)) {
|
||||
fprintf(stderr, "CBC output mismatch@%d\n", i);
|
||||
return 3;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Exercise CTR cipher
|
||||
*/
|
||||
|
||||
/* reference output for single-chunk operation */
|
||||
b = BIO_new(BIO_f_cipher());
|
||||
if (!BIO_set_cipher(b, EVP_aes_128_ctr(), key, NULL, 0))
|
||||
return -1;
|
||||
BIO_push(b, BIO_new_mem_buf(inp, sizeof(inp)));
|
||||
lref = BIO_read(b, ref, sizeof(ref));
|
||||
BIO_free_all(b);
|
||||
|
||||
/* perform split operations and compare to reference */
|
||||
for (i = 1; i < lref; i++) {
|
||||
b = BIO_new(BIO_f_cipher());
|
||||
if (!BIO_set_cipher(b, EVP_aes_128_ctr(), key, NULL, 0))
|
||||
return -1;
|
||||
BIO_push(b, BIO_new_mem_buf(inp, sizeof(inp)));
|
||||
memset(out, 0, sizeof(out));
|
||||
out[i] = ~ref[i];
|
||||
len = BIO_read(b, out, i);
|
||||
/* check for overstep */
|
||||
if (out[i] != (unsigned char)~ref[i]) {
|
||||
fprintf(stderr, "CTR output overstep@%d\n", i);
|
||||
return 4;
|
||||
}
|
||||
len += BIO_read(b, out + len, sizeof(out) - len);
|
||||
BIO_free_all(b);
|
||||
|
||||
if (len != lref || memcmp(out, ref, len)) {
|
||||
fprintf(stderr, "CTR output mismatch@%d\n", i);
|
||||
return 5;
|
||||
}
|
||||
}
|
||||
|
||||
/* perform small-chunk operations and compare to reference */
|
||||
for (i = 1; i < lref / 2; i++) {
|
||||
int delta;
|
||||
|
||||
b = BIO_new(BIO_f_cipher());
|
||||
if (!BIO_set_cipher(b, EVP_aes_128_ctr(), key, NULL, 0))
|
||||
return -1;
|
||||
BIO_push(b, BIO_new_mem_buf(inp, sizeof(inp)));
|
||||
memset(out, 0, sizeof(out));
|
||||
for (len = 0; (delta = BIO_read(b, out + len, i)); ) {
|
||||
len += delta;
|
||||
}
|
||||
BIO_free_all(b);
|
||||
|
||||
if (len != lref || memcmp(out, ref, len)) {
|
||||
fprintf(stderr, "CTR output mismatch@%d\n", i);
|
||||
return 6;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,225 @@
|
||||
/*
|
||||
* Copyright 2016 The OpenSSL Project Authors. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the OpenSSL license (the "License"). You may not use
|
||||
* this file except in compliance with the License. You can obtain a copy
|
||||
* in the file LICENSE in the source distribution or at
|
||||
* https://www.openssl.org/source/license.html
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <openssl/bio.h>
|
||||
|
||||
static int justprint = 0;
|
||||
|
||||
static char *fpexpected[][5] = {
|
||||
/* 0 */ { "0.0000e+00", "0.0000", "0", "0.0000E+00", "0" },
|
||||
/* 1 */ { "6.7000e-01", "0.6700", "0.67", "6.7000E-01", "0.67" },
|
||||
/* 2 */ { "6.6667e-01", "0.6667", "0.6667", "6.6667E-01", "0.6667" },
|
||||
/* 3 */ { "6.6667e-04", "0.0007", "0.0006667", "6.6667E-04", "0.0006667" },
|
||||
/* 4 */ { "6.6667e-05", "0.0001", "6.667e-05", "6.6667E-05", "6.667E-05" },
|
||||
/* 5 */ { "6.6667e+00", "6.6667", "6.667", "6.6667E+00", "6.667" },
|
||||
/* 6 */ { "6.6667e+01", "66.6667", "66.67", "6.6667E+01", "66.67" },
|
||||
/* 7 */ { "6.6667e+02", "666.6667", "666.7", "6.6667E+02", "666.7" },
|
||||
/* 8 */ { "6.6667e+03", "6666.6667", "6667", "6.6667E+03", "6667" },
|
||||
/* 9 */ { "6.6667e+04", "66666.6667", "6.667e+04", "6.6667E+04", "6.667E+04" },
|
||||
/* 10 */ { "0.00000e+00", "0.00000", "0", "0.00000E+00", "0" },
|
||||
/* 11 */ { "6.70000e-01", "0.67000", "0.67", "6.70000E-01", "0.67" },
|
||||
/* 12 */ { "6.66667e-01", "0.66667", "0.66667", "6.66667E-01", "0.66667" },
|
||||
/* 13 */ { "6.66667e-04", "0.00067", "0.00066667", "6.66667E-04", "0.00066667" },
|
||||
/* 14 */ { "6.66667e-05", "0.00007", "6.6667e-05", "6.66667E-05", "6.6667E-05" },
|
||||
/* 15 */ { "6.66667e+00", "6.66667", "6.6667", "6.66667E+00", "6.6667" },
|
||||
/* 16 */ { "6.66667e+01", "66.66667", "66.667", "6.66667E+01", "66.667" },
|
||||
/* 17 */ { "6.66667e+02", "666.66667", "666.67", "6.66667E+02", "666.67" },
|
||||
/* 18 */ { "6.66667e+03", "6666.66667", "6666.7", "6.66667E+03", "6666.7" },
|
||||
/* 19 */ { "6.66667e+04", "66666.66667", "66667", "6.66667E+04", "66667" },
|
||||
/* 20 */ { " 0.0000e+00", " 0.0000", " 0", " 0.0000E+00", " 0" },
|
||||
/* 21 */ { " 6.7000e-01", " 0.6700", " 0.67", " 6.7000E-01", " 0.67" },
|
||||
/* 22 */ { " 6.6667e-01", " 0.6667", " 0.6667", " 6.6667E-01", " 0.6667" },
|
||||
/* 23 */ { " 6.6667e-04", " 0.0007", " 0.0006667", " 6.6667E-04", " 0.0006667" },
|
||||
/* 24 */ { " 6.6667e-05", " 0.0001", " 6.667e-05", " 6.6667E-05", " 6.667E-05" },
|
||||
/* 25 */ { " 6.6667e+00", " 6.6667", " 6.667", " 6.6667E+00", " 6.667" },
|
||||
/* 26 */ { " 6.6667e+01", " 66.6667", " 66.67", " 6.6667E+01", " 66.67" },
|
||||
/* 27 */ { " 6.6667e+02", " 666.6667", " 666.7", " 6.6667E+02", " 666.7" },
|
||||
/* 28 */ { " 6.6667e+03", " 6666.6667", " 6667", " 6.6667E+03", " 6667" },
|
||||
/* 29 */ { " 6.6667e+04", " 66666.6667", " 6.667e+04", " 6.6667E+04", " 6.667E+04" },
|
||||
/* 30 */ { " 0.00000e+00", " 0.00000", " 0", " 0.00000E+00", " 0" },
|
||||
/* 31 */ { " 6.70000e-01", " 0.67000", " 0.67", " 6.70000E-01", " 0.67" },
|
||||
/* 32 */ { " 6.66667e-01", " 0.66667", " 0.66667", " 6.66667E-01", " 0.66667" },
|
||||
/* 33 */ { " 6.66667e-04", " 0.00067", " 0.00066667", " 6.66667E-04", " 0.00066667" },
|
||||
/* 34 */ { " 6.66667e-05", " 0.00007", " 6.6667e-05", " 6.66667E-05", " 6.6667E-05" },
|
||||
/* 35 */ { " 6.66667e+00", " 6.66667", " 6.6667", " 6.66667E+00", " 6.6667" },
|
||||
/* 36 */ { " 6.66667e+01", " 66.66667", " 66.667", " 6.66667E+01", " 66.667" },
|
||||
/* 37 */ { " 6.66667e+02", " 666.66667", " 666.67", " 6.66667E+02", " 666.67" },
|
||||
/* 38 */ { " 6.66667e+03", " 6666.66667", " 6666.7", " 6.66667E+03", " 6666.7" },
|
||||
/* 39 */ { " 6.66667e+04", " 66666.66667", " 66667", " 6.66667E+04", " 66667" },
|
||||
/* 40 */ { "0e+00", "0", "0", "0E+00", "0" },
|
||||
/* 41 */ { "7e-01", "1", "0.7", "7E-01", "0.7" },
|
||||
/* 42 */ { "7e-01", "1", "0.7", "7E-01", "0.7" },
|
||||
/* 43 */ { "7e-04", "0", "0.0007", "7E-04", "0.0007" },
|
||||
/* 44 */ { "7e-05", "0", "7e-05", "7E-05", "7E-05" },
|
||||
/* 45 */ { "7e+00", "7", "7", "7E+00", "7" },
|
||||
/* 46 */ { "7e+01", "67", "7e+01", "7E+01", "7E+01" },
|
||||
/* 47 */ { "7e+02", "667", "7e+02", "7E+02", "7E+02" },
|
||||
/* 48 */ { "7e+03", "6667", "7e+03", "7E+03", "7E+03" },
|
||||
/* 49 */ { "7e+04", "66667", "7e+04", "7E+04", "7E+04" },
|
||||
/* 50 */ { "0.000000e+00", "0.000000", "0", "0.000000E+00", "0" },
|
||||
/* 51 */ { "6.700000e-01", "0.670000", "0.67", "6.700000E-01", "0.67" },
|
||||
/* 52 */ { "6.666667e-01", "0.666667", "0.666667", "6.666667E-01", "0.666667" },
|
||||
/* 53 */ { "6.666667e-04", "0.000667", "0.000666667", "6.666667E-04", "0.000666667" },
|
||||
/* 54 */ { "6.666667e-05", "0.000067", "6.66667e-05", "6.666667E-05", "6.66667E-05" },
|
||||
/* 55 */ { "6.666667e+00", "6.666667", "6.66667", "6.666667E+00", "6.66667" },
|
||||
/* 56 */ { "6.666667e+01", "66.666667", "66.6667", "6.666667E+01", "66.6667" },
|
||||
/* 57 */ { "6.666667e+02", "666.666667", "666.667", "6.666667E+02", "666.667" },
|
||||
/* 58 */ { "6.666667e+03", "6666.666667", "6666.67", "6.666667E+03", "6666.67" },
|
||||
/* 59 */ { "6.666667e+04", "66666.666667", "66666.7", "6.666667E+04", "66666.7" },
|
||||
/* 60 */ { "0.0000e+00", "000.0000", "00000000", "0.0000E+00", "00000000" },
|
||||
/* 61 */ { "6.7000e-01", "000.6700", "00000.67", "6.7000E-01", "00000.67" },
|
||||
/* 62 */ { "6.6667e-01", "000.6667", "000.6667", "6.6667E-01", "000.6667" },
|
||||
/* 63 */ { "6.6667e-04", "000.0007", "0.0006667", "6.6667E-04", "0.0006667" },
|
||||
/* 64 */ { "6.6667e-05", "000.0001", "6.667e-05", "6.6667E-05", "6.667E-05" },
|
||||
/* 65 */ { "6.6667e+00", "006.6667", "0006.667", "6.6667E+00", "0006.667" },
|
||||
/* 66 */ { "6.6667e+01", "066.6667", "00066.67", "6.6667E+01", "00066.67" },
|
||||
/* 67 */ { "6.6667e+02", "666.6667", "000666.7", "6.6667E+02", "000666.7" },
|
||||
/* 68 */ { "6.6667e+03", "6666.6667", "00006667", "6.6667E+03", "00006667" },
|
||||
/* 69 */ { "6.6667e+04", "66666.6667", "6.667e+04", "6.6667E+04", "6.667E+04" },
|
||||
};
|
||||
|
||||
static void dofptest(int test, double val, char *width, int prec, int *fail)
|
||||
{
|
||||
char format[80], result[80];
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 5; i++) {
|
||||
char *fspec = NULL;
|
||||
switch (i) {
|
||||
case 0:
|
||||
fspec = "e";
|
||||
break;
|
||||
case 1:
|
||||
fspec = "f";
|
||||
break;
|
||||
case 2:
|
||||
fspec = "g";
|
||||
break;
|
||||
case 3:
|
||||
fspec = "E";
|
||||
break;
|
||||
case 4:
|
||||
fspec = "G";
|
||||
break;
|
||||
}
|
||||
|
||||
if (prec >= 0)
|
||||
BIO_snprintf(format, sizeof(format), "%%%s.%d%s", width, prec,
|
||||
fspec);
|
||||
else
|
||||
BIO_snprintf(format, sizeof(format), "%%%s%s", width, fspec);
|
||||
BIO_snprintf(result, sizeof(result), format, val);
|
||||
|
||||
if (justprint) {
|
||||
if (i == 0) {
|
||||
printf(" /* %3d */ { \"%s\"", test, result);
|
||||
} else {
|
||||
printf(", \"%s\"", result);
|
||||
}
|
||||
} else {
|
||||
if (strcmp(fpexpected[test][i], result) != 0) {
|
||||
printf("Test %d(%d) failed. Expected \"%s\". Got \"%s\". "
|
||||
"Format \"%s\"\n", test, i, fpexpected[test][i], result,
|
||||
format);
|
||||
*fail = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (justprint) {
|
||||
printf(" },\n");
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
int test = 0;
|
||||
int i;
|
||||
int fail = 0;
|
||||
int prec = -1;
|
||||
char *width = "";
|
||||
const double frac = 2.0/3.0;
|
||||
char buf[80];
|
||||
|
||||
if (argc == 2 && strcmp(argv[1], "-expected") == 0) {
|
||||
justprint = 1;
|
||||
}
|
||||
|
||||
CRYPTO_set_mem_debug(1);
|
||||
CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON);
|
||||
|
||||
/* Tests for floating point format specifiers */
|
||||
for (i = 0; i < 7; i++) {
|
||||
switch (i) {
|
||||
case 0:
|
||||
prec = 4;
|
||||
width = "";
|
||||
break;
|
||||
case 1:
|
||||
prec = 5;
|
||||
width = "";
|
||||
break;
|
||||
case 2:
|
||||
prec = 4;
|
||||
width = "12";
|
||||
break;
|
||||
case 3:
|
||||
prec = 5;
|
||||
width = "12";
|
||||
break;
|
||||
case 4:
|
||||
prec = 0;
|
||||
width = "";
|
||||
break;
|
||||
case 5:
|
||||
prec = -1;
|
||||
width = "";
|
||||
break;
|
||||
case 6:
|
||||
prec = 4;
|
||||
width = "08";
|
||||
break;
|
||||
}
|
||||
|
||||
dofptest(test++, 0.0, width, prec, &fail);
|
||||
dofptest(test++, 0.67, width, prec, &fail);
|
||||
dofptest(test++, frac, width, prec, &fail);
|
||||
dofptest(test++, frac / 1000, width, prec, &fail);
|
||||
dofptest(test++, frac / 10000, width, prec, &fail);
|
||||
dofptest(test++, 6.0 + frac, width, prec, &fail);
|
||||
dofptest(test++, 66.0 + frac, width, prec, &fail);
|
||||
dofptest(test++, 666.0 + frac, width, prec, &fail);
|
||||
dofptest(test++, 6666.0 + frac, width, prec, &fail);
|
||||
dofptest(test++, 66666.0 + frac, width, prec, &fail);
|
||||
}
|
||||
|
||||
/* Test excessively big number. Should fail */
|
||||
if (BIO_snprintf(buf, sizeof(buf), "%f\n", 2 * (double)ULONG_MAX) != -1) {
|
||||
printf("Test %d failed. Unexpected success return from "
|
||||
"BIO_snprintf()\n", test);
|
||||
fail = 1;
|
||||
}
|
||||
|
||||
#ifndef OPENSSL_NO_CRYPTO_MDEBUG
|
||||
if (CRYPTO_mem_leaks_fp(stderr) <= 0)
|
||||
return 1;
|
||||
# endif
|
||||
|
||||
if (!justprint) {
|
||||
if (fail) {
|
||||
printf("FAIL\n");
|
||||
return 1;
|
||||
}
|
||||
printf ("PASS\n");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
+2094
@@ -0,0 +1,2094 @@
|
||||
/*
|
||||
* Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the OpenSSL license (the "License"). You may not use
|
||||
* this file except in compliance with the License. You can obtain a copy
|
||||
* in the file LICENSE in the source distribution or at
|
||||
* https://www.openssl.org/source/license.html
|
||||
*/
|
||||
|
||||
/* ====================================================================
|
||||
* Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
|
||||
*
|
||||
* Portions of the attached software ("Contribution") are developed by
|
||||
* SUN MICROSYSTEMS, INC., and are contributed to the OpenSSL project.
|
||||
*
|
||||
* The Contribution is licensed pursuant to the Eric Young open source
|
||||
* license provided above.
|
||||
*
|
||||
* The binary polynomial arithmetic software is originally written by
|
||||
* Sheueling Chang Shantz and Douglas Stebila of Sun Microsystems Laboratories.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "e_os.h"
|
||||
|
||||
#include <openssl/bio.h>
|
||||
#include <openssl/bn.h>
|
||||
#include <openssl/rand.h>
|
||||
#include <openssl/x509.h>
|
||||
#include <openssl/err.h>
|
||||
|
||||
/*
|
||||
* In bn_lcl.h, bn_expand() is defined as a static ossl_inline function.
|
||||
* This is fine in itself, it will end up as an unused static function in
|
||||
* the worst case. However, it referenses bn_expand2(), which is a private
|
||||
* function in libcrypto and therefore unavailable on some systems. This
|
||||
* may result in a linker error because of unresolved symbols.
|
||||
*
|
||||
* To avoid this, we define a dummy variant of bn_expand2() here, and to
|
||||
* avoid possible clashes with libcrypto, we rename it first, using a macro.
|
||||
*/
|
||||
#define bn_expand2 dummy_bn_expand2
|
||||
BIGNUM *bn_expand2(BIGNUM *b, int words);
|
||||
BIGNUM *bn_expand2(BIGNUM *b, int words) { return NULL; }
|
||||
|
||||
#include "../crypto/bn/bn_lcl.h"
|
||||
|
||||
static const int num0 = 100; /* number of tests */
|
||||
static const int num1 = 50; /* additional tests for some functions */
|
||||
static const int num2 = 5; /* number of tests for slow functions */
|
||||
|
||||
int test_add(BIO *bp);
|
||||
int test_sub(BIO *bp);
|
||||
int test_lshift1(BIO *bp);
|
||||
int test_lshift(BIO *bp, BN_CTX *ctx, BIGNUM *a_);
|
||||
int test_rshift1(BIO *bp);
|
||||
int test_rshift(BIO *bp, BN_CTX *ctx);
|
||||
int test_div(BIO *bp, BN_CTX *ctx);
|
||||
int test_div_word(BIO *bp);
|
||||
int test_div_recp(BIO *bp, BN_CTX *ctx);
|
||||
int test_mul(BIO *bp);
|
||||
int test_sqr(BIO *bp, BN_CTX *ctx);
|
||||
int test_mont(BIO *bp, BN_CTX *ctx);
|
||||
int test_mod(BIO *bp, BN_CTX *ctx);
|
||||
int test_mod_mul(BIO *bp, BN_CTX *ctx);
|
||||
int test_mod_exp(BIO *bp, BN_CTX *ctx);
|
||||
int test_mod_exp_mont_consttime(BIO *bp, BN_CTX *ctx);
|
||||
int test_mod_exp_mont5(BIO *bp, BN_CTX *ctx);
|
||||
int test_exp(BIO *bp, BN_CTX *ctx);
|
||||
int test_gf2m_add(BIO *bp);
|
||||
int test_gf2m_mod(BIO *bp);
|
||||
int test_gf2m_mod_mul(BIO *bp, BN_CTX *ctx);
|
||||
int test_gf2m_mod_sqr(BIO *bp, BN_CTX *ctx);
|
||||
int test_gf2m_mod_inv(BIO *bp, BN_CTX *ctx);
|
||||
int test_gf2m_mod_div(BIO *bp, BN_CTX *ctx);
|
||||
int test_gf2m_mod_exp(BIO *bp, BN_CTX *ctx);
|
||||
int test_gf2m_mod_sqrt(BIO *bp, BN_CTX *ctx);
|
||||
int test_gf2m_mod_solve_quad(BIO *bp, BN_CTX *ctx);
|
||||
int test_kron(BIO *bp, BN_CTX *ctx);
|
||||
int test_sqrt(BIO *bp, BN_CTX *ctx);
|
||||
int test_small_prime(BIO *bp, BN_CTX *ctx);
|
||||
int test_bn2dec(BIO *bp);
|
||||
int rand_neg(void);
|
||||
static int results = 0;
|
||||
|
||||
static unsigned char lst[] =
|
||||
"\xC6\x4F\x43\x04\x2A\xEA\xCA\x6E\x58\x36\x80\x5B\xE8\xC9"
|
||||
"\x9B\x04\x5D\x48\x36\xC2\xFD\x16\xC9\x64\xF0";
|
||||
|
||||
static const char rnd_seed[] =
|
||||
"string to make the random number generator think it has entropy";
|
||||
|
||||
static void message(BIO *out, char *m)
|
||||
{
|
||||
fprintf(stderr, "test %s\n", m);
|
||||
BIO_puts(out, "print \"test ");
|
||||
BIO_puts(out, m);
|
||||
BIO_puts(out, "\\n\"\n");
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
BN_CTX *ctx;
|
||||
BIO *out;
|
||||
char *outfile = NULL;
|
||||
|
||||
CRYPTO_set_mem_debug(1);
|
||||
CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON);
|
||||
|
||||
results = 0;
|
||||
|
||||
RAND_seed(rnd_seed, sizeof(rnd_seed)); /* or BN_generate_prime may fail */
|
||||
|
||||
argc--;
|
||||
argv++;
|
||||
while (argc >= 1) {
|
||||
if (strcmp(*argv, "-results") == 0)
|
||||
results = 1;
|
||||
else if (strcmp(*argv, "-out") == 0) {
|
||||
if (--argc < 1)
|
||||
break;
|
||||
outfile = *(++argv);
|
||||
}
|
||||
argc--;
|
||||
argv++;
|
||||
}
|
||||
|
||||
ctx = BN_CTX_new();
|
||||
if (ctx == NULL)
|
||||
EXIT(1);
|
||||
|
||||
out = BIO_new(BIO_s_file());
|
||||
if (out == NULL)
|
||||
EXIT(1);
|
||||
if (outfile == NULL) {
|
||||
BIO_set_fp(out, stdout, BIO_NOCLOSE | BIO_FP_TEXT);
|
||||
} else {
|
||||
if (!BIO_write_filename(out, outfile)) {
|
||||
perror(outfile);
|
||||
EXIT(1);
|
||||
}
|
||||
}
|
||||
#ifdef OPENSSL_SYS_VMS
|
||||
{
|
||||
BIO *tmpbio = BIO_new(BIO_f_linebuffer());
|
||||
out = BIO_push(tmpbio, out);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!results)
|
||||
BIO_puts(out, "obase=16\nibase=16\n");
|
||||
|
||||
message(out, "BN_add");
|
||||
if (!test_add(out))
|
||||
goto err;
|
||||
(void)BIO_flush(out);
|
||||
|
||||
message(out, "BN_sub");
|
||||
if (!test_sub(out))
|
||||
goto err;
|
||||
(void)BIO_flush(out);
|
||||
|
||||
message(out, "BN_lshift1");
|
||||
if (!test_lshift1(out))
|
||||
goto err;
|
||||
(void)BIO_flush(out);
|
||||
|
||||
message(out, "BN_lshift (fixed)");
|
||||
if (!test_lshift(out, ctx, BN_bin2bn(lst, sizeof(lst) - 1, NULL)))
|
||||
goto err;
|
||||
(void)BIO_flush(out);
|
||||
|
||||
message(out, "BN_lshift");
|
||||
if (!test_lshift(out, ctx, NULL))
|
||||
goto err;
|
||||
(void)BIO_flush(out);
|
||||
|
||||
message(out, "BN_rshift1");
|
||||
if (!test_rshift1(out))
|
||||
goto err;
|
||||
(void)BIO_flush(out);
|
||||
|
||||
message(out, "BN_rshift");
|
||||
if (!test_rshift(out, ctx))
|
||||
goto err;
|
||||
(void)BIO_flush(out);
|
||||
|
||||
message(out, "BN_sqr");
|
||||
if (!test_sqr(out, ctx))
|
||||
goto err;
|
||||
(void)BIO_flush(out);
|
||||
|
||||
message(out, "BN_mul");
|
||||
if (!test_mul(out))
|
||||
goto err;
|
||||
(void)BIO_flush(out);
|
||||
|
||||
message(out, "BN_div");
|
||||
if (!test_div(out, ctx))
|
||||
goto err;
|
||||
(void)BIO_flush(out);
|
||||
|
||||
message(out, "BN_div_word");
|
||||
if (!test_div_word(out))
|
||||
goto err;
|
||||
(void)BIO_flush(out);
|
||||
|
||||
message(out, "BN_div_recp");
|
||||
if (!test_div_recp(out, ctx))
|
||||
goto err;
|
||||
(void)BIO_flush(out);
|
||||
|
||||
message(out, "BN_mod");
|
||||
if (!test_mod(out, ctx))
|
||||
goto err;
|
||||
(void)BIO_flush(out);
|
||||
|
||||
message(out, "BN_mod_mul");
|
||||
if (!test_mod_mul(out, ctx))
|
||||
goto err;
|
||||
(void)BIO_flush(out);
|
||||
|
||||
message(out, "BN_mont");
|
||||
if (!test_mont(out, ctx))
|
||||
goto err;
|
||||
(void)BIO_flush(out);
|
||||
|
||||
message(out, "BN_mod_exp");
|
||||
if (!test_mod_exp(out, ctx))
|
||||
goto err;
|
||||
(void)BIO_flush(out);
|
||||
|
||||
message(out, "BN_mod_exp_mont_consttime");
|
||||
if (!test_mod_exp_mont_consttime(out, ctx))
|
||||
goto err;
|
||||
if (!test_mod_exp_mont5(out, ctx))
|
||||
goto err;
|
||||
(void)BIO_flush(out);
|
||||
|
||||
message(out, "BN_exp");
|
||||
if (!test_exp(out, ctx))
|
||||
goto err;
|
||||
(void)BIO_flush(out);
|
||||
|
||||
message(out, "BN_kronecker");
|
||||
if (!test_kron(out, ctx))
|
||||
goto err;
|
||||
(void)BIO_flush(out);
|
||||
|
||||
message(out, "BN_mod_sqrt");
|
||||
if (!test_sqrt(out, ctx))
|
||||
goto err;
|
||||
(void)BIO_flush(out);
|
||||
|
||||
message(out, "Small prime generation");
|
||||
if (!test_small_prime(out, ctx))
|
||||
goto err;
|
||||
(void)BIO_flush(out);
|
||||
|
||||
message(out, "BN_bn2dec");
|
||||
if (!test_bn2dec(out))
|
||||
goto err;
|
||||
(void)BIO_flush(out);
|
||||
|
||||
#ifndef OPENSSL_NO_EC2M
|
||||
message(out, "BN_GF2m_add");
|
||||
if (!test_gf2m_add(out))
|
||||
goto err;
|
||||
(void)BIO_flush(out);
|
||||
|
||||
message(out, "BN_GF2m_mod");
|
||||
if (!test_gf2m_mod(out))
|
||||
goto err;
|
||||
(void)BIO_flush(out);
|
||||
|
||||
message(out, "BN_GF2m_mod_mul");
|
||||
if (!test_gf2m_mod_mul(out, ctx))
|
||||
goto err;
|
||||
(void)BIO_flush(out);
|
||||
|
||||
message(out, "BN_GF2m_mod_sqr");
|
||||
if (!test_gf2m_mod_sqr(out, ctx))
|
||||
goto err;
|
||||
(void)BIO_flush(out);
|
||||
|
||||
message(out, "BN_GF2m_mod_inv");
|
||||
if (!test_gf2m_mod_inv(out, ctx))
|
||||
goto err;
|
||||
(void)BIO_flush(out);
|
||||
|
||||
message(out, "BN_GF2m_mod_div");
|
||||
if (!test_gf2m_mod_div(out, ctx))
|
||||
goto err;
|
||||
(void)BIO_flush(out);
|
||||
|
||||
message(out, "BN_GF2m_mod_exp");
|
||||
if (!test_gf2m_mod_exp(out, ctx))
|
||||
goto err;
|
||||
(void)BIO_flush(out);
|
||||
|
||||
message(out, "BN_GF2m_mod_sqrt");
|
||||
if (!test_gf2m_mod_sqrt(out, ctx))
|
||||
goto err;
|
||||
(void)BIO_flush(out);
|
||||
|
||||
message(out, "BN_GF2m_mod_solve_quad");
|
||||
if (!test_gf2m_mod_solve_quad(out, ctx))
|
||||
goto err;
|
||||
(void)BIO_flush(out);
|
||||
#endif
|
||||
BN_CTX_free(ctx);
|
||||
BIO_free(out);
|
||||
|
||||
ERR_print_errors_fp(stderr);
|
||||
|
||||
#ifndef OPENSSL_NO_CRYPTO_MDEBUG
|
||||
if (CRYPTO_mem_leaks_fp(stderr) <= 0)
|
||||
EXIT(1);
|
||||
#endif
|
||||
EXIT(0);
|
||||
err:
|
||||
BIO_puts(out, "1\n"); /* make sure the Perl script fed by bc
|
||||
* notices the failure, see test_bn in
|
||||
* test/Makefile.ssl */
|
||||
(void)BIO_flush(out);
|
||||
BN_CTX_free(ctx);
|
||||
BIO_free(out);
|
||||
|
||||
ERR_print_errors_fp(stderr);
|
||||
EXIT(1);
|
||||
}
|
||||
|
||||
int test_add(BIO *bp)
|
||||
{
|
||||
BIGNUM *a, *b, *c;
|
||||
int i;
|
||||
|
||||
a = BN_new();
|
||||
b = BN_new();
|
||||
c = BN_new();
|
||||
|
||||
BN_bntest_rand(a, 512, 0, 0);
|
||||
for (i = 0; i < num0; i++) {
|
||||
BN_bntest_rand(b, 450 + i, 0, 0);
|
||||
a->neg = rand_neg();
|
||||
b->neg = rand_neg();
|
||||
BN_add(c, a, b);
|
||||
if (bp != NULL) {
|
||||
if (!results) {
|
||||
BN_print(bp, a);
|
||||
BIO_puts(bp, " + ");
|
||||
BN_print(bp, b);
|
||||
BIO_puts(bp, " - ");
|
||||
}
|
||||
BN_print(bp, c);
|
||||
BIO_puts(bp, "\n");
|
||||
}
|
||||
a->neg = !a->neg;
|
||||
b->neg = !b->neg;
|
||||
BN_add(c, c, b);
|
||||
BN_add(c, c, a);
|
||||
if (!BN_is_zero(c)) {
|
||||
fprintf(stderr, "Add test failed!\n");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
BN_free(a);
|
||||
BN_free(b);
|
||||
BN_free(c);
|
||||
return (1);
|
||||
}
|
||||
|
||||
int test_sub(BIO *bp)
|
||||
{
|
||||
BIGNUM *a, *b, *c;
|
||||
int i;
|
||||
|
||||
a = BN_new();
|
||||
b = BN_new();
|
||||
c = BN_new();
|
||||
|
||||
for (i = 0; i < num0 + num1; i++) {
|
||||
if (i < num1) {
|
||||
BN_bntest_rand(a, 512, 0, 0);
|
||||
BN_copy(b, a);
|
||||
if (BN_set_bit(a, i) == 0)
|
||||
return (0);
|
||||
BN_add_word(b, i);
|
||||
} else {
|
||||
BN_bntest_rand(b, 400 + i - num1, 0, 0);
|
||||
a->neg = rand_neg();
|
||||
b->neg = rand_neg();
|
||||
}
|
||||
BN_sub(c, a, b);
|
||||
if (bp != NULL) {
|
||||
if (!results) {
|
||||
BN_print(bp, a);
|
||||
BIO_puts(bp, " - ");
|
||||
BN_print(bp, b);
|
||||
BIO_puts(bp, " - ");
|
||||
}
|
||||
BN_print(bp, c);
|
||||
BIO_puts(bp, "\n");
|
||||
}
|
||||
BN_add(c, c, b);
|
||||
BN_sub(c, c, a);
|
||||
if (!BN_is_zero(c)) {
|
||||
fprintf(stderr, "Subtract test failed!\n");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
BN_free(a);
|
||||
BN_free(b);
|
||||
BN_free(c);
|
||||
return (1);
|
||||
}
|
||||
|
||||
int test_div(BIO *bp, BN_CTX *ctx)
|
||||
{
|
||||
BIGNUM *a, *b, *c, *d, *e;
|
||||
int i;
|
||||
|
||||
a = BN_new();
|
||||
b = BN_new();
|
||||
c = BN_new();
|
||||
d = BN_new();
|
||||
e = BN_new();
|
||||
|
||||
BN_one(a);
|
||||
BN_zero(b);
|
||||
|
||||
if (BN_div(d, c, a, b, ctx)) {
|
||||
fprintf(stderr, "Division by zero succeeded!\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
for (i = 0; i < num0 + num1; i++) {
|
||||
if (i < num1) {
|
||||
BN_bntest_rand(a, 400, 0, 0);
|
||||
BN_copy(b, a);
|
||||
BN_lshift(a, a, i);
|
||||
BN_add_word(a, i);
|
||||
} else
|
||||
BN_bntest_rand(b, 50 + 3 * (i - num1), 0, 0);
|
||||
a->neg = rand_neg();
|
||||
b->neg = rand_neg();
|
||||
BN_div(d, c, a, b, ctx);
|
||||
if (bp != NULL) {
|
||||
if (!results) {
|
||||
BN_print(bp, a);
|
||||
BIO_puts(bp, " / ");
|
||||
BN_print(bp, b);
|
||||
BIO_puts(bp, " - ");
|
||||
}
|
||||
BN_print(bp, d);
|
||||
BIO_puts(bp, "\n");
|
||||
|
||||
if (!results) {
|
||||
BN_print(bp, a);
|
||||
BIO_puts(bp, " % ");
|
||||
BN_print(bp, b);
|
||||
BIO_puts(bp, " - ");
|
||||
}
|
||||
BN_print(bp, c);
|
||||
BIO_puts(bp, "\n");
|
||||
}
|
||||
BN_mul(e, d, b, ctx);
|
||||
BN_add(d, e, c);
|
||||
BN_sub(d, d, a);
|
||||
if (!BN_is_zero(d)) {
|
||||
fprintf(stderr, "Division test failed!\n");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
BN_free(a);
|
||||
BN_free(b);
|
||||
BN_free(c);
|
||||
BN_free(d);
|
||||
BN_free(e);
|
||||
return (1);
|
||||
}
|
||||
|
||||
static void print_word(BIO *bp, BN_ULONG w)
|
||||
{
|
||||
int i = sizeof(w) * 8;
|
||||
char *fmt = NULL;
|
||||
unsigned char byte;
|
||||
|
||||
do {
|
||||
i -= 8;
|
||||
byte = (unsigned char)(w >> i);
|
||||
if (fmt == NULL)
|
||||
fmt = byte ? "%X" : NULL;
|
||||
else
|
||||
fmt = "%02X";
|
||||
|
||||
if (fmt != NULL)
|
||||
BIO_printf(bp, fmt, byte);
|
||||
} while (i);
|
||||
|
||||
/* If we haven't printed anything, at least print a zero! */
|
||||
if (fmt == NULL)
|
||||
BIO_printf(bp, "0");
|
||||
}
|
||||
|
||||
int test_div_word(BIO *bp)
|
||||
{
|
||||
BIGNUM *a, *b;
|
||||
BN_ULONG r, rmod, s;
|
||||
int i;
|
||||
|
||||
a = BN_new();
|
||||
b = BN_new();
|
||||
|
||||
for (i = 0; i < num0; i++) {
|
||||
do {
|
||||
BN_bntest_rand(a, 512, -1, 0);
|
||||
BN_bntest_rand(b, BN_BITS2, -1, 0);
|
||||
} while (BN_is_zero(b));
|
||||
|
||||
s = b->d[0];
|
||||
BN_copy(b, a);
|
||||
rmod = BN_mod_word(b, s);
|
||||
r = BN_div_word(b, s);
|
||||
|
||||
if (rmod != r) {
|
||||
fprintf(stderr, "Mod (word) test failed!\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (bp != NULL) {
|
||||
if (!results) {
|
||||
BN_print(bp, a);
|
||||
BIO_puts(bp, " / ");
|
||||
print_word(bp, s);
|
||||
BIO_puts(bp, " - ");
|
||||
}
|
||||
BN_print(bp, b);
|
||||
BIO_puts(bp, "\n");
|
||||
|
||||
if (!results) {
|
||||
BN_print(bp, a);
|
||||
BIO_puts(bp, " % ");
|
||||
print_word(bp, s);
|
||||
BIO_puts(bp, " - ");
|
||||
}
|
||||
print_word(bp, r);
|
||||
BIO_puts(bp, "\n");
|
||||
}
|
||||
BN_mul_word(b, s);
|
||||
BN_add_word(b, r);
|
||||
BN_sub(b, a, b);
|
||||
if (!BN_is_zero(b)) {
|
||||
fprintf(stderr, "Division (word) test failed!\n");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
BN_free(a);
|
||||
BN_free(b);
|
||||
return (1);
|
||||
}
|
||||
|
||||
int test_div_recp(BIO *bp, BN_CTX *ctx)
|
||||
{
|
||||
BIGNUM *a, *b, *c, *d, *e;
|
||||
BN_RECP_CTX *recp;
|
||||
int i;
|
||||
|
||||
recp = BN_RECP_CTX_new();
|
||||
a = BN_new();
|
||||
b = BN_new();
|
||||
c = BN_new();
|
||||
d = BN_new();
|
||||
e = BN_new();
|
||||
|
||||
for (i = 0; i < num0 + num1; i++) {
|
||||
if (i < num1) {
|
||||
BN_bntest_rand(a, 400, 0, 0);
|
||||
BN_copy(b, a);
|
||||
BN_lshift(a, a, i);
|
||||
BN_add_word(a, i);
|
||||
} else
|
||||
BN_bntest_rand(b, 50 + 3 * (i - num1), 0, 0);
|
||||
a->neg = rand_neg();
|
||||
b->neg = rand_neg();
|
||||
BN_RECP_CTX_set(recp, b, ctx);
|
||||
BN_div_recp(d, c, a, recp, ctx);
|
||||
if (bp != NULL) {
|
||||
if (!results) {
|
||||
BN_print(bp, a);
|
||||
BIO_puts(bp, " / ");
|
||||
BN_print(bp, b);
|
||||
BIO_puts(bp, " - ");
|
||||
}
|
||||
BN_print(bp, d);
|
||||
BIO_puts(bp, "\n");
|
||||
|
||||
if (!results) {
|
||||
BN_print(bp, a);
|
||||
BIO_puts(bp, " % ");
|
||||
BN_print(bp, b);
|
||||
BIO_puts(bp, " - ");
|
||||
}
|
||||
BN_print(bp, c);
|
||||
BIO_puts(bp, "\n");
|
||||
}
|
||||
BN_mul(e, d, b, ctx);
|
||||
BN_add(d, e, c);
|
||||
BN_sub(d, d, a);
|
||||
if (!BN_is_zero(d)) {
|
||||
fprintf(stderr, "Reciprocal division test failed!\n");
|
||||
fprintf(stderr, "a=");
|
||||
BN_print_fp(stderr, a);
|
||||
fprintf(stderr, "\nb=");
|
||||
BN_print_fp(stderr, b);
|
||||
fprintf(stderr, "\n");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
BN_free(a);
|
||||
BN_free(b);
|
||||
BN_free(c);
|
||||
BN_free(d);
|
||||
BN_free(e);
|
||||
BN_RECP_CTX_free(recp);
|
||||
return (1);
|
||||
}
|
||||
|
||||
int test_mul(BIO *bp)
|
||||
{
|
||||
BIGNUM *a, *b, *c, *d, *e;
|
||||
int i;
|
||||
BN_CTX *ctx;
|
||||
|
||||
ctx = BN_CTX_new();
|
||||
if (ctx == NULL)
|
||||
EXIT(1);
|
||||
|
||||
a = BN_new();
|
||||
b = BN_new();
|
||||
c = BN_new();
|
||||
d = BN_new();
|
||||
e = BN_new();
|
||||
|
||||
for (i = 0; i < num0 + num1; i++) {
|
||||
if (i <= num1) {
|
||||
BN_bntest_rand(a, 100, 0, 0);
|
||||
BN_bntest_rand(b, 100, 0, 0);
|
||||
} else
|
||||
BN_bntest_rand(b, i - num1, 0, 0);
|
||||
a->neg = rand_neg();
|
||||
b->neg = rand_neg();
|
||||
BN_mul(c, a, b, ctx);
|
||||
if (bp != NULL) {
|
||||
if (!results) {
|
||||
BN_print(bp, a);
|
||||
BIO_puts(bp, " * ");
|
||||
BN_print(bp, b);
|
||||
BIO_puts(bp, " - ");
|
||||
}
|
||||
BN_print(bp, c);
|
||||
BIO_puts(bp, "\n");
|
||||
}
|
||||
BN_div(d, e, c, a, ctx);
|
||||
BN_sub(d, d, b);
|
||||
if (!BN_is_zero(d) || !BN_is_zero(e)) {
|
||||
fprintf(stderr, "Multiplication test failed!\n");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
BN_free(a);
|
||||
BN_free(b);
|
||||
BN_free(c);
|
||||
BN_free(d);
|
||||
BN_free(e);
|
||||
BN_CTX_free(ctx);
|
||||
return (1);
|
||||
}
|
||||
|
||||
int test_sqr(BIO *bp, BN_CTX *ctx)
|
||||
{
|
||||
BIGNUM *a, *c, *d, *e;
|
||||
int i, ret = 0;
|
||||
|
||||
a = BN_new();
|
||||
c = BN_new();
|
||||
d = BN_new();
|
||||
e = BN_new();
|
||||
if (a == NULL || c == NULL || d == NULL || e == NULL) {
|
||||
goto err;
|
||||
}
|
||||
|
||||
for (i = 0; i < num0; i++) {
|
||||
BN_bntest_rand(a, 40 + i * 10, 0, 0);
|
||||
a->neg = rand_neg();
|
||||
BN_sqr(c, a, ctx);
|
||||
if (bp != NULL) {
|
||||
if (!results) {
|
||||
BN_print(bp, a);
|
||||
BIO_puts(bp, " * ");
|
||||
BN_print(bp, a);
|
||||
BIO_puts(bp, " - ");
|
||||
}
|
||||
BN_print(bp, c);
|
||||
BIO_puts(bp, "\n");
|
||||
}
|
||||
BN_div(d, e, c, a, ctx);
|
||||
BN_sub(d, d, a);
|
||||
if (!BN_is_zero(d) || !BN_is_zero(e)) {
|
||||
fprintf(stderr, "Square test failed!\n");
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
|
||||
/* Regression test for a BN_sqr overflow bug. */
|
||||
BN_hex2bn(&a,
|
||||
"80000000000000008000000000000001"
|
||||
"FFFFFFFFFFFFFFFE0000000000000000");
|
||||
BN_sqr(c, a, ctx);
|
||||
if (bp != NULL) {
|
||||
if (!results) {
|
||||
BN_print(bp, a);
|
||||
BIO_puts(bp, " * ");
|
||||
BN_print(bp, a);
|
||||
BIO_puts(bp, " - ");
|
||||
}
|
||||
BN_print(bp, c);
|
||||
BIO_puts(bp, "\n");
|
||||
}
|
||||
BN_mul(d, a, a, ctx);
|
||||
if (BN_cmp(c, d)) {
|
||||
fprintf(stderr, "Square test failed: BN_sqr and BN_mul produce "
|
||||
"different results!\n");
|
||||
goto err;
|
||||
}
|
||||
|
||||
/* Regression test for a BN_sqr overflow bug. */
|
||||
BN_hex2bn(&a,
|
||||
"80000000000000000000000080000001"
|
||||
"FFFFFFFE000000000000000000000000");
|
||||
BN_sqr(c, a, ctx);
|
||||
if (bp != NULL) {
|
||||
if (!results) {
|
||||
BN_print(bp, a);
|
||||
BIO_puts(bp, " * ");
|
||||
BN_print(bp, a);
|
||||
BIO_puts(bp, " - ");
|
||||
}
|
||||
BN_print(bp, c);
|
||||
BIO_puts(bp, "\n");
|
||||
}
|
||||
BN_mul(d, a, a, ctx);
|
||||
if (BN_cmp(c, d)) {
|
||||
fprintf(stderr, "Square test failed: BN_sqr and BN_mul produce "
|
||||
"different results!\n");
|
||||
goto err;
|
||||
}
|
||||
ret = 1;
|
||||
err:
|
||||
BN_free(a);
|
||||
BN_free(c);
|
||||
BN_free(d);
|
||||
BN_free(e);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int test_mont(BIO *bp, BN_CTX *ctx)
|
||||
{
|
||||
BIGNUM *a, *b, *c, *d, *A, *B;
|
||||
BIGNUM *n;
|
||||
int i;
|
||||
BN_MONT_CTX *mont;
|
||||
|
||||
a = BN_new();
|
||||
b = BN_new();
|
||||
c = BN_new();
|
||||
d = BN_new();
|
||||
A = BN_new();
|
||||
B = BN_new();
|
||||
n = BN_new();
|
||||
|
||||
mont = BN_MONT_CTX_new();
|
||||
if (mont == NULL)
|
||||
return 0;
|
||||
|
||||
BN_zero(n);
|
||||
if (BN_MONT_CTX_set(mont, n, ctx)) {
|
||||
fprintf(stderr, "BN_MONT_CTX_set succeeded for zero modulus!\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
BN_set_word(n, 16);
|
||||
if (BN_MONT_CTX_set(mont, n, ctx)) {
|
||||
fprintf(stderr, "BN_MONT_CTX_set succeeded for even modulus!\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
BN_bntest_rand(a, 100, 0, 0);
|
||||
BN_bntest_rand(b, 100, 0, 0);
|
||||
for (i = 0; i < num2; i++) {
|
||||
int bits = (200 * (i + 1)) / num2;
|
||||
|
||||
if (bits == 0)
|
||||
continue;
|
||||
BN_bntest_rand(n, bits, 0, 1);
|
||||
BN_MONT_CTX_set(mont, n, ctx);
|
||||
|
||||
BN_nnmod(a, a, n, ctx);
|
||||
BN_nnmod(b, b, n, ctx);
|
||||
|
||||
BN_to_montgomery(A, a, mont, ctx);
|
||||
BN_to_montgomery(B, b, mont, ctx);
|
||||
|
||||
BN_mod_mul_montgomery(c, A, B, mont, ctx);
|
||||
BN_from_montgomery(A, c, mont, ctx);
|
||||
if (bp != NULL) {
|
||||
if (!results) {
|
||||
BN_print(bp, a);
|
||||
BIO_puts(bp, " * ");
|
||||
BN_print(bp, b);
|
||||
BIO_puts(bp, " % ");
|
||||
BN_print(bp, &mont->N);
|
||||
BIO_puts(bp, " - ");
|
||||
}
|
||||
BN_print(bp, A);
|
||||
BIO_puts(bp, "\n");
|
||||
}
|
||||
BN_mod_mul(d, a, b, n, ctx);
|
||||
BN_sub(d, d, A);
|
||||
if (!BN_is_zero(d)) {
|
||||
fprintf(stderr, "Montgomery multiplication test failed!\n");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* Regression test for carry bug in mulx4x_mont */
|
||||
BN_hex2bn(&a,
|
||||
"7878787878787878787878787878787878787878787878787878787878787878"
|
||||
"7878787878787878787878787878787878787878787878787878787878787878"
|
||||
"7878787878787878787878787878787878787878787878787878787878787878"
|
||||
"7878787878787878787878787878787878787878787878787878787878787878");
|
||||
BN_hex2bn(&b,
|
||||
"095D72C08C097BA488C5E439C655A192EAFB6380073D8C2664668EDDB4060744"
|
||||
"E16E57FB4EDB9AE10A0CEFCDC28A894F689A128379DB279D48A2E20849D68593"
|
||||
"9B7803BCF46CEBF5C533FB0DD35B080593DE5472E3FE5DB951B8BFF9B4CB8F03"
|
||||
"9CC638A5EE8CDD703719F8000E6A9F63BEED5F2FCD52FF293EA05A251BB4AB81");
|
||||
BN_hex2bn(&n,
|
||||
"D78AF684E71DB0C39CFF4E64FB9DB567132CB9C50CC98009FEB820B26F2DED9B"
|
||||
"91B9B5E2B83AE0AE4EB4E0523CA726BFBE969B89FD754F674CE99118C3F2D1C5"
|
||||
"D81FDC7C54E02B60262B241D53C040E99E45826ECA37A804668E690E1AFC1CA4"
|
||||
"2C9A15D84D4954425F0B7642FC0BD9D7B24E2618D2DCC9B729D944BADACFDDAF");
|
||||
BN_MONT_CTX_set(mont, n, ctx);
|
||||
BN_mod_mul_montgomery(c, a, b, mont, ctx);
|
||||
BN_mod_mul_montgomery(d, b, a, mont, ctx);
|
||||
if (BN_cmp(c, d)) {
|
||||
fprintf(stderr, "Montgomery multiplication test failed:"
|
||||
" a*b != b*a.\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
BN_MONT_CTX_free(mont);
|
||||
BN_free(a);
|
||||
BN_free(b);
|
||||
BN_free(c);
|
||||
BN_free(d);
|
||||
BN_free(A);
|
||||
BN_free(B);
|
||||
BN_free(n);
|
||||
return (1);
|
||||
}
|
||||
|
||||
int test_mod(BIO *bp, BN_CTX *ctx)
|
||||
{
|
||||
BIGNUM *a, *b, *c, *d, *e;
|
||||
int i;
|
||||
|
||||
a = BN_new();
|
||||
b = BN_new();
|
||||
c = BN_new();
|
||||
d = BN_new();
|
||||
e = BN_new();
|
||||
|
||||
BN_bntest_rand(a, 1024, 0, 0);
|
||||
for (i = 0; i < num0; i++) {
|
||||
BN_bntest_rand(b, 450 + i * 10, 0, 0);
|
||||
a->neg = rand_neg();
|
||||
b->neg = rand_neg();
|
||||
BN_mod(c, a, b, ctx);
|
||||
if (bp != NULL) {
|
||||
if (!results) {
|
||||
BN_print(bp, a);
|
||||
BIO_puts(bp, " % ");
|
||||
BN_print(bp, b);
|
||||
BIO_puts(bp, " - ");
|
||||
}
|
||||
BN_print(bp, c);
|
||||
BIO_puts(bp, "\n");
|
||||
}
|
||||
BN_div(d, e, a, b, ctx);
|
||||
BN_sub(e, e, c);
|
||||
if (!BN_is_zero(e)) {
|
||||
fprintf(stderr, "Modulo test failed!\n");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
BN_free(a);
|
||||
BN_free(b);
|
||||
BN_free(c);
|
||||
BN_free(d);
|
||||
BN_free(e);
|
||||
return (1);
|
||||
}
|
||||
|
||||
int test_mod_mul(BIO *bp, BN_CTX *ctx)
|
||||
{
|
||||
BIGNUM *a, *b, *c, *d, *e;
|
||||
int i, j;
|
||||
|
||||
a = BN_new();
|
||||
b = BN_new();
|
||||
c = BN_new();
|
||||
d = BN_new();
|
||||
e = BN_new();
|
||||
|
||||
BN_one(a);
|
||||
BN_one(b);
|
||||
BN_zero(c);
|
||||
if (BN_mod_mul(e, a, b, c, ctx)) {
|
||||
fprintf(stderr, "BN_mod_mul with zero modulus succeeded!\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
for (j = 0; j < 3; j++) {
|
||||
BN_bntest_rand(c, 1024, 0, 0);
|
||||
for (i = 0; i < num0; i++) {
|
||||
BN_bntest_rand(a, 475 + i * 10, 0, 0);
|
||||
BN_bntest_rand(b, 425 + i * 11, 0, 0);
|
||||
a->neg = rand_neg();
|
||||
b->neg = rand_neg();
|
||||
if (!BN_mod_mul(e, a, b, c, ctx)) {
|
||||
unsigned long l;
|
||||
|
||||
while ((l = ERR_get_error()))
|
||||
fprintf(stderr, "ERROR:%s\n", ERR_error_string(l, NULL));
|
||||
EXIT(1);
|
||||
}
|
||||
if (bp != NULL) {
|
||||
if (!results) {
|
||||
BN_print(bp, a);
|
||||
BIO_puts(bp, " * ");
|
||||
BN_print(bp, b);
|
||||
BIO_puts(bp, " % ");
|
||||
BN_print(bp, c);
|
||||
if ((a->neg ^ b->neg) && !BN_is_zero(e)) {
|
||||
/*
|
||||
* If (a*b) % c is negative, c must be added in order
|
||||
* to obtain the normalized remainder (new with
|
||||
* OpenSSL 0.9.7, previous versions of BN_mod_mul
|
||||
* could generate negative results)
|
||||
*/
|
||||
BIO_puts(bp, " + ");
|
||||
BN_print(bp, c);
|
||||
}
|
||||
BIO_puts(bp, " - ");
|
||||
}
|
||||
BN_print(bp, e);
|
||||
BIO_puts(bp, "\n");
|
||||
}
|
||||
BN_mul(d, a, b, ctx);
|
||||
BN_sub(d, d, e);
|
||||
BN_div(a, b, d, c, ctx);
|
||||
if (!BN_is_zero(b)) {
|
||||
fprintf(stderr, "Modulo multiply test failed!\n");
|
||||
ERR_print_errors_fp(stderr);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
BN_free(a);
|
||||
BN_free(b);
|
||||
BN_free(c);
|
||||
BN_free(d);
|
||||
BN_free(e);
|
||||
return (1);
|
||||
}
|
||||
|
||||
int test_mod_exp(BIO *bp, BN_CTX *ctx)
|
||||
{
|
||||
BIGNUM *a, *b, *c, *d, *e;
|
||||
int i;
|
||||
|
||||
a = BN_new();
|
||||
b = BN_new();
|
||||
c = BN_new();
|
||||
d = BN_new();
|
||||
e = BN_new();
|
||||
|
||||
BN_one(a);
|
||||
BN_one(b);
|
||||
BN_zero(c);
|
||||
if (BN_mod_exp(d, a, b, c, ctx)) {
|
||||
fprintf(stderr, "BN_mod_exp with zero modulus succeeded!\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
BN_bntest_rand(c, 30, 0, 1); /* must be odd for montgomery */
|
||||
for (i = 0; i < num2; i++) {
|
||||
BN_bntest_rand(a, 20 + i * 5, 0, 0);
|
||||
BN_bntest_rand(b, 2 + i, 0, 0);
|
||||
|
||||
if (!BN_mod_exp(d, a, b, c, ctx))
|
||||
return (0);
|
||||
|
||||
if (bp != NULL) {
|
||||
if (!results) {
|
||||
BN_print(bp, a);
|
||||
BIO_puts(bp, " ^ ");
|
||||
BN_print(bp, b);
|
||||
BIO_puts(bp, " % ");
|
||||
BN_print(bp, c);
|
||||
BIO_puts(bp, " - ");
|
||||
}
|
||||
BN_print(bp, d);
|
||||
BIO_puts(bp, "\n");
|
||||
}
|
||||
BN_exp(e, a, b, ctx);
|
||||
BN_sub(e, e, d);
|
||||
BN_div(a, b, e, c, ctx);
|
||||
if (!BN_is_zero(b)) {
|
||||
fprintf(stderr, "Modulo exponentiation test failed!\n");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* Regression test for carry propagation bug in sqr8x_reduction */
|
||||
BN_hex2bn(&a, "050505050505");
|
||||
BN_hex2bn(&b, "02");
|
||||
BN_hex2bn(&c,
|
||||
"4141414141414141414141274141414141414141414141414141414141414141"
|
||||
"4141414141414141414141414141414141414141414141414141414141414141"
|
||||
"4141414141414141414141800000000000000000000000000000000000000000"
|
||||
"0000000000000000000000000000000000000000000000000000000000000000"
|
||||
"0000000000000000000000000000000000000000000000000000000000000000"
|
||||
"0000000000000000000000000000000000000000000000000000000001");
|
||||
BN_mod_exp(d, a, b, c, ctx);
|
||||
BN_mul(e, a, a, ctx);
|
||||
if (BN_cmp(d, e)) {
|
||||
fprintf(stderr, "BN_mod_exp and BN_mul produce different results!\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
BN_free(a);
|
||||
BN_free(b);
|
||||
BN_free(c);
|
||||
BN_free(d);
|
||||
BN_free(e);
|
||||
return (1);
|
||||
}
|
||||
|
||||
int test_mod_exp_mont_consttime(BIO *bp, BN_CTX *ctx)
|
||||
{
|
||||
BIGNUM *a, *b, *c, *d, *e;
|
||||
int i;
|
||||
|
||||
a = BN_new();
|
||||
b = BN_new();
|
||||
c = BN_new();
|
||||
d = BN_new();
|
||||
e = BN_new();
|
||||
|
||||
BN_one(a);
|
||||
BN_one(b);
|
||||
BN_zero(c);
|
||||
if (BN_mod_exp_mont_consttime(d, a, b, c, ctx, NULL)) {
|
||||
fprintf(stderr, "BN_mod_exp_mont_consttime with zero modulus "
|
||||
"succeeded\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
BN_set_word(c, 16);
|
||||
if (BN_mod_exp_mont_consttime(d, a, b, c, ctx, NULL)) {
|
||||
fprintf(stderr, "BN_mod_exp_mont_consttime with even modulus "
|
||||
"succeeded\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
BN_bntest_rand(c, 30, 0, 1); /* must be odd for montgomery */
|
||||
for (i = 0; i < num2; i++) {
|
||||
BN_bntest_rand(a, 20 + i * 5, 0, 0);
|
||||
BN_bntest_rand(b, 2 + i, 0, 0);
|
||||
|
||||
if (!BN_mod_exp_mont_consttime(d, a, b, c, ctx, NULL))
|
||||
return (00);
|
||||
|
||||
if (bp != NULL) {
|
||||
if (!results) {
|
||||
BN_print(bp, a);
|
||||
BIO_puts(bp, " ^ ");
|
||||
BN_print(bp, b);
|
||||
BIO_puts(bp, " % ");
|
||||
BN_print(bp, c);
|
||||
BIO_puts(bp, " - ");
|
||||
}
|
||||
BN_print(bp, d);
|
||||
BIO_puts(bp, "\n");
|
||||
}
|
||||
BN_exp(e, a, b, ctx);
|
||||
BN_sub(e, e, d);
|
||||
BN_div(a, b, e, c, ctx);
|
||||
if (!BN_is_zero(b)) {
|
||||
fprintf(stderr, "Modulo exponentiation test failed!\n");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
BN_free(a);
|
||||
BN_free(b);
|
||||
BN_free(c);
|
||||
BN_free(d);
|
||||
BN_free(e);
|
||||
return (1);
|
||||
}
|
||||
|
||||
/*
|
||||
* Test constant-time modular exponentiation with 1024-bit inputs, which on
|
||||
* x86_64 cause a different code branch to be taken.
|
||||
*/
|
||||
int test_mod_exp_mont5(BIO *bp, BN_CTX *ctx)
|
||||
{
|
||||
BIGNUM *a, *p, *m, *d, *e;
|
||||
BN_MONT_CTX *mont;
|
||||
|
||||
a = BN_new();
|
||||
p = BN_new();
|
||||
m = BN_new();
|
||||
d = BN_new();
|
||||
e = BN_new();
|
||||
mont = BN_MONT_CTX_new();
|
||||
|
||||
BN_bntest_rand(m, 1024, 0, 1); /* must be odd for montgomery */
|
||||
/* Zero exponent */
|
||||
BN_bntest_rand(a, 1024, 0, 0);
|
||||
BN_zero(p);
|
||||
if (!BN_mod_exp_mont_consttime(d, a, p, m, ctx, NULL))
|
||||
return 0;
|
||||
if (!BN_is_one(d)) {
|
||||
fprintf(stderr, "Modular exponentiation test failed!\n");
|
||||
return 0;
|
||||
}
|
||||
/* Zero input */
|
||||
BN_bntest_rand(p, 1024, 0, 0);
|
||||
BN_zero(a);
|
||||
if (!BN_mod_exp_mont_consttime(d, a, p, m, ctx, NULL))
|
||||
return 0;
|
||||
if (!BN_is_zero(d)) {
|
||||
fprintf(stderr, "Modular exponentiation test failed!\n");
|
||||
return 0;
|
||||
}
|
||||
/*
|
||||
* Craft an input whose Montgomery representation is 1, i.e., shorter
|
||||
* than the modulus m, in order to test the const time precomputation
|
||||
* scattering/gathering.
|
||||
*/
|
||||
BN_one(a);
|
||||
BN_MONT_CTX_set(mont, m, ctx);
|
||||
if (!BN_from_montgomery(e, a, mont, ctx))
|
||||
return 0;
|
||||
if (!BN_mod_exp_mont_consttime(d, e, p, m, ctx, NULL))
|
||||
return 0;
|
||||
if (!BN_mod_exp_simple(a, e, p, m, ctx))
|
||||
return 0;
|
||||
if (BN_cmp(a, d) != 0) {
|
||||
fprintf(stderr, "Modular exponentiation test failed!\n");
|
||||
return 0;
|
||||
}
|
||||
/* Finally, some regular test vectors. */
|
||||
BN_bntest_rand(e, 1024, 0, 0);
|
||||
if (!BN_mod_exp_mont_consttime(d, e, p, m, ctx, NULL))
|
||||
return 0;
|
||||
if (!BN_mod_exp_simple(a, e, p, m, ctx))
|
||||
return 0;
|
||||
if (BN_cmp(a, d) != 0) {
|
||||
fprintf(stderr, "Modular exponentiation test failed!\n");
|
||||
return 0;
|
||||
}
|
||||
BN_MONT_CTX_free(mont);
|
||||
BN_free(a);
|
||||
BN_free(p);
|
||||
BN_free(m);
|
||||
BN_free(d);
|
||||
BN_free(e);
|
||||
return (1);
|
||||
}
|
||||
|
||||
int test_exp(BIO *bp, BN_CTX *ctx)
|
||||
{
|
||||
BIGNUM *a, *b, *d, *e, *one;
|
||||
int i;
|
||||
|
||||
a = BN_new();
|
||||
b = BN_new();
|
||||
d = BN_new();
|
||||
e = BN_new();
|
||||
one = BN_new();
|
||||
BN_one(one);
|
||||
|
||||
for (i = 0; i < num2; i++) {
|
||||
BN_bntest_rand(a, 20 + i * 5, 0, 0);
|
||||
BN_bntest_rand(b, 2 + i, 0, 0);
|
||||
|
||||
if (BN_exp(d, a, b, ctx) <= 0)
|
||||
return (0);
|
||||
|
||||
if (bp != NULL) {
|
||||
if (!results) {
|
||||
BN_print(bp, a);
|
||||
BIO_puts(bp, " ^ ");
|
||||
BN_print(bp, b);
|
||||
BIO_puts(bp, " - ");
|
||||
}
|
||||
BN_print(bp, d);
|
||||
BIO_puts(bp, "\n");
|
||||
}
|
||||
BN_one(e);
|
||||
for (; !BN_is_zero(b); BN_sub(b, b, one))
|
||||
BN_mul(e, e, a, ctx);
|
||||
BN_sub(e, e, d);
|
||||
if (!BN_is_zero(e)) {
|
||||
fprintf(stderr, "Exponentiation test failed!\n");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
BN_free(a);
|
||||
BN_free(b);
|
||||
BN_free(d);
|
||||
BN_free(e);
|
||||
BN_free(one);
|
||||
return (1);
|
||||
}
|
||||
|
||||
#ifndef OPENSSL_NO_EC2M
|
||||
int test_gf2m_add(BIO *bp)
|
||||
{
|
||||
BIGNUM *a, *b, *c;
|
||||
int i, ret = 0;
|
||||
|
||||
a = BN_new();
|
||||
b = BN_new();
|
||||
c = BN_new();
|
||||
|
||||
for (i = 0; i < num0; i++) {
|
||||
BN_rand(a, 512, BN_RAND_TOP_ONE, BN_RAND_BOTTOM_ANY);
|
||||
BN_copy(b, BN_value_one());
|
||||
a->neg = rand_neg();
|
||||
b->neg = rand_neg();
|
||||
BN_GF2m_add(c, a, b);
|
||||
/* Test that two added values have the correct parity. */
|
||||
if ((BN_is_odd(a) && BN_is_odd(c))
|
||||
|| (!BN_is_odd(a) && !BN_is_odd(c))) {
|
||||
fprintf(stderr, "GF(2^m) addition test (a) failed!\n");
|
||||
goto err;
|
||||
}
|
||||
BN_GF2m_add(c, c, c);
|
||||
/* Test that c + c = 0. */
|
||||
if (!BN_is_zero(c)) {
|
||||
fprintf(stderr, "GF(2^m) addition test (b) failed!\n");
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
ret = 1;
|
||||
err:
|
||||
BN_free(a);
|
||||
BN_free(b);
|
||||
BN_free(c);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int test_gf2m_mod(BIO *bp)
|
||||
{
|
||||
BIGNUM *a, *b[2], *c, *d, *e;
|
||||
int i, j, ret = 0;
|
||||
int p0[] = { 163, 7, 6, 3, 0, -1 };
|
||||
int p1[] = { 193, 15, 0, -1 };
|
||||
|
||||
a = BN_new();
|
||||
b[0] = BN_new();
|
||||
b[1] = BN_new();
|
||||
c = BN_new();
|
||||
d = BN_new();
|
||||
e = BN_new();
|
||||
|
||||
BN_GF2m_arr2poly(p0, b[0]);
|
||||
BN_GF2m_arr2poly(p1, b[1]);
|
||||
|
||||
for (i = 0; i < num0; i++) {
|
||||
BN_bntest_rand(a, 1024, 0, 0);
|
||||
for (j = 0; j < 2; j++) {
|
||||
BN_GF2m_mod(c, a, b[j]);
|
||||
BN_GF2m_add(d, a, c);
|
||||
BN_GF2m_mod(e, d, b[j]);
|
||||
/* Test that a + (a mod p) mod p == 0. */
|
||||
if (!BN_is_zero(e)) {
|
||||
fprintf(stderr, "GF(2^m) modulo test failed!\n");
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
}
|
||||
ret = 1;
|
||||
err:
|
||||
BN_free(a);
|
||||
BN_free(b[0]);
|
||||
BN_free(b[1]);
|
||||
BN_free(c);
|
||||
BN_free(d);
|
||||
BN_free(e);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int test_gf2m_mod_mul(BIO *bp, BN_CTX *ctx)
|
||||
{
|
||||
BIGNUM *a, *b[2], *c, *d, *e, *f, *g, *h;
|
||||
int i, j, ret = 0;
|
||||
int p0[] = { 163, 7, 6, 3, 0, -1 };
|
||||
int p1[] = { 193, 15, 0, -1 };
|
||||
|
||||
a = BN_new();
|
||||
b[0] = BN_new();
|
||||
b[1] = BN_new();
|
||||
c = BN_new();
|
||||
d = BN_new();
|
||||
e = BN_new();
|
||||
f = BN_new();
|
||||
g = BN_new();
|
||||
h = BN_new();
|
||||
|
||||
BN_GF2m_arr2poly(p0, b[0]);
|
||||
BN_GF2m_arr2poly(p1, b[1]);
|
||||
|
||||
for (i = 0; i < num0; i++) {
|
||||
BN_bntest_rand(a, 1024, 0, 0);
|
||||
BN_bntest_rand(c, 1024, 0, 0);
|
||||
BN_bntest_rand(d, 1024, 0, 0);
|
||||
for (j = 0; j < 2; j++) {
|
||||
BN_GF2m_mod_mul(e, a, c, b[j], ctx);
|
||||
BN_GF2m_add(f, a, d);
|
||||
BN_GF2m_mod_mul(g, f, c, b[j], ctx);
|
||||
BN_GF2m_mod_mul(h, d, c, b[j], ctx);
|
||||
BN_GF2m_add(f, e, g);
|
||||
BN_GF2m_add(f, f, h);
|
||||
/* Test that (a+d)*c = a*c + d*c. */
|
||||
if (!BN_is_zero(f)) {
|
||||
fprintf(stderr,
|
||||
"GF(2^m) modular multiplication test failed!\n");
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
}
|
||||
ret = 1;
|
||||
err:
|
||||
BN_free(a);
|
||||
BN_free(b[0]);
|
||||
BN_free(b[1]);
|
||||
BN_free(c);
|
||||
BN_free(d);
|
||||
BN_free(e);
|
||||
BN_free(f);
|
||||
BN_free(g);
|
||||
BN_free(h);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int test_gf2m_mod_sqr(BIO *bp, BN_CTX *ctx)
|
||||
{
|
||||
BIGNUM *a, *b[2], *c, *d;
|
||||
int i, j, ret = 0;
|
||||
int p0[] = { 163, 7, 6, 3, 0, -1 };
|
||||
int p1[] = { 193, 15, 0, -1 };
|
||||
|
||||
a = BN_new();
|
||||
b[0] = BN_new();
|
||||
b[1] = BN_new();
|
||||
c = BN_new();
|
||||
d = BN_new();
|
||||
|
||||
BN_GF2m_arr2poly(p0, b[0]);
|
||||
BN_GF2m_arr2poly(p1, b[1]);
|
||||
|
||||
for (i = 0; i < num0; i++) {
|
||||
BN_bntest_rand(a, 1024, 0, 0);
|
||||
for (j = 0; j < 2; j++) {
|
||||
BN_GF2m_mod_sqr(c, a, b[j], ctx);
|
||||
BN_copy(d, a);
|
||||
BN_GF2m_mod_mul(d, a, d, b[j], ctx);
|
||||
BN_GF2m_add(d, c, d);
|
||||
/* Test that a*a = a^2. */
|
||||
if (!BN_is_zero(d)) {
|
||||
fprintf(stderr, "GF(2^m) modular squaring test failed!\n");
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
}
|
||||
ret = 1;
|
||||
err:
|
||||
BN_free(a);
|
||||
BN_free(b[0]);
|
||||
BN_free(b[1]);
|
||||
BN_free(c);
|
||||
BN_free(d);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int test_gf2m_mod_inv(BIO *bp, BN_CTX *ctx)
|
||||
{
|
||||
BIGNUM *a, *b[2], *c, *d;
|
||||
int i, j, ret = 0;
|
||||
int p0[] = { 163, 7, 6, 3, 0, -1 };
|
||||
int p1[] = { 193, 15, 0, -1 };
|
||||
|
||||
a = BN_new();
|
||||
b[0] = BN_new();
|
||||
b[1] = BN_new();
|
||||
c = BN_new();
|
||||
d = BN_new();
|
||||
|
||||
BN_GF2m_arr2poly(p0, b[0]);
|
||||
BN_GF2m_arr2poly(p1, b[1]);
|
||||
|
||||
for (i = 0; i < num0; i++) {
|
||||
BN_bntest_rand(a, 512, 0, 0);
|
||||
for (j = 0; j < 2; j++) {
|
||||
BN_GF2m_mod_inv(c, a, b[j], ctx);
|
||||
BN_GF2m_mod_mul(d, a, c, b[j], ctx);
|
||||
/* Test that ((1/a)*a) = 1. */
|
||||
if (!BN_is_one(d)) {
|
||||
fprintf(stderr, "GF(2^m) modular inversion test failed!\n");
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
}
|
||||
ret = 1;
|
||||
err:
|
||||
BN_free(a);
|
||||
BN_free(b[0]);
|
||||
BN_free(b[1]);
|
||||
BN_free(c);
|
||||
BN_free(d);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int test_gf2m_mod_div(BIO *bp, BN_CTX *ctx)
|
||||
{
|
||||
BIGNUM *a, *b[2], *c, *d, *e, *f;
|
||||
int i, j, ret = 0;
|
||||
int p0[] = { 163, 7, 6, 3, 0, -1 };
|
||||
int p1[] = { 193, 15, 0, -1 };
|
||||
|
||||
a = BN_new();
|
||||
b[0] = BN_new();
|
||||
b[1] = BN_new();
|
||||
c = BN_new();
|
||||
d = BN_new();
|
||||
e = BN_new();
|
||||
f = BN_new();
|
||||
|
||||
BN_GF2m_arr2poly(p0, b[0]);
|
||||
BN_GF2m_arr2poly(p1, b[1]);
|
||||
|
||||
for (i = 0; i < num0; i++) {
|
||||
BN_bntest_rand(a, 512, 0, 0);
|
||||
BN_bntest_rand(c, 512, 0, 0);
|
||||
for (j = 0; j < 2; j++) {
|
||||
BN_GF2m_mod_div(d, a, c, b[j], ctx);
|
||||
BN_GF2m_mod_mul(e, d, c, b[j], ctx);
|
||||
BN_GF2m_mod_div(f, a, e, b[j], ctx);
|
||||
/* Test that ((a/c)*c)/a = 1. */
|
||||
if (!BN_is_one(f)) {
|
||||
fprintf(stderr, "GF(2^m) modular division test failed!\n");
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
}
|
||||
ret = 1;
|
||||
err:
|
||||
BN_free(a);
|
||||
BN_free(b[0]);
|
||||
BN_free(b[1]);
|
||||
BN_free(c);
|
||||
BN_free(d);
|
||||
BN_free(e);
|
||||
BN_free(f);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int test_gf2m_mod_exp(BIO *bp, BN_CTX *ctx)
|
||||
{
|
||||
BIGNUM *a, *b[2], *c, *d, *e, *f;
|
||||
int i, j, ret = 0;
|
||||
int p0[] = { 163, 7, 6, 3, 0, -1 };
|
||||
int p1[] = { 193, 15, 0, -1 };
|
||||
|
||||
a = BN_new();
|
||||
b[0] = BN_new();
|
||||
b[1] = BN_new();
|
||||
c = BN_new();
|
||||
d = BN_new();
|
||||
e = BN_new();
|
||||
f = BN_new();
|
||||
|
||||
BN_GF2m_arr2poly(p0, b[0]);
|
||||
BN_GF2m_arr2poly(p1, b[1]);
|
||||
|
||||
for (i = 0; i < num0; i++) {
|
||||
BN_bntest_rand(a, 512, 0, 0);
|
||||
BN_bntest_rand(c, 512, 0, 0);
|
||||
BN_bntest_rand(d, 512, 0, 0);
|
||||
for (j = 0; j < 2; j++) {
|
||||
BN_GF2m_mod_exp(e, a, c, b[j], ctx);
|
||||
BN_GF2m_mod_exp(f, a, d, b[j], ctx);
|
||||
BN_GF2m_mod_mul(e, e, f, b[j], ctx);
|
||||
BN_add(f, c, d);
|
||||
BN_GF2m_mod_exp(f, a, f, b[j], ctx);
|
||||
BN_GF2m_add(f, e, f);
|
||||
/* Test that a^(c+d)=a^c*a^d. */
|
||||
if (!BN_is_zero(f)) {
|
||||
fprintf(stderr,
|
||||
"GF(2^m) modular exponentiation test failed!\n");
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
}
|
||||
ret = 1;
|
||||
err:
|
||||
BN_free(a);
|
||||
BN_free(b[0]);
|
||||
BN_free(b[1]);
|
||||
BN_free(c);
|
||||
BN_free(d);
|
||||
BN_free(e);
|
||||
BN_free(f);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int test_gf2m_mod_sqrt(BIO *bp, BN_CTX *ctx)
|
||||
{
|
||||
BIGNUM *a, *b[2], *c, *d, *e, *f;
|
||||
int i, j, ret = 0;
|
||||
int p0[] = { 163, 7, 6, 3, 0, -1 };
|
||||
int p1[] = { 193, 15, 0, -1 };
|
||||
|
||||
a = BN_new();
|
||||
b[0] = BN_new();
|
||||
b[1] = BN_new();
|
||||
c = BN_new();
|
||||
d = BN_new();
|
||||
e = BN_new();
|
||||
f = BN_new();
|
||||
|
||||
BN_GF2m_arr2poly(p0, b[0]);
|
||||
BN_GF2m_arr2poly(p1, b[1]);
|
||||
|
||||
for (i = 0; i < num0; i++) {
|
||||
BN_bntest_rand(a, 512, 0, 0);
|
||||
for (j = 0; j < 2; j++) {
|
||||
BN_GF2m_mod(c, a, b[j]);
|
||||
BN_GF2m_mod_sqrt(d, a, b[j], ctx);
|
||||
BN_GF2m_mod_sqr(e, d, b[j], ctx);
|
||||
BN_GF2m_add(f, c, e);
|
||||
/* Test that d^2 = a, where d = sqrt(a). */
|
||||
if (!BN_is_zero(f)) {
|
||||
fprintf(stderr, "GF(2^m) modular square root test failed!\n");
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
}
|
||||
ret = 1;
|
||||
err:
|
||||
BN_free(a);
|
||||
BN_free(b[0]);
|
||||
BN_free(b[1]);
|
||||
BN_free(c);
|
||||
BN_free(d);
|
||||
BN_free(e);
|
||||
BN_free(f);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int test_gf2m_mod_solve_quad(BIO *bp, BN_CTX *ctx)
|
||||
{
|
||||
BIGNUM *a, *b[2], *c, *d, *e;
|
||||
int i, j, s = 0, t, ret = 0;
|
||||
int p0[] = { 163, 7, 6, 3, 0, -1 };
|
||||
int p1[] = { 193, 15, 0, -1 };
|
||||
|
||||
a = BN_new();
|
||||
b[0] = BN_new();
|
||||
b[1] = BN_new();
|
||||
c = BN_new();
|
||||
d = BN_new();
|
||||
e = BN_new();
|
||||
|
||||
BN_GF2m_arr2poly(p0, b[0]);
|
||||
BN_GF2m_arr2poly(p1, b[1]);
|
||||
|
||||
for (i = 0; i < num0; i++) {
|
||||
BN_bntest_rand(a, 512, 0, 0);
|
||||
for (j = 0; j < 2; j++) {
|
||||
t = BN_GF2m_mod_solve_quad(c, a, b[j], ctx);
|
||||
if (t) {
|
||||
s++;
|
||||
BN_GF2m_mod_sqr(d, c, b[j], ctx);
|
||||
BN_GF2m_add(d, c, d);
|
||||
BN_GF2m_mod(e, a, b[j]);
|
||||
BN_GF2m_add(e, e, d);
|
||||
/*
|
||||
* Test that solution of quadratic c satisfies c^2 + c = a.
|
||||
*/
|
||||
if (!BN_is_zero(e)) {
|
||||
fprintf(stderr,
|
||||
"GF(2^m) modular solve quadratic test failed!\n");
|
||||
goto err;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
if (s == 0) {
|
||||
fprintf(stderr,
|
||||
"All %i tests of GF(2^m) modular solve quadratic resulted in no roots;\n",
|
||||
num0);
|
||||
fprintf(stderr,
|
||||
"this is very unlikely and probably indicates an error.\n");
|
||||
goto err;
|
||||
}
|
||||
ret = 1;
|
||||
err:
|
||||
BN_free(a);
|
||||
BN_free(b[0]);
|
||||
BN_free(b[1]);
|
||||
BN_free(c);
|
||||
BN_free(d);
|
||||
BN_free(e);
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
static int genprime_cb(int p, int n, BN_GENCB *arg)
|
||||
{
|
||||
char c = '*';
|
||||
|
||||
if (p == 0)
|
||||
c = '.';
|
||||
if (p == 1)
|
||||
c = '+';
|
||||
if (p == 2)
|
||||
c = '*';
|
||||
if (p == 3)
|
||||
c = '\n';
|
||||
putc(c, stderr);
|
||||
fflush(stderr);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int test_kron(BIO *bp, BN_CTX *ctx)
|
||||
{
|
||||
BN_GENCB cb;
|
||||
BIGNUM *a, *b, *r, *t;
|
||||
int i;
|
||||
int legendre, kronecker;
|
||||
int ret = 0;
|
||||
|
||||
a = BN_new();
|
||||
b = BN_new();
|
||||
r = BN_new();
|
||||
t = BN_new();
|
||||
if (a == NULL || b == NULL || r == NULL || t == NULL)
|
||||
goto err;
|
||||
|
||||
BN_GENCB_set(&cb, genprime_cb, NULL);
|
||||
|
||||
/*
|
||||
* We test BN_kronecker(a, b, ctx) just for b odd (Jacobi symbol). In
|
||||
* this case we know that if b is prime, then BN_kronecker(a, b, ctx) is
|
||||
* congruent to $a^{(b-1)/2}$, modulo $b$ (Legendre symbol). So we
|
||||
* generate a random prime b and compare these values for a number of
|
||||
* random a's. (That is, we run the Solovay-Strassen primality test to
|
||||
* confirm that b is prime, except that we don't want to test whether b
|
||||
* is prime but whether BN_kronecker works.)
|
||||
*/
|
||||
|
||||
if (!BN_generate_prime_ex(b, 512, 0, NULL, NULL, &cb))
|
||||
goto err;
|
||||
b->neg = rand_neg();
|
||||
putc('\n', stderr);
|
||||
|
||||
for (i = 0; i < num0; i++) {
|
||||
if (!BN_bntest_rand(a, 512, 0, 0))
|
||||
goto err;
|
||||
a->neg = rand_neg();
|
||||
|
||||
/* t := (|b|-1)/2 (note that b is odd) */
|
||||
if (!BN_copy(t, b))
|
||||
goto err;
|
||||
t->neg = 0;
|
||||
if (!BN_sub_word(t, 1))
|
||||
goto err;
|
||||
if (!BN_rshift1(t, t))
|
||||
goto err;
|
||||
/* r := a^t mod b */
|
||||
b->neg = 0;
|
||||
|
||||
if (!BN_mod_exp_recp(r, a, t, b, ctx))
|
||||
goto err;
|
||||
b->neg = 1;
|
||||
|
||||
if (BN_is_word(r, 1))
|
||||
legendre = 1;
|
||||
else if (BN_is_zero(r))
|
||||
legendre = 0;
|
||||
else {
|
||||
if (!BN_add_word(r, 1))
|
||||
goto err;
|
||||
if (0 != BN_ucmp(r, b)) {
|
||||
fprintf(stderr, "Legendre symbol computation failed\n");
|
||||
goto err;
|
||||
}
|
||||
legendre = -1;
|
||||
}
|
||||
|
||||
kronecker = BN_kronecker(a, b, ctx);
|
||||
if (kronecker < -1)
|
||||
goto err;
|
||||
/* we actually need BN_kronecker(a, |b|) */
|
||||
if (a->neg && b->neg)
|
||||
kronecker = -kronecker;
|
||||
|
||||
if (legendre != kronecker) {
|
||||
fprintf(stderr, "legendre != kronecker; a = ");
|
||||
BN_print_fp(stderr, a);
|
||||
fprintf(stderr, ", b = ");
|
||||
BN_print_fp(stderr, b);
|
||||
fprintf(stderr, "\n");
|
||||
goto err;
|
||||
}
|
||||
|
||||
putc('.', stderr);
|
||||
fflush(stderr);
|
||||
}
|
||||
|
||||
putc('\n', stderr);
|
||||
fflush(stderr);
|
||||
ret = 1;
|
||||
err:
|
||||
BN_free(a);
|
||||
BN_free(b);
|
||||
BN_free(r);
|
||||
BN_free(t);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int test_sqrt(BIO *bp, BN_CTX *ctx)
|
||||
{
|
||||
BN_GENCB cb;
|
||||
BIGNUM *a, *p, *r;
|
||||
int i, j;
|
||||
int ret = 0;
|
||||
|
||||
a = BN_new();
|
||||
p = BN_new();
|
||||
r = BN_new();
|
||||
if (a == NULL || p == NULL || r == NULL)
|
||||
goto err;
|
||||
|
||||
BN_GENCB_set(&cb, genprime_cb, NULL);
|
||||
|
||||
for (i = 0; i < 16; i++) {
|
||||
if (i < 8) {
|
||||
unsigned primes[8] = { 2, 3, 5, 7, 11, 13, 17, 19 };
|
||||
|
||||
if (!BN_set_word(p, primes[i]))
|
||||
goto err;
|
||||
} else {
|
||||
if (!BN_set_word(a, 32))
|
||||
goto err;
|
||||
if (!BN_set_word(r, 2 * i + 1))
|
||||
goto err;
|
||||
|
||||
if (!BN_generate_prime_ex(p, 256, 0, a, r, &cb))
|
||||
goto err;
|
||||
putc('\n', stderr);
|
||||
}
|
||||
p->neg = rand_neg();
|
||||
|
||||
for (j = 0; j < num2; j++) {
|
||||
/*
|
||||
* construct 'a' such that it is a square modulo p, but in
|
||||
* general not a proper square and not reduced modulo p
|
||||
*/
|
||||
if (!BN_bntest_rand(r, 256, 0, 3))
|
||||
goto err;
|
||||
if (!BN_nnmod(r, r, p, ctx))
|
||||
goto err;
|
||||
if (!BN_mod_sqr(r, r, p, ctx))
|
||||
goto err;
|
||||
if (!BN_bntest_rand(a, 256, 0, 3))
|
||||
goto err;
|
||||
if (!BN_nnmod(a, a, p, ctx))
|
||||
goto err;
|
||||
if (!BN_mod_sqr(a, a, p, ctx))
|
||||
goto err;
|
||||
if (!BN_mul(a, a, r, ctx))
|
||||
goto err;
|
||||
if (rand_neg())
|
||||
if (!BN_sub(a, a, p))
|
||||
goto err;
|
||||
|
||||
if (!BN_mod_sqrt(r, a, p, ctx))
|
||||
goto err;
|
||||
if (!BN_mod_sqr(r, r, p, ctx))
|
||||
goto err;
|
||||
|
||||
if (!BN_nnmod(a, a, p, ctx))
|
||||
goto err;
|
||||
|
||||
if (BN_cmp(a, r) != 0) {
|
||||
fprintf(stderr, "BN_mod_sqrt failed: a = ");
|
||||
BN_print_fp(stderr, a);
|
||||
fprintf(stderr, ", r = ");
|
||||
BN_print_fp(stderr, r);
|
||||
fprintf(stderr, ", p = ");
|
||||
BN_print_fp(stderr, p);
|
||||
fprintf(stderr, "\n");
|
||||
goto err;
|
||||
}
|
||||
|
||||
putc('.', stderr);
|
||||
fflush(stderr);
|
||||
}
|
||||
|
||||
putc('\n', stderr);
|
||||
fflush(stderr);
|
||||
}
|
||||
ret = 1;
|
||||
err:
|
||||
BN_free(a);
|
||||
BN_free(p);
|
||||
BN_free(r);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int test_small_prime(BIO *bp, BN_CTX *ctx)
|
||||
{
|
||||
static const int bits = 10;
|
||||
int ret = 0;
|
||||
BIGNUM *r;
|
||||
|
||||
r = BN_new();
|
||||
if (!BN_generate_prime_ex(r, bits, 0, NULL, NULL, NULL))
|
||||
goto err;
|
||||
if (BN_num_bits(r) != bits) {
|
||||
BIO_printf(bp, "Expected %d bit prime, got %d bit number\n", bits,
|
||||
BN_num_bits(r));
|
||||
goto err;
|
||||
}
|
||||
|
||||
ret = 1;
|
||||
|
||||
err:
|
||||
BN_clear_free(r);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int test_bn2dec(BIO *bp)
|
||||
{
|
||||
static const char *bn2dec_tests[] = {
|
||||
"0",
|
||||
"1",
|
||||
"-1",
|
||||
"100",
|
||||
"-100",
|
||||
"123456789012345678901234567890",
|
||||
"-123456789012345678901234567890",
|
||||
"123456789012345678901234567890123456789012345678901234567890",
|
||||
"-123456789012345678901234567890123456789012345678901234567890",
|
||||
};
|
||||
int ret = 0;
|
||||
size_t i;
|
||||
BIGNUM *bn = NULL;
|
||||
char *dec = NULL;
|
||||
|
||||
for (i = 0; i < OSSL_NELEM(bn2dec_tests); i++) {
|
||||
if (!BN_dec2bn(&bn, bn2dec_tests[i]))
|
||||
goto err;
|
||||
|
||||
dec = BN_bn2dec(bn);
|
||||
if (dec == NULL) {
|
||||
fprintf(stderr, "BN_bn2dec failed on %s.\n", bn2dec_tests[i]);
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (strcmp(dec, bn2dec_tests[i]) != 0) {
|
||||
fprintf(stderr, "BN_bn2dec gave %s, wanted %s.\n", dec,
|
||||
bn2dec_tests[i]);
|
||||
goto err;
|
||||
}
|
||||
|
||||
OPENSSL_free(dec);
|
||||
dec = NULL;
|
||||
}
|
||||
|
||||
ret = 1;
|
||||
|
||||
err:
|
||||
BN_free(bn);
|
||||
OPENSSL_free(dec);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int test_lshift(BIO *bp, BN_CTX *ctx, BIGNUM *a_)
|
||||
{
|
||||
BIGNUM *a, *b, *c, *d;
|
||||
int i;
|
||||
|
||||
b = BN_new();
|
||||
c = BN_new();
|
||||
d = BN_new();
|
||||
BN_one(c);
|
||||
|
||||
if (a_)
|
||||
a = a_;
|
||||
else {
|
||||
a = BN_new();
|
||||
BN_bntest_rand(a, 200, 0, 0);
|
||||
a->neg = rand_neg();
|
||||
}
|
||||
for (i = 0; i < num0; i++) {
|
||||
BN_lshift(b, a, i + 1);
|
||||
BN_add(c, c, c);
|
||||
if (bp != NULL) {
|
||||
if (!results) {
|
||||
BN_print(bp, a);
|
||||
BIO_puts(bp, " * ");
|
||||
BN_print(bp, c);
|
||||
BIO_puts(bp, " - ");
|
||||
}
|
||||
BN_print(bp, b);
|
||||
BIO_puts(bp, "\n");
|
||||
}
|
||||
BN_mul(d, a, c, ctx);
|
||||
BN_sub(d, d, b);
|
||||
if (!BN_is_zero(d)) {
|
||||
fprintf(stderr, "Left shift test failed!\n");
|
||||
fprintf(stderr, "a=");
|
||||
BN_print_fp(stderr, a);
|
||||
fprintf(stderr, "\nb=");
|
||||
BN_print_fp(stderr, b);
|
||||
fprintf(stderr, "\nc=");
|
||||
BN_print_fp(stderr, c);
|
||||
fprintf(stderr, "\nd=");
|
||||
BN_print_fp(stderr, d);
|
||||
fprintf(stderr, "\n");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
BN_free(a);
|
||||
BN_free(b);
|
||||
BN_free(c);
|
||||
BN_free(d);
|
||||
return (1);
|
||||
}
|
||||
|
||||
int test_lshift1(BIO *bp)
|
||||
{
|
||||
BIGNUM *a, *b, *c;
|
||||
int i;
|
||||
|
||||
a = BN_new();
|
||||
b = BN_new();
|
||||
c = BN_new();
|
||||
|
||||
BN_bntest_rand(a, 200, 0, 0);
|
||||
a->neg = rand_neg();
|
||||
for (i = 0; i < num0; i++) {
|
||||
BN_lshift1(b, a);
|
||||
if (bp != NULL) {
|
||||
if (!results) {
|
||||
BN_print(bp, a);
|
||||
BIO_puts(bp, " * 2");
|
||||
BIO_puts(bp, " - ");
|
||||
}
|
||||
BN_print(bp, b);
|
||||
BIO_puts(bp, "\n");
|
||||
}
|
||||
BN_add(c, a, a);
|
||||
BN_sub(a, b, c);
|
||||
if (!BN_is_zero(a)) {
|
||||
fprintf(stderr, "Left shift one test failed!\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
BN_copy(a, b);
|
||||
}
|
||||
BN_free(a);
|
||||
BN_free(b);
|
||||
BN_free(c);
|
||||
return (1);
|
||||
}
|
||||
|
||||
int test_rshift(BIO *bp, BN_CTX *ctx)
|
||||
{
|
||||
BIGNUM *a, *b, *c, *d, *e;
|
||||
int i;
|
||||
|
||||
a = BN_new();
|
||||
b = BN_new();
|
||||
c = BN_new();
|
||||
d = BN_new();
|
||||
e = BN_new();
|
||||
BN_one(c);
|
||||
|
||||
BN_bntest_rand(a, 200, 0, 0);
|
||||
a->neg = rand_neg();
|
||||
for (i = 0; i < num0; i++) {
|
||||
BN_rshift(b, a, i + 1);
|
||||
BN_add(c, c, c);
|
||||
if (bp != NULL) {
|
||||
if (!results) {
|
||||
BN_print(bp, a);
|
||||
BIO_puts(bp, " / ");
|
||||
BN_print(bp, c);
|
||||
BIO_puts(bp, " - ");
|
||||
}
|
||||
BN_print(bp, b);
|
||||
BIO_puts(bp, "\n");
|
||||
}
|
||||
BN_div(d, e, a, c, ctx);
|
||||
BN_sub(d, d, b);
|
||||
if (!BN_is_zero(d)) {
|
||||
fprintf(stderr, "Right shift test failed!\n");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
BN_free(a);
|
||||
BN_free(b);
|
||||
BN_free(c);
|
||||
BN_free(d);
|
||||
BN_free(e);
|
||||
return (1);
|
||||
}
|
||||
|
||||
int test_rshift1(BIO *bp)
|
||||
{
|
||||
BIGNUM *a, *b, *c;
|
||||
int i;
|
||||
|
||||
a = BN_new();
|
||||
b = BN_new();
|
||||
c = BN_new();
|
||||
|
||||
BN_bntest_rand(a, 200, 0, 0);
|
||||
a->neg = rand_neg();
|
||||
for (i = 0; i < num0; i++) {
|
||||
BN_rshift1(b, a);
|
||||
if (bp != NULL) {
|
||||
if (!results) {
|
||||
BN_print(bp, a);
|
||||
BIO_puts(bp, " / 2");
|
||||
BIO_puts(bp, " - ");
|
||||
}
|
||||
BN_print(bp, b);
|
||||
BIO_puts(bp, "\n");
|
||||
}
|
||||
BN_sub(c, a, b);
|
||||
BN_sub(c, c, b);
|
||||
if (!BN_is_zero(c) && !BN_abs_is_word(c, 1)) {
|
||||
fprintf(stderr, "Right shift one test failed!\n");
|
||||
return 0;
|
||||
}
|
||||
BN_copy(a, b);
|
||||
}
|
||||
BN_free(a);
|
||||
BN_free(b);
|
||||
BN_free(c);
|
||||
return (1);
|
||||
}
|
||||
|
||||
int rand_neg(void)
|
||||
{
|
||||
static unsigned int neg = 0;
|
||||
static int sign[8] = { 0, 0, 0, 1, 1, 0, 1, 1 };
|
||||
|
||||
return (sign[(neg++) % 8]);
|
||||
}
|
||||
+326
@@ -0,0 +1,326 @@
|
||||
IF[{- !$disabled{tests} -}]
|
||||
PROGRAMS_NO_INST=\
|
||||
aborttest \
|
||||
sanitytest exdatatest bntest \
|
||||
ectest ecdsatest gmdifftest pbelutest ideatest \
|
||||
md2test md4test md5test \
|
||||
hmactest wp_test \
|
||||
rc2test rc4test rc5test \
|
||||
destest sha1test sha256t sha512t \
|
||||
mdc2test rmdtest \
|
||||
randtest dhtest enginetest casttest \
|
||||
bftest ssltest_old dsatest exptest rsa_test \
|
||||
evp_test evp_extra_test igetest v3nametest v3ext \
|
||||
crltest danetest heartbeat_test p5_crpt2_test bad_dtls_test \
|
||||
constant_time_test verify_extra_test clienthellotest \
|
||||
packettest asynctest secmemtest srptest memleaktest \
|
||||
dtlsv1listentest ct_test threadstest afalgtest d2i_test \
|
||||
ssl_test_ctx_test ssl_test x509aux cipherlist_test asynciotest \
|
||||
bioprinttest sslapitest dtlstest sslcorrupttest bio_enc_test \
|
||||
ocspapitest fatalerrtest
|
||||
|
||||
SOURCE[aborttest]=aborttest.c
|
||||
INCLUDE[aborttest]=../include
|
||||
DEPEND[aborttest]=../libcrypto
|
||||
|
||||
SOURCE[sanitytest]=sanitytest.c
|
||||
INCLUDE[sanitytest]=../include
|
||||
DEPEND[sanitytest]=../libcrypto
|
||||
|
||||
SOURCE[exdatatest]=exdatatest.c
|
||||
INCLUDE[exdatatest]=../include
|
||||
DEPEND[exdatatest]=../libcrypto
|
||||
|
||||
SOURCE[bntest]=bntest.c
|
||||
INCLUDE[bntest]=.. ../crypto/include ../include
|
||||
DEPEND[bntest]=../libcrypto
|
||||
|
||||
SOURCE[ectest]=ectest.c
|
||||
INCLUDE[ectest]=../include
|
||||
DEPEND[ectest]=../libcrypto
|
||||
|
||||
SOURCE[ecdsatest]=ecdsatest.c
|
||||
INCLUDE[ecdsatest]=../include
|
||||
DEPEND[ecdsatest]=../libcrypto
|
||||
|
||||
SOURCE[gmdifftest]=gmdifftest.c
|
||||
INCLUDE[gmdifftest]=../include
|
||||
DEPEND[gmdifftest]=../libcrypto
|
||||
|
||||
SOURCE[pbelutest]=pbelutest.c
|
||||
INCLUDE[pbelutest]=../include
|
||||
DEPEND[pbelutest]=../libcrypto
|
||||
|
||||
SOURCE[ideatest]=ideatest.c
|
||||
INCLUDE[ideatest]=../include
|
||||
DEPEND[ideatest]=../libcrypto
|
||||
|
||||
SOURCE[md2test]=md2test.c
|
||||
INCLUDE[md2test]=../include
|
||||
DEPEND[md2test]=../libcrypto
|
||||
|
||||
SOURCE[md4test]=md4test.c
|
||||
INCLUDE[md4test]=../include
|
||||
DEPEND[md4test]=../libcrypto
|
||||
|
||||
SOURCE[md5test]=md5test.c
|
||||
INCLUDE[md5test]=../include
|
||||
DEPEND[md5test]=../libcrypto
|
||||
|
||||
SOURCE[hmactest]=hmactest.c
|
||||
INCLUDE[hmactest]=../include
|
||||
DEPEND[hmactest]=../libcrypto
|
||||
|
||||
SOURCE[wp_test]=wp_test.c
|
||||
INCLUDE[wp_test]=../include
|
||||
DEPEND[wp_test]=../libcrypto
|
||||
|
||||
SOURCE[rc2test]=rc2test.c
|
||||
INCLUDE[rc2test]=../include
|
||||
DEPEND[rc2test]=../libcrypto
|
||||
|
||||
SOURCE[rc4test]=rc4test.c
|
||||
INCLUDE[rc4test]=../include
|
||||
DEPEND[rc4test]=../libcrypto
|
||||
|
||||
SOURCE[rc5test]=rc5test.c
|
||||
INCLUDE[rc5test]=../include
|
||||
DEPEND[rc5test]=../libcrypto
|
||||
|
||||
SOURCE[destest]=destest.c
|
||||
INCLUDE[destest]=../include
|
||||
DEPEND[destest]=../libcrypto
|
||||
|
||||
SOURCE[sha1test]=sha1test.c
|
||||
INCLUDE[sha1test]=../include
|
||||
DEPEND[sha1test]=../libcrypto
|
||||
|
||||
SOURCE[sha256t]=sha256t.c
|
||||
INCLUDE[sha256t]=../include
|
||||
DEPEND[sha256t]=../libcrypto
|
||||
|
||||
SOURCE[sha512t]=sha512t.c
|
||||
INCLUDE[sha512t]=../include
|
||||
DEPEND[sha512t]=../libcrypto
|
||||
|
||||
SOURCE[mdc2test]=mdc2test.c
|
||||
INCLUDE[mdc2test]=../include
|
||||
DEPEND[mdc2test]=../libcrypto
|
||||
|
||||
SOURCE[rmdtest]=rmdtest.c
|
||||
INCLUDE[rmdtest]=../include
|
||||
DEPEND[rmdtest]=../libcrypto
|
||||
|
||||
SOURCE[randtest]=randtest.c
|
||||
INCLUDE[randtest]=../include
|
||||
DEPEND[randtest]=../libcrypto
|
||||
|
||||
SOURCE[dhtest]=dhtest.c
|
||||
INCLUDE[dhtest]=../include
|
||||
DEPEND[dhtest]=../libcrypto
|
||||
|
||||
SOURCE[enginetest]=enginetest.c
|
||||
INCLUDE[enginetest]=../include
|
||||
DEPEND[enginetest]=../libcrypto
|
||||
|
||||
SOURCE[casttest]=casttest.c
|
||||
INCLUDE[casttest]=../include
|
||||
DEPEND[casttest]=../libcrypto
|
||||
|
||||
SOURCE[bftest]=bftest.c
|
||||
INCLUDE[bftest]=../include
|
||||
DEPEND[bftest]=../libcrypto
|
||||
|
||||
SOURCE[ssltest_old]=ssltest_old.c
|
||||
INCLUDE[ssltest_old]=.. ../include
|
||||
DEPEND[ssltest_old]=../libcrypto ../libssl
|
||||
|
||||
SOURCE[dsatest]=dsatest.c
|
||||
INCLUDE[dsatest]=../include
|
||||
DEPEND[dsatest]=../libcrypto
|
||||
|
||||
SOURCE[exptest]=exptest.c
|
||||
INCLUDE[exptest]=../include
|
||||
DEPEND[exptest]=../libcrypto
|
||||
|
||||
SOURCE[rsa_test]=rsa_test.c
|
||||
INCLUDE[rsa_test]=.. ../include
|
||||
DEPEND[rsa_test]=../libcrypto
|
||||
|
||||
SOURCE[fatalerrtest]=fatalerrtest.c ssltestlib.c testutil.c
|
||||
INCLUDE[fatalerrtest]=../include ..
|
||||
DEPEND[fatalerrtest]=../libcrypto ../libssl
|
||||
|
||||
SOURCE[evp_test]=evp_test.c
|
||||
INCLUDE[evp_test]=../include
|
||||
DEPEND[evp_test]=../libcrypto
|
||||
|
||||
SOURCE[evp_extra_test]=evp_extra_test.c
|
||||
INCLUDE[evp_extra_test]=../include
|
||||
DEPEND[evp_extra_test]=../libcrypto
|
||||
|
||||
SOURCE[igetest]=igetest.c
|
||||
INCLUDE[igetest]=.. ../include
|
||||
DEPEND[igetest]=../libcrypto
|
||||
|
||||
SOURCE[v3nametest]=v3nametest.c
|
||||
INCLUDE[v3nametest]=../include
|
||||
DEPEND[v3nametest]=../libcrypto
|
||||
|
||||
SOURCE[crltest]=crltest.c testutil.c
|
||||
INCLUDE[crltest]=../include
|
||||
DEPEND[crltest]=../libcrypto
|
||||
|
||||
SOURCE[v3ext]=v3ext.c
|
||||
INCLUDE[v3ext]=../include
|
||||
DEPEND[v3ext]=../libcrypto
|
||||
|
||||
SOURCE[danetest]=danetest.c
|
||||
INCLUDE[danetest]=../include
|
||||
DEPEND[danetest]=../libcrypto ../libssl
|
||||
|
||||
SOURCE[heartbeat_test]=heartbeat_test.c testutil.c
|
||||
INCLUDE[heartbeat_test]=.. ../include
|
||||
DEPEND[heartbeat_test]=../libcrypto ../libssl
|
||||
|
||||
SOURCE[p5_crpt2_test]=p5_crpt2_test.c
|
||||
INCLUDE[p5_crpt2_test]=../include
|
||||
DEPEND[p5_crpt2_test]=../libcrypto
|
||||
|
||||
SOURCE[constant_time_test]=constant_time_test.c
|
||||
INCLUDE[constant_time_test]=.. ../include
|
||||
DEPEND[constant_time_test]=../libcrypto
|
||||
|
||||
SOURCE[verify_extra_test]=verify_extra_test.c
|
||||
INCLUDE[verify_extra_test]=../include
|
||||
DEPEND[verify_extra_test]=../libcrypto
|
||||
|
||||
SOURCE[clienthellotest]=clienthellotest.c
|
||||
INCLUDE[clienthellotest]=../include
|
||||
DEPEND[clienthellotest]=../libcrypto ../libssl
|
||||
|
||||
SOURCE[bad_dtls_test]=bad_dtls_test.c
|
||||
INCLUDE[bad_dtls_test]=../include
|
||||
DEPEND[bad_dtls_test]=../libcrypto ../libssl
|
||||
|
||||
SOURCE[packettest]=packettest.c
|
||||
INCLUDE[packettest]=../include
|
||||
DEPEND[packettest]=../libcrypto
|
||||
|
||||
SOURCE[asynctest]=asynctest.c
|
||||
INCLUDE[asynctest]=.. ../include
|
||||
DEPEND[asynctest]=../libcrypto
|
||||
|
||||
SOURCE[secmemtest]=secmemtest.c
|
||||
INCLUDE[secmemtest]=../include
|
||||
DEPEND[secmemtest]=../libcrypto
|
||||
|
||||
SOURCE[srptest]=srptest.c
|
||||
INCLUDE[srptest]=../include
|
||||
DEPEND[srptest]=../libcrypto
|
||||
|
||||
SOURCE[memleaktest]=memleaktest.c
|
||||
INCLUDE[memleaktest]=../include
|
||||
DEPEND[memleaktest]=../libcrypto
|
||||
|
||||
SOURCE[dtlsv1listentest]=dtlsv1listentest.c
|
||||
INCLUDE[dtlsv1listentest]=.. ../include
|
||||
DEPEND[dtlsv1listentest]=../libssl
|
||||
|
||||
SOURCE[ct_test]=ct_test.c testutil.c
|
||||
INCLUDE[ct_test]=../crypto/include ../include
|
||||
DEPEND[ct_test]=../libcrypto
|
||||
|
||||
SOURCE[threadstest]=threadstest.c
|
||||
INCLUDE[threadstest]=.. ../include
|
||||
DEPEND[threadstest]=../libcrypto
|
||||
|
||||
SOURCE[afalgtest]=afalgtest.c
|
||||
INCLUDE[afalgtest]=.. ../include
|
||||
DEPEND[afalgtest]=../libcrypto
|
||||
|
||||
SOURCE[d2i_test]=d2i_test.c testutil.c
|
||||
INCLUDE[d2i_test]=.. ../include
|
||||
DEPEND[d2i_test]=../libcrypto
|
||||
|
||||
SOURCE[ssl_test_ctx_test]=ssl_test_ctx_test.c ssl_test_ctx.c testutil.c
|
||||
INCLUDE[ssl_test_ctx_test]=.. ../include
|
||||
DEPEND[ssl_test_ctx_test]=../libcrypto
|
||||
|
||||
SOURCE[ssl_test]=ssl_test.c ssl_test_ctx.c testutil.c handshake_helper.c
|
||||
INCLUDE[ssl_test]=.. ../include
|
||||
DEPEND[ssl_test]=../libcrypto ../libssl
|
||||
|
||||
SOURCE[cipherlist_test]=cipherlist_test.c testutil.c
|
||||
INCLUDE[cipherlist_test]=.. ../include
|
||||
DEPEND[cipherlist_test]=../libcrypto ../libssl
|
||||
|
||||
INCLUDE[testutil.o]=..
|
||||
INCLUDE[ssl_test_ctx.o]=../include
|
||||
INCLUDE[handshake_helper.o]=../include
|
||||
INCLUDE[ssltestlib.o]=.. ../include
|
||||
|
||||
SOURCE[x509aux]=x509aux.c
|
||||
INCLUDE[x509aux]=../include
|
||||
DEPEND[x509aux]=../libcrypto
|
||||
|
||||
SOURCE[asynciotest]=asynciotest.c ssltestlib.c
|
||||
INCLUDE[asynciotest]=../include
|
||||
DEPEND[asynciotest]=../libcrypto ../libssl
|
||||
|
||||
SOURCE[bioprinttest]=bioprinttest.c
|
||||
INCLUDE[bioprinttest]=../include
|
||||
DEPEND[bioprinttest]=../libcrypto
|
||||
|
||||
SOURCE[sslapitest]=sslapitest.c ssltestlib.c testutil.c
|
||||
INCLUDE[sslapitest]=../include ..
|
||||
DEPEND[sslapitest]=../libcrypto ../libssl
|
||||
|
||||
SOURCE[ocspapitest]=ocspapitest.c testutil.c
|
||||
INCLUDE[ocspapitest]=../include ..
|
||||
DEPEND[ocspapitest]=../libcrypto
|
||||
|
||||
SOURCE[dtlstest]=dtlstest.c ssltestlib.c testutil.c
|
||||
INCLUDE[dtlstest]=../include .
|
||||
DEPEND[dtlstest]=../libcrypto ../libssl
|
||||
|
||||
SOURCE[sslcorrupttest]=sslcorrupttest.c ssltestlib.c testutil.c
|
||||
INCLUDE[sslcorrupttest]=../include .
|
||||
DEPEND[sslcorrupttest]=../libcrypto ../libssl
|
||||
|
||||
SOURCE[bio_enc_test]=bio_enc_test.c
|
||||
INCLUDE[bio_enc_test]=../include
|
||||
DEPEND[bio_enc_test]=../libcrypto
|
||||
|
||||
IF[{- !$disabled{shared} -}]
|
||||
PROGRAMS_NO_INST=shlibloadtest
|
||||
SOURCE[shlibloadtest]=shlibloadtest.c
|
||||
INCLUDE[shlibloadtest]=../include
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
{-
|
||||
use File::Spec::Functions;
|
||||
use File::Basename;
|
||||
use OpenSSL::Glob;
|
||||
|
||||
my @nogo_headers = ( "asn1_mac.h",
|
||||
"__decc_include_prologue.h",
|
||||
"__decc_include_epilogue.h" );
|
||||
my @headerfiles = glob catfile($sourcedir,
|
||||
updir(), "include", "openssl", "*.h");
|
||||
|
||||
foreach my $headerfile (@headerfiles) {
|
||||
my $name = basename($headerfile, ".h");
|
||||
next if $disabled{$name};
|
||||
next if grep { $_ eq lc("$name.h") } @nogo_headers;
|
||||
$OUT .= <<"_____";
|
||||
|
||||
PROGRAMS_NO_INST=buildtest_$name
|
||||
GENERATE[buildtest_$name.c]=generate_buildtest.pl $name
|
||||
SOURCE[buildtest_$name]=buildtest_$name.c
|
||||
INCLUDE[buildtest_$name]=../include
|
||||
DEPEND[buildtest_$name]=../libssl ../libcrypto
|
||||
_____
|
||||
}
|
||||
-}
|
||||
+163
@@ -0,0 +1,163 @@
|
||||
/*
|
||||
* Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the OpenSSL license (the "License"). You may not use
|
||||
* this file except in compliance with the License. You can obtain a copy
|
||||
* in the file LICENSE in the source distribution or at
|
||||
* https://www.openssl.org/source/license.html
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <openssl/opensslconf.h> /* To see if OPENSSL_NO_CAST is defined */
|
||||
|
||||
#include "../e_os.h"
|
||||
|
||||
#ifdef OPENSSL_NO_CAST
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
printf("No CAST support\n");
|
||||
return (0);
|
||||
}
|
||||
#else
|
||||
# include <openssl/cast.h>
|
||||
|
||||
# define FULL_TEST
|
||||
|
||||
static unsigned char k[16] = {
|
||||
0x01, 0x23, 0x45, 0x67, 0x12, 0x34, 0x56, 0x78,
|
||||
0x23, 0x45, 0x67, 0x89, 0x34, 0x56, 0x78, 0x9A
|
||||
};
|
||||
|
||||
static unsigned char in[8] =
|
||||
{ 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF };
|
||||
|
||||
static int k_len[3] = { 16, 10, 5 };
|
||||
|
||||
static unsigned char c[3][8] = {
|
||||
{0x23, 0x8B, 0x4F, 0xE5, 0x84, 0x7E, 0x44, 0xB2},
|
||||
{0xEB, 0x6A, 0x71, 0x1A, 0x2C, 0x02, 0x27, 0x1B},
|
||||
{0x7A, 0xC8, 0x16, 0xD1, 0x6E, 0x9B, 0x30, 0x2E},
|
||||
};
|
||||
|
||||
static unsigned char out[80];
|
||||
|
||||
static unsigned char in_a[16] = {
|
||||
0x01, 0x23, 0x45, 0x67, 0x12, 0x34, 0x56, 0x78,
|
||||
0x23, 0x45, 0x67, 0x89, 0x34, 0x56, 0x78, 0x9A
|
||||
};
|
||||
|
||||
static unsigned char in_b[16] = {
|
||||
0x01, 0x23, 0x45, 0x67, 0x12, 0x34, 0x56, 0x78,
|
||||
0x23, 0x45, 0x67, 0x89, 0x34, 0x56, 0x78, 0x9A
|
||||
};
|
||||
|
||||
static unsigned char c_a[16] = {
|
||||
0xEE, 0xA9, 0xD0, 0xA2, 0x49, 0xFD, 0x3B, 0xA6,
|
||||
0xB3, 0x43, 0x6F, 0xB8, 0x9D, 0x6D, 0xCA, 0x92
|
||||
};
|
||||
|
||||
static unsigned char c_b[16] = {
|
||||
0xB2, 0xC9, 0x5E, 0xB0, 0x0C, 0x31, 0xAD, 0x71,
|
||||
0x80, 0xAC, 0x05, 0xB8, 0xE8, 0x3D, 0x69, 0x6E
|
||||
};
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
# ifdef FULL_TEST
|
||||
long l;
|
||||
CAST_KEY key_b;
|
||||
# endif
|
||||
int i, z, err = 0;
|
||||
CAST_KEY key;
|
||||
|
||||
for (z = 0; z < 3; z++) {
|
||||
CAST_set_key(&key, k_len[z], k);
|
||||
|
||||
CAST_ecb_encrypt(in, out, &key, CAST_ENCRYPT);
|
||||
if (memcmp(out, &(c[z][0]), 8) != 0) {
|
||||
printf("ecb cast error encrypting for keysize %d\n",
|
||||
k_len[z] * 8);
|
||||
printf("got :");
|
||||
for (i = 0; i < 8; i++)
|
||||
printf("%02X ", out[i]);
|
||||
printf("\n");
|
||||
printf("expected:");
|
||||
for (i = 0; i < 8; i++)
|
||||
printf("%02X ", c[z][i]);
|
||||
err = 20;
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
CAST_ecb_encrypt(out, out, &key, CAST_DECRYPT);
|
||||
if (memcmp(out, in, 8) != 0) {
|
||||
printf("ecb cast error decrypting for keysize %d\n",
|
||||
k_len[z] * 8);
|
||||
printf("got :");
|
||||
for (i = 0; i < 8; i++)
|
||||
printf("%02X ", out[i]);
|
||||
printf("\n");
|
||||
printf("expected:");
|
||||
for (i = 0; i < 8; i++)
|
||||
printf("%02X ", in[i]);
|
||||
printf("\n");
|
||||
err = 3;
|
||||
}
|
||||
}
|
||||
if (err == 0)
|
||||
printf("ecb cast5 ok\n");
|
||||
|
||||
# ifdef FULL_TEST
|
||||
{
|
||||
unsigned char out_a[16], out_b[16];
|
||||
static char *hex = "0123456789ABCDEF";
|
||||
|
||||
printf("This test will take some time....");
|
||||
fflush(stdout);
|
||||
memcpy(out_a, in_a, sizeof(in_a));
|
||||
memcpy(out_b, in_b, sizeof(in_b));
|
||||
i = 1;
|
||||
|
||||
for (l = 0; l < 1000000L; l++) {
|
||||
CAST_set_key(&key_b, 16, out_b);
|
||||
CAST_ecb_encrypt(&(out_a[0]), &(out_a[0]), &key_b, CAST_ENCRYPT);
|
||||
CAST_ecb_encrypt(&(out_a[8]), &(out_a[8]), &key_b, CAST_ENCRYPT);
|
||||
CAST_set_key(&key, 16, out_a);
|
||||
CAST_ecb_encrypt(&(out_b[0]), &(out_b[0]), &key, CAST_ENCRYPT);
|
||||
CAST_ecb_encrypt(&(out_b[8]), &(out_b[8]), &key, CAST_ENCRYPT);
|
||||
if ((l & 0xffff) == 0xffff) {
|
||||
printf("%c", hex[i & 0x0f]);
|
||||
fflush(stdout);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
if ((memcmp(out_a, c_a, sizeof(c_a)) != 0) ||
|
||||
(memcmp(out_b, c_b, sizeof(c_b)) != 0)) {
|
||||
printf("\n");
|
||||
printf("Error\n");
|
||||
|
||||
printf("A out =");
|
||||
for (i = 0; i < 16; i++)
|
||||
printf("%02X ", out_a[i]);
|
||||
printf("\nactual=");
|
||||
for (i = 0; i < 16; i++)
|
||||
printf("%02X ", c_a[i]);
|
||||
printf("\n");
|
||||
|
||||
printf("B out =");
|
||||
for (i = 0; i < 16; i++)
|
||||
printf("%02X ", out_b[i]);
|
||||
printf("\nactual=");
|
||||
for (i = 0; i < 16; i++)
|
||||
printf("%02X ", c_b[i]);
|
||||
printf("\n");
|
||||
} else
|
||||
printf(" ok\n");
|
||||
}
|
||||
# endif
|
||||
|
||||
EXIT(err);
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,22 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDlTCCAn2gAwIBAgIBAjANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxUZXN0
|
||||
IE5DIENBIDEwIBcNMTYwNzA5MTQ0ODExWhgPMjExNjA3MTAxNDQ4MTFaMGgxIzAh
|
||||
BgNVBAoMGkdvb2QgTkMgVGVzdCBDZXJ0aWZpY2F0ZSAxMRUwEwYDVQQDDAx3d3cu
|
||||
Z29vZC5vcmcxEzARBgNVBAMMCkpvZSBCbG9nZ3MxFTATBgNVBAMMDGFueS5nb29k
|
||||
LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALAv1X8S8uUpnjTa
|
||||
3bv7m1jJbbX7bC9w7k4TfxiU5XL/m3EhN//EUBJSoamy6vFC6oy/6jA8XmptlVrY
|
||||
Sp3ZKFdjdZh+CyYZKcrv4JReF2lfRIINn6d6EgcAobGTNwdcv67xuNtMi0meAvmK
|
||||
gLjOa/IhCHNC+l8vNDJx/a+7mxH+yNxPL6lC/kJMja6oaYndx74WJpPC22LJ/cCp
|
||||
xspKKsoPYYjk0BX9RvbKO8s4b86Wjzzntht+NpQ4LLh9XwPZog11qGE4UIrsV8XA
|
||||
YxJrMGQNZd69cnCOz8vnOVCszFOa4qVvXeAGr0iFlZAXbQJevpiiXaXHMEt8C1qH
|
||||
xpcW8DcCAwEAAaOBmDCBlTAdBgNVHQ4EFgQUw8nB25NP0gUaFCrOwAO5KzllnREw
|
||||
HwYDVR0jBBgwFoAUCNGb+ebVZHCg8Wsanu1S2t31UEMwCQYDVR0TBAIwADBIBgNV
|
||||
HREEQTA/ggx3d3cuZ29vZC5vcmeCDGFueS5nb29kLmNvbYENZ29vZEBnb29kLm9y
|
||||
Z4EMYW55QGdvb2QuY29thwTAqAABMA0GCSqGSIb3DQEBCwUAA4IBAQBUnDMrg1py
|
||||
8/iYXzs11Qbw7bBhc/HQDpu5QVgriaX2zDUpTLSEUV7qZFSHmwWm91ILw2VA1Xni
|
||||
ua2sF19o/tJT0ZHpapkfqGpfsym2H04NDMKy0l0fSZhlCB5Kv5wpiFt9hBUrxS/2
|
||||
Dd6Kg+Ka02nD5QBXSAk/xz0FmgezzGGCLjg85/Sfe9Y7tNhQXh3HuGXuJizYccdQ
|
||||
Fh1IAFYW3DZoDKS7dDTCltvDEma/2IE684+CRJiA6PH9rYfJ1CCUfAMpyA85CxKT
|
||||
P68GDKI++WoUgM8LDfxS0KOL7A9cqcpM2L27hjyEgnqIBPHFfm9fxztBotuCTl5L
|
||||
vRlTFVjv65nn
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,28 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCwL9V/EvLlKZ40
|
||||
2t27+5tYyW21+2wvcO5OE38YlOVy/5txITf/xFASUqGpsurxQuqMv+owPF5qbZVa
|
||||
2Eqd2ShXY3WYfgsmGSnK7+CUXhdpX0SCDZ+nehIHAKGxkzcHXL+u8bjbTItJngL5
|
||||
ioC4zmvyIQhzQvpfLzQycf2vu5sR/sjcTy+pQv5CTI2uqGmJ3ce+FiaTwttiyf3A
|
||||
qcbKSirKD2GI5NAV/Ub2yjvLOG/Olo8857YbfjaUOCy4fV8D2aINdahhOFCK7FfF
|
||||
wGMSazBkDWXevXJwjs/L5zlQrMxTmuKlb13gBq9IhZWQF20CXr6Yol2lxzBLfAta
|
||||
h8aXFvA3AgMBAAECggEAa073DcqQvhq3DSIw4wm/+DfW5nwXzF1QB6XAR0yI453j
|
||||
IuhEnzcGPeKuLBmZFxDWoptRG8fpCZFs4kPSTomxFGizewlp6O5ykfPAKR2VzMwF
|
||||
geCiWPL0f+dWlD1Byu4moXsASDE6tL/UuAAvnl+7R2HvL6SfsdGiTQc4qAvvyukM
|
||||
szks+MePHSlXmL5Eld7HfKgpvxY1SbYOQU0aPXAQAnLaOT931q+tgZMG6nBWN+pu
|
||||
w5bgKCA26BMAAaUAdIIDEa9fjzkpXjElCT4qhJYVKQn9Pb7aSc4jihSpCknqbb9c
|
||||
55nW5PWMZJyCbCOUG/SVTblXV+NmhdtwrgUbHImXIQKBgQDcb/7vp+rq06uNx3b4
|
||||
AjTZdzCVbHM8gp7b1GkGD0SncrzX6RxPSzNn7d4AUKY065bwa89A+TRwV8DSo7G8
|
||||
hxjzdU/FKCg8ce0eqoCtWjIT2r+rV2P9dFhfRT5jdOwHrym8LeSGzANjIBNV7FOf
|
||||
FIRkQ1BVD0QSPla+26ASqsw60wKBgQDMnEzChQWgAsBelALmGaj/wDdWDUXK8xRg
|
||||
s7dG1Sx41SLk39SAjCUYXPyy8IHBitJtPZNDp23tR4/m8Ui1pB2T0EnlzBsuzrZ/
|
||||
0aCbJnQ08FXE8iVajrgce4ZCdT8vkeH8EVhqDpJIlAhoKy3HaoAr4o2/uRoGDpHZ
|
||||
iAbDLTEOjQKBgFrp4dXLhkqFNArMShetKUjLLIFj8f7xzDzT1ODH6UO6QYI2xRM6
|
||||
65+gbd/pYzMOOvk7LYYZgXQX7RGyq3oaqcK3Dkg88KNFRUtRfLKCMYcYv9YVu8pr
|
||||
cosQTtPMBBCDQI44yziA6aC3OOJGDpLcbmG/lWEPY762cSZUBCfOw147AoGAd8S+
|
||||
AdcPtdwmcrY9BCfdDuea/JoEUon7UaehDqtVvt0z8bk7kIt4Y0x69ttleL8j8aHr
|
||||
g9yLsisDhvGR2BFa5t0zhHn3J20E0skINAlMWHieHAyJ5PpJtxJvQpOTCutf1sbo
|
||||
dBxXcHiGe0NbJrGmmQmiY6mcHBOHOEgxfSoE3zkCgYAc+ozIr3xmUcooUeA7uqpd
|
||||
LvGGqHThGrtXVFIErOIcajC9bHEeZw4Do/oT5L7Wr7pOZ20VUmuRvwytd7IYYTVV
|
||||
g+nIyKaMttEaCzHEsO0CQUHexOkJbL4rpc3HiK5hIhL8Yo2L/obQgCxYmvyChpo3
|
||||
sXJAoFllBNfAK3aanFOR1Q==
|
||||
-----END PRIVATE KEY-----
|
||||
@@ -0,0 +1,20 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDVjCCAj6gAwIBAgIBAjANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxUZXN0
|
||||
IE5DIENBIDIwIBcNMTYwNzA5MTQ0ODExWhgPMjExNjA3MTAxNDQ4MTFaMCUxIzAh
|
||||
BgNVBAoMGkdvb2QgTkMgVGVzdCBDZXJ0aWZpY2F0ZSAyMIIBIjANBgkqhkiG9w0B
|
||||
AQEFAAOCAQ8AMIIBCgKCAQEAw+bG1zr36IgcElBxX1vFcfq1NhdwjzUWlYt88oVr
|
||||
Zbn2cKzOZWTA2ft8slJf5b5AgWWuJ1Ph1EdX9evBvUE3qVUPDpJQ7UNBMvScqL8J
|
||||
pCjWBcRK9WWguV6MTqF8dJnadup7qfN0i6IWquA4yDEcJDQR4j0BjoAEsQgkASYi
|
||||
maYN5W7PW5swj7AR4K0W5Cwy+KF4+UXKkHPCmYUlbBa6lXZRp3uwU/gXT0fmLz3W
|
||||
O8eT1PdoPnbRVFIKPhZrHcNAORti4xr4Cn8IEhTaqxIQnCjSCjhksoOuoojhW0qR
|
||||
s9t1lTDxyBX5Uz6smanEyCQ6TQFOdMj4m8ULNYTSZbGYcwIDAQABo4GcMIGZMB0G
|
||||
A1UdDgQWBBT4YmD7D7JsE8BJzNs/5cIpbtZxhjAfBgNVHSMEGDAWgBS6A5+dBiSk
|
||||
V+Zz+vU6Cfm6hcyp+jAJBgNVHRMEAjAAMEwGA1UdEQRFMEOCEHd3dy5hbnl0aGlu
|
||||
Zy5vcmeCDWFueS5vdGhlci5jb22BDW90aGVyQGJhZC5vcmeBEWFueUBzb21ldGhp
|
||||
bmcuY29tMA0GCSqGSIb3DQEBCwUAA4IBAQBaH8qg41pSXo2ViEsZWVyUmB7QwVVW
|
||||
bWeR191XTQPfPNEDFmUzzeBllMUedF4HyD36v7Flpo/LdPdXQnZQ/eyKalztFHgm
|
||||
uePN5DNdS5xn9aqiKNF5pkO9WDhhYuwLRM50JeiyvKk2NvNx9oDFUQ7G6jEJu/r9
|
||||
rd+8PCUa0SK1dDPJ9dpGrfsAYwk8kST5/JfyDMrocsijOu3v1uGTttMQ0h0A6w6g
|
||||
EW8p77dVS/a2S3wJo9EiFHhnrAN493cwSXgBZUhKoKOri2u6XKV2D3g8N6bp22Ut
|
||||
S5wx0pC8o3wW5upPsDAnEUt9kJJgVkS0FfCEHhHZ8iQyuwX15Yft2Qsj
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,28 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDD5sbXOvfoiBwS
|
||||
UHFfW8Vx+rU2F3CPNRaVi3zyhWtlufZwrM5lZMDZ+3yyUl/lvkCBZa4nU+HUR1f1
|
||||
68G9QTepVQ8OklDtQ0Ey9JyovwmkKNYFxEr1ZaC5XoxOoXx0mdp26nup83SLohaq
|
||||
4DjIMRwkNBHiPQGOgASxCCQBJiKZpg3lbs9bmzCPsBHgrRbkLDL4oXj5RcqQc8KZ
|
||||
hSVsFrqVdlGne7BT+BdPR+YvPdY7x5PU92g+dtFUUgo+Fmsdw0A5G2LjGvgKfwgS
|
||||
FNqrEhCcKNIKOGSyg66iiOFbSpGz23WVMPHIFflTPqyZqcTIJDpNAU50yPibxQs1
|
||||
hNJlsZhzAgMBAAECggEAfuMureALDTmD/TTPijV1+TKrRyL9jDSVsT1NLATRIG3I
|
||||
OwkjErek1kw3Y4VJihSl0Wpb2CtT3dxsE+Slc4EXnX1zqDuLYXKre2bHReGfTA4L
|
||||
Omb/Kl2uMgMUnCWq6BdzUozklpsTRRIy3nEnNjvg/24em0xqgrNW1pfwQjJCPQQX
|
||||
5ZLma+msDjT0BW2V7cnVh76A8qjDVRvJzKGRseVZEh+8Uke+SIKKLi1qICcK6MmX
|
||||
1TpGs/Yy+GaXk7HajmKEYEEDSRdS9sqFnvqkf1TsbHrZQqKdtWuXtIvss1ap7y1c
|
||||
PL5Y1z0/zf5WXV9nV3Yjd7F1tTN6S4sY7exOgNenmQKBgQDtkElQSwPHI3GCddfp
|
||||
Eo79w0K0N+PkkQTXkP/3566xTCg78xGU1HW0aw8jabVsSpHC2uD0dBJbkQ0iBa24
|
||||
VOwwGUUy8ZME14M0ToCDm2vXTR8oOw05DBcM4RwQQdGVxdnwScUJnDzefJEUyx57
|
||||
3HO4QWu+h4nBqp5CTk+Y5gu4ZQKBgQDTGsgtIcdQevWay4nXKp+kcUYJy2zmCnBO
|
||||
RFryyvdSSr3Tf7eeEZTicBiBp20fzppHc8/hdWnaF8+jlRx/hYY0M6hO2DEvXg78
|
||||
BbkqxwGV3dOZXEVusy8CPCQuRfQNY8XhQ195VyFdfsRKZ1dKD7C1Gky7dXgA26Ms
|
||||
KdWarvuD9wKBgQCi/h0fBujnp6zIqtvhoQcUmvTYO4STnOAqmuTUjVQxdyQfxazp
|
||||
ZUAA8ndnf66nRx5tB8nSTxUNWB8fma/QSgvnEF+HDXImn0r5B2drZKaACPz4mFOB
|
||||
MYdbIdQkX1RSI3ZdQ+/5oQWuTN8p2hbnOqD26YPoLIxaoRqGOb6pFCU0dQKBgDUm
|
||||
+CHM8HdGDlLkTpd7ZuirkJvkuU2OcUpzkYayLeVtZjA7ZwsImDkPSkxS0HoCtfup
|
||||
oDy/KGC+QAyK/brp7ql0HDuF2ZR4lUNFWaL4qmCGksF5Zw4BVaO1atKv0EwSw/78
|
||||
zKwrkP4ObfPh4yuFmdNvhMRqRkXJB2OWQO8Kgc9vAoGBALXo6IGSM6TtHoNrnEwi
|
||||
LozF+eV6ZmYb1miBEBVOyCDl0BVx+6n3iNt17v2EmWLcFYS4ZE+AF9EuRfxuDv+V
|
||||
ZSK8sQKka0YgQmLPIoBXksZGwTUYBaO1ojFKuVzrE0ATnbVzuu5wHLZeyK2soCQF
|
||||
slY5WVhO5Oo2YTGB7Wxzs4Ut
|
||||
-----END PRIVATE KEY-----
|
||||
@@ -0,0 +1,21 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDeDCCAmCgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAZMRcwFQYDVQQDDA5UZXN0
|
||||
IE5DIHN1YiBDQTAgFw0xNjA3MDkxNDQ4MTFaGA8yMTE2MDcxMDE0NDgxMVowVDEj
|
||||
MCEGA1UECgwaR29vZCBOQyBUZXN0IENlcnRpZmljYXRlIDMxGDAWBgNVBAMMD3d3
|
||||
dy5vay5nb29kLmNvbTETMBEGA1UEAwwKSm9lIEJsb2dnczCCASIwDQYJKoZIhvcN
|
||||
AQEBBQADggEPADCCAQoCggEBANF68Ty4b18vK4fqVqJMIbwj/mLnF+WA6lvrzEE2
|
||||
79mtKLn6jHAjXWJCJ8U+ib23dRf7K3F3qJcQF3sEZpY3VgbmBMZe6mQ1A4Kfza3k
|
||||
Wm+D2vNy8BTh8esu3P9TsD89679qUaZ2/85RykFmnV8NdJnAgFEQ+NZuBeQck2Ya
|
||||
cZiYyjNCfWEnSsvmO66M99VXzzD9kkpEUXpe2GbLfzE1iP+79sFGGFHYAvmTmhKY
|
||||
DFIEJqKY56bnYBlFtQFTWGqjDe8irV8vFJ+VoXR73DXq/J/k9UvwytwDtsJMeRsj
|
||||
O61UpbBDV+QipZeGC6cXtRzxPDsxz0BAXQeWQl7F4xavc78CAwEAAaOBjTCBijAd
|
||||
BgNVHQ4EFgQU0K7Prr9eRi5yL/vKPFPpfIBCRUwwHwYDVR0jBBgwFoAU8FOJh91W
|
||||
GcAZ5iBVbwv8FBXXo7IwCQYDVR0TBAIwADA9BgNVHREENjA0gg93d3cub2suZ29v
|
||||
ZC5jb22BDWdvb2RAZ29vZC5vcmeBDGFueUBnb29kLmNvbYcEwKgAATANBgkqhkiG
|
||||
9w0BAQsFAAOCAQEAfJyYbBQfCHNwPeKi1/OYZA5CLOzktiiR8Uh/1YQLb80jNtcn
|
||||
f4zZOHURqd4mLDrKNnQ7MVqlj+CC3oN4c/L58yQqLm1fbTKXgH6t6OGgg2IL3Aet
|
||||
XWbHOg0arknwyOKY5jjVkzbZthZ9EaS0QTlN8eULHV3nwImlfc5IFDetzIvPJkz9
|
||||
82fYuUO5jeCB4vjKBX5Ha7rvg/6rnNX71vA3++JrFc0PRFoJvnQ6GQTtBSZE4dFK
|
||||
TOH5jE60bjDUL48jl267HLF5RklGuQRgZ3XfIU8JqDtEQuWJTWHc3NPEl2GOJO86
|
||||
QDfXLy4+TUfWsoAEuoVeOvR5zitzy3Wqcm3Idw==
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,28 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDRevE8uG9fLyuH
|
||||
6laiTCG8I/5i5xflgOpb68xBNu/ZrSi5+oxwI11iQifFPom9t3UX+ytxd6iXEBd7
|
||||
BGaWN1YG5gTGXupkNQOCn82t5Fpvg9rzcvAU4fHrLtz/U7A/Peu/alGmdv/OUcpB
|
||||
Zp1fDXSZwIBREPjWbgXkHJNmGnGYmMozQn1hJ0rL5juujPfVV88w/ZJKRFF6Xthm
|
||||
y38xNYj/u/bBRhhR2AL5k5oSmAxSBCaimOem52AZRbUBU1hqow3vIq1fLxSflaF0
|
||||
e9w16vyf5PVL8MrcA7bCTHkbIzutVKWwQ1fkIqWXhgunF7Uc8Tw7Mc9AQF0HlkJe
|
||||
xeMWr3O/AgMBAAECggEBAJFEuNZq8JEJnR58G+gg86QNMfRUXfYCGIP2WYdAGcTS
|
||||
mFOgtJNvcusZBYt7evndp44h2FavrHJV7nKY8qtpZHcUPGt0lwc23GBRgcj9etmq
|
||||
jsQVCPjyV1nI/ejymF7DCiGMEWNnUq45ehEwoCGyqxGUtWeCZY4Obndqea1s2SoA
|
||||
SIwrP74kSP+cjcOb+KEg5jF5aT0Mzo9ipQuuoxLzjXJhtQuyDYOulq4g/jalMewk
|
||||
GLgRgbzrEDK8/DMVu35rNJ+CHWHowo+1G4lLY4DhajPMXMqb0dgR1JlFF5qyBoTN
|
||||
CJXq4mpuf4ApEd61MTCm0FoqSm/AprSAIISCqapytQECgYEA/ND+C9ZnOOtTxgqI
|
||||
nuq2r1yGFlNnbovcfiU3vrceUvmN+ne1tBtXSTNB4H95AUuoBeVAeYApBKxc0c9K
|
||||
5Pnwp5NdPbana2cfuorzJrIHM09RP/obDP8VTnNJeO7wd+00Cx5ZnV5g8UcicebH
|
||||
hbjfsc/lkd8G8YCIx+DBigzjIO8CgYEA1B4/JjCOuzM7Ag3y+XIIl3Ud4n15uog1
|
||||
5tDD1y3xWzZbL7fh0APf4mT8cTTU0ms4i9Rnpraw8ds9EfhMDXxJBs+LO6Ivw5RY
|
||||
RxWoAB1YTPU+T8EuTzZzIp/jrWTgsvLkjNq25W/lbZLO1n8ofFMgAAbWsN0J40ZN
|
||||
70Sib/JAOjECgYBSiJvXG3h5QYIIzhmJ39Ah8Y+orDPBCBHEcLwBG+Dfb67lDL2Z
|
||||
/a8CK6Se+J51SNCilBP3VlqNtwNaT1UA6YOiAV7YLc/8JR9bk88LW+Uz3/oDa8/2
|
||||
7zNyd/qNa1u/mwV5d8ADuvLk8bcR/ig2xILqlpc4htnKb463ye0E924SqwKBgHKL
|
||||
OtKmmgzg51Z+rdyiBZ20MsUhuOBPubvAtGC4gIMe4TLte1VXIkkg+2kufFZ8a/am
|
||||
ZqqSMQ8JsvrHOFp36P9yh99V/7D/pIQOX8BgGFTGgjWTPiysXJQv/0SdGvHHVD/z
|
||||
w5w2RpBbHLKbzAMG6FrbVof/dN10E5XHXGhTSvehAoGAHA6WgpPFp7iJBoC13NrZ
|
||||
q3DKluiytegvljyDW5hOlRGqdWp7551EGYLnWtc4bSHboIf89Iz4mW/hyYr7frzE
|
||||
A3Ksob4NIUCGMFJGSyTuK7eyhAxlVZbzqepZ+YftfTvW3iVXkxXx6kEgdzwPrNMx
|
||||
DXwfc6G23PX5tUayTZqKC+g=
|
||||
-----END PRIVATE KEY-----
|
||||
@@ -0,0 +1,21 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDajCCAlKgAwIBAgIBAjANBgkqhkiG9w0BAQsFADArMRcwFQYDVQQDDA5zZXJ2
|
||||
ZXIuZXhhbXBsZTEQMA4GA1UEAwwHcHJveHkgMTAgFw0xNjA2MTgxOTU0NDZaGA8y
|
||||
MTE2MDYxOTE5NTQ0NlowKzEXMBUGA1UEAwwOc2VydmVyLmV4YW1wbGUxEDAOBgNV
|
||||
BAMMB3Byb3h5IDMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDfkPXh
|
||||
tGaOG5MRdMZ6mSI+OVj13SjQEMO741bjZmZM7/WwJwNx4/ozwy5w3hbcvEom2qe6
|
||||
WCKThzpB+hufIgsElrLL6YHu/eExxfMqSkuUnlYye8JLriqs54i47bvtLn+h/vZd
|
||||
MnsIrS/WGmGCDfVGC3u21h3tTmcVd/jC8vUueXdgoFVCq4elMidmM0ar5+tNAJRc
|
||||
G9ZSeuuGiVbYCiGaYY+7PkyyYy1UiWyrhBPNvdQ3xcakygpWOXSQ19INYTLcAM6G
|
||||
MSnEBK6F55zZyvuq3Ob60+okaSYWAo+7D0/BrzVfCWlzmWeFyJVR3Ps3nLxteahs
|
||||
+Fl7D7a9DbgPbY2HAgMBAAGjgZYwgZMwHQYDVR0OBBYEFH18o4bnybHle31aYNRi
|
||||
QZSGJ96XMEEGA1UdIwQ6MDiAFNOib4aG0AVcbb7pbh224iVD3Jx8oR2kGzAZMRcw
|
||||
FQYDVQQDDA5zZXJ2ZXIuZXhhbXBsZYIBAjAJBgNVHRMEAjAAMCQGCCsGAQUFBwEO
|
||||
AQH/BBUwEwIBADAOBggrBgEFBQcVAAQCQUIwDQYJKoZIhvcNAQELBQADggEBAGKD
|
||||
jTgyuFlwNRgrw0g4IZMmbEWcgW4r1v2yMRyAXhZuVyc8lkUZoe14eM4kqwJ5ayti
|
||||
peN+ETpRk6AS4eaCEBnn4tE/S8TD4KRovio1EWy5TvjPE6M9jPonF5IfNKgGuR3o
|
||||
7gN0KKJpzf9jj5JEJPV/d5AKw9fMdSZseea7bZ6JV8kKCW+9WCSMFnwR7POPWSQa
|
||||
ZNJy1PN6GlvHykdK4QwZT3jHaQMVY/uIC1BXrN3sC3l79jnL5tTeK8JLvZAqjfy5
|
||||
+5pNH71k8zqVR2z0fC4oiv8TNsDn2g07wCCcQmzg8JHsP5p/hyUg51RqrQJhAbaf
|
||||
eUmD8lyBBdfcia2UqJM=
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,28 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDfkPXhtGaOG5MR
|
||||
dMZ6mSI+OVj13SjQEMO741bjZmZM7/WwJwNx4/ozwy5w3hbcvEom2qe6WCKThzpB
|
||||
+hufIgsElrLL6YHu/eExxfMqSkuUnlYye8JLriqs54i47bvtLn+h/vZdMnsIrS/W
|
||||
GmGCDfVGC3u21h3tTmcVd/jC8vUueXdgoFVCq4elMidmM0ar5+tNAJRcG9ZSeuuG
|
||||
iVbYCiGaYY+7PkyyYy1UiWyrhBPNvdQ3xcakygpWOXSQ19INYTLcAM6GMSnEBK6F
|
||||
55zZyvuq3Ob60+okaSYWAo+7D0/BrzVfCWlzmWeFyJVR3Ps3nLxteahs+Fl7D7a9
|
||||
DbgPbY2HAgMBAAECggEASAMzkG5BkojDSJ4qyJbG9vAV/awtV0fvJHhIJpt3XFT2
|
||||
+LS4YVkj4MSAEw8WoidsYzOPT3DQQmEOnO3pM8sNbX71PMWMeuUAQr4WY4rm6YpP
|
||||
DZfbr/D8AhHacmbxX6bYqd+sj7yQ8OyIOhjpS7EfTl6ojO5PWX8lqT6pvHHyE/Ol
|
||||
1ZH2MG4GaX10IfrF7bw88XozmFfsw6eVX6t3cBK3PNapxj+RNEwcYBAgtXBNVVAJ
|
||||
mSMkgSZ8/kTggRr3ntKvXCiOrm8Iud6Bwqp+aXB8+etT9p6gWDs0J4MCfkWvva+1
|
||||
WuZDgryiVnIdqwalrLMg2IfwJhjtlqZjj0R1Oe2isQKBgQD/JSlg+/ZYAmm/BzzV
|
||||
C3mII94Vw0lvX6qpeKMXvcwVcWRSwJMnMPMxnxebyEZopn0t25CRu0+N+sHNUZKg
|
||||
JVw5wL9nA7815JGTfVV9znN8leSYdhvWh6amrKT+Ku+1vXTBONFAR85eilzYUtff
|
||||
jKGVDhBuZ7a5YIT6+DOLoPbMdQKBgQDgULasEUxNTeVSq6qzM/1tvSR4Z9W2JIFr
|
||||
nDxC/RyPq5LN+3Pg5JiA3FFION6C2Rb+rb2RBlpSxuO4Jv+gPWnqZfuXZiTusiDd
|
||||
dnyFsAoGPnb2SIm3OAO2N3w/7ttmRCsWnm0mkFLkd4XJG/mtDcHrit1SZTEWima2
|
||||
wKf2RJEiiwKBgQCH5+aTp4K/vIFRZOyNWvBgiSJ6GyzZq26/mOfe9JVp8p2KytNX
|
||||
c+aGzwSHUXXXtp9FNwhZ6BlnOmPTFxlwPpZSmQ4bNE68yUSV+JP6UGcJvNooL/mC
|
||||
G320mI/GZ16KQyGW7snfYKBXkYIFJJOim0lSmUw9Uvds5THQcTcbsCDmJQKBgQDE
|
||||
F2sJUnncXkspkO5BiCJ0a1NVepgFiTYmJ0c63F+6bKeCL94l7FAw3eikdSp3QmXq
|
||||
r2E3RVFyaXGqi1UN9IIBqbNdr6p7i/ZVA35ps/Gfcb23IMRbCbmc8jZJAXqElPUB
|
||||
6e7LNoFwPdgTbcQ+9vbd/N/rZpCZ/tU5z4NFMr2ZbwKBgQCPN9KsqsRRK2v+j0wt
|
||||
ArKrWHK5w1Cj5rRbedOn8659edTB5tqrFtZh4YJB842oe4s2XYXtk+Kq9HBRh4Em
|
||||
CkO/JSH7lgVXT1zsf0ZYojaZWLhVTNHa3PO6R0FtyC0h7MtHV9aquPNCeiQDkwbT
|
||||
RBV8wc0Stpj+QEShPIS9gEQVNA==
|
||||
-----END PRIVATE KEY-----
|
||||
@@ -0,0 +1,21 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDfDCCAmSgAwIBAgIBAjANBgkqhkiG9w0BAQsFADArMRcwFQYDVQQDDA5zZXJ2
|
||||
ZXIuZXhhbXBsZTEQMA4GA1UEAwwHcHJveHkgMTAgFw0xNjA2MTgxOTU0NTBaGA8y
|
||||
MTE2MDYxOTE5NTQ1MFowPTEXMBUGA1UEAwwOc2VydmVyLmV4YW1wbGUxEDAOBgNV
|
||||
BAMMB3Byb3h5IDExEDAOBgNVBAMMB3Byb3h5IDQwggEiMA0GCSqGSIb3DQEBAQUA
|
||||
A4IBDwAwggEKAoIBAQC2xxl2G3u38wzrx5uWgKiZ557ZIbLQECZgwmMbGzdrNqbD
|
||||
veVgTEdkIxRk0py1QUqqukhTk9OpkUrYiSUpkAMkc3yRtpCp2KZeuN6OwyeAm8Jf
|
||||
KUHeEvvM+GNZw/AoahgRJ5Cd9OykI4Uv3y0BzwZGXCrKDWr0Bpwcg6aQ/0+dFtd0
|
||||
ElBKq2v2hHpKn4P7ZM0mpvPSEwJ5nPUDY6iuRZNVrihmuZ4UZtKsz7EFbXfqaiLz
|
||||
zfns+Kmh4j5OK3Iunm7gQLpv9RrXxsad2s7gKzgRhuEi6sECg/+4qOKwhUUxVWRX
|
||||
iJYTxJfKfyIb8fjtrQrEWxNb1n/1Ea9nWuOk1N3XAgMBAAGjgZYwgZMwHQYDVR0O
|
||||
BBYEFLFSiWVtSRQ48ziWfxHBtmC/PwPiMEEGA1UdIwQ6MDiAFNOib4aG0AVcbb7p
|
||||
bh224iVD3Jx8oR2kGzAZMRcwFQYDVQQDDA5zZXJ2ZXIuZXhhbXBsZYIBAjAJBgNV
|
||||
HRMEAjAAMCQGCCsGAQUFBwEOAQH/BBUwEwIBATAOBggrBgEFBQcVAAQCQUIwDQYJ
|
||||
KoZIhvcNAQELBQADggEBAEg+p78n5eTkl7D6OPecC47nqFp7pNQtWTksTxMgBtz4
|
||||
LeZR0nBX1kZdA0arVd7RAeqjR5wCwGIbdc3hFu/xeoPeTUBFv/7tiTWsCFBmfoSK
|
||||
Tu/NeYrfIc3Qd6KhW9iwUxN7GFAZZFhJ3xVpaDhjpMDlgp9UZ24vN+eY0KRhuHQv
|
||||
hGJcyWs5M0dYGVyTSS5VueJSWlXD98KT49LzdyAfaveQoIMFaSH3rmR4BXvUMjEw
|
||||
ByFwvFeG0lrtvcx3RhvlJQYixUPME6TcNOAWJARJ0qiO1PCufFDlOSjq8GjtxGbc
|
||||
JjMc3GfdaieMM8afXWQPflfLw/Jb1rPOKpikva05ZMI=
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,28 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC2xxl2G3u38wzr
|
||||
x5uWgKiZ557ZIbLQECZgwmMbGzdrNqbDveVgTEdkIxRk0py1QUqqukhTk9OpkUrY
|
||||
iSUpkAMkc3yRtpCp2KZeuN6OwyeAm8JfKUHeEvvM+GNZw/AoahgRJ5Cd9OykI4Uv
|
||||
3y0BzwZGXCrKDWr0Bpwcg6aQ/0+dFtd0ElBKq2v2hHpKn4P7ZM0mpvPSEwJ5nPUD
|
||||
Y6iuRZNVrihmuZ4UZtKsz7EFbXfqaiLzzfns+Kmh4j5OK3Iunm7gQLpv9RrXxsad
|
||||
2s7gKzgRhuEi6sECg/+4qOKwhUUxVWRXiJYTxJfKfyIb8fjtrQrEWxNb1n/1Ea9n
|
||||
WuOk1N3XAgMBAAECggEAQbq33VFk3HH7Y48U1LrP5wj0hwEnXMtyAbnmCglvlI7C
|
||||
ygGwS0EjK0+yNc/HqycfwuXavLOcmo41bEllo9y2RJWDZqNQwsO2kLnKz2w++HEL
|
||||
JU2g8kvBYaSxlcZwxxfgL8saprM9polfjCel99CLYSIkASVyIO9/lIGDlQE7kDHb
|
||||
B+YdDzucQtyi3LXsdcfW8so2DsZla2Qa9305ZAZPEOFXFjsvKR41WdI5r1uwsrYU
|
||||
voMcH9k3aefOd62+e1KodO5w9TxSYTw2bLrGhjB1UzEzRGIgOY7L+VSmYzTn+ARY
|
||||
loXqK4sA9yvr7z+ZXHeA1y0XuMRzkG7qf5Z0pc29AQKBgQDd4piLIt0Rygzud4WQ
|
||||
5UBwwLd1u1A3jdU5EACvG4GBlJiQQPU0hHcTGoFbnTNy+y7QSBl/3viRH5WPx8Cx
|
||||
O1nJ2Qc7mlAmoKq3Gs4gso6utPP2x9Rs/bIPkL/LhAdi9BBnp6H/5dyrvtv8O1OQ
|
||||
S1rXpYTjmYj9X7BSU1PsDUiyWQKBgQDS4TwxXycJYClGufq9mrNuAoMfReXaiwv3
|
||||
b7wfRfOn1cL0hjLjLAhxn8eau+/7ZKS8ScXqHszrz0yXPfxTtWJ/DvhuobWOOWJd
|
||||
RmHN+OAxCLvcZD1hy6bzXqYuuX2WrARUKWZRg7RXxlOwnkcR8/7OrmnsnEiCh8wg
|
||||
9h/GGd4rrwKBgQCXV4BOnrgE8zjAyrtKqmO6xGgeIGZFjjNaWYTt6yf5V358HiJh
|
||||
8Nw7JoAHGgFGsvcqT5M8+bu3WMCtskTHXkEPAT4CtG1o+3uVqu3ftYrGtVwV/hTx
|
||||
RlVWcpevW92h6/DokplXrtRGPMdVkq2bpRpQLnCmwUmD8OmWLYn3XtQv+QKBgCA6
|
||||
jBh/kle8epJ0mf2gRwvpFmERLa/Y0FtgmD+vUS21XbZBTEWr1R6IbNkZH/QrzYF5
|
||||
ROYjDu57IBl9P7MLZaJFh3JhBH5YBtB6kTgJcToNO6jTKQ5pMXrAXGWHs8nzQDYc
|
||||
naaXmlhP1zqG9hWoVKkBvu6KdAp+9pOTCggcq/fBAoGBALHpj0QFvEzROBpLiNtW
|
||||
zrU7jcl4TwAbTh26cjb3Nj/2J+JH3lmLilxT6ltKUvtXFMmAT20at46RMGqY8z7R
|
||||
Z1OgtiraQtSG7BeSMRLJ2aCM8+JotvYMjRauiC00jXZCsusyJ1mLqgWlHu+YORVE
|
||||
9fO6/M0yLLz4mk5z2gdrP9MA
|
||||
-----END PRIVATE KEY-----
|
||||
@@ -0,0 +1,21 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDejCCAmKgAwIBAgIBAjANBgkqhkiG9w0BAQsFADArMRcwFQYDVQQDDA5zZXJ2
|
||||
ZXIuZXhhbXBsZTEQMA4GA1UEAwwHcHJveHkgMTAgFw0xNjA2MjAxODAwMjRaGA8y
|
||||
MTE2MDYyMTE4MDAyNFowOzEXMBUGA1UEAwwOc2VydmVyLmV4YW1wbGUxIDAOBgNV
|
||||
BAMMB3Byb3h5IDEwDgYDVQQDDAdwcm94eSA2MIIBIjANBgkqhkiG9w0BAQEFAAOC
|
||||
AQ8AMIIBCgKCAQEA5hE+Hzx8w4tAPaYsbdY9ZJSzpzpa8ZBsZxhiJr9ayIU4C71m
|
||||
uV7EMZtUGyAbl1pXzBcvNQq/lUnXL4hpl612h9Pg7H+oaNM1ZVDnRFyIWvaq/oVu
|
||||
msi//4z5QetkM2zRa9T3BtSWNJF+9BnDsdDxi2qLW5xY9xN3tFr234ueri9HNK4O
|
||||
V0vJX67wgmVgGmIX6EQlgX5RF+PdU4SYjqxZZe2v0+ND334svlDAdQfKYf4pYqMB
|
||||
Vs5hi4PYiuU2QDhLOms0m4Fs54mRjRQ/m/I4L/j2R4051xLO1ya5UrZWepkvd4Uk
|
||||
rW7lC5JyFvG3Mp/QChrGZF0cb9iHi81iUNULAwIDAQABo4GWMIGTMB0GA1UdDgQW
|
||||
BBQwWHApUcXg5oqkZdg2JpLWKfsUVjBBBgNVHSMEOjA4gBTTom+GhtAFXG2+6W4d
|
||||
tuIlQ9ycfKEdpBswGTEXMBUGA1UEAwwOc2VydmVyLmV4YW1wbGWCAQIwCQYDVR0T
|
||||
BAIwADAkBggrBgEFBQcBDgEB/wQVMBMCAQAwDgYIKwYBBQUHFQAEAkFCMA0GCSqG
|
||||
SIb3DQEBCwUAA4IBAQBe/pghhwiZk++TtmV/eTLbQ/tMOxlb1Q5MhX+nF42eI52G
|
||||
Hwsg3dBHgy2RSgTE6fzMUt8cyEplG4nqCpR7qm2ZGcHmn/IEO7exZmWTvurun4tF
|
||||
56L2W0oe5hLLJV9W4akVTH6LpRZOR/CgMcew6tvzmuAADcP0KidFSxkd/Y7plhSy
|
||||
hptq50Qey2yyA1UVTCQ8k7OSvL2lyD6F3EasejmK0FuHekgewB54cTMCBBw/7aZc
|
||||
08rvhIi9X/yQKFD1o5kvbTi5//zcCx0RbMVZRFcrFUD+PNwt7QLpFrMs4u08aok4
|
||||
/QzS0G+801JZa1zoUMnnNPNGlfybvANVbovUCc2h
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,28 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDmET4fPHzDi0A9
|
||||
pixt1j1klLOnOlrxkGxnGGImv1rIhTgLvWa5XsQxm1QbIBuXWlfMFy81Cr+VSdcv
|
||||
iGmXrXaH0+Dsf6ho0zVlUOdEXIha9qr+hW6ayL//jPlB62QzbNFr1PcG1JY0kX70
|
||||
GcOx0PGLaotbnFj3E3e0Wvbfi56uL0c0rg5XS8lfrvCCZWAaYhfoRCWBflEX491T
|
||||
hJiOrFll7a/T40Pffiy+UMB1B8ph/iliowFWzmGLg9iK5TZAOEs6azSbgWzniZGN
|
||||
FD+b8jgv+PZHjTnXEs7XJrlStlZ6mS93hSStbuULknIW8bcyn9AKGsZkXRxv2IeL
|
||||
zWJQ1QsDAgMBAAECggEAV8MsF25TiaSNFPdW629WbA/tmFVCa/PT5l/+0Rkd4HAx
|
||||
OQk/LmdgICxIoTBWVh44b7pIX8uB2ckZNSCsZxfcp2PD4XOxIouvSr7Z+dHykgCW
|
||||
qhDsaE88LpfwXZ0V1CgmmyPaN9jQk60M6MELTcGO4sf58TBrH5VljH9GvW/dUEQv
|
||||
f85PsN8VMWdZYx5AU97oLxNlZgRgZa72rtRfW3xi+Nnf/TbyqQ7pJAHdGju7kR7C
|
||||
Mv7Kp+us/FzPXJxHdumh8BSAbqn2Fr1hgUyH7v/7n7oSLpBATLOQ49K0X4OnEN3m
|
||||
+GYzj9rpnza9QAX3too3EP0tDYZaJUUZiQqdtFIzgQKBgQD6KISBQq7LjRGNOr+R
|
||||
ayA27HlrZ0O0STyOkxOCx8GqdHQjLS/REGnLAJy6ggm3Col4ACXkD8zNLenFCCsA
|
||||
CVq6iEQcGiT5bZyJa7cwLEGdoj8Aqd6OM30TgJ1u9ZJSWukys0BhhQ7huBmxdpm3
|
||||
ykIGQ5DxhnecXJdYylzdunktmwKBgQDrcJ5fyYFSheQjW2TkNTRSDccToGVPIECd
|
||||
/a/FvhzqhwLWt1d0Hpub9M37AwpN3V8IM7PHcDqgpzrD3q+vLW726h68ETAqZX4H
|
||||
FDHLPiENkoBZoj6yjS5fmAkVa7jhGQBFSIQ1s6eYkAHCRwSbF2jfNK1no8fERwkp
|
||||
XjEf6yWiuQKBgFPfQ9Xm2p4qlQjp+pKx/SINFQSaocuPhnsy+qatfNQ+qTWmD9Mj
|
||||
kqTadrHdqY4yPTb7rbiSR5M/YpKKE4i2mjHSQCu/5EewpXw5njjLjdBhNohta833
|
||||
m2bvh1lNgpqUGn3CNcK8junFBPBIGG/To2FgQ/eGoxHMxX2ik5JP1BMjAoGBAJ+K
|
||||
ryeFqua66D+1XQbvrsazo2V/WWdnGaJ2GDhNfdbHKntJvi9n1la2ayZfhwoAqrcq
|
||||
IfdR68iVydKVAkQY64rSV4VluFficqZlXuC09zz1O5iBwy7HUNdidTVYy+1tPau1
|
||||
WjHxze4qF6cI7OwTzvMCBUenymUNJf4sX+mbNOOxAoGAHYK/AbJtXFKcYx8uj0MA
|
||||
YnkWWjTKMJ2TQIu94CaSf1oR4M6fuskgPfuRjW/CyBFQ3zh9+F4l7lG2Ywv16rBb
|
||||
/1B7W5euucM8JYxSGAicqKX7iYV6Ikz0l21Slw6fy+e1U4gIDfZPgx56iV7yVoGc
|
||||
IywUjiA/G1N3M5WBVqBl3K8=
|
||||
-----END PRIVATE KEY-----
|
||||
@@ -0,0 +1,27 @@
|
||||
-----BEGIN RSA PRIVATE KEY-----
|
||||
MIIEogIBAAKCAQEAwTqNko5vQiQ5BQohPJ3sySrjT6JedjsKtt1OZ8ndR2C1asUi
|
||||
HgpVO8QDHKID88Qklx6UCieeKAwIY0VzqWzTyZWTwdqTU9t8arHHJu7IcFlmWsAL
|
||||
fwTmARWJmpY+K8fGnQx1Kxfi6nQJ8Whq4bcAqJ2HXzG69Wjs3Ki70ScNbQ9RUwXJ
|
||||
n/FeNrsphKAv5K22zBqjWAQdYMg6vtKZAXCET8jw6OkPVnUb/QvyoBEijWt0+HBh
|
||||
7wLkSUvMj/7fc88+xtvGqZPyG2Py4DdWW1stpgiZ3TTohEk84t1u5L3qQaRQmVE6
|
||||
y5RMImyVY8hegC4zc6aGZDFRv8MR+gk6prcuUwIDAQABAoIBAEkz4YZwJ34rMt7R
|
||||
452PRrE/ajY1EQxBeeGlHZr8QrRT0ubMIAy5ZWjq7TLfvhePaz1E/FiMgcIyLMtO
|
||||
+G5rKCDqZbu/DqlqMUxKZWQ+efj2JWyj7LcGKAypGCRUXuE/IeNFYO4ecnzX0Rx/
|
||||
rl4scjdu1mYd9PIb+f/ufJjT7qYtykmwlb0MbEJ25yjTC4iHzacvFLJgdXrPp8b9
|
||||
ZGlVBKyuk9ZrZDC8/a4QrKt7Hp2SqqO4WqaTgM1G+cQFYuVBmj74bQhJHMmQ+Opr
|
||||
5KXwBKEHMtJkq1GPVZ34W90V82d+8MJAxymuPomwRXKl1dKgnvny+0eobXkiBDcF
|
||||
XCBCmIECgYEA8c/fE7Sa1vLZriw0Meq+TxU5hru4YM6OmQ+idc6diCp2U9lW+KJr
|
||||
YrIRTZFcmhEGmRjAEZrdK0oFY7h5RhsZ+gTftmNZuL8WJCK9+y2DE9dB++md3oVC
|
||||
PK0d4SmQKsivOTTeiK/VYFGoLc8t8Ud/anu2Q1kFdC+7cH/TrRseV4MCgYEAzJDw
|
||||
MTil055rYlrAAH8ePEuONomu2MoZRRCX/tWuVvz+eIzA35mryW3OR45l5qNluQoZ
|
||||
AdpVE68kBak2wIrF2oyWcF1s8VzSbAJCoqK42lKiSGVDVnr6jb69WUujCkYUZIwR
|
||||
Q20QYBUUQu0JiFBU22tRgILIAK+rRah37EP4RPECgYBN3hKH1fDGpw1R+QoVyPHf
|
||||
pYYQzQJiqiFhSJeYOCCiaIoSFjrbdfH+pjjMMbMQKctmIYI4KRZvijaSFiV3XeLP
|
||||
kCI6KWQLCf2nRUjISa+cBAVLib88mMzrnROyHiA+psFGOrAuc/DSQ3lUxxKUT+HH
|
||||
+G6I4XHQKE7Du2X+qGzs4QKBgBZyJNjRxWhF7rR5Dq4/RHsLM0yKqPPCoSkx2+ur
|
||||
WJjU47sofpVKUE4mzUaOumGnNicqk3nfkgw54HL6kTZpQ7JqUKt9pNGLBM+zI8qi
|
||||
njPec04MRmo7zjg1YKNmqDodXGl38QD7+5r/VRzO04fwgI8e5G98aiOhIuLezGHR
|
||||
R3GRAoGAAyhwtKoC87fSGrpyZQ16UAYuqNy0fVAQtrDgRgP5Nu4esr9QxS/hWjcR
|
||||
8s2P82wsR4gZna6l6vSz4awGVG4PGKnVjteAtZxok3nBHxPmRke5o7IpdObPjpQP
|
||||
RJNZYbJ9G/PbYDhciEoTjVyig6Ol5BRe9stSbO7+JIxEYr7VSpA=
|
||||
-----END RSA PRIVATE KEY-----
|
||||
@@ -0,0 +1,21 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDdzCCAl+gAwIBAgIJAJgwOOciuxjSMA0GCSqGSIb3DQEBCwUAMFQxCzAJBgNV
|
||||
BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX
|
||||
aWRnaXRzIFB0eSBMdGQxDTALBgNVBAMTBGxlYWYwHhcNMTUwNzAyMTMyMDQ2WhcN
|
||||
MzUwNzAyMTMyMDQ2WjBTMQswCQYDVQQGEwJBVTETMBEGA1UECBMKU29tZS1TdGF0
|
||||
ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMQwwCgYDVQQDEwNi
|
||||
YWQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDBOo2Sjm9CJDkFCiE8
|
||||
nezJKuNPol52Owq23U5nyd1HYLVqxSIeClU7xAMcogPzxCSXHpQKJ54oDAhjRXOp
|
||||
bNPJlZPB2pNT23xqsccm7shwWWZawAt/BOYBFYmalj4rx8adDHUrF+LqdAnxaGrh
|
||||
twConYdfMbr1aOzcqLvRJw1tD1FTBcmf8V42uymEoC/krbbMGqNYBB1gyDq+0pkB
|
||||
cIRPyPDo6Q9WdRv9C/KgESKNa3T4cGHvAuRJS8yP/t9zzz7G28apk/IbY/LgN1Zb
|
||||
Wy2mCJndNOiESTzi3W7kvepBpFCZUTrLlEwibJVjyF6ALjNzpoZkMVG/wxH6CTqm
|
||||
ty5TAgMBAAGjTTBLMAkGA1UdEwQCMAAwHQYDVR0OBBYEFJoH29IULbskIG8BwYp4
|
||||
9yD+q7wbMB8GA1UdIwQYMBaAFBwdxP7xJUYhGU31hO4z2uXPtRl/MA0GCSqGSIb3
|
||||
DQEBCwUAA4IBAQBl0tHkWMBHW6r3ywBlWWFdok04xlt2QD8eA4ywwz97t/8JgLht
|
||||
OpuHO1bQtrZR6bxAgYT1+yHQnYBTfjKxFq+S9EP6nxBe94mEgizLmMv9pf7x5q+H
|
||||
pfT8ejcY54E/oXlFXSbLDE1BDpfgkWll2/TIsTRJNoM2n8mytEdPqzRburwWnoFR
|
||||
VchcfO968asdc9/8glSLJSNO+Wh9vQlbtcPzfbd4ZVE5E/P6drQzSwNjWvHQdswJ
|
||||
ujkY1zkTP2rtVBGN4OyOfkE6enVKpt5lN6AqjEMhJ5i/yFM/jDndTrgd/JkAvyUJ
|
||||
O2ELtifCd8DeSYNA9Qm8/MEUYq1xXQrGJHCE
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,20 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDTDCCAjSgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxUZXN0
|
||||
IE5DIENBIDEwIBcNMTYwNzA5MTQ0ODExWhgPMjExNjA3MTAxNDQ4MTFaMCQxIjAg
|
||||
BgNVBAoMGUJhZCBOQyBUZXN0IENlcnRpZmljYXRlIDMwggEiMA0GCSqGSIb3DQEB
|
||||
AQUAA4IBDwAwggEKAoIBAQCiqb6LYFYj1uPeIVuzuDL1bfV8+xlrws67I+9yVDiH
|
||||
slYdA7ygv41gYKEmKSbL2SvAOnfjgDEb8RYfLhF3LQUvXyON0LkjkZseXVFLNokD
|
||||
BXoNVeP1QjWfznPxHpgGN/xF7OQpkX3FVByCIVUOpiXBbq5FtsuLhquHK0yAsY1g
|
||||
JYP8QFHUbCnE5vrpK8lOv4MZEc9rS6ZrSKn69+s3nGx9QheboiDVTWqynxDQn2W5
|
||||
ZyTyKQX0IRnKg2zLJ6Dg2ec8OUh5nvzzUdnsAJ/pN2Yc3ri53OPodTkmrRha31N4
|
||||
8TA7st35XepAk4vZnSq7cml+85xs8Az/OZDSHH1EV5sDAgMBAAGjgZMwgZAwHQYD
|
||||
VR0OBBYEFOI3TVHkhEPOWw3mh25Ri85AMqJmMB8GA1UdIwQYMBaAFAjRm/nm1WRw
|
||||
oPFrGp7tUtrd9VBDMAkGA1UdEwQCMAAwQwYDVR0RBDwwOoIMd3d3Lmdvb2Qub3Jn
|
||||
ggxhbnkuZ29vZC5jb22BDm90aGVyQGdvb2Qub3JngQxhbnlAZ29vZC5jb20wDQYJ
|
||||
KoZIhvcNAQELBQADggEBAGpxmDDbqtgDry35nKv2pTDMHW9Yqv80ZQmy61kQiatN
|
||||
vJzxdb+admW+CNXHHqsAeRr6ai2aQkn2bJrMkGuosNrkVOg43Qw7k45nIK4jUgUc
|
||||
dcH7vVp+8isjSYXo2fIxulhE8N8fhhMVAQrhQywkdJW98fDlq+lHqUAEHJ7vNtlb
|
||||
4LssY78+hq1ftjYiItAybc8peU3iDjUl+TTk0ZLTX6E9XE0xRYV9berAyTIUDSIE
|
||||
GpzEtsBqZlTdkvZOfsTs4s4tpkOoZQ1aHniCk8fQ+/nI3CS9EHuWqt/s573rCRl4
|
||||
HfiXnUmwyOm6IKzBLsbgxlByfI7fAS1Nm/hLhgtglfk=
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,28 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQC8n4gY4wOae4Sg
|
||||
pyqOZf4bg5JDa/NvzZV/g6PawamFQJIAjf41ylZ5Cjdi9+2H9CuFZ4e3im9L6Hu4
|
||||
2ihsTeLmxtIabr2w0bFxTW5ZQ/NogfyNGgdcSqUrQLF8nSqE2NJ88sNVyrMQPLMk
|
||||
LllqvVFhXEBntFfZSXKIz2sA6LIeC/t8UReznRfAKF5lJoBjjDXJLOYmgz44rxqq
|
||||
L7m84ABJYD119LXRc8N5XfEvC7ff61ZrBOrmxtwZY8FJWODsS/CC+RBN8nnt8rh8
|
||||
ICyfh/2gA4x6Mwt6dVMax2dw4u/esgbokjQ16wvFGjWKzufdSPa3Tk7hrhvRC38h
|
||||
8jAqpxtZAgMBAAECggEADW9fhkZFL2+01qyRf2sMWnFYray2vjPqfhamSSKaLH+Y
|
||||
5qk2fiZXWm+72jTGmnRt1Sa2qAAYRVPd3CDN2EkD7GQk+vUAVePZu7REM99/KuZ3
|
||||
UqWT+KLoeNg2zCV1rdizxWqVNzsk3fc021Lh05SAg2rKu5hA2Z09pzj+6iWo6jLY
|
||||
0pFml3LgNjYy7VQ1V8978vtaVhVYklOiAT4dfNirt42F1NBGgaRCLhOlROOJYPz1
|
||||
LCjSlKzF2T6e/4hNvxQXGt2yJ1fq9dIj9h2XaGBbyPhiy7gUvMNC46LB66kOkPwL
|
||||
4rX7OGAEgr/vHpZvPiCVALK7dm92Z87+yem92UrDwQKBgQDzj+HvgfxDsezpZUHh
|
||||
rFEobTx98XOtCDDn9uS1dODGB+DaRROzybqfcf1D3ayWoS0ucajoOsv+/brq5FsA
|
||||
f7aNMbSTZNIIqjOyioWAz/4Jqupcr3RFczaVG+mX+OPHq1WnvCWfD/yNI8MSy+FO
|
||||
b7LdO7idN12M9HNurZGmO0Jv9QKBgQDGQW0efsO55DN/Ve6QdLeqSjVvXhmDKv9i
|
||||
6bBu8zQQWD5hFqirDl8144VY1SqTua3N+QfX0DX0QAxqkVeG9O2sNERumElWaBm+
|
||||
MnOKW/IklXIK7shmjtAzarRD0cX/8di0Wwv0qZfL6iU8tkmh89kNyUE6tHbmpeUj
|
||||
fVeO0G3TVQKBgCWAkw5Y2mnl/I+XasR/zuNFppnR0rji2PzulBqoi2+SiPmyxyzY
|
||||
s+aXG6MWf9uVp6pOD+7qFr0FfoFqdeSmxYoKDD7huEFjS6CDGblSzU/ZxEpPLbz/
|
||||
13iwGpCu3wvAgujX3IcYZA+rYP8E64UzR7wu1OdIPhxVC20QRqvs1fb9AoGAPCgy
|
||||
IiS44zkZXzQF9ZNU/7kQycA14ZU0dSEPxjrJu4PrOa6Uc4Mi5Mkq9y+Hgde/o1ZD
|
||||
SPsGxByDJ/r+IhdD3xLlCOHwruVbmljYsk0ABpXKSwL1kBkZl+By3nlSqT0LUn6l
|
||||
/BFR3DAqKGfvo9LIM+SzhEqqIYaJJuGrpcwc5xkCgYBu0Q1goQd3me/U1KCIRYN1
|
||||
u0f8H1uav2zGp9818PvLny6tMa83Kfam/zT8zGIOBEty530jPFWDnky+CLAm6qYL
|
||||
ANLPHiCErO+3n15C80porioSFnUL7QY/5uRfTwDjcgCjGQgDiL1RhwZJurmFgwM3
|
||||
RBPODQ6vGkTdrJOJr2AWCA==
|
||||
-----END PRIVATE KEY-----
|
||||
@@ -0,0 +1,21 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDiTCCAnGgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAZMRcwFQYDVQQDDA5UZXN0
|
||||
IE5DIHN1YiBDQTAgFw0xNjA3MDkxNDQ4MTJaGA8yMTE2MDcxMDE0NDgxMlowVDEj
|
||||
MCEGA1UECgwaQmFkIE5DIFRlc3QgQ2VydGlmaWNhdGUgMTAxGDAWBgNVBAMMD3d3
|
||||
dy5vay5nb29kLmNvbTETMBEGA1UEAwwKSm9lIEJsb2dnczCCASIwDQYJKoZIhvcN
|
||||
AQEBBQADggEPADCCAQoCggEBAM273Y+gNkheA8Ifd/zsmibA0KmeuEKGZsLvv4Vl
|
||||
HXABoOtYli7wkfyZPexHgUUdNe6Tu9de7nYDCx/iWoSdrcKl+/5BBiFcLY72Buqk
|
||||
DF2vmC+un8z4ykHa+dqJ2KaL7j8uLsiSPCOk9+tM+bvCYv4o1wPBsoDmPg50yvXp
|
||||
RVR7487cN29h4BnZC1BMXuwUzEexpYCy7i2GQTI4DrQ+oN1OsIUbHS9qQxrfx+vG
|
||||
TYpeZOkR2Mb6OtPEHCGpCsxNCDzhPAmlH6jaxT2kCkhuAWkqkhHLTuga3kmXuH2r
|
||||
OBOpq9TRhC2kPipcuOcIdnhexovcODVJ0X0prkS3P10K3fcCAwEAAaOBnjCBmzAd
|
||||
BgNVHQ4EFgQUmGUQRhEili5u8F+d8jSgSLailgUwHwYDVR0jBBgwFoAU8FOJh91W
|
||||
GcAZ5iBVbwv8FBXXo7IwCQYDVR0TBAIwADBOBgNVHREERzBFgg93d3cub2suZ29v
|
||||
ZC5jb22CD2JhZC5vay5nb29kLmNvbYENZ29vZEBnb29kLm9yZ4EMYW55QGdvb2Qu
|
||||
Y29thwTAqAABMA0GCSqGSIb3DQEBCwUAA4IBAQBZ4RTnIR7Tgv4rq1Qx7pbx3Hlw
|
||||
Y68L0Nt/8GaFZK0pOrKHuY6HUcUOSabtchcm/CYF1ZowKT5KGWmR8X1WzgHe9Aay
|
||||
4njzcnTu66hc1osZdH2lF1+lkNA+HLvzNNcBu0XwqzCs2f/yp4uznuHZKvX45y4L
|
||||
x5TUh570LVUnnoosdTmzicZdXcw0nzikbueNAFSrZFLPt+lH/t1P7d+gNj6hAOYi
|
||||
6Ac+JEjSAPXZOzbNrf56SC77cvkkFrYONjXgrJfNpZHMCNj1M3bqileTYIV5Leyh
|
||||
PgoXCRyteMyNjwTih90SZPq4dLPx3Mf/WNG2/hXIkC1AvFXpp/u0iuwlw7AO
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,28 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDNu92PoDZIXgPC
|
||||
H3f87JomwNCpnrhChmbC77+FZR1wAaDrWJYu8JH8mT3sR4FFHTXuk7vXXu52Awsf
|
||||
4lqEna3Cpfv+QQYhXC2O9gbqpAxdr5gvrp/M+MpB2vnaidimi+4/Li7IkjwjpPfr
|
||||
TPm7wmL+KNcDwbKA5j4OdMr16UVUe+PO3DdvYeAZ2QtQTF7sFMxHsaWAsu4thkEy
|
||||
OA60PqDdTrCFGx0vakMa38frxk2KXmTpEdjG+jrTxBwhqQrMTQg84TwJpR+o2sU9
|
||||
pApIbgFpKpIRy07oGt5Jl7h9qzgTqavU0YQtpD4qXLjnCHZ4XsaL3Dg1SdF9Ka5E
|
||||
tz9dCt33AgMBAAECggEBAJzXPb+C2h8tXRwetXCiR5qHoAvPrpU4tRqjf5SIU3rS
|
||||
IwWIEWZTjFfP039Pu+Mes8Df63HzM0PQaiiyfWNgedlMhOF+XNgN18WHFhrHWY4K
|
||||
kbC4Jacze63c7GGIeRvuzYBpCs1pfmOGHmLJ2hEjzigIpnJ8tkLCREjtDNWQMoSG
|
||||
V5LznbgZ9S/2KjyvTW5ff6m4GQH3BShPPkFDICgQTulwdZT/Y8SDKx5+qX2RAtjY
|
||||
RguaaNSKQnOHroF+FPNPMUsK5gLZLWIdIECTi6YHaba1BThKzeKFKtQ0lWI5ebxg
|
||||
R4kzEPFJmEHbNplxUHSkY4ZIsWK9m09Sn72IrmVY6fECgYEA9e4+w2x/YLtnfwYT
|
||||
tVj+kR5MRTn6t+gOR7o6lsWGvkFqwSi0syfN8D6u3KeoYORUUY7ISCFJgIag5Y5V
|
||||
Hp8T23O4rRcWuoAmolxNyvYiUYsVdflDbAZFKMSvrAv3XlRRf0vJYXym32k8KAhx
|
||||
1qo1zTl7THWM/skv/SF+VMItnO0CgYEA1ihKz8LbtPcbsOaivJX7cXVf1AuRty6F
|
||||
lKX8QIGg0ppq/EFkZDWg7+OCVneO53bFVDDqKoiM4Dq9+aA6Dgx4fjFof8rUaCet
|
||||
H/isEkjcvEmG2a71PU/moamDuZDu8yRodUl4zyjqthQgc2n6ryV/ZIU8vNZmjpIr
|
||||
EhITW8/mbfMCgYEA7UMjpDA5l55VlDPNscihGGpNlQABxYmItWSSf8EjZMwB7UaT
|
||||
RsChKyWeV90cUhYWzvRcf1I18lxwP+eYcUlxw+eaBMvgrp9SJpO8rZHWvCrd0opf
|
||||
pIlMEa/n96k3xva8BX6dU4MKD0IculajVUGzVEIflT1XgLuio6i7k5Qeo2UCgYA3
|
||||
I8SvXbKIE5/Tmm6IM+27tsbnp9rq2VWXgm1Chp3L2+pz7LpWeuBnI6LpdHsc6Z3B
|
||||
IZ8JOINdMIK9hR2thFR52WrYjHbIIn8W3kYfpxb+e8f2wG9wS+RL94NtAf4kKFmk
|
||||
6TfrztMv8lqwnLbo5bS5QvzyehmJ1+SzEGhfmVXxNQKBgQCULij+SMWsFC/gPJHh
|
||||
BCnx12Dx9t5+qE4vrjtNumCCnj9i0nRPludbWapRfHyfe0WlhpnnHo2OTFcl3qna
|
||||
wBln8Km2CWNsX/QeosZBPr5KAakfD+l8LieK350t7yE1LEboYCZkBNCG2gJXIyTs
|
||||
o5DsYNoxX/IWq2EbB6qQ3Cys6w==
|
||||
-----END PRIVATE KEY-----
|
||||
@@ -0,0 +1,20 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDSjCCAjKgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxUZXN0
|
||||
IE5DIENBIDIwIBcNMTYwNzA5MTQ0ODExWhgPMjExNjA3MTAxNDQ4MTFaMCQxIjAg
|
||||
BgNVBAoMGUJhZCBOQyBUZXN0IENlcnRpZmljYXRlIDIwggEiMA0GCSqGSIb3DQEB
|
||||
AQUAA4IBDwAwggEKAoIBAQCy5dZH9k2pwH5jw7iWD1TwOIqtmkNBOGDDk9jKvovm
|
||||
VUYm7nvLOrx4amqi7OUEpYaJTroPS1UxFo1E7/0yqjIesNPVvqzn2wzuii4VsfDn
|
||||
qN1lqbpg/unr2g2gd095AyY8VQwuqYa3bXOQHSOHNgzm108XfpubuqleEy+ykHhX
|
||||
bgzqVTQ0Y3UjD53f6P9kSUnjnODG0RK0dgHWQDWKE8TiQiGzb0sXWdkXvPt+zGw2
|
||||
+C76lID3p7y1+8G4rpfGpi2aPOH6m4beqNAkekUzu/dauhHY4aGRoX/EsDTN8K4F
|
||||
YtGGaoViFIh9Twc3nWvERXbjXSayeu08f+7CNiSo6WMzAgMBAAGjgZEwgY4wHQYD
|
||||
VR0OBBYEFPIaUwk0/m0BQNvG30Cm6oNqQFIXMB8GA1UdIwQYMBaAFLoDn50GJKRX
|
||||
5nP69ToJ+bqFzKn6MAkGA1UdEwQCMAAwQQYDVR0RBDowOIIMd3d3Lmdvb2Qub3Jn
|
||||
ggthbnkuYmFkLmNvbYENZ29vZEBnb29kLm9yZ4EMYW55QGdvb2QuY29tMA0GCSqG
|
||||
SIb3DQEBCwUAA4IBAQBjicKVS7UDgLCb15ucoKfnrVGvKUs7XSKfF/xae+c/2xWP
|
||||
+jCCqbilW0QhVuAYyK6GgVO9cG3PKhCH/Us2Az0oCzwLXibRHcDSRfrjJJ9uiofc
|
||||
f71p9AzAtRMlSwl3UhSLS8xbHLRbniNXi928+1iMoKb8Ua2ZVHzF3s/T3J26EEkR
|
||||
D2DtWq+y7ETlTPS/GklldW1x6qzWRgi4IriApX2taccJtFhaZH/Ih0XtnEWkmtOL
|
||||
dwsadu9bjbLtUsFBeW/bcRBqZoI/7xbSxVwHVXF2MZwHkdFuq/3eJE9RXVGpy86+
|
||||
JXOcEouXyLAVjj9XCWLW8ilVTkYE6EmUvKSF4aON
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,28 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCy5dZH9k2pwH5j
|
||||
w7iWD1TwOIqtmkNBOGDDk9jKvovmVUYm7nvLOrx4amqi7OUEpYaJTroPS1UxFo1E
|
||||
7/0yqjIesNPVvqzn2wzuii4VsfDnqN1lqbpg/unr2g2gd095AyY8VQwuqYa3bXOQ
|
||||
HSOHNgzm108XfpubuqleEy+ykHhXbgzqVTQ0Y3UjD53f6P9kSUnjnODG0RK0dgHW
|
||||
QDWKE8TiQiGzb0sXWdkXvPt+zGw2+C76lID3p7y1+8G4rpfGpi2aPOH6m4beqNAk
|
||||
ekUzu/dauhHY4aGRoX/EsDTN8K4FYtGGaoViFIh9Twc3nWvERXbjXSayeu08f+7C
|
||||
NiSo6WMzAgMBAAECggEAe5D7MBt1S0H1Ss1+as/OOFqllwGNYLgjRhOR04BHu2G9
|
||||
Idjp0tcQJRBD9aMxEMOQKLkjFLtQ7aYJD8vAFMWv9rjmqKWaYk9QIFd7O2r73dcq
|
||||
jTTt0l9gjZLAhMzELO6680M/Nd/MeFf2UV1/E76GrM+dBrphmvAUWjFgabMWHDR0
|
||||
vFmZW46MGyDLAmihSYXXtwamYxf4UHYC9QxW2KNu1l+llalrRqzT0tQde93W+lM7
|
||||
fZBXgjdLayqdPpYhKd6QkEfVYrgtkuZern+DlIhfQcBwVqj+2gVfO87hFVEb5V2+
|
||||
Rt4v6xpL2Um+MvojE1NO353WPDBFMYOmoMjSBL+CoQKBgQDXzk0ke/+ZZoOIWLfd
|
||||
z57s9HyoTbiUHNELIhCNjJmpEVMlUn6TSRu8r8s4EciOb9yj4j5dr0p5tdsmP0eL
|
||||
KJZyTvNlEsq93azCuzG82Z+963iqq/1msncjvcbnIll8kGwpr38sLAN/qjc11/o1
|
||||
gLbWuiztGyTPuFtM/Hy/UvkV4wKBgQDUN78TSEGzuKDtyuZNMCnvSJdXm2p3XMaz
|
||||
d52ooRtZ0REH/MGMFW5u1xJxnDflcgnzXRVq8xaw3TMo/3Fx+Op6PGq8zVEwGDBQ
|
||||
0WQqBVB/b4Rw21Kf9fMVMtXvOxIsQcdz2583s6Lojr63H4P11fF60EEVmEW2cXs7
|
||||
MviuHdt+cQKBgQCpgS0ufwbgYpjlu2mQG8fkrpRLTeCw1YGMkREXXVxEY4s/QXCS
|
||||
F1Zl+l5QiAdTeaGAR/BcfZatyp17iTCUqSiiWEjtFrmQMFHGEmqavwStlAqPY9AB
|
||||
niPeOu3EFkLbiESs6V+mPlvxJq1+6UlqRNNYDZvEERH05gUwjxEc5fsnqQKBgQCo
|
||||
Q2cqJ8GIeVyIDreZ/hVR15G/8cdxysr1o2MLQGpKRb0mQx9HLfr4wWirUfzz3P7M
|
||||
ykJgIUwdgdW9rQRLJNztfJf5CSZVZuhwPAYaV0pjMI2nWg7iLAXICh2caI7ZLnKx
|
||||
hzJv3OvPTtcipUdhFXg5M4RXVfv4U3QtFRYeIChX0QKBgQDDQ7mGmWkuR++svxXG
|
||||
A5ITe+7RBRO8kVhXEGYQbIiuk4fM2ZXWnw/MwMVX3cZRfL2DPVmRa5Xcgs9OLwQD
|
||||
hoGqX9LBAkyB1p+ZBqNJaHa86awXR01gWNPW7/GJTp4Q7V4KkGvjIbWVWH/7TpMe
|
||||
d6YkymUz7h0qMN/M5nsB5Xg4jg==
|
||||
-----END PRIVATE KEY-----
|
||||
@@ -0,0 +1,21 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDaTCCAlGgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxUZXN0
|
||||
IE5DIENBIDEwIBcNMTYwNzAxMTMzNjIzWhgPMjExNjA3MDIxMzM2MjNaMEIxIjAg
|
||||
BgNVBAoMGUJhZCBOQyBUZXN0IENlcnRpZmljYXRlIDQxHDAaBgkqhkiG9w0BCQEW
|
||||
DWFueUBvdGhlci5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD7
|
||||
yQbYxTDmAxcJzHqauQqtUWWDj96qO481h0oELUC1VEbmV9Qr1v2OPebjVQfa+gSc
|
||||
YYqC96IrJRwtg+z/mQzGE2QbLdVrCwktLmd0e3udfT4DObkKFJ63G9wH1kkBcsXy
|
||||
esNTqmUvUS6uXMZYlAGX3uml7UmwXJ+E3zHzFILTeZcQxqjLm1BLGbSFZzT37euc
|
||||
ymsZucA6pZwGiJQdRieSDTliXCkECZJhRf+tFBvcGuTnbYHsK6RnAlAN1Y8LSLrq
|
||||
sjJunJA9U+5y++QR+xSzDrwjQ2RjiCDO6HU5k6x67x0g8tdkhS8yjT+lBIxOuU6T
|
||||
I3GC4vN3U9LvZrWTj26DAgMBAAGjgZIwgY8wHQYDVR0OBBYEFIcSdFjChgdLODYp
|
||||
IIL3Cx40pmomMB8GA1UdIwQYMBaAFAjRm/nm1WRwoPFrGp7tUtrd9VBDMAkGA1Ud
|
||||
EwQCMAAwQgYDVR0RBDswOYIMd3d3Lmdvb2Qub3JnggxhbnkuZ29vZC5jb22BDWdv
|
||||
b2RAZ29vZC5vcmeBDGFueUBnb29kLmNvbTANBgkqhkiG9w0BAQsFAAOCAQEAZSDs
|
||||
XlhVEqGRU5Y/n6EIznEBdDSMSxjrZ62Nf4rWzrQGYT+R9CjUQra9/6wXyjvlTZZO
|
||||
w+BP3y0n2vH1TrCP22fA3n4Tw8WoJfq4Sb3x/eSgTlUYAiZvHv6vfugC7y36c7xh
|
||||
3dCgKWCDxaAplRsMkXIQXgfCNp360Z+OMMeNpcpVnxnp3LfMKCpsDWUKuWvN1AJE
|
||||
mi1VCWQuQIC3vmiZbZc/YKF1kAgUHxCnqHcLtU3GAZUuCVyNrdWXk8IjzjzX+ZpN
|
||||
qr/RUVVZ4IYDUUiGLHW2AvpVv9mt+SBspsCDXyiAf5O6xdek+tiTYLmU9uUOmtJ3
|
||||
ndvhdtnodLRvtBeJUg==
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,28 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCiqb6LYFYj1uPe
|
||||
IVuzuDL1bfV8+xlrws67I+9yVDiHslYdA7ygv41gYKEmKSbL2SvAOnfjgDEb8RYf
|
||||
LhF3LQUvXyON0LkjkZseXVFLNokDBXoNVeP1QjWfznPxHpgGN/xF7OQpkX3FVByC
|
||||
IVUOpiXBbq5FtsuLhquHK0yAsY1gJYP8QFHUbCnE5vrpK8lOv4MZEc9rS6ZrSKn6
|
||||
9+s3nGx9QheboiDVTWqynxDQn2W5ZyTyKQX0IRnKg2zLJ6Dg2ec8OUh5nvzzUdns
|
||||
AJ/pN2Yc3ri53OPodTkmrRha31N48TA7st35XepAk4vZnSq7cml+85xs8Az/OZDS
|
||||
HH1EV5sDAgMBAAECggEAUIndN2NGo04l2vkHT4/XY1/DWdN1/b4h39TmHOSIbN+m
|
||||
9YzBG5JcbKjLgXqEpA/uMqqAa9sv9ZbEDkIgEbLvy0m+79u1n1/bvwgTVTs2UZGn
|
||||
oeyyBuB2bp6pF2y/duzHctPdEJvh+w8vYlsgozUuonyruwbL91SBn1aX9Wx0BHMk
|
||||
rReJHuLxnGGgUVJzmNqKaGKBpuBaLhpytcIuwkNErDHUfzyxDcpu8IPo70jCafrE
|
||||
hlrbs9o8vKcnWF3XZ2LVPdrF0MQeXfvOPc0txiAOU4DQ91gsoZsVsYJCXY4Qw+4S
|
||||
ajpxidF6nQDtRtB/aTq+OCMzCVGog6V8Mg7VbA8u4QKBgQDQSHDEBgvPfoA/6Sxp
|
||||
uzFV7T0Vgl58oV35EqPFl81cBUSwTElx8ueP4kK00964j47Qe/N5TQOzvH+rxlGQ
|
||||
cBgQzG3W83c9HmfHjdx6lSQIruRW/HwqOsJtPcxP3XyxSO73+hqwf3hsOWRq74Lq
|
||||
MHcgvWZ1iy/A0smVQu2sDLDk8QKBgQDH7b+FbKSngDZU+9uEYKkPpmhh0qGXVgSX
|
||||
1W1BKYxIKd2y6aDOCxZJDTJGNBMpVdOTm1VNrL2J+cF73XOJWaG7KnSbxl/tkrS4
|
||||
9hwJ+Ut2VOumFWHEUqp+nxLxwJdCtA2f/YTNqJPLj3GiGJB+xp+dZr4ARn/+P5/N
|
||||
DC5G6S3vMwKBgQCreWg1ShEBI9FsTIi/B1kHuAgZJDqr+qIGQ/1G2MI+Jyw0xKmW
|
||||
wXc48vseKmvroGzgYZvCWtBYcjDd96kA8/gsJFGtrMWXMOgZ10YUOaLv7ySYJMgI
|
||||
cFXPYBhMDDnzLutmhqbgdiFrYBi3HTa3nW0GLEglL5EB+8fwNai8g7pC0QKBgG6A
|
||||
su3NGcjW7bDVMASf5HGY+XKwF85spcdCGMv+aeHs+fOMe+vGZv/jglkZKUocfP/F
|
||||
yEVRZ8WePNn4kYZl+yVXFvKOl7DY+HiO1vqQRqxVzZWTleEMC95GkBL87t3YZPt8
|
||||
BW4iceX+F8GPMDZSFCDMi9HdJZtikTGlPOLGuTPPAoGAAjVUGfbNqnpQv6aDpyWX
|
||||
Szd2uA9TzBCkh1hf7x4+E/Wr0leTGgXVez9uNarfpnVfgHTDv+OYK+Qnrq+UEHQr
|
||||
9xRAgXLEZWXPbkUakB1o7ZW52MxR6C1zZgitTZYVzeX0EMeWc+1Ujjwe7Qu3L6RN
|
||||
kEI6l4ZQL9buxDhqXH1UFbw=
|
||||
-----END PRIVATE KEY-----
|
||||
@@ -0,0 +1,21 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDaTCCAlGgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxUZXN0
|
||||
IE5DIENBIDEwIBcNMTYwNzA5MTQ0ODExWhgPMjExNjA3MTAxNDQ4MTFaMEIxIjAg
|
||||
BgNVBAoMGUJhZCBOQyBUZXN0IENlcnRpZmljYXRlIDQxHDAaBgkqhkiG9w0BCQEW
|
||||
DWFueUBvdGhlci5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD7
|
||||
yQbYxTDmAxcJzHqauQqtUWWDj96qO481h0oELUC1VEbmV9Qr1v2OPebjVQfa+gSc
|
||||
YYqC96IrJRwtg+z/mQzGE2QbLdVrCwktLmd0e3udfT4DObkKFJ63G9wH1kkBcsXy
|
||||
esNTqmUvUS6uXMZYlAGX3uml7UmwXJ+E3zHzFILTeZcQxqjLm1BLGbSFZzT37euc
|
||||
ymsZucA6pZwGiJQdRieSDTliXCkECZJhRf+tFBvcGuTnbYHsK6RnAlAN1Y8LSLrq
|
||||
sjJunJA9U+5y++QR+xSzDrwjQ2RjiCDO6HU5k6x67x0g8tdkhS8yjT+lBIxOuU6T
|
||||
I3GC4vN3U9LvZrWTj26DAgMBAAGjgZIwgY8wHQYDVR0OBBYEFIcSdFjChgdLODYp
|
||||
IIL3Cx40pmomMB8GA1UdIwQYMBaAFAjRm/nm1WRwoPFrGp7tUtrd9VBDMAkGA1Ud
|
||||
EwQCMAAwQgYDVR0RBDswOYIMd3d3Lmdvb2Qub3JnggxhbnkuZ29vZC5jb22BDWdv
|
||||
b2RAZ29vZC5vcmeBDGFueUBnb29kLmNvbTANBgkqhkiG9w0BAQsFAAOCAQEAiF/+
|
||||
jEoLAFll7JZN9PioyP0i7EEYCCVc7omFaKnIV0A9ZfV/TlHBZH/IQKdUXbSPF6eF
|
||||
4UwOQbkc2gwYEliNsU+rw5PANBEwPhCGKBIClWhReIzQqY8oTRxKOpq3cHd6hsab
|
||||
P3NYRUtinFdoOGlUHQQcql3zYwD/guOvA/zG8sR58ed9Fd0gt3OnSEvUSiR4e9bg
|
||||
gbqgSYgagIDcZn4kEJWVHQGj7lA4ot60X3VYk6vWSB/RmWqbmsGxzoNayGWaCw7l
|
||||
CuipVdk9yi4eROoQAxWvVBDz+7Q9CF7j1PkDMYB+QwiXwNfGplOMAWv6nQUNJPs5
|
||||
dIn/eeha7QWrqG/45A==
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,28 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQD7yQbYxTDmAxcJ
|
||||
zHqauQqtUWWDj96qO481h0oELUC1VEbmV9Qr1v2OPebjVQfa+gScYYqC96IrJRwt
|
||||
g+z/mQzGE2QbLdVrCwktLmd0e3udfT4DObkKFJ63G9wH1kkBcsXyesNTqmUvUS6u
|
||||
XMZYlAGX3uml7UmwXJ+E3zHzFILTeZcQxqjLm1BLGbSFZzT37eucymsZucA6pZwG
|
||||
iJQdRieSDTliXCkECZJhRf+tFBvcGuTnbYHsK6RnAlAN1Y8LSLrqsjJunJA9U+5y
|
||||
++QR+xSzDrwjQ2RjiCDO6HU5k6x67x0g8tdkhS8yjT+lBIxOuU6TI3GC4vN3U9Lv
|
||||
ZrWTj26DAgMBAAECggEAB5KFLTHJBbHkGHxY15xnEM1Y4zsJdE80QGTgOf3ua0Ws
|
||||
mDLeA6+EkqmT7xRYlyJbzyQz2Tp/WxLTpR7JmupMcwyUPykCuSRs0zoJDHzGO/dP
|
||||
TSOISCBUoacp1+Z+7Zc5EtDUXQjL4D9tyvqpUHKrFZkzp7TaOX6foYxg4TGluZxo
|
||||
RDp6qlAOzZJiAcmavgqPpvfgbkNs4cfdh9yu7FDX2Orqa0pQNsPDWp2VyOkDEPiR
|
||||
7LTK0OxQiHLdBbLvjiW34eElyJl2tJhCb08JcRrfbYpeS43j0rOcyDJQZX6tkpxK
|
||||
BJwgWVwqwuKBlZyGT2inASNeqON1tAGWhz59cWXcyQKBgQD++LSllDv7fOZTRKgC
|
||||
e+MGbkCKrPgjUr9NJgcrQhQ+kxE69E3p4iUtj/YTwIc23qxjuZ+jyG1wOFIULRYz
|
||||
KjBbuyEugfmcgWtFWeJokl71IHBk1QUT4xlSSMvccs8pTseBCdVWIkPRIc4qeGRB
|
||||
3RCPrJmmcvsJ7gnYPFfmKL1tRQKBgQD8zQflPYNLPgGPNaCbFiy0aCNYzvd+4ETz
|
||||
3TsKbmITXnq3W2Mf80RctzasFkTxM4Kma2fXbDNt4Z26s2x12FuEg7oaKtGKZBy9
|
||||
anmg4u4Cr1lk9BSSqlQeKsqQOp0mI3hyBW6v9CDhgCbMbKT6DgskwZpQjHLPf8UK
|
||||
DCfJ2Mq1JwKBgFuy8rVCNLhj2SpFXO9XwvSDHm9BehSqI+cJMDbckw9WMTI0vvjI
|
||||
vno+dk/wRDD1sKZFEicDZGihuNNMy9km6TF0gaCKWk1xNjVA+G6HheM/AW0iN6tJ
|
||||
V8gCKl9kYyEGFjZQZQuPUziZod4gYl5VtSkW+EOmwqZ1l9DPEwXRzR7JAoGAAu2A
|
||||
9Oe0eI+cRwNQ+9rS47f9CM9E0IRaaBSc1W8X1a+Xbj4xtLIFjalVicKsQ7rb/X9q
|
||||
8XTAV7pwMDRZwjeiP7Oi2SC70oV8S7lK9VELfp53Q5MMFfLBDKRkOi1jmoh4oaFs
|
||||
eb8zDkmEqYNsmbTF7kQLvHkT71FEf+xKHa1UE6sCgYEA+9bRKxPgngVA1qAhwrDM
|
||||
jjODdUhrlJZDZ7oAVs/CelAO6sSXZ7Yqyujs2YonuQ9aUiLLA/b3b26XEqW/iMzG
|
||||
onhxrQXGlsvqK+V5u+x8yBpBUj9KBw8RXBtdhPEl5iRIeQ17xKRi+9WilOuhwdKJ
|
||||
dlpiKXP638lF4t5jvaCy28o=
|
||||
-----END PRIVATE KEY-----
|
||||
@@ -0,0 +1,20 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDUTCCAjmgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxUZXN0
|
||||
IE5DIENBIDEwIBcNMTYwNzA5MTQ0ODExWhgPMjExNjA3MTAxNDQ4MTFaMCQxIjAg
|
||||
BgNVBAoMGUJhZCBOQyBUZXN0IENlcnRpZmljYXRlIDUwggEiMA0GCSqGSIb3DQEB
|
||||
AQUAA4IBDwAwggEKAoIBAQCzgx886aURB161wWGRp4rr45Di4KhS/wUUSaHTQo5n
|
||||
9jD+7glAOBTrbQYb+Gz/tusDsuHvZOGOvQ45D05MJVvWsz7M42lA8GLJfKIX90aN
|
||||
PMkX0pjNbx4admrAf4PYGabkihF9iPJ/ONiAYuoGoT0gjOEqtoxyEu/buXgNMTdt
|
||||
lZ+wL30WKL518MCm1KIsqFpSrNRYZq5E206Umsna7uje5tBI3CwYy0OD/XVwnSEx
|
||||
OgWkQ71RAqciVV3bCptBpheWSL8RH2Zom//INa6g5ArJy6TCy3IsmE0hCwteaHKB
|
||||
jcFUPfLQKqJZiIg5DgJjjdwZ3KAWMljo3GjdSVbdZ6hNAgMBAAGjgZgwgZUwHQYD
|
||||
VR0OBBYEFHecitO/eIltLUNkgT19Gn4TVkc2MB8GA1UdIwQYMBaAFAjRm/nm1WRw
|
||||
oPFrGp7tUtrd9VBDMAkGA1UdEwQCMAAwSAYDVR0RBEEwP4IMd3d3Lmdvb2Qub3Jn
|
||||
ggxhbnkuZ29vZC5jb22BDWdvb2RAZ29vZC5vcmeBDGFueUBnb29kLmNvbYcEfwAA
|
||||
AjANBgkqhkiG9w0BAQsFAAOCAQEAOBZXBSNNAAAaII+l4mMoeXCpvofbaHuNlJur
|
||||
G+1uu5ra6VF5Juc5/uBa9zVQa2npe0kKOtx8xcI6QMQW+usphaUEh8t7AgR3efyK
|
||||
bsSKPnGxXtCSaYZIEiwFyAFTx1idzZixEfHUHTO+LQUwNTskDGCWK46V1P1wL478
|
||||
jXikGqc76DSmOXTc93asCMxCBIbHN7LLJIRhbUpiL2JrBPydzERPVoqiEZ9SWG4p
|
||||
DB4T0hHq5FUUnR1Wg7yQoClhyButeB4A2eGwLjhpSeLeXo+w6ENlcm9Lp5rOhbOo
|
||||
xqwgz6kUtU6smxWv0HruLT8Pq9hIKuPz6DWG/vIpiSLwz4B25A==
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,28 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCzgx886aURB161
|
||||
wWGRp4rr45Di4KhS/wUUSaHTQo5n9jD+7glAOBTrbQYb+Gz/tusDsuHvZOGOvQ45
|
||||
D05MJVvWsz7M42lA8GLJfKIX90aNPMkX0pjNbx4admrAf4PYGabkihF9iPJ/ONiA
|
||||
YuoGoT0gjOEqtoxyEu/buXgNMTdtlZ+wL30WKL518MCm1KIsqFpSrNRYZq5E206U
|
||||
msna7uje5tBI3CwYy0OD/XVwnSExOgWkQ71RAqciVV3bCptBpheWSL8RH2Zom//I
|
||||
Na6g5ArJy6TCy3IsmE0hCwteaHKBjcFUPfLQKqJZiIg5DgJjjdwZ3KAWMljo3Gjd
|
||||
SVbdZ6hNAgMBAAECggEAcNWYiwcptFx3kbNuCsnPLpqp9ZHU++ZEYQ4vY8VQEdTT
|
||||
00n4Ep+ttpWe43HxwYJOktKb5Yf5p2j6Sa9vPbm10mx0qwC+pgzza0al9H5/oEN2
|
||||
+zxqw6Z2u5d3XmxIiUsGdly6xbeRBZrLq1eBVo1/CLjEx75a5VE151zbMx+egYge
|
||||
xETVRushMINQwkMbVUQp6MLX+M5eqEP8c2xyzPVEtxtxpu4yxZWbDuFezModhdvj
|
||||
ncV0QTBvlvB5Eg+4CeZiOvgu8ulnNUJsYGvMGCK8b9FwJhpM1CVtmw070CnRL0hx
|
||||
6Xrhgw26oAUmxWkvzzXsgwxAZFJMpM5Rg3rwrNDzWQKBgQDnR9FIh24gOK6g9dOx
|
||||
i/LVKFZ1V1/HVXTXiBjPHwecNkBXLLlgE46fxSHd1mt1yoHnyp3qOXbCIsqnk0S9
|
||||
KyMN0y7YG0P6QHxdrnhhr2zsZaVBEoLXmBn7vp6M50xt/Je4qvOGwkPTrU2Uftil
|
||||
qMIexti5oO/tOksmWw0Bm0R0WwKBgQDGsthSr9y1zpACJnu9rdMkwqZoxn8n7CPN
|
||||
y2L66WSpCopBKighfvn9ymOkV07TdcY9PEo/Yb5G3jT23trY2GOd6EYTSa0S8yDt
|
||||
lslXTzZJGAK+RiMf5zHBwIS800XSBqXCjL+yJ3w0sQd9uRcQr8XjIJLZfbT10sRg
|
||||
1jQBMK1WdwKBgQDJdsXXaCGF79ouW/ULs9zT0U9+552HBenB1cvGoEEA0kE5rrvL
|
||||
9T1H73CQzTbOZJjEULs+TNAmTCg70Q0Pu4PNhyhHF3kfhQzQjipO7YD0a5aIGJfh
|
||||
NZ1srZ9vHgx1wpJnSoLX4GE1AsGRmO0fYOG37X7cNFTLUPwlbSrnO1lmAQKBgHdR
|
||||
kJve5X/7wfi4mVgnGQMbLIkAof0cTcfYGeEo5HyqSqmlIiIzOPYRYlKe50QOlnPR
|
||||
T5jOHlA6Qb35x5uuHewGPoZ4mMknXR+vi8q1U5kDJSqTvaX71KJP9KXbjTL5MPMq
|
||||
SDc4hNqzcBcsXdB0bTXeKrEWTuPLpIeuOd55F64zAoGBAMooy318nDZ0c2Qek3/N
|
||||
+SN+cG5tLH7HjbI9C4XBYVbxXHIvg/nSzFRxBbC2ZFetJ27xvweM1J/Clk7d1Lvq
|
||||
PM7fcVgcc+ccHNM7KX77k0/J+FJF1uNsj9Rgg2TFveLKbtHfmaZd31k1HIYhSS5E
|
||||
a0BZeU4ZpKQJxpf8YbXbPi2Z
|
||||
-----END PRIVATE KEY-----
|
||||
@@ -0,0 +1,22 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDljCCAn6gAwIBAgIBAjANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxUZXN0
|
||||
IE5DIENBIDEwIBcNMTYwNzA5MTQ0ODExWhgPMjExNjA3MTAxNDQ4MTFaMGkxIjAg
|
||||
BgNVBAoMGUJhZCBOQyBUZXN0IENlcnRpZmljYXRlIDYxFzAVBgNVBAMMDm90aGVy
|
||||
Lmdvb2Qub3JnMRMwEQYDVQQDDApKb2UgQmxvZ2dzMRUwEwYDVQQDDAxhbnkuZ29v
|
||||
ZC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDKz8F/ndKz0vuv
|
||||
BymjTUjtrWSQsnsuisR+oW8CIliNBi8yqqeNrtoa2s+e2GBC7gxDlK9IOqGo4Ulu
|
||||
9jY5On6RysrFWLpK97I7EP9cg63alH+NRFEwczRzErHtYx54yiBjcovcCVeTtdnd
|
||||
7/P4T8hIGy6QjdW68lzwnN/I9x11NWoipIKvAOGXz0L/WaPPWZ0GJFlBqEX//O3+
|
||||
6sweSUX4ivAC9txou3rwDA8kJx5Ge9trQ9dPPG/jpL96f1DLE9H2SkVff1KLTPmb
|
||||
jUwiYj161lsKLxGkbdmPWRjt1pP4+5UUhioo1Y0WrTd5ELwB1eKTtWsOlRsdLOa8
|
||||
1L6m8ngXAgMBAAGjgZgwgZUwHQYDVR0OBBYEFBIKyD5bUUNIFxlQJl/rBvvIm0XZ
|
||||
MB8GA1UdIwQYMBaAFAjRm/nm1WRwoPFrGp7tUtrd9VBDMAkGA1UdEwQCMAAwSAYD
|
||||
VR0RBEEwP4IMd3d3Lmdvb2Qub3JnggxhbnkuZ29vZC5jb22BDWdvb2RAZ29vZC5v
|
||||
cmeBDGFueUBnb29kLmNvbYcEwKgAATANBgkqhkiG9w0BAQsFAAOCAQEAa2lydA7a
|
||||
YgRhYeIuPEtR+bKyDkIKNjvx2IRL/FL70s/IWFWDK1rpsMYLGNa7rWpW5gq4T6zb
|
||||
JIwC/770Rw1p+0j9eAC95d2wCEhyNcLdoP4ch7whr0MhxYHUJ8zQGPdQ97DWGoEB
|
||||
2seLjrhMrX004TM4UlM+lpjsb88QEcD+kOEhdDTKm0ABUygOr1KRay437mtUhAzb
|
||||
WyUbAjKbhgyv6IFRNHKy6YtCMugPihn+Pd1NY6c2ACRVOAUS/+rvVyjxBCATW5Wk
|
||||
zAtNIxYgcm3rYRroGYT2BGj8Ic7oqPOWPdGWhsieX0c+y2ZnS727Kwc5tXFfW9By
|
||||
GH32QmEN5o5jZQ==
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,28 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDKz8F/ndKz0vuv
|
||||
BymjTUjtrWSQsnsuisR+oW8CIliNBi8yqqeNrtoa2s+e2GBC7gxDlK9IOqGo4Ulu
|
||||
9jY5On6RysrFWLpK97I7EP9cg63alH+NRFEwczRzErHtYx54yiBjcovcCVeTtdnd
|
||||
7/P4T8hIGy6QjdW68lzwnN/I9x11NWoipIKvAOGXz0L/WaPPWZ0GJFlBqEX//O3+
|
||||
6sweSUX4ivAC9txou3rwDA8kJx5Ge9trQ9dPPG/jpL96f1DLE9H2SkVff1KLTPmb
|
||||
jUwiYj161lsKLxGkbdmPWRjt1pP4+5UUhioo1Y0WrTd5ELwB1eKTtWsOlRsdLOa8
|
||||
1L6m8ngXAgMBAAECggEBAJNMHK8BAvzTqTPPsfAGu4bTvgxRdKGy609FFAiqxUF3
|
||||
UmQsCZEfgwyqCszFPfSeS43xuPRukObE6L6MV4ls8GwWqvp1nKfCClJX3/9jK6tq
|
||||
2tDQ416a7Wb+FvfgW0tDEg7oLKfcqRyAoQFNuxWHbGDiTQlz2dzzFYkzhlzBDUYH
|
||||
/pu9qkNFGfYMFwsBUd8pp8zMnv552CCIgalBBFr1hy9q47HBaJPaF2/CjZJmsqkp
|
||||
rVMBH7+j0y1DW3JO5rSKcRdz+mgEd9m/yQIazvBPJKxeGza8JfLBuACYFLIoO1S+
|
||||
b8s/zmQPHeZwTxSsM64M1uYi4dmJy0viozLlWsjrE1ECgYEA/GxGG/lB1mL+Hzmc
|
||||
kXzWmA2nLPxZXGxMBOYH/n8l4OyDmKi2Bmly7kS0kLdY6gYTVBWFCRcvPxf+UJu9
|
||||
x4NcKDkjXVXSg7Muux3Bh1JoRCOKB2Hk3pqdDe55GcT5bSikkd5PYCNobcnqzSK1
|
||||
HzKveDdukraZxIPFpVs1VM9/gxMCgYEAza+BJUAEWoq925a1RKlMwdXW1ONBhFqU
|
||||
fXon15fgycHkiYIBGbGE65Oyz8BwE6jNAT+SwKlNCc6jPAkXvEUpczEi5Rcox8Ec
|
||||
hNoXBHcBxHEhtfV2VKX5I9JFAadmvnfS5St7HjRLzE2Y6xym1+fKfnAlSLpdb3W2
|
||||
eRqVBi3F020CgYEA6K/yrQTHwRX+BdC42JCIzSAA1IJG6eDW7skR43NX+pBr+sTD
|
||||
DwQTszrYbHLnXst888zmluutXO8EO1Bl0E3yHQ4W4IolhcweLtUOOm0nunA8Y/PE
|
||||
48MJNfd34N5nw01s7x5Mc2YQdOxmKvVsmzbA9AO9RTdYZgPGpVh/wA+LDssCgYBh
|
||||
F2+G/ekQNF3awhFfD+vDtAVtCLlsmLVvZbJY+sCJfJU8s7mBP2LXMSk/GD/Ph+b9
|
||||
p9zGRSSwdHJpbIFfxeYDEja+nWgKowWrUKd83BBhgmW/Vtc8rfwlBKS+Wx8M2dMb
|
||||
iqLbZyRAlICSuzumvyu+84EmC5L/gjlYgUvHVuQDIQKBgHH7q3hrKI5mQ0BR9h75
|
||||
4yP98c+Duz8IsQllIG0gzCiiOYIVTl3uzTCa/E9Sa+jG+kFsCeUDchmC6LmHdF/Z
|
||||
ZHfECcQT4B37xMMwvjwNW7E6/FyRx3XC762Fd5vlz3fBuVKburfh1JpfpcO85Wvo
|
||||
R1UfsJugW9Yetsqd9WB6q3ln
|
||||
-----END PRIVATE KEY-----
|
||||
@@ -0,0 +1,23 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIID1DCCArygAwIBAgIBAjANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxUZXN0
|
||||
IE5DIENBIDEwIBcNMTYwNzA5MTQ0ODExWhgPMjExNjA3MTAxNDQ4MTFaMIGmMTsw
|
||||
OQYDVQQKHjIAQgBhAGQAIABOAEMAIABUAGUAcwB0ACAAQwBlAHIAdABpAGYAaQBj
|
||||
AGEAdABlACAANzElMCMGA1UEAx4cAG8AdABoAGUAcgAuAGcAbwBvAGQALgBvAHIA
|
||||
ZzEdMBsGA1UEAx4UAEoAbwBlACAAQgBsAG8AZwBnAHMxITAfBgNVBAMeGABhAG4A
|
||||
eQAuAGcAbwBvAGQALgBjAG8AbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
|
||||
ggEBANStByWr70u2A49OO+LYu0ivQP+uBu2n3E6RoEYf+op/+JF3clwfMQCGqiSg
|
||||
QxOJMHkcu4gJDudRLCSXqHPnR0hOd+mQ5wQQJmLj8A99ImcD2oN5R3V5I4bSlXP9
|
||||
GCq2pFDnwXuEcJ3d2Dt1HYO4jA4Ol/RBT3NIqmwSnQzXv98mjYFpy6AuAIaYGmbh
|
||||
1DLWxsTPI2NjNafJYS85NrQDLkTpq48nCmQCJ+ly6Zzu7WuJiDKD1Rxs7ZwgNtLi
|
||||
Zhp41TeFHxCbfSFKe9u4rnUmImKxwgc9KuzOLpLAzD9avWpPGHtkCsLFsiw/EJYf
|
||||
UdeCXc7tz9WhXZzOk/ffLOcrorMCAwEAAaOBmDCBlTAdBgNVHQ4EFgQUwYsR1XfZ
|
||||
2cPcAR7i5i9obalnJcIwHwYDVR0jBBgwFoAUCNGb+ebVZHCg8Wsanu1S2t31UEMw
|
||||
CQYDVR0TBAIwADBIBgNVHREEQTA/ggx3d3cuZ29vZC5vcmeCDGFueS5nb29kLmNv
|
||||
bYENZ29vZEBnb29kLm9yZ4EMYW55QGdvb2QuY29thwTAqAABMA0GCSqGSIb3DQEB
|
||||
CwUAA4IBAQAN/klfzMLi2acp5KdH9UZR4XCk3cZBOuMuI0vU+wrU/ETgY6rFhAwY
|
||||
gSZsO6vX0mt/G6QfOmY5+kW4FY5XavGhhNVY2x5ATZKvQCf+orIsUHOBxVTjH6az
|
||||
uEnxGDRTbjXSkBTCTSoOqdJNeOmEwiaHEVy/atumUW2B2KP5FeBGdud/94c4Q9/O
|
||||
WBJ0EICGF6hYTDra63lAjxyARTvocVakIE8zytT1SbU4yO05mYPyNdXxiXikepFE
|
||||
phPQWNSLx4EPBIorGCFj7MPDmFCH/+EjDjGz3SNUvqsak6MstzK94KVriQyIHKex
|
||||
IL5WuKFm0XSGKTX8SzyMGErMGeriveL2
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,28 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDUrQclq+9LtgOP
|
||||
Tjvi2LtIr0D/rgbtp9xOkaBGH/qKf/iRd3JcHzEAhqokoEMTiTB5HLuICQ7nUSwk
|
||||
l6hz50dITnfpkOcEECZi4/APfSJnA9qDeUd1eSOG0pVz/RgqtqRQ58F7hHCd3dg7
|
||||
dR2DuIwODpf0QU9zSKpsEp0M17/fJo2BacugLgCGmBpm4dQy1sbEzyNjYzWnyWEv
|
||||
OTa0Ay5E6auPJwpkAifpcumc7u1riYgyg9UcbO2cIDbS4mYaeNU3hR8Qm30hSnvb
|
||||
uK51JiJiscIHPSrszi6SwMw/Wr1qTxh7ZArCxbIsPxCWH1HXgl3O7c/VoV2czpP3
|
||||
3yznK6KzAgMBAAECggEADjQ0Kv7tr3fLixGljEP/Vh5mT+02hz7TxueQ9b4DBKcB
|
||||
We3JVH+8zRUxXdraP/7EnwIdQDuipC5WrWb3mC4VI64h8hZ8Z1gQyEAC83XfC1RF
|
||||
jsxVynG5vrJnyuRXbdre5Ixl7rLsto5vd6EdxINZz0KIQYbvIHr07tzbYlUyelvA
|
||||
mu0kYdtbjm2p2AGJJ99zN3EiQ9lZDyiFirOXEA9P/YdKKVlIwpDPbn/TmNY/k6Ul
|
||||
mRxgAJKwKiR6Gg3QMdTUKeaXBpKf/pa+5rzR7zxNbiQO3IXOVx7ZzQ2R0Wuivpqk
|
||||
yjMaqUa7dDuvtIHJBpJB7TIL6SlQkiS1lEQFhO7EAQKBgQDz30obdymxqQVy7IsH
|
||||
NLo5xRX1hRRN9h34Y4qC0JXkCTG1fWJ19KYHod0S5peaIo/ThDVf1UXln6amdCjM
|
||||
oIfhmo0baNIdMMpxxBdsdLfUKwyVh8qROaBscPE4FGBUrfEW/wSn1WRYcWh+oda3
|
||||
LuLVf5Qt9a9f6ZYuy1X6dDi8swKBgQDfQJTSFUNkV8yKfMX54x0DcUkiWOu3LaET
|
||||
GSu0UXqBVn1Q+u6CUAkh5jA9fpyM5sp9+t5FuwjO+ITHfiNFoD/LCeMUfYVDF7O2
|
||||
uCLTsN+7gTGpKMnfL/rg9exrsfDdsmbQe4BhrUFBsYfKgBlBraL0QGD+25qgU8CS
|
||||
CQ6toGCCAQKBgQDCYJskwRoObPXW4AsAN1qnaRtTkjrY2O6SaGSiV7bhByMD0WiF
|
||||
M/aR5sXapsj3Jc0Vfi88rzUDDPk7eyJ51wn3G8SUsDuo4Ja7jtxMqctL5PQmyxD+
|
||||
J7xiMrNRS4xscifTeHgxfbh5dgsfw8bsQwaxvPpSl5ytCfWWXqOs+K2wWQKBgBM4
|
||||
Mher8PNQg7FgcILExJipRgyI7zID4ZwNTK/nW86KrZstHx9k2IRslraUkdGnhMM3
|
||||
t671HRsEVhn+h/bUhulp3nzDGZffEH+odocW8QvpYWcYtdha/xQi18mltgC//Q3x
|
||||
s+m0yqtnJzONt57p3d99M1x9d2BaFXf9A6B68BQBAoGBAOatu9+wGaIEB//fpaQt
|
||||
mnsS2XBJco5gHTjOegCSNe3gQQsB5mhTEekOeMzJ8WLTMVXQVCXx9/8HxKoycbq8
|
||||
M/7ScH1iT/wJTkSsjyeycUgH31GPeRvmo9YU2PsW3NN6ZyNpxWJFdcPYHAzZqJeA
|
||||
cZtQWiEyaf026DdR8YBYn6tf
|
||||
-----END PRIVATE KEY-----
|
||||
@@ -0,0 +1,21 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDgjCCAmqgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAZMRcwFQYDVQQDDA5UZXN0
|
||||
IE5DIHN1YiBDQTAgFw0xNjA3MDkxNDQ4MTFaGA8yMTE2MDcxMDE0NDgxMVowUDEi
|
||||
MCAGA1UECgwZQmFkIE5DIFRlc3QgQ2VydGlmaWNhdGUgODEVMBMGA1UEAwwMd3d3
|
||||
Lmdvb2QuY29tMRMwEQYDVQQDDApKb2UgQmxvZ2dzMIIBIjANBgkqhkiG9w0BAQEF
|
||||
AAOCAQ8AMIIBCgKCAQEAp5T7voqwIiauadaESOe4RMhRVU9tHp5JZlz1yJ7ZYF81
|
||||
PJJ9XfERTCJQow3BNRbVeXEyI4mvMMcuFwd5cKqy/gP5yfEV01QbpqACKhIK90Nj
|
||||
9fM2QOiYE81FmvQzP6j7QFYt0E6J4kupvj0D8Z2Nri0kXDGe5+hbgLPkZvnh0vvJ
|
||||
Ck7AEQ2iqO4Npe4uHoDx3GXNo2Jb6BKNf+nMsJPLo7sqUuZA0/mFDVPNRvKfiq6b
|
||||
ObFUdbY/qPVPHk9VBWZuO9etk35G2yTSQ9KiGRNgcoWQAozAyLRx0yECHZEbrZ5J
|
||||
JFuPXO/r7saqNuV7L8UpR0Z0SpyXKs7suLGBpYnO/wIDAQABo4GbMIGYMB0GA1Ud
|
||||
DgQWBBRkrc1ZEOlR+93o/6EPrgFeM37AsjAfBgNVHSMEGDAWgBTwU4mH3VYZwBnm
|
||||
IFVvC/wUFdejsjAJBgNVHRMEAjAAMEsGA1UdEQREMEKCD3d3dy5vay5nb29kLmNv
|
||||
bYIMd3d3Lmdvb2QubmV0gQ1nb29kQGdvb2Qub3JngQxhbnlAZ29vZC5jb22HBMCo
|
||||
AAEwDQYJKoZIhvcNAQELBQADggEBAJ/gHSUGV0LahCqlFzhi4iP5JTleZlhsqOQd
|
||||
S2I6KV24gC+Hz4NHv4XhYv9mqZbivNSpf6+TV+77wcncfmkeAGqYMVXVt8DlJ7co
|
||||
NiKJZu3e2InmhLm5b6cYRidPhPEM7qYpxIhjpia1v7U83nNWvwEITmC0H0Qp3Cuf
|
||||
dv1EjAyGZsER05jBsy0qqH/64+djqd92zKNKCEaWXkTlC1XE+/PbEb94X8YbQaUn
|
||||
/wpvioqQ5rv+Bk2Jss23DDh0zOdWrCbKPc9BfsWCfLZYfOAyn5iH1vNdCVd85ggJ
|
||||
YyHBQ4JiF/uqkHZ7iQJ1QinJIJruAsC0BV0S3mdGgGQAmTT3m84=
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,28 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCnlPu+irAiJq5p
|
||||
1oRI57hEyFFVT20enklmXPXIntlgXzU8kn1d8RFMIlCjDcE1FtV5cTIjia8wxy4X
|
||||
B3lwqrL+A/nJ8RXTVBumoAIqEgr3Q2P18zZA6JgTzUWa9DM/qPtAVi3QToniS6m+
|
||||
PQPxnY2uLSRcMZ7n6FuAs+Rm+eHS+8kKTsARDaKo7g2l7i4egPHcZc2jYlvoEo1/
|
||||
6cywk8ujuypS5kDT+YUNU81G8p+Krps5sVR1tj+o9U8eT1UFZm47162TfkbbJNJD
|
||||
0qIZE2ByhZACjMDItHHTIQIdkRutnkkkW49c7+vuxqo25XsvxSlHRnRKnJcqzuy4
|
||||
sYGlic7/AgMBAAECggEAEnrYZAOxNqLjWuKABfYfmN4qMeknVFgKKhKYO/5gZEM7
|
||||
gKl6z7A0wxuJnuF2a99PvSuhZs/ZFNzyFTIKz0TTpjVUB1Phn0NIJVDBzFffA7NX
|
||||
w5iFZBUCKDTbtyG0wRFmW4rlVHJEvEKxvjvGQo+oPwvVVaFXL6Ws6X1s83oc0AIs
|
||||
U3NKt8Q69o5pMHUo4Cv8Lgv41J2dfmxqf81FPLPl8NO+E5zV8OKT1AEisYh98P8R
|
||||
l7E6qWdPVv8hbqmtpXx2rDvUdooaNZPBczjbb/b6zdqxkR3Weu6xBFKTIJAsb7hi
|
||||
QI/DNxRTKnlDt8QFZi37KwkXAtSIQb7rjZ2OVOGfgQKBgQDQs5+u1ufRxi65Vw/8
|
||||
lkVjuB0L5+2Z58HlNrB8+iXqh9eovph17Y23ADaCUGEgEUyK3SfA2SFaj0C9nGtf
|
||||
SgqI2btQQm53sYq/MDNxKf9f0hJ0K0EK0LVyyl4fmGTSexrz+sEYPmp27/RhFSAR
|
||||
f+uccT0lI/V1V8NKkSKAK30zvwKBgQDNj7FK/+ER7e1+gE5CWKEimOPys3hd91Il
|
||||
2hNWOzllPtOj5C9qayG18XNYZm0+YqQtYZLhV5REMxY2sNtpfMxtqkjUrZnuaqy0
|
||||
thhQQP8BRS7eoyOgZ4lAvizsroAqvM9Hqxu7EMspBVLvKDoyGf+L4QsvWB6A7K9q
|
||||
4EjDrx00wQKBgCxh1paG6zuoKq2Nfz/W8SC4uaybgOLW71wAWl3pkICkrM8c4S1K
|
||||
/HUrXWwvDciVBTMOvvJ6+mXYywrHpenYxA7ARt5Vkkpv/jKUXIw3QzCsavI7dJSJ
|
||||
N90Wfhe3/9DnDx9NdxzhwSBT/SNcK7qs+n0Fc9xfHkb7B/Pmk3CwTurfAoGAKlf7
|
||||
MXPcLRFR5skPVeNj7fiInCoUFWco6NsvOIginpR+jDgo/EbtPslp9T/EKSGwqBh9
|
||||
ZSXhSNstLD7qM6Sdh8mYDxdjqhUXVnJcN8vru5tAuGPqptQtFcUXA/o+NI+IMz8w
|
||||
Cyy+bMjH+LPUqRVp6qqE30/LmMsop19kHcsovQECgYEArGQs1WwBCkKCyjAbUOXF
|
||||
m7pTgqrVEA/+ACrB2/4lCNgBwRvo2/b23pceEIekfcfzlJnsy0i73Jbh6OV5yk1N
|
||||
Glq+druyWBpK6Ao9emVeLWBJVinSB7WMZ2XPPKEUHVQkYSN0rMuBisEa07lai01E
|
||||
RxbCxTFtyUMpmWzDwgiwPbM=
|
||||
-----END PRIVATE KEY-----
|
||||
@@ -0,0 +1,21 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDgTCCAmmgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAZMRcwFQYDVQQDDA5UZXN0
|
||||
IE5DIHN1YiBDQTAgFw0xNjA3MDkxNDQ4MTJaGA8yMTE2MDcxMDE0NDgxMlowUDEi
|
||||
MCAGA1UECgwZQmFkIE5DIFRlc3QgQ2VydGlmaWNhdGUgOTEVMBMGA1UEAwwMd3d3
|
||||
Lmdvb2QuY29tMRMwEQYDVQQDDApKb2UgQmxvZ2dzMIIBIjANBgkqhkiG9w0BAQEF
|
||||
AAOCAQ8AMIIBCgKCAQEA9Y+SgizcSJ9TIHvJf0k3cnBDWx8xJKurrmpiuvQMl1YY
|
||||
lzmI4Qxojr5CRDSvCZh50xtF4CDMXW1MnTtYelFhfSmQ09M6lyfjMF+hrYTFkDMX
|
||||
Rz8WhtN6/YP80xuy7NuhsA00/hUJKqsAKT8ggwlf++0e+L0ELiu9dmB46zaxWzr4
|
||||
z+DigvrA+O7xrpiD/NscLNK02uIURKPKqlPL5LxUenC9ROFGNAIYJoWzsjxoVD0D
|
||||
X4bf0COBRzGlLFUHN4FY8LBwGhTcQ+hvsYn0JbT913daX46BuEkrT2V2plCsFDXz
|
||||
TOtKAHEBm/U4slrp1F3CPsXeqdqnB+3Ktaj+UQ5ZRwIDAQABo4GaMIGXMB0GA1Ud
|
||||
DgQWBBSauJ1kxBbvxrSyMER4Eh+hEnOo/TAfBgNVHSMEGDAWgBTwU4mH3VYZwBnm
|
||||
IFVvC/wUFdejsjAJBgNVHRMEAjAAMEoGA1UdEQRDMEGCDHd3dy5nb29kLmNvbYIO
|
||||
b3RoZXIuZ29vZC5jb22BDWdvb2RAZ29vZC5vcmeBDGFueUBnb29kLmNvbYcEwKgA
|
||||
ATANBgkqhkiG9w0BAQsFAAOCAQEAGrRJCrSxYLrkJ2MUyaMmJTrhfijIw9ZdYRLx
|
||||
lkCeW+i6qIV58JQKZeRQVVRJSUEV9OGWn6/46xZZdZWpJIab0EtoNHlMQoB1xni/
|
||||
1D8+gyOdiWy4jgg83arMMulre37T256vOGtNOu7PpDQCoPWCJkb9xuMt3RJrK8N/
|
||||
tFYB8TvWATtY/LGzk9Tmm+C7hNxsWx0l+ewxlqdHvpc7xwXuf8u7Ise0JkCDi8NY
|
||||
z6BxnUyWJ83G20npGnAWXJoaXNDcY0H75dGni3WcRPTAayboEr4xjR9Xqiu3bzlZ
|
||||
eVdPGwLwbgkvj7NDCQDphHl0HseTUToHGJrVj8dbR4lV10gogA==
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,28 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQD1j5KCLNxIn1Mg
|
||||
e8l/STdycENbHzEkq6uuamK69AyXVhiXOYjhDGiOvkJENK8JmHnTG0XgIMxdbUyd
|
||||
O1h6UWF9KZDT0zqXJ+MwX6GthMWQMxdHPxaG03r9g/zTG7Ls26GwDTT+FQkqqwAp
|
||||
PyCDCV/77R74vQQuK712YHjrNrFbOvjP4OKC+sD47vGumIP82xws0rTa4hREo8qq
|
||||
U8vkvFR6cL1E4UY0AhgmhbOyPGhUPQNfht/QI4FHMaUsVQc3gVjwsHAaFNxD6G+x
|
||||
ifQltP3Xd1pfjoG4SStPZXamUKwUNfNM60oAcQGb9TiyWunUXcI+xd6p2qcH7cq1
|
||||
qP5RDllHAgMBAAECggEBAJYazkcOnxUxd0HrCU/qdJ9aqoG//m1ZFxgF5hY76ppz
|
||||
wZJnVBmlWSCwgpdo0Pp/nzCBgmQwCFyv3F5ckYgryPkWeHZTr4QImOLQAmesOowb
|
||||
/wXJNb7y9UKU9O4jB2usEhko6ZTLTRAs+Ws9MGWJTIgV+ZG5ER4cFLOQ4zl89Es7
|
||||
/Z9dQFs4c9SqLfyEY3kbXqSQ2uwbUPvZxk22gEmT1OPJGCLAV/fVIaHlGMwacvDV
|
||||
W2xqNd+uhkqm2ym5u/ROKOCg0jNDkbyHvfTaqCuM1um92nV5kE+JdPiZvAF9XYsf
|
||||
BDWCaYZW7b97drptp3LOCCptjNAqXc0PH8inVvqbjnkCgYEA/jK6BnXM4lzlLUPt
|
||||
Bzec+poqyS6uUjP81Ug5CRP5kr+H9GkpBT3iUIU73S+F6Tg6YpobiSP4vpp5kB1p
|
||||
iZxApte404EtVtOd1M08fx1rQVnyc8RjDENvYQk5hefOg3DrJ28iQzN/c+m8tHfb
|
||||
OjBp90PFDGSsVvvQjJlwtB5oj+0CgYEA900sE2hBGpm5jXgER7CaahcDnHp9qSlB
|
||||
lsQYDTDu751V11iRyUVUqZ8IzmgOu53vXbuCpfuQO0H2aFhbe16fCk223eLPJHWh
|
||||
cGl3FUeLi+uwShMiRWAikMSQ/fUxoOfeal+N+VgiGYZtT7u2s1mpm83/mw3J/gaT
|
||||
CQI19A67H4MCgYBX7xZZC8EvgTEqYngJahycuF4asFJPT3qkEVLhqA5KzITscMBm
|
||||
9sxmTGC0GC97yR6xY1wpKc9vqCJrTzFmEC5xSOjACcy0X4oWxlSqKHQk7Eep8oLN
|
||||
CDrsV3OVteXDpHlEb/ZrRtJNN8s2psuoqnzNs5zjt6PCh2PSb3YEaQyE1QKBgQCp
|
||||
6VfzLZotkJkwXdly+B/f7FgK1w4nf7UUxT5RMeG4uD0WbEAeLYhx0lbWmiAlP+oK
|
||||
WJ73M9RxIm0OXEbeiLB0/9g4s3Dm9/snpQ6wjCuQwyqoemT9jYOyO5vzINgsWaMz
|
||||
Ktv9CVTEfNv2AF8S8vPZnLuV6O9znUjA08gGG2jtyQKBgBisaBV0L3zTllp/KxiN
|
||||
rFf3u42XibhfTuiyaJtUDQftkvfW727nE4nTZ9Q7uVXuK4xdmihfA0htsMbHX7Jc
|
||||
1R6SzJ8x8T/2HXsiHLubqbANWfOYxYxlvmfZ7/Bv1GhBIq4d7A8a/Eyz34j9w/xs
|
||||
C34TbBAlm79KVANPHT+CJoR1
|
||||
-----END PRIVATE KEY-----
|
||||
@@ -0,0 +1,18 @@
|
||||
-----BEGIN TRUSTED CERTIFICATE-----
|
||||
MIIC7DCCAdSgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
|
||||
IENBMCAXDTE2MDExNTA4MTk0OVoYDzIxMTYwMTE2MDgxOTQ5WjANMQswCQYDVQQD
|
||||
DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvd
|
||||
j9IxsogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOz
|
||||
n1k50DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/W
|
||||
l9rFQtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0l
|
||||
YW5INvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAc
|
||||
ZGh7r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9
|
||||
CLNNsUcCAwEAAaNQME4wHQYDVR0OBBYEFLQRM/HX4l73U54gIhBPhga/H8leMB8G
|
||||
A1UdIwQYMBaAFI71Ja8em2uEPXyAmslTnE1y96NSMAwGA1UdEwQFMAMBAf8wDQYJ
|
||||
KoZIhvcNAQELBQADggEBADnZ9uXGAdwfNC3xuERIlBwgLROeBRGgcfHWdXZB/tWk
|
||||
IM9ox88wYKWynanPbra4n0zhepooKt+naeY2HLR8UgwT6sTi0Yfld9mjytA8/DP6
|
||||
AcqtIDDf60vNI00sgxjgZqofVayA9KShzIPzjBec4zI1sg5YzoSNyH28VXFstEpi
|
||||
8CVtmRYQHhc2gDI9MGge4sHRYwaIFkegzpwcEUnp6tTVe9ZvHawgsXF/rCGfH4M6
|
||||
uNO0D+9Md1bdW7382yOtWbkyibsugqnfBYCUH6hAhDlfYzpba2Smb0roc6Crq7HR
|
||||
5HpEYY6qEir9wFMkD5MZsWrNRGRuzd5am82J+aaHz/4wCDAGBgRVHSUA
|
||||
-----END TRUSTED CERTIFICATE-----
|
||||
@@ -0,0 +1,18 @@
|
||||
-----BEGIN TRUSTED CERTIFICATE-----
|
||||
MIIC7DCCAdSgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
|
||||
IENBMCAXDTE2MDExNTA4MTk0OVoYDzIxMTYwMTE2MDgxOTQ5WjANMQswCQYDVQQD
|
||||
DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvd
|
||||
j9IxsogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOz
|
||||
n1k50DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/W
|
||||
l9rFQtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0l
|
||||
YW5INvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAc
|
||||
ZGh7r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9
|
||||
CLNNsUcCAwEAAaNQME4wHQYDVR0OBBYEFLQRM/HX4l73U54gIhBPhga/H8leMB8G
|
||||
A1UdIwQYMBaAFI71Ja8em2uEPXyAmslTnE1y96NSMAwGA1UdEwQFMAMBAf8wDQYJ
|
||||
KoZIhvcNAQELBQADggEBADnZ9uXGAdwfNC3xuERIlBwgLROeBRGgcfHWdXZB/tWk
|
||||
IM9ox88wYKWynanPbra4n0zhepooKt+naeY2HLR8UgwT6sTi0Yfld9mjytA8/DP6
|
||||
AcqtIDDf60vNI00sgxjgZqofVayA9KShzIPzjBec4zI1sg5YzoSNyH28VXFstEpi
|
||||
8CVtmRYQHhc2gDI9MGge4sHRYwaIFkegzpwcEUnp6tTVe9ZvHawgsXF/rCGfH4M6
|
||||
uNO0D+9Md1bdW7382yOtWbkyibsugqnfBYCUH6hAhDlfYzpba2Smb0roc6Crq7HR
|
||||
5HpEYY6qEir9wFMkD5MZsWrNRGRuzd5am82J+aaHz/4wDDAKBggrBgEFBQcDAg==
|
||||
-----END TRUSTED CERTIFICATE-----
|
||||
@@ -0,0 +1,18 @@
|
||||
-----BEGIN TRUSTED CERTIFICATE-----
|
||||
MIIC7DCCAdSgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
|
||||
IENBMCAXDTE2MDExNTA4MTk0OVoYDzIxMTYwMTE2MDgxOTQ5WjANMQswCQYDVQQD
|
||||
DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvd
|
||||
j9IxsogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOz
|
||||
n1k50DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/W
|
||||
l9rFQtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0l
|
||||
YW5INvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAc
|
||||
ZGh7r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9
|
||||
CLNNsUcCAwEAAaNQME4wHQYDVR0OBBYEFLQRM/HX4l73U54gIhBPhga/H8leMB8G
|
||||
A1UdIwQYMBaAFI71Ja8em2uEPXyAmslTnE1y96NSMAwGA1UdEwQFMAMBAf8wDQYJ
|
||||
KoZIhvcNAQELBQADggEBADnZ9uXGAdwfNC3xuERIlBwgLROeBRGgcfHWdXZB/tWk
|
||||
IM9ox88wYKWynanPbra4n0zhepooKt+naeY2HLR8UgwT6sTi0Yfld9mjytA8/DP6
|
||||
AcqtIDDf60vNI00sgxjgZqofVayA9KShzIPzjBec4zI1sg5YzoSNyH28VXFstEpi
|
||||
8CVtmRYQHhc2gDI9MGge4sHRYwaIFkegzpwcEUnp6tTVe9ZvHawgsXF/rCGfH4M6
|
||||
uNO0D+9Md1bdW7382yOtWbkyibsugqnfBYCUH6hAhDlfYzpba2Smb0roc6Crq7HR
|
||||
5HpEYY6qEir9wFMkD5MZsWrNRGRuzd5am82J+aaHz/4wDDAKBggrBgEFBQcDAQ==
|
||||
-----END TRUSTED CERTIFICATE-----
|
||||
@@ -0,0 +1,18 @@
|
||||
-----BEGIN TRUSTED CERTIFICATE-----
|
||||
MIIC7DCCAdSgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
|
||||
IENBMCAXDTE2MDExNTA4MTk0OVoYDzIxMTYwMTE2MDgxOTQ5WjANMQswCQYDVQQD
|
||||
DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvd
|
||||
j9IxsogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOz
|
||||
n1k50DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/W
|
||||
l9rFQtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0l
|
||||
YW5INvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAc
|
||||
ZGh7r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9
|
||||
CLNNsUcCAwEAAaNQME4wHQYDVR0OBBYEFLQRM/HX4l73U54gIhBPhga/H8leMB8G
|
||||
A1UdIwQYMBaAFI71Ja8em2uEPXyAmslTnE1y96NSMAwGA1UdEwQFMAMBAf8wDQYJ
|
||||
KoZIhvcNAQELBQADggEBADnZ9uXGAdwfNC3xuERIlBwgLROeBRGgcfHWdXZB/tWk
|
||||
IM9ox88wYKWynanPbra4n0zhepooKt+naeY2HLR8UgwT6sTi0Yfld9mjytA8/DP6
|
||||
AcqtIDDf60vNI00sgxjgZqofVayA9KShzIPzjBec4zI1sg5YzoSNyH28VXFstEpi
|
||||
8CVtmRYQHhc2gDI9MGge4sHRYwaIFkegzpwcEUnp6tTVe9ZvHawgsXF/rCGfH4M6
|
||||
uNO0D+9Md1bdW7382yOtWbkyibsugqnfBYCUH6hAhDlfYzpba2Smb0roc6Crq7HR
|
||||
5HpEYY6qEir9wFMkD5MZsWrNRGRuzd5am82J+aaHz/4wCKAGBgRVHSUA
|
||||
-----END TRUSTED CERTIFICATE-----
|
||||
@@ -0,0 +1,15 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIICRDCCASygAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
|
||||
IENBMCAXDTE2MDMyMDA2MjcyN1oYDzIxMTYwMzIxMDYyNzI3WjANMQswCQYDVQQD
|
||||
DAJDQTB8MA0GCSqGSIb3DQEBAQUAA2sAMGgCYQC3wNLc1A9gAjz1H94ozPrLOhE2
|
||||
R8c6RQjkUIALCOuw8xbZV+AEDSqP11Bw8MVzvmpksR9s1idJhLOugwMNTHfTXJjV
|
||||
DWoQh9ofR51J5sOph4yDhQBXRmiuvqMDj+a81UkCAwEAAaNQME4wHQYDVR0OBBYE
|
||||
FKrzei/LKJop6yShiJupKskW0ZQcMB8GA1UdIwQYMBaAFI71Ja8em2uEPXyAmslT
|
||||
nE1y96NSMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAFr4hjVtLuZz
|
||||
gxLILAOREEtanckfnapUrhTLukog9Q8uzqMUE+YDEhkcP4YAVjcab6HaXrbcxXsn
|
||||
zn+v+GPszD9G3doGbUjuwEEAHz+k/9sjsn8QAGw/XslYhd5dktaRRCqaTNiWT+Ks
|
||||
xKntAsgXcgWNIpvGikzTB/W7IrjIV8/S1JjLABtoY88tFUX81Ohr3bFFsRc9EHVS
|
||||
MtGnEwfoBOSlCUjaTWBNHHi1HstK9sG2SNT/nhN1HATk/aiCiQRKr/bm6ezPC2If
|
||||
6mRidaNiQN8+vzvtn86BqtRJOEi8jj5CBax6IqwfE+lDZIwT7H9C9Cu8Yp4mTM0x
|
||||
wwzRDnFVisM=
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,15 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIICSjCCAdSgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
|
||||
IENBMCAXDTE2MDMyMDA2MjcyN1oYDzIxMTYwMzIxMDYyNzI3WjANMQswCQYDVQQD
|
||||
DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvd
|
||||
j9IxsogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOz
|
||||
n1k50DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/W
|
||||
l9rFQtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0l
|
||||
YW5INvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAc
|
||||
ZGh7r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9
|
||||
CLNNsUcCAwEAAaNQME4wHQYDVR0OBBYEFLQRM/HX4l73U54gIhBPhga/H8leMB8G
|
||||
A1UdIwQYMBaAFFjzE/eu8wvKwzb2aODw52C+0gLVMAwGA1UdEwQFMAMBAf8wDQYJ
|
||||
KoZIhvcNAQELBQADYQCZM1sSpIyjyuGirBYvezFryUq5EyZiME3HIHJ7AbmquPtE
|
||||
LcoE8lwxEYXl7OTbLZHxIKkt6+WX2TL/0yshJLq/42nh5DZwyug7fIITmkzmzidF
|
||||
rbnl7fIop7OJX/kELbY=
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,18 @@
|
||||
-----BEGIN TRUSTED CERTIFICATE-----
|
||||
MIIC7DCCAdSgAwIBAgIBAjANBgkqhkiG9w0BAQQFADASMRAwDgYDVQQDDAdSb290
|
||||
IENBMCAXDTE2MDMyMDA2MjcyN1oYDzIxMTYwMzIxMDYyNzI3WjANMQswCQYDVQQD
|
||||
DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvd
|
||||
j9IxsogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOz
|
||||
n1k50DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/W
|
||||
l9rFQtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0l
|
||||
YW5INvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAc
|
||||
ZGh7r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9
|
||||
CLNNsUcCAwEAAaNQME4wHQYDVR0OBBYEFLQRM/HX4l73U54gIhBPhga/H8leMB8G
|
||||
A1UdIwQYMBaAFI71Ja8em2uEPXyAmslTnE1y96NSMAwGA1UdEwQFMAMBAf8wDQYJ
|
||||
KoZIhvcNAQEEBQADggEBACTmLO0KOkXFNjj6hXozC9GzQYMXdCfNmgMuetk8xdVm
|
||||
TqkF/qIGK2FBWn91IH0/9ydZbL83EKjPjqjwqzXqExJ0Un+fy7XbYMKtjGJ21egJ
|
||||
x97jzKey5phEwRD/4fJ+PCml9eE/SNzBV0xKSDq4qQYvSJ3GF6KCATVlr0bDzQJZ
|
||||
yTY3FeNoy+K7Mb0rHtsGru60C/Ft1dl9uiJ+yKXMiCxPcDjYb+95mA9QJ1kXfR8J
|
||||
JVfeKhEEK+QIVpz/37aQ4jx/zbGblFsruALK22aLnpgrfUzrsYQ8W8T/DV2dV1ra
|
||||
4wHz/QtlE4isInOaK2+pvXwyGar+1/s3+VxXEiPlZ7IwCDAGBgRVHSUA
|
||||
-----END TRUSTED CERTIFICATE-----
|
||||
@@ -0,0 +1,18 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIC7DCCAdSgAwIBAgIBAjANBgkqhkiG9w0BAQQFADASMRAwDgYDVQQDDAdSb290
|
||||
IENBMCAXDTE2MDMyMDA2MjcyN1oYDzIxMTYwMzIxMDYyNzI3WjANMQswCQYDVQQD
|
||||
DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvd
|
||||
j9IxsogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOz
|
||||
n1k50DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/W
|
||||
l9rFQtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0l
|
||||
YW5INvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAc
|
||||
ZGh7r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9
|
||||
CLNNsUcCAwEAAaNQME4wHQYDVR0OBBYEFLQRM/HX4l73U54gIhBPhga/H8leMB8G
|
||||
A1UdIwQYMBaAFI71Ja8em2uEPXyAmslTnE1y96NSMAwGA1UdEwQFMAMBAf8wDQYJ
|
||||
KoZIhvcNAQEEBQADggEBACTmLO0KOkXFNjj6hXozC9GzQYMXdCfNmgMuetk8xdVm
|
||||
TqkF/qIGK2FBWn91IH0/9ydZbL83EKjPjqjwqzXqExJ0Un+fy7XbYMKtjGJ21egJ
|
||||
x97jzKey5phEwRD/4fJ+PCml9eE/SNzBV0xKSDq4qQYvSJ3GF6KCATVlr0bDzQJZ
|
||||
yTY3FeNoy+K7Mb0rHtsGru60C/Ft1dl9uiJ+yKXMiCxPcDjYb+95mA9QJ1kXfR8J
|
||||
JVfeKhEEK+QIVpz/37aQ4jx/zbGblFsruALK22aLnpgrfUzrsYQ8W8T/DV2dV1ra
|
||||
4wHz/QtlE4isInOaK2+pvXwyGar+1/s3+VxXEiPlZ7I=
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,18 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIC7DCCAdSgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
|
||||
IENBMCAXDTE2MDExNTA4MTk0OVoYDzIxMTYwMTE2MDgxOTQ5WjANMQswCQYDVQQD
|
||||
DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvd
|
||||
j9IxsogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOz
|
||||
n1k50DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/W
|
||||
l9rFQtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0l
|
||||
YW5INvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAc
|
||||
ZGh7r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9
|
||||
CLNNsUcCAwEAAaNQME4wHQYDVR0OBBYEFLQRM/HX4l73U54gIhBPhga/H8leMB8G
|
||||
A1UdIwQYMBaAFI71Ja8em2uEPXyAmslTnE1y96NSMAwGA1UdEwQFMAMBAf8wDQYJ
|
||||
KoZIhvcNAQELBQADggEBADnZ9uXGAdwfNC3xuERIlBwgLROeBRGgcfHWdXZB/tWk
|
||||
IM9ox88wYKWynanPbra4n0zhepooKt+naeY2HLR8UgwT6sTi0Yfld9mjytA8/DP6
|
||||
AcqtIDDf60vNI00sgxjgZqofVayA9KShzIPzjBec4zI1sg5YzoSNyH28VXFstEpi
|
||||
8CVtmRYQHhc2gDI9MGge4sHRYwaIFkegzpwcEUnp6tTVe9ZvHawgsXF/rCGfH4M6
|
||||
uNO0D+9Md1bdW7382yOtWbkyibsugqnfBYCUH6hAhDlfYzpba2Smb0roc6Crq7HR
|
||||
5HpEYY6qEir9wFMkD5MZsWrNRGRuzd5am82J+aaHz/4=
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,18 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIC7DCCAdSgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
|
||||
IENBMCAXDTE2MDExNTA4MTk0OVoYDzIxMTYwMTE2MDgxOTQ5WjANMQswCQYDVQQD
|
||||
DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOsBxQ3RD9TDABcU
|
||||
Uddp+r5s2pLcA/IUN8MnH2PoemxgfJUKfWm+t0VR2mFqyiSeym1V1TkDnuhzui1Y
|
||||
ftOuiN1qVs0s6xBcU0+S9vWzYIu5SFTkOgB5APYamCLfbDw3xFTQvRs55UfR+yof
|
||||
T/sN6Enq6AhptqnJ/eYVX9EuLTDwV55Kptb4gv9JQs6v01aEHzJ9KGlK2zKpS9Am
|
||||
E67xNkwPeXwbzDdqXgr2a+aSrZjtHUfOsV5gZwH8XPAY0kFmrwhHIJsYZInsZhFo
|
||||
nil/9pMB8gHFU2EHq3LXbs4GUouQoIf+m3OmgeHCI+t7nAfQgU94FJzq+r6p4WxQ
|
||||
KI7cotkCAwEAAaNQME4wHQYDVR0OBBYEFAFonW/5R1NkYk6W28NxJdMyTlCtMB8G
|
||||
A1UdIwQYMBaAFI71Ja8em2uEPXyAmslTnE1y96NSMAwGA1UdEwQFMAMBAf8wDQYJ
|
||||
KoZIhvcNAQELBQADggEBAJIyn7fl5QppxeRmCLhj18Ic+Nft5LMCvaOkv9HNctL+
|
||||
f1Qe2RgtdrMbHpYykXYrOI4KDt4LhLLInGjXNgV+lp8tSi/ok26wNIpwjf68bfP+
|
||||
nWNHi2Lt0Eeo9Wpq2VqdsHct98VvBXyuLysbThEJVbrLRsgvBWxdEzbf5RnwdWd5
|
||||
ZTDQyHgP1/gabl+AyvDFne101IyEA3i90NBhQ8NmSNn4ShTTrerbZSiWhy4eQEzo
|
||||
PeWfUVERV28/0D4XIt/fFuF3M/0RbEgKq2wlDMCT8+W/hWmcZsdyt4xSyiGyjh9Y
|
||||
ldYmdyOrlfOGVzkZ63GTOAC68SNVCXJg3cOmfEczkRw=
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,18 @@
|
||||
-----BEGIN TRUSTED CERTIFICATE-----
|
||||
MIIC7DCCAdSgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
|
||||
IENBMCAXDTE2MDExNTA4MTk0OVoYDzIxMTYwMTE2MDgxOTQ5WjANMQswCQYDVQQD
|
||||
DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvd
|
||||
j9IxsogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOz
|
||||
n1k50DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/W
|
||||
l9rFQtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0l
|
||||
YW5INvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAc
|
||||
ZGh7r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9
|
||||
CLNNsUcCAwEAAaNQME4wHQYDVR0OBBYEFLQRM/HX4l73U54gIhBPhga/H8leMB8G
|
||||
A1UdIwQYMBaAFI71Ja8em2uEPXyAmslTnE1y96NSMAwGA1UdEwQFMAMBAf8wDQYJ
|
||||
KoZIhvcNAQELBQADggEBADnZ9uXGAdwfNC3xuERIlBwgLROeBRGgcfHWdXZB/tWk
|
||||
IM9ox88wYKWynanPbra4n0zhepooKt+naeY2HLR8UgwT6sTi0Yfld9mjytA8/DP6
|
||||
AcqtIDDf60vNI00sgxjgZqofVayA9KShzIPzjBec4zI1sg5YzoSNyH28VXFstEpi
|
||||
8CVtmRYQHhc2gDI9MGge4sHRYwaIFkegzpwcEUnp6tTVe9ZvHawgsXF/rCGfH4M6
|
||||
uNO0D+9Md1bdW7382yOtWbkyibsugqnfBYCUH6hAhDlfYzpba2Smb0roc6Crq7HR
|
||||
5HpEYY6qEir9wFMkD5MZsWrNRGRuzd5am82J+aaHz/4wDKAKBggrBgEFBQcDAg==
|
||||
-----END TRUSTED CERTIFICATE-----
|
||||
@@ -0,0 +1,18 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIC6jCCAdKgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
|
||||
IENBMB4XDTE2MDExNTA4MTk0OVoXDTE2MDExNDA4MTk0OVowDTELMAkGA1UEAwwC
|
||||
Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCWnaQ9AEscX8bL3Y/S
|
||||
MbKIFczEhixc4mmLhPSno1PfkeO/UYn78HwQDTutrDVidfV///RuVI8FppIjs59Z
|
||||
OdA5GLAQQN5ic4pOsI7f3OfJQSJUhIAIKbw1PIbfMN7dtCT/fmKlwHroKhY/1pfa
|
||||
xULbL2lkkcsI11ZaeX8bhEHpTZ13CRCobCkzRMbAVGXm6OPydQVqZJVswPT9JWFu
|
||||
SDbwwAMHBdZ85RH9GOhKLdNyDDcoNjExOIXocY3YAknIvBmJxYqxP6I16qqQHGRo
|
||||
e69naloGVA9Q4fm09r461M4/Hkx9xncyPqJY7dvddNiSFGqo98s0WJGofBSxfQiz
|
||||
TbFHAgMBAAGjUDBOMB0GA1UdDgQWBBS0ETPx1+Je91OeICIQT4YGvx/JXjAfBgNV
|
||||
HSMEGDAWgBSO9SWvHptrhD18gJrJU5xNcvejUjAMBgNVHRMEBTADAQH/MA0GCSqG
|
||||
SIb3DQEBCwUAA4IBAQAW1MwF8Rfcgj6zHutqzzt7RQB5GT1b/vJNzgUyGTRK9kch
|
||||
HOw7rM9WpfP1cMEjhLwGJEZkHPb0DA8rZ4uFERuoZky04/vTum0GgLXmlnSTaAk5
|
||||
ImJyJn9aFR+sbD6QyfkSmQk9yS48AHom62IfA9yVwQStq3HvI038oVEb2IO5TE+L
|
||||
CTX8dVFl4ZgYMVWTLYGzvECCvM42enR9QT0yp+9k8dZ9DcGzknZouoDd1BC2u05V
|
||||
TJIviKNZMA/UEsON5QL02h25r1YRNlegeC4zl1DbJXXhJfDiacMZD7AA6NWMdwlk
|
||||
7jDeEHIItT7V/x0NWllSqSPPZIsuyuuwFNmLZHfw
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,13 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIB5QIBADANBgkqhkiG9w0BAQEFAASCAc8wggHLAgEAAmEAt8DS3NQPYAI89R/e
|
||||
KMz6yzoRNkfHOkUI5FCACwjrsPMW2VfgBA0qj9dQcPDFc75qZLEfbNYnSYSzroMD
|
||||
DUx301yY1Q1qEIfaH0edSebDqYeMg4UAV0Zorr6jA4/mvNVJAgMBAAECYQCJAsu3
|
||||
QJ9eNQ0CsQpTXdO6aMegs5CHkCX7J1Lx52rl+7uTv4QXQUH1EtS2AbEYhmdGzMFN
|
||||
ZlBrg1vDsW/yn02NZzvT6xT/kvzFhQVw1i8B0YyB8wPao3f2ZxPkAfeoAAECMQDa
|
||||
6VkNYlHgPOlTtwU1WYUirFczpipQsuk/lIf7B3+rVRUHoAE4nbeIRJgkKZaJEAEC
|
||||
MQDW4pYsyN79HEqFpOFlfsrERw3y4hLRXGeHxbfJFdAe7SUfNj28ZI2EPFE0DJhX
|
||||
RUkCMA39M2+jhM/rlI2A+Jg8LEHW+YuXZsTZagZiG35zMDlmqn1eQDW5/mx61a4Z
|
||||
6kDAAQIwIlbZWtTK1bX0rsC3iEmny4/zSbIZAb37iXXuNcM3nAmXmhJH8Vg8STp+
|
||||
W4v7uE6JAjEAwiB9wCVwG4UhvKNQ4Wd2mfJiKZQNF4rL4ID0g+Wk6kX67c7u2hfH
|
||||
sSaluw9nM91s
|
||||
-----END PRIVATE KEY-----
|
||||
@@ -0,0 +1,28 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCWnaQ9AEscX8bL
|
||||
3Y/SMbKIFczEhixc4mmLhPSno1PfkeO/UYn78HwQDTutrDVidfV///RuVI8FppIj
|
||||
s59ZOdA5GLAQQN5ic4pOsI7f3OfJQSJUhIAIKbw1PIbfMN7dtCT/fmKlwHroKhY/
|
||||
1pfaxULbL2lkkcsI11ZaeX8bhEHpTZ13CRCobCkzRMbAVGXm6OPydQVqZJVswPT9
|
||||
JWFuSDbwwAMHBdZ85RH9GOhKLdNyDDcoNjExOIXocY3YAknIvBmJxYqxP6I16qqQ
|
||||
HGRoe69naloGVA9Q4fm09r461M4/Hkx9xncyPqJY7dvddNiSFGqo98s0WJGofBSx
|
||||
fQizTbFHAgMBAAECggEABdXHpiFbx5aiUgWca81HGGSX0UlNcK/I3QHipJf8SN4T
|
||||
D7dt/Be+BrUsibbxPoZJY5Mb+iZGgDaK1N1BoChQO9YMBCUvOGs3gYLvlhat2Csw
|
||||
1Etp1mcfhoR4yS7Qg5BWGpvf4IILgPEYeZKrwWsBAxLcJ2xKjGYjT1ADr6I5F3u+
|
||||
FYN+bvlXxr07GccfS+UHt04oT0dHwxQzFaJj+yqKWGo2IFtPqtr6Sgoh9a+yFYIi
|
||||
8a9MigTTt+IyJ55OuC/FHRf1PofprftADFts78k43qxWtrxSrQVdlNXp1lpZOtuR
|
||||
7gvB/r3a2byDYxCxYVu98tQuOfW909TdDgPmEJjcAQKBgQDHcTYi+zcGKooN3tfK
|
||||
Oc6hnFXAYTNpYp074NfIYB8i10CwbvWta1FDoi3iRqlQFwg+pu12UefZsj21F+aF
|
||||
v2eGP33kQ6yiXJQ3j7jam7dY+tZ6xb0dthm+X/INuHp/HbSb1qKFmSO2rmMDQg+e
|
||||
Crqts9+t5Xk04ewTgpySLZjvRwKBgQDBU85Ls3s8osre5EmVBRd5qBt6ILnjtdoa
|
||||
UxrrrWopRx2q3HsI41VhKFx0PGs6ia0c6+9GFR6wX/Qevj85DADbzHDA5XEZq98q
|
||||
8yH4lme2Uj2gOlWqyhDeC/g4S+MsbNoIaUOZbMGg/phyAe20HvtvD7MUhZ/2rkta
|
||||
U5UjFpouAQKBgQC/+vU+tQ0hTV94vJKBoiWKIX/V4HrprbhmxCdSRVyTYBpv+09X
|
||||
8J7X+MwsLRKb+p/AF1UreOox/sYxhOEsy7MuYf2f9Zi+7VjrJtis7gmOiF5e7er+
|
||||
J6UeQSMyG+smY4TQIcptyZy8I59Bqpx36CIMRMJClUqYIgTqPubSOzwkzwKBgENB
|
||||
9LNBbc5alFmW8kJ10wTwBx8l44Xk7kvaPbNgUV6q7xdSPTuKW1nBwOhvXJ6w5xj4
|
||||
u/WVw2d4+mT3qucd1e6h4Vg6em6D7M/0Zg0lxk8XrXjg0ozoX5XgdCqhvBboh7IF
|
||||
bQ8jVvm7mS2QnjHb1X196L9q/YvEd1KlYW0jn+ABAoGBAKwArjjmr3zRhJurujA5
|
||||
x/+V28hUf8m8P2NxP5ALaDZagdaMfzjGZo3O3wDv33Cds0P5GMGQYnRXDxcZN/2L
|
||||
/453f0uUObRwFepuv9HzuvPgkTRGpcLFiIHCThiKdyBgPKoq39qjbAyWQcfmW8+S
|
||||
2k24wuH7oUtLlvf05p4cqfEx
|
||||
-----END PRIVATE KEY-----
|
||||
@@ -0,0 +1,28 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDrAcUN0Q/UwwAX
|
||||
FFHXafq+bNqS3APyFDfDJx9j6HpsYHyVCn1pvrdFUdphasoknsptVdU5A57oc7ot
|
||||
WH7TrojdalbNLOsQXFNPkvb1s2CLuUhU5DoAeQD2Gpgi32w8N8RU0L0bOeVH0fsq
|
||||
H0/7DehJ6ugIabapyf3mFV/RLi0w8FeeSqbW+IL/SULOr9NWhB8yfShpStsyqUvQ
|
||||
JhOu8TZMD3l8G8w3al4K9mvmkq2Y7R1HzrFeYGcB/FzwGNJBZq8IRyCbGGSJ7GYR
|
||||
aJ4pf/aTAfIBxVNhB6ty127OBlKLkKCH/ptzpoHhwiPre5wH0IFPeBSc6vq+qeFs
|
||||
UCiO3KLZAgMBAAECggEAWrrGLz1llUjrwf1QU5BRBC/WexiCVXXEyY1TKylYCnt9
|
||||
3bS9EpRVAWhGnZGzFUxQ7sFSnr5tHWWAnX0rCeK6aHFjrbcH0bszVudwfQ+R2J/h
|
||||
8xRh6EjPPDSsQ9pqWR1WqUAloltJz96bz3ljUZPe+Jq+lnDp2sdnROs/oOzo+Zkz
|
||||
ZkesMwX+aR9prRhnT60A0UeQXZyDJFrWMCVnaeO3JUI5RvjZ3xdEgi5jj4AiNUvH
|
||||
x1k/CApynTvJN4LTFncc6qfnyNH/BU0521WKOcTVCI7tWioRIhiX369xR9qqgRfL
|
||||
woifc3UjW1f66eMRTsIeh+smcoG4WkHvmpknVDG74QKBgQD7lOtCRMZr9gKIEWNy
|
||||
pwm1sMS91zuJnaVLEHjIc6Glc9TqDlZOGp5KcAgXA8Tm7TblQXJ+QlGjX6RBdRD6
|
||||
XTHbQcyCJ/5rUU+2a6BBga++moBp2ugLSjc/YSTpzVTRC9+Lw1dZ5czrn3exozQj
|
||||
1/jxdOUVToOomwhpGHoXxVqv3QKBgQDvIlUbvHxrwE8EmBWYjhYZeOTREmzhWNCo
|
||||
6p7zibZPvKyfZxzXSonJ+T1k/pxNlkMg3SuhZozOCdhQtQupauRlrQ4Hzw3Vc6gr
|
||||
Dv5Qew/UwxB02zWjG2PhAfDV1KQgZAwC1g1TCWwqQcV52g5p0kdUgKaPte1P336l
|
||||
YvwmTduNLQKBgQDutNsQEr+OWmsGfjE07Sb6XRIf6qOULJ9UfPmNgKGkoiYoOphL
|
||||
HViJ2ojihXIDhppqplGjWPurHylz7kbAt0KB/om0CYyOeSVAOhhhb1K4cFJdnhZD
|
||||
+BQ5r8vdhzTt8O0X6K3uH2vzOWjRhMAJLngHalmegNPNW+R8C3x1J42nhQKBgF9s
|
||||
q9mtlVjKHL4Qkk2WJWt0uppTZ+9kqZ8+QL+eLIoVGC1j0DZ5IBLgyocKswSi+Zab
|
||||
q1V0vqtZcmCCXmz0or+QFxE2pqaOyISmLwWeleqpDGAVOYok2+5l/9zURcpHIiPf
|
||||
luGT2P3j0RGW2jmQF7a4v76JMnG1FayZm1UNrJbhAoGAGM8s9YbDW2+DaTbbSQbg
|
||||
IBmT+8MLjVczRUmv5Yi8y4z/aEGjsM7032LjFRiR1PUTeAnkKLnII5rdbEo96UDb
|
||||
OMv8SAH3G4lhfS+lq2TSy+XjlAAIOkiI9xW6Xo/KakIOepDzORzY74ayrxqjiyQv
|
||||
uchNPF6GhCMnLZC9AxZs4Fg=
|
||||
-----END PRIVATE KEY-----
|
||||
@@ -0,0 +1,18 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIC7TCCAdWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
|
||||
IENBMCAXDTE2MDExNTA4MTk0OVoYDzIxMTYwMTE2MDgxOTQ5WjAOMQwwCgYDVQQD
|
||||
DANDQTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCWnaQ9AEscX8bL
|
||||
3Y/SMbKIFczEhixc4mmLhPSno1PfkeO/UYn78HwQDTutrDVidfV///RuVI8FppIj
|
||||
s59ZOdA5GLAQQN5ic4pOsI7f3OfJQSJUhIAIKbw1PIbfMN7dtCT/fmKlwHroKhY/
|
||||
1pfaxULbL2lkkcsI11ZaeX8bhEHpTZ13CRCobCkzRMbAVGXm6OPydQVqZJVswPT9
|
||||
JWFuSDbwwAMHBdZ85RH9GOhKLdNyDDcoNjExOIXocY3YAknIvBmJxYqxP6I16qqQ
|
||||
HGRoe69naloGVA9Q4fm09r461M4/Hkx9xncyPqJY7dvddNiSFGqo98s0WJGofBSx
|
||||
fQizTbFHAgMBAAGjUDBOMB0GA1UdDgQWBBS0ETPx1+Je91OeICIQT4YGvx/JXjAf
|
||||
BgNVHSMEGDAWgBSO9SWvHptrhD18gJrJU5xNcvejUjAMBgNVHRMEBTADAQH/MA0G
|
||||
CSqGSIb3DQEBCwUAA4IBAQCnVQGsqB3UipgBdwnxQMQJxaeo6MUdBs0gc3rFg2e9
|
||||
EFoDE92/hX+Ze7YRji6GRDzmRDd/i5gLgn6tMtJZzPPV6pzFsDZ0mB1pHJrObB+q
|
||||
nZVjRFpGFcIm1epXjYRssCQepu92DR7ReSsLqFDSmBROAKfYvt3hdN34W8rp5Gnb
|
||||
2kxm5F+dJrtDIs0C/3hItBkBmZ69KHqSWq5lmBY7K1cpKU6enZFgJEZ+w3pqAPBI
|
||||
jrbxER2qdr4g80hzT9g+YPIlI+PfkGf5jmClugpsJ7ptXEdW1LsdEyZgd2VUZymw
|
||||
rcIp4tupJNvgLC18ZcYcyQ6jMPZOfhfGpNlqZ37jI7Yu
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,18 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIC6zCCAdOgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
|
||||
IENBMCAXDTE2MDMzMDAwMDE1N1oYDzIxMTYwMzMxMDAwMTU3WjANMQswCQYDVQQD
|
||||
DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvd
|
||||
j9IxsogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOz
|
||||
n1k50DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/W
|
||||
l9rFQtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0l
|
||||
YW5INvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAc
|
||||
ZGh7r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9
|
||||
CLNNsUcCAwEAAaNPME0wHQYDVR0OBBYEFLQRM/HX4l73U54gIhBPhga/H8leMB8G
|
||||
A1UdIwQYMBaAFI71Ja8em2uEPXyAmslTnE1y96NSMAsGA1UdDwQEAwIBBjANBgkq
|
||||
hkiG9w0BAQsFAAOCAQEAPo7bKKFLbwT3x7dw+OPZMDxwyG1pk5x+5SD7iv45mOzS
|
||||
5lZ2ByaOH+jnjTfG6beNmTCbfq6RcHqTvD6LXYex5z9KliIL9Fpwh507uGDXmKDN
|
||||
lM0zmbYhXiWGRwP5NkbB/EppbiSk42l5/ky4gmCH/a9kQfiBW+Gwe3aBwRX6v+5p
|
||||
BLwH12YrM46DdEL4RHd2H/9rjSaX4X3aaZd9kZsf/yaOU65iQX15cNDfxkKncYQK
|
||||
K+xjT2S/NLcwslkPzQLCWeWZVBV4Vd+TEjjZA1tFpu5e1oNlJYvGbqjIuUurpoxv
|
||||
IhsVUfWJEf7KjpFy+kgPyijNYRUBFrMspdb6x771RQ==
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,19 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDDTCCAfWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
|
||||
IENBMCAXDTE2MDExNTA4MTk0OVoYDzIxMTYwMTE2MDgxOTQ5WjANMQswCQYDVQQD
|
||||
DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvd
|
||||
j9IxsogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOz
|
||||
n1k50DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/W
|
||||
l9rFQtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0l
|
||||
YW5INvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAc
|
||||
ZGh7r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9
|
||||
CLNNsUcCAwEAAaNxMG8wHQYDVR0OBBYEFLQRM/HX4l73U54gIhBPhga/H8leMB8G
|
||||
A1UdIwQYMBaAFI71Ja8em2uEPXyAmslTnE1y96NSMAkGA1UdEwQCMAAwEwYDVR0l
|
||||
BAwwCgYIKwYBBQUHAwEwDQYDVR0RBAYwBIICQ0EwDQYJKoZIhvcNAQELBQADggEB
|
||||
AL/aEy4Nk2W2UQNi/0h9MLkiq4J5IkjUocJp4grPUsdUJKu68GFYgWnJSBZjKMhs
|
||||
X390IUWrRJ8C7SJtyGOhbh2E6Zn7TveI77Mnw2CZpGhy+xieqTFmaIIWJgZVzaTT
|
||||
3hMhnXImn06k8eJiJiQQAHKr9XKDK9HIiESyBpujIW5hI7wrklkn0asl6DwiXcUw
|
||||
AuXqNffWpomWI4ZZceOJkr5dSFM9HyksQi4uzj0qYTDyDHJ6BLuGYWbUoB64pnKF
|
||||
wCn0cPOmbo866l0XqzJlxQYPvwOicAptX8jTjSpYsx5SLripS4KwyfxbGy5If8mT
|
||||
X4st+BN48+n9wHuDQJ97sBs=
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,18 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIC7DCCAdSgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
|
||||
IENBMCAXDTE2MDExNTA4MTk0OVoYDzIxMTYwMTE2MDgxOTQ5WjANMQswCQYDVQQD
|
||||
DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvd
|
||||
j9IxsogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOz
|
||||
n1k50DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/W
|
||||
l9rFQtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0l
|
||||
YW5INvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAc
|
||||
ZGh7r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9
|
||||
CLNNsUcCAwEAAaNQME4wHQYDVR0OBBYEFLQRM/HX4l73U54gIhBPhga/H8leMB8G
|
||||
A1UdIwQYMBaAFJzOZkIwqxwIJl9zGW3fD6euWFIeMAwGA1UdEwQFMAMBAf8wDQYJ
|
||||
KoZIhvcNAQELBQADggEBAEqhb/i7hTJ9l/UdLm9fgm4QYmNb1OMWyCU84y5QI/Rj
|
||||
uHueaHLy6zEWHTavz9m4VcQpu8hblxFG+4CWWr92QjSYwTsyi578k7Ju5jNzvZQ5
|
||||
RnVAL+eeaTVa/7mazmqYzOHgyE4IpljX1MOd0QDpUjRGuNLoWfKXeXn7ul44r3ry
|
||||
1hDMwmc3SS3XMzJ9Wl6k5SjKObbkMc8e0WjhhAwGjw3lODa5nj2xGf6W/Ikr/XTp
|
||||
pnVjYsm+jxHoj+qmMgmXa1h11wdFCPUl15V1qq4R4rcS5zR8YxKUGZRo1R839geW
|
||||
w4G8ytKRsapdFi165mOXZUumyHpJ8i43SEvYlcJux0I=
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,18 @@
|
||||
-----BEGIN TRUSTED CERTIFICATE-----
|
||||
MIIC7DCCAdSgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
|
||||
IENBMCAXDTE2MDExNTA4MTk0OVoYDzIxMTYwMTE2MDgxOTQ5WjANMQswCQYDVQQD
|
||||
DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvd
|
||||
j9IxsogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOz
|
||||
n1k50DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/W
|
||||
l9rFQtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0l
|
||||
YW5INvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAc
|
||||
ZGh7r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9
|
||||
CLNNsUcCAwEAAaNQME4wHQYDVR0OBBYEFLQRM/HX4l73U54gIhBPhga/H8leMB8G
|
||||
A1UdIwQYMBaAFI71Ja8em2uEPXyAmslTnE1y96NSMAwGA1UdEwQFMAMBAf8wDQYJ
|
||||
KoZIhvcNAQELBQADggEBADnZ9uXGAdwfNC3xuERIlBwgLROeBRGgcfHWdXZB/tWk
|
||||
IM9ox88wYKWynanPbra4n0zhepooKt+naeY2HLR8UgwT6sTi0Yfld9mjytA8/DP6
|
||||
AcqtIDDf60vNI00sgxjgZqofVayA9KShzIPzjBec4zI1sg5YzoSNyH28VXFstEpi
|
||||
8CVtmRYQHhc2gDI9MGge4sHRYwaIFkegzpwcEUnp6tTVe9ZvHawgsXF/rCGfH4M6
|
||||
uNO0D+9Md1bdW7382yOtWbkyibsugqnfBYCUH6hAhDlfYzpba2Smb0roc6Crq7HR
|
||||
5HpEYY6qEir9wFMkD5MZsWrNRGRuzd5am82J+aaHz/4wDKAKBggrBgEFBQcDAQ==
|
||||
-----END TRUSTED CERTIFICATE-----
|
||||
@@ -0,0 +1,19 @@
|
||||
-----BEGIN TRUSTED CERTIFICATE-----
|
||||
MIIDATCCAemgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
|
||||
IENBMCAXDTE2MDEyOTA0NDc0NloYDzIxMTYwMTMwMDQ0NzQ2WjANMQswCQYDVQQD
|
||||
DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvd
|
||||
j9IxsogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOz
|
||||
n1k50DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/W
|
||||
l9rFQtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0l
|
||||
YW5INvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAc
|
||||
ZGh7r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9
|
||||
CLNNsUcCAwEAAaNlMGMwHQYDVR0OBBYEFLQRM/HX4l73U54gIhBPhga/H8leMB8G
|
||||
A1UdIwQYMBaAFI71Ja8em2uEPXyAmslTnE1y96NSMAwGA1UdEwQFMAMBAf8wEwYD
|
||||
VR0lBAwwCgYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBAB6mihrap7ByLl3w
|
||||
P/0XsqMvOkxCxoWTeI0cEwbxSpUXfMTE24oIQJiqIyHO6qeSRgSywk/DTU0uJWOB
|
||||
Idr6dPI6wPrS4jvFqcgoFH1OPjAJCpl5CuCJEH8gB3LJ4dNfj+O7shT0XeI+R1vw
|
||||
gp+fJ8v6jX4y8Nk/Bcy748dC1HZhMWHxQblzjRu8Xmd6lDiMskoWE2JAwgRK7b3M
|
||||
dCpuTCHMTsdCspwBUvQ4gNYNP5IURE+09DBtEBQicN/1RHyRZOw7YGs5ZOdc5mRe
|
||||
O5E+WHE1xiJ0QwUu2co55PFlukidWXx7LE02foNaNm+rw4OUTrzsqmmgkp1qqAab
|
||||
ap/RSXgwCDAGBgRVHSUA
|
||||
-----END TRUSTED CERTIFICATE-----
|
||||
@@ -0,0 +1,19 @@
|
||||
-----BEGIN TRUSTED CERTIFICATE-----
|
||||
MIIDATCCAemgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
|
||||
IENBMCAXDTE2MDEyOTA0NDc0NloYDzIxMTYwMTMwMDQ0NzQ2WjANMQswCQYDVQQD
|
||||
DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvd
|
||||
j9IxsogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOz
|
||||
n1k50DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/W
|
||||
l9rFQtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0l
|
||||
YW5INvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAc
|
||||
ZGh7r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9
|
||||
CLNNsUcCAwEAAaNlMGMwHQYDVR0OBBYEFLQRM/HX4l73U54gIhBPhga/H8leMB8G
|
||||
A1UdIwQYMBaAFI71Ja8em2uEPXyAmslTnE1y96NSMAwGA1UdEwQFMAMBAf8wEwYD
|
||||
VR0lBAwwCgYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBAB6mihrap7ByLl3w
|
||||
P/0XsqMvOkxCxoWTeI0cEwbxSpUXfMTE24oIQJiqIyHO6qeSRgSywk/DTU0uJWOB
|
||||
Idr6dPI6wPrS4jvFqcgoFH1OPjAJCpl5CuCJEH8gB3LJ4dNfj+O7shT0XeI+R1vw
|
||||
gp+fJ8v6jX4y8Nk/Bcy748dC1HZhMWHxQblzjRu8Xmd6lDiMskoWE2JAwgRK7b3M
|
||||
dCpuTCHMTsdCspwBUvQ4gNYNP5IURE+09DBtEBQicN/1RHyRZOw7YGs5ZOdc5mRe
|
||||
O5E+WHE1xiJ0QwUu2co55PFlukidWXx7LE02foNaNm+rw4OUTrzsqmmgkp1qqAab
|
||||
ap/RSXgwDDAKBggrBgEFBQcDAg==
|
||||
-----END TRUSTED CERTIFICATE-----
|
||||
@@ -0,0 +1,19 @@
|
||||
-----BEGIN TRUSTED CERTIFICATE-----
|
||||
MIIDATCCAemgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
|
||||
IENBMCAXDTE2MDEyOTA0NDc0NloYDzIxMTYwMTMwMDQ0NzQ2WjANMQswCQYDVQQD
|
||||
DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvd
|
||||
j9IxsogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOz
|
||||
n1k50DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/W
|
||||
l9rFQtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0l
|
||||
YW5INvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAc
|
||||
ZGh7r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9
|
||||
CLNNsUcCAwEAAaNlMGMwHQYDVR0OBBYEFLQRM/HX4l73U54gIhBPhga/H8leMB8G
|
||||
A1UdIwQYMBaAFI71Ja8em2uEPXyAmslTnE1y96NSMAwGA1UdEwQFMAMBAf8wEwYD
|
||||
VR0lBAwwCgYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBAB6mihrap7ByLl3w
|
||||
P/0XsqMvOkxCxoWTeI0cEwbxSpUXfMTE24oIQJiqIyHO6qeSRgSywk/DTU0uJWOB
|
||||
Idr6dPI6wPrS4jvFqcgoFH1OPjAJCpl5CuCJEH8gB3LJ4dNfj+O7shT0XeI+R1vw
|
||||
gp+fJ8v6jX4y8Nk/Bcy748dC1HZhMWHxQblzjRu8Xmd6lDiMskoWE2JAwgRK7b3M
|
||||
dCpuTCHMTsdCspwBUvQ4gNYNP5IURE+09DBtEBQicN/1RHyRZOw7YGs5ZOdc5mRe
|
||||
O5E+WHE1xiJ0QwUu2co55PFlukidWXx7LE02foNaNm+rw4OUTrzsqmmgkp1qqAab
|
||||
ap/RSXgwDDAKBggrBgEFBQcDAQ==
|
||||
-----END TRUSTED CERTIFICATE-----
|
||||
@@ -0,0 +1,19 @@
|
||||
-----BEGIN TRUSTED CERTIFICATE-----
|
||||
MIIDATCCAemgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
|
||||
IENBMCAXDTE2MDEyOTA0NDc0NloYDzIxMTYwMTMwMDQ0NzQ2WjANMQswCQYDVQQD
|
||||
DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvd
|
||||
j9IxsogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOz
|
||||
n1k50DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/W
|
||||
l9rFQtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0l
|
||||
YW5INvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAc
|
||||
ZGh7r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9
|
||||
CLNNsUcCAwEAAaNlMGMwHQYDVR0OBBYEFLQRM/HX4l73U54gIhBPhga/H8leMB8G
|
||||
A1UdIwQYMBaAFI71Ja8em2uEPXyAmslTnE1y96NSMAwGA1UdEwQFMAMBAf8wEwYD
|
||||
VR0lBAwwCgYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBAB6mihrap7ByLl3w
|
||||
P/0XsqMvOkxCxoWTeI0cEwbxSpUXfMTE24oIQJiqIyHO6qeSRgSywk/DTU0uJWOB
|
||||
Idr6dPI6wPrS4jvFqcgoFH1OPjAJCpl5CuCJEH8gB3LJ4dNfj+O7shT0XeI+R1vw
|
||||
gp+fJ8v6jX4y8Nk/Bcy748dC1HZhMWHxQblzjRu8Xmd6lDiMskoWE2JAwgRK7b3M
|
||||
dCpuTCHMTsdCspwBUvQ4gNYNP5IURE+09DBtEBQicN/1RHyRZOw7YGs5ZOdc5mRe
|
||||
O5E+WHE1xiJ0QwUu2co55PFlukidWXx7LE02foNaNm+rw4OUTrzsqmmgkp1qqAab
|
||||
ap/RSXgwCKAGBgRVHSUA
|
||||
-----END TRUSTED CERTIFICATE-----
|
||||
@@ -0,0 +1,19 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDATCCAemgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
|
||||
IENBMCAXDTE2MDEyOTA0NDc0NloYDzIxMTYwMTMwMDQ0NzQ2WjANMQswCQYDVQQD
|
||||
DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvd
|
||||
j9IxsogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOz
|
||||
n1k50DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/W
|
||||
l9rFQtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0l
|
||||
YW5INvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAc
|
||||
ZGh7r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9
|
||||
CLNNsUcCAwEAAaNlMGMwHQYDVR0OBBYEFLQRM/HX4l73U54gIhBPhga/H8leMB8G
|
||||
A1UdIwQYMBaAFI71Ja8em2uEPXyAmslTnE1y96NSMAwGA1UdEwQFMAMBAf8wEwYD
|
||||
VR0lBAwwCgYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBAB6mihrap7ByLl3w
|
||||
P/0XsqMvOkxCxoWTeI0cEwbxSpUXfMTE24oIQJiqIyHO6qeSRgSywk/DTU0uJWOB
|
||||
Idr6dPI6wPrS4jvFqcgoFH1OPjAJCpl5CuCJEH8gB3LJ4dNfj+O7shT0XeI+R1vw
|
||||
gp+fJ8v6jX4y8Nk/Bcy748dC1HZhMWHxQblzjRu8Xmd6lDiMskoWE2JAwgRK7b3M
|
||||
dCpuTCHMTsdCspwBUvQ4gNYNP5IURE+09DBtEBQicN/1RHyRZOw7YGs5ZOdc5mRe
|
||||
O5E+WHE1xiJ0QwUu2co55PFlukidWXx7LE02foNaNm+rw4OUTrzsqmmgkp1qqAab
|
||||
ap/RSXg=
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,19 @@
|
||||
-----BEGIN TRUSTED CERTIFICATE-----
|
||||
MIIDATCCAemgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
|
||||
IENBMCAXDTE2MDEyOTA0NDc0NloYDzIxMTYwMTMwMDQ0NzQ2WjANMQswCQYDVQQD
|
||||
DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvd
|
||||
j9IxsogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOz
|
||||
n1k50DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/W
|
||||
l9rFQtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0l
|
||||
YW5INvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAc
|
||||
ZGh7r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9
|
||||
CLNNsUcCAwEAAaNlMGMwHQYDVR0OBBYEFLQRM/HX4l73U54gIhBPhga/H8leMB8G
|
||||
A1UdIwQYMBaAFI71Ja8em2uEPXyAmslTnE1y96NSMAwGA1UdEwQFMAMBAf8wEwYD
|
||||
VR0lBAwwCgYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBAB6mihrap7ByLl3w
|
||||
P/0XsqMvOkxCxoWTeI0cEwbxSpUXfMTE24oIQJiqIyHO6qeSRgSywk/DTU0uJWOB
|
||||
Idr6dPI6wPrS4jvFqcgoFH1OPjAJCpl5CuCJEH8gB3LJ4dNfj+O7shT0XeI+R1vw
|
||||
gp+fJ8v6jX4y8Nk/Bcy748dC1HZhMWHxQblzjRu8Xmd6lDiMskoWE2JAwgRK7b3M
|
||||
dCpuTCHMTsdCspwBUvQ4gNYNP5IURE+09DBtEBQicN/1RHyRZOw7YGs5ZOdc5mRe
|
||||
O5E+WHE1xiJ0QwUu2co55PFlukidWXx7LE02foNaNm+rw4OUTrzsqmmgkp1qqAab
|
||||
ap/RSXgwDDAKBggrBgEFBQcDAg==
|
||||
-----END TRUSTED CERTIFICATE-----
|
||||
@@ -0,0 +1,19 @@
|
||||
-----BEGIN TRUSTED CERTIFICATE-----
|
||||
MIIDATCCAemgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
|
||||
IENBMCAXDTE2MDEyOTA0NDc0NloYDzIxMTYwMTMwMDQ0NzQ2WjANMQswCQYDVQQD
|
||||
DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvd
|
||||
j9IxsogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOz
|
||||
n1k50DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/W
|
||||
l9rFQtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0l
|
||||
YW5INvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAc
|
||||
ZGh7r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9
|
||||
CLNNsUcCAwEAAaNlMGMwHQYDVR0OBBYEFLQRM/HX4l73U54gIhBPhga/H8leMB8G
|
||||
A1UdIwQYMBaAFI71Ja8em2uEPXyAmslTnE1y96NSMAwGA1UdEwQFMAMBAf8wEwYD
|
||||
VR0lBAwwCgYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggEBAB6mihrap7ByLl3w
|
||||
P/0XsqMvOkxCxoWTeI0cEwbxSpUXfMTE24oIQJiqIyHO6qeSRgSywk/DTU0uJWOB
|
||||
Idr6dPI6wPrS4jvFqcgoFH1OPjAJCpl5CuCJEH8gB3LJ4dNfj+O7shT0XeI+R1vw
|
||||
gp+fJ8v6jX4y8Nk/Bcy748dC1HZhMWHxQblzjRu8Xmd6lDiMskoWE2JAwgRK7b3M
|
||||
dCpuTCHMTsdCspwBUvQ4gNYNP5IURE+09DBtEBQicN/1RHyRZOw7YGs5ZOdc5mRe
|
||||
O5E+WHE1xiJ0QwUu2co55PFlukidWXx7LE02foNaNm+rw4OUTrzsqmmgkp1qqAab
|
||||
ap/RSXgwDKAKBggrBgEFBQcDAQ==
|
||||
-----END TRUSTED CERTIFICATE-----
|
||||
@@ -0,0 +1,19 @@
|
||||
-----BEGIN TRUSTED CERTIFICATE-----
|
||||
MIIDBjCCAe6gAwIBAgIBATANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
|
||||
IENBMCAXDTE2MDEyOTA0NDc0NloYDzIxMTYwMTMwMDQ0NzQ2WjASMRAwDgYDVQQD
|
||||
DAdSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4eYA9Qa8
|
||||
oEY4eQ8/HnEZE20C3yubdmv8rLAh7daRCEI7pWM17FJboKJKxdYAlAOXWj25ZyjS
|
||||
feMhXKTtxjyNjoTRnVTDPdl0opZ2Z3H5xhpQd7P9eO5b4OOMiSPCmiLsPtQ3ngfN
|
||||
wCtVERc6NEIcaQ06GLDtFZRexv2eh8Yc55QaksBfBcFzQ+UD3gmRySTO2I6Lfi7g
|
||||
MUjRhipqVSZ66As2Tpex4KTJ2lxpSwOACFaDox+yKrjBTP7FsU3UwAGq7b7OJb3u
|
||||
aa32B81uK6GJVPVo65gJ7clgZsszYkoDsGjWDqtfwTVVfv1G7rrr3Laio+2Ff3ff
|
||||
tWgiQ35mJCOvxQIDAQABo2UwYzAdBgNVHQ4EFgQUjvUlrx6ba4Q9fICayVOcTXL3
|
||||
o1IwHwYDVR0jBBgwFoAUjvUlrx6ba4Q9fICayVOcTXL3o1IwDAYDVR0TBAUwAwEB
|
||||
/zATBgNVHSUEDDAKBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAi/mR+SIa
|
||||
bs1egGRRSAzqu4KkrOG1vGVQNj0XfHn1WeAdmwEAjNi+llErpkMyY08Cjb/3fiQc
|
||||
6H9CA36utf/Ym84OQOY64m4C1Kikxw8EHudoPNvSWQAFEpCk5gs6rCJEnj9QolL3
|
||||
32IvZQ1m+GcrjGg976PccEaM7S362kTj+kcAswmS8iJmDAJ2b+ghHTFrFQS4GAw7
|
||||
XOcqQbinx9ntGn135VsJLOXKveYvQSD7sHKCd4RFrFTSEwWmtBL96vRXmTV5wTAr
|
||||
tpkKKKw5N9CiHnbhNyVrSRiLCzVDTpYQDaBJhb7XOsHi+/HOzmbK6LHe0Lt1nP+k
|
||||
4PR8O0S5WC0PlzAIMAYGBFUdJQA=
|
||||
-----END TRUSTED CERTIFICATE-----
|
||||
@@ -0,0 +1,19 @@
|
||||
-----BEGIN TRUSTED CERTIFICATE-----
|
||||
MIIDBjCCAe6gAwIBAgIBATANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
|
||||
IENBMCAXDTE2MDEyOTA0NDc0NloYDzIxMTYwMTMwMDQ0NzQ2WjASMRAwDgYDVQQD
|
||||
DAdSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4eYA9Qa8
|
||||
oEY4eQ8/HnEZE20C3yubdmv8rLAh7daRCEI7pWM17FJboKJKxdYAlAOXWj25ZyjS
|
||||
feMhXKTtxjyNjoTRnVTDPdl0opZ2Z3H5xhpQd7P9eO5b4OOMiSPCmiLsPtQ3ngfN
|
||||
wCtVERc6NEIcaQ06GLDtFZRexv2eh8Yc55QaksBfBcFzQ+UD3gmRySTO2I6Lfi7g
|
||||
MUjRhipqVSZ66As2Tpex4KTJ2lxpSwOACFaDox+yKrjBTP7FsU3UwAGq7b7OJb3u
|
||||
aa32B81uK6GJVPVo65gJ7clgZsszYkoDsGjWDqtfwTVVfv1G7rrr3Laio+2Ff3ff
|
||||
tWgiQ35mJCOvxQIDAQABo2UwYzAdBgNVHQ4EFgQUjvUlrx6ba4Q9fICayVOcTXL3
|
||||
o1IwHwYDVR0jBBgwFoAUjvUlrx6ba4Q9fICayVOcTXL3o1IwDAYDVR0TBAUwAwEB
|
||||
/zATBgNVHSUEDDAKBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAi/mR+SIa
|
||||
bs1egGRRSAzqu4KkrOG1vGVQNj0XfHn1WeAdmwEAjNi+llErpkMyY08Cjb/3fiQc
|
||||
6H9CA36utf/Ym84OQOY64m4C1Kikxw8EHudoPNvSWQAFEpCk5gs6rCJEnj9QolL3
|
||||
32IvZQ1m+GcrjGg976PccEaM7S362kTj+kcAswmS8iJmDAJ2b+ghHTFrFQS4GAw7
|
||||
XOcqQbinx9ntGn135VsJLOXKveYvQSD7sHKCd4RFrFTSEwWmtBL96vRXmTV5wTAr
|
||||
tpkKKKw5N9CiHnbhNyVrSRiLCzVDTpYQDaBJhb7XOsHi+/HOzmbK6LHe0Lt1nP+k
|
||||
4PR8O0S5WC0PlzAMMAoGCCsGAQUFBwMC
|
||||
-----END TRUSTED CERTIFICATE-----
|
||||
@@ -0,0 +1,19 @@
|
||||
-----BEGIN TRUSTED CERTIFICATE-----
|
||||
MIIDBjCCAe6gAwIBAgIBATANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
|
||||
IENBMCAXDTE2MDEyOTA0NDc0NloYDzIxMTYwMTMwMDQ0NzQ2WjASMRAwDgYDVQQD
|
||||
DAdSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4eYA9Qa8
|
||||
oEY4eQ8/HnEZE20C3yubdmv8rLAh7daRCEI7pWM17FJboKJKxdYAlAOXWj25ZyjS
|
||||
feMhXKTtxjyNjoTRnVTDPdl0opZ2Z3H5xhpQd7P9eO5b4OOMiSPCmiLsPtQ3ngfN
|
||||
wCtVERc6NEIcaQ06GLDtFZRexv2eh8Yc55QaksBfBcFzQ+UD3gmRySTO2I6Lfi7g
|
||||
MUjRhipqVSZ66As2Tpex4KTJ2lxpSwOACFaDox+yKrjBTP7FsU3UwAGq7b7OJb3u
|
||||
aa32B81uK6GJVPVo65gJ7clgZsszYkoDsGjWDqtfwTVVfv1G7rrr3Laio+2Ff3ff
|
||||
tWgiQ35mJCOvxQIDAQABo2UwYzAdBgNVHQ4EFgQUjvUlrx6ba4Q9fICayVOcTXL3
|
||||
o1IwHwYDVR0jBBgwFoAUjvUlrx6ba4Q9fICayVOcTXL3o1IwDAYDVR0TBAUwAwEB
|
||||
/zATBgNVHSUEDDAKBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAi/mR+SIa
|
||||
bs1egGRRSAzqu4KkrOG1vGVQNj0XfHn1WeAdmwEAjNi+llErpkMyY08Cjb/3fiQc
|
||||
6H9CA36utf/Ym84OQOY64m4C1Kikxw8EHudoPNvSWQAFEpCk5gs6rCJEnj9QolL3
|
||||
32IvZQ1m+GcrjGg976PccEaM7S362kTj+kcAswmS8iJmDAJ2b+ghHTFrFQS4GAw7
|
||||
XOcqQbinx9ntGn135VsJLOXKveYvQSD7sHKCd4RFrFTSEwWmtBL96vRXmTV5wTAr
|
||||
tpkKKKw5N9CiHnbhNyVrSRiLCzVDTpYQDaBJhb7XOsHi+/HOzmbK6LHe0Lt1nP+k
|
||||
4PR8O0S5WC0PlzAMMAoGCCsGAQUFBwMB
|
||||
-----END TRUSTED CERTIFICATE-----
|
||||
@@ -0,0 +1,19 @@
|
||||
-----BEGIN TRUSTED CERTIFICATE-----
|
||||
MIIDBjCCAe6gAwIBAgIBATANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
|
||||
IENBMCAXDTE2MDEyOTA0NDc0NloYDzIxMTYwMTMwMDQ0NzQ2WjASMRAwDgYDVQQD
|
||||
DAdSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4eYA9Qa8
|
||||
oEY4eQ8/HnEZE20C3yubdmv8rLAh7daRCEI7pWM17FJboKJKxdYAlAOXWj25ZyjS
|
||||
feMhXKTtxjyNjoTRnVTDPdl0opZ2Z3H5xhpQd7P9eO5b4OOMiSPCmiLsPtQ3ngfN
|
||||
wCtVERc6NEIcaQ06GLDtFZRexv2eh8Yc55QaksBfBcFzQ+UD3gmRySTO2I6Lfi7g
|
||||
MUjRhipqVSZ66As2Tpex4KTJ2lxpSwOACFaDox+yKrjBTP7FsU3UwAGq7b7OJb3u
|
||||
aa32B81uK6GJVPVo65gJ7clgZsszYkoDsGjWDqtfwTVVfv1G7rrr3Laio+2Ff3ff
|
||||
tWgiQ35mJCOvxQIDAQABo2UwYzAdBgNVHQ4EFgQUjvUlrx6ba4Q9fICayVOcTXL3
|
||||
o1IwHwYDVR0jBBgwFoAUjvUlrx6ba4Q9fICayVOcTXL3o1IwDAYDVR0TBAUwAwEB
|
||||
/zATBgNVHSUEDDAKBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAi/mR+SIa
|
||||
bs1egGRRSAzqu4KkrOG1vGVQNj0XfHn1WeAdmwEAjNi+llErpkMyY08Cjb/3fiQc
|
||||
6H9CA36utf/Ym84OQOY64m4C1Kikxw8EHudoPNvSWQAFEpCk5gs6rCJEnj9QolL3
|
||||
32IvZQ1m+GcrjGg976PccEaM7S362kTj+kcAswmS8iJmDAJ2b+ghHTFrFQS4GAw7
|
||||
XOcqQbinx9ntGn135VsJLOXKveYvQSD7sHKCd4RFrFTSEwWmtBL96vRXmTV5wTAr
|
||||
tpkKKKw5N9CiHnbhNyVrSRiLCzVDTpYQDaBJhb7XOsHi+/HOzmbK6LHe0Lt1nP+k
|
||||
4PR8O0S5WC0PlzAIoAYGBFUdJQA=
|
||||
-----END TRUSTED CERTIFICATE-----
|
||||
@@ -0,0 +1,19 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDBjCCAe6gAwIBAgIBATANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
|
||||
IENBMCAXDTE2MDEyOTA0NDc0NloYDzIxMTYwMTMwMDQ0NzQ2WjASMRAwDgYDVQQD
|
||||
DAdSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4eYA9Qa8
|
||||
oEY4eQ8/HnEZE20C3yubdmv8rLAh7daRCEI7pWM17FJboKJKxdYAlAOXWj25ZyjS
|
||||
feMhXKTtxjyNjoTRnVTDPdl0opZ2Z3H5xhpQd7P9eO5b4OOMiSPCmiLsPtQ3ngfN
|
||||
wCtVERc6NEIcaQ06GLDtFZRexv2eh8Yc55QaksBfBcFzQ+UD3gmRySTO2I6Lfi7g
|
||||
MUjRhipqVSZ66As2Tpex4KTJ2lxpSwOACFaDox+yKrjBTP7FsU3UwAGq7b7OJb3u
|
||||
aa32B81uK6GJVPVo65gJ7clgZsszYkoDsGjWDqtfwTVVfv1G7rrr3Laio+2Ff3ff
|
||||
tWgiQ35mJCOvxQIDAQABo2UwYzAdBgNVHQ4EFgQUjvUlrx6ba4Q9fICayVOcTXL3
|
||||
o1IwHwYDVR0jBBgwFoAUjvUlrx6ba4Q9fICayVOcTXL3o1IwDAYDVR0TBAUwAwEB
|
||||
/zATBgNVHSUEDDAKBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAi/mR+SIa
|
||||
bs1egGRRSAzqu4KkrOG1vGVQNj0XfHn1WeAdmwEAjNi+llErpkMyY08Cjb/3fiQc
|
||||
6H9CA36utf/Ym84OQOY64m4C1Kikxw8EHudoPNvSWQAFEpCk5gs6rCJEnj9QolL3
|
||||
32IvZQ1m+GcrjGg976PccEaM7S362kTj+kcAswmS8iJmDAJ2b+ghHTFrFQS4GAw7
|
||||
XOcqQbinx9ntGn135VsJLOXKveYvQSD7sHKCd4RFrFTSEwWmtBL96vRXmTV5wTAr
|
||||
tpkKKKw5N9CiHnbhNyVrSRiLCzVDTpYQDaBJhb7XOsHi+/HOzmbK6LHe0Lt1nP+k
|
||||
4PR8O0S5WC0Plw==
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,19 @@
|
||||
-----BEGIN TRUSTED CERTIFICATE-----
|
||||
MIIDBjCCAe6gAwIBAgIBATANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
|
||||
IENBMCAXDTE2MDEyOTA0NDc0NloYDzIxMTYwMTMwMDQ0NzQ2WjASMRAwDgYDVQQD
|
||||
DAdSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4eYA9Qa8
|
||||
oEY4eQ8/HnEZE20C3yubdmv8rLAh7daRCEI7pWM17FJboKJKxdYAlAOXWj25ZyjS
|
||||
feMhXKTtxjyNjoTRnVTDPdl0opZ2Z3H5xhpQd7P9eO5b4OOMiSPCmiLsPtQ3ngfN
|
||||
wCtVERc6NEIcaQ06GLDtFZRexv2eh8Yc55QaksBfBcFzQ+UD3gmRySTO2I6Lfi7g
|
||||
MUjRhipqVSZ66As2Tpex4KTJ2lxpSwOACFaDox+yKrjBTP7FsU3UwAGq7b7OJb3u
|
||||
aa32B81uK6GJVPVo65gJ7clgZsszYkoDsGjWDqtfwTVVfv1G7rrr3Laio+2Ff3ff
|
||||
tWgiQ35mJCOvxQIDAQABo2UwYzAdBgNVHQ4EFgQUjvUlrx6ba4Q9fICayVOcTXL3
|
||||
o1IwHwYDVR0jBBgwFoAUjvUlrx6ba4Q9fICayVOcTXL3o1IwDAYDVR0TBAUwAwEB
|
||||
/zATBgNVHSUEDDAKBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAi/mR+SIa
|
||||
bs1egGRRSAzqu4KkrOG1vGVQNj0XfHn1WeAdmwEAjNi+llErpkMyY08Cjb/3fiQc
|
||||
6H9CA36utf/Ym84OQOY64m4C1Kikxw8EHudoPNvSWQAFEpCk5gs6rCJEnj9QolL3
|
||||
32IvZQ1m+GcrjGg976PccEaM7S362kTj+kcAswmS8iJmDAJ2b+ghHTFrFQS4GAw7
|
||||
XOcqQbinx9ntGn135VsJLOXKveYvQSD7sHKCd4RFrFTSEwWmtBL96vRXmTV5wTAr
|
||||
tpkKKKw5N9CiHnbhNyVrSRiLCzVDTpYQDaBJhb7XOsHi+/HOzmbK6LHe0Lt1nP+k
|
||||
4PR8O0S5WC0PlzAMoAoGCCsGAQUFBwMC
|
||||
-----END TRUSTED CERTIFICATE-----
|
||||
@@ -0,0 +1,19 @@
|
||||
-----BEGIN TRUSTED CERTIFICATE-----
|
||||
MIIDBjCCAe6gAwIBAgIBATANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
|
||||
IENBMCAXDTE2MDEyOTA0NDc0NloYDzIxMTYwMTMwMDQ0NzQ2WjASMRAwDgYDVQQD
|
||||
DAdSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4eYA9Qa8
|
||||
oEY4eQ8/HnEZE20C3yubdmv8rLAh7daRCEI7pWM17FJboKJKxdYAlAOXWj25ZyjS
|
||||
feMhXKTtxjyNjoTRnVTDPdl0opZ2Z3H5xhpQd7P9eO5b4OOMiSPCmiLsPtQ3ngfN
|
||||
wCtVERc6NEIcaQ06GLDtFZRexv2eh8Yc55QaksBfBcFzQ+UD3gmRySTO2I6Lfi7g
|
||||
MUjRhipqVSZ66As2Tpex4KTJ2lxpSwOACFaDox+yKrjBTP7FsU3UwAGq7b7OJb3u
|
||||
aa32B81uK6GJVPVo65gJ7clgZsszYkoDsGjWDqtfwTVVfv1G7rrr3Laio+2Ff3ff
|
||||
tWgiQ35mJCOvxQIDAQABo2UwYzAdBgNVHQ4EFgQUjvUlrx6ba4Q9fICayVOcTXL3
|
||||
o1IwHwYDVR0jBBgwFoAUjvUlrx6ba4Q9fICayVOcTXL3o1IwDAYDVR0TBAUwAwEB
|
||||
/zATBgNVHSUEDDAKBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAi/mR+SIa
|
||||
bs1egGRRSAzqu4KkrOG1vGVQNj0XfHn1WeAdmwEAjNi+llErpkMyY08Cjb/3fiQc
|
||||
6H9CA36utf/Ym84OQOY64m4C1Kikxw8EHudoPNvSWQAFEpCk5gs6rCJEnj9QolL3
|
||||
32IvZQ1m+GcrjGg976PccEaM7S362kTj+kcAswmS8iJmDAJ2b+ghHTFrFQS4GAw7
|
||||
XOcqQbinx9ntGn135VsJLOXKveYvQSD7sHKCd4RFrFTSEwWmtBL96vRXmTV5wTAr
|
||||
tpkKKKw5N9CiHnbhNyVrSRiLCzVDTpYQDaBJhb7XOsHi+/HOzmbK6LHe0Lt1nP+k
|
||||
4PR8O0S5WC0PlzAMoAoGCCsGAQUFBwMB
|
||||
-----END TRUSTED CERTIFICATE-----
|
||||
@@ -0,0 +1,20 @@
|
||||
-----BEGIN TRUSTED CERTIFICATE-----
|
||||
MIIDIDCCAgigAwIBAgIBAjANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDDAJDQTAg
|
||||
Fw0xNjAxMTUwODE5NTBaGA8yMTE2MDExNjA4MTk1MFowGTEXMBUGA1UEAwwOc2Vy
|
||||
dmVyLmV4YW1wbGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCo/4lY
|
||||
YYWu3tssD9Vz++K3qBt6dWAr1H08c3a1rt6TL38kkG3JHPSKOM2fooAWVsu0LLuT
|
||||
5Rcf/w3GQ/4xNPgo2HXpo7uIgu+jcuJTYgVFTeAxl++qnRDSWA2eBp4yuxsIVl1l
|
||||
Dz9mjsI2oBH/wFk1/Ukc3RxCMwZ4rgQ4I+XndWfTlK1aqUAfrFkQ9QzBZK1KxMY1
|
||||
U7OWaoIbFYvRmavknm+UqtKW5Vf7jJFkijwkFsbSGb6CYBM7YrDtPh2zyvlr3zG5
|
||||
ep5LR2inKcc/SuIiJ7TvkGPX79ByST5brbkb1Ctvhmjd1XMSuEPJ3EEPoqNGT4tn
|
||||
iIQPYf55NB9KiR+3AgMBAAGjfTB7MB0GA1UdDgQWBBTnm+IqrYpsOst2UeWOB5gi
|
||||
l+FzojAfBgNVHSMEGDAWgBS0ETPx1+Je91OeICIQT4YGvx/JXjAJBgNVHRMEAjAA
|
||||
MBMGA1UdJQQMMAoGCCsGAQUFBwMCMBkGA1UdEQQSMBCCDnNlcnZlci5leGFtcGxl
|
||||
MA0GCSqGSIb3DQEBCwUAA4IBAQB+x23yjviJ9/n0G65xjntoPCLpsZtqId+WvN/9
|
||||
sXGqRZyAnBWPFpWrf9qXdxXZpTw7KRfywnEVsUQP12XKCc9JH4tG4l/wCDaHi9qO
|
||||
pLstQskcXk40gWaU83ojjchdtDFBaxR5KxC83SR669Rw9mn66bWz/6zpK9VYohVh
|
||||
A5/3RqteQaeQETFbZdlb6e7jAjiGp6DmAiH/WLrVvMY8k0z81TD0+UjJqI9097mF
|
||||
VtNX0l+46/tR4zvyA4yYqxK+L8M57SjfwxvwUpDxxVVnRsf3kHhudeAc+UDWzqws
|
||||
n5P71o+AfbkYzhHsSFIZyYUnGv+JApFpcGEMEiHL2iBhCRdxMAwwCgYIKwYBBQUH
|
||||
AwI=
|
||||
-----END TRUSTED CERTIFICATE-----
|
||||
@@ -0,0 +1,20 @@
|
||||
-----BEGIN TRUSTED CERTIFICATE-----
|
||||
MIIDIDCCAgigAwIBAgIBAjANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDDAJDQTAg
|
||||
Fw0xNjAxMTUwODE5NDlaGA8yMTE2MDExNjA4MTk0OVowGTEXMBUGA1UEAwwOc2Vy
|
||||
dmVyLmV4YW1wbGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCo/4lY
|
||||
YYWu3tssD9Vz++K3qBt6dWAr1H08c3a1rt6TL38kkG3JHPSKOM2fooAWVsu0LLuT
|
||||
5Rcf/w3GQ/4xNPgo2HXpo7uIgu+jcuJTYgVFTeAxl++qnRDSWA2eBp4yuxsIVl1l
|
||||
Dz9mjsI2oBH/wFk1/Ukc3RxCMwZ4rgQ4I+XndWfTlK1aqUAfrFkQ9QzBZK1KxMY1
|
||||
U7OWaoIbFYvRmavknm+UqtKW5Vf7jJFkijwkFsbSGb6CYBM7YrDtPh2zyvlr3zG5
|
||||
ep5LR2inKcc/SuIiJ7TvkGPX79ByST5brbkb1Ctvhmjd1XMSuEPJ3EEPoqNGT4tn
|
||||
iIQPYf55NB9KiR+3AgMBAAGjfTB7MB0GA1UdDgQWBBTnm+IqrYpsOst2UeWOB5gi
|
||||
l+FzojAfBgNVHSMEGDAWgBS0ETPx1+Je91OeICIQT4YGvx/JXjAJBgNVHRMEAjAA
|
||||
MBMGA1UdJQQMMAoGCCsGAQUFBwMBMBkGA1UdEQQSMBCCDnNlcnZlci5leGFtcGxl
|
||||
MA0GCSqGSIb3DQEBCwUAA4IBAQBBtDxPYULl5b7VFC7/U0NgV8vTJk4zpPnUMMQ4
|
||||
QF2AWDFAek8oLKrz18KQ8M/DEhDxgkaoeXEMLT6BJUEVNYuFEYHEDGarl0nMDRXL
|
||||
xOgAExfz3Tf/pjsLaha5aWH7NyCSKWC+lYkIOJ/Kb/m/6QsDJoXsEC8AhrPfqJhz
|
||||
UzsCoxIlaDWqawH4+S8bdeX0tvs2VtJk/WOJHxMqXra6kgI4fAgyvr2kIZHinQ3y
|
||||
cgX40uAC38bwpE95kJ7FhSfQlE1Rt7sOspUj098Dd0RNDn2uKyOTxEqIELHfw4AX
|
||||
O3XAzt8qDyho8nEd/xiQ6qgsQnvXa+hSRJw42g3/czVskxRxMAwwCgYIKwYBBQUH
|
||||
AwE=
|
||||
-----END TRUSTED CERTIFICATE-----
|
||||
@@ -0,0 +1,16 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIICeDCCAWCgAwIBAgIBAjANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDDAJDQTAg
|
||||
Fw0xNjAzMjAwNjI3MjdaGA8yMTE2MDMyMTA2MjcyN1owGTEXMBUGA1UEAwwOc2Vy
|
||||
dmVyLmV4YW1wbGUwfDANBgkqhkiG9w0BAQEFAANrADBoAmEAwCvrPAynx+7VtpFz
|
||||
4cWZW3/n3/nMwK4fxkWSB0kbVUhQaYiaQGWEfB4JpRz5rPt8NW5m2aVGT7mMjScu
|
||||
8YyFa3IDdpBeQL1n8VQUH3FLySgQHC1bkkzwyzQM8JirCdl/AgMBAAGjfTB7MB0G
|
||||
A1UdDgQWBBSRBasp1P/UDCesreviw4Lwz8tFBDAfBgNVHSMEGDAWgBS0ETPx1+Je
|
||||
91OeICIQT4YGvx/JXjAJBgNVHRMEAjAAMBMGA1UdJQQMMAoGCCsGAQUFBwMBMBkG
|
||||
A1UdEQQSMBCCDnNlcnZlci5leGFtcGxlMA0GCSqGSIb3DQEBCwUAA4IBAQB5xled
|
||||
do7U++n86KmJDGnXd4XMpr1QbTFVSO7fhSiObeGm961re/TI7AhuLlsZYP601YhZ
|
||||
pRe9B7tiEuzu3iCD4kKB0yxgUCSsF0u1KbHSUNe2H5bBJC21c2eLZh6U54y014nL
|
||||
gFSDOsA8M1301+Hlh5AS+4iTR0Ra02RaZb3L5HCR2wtkJubh3rSj8eBzb6fx+Lhw
|
||||
JoeRg34lhycGC4bBVwkRT8bo73Nrs71JUP2A6/PjdsIfF2rtVMEuIq8AMQ5wInZ+
|
||||
2mIxJ4MwCClwLCq3VxI1bzdf1TYsPNxYTUS1POb2VgNofG0mBTHNUYUO20aF0ct8
|
||||
PCQqIqxUIegfS3f5
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,16 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIICfjCCAgigAwIBAgIBAjANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDDAJDQTAg
|
||||
Fw0xNjAzMjAwNjI3MjdaGA8yMTE2MDMyMTA2MjcyN1owGTEXMBUGA1UEAwwOc2Vy
|
||||
dmVyLmV4YW1wbGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCo/4lY
|
||||
YYWu3tssD9Vz++K3qBt6dWAr1H08c3a1rt6TL38kkG3JHPSKOM2fooAWVsu0LLuT
|
||||
5Rcf/w3GQ/4xNPgo2HXpo7uIgu+jcuJTYgVFTeAxl++qnRDSWA2eBp4yuxsIVl1l
|
||||
Dz9mjsI2oBH/wFk1/Ukc3RxCMwZ4rgQ4I+XndWfTlK1aqUAfrFkQ9QzBZK1KxMY1
|
||||
U7OWaoIbFYvRmavknm+UqtKW5Vf7jJFkijwkFsbSGb6CYBM7YrDtPh2zyvlr3zG5
|
||||
ep5LR2inKcc/SuIiJ7TvkGPX79ByST5brbkb1Ctvhmjd1XMSuEPJ3EEPoqNGT4tn
|
||||
iIQPYf55NB9KiR+3AgMBAAGjfTB7MB0GA1UdDgQWBBTnm+IqrYpsOst2UeWOB5gi
|
||||
l+FzojAfBgNVHSMEGDAWgBSq83ovyyiaKeskoYibqSrJFtGUHDAJBgNVHRMEAjAA
|
||||
MBMGA1UdJQQMMAoGCCsGAQUFBwMBMBkGA1UdEQQSMBCCDnNlcnZlci5leGFtcGxl
|
||||
MA0GCSqGSIb3DQEBCwUAA2EASAwDwXsYGnhQDyWixI9eKZwXAA9E4rEIdmKNvVjU
|
||||
jWkMh1oC0FZl4TTHU+sAaXmv2QItZOcG2QEHoTIZDPYiy+7eZC7pPQY25dkxeSZ9
|
||||
TIlMnfePzYTc3BnfxZj82Mny
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,19 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDIDCCAgigAwIBAgIBAjANBgkqhkiG9w0BAQQFADANMQswCQYDVQQDDAJDQTAg
|
||||
Fw0xNjAzMjAwNjI3MjdaGA8yMTE2MDMyMTA2MjcyN1owGTEXMBUGA1UEAwwOc2Vy
|
||||
dmVyLmV4YW1wbGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCo/4lY
|
||||
YYWu3tssD9Vz++K3qBt6dWAr1H08c3a1rt6TL38kkG3JHPSKOM2fooAWVsu0LLuT
|
||||
5Rcf/w3GQ/4xNPgo2HXpo7uIgu+jcuJTYgVFTeAxl++qnRDSWA2eBp4yuxsIVl1l
|
||||
Dz9mjsI2oBH/wFk1/Ukc3RxCMwZ4rgQ4I+XndWfTlK1aqUAfrFkQ9QzBZK1KxMY1
|
||||
U7OWaoIbFYvRmavknm+UqtKW5Vf7jJFkijwkFsbSGb6CYBM7YrDtPh2zyvlr3zG5
|
||||
ep5LR2inKcc/SuIiJ7TvkGPX79ByST5brbkb1Ctvhmjd1XMSuEPJ3EEPoqNGT4tn
|
||||
iIQPYf55NB9KiR+3AgMBAAGjfTB7MB0GA1UdDgQWBBTnm+IqrYpsOst2UeWOB5gi
|
||||
l+FzojAfBgNVHSMEGDAWgBS0ETPx1+Je91OeICIQT4YGvx/JXjAJBgNVHRMEAjAA
|
||||
MBMGA1UdJQQMMAoGCCsGAQUFBwMBMBkGA1UdEQQSMBCCDnNlcnZlci5leGFtcGxl
|
||||
MA0GCSqGSIb3DQEBBAUAA4IBAQBqCPfIEZOVUiq2exiRFoxVOvq668Y55lJZ9+4j
|
||||
E5Ncq9mdbuD7GIxJSKByf899yBJUG32ZIbmwnSHfBkPolc/LjQhUDxJtSBE8vFaA
|
||||
8AZ1rsOcaWapPQ94gYIgncBS15t7RjTX1l04fY0NPqVsWmTji+ummA5e7iCj6l6t
|
||||
CqRGhMeSZWa1mc+Plurmz7oWEqkUK5cfTrlDnXeQNOI8EK8lc636elqqdnw0amO4
|
||||
yKJlaXRlm/I1nQdUQ0G5Bk2Tp/QGoJCtJ25XsoIbnCs0tIbpQllTdLsRQmOussAP
|
||||
NvdwbKtAAolgMAxH9pl1Mc6OIo2e8405EWs1jvGEMgE0IFAY
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,19 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDIDCCAgigAwIBAgIBAjANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDDAJDQTAg
|
||||
Fw0xNjAxMTUwODE5NDlaGA8yMTE2MDExNjA4MTk0OVowGTEXMBUGA1UEAwwOc2Vy
|
||||
dmVyLmV4YW1wbGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCo/4lY
|
||||
YYWu3tssD9Vz++K3qBt6dWAr1H08c3a1rt6TL38kkG3JHPSKOM2fooAWVsu0LLuT
|
||||
5Rcf/w3GQ/4xNPgo2HXpo7uIgu+jcuJTYgVFTeAxl++qnRDSWA2eBp4yuxsIVl1l
|
||||
Dz9mjsI2oBH/wFk1/Ukc3RxCMwZ4rgQ4I+XndWfTlK1aqUAfrFkQ9QzBZK1KxMY1
|
||||
U7OWaoIbFYvRmavknm+UqtKW5Vf7jJFkijwkFsbSGb6CYBM7YrDtPh2zyvlr3zG5
|
||||
ep5LR2inKcc/SuIiJ7TvkGPX79ByST5brbkb1Ctvhmjd1XMSuEPJ3EEPoqNGT4tn
|
||||
iIQPYf55NB9KiR+3AgMBAAGjfTB7MB0GA1UdDgQWBBTnm+IqrYpsOst2UeWOB5gi
|
||||
l+FzojAfBgNVHSMEGDAWgBS0ETPx1+Je91OeICIQT4YGvx/JXjAJBgNVHRMEAjAA
|
||||
MBMGA1UdJQQMMAoGCCsGAQUFBwMBMBkGA1UdEQQSMBCCDnNlcnZlci5leGFtcGxl
|
||||
MA0GCSqGSIb3DQEBCwUAA4IBAQBBtDxPYULl5b7VFC7/U0NgV8vTJk4zpPnUMMQ4
|
||||
QF2AWDFAek8oLKrz18KQ8M/DEhDxgkaoeXEMLT6BJUEVNYuFEYHEDGarl0nMDRXL
|
||||
xOgAExfz3Tf/pjsLaha5aWH7NyCSKWC+lYkIOJ/Kb/m/6QsDJoXsEC8AhrPfqJhz
|
||||
UzsCoxIlaDWqawH4+S8bdeX0tvs2VtJk/WOJHxMqXra6kgI4fAgyvr2kIZHinQ3y
|
||||
cgX40uAC38bwpE95kJ7FhSfQlE1Rt7sOspUj098Dd0RNDn2uKyOTxEqIELHfw4AX
|
||||
O3XAzt8qDyho8nEd/xiQ6qgsQnvXa+hSRJw42g3/czVskxRx
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,19 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDIDCCAgigAwIBAgIBAjANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDDAJDQTAg
|
||||
Fw0xNjAxMTUwODE5NDlaGA8yMTE2MDExNjA4MTk0OVowGTEXMBUGA1UEAwwOc2Vy
|
||||
dmVyLmV4YW1wbGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCo/4lY
|
||||
YYWu3tssD9Vz++K3qBt6dWAr1H08c3a1rt6TL38kkG3JHPSKOM2fooAWVsu0LLuT
|
||||
5Rcf/w3GQ/4xNPgo2HXpo7uIgu+jcuJTYgVFTeAxl++qnRDSWA2eBp4yuxsIVl1l
|
||||
Dz9mjsI2oBH/wFk1/Ukc3RxCMwZ4rgQ4I+XndWfTlK1aqUAfrFkQ9QzBZK1KxMY1
|
||||
U7OWaoIbFYvRmavknm+UqtKW5Vf7jJFkijwkFsbSGb6CYBM7YrDtPh2zyvlr3zG5
|
||||
ep5LR2inKcc/SuIiJ7TvkGPX79ByST5brbkb1Ctvhmjd1XMSuEPJ3EEPoqNGT4tn
|
||||
iIQPYf55NB9KiR+3AgMBAAGjfTB7MB0GA1UdDgQWBBTnm+IqrYpsOst2UeWOB5gi
|
||||
l+FzojAfBgNVHSMEGDAWgBQBaJ1v+UdTZGJOltvDcSXTMk5QrTAJBgNVHRMEAjAA
|
||||
MBMGA1UdJQQMMAoGCCsGAQUFBwMBMBkGA1UdEQQSMBCCDnNlcnZlci5leGFtcGxl
|
||||
MA0GCSqGSIb3DQEBCwUAA4IBAQC8XKL6Bh01xQv+3BTk4Kqu95/TEecZdBPsxU4r
|
||||
mCT829HsTw54Od7ID64Kzxi52RtJKPDnd3GB1tDAChEYI+U0g3582JiZCXPwxkC0
|
||||
y2YEhsXgatfOj0h5eT47FdmH7YeY4S6PxNo7Ek3ma5523M6dqcbP71fLvFptu5DZ
|
||||
dP9+I9hxeojAeumKONzVK4ADWthqgMgVKqjV34lqNNcWDEXgOUjJwT1HXnlwnCMk
|
||||
PtdnDSvzHEQFt25RZwkiOjimC97FZAPmsyYmLHc4q6s81ms5M4S9dackCA6TDRvv
|
||||
sOzivaeM07/94iKBINFpoHpJmD9Z5zE+vH2weMVjhSQnFsGc
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,37 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDIDCCAgigAwIBAgIBAjANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDDAJDQTAg
|
||||
Fw0xNjAxMTUwODE5NTBaGA8yMTE2MDExNjA4MTk1MFowGTEXMBUGA1UEAwwOc2Vy
|
||||
dmVyLmV4YW1wbGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCo/4lY
|
||||
YYWu3tssD9Vz++K3qBt6dWAr1H08c3a1rt6TL38kkG3JHPSKOM2fooAWVsu0LLuT
|
||||
5Rcf/w3GQ/4xNPgo2HXpo7uIgu+jcuJTYgVFTeAxl++qnRDSWA2eBp4yuxsIVl1l
|
||||
Dz9mjsI2oBH/wFk1/Ukc3RxCMwZ4rgQ4I+XndWfTlK1aqUAfrFkQ9QzBZK1KxMY1
|
||||
U7OWaoIbFYvRmavknm+UqtKW5Vf7jJFkijwkFsbSGb6CYBM7YrDtPh2zyvlr3zG5
|
||||
ep5LR2inKcc/SuIiJ7TvkGPX79ByST5brbkb1Ctvhmjd1XMSuEPJ3EEPoqNGT4tn
|
||||
iIQPYf55NB9KiR+3AgMBAAGjfTB7MB0GA1UdDgQWBBTnm+IqrYpsOst2UeWOB5gi
|
||||
l+FzojAfBgNVHSMEGDAWgBS0ETPx1+Je91OeICIQT4YGvx/JXjAJBgNVHRMEAjAA
|
||||
MBMGA1UdJQQMMAoGCCsGAQUFBwMCMBkGA1UdEQQSMBCCDnNlcnZlci5leGFtcGxl
|
||||
MA0GCSqGSIb3DQEBCwUAA4IBAQB+x23yjviJ9/n0G65xjntoPCLpsZtqId+WvN/9
|
||||
sXGqRZyAnBWPFpWrf9qXdxXZpTw7KRfywnEVsUQP12XKCc9JH4tG4l/wCDaHi9qO
|
||||
pLstQskcXk40gWaU83ojjchdtDFBaxR5KxC83SR669Rw9mn66bWz/6zpK9VYohVh
|
||||
A5/3RqteQaeQETFbZdlb6e7jAjiGp6DmAiH/WLrVvMY8k0z81TD0+UjJqI9097mF
|
||||
VtNX0l+46/tR4zvyA4yYqxK+L8M57SjfwxvwUpDxxVVnRsf3kHhudeAc+UDWzqws
|
||||
n5P71o+AfbkYzhHsSFIZyYUnGv+JApFpcGEMEiHL2iBhCRdx
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIC7DCCAdSgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290
|
||||
IENBMCAXDTE2MDExNTA4MTk0OVoYDzIxMTYwMTE2MDgxOTQ5WjANMQswCQYDVQQD
|
||||
DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvd
|
||||
j9IxsogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOz
|
||||
n1k50DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/W
|
||||
l9rFQtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0l
|
||||
YW5INvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAc
|
||||
ZGh7r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9
|
||||
CLNNsUcCAwEAAaNQME4wHQYDVR0OBBYEFLQRM/HX4l73U54gIhBPhga/H8leMB8G
|
||||
A1UdIwQYMBaAFI71Ja8em2uEPXyAmslTnE1y96NSMAwGA1UdEwQFMAMBAf8wDQYJ
|
||||
KoZIhvcNAQELBQADggEBADnZ9uXGAdwfNC3xuERIlBwgLROeBRGgcfHWdXZB/tWk
|
||||
IM9ox88wYKWynanPbra4n0zhepooKt+naeY2HLR8UgwT6sTi0Yfld9mjytA8/DP6
|
||||
AcqtIDDf60vNI00sgxjgZqofVayA9KShzIPzjBec4zI1sg5YzoSNyH28VXFstEpi
|
||||
8CVtmRYQHhc2gDI9MGge4sHRYwaIFkegzpwcEUnp6tTVe9ZvHawgsXF/rCGfH4M6
|
||||
uNO0D+9Md1bdW7382yOtWbkyibsugqnfBYCUH6hAhDlfYzpba2Smb0roc6Crq7HR
|
||||
5HpEYY6qEir9wFMkD5MZsWrNRGRuzd5am82J+aaHz/4=
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,19 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDIDCCAgigAwIBAgIBAjANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDDAJDQTAg
|
||||
Fw0xNjAxMTUwODE5NTBaGA8yMTE2MDExNjA4MTk1MFowGTEXMBUGA1UEAwwOc2Vy
|
||||
dmVyLmV4YW1wbGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCo/4lY
|
||||
YYWu3tssD9Vz++K3qBt6dWAr1H08c3a1rt6TL38kkG3JHPSKOM2fooAWVsu0LLuT
|
||||
5Rcf/w3GQ/4xNPgo2HXpo7uIgu+jcuJTYgVFTeAxl++qnRDSWA2eBp4yuxsIVl1l
|
||||
Dz9mjsI2oBH/wFk1/Ukc3RxCMwZ4rgQ4I+XndWfTlK1aqUAfrFkQ9QzBZK1KxMY1
|
||||
U7OWaoIbFYvRmavknm+UqtKW5Vf7jJFkijwkFsbSGb6CYBM7YrDtPh2zyvlr3zG5
|
||||
ep5LR2inKcc/SuIiJ7TvkGPX79ByST5brbkb1Ctvhmjd1XMSuEPJ3EEPoqNGT4tn
|
||||
iIQPYf55NB9KiR+3AgMBAAGjfTB7MB0GA1UdDgQWBBTnm+IqrYpsOst2UeWOB5gi
|
||||
l+FzojAfBgNVHSMEGDAWgBS0ETPx1+Je91OeICIQT4YGvx/JXjAJBgNVHRMEAjAA
|
||||
MBMGA1UdJQQMMAoGCCsGAQUFBwMCMBkGA1UdEQQSMBCCDnNlcnZlci5leGFtcGxl
|
||||
MA0GCSqGSIb3DQEBCwUAA4IBAQB+x23yjviJ9/n0G65xjntoPCLpsZtqId+WvN/9
|
||||
sXGqRZyAnBWPFpWrf9qXdxXZpTw7KRfywnEVsUQP12XKCc9JH4tG4l/wCDaHi9qO
|
||||
pLstQskcXk40gWaU83ojjchdtDFBaxR5KxC83SR669Rw9mn66bWz/6zpK9VYohVh
|
||||
A5/3RqteQaeQETFbZdlb6e7jAjiGp6DmAiH/WLrVvMY8k0z81TD0+UjJqI9097mF
|
||||
VtNX0l+46/tR4zvyA4yYqxK+L8M57SjfwxvwUpDxxVVnRsf3kHhudeAc+UDWzqws
|
||||
n5P71o+AfbkYzhHsSFIZyYUnGv+JApFpcGEMEiHL2iBhCRdx
|
||||
-----END CERTIFICATE-----
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user