def test_load_request_bio(self): (req, _) = self.mkreq(512) r1 = X509.load_request_der_string(req.as_der()) r2 = X509.load_request_string(req.as_der(), X509.FORMAT_DER) r3 = X509.load_request_string(req.as_pem(), X509.FORMAT_PEM) r4 = X509.load_request_bio(BIO.MemoryBuffer(req.as_der()), X509.FORMAT_DER) r5 = X509.load_request_bio(BIO.MemoryBuffer(req.as_pem()), X509.FORMAT_PEM) for r in [r1, r2, r3, r4, r5]: assert req.as_der() == r.as_der() self.assertRaises(ValueError, X509.load_request_bio, BIO.MemoryBuffer(req.as_pem()), 345678)
def test_load_request_bio(self): (req, _) = self.mkreq(1024) r1 = X509.load_request_der_string(req.as_der()) r2 = X509.load_request_string(req.as_der(), X509.FORMAT_DER) r3 = X509.load_request_string(req.as_pem(), X509.FORMAT_PEM) r4 = X509.load_request_bio(BIO.MemoryBuffer(req.as_der()), X509.FORMAT_DER) r5 = X509.load_request_bio(BIO.MemoryBuffer(req.as_pem()), X509.FORMAT_PEM) for r in [r1, r2, r3, r4, r5]: self.assertEqual(req.as_der(), r.as_der()) with self.assertRaises(ValueError): X509.load_request_bio(BIO.MemoryBuffer(req.as_pem()), 345678)
def __init__(self, request=None, path=None, dn=None, keySize=2048, key=None, extensions=None): self._signed = False # Create public key object if key and not request: self._key = key else: self._key = Key(keySize=keySize) # Create certificate._request if request: self._request = request if isinstance(request, str): if request.startswith("-----BEGIN CERTIFICATE REQUEST-----"): bio = BIO.MemoryBuffer(request) cptr = m2.x509_req_read_pem(bio._ptr()) if cptr is None: raise X509.X509Error(Err.get_error()) self._request = X509.Request(cptr, _pyfree=1) elif ord(request[0]) == 48: bio = BIO.MemoryBuffer(request) cptr = m2.d2i_x509_req(bio._ptr()) if cptr is None: raise X509.X509Error(Err.get_error()) self._request = X509.Request(cptr, _pyfree=1) elif path.exists(request): reqfile = open(request) bio = BIO.File(reqfile) self._request = X509.load_request_bio(bio) else: raise ValueError('WFT') else: self._request = X509.Request() self._request.set_pubkey(self._key) self._request.set_version(0) if dn: self.set_dn(dn) if extensions: self.add_extensions(extensions)
def generate_request(dn=None, request=None, path=None, keySize=2048, key=None, extensions=None): """This funciton is for certificate request generation. :param request: either a PEM :class:`str` a DER :class:`str` :param path: the path to the certificate request file :param key: if sepecified this will be wrapped in a :class:`~gsindl.key.Key` :param keySize: The size of the key to be generated (default 2048) :param dn: the DN string of M2Crypto X509_Name :param extensions: a :class:`list` of :class:`dict` objects containing extensions """ # Create public key object if key and not request: _key = key else: _key = generate_key(keySize=keySize) # Create certificate._request if request: _request = request if isinstance(request, str): if request.startswith("-----BEGIN CERTIFICATE REQUEST-----"): bio = BIO.MemoryBuffer(request) cptr = m2.x509_req_read_pem(bio._ptr()) if cptr is None: raise X509.X509Error(Err.get_error()) _request = X509.Request(cptr, _pyfree=1) elif ord(request[0]) == 48: bio = BIO.MemoryBuffer(request) cptr = m2.d2i_x509_req(bio._ptr()) if cptr is None: raise X509.X509Error(Err.get_error()) _request = X509.Request(cptr, _pyfree=1) elif path.exists(request): reqfile = open(request) bio = BIO.File(reqfile) _request = X509.load_request_bio(bio) else: raise ValueError('WFT') else: _request = X509.Request() _request.set_pubkey(_key) _request.set_version(0) if dn: if isinstance(dn, X509.X509_Name): _request.set_subject_name(dn) elif isinstance(dn, str): _request.set_subject_name(_build_name_from_string(dn)) else: raise ValueError("the DN passes in isn't either a " "X509_Name or string") if extensions: extstack = X509.X509_Extension_Stack() sslower = lambda s: s.lower().replace(' ', '') for e in extensions: name = e['name'] key = sslower(name) critical = e['critical'] if key in multi_attrs: e['value'] = ', '.join([multi_attrs[key][sslower(v)] for v in e['value'].split(',')]) extstack.push(X509.new_extension(Att_map[key], e['value'], critical=int(critical))) _request.add_extensions(extstack) return _request, _key