Java tutorial
/** * Copyright 2012, Board of Regents of the University of * Wisconsin System. See the NOTICE file distributed with * this work for additional information regarding copyright * ownership. Board of Regents of the University of Wisconsin * System licenses this file to you under the Apache License, * Version 2.0 (the "License"); you may not use this file * except in compliance with the License. You may obtain a * copy of the License at: * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package edu.wisc.doit.tcrypt; import java.io.IOException; import java.io.Reader; import java.security.KeyPair; import org.bouncycastle.crypto.AsymmetricBlockCipher; import org.bouncycastle.crypto.BufferedBlockCipher; import org.bouncycastle.crypto.CipherParameters; import org.bouncycastle.crypto.params.AsymmetricKeyParameter; import org.bouncycastle.crypto.util.PrivateKeyFactory; import org.bouncycastle.openssl.PEMKeyPair; import org.bouncycastle.openssl.PEMParser; public abstract class AbstractPublicKeyDecrypter extends AbstractPublicKeyEncrypter { private final AsymmetricKeyParameter privateKeyParam; /** * Create an encrypter and decrypter using the specified public and private keys * * @param publicKeyParam public key * @param privateKeyParam private key */ public AbstractPublicKeyDecrypter(AsymmetricKeyParameter publicKeyParam, AsymmetricKeyParameter privateKeyParam) { super(publicKeyParam); if (!privateKeyParam.isPrivate()) { throw new IllegalArgumentException("Private key parameter must be private"); } this.privateKeyParam = privateKeyParam; } /** * Create an encrypter and decrypter using the specified key pair * * @param keyPair The key pair to use */ public AbstractPublicKeyDecrypter(KeyPair keyPair) throws IOException { super(keyPair.getPublic()); this.privateKeyParam = PrivateKeyFactory.createKey(keyPair.getPrivate().getEncoded()); } /** * Create an encrypter and decrypter using the specified key pair * * @param keyPair The key pair to use */ public AbstractPublicKeyDecrypter(PEMKeyPair keyPair) throws IOException { super(keyPair.getPublicKeyInfo()); this.privateKeyParam = PrivateKeyFactory.createKey(keyPair.getPrivateKeyInfo()); } /** * Create an encrypter and decrypter using the specified {@link Reader}, note the * caller is responsible for closing the Reader. * * @param privateKeyReader Reader to load the {@link KeyPair} from */ @SuppressWarnings("resource") public AbstractPublicKeyDecrypter(Reader privateKeyReader) throws IOException { this((PEMKeyPair) new PEMParser(privateKeyReader).readObject()); } protected final AsymmetricKeyParameter getPrivateKeyParam() { return privateKeyParam; } protected AsymmetricBlockCipher getDecryptCipher() { //Decrypt the cipher text AsymmetricBlockCipher e = this.createCipher(); e = this.addEncoding(e); e.init(false, this.getPrivateKeyParam()); return e; } protected BufferedBlockCipher getDecryptBlockCipher(final CipherParameters key) { final BufferedBlockCipher cipher = this.createBlockCipher(); cipher.init(false, key); return cipher; } }