public void performTest() { checkMask(1, new MGF1BytesGenerator(new ShortenedDigest(new SHA256Digest(), 20)), seed1, mask1); checkMask(2, new MGF1BytesGenerator(new SHA1Digest()), seed2, mask2); checkMask(3, new MGF1BytesGenerator(new ShortenedDigest(new SHA256Digest(), 20)), seed3, mask3); try { new MGF1BytesGenerator(new SHA1Digest()).generateBytes(new byte[10], 0, 20); fail("short input array not caught"); } catch (DataLengthException e) { // expected } }
public byte[] getUnpaddedData(byte[] paddedData) { byte[] seed = new byte[dig.getDigestSize()]; byte[] mask = new byte[length - dig.getDigestSize()]; System.arraycopy(paddedData, 0, seed, 0, seed.length); MGF1BytesGenerator maskGen = new MGF1BytesGenerator(dig); maskGen.init(new MGFParameters(seed)); maskGen.generateBytes(mask, 0, mask.length); for (int i = 0; i != mask.length; i++) { paddedData[i + seed.length] ^= mask[i]; } int end = 0; for (int i = paddedData.length - 1; i != seed.length; i--) { if (paddedData[i] == 0) { end = i; break; } } if (end == 0) { throw new IllegalStateException("bad padding in encoding"); } byte[] data = new byte[end - seed.length]; System.arraycopy(paddedData, seed.length, data, 0, data.length); return data; }
public byte[] getPaddedData(byte[] data) { byte[] bytes = new byte[length]; byte[] seed = new byte[dig.getDigestSize()]; byte[] mask = new byte[length - dig.getDigestSize()]; if (random == null) { random = new SecureRandom(); } random.nextBytes(seed); MGF1BytesGenerator maskGen = new MGF1BytesGenerator(dig); maskGen.init(new MGFParameters(seed)); maskGen.generateBytes(mask, 0, mask.length); System.arraycopy(seed, 0, bytes, 0, seed.length); System.arraycopy(data, 0, bytes, seed.length, data.length); for (int i = seed.length + data.length + 1; i != bytes.length; i++) { bytes[i] = (byte)(1 | (random.nextInt() & 0xff)); } for (int i = 0; i != mask.length; i++) { bytes[i + seed.length] ^= mask[i]; } return bytes; }
public byte[] getPaddedData(byte[] data) { byte[] bytes = new byte[length]; byte[] seed = new byte[dig.getDigestSize()]; byte[] mask = new byte[length - dig.getDigestSize()]; if (random == null) { random = new SecureRandom(); } random.nextBytes(seed); MGF1BytesGenerator maskGen = new MGF1BytesGenerator(dig); maskGen.init(new MGFParameters(seed)); maskGen.generateBytes(mask, 0, mask.length); System.arraycopy(seed, 0, bytes, 0, seed.length); System.arraycopy(data, 0, bytes, seed.length, data.length); for (int i = seed.length + data.length + 1; i != bytes.length; i++) { bytes[i] = (byte)(1 + random.nextInt(255)); } for (int i = 0; i != mask.length; i++) { bytes[i + seed.length] ^= mask[i]; } return bytes; }
public byte[] getPaddedData(byte[] data) { byte[] bytes = new byte[length]; byte[] seed = new byte[dig.getDigestSize()]; byte[] mask = new byte[length - dig.getDigestSize()]; if (random == null) { random = new SecureRandom(); } random.nextBytes(seed); MGF1BytesGenerator maskGen = new MGF1BytesGenerator(dig); maskGen.init(new MGFParameters(seed)); maskGen.generateBytes(mask, 0, mask.length); System.arraycopy(seed, 0, bytes, 0, seed.length); System.arraycopy(data, 0, bytes, seed.length, data.length); for (int i = seed.length + data.length + 1; i != bytes.length; i++) { bytes[i] = (byte)(1 + Math.abs(random.nextInt()) % 254); } for (int i = 0; i != mask.length; i++) { bytes[i + seed.length] ^= mask[i]; } return bytes; }