tparse PEM list using tlslite - electrum - Electrum Bitcoin wallet (HTM) git clone https://git.parazyd.org/electrum (DIR) Log (DIR) Files (DIR) Refs (DIR) Submodules --- (DIR) commit 58d2e90fa5c9e1c19f3c1726219b4ca1f672a56a (DIR) parent b973d31a67cba662b54d8ad9d49605dcd642844a (HTM) Author: ThomasV <thomasv@gitorious> Date: Sun, 15 Feb 2015 21:27:11 +0100 parse PEM list using tlslite Diffstat: M lib/paymentrequest.py | 37 +------------------------------ M lib/x509.py | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 36 deletions(-) --- (DIR) diff --git a/lib/paymentrequest.py b/lib/paymentrequest.py t@@ -43,42 +43,8 @@ import x509 REQUEST_HEADERS = {'Accept': 'application/bitcoin-paymentrequest', 'User-Agent': 'Electrum'} ACK_HEADERS = {'Content-Type':'application/bitcoin-payment','Accept':'application/bitcoin-paymentack','User-Agent':'Electrum'} - -ca_list = {} ca_path = requests.certs.where() - - - - -def load_certificates(): - try: - ca_f = open(ca_path, 'r') - except Exception: - print "ERROR: Could not open %s"%ca_path - print "ca-bundle.crt file should be placed in ~/.electrum/ca/ca-bundle.crt" - print "Documentation on how to download or create the file here: http://curl.haxx.se/docs/caextract.html" - print "Payment will continue with manual verification." - return False - c = "" - for line in ca_f: - if line == "-----BEGIN CERTIFICATE-----\n": - c = line - else: - c += line - if line == "-----END CERTIFICATE-----\n": - x = x509.X509() - try: - x.parse(c) - except Exception as e: - util.print_error("cannot parse cert:", e) - continue - ca_list[x.getFingerprint()] = x - ca_f.close() - util.print_error("%d certificates"%len(ca_list)) - return True - -load_certificates() - +ca_list = x509.load_certificates(ca_path) class PaymentRequest: t@@ -325,7 +291,6 @@ class PaymentRequest: if __name__ == "__main__": util.set_verbosity(True) - load_certificates() try: uri = sys.argv[1] (DIR) diff --git a/lib/x509.py b/lib/x509.py t@@ -23,6 +23,7 @@ import sys import pyasn1 import pyasn1_modules import tlslite +import util # workaround https://github.com/trevp/tlslite/issues/15 tlslite.utils.cryptomath.pycryptoLoaded = False t@@ -224,3 +225,21 @@ class X509(tlslite.X509): class X509CertChain(tlslite.X509CertChain): pass + + + + +def load_certificates(ca_path): + ca_list = {} + with open(ca_path, 'r') as f: + s = f.read() + bList = tlslite.utils.pem.dePemList(s, "CERTIFICATE") + for b in bList: + x = X509() + try: + x.parseBinary(b) + except Exception as e: + util.print_error("cannot parse cert:", e) + continue + ca_list[x.getFingerprint()] = x + return ca_list