<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
</head>
<body>
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span>/*<a name="line.1"></a>
<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
<span class="sourceLineNo">009</span> *<a name="line.9"></a>
<span class="sourceLineNo">010</span> * http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
<span class="sourceLineNo">011</span> *<a name="line.11"></a>
<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing,<a name="line.12"></a>
<span class="sourceLineNo">013</span> * software distributed under the License is distributed on an<a name="line.13"></a>
<span class="sourceLineNo">014</span> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY<a name="line.14"></a>
<span class="sourceLineNo">015</span> * KIND, either express or implied.  See the License for the<a name="line.15"></a>
<span class="sourceLineNo">016</span> * specific language governing permissions and limitations<a name="line.16"></a>
<span class="sourceLineNo">017</span> * under the License.<a name="line.17"></a>
<span class="sourceLineNo">018</span> */<a name="line.18"></a>
<span class="sourceLineNo">019</span>package org.apache.shiro.crypto.hash;<a name="line.19"></a>
<span class="sourceLineNo">020</span><a name="line.20"></a>
<span class="sourceLineNo">021</span>import org.apache.shiro.util.ByteSource;<a name="line.21"></a>
<span class="sourceLineNo">022</span><a name="line.22"></a>
<span class="sourceLineNo">023</span>/**<a name="line.23"></a>
<span class="sourceLineNo">024</span> * A {@code HashRequest} is composed of data that will be used by a {@link HashService} to compute a hash (aka<a name="line.24"></a>
<span class="sourceLineNo">025</span> * 'digest').  While you can instantiate a concrete {@code HashRequest} class directly, most will find using the<a name="line.25"></a>
<span class="sourceLineNo">026</span> * {@link HashRequest.Builder} more convenient.<a name="line.26"></a>
<span class="sourceLineNo">027</span> *<a name="line.27"></a>
<span class="sourceLineNo">028</span> * @see HashRequest.Builder<a name="line.28"></a>
<span class="sourceLineNo">029</span> * @since 1.2<a name="line.29"></a>
<span class="sourceLineNo">030</span> */<a name="line.30"></a>
<span class="sourceLineNo">031</span>public interface HashRequest {<a name="line.31"></a>
<span class="sourceLineNo">032</span><a name="line.32"></a>
<span class="sourceLineNo">033</span>    /**<a name="line.33"></a>
<span class="sourceLineNo">034</span>     * Returns the source data that will be hashed by a {@link HashService}. For example, this might be a<a name="line.34"></a>
<span class="sourceLineNo">035</span>     * {@code ByteSource} representation of a password, or file, etc.<a name="line.35"></a>
<span class="sourceLineNo">036</span>     *<a name="line.36"></a>
<span class="sourceLineNo">037</span>     * @return the source data that will be hashed by a {@link HashService}.<a name="line.37"></a>
<span class="sourceLineNo">038</span>     */<a name="line.38"></a>
<span class="sourceLineNo">039</span>    ByteSource getSource();<a name="line.39"></a>
<span class="sourceLineNo">040</span><a name="line.40"></a>
<span class="sourceLineNo">041</span>    /**<a name="line.41"></a>
<span class="sourceLineNo">042</span>     * Returns a salt to be used by the {@link HashService} during hash computation, or {@code null} if no salt is<a name="line.42"></a>
<span class="sourceLineNo">043</span>     * provided as part of the request.<a name="line.43"></a>
<span class="sourceLineNo">044</span>     * &lt;p/&gt;<a name="line.44"></a>
<span class="sourceLineNo">045</span>     * Note that a {@code null} value does not necessarily mean a salt won't be used at all - it just<a name="line.45"></a>
<span class="sourceLineNo">046</span>     * means that the request didn't include one.  The servicing {@link HashService} is free to provide a salting<a name="line.46"></a>
<span class="sourceLineNo">047</span>     * strategy for a request, even if the request did not specify one.<a name="line.47"></a>
<span class="sourceLineNo">048</span>     *<a name="line.48"></a>
<span class="sourceLineNo">049</span>     * @return a salt to be used by the {@link HashService} during hash computation, or {@code null} if no salt is<a name="line.49"></a>
<span class="sourceLineNo">050</span>     *         provided as part of the request.<a name="line.50"></a>
<span class="sourceLineNo">051</span>     */<a name="line.51"></a>
<span class="sourceLineNo">052</span>    ByteSource getSalt();<a name="line.52"></a>
<span class="sourceLineNo">053</span><a name="line.53"></a>
<span class="sourceLineNo">054</span>    /**<a name="line.54"></a>
<span class="sourceLineNo">055</span>     * Returns the number of requested hash iterations to be performed when computing the final {@code Hash} result.<a name="line.55"></a>
<span class="sourceLineNo">056</span>     * A non-positive (0 or less) indicates that the {@code HashService}'s default iteration configuration should<a name="line.56"></a>
<span class="sourceLineNo">057</span>     * be used.  A positive value overrides the {@code HashService}'s configuration for a single request.<a name="line.57"></a>
<span class="sourceLineNo">058</span>     * &lt;p/&gt;<a name="line.58"></a>
<span class="sourceLineNo">059</span>     * Note that a {@code HashService} is free to ignore this number if it determines the number is not sufficient<a name="line.59"></a>
<span class="sourceLineNo">060</span>     * to meet a desired level of security.<a name="line.60"></a>
<span class="sourceLineNo">061</span>     *<a name="line.61"></a>
<span class="sourceLineNo">062</span>     * @return the number of requested hash iterations to be performed when computing the final {@code Hash} result.<a name="line.62"></a>
<span class="sourceLineNo">063</span>     */<a name="line.63"></a>
<span class="sourceLineNo">064</span>    int getIterations();<a name="line.64"></a>
<span class="sourceLineNo">065</span><a name="line.65"></a>
<span class="sourceLineNo">066</span>    /**<a name="line.66"></a>
<span class="sourceLineNo">067</span>     * Returns the name of the hash algorithm the {@code HashService} should use when computing the {@link Hash}, or<a name="line.67"></a>
<span class="sourceLineNo">068</span>     * {@code null} if the default algorithm configuration of the {@code HashService} should be used.  A non-null value<a name="line.68"></a>
<span class="sourceLineNo">069</span>     * overrides the {@code HashService}'s configuration for a single request.<a name="line.69"></a>
<span class="sourceLineNo">070</span>     * &lt;p/&gt;<a name="line.70"></a>
<span class="sourceLineNo">071</span>     * Note that a {@code HashService} is free to ignore this value if it determines that the algorithm is not<a name="line.71"></a>
<span class="sourceLineNo">072</span>     * sufficient to meet a desired level of security.<a name="line.72"></a>
<span class="sourceLineNo">073</span>     *<a name="line.73"></a>
<span class="sourceLineNo">074</span>     * @return the name of the hash algorithm the {@code HashService} should use when computing the {@link Hash}, or<a name="line.74"></a>
<span class="sourceLineNo">075</span>     *         {@code null} if the default algorithm configuration of the {@code HashService} should be used.<a name="line.75"></a>
<span class="sourceLineNo">076</span>     */<a name="line.76"></a>
<span class="sourceLineNo">077</span>    String getAlgorithmName();<a name="line.77"></a>
<span class="sourceLineNo">078</span><a name="line.78"></a>
<span class="sourceLineNo">079</span>    /**<a name="line.79"></a>
<span class="sourceLineNo">080</span>     * A Builder class representing the Builder design pattern for constructing {@link HashRequest} instances.<a name="line.80"></a>
<span class="sourceLineNo">081</span>     *<a name="line.81"></a>
<span class="sourceLineNo">082</span>     * @see SimpleHashRequest<a name="line.82"></a>
<span class="sourceLineNo">083</span>     * @since 1.2<a name="line.83"></a>
<span class="sourceLineNo">084</span>     */<a name="line.84"></a>
<span class="sourceLineNo">085</span>    public static class Builder {<a name="line.85"></a>
<span class="sourceLineNo">086</span><a name="line.86"></a>
<span class="sourceLineNo">087</span>        private ByteSource source;<a name="line.87"></a>
<span class="sourceLineNo">088</span>        private ByteSource salt;<a name="line.88"></a>
<span class="sourceLineNo">089</span>        private int iterations;<a name="line.89"></a>
<span class="sourceLineNo">090</span>        private String algorithmName;<a name="line.90"></a>
<span class="sourceLineNo">091</span><a name="line.91"></a>
<span class="sourceLineNo">092</span>        /**<a name="line.92"></a>
<span class="sourceLineNo">093</span>         * Default no-arg constructor.<a name="line.93"></a>
<span class="sourceLineNo">094</span>         */<a name="line.94"></a>
<span class="sourceLineNo">095</span>        public Builder() {<a name="line.95"></a>
<span class="sourceLineNo">096</span>            this.iterations = 0;<a name="line.96"></a>
<span class="sourceLineNo">097</span>        }<a name="line.97"></a>
<span class="sourceLineNo">098</span><a name="line.98"></a>
<span class="sourceLineNo">099</span>        /**<a name="line.99"></a>
<span class="sourceLineNo">100</span>         * Sets the source data that will be hashed by a {@link HashService}. For example, this might be a<a name="line.100"></a>
<span class="sourceLineNo">101</span>         * {@code ByteSource} representation of a password, or file, etc.<a name="line.101"></a>
<span class="sourceLineNo">102</span>         *<a name="line.102"></a>
<span class="sourceLineNo">103</span>         * @param source the source data that will be hashed by a {@link HashService}.<a name="line.103"></a>
<span class="sourceLineNo">104</span>         * @return this {@code Builder} instance for method chaining.<a name="line.104"></a>
<span class="sourceLineNo">105</span>         * @see HashRequest#getSource()<a name="line.105"></a>
<span class="sourceLineNo">106</span>         * @see #setSource(Object)<a name="line.106"></a>
<span class="sourceLineNo">107</span>         */<a name="line.107"></a>
<span class="sourceLineNo">108</span>        public Builder setSource(ByteSource source) {<a name="line.108"></a>
<span class="sourceLineNo">109</span>            this.source = source;<a name="line.109"></a>
<span class="sourceLineNo">110</span>            return this;<a name="line.110"></a>
<span class="sourceLineNo">111</span>        }<a name="line.111"></a>
<span class="sourceLineNo">112</span><a name="line.112"></a>
<span class="sourceLineNo">113</span>        /**<a name="line.113"></a>
<span class="sourceLineNo">114</span>         * Sets the source data that will be hashed by a {@link HashService}.<a name="line.114"></a>
<span class="sourceLineNo">115</span>         * &lt;p/&gt;<a name="line.115"></a>
<span class="sourceLineNo">116</span>         * This is a convenience alternative to {@link #setSource(ByteSource)}: it will attempt to convert the<a name="line.116"></a>
<span class="sourceLineNo">117</span>         * argument into a {@link ByteSource} instance using Shiro's default conversion heuristics<a name="line.117"></a>
<span class="sourceLineNo">118</span>         * (as defined by {@link ByteSource.Util#isCompatible(Object) ByteSource.Util.isCompatible}.  If the object<a name="line.118"></a>
<span class="sourceLineNo">119</span>         * cannot be heuristically converted to a {@code ByteSource}, an {@code IllegalArgumentException} will be<a name="line.119"></a>
<span class="sourceLineNo">120</span>         * thrown.<a name="line.120"></a>
<span class="sourceLineNo">121</span>         *<a name="line.121"></a>
<span class="sourceLineNo">122</span>         * @param source the byte-backed source data that will be hashed by a {@link HashService}.<a name="line.122"></a>
<span class="sourceLineNo">123</span>         * @return this {@code Builder} instance for method chaining.<a name="line.123"></a>
<span class="sourceLineNo">124</span>         * @throws IllegalArgumentException if the argument cannot be heuristically converted to a {@link ByteSource}<a name="line.124"></a>
<span class="sourceLineNo">125</span>         *                                  instance.<a name="line.125"></a>
<span class="sourceLineNo">126</span>         * @see HashRequest#getSource()<a name="line.126"></a>
<span class="sourceLineNo">127</span>         * @see #setSource(ByteSource)<a name="line.127"></a>
<span class="sourceLineNo">128</span>         */<a name="line.128"></a>
<span class="sourceLineNo">129</span>        public Builder setSource(Object source) throws IllegalArgumentException {<a name="line.129"></a>
<span class="sourceLineNo">130</span>            this.source = ByteSource.Util.bytes(source);<a name="line.130"></a>
<span class="sourceLineNo">131</span>            return this;<a name="line.131"></a>
<span class="sourceLineNo">132</span>        }<a name="line.132"></a>
<span class="sourceLineNo">133</span><a name="line.133"></a>
<span class="sourceLineNo">134</span>        /**<a name="line.134"></a>
<span class="sourceLineNo">135</span>         * Sets a salt to be used by the {@link HashService} during hash computation.<a name="line.135"></a>
<span class="sourceLineNo">136</span>         * &lt;p/&gt;<a name="line.136"></a>
<span class="sourceLineNo">137</span>         * &lt;b&gt;NOTE&lt;/b&gt;: not calling this method does not necessarily mean a salt won't be used at all - it just<a name="line.137"></a>
<span class="sourceLineNo">138</span>         * means that the request didn't include a salt.  The servicing {@link HashService} is free to provide a salting<a name="line.138"></a>
<span class="sourceLineNo">139</span>         * strategy for a request, even if the request did not specify one.  You can always check the result<a name="line.139"></a>
<span class="sourceLineNo">140</span>         * {@code Hash} {@link Hash#getSalt() getSalt()} method to see what the actual<a name="line.140"></a>
<span class="sourceLineNo">141</span>         * salt was (if any), which may or may not match this request salt.<a name="line.141"></a>
<span class="sourceLineNo">142</span>         *<a name="line.142"></a>
<span class="sourceLineNo">143</span>         * @param salt a salt to be used by the {@link HashService} during hash computation<a name="line.143"></a>
<span class="sourceLineNo">144</span>         * @return this {@code Builder} instance for method chaining.<a name="line.144"></a>
<span class="sourceLineNo">145</span>         * @see HashRequest#getSalt()<a name="line.145"></a>
<span class="sourceLineNo">146</span>         */<a name="line.146"></a>
<span class="sourceLineNo">147</span>        public Builder setSalt(ByteSource salt) {<a name="line.147"></a>
<span class="sourceLineNo">148</span>            this.salt = salt;<a name="line.148"></a>
<span class="sourceLineNo">149</span>            return this;<a name="line.149"></a>
<span class="sourceLineNo">150</span>        }<a name="line.150"></a>
<span class="sourceLineNo">151</span><a name="line.151"></a>
<span class="sourceLineNo">152</span>        /**<a name="line.152"></a>
<span class="sourceLineNo">153</span>         * Sets a salt to be used by the {@link HashService} during hash computation.<a name="line.153"></a>
<span class="sourceLineNo">154</span>         * &lt;p/&gt;<a name="line.154"></a>
<span class="sourceLineNo">155</span>         * This is a convenience alternative to {@link #setSalt(ByteSource)}: it will attempt to convert the<a name="line.155"></a>
<span class="sourceLineNo">156</span>         * argument into a {@link ByteSource} instance using Shiro's default conversion heuristics<a name="line.156"></a>
<span class="sourceLineNo">157</span>         * (as defined by {@link ByteSource.Util#isCompatible(Object) ByteSource.Util.isCompatible}.  If the object<a name="line.157"></a>
<span class="sourceLineNo">158</span>         * cannot be heuristically converted to a {@code ByteSource}, an {@code IllegalArgumentException} will be<a name="line.158"></a>
<span class="sourceLineNo">159</span>         * thrown.<a name="line.159"></a>
<span class="sourceLineNo">160</span>         *<a name="line.160"></a>
<span class="sourceLineNo">161</span>         * @param salt a salt to be used by the {@link HashService} during hash computation.<a name="line.161"></a>
<span class="sourceLineNo">162</span>         * @return this {@code Builder} instance for method chaining.<a name="line.162"></a>
<span class="sourceLineNo">163</span>         * @throws IllegalArgumentException if the argument cannot be heuristically converted to a {@link ByteSource}<a name="line.163"></a>
<span class="sourceLineNo">164</span>         *                                  instance.<a name="line.164"></a>
<span class="sourceLineNo">165</span>         * @see #setSalt(ByteSource)<a name="line.165"></a>
<span class="sourceLineNo">166</span>         * @see HashRequest#getSalt()<a name="line.166"></a>
<span class="sourceLineNo">167</span>         */<a name="line.167"></a>
<span class="sourceLineNo">168</span>        public Builder setSalt(Object salt) throws IllegalArgumentException {<a name="line.168"></a>
<span class="sourceLineNo">169</span>            this.salt = ByteSource.Util.bytes(salt);<a name="line.169"></a>
<span class="sourceLineNo">170</span>            return this;<a name="line.170"></a>
<span class="sourceLineNo">171</span>        }<a name="line.171"></a>
<span class="sourceLineNo">172</span><a name="line.172"></a>
<span class="sourceLineNo">173</span>        /**<a name="line.173"></a>
<span class="sourceLineNo">174</span>         * Sets the number of requested hash iterations to be performed when computing the final {@code Hash} result.<a name="line.174"></a>
<span class="sourceLineNo">175</span>         * Not calling this method or setting a non-positive value (0 or less) indicates that the {@code HashService}'s<a name="line.175"></a>
<span class="sourceLineNo">176</span>         * default iteration configuration should be used.  A positive value overrides the {@code HashService}'s<a name="line.176"></a>
<span class="sourceLineNo">177</span>         * configuration for a single request.<a name="line.177"></a>
<span class="sourceLineNo">178</span>         * &lt;p/&gt;<a name="line.178"></a>
<span class="sourceLineNo">179</span>         * Note that a {@code HashService} is free to ignore this number if it determines the number is not sufficient<a name="line.179"></a>
<span class="sourceLineNo">180</span>         * to meet a desired level of security. You can always check the result<a name="line.180"></a>
<span class="sourceLineNo">181</span>         * {@code Hash} {@link Hash#getIterations() getIterations()} method to see what the actual<a name="line.181"></a>
<span class="sourceLineNo">182</span>         * number of iterations was, which may or may not match this request salt.<a name="line.182"></a>
<span class="sourceLineNo">183</span>         *<a name="line.183"></a>
<span class="sourceLineNo">184</span>         * @param iterations the number of requested hash iterations to be performed when computing the final<a name="line.184"></a>
<span class="sourceLineNo">185</span>         *                   {@code Hash} result.<a name="line.185"></a>
<span class="sourceLineNo">186</span>         * @return this {@code Builder} instance for method chaining.<a name="line.186"></a>
<span class="sourceLineNo">187</span>         * @see HashRequest#getIterations()<a name="line.187"></a>
<span class="sourceLineNo">188</span>         */<a name="line.188"></a>
<span class="sourceLineNo">189</span>        public Builder setIterations(int iterations) {<a name="line.189"></a>
<span class="sourceLineNo">190</span>            this.iterations = iterations;<a name="line.190"></a>
<span class="sourceLineNo">191</span>            return this;<a name="line.191"></a>
<span class="sourceLineNo">192</span>        }<a name="line.192"></a>
<span class="sourceLineNo">193</span><a name="line.193"></a>
<span class="sourceLineNo">194</span>        /**<a name="line.194"></a>
<span class="sourceLineNo">195</span>         * Sets the name of the hash algorithm the {@code HashService} should use when computing the {@link Hash}.<a name="line.195"></a>
<span class="sourceLineNo">196</span>         * Not calling this method or setting it to {@code null} indicates the the default algorithm configuration of<a name="line.196"></a>
<span class="sourceLineNo">197</span>         * the {@code HashService} should be used.  A non-null value<a name="line.197"></a>
<span class="sourceLineNo">198</span>         * overrides the {@code HashService}'s configuration for a single request.<a name="line.198"></a>
<span class="sourceLineNo">199</span>         * &lt;p/&gt;<a name="line.199"></a>
<span class="sourceLineNo">200</span>         * Note that a {@code HashService} is free to ignore this value if it determines that the algorithm is not<a name="line.200"></a>
<span class="sourceLineNo">201</span>         * sufficient to meet a desired level of security. You can always check the result<a name="line.201"></a>
<span class="sourceLineNo">202</span>         * {@code Hash} {@link Hash#getAlgorithmName() getAlgorithmName()} method to see what the actual<a name="line.202"></a>
<span class="sourceLineNo">203</span>         * algorithm was, which may or may not match this request salt.<a name="line.203"></a>
<span class="sourceLineNo">204</span>         *<a name="line.204"></a>
<span class="sourceLineNo">205</span>         * @param algorithmName the name of the hash algorithm the {@code HashService} should use when computing the<a name="line.205"></a>
<span class="sourceLineNo">206</span>         *                      {@link Hash}, or {@code null} if the default algorithm configuration of the<a name="line.206"></a>
<span class="sourceLineNo">207</span>         *                      {@code HashService} should be used.<a name="line.207"></a>
<span class="sourceLineNo">208</span>         * @return this {@code Builder} instance for method chaining.<a name="line.208"></a>
<span class="sourceLineNo">209</span>         * @see HashRequest#getAlgorithmName()<a name="line.209"></a>
<span class="sourceLineNo">210</span>         */<a name="line.210"></a>
<span class="sourceLineNo">211</span>        public Builder setAlgorithmName(String algorithmName) {<a name="line.211"></a>
<span class="sourceLineNo">212</span>            this.algorithmName = algorithmName;<a name="line.212"></a>
<span class="sourceLineNo">213</span>            return this;<a name="line.213"></a>
<span class="sourceLineNo">214</span>        }<a name="line.214"></a>
<span class="sourceLineNo">215</span><a name="line.215"></a>
<span class="sourceLineNo">216</span>        /**<a name="line.216"></a>
<span class="sourceLineNo">217</span>         * Builds a {@link HashRequest} instance reflecting the specified configuration.<a name="line.217"></a>
<span class="sourceLineNo">218</span>         *<a name="line.218"></a>
<span class="sourceLineNo">219</span>         * @return a {@link HashRequest} instance reflecting the specified configuration.<a name="line.219"></a>
<span class="sourceLineNo">220</span>         */<a name="line.220"></a>
<span class="sourceLineNo">221</span>        public HashRequest build() {<a name="line.221"></a>
<span class="sourceLineNo">222</span>            return new SimpleHashRequest(this.algorithmName, this.source, this.salt, this.iterations);<a name="line.222"></a>
<span class="sourceLineNo">223</span>        }<a name="line.223"></a>
<span class="sourceLineNo">224</span>    }<a name="line.224"></a>
<span class="sourceLineNo">225</span>}<a name="line.225"></a>




























































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