diff options
author | Heikki Toivonen <heikki@heikkitoivonen.net> | 2006-12-14 22:07:09 +0000 |
---|---|---|
committer | Heikki Toivonen <heikki@heikkitoivonen.net> | 2006-12-14 22:07:09 +0000 |
commit | 0deed6ec87356f20be71ab41e992289436a7420b (patch) | |
tree | 0f8f252cf395b9da4972a8da3ce9a7dc8fbf881d | |
parent | 86dafb3622ed33efad5dfa02c1de6fcfaa51a9c7 (diff) | |
download | m2crypto-0deed6ec87356f20be71ab41e992289436a7420b.tar.gz |
Merge from trunk r499.
git-svn-id: http://svn.osafoundation.org/m2crypto/branches/0.17@500 2715db39-9adf-0310-9c64-84f055769b4b
-rw-r--r-- | CHANGES | 13 | ||||
-rw-r--r-- | INSTALL | 44 | ||||
-rw-r--r-- | M2Crypto/EC.py | 11 | ||||
-rw-r--r-- | M2Crypto/Err.py | 3 | ||||
-rw-r--r-- | M2Crypto/SSL/Connection.py | 2 | ||||
-rw-r--r-- | M2Crypto/X509.py | 5 | ||||
-rw-r--r-- | SWIG/_lib.i | 2 | ||||
-rw-r--r-- | SWIG/_x509.i | 2 | ||||
-rw-r--r-- | demo/ec/ecdsa_bench.py | 11 | ||||
-rw-r--r-- | setup.py | 16 | ||||
-rw-r--r-- | tests/README | 20 | ||||
-rw-r--r-- | tests/alltests.py | 66 | ||||
-rw-r--r-- | tests/ca.pem | 74 | ||||
-rw-r--r-- | tests/recipient.pem | 75 | ||||
-rw-r--r-- | tests/recipient_key.pem | 26 | ||||
-rw-r--r-- | tests/server.pem | 100 | ||||
-rw-r--r-- | tests/signer.pem | 77 | ||||
-rw-r--r-- | tests/signer_key.pem | 26 | ||||
-rw-r--r-- | tests/test_bio_ssl.py | 4 | ||||
-rw-r--r-- | tests/test_dh.py | 6 | ||||
-rw-r--r-- | tests/test_dsa.py | 8 | ||||
-rw-r--r-- | tests/test_ec_curves.py | 34 | ||||
-rw-r--r-- | tests/test_ecdh.py | 2 | ||||
-rw-r--r-- | tests/test_ecdsa.py | 6 | ||||
-rw-r--r-- | tests/test_rand.py | 8 | ||||
-rw-r--r-- | tests/test_rsa.py | 8 | ||||
-rw-r--r-- | tests/test_smime.py | 34 | ||||
-rw-r--r-- | tests/test_ssl.py | 89 | ||||
-rw-r--r-- | tests/test_ssl_win.py | 16 | ||||
-rw-r--r-- | tests/test_x509.py | 28 | ||||
-rw-r--r-- | tests/x509.pem | 100 |
31 files changed, 524 insertions, 392 deletions
@@ -1,9 +1,12 @@ 0.17 ---- +- setup.py has new test command to run unit tests (requires setuptools) - Added m2urllib2, by James Bowes (python 2.4 and later, at least for now) - Added CONNECT proxy for httpslib and m2urllib2, by James Bowes - Added PKey.get_modulus, X509.get_fingerprint, X509_Name.as_der and m2.bn_to_hex, by Thomas Uram +- Prevent Connection.makefile from freeing bio redundantly, by Thomas Uram +- Added Err.peek_error_code, by Thomas Uram - Fixed m2urllib.open_https to return the response headers, otherwise code that relied on that would break (for example msnlib-3.5), by Arno bakker - Fixed twisted wrapper to work with >16kb BIO buffers, by Martin Paljak @@ -15,9 +18,11 @@ - smime_read_pkcs7 was changed to automatically call BIO_set_mem_eof_return on memory BIOs because otherwise the read would fail with "SMIME_Error: not enough data" +- X509.new_extension('subjectKeyIdentifier', 'hash') raises ValueError instead + of crashing Python -0.16 ----- +0.16 - 2006-07-05 +----------------- - Minimum requirements updated: Python 2.3+, OpenSSL 0.9.7+, SWIG 1.3.24+ - Optional features from OpenSSL 0.9.8 and newer - Enhancements to EVP and X509 to allow proxy certificate handling, @@ -71,8 +76,8 @@ - More and better Epydoc formatted docstrings - More than doubled the number of unit tests, also made many demos into tests -0.15 ----- +0.15 - 2005-08-17 +----------------- - Support OpenSSL 0.9.8, Python 2.4.1, SWIG 1.3.24 - Fixed multiple memory leaks - Twisted integration @@ -27,8 +27,10 @@ Installing on Unix-like systems, including Cygwin $ cd m2crypto-0.17 $ python setup.py build $ python setup.py install - $ cd tests - $ python alltests.py + +If you have installed setuptools you can also optionally run tests like this: + + $ python setup.py test This assumes OpenSSL is installed in /usr. You can provide an alternate OpenSSL prefix location with --openssl option to build command. Other @@ -44,6 +46,10 @@ files are in ``c:\pkg\openssl\include``, and the import libraries in ``c:\pkg\openssl\lib``. As with other platforms, you can specify a different OpenSSL location with --openssl option. +Using OpenSSL 0.9.8 on Windows requires Python be built with applink.c +(add an include statement in python.c). This is not a requirement for +Linux or MacOSX. (applink.c is provided by OpenSSL.) + MSVC++ ~~~~~~~~ @@ -84,8 +90,6 @@ Build M2Crypto: python setup.py build -cmingw32 python setup.py install - cd tests - python alltests.py BC++ @@ -118,5 +122,33 @@ Then, :: python setup.py install - cd tests - python alltests.py + + +MacOSX +------ + +Follow the standard instructions to build and install M2Crypto. +However, should you encounter difficulties, you may want to consider +the following possibilities. + + - Distutils for Python 2.5 now provides support for universal + builds (ppc and i386) and Distutils requires a recent version + of Xcode. See http://developer.apple.com/tools/download/ + + - OpenSSL 0.9.7l gets installed in /usr with Apple's Security + Update 2006-007. If you need features in OpenSSL 0.9.8, you + should consider installing 0.9.8 in /usr/local. The commands + are: + + OpenSSL: + ./config shared --prefix=/usr/local + make + make test + sudo make install [or... install_sw] + + M2Crypto: + python setup.py build --openssl=/usr/local + sudo python setup.py install --openssl=/usr/local + + + diff --git a/M2Crypto/EC.py b/M2Crypto/EC.py index 2661ebf..7b57fb0 100644 --- a/M2Crypto/EC.py +++ b/M2Crypto/EC.py @@ -83,8 +83,15 @@ NID_wap_wsg_idm_ecid_wtls10 = m2.NID_wap_wsg_idm_ecid_wtls10 NID_wap_wsg_idm_ecid_wtls11 = m2.NID_wap_wsg_idm_ecid_wtls11 NID_wap_wsg_idm_ecid_wtls12 = m2.NID_wap_wsg_idm_ecid_wtls12 -NID_ipsec3 = m2.NID_ipsec3 -NID_ipsec4 = m2.NID_ipsec4 +# The following two curves, according to OpenSSL, have a +# "Questionable extension field!" and are not supported by +# the OpenSSL inverse function. ECError: no inverse. +# As such they cannot be used for signing. They might, +# however, be usable for encryption but that has not +# been tested. Until thir usefulness can be established, +# they are not supported at this time. +# NID_ipsec3 = m2.NID_ipsec3 +# NID_ipsec4 = m2.NID_ipsec4 class EC: diff --git a/M2Crypto/Err.py b/M2Crypto/Err.py index a1e5956..3588f76 100644 --- a/M2Crypto/Err.py +++ b/M2Crypto/Err.py @@ -13,6 +13,9 @@ def get_error(): def get_error_code(): return m2.err_get_error() +def peek_error_code(): + return m2.err_peek_error() + def get_error_lib(err): return m2.err_lib_error_string(err) diff --git a/M2Crypto/SSL/Connection.py b/M2Crypto/SSL/Connection.py index 1d53074..4098fac 100644 --- a/M2Crypto/SSL/Connection.py +++ b/M2Crypto/SSL/Connection.py @@ -288,7 +288,7 @@ class Connection: # XXX Need to dup(). bio = BIO.BIO(self.sslbio, _close_cb=self.close) m2.bio_do_handshake(bio._ptr()) - return BIO.IOBuffer(bio, m2mode) + return BIO.IOBuffer(bio, m2mode, _pyfree=0) def getsockname(self): return self.socket.getsockname() diff --git a/M2Crypto/X509.py b/M2Crypto/X509.py index 176267e..408972e 100644 --- a/M2Crypto/X509.py +++ b/M2Crypto/X509.py @@ -21,6 +21,9 @@ def new_extension(name, value, critical=0, _pyfree=1): """ Create new X509_Extension instance. """ + if name == 'subjectKeyIdentifier' and \ + value.strip('0123456789abcdefABCDEF:') is not '': + raise ValueError('value must be precomputed hash') lhash = m2.x509v3_lhash() ctx = m2.x509v3_set_conf_lhash(lhash) x509_ext_ptr = m2.x509v3_ext_conf(lhash, ctx, name, value) @@ -521,7 +524,7 @@ class X509: md = EVP.MessageDigest(md) md.update(der) digest = md.final() - return hex(util.octx_to_num(digest)) + return hex(util.octx_to_num(digest))[2:-1].upper() def load_cert(file): """ diff --git a/SWIG/_lib.i b/SWIG/_lib.i index 6d96c8d..c7e0ab0 100644 --- a/SWIG/_lib.i +++ b/SWIG/_lib.i @@ -441,6 +441,8 @@ extern void ERR_print_errors_fp(FILE *); extern void ERR_print_errors(BIO *); %rename(err_get_error) ERR_get_error; extern unsigned long ERR_get_error(void); +%rename(err_peek_error) ERR_peek_error; +extern unsigned long ERR_peek_error(void); %rename(err_lib_error_string) ERR_lib_error_string; extern const char *ERR_lib_error_string(unsigned long); %rename(err_func_error_string) ERR_func_error_string; diff --git a/SWIG/_x509.i b/SWIG/_x509.i index 8e2d328..4fbc8aa 100644 --- a/SWIG/_x509.i +++ b/SWIG/_x509.i @@ -134,6 +134,8 @@ extern int X509_NAME_add_entry_by_NID(X509_NAME *, int, int, unsigned char *, in extern int X509_NAME_print_ex(BIO *, X509_NAME *, int, unsigned long); %rename(x509_name_print_ex_fp) X509_NAME_print_ex_fp; extern int X509_NAME_print_ex_fp(FILE *, X509_NAME *, int, unsigned long); +%rename(x509_name_hash) X509_NAME_hash; +extern unsigned long X509_NAME_hash(X509_NAME *); %rename(x509_name_entry_new) X509_NAME_ENTRY_new; extern X509_NAME_ENTRY *X509_NAME_ENTRY_new( void ); diff --git a/demo/ec/ecdsa_bench.py b/demo/ec/ecdsa_bench.py index 2277124..bafceb1 100644 --- a/demo/ec/ecdsa_bench.py +++ b/demo/ec/ecdsa_bench.py @@ -101,10 +101,13 @@ curves = ['secp112r1', 'wap_wsg_idm_ecid_wtls12', ] -# the following two curves are supported in OpenSSL and -# M2Crypto but not for ECDSA use. (It seems they want an -# inverse function.) The curves may be used for EC encryption -# except that OpenSSL does not yet support EC enceyption. +# The following two curves, according to OpenSSL, have a +# "Questionable extension field!" and are not supported by +# the OpenSSL inverse function. ECError: no inverse. +# As such they cannot be used for signing. They might, +# however, be usable for encryption but that has not +# been tested. Until thir usefulness can be established, +# they are not supported at this time. # # Oakley-EC2N-3: # IPSec/IKE/Oakley curve #3 over a 155 bit binary field. @@ -10,6 +10,12 @@ Copyright (C) 2004-2006 OSAF. All Rights Reserved. """ import os, sys + +try: + import setuptools # Must import setuptools before distutils +except ImportError: + pass # test command not available + from distutils.core import setup, Extension from distutils.command import build_ext @@ -20,7 +26,7 @@ def parse_args(option_dict): option_dict['openssl_prefix'] = arg.split("=")[1] sys.argv.remove(arg) break - + if os.name == 'nt': libraries = ['ssleay32', 'libeay32'] option_dict = {'openssl_prefix': 'c:\\pkg'} @@ -98,8 +104,7 @@ if sys.version_info < (2,4): build_ext.build_ext.swig_sources = swig_sources - -m2crypto = Extension(name = '__m2crypto', +m2crypto = Extension(name='M2Crypto.__m2crypto', sources = ['SWIG/_m2crypto.i'], include_dirs = include_dirs, library_dirs = library_dirs, @@ -121,7 +126,6 @@ setup(name = 'M2Crypto', maintainer_email = 'heikki@osafoundation.org', url = 'http://wiki.osafoundation.org/bin/view/Projects/MeTooCrypto', packages = ['M2Crypto', 'M2Crypto.SSL', 'M2Crypto.PGP'], - ext_package = 'M2Crypto', - ext_modules = [m2crypto] + ext_modules = [m2crypto], + test_suite='tests.alltests.suite', ) - diff --git a/tests/README b/tests/README index 395e3ad..6f5813c 100644 --- a/tests/README +++ b/tests/README @@ -1,10 +1,14 @@ This directory contains unit tests for M2Crypto. -You must first install M2Crypto, then cd into this directory, and -run the tests. +To run all tests, make sure you have installed setuptools and then issue the +following command from the M2Crypto root directory: + +python setup.py test + +To run tests in a single file, for example test_ssl.py, do this: + +python setup.py test --test-suite=tests.test_ssl -Invoke 'alltests.py' to execute all tests. Each test can also be run -individually. Look also in the demo directory for other samples. @@ -27,14 +31,14 @@ field is localhost. CA.sh -newreq CA.sh -sign cp newcert.pem ../server.pem -openssl rsa <newkey.pem >>server.pem +openssl rsa <newkey.pem >>../server.pem Making the x509 certificate and key. CA.sh -newreq CA.sh -sign cp newcert.pem ../x509.pem -openssl rsa <newkey.pem >>x509.pem +openssl rsa <newkey.pem >>../x509.pem Making the signer certificate. Make sure the email address is signer@example.com. @@ -42,7 +46,7 @@ signer@example.com. CA.sh -newreq CA.sh -sign cp newcert.pem ../signer.pem -openssl rsa <newkey.pem >signer_key.pem +openssl rsa <newkey.pem >../signer_key.pem Making the recipient certificate. Make sure the email address is recipient@example.com. @@ -50,4 +54,4 @@ recipient@example.com. CA.sh -newreq CA.sh -sign cp newcert.pem ../recipient.pem -openssl rsa <newkey.pem >recipient_key.pem +openssl rsa <newkey.pem >../recipient_key.pem diff --git a/tests/alltests.py b/tests/alltests.py index 9d703d1..528aa85 100644 --- a/tests/alltests.py +++ b/tests/alltests.py @@ -2,33 +2,43 @@ def suite(): from M2Crypto import m2 + import os, sys + import unittest + def my_import(name): + # See http://docs.python.org/lib/built-in-funcs.html#l2h-6 + mod = __import__(name) + components = name.split('.') + for comp in components[1:]: + mod = getattr(mod, comp) + return mod + modules_to_test = [ - 'test_asn1', - 'test_bio', - 'test_bio_membuf', - 'test_bio_file', - 'test_bio_iobuf', - 'test_bio_ssl', - 'test_bn', - 'test_authcookie', - 'test_dh', - 'test_dsa', - 'test_evp', - 'test_rand', - 'test_rsa', - 'test_smime', - 'test_x509'] + 'tests.test_asn1', + 'tests.test_bio', + 'tests.test_bio_membuf', + 'tests.test_bio_file', + 'tests.test_bio_iobuf', + 'tests.test_bio_ssl', + 'tests.test_bn', + 'tests.test_authcookie', + 'tests.test_dh', + 'tests.test_dsa', + 'tests.test_evp', + 'tests.test_rand', + 'tests.test_rsa', + 'tests.test_smime', + 'tests.test_x509'] if os.name == 'posix': - modules_to_test.append('test_ssl') + modules_to_test.append('tests.test_ssl') elif os.name == 'nt': - modules_to_test.append('test_ssl_win') + modules_to_test.append('tests.test_ssl_win') if m2.OPENSSL_VERSION_NUMBER >= 0x90800F and m2.OPENSSL_NO_EC == 0: - modules_to_test.append('test_ecdh') - modules_to_test.append('test_ecdsa') - modules_to_test.append('test_ec_curves') + modules_to_test.append('tests.test_ecdh') + modules_to_test.append('tests.test_ecdsa') + modules_to_test.append('tests.test_ec_curves') alltests = unittest.TestSuite() - for module in map(__import__, modules_to_test): + for module in map(my_import, modules_to_test): alltests.addTest(module.suite()) return alltests @@ -47,12 +57,12 @@ def dump_garbage(): print 'There were %d leaks.' % len(gc.garbage) else: - print 'Python garabge collector did not detect any leaks.' + print 'Python garbage collector did not detect any leaks.' print 'However, it is still possible there are leaks in the C code.' -if __name__ == '__main__': - report_leaks = 0 +def runall(report_leaks=0): + report_leaks = report_leaks if report_leaks: import gc @@ -63,9 +73,9 @@ if __name__ == '__main__': from M2Crypto import Rand try: - Rand.load_file('randpool.dat', -1) + Rand.load_file('tests/randpool.dat', -1) unittest.TextTestRunner().run(suite()) - Rand.save_file('randpool.dat') + Rand.save_file('tests/randpool.dat') finally: if os.name == 'posix': from test_ssl import zap_servers @@ -73,3 +83,7 @@ if __name__ == '__main__': if report_leaks: dump_garbage() + + +if __name__ == '__main__': + runall() diff --git a/tests/ca.pem b/tests/ca.pem index d8ba0d3..62a4907 100644 --- a/tests/ca.pem +++ b/tests/ca.pem @@ -3,24 +3,24 @@ Certificate: Version: 3 (0x2) Serial Number: 0 (0x0) Signature Algorithm: sha1WithRSAEncryption - Issuer: C=US, ST=CA, O=M2Crypto CA, CN=localhost + Issuer: C=US, ST=CA, O=M2Crypto, CN=localhost Validity - Not Before: Apr 22 04:35:56 2006 GMT - Not After : Apr 21 04:35:56 2009 GMT - Subject: C=US, ST=CA, O=M2Crypto CA, CN=localhost + Not Before: Dec 14 03:22:06 2006 GMT + Not After : Dec 13 03:22:06 2009 GMT + Subject: C=US, ST=CA, O=M2Crypto, CN=localhost Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): - 00:d8:80:02:8f:b5:7d:9f:9b:79:76:67:a5:66:64: - c0:30:0c:71:65:f1:c6:78:01:a0:29:d4:3a:2c:e5: - ee:58:4d:db:53:c5:74:6e:4e:f7:b6:a5:8e:ef:ab: - e8:7c:f5:5d:2d:18:ba:95:b8:15:43:6e:5a:78:c2: - 91:05:08:b2:7e:cf:c4:d3:bb:ac:c7:43:27:fb:8f: - 43:0d:7b:d0:d1:32:51:86:11:6e:3e:aa:68:19:88: - b9:cf:d5:72:f0:a4:73:d1:69:c4:65:14:0e:12:64: - 7e:1f:df:18:09:0b:6a:4b:cd:bf:ae:59:82:15:1c: - 90:0f:c3:e5:cb:b3:ed:86:4d + 00:c8:ee:96:31:80:55:c0:24:cf:e8:95:22:86:ac: + 23:86:1a:5a:44:1c:c8:1d:99:5a:9b:5a:8f:4b:08: + 6d:c1:c7:5b:16:b1:92:70:1c:a4:d3:d5:9e:8d:b8: + ae:03:79:ae:1d:a4:6e:4b:ef:06:16:68:0d:79:a6: + dc:7b:fc:a8:7c:f4:4c:fb:3a:e0:c9:8b:01:be:be: + 32:0f:b4:b7:55:32:fc:70:a5:0d:17:3d:5c:f8:50: + 8d:9a:44:3c:12:06:72:58:98:5f:3a:54:6c:90:82: + 15:76:c9:16:1c:13:b7:31:7e:65:f0:d0:75:23:cf: + eb:ba:d5:64:16:2a:a5:13:bf Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: @@ -28,32 +28,32 @@ Certificate: Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: - 5C:F9:C5:9B:B0:02:37:3C:66:73:4D:0E:CB:5A:3D:BB:3A:46:22:DD + CD:06:38:23:C3:50:0C:F6:A8:5A:F0:A7:DB:51:03:21:00:41:DB:37 X509v3 Authority Key Identifier: - keyid:5C:F9:C5:9B:B0:02:37:3C:66:73:4D:0E:CB:5A:3D:BB:3A:46:22:DD + keyid:CD:06:38:23:C3:50:0C:F6:A8:5A:F0:A7:DB:51:03:21:00:41:DB:37 Signature Algorithm: sha1WithRSAEncryption - 6b:9e:71:4a:ad:d2:1c:b7:58:1a:6e:8b:89:92:8d:4e:62:61: - 06:2e:e8:11:f8:9c:a0:e2:11:7c:b6:e2:be:ef:b9:b1:35:20: - d1:81:62:c5:ca:3c:4f:c9:88:72:f7:50:d8:e8:e0:06:43:ee: - c5:5c:38:9b:e7:24:46:a6:ee:8d:b0:70:4e:75:96:00:db:d6: - 59:f9:58:74:67:9f:ca:9c:12:fc:77:a7:0e:5a:38:22:5b:de: - c9:33:35:bd:d0:4c:9f:6a:0f:71:7b:db:cb:fd:da:bc:39:4f: - 23:1e:74:5b:ff:8d:73:72:16:a9:9f:57:54:96:3e:2c:f0:65: - af:df + 9c:6a:71:13:dc:41:5e:dc:27:c4:aa:d8:76:bb:ac:f7:3e:d6: + 02:d1:55:c0:b0:8b:07:c3:5e:4d:0d:c0:3b:dc:a9:98:04:e5: + 23:fe:61:8a:16:93:d8:d3:bf:30:f1:ca:fb:ba:33:78:58:cf: + d6:8d:49:94:cc:66:01:42:61:27:79:95:f5:36:89:bb:9a:a5: + 1d:e4:ac:fa:d3:53:50:10:58:40:90:1d:b7:ca:9e:0e:cb:16: + a1:49:5c:46:85:13:5a:61:39:44:c2:7c:7e:b2:d6:96:5c:3a: + bd:07:03:24:f2:9b:87:ec:f4:00:a5:11:50:a7:73:3c:96:34: + 3b:01 -----BEGIN CERTIFICATE----- -MIICfDCCAeWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEL -MAkGA1UECBMCQ0ExFDASBgNVBAoTC00yQ3J5cHRvIENBMRIwEAYDVQQDEwlsb2Nh -bGhvc3QwHhcNMDYwNDIyMDQzNTU2WhcNMDkwNDIxMDQzNTU2WjBEMQswCQYDVQQG -EwJVUzELMAkGA1UECBMCQ0ExFDASBgNVBAoTC00yQ3J5cHRvIENBMRIwEAYDVQQD -Ewlsb2NhbGhvc3QwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANiAAo+1fZ+b -eXZnpWZkwDAMcWXxxngBoCnUOizl7lhN21PFdG5O97alju+r6Hz1XS0YupW4FUNu -WnjCkQUIsn7PxNO7rMdDJ/uPQw170NEyUYYRbj6qaBmIuc/VcvCkc9FpxGUUDhJk -fh/fGAkLakvNv65ZghUckA/D5cuz7YZNAgMBAAGjfjB8MAwGA1UdEwQFMAMBAf8w -LAYJYIZIAYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0G -A1UdDgQWBBRc+cWbsAI3PGZzTQ7LWj27OkYi3TAfBgNVHSMEGDAWgBRc+cWbsAI3 -PGZzTQ7LWj27OkYi3TANBgkqhkiG9w0BAQUFAAOBgQBrnnFKrdIct1gabouJko1O -YmEGLugR+Jyg4hF8tuK+77mxNSDRgWLFyjxPyYhy91DY6OAGQ+7FXDib5yRGpu6N -sHBOdZYA29ZZ+Vh0Z5/KnBL8d6cOWjgiW97JMzW90Eyfag9xe9vL/dq8OU8jHnRb -/41zchapn1dUlj4s8GWv3w== +MIICdjCCAd+gAwIBAgIBADANBgkqhkiG9w0BAQUFADBBMQswCQYDVQQGEwJVUzEL +MAkGA1UECBMCQ0ExETAPBgNVBAoTCE0yQ3J5cHRvMRIwEAYDVQQDEwlsb2NhbGhv +c3QwHhcNMDYxMjE0MDMyMjA2WhcNMDkxMjEzMDMyMjA2WjBBMQswCQYDVQQGEwJV +UzELMAkGA1UECBMCQ0ExETAPBgNVBAoTCE0yQ3J5cHRvMRIwEAYDVQQDEwlsb2Nh +bGhvc3QwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMjuljGAVcAkz+iVIoas +I4YaWkQcyB2ZWptaj0sIbcHHWxaxknAcpNPVno24rgN5rh2kbkvvBhZoDXmm3Hv8 +qHz0TPs64MmLAb6+Mg+0t1Uy/HClDRc9XPhQjZpEPBIGcliYXzpUbJCCFXbJFhwT +tzF+ZfDQdSPP67rVZBYqpRO/AgMBAAGjfjB8MAwGA1UdEwQFMAMBAf8wLAYJYIZI +AYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQW +BBTNBjgjw1AM9qha8KfbUQMhAEHbNzAfBgNVHSMEGDAWgBTNBjgjw1AM9qha8Kfb +UQMhAEHbNzANBgkqhkiG9w0BAQUFAAOBgQCcanET3EFe3CfEqth2u6z3PtYC0VXA +sIsHw15NDcA73KmYBOUj/mGKFpPY078w8cr7ujN4WM/WjUmUzGYBQmEneZX1Nom7 +mqUd5Kz601NQEFhAkB23yp4OyxahSVxGhRNaYTlEwnx+staWXDq9BwMk8puH7PQA +pRFQp3M8ljQ7AQ== -----END CERTIFICATE----- diff --git a/tests/recipient.pem b/tests/recipient.pem index 1fb9968..8f59e59 100644 --- a/tests/recipient.pem +++ b/tests/recipient.pem @@ -3,24 +3,24 @@ Certificate: Version: 3 (0x2) Serial Number: 4 (0x4) Signature Algorithm: sha1WithRSAEncryption - Issuer: C=US, ST=CA, O=M2Crypto CA, CN=localhost + Issuer: C=US, ST=CA, O=M2Crypto, CN=localhost Validity - Not Before: Apr 22 04:42:04 2006 GMT - Not After : Apr 22 04:42:04 2007 GMT - Subject: C=US, ST=CA, O=M2Crypto Recipient, CN=localhost/emailAddress=recipient@example.com + Not Before: Dec 14 03:47:02 2006 GMT + Not After : Dec 13 03:47:02 2009 GMT + Subject: C=US, ST=CA, O=M2Crypto, CN=localhost/emailAddress=recipient@example.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): - 00:e3:5a:12:73:eb:fb:e3:4e:ba:8c:fb:68:af:bc: - 87:ee:65:2d:20:d4:80:7d:87:c9:0b:81:a0:32:35: - 0d:33:52:4b:45:87:d8:02:de:54:c5:e5:7a:70:bd: - 66:08:6c:a7:4d:da:e5:20:d1:a8:08:e2:22:5e:b4: - f2:c8:42:6c:68:96:5b:61:ec:74:e7:99:65:c1:be: - a0:a2:df:a9:06:ec:5c:ff:27:88:04:45:f0:af:a2: - ea:73:cc:e4:05:cf:c9:39:4c:c4:bd:0b:67:09:6b: - 45:b9:e5:fd:19:6e:b0:81:fa:f4:ed:69:b4:40:b1: - 54:e5:f5:35:a6:eb:4f:33:11 + 00:cd:6c:81:f5:c3:3c:d7:3f:d9:40:27:93:73:93: + 1a:c3:0c:37:32:12:31:89:da:4a:ae:da:7d:2f:b3: + 78:95:ac:35:6d:33:3d:3b:5a:a8:7e:d9:cf:39:26: + 6a:80:49:06:06:fd:f7:fa:4c:71:4a:c4:ef:05:6e: + 05:03:36:14:27:12:75:65:6b:b3:a8:7b:69:fb:2a: + 4e:e1:ec:65:6e:01:ff:05:98:ad:04:73:73:08:8b: + 58:5d:70:b3:8b:f7:cf:10:8d:d2:79:2a:e3:4b:8d: + 79:e0:52:bf:9c:75:92:17:8b:ee:18:5b:3a:73:4b: + 0e:ea:4a:fa:e7:f4:f6:40:2f Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: @@ -28,33 +28,32 @@ Certificate: Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: - 6B:76:75:DA:A2:DA:DC:41:7B:8E:76:A2:65:BC:BF:AD:6E:18:03:C4 + F4:33:02:B5:35:2D:52:7B:51:1C:F9:08:C7:D2:A8:8D:BE:CF:13:9E X509v3 Authority Key Identifier: - keyid:5C:F9:C5:9B:B0:02:37:3C:66:73:4D:0E:CB:5A:3D:BB:3A:46:22:DD + keyid:CD:06:38:23:C3:50:0C:F6:A8:5A:F0:A7:DB:51:03:21:00:41:DB:37 Signature Algorithm: sha1WithRSAEncryption - 0b:e8:23:ff:71:df:0a:bd:db:26:9c:84:5f:98:85:6c:2a:07: - ad:e8:19:aa:8a:ae:99:8f:5b:1b:cf:df:9e:04:f1:9e:f7:51: - 01:7a:ce:1c:ce:2b:ea:81:58:41:f8:53:06:6e:ba:1f:77:41: - 51:a1:16:e8:53:08:e1:5a:6f:68:e2:18:43:c3:b1:06:25:16: - f8:5c:d0:39:2b:5b:1d:9a:dc:f3:9a:26:d2:11:09:a1:52:f0: - 32:0a:b4:39:82:08:a8:90:be:d7:43:16:d4:ad:c7:48:39:37: - dd:17:7a:4f:a6:e0:5b:9c:63:42:bf:65:d9:2e:ca:99:b7:dc: - e4:04 + 69:61:e1:72:56:64:75:30:7c:a2:7a:cb:ef:02:f9:6d:cd:41: + d4:1d:a2:7b:14:bc:02:d3:d1:09:40:15:fc:08:ae:22:aa:73: + 1f:85:de:41:a2:f9:90:23:e9:17:76:e8:a6:e8:13:b9:7f:67: + bb:f9:63:dc:b2:f0:e9:b0:eb:75:57:e5:b1:9e:18:93:e2:58: + 32:e4:1a:f1:6b:7a:7e:e8:c7:50:a0:08:68:b7:b6:83:6f:c1: + d6:af:91:e6:65:b3:c2:d3:12:a8:aa:6f:be:ea:da:e4:2b:5c: + 60:34:93:4e:e3:74:0e:d2:0e:9b:3e:0e:4a:37:e6:70:83:c2: + d7:c9 -----BEGIN CERTIFICATE----- -MIICpjCCAg+gAwIBAgIBBDANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEL -MAkGA1UECBMCQ0ExFDASBgNVBAoTC00yQ3J5cHRvIENBMRIwEAYDVQQDEwlsb2Nh -bGhvc3QwHhcNMDYwNDIyMDQ0MjA0WhcNMDcwNDIyMDQ0MjA0WjBxMQswCQYDVQQG -EwJVUzELMAkGA1UECBMCQ0ExGzAZBgNVBAoTEk0yQ3J5cHRvIFJlY2lwaWVudDES -MBAGA1UEAxMJbG9jYWxob3N0MSQwIgYJKoZIhvcNAQkBFhVyZWNpcGllbnRAZXhh -bXBsZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAONaEnPr++NOuoz7 -aK+8h+5lLSDUgH2HyQuBoDI1DTNSS0WH2ALeVMXlenC9Zghsp03a5SDRqAjiIl60 -8shCbGiWW2HsdOeZZcG+oKLfqQbsXP8niARF8K+i6nPM5AXPyTlMxL0LZwlrRbnl -/RlusIH69O1ptECxVOX1NabrTzMRAgMBAAGjezB5MAkGA1UdEwQCMAAwLAYJYIZI -AYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQW -BBRrdnXaotrcQXuOdqJlvL+tbhgDxDAfBgNVHSMEGDAWgBRc+cWbsAI3PGZzTQ7L -Wj27OkYi3TANBgkqhkiG9w0BAQUFAAOBgQAL6CP/cd8KvdsmnIRfmIVsKget6Bmq -iq6Zj1sbz9+eBPGe91EBes4czivqgVhB+FMGbrofd0FRoRboUwjhWm9o4hhDw7EG -JRb4XNA5K1sdmtzzmibSEQmhUvAyCrQ5ggiokL7XQxbUrcdIOTfdF3pPpuBbnGNC -v2XZLsqZt9zkBA== +MIICmTCCAgKgAwIBAgIBBDANBgkqhkiG9w0BAQUFADBBMQswCQYDVQQGEwJVUzEL +MAkGA1UECBMCQ0ExETAPBgNVBAoTCE0yQ3J5cHRvMRIwEAYDVQQDEwlsb2NhbGhv +c3QwHhcNMDYxMjE0MDM0NzAyWhcNMDkxMjEzMDM0NzAyWjBnMQswCQYDVQQGEwJV +UzELMAkGA1UECBMCQ0ExETAPBgNVBAoTCE0yQ3J5cHRvMRIwEAYDVQQDEwlsb2Nh +bGhvc3QxJDAiBgkqhkiG9w0BCQEWFXJlY2lwaWVudEBleGFtcGxlLmNvbTCBnzAN +BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAzWyB9cM81z/ZQCeTc5Mawww3MhIxidpK +rtp9L7N4law1bTM9O1qoftnPOSZqgEkGBv33+kxxSsTvBW4FAzYUJxJ1ZWuzqHtp ++ypO4exlbgH/BZitBHNzCItYXXCzi/fPEI3SeSrjS4154FK/nHWSF4vuGFs6c0sO +6kr65/T2QC8CAwEAAaN7MHkwCQYDVR0TBAIwADAsBglghkgBhvhCAQ0EHxYdT3Bl +blNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFPQzArU1LVJ7URz5 +CMfSqI2+zxOeMB8GA1UdIwQYMBaAFM0GOCPDUAz2qFrwp9tRAyEAQds3MA0GCSqG +SIb3DQEBBQUAA4GBAGlh4XJWZHUwfKJ6y+8C+W3NQdQdonsUvALT0QlAFfwIriKq +cx+F3kGi+ZAj6Rd26KboE7l/Z7v5Y9yy8Omw63VX5bGeGJPiWDLkGvFren7ox1Cg +CGi3toNvwdavkeZls8LTEqiqb77q2uQrXGA0k07jdA7SDps+Dko35nCDwtfJ -----END CERTIFICATE----- diff --git a/tests/recipient_key.pem b/tests/recipient_key.pem index 5f9ca2f..8ee65b1 100644 --- a/tests/recipient_key.pem +++ b/tests/recipient_key.pem @@ -1,15 +1,15 @@ -----BEGIN RSA PRIVATE KEY----- -MIICXgIBAAKBgQDjWhJz6/vjTrqM+2ivvIfuZS0g1IB9h8kLgaAyNQ0zUktFh9gC -3lTF5XpwvWYIbKdN2uUg0agI4iJetPLIQmxollth7HTnmWXBvqCi36kG7Fz/J4gE -RfCvoupzzOQFz8k5TMS9C2cJa0W55f0ZbrCB+vTtabRAsVTl9TWm608zEQIDAQAB -AoGBANDx6/mbzRC4P1zoherU4zymwdXlVv2HeK7ZgCgEd9BN9p29XjosqU6DO4c3 -mfluGkjEP0ZtSPh5E8tkk6iW21d8PPhqN84awQpMW65rfUZRdM0tJKq3ObZek/4H -GMdYOi14PAlCZGHwtInJ4ndGB8xbTPlAI+hUxppZZfcq6weRAkEA8mpZ82MuGHpm -AifapoWQg0leH043GF/HitJuDICJEbu0ZCJopEhzei16wigQTRDgTRnChIKhMDms -tps0stw4tQJBAPAXnwGzXuszqySXcMSrNI2bhok13K79facNHixiqSzPKg1wh/Lb -s5dtpEHTUnbGGXKvriyFkZyGe9WDYsitlm0CQQDJChhFN/iPhlq46PJ1bYl2x87O -KaCZjz0+TNvFdIe4dDHbZYngzNEv/y2yfWVfdGKArp9aI7en9fzdiAQBXY+NAkAS -oPKQcjdyLm8gBrQUPmh0eFXG/avi0/5U4NqvfPQ9atGLe2jA+jUEEdjF1ry2RIai -9GiiQbbbmz+ugGRAx989AkEAwfz5R8/+veZN4grMPqTMqO2V7AcXbJTYgxO+GDfm -/n8gv9WmQtSqNa0xfdV0ERmKLrWx8sib+hf74aWxV2de3A== +MIICXAIBAAKBgQDNbIH1wzzXP9lAJ5NzkxrDDDcyEjGJ2kqu2n0vs3iVrDVtMz07 +Wqh+2c85JmqASQYG/ff6THFKxO8FbgUDNhQnEnVla7Ooe2n7Kk7h7GVuAf8FmK0E +c3MIi1hdcLOL988QjdJ5KuNLjXngUr+cdZIXi+4YWzpzSw7qSvrn9PZALwIDAQAB +AoGAEBel/qiyxXH9BOeUx4MIn6r/T+7Y7qGpJBV9pRT8J018Sfevnky10mohr6pw +wWf3DukqWfNPFLpktxotTlkYLutzmRz5LhQQp9zyC5dzZKleoIbpAsq4l16+CI44 +usNVc+C/qs4AOvOsEJou9gCQ0L+9Fru/nEZqtFL0z0XrcjECQQDr7QvSbIjE8o2L +eyUC8S0jiImHArzwIqvio3n5zRlGqp+jP/3bD35q6/6DazJgH91V4E+0amBfqHdF +PzX/ppt1AkEA3ucQEjuAyPqsROCs+w6Go9vQD/4qNNv5w0OImaQUi9VliY9pk7Cm +WI5EbYTfYv5HWPdr3Qwbyz05mKy5gEuMkwJAQu+0ZPVKMKaopiRAMf9/UQ+SBW4v +cOpFXj4Hg2o/e585P7YOLjLNKUTfpyWo20DvKUhFFOkBguJnRIxUo73/aQJBAKn8 +toHhBO7AVD3WxbRUOJOfn4WCxDc5hrjFuNfKjKyzGdMVHmO2NLWWEVMgIKfC2TBc +x9J0WIHe+ByZpIHVm6cCQDes1zGfpZKQFbA9xOTZr+FjPfQtSDxY+l5AXNDi+neC +8DR/4UYE+3tsT0DyZWaO3mQW7mh1QG6B3/OlpnvGGqc= -----END RSA PRIVATE KEY----- diff --git a/tests/server.pem b/tests/server.pem index bcd826c..eac419d 100644 --- a/tests/server.pem +++ b/tests/server.pem @@ -3,24 +3,24 @@ Certificate: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: sha1WithRSAEncryption - Issuer: C=US, ST=CA, O=M2Crypto CA, CN=localhost + Issuer: C=US, ST=CA, O=M2Crypto, CN=localhost Validity - Not Before: Apr 22 04:36:56 2006 GMT - Not After : Apr 22 04:36:56 2007 GMT - Subject: C=US, ST=CA, O=M2Crypto Server, CN=localhost + Not Before: Dec 14 03:24:08 2006 GMT + Not After : Dec 13 03:24:08 2009 GMT + Subject: C=US, ST=CA, O=M2Crypto, CN=localhost Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): - 00:a5:cc:39:ad:ba:81:3d:bd:05:f4:61:50:9f:9c: - f6:ad:ec:29:d9:78:1e:24:61:f7:1b:36:bf:69:d8: - b3:45:ae:6f:3a:4c:4f:d6:13:6d:60:8d:f2:bb:2a: - c4:1b:79:fd:e2:f8:d6:3c:56:53:3b:27:f7:3f:70: - a4:64:99:63:46:2e:3f:ef:52:da:a9:04:5b:6e:d4: - 40:57:c5:59:61:d3:3f:7d:b8:03:c1:9b:65:46:2a: - c5:9d:70:b7:ca:79:6e:dd:e4:3f:c2:f4:2f:2e:81: - 32:c8:e9:a6:b6:a8:c8:1f:48:be:7a:66:56:98:fc: - 3c:25:fc:d9:3d:73:07:30:71 + 00:d4:a9:64:75:ed:bb:14:c5:7b:30:f2:f3:3e:3a: + 38:87:18:f7:f0:89:2e:94:1d:1f:76:22:c5:91:dd: + 55:87:ba:2d:e3:15:a3:bd:a6:bc:b2:6c:44:b1:dd: + ff:96:b3:f8:72:3f:3a:41:3e:92:5d:fd:ca:67:e5: + 92:d6:8a:9f:5d:87:dc:35:ab:84:24:4c:f0:fb:9e: + 38:e0:25:14:09:ac:cd:62:5b:52:c4:15:dd:81:60: + 10:ed:84:3f:8e:72:41:64:95:2f:be:14:b6:88:ab: + 95:4f:ea:d7:71:73:93:fd:51:13:23:88:95:7c:7c: + 2a:ea:58:31:b1:a0:b9:7d:cf Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: @@ -28,47 +28,47 @@ Certificate: Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: - F0:48:3A:32:88:8C:80:D7:22:AB:56:F8:86:B3:04:47:10:76:37:BE + FE:0E:47:67:E7:BC:3B:95:FF:98:93:97:C8:97:BC:E8:6C:17:7F:50 X509v3 Authority Key Identifier: - keyid:5C:F9:C5:9B:B0:02:37:3C:66:73:4D:0E:CB:5A:3D:BB:3A:46:22:DD + keyid:CD:06:38:23:C3:50:0C:F6:A8:5A:F0:A7:DB:51:03:21:00:41:DB:37 Signature Algorithm: sha1WithRSAEncryption - 39:47:95:5c:ea:7e:db:b8:e0:80:f6:e5:d4:9f:83:bc:41:89: - 31:97:c8:a4:95:0d:5d:6d:cc:64:8d:19:71:17:75:4b:7f:fb: - 35:88:bf:68:e2:a2:be:c5:71:71:56:2a:92:31:25:2a:4b:98: - 4e:77:42:45:78:45:21:a5:76:99:92:39:32:7d:a2:4c:38:b0: - f1:db:7f:d1:4d:23:99:35:1e:0e:a1:59:a3:ff:9c:51:ef:4c: - 11:c9:32:61:38:11:7d:57:2a:81:9a:96:1f:b3:88:f7:ab:5b: - 58:f7:79:9b:a8:e3:b7:09:90:8e:c9:7d:44:4f:af:85:dc:c8: - 29:4d + 95:0f:12:23:a0:59:d0:23:7e:f5:a0:e9:78:7e:29:89:51:15: + d6:5f:76:2d:50:3c:0a:93:46:b2:7f:8b:b7:8e:7d:56:18:1a: + a2:af:f6:9c:13:be:01:f7:28:7b:b9:93:6e:21:d3:e8:ea:fb: + aa:0b:68:b9:77:32:6f:8b:2d:86:c8:30:80:9c:ea:53:86:0d: + 27:7e:09:41:d0:98:13:e3:5e:49:77:fa:fa:ed:2e:c8:d9:7f: + 0d:9f:a7:01:a1:1c:1a:b4:83:6d:af:8b:cc:43:85:f4:65:73: + 2d:b3:23:d8:fb:24:2b:f1:36:7f:2b:38:2c:d0:65:95:01:b8: + f3:dc -----BEGIN CERTIFICATE----- -MIICfTCCAeagAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEL -MAkGA1UECBMCQ0ExFDASBgNVBAoTC00yQ3J5cHRvIENBMRIwEAYDVQQDEwlsb2Nh -bGhvc3QwHhcNMDYwNDIyMDQzNjU2WhcNMDcwNDIyMDQzNjU2WjBIMQswCQYDVQQG -EwJVUzELMAkGA1UECBMCQ0ExGDAWBgNVBAoTD00yQ3J5cHRvIFNlcnZlcjESMBAG -A1UEAxMJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQClzDmt -uoE9vQX0YVCfnPat7CnZeB4kYfcbNr9p2LNFrm86TE/WE21gjfK7KsQbef3i+NY8 -VlM7J/c/cKRkmWNGLj/vUtqpBFtu1EBXxVlh0z99uAPBm2VGKsWdcLfKeW7d5D/C -9C8ugTLI6aa2qMgfSL56ZlaY/Dwl/Nk9cwcwcQIDAQABo3sweTAJBgNVHRMEAjAA -MCwGCWCGSAGG+EIBDQQfFh1PcGVuU1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTAd -BgNVHQ4EFgQU8Eg6MoiMgNciq1b4hrMERxB2N74wHwYDVR0jBBgwFoAUXPnFm7AC -Nzxmc00Oy1o9uzpGIt0wDQYJKoZIhvcNAQEFBQADgYEAOUeVXOp+27jggPbl1J+D -vEGJMZfIpJUNXW3MZI0ZcRd1S3/7NYi/aOKivsVxcVYqkjElKkuYTndCRXhFIaV2 -mZI5Mn2iTDiw8dt/0U0jmTUeDqFZo/+cUe9MEckyYTgRfVcqgZqWH7OI96tbWPd5 -m6jjtwmQjsl9RE+vhdzIKU0= +MIICczCCAdygAwIBAgIBATANBgkqhkiG9w0BAQUFADBBMQswCQYDVQQGEwJVUzEL +MAkGA1UECBMCQ0ExETAPBgNVBAoTCE0yQ3J5cHRvMRIwEAYDVQQDEwlsb2NhbGhv +c3QwHhcNMDYxMjE0MDMyNDA4WhcNMDkxMjEzMDMyNDA4WjBBMQswCQYDVQQGEwJV +UzELMAkGA1UECBMCQ0ExETAPBgNVBAoTCE0yQ3J5cHRvMRIwEAYDVQQDEwlsb2Nh +bGhvc3QwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANSpZHXtuxTFezDy8z46 +OIcY9/CJLpQdH3YixZHdVYe6LeMVo72mvLJsRLHd/5az+HI/OkE+kl39ymflktaK +n12H3DWrhCRM8PueOOAlFAmszWJbUsQV3YFgEO2EP45yQWSVL74UtoirlU/q13Fz +k/1REyOIlXx8KupYMbGguX3PAgMBAAGjezB5MAkGA1UdEwQCMAAwLAYJYIZIAYb4 +QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBT+ +Dkdn57w7lf+Yk5fIl7zobBd/UDAfBgNVHSMEGDAWgBTNBjgjw1AM9qha8KfbUQMh +AEHbNzANBgkqhkiG9w0BAQUFAAOBgQCVDxIjoFnQI371oOl4fimJURXWX3YtUDwK +k0ayf4u3jn1WGBqir/acE74B9yh7uZNuIdPo6vuqC2i5dzJviy2GyDCAnOpThg0n +fglB0JgT415Jd/r67S7I2X8Nn6cBoRwatINtr4vMQ4X0ZXMtsyPY+yQr8TZ/Kzgs +0GWVAbjz3A== -----END CERTIFICATE----- -----BEGIN RSA PRIVATE KEY----- -MIICXQIBAAKBgQClzDmtuoE9vQX0YVCfnPat7CnZeB4kYfcbNr9p2LNFrm86TE/W -E21gjfK7KsQbef3i+NY8VlM7J/c/cKRkmWNGLj/vUtqpBFtu1EBXxVlh0z99uAPB -m2VGKsWdcLfKeW7d5D/C9C8ugTLI6aa2qMgfSL56ZlaY/Dwl/Nk9cwcwcQIDAQAB -AoGBAIwzbZbePsnxXOaxoBbJCcQ7D4yJSZvkh6womKauC7Lh9carn1tc5EIg5uCl -Il5Fw466c5dkPE+q1SZ9X1Z+avYh4ypHjpcr1Lfvwo0wfOBx5MBj6ppMdwgrMXuo -jRChK3gBZXmKaIH19h/sGp/lZRW2HiX63aN11KDmtfwo6Bq9AkEA2OftYJUqceK3 -/E8q6OE1oQLm+oK6CPZ29A5TRNOadRu1opDR/y59GcUQ5ebJNH8DXyF82lSi3DKt -SNoSOF32cwJBAMOuKGUAwnq1yH3q+MAF7CZjGou7Ar6VRseyLnD5nttynT85QRW8 -N/WCosKLhV7wi9kKJmHGUJfRAqdo14D8IIsCQQCVjrU6FyABDpZVvjCUClT0BBBH -QsQLUgWLGiWIG28wuD5xLPHexas0jZCtNIgfTkSA35I66Iiy065vwQ03GHLJAkAG -eGC/jjngAtjBSR62grufPVGoYyOhF6CCg+LDO43EJdMLPyJmzJVxGcO1+RUM4ZlO -MOa5/uu1SWT0EiRmEHAnAkBusVcHcd6d4uaoiCybIhF4hL4GsbKoImIciakNlteA -c1RZZHc2jzO/Ihoz50H1njXwY86YbjncOXw8shtayd8j +MIICWwIBAAKBgQDUqWR17bsUxXsw8vM+OjiHGPfwiS6UHR92IsWR3VWHui3jFaO9 +pryybESx3f+Ws/hyPzpBPpJd/cpn5ZLWip9dh9w1q4QkTPD7njjgJRQJrM1iW1LE +Fd2BYBDthD+OckFklS++FLaIq5VP6tdxc5P9URMjiJV8fCrqWDGxoLl9zwIDAQAB +AoGAJyCLhU8aLrYu9lCdBIP9xo2HgNAcq8+37Cp1o2LPy8srii5/E/PLoCBfe0JX +NkkimxKbC0oR8A0z4m3Q2Hxk2aCb51nDrLOPkQ2ZBD8MhOQBIh1hZlALGPSk4I6p +LGxPuX6JcZA6N85Zi8dlPMf2vj6m1oRgYSPxG9hYRds8a0ECQQD2LLlqkyg+P5QJ +h/K7Oo+gkbVNGO4lxp59b2G72ZnPNt2JXIhKm9jjN4DXMxZ3a2iCWg5Jl1GYNGms +PZQRtgfxAkEA3SZAOGKEP1kdP6OuyA4hVbDd9dImwPhAF/dVyBtT7mgzmppaJLi6 +N1T5ZArag35Dl3Upjy73SwLyxvTgIJuhvwJAEKXVpC9veUYzbLGU6LR9Ig64hA47 +jLJx5Wmy4lFE5Y6ATNnFHcaMVFFclTEPQ+QvnSEZ9kAVdIWW398KNGhrAQJAHG7Q +ju9LpYFlm0sGK751VrkYsIRGa0T/qJUqOEIbNmm7SMNTl6kQeBC6x7wFgCZ5tj1g +DIKzVLeaUy4kqsyXrQJAG3gKIjrQ2GBFZMLp7TVln0+sN98BKYGqJHbkJferE4jm +ioFZLk5ow5LytUroMIDAORj7B0V7mnsDzvr0kMIoaQ== -----END RSA PRIVATE KEY----- diff --git a/tests/signer.pem b/tests/signer.pem index f0c1391..904b3f7 100644 --- a/tests/signer.pem +++ b/tests/signer.pem @@ -1,26 +1,26 @@ Certificate: Data: Version: 3 (0x2) - Serial Number: 3 (0x3) + Serial Number: 5 (0x5) Signature Algorithm: sha1WithRSAEncryption - Issuer: C=US, ST=CA, O=M2Crypto CA, CN=localhost + Issuer: C=US, ST=CA, O=M2Crypto, CN=localhost Validity - Not Before: Apr 22 04:40:51 2006 GMT - Not After : Apr 22 04:40:51 2007 GMT - Subject: C=US, ST=CA, O=M2Crypto Signer, CN=localhost/emailAddress=signer@example.com + Not Before: Dec 14 03:48:03 2006 GMT + Not After : Dec 13 03:48:03 2009 GMT + Subject: C=US, ST=CA, O=M2Crypto, CN=localhost/emailAddress=signer@example.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): - 00:cb:a8:b2:14:0b:d9:4a:d6:19:a6:1a:bf:b0:5e: - cb:7c:90:c3:b4:60:5f:f6:97:14:81:e3:c8:12:a0: - 03:39:57:a2:f6:63:66:7d:14:04:9a:f1:d3:b8:d8: - 72:f0:70:6e:ee:b2:ff:f1:5c:b9:ba:45:1a:cf:d4: - 66:7c:72:04:86:8f:cf:19:e4:22:ab:c4:c0:23:9d: - 15:f6:1c:79:bf:0a:25:5d:1b:02:82:68:5e:27:2b: - af:24:cc:d2:17:79:ad:58:30:e0:42:79:6b:1a:12: - 03:03:83:d2:b9:1a:a7:aa:ff:6a:fc:c3:33:6d:77: - 18:84:b9:86:f9:07:3d:3d:b3 + 00:d1:85:16:87:28:14:0d:3e:39:fd:75:10:37:1d: + a5:fd:ca:69:e5:36:03:93:0f:a6:9b:15:fd:f7:fa: + c2:b7:3f:7b:26:1b:c5:02:93:95:29:a2:94:2c:38: + e1:fa:5a:29:ad:0e:c7:f2:0e:7e:ac:4f:9d:09:00: + 64:e6:2e:60:7f:89:97:62:36:c4:10:49:2e:ef:4b: + 4f:e2:db:8e:69:2c:81:6c:62:b0:fa:39:4a:0d:bf: + 32:f3:41:45:cc:3d:5c:18:2c:ae:51:6d:e3:70:0a: + 62:33:5d:7e:62:31:72:cc:1e:d5:5c:19:31:5a:60: + 3a:1e:5e:18:66:6a:dc:89:95 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: @@ -28,33 +28,32 @@ Certificate: Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: - BB:63:CA:27:FC:2D:53:8A:8D:DB:26:E8:8B:AE:2D:5C:85:3D:01:29 + F9:92:29:8C:8C:DC:8D:1F:BA:F6:66:FA:93:EE:F0:4D:C4:06:7E:99 X509v3 Authority Key Identifier: - keyid:5C:F9:C5:9B:B0:02:37:3C:66:73:4D:0E:CB:5A:3D:BB:3A:46:22:DD + keyid:CD:06:38:23:C3:50:0C:F6:A8:5A:F0:A7:DB:51:03:21:00:41:DB:37 Signature Algorithm: sha1WithRSAEncryption - 2e:42:66:64:c5:21:dc:6c:2b:b7:4d:2a:a0:8a:2c:72:b2:89: - 7d:55:3f:85:9f:57:2e:3d:59:5b:f6:8b:7a:11:e1:fc:d6:c8: - 77:d5:1b:ff:65:51:98:93:f4:08:d0:9b:80:2d:df:b4:65:59: - 28:ec:e4:ba:1e:e0:41:99:b6:1c:b0:48:19:00:fd:ae:da:61: - 7c:24:81:ec:d5:bd:1a:c3:6c:43:b3:09:ae:40:0a:75:ae:a0: - fd:a0:57:96:96:ac:b6:c0:56:db:7b:15:41:93:8e:10:cf:8c: - 26:35:4d:2c:03:89:5d:e5:5c:7f:c3:dd:a5:97:a5:ae:c6:e6: - 1c:8b + 98:4e:8e:77:f6:48:c1:b4:e2:43:43:02:32:c0:62:9b:65:c8: + 46:bb:01:1d:02:7e:67:0d:a6:96:86:11:0e:fe:8b:96:ff:d2: + a5:a1:90:ea:c0:2d:4d:c6:fe:92:82:e8:5d:76:97:2c:1e:3e: + d5:30:0e:91:61:03:7e:a4:18:5c:67:97:f5:4b:ae:61:b4:73: + 4b:95:9b:ae:a4:3d:dc:7e:9b:e1:21:cd:f2:ed:6f:99:46:99: + ea:8d:36:fe:84:f6:90:d9:46:c9:df:5c:55:26:28:04:60:f5: + b9:18:19:ed:37:57:b9:dc:9c:9d:7c:51:2d:79:23:89:f3:53: + b7:b5 -----BEGIN CERTIFICATE----- -MIICoDCCAgmgAwIBAgIBAzANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEL -MAkGA1UECBMCQ0ExFDASBgNVBAoTC00yQ3J5cHRvIENBMRIwEAYDVQQDEwlsb2Nh -bGhvc3QwHhcNMDYwNDIyMDQ0MDUxWhcNMDcwNDIyMDQ0MDUxWjBrMQswCQYDVQQG -EwJVUzELMAkGA1UECBMCQ0ExGDAWBgNVBAoTD00yQ3J5cHRvIFNpZ25lcjESMBAG -A1UEAxMJbG9jYWxob3N0MSEwHwYJKoZIhvcNAQkBFhJzaWduZXJAZXhhbXBsZS5j -b20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMuoshQL2UrWGaYav7Bey3yQ -w7RgX/aXFIHjyBKgAzlXovZjZn0UBJrx07jYcvBwbu6y//FcubpFGs/UZnxyBIaP -zxnkIqvEwCOdFfYceb8KJV0bAoJoXicrryTM0hd5rVgw4EJ5axoSAwOD0rkap6r/ -avzDM213GIS5hvkHPT2zAgMBAAGjezB5MAkGA1UdEwQCMAAwLAYJYIZIAYb4QgEN -BB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBS7Y8on -/C1Tio3bJuiLri1chT0BKTAfBgNVHSMEGDAWgBRc+cWbsAI3PGZzTQ7LWj27OkYi -3TANBgkqhkiG9w0BAQUFAAOBgQAuQmZkxSHcbCu3TSqgiixysol9VT+Fn1cuPVlb -9ot6EeH81sh31Rv/ZVGYk/QI0JuALd+0ZVko7OS6HuBBmbYcsEgZAP2u2mF8JIHs -1b0aw2xDswmuQAp1rqD9oFeWlqy2wFbbexVBk44Qz4wmNU0sA4ld5Vx/w92ll6Wu -xuYciw== +MIICljCCAf+gAwIBAgIBBTANBgkqhkiG9w0BAQUFADBBMQswCQYDVQQGEwJVUzEL +MAkGA1UECBMCQ0ExETAPBgNVBAoTCE0yQ3J5cHRvMRIwEAYDVQQDEwlsb2NhbGhv +c3QwHhcNMDYxMjE0MDM0ODAzWhcNMDkxMjEzMDM0ODAzWjBkMQswCQYDVQQGEwJV +UzELMAkGA1UECBMCQ0ExETAPBgNVBAoTCE0yQ3J5cHRvMRIwEAYDVQQDEwlsb2Nh +bGhvc3QxITAfBgkqhkiG9w0BCQEWEnNpZ25lckBleGFtcGxlLmNvbTCBnzANBgkq +hkiG9w0BAQEFAAOBjQAwgYkCgYEA0YUWhygUDT45/XUQNx2l/cpp5TYDkw+mmxX9 +9/rCtz97JhvFApOVKaKULDjh+loprQ7H8g5+rE+dCQBk5i5gf4mXYjbEEEku70tP +4tuOaSyBbGKw+jlKDb8y80FFzD1cGCyuUW3jcApiM11+YjFyzB7VXBkxWmA6Hl4Y +ZmrciZUCAwEAAaN7MHkwCQYDVR0TBAIwADAsBglghkgBhvhCAQ0EHxYdT3BlblNT +TCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFPmSKYyM3I0fuvZm+pPu +8E3EBn6ZMB8GA1UdIwQYMBaAFM0GOCPDUAz2qFrwp9tRAyEAQds3MA0GCSqGSIb3 +DQEBBQUAA4GBAJhOjnf2SMG04kNDAjLAYptlyEa7AR0CfmcNppaGEQ7+i5b/0qWh +kOrALU3G/pKC6F12lywePtUwDpFhA36kGFxnl/VLrmG0c0uVm66kPdx+m+EhzfLt +b5lGmeqNNv6E9pDZRsnfXFUmKARg9bkYGe03V7ncnJ18US15I4nzU7e1 -----END CERTIFICATE----- diff --git a/tests/signer_key.pem b/tests/signer_key.pem index b164416..ce4eed6 100644 --- a/tests/signer_key.pem +++ b/tests/signer_key.pem @@ -1,15 +1,15 @@ -----BEGIN RSA PRIVATE KEY----- -MIICWwIBAAKBgQDLqLIUC9lK1hmmGr+wXst8kMO0YF/2lxSB48gSoAM5V6L2Y2Z9 -FASa8dO42HLwcG7usv/xXLm6RRrP1GZ8cgSGj88Z5CKrxMAjnRX2HHm/CiVdGwKC -aF4nK68kzNIXea1YMOBCeWsaEgMDg9K5Gqeq/2r8wzNtdxiEuYb5Bz09swIDAQAB -AoGAKsdGkJtkiympvZBEz4E58PJfiVXtEljtv9LexbrCsprL6kE61+8KgJlnRZ6B -liunwY/r3wEBKjU1yo3s8RrqBBG69sxlaD1dN5rKvfGqps05JHIyPbf+fyTqwZOw -2XMJCVHO4JwenUlTmlFa0L8vR3m8gMpc8eQ09RbhvrgtR8ECQQDypaUNu8ygYG/g -e1JxBrqb/csYV6zlA+5DuT12QxJYlxWp31q+T+C3s3ZWxixACG9EzA1dmWm88zJT -zBMoLMfDAkEA1t3Lu4HmMcYAk9WAlsvJ2n/C5Pl2OFR5L8hCMUiEl5M412lMZN64 -0IfxWzjFWaxQIQ0N14dpzPylTcMgAW5DUQJANkU6L2IrmEs5epnajJEWt8EB5cXm -U6qXZepOht7lgY75N29PWnV/K1cmRq44Q3IfgOGqs56Web5jKT7hogCyBQJAThGg -aKy1+ve6VfyJEEFTQjSRl6icL7NhpN7aThXPN1Oin4H+49eYxwvdwgtKiV52bsvT -b7Af3P8fALYY9uwdQQJAdounRel2I+qbaTaaP44fdAVTy49GZe9Y/55psmz8A0L8 -VoJ2bCYMBeX8+GEaKj14SujSR2B7duXl/OsA1H/Q9g== +MIICXAIBAAKBgQDRhRaHKBQNPjn9dRA3HaX9ymnlNgOTD6abFf33+sK3P3smG8UC +k5UpopQsOOH6WimtDsfyDn6sT50JAGTmLmB/iZdiNsQQSS7vS0/i245pLIFsYrD6 +OUoNvzLzQUXMPVwYLK5RbeNwCmIzXX5iMXLMHtVcGTFaYDoeXhhmatyJlQIDAQAB +AoGAWfJfvIBJM3I+ZQAniPHSfAS0t3Eb0buLU9L6J8ZgZ1j6Xl7XkgaXp7sjD2UQ +JnEkqSXKUrFEUmcPTHj92A+a3v5aH69DoYrh2Goh4IPXs6stQoT6hfk/bRmEPXS0 +bUkqYf5EiAoy3WW7ucR7zCi7TpU8u7tZn+lWn0n5/YZab5UCQQD6KZNfyVPBU7Tm +cazzS1+j7pS2Acn11DBvXxQJJnaTwDd6WUwPzQ5X1fSypM0LDjr9/OX9HQd7dW7n +h9QNsRtzAkEA1mi4pySoQOPL8Q2u5ih0Vqg+/crU6WnHI1uXup8C/is2bjGyJpD3 +hBQD7COdf36266i6deRqTj99HO2WC8CU1wJAHdOzNKqGh/h5CzjmjCOihaM+q+zO +rbbdB4pokya44Kj8dGQNQ50JZsOl517q67SIqBvtOB6r87ZuwMBbMj65rQJAbtCR +H1IC5AbYUS4RR0OBXYh3hhRfFoRlOBEOypWEpnkPGMT2npguVUVDAbkmnc6QHByI +woXbq7WEpH7nHgva4QJBAOxB45CkSyTiWyXWf/0EvcLfkmYEMaAuiTF+dUkDMaaa +eUVUu7l8YtNRgosWAxs4aqcF2fBMj+n35lu4bzfjiUw= -----END RSA PRIVATE KEY----- diff --git a/tests/test_bio_ssl.py b/tests/test_bio_ssl.py index e40fef9..b07be03 100644 --- a/tests/test_bio_ssl.py +++ b/tests/test_bio_ssl.py @@ -23,7 +23,7 @@ class HandshakeClient(threading.Thread): def run(self): ctx = SSL.Context() - ctx.load_cert_chain("server.pem") + ctx.load_cert_chain("tests/server.pem") conn = SSL.Connection(ctx) cipher_list = conn.get_cipher_list() sslbio = BIO.SSLBio() @@ -103,7 +103,7 @@ class SSLTestCase(unittest.TestCase): def check_do_handshake_succeed(self): ctx = SSL.Context() - ctx.load_cert_chain("server.pem") + ctx.load_cert_chain("tests/server.pem") conn = SSL.Connection(ctx) self.sslbio.set_ssl(conn) readbio = BIO.MemoryBuffer() diff --git a/tests/test_dh.py b/tests/test_dh.py index 7d5f9aa..28a5d1b 100644 --- a/tests/test_dh.py +++ b/tests/test_dh.py @@ -9,7 +9,7 @@ from M2Crypto import DH, BIO, Rand, m2 class DHTestCase(unittest.TestCase): - params = 'dhparam.pem' + params = 'tests/dhparam.pem' def genparam_callback(self, *args): pass @@ -37,11 +37,11 @@ class DHTestCase(unittest.TestCase): assert params.find('generator: 2 (0x2)') def check_load_params(self): - a = DH.load_params('dhparams.pem') + a = DH.load_params('tests/dhparams.pem') assert a.check_params() == 0 def check_compute_key(self): - a = DH.load_params('dhparams.pem') + a = DH.load_params('tests/dhparams.pem') b = DH.set_params(a.p, a.g) a.gen_key() b.gen_key() diff --git a/tests/test_dsa.py b/tests/test_dsa.py index 25ef667..25d0827 100644 --- a/tests/test_dsa.py +++ b/tests/test_dsa.py @@ -10,10 +10,10 @@ from M2Crypto import DSA, BIO, Rand, m2 class DSATestCase(unittest.TestCase): - errkey = 'rsa.priv.pem' - privkey = 'dsa.priv.pem' - pubkey = 'dsa.pub.pem' - param = 'dsa.param.pem' + errkey = 'tests/rsa.priv.pem' + privkey = 'tests/dsa.priv.pem' + pubkey = 'tests/dsa.pub.pem' + param = 'tests/dsa.param.pem' data = sha.sha('Can you spell subliminal channel?').digest() different_data = sha.sha('I can spell.').digest() diff --git a/tests/test_ec_curves.py b/tests/test_ec_curves.py index 998a3c1..8607dcc 100644 --- a/tests/test_ec_curves.py +++ b/tests/test_ec_curves.py @@ -96,15 +96,17 @@ curves = [ ('wap_wsg_idm_ecid_wtls12', 224), ] -# The following two curves are not supported by the -# OpenSSL inverse function. ECError: no inverse. +# The following two curves, according to OpenSSL, have a +# "Questionable extension field!" and are not supported by +# the OpenSSL inverse function. ECError: no inverse. # As such they cannot be used for signing. They might, # however, be usable for encryption but that has not -# been tested. -curves2 = [ - ('ipsec3', 155), - ('ipsec4', 185), -] +# been tested. Until thir usefulness can be established, +# they are not supported at this time. +#curves2 = [ +# ('ipsec3', 155), +# ('ipsec4', 185), +#] class ECCurveTests(unittest.TestCase): #data = sha.sha('Kilroy was here!').digest() # 160 bits @@ -120,12 +122,12 @@ class ECCurveTests(unittest.TestCase): assert ec.check_key(), 'check_key() failure for "%s"' % curveName return ec - def check_ec_curves_genkey(self): - for curveName, curveLen in curves2: - self.genkey(curveName, curveLen) - - self.assertRaises(AttributeError, self.genkey, - 'nosuchcurve', 1) +# def check_ec_curves_genkey(self): +# for curveName, curveLen in curves2: +# self.genkey(curveName, curveLen) +# +# self.assertRaises(AttributeError, self.genkey, +# 'nosuchcurve', 1) def sign_verify_ecdsa(self, curveName, curveLen): ec = self.genkey(curveName, curveLen) @@ -140,9 +142,9 @@ class ECCurveTests(unittest.TestCase): self.assertRaises(AttributeError, self.sign_verify_ecdsa, 'nosuchcurve', 1) - for curveName, curveLen in curves2: - self.assertRaises(EC.ECError, self.sign_verify_ecdsa, - curveName, curveLen) +# for curveName, curveLen in curves2: +# self.assertRaises(EC.ECError, self.sign_verify_ecdsa, +# curveName, curveLen) def suite(): suite = unittest.TestSuite() diff --git a/tests/test_ecdh.py b/tests/test_ecdh.py index 8df5d8c..222dae1 100644 --- a/tests/test_ecdh.py +++ b/tests/test_ecdh.py @@ -13,7 +13,7 @@ import sys class ECDHTestCase(unittest.TestCase): - privkey = 'ec.priv.pem' + privkey = 'tests/ec.priv.pem' def check_init_junk(self): self.assertRaises(TypeError, EC.EC, 'junk') diff --git a/tests/test_ecdsa.py b/tests/test_ecdsa.py index 3edc4b7..839730d 100644 --- a/tests/test_ecdsa.py +++ b/tests/test_ecdsa.py @@ -12,9 +12,9 @@ from M2Crypto import EC, BIO, Rand, m2 class ECDSATestCase(unittest.TestCase): - errkey = 'rsa.priv.pem' - privkey = 'ec.priv.pem' - pubkey = 'ec.pub.pem' + errkey = 'tests/rsa.priv.pem' + privkey = 'tests/ec.priv.pem' + pubkey = 'tests/ec.pub.pem' data = sha.sha('Can you spell subliminal channel?').digest() diff --git a/tests/test_rand.py b/tests/test_rand.py index 8fb380c..3e4d65d 100644 --- a/tests/test_rand.py +++ b/tests/test_rand.py @@ -24,12 +24,12 @@ class RandTestCase(unittest.TestCase): def test_load_save(self): try: - os.remove('randpool.dat') + os.remove('tests/randpool.dat') except OSError: pass - assert Rand.load_file('randpool.dat', -1) == 0 - assert Rand.save_file('randpool.dat') == 1024 - assert Rand.load_file('randpool.dat', -1) == 1024 + assert Rand.load_file('tests/randpool.dat', -1) == 0 + assert Rand.save_file('tests/randpool.dat') == 1024 + assert Rand.load_file('tests/randpool.dat', -1) == 1024 def test_seed_add(self): if sys.version_info >= (2, 4): diff --git a/tests/test_rsa.py b/tests/test_rsa.py index 72009c2..92c8eb8 100644 --- a/tests/test_rsa.py +++ b/tests/test_rsa.py @@ -10,10 +10,10 @@ from M2Crypto import RSA, BIO, Rand, m2, EVP class RSATestCase(unittest.TestCase): - errkey = 'dsa.priv.pem' - privkey = 'rsa.priv.pem' - privkey2 = 'rsa.priv2.pem' - pubkey = 'rsa.pub.pem' + errkey = 'tests/dsa.priv.pem' + privkey = 'tests/rsa.priv.pem' + privkey2 = 'tests/rsa.priv2.pem' + pubkey = 'tests/rsa.pub.pem' data = sha.sha('The magic words are squeamish ossifrage.').digest() diff --git a/tests/test_smime.py b/tests/test_smime.py index 3b528f0..766f628 100644 --- a/tests/test_smime.py +++ b/tests/test_smime.py @@ -19,7 +19,7 @@ class SMIMETestCase(unittest.TestCase): def check_sign(self): buf = BIO.MemoryBuffer(self.cleartext) s = SMIME.SMIME() - s.load_key('signer_key.pem', 'signer.pem') + s.load_key('tests/signer_key.pem', 'tests/signer.pem') p7 = s.sign(buf) assert len(buf) == 0 assert p7.type() == SMIME.PKCS7_SIGNED, p7.type() @@ -40,13 +40,13 @@ class SMIMETestCase(unittest.TestCase): def check_verify(self): s = SMIME.SMIME() - x509 = X509.load_cert('signer.pem') + x509 = X509.load_cert('tests/signer.pem') sk = X509.X509_Stack() sk.push(x509) s.set_x509_stack(sk) st = X509.X509_Store() - st.load_info('ca.pem') + st.load_info('tests/ca.pem') s.set_x509_store(st) p7, data = SMIME.smime_load_pkcs7_bio(self.signed) @@ -59,13 +59,13 @@ class SMIMETestCase(unittest.TestCase): def check_verifyBad(self): s = SMIME.SMIME() - x509 = X509.load_cert('recipient.pem') + x509 = X509.load_cert('tests/recipient.pem') sk = X509.X509_Stack() sk.push(x509) s.set_x509_stack(sk) st = X509.X509_Store() - st.load_info('recipient.pem') + st.load_info('tests/recipient.pem') s.set_x509_store(st) p7, data = SMIME.smime_load_pkcs7_bio(self.signed) @@ -77,7 +77,7 @@ class SMIMETestCase(unittest.TestCase): buf = BIO.MemoryBuffer(self.cleartext) s = SMIME.SMIME() - x509 = X509.load_cert('recipient.pem') + x509 = X509.load_cert('tests/recipient.pem') sk = X509.X509_Stack() sk.push(x509) s.set_x509_stack(sk) @@ -104,7 +104,7 @@ class SMIMETestCase(unittest.TestCase): def check_decrypt(self): s = SMIME.SMIME() - s.load_key('recipient_key.pem', 'recipient.pem') + s.load_key('tests/recipient_key.pem', 'tests/recipient.pem') p7, data = SMIME.smime_load_pkcs7_bio(self.encrypted) assert isinstance(p7, SMIME.PKCS7), p7 @@ -116,7 +116,7 @@ class SMIMETestCase(unittest.TestCase): def check_decryptBad(self): s = SMIME.SMIME() - s.load_key('signer_key.pem', 'signer.pem') + s.load_key('tests/signer_key.pem', 'tests/signer.pem') p7, data = SMIME.smime_load_pkcs7_bio(self.encrypted) assert isinstance(p7, SMIME.PKCS7), p7 @@ -129,11 +129,11 @@ class SMIMETestCase(unittest.TestCase): # sign buf = BIO.MemoryBuffer(self.cleartext) s = SMIME.SMIME() - s.load_key('signer_key.pem', 'signer.pem') + s.load_key('tests/signer_key.pem', 'tests/signer.pem') p7 = s.sign(buf) # encrypt - x509 = X509.load_cert('recipient.pem') + x509 = X509.load_cert('tests/recipient.pem') sk = X509.X509_Stack() sk.push(x509) s.set_x509_stack(sk) @@ -151,20 +151,20 @@ class SMIMETestCase(unittest.TestCase): # decrypt s = SMIME.SMIME() - s.load_key('recipient_key.pem', 'recipient.pem') + s.load_key('tests/recipient_key.pem', 'tests/recipient.pem') p7, data = SMIME.smime_load_pkcs7_bio(signedEncrypted) out = s.decrypt(p7) # verify - x509 = X509.load_cert('signer.pem') + x509 = X509.load_cert('tests/signer.pem') sk = X509.X509_Stack() sk.push(x509) s.set_x509_stack(sk) st = X509.X509_Store() - st.load_info('ca.pem') + st.load_info('tests/ca.pem') s.set_x509_store(st) p7_bio = BIO.MemoryBuffer(out) @@ -176,14 +176,14 @@ class SMIMETestCase(unittest.TestCase): class WriteLoadTestCase(unittest.TestCase): def setUp(self): s = SMIME.SMIME() - s.load_key('signer_key.pem', 'signer.pem') + s.load_key('tests/signer_key.pem', 'tests/signer.pem') p7 = s.sign(BIO.MemoryBuffer('some text')) - self.filename = 'sig.p7' + self.filename = 'tests/sig.p7' f = BIO.openfile(self.filename, 'wb') assert p7.write(f) == 1 f.close() - self.filenameSmime = 'sig.p7s' + self.filenameSmime = 'tests/sig.p7s' f = BIO.openfile(self.filenameSmime, 'wb') assert s.write(f, p7, BIO.MemoryBuffer('some text')) == 1 f.close() @@ -192,7 +192,7 @@ class WriteLoadTestCase(unittest.TestCase): buf = BIO.MemoryBuffer() assert SMIME.load_pkcs7(self.filename).write_der(buf) == 1 s = buf.read() - assert len(s) == 1168, len(s) + assert len(s) == 1155, len(s) def check_load_pkcs7(self): assert SMIME.load_pkcs7(self.filename).type() == SMIME.PKCS7_SIGNED diff --git a/tests/test_ssl.py b/tests/test_ssl.py index fe56e9b..e0a9617 100644 --- a/tests/test_ssl.py +++ b/tests/test_ssl.py @@ -18,7 +18,7 @@ Others: """ import os, socket, string, sys, tempfile, thread, time, unittest -from M2Crypto import Rand, SSL, m2 +from M2Crypto import Rand, SSL, m2, Err srv_host = 'localhost' srv_port = 64000 @@ -49,7 +49,14 @@ class SSLClientTestCase(unittest.TestCase): def start_server(self, args): pid = os.fork() if pid == 0: - os.execvp('openssl', args) + # openssl must be started in the tests directory for it + # to find the .pem files + os.chdir('tests') + try: + os.execvp('openssl', args) + finally: + os.chdir('..') + else: time.sleep(0.5) return pid @@ -102,7 +109,7 @@ class SSLClientTestCase(unittest.TestCase): try: ctx = SSL.Context() ctx.set_verify(SSL.verify_peer | SSL.verify_fail_if_no_peer_cert, 9) - ctx.load_verify_locations('ca.pem') + ctx.load_verify_locations('tests/ca.pem') s = SSL.Connection(ctx) s.connect(self.srv_addr) data = self.http_get(s) @@ -116,7 +123,7 @@ class SSLClientTestCase(unittest.TestCase): try: ctx = SSL.Context() ctx.set_verify(SSL.verify_peer | SSL.verify_fail_if_no_peer_cert, 9) - ctx.load_verify_locations('server.pem') + ctx.load_verify_locations('tests/server.pem') s = SSL.Connection(ctx) self.assertRaises(SSL.SSLError, s.connect, self.srv_addr) s.close() @@ -451,7 +458,7 @@ class SSLClientTestCase(unittest.TestCase): try: ctx = SSL.Context() ctx.set_verify(SSL.verify_peer | SSL.verify_fail_if_no_peer_cert, 9) - ctx.load_verify_locations('ca.pem') + ctx.load_verify_locations('tests/ca.pem') s = SSL.Connection(ctx) try: s.connect(self.srv_addr) @@ -468,7 +475,7 @@ class SSLClientTestCase(unittest.TestCase): try: ctx = SSL.Context() ctx.set_verify(SSL.verify_peer | SSL.verify_fail_if_no_peer_cert, 9) - ctx.load_verify_locations('server.pem') + ctx.load_verify_locations('tests/server.pem') s = SSL.Connection(ctx) self.assertRaises(SSL.SSLError, s.connect, self.srv_addr) s.close() @@ -481,8 +488,8 @@ class SSLClientTestCase(unittest.TestCase): try: ctx = SSL.Context() ctx.set_verify(SSL.verify_peer | SSL.verify_fail_if_no_peer_cert, 9) - ctx.load_verify_locations('ca.pem') - ctx.load_cert('x509.pem') + ctx.load_verify_locations('tests/ca.pem') + ctx.load_cert('tests/x509.pem') s = SSL.Connection(ctx) try: s.connect(self.srv_addr) @@ -500,8 +507,8 @@ class SSLClientTestCase(unittest.TestCase): try: ctx = SSL.Context() ctx.set_verify(SSL.verify_peer | SSL.verify_fail_if_no_peer_cert, 9) - ctx.load_verify_locations('ca.pem') - ctx.load_cert('x509.pem') + ctx.load_verify_locations('tests/ca.pem') + ctx.load_cert('tests/x509.pem') s = SSL.Connection(ctx) try: s.connect(self.srv_addr) @@ -519,7 +526,7 @@ class SSLClientTestCase(unittest.TestCase): try: ctx = SSL.Context() ctx.set_verify(SSL.verify_peer | SSL.verify_fail_if_no_peer_cert, 9) - ctx.load_verify_locations('ca.pem') + ctx.load_verify_locations('tests/ca.pem') s = SSL.Connection(ctx) self.assertRaises(SSL.SSLError, s.connect, self.srv_addr) s.close() @@ -532,7 +539,7 @@ class SSLClientTestCase(unittest.TestCase): try: ctx = SSL.Context() ctx.set_verify(SSL.verify_peer | SSL.verify_fail_if_no_peer_cert, 9) - ctx.load_verify_locations('ca.pem') + ctx.load_verify_locations('tests/ca.pem') s = SSL.Connection(ctx) self.assertRaises(SSL.SSLError, s.connect, self.srv_addr) s.close() @@ -557,7 +564,7 @@ class SSLClientTestCase(unittest.TestCase): from M2Crypto import httpslib ctx = SSL.Context() ctx.set_verify(SSL.verify_peer | SSL.verify_fail_if_no_peer_cert, 9) - ctx.load_verify_locations('ca.pem') + ctx.load_verify_locations('tests/ca.pem') c = httpslib.HTTPSConnection(srv_host, srv_port, ssl_context=ctx) c.request('GET', '/') data = c.getresponse().read() @@ -572,7 +579,7 @@ class SSLClientTestCase(unittest.TestCase): from M2Crypto import httpslib ctx = SSL.Context() ctx.set_verify(SSL.verify_peer | SSL.verify_fail_if_no_peer_cert, 9) - ctx.load_verify_locations('server.pem') + ctx.load_verify_locations('tests/server.pem') c = httpslib.HTTPSConnection(srv_host, srv_port, ssl_context=ctx) self.assertRaises(SSL.SSLError, c.request, 'GET', '/') c.close() @@ -603,7 +610,7 @@ class SSLClientTestCase(unittest.TestCase): from M2Crypto import httpslib ctx = SSL.Context() ctx.set_verify(SSL.verify_peer | SSL.verify_fail_if_no_peer_cert, 9) - ctx.load_verify_locations('ca.pem') + ctx.load_verify_locations('tests/ca.pem') c = httpslib.HTTPS(srv_host, srv_port, ssl_context=ctx) c.putrequest('GET', '/') c.putheader('Accept', 'text/html') @@ -624,7 +631,7 @@ class SSLClientTestCase(unittest.TestCase): from M2Crypto import httpslib ctx = SSL.Context() ctx.set_verify(SSL.verify_peer | SSL.verify_fail_if_no_peer_cert, 9) - ctx.load_verify_locations('server.pem') + ctx.load_verify_locations('tests/server.pem') c = httpslib.HTTPS(srv_host, srv_port, ssl_context=ctx) c.putrequest('GET', '/') c.putheader('Accept', 'text/html') @@ -674,7 +681,7 @@ class SSLClientTestCase(unittest.TestCase): try: ctx = SSL.Context() ctx.set_verify(SSL.verify_peer | SSL.verify_fail_if_no_peer_cert, 9) - ctx.load_verify_locations('ca.pem') + ctx.load_verify_locations('tests/ca.pem') from M2Crypto import m2urllib2 opener = m2urllib2.build_opener(ctx) @@ -691,7 +698,7 @@ class SSLClientTestCase(unittest.TestCase): try: ctx = SSL.Context() ctx.set_verify(SSL.verify_peer | SSL.verify_fail_if_no_peer_cert, 9) - ctx.load_verify_locations('server.pem') + ctx.load_verify_locations('tests/server.pem') from M2Crypto import m2urllib2 opener = m2urllib2.build_opener(ctx) @@ -747,6 +754,44 @@ class SSLClientTestCase(unittest.TestCase): self.stop_server(pid) self.failIf(string.find(data, 's_server -quiet -www') == -1) + def test_makefile_err(self): + def http_get(s): + s.send('GET / HTTP/1.0\n\n') + resp = '' + while 1: + try: + r = s.recv(4096) + if not r: + break + except SSL.SSLError, e: # s_server throws an 'unexpected eof'... + #print e + break + resp = resp + r + return resp + + pid = self.start_server(self.args) + try: + ctx = SSL.Context() + s = SSL.Connection(ctx) + try: + s.connect(self.srv_addr) + except SSL.SSLError, e: + assert 0, e + f = s.makefile() + data = http_get(s) + s.close() + del f + f = None + del s + s = None + err_code = Err.peek_error_code() + assert not err_code, 'Unexpected error: %s' % err_code + err = Err.get_error() + assert not err, 'Unexpected error: %s' % err + finally: + self.stop_server(pid) + self.failIf(string.find(data, 's_server -quiet -www') == -1) + def test_twisted_wrapper(self): # Test only when twisted and ZopeInterfaces are present try: @@ -804,8 +849,8 @@ class CheckerTestCase(unittest.TestCase): from M2Crypto import X509 check = Checker.Checker(host=srv_host, - peerCertHash='9594D272A975F58F4430511D15B4B7FF3D778113') - x509 = X509.load_cert('server.pem') + peerCertHash='02C0CAD90DE6837700173A839BB8E84BF1F5B820') + x509 = X509.load_cert('tests/server.pem') assert check(x509, srv_host) self.assertRaises(Checker.WrongHost, check, x509, 'example.com') @@ -853,9 +898,9 @@ if __name__ == '__main__': gc.set_debug(gc.DEBUG_LEAK & ~gc.DEBUG_SAVEALL) try: - Rand.load_file('../randpool.dat', -1) + Rand.load_file('randpool.dat', -1) unittest.TextTestRunner().run(suite()) - Rand.save_file('../randpool.dat') + Rand.save_file('randpool.dat') finally: zap_servers() diff --git a/tests/test_ssl_win.py b/tests/test_ssl_win.py index 662488e..595ef20 100644 --- a/tests/test_ssl_win.py +++ b/tests/test_ssl_win.py @@ -34,9 +34,15 @@ class SSLWinClientTestCase(test_ssl.SSLClientTestCase): openssl = find_openssl() def start_server(self, args): - hproc, hthread, pid, tid = win32process.CreateProcess(self.openssl, - string.join(args), None, None, 0, win32process.DETACHED_PROCESS, - None, None, self.startupinfo) + # openssl must be started in the tests directory for it + # to find the .pem files + os.chdir('tests') + try: + hproc, hthread, pid, tid = win32process.CreateProcess(self.openssl, + string.join(args), None, None, 0, win32process.DETACHED_PROCESS, + None, None, self.startupinfo) + finally: + os.chdir('..') time.sleep(0.3) return hproc @@ -54,9 +60,9 @@ def zap_servers(): if __name__ == '__main__': try: if find_openssl() is not None: - Rand.load_file('../randpool.dat', -1) + Rand.load_file('randpool.dat', -1) unittest.TextTestRunner().run(suite()) - Rand.save_file('../randpool.dat') + Rand.save_file('randpool.dat') finally: zap_servers() diff --git a/tests/test_x509.py b/tests/test_x509.py index 2b2bde3..05b658e 100644 --- a/tests/test_x509.py +++ b/tests/test_x509.py @@ -42,6 +42,10 @@ class X509TestCase(unittest.TestCase): assert x.verify(pk2) return x, pk + def check_ext(self): + self.assertRaises(ValueError, X509.new_extension, + 'subjectKeyIdentifier', 'hash') + def check_extstack(self): # new ext1 = X509.new_extension('subjectAltName', 'DNS:foobar.example.com') @@ -109,9 +113,9 @@ class X509TestCase(unittest.TestCase): def check_mkreq(self): (req, _) = self.mkreq(512) - req.save_pem('tmp_request.pem') - req2 = X509.load_request('tmp_request.pem') - os.remove('tmp_request.pem') + req.save_pem('tests/tmp_request.pem') + req2 = X509.load_request('tests/tmp_request.pem') + os.remove('tests/tmp_request.pem') assert req.as_pem() == req2.as_pem() assert req.as_text() == req2.as_text() @@ -269,18 +273,16 @@ class X509TestCase(unittest.TestCase): return proxycert def check_fingerprint(self): - x509 = X509.load_cert('x509.pem') + x509 = X509.load_cert('tests/x509.pem') fp = x509.get_fingerprint('sha1') - expected = '0xDE1EE86E98AA192122365180BCC64F88F065C4A7L' - if sys.version_info >= (2,5): - expected = expected[:-1].lower() + 'L' + expected = '128858B5222A5C78397530A5706233A9EB470AC4' assert fp == expected, '%s != %s' % (fp, expected) class X509_StackTestCase(unittest.TestCase): def check_make_stack_from_der(self): - f = open("der_encoded_seq.b64") + f = open("tests/der_encoded_seq.b64") b64 = f.read(1304) seq = base64.decodestring(b64) stack = X509.new_stack_from_der(seq) @@ -290,7 +292,7 @@ class X509_StackTestCase(unittest.TestCase): assert str(subject) == "/DC=org/DC=doegrids/OU=Services/CN=host/bosshog.lbl.gov" def check_make_stack_check_num(self): - f = open("der_encoded_seq.b64") + f = open("tests/der_encoded_seq.b64") b64 = f.read(1304) seq = base64.decodestring(b64) stack = X509.new_stack_from_der(seq) @@ -304,8 +306,8 @@ class X509_StackTestCase(unittest.TestCase): def check_make_stack(self): stack = X509.X509_Stack() - cert = X509.load_cert("x509.pem") - issuer = X509.load_cert("ca.pem") + cert = X509.load_cert("tests/x509.pem") + issuer = X509.load_cert("tests/ca.pem") cert_subject1 = cert.get_subject() issuer_subject1 = issuer.get_subject() stack.push(cert) @@ -327,8 +329,8 @@ class X509_StackTestCase(unittest.TestCase): def check_as_der(self): stack = X509.X509_Stack() - cert = X509.load_cert("x509.pem") - issuer = X509.load_cert("ca.pem") + cert = X509.load_cert("tests/x509.pem") + issuer = X509.load_cert("tests/ca.pem") cert_subject1 = cert.get_subject() issuer_subject1 = issuer.get_subject() stack.push(cert) diff --git a/tests/x509.pem b/tests/x509.pem index 591ebea..11e087c 100644 --- a/tests/x509.pem +++ b/tests/x509.pem @@ -3,24 +3,24 @@ Certificate: Version: 3 (0x2) Serial Number: 2 (0x2) Signature Algorithm: sha1WithRSAEncryption - Issuer: C=US, ST=CA, O=M2Crypto CA, CN=localhost + Issuer: C=US, ST=CA, O=M2Crypto, CN=localhost Validity - Not Before: Apr 22 04:38:57 2006 GMT - Not After : Apr 22 04:38:57 2007 GMT - Subject: C=US, ST=CA, O=M2Crypto X509, CN=localhost + Not Before: Dec 14 03:25:36 2006 GMT + Not After : Dec 13 03:25:36 2009 GMT + Subject: C=US, ST=CA, O=M2Crypto, CN=localhost Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): - 00:b8:52:61:f5:c1:41:91:1b:a6:03:a7:e8:b5:a3: - db:72:e2:84:9b:8a:2c:49:ad:bd:03:51:a4:a6:95: - 6b:bb:29:fc:9a:95:cf:ca:fb:c5:16:94:e5:23:9c: - 92:9d:1e:cf:fa:31:35:55:ae:8b:cf:af:73:d5:92: - cf:2a:0f:3d:3b:cf:15:b9:d8:de:bb:93:7b:ba:54: - d5:4a:ad:3e:c2:6f:76:bf:35:7c:be:ff:88:31:84: - 90:83:4b:54:b9:9b:4f:9a:a5:55:d8:6d:45:7c:64: - 6d:be:6c:8f:e1:06:6f:73:f7:35:a3:2c:1e:48:99: - 37:68:9f:b1:d3:83:fa:d7:c7 + 00:ed:20:bf:09:50:eb:e8:83:4e:de:60:d8:30:6e: + ce:15:7d:95:f7:f3:06:dc:fa:d2:95:cb:5e:54:32: + bb:9d:23:e1:33:80:32:72:ae:78:a4:82:5d:ad:03: + 57:62:8e:b4:7d:71:f8:0f:82:65:79:a4:0d:16:78: + 65:38:24:fd:06:39:6b:ec:c2:0e:fc:78:40:10:01: + 7d:78:33:18:b1:7f:2f:bd:65:ae:ca:a7:75:16:f2: + 3e:1a:dc:79:50:af:e4:61:0b:c1:52:3a:55:51:87: + 72:6b:1a:33:02:47:e3:cc:2c:49:e7:fe:cc:10:e9: + 8f:5c:60:c6:2e:c1:5a:c8:bb Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: @@ -28,47 +28,47 @@ Certificate: Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: - 10:AF:83:F2:BF:F1:8F:BE:E1:96:39:CA:CE:2F:CD:F8:99:14:C5:17 + 77:DE:BA:B7:DE:8D:9B:E0:4E:7D:1E:67:77:03:B3:CE:73:EB:2C:BF X509v3 Authority Key Identifier: - keyid:5C:F9:C5:9B:B0:02:37:3C:66:73:4D:0E:CB:5A:3D:BB:3A:46:22:DD + keyid:CD:06:38:23:C3:50:0C:F6:A8:5A:F0:A7:DB:51:03:21:00:41:DB:37 Signature Algorithm: sha1WithRSAEncryption - 60:a5:2d:48:11:3e:55:b0:47:e4:f9:8a:8e:11:66:8b:08:d4: - 59:b7:c9:6e:74:87:51:d8:c7:43:56:7b:c2:b5:fe:11:61:b7: - 37:90:17:6b:d1:49:07:5b:58:89:1f:43:d7:1f:de:f1:a8:58: - 28:7b:96:f2:b5:af:da:bf:4e:e5:a8:0f:36:bd:3a:88:9c:a2: - 41:e6:6a:3b:b8:4a:38:48:6f:77:cd:ae:4a:07:51:90:e1:01: - 18:82:da:d9:a4:a8:b5:a4:6e:82:b8:b0:cc:f7:4a:73:b6:d5: - 4c:0b:09:02:c1:0e:3c:31:5f:5b:d2:00:91:e8:dc:a1:e2:a3: - 17:59 + a5:b7:0b:21:36:79:59:1d:f2:c3:43:ff:79:09:54:bf:44:87: + 05:3f:b4:dd:9a:ea:63:98:34:d5:0b:1c:e4:33:ea:37:7b:ec: + 6b:81:b4:1c:ef:e6:da:dc:4b:37:4b:2f:96:73:de:94:75:62: + 1f:ac:60:be:27:7e:3f:16:98:05:1a:4c:ec:7c:87:59:9f:94: + f0:9f:3b:84:f1:c1:b6:e9:54:03:e6:71:e0:4c:61:f5:93:a3: + be:56:6c:22:47:c8:e4:1c:fd:55:8b:a7:22:4d:f5:d2:32:59: + 9b:a0:ef:2f:59:22:0b:0c:c7:70:b9:3b:5d:81:63:6d:f2:83: + e5:97 -----BEGIN CERTIFICATE----- -MIICezCCAeSgAwIBAgIBAjANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEL -MAkGA1UECBMCQ0ExFDASBgNVBAoTC00yQ3J5cHRvIENBMRIwEAYDVQQDEwlsb2Nh -bGhvc3QwHhcNMDYwNDIyMDQzODU3WhcNMDcwNDIyMDQzODU3WjBGMQswCQYDVQQG -EwJVUzELMAkGA1UECBMCQ0ExFjAUBgNVBAoTDU0yQ3J5cHRvIFg1MDkxEjAQBgNV -BAMTCWxvY2FsaG9zdDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuFJh9cFB -kRumA6fotaPbcuKEm4osSa29A1GkppVruyn8mpXPyvvFFpTlI5ySnR7P+jE1Va6L -z69z1ZLPKg89O88Vudjeu5N7ulTVSq0+wm92vzV8vv+IMYSQg0tUuZtPmqVV2G1F -fGRtvmyP4QZvc/c1oyweSJk3aJ+x04P618cCAwEAAaN7MHkwCQYDVR0TBAIwADAs -BglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwHQYD -VR0OBBYEFBCvg/K/8Y++4ZY5ys4vzfiZFMUXMB8GA1UdIwQYMBaAFFz5xZuwAjc8 -ZnNNDstaPbs6RiLdMA0GCSqGSIb3DQEBBQUAA4GBAGClLUgRPlWwR+T5io4RZosI -1Fm3yW50h1HYx0NWe8K1/hFhtzeQF2vRSQdbWIkfQ9cf3vGoWCh7lvK1r9q/TuWo -Dza9OoicokHmaju4SjhIb3fNrkoHUZDhARiC2tmkqLWkboK4sMz3SnO21UwLCQLB -DjwxX1vSAJHo3KHioxdZ +MIICczCCAdygAwIBAgIBAjANBgkqhkiG9w0BAQUFADBBMQswCQYDVQQGEwJVUzEL +MAkGA1UECBMCQ0ExETAPBgNVBAoTCE0yQ3J5cHRvMRIwEAYDVQQDEwlsb2NhbGhv +c3QwHhcNMDYxMjE0MDMyNTM2WhcNMDkxMjEzMDMyNTM2WjBBMQswCQYDVQQGEwJV +UzELMAkGA1UECBMCQ0ExETAPBgNVBAoTCE0yQ3J5cHRvMRIwEAYDVQQDEwlsb2Nh +bGhvc3QwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAO0gvwlQ6+iDTt5g2DBu +zhV9lffzBtz60pXLXlQyu50j4TOAMnKueKSCXa0DV2KOtH1x+A+CZXmkDRZ4ZTgk +/QY5a+zCDvx4QBABfXgzGLF/L71lrsqndRbyPhrceVCv5GELwVI6VVGHcmsaMwJH +48wsSef+zBDpj1xgxi7BWsi7AgMBAAGjezB5MAkGA1UdEwQCMAAwLAYJYIZIAYb4 +QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBR3 +3rq33o2b4E59Hmd3A7POc+ssvzAfBgNVHSMEGDAWgBTNBjgjw1AM9qha8KfbUQMh +AEHbNzANBgkqhkiG9w0BAQUFAAOBgQCltwshNnlZHfLDQ/95CVS/RIcFP7Tdmupj +mDTVCxzkM+o3e+xrgbQc7+ba3Es3Sy+Wc96UdWIfrGC+J34/FpgFGkzsfIdZn5Tw +nzuE8cG26VQD5nHgTGH1k6O+VmwiR8jkHP1Vi6ciTfXSMlmboO8vWSILDMdwuTtd +gWNt8oPllw== -----END CERTIFICATE----- -----BEGIN RSA PRIVATE KEY----- -MIICXgIBAAKBgQC4UmH1wUGRG6YDp+i1o9ty4oSbiixJrb0DUaSmlWu7Kfyalc/K -+8UWlOUjnJKdHs/6MTVVrovPr3PVks8qDz07zxW52N67k3u6VNVKrT7Cb3a/NXy+ -/4gxhJCDS1S5m0+apVXYbUV8ZG2+bI/hBm9z9zWjLB5ImTdon7HTg/rXxwIDAQAB -AoGAcmUeywlwCgEg3a/+K41Qi1KufmIY7nlXj5HCIGkn/XcngUFtP0tWnJc4RwvL -qpwO8/ZKZaz4tKLtvyVoUXA3zbJ0wP9JTqtYOTdfxPvfkIHcGwI/YI+xpJXj/2ZG -//biP3GjnO1gAH53YqRSOC7fD7J9OStPEq2uSDFArCuKpeECQQDppTtqRCF3BxCq -sLZACVpx+rk52SWLHEgE6OYbID6kEl9aiiBkRUqACc3fBkwiIXmiIR+vctcccinT -qSdI8E9JAkEAyfUMPzvXMjO0qAjVdTlBdlZETawEASpdfId+gob+EcXr5qo+fim8 -WyU1C6M1F1DEz7sUKzyx8fugNH7QVNQejwJBALkrvt8FiBAxhUACNS6jOw9CSjJS -qrKJg3qAqn2tHHgkJ3Y2Kl3NnLHFE2hCMWyLYz7fSaFfPqTIxeV+Fih0bCECQQCD -bd/sfusLFq8o86bGxN4fPwDwc1Of1oxEcIEaPPO3aVCeKojE3jBgOJSO4EW6yKts -bNkxUiyTyCd4Qlcd/XVtAkEAqSwMV9GNoxc2dzeOYOamuSyRDdzvT4rdEOOE8VnQ -yjcu6zgLanbf9lfcy7Ma9NlmTExTniiX2+q8VNmnbk32NQ== +MIICXQIBAAKBgQDtIL8JUOvog07eYNgwbs4VfZX38wbc+tKVy15UMrudI+EzgDJy +rnikgl2tA1dijrR9cfgPgmV5pA0WeGU4JP0GOWvswg78eEAQAX14Mxixfy+9Za7K +p3UW8j4a3HlQr+RhC8FSOlVRh3JrGjMCR+PMLEnn/swQ6Y9cYMYuwVrIuwIDAQAB +AoGBANa/yULOnlc8U7jhS+jQ8KJV0fNzjMuj/ALc4tit+Wsei1zwxL9HcsrJpbyC +Qilnw9230Ud6eBvpjlDDSCfIl7vEx5+5dtYPnpJNUsWICCbvRKfBSHSNUZfDbiHf +BgtDFGjkD3SxjlpYCBFXt/9YHWM9qxiH5NvfIpI/lCuAMJYBAkEA/1K6KFX6Jzd0 +M++eNKYrcWAdBsp081MiOZ90W78ChNj0V+spwX6iK63qYxJbnE9WeuvdN/jx6iXN +FhlOMDJJ2wJBAO3Bq8fl3m/crJcvbknjMLBIx/4RM7C5e/9duMTO9u6gRDC/LIE+ +tClptiqCg5yVev5bfxVfIVOuxdYe8NXF4qECQAEvMQ3e2Do2V6OmCOXVn333JCtT +5Rb727zIsJF8YVacawW9YYQ0QixRsjSjcSlYdN49GdmYngaoBjuEAojWsuECQEQd +sHFc0hWKS4gk9pwEkvZuY53On9iJy5Sl7UG1admD4QV2P/HnXQZgWuhi7AH4cXxe +ClK9JncrI1LtGmKkhwECQQDPrH/sGRTPZFjc0vRMwYYJM4QLRWCi3eKL8Pc8DSVk +rillryZWYPMbkTBKitZmXlBEfrj3CGD1sp7Pa4SauLRi -----END RSA PRIVATE KEY----- |