⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jcersacipher.java

📁 kmlnjlkj nlkjlkjkljl okopokipoipo oipipipo i
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
                if (digest == null)                {                    throw new InvalidAlgorithmParameterException("no match on digest algorithm: "+ spec.getDigestAlgorithm());                }                MGF1ParameterSpec mgfParams = (MGF1ParameterSpec)spec.getMGFParameters();                Digest mgfDigest = JCEDigestUtil.getDigest(mgfParams.getDigestAlgorithm());                                if (mgfDigest == null)                {                    throw new InvalidAlgorithmParameterException("no match on MGF digest algorithm: "+ mgfParams.getDigestAlgorithm());                }                                cipher = new OAEPEncoding(new RSABlindedEngine(), digest, mgfDigest, ((PSource.PSpecified)spec.getPSource()).getValue());            }        }        else        {            throw new IllegalArgumentException("unknown parameter type.");        }        if (!(cipher instanceof RSABlindedEngine))        {            if (random != null)            {                param = new ParametersWithRandom(param, random);            }            else            {                param = new ParametersWithRandom(param, new SecureRandom());            }        }        switch (opmode)        {        case Cipher.ENCRYPT_MODE:        case Cipher.WRAP_MODE:            cipher.init(true, param);            break;        case Cipher.DECRYPT_MODE:        case Cipher.UNWRAP_MODE:            cipher.init(false, param);            break;        default:            throw new InvalidParameterException("unknown opmode " + opmode + " passed to RSA");        }    }    protected void engineInit(        int                 opmode,        Key                 key,        AlgorithmParameters params,        SecureRandom        random)     throws InvalidKeyException, InvalidAlgorithmParameterException    {        AlgorithmParameterSpec  paramSpec = null;        if (params != null)        {            try            {                paramSpec = params.getParameterSpec(OAEPParameterSpec.class);            }            catch (InvalidParameterSpecException e)            {                throw new InvalidAlgorithmParameterException("cannot recognise parameters: " + e.toString(), e);            }        }        engineParams = params;        engineInit(opmode, key, paramSpec, random);    }    protected void engineInit(        int                 opmode,        Key                 key,        SecureRandom        random)     throws InvalidKeyException    {        try        {            engineInit(opmode, key, (AlgorithmParameterSpec)null, random);        }        catch (InvalidAlgorithmParameterException e)        {            // this shouldn't happen            throw new RuntimeException("Eeeek! " + e.toString(), e);        }    }    protected byte[] engineUpdate(        byte[]  input,        int     inputOffset,        int     inputLen)     {        bOut.write(input, inputOffset, inputLen);        if (cipher instanceof RSABlindedEngine)        {            if (bOut.size() > cipher.getInputBlockSize() + 1)            {                throw new ArrayIndexOutOfBoundsException("too much data for RSA block");            }        }        else        {            if (bOut.size() > cipher.getInputBlockSize())            {                throw new ArrayIndexOutOfBoundsException("too much data for RSA block");            }        }        return null;    }    protected int engineUpdate(        byte[]  input,        int     inputOffset,        int     inputLen,        byte[]  output,        int     outputOffset)     {        bOut.write(input, inputOffset, inputLen);        if (cipher instanceof RSABlindedEngine)        {            if (bOut.size() > cipher.getInputBlockSize() + 1)            {                throw new ArrayIndexOutOfBoundsException("too much data for RSA block");            }        }        else        {            if (bOut.size() > cipher.getInputBlockSize())            {                throw new ArrayIndexOutOfBoundsException("too much data for RSA block");            }        }        return 0;    }    protected byte[] engineDoFinal(        byte[]  input,        int     inputOffset,        int     inputLen)         throws IllegalBlockSizeException, BadPaddingException    {        if (input != null)        {            bOut.write(input, inputOffset, inputLen);        }        if (cipher instanceof RSABlindedEngine)        {            if (bOut.size() > cipher.getInputBlockSize() + 1)            {                throw new ArrayIndexOutOfBoundsException("too much data for RSA block");            }        }        else        {            if (bOut.size() > cipher.getInputBlockSize())            {                throw new ArrayIndexOutOfBoundsException("too much data for RSA block");            }        }        try        {            byte[]  bytes = bOut.toByteArray();            bOut.reset();            return cipher.processBlock(bytes, 0, bytes.length);        }        catch (InvalidCipherTextException e)        {            throw new BadPaddingException(e.getMessage());        }    }    protected int engineDoFinal(        byte[]  input,        int     inputOffset,        int     inputLen,        byte[]  output,        int     outputOffset)         throws IllegalBlockSizeException, BadPaddingException    {        if (input != null)        {            bOut.write(input, inputOffset, inputLen);        }        if (cipher instanceof RSABlindedEngine)        {            if (bOut.size() > cipher.getInputBlockSize() + 1)            {                throw new ArrayIndexOutOfBoundsException("too much data for RSA block");            }        }        else        {            if (bOut.size() > cipher.getInputBlockSize())            {                throw new ArrayIndexOutOfBoundsException("too much data for RSA block");            }        }        byte[]  out;        try        {            byte[]  bytes = bOut.toByteArray();            bOut.reset();            out = cipher.processBlock(bytes, 0, bytes.length);        }        catch (InvalidCipherTextException e)        {            throw new BadPaddingException(e.getMessage());        }        for (int i = 0; i != out.length; i++)        {            output[outputOffset + i] = out[i];        }        return out.length;    }    /**     * classes that inherit from us.     */    static public class NoPadding        extends JCERSACipher    {        public NoPadding()        {            super(new RSABlindedEngine());        }    }    static public class PKCS1v1_5Padding        extends JCERSACipher    {        public PKCS1v1_5Padding()        {            super(new PKCS1Encoding(new RSABlindedEngine()));        }    }    static public class PKCS1v1_5Padding_PrivateOnly        extends JCERSACipher    {        public PKCS1v1_5Padding_PrivateOnly()        {            super(false, true, new PKCS1Encoding(new RSABlindedEngine()));        }    }    static public class PKCS1v1_5Padding_PublicOnly        extends JCERSACipher    {        public PKCS1v1_5Padding_PublicOnly()        {            super(true, false, new PKCS1Encoding(new RSABlindedEngine()));        }    }    static public class OAEPPadding        extends JCERSACipher    {        public OAEPPadding()        {            super(OAEPParameterSpec.DEFAULT);        }    }        static public class ISO9796d1Padding        extends JCERSACipher    {        public ISO9796d1Padding()        {            super(new ISO9796d1Encoding(new RSABlindedEngine()));        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -