package org.jacorb.security.ssl.sun_jsse;
/*
* JacORB - a free Java ORB
*
* Copyright (C) 2000-2014 Gerald Brose / The JacORB Team.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
import java.security.SecureRandom;
/**
* <code>JSRandomImplThread</code> is another basic example showing an
* initialization of SecureRandom..
*
* @author Nick Cross
*/
public class JSRandomImplThread implements JSRandom
{
/**
* Static store <code>secRandom</code>.
*/
private static SecureRandom secRandom;
private final static Object lock = new Object();
private static boolean initializing = false;
/**
* <code>initSecureRandom</code> may be called from a developers main
* program in order to init the SecureRandom ahead of time.
*/
public static void initSecureRandom()
{
synchronized(lock)
{
if (secRandom != null)
{
return;
}
initializing = true;
}
(new Thread()
{
public void run()
{
SecureRandom random = new SecureRandom();
random.nextInt();
synchronized (lock)
{
secRandom = random;
initializing = false;
lock.notifyAll();
}
}
}).start();
}
/**
* <code>getSecureRandom</code> returns the initialized secure random or null.
* the initialization is done in initSecureRandom. this method will block
* if a initialization currently is in progress.
*
* @see #initSecureRandom
* @return a <code>SecureRandom</code> value
*/
public SecureRandom getSecureRandom()
{
synchronized(lock)
{
while(initializing)
{
try
{
lock.wait();
}
catch(InterruptedException e)
{
// ignored
}
}
return secRandom;
}
}
/**
* <code>toString</code> override for debug.
*
* @return a <code>String</code> value
*/
public String toString()
{
return "JacORB thread example JSRandom (" + super.toString() + ')';
}
}