1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 package org.chromium.content.browser.crypto; 6 7 import java.io.FileInputStream; 8 import java.io.IOException; 9 import java.security.GeneralSecurityException; 10 11 /** 12 * Generates byte arrays for use in crypto algorithms. Defaults to pulling random data 13 * from /dev/urandom, but can be overwritten for other generation methods. 14 */ 15 public class ByteArrayGenerator { 16 /** 17 * Polls random data to generate the array. 18 * @param numBytes Length of the array to generate. 19 * @return byte[] containing randomly generated data. 20 */ getBytes(int numBytes)21 public byte[] getBytes(int numBytes) throws IOException, GeneralSecurityException { 22 FileInputStream fis = null; 23 try { 24 fis = new FileInputStream("/dev/urandom"); 25 byte[] bytes = new byte[numBytes]; 26 if (bytes.length != fis.read(bytes)) { 27 throw new GeneralSecurityException("Not enough random data available"); 28 } 29 return bytes; 30 } finally { 31 if (fis != null) { 32 fis.close(); 33 } 34 } 35 } 36 } 37