<!DOCTYPE HTML>
<html lang="en">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
</head>
<body>
<main role="main">
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span><a id="line.1">/*</a>
<span class="sourceLineNo">002</span><a id="line.2"> * Licensed to the Apache Software Foundation (ASF) under one</a>
<span class="sourceLineNo">003</span><a id="line.3"> * or more contributor license agreements.  See the NOTICE file</a>
<span class="sourceLineNo">004</span><a id="line.4"> * distributed with this work for additional information</a>
<span class="sourceLineNo">005</span><a id="line.5"> * regarding copyright ownership.  The ASF licenses this file</a>
<span class="sourceLineNo">006</span><a id="line.6"> * to you under the Apache License, Version 2.0 (the</a>
<span class="sourceLineNo">007</span><a id="line.7"> * "License"); you may not use this file except in compliance</a>
<span class="sourceLineNo">008</span><a id="line.8"> * with the License.  You may obtain a copy of the License at</a>
<span class="sourceLineNo">009</span><a id="line.9"> *</a>
<span class="sourceLineNo">010</span><a id="line.10"> *     http://www.apache.org/licenses/LICENSE-2.0</a>
<span class="sourceLineNo">011</span><a id="line.11"> *</a>
<span class="sourceLineNo">012</span><a id="line.12"> * Unless required by applicable law or agreed to in writing,</a>
<span class="sourceLineNo">013</span><a id="line.13"> * software distributed under the License is distributed on an</a>
<span class="sourceLineNo">014</span><a id="line.14"> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</a>
<span class="sourceLineNo">015</span><a id="line.15"> * KIND, either express or implied.  See the License for the</a>
<span class="sourceLineNo">016</span><a id="line.16"> * specific language governing permissions and limitations</a>
<span class="sourceLineNo">017</span><a id="line.17"> * under the License.</a>
<span class="sourceLineNo">018</span><a id="line.18"> */</a>
<span class="sourceLineNo">019</span><a id="line.19">package org.apache.shiro.crypto;</a>
<span class="sourceLineNo">020</span><a id="line.20"></a>
<span class="sourceLineNo">021</span><a id="line.21">import org.apache.shiro.util.ByteSource;</a>
<span class="sourceLineNo">022</span><a id="line.22">import org.apache.shiro.util.StringUtils;</a>
<span class="sourceLineNo">023</span><a id="line.23">import org.slf4j.Logger;</a>
<span class="sourceLineNo">024</span><a id="line.24">import org.slf4j.LoggerFactory;</a>
<span class="sourceLineNo">025</span><a id="line.25"></a>
<span class="sourceLineNo">026</span><a id="line.26">import javax.crypto.CipherInputStream;</a>
<span class="sourceLineNo">027</span><a id="line.27">import javax.crypto.spec.IvParameterSpec;</a>
<span class="sourceLineNo">028</span><a id="line.28">import javax.crypto.spec.SecretKeySpec;</a>
<span class="sourceLineNo">029</span><a id="line.29">import java.io.IOException;</a>
<span class="sourceLineNo">030</span><a id="line.30">import java.io.InputStream;</a>
<span class="sourceLineNo">031</span><a id="line.31">import java.io.OutputStream;</a>
<span class="sourceLineNo">032</span><a id="line.32">import java.security.Key;</a>
<span class="sourceLineNo">033</span><a id="line.33">import java.security.SecureRandom;</a>
<span class="sourceLineNo">034</span><a id="line.34">import java.security.spec.AlgorithmParameterSpec;</a>
<span class="sourceLineNo">035</span><a id="line.35"></a>
<span class="sourceLineNo">036</span><a id="line.36">/**</a>
<span class="sourceLineNo">037</span><a id="line.37"> * Abstract {@code CipherService} implementation utilizing Java's JCA APIs.</a>
<span class="sourceLineNo">038</span><a id="line.38"> * &lt;h2&gt;Auto-generated Initialization Vectors&lt;/h2&gt;</a>
<span class="sourceLineNo">039</span><a id="line.39"> * Shiro does something by default for all of its {@code CipherService} implementations that the JCA</a>
<span class="sourceLineNo">040</span><a id="line.40"> * {@link javax.crypto.Cipher Cipher} does not do:  by default,</a>
<span class="sourceLineNo">041</span><a id="line.41"> * &lt;a href="http://en.wikipedia.org/wiki/Initialization_vector"&gt;initialization vector&lt;/a&gt;s are automatically randomly</a>
<span class="sourceLineNo">042</span><a id="line.42"> * generated and prepended to encrypted data before returning from the {@code encrypt} methods.  That is, the returned</a>
<span class="sourceLineNo">043</span><a id="line.43"> * byte array or {@code OutputStream} is actually a concatenation of an initialization vector byte array plus the actual</a>
<span class="sourceLineNo">044</span><a id="line.44"> * encrypted data byte array.  The {@code decrypt} methods in turn know to read this prepended initialization vector</a>
<span class="sourceLineNo">045</span><a id="line.45"> * before decrypting the real data that follows.</a>
<span class="sourceLineNo">046</span><a id="line.46"> * &lt;p/&gt;</a>
<span class="sourceLineNo">047</span><a id="line.47"> * This is highly desirable because initialization vectors guarantee that, for a key and any plaintext, the encrypted</a>
<span class="sourceLineNo">048</span><a id="line.48"> * output will always be different &lt;em&gt;even if you call {@code encrypt} multiple times with the exact same arguments&lt;/em&gt;.</a>
<span class="sourceLineNo">049</span><a id="line.49"> * This is essential in cryptography to ensure that data patterns cannot be identified across multiple input sources</a>
<span class="sourceLineNo">050</span><a id="line.50"> * that are the same or similar.</a>
<span class="sourceLineNo">051</span><a id="line.51"> * &lt;p/&gt;</a>
<span class="sourceLineNo">052</span><a id="line.52"> * You can turn off this behavior by setting the</a>
<span class="sourceLineNo">053</span><a id="line.53"> * {@link #setGenerateInitializationVectors(boolean) generateInitializationVectors} property to {@code false}, but it</a>
<span class="sourceLineNo">054</span><a id="line.54"> * is highly recommended that you do not do this unless you have a very good reason to do so, since you would be losing</a>
<span class="sourceLineNo">055</span><a id="line.55"> * a critical security feature.</a>
<span class="sourceLineNo">056</span><a id="line.56"> * &lt;h3&gt;Initialization Vector Size&lt;/h3&gt;</a>
<span class="sourceLineNo">057</span><a id="line.57"> * This implementation defaults the {@link #setInitializationVectorSize(int) initializationVectorSize} attribute to</a>
<span class="sourceLineNo">058</span><a id="line.58"> * {@code 128} bits, a fairly common size.  Initialization vector sizes are very algorithm specific however, so subclass</a>
<span class="sourceLineNo">059</span><a id="line.59"> * implementations will often override this value in their constructor if necessary.</a>
<span class="sourceLineNo">060</span><a id="line.60"> * &lt;p/&gt;</a>
<span class="sourceLineNo">061</span><a id="line.61"> * Also note that {@code initializationVectorSize} values are specified in the number of</a>
<span class="sourceLineNo">062</span><a id="line.62"> * bits (not bytes!) to match common references in most cryptography documentation.  In practice though, initialization</a>
<span class="sourceLineNo">063</span><a id="line.63"> * vectors are always specified as a byte array, so ensure that if you set this property, that the value is a multiple</a>
<span class="sourceLineNo">064</span><a id="line.64"> * of {@code 8} to ensure that the IV can be correctly represented as a byte array (the</a>
<span class="sourceLineNo">065</span><a id="line.65"> * {@link #setInitializationVectorSize(int) setInitializationVectorSize} mutator method enforces this).</a>
<span class="sourceLineNo">066</span><a id="line.66"> *</a>
<span class="sourceLineNo">067</span><a id="line.67"> * @since 1.0</a>
<span class="sourceLineNo">068</span><a id="line.68"> */</a>
<span class="sourceLineNo">069</span><a id="line.69">public abstract class JcaCipherService implements CipherService {</a>
<span class="sourceLineNo">070</span><a id="line.70"></a>
<span class="sourceLineNo">071</span><a id="line.71">    /**</a>
<span class="sourceLineNo">072</span><a id="line.72">     * Internal private log instance.</a>
<span class="sourceLineNo">073</span><a id="line.73">     */</a>
<span class="sourceLineNo">074</span><a id="line.74">    private static final Logger log = LoggerFactory.getLogger(JcaCipherService.class);</a>
<span class="sourceLineNo">075</span><a id="line.75"></a>
<span class="sourceLineNo">076</span><a id="line.76">    /**</a>
<span class="sourceLineNo">077</span><a id="line.77">     * Default key size (in bits) for generated keys.</a>
<span class="sourceLineNo">078</span><a id="line.78">     */</a>
<span class="sourceLineNo">079</span><a id="line.79">    private static final int DEFAULT_KEY_SIZE = 128;</a>
<span class="sourceLineNo">080</span><a id="line.80"></a>
<span class="sourceLineNo">081</span><a id="line.81">    /**</a>
<span class="sourceLineNo">082</span><a id="line.82">     * Default size of the internal buffer (in bytes) used to transfer data between streams during stream operations</a>
<span class="sourceLineNo">083</span><a id="line.83">     */</a>
<span class="sourceLineNo">084</span><a id="line.84">    private static final int DEFAULT_STREAMING_BUFFER_SIZE = 512;</a>
<span class="sourceLineNo">085</span><a id="line.85"></a>
<span class="sourceLineNo">086</span><a id="line.86">    private static final int BITS_PER_BYTE = 8;</a>
<span class="sourceLineNo">087</span><a id="line.87"></a>
<span class="sourceLineNo">088</span><a id="line.88">    /**</a>
<span class="sourceLineNo">089</span><a id="line.89">     * Default SecureRandom algorithm name to use when acquiring the SecureRandom instance.</a>
<span class="sourceLineNo">090</span><a id="line.90">     */</a>
<span class="sourceLineNo">091</span><a id="line.91">    private static final String RANDOM_NUM_GENERATOR_ALGORITHM_NAME = "SHA1PRNG";</a>
<span class="sourceLineNo">092</span><a id="line.92"></a>
<span class="sourceLineNo">093</span><a id="line.93">    /**</a>
<span class="sourceLineNo">094</span><a id="line.94">     * The name of the cipher algorithm to use for all encryption, decryption, and key operations</a>
<span class="sourceLineNo">095</span><a id="line.95">     */</a>
<span class="sourceLineNo">096</span><a id="line.96">    private String algorithmName;</a>
<span class="sourceLineNo">097</span><a id="line.97"></a>
<span class="sourceLineNo">098</span><a id="line.98">    /**</a>
<span class="sourceLineNo">099</span><a id="line.99">     * The size in bits (not bytes) of generated cipher keys</a>
<span class="sourceLineNo">100</span><a id="line.100">     */</a>
<span class="sourceLineNo">101</span><a id="line.101">    private int keySize;</a>
<span class="sourceLineNo">102</span><a id="line.102"></a>
<span class="sourceLineNo">103</span><a id="line.103">    /**</a>
<span class="sourceLineNo">104</span><a id="line.104">     * The size of the internal buffer (in bytes) used to transfer data from one stream to another during stream operations</a>
<span class="sourceLineNo">105</span><a id="line.105">     */</a>
<span class="sourceLineNo">106</span><a id="line.106">    private int streamingBufferSize;</a>
<span class="sourceLineNo">107</span><a id="line.107"></a>
<span class="sourceLineNo">108</span><a id="line.108">    private boolean generateInitializationVectors;</a>
<span class="sourceLineNo">109</span><a id="line.109">    private int initializationVectorSize;</a>
<span class="sourceLineNo">110</span><a id="line.110"></a>
<span class="sourceLineNo">111</span><a id="line.111"></a>
<span class="sourceLineNo">112</span><a id="line.112">    private SecureRandom secureRandom;</a>
<span class="sourceLineNo">113</span><a id="line.113"></a>
<span class="sourceLineNo">114</span><a id="line.114">    /**</a>
<span class="sourceLineNo">115</span><a id="line.115">     * Creates a new {@code JcaCipherService} instance which will use the specified cipher {@code algorithmName}</a>
<span class="sourceLineNo">116</span><a id="line.116">     * for all encryption, decryption, and key operations.  Also, the following defaults are set:</a>
<span class="sourceLineNo">117</span><a id="line.117">     * &lt;ul&gt;</a>
<span class="sourceLineNo">118</span><a id="line.118">     * &lt;li&gt;{@link #setKeySize keySize} = 128 bits&lt;/li&gt;</a>
<span class="sourceLineNo">119</span><a id="line.119">     * &lt;li&gt;{@link #setInitializationVectorSize(int) initializationVectorSize} = 128 bits&lt;/li&gt;</a>
<span class="sourceLineNo">120</span><a id="line.120">     * &lt;li&gt;{@link #setStreamingBufferSize(int) streamingBufferSize} = 512 bytes&lt;/li&gt;</a>
<span class="sourceLineNo">121</span><a id="line.121">     * &lt;/ul&gt;</a>
<span class="sourceLineNo">122</span><a id="line.122">     *</a>
<span class="sourceLineNo">123</span><a id="line.123">     * @param algorithmName the name of the cipher algorithm to use for all encryption, decryption, and key operations</a>
<span class="sourceLineNo">124</span><a id="line.124">     */</a>
<span class="sourceLineNo">125</span><a id="line.125">    protected JcaCipherService(String algorithmName) {</a>
<span class="sourceLineNo">126</span><a id="line.126">        if (!StringUtils.hasText(algorithmName)) {</a>
<span class="sourceLineNo">127</span><a id="line.127">            throw new IllegalArgumentException("algorithmName argument cannot be null or empty.");</a>
<span class="sourceLineNo">128</span><a id="line.128">        }</a>
<span class="sourceLineNo">129</span><a id="line.129">        this.algorithmName = algorithmName;</a>
<span class="sourceLineNo">130</span><a id="line.130">        this.keySize = DEFAULT_KEY_SIZE;</a>
<span class="sourceLineNo">131</span><a id="line.131">        this.initializationVectorSize = DEFAULT_KEY_SIZE; //default to same size as the key size (a common algorithm practice)</a>
<span class="sourceLineNo">132</span><a id="line.132">        this.streamingBufferSize = DEFAULT_STREAMING_BUFFER_SIZE;</a>
<span class="sourceLineNo">133</span><a id="line.133">        this.generateInitializationVectors = true;</a>
<span class="sourceLineNo">134</span><a id="line.134">    }</a>
<span class="sourceLineNo">135</span><a id="line.135"></a>
<span class="sourceLineNo">136</span><a id="line.136">    /**</a>
<span class="sourceLineNo">137</span><a id="line.137">     * Returns the cipher algorithm name that will be used for all encryption, decryption, and key operations (for</a>
<span class="sourceLineNo">138</span><a id="line.138">     * example, 'AES', 'Blowfish', 'RSA', 'DSA', 'TripleDES', etc).</a>
<span class="sourceLineNo">139</span><a id="line.139">     *</a>
<span class="sourceLineNo">140</span><a id="line.140">     * @return the cipher algorithm name that will be used for all encryption, decryption, and key operations</a>
<span class="sourceLineNo">141</span><a id="line.141">     */</a>
<span class="sourceLineNo">142</span><a id="line.142">    public String getAlgorithmName() {</a>
<span class="sourceLineNo">143</span><a id="line.143">        return algorithmName;</a>
<span class="sourceLineNo">144</span><a id="line.144">    }</a>
<span class="sourceLineNo">145</span><a id="line.145"></a>
<span class="sourceLineNo">146</span><a id="line.146">    /**</a>
<span class="sourceLineNo">147</span><a id="line.147">     * Returns the size in bits (not bytes) of generated cipher keys.</a>
<span class="sourceLineNo">148</span><a id="line.148">     *</a>
<span class="sourceLineNo">149</span><a id="line.149">     * @return the size in bits (not bytes) of generated cipher keys.</a>
<span class="sourceLineNo">150</span><a id="line.150">     */</a>
<span class="sourceLineNo">151</span><a id="line.151">    public int getKeySize() {</a>
<span class="sourceLineNo">152</span><a id="line.152">        return keySize;</a>
<span class="sourceLineNo">153</span><a id="line.153">    }</a>
<span class="sourceLineNo">154</span><a id="line.154"></a>
<span class="sourceLineNo">155</span><a id="line.155">    /**</a>
<span class="sourceLineNo">156</span><a id="line.156">     * Sets the size in bits (not bytes) of generated cipher keys.</a>
<span class="sourceLineNo">157</span><a id="line.157">     *</a>
<span class="sourceLineNo">158</span><a id="line.158">     * @param keySize the size in bits (not bytes) of generated cipher keys.</a>
<span class="sourceLineNo">159</span><a id="line.159">     */</a>
<span class="sourceLineNo">160</span><a id="line.160">    public void setKeySize(int keySize) {</a>
<span class="sourceLineNo">161</span><a id="line.161">        this.keySize = keySize;</a>
<span class="sourceLineNo">162</span><a id="line.162">    }</a>
<span class="sourceLineNo">163</span><a id="line.163"></a>
<span class="sourceLineNo">164</span><a id="line.164">    public boolean isGenerateInitializationVectors() {</a>
<span class="sourceLineNo">165</span><a id="line.165">        return generateInitializationVectors;</a>
<span class="sourceLineNo">166</span><a id="line.166">    }</a>
<span class="sourceLineNo">167</span><a id="line.167"></a>
<span class="sourceLineNo">168</span><a id="line.168">    public void setGenerateInitializationVectors(boolean generateInitializationVectors) {</a>
<span class="sourceLineNo">169</span><a id="line.169">        this.generateInitializationVectors = generateInitializationVectors;</a>
<span class="sourceLineNo">170</span><a id="line.170">    }</a>
<span class="sourceLineNo">171</span><a id="line.171"></a>
<span class="sourceLineNo">172</span><a id="line.172">    /**</a>
<span class="sourceLineNo">173</span><a id="line.173">     * Returns the algorithm-specific size in bits of generated initialization vectors.</a>
<span class="sourceLineNo">174</span><a id="line.174">     *</a>
<span class="sourceLineNo">175</span><a id="line.175">     * @return the algorithm-specific size in bits of generated initialization vectors.</a>
<span class="sourceLineNo">176</span><a id="line.176">     */</a>
<span class="sourceLineNo">177</span><a id="line.177">    public int getInitializationVectorSize() {</a>
<span class="sourceLineNo">178</span><a id="line.178">        return initializationVectorSize;</a>
<span class="sourceLineNo">179</span><a id="line.179">    }</a>
<span class="sourceLineNo">180</span><a id="line.180"></a>
<span class="sourceLineNo">181</span><a id="line.181">    /**</a>
<span class="sourceLineNo">182</span><a id="line.182">     * Sets the algorithm-specific initialization vector size in bits (not bytes!) to be used when generating</a>
<span class="sourceLineNo">183</span><a id="line.183">     * initialization vectors.  The  value must be a multiple of {@code 8} to ensure that the IV can be represented</a>
<span class="sourceLineNo">184</span><a id="line.184">     * as a byte array.</a>
<span class="sourceLineNo">185</span><a id="line.185">     *</a>
<span class="sourceLineNo">186</span><a id="line.186">     * @param initializationVectorSize the size in bits (not bytes) of generated initialization vectors.</a>
<span class="sourceLineNo">187</span><a id="line.187">     * @throws IllegalArgumentException if the size is not a multiple of {@code 8}.</a>
<span class="sourceLineNo">188</span><a id="line.188">     */</a>
<span class="sourceLineNo">189</span><a id="line.189">    public void setInitializationVectorSize(int initializationVectorSize) throws IllegalArgumentException {</a>
<span class="sourceLineNo">190</span><a id="line.190">        if (initializationVectorSize % BITS_PER_BYTE != 0) {</a>
<span class="sourceLineNo">191</span><a id="line.191">            String msg = "Initialization vector sizes are specified in bits, but must be a multiple of 8 so they " +</a>
<span class="sourceLineNo">192</span><a id="line.192">                    "can be easily represented as a byte array.";</a>
<span class="sourceLineNo">193</span><a id="line.193">            throw new IllegalArgumentException(msg);</a>
<span class="sourceLineNo">194</span><a id="line.194">        }</a>
<span class="sourceLineNo">195</span><a id="line.195">        this.initializationVectorSize = initializationVectorSize;</a>
<span class="sourceLineNo">196</span><a id="line.196">    }</a>
<span class="sourceLineNo">197</span><a id="line.197"></a>
<span class="sourceLineNo">198</span><a id="line.198">    protected boolean isGenerateInitializationVectors(boolean streaming) {</a>
<span class="sourceLineNo">199</span><a id="line.199">        return isGenerateInitializationVectors();</a>
<span class="sourceLineNo">200</span><a id="line.200">    }</a>
<span class="sourceLineNo">201</span><a id="line.201"></a>
<span class="sourceLineNo">202</span><a id="line.202">    /**</a>
<span class="sourceLineNo">203</span><a id="line.203">     * Returns the size in bytes of the internal buffer used to transfer data from one stream to another during stream</a>
<span class="sourceLineNo">204</span><a id="line.204">     * operations ({@link #encrypt(java.io.InputStream, java.io.OutputStream, byte[])} and</a>
<span class="sourceLineNo">205</span><a id="line.205">     * {@link #decrypt(java.io.InputStream, java.io.OutputStream, byte[])}).</a>
<span class="sourceLineNo">206</span><a id="line.206">     * &lt;p/&gt;</a>
<span class="sourceLineNo">207</span><a id="line.207">     * Default size is {@code 512} bytes.</a>
<span class="sourceLineNo">208</span><a id="line.208">     *</a>
<span class="sourceLineNo">209</span><a id="line.209">     * @return the size of the internal buffer used to transfer data from one stream to another during stream</a>
<span class="sourceLineNo">210</span><a id="line.210">     *         operations</a>
<span class="sourceLineNo">211</span><a id="line.211">     */</a>
<span class="sourceLineNo">212</span><a id="line.212">    public int getStreamingBufferSize() {</a>
<span class="sourceLineNo">213</span><a id="line.213">        return streamingBufferSize;</a>
<span class="sourceLineNo">214</span><a id="line.214">    }</a>
<span class="sourceLineNo">215</span><a id="line.215"></a>
<span class="sourceLineNo">216</span><a id="line.216">    /**</a>
<span class="sourceLineNo">217</span><a id="line.217">     * Sets the size in bytes of the internal buffer used to transfer data from one stream to another during stream</a>
<span class="sourceLineNo">218</span><a id="line.218">     * operations ({@link #encrypt(java.io.InputStream, java.io.OutputStream, byte[])} and</a>
<span class="sourceLineNo">219</span><a id="line.219">     * {@link #decrypt(java.io.InputStream, java.io.OutputStream, byte[])}).</a>
<span class="sourceLineNo">220</span><a id="line.220">     * &lt;p/&gt;</a>
<span class="sourceLineNo">221</span><a id="line.221">     * Default size is {@code 512} bytes.</a>
<span class="sourceLineNo">222</span><a id="line.222">     *</a>
<span class="sourceLineNo">223</span><a id="line.223">     * @param streamingBufferSize the size of the internal buffer used to transfer data from one stream to another</a>
<span class="sourceLineNo">224</span><a id="line.224">     *                            during stream operations</a>
<span class="sourceLineNo">225</span><a id="line.225">     */</a>
<span class="sourceLineNo">226</span><a id="line.226">    public void setStreamingBufferSize(int streamingBufferSize) {</a>
<span class="sourceLineNo">227</span><a id="line.227">        this.streamingBufferSize = streamingBufferSize;</a>
<span class="sourceLineNo">228</span><a id="line.228">    }</a>
<span class="sourceLineNo">229</span><a id="line.229"></a>
<span class="sourceLineNo">230</span><a id="line.230">    /**</a>
<span class="sourceLineNo">231</span><a id="line.231">     * Returns a source of randomness for encryption operations.  If one is not configured, and the underlying</a>
<span class="sourceLineNo">232</span><a id="line.232">     * algorithm needs one, the JDK {@code SHA1PRNG} instance will be used by default.</a>
<span class="sourceLineNo">233</span><a id="line.233">     *</a>
<span class="sourceLineNo">234</span><a id="line.234">     * @return a source of randomness for encryption operations.  If one is not configured, and the underlying</a>
<span class="sourceLineNo">235</span><a id="line.235">     *         algorithm needs one, the JDK {@code SHA1PRNG} instance will be used by default.</a>
<span class="sourceLineNo">236</span><a id="line.236">     */</a>
<span class="sourceLineNo">237</span><a id="line.237">    public SecureRandom getSecureRandom() {</a>
<span class="sourceLineNo">238</span><a id="line.238">        return secureRandom;</a>
<span class="sourceLineNo">239</span><a id="line.239">    }</a>
<span class="sourceLineNo">240</span><a id="line.240"></a>
<span class="sourceLineNo">241</span><a id="line.241">    /**</a>
<span class="sourceLineNo">242</span><a id="line.242">     * Sets a source of randomness for encryption operations.  If one is not configured, and the underlying</a>
<span class="sourceLineNo">243</span><a id="line.243">     * algorithm needs one, the JDK {@code SHA1PRNG} instance will be used by default.</a>
<span class="sourceLineNo">244</span><a id="line.244">     *</a>
<span class="sourceLineNo">245</span><a id="line.245">     * @param secureRandom a source of randomness for encryption operations.  If one is not configured, and the</a>
<span class="sourceLineNo">246</span><a id="line.246">     *                     underlying algorithm needs one, the JDK {@code SHA1PRNG} instance will be used by default.</a>
<span class="sourceLineNo">247</span><a id="line.247">     */</a>
<span class="sourceLineNo">248</span><a id="line.248">    public void setSecureRandom(SecureRandom secureRandom) {</a>
<span class="sourceLineNo">249</span><a id="line.249">        this.secureRandom = secureRandom;</a>
<span class="sourceLineNo">250</span><a id="line.250">    }</a>
<span class="sourceLineNo">251</span><a id="line.251"></a>
<span class="sourceLineNo">252</span><a id="line.252">    protected static SecureRandom getDefaultSecureRandom() {</a>
<span class="sourceLineNo">253</span><a id="line.253">        try {</a>
<span class="sourceLineNo">254</span><a id="line.254">            return java.security.SecureRandom.getInstance(RANDOM_NUM_GENERATOR_ALGORITHM_NAME);</a>
<span class="sourceLineNo">255</span><a id="line.255">        } catch (java.security.NoSuchAlgorithmException e) {</a>
<span class="sourceLineNo">256</span><a id="line.256">            log.debug("The SecureRandom SHA1PRNG algorithm is not available on the current platform.  Using the " +</a>
<span class="sourceLineNo">257</span><a id="line.257">                    "platform's default SecureRandom algorithm.", e);</a>
<span class="sourceLineNo">258</span><a id="line.258">            return new java.security.SecureRandom();</a>
<span class="sourceLineNo">259</span><a id="line.259">        }</a>
<span class="sourceLineNo">260</span><a id="line.260">    }</a>
<span class="sourceLineNo">261</span><a id="line.261"></a>
<span class="sourceLineNo">262</span><a id="line.262">    protected SecureRandom ensureSecureRandom() {</a>
<span class="sourceLineNo">263</span><a id="line.263">        SecureRandom random = getSecureRandom();</a>
<span class="sourceLineNo">264</span><a id="line.264">        if (random == null) {</a>
<span class="sourceLineNo">265</span><a id="line.265">            random = getDefaultSecureRandom();</a>
<span class="sourceLineNo">266</span><a id="line.266">        }</a>
<span class="sourceLineNo">267</span><a id="line.267">        return random;</a>
<span class="sourceLineNo">268</span><a id="line.268">    }</a>
<span class="sourceLineNo">269</span><a id="line.269"></a>
<span class="sourceLineNo">270</span><a id="line.270">    /**</a>
<span class="sourceLineNo">271</span><a id="line.271">     * Returns the transformation string to use with the {@link javax.crypto.Cipher#getInstance} invocation when</a>
<span class="sourceLineNo">272</span><a id="line.272">     * creating a new {@code Cipher} instance.  This default implementation always returns</a>
<span class="sourceLineNo">273</span><a id="line.273">     * {@link #getAlgorithmName() getAlgorithmName()}.  Block cipher implementations will want to override this method</a>
<span class="sourceLineNo">274</span><a id="line.274">     * to support appending cipher operation modes and padding schemes.</a>
<span class="sourceLineNo">275</span><a id="line.275">     *</a>
<span class="sourceLineNo">276</span><a id="line.276">     * @param streaming if the transformation string is going to be used for a Cipher for stream-based encryption or not.</a>
<span class="sourceLineNo">277</span><a id="line.277">     * @return the transformation string to use with the {@link javax.crypto.Cipher#getInstance} invocation when</a>
<span class="sourceLineNo">278</span><a id="line.278">     *         creating a new {@code Cipher} instance.</a>
<span class="sourceLineNo">279</span><a id="line.279">     */</a>
<span class="sourceLineNo">280</span><a id="line.280">    protected String getTransformationString(boolean streaming) {</a>
<span class="sourceLineNo">281</span><a id="line.281">        return getAlgorithmName();</a>
<span class="sourceLineNo">282</span><a id="line.282">    }</a>
<span class="sourceLineNo">283</span><a id="line.283"></a>
<span class="sourceLineNo">284</span><a id="line.284">    protected byte[] generateInitializationVector(boolean streaming) {</a>
<span class="sourceLineNo">285</span><a id="line.285">        int size = getInitializationVectorSize();</a>
<span class="sourceLineNo">286</span><a id="line.286">        if (size &lt;= 0) {</a>
<span class="sourceLineNo">287</span><a id="line.287">            String msg = "initializationVectorSize property must be greater than zero.  This number is " +</a>
<span class="sourceLineNo">288</span><a id="line.288">                    "typically set in the " + CipherService.class.getSimpleName() + " subclass constructor.  " +</a>
<span class="sourceLineNo">289</span><a id="line.289">                    "Also check your configuration to ensure that if you are setting a value, it is positive.";</a>
<span class="sourceLineNo">290</span><a id="line.290">            throw new IllegalStateException(msg);</a>
<span class="sourceLineNo">291</span><a id="line.291">        }</a>
<span class="sourceLineNo">292</span><a id="line.292">        if (size % BITS_PER_BYTE != 0) {</a>
<span class="sourceLineNo">293</span><a id="line.293">            String msg = "initializationVectorSize property must be a multiple of 8 to represent as a byte array.";</a>
<span class="sourceLineNo">294</span><a id="line.294">            throw new IllegalStateException(msg);</a>
<span class="sourceLineNo">295</span><a id="line.295">        }</a>
<span class="sourceLineNo">296</span><a id="line.296">        int sizeInBytes = size / BITS_PER_BYTE;</a>
<span class="sourceLineNo">297</span><a id="line.297">        byte[] ivBytes = new byte[sizeInBytes];</a>
<span class="sourceLineNo">298</span><a id="line.298">        SecureRandom random = ensureSecureRandom();</a>
<span class="sourceLineNo">299</span><a id="line.299">        random.nextBytes(ivBytes);</a>
<span class="sourceLineNo">300</span><a id="line.300">        return ivBytes;</a>
<span class="sourceLineNo">301</span><a id="line.301">    }</a>
<span class="sourceLineNo">302</span><a id="line.302"></a>
<span class="sourceLineNo">303</span><a id="line.303">    public ByteSource encrypt(byte[] plaintext, byte[] key) {</a>
<span class="sourceLineNo">304</span><a id="line.304">        byte[] ivBytes = null;</a>
<span class="sourceLineNo">305</span><a id="line.305">        boolean generate = isGenerateInitializationVectors(false);</a>
<span class="sourceLineNo">306</span><a id="line.306">        if (generate) {</a>
<span class="sourceLineNo">307</span><a id="line.307">            ivBytes = generateInitializationVector(false);</a>
<span class="sourceLineNo">308</span><a id="line.308">            if (ivBytes == null || ivBytes.length == 0) {</a>
<span class="sourceLineNo">309</span><a id="line.309">                throw new IllegalStateException("Initialization vector generation is enabled - generated vector " +</a>
<span class="sourceLineNo">310</span><a id="line.310">                        "cannot be null or empty.");</a>
<span class="sourceLineNo">311</span><a id="line.311">            }</a>
<span class="sourceLineNo">312</span><a id="line.312">        }</a>
<span class="sourceLineNo">313</span><a id="line.313">        return encrypt(plaintext, key, ivBytes, generate);</a>
<span class="sourceLineNo">314</span><a id="line.314">    }</a>
<span class="sourceLineNo">315</span><a id="line.315"></a>
<span class="sourceLineNo">316</span><a id="line.316">    private ByteSource encrypt(byte[] plaintext, byte[] key, byte[] iv, boolean prependIv) throws CryptoException {</a>
<span class="sourceLineNo">317</span><a id="line.317"></a>
<span class="sourceLineNo">318</span><a id="line.318">        final int MODE = javax.crypto.Cipher.ENCRYPT_MODE;</a>
<span class="sourceLineNo">319</span><a id="line.319"></a>
<span class="sourceLineNo">320</span><a id="line.320">        byte[] output;</a>
<span class="sourceLineNo">321</span><a id="line.321"></a>
<span class="sourceLineNo">322</span><a id="line.322">        if (prependIv &amp;&amp; iv != null &amp;&amp; iv.length &gt; 0) {</a>
<span class="sourceLineNo">323</span><a id="line.323"></a>
<span class="sourceLineNo">324</span><a id="line.324">            byte[] encrypted = crypt(plaintext, key, iv, MODE);</a>
<span class="sourceLineNo">325</span><a id="line.325"></a>
<span class="sourceLineNo">326</span><a id="line.326">            output = new byte[iv.length + encrypted.length];</a>
<span class="sourceLineNo">327</span><a id="line.327"></a>
<span class="sourceLineNo">328</span><a id="line.328">            //now copy the iv bytes + encrypted bytes into one output array:</a>
<span class="sourceLineNo">329</span><a id="line.329"></a>
<span class="sourceLineNo">330</span><a id="line.330">            // iv bytes:</a>
<span class="sourceLineNo">331</span><a id="line.331">            System.arraycopy(iv, 0, output, 0, iv.length);</a>
<span class="sourceLineNo">332</span><a id="line.332"></a>
<span class="sourceLineNo">333</span><a id="line.333">            // + encrypted bytes:</a>
<span class="sourceLineNo">334</span><a id="line.334">            System.arraycopy(encrypted, 0, output, iv.length, encrypted.length);</a>
<span class="sourceLineNo">335</span><a id="line.335">        } else {</a>
<span class="sourceLineNo">336</span><a id="line.336">            output = crypt(plaintext, key, iv, MODE);</a>
<span class="sourceLineNo">337</span><a id="line.337">        }</a>
<span class="sourceLineNo">338</span><a id="line.338"></a>
<span class="sourceLineNo">339</span><a id="line.339">        if (log.isTraceEnabled()) {</a>
<span class="sourceLineNo">340</span><a id="line.340">            log.trace("Incoming plaintext of size " + (plaintext != null ? plaintext.length : 0) + ".  Ciphertext " +</a>
<span class="sourceLineNo">341</span><a id="line.341">                    "byte array is size " + (output != null ? output.length : 0));</a>
<span class="sourceLineNo">342</span><a id="line.342">        }</a>
<span class="sourceLineNo">343</span><a id="line.343"></a>
<span class="sourceLineNo">344</span><a id="line.344">        return ByteSource.Util.bytes(output);</a>
<span class="sourceLineNo">345</span><a id="line.345">    }</a>
<span class="sourceLineNo">346</span><a id="line.346"></a>
<span class="sourceLineNo">347</span><a id="line.347">    public ByteSource decrypt(byte[] ciphertext, byte[] key) throws CryptoException {</a>
<span class="sourceLineNo">348</span><a id="line.348"></a>
<span class="sourceLineNo">349</span><a id="line.349">        byte[] encrypted = ciphertext;</a>
<span class="sourceLineNo">350</span><a id="line.350"></a>
<span class="sourceLineNo">351</span><a id="line.351">        //No IV, check if we need to read the IV from the stream:</a>
<span class="sourceLineNo">352</span><a id="line.352">        byte[] iv = null;</a>
<span class="sourceLineNo">353</span><a id="line.353"></a>
<span class="sourceLineNo">354</span><a id="line.354">        if (isGenerateInitializationVectors(false)) {</a>
<span class="sourceLineNo">355</span><a id="line.355">            try {</a>
<span class="sourceLineNo">356</span><a id="line.356">                //We are generating IVs, so the ciphertext argument array is not actually 100% cipher text.  Instead, it</a>
<span class="sourceLineNo">357</span><a id="line.357">                //is:</a>
<span class="sourceLineNo">358</span><a id="line.358">                // - the first N bytes is the initialization vector, where N equals the value of the</a>
<span class="sourceLineNo">359</span><a id="line.359">                // 'initializationVectorSize' attribute.</a>
<span class="sourceLineNo">360</span><a id="line.360">                // - the remaining bytes in the method argument (arg.length - N) is the real cipher text.</a>
<span class="sourceLineNo">361</span><a id="line.361"></a>
<span class="sourceLineNo">362</span><a id="line.362">                //So we need to chunk the method argument into its constituent parts to find the IV and then use</a>
<span class="sourceLineNo">363</span><a id="line.363">                //the IV to decrypt the real ciphertext:</a>
<span class="sourceLineNo">364</span><a id="line.364"></a>
<span class="sourceLineNo">365</span><a id="line.365">                int ivSize = getInitializationVectorSize();</a>
<span class="sourceLineNo">366</span><a id="line.366">                int ivByteSize = ivSize / BITS_PER_BYTE;</a>
<span class="sourceLineNo">367</span><a id="line.367"></a>
<span class="sourceLineNo">368</span><a id="line.368">                //now we know how large the iv is, so extract the iv bytes:</a>
<span class="sourceLineNo">369</span><a id="line.369">                iv = new byte[ivByteSize];</a>
<span class="sourceLineNo">370</span><a id="line.370">                System.arraycopy(ciphertext, 0, iv, 0, ivByteSize);</a>
<span class="sourceLineNo">371</span><a id="line.371"></a>
<span class="sourceLineNo">372</span><a id="line.372">                //remaining data is the actual encrypted ciphertext.  Isolate it:</a>
<span class="sourceLineNo">373</span><a id="line.373">                int encryptedSize = ciphertext.length - ivByteSize;</a>
<span class="sourceLineNo">374</span><a id="line.374">                encrypted = new byte[encryptedSize];</a>
<span class="sourceLineNo">375</span><a id="line.375">                System.arraycopy(ciphertext, ivByteSize, encrypted, 0, encryptedSize);</a>
<span class="sourceLineNo">376</span><a id="line.376">            } catch (Exception e) {</a>
<span class="sourceLineNo">377</span><a id="line.377">                String msg = "Unable to correctly extract the Initialization Vector or ciphertext.";</a>
<span class="sourceLineNo">378</span><a id="line.378">                throw new CryptoException(msg, e);</a>
<span class="sourceLineNo">379</span><a id="line.379">            }</a>
<span class="sourceLineNo">380</span><a id="line.380">        }</a>
<span class="sourceLineNo">381</span><a id="line.381"></a>
<span class="sourceLineNo">382</span><a id="line.382">        return decrypt(encrypted, key, iv);</a>
<span class="sourceLineNo">383</span><a id="line.383">    }</a>
<span class="sourceLineNo">384</span><a id="line.384"></a>
<span class="sourceLineNo">385</span><a id="line.385">    private ByteSource decrypt(byte[] ciphertext, byte[] key, byte[] iv) throws CryptoException {</a>
<span class="sourceLineNo">386</span><a id="line.386">        if (log.isTraceEnabled()) {</a>
<span class="sourceLineNo">387</span><a id="line.387">            log.trace("Attempting to decrypt incoming byte array of length " +</a>
<span class="sourceLineNo">388</span><a id="line.388">                    (ciphertext != null ? ciphertext.length : 0));</a>
<span class="sourceLineNo">389</span><a id="line.389">        }</a>
<span class="sourceLineNo">390</span><a id="line.390">        byte[] decrypted = crypt(ciphertext, key, iv, javax.crypto.Cipher.DECRYPT_MODE);</a>
<span class="sourceLineNo">391</span><a id="line.391">        return decrypted == null ? null : ByteSource.Util.bytes(decrypted);</a>
<span class="sourceLineNo">392</span><a id="line.392">    }</a>
<span class="sourceLineNo">393</span><a id="line.393"></a>
<span class="sourceLineNo">394</span><a id="line.394">    /**</a>
<span class="sourceLineNo">395</span><a id="line.395">     * Returns a new {@link javax.crypto.Cipher Cipher} instance to use for encryption/decryption operations.  The</a>
<span class="sourceLineNo">396</span><a id="line.396">     * Cipher's {@code transformationString} for the {@code Cipher}.{@link javax.crypto.Cipher#getInstance getInstance}</a>
<span class="sourceLineNo">397</span><a id="line.397">     * call is obtaind via the {@link #getTransformationString(boolean) getTransformationString} method.</a>
<span class="sourceLineNo">398</span><a id="line.398">     *</a>
<span class="sourceLineNo">399</span><a id="line.399">     * @param streaming {@code true} if the cipher instance will be used as a stream cipher, {@code false} if it will be</a>
<span class="sourceLineNo">400</span><a id="line.400">     *                  used as a block cipher.</a>
<span class="sourceLineNo">401</span><a id="line.401">     * @return a new JDK {@code Cipher} instance.</a>
<span class="sourceLineNo">402</span><a id="line.402">     * @throws CryptoException if a new Cipher instance cannot be constructed based on the</a>
<span class="sourceLineNo">403</span><a id="line.403">     *                         {@link #getTransformationString(boolean) getTransformationString} value.</a>
<span class="sourceLineNo">404</span><a id="line.404">     */</a>
<span class="sourceLineNo">405</span><a id="line.405">    private javax.crypto.Cipher newCipherInstance(boolean streaming) throws CryptoException {</a>
<span class="sourceLineNo">406</span><a id="line.406">        String transformationString = getTransformationString(streaming);</a>
<span class="sourceLineNo">407</span><a id="line.407">        try {</a>
<span class="sourceLineNo">408</span><a id="line.408">            return javax.crypto.Cipher.getInstance(transformationString);</a>
<span class="sourceLineNo">409</span><a id="line.409">        } catch (Exception e) {</a>
<span class="sourceLineNo">410</span><a id="line.410">            String msg = "Unable to acquire a Java JCA Cipher instance using " +</a>
<span class="sourceLineNo">411</span><a id="line.411">                    javax.crypto.Cipher.class.getName() + ".getInstance( \"" + transformationString + "\" ). " +</a>
<span class="sourceLineNo">412</span><a id="line.412">                    getAlgorithmName() + " under this configuration is required for the " +</a>
<span class="sourceLineNo">413</span><a id="line.413">                    getClass().getName() + " instance to function.";</a>
<span class="sourceLineNo">414</span><a id="line.414">            throw new CryptoException(msg, e);</a>
<span class="sourceLineNo">415</span><a id="line.415">        }</a>
<span class="sourceLineNo">416</span><a id="line.416">    }</a>
<span class="sourceLineNo">417</span><a id="line.417"></a>
<span class="sourceLineNo">418</span><a id="line.418">    /**</a>
<span class="sourceLineNo">419</span><a id="line.419">     * Functions as follows:</a>
<span class="sourceLineNo">420</span><a id="line.420">     * &lt;ol&gt;</a>
<span class="sourceLineNo">421</span><a id="line.421">     * &lt;li&gt;Creates a {@link #newCipherInstance(boolean) new JDK cipher instance}&lt;/li&gt;</a>
<span class="sourceLineNo">422</span><a id="line.422">     * &lt;li&gt;Converts the specified key bytes into an {@link #getAlgorithmName() algorithm}-compatible JDK</a>
<span class="sourceLineNo">423</span><a id="line.423">     * {@link Key key} instance&lt;/li&gt;</a>
<span class="sourceLineNo">424</span><a id="line.424">     * &lt;li&gt;{@link #init(javax.crypto.Cipher, int, java.security.Key, AlgorithmParameterSpec, SecureRandom) Initializes}</a>
<span class="sourceLineNo">425</span><a id="line.425">     * the JDK cipher instance with the JDK key&lt;/li&gt;</a>
<span class="sourceLineNo">426</span><a id="line.426">     * &lt;li&gt;Calls the {@link #crypt(javax.crypto.Cipher, byte[]) crypt(cipher,bytes)} method to either encrypt or</a>
<span class="sourceLineNo">427</span><a id="line.427">     * decrypt the data based on the specified Cipher behavior mode</a>
<span class="sourceLineNo">428</span><a id="line.428">     * ({@link javax.crypto.Cipher#ENCRYPT_MODE Cipher.ENCRYPT_MODE} or</a>
<span class="sourceLineNo">429</span><a id="line.429">     * {@link javax.crypto.Cipher#DECRYPT_MODE Cipher.DECRYPT_MODE})&lt;/li&gt;</a>
<span class="sourceLineNo">430</span><a id="line.430">     * &lt;/ol&gt;</a>
<span class="sourceLineNo">431</span><a id="line.431">     *</a>
<span class="sourceLineNo">432</span><a id="line.432">     * @param bytes the bytes to crypt</a>
<span class="sourceLineNo">433</span><a id="line.433">     * @param key   the key to use to perform the encryption or decryption.</a>
<span class="sourceLineNo">434</span><a id="line.434">     * @param iv    the initialization vector to use for the crypt operation (optional, may be {@code null}).</a>
<span class="sourceLineNo">435</span><a id="line.435">     * @param mode  the JDK Cipher behavior mode (Cipher.ENCRYPT_MODE or Cipher.DECRYPT_MODE).</a>
<span class="sourceLineNo">436</span><a id="line.436">     * @return the resulting crypted byte array</a>
<span class="sourceLineNo">437</span><a id="line.437">     * @throws IllegalArgumentException if {@code bytes} are null or empty.</a>
<span class="sourceLineNo">438</span><a id="line.438">     * @throws CryptoException          if Cipher initialization or the crypt operation fails</a>
<span class="sourceLineNo">439</span><a id="line.439">     */</a>
<span class="sourceLineNo">440</span><a id="line.440">    private byte[] crypt(byte[] bytes, byte[] key, byte[] iv, int mode) throws IllegalArgumentException, CryptoException {</a>
<span class="sourceLineNo">441</span><a id="line.441">        if (key == null || key.length == 0) {</a>
<span class="sourceLineNo">442</span><a id="line.442">            throw new IllegalArgumentException("key argument cannot be null or empty.");</a>
<span class="sourceLineNo">443</span><a id="line.443">        }</a>
<span class="sourceLineNo">444</span><a id="line.444">        javax.crypto.Cipher cipher = initNewCipher(mode, key, iv, false);</a>
<span class="sourceLineNo">445</span><a id="line.445">        return crypt(cipher, bytes);</a>
<span class="sourceLineNo">446</span><a id="line.446">    }</a>
<span class="sourceLineNo">447</span><a id="line.447"></a>
<span class="sourceLineNo">448</span><a id="line.448">    /**</a>
<span class="sourceLineNo">449</span><a id="line.449">     * Calls the {@link javax.crypto.Cipher#doFinal(byte[]) doFinal(bytes)} method, propagating any exception that</a>
<span class="sourceLineNo">450</span><a id="line.450">     * might arise in an {@link CryptoException}</a>
<span class="sourceLineNo">451</span><a id="line.451">     *</a>
<span class="sourceLineNo">452</span><a id="line.452">     * @param cipher the JDK Cipher to finalize (perform the actual cryption)</a>
<span class="sourceLineNo">453</span><a id="line.453">     * @param bytes  the bytes to crypt</a>
<span class="sourceLineNo">454</span><a id="line.454">     * @return the resulting crypted byte array.</a>
<span class="sourceLineNo">455</span><a id="line.455">     * @throws CryptoException if there is an illegal block size or bad padding</a>
<span class="sourceLineNo">456</span><a id="line.456">     */</a>
<span class="sourceLineNo">457</span><a id="line.457">    private byte[] crypt(javax.crypto.Cipher cipher, byte[] bytes) throws CryptoException {</a>
<span class="sourceLineNo">458</span><a id="line.458">        try {</a>
<span class="sourceLineNo">459</span><a id="line.459">            return cipher.doFinal(bytes);</a>
<span class="sourceLineNo">460</span><a id="line.460">        } catch (Exception e) {</a>
<span class="sourceLineNo">461</span><a id="line.461">            String msg = "Unable to execute 'doFinal' with cipher instance [" + cipher + "].";</a>
<span class="sourceLineNo">462</span><a id="line.462">            throw new CryptoException(msg, e);</a>
<span class="sourceLineNo">463</span><a id="line.463">        }</a>
<span class="sourceLineNo">464</span><a id="line.464">    }</a>
<span class="sourceLineNo">465</span><a id="line.465"></a>
<span class="sourceLineNo">466</span><a id="line.466">    /**</a>
<span class="sourceLineNo">467</span><a id="line.467">     * Initializes the JDK Cipher with the specified mode and key.  This is primarily a utility method to catch any</a>
<span class="sourceLineNo">468</span><a id="line.468">     * potential {@link java.security.InvalidKeyException InvalidKeyException} that might arise.</a>
<span class="sourceLineNo">469</span><a id="line.469">     *</a>
<span class="sourceLineNo">470</span><a id="line.470">     * @param cipher the JDK Cipher to {@link javax.crypto.Cipher#init(int, java.security.Key) init}.</a>
<span class="sourceLineNo">471</span><a id="line.471">     * @param mode   the Cipher mode</a>
<span class="sourceLineNo">472</span><a id="line.472">     * @param key    the Cipher's Key</a>
<span class="sourceLineNo">473</span><a id="line.473">     * @param spec   the JDK AlgorithmParameterSpec for cipher initialization (optional, may be null).</a>
<span class="sourceLineNo">474</span><a id="line.474">     * @param random the SecureRandom to use for cipher initialization (optional, may be null).</a>
<span class="sourceLineNo">475</span><a id="line.475">     * @throws CryptoException if the key is invalid</a>
<span class="sourceLineNo">476</span><a id="line.476">     */</a>
<span class="sourceLineNo">477</span><a id="line.477">    private void init(javax.crypto.Cipher cipher, int mode, java.security.Key key,</a>
<span class="sourceLineNo">478</span><a id="line.478">                      AlgorithmParameterSpec spec, SecureRandom random) throws CryptoException {</a>
<span class="sourceLineNo">479</span><a id="line.479">        try {</a>
<span class="sourceLineNo">480</span><a id="line.480">            if (random != null) {</a>
<span class="sourceLineNo">481</span><a id="line.481">                if (spec != null) {</a>
<span class="sourceLineNo">482</span><a id="line.482">                    cipher.init(mode, key, spec, random);</a>
<span class="sourceLineNo">483</span><a id="line.483">                } else {</a>
<span class="sourceLineNo">484</span><a id="line.484">                    cipher.init(mode, key, random);</a>
<span class="sourceLineNo">485</span><a id="line.485">                }</a>
<span class="sourceLineNo">486</span><a id="line.486">            } else {</a>
<span class="sourceLineNo">487</span><a id="line.487">                if (spec != null) {</a>
<span class="sourceLineNo">488</span><a id="line.488">                    cipher.init(mode, key, spec);</a>
<span class="sourceLineNo">489</span><a id="line.489">                } else {</a>
<span class="sourceLineNo">490</span><a id="line.490">                    cipher.init(mode, key);</a>
<span class="sourceLineNo">491</span><a id="line.491">                }</a>
<span class="sourceLineNo">492</span><a id="line.492">            }</a>
<span class="sourceLineNo">493</span><a id="line.493">        } catch (Exception e) {</a>
<span class="sourceLineNo">494</span><a id="line.494">            String msg = "Unable to init cipher instance.";</a>
<span class="sourceLineNo">495</span><a id="line.495">            throw new CryptoException(msg, e);</a>
<span class="sourceLineNo">496</span><a id="line.496">        }</a>
<span class="sourceLineNo">497</span><a id="line.497">    }</a>
<span class="sourceLineNo">498</span><a id="line.498"></a>
<span class="sourceLineNo">499</span><a id="line.499"></a>
<span class="sourceLineNo">500</span><a id="line.500">    public void encrypt(InputStream in, OutputStream out, byte[] key) throws CryptoException {</a>
<span class="sourceLineNo">501</span><a id="line.501">        byte[] iv = null;</a>
<span class="sourceLineNo">502</span><a id="line.502">        boolean generate = isGenerateInitializationVectors(true);</a>
<span class="sourceLineNo">503</span><a id="line.503">        if (generate) {</a>
<span class="sourceLineNo">504</span><a id="line.504">            iv = generateInitializationVector(true);</a>
<span class="sourceLineNo">505</span><a id="line.505">            if (iv == null || iv.length == 0) {</a>
<span class="sourceLineNo">506</span><a id="line.506">                throw new IllegalStateException("Initialization vector generation is enabled - generated vector " +</a>
<span class="sourceLineNo">507</span><a id="line.507">                        "cannot be null or empty.");</a>
<span class="sourceLineNo">508</span><a id="line.508">            }</a>
<span class="sourceLineNo">509</span><a id="line.509">        }</a>
<span class="sourceLineNo">510</span><a id="line.510">        encrypt(in, out, key, iv, generate);</a>
<span class="sourceLineNo">511</span><a id="line.511">    }</a>
<span class="sourceLineNo">512</span><a id="line.512"></a>
<span class="sourceLineNo">513</span><a id="line.513">    private void encrypt(InputStream in, OutputStream out, byte[] key, byte[] iv, boolean prependIv) throws CryptoException {</a>
<span class="sourceLineNo">514</span><a id="line.514">        if (prependIv &amp;&amp; iv != null &amp;&amp; iv.length &gt; 0) {</a>
<span class="sourceLineNo">515</span><a id="line.515">            try {</a>
<span class="sourceLineNo">516</span><a id="line.516">                //first write the IV:</a>
<span class="sourceLineNo">517</span><a id="line.517">                out.write(iv);</a>
<span class="sourceLineNo">518</span><a id="line.518">            } catch (IOException e) {</a>
<span class="sourceLineNo">519</span><a id="line.519">                throw new CryptoException(e);</a>
<span class="sourceLineNo">520</span><a id="line.520">            }</a>
<span class="sourceLineNo">521</span><a id="line.521">        }</a>
<span class="sourceLineNo">522</span><a id="line.522"></a>
<span class="sourceLineNo">523</span><a id="line.523">        crypt(in, out, key, iv, javax.crypto.Cipher.ENCRYPT_MODE);</a>
<span class="sourceLineNo">524</span><a id="line.524">    }</a>
<span class="sourceLineNo">525</span><a id="line.525"></a>
<span class="sourceLineNo">526</span><a id="line.526">    public void decrypt(InputStream in, OutputStream out, byte[] key) throws CryptoException {</a>
<span class="sourceLineNo">527</span><a id="line.527">        decrypt(in, out, key, isGenerateInitializationVectors(true));</a>
<span class="sourceLineNo">528</span><a id="line.528">    }</a>
<span class="sourceLineNo">529</span><a id="line.529"></a>
<span class="sourceLineNo">530</span><a id="line.530">    private void decrypt(InputStream in, OutputStream out, byte[] key, boolean ivPrepended) throws CryptoException {</a>
<span class="sourceLineNo">531</span><a id="line.531"></a>
<span class="sourceLineNo">532</span><a id="line.532">        byte[] iv = null;</a>
<span class="sourceLineNo">533</span><a id="line.533">        //No Initialization Vector provided as a method argument - check if we need to read the IV from the stream:</a>
<span class="sourceLineNo">534</span><a id="line.534">        if (ivPrepended) {</a>
<span class="sourceLineNo">535</span><a id="line.535">            //we are generating IVs, so we need to read the previously-generated IV from the stream before</a>
<span class="sourceLineNo">536</span><a id="line.536">            //we decrypt the rest of the stream (we need the IV to decrypt):</a>
<span class="sourceLineNo">537</span><a id="line.537">            int ivSize = getInitializationVectorSize();</a>
<span class="sourceLineNo">538</span><a id="line.538">            int ivByteSize = ivSize / BITS_PER_BYTE;</a>
<span class="sourceLineNo">539</span><a id="line.539">            iv = new byte[ivByteSize];</a>
<span class="sourceLineNo">540</span><a id="line.540">            int read;</a>
<span class="sourceLineNo">541</span><a id="line.541"></a>
<span class="sourceLineNo">542</span><a id="line.542">            try {</a>
<span class="sourceLineNo">543</span><a id="line.543">                read = in.read(iv);</a>
<span class="sourceLineNo">544</span><a id="line.544">            } catch (IOException e) {</a>
<span class="sourceLineNo">545</span><a id="line.545">                String msg = "Unable to correctly read the Initialization Vector from the input stream.";</a>
<span class="sourceLineNo">546</span><a id="line.546">                throw new CryptoException(msg, e);</a>
<span class="sourceLineNo">547</span><a id="line.547">            }</a>
<span class="sourceLineNo">548</span><a id="line.548"></a>
<span class="sourceLineNo">549</span><a id="line.549">            if (read != ivByteSize) {</a>
<span class="sourceLineNo">550</span><a id="line.550">                throw new CryptoException("Unable to read initialization vector bytes from the InputStream.  " +</a>
<span class="sourceLineNo">551</span><a id="line.551">                        "This is required when initialization vectors are autogenerated during an encryption " +</a>
<span class="sourceLineNo">552</span><a id="line.552">                        "operation.");</a>
<span class="sourceLineNo">553</span><a id="line.553">            }</a>
<span class="sourceLineNo">554</span><a id="line.554">        }</a>
<span class="sourceLineNo">555</span><a id="line.555"></a>
<span class="sourceLineNo">556</span><a id="line.556">        decrypt(in, out, key, iv);</a>
<span class="sourceLineNo">557</span><a id="line.557">    }</a>
<span class="sourceLineNo">558</span><a id="line.558"></a>
<span class="sourceLineNo">559</span><a id="line.559">    private void decrypt(InputStream in, OutputStream out, byte[] decryptionKey, byte[] iv) throws CryptoException {</a>
<span class="sourceLineNo">560</span><a id="line.560">        crypt(in, out, decryptionKey, iv, javax.crypto.Cipher.DECRYPT_MODE);</a>
<span class="sourceLineNo">561</span><a id="line.561">    }</a>
<span class="sourceLineNo">562</span><a id="line.562"></a>
<span class="sourceLineNo">563</span><a id="line.563">    private void crypt(InputStream in, OutputStream out, byte[] keyBytes, byte[] iv, int cryptMode) throws CryptoException {</a>
<span class="sourceLineNo">564</span><a id="line.564">        if (in == null) {</a>
<span class="sourceLineNo">565</span><a id="line.565">            throw new NullPointerException("InputStream argument cannot be null.");</a>
<span class="sourceLineNo">566</span><a id="line.566">        }</a>
<span class="sourceLineNo">567</span><a id="line.567">        if (out == null) {</a>
<span class="sourceLineNo">568</span><a id="line.568">            throw new NullPointerException("OutputStream argument cannot be null.");</a>
<span class="sourceLineNo">569</span><a id="line.569">        }</a>
<span class="sourceLineNo">570</span><a id="line.570"></a>
<span class="sourceLineNo">571</span><a id="line.571">        javax.crypto.Cipher cipher = initNewCipher(cryptMode, keyBytes, iv, true);</a>
<span class="sourceLineNo">572</span><a id="line.572"></a>
<span class="sourceLineNo">573</span><a id="line.573">        CipherInputStream cis = new CipherInputStream(in, cipher);</a>
<span class="sourceLineNo">574</span><a id="line.574"></a>
<span class="sourceLineNo">575</span><a id="line.575">        int bufSize = getStreamingBufferSize();</a>
<span class="sourceLineNo">576</span><a id="line.576">        byte[] buffer = new byte[bufSize];</a>
<span class="sourceLineNo">577</span><a id="line.577"></a>
<span class="sourceLineNo">578</span><a id="line.578">        int bytesRead;</a>
<span class="sourceLineNo">579</span><a id="line.579">        try {</a>
<span class="sourceLineNo">580</span><a id="line.580">            while ((bytesRead = cis.read(buffer)) != -1) {</a>
<span class="sourceLineNo">581</span><a id="line.581">                out.write(buffer, 0, bytesRead);</a>
<span class="sourceLineNo">582</span><a id="line.582">            }</a>
<span class="sourceLineNo">583</span><a id="line.583">        } catch (IOException e) {</a>
<span class="sourceLineNo">584</span><a id="line.584">            throw new CryptoException(e);</a>
<span class="sourceLineNo">585</span><a id="line.585">        }</a>
<span class="sourceLineNo">586</span><a id="line.586">    }</a>
<span class="sourceLineNo">587</span><a id="line.587"></a>
<span class="sourceLineNo">588</span><a id="line.588">    private javax.crypto.Cipher initNewCipher(int jcaCipherMode, byte[] key, byte[] iv, boolean streaming)</a>
<span class="sourceLineNo">589</span><a id="line.589">            throws CryptoException {</a>
<span class="sourceLineNo">590</span><a id="line.590"></a>
<span class="sourceLineNo">591</span><a id="line.591">        javax.crypto.Cipher cipher = newCipherInstance(streaming);</a>
<span class="sourceLineNo">592</span><a id="line.592">        java.security.Key jdkKey = new SecretKeySpec(key, getAlgorithmName());</a>
<span class="sourceLineNo">593</span><a id="line.593">        AlgorithmParameterSpec ivSpec = null;</a>
<span class="sourceLineNo">594</span><a id="line.594"></a>
<span class="sourceLineNo">595</span><a id="line.595">        if (iv != null &amp;&amp; iv.length &gt; 0) {</a>
<span class="sourceLineNo">596</span><a id="line.596">            ivSpec = createParameterSpec(iv, streaming);</a>
<span class="sourceLineNo">597</span><a id="line.597">        }</a>
<span class="sourceLineNo">598</span><a id="line.598"></a>
<span class="sourceLineNo">599</span><a id="line.599">        init(cipher, jcaCipherMode, jdkKey, ivSpec, getSecureRandom());</a>
<span class="sourceLineNo">600</span><a id="line.600"></a>
<span class="sourceLineNo">601</span><a id="line.601">        return cipher;</a>
<span class="sourceLineNo">602</span><a id="line.602">    }</a>
<span class="sourceLineNo">603</span><a id="line.603"></a>
<span class="sourceLineNo">604</span><a id="line.604">    protected AlgorithmParameterSpec createParameterSpec(byte[] iv, boolean streaming) {</a>
<span class="sourceLineNo">605</span><a id="line.605">        return new IvParameterSpec(iv);</a>
<span class="sourceLineNo">606</span><a id="line.606">    }</a>
<span class="sourceLineNo">607</span><a id="line.607">}</a>




























































</pre>
</div>
</main>
</body>
</html>
