import typing

import java
import java.chaquopy
import java.lang
import java.math
import java.security
import java.security.spec
import java.util

class DSAKey(java.lang.Object):
    def getParams(self) -> DSAParams: ...

class DSAKeyPairGenerator(java.lang.Object):
    @typing.overload
    def initialize(self, arg1: DSAParams, arg2: java.security.SecureRandom, /) -> None: ...
    @typing.overload
    def initialize(self, arg1: int | java.jint | java.lang.Integer, arg2: bool | java.jboolean | java.lang.Boolean, arg3: java.security.SecureRandom, /) -> None: ...

class DSAParams(java.lang.Object):
    def getG(self) -> java.math.BigInteger: ...
    def getP(self) -> java.math.BigInteger: ...
    def getQ(self) -> java.math.BigInteger: ...

class DSAPrivateKey(DSAKey, java.security.PrivateKey):
    serialVersionUID: typing.ClassVar[int] = ...
    def getX(self) -> java.math.BigInteger: ...

class DSAPublicKey(DSAKey, java.security.PublicKey):
    serialVersionUID: typing.ClassVar[int] = ...
    def getY(self) -> java.math.BigInteger: ...

class ECKey(java.lang.Object):
    def getParams(self) -> java.security.spec.ECParameterSpec: ...

class ECPrivateKey(ECKey, java.security.PrivateKey):
    serialVersionUID: typing.ClassVar[int] = ...
    def getS(self) -> java.math.BigInteger: ...

class ECPublicKey(ECKey, java.security.PublicKey):
    serialVersionUID: typing.ClassVar[int] = ...
    def getW(self) -> java.security.spec.ECPoint: ...

class EdECKey(java.lang.Object):
    def getParams(self) -> java.security.spec.NamedParameterSpec: ...

class EdECPrivateKey(EdECKey, java.security.PrivateKey):
    def getBytes(self) -> java.util.Optional[java.chaquopy.JavaArrayJByte]: ...

class EdECPublicKey(EdECKey, java.security.PublicKey):
    def getPoint(self) -> java.security.spec.EdECPoint: ...

class RSAKey(java.lang.Object):
    def getModulus(self) -> java.math.BigInteger: ...
    def getParams(self) -> java.security.spec.AlgorithmParameterSpec: ...

class RSAMultiPrimePrivateCrtKey(RSAPrivateKey):
    serialVersionUID: typing.ClassVar[int] = ...
    def getCrtCoefficient(self) -> java.math.BigInteger: ...
    def getOtherPrimeInfo(self) -> java.chaquopy.JavaArray[java.security.spec.RSAOtherPrimeInfo]: ...
    def getPrimeExponentP(self) -> java.math.BigInteger: ...
    def getPrimeExponentQ(self) -> java.math.BigInteger: ...
    def getPrimeP(self) -> java.math.BigInteger: ...
    def getPrimeQ(self) -> java.math.BigInteger: ...
    def getPublicExponent(self) -> java.math.BigInteger: ...

class RSAPrivateCrtKey(RSAPrivateKey):
    serialVersionUID: typing.ClassVar[int] = ...
    def getCrtCoefficient(self) -> java.math.BigInteger: ...
    def getPrimeExponentP(self) -> java.math.BigInteger: ...
    def getPrimeExponentQ(self) -> java.math.BigInteger: ...
    def getPrimeP(self) -> java.math.BigInteger: ...
    def getPrimeQ(self) -> java.math.BigInteger: ...
    def getPublicExponent(self) -> java.math.BigInteger: ...

class RSAPrivateKey(RSAKey, java.security.PrivateKey):
    serialVersionUID: typing.ClassVar[int] = ...
    def getPrivateExponent(self) -> java.math.BigInteger: ...

class RSAPublicKey(RSAKey, java.security.PublicKey):
    serialVersionUID: typing.ClassVar[int] = ...
    def getPublicExponent(self) -> java.math.BigInteger: ...

class XECKey(java.lang.Object):
    def getParams(self) -> java.security.spec.AlgorithmParameterSpec: ...

class XECPrivateKey(XECKey, java.security.PrivateKey):
    def getScalar(self) -> java.util.Optional[java.chaquopy.JavaArrayJByte]: ...

class XECPublicKey(XECKey, java.security.PublicKey):
    def getU(self) -> java.math.BigInteger: ...
