new

Hellow

- 折叠区的练习


//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//

package com.sun.crypto.provider;

import java.nio.ByteBuffer;
import java.security.AlgorithmParameters;
import java.security.GeneralSecurityException;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.NoSuchAlgorithmException;
import java.security.ProviderException;
import java.security.SecureRandom;
import java.security.spec.AlgorithmParameterSpec;
import javax.crypto.BadPaddingException;
import javax.crypto.CipherSpi;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.ShortBufferException;

abstract class AESCipher extends CipherSpi {
private CipherCore core = null;
private final int fixedKeySize;
private boolean updateCalled;

static final void checkKeySize(Key key, int fixedKeySize) throws InvalidKeyException {
    if (fixedKeySize != -1) {
        if (key == null) {
            throw new InvalidKeyException("The key must not be null");
        }

        byte[] value = key.getEncoded();
        if (value == null) {
            throw new InvalidKeyException("Key encoding must not be null");
        }

        if (value.length != fixedKeySize) {
            throw new InvalidKeyException("The key must be " + fixedKeySize + " bytes");
        }
    }

}

protected AESCipher(int keySize) {
    this.core = new CipherCore(new AESCrypt(), 16);
    this.fixedKeySize = keySize;
}

protected void engineSetMode(String mode) throws NoSuchAlgorithmException {
    this.core.setMode(mode);
}

protected void engineSetPadding(String paddingScheme) throws NoSuchPaddingException {
    this.core.setPadding(paddingScheme);
}

protected int engineGetBlockSize() {
    return 16;
}

protected int engineGetOutputSize(int inputLen) {
    return this.core.getOutputSize(inputLen);
}

protected byte[] engineGetIV() {
    return this.core.getIV();
}

protected AlgorithmParameters engineGetParameters() {
    return this.core.getParameters("AES");
}

protected void engineInit(int opmode, Key key, SecureRandom random) throws InvalidKeyException {
    checkKeySize(key, this.fixedKeySize);
    this.updateCalled = false;
    this.core.init(opmode, key, random);
}

protected void engineInit(int opmode, Key key, AlgorithmParameterSpec params, SecureRandom random) throws InvalidKeyException, InvalidAlgorithmParameterException {
    checkKeySize(key, this.fixedKeySize);
    this.updateCalled = false;
    this.core.init(opmode, key, params, random);
}

protected void engineInit(int opmode, Key key, AlgorithmParameters params, SecureRandom random) throws InvalidKeyException, InvalidAlgorithmParameterException {
    checkKeySize(key, this.fixedKeySize);
    this.updateCalled = false;
    this.core.init(opmode, key, params, random);
}

protected byte[] engineUpdate(byte[] input, int inputOffset, int inputLen) {
    this.updateCalled = true;
    return this.core.update(input, inputOffset, inputLen);
}

protected int engineUpdate(byte[] input, int inputOffset, int inputLen, byte[] output, int outputOffset) throws ShortBufferException {
    this.updateCalled = true;
    return this.core.update(input, inputOffset, inputLen, output, outputOffset);
}

protected byte[] engineDoFinal(byte[] input, int inputOffset, int inputLen) throws IllegalBlockSizeException, BadPaddingException {
    byte[] out = this.core.doFinal(input, inputOffset, inputLen);
    this.updateCalled = false;
    return out;
}

protected int engineDoFinal(byte[] input, int inputOffset, int inputLen, byte[] output, int outputOffset) throws IllegalBlockSizeException, ShortBufferException, BadPaddingException {
    int outLen = this.core.doFinal(input, inputOffset, inputLen, output, outputOffset);
    this.updateCalled = false;
    return outLen;
}

protected int engineGetKeySize(Key key) throws InvalidKeyException {
    byte[] encoded = key.getEncoded();
    if (!AESCrypt.isKeySizeValid(encoded.length)) {
        throw new InvalidKeyException("Invalid AES key length: " + encoded.length + " bytes");
    } else {
        return Math.multiplyExact(encoded.length, 8);
    }
}

protected byte[] engineWrap(Key key) throws IllegalBlockSizeException, InvalidKeyException {
    return this.core.wrap(key);
}

protected Key engineUnwrap(byte[] wrappedKey, String wrappedKeyAlgorithm, int wrappedKeyType) throws InvalidKeyException, NoSuchAlgorithmException {
    return this.core.unwrap(wrappedKey, wrappedKeyAlgorithm, wrappedKeyType);
}

protected void engineUpdateAAD(byte[] src, int offset, int len) {
    if (this.core.getMode() == 7 && this.updateCalled) {
        throw new IllegalStateException("AAD must be supplied before encryption/decryption starts");
    } else {
        this.core.updateAAD(src, offset, len);
    }
}

protected void engineUpdateAAD(ByteBuffer src) {
    if (this.core.getMode() == 7 && this.updateCalled) {
        throw new IllegalStateException("AAD must be supplied before encryption/decryption starts");
    } else {
        if (src != null) {
            int aadLen = src.limit() - src.position();
            if (aadLen > 0) {
                if (src.hasArray()) {
                    int aadOfs = Math.addExact(src.arrayOffset(), src.position());
                    this.core.updateAAD(src.array(), aadOfs, aadLen);
                    src.position(src.limit());
                } else {
                    byte[] aad = new byte[aadLen];
                    src.get(aad);
                    this.core.updateAAD(aad, 0, aadLen);
                }
            }
        }

    }
}

public static final class AES256_GCM_NoPadding extends AESCipher.OidImpl {
    public AES256_GCM_NoPadding() {
        super(32, "GCM", "NOPADDING");
    }
}

public static final class AES192_GCM_NoPadding extends AESCipher.OidImpl {
    public AES192_GCM_NoPadding() {
        super(24, "GCM", "NOPADDING");
    }
}

public static final class AES128_GCM_NoPadding extends AESCipher.OidImpl {
    public AES128_GCM_NoPadding() {
        super(16, "GCM", "NOPADDING");
    }
}

public static final class AES256_CFB_NoPadding extends AESCipher.OidImpl {
    public AES256_CFB_NoPadding() {
        super(32, "CFB", "NOPADDING");
    }
}

public static final class AES192_CFB_NoPadding extends AESCipher.OidImpl {
    public AES192_CFB_NoPadding() {
        super(24, "CFB", "NOPADDING");
    }
}

public static final class AES128_CFB_NoPadding extends AESCipher.OidImpl {
    public AES128_CFB_NoPadding() {
        super(16, "CFB", "NOPADDING");
    }
}

public static final class AES256_OFB_NoPadding extends AESCipher.OidImpl {
    public AES256_OFB_NoPadding() {
        super(32, "OFB", "NOPADDING");
    }
}

public static final class AES192_OFB_NoPadding extends AESCipher.OidImpl {
    public AES192_OFB_NoPadding() {
        super(24, "OFB", "NOPADDING");
    }
}

public static final class AES128_OFB_NoPadding extends AESCipher.OidImpl {
    public AES128_OFB_NoPadding() {
        super(16, "OFB", "NOPADDING");
    }
}

public static final class AES256_CBC_NoPadding extends AESCipher.OidImpl {
    public AES256_CBC_NoPadding() {
        super(32, "CBC", "NOPADDING");
    }
}

public static final class AES192_CBC_NoPadding extends AESCipher.OidImpl {
    public AES192_CBC_NoPadding() {
        super(24, "CBC", "NOPADDING");
    }
}

public static final class AES128_CBC_NoPadding extends AESCipher.OidImpl {
    public AES128_CBC_NoPadding() {
        super(16, "CBC", "NOPADDING");
    }
}

public static final class AES256_ECB_NoPadding extends AESCipher.OidImpl {
    public AES256_ECB_NoPadding() {
        super(32, "ECB", "NOPADDING");
    }
}

public static final class AES192_ECB_NoPadding extends AESCipher.OidImpl {
    public AES192_ECB_NoPadding() {
        super(24, "ECB", "NOPADDING");
    }
}

public static final class AES128_ECB_NoPadding extends AESCipher.OidImpl {
    public AES128_ECB_NoPadding() {
        super(16, "ECB", "NOPADDING");
    }
}

abstract static class OidImpl extends AESCipher {
    protected OidImpl(int keySize, String mode, String padding) {
        super(keySize);

        try {
            this.engineSetMode(mode);
            this.engineSetPadding(padding);
        } catch (GeneralSecurityException var6) {
            ProviderException pe = new ProviderException("Internal Error");
            pe.initCause(var6);
            throw pe;
        }
    }
}

public static final class General extends AESCipher {
    public General() {
        super(-1);
    }
}

}

上一篇:C#中,代码能不能访问到private或protected的成员,和当前代码是不是在类型(类、结构体)中有关,和当前代码是不是在类型(类、结构体)的对象实例中无关


下一篇:142. 环形链表 II