parameters: (self, type, bits)
docstring: Generate a key pair of the given type, with the given number of bits.
  
          This generates a key "into" the this object.
  
          :param type: The key type.
          :type type: :py:data:`TYPE_RSA` or :py:data:`TYPE_DSA`
          :param bits: The number of bits.
          :type bits: :py:data:`int` ``>= 0``
          :raises TypeError: If :py:data:`type` or :py:data:`bits` isn't
              of the appropriate type.
          :raises ValueError: If the number of bits isn't an integer of
              the appropriate size.
          :return: ``None``
docstring_summary: Generate a key pair of the given type, with the given number of bits.
docstring_tokens: Generate a key pair of the given type with the given number of bits .
function: def generate_key(self, type, bits):
          """
          Generate a key pair of the given type, with the given number of bits.
  
          This generates a key "into" the this object.
  
          :param type: The key type.
          :type type: :py:data:`TYPE_RSA` or :py:data:`TYPE_DSA`
          :param bits: The number of bits.
          :type bits: :py:data:`int` ``>= 0``
          :raises TypeError: If :py:data:`type` or :py:data:`bits` isn't
              of the appropriate type.
          :raises ValueError: If the number of bits isn't an integer of
              the appropriate size.
          :return: ``None``
          """
          if not isinstance(type, int):
              raise TypeError("type must be an integer")
  
          if not isinstance(bits, int):
              raise TypeError("bits must be an integer")
  
          if type == TYPE_RSA:
              if bits <= 0:
                  raise ValueError("Invalid number of bits")
  
              # TODO Check error return
              exponent = _lib.BN_new()
              exponent = _ffi.gc(exponent, _lib.BN_free)
              _lib.BN_set_word(exponent, _lib.RSA_F4)
  
              rsa = _lib.RSA_new()
  
              result = _lib.RSA_generate_key_ex(rsa, bits, exponent, _ffi.NULL)
              _openssl_assert(result == 1)
  
              result = _lib.EVP_PKEY_assign_RSA(self._pkey, rsa)
              _openssl_assert(result == 1)
  
          elif type == TYPE_DSA:
              dsa = _lib.DSA_new()
              _openssl_assert(dsa != _ffi.NULL)
  
              dsa = _ffi.gc(dsa, _lib.DSA_free)
              res = _lib.DSA_generate_parameters_ex(
                  dsa, bits, _ffi.NULL, 0, _ffi.NULL, _ffi.NULL, _ffi.NULL
              )
              _openssl_assert(res == 1)
  
              _openssl_assert(_lib.DSA_generate_key(dsa) == 1)
              _openssl_assert(_lib.EVP_PKEY_set1_DSA(self._pkey, dsa) == 1)
          else:
              raise Error("No such key type")
  
          self._initialized = True
function_tokens: def generate_key ( self , type , bits ) : if not isinstance ( type , int ) : raise TypeError ( "type must be an integer" ) if not isinstance ( bits , int ) : raise TypeError ( "bits must be an integer" ) if type == TYPE_RSA : if bits <= 0 : raise ValueError ( "Invalid number of bits" ) # TODO Check error return exponent = _lib . BN_new ( ) exponent = _ffi . gc ( exponent , _lib . BN_free ) _lib . BN_set_word ( exponent , _lib . RSA_F4 ) rsa = _lib . RSA_new ( ) result = _lib . RSA_generate_key_ex ( rsa , bits , exponent , _ffi . NULL ) _openssl_assert ( result == 1 ) result = _lib . EVP_PKEY_assign_RSA ( self . _pkey , rsa ) _openssl_assert ( result == 1 ) elif type == TYPE_DSA : dsa = _lib . DSA_new ( ) _openssl_assert ( dsa != _ffi . NULL ) dsa = _ffi . gc ( dsa , _lib . DSA_free ) res = _lib . DSA_generate_parameters_ex ( dsa , bits , _ffi . NULL , 0 , _ffi . NULL , _ffi . NULL , _ffi . NULL ) _openssl_assert ( res == 1 ) _openssl_assert ( _lib . DSA_generate_key ( dsa ) == 1 ) _openssl_assert ( _lib . EVP_PKEY_set1_DSA ( self . _pkey , dsa ) == 1 ) else : raise Error ( "No such key type" ) self . _initialized = True