import typing

import java
import java.chaquopy
import java.lang
import java.math
import java.security.spec
import javax.crypto

class ChaCha20ParameterSpec(java.security.spec.AlgorithmParameterSpec):
    def __init__(self, nonce: java.chaquopy.JavaArrayJByte, counter: int | java.jint | java.lang.Integer, /) -> None: ...
    def getCounter(self) -> int: ...
    def getNonce(self) -> java.chaquopy.JavaArrayJByte: ...

class DESKeySpec(java.security.spec.KeySpec):
    DES_KEY_LEN: typing.ClassVar[int] = ...
    @typing.overload
    def __init__(self, key: java.chaquopy.JavaArrayJByte, /) -> None: ...
    @typing.overload
    def __init__(self, key: java.chaquopy.JavaArrayJByte, offset: int | java.jint | java.lang.Integer, /) -> None: ...
    def getKey(self) -> java.chaquopy.JavaArrayJByte: ...
    @staticmethod
    def isParityAdjusted(key: java.chaquopy.JavaArrayJByte, offset: int | java.jint | java.lang.Integer, /) -> bool: ...
    @staticmethod
    def isWeak(key: java.chaquopy.JavaArrayJByte, offset: int | java.jint | java.lang.Integer, /) -> bool: ...

class DESedeKeySpec(java.security.spec.KeySpec):
    DES_EDE_KEY_LEN: typing.ClassVar[int] = ...
    @typing.overload
    def __init__(self, key: java.chaquopy.JavaArrayJByte, /) -> None: ...
    @typing.overload
    def __init__(self, key: java.chaquopy.JavaArrayJByte, offset: int | java.jint | java.lang.Integer, /) -> None: ...
    def getKey(self) -> java.chaquopy.JavaArrayJByte: ...
    @staticmethod
    def isParityAdjusted(key: java.chaquopy.JavaArrayJByte, offset: int | java.jint | java.lang.Integer, /) -> bool: ...

class DHGenParameterSpec(java.security.spec.AlgorithmParameterSpec):
    def __init__(self, primeSize: int | java.jint | java.lang.Integer, exponentSize: int | java.jint | java.lang.Integer, /) -> None: ...
    def getExponentSize(self) -> int: ...
    def getPrimeSize(self) -> int: ...

class DHParameterSpec(java.security.spec.AlgorithmParameterSpec):
    @typing.overload
    def __init__(self, p: java.math.BigInteger, g: java.math.BigInteger, /) -> None: ...
    @typing.overload
    def __init__(self, p: java.math.BigInteger, g: java.math.BigInteger, l: int | java.jint | java.lang.Integer, /) -> None: ...
    def getG(self) -> java.math.BigInteger: ...
    def getL(self) -> int: ...
    def getP(self) -> java.math.BigInteger: ...

class DHPrivateKeySpec(java.security.spec.KeySpec):
    def __init__(self, x: java.math.BigInteger, p: java.math.BigInteger, g: java.math.BigInteger, /) -> None: ...
    def getG(self) -> java.math.BigInteger: ...
    def getP(self) -> java.math.BigInteger: ...
    def getX(self) -> java.math.BigInteger: ...

class DHPublicKeySpec(java.security.spec.KeySpec):
    def __init__(self, y: java.math.BigInteger, p: java.math.BigInteger, g: java.math.BigInteger, /) -> None: ...
    def getG(self) -> java.math.BigInteger: ...
    def getP(self) -> java.math.BigInteger: ...
    def getY(self) -> java.math.BigInteger: ...

class GCMParameterSpec(java.security.spec.AlgorithmParameterSpec):
    @typing.overload
    def __init__(self, tLen: int | java.jint | java.lang.Integer, src: java.chaquopy.JavaArrayJByte, /) -> None: ...
    @typing.overload
    def __init__(self, tLen: int | java.jint | java.lang.Integer, src: java.chaquopy.JavaArrayJByte, offset: int | java.jint | java.lang.Integer, len: int | java.jint | java.lang.Integer, /) -> None: ...
    def getIV(self) -> java.chaquopy.JavaArrayJByte: ...
    def getTLen(self) -> int: ...

class IvParameterSpec(java.security.spec.AlgorithmParameterSpec):
    @typing.overload
    def __init__(self, iv: java.chaquopy.JavaArrayJByte, /) -> None: ...
    @typing.overload
    def __init__(self, iv: java.chaquopy.JavaArrayJByte, offset: int | java.jint | java.lang.Integer, len: int | java.jint | java.lang.Integer, /) -> None: ...
    def getIV(self) -> java.chaquopy.JavaArrayJByte: ...

class OAEPParameterSpec(java.security.spec.AlgorithmParameterSpec):
    DEFAULT: typing.ClassVar[OAEPParameterSpec] = ...
    def __init__(self, mdName: str | java.lang.String, mgfName: str | java.lang.String, mgfSpec: java.security.spec.AlgorithmParameterSpec, pSrc: PSource, /) -> None: ...
    def getDigestAlgorithm(self) -> str: ...
    def getMGFAlgorithm(self) -> str: ...
    def getMGFParameters(self) -> java.security.spec.AlgorithmParameterSpec: ...
    def getPSource(self) -> PSource: ...

class PBEKeySpec(java.security.spec.KeySpec):
    @typing.overload
    def __init__(self, password: java.chaquopy.JavaArrayJChar, /) -> None: ...
    @typing.overload
    def __init__(self, password: java.chaquopy.JavaArrayJChar, salt: java.chaquopy.JavaArrayJByte, iterationCount: int | java.jint | java.lang.Integer, /) -> None: ...
    @typing.overload
    def __init__(self, password: java.chaquopy.JavaArrayJChar, salt: java.chaquopy.JavaArrayJByte, iterationCount: int | java.jint | java.lang.Integer, keyLength: int | java.jint | java.lang.Integer, /) -> None: ...
    def clearPassword(self) -> None: ...
    def getIterationCount(self) -> int: ...
    def getKeyLength(self) -> int: ...
    def getPassword(self) -> java.chaquopy.JavaArrayJChar: ...
    def getSalt(self) -> java.chaquopy.JavaArrayJByte: ...

class PBEParameterSpec(java.security.spec.AlgorithmParameterSpec):
    @typing.overload
    def __init__(self, salt: java.chaquopy.JavaArrayJByte, iterationCount: int | java.jint | java.lang.Integer, /) -> None: ...
    @typing.overload
    def __init__(self, salt: java.chaquopy.JavaArrayJByte, iterationCount: int | java.jint | java.lang.Integer, paramSpec: java.security.spec.AlgorithmParameterSpec, /) -> None: ...
    def getIterationCount(self) -> int: ...
    def getParameterSpec(self) -> java.security.spec.AlgorithmParameterSpec: ...
    def getSalt(self) -> java.chaquopy.JavaArrayJByte: ...

class PSource(java.lang.Object):
    def __init__(self, pSrcName: str | java.lang.String, /) -> None: ...
    def getAlgorithm(self) -> str: ...

    class PSpecified(PSource):
        DEFAULT: typing.ClassVar[PSource.PSpecified] = ...
        def __init__(self, p: java.chaquopy.JavaArrayJByte, /) -> None: ...
        def getValue(self) -> java.chaquopy.JavaArrayJByte: ...

class RC2ParameterSpec(java.security.spec.AlgorithmParameterSpec):
    @typing.overload
    def __init__(self, effectiveKeyBits: int | java.jint | java.lang.Integer, /) -> None: ...
    @typing.overload
    def __init__(self, effectiveKeyBits: int | java.jint | java.lang.Integer, iv: java.chaquopy.JavaArrayJByte, /) -> None: ...
    @typing.overload
    def __init__(self, effectiveKeyBits: int | java.jint | java.lang.Integer, iv: java.chaquopy.JavaArrayJByte, offset: int | java.jint | java.lang.Integer, /) -> None: ...
    def equals(self, obj: java.lang.Object | int | bool | float | str, /) -> bool: ...
    def getEffectiveKeyBits(self) -> int: ...
    def getIV(self) -> java.chaquopy.JavaArrayJByte: ...
    def hashCode(self) -> int: ...

class RC5ParameterSpec(java.security.spec.AlgorithmParameterSpec):
    @typing.overload
    def __init__(self, version: int | java.jint | java.lang.Integer, rounds: int | java.jint | java.lang.Integer, wordSize: int | java.jint | java.lang.Integer, /) -> None: ...
    @typing.overload
    def __init__(self, version: int | java.jint | java.lang.Integer, rounds: int | java.jint | java.lang.Integer, wordSize: int | java.jint | java.lang.Integer, iv: java.chaquopy.JavaArrayJByte, /) -> None: ...
    @typing.overload
    def __init__(self, version: int | java.jint | java.lang.Integer, rounds: int | java.jint | java.lang.Integer, wordSize: int | java.jint | java.lang.Integer, iv: java.chaquopy.JavaArrayJByte, offset: int | java.jint | java.lang.Integer, /) -> None: ...
    def equals(self, obj: java.lang.Object | int | bool | float | str, /) -> bool: ...
    def getIV(self) -> java.chaquopy.JavaArrayJByte: ...
    def getRounds(self) -> int: ...
    def getVersion(self) -> int: ...
    def getWordSize(self) -> int: ...
    def hashCode(self) -> int: ...

class SecretKeySpec(java.security.spec.KeySpec, javax.crypto.SecretKey):
    @typing.overload
    def __init__(self, key: java.chaquopy.JavaArrayJByte, algorithm: str | java.lang.String, /) -> None: ...
    @typing.overload
    def __init__(self, key: java.chaquopy.JavaArrayJByte, offset: int | java.jint | java.lang.Integer, len: int | java.jint | java.lang.Integer, algorithm: str | java.lang.String, /) -> None: ...
    def equals(self, obj: java.lang.Object | int | bool | float | str, /) -> bool: ...
    def getAlgorithm(self) -> str: ...
    def getEncoded(self) -> java.chaquopy.JavaArrayJByte: ...
    def getFormat(self) -> str: ...
    def hashCode(self) -> int: ...
