'Build a key from DSA numerical components.
@type y: L{int}
@param y: The \'y\' DSA variable.
@type p: L{int}
@param p: The \'p\' DSA variable.
@type q: L{int}
@param q: The \'q\' DSA variable.
@type g: L{int}
@param g: The \'g\' DSA variable.
@type x: L{int} or L{None}
@param x: The \'x\' DSA variable (optional for a public key)
@rtype: L{Key}
@return: A DSA key constructed from the values as given.'

@classmethod
def _fromDSAComponents(cls, y, p, q, g, x=None):

    publicNumbers = dsa.DSAPublicNumbers(y=y, parameter_numbers=dsa.DSAParameterNumbers(p=p, q=q, g=g))
    if (x is None):
        keyObject = publicNumbers.public_key(default_backend())
    else:
        privateNumbers = dsa.DSAPrivateNumbers(x=x, public_numbers=publicNumbers)
        keyObject = privateNumbers.private_key(default_backend())
    return cls(keyObject)
