| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" |
| "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
| <html> |
| <head> |
| <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> |
| <title>Coverage Report</title> |
| <link title="Style" type="text/css" rel="stylesheet" href="css/main.css"/> |
| <script type="text/javascript" src="js/popup.js"></script> |
| </head> |
| <body> |
| <h5>Coverage Report - org.apache.shiro.codec.Base64</h5> |
| <div class="separator"> </div> |
| <table class="report"> |
| <thead><tr> <td class="heading">Classes in this File</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead> |
| <tr><td><a href="org.apache.shiro.codec.Base64.html">Base64</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">76%</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:76px"><span class="text">118/155</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">57%</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:57px"><span class="text">41/71</span></div></div></td></tr></table></td><td class="value"><span class="hidden">4.666666666666667;</span>4.667</td></tr> |
| |
| </table> |
| <div class="separator"> </div> |
| <table cellspacing="0" cellpadding="0" class="src"> |
| <tr> <td class="numLine"> 1</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">/*</span></pre></td></tr> |
| <tr> <td class="numLine"> 2</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one</span></pre></td></tr> |
| <tr> <td class="numLine"> 3</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * or more contributor license agreements. See the NOTICE file</span></pre></td></tr> |
| <tr> <td class="numLine"> 4</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * distributed with this work for additional information</span></pre></td></tr> |
| <tr> <td class="numLine"> 5</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * regarding copyright ownership. The ASF licenses this file</span></pre></td></tr> |
| <tr> <td class="numLine"> 6</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * to you under the Apache License, Version 2.0 (the</span></pre></td></tr> |
| <tr> <td class="numLine"> 7</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * "License"); you may not use this file except in compliance</span></pre></td></tr> |
| <tr> <td class="numLine"> 8</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * with the License. You may obtain a copy of the License at</span></pre></td></tr> |
| <tr> <td class="numLine"> 9</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr> |
| <tr> <td class="numLine"> 10</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></pre></td></tr> |
| <tr> <td class="numLine"> 11</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr> |
| <tr> <td class="numLine"> 12</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * Unless required by applicable law or agreed to in writing,</span></pre></td></tr> |
| <tr> <td class="numLine"> 13</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * software distributed under the License is distributed on an</span></pre></td></tr> |
| <tr> <td class="numLine"> 14</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span></pre></td></tr> |
| <tr> <td class="numLine"> 15</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * KIND, either express or implied. See the License for the</span></pre></td></tr> |
| <tr> <td class="numLine"> 16</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * specific language governing permissions and limitations</span></pre></td></tr> |
| <tr> <td class="numLine"> 17</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * under the License.</span></pre></td></tr> |
| <tr> <td class="numLine"> 18</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr> |
| <tr> <td class="numLine"> 19</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">package</span> org.apache.shiro.codec;</pre></td></tr> |
| <tr> <td class="numLine"> 20</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 21</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr> |
| <tr> <td class="numLine"> 22</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * Provides <a href="http://en.wikipedia.org/wiki/Base64">Base 64</a> encoding and decoding as defined by</span></pre></td></tr> |
| <tr> <td class="numLine"> 23</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * <a href="http://www.ietf.org/rfc/rfc2045.txt">RFC 2045</a>.</span></pre></td></tr> |
| <tr> <td class="numLine"> 24</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * <p/></span></pre></td></tr> |
| <tr> <td class="numLine"> 25</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * This class implements section <cite>6.8. Base64 Content-Transfer-Encoding</cite> from RFC 2045 <cite>Multipurpose</span></pre></td></tr> |
| <tr> <td class="numLine"> 26</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies</cite> by Freed and Borenstein.</span></pre></td></tr> |
| <tr> <td class="numLine"> 27</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * <p/></span></pre></td></tr> |
| <tr> <td class="numLine"> 28</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * This class was borrowed from Apache Commons Codec SVN repository (rev. 618419) with modifications</span></pre></td></tr> |
| <tr> <td class="numLine"> 29</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * to enable Base64 conversion without a full dependecny on Commons Codec. We didn't want to reinvent the wheel of</span></pre></td></tr> |
| <tr> <td class="numLine"> 30</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * great work they've done, but also didn't want to force every Shiro user to depend on the commons-codec.jar</span></pre></td></tr> |
| <tr> <td class="numLine"> 31</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * <p/></span></pre></td></tr> |
| <tr> <td class="numLine"> 32</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * As per the Apache 2.0 license, the original copyright notice and all author and copyright information have</span></pre></td></tr> |
| <tr> <td class="numLine"> 33</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * remained in tact.</span></pre></td></tr> |
| <tr> <td class="numLine"> 34</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr> |
| <tr> <td class="numLine"> 35</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @see <a href="http://en.wikipedia.org/wiki/Base64">Wikipedia: Base 64</a></span></pre></td></tr> |
| <tr> <td class="numLine"> 36</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @see <a href="http://www.ietf.org/rfc/rfc2045.txt">RFC 2045</a></span></pre></td></tr> |
| <tr> <td class="numLine"> 37</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @since 0.9</span></pre></td></tr> |
| <tr> <td class="numLine"> 38</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 39</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">public</span> <span class="keyword">class</span> Base64 {</span></pre></td></tr> |
| <tr> <td class="numLine"> 40</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 41</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr> |
| <tr> <td class="numLine"> 42</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * Chunk size per RFC 2045 section 6.8.</span></pre></td></tr> |
| <tr> <td class="numLine"> 43</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * <p/></span></pre></td></tr> |
| <tr> <td class="numLine"> 44</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * The character limit does not count the trailing CRLF, but counts all other characters, including any</span></pre></td></tr> |
| <tr> <td class="numLine"> 45</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * equal signs.</span></pre></td></tr> |
| <tr> <td class="numLine"> 46</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr> |
| <tr> <td class="numLine"> 47</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @see <a href="http://www.ietf.org/rfc/rfc2045.txt">RFC 2045 section 6.8</a></span></pre></td></tr> |
| <tr> <td class="numLine"> 48</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr> |
| <tr> <td class="numLine"> 49</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">static</span> <span class="keyword">final</span> <span class="keyword">int</span> CHUNK_SIZE = 76;</pre></td></tr> |
| <tr> <td class="numLine"> 50</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 51</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr> |
| <tr> <td class="numLine"> 52</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * Chunk separator per RFC 2045 section 2.1.</span></pre></td></tr> |
| <tr> <td class="numLine"> 53</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr> |
| <tr> <td class="numLine"> 54</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @see <a href="http://www.ietf.org/rfc/rfc2045.txt">RFC 2045 section 2.1</a></span></pre></td></tr> |
| <tr> <td class="numLine"> 55</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 56</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">static</span> <span class="keyword">final</span> <span class="keyword">byte</span>[] CHUNK_SEPARATOR = <span class="string">"\r\n"</span>.getBytes();</pre></td></tr> |
| <tr> <td class="numLine"> 57</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 58</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr> |
| <tr> <td class="numLine"> 59</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * The base length.</span></pre></td></tr> |
| <tr> <td class="numLine"> 60</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr> |
| <tr> <td class="numLine"> 61</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> <span class="keyword">int</span> BASELENGTH = 255;</pre></td></tr> |
| <tr> <td class="numLine"> 62</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 63</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr> |
| <tr> <td class="numLine"> 64</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * Lookup length.</span></pre></td></tr> |
| <tr> <td class="numLine"> 65</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr> |
| <tr> <td class="numLine"> 66</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> <span class="keyword">int</span> LOOKUPLENGTH = 64;</pre></td></tr> |
| <tr> <td class="numLine"> 67</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 68</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr> |
| <tr> <td class="numLine"> 69</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * Used to calculate the number of bits in a byte.</span></pre></td></tr> |
| <tr> <td class="numLine"> 70</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr> |
| <tr> <td class="numLine"> 71</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> <span class="keyword">int</span> EIGHTBIT = 8;</pre></td></tr> |
| <tr> <td class="numLine"> 72</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 73</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr> |
| <tr> <td class="numLine"> 74</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * Used when encoding something which has fewer than 24 bits.</span></pre></td></tr> |
| <tr> <td class="numLine"> 75</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr> |
| <tr> <td class="numLine"> 76</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> <span class="keyword">int</span> SIXTEENBIT = 16;</pre></td></tr> |
| <tr> <td class="numLine"> 77</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 78</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr> |
| <tr> <td class="numLine"> 79</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * Used to determine how many bits data contains.</span></pre></td></tr> |
| <tr> <td class="numLine"> 80</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr> |
| <tr> <td class="numLine"> 81</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> <span class="keyword">int</span> TWENTYFOURBITGROUP = 24;</pre></td></tr> |
| <tr> <td class="numLine"> 82</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 83</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr> |
| <tr> <td class="numLine"> 84</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * Used to get the number of Quadruples.</span></pre></td></tr> |
| <tr> <td class="numLine"> 85</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr> |
| <tr> <td class="numLine"> 86</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> <span class="keyword">int</span> FOURBYTE = 4;</pre></td></tr> |
| <tr> <td class="numLine"> 87</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 88</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr> |
| <tr> <td class="numLine"> 89</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * Used to test the sign of a byte.</span></pre></td></tr> |
| <tr> <td class="numLine"> 90</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr> |
| <tr> <td class="numLine"> 91</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> <span class="keyword">int</span> SIGN = -128;</pre></td></tr> |
| <tr> <td class="numLine"> 92</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 93</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr> |
| <tr> <td class="numLine"> 94</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * Byte used to pad output.</span></pre></td></tr> |
| <tr> <td class="numLine"> 95</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr> |
| <tr> <td class="numLine"> 96</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> <span class="keyword">byte</span> PAD = (<span class="keyword">byte</span>) <span class="string">'='</span>;</pre></td></tr> |
| <tr> <td class="numLine"> 97</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 98</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr> |
| <tr> <td class="numLine"> 99</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * Contains the Base64 values <code>0</code> through <code>63</code> accessed by using character encodings as</span></pre></td></tr> |
| <tr> <td class="numLine"> 100</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * indices.</span></pre></td></tr> |
| <tr> <td class="numLine"> 101</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * <p/></span></pre></td></tr> |
| <tr> <td class="numLine"> 102</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * <p>For example, <code>base64Alphabet['+']</code> returns <code>62</code>.</p></span></pre></td></tr> |
| <tr> <td class="numLine"> 103</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * <p/></span></pre></td></tr> |
| <tr> <td class="numLine"> 104</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * <p>The value of undefined encodings is <code>-1</code>.</p></span></pre></td></tr> |
| <tr> <td class="numLine"> 105</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 106</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> <span class="keyword">byte</span>[] base64Alphabet = <span class="keyword">new</span> <span class="keyword">byte</span>[BASELENGTH];</pre></td></tr> |
| <tr> <td class="numLine"> 107</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 108</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr> |
| <tr> <td class="numLine"> 109</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * <p>Contains the Base64 encodings <code>A</code> through <code>Z</code>, followed by <code>a</code> through</span></pre></td></tr> |
| <tr> <td class="numLine"> 110</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * <code>z</code>, followed by <code>0</code> through <code>9</code>, followed by <code>+</code>, and</span></pre></td></tr> |
| <tr> <td class="numLine"> 111</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * <code>/</code>.</p></span></pre></td></tr> |
| <tr> <td class="numLine"> 112</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * <p/></span></pre></td></tr> |
| <tr> <td class="numLine"> 113</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * <p>This array is accessed by using character values as indices.</p></span></pre></td></tr> |
| <tr> <td class="numLine"> 114</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * <p/></span></pre></td></tr> |
| <tr> <td class="numLine"> 115</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * <p>For example, <code>lookUpBase64Alphabet[62] </code> returns <code>'+'</code>.</p></span></pre></td></tr> |
| <tr> <td class="numLine"> 116</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 117</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> <span class="keyword">byte</span>[] lookUpBase64Alphabet = <span class="keyword">new</span> <span class="keyword">byte</span>[LOOKUPLENGTH];</pre></td></tr> |
| <tr> <td class="numLine"> 118</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 119</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">// Populating the lookup and character arrays</span></pre></td></tr> |
| <tr> <td class="numLine"> 120</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 121</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">static</span> {</pre></td></tr> |
| <tr> <td class="numLineCover"> 122</td> <td class="nbHitsCovered"> 256</td> <td class="src"><pre class="src"> <span class="keyword">for</span> (<span class="keyword">int</span> i = 0; i < BASELENGTH; i++) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 123</td> <td class="nbHitsCovered"> 255</td> <td class="src"><pre class="src"> base64Alphabet[i] = (<span class="keyword">byte</span>) -1;</pre></td></tr> |
| <tr> <td class="numLine"> 124</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLineCover"> 125</td> <td class="nbHitsCovered"> 27</td> <td class="src"><pre class="src"> <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="string">'Z'</span>; i >= <span class="string">'A'</span>; i--) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 126</td> <td class="nbHitsCovered"> 26</td> <td class="src"><pre class="src"> base64Alphabet[i] = (<span class="keyword">byte</span>) (i - <span class="string">'A'</span>);</pre></td></tr> |
| <tr> <td class="numLine"> 127</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLineCover"> 128</td> <td class="nbHitsCovered"> 27</td> <td class="src"><pre class="src"> <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="string">'z'</span>; i >= <span class="string">'a'</span>; i--) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 129</td> <td class="nbHitsCovered"> 26</td> <td class="src"><pre class="src"> base64Alphabet[i] = (<span class="keyword">byte</span>) (i - <span class="string">'a'</span> + 26);</pre></td></tr> |
| <tr> <td class="numLine"> 130</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLineCover"> 131</td> <td class="nbHitsCovered"> 11</td> <td class="src"><pre class="src"> <span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="string">'9'</span>; i >= <span class="string">'0'</span>; i--) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 132</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> base64Alphabet[i] = (<span class="keyword">byte</span>) (i - <span class="string">'0'</span> + 52);</pre></td></tr> |
| <tr> <td class="numLine"> 133</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 134</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLineCover"> 135</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> base64Alphabet[<span class="string">'+'</span>] = 62;</pre></td></tr> |
| <tr> <td class="numLineCover"> 136</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> base64Alphabet[<span class="string">'/'</span>] = 63;</pre></td></tr> |
| <tr> <td class="numLine"> 137</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLineCover"> 138</td> <td class="nbHitsCovered"> 27</td> <td class="src"><pre class="src"> <span class="keyword">for</span> (<span class="keyword">int</span> i = 0; i <= 25; i++) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 139</td> <td class="nbHitsCovered"> 26</td> <td class="src"><pre class="src"> lookUpBase64Alphabet[i] = (<span class="keyword">byte</span>) (<span class="string">'A'</span> + i);</pre></td></tr> |
| <tr> <td class="numLine"> 140</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 141</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLineCover"> 142</td> <td class="nbHitsCovered"> 27</td> <td class="src"><pre class="src"> <span class="keyword">for</span> (<span class="keyword">int</span> i = 26, j = 0; i <= 51; i++, j++) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 143</td> <td class="nbHitsCovered"> 26</td> <td class="src"><pre class="src"> lookUpBase64Alphabet[i] = (<span class="keyword">byte</span>) (<span class="string">'a'</span> + j);</pre></td></tr> |
| <tr> <td class="numLine"> 144</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 145</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLineCover"> 146</td> <td class="nbHitsCovered"> 11</td> <td class="src"><pre class="src"> <span class="keyword">for</span> (<span class="keyword">int</span> i = 52, j = 0; i <= 61; i++, j++) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 147</td> <td class="nbHitsCovered"> 10</td> <td class="src"><pre class="src"> lookUpBase64Alphabet[i] = (<span class="keyword">byte</span>) (<span class="string">'0'</span> + j);</pre></td></tr> |
| <tr> <td class="numLine"> 148</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 149</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLineCover"> 150</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> lookUpBase64Alphabet[62] = (<span class="keyword">byte</span>) <span class="string">'+'</span>;</pre></td></tr> |
| <tr> <td class="numLineCover"> 151</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> lookUpBase64Alphabet[63] = (<span class="keyword">byte</span>) <span class="string">'/'</span>;</pre></td></tr> |
| <tr> <td class="numLineCover"> 152</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 153</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 154</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr> |
| <tr> <td class="numLine"> 155</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * Returns whether or not the <code>octect</code> is in the base 64 alphabet.</span></pre></td></tr> |
| <tr> <td class="numLine"> 156</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr> |
| <tr> <td class="numLine"> 157</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @param octect The value to test</span></pre></td></tr> |
| <tr> <td class="numLine"> 158</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @return <code>true</code> if the value is defined in the the base 64 alphabet, <code>false</code> otherwise.</span></pre></td></tr> |
| <tr> <td class="numLine"> 159</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr> |
| <tr> <td class="numLine"> 160</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">boolean</span> isBase64(<span class="keyword">byte</span> octect) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 161</td> <td class="nbHitsCovered"><a title="Line 161: Conditional coverage 100% (2/2)."> 614</a></td> <td class="src"><pre class="src"> <a title="Line 161: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (octect == PAD) {</a></pre></td></tr> |
| <tr> <td class="numLineCover"> 162</td> <td class="nbHitsCovered"> 27</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">true</span>;</pre></td></tr> |
| <tr> <td class="numLine"> 163</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> } <span class="keyword">else</span> <span class="comment">//noinspection RedundantIfStatement</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 164</td> <td class="nbHitsUncovered"><a title="Line 164: Conditional coverage 50% (2/4) [each condition: 50%, 50%]."> 587</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 164: Conditional coverage 50% (2/4) [each condition: 50%, 50%]."> <span class="keyword">if</span> (octect < 0 || base64Alphabet[octect] == -1) {</a></span></pre></td></tr> |
| <tr> <td class="numLineCover"> 165</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">false</span>;</span></pre></td></tr> |
| <tr> <td class="numLine"> 166</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr> |
| <tr> <td class="numLineCover"> 167</td> <td class="nbHitsCovered"> 587</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">true</span>;</pre></td></tr> |
| <tr> <td class="numLine"> 168</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 169</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 170</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 171</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr> |
| <tr> <td class="numLine"> 172</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * Tests a given byte array to see if it contains only valid characters within the Base64 alphabet.</span></pre></td></tr> |
| <tr> <td class="numLine"> 173</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr> |
| <tr> <td class="numLine"> 174</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @param arrayOctect byte array to test</span></pre></td></tr> |
| <tr> <td class="numLine"> 175</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @return <code>true</code> if all bytes are valid characters in the Base64 alphabet or if the byte array is</span></pre></td></tr> |
| <tr> <td class="numLine"> 176</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * empty; false, otherwise</span></pre></td></tr> |
| <tr> <td class="numLine"> 177</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr> |
| <tr> <td class="numLine"> 178</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">boolean</span> isBase64(<span class="keyword">byte</span>[] arrayOctect) {</pre></td></tr> |
| <tr> <td class="numLine"> 179</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLineCover"> 180</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> arrayOctect = discardWhitespace(arrayOctect);</span></pre></td></tr> |
| <tr> <td class="numLine"> 181</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLineCover"> 182</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">int</span> length = arrayOctect.length;</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 183</td> <td class="nbHitsUncovered"><a title="Line 183: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 183: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (length == 0) {</a></span></pre></td></tr> |
| <tr> <td class="numLine"> 184</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">// shouldn't a 0 length array be valid base64 data?</span></pre></td></tr> |
| <tr> <td class="numLine"> 185</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">// return false;</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 186</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">true</span>;</span></pre></td></tr> |
| <tr> <td class="numLine"> 187</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLineCover"> 188</td> <td class="nbHitsUncovered"><a title="Line 188: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 188: Conditional coverage 0% (0/2)."> <span class="keyword">for</span> (<span class="keyword">int</span> i = 0; i < length; i++) {</a></span></pre></td></tr> |
| <tr> <td class="numLineCover"> 189</td> <td class="nbHitsUncovered"><a title="Line 189: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 189: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (!isBase64(arrayOctect[i])) {</a></span></pre></td></tr> |
| <tr> <td class="numLineCover"> 190</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">false</span>;</span></pre></td></tr> |
| <tr> <td class="numLine"> 191</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 192</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLineCover"> 193</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">true</span>;</span></pre></td></tr> |
| <tr> <td class="numLine"> 194</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 195</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 196</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr> |
| <tr> <td class="numLine"> 197</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * Discards any whitespace from a base-64 encoded block.</span></pre></td></tr> |
| <tr> <td class="numLine"> 198</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr> |
| <tr> <td class="numLine"> 199</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @param data The base-64 encoded data to discard the whitespace from.</span></pre></td></tr> |
| <tr> <td class="numLine"> 200</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @return The data, less whitespace (see RFC 2045).</span></pre></td></tr> |
| <tr> <td class="numLine"> 201</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr> |
| <tr> <td class="numLine"> 202</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">static</span> <span class="keyword">byte</span>[] discardWhitespace(<span class="keyword">byte</span>[] data) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 203</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">byte</span> groomedData[] = <span class="keyword">new</span> <span class="keyword">byte</span>[data.length];</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 204</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">int</span> bytesCopied = 0;</span></pre></td></tr> |
| <tr> <td class="numLine"> 205</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLineCover"> 206</td> <td class="nbHitsUncovered"><a title="Line 206: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 206: Conditional coverage 0% (0/2)."> <span class="keyword">for</span> (<span class="keyword">byte</span> aByte : data) {</a></span></pre></td></tr> |
| <tr> <td class="numLineCover"> 207</td> <td class="nbHitsUncovered"><a title="Line 207: Conditional coverage 0% (0/5)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 207: Conditional coverage 0% (0/5)."> <span class="keyword">switch</span> (aByte) {</a></span></pre></td></tr> |
| <tr> <td class="numLine"> 208</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">case</span> (<span class="keyword">byte</span>) <span class="string">' '</span>:</pre></td></tr> |
| <tr> <td class="numLine"> 209</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">case</span> (<span class="keyword">byte</span>) <span class="string">'\n'</span>:</pre></td></tr> |
| <tr> <td class="numLine"> 210</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">case</span> (<span class="keyword">byte</span>) <span class="string">'\r'</span>:</pre></td></tr> |
| <tr> <td class="numLine"> 211</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">case</span> (<span class="keyword">byte</span>) <span class="string">'\t'</span>:</pre></td></tr> |
| <tr> <td class="numLineCover"> 212</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">break</span>;</span></pre></td></tr> |
| <tr> <td class="numLine"> 213</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">default</span>:</pre></td></tr> |
| <tr> <td class="numLineCover"> 214</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> groomedData[bytesCopied++] = aByte;</span></pre></td></tr> |
| <tr> <td class="numLine"> 215</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 216</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 217</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLineCover"> 218</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">byte</span> packedData[] = <span class="keyword">new</span> <span class="keyword">byte</span>[bytesCopied];</span></pre></td></tr> |
| <tr> <td class="numLine"> 219</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLineCover"> 220</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> System.arraycopy(groomedData, 0, packedData, 0, bytesCopied);</span></pre></td></tr> |
| <tr> <td class="numLine"> 221</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLineCover"> 222</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> packedData;</span></pre></td></tr> |
| <tr> <td class="numLine"> 223</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 224</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 225</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr> |
| <tr> <td class="numLine"> 226</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * Base64 encodes the specified byte array and then encodes it as a String using Shiro's preferred character</span></pre></td></tr> |
| <tr> <td class="numLine"> 227</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * encoding (UTF-8).</span></pre></td></tr> |
| <tr> <td class="numLine"> 228</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr> |
| <tr> <td class="numLine"> 229</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @param bytes the byte array to Base64 encode.</span></pre></td></tr> |
| <tr> <td class="numLine"> 230</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @return a UTF-8 encoded String of the resulting Base64 encoded byte array.</span></pre></td></tr> |
| <tr> <td class="numLine"> 231</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr> |
| <tr> <td class="numLine"> 232</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> String encodeToString(<span class="keyword">byte</span>[] bytes) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 233</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> <span class="keyword">byte</span>[] encoded = encode(bytes);</pre></td></tr> |
| <tr> <td class="numLineCover"> 234</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> <span class="keyword">return</span> CodecSupport.toString(encoded);</pre></td></tr> |
| <tr> <td class="numLine"> 235</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 236</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 237</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr> |
| <tr> <td class="numLine"> 238</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * Encodes binary data using the base64 algorithm and chunks the encoded output into 76 character blocks</span></pre></td></tr> |
| <tr> <td class="numLine"> 239</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr> |
| <tr> <td class="numLine"> 240</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @param binaryData binary data to encodeToChars</span></pre></td></tr> |
| <tr> <td class="numLine"> 241</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @return Base64 characters chunked in 76 character blocks</span></pre></td></tr> |
| <tr> <td class="numLine"> 242</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr> |
| <tr> <td class="numLine"> 243</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">byte</span>[] encodeChunked(<span class="keyword">byte</span>[] binaryData) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 244</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> encode(binaryData, <span class="keyword">true</span>);</span></pre></td></tr> |
| <tr> <td class="numLine"> 245</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 246</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 247</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr> |
| <tr> <td class="numLine"> 248</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * Encodes a byte[] containing binary data, into a byte[] containing characters in the Base64 alphabet.</span></pre></td></tr> |
| <tr> <td class="numLine"> 249</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr> |
| <tr> <td class="numLine"> 250</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @param pArray a byte array containing binary data</span></pre></td></tr> |
| <tr> <td class="numLine"> 251</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @return A byte array containing only Base64 character data</span></pre></td></tr> |
| <tr> <td class="numLine"> 252</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr> |
| <tr> <td class="numLine"> 253</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">byte</span>[] encode(<span class="keyword">byte</span>[] pArray) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 254</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> <span class="keyword">return</span> encode(pArray, <span class="keyword">false</span>);</pre></td></tr> |
| <tr> <td class="numLine"> 255</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 256</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 257</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr> |
| <tr> <td class="numLine"> 258</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * Encodes binary data using the base64 algorithm, optionally chunking the output into 76 character blocks.</span></pre></td></tr> |
| <tr> <td class="numLine"> 259</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr> |
| <tr> <td class="numLine"> 260</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @param binaryData Array containing binary data to encodeToChars.</span></pre></td></tr> |
| <tr> <td class="numLine"> 261</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @param isChunked if <code>true</code> this encoder will chunk the base64 output into 76 character blocks</span></pre></td></tr> |
| <tr> <td class="numLine"> 262</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @return Base64-encoded data.</span></pre></td></tr> |
| <tr> <td class="numLine"> 263</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @throws IllegalArgumentException Thrown when the input array needs an output array bigger than {@link Integer#MAX_VALUE}</span></pre></td></tr> |
| <tr> <td class="numLine"> 264</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr> |
| <tr> <td class="numLine"> 265</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">byte</span>[] encode(<span class="keyword">byte</span>[] binaryData, <span class="keyword">boolean</span> isChunked) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 266</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> <span class="keyword">long</span> binaryDataLength = binaryData.length;</pre></td></tr> |
| <tr> <td class="numLineCover"> 267</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> <span class="keyword">long</span> lengthDataBits = binaryDataLength * EIGHTBIT;</pre></td></tr> |
| <tr> <td class="numLineCover"> 268</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> <span class="keyword">long</span> fewerThan24bits = lengthDataBits % TWENTYFOURBITGROUP;</pre></td></tr> |
| <tr> <td class="numLineCover"> 269</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> <span class="keyword">long</span> tripletCount = lengthDataBits / TWENTYFOURBITGROUP;</pre></td></tr> |
| <tr> <td class="numLine"> 270</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">long</span> encodedDataLengthLong;</pre></td></tr> |
| <tr> <td class="numLineCover"> 271</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> <span class="keyword">int</span> chunckCount = 0;</pre></td></tr> |
| <tr> <td class="numLine"> 272</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLineCover"> 273</td> <td class="nbHitsUncovered"><a title="Line 273: Conditional coverage 50% (1/2)."> 22</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 273: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (fewerThan24bits != 0) {</a></span></pre></td></tr> |
| <tr> <td class="numLine"> 274</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">// data not divisible by 24 bit</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 275</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> encodedDataLengthLong = (tripletCount + 1) * 4;</pre></td></tr> |
| <tr> <td class="numLine"> 276</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr> |
| <tr> <td class="numLine"> 277</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">// 16 or 8 bit</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 278</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> encodedDataLengthLong = tripletCount * 4;</span></pre></td></tr> |
| <tr> <td class="numLine"> 279</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 280</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 281</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">// If the output is to be "chunked" into 76 character sections,</span></pre></td></tr> |
| <tr> <td class="numLine"> 282</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">// for compliance with RFC 2045 MIME, then it is important to</span></pre></td></tr> |
| <tr> <td class="numLine"> 283</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">// allow for extra length to account for the separator(s)</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 284</td> <td class="nbHitsUncovered"><a title="Line 284: Conditional coverage 50% (1/2)."> 22</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 284: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (isChunked) {</a></span></pre></td></tr> |
| <tr> <td class="numLine"> 285</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLineCover"> 286</td> <td class="nbHitsUncovered"><a title="Line 286: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 286: Conditional coverage 0% (0/2)."> chunckCount = (CHUNK_SEPARATOR.length == 0 ? 0 : (<span class="keyword">int</span>) Math</a></span></pre></td></tr> |
| <tr> <td class="numLine"> 287</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> .ceil((<span class="keyword">float</span>) encodedDataLengthLong / CHUNK_SIZE));</pre></td></tr> |
| <tr> <td class="numLineCover"> 288</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> encodedDataLengthLong += chunckCount * CHUNK_SEPARATOR.length;</span></pre></td></tr> |
| <tr> <td class="numLine"> 289</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 290</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLineCover"> 291</td> <td class="nbHitsUncovered"><a title="Line 291: Conditional coverage 50% (1/2)."> 22</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 291: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (encodedDataLengthLong > Integer.MAX_VALUE) {</a></span></pre></td></tr> |
| <tr> <td class="numLineCover"> 292</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> IllegalArgumentException(</span></pre></td></tr> |
| <tr> <td class="numLine"> 293</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="string">"Input array too big, output array would be bigger than Integer.MAX_VALUE="</span> + Integer.MAX_VALUE);</pre></td></tr> |
| <tr> <td class="numLine"> 294</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLineCover"> 295</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> <span class="keyword">int</span> encodedDataLength = (<span class="keyword">int</span>) encodedDataLengthLong;</pre></td></tr> |
| <tr> <td class="numLineCover"> 296</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> <span class="keyword">byte</span> encodedData[] = <span class="keyword">new</span> <span class="keyword">byte</span>[encodedDataLength];</pre></td></tr> |
| <tr> <td class="numLine"> 297</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 298</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">byte</span> k, l, b1, b2, b3;</pre></td></tr> |
| <tr> <td class="numLine"> 299</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLineCover"> 300</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> <span class="keyword">int</span> encodedIndex = 0;</pre></td></tr> |
| <tr> <td class="numLine"> 301</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">int</span> dataIndex;</pre></td></tr> |
| <tr> <td class="numLine"> 302</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">int</span> i;</pre></td></tr> |
| <tr> <td class="numLineCover"> 303</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> <span class="keyword">int</span> nextSeparatorIndex = CHUNK_SIZE;</pre></td></tr> |
| <tr> <td class="numLineCover"> 304</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> <span class="keyword">int</span> chunksSoFar = 0;</pre></td></tr> |
| <tr> <td class="numLine"> 305</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 306</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">// log.debug("number of triplets = " + numberTriplets);</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 307</td> <td class="nbHitsCovered"><a title="Line 307: Conditional coverage 100% (2/2)."> 234</a></td> <td class="src"><pre class="src"> <a title="Line 307: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (i = 0; i < tripletCount; i++) {</a></pre></td></tr> |
| <tr> <td class="numLineCover"> 308</td> <td class="nbHitsCovered"> 212</td> <td class="src"><pre class="src"> dataIndex = i * 3;</pre></td></tr> |
| <tr> <td class="numLineCover"> 309</td> <td class="nbHitsCovered"> 212</td> <td class="src"><pre class="src"> b1 = binaryData[dataIndex];</pre></td></tr> |
| <tr> <td class="numLineCover"> 310</td> <td class="nbHitsCovered"> 212</td> <td class="src"><pre class="src"> b2 = binaryData[dataIndex + 1];</pre></td></tr> |
| <tr> <td class="numLineCover"> 311</td> <td class="nbHitsCovered"> 212</td> <td class="src"><pre class="src"> b3 = binaryData[dataIndex + 2];</pre></td></tr> |
| <tr> <td class="numLine"> 312</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 313</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">// log.debug("b1= " + b1 +", b2= " + b2 + ", b3= " + b3);</span></pre></td></tr> |
| <tr> <td class="numLine"> 314</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLineCover"> 315</td> <td class="nbHitsCovered"> 212</td> <td class="src"><pre class="src"> l = (<span class="keyword">byte</span>) (b2 & 0x0f);</pre></td></tr> |
| <tr> <td class="numLineCover"> 316</td> <td class="nbHitsCovered"> 212</td> <td class="src"><pre class="src"> k = (<span class="keyword">byte</span>) (b1 & 0x03);</pre></td></tr> |
| <tr> <td class="numLine"> 317</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLineCover"> 318</td> <td class="nbHitsCovered"><a title="Line 318: Conditional coverage 100% (2/2)."> 212</a></td> <td class="src"><pre class="src"> <a title="Line 318: Conditional coverage 100% (2/2)."> <span class="keyword">byte</span> val1 = ((b1 & SIGN) == 0) ? (<span class="keyword">byte</span>) (b1 >> 2) : (<span class="keyword">byte</span>) ((b1) >> 2 ^ 0xc0);</a></pre></td></tr> |
| <tr> <td class="numLineCover"> 319</td> <td class="nbHitsCovered"><a title="Line 319: Conditional coverage 100% (2/2)."> 212</a></td> <td class="src"><pre class="src"> <a title="Line 319: Conditional coverage 100% (2/2)."> <span class="keyword">byte</span> val2 = ((b2 & SIGN) == 0) ? (<span class="keyword">byte</span>) (b2 >> 4) : (<span class="keyword">byte</span>) ((b2) >> 4 ^ 0xf0);</a></pre></td></tr> |
| <tr> <td class="numLineCover"> 320</td> <td class="nbHitsCovered"><a title="Line 320: Conditional coverage 100% (2/2)."> 212</a></td> <td class="src"><pre class="src"> <a title="Line 320: Conditional coverage 100% (2/2)."> <span class="keyword">byte</span> val3 = ((b3 & SIGN) == 0) ? (<span class="keyword">byte</span>) (b3 >> 6) : (<span class="keyword">byte</span>) ((b3) >> 6 ^ 0xfc);</a></pre></td></tr> |
| <tr> <td class="numLine"> 321</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLineCover"> 322</td> <td class="nbHitsCovered"> 212</td> <td class="src"><pre class="src"> encodedData[encodedIndex] = lookUpBase64Alphabet[val1];</pre></td></tr> |
| <tr> <td class="numLine"> 323</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">// log.debug( "val2 = " + val2 );</span></pre></td></tr> |
| <tr> <td class="numLine"> 324</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">// log.debug( "k4 = " + (k<<4) );</span></pre></td></tr> |
| <tr> <td class="numLine"> 325</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">// log.debug( "vak = " + (val2 | (k<<4)) );</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 326</td> <td class="nbHitsCovered"> 212</td> <td class="src"><pre class="src"> encodedData[encodedIndex + 1] = lookUpBase64Alphabet[val2 | (k << 4)];</pre></td></tr> |
| <tr> <td class="numLineCover"> 327</td> <td class="nbHitsCovered"> 212</td> <td class="src"><pre class="src"> encodedData[encodedIndex + 2] = lookUpBase64Alphabet[(l << 2) | val3];</pre></td></tr> |
| <tr> <td class="numLineCover"> 328</td> <td class="nbHitsCovered"> 212</td> <td class="src"><pre class="src"> encodedData[encodedIndex + 3] = lookUpBase64Alphabet[b3 & 0x3f];</pre></td></tr> |
| <tr> <td class="numLine"> 329</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLineCover"> 330</td> <td class="nbHitsCovered"> 212</td> <td class="src"><pre class="src"> encodedIndex += 4;</pre></td></tr> |
| <tr> <td class="numLine"> 331</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 332</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">// If we are chunking, let's put a chunk separator down.</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 333</td> <td class="nbHitsUncovered"><a title="Line 333: Conditional coverage 50% (1/2)."> 212</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 333: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (isChunked) {</a></span></pre></td></tr> |
| <tr> <td class="numLine"> 334</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">// this assumes that CHUNK_SIZE % 4 == 0</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 335</td> <td class="nbHitsUncovered"><a title="Line 335: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 335: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (encodedIndex == nextSeparatorIndex) {</a></span></pre></td></tr> |
| <tr> <td class="numLineCover"> 336</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> System.arraycopy(CHUNK_SEPARATOR, 0, encodedData, encodedIndex, CHUNK_SEPARATOR.length);</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 337</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> chunksSoFar++;</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 338</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> nextSeparatorIndex = (CHUNK_SIZE * (chunksSoFar + 1)) + (chunksSoFar * CHUNK_SEPARATOR.length);</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 339</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> encodedIndex += CHUNK_SEPARATOR.length;</span></pre></td></tr> |
| <tr> <td class="numLine"> 340</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 341</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 342</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 343</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 344</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">// form integral number of 6-bit groups</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 345</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> dataIndex = i * 3;</pre></td></tr> |
| <tr> <td class="numLine"> 346</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLineCover"> 347</td> <td class="nbHitsCovered"><a title="Line 347: Conditional coverage 100% (2/2)."> 22</a></td> <td class="src"><pre class="src"> <a title="Line 347: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (fewerThan24bits == EIGHTBIT) {</a></pre></td></tr> |
| <tr> <td class="numLineCover"> 348</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> b1 = binaryData[dataIndex];</pre></td></tr> |
| <tr> <td class="numLineCover"> 349</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> k = (<span class="keyword">byte</span>) (b1 & 0x03);</pre></td></tr> |
| <tr> <td class="numLine"> 350</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">// log.debug("b1=" + b1);</span></pre></td></tr> |
| <tr> <td class="numLine"> 351</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">// log.debug("b1<<2 = " + (b1>>2) );</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 352</td> <td class="nbHitsCovered"><a title="Line 352: Conditional coverage 100% (2/2)."> 15</a></td> <td class="src"><pre class="src"> <a title="Line 352: Conditional coverage 100% (2/2)."> <span class="keyword">byte</span> val1 = ((b1 & SIGN) == 0) ? (<span class="keyword">byte</span>) (b1 >> 2) : (<span class="keyword">byte</span>) ((b1) >> 2 ^ 0xc0);</a></pre></td></tr> |
| <tr> <td class="numLineCover"> 353</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> encodedData[encodedIndex] = lookUpBase64Alphabet[val1];</pre></td></tr> |
| <tr> <td class="numLineCover"> 354</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> encodedData[encodedIndex + 1] = lookUpBase64Alphabet[k << 4];</pre></td></tr> |
| <tr> <td class="numLineCover"> 355</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> encodedData[encodedIndex + 2] = PAD;</pre></td></tr> |
| <tr> <td class="numLineCover"> 356</td> <td class="nbHitsCovered"> 15</td> <td class="src"><pre class="src"> encodedData[encodedIndex + 3] = PAD;</pre></td></tr> |
| <tr> <td class="numLineCover"> 357</td> <td class="nbHitsUncovered"><a title="Line 357: Conditional coverage 50% (1/2)."> 15</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 357: Conditional coverage 50% (1/2)."> } <span class="keyword">else</span> <span class="keyword">if</span> (fewerThan24bits == SIXTEENBIT) {</a></span></pre></td></tr> |
| <tr> <td class="numLine"> 358</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLineCover"> 359</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> b1 = binaryData[dataIndex];</pre></td></tr> |
| <tr> <td class="numLineCover"> 360</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> b2 = binaryData[dataIndex + 1];</pre></td></tr> |
| <tr> <td class="numLineCover"> 361</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> l = (<span class="keyword">byte</span>) (b2 & 0x0f);</pre></td></tr> |
| <tr> <td class="numLineCover"> 362</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> k = (<span class="keyword">byte</span>) (b1 & 0x03);</pre></td></tr> |
| <tr> <td class="numLine"> 363</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLineCover"> 364</td> <td class="nbHitsCovered"><a title="Line 364: Conditional coverage 100% (2/2)."> 7</a></td> <td class="src"><pre class="src"> <a title="Line 364: Conditional coverage 100% (2/2)."> <span class="keyword">byte</span> val1 = ((b1 & SIGN) == 0) ? (<span class="keyword">byte</span>) (b1 >> 2) : (<span class="keyword">byte</span>) ((b1) >> 2 ^ 0xc0);</a></pre></td></tr> |
| <tr> <td class="numLineCover"> 365</td> <td class="nbHitsCovered"><a title="Line 365: Conditional coverage 100% (2/2)."> 7</a></td> <td class="src"><pre class="src"> <a title="Line 365: Conditional coverage 100% (2/2)."> <span class="keyword">byte</span> val2 = ((b2 & SIGN) == 0) ? (<span class="keyword">byte</span>) (b2 >> 4) : (<span class="keyword">byte</span>) ((b2) >> 4 ^ 0xf0);</a></pre></td></tr> |
| <tr> <td class="numLine"> 366</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLineCover"> 367</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> encodedData[encodedIndex] = lookUpBase64Alphabet[val1];</pre></td></tr> |
| <tr> <td class="numLineCover"> 368</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> encodedData[encodedIndex + 1] = lookUpBase64Alphabet[val2 | (k << 4)];</pre></td></tr> |
| <tr> <td class="numLineCover"> 369</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> encodedData[encodedIndex + 2] = lookUpBase64Alphabet[l << 2];</pre></td></tr> |
| <tr> <td class="numLineCover"> 370</td> <td class="nbHitsCovered"> 7</td> <td class="src"><pre class="src"> encodedData[encodedIndex + 3] = PAD;</pre></td></tr> |
| <tr> <td class="numLine"> 371</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 372</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLineCover"> 373</td> <td class="nbHitsUncovered"><a title="Line 373: Conditional coverage 50% (1/2)."> 22</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 373: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (isChunked) {</a></span></pre></td></tr> |
| <tr> <td class="numLine"> 374</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">// we also add a separator to the end of the final chunk.</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 375</td> <td class="nbHitsUncovered"><a title="Line 375: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 375: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (chunksSoFar < chunckCount) {</a></span></pre></td></tr> |
| <tr> <td class="numLineCover"> 376</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> System.arraycopy(CHUNK_SEPARATOR, 0, encodedData, encodedDataLength - CHUNK_SEPARATOR.length,</span></pre></td></tr> |
| <tr> <td class="numLine"> 377</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> CHUNK_SEPARATOR.length);</pre></td></tr> |
| <tr> <td class="numLine"> 378</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 379</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 380</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLineCover"> 381</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> <span class="keyword">return</span> encodedData;</pre></td></tr> |
| <tr> <td class="numLine"> 382</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 383</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 384</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr> |
| <tr> <td class="numLine"> 385</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * Converts the specified UTF-8 Base64 encoded String and decodes it to a resultant UTF-8 encoded string.</span></pre></td></tr> |
| <tr> <td class="numLine"> 386</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr> |
| <tr> <td class="numLine"> 387</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @param base64Encoded a UTF-8 Base64 encoded String</span></pre></td></tr> |
| <tr> <td class="numLine"> 388</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @return the decoded String, UTF-8 encoded.</span></pre></td></tr> |
| <tr> <td class="numLine"> 389</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr> |
| <tr> <td class="numLine"> 390</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> String decodeToString(String base64Encoded) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 391</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">byte</span>[] encodedBytes = CodecSupport.toBytes(base64Encoded);</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 392</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> decodeToString(encodedBytes);</span></pre></td></tr> |
| <tr> <td class="numLine"> 393</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 394</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 395</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr> |
| <tr> <td class="numLine"> 396</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * Decodes the specified Base64 encoded byte array and returns the decoded result as a UTF-8 encoded.</span></pre></td></tr> |
| <tr> <td class="numLine"> 397</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr> |
| <tr> <td class="numLine"> 398</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @param base64Encoded a Base64 encoded byte array</span></pre></td></tr> |
| <tr> <td class="numLine"> 399</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @return the decoded String, UTF-8 encoded.</span></pre></td></tr> |
| <tr> <td class="numLine"> 400</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr> |
| <tr> <td class="numLine"> 401</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> String decodeToString(<span class="keyword">byte</span>[] base64Encoded) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 402</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">byte</span>[] decoded = decode(base64Encoded);</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 403</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> CodecSupport.toString(decoded);</span></pre></td></tr> |
| <tr> <td class="numLine"> 404</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 405</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 406</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr> |
| <tr> <td class="numLine"> 407</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * Converts the specified UTF-8 Base64 encoded String and decodes it to a raw Base64 decoded byte array.</span></pre></td></tr> |
| <tr> <td class="numLine"> 408</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr> |
| <tr> <td class="numLine"> 409</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @param base64Encoded a UTF-8 Base64 encoded String</span></pre></td></tr> |
| <tr> <td class="numLine"> 410</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @return the raw Base64 decoded byte array.</span></pre></td></tr> |
| <tr> <td class="numLine"> 411</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr> |
| <tr> <td class="numLine"> 412</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">byte</span>[] decode(String base64Encoded) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 413</td> <td class="nbHitsCovered"> 17</td> <td class="src"><pre class="src"> <span class="keyword">byte</span>[] bytes = CodecSupport.toBytes(base64Encoded);</pre></td></tr> |
| <tr> <td class="numLineCover"> 414</td> <td class="nbHitsCovered"> 17</td> <td class="src"><pre class="src"> <span class="keyword">return</span> decode(bytes);</pre></td></tr> |
| <tr> <td class="numLine"> 415</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 416</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 417</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr> |
| <tr> <td class="numLine"> 418</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * Decodes Base64 data into octects</span></pre></td></tr> |
| <tr> <td class="numLine"> 419</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr> |
| <tr> <td class="numLine"> 420</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @param base64Data Byte array containing Base64 data</span></pre></td></tr> |
| <tr> <td class="numLine"> 421</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @return Array containing decoded data.</span></pre></td></tr> |
| <tr> <td class="numLine"> 422</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr> |
| <tr> <td class="numLine"> 423</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">byte</span>[] decode(<span class="keyword">byte</span>[] base64Data) {</pre></td></tr> |
| <tr> <td class="numLine"> 424</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">// RFC 2045 requires that we discard ALL non-Base64 characters</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 425</td> <td class="nbHitsCovered"> 17</td> <td class="src"><pre class="src"> base64Data = discardNonBase64(base64Data);</pre></td></tr> |
| <tr> <td class="numLine"> 426</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 427</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">// handle the edge case, so we don't have to worry about it later</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 428</td> <td class="nbHitsUncovered"><a title="Line 428: Conditional coverage 50% (1/2)."> 17</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 428: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (base64Data.length == 0) {</a></span></pre></td></tr> |
| <tr> <td class="numLineCover"> 429</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">new</span> <span class="keyword">byte</span>[0];</span></pre></td></tr> |
| <tr> <td class="numLine"> 430</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 431</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLineCover"> 432</td> <td class="nbHitsCovered"> 17</td> <td class="src"><pre class="src"> <span class="keyword">int</span> numberQuadruple = base64Data.length / FOURBYTE;</pre></td></tr> |
| <tr> <td class="numLine"> 433</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">byte</span> decodedData[];</pre></td></tr> |
| <tr> <td class="numLine"> 434</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">byte</span> b1, b2, b3, b4, marker0, marker1;</pre></td></tr> |
| <tr> <td class="numLine"> 435</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 436</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">// Throw away anything not in base64Data</span></pre></td></tr> |
| <tr> <td class="numLine"> 437</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLineCover"> 438</td> <td class="nbHitsCovered"> 17</td> <td class="src"><pre class="src"> <span class="keyword">int</span> encodedIndex = 0;</pre></td></tr> |
| <tr> <td class="numLine"> 439</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">int</span> dataIndex;</pre></td></tr> |
| <tr> <td class="numLine"> 440</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> {</pre></td></tr> |
| <tr> <td class="numLine"> 441</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">// this sizes the output array properly - rlw</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 442</td> <td class="nbHitsCovered"> 17</td> <td class="src"><pre class="src"> <span class="keyword">int</span> lastData = base64Data.length;</pre></td></tr> |
| <tr> <td class="numLine"> 443</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">// ignore the '=' padding</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 444</td> <td class="nbHitsCovered"><a title="Line 444: Conditional coverage 100% (2/2)."> 44</a></td> <td class="src"><pre class="src"> <a title="Line 444: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> (base64Data[lastData - 1] == PAD) {</a></pre></td></tr> |
| <tr> <td class="numLineCover"> 445</td> <td class="nbHitsUncovered"><a title="Line 445: Conditional coverage 50% (1/2)."> 27</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 445: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (--lastData == 0) {</a></span></pre></td></tr> |
| <tr> <td class="numLineCover"> 446</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">new</span> <span class="keyword">byte</span>[0];</span></pre></td></tr> |
| <tr> <td class="numLine"> 447</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 448</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLineCover"> 449</td> <td class="nbHitsCovered"> 17</td> <td class="src"><pre class="src"> decodedData = <span class="keyword">new</span> <span class="keyword">byte</span>[lastData - numberQuadruple];</pre></td></tr> |
| <tr> <td class="numLine"> 450</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 451</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLineCover"> 452</td> <td class="nbHitsCovered"><a title="Line 452: Conditional coverage 100% (2/2)."> 169</a></td> <td class="src"><pre class="src"> <a title="Line 452: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (<span class="keyword">int</span> i = 0; i < numberQuadruple; i++) {</a></pre></td></tr> |
| <tr> <td class="numLineCover"> 453</td> <td class="nbHitsCovered"> 152</td> <td class="src"><pre class="src"> dataIndex = i * 4;</pre></td></tr> |
| <tr> <td class="numLineCover"> 454</td> <td class="nbHitsCovered"> 152</td> <td class="src"><pre class="src"> marker0 = base64Data[dataIndex + 2];</pre></td></tr> |
| <tr> <td class="numLineCover"> 455</td> <td class="nbHitsCovered"> 152</td> <td class="src"><pre class="src"> marker1 = base64Data[dataIndex + 3];</pre></td></tr> |
| <tr> <td class="numLine"> 456</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLineCover"> 457</td> <td class="nbHitsCovered"> 152</td> <td class="src"><pre class="src"> b1 = base64Alphabet[base64Data[dataIndex]];</pre></td></tr> |
| <tr> <td class="numLineCover"> 458</td> <td class="nbHitsCovered"> 152</td> <td class="src"><pre class="src"> b2 = base64Alphabet[base64Data[dataIndex + 1]];</pre></td></tr> |
| <tr> <td class="numLine"> 459</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLineCover"> 460</td> <td class="nbHitsCovered"><a title="Line 460: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> 152</a></td> <td class="src"><pre class="src"> <a title="Line 460: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> <span class="keyword">if</span> (marker0 != PAD && marker1 != PAD) {</a></pre></td></tr> |
| <tr> <td class="numLine"> 461</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">// No PAD e.g 3cQl</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 462</td> <td class="nbHitsCovered"> 137</td> <td class="src"><pre class="src"> b3 = base64Alphabet[marker0];</pre></td></tr> |
| <tr> <td class="numLineCover"> 463</td> <td class="nbHitsCovered"> 137</td> <td class="src"><pre class="src"> b4 = base64Alphabet[marker1];</pre></td></tr> |
| <tr> <td class="numLine"> 464</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLineCover"> 465</td> <td class="nbHitsCovered"> 137</td> <td class="src"><pre class="src"> decodedData[encodedIndex] = (<span class="keyword">byte</span>) (b1 << 2 | b2 >> 4);</pre></td></tr> |
| <tr> <td class="numLineCover"> 466</td> <td class="nbHitsCovered"> 137</td> <td class="src"><pre class="src"> decodedData[encodedIndex + 1] = (<span class="keyword">byte</span>) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf));</pre></td></tr> |
| <tr> <td class="numLineCover"> 467</td> <td class="nbHitsCovered"> 137</td> <td class="src"><pre class="src"> decodedData[encodedIndex + 2] = (<span class="keyword">byte</span>) (b3 << 6 | b4);</pre></td></tr> |
| <tr> <td class="numLineCover"> 468</td> <td class="nbHitsCovered"><a title="Line 468: Conditional coverage 100% (2/2)."> 15</a></td> <td class="src"><pre class="src"> <a title="Line 468: Conditional coverage 100% (2/2)."> } <span class="keyword">else</span> <span class="keyword">if</span> (marker0 == PAD) {</a></pre></td></tr> |
| <tr> <td class="numLine"> 469</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">// Two PAD e.g. 3c[Pad][Pad]</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 470</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> decodedData[encodedIndex] = (<span class="keyword">byte</span>) (b1 << 2 | b2 >> 4);</pre></td></tr> |
| <tr> <td class="numLine"> 471</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr> |
| <tr> <td class="numLine"> 472</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">// One PAD e.g. 3cQ[Pad]</span></pre></td></tr> |
| <tr> <td class="numLineCover"> 473</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> b3 = base64Alphabet[marker0];</pre></td></tr> |
| <tr> <td class="numLineCover"> 474</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> decodedData[encodedIndex] = (<span class="keyword">byte</span>) (b1 << 2 | b2 >> 4);</pre></td></tr> |
| <tr> <td class="numLineCover"> 475</td> <td class="nbHitsCovered"> 3</td> <td class="src"><pre class="src"> decodedData[encodedIndex + 1] = (<span class="keyword">byte</span>) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf));</pre></td></tr> |
| <tr> <td class="numLine"> 476</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLineCover"> 477</td> <td class="nbHitsCovered"> 152</td> <td class="src"><pre class="src"> encodedIndex += 3;</pre></td></tr> |
| <tr> <td class="numLine"> 478</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLineCover"> 479</td> <td class="nbHitsCovered"> 17</td> <td class="src"><pre class="src"> <span class="keyword">return</span> decodedData;</pre></td></tr> |
| <tr> <td class="numLine"> 480</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 481</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 482</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr> |
| <tr> <td class="numLine"> 483</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * Discards any characters outside of the base64 alphabet, per the requirements on page 25 of RFC 2045 - "Any</span></pre></td></tr> |
| <tr> <td class="numLine"> 484</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * characters outside of the base64 alphabet are to be ignored in base64 encoded data."</span></pre></td></tr> |
| <tr> <td class="numLine"> 485</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr> |
| <tr> <td class="numLine"> 486</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @param data The base-64 encoded data to groom</span></pre></td></tr> |
| <tr> <td class="numLine"> 487</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> * @return The data, less non-base64 characters (see RFC 2045).</span></pre></td></tr> |
| <tr> <td class="numLine"> 488</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr> |
| <tr> <td class="numLine"> 489</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> <span class="keyword">static</span> <span class="keyword">byte</span>[] discardNonBase64(<span class="keyword">byte</span>[] data) {</pre></td></tr> |
| <tr> <td class="numLineCover"> 490</td> <td class="nbHitsCovered"> 17</td> <td class="src"><pre class="src"> <span class="keyword">byte</span> groomedData[] = <span class="keyword">new</span> <span class="keyword">byte</span>[data.length];</pre></td></tr> |
| <tr> <td class="numLineCover"> 491</td> <td class="nbHitsCovered"> 17</td> <td class="src"><pre class="src"> <span class="keyword">int</span> bytesCopied = 0;</pre></td></tr> |
| <tr> <td class="numLine"> 492</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLineCover"> 493</td> <td class="nbHitsCovered"><a title="Line 493: Conditional coverage 100% (2/2)."> 631</a></td> <td class="src"><pre class="src"> <a title="Line 493: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (<span class="keyword">byte</span> aByte : data) {</a></pre></td></tr> |
| <tr> <td class="numLineCover"> 494</td> <td class="nbHitsUncovered"><a title="Line 494: Conditional coverage 50% (1/2)."> 614</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 494: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (isBase64(aByte)) {</a></span></pre></td></tr> |
| <tr> <td class="numLineCover"> 495</td> <td class="nbHitsCovered"> 614</td> <td class="src"><pre class="src"> groomedData[bytesCopied++] = aByte;</pre></td></tr> |
| <tr> <td class="numLine"> 496</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 497</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 498</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLineCover"> 499</td> <td class="nbHitsCovered"> 17</td> <td class="src"><pre class="src"> <span class="keyword">byte</span> packedData[] = <span class="keyword">new</span> <span class="keyword">byte</span>[bytesCopied];</pre></td></tr> |
| <tr> <td class="numLine"> 500</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLineCover"> 501</td> <td class="nbHitsCovered"> 17</td> <td class="src"><pre class="src"> System.arraycopy(groomedData, 0, packedData, 0, bytesCopied);</pre></td></tr> |
| <tr> <td class="numLine"> 502</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLineCover"> 503</td> <td class="nbHitsCovered"> 17</td> <td class="src"><pre class="src"> <span class="keyword">return</span> packedData;</pre></td></tr> |
| <tr> <td class="numLine"> 504</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| <tr> <td class="numLine"> 505</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> </pre></td></tr> |
| <tr> <td class="numLine"> 506</td> <td class="nbHits"> </td> |
| <td class="src"><pre class="src"> }</pre></td></tr> |
| </table> |
| |
| <div class="footer">Report generated by <a href="http://cobertura.sourceforge.net/" target="_top">Cobertura</a> 1.9.4.1 on 2/25/14 6:20 PM.</div> |
| </body> |
| </html> |