|
6 | 6 | import org.bouncycastle.crypto.digests.SHA512Digest; |
7 | 7 | import org.bouncycastle.crypto.generators.HKDFBytesGenerator; |
8 | 8 | import org.bouncycastle.crypto.params.HKDFParameters; |
| 9 | +import org.bouncycastle.util.Arrays; |
9 | 10 |
|
10 | 11 | import javax.crypto.KDFParameters; |
11 | 12 | import javax.crypto.KDFSpi; |
|
17 | 18 | import java.security.spec.AlgorithmParameterSpec; |
18 | 19 | import java.util.ArrayList; |
19 | 20 | import java.util.List; |
20 | | -import org.bouncycastle.util.Arrays; |
21 | 21 |
|
22 | 22 | class HKDFSpi |
23 | 23 | extends KDFSpi |
@@ -139,24 +139,25 @@ private byte[] flattenSecretKeys(List<SecretKey> keys) |
139 | 139 | { |
140 | 140 | return keys.get(0).getEncoded(); |
141 | 141 | } |
| 142 | + |
142 | 143 | int len = 0; |
143 | 144 | int off = 0; |
144 | 145 |
|
145 | | - List<byte[]> encoding = new ArrayList<byte[]>(); |
146 | | - for (int i = 0; i < keys.size(); i++) |
| 146 | + ArrayList<byte[]> encodings = new ArrayList<byte[]>(keys.size()); |
| 147 | + for (SecretKey key : keys) |
147 | 148 | { |
148 | | - encoding.add(keys.get(i).getEncoded()); |
149 | | - len += encoding.get(i).length; |
| 149 | + byte[] encoding = key.getEncoded(); |
| 150 | + encodings.add(encoding); |
| 151 | + len += encoding.length; |
150 | 152 | } |
| 153 | + |
151 | 154 | byte[] res = new byte[len]; |
152 | | - for (int i = 0; i < encoding.size(); i++) |
| 155 | + for (byte[] encoding : encodings) |
153 | 156 | { |
154 | | - System.arraycopy(encoding.get(i), 0, res, off, encoding.get(i).length); |
155 | | - off += encoding.get(i).length; |
| 157 | + System.arraycopy(encoding, 0, res, off, encoding.length); |
| 158 | + off += encoding.length; |
| 159 | + Arrays.clear(encoding); |
156 | 160 | } |
157 | | - |
158 | | - encoding.clear(); |
159 | | - |
160 | 161 | return res; |
161 | 162 | } |
162 | 163 |
|
|
0 commit comments