cn = new SecureRandom ().generateSeed (16);
cn = new byte[16]; getDefaultPRNG().nextBytes(cn);
  private byte[] sendIdentities() throws SaslException  {    if (DEBUG && debuglevel > 8)      debug(TRACE, "==> sendIdentities()");    // If necessary, prompt the client for the username and password    getUsernameAndPassword();    if (DEBUG && debuglevel > 6)      debug(TRACE, "Password: \"" + new String(password.getPassword()) + "\"");    if (DEBUG && debuglevel > 6)      debug(TRACE, "Encoding U (username): \"" + U + "\"");    if (DEBUG && debuglevel > 6)      debug(TRACE, "Encoding I (userid): \"" + authorizationID + "\"");    // if session re-use generate new 16-byte nonce    if (sid.length != 0)      {        cn = new SecureRandom ().generateSeed (16);      }    else      {        cn = new byte[0];      }    final OutputBuffer frameOut = new OutputBuffer();    try      {        frameOut.setText(U);        frameOut.setText(authorizationID);        frameOut.setEOS(sid); // session ID to re-use        frameOut.setOS(cn); // client nonce        frameOut.setEOS(channelBinding);      }    catch (IOException x)      {        if (x instanceof SaslException)          {            throw (SaslException) x;          }        throw new AuthenticationException("sendIdentities()", x);      }    final byte[] result = frameOut.encode();    if (DEBUG && debuglevel > 8)      debug(TRACE, "<== sendIdentities()");    if (DEBUG && debuglevel > 2)      debug(INFO, "C: " + Util.dumpString(result));    if (DEBUG && debuglevel > 2)      debug(INFO, "  U = " + U);    if (DEBUG && debuglevel > 2)      debug(INFO, "  I = " + authorizationID);    if (DEBUG && debuglevel > 2)      debug(INFO, "sid = " + new String(sid));    if (DEBUG && debuglevel > 2)      debug(INFO, " cn = " + Util.dumpString(cn));    if (DEBUG && debuglevel > 2)      debug(INFO, "cCB = " + Util.dumpString(channelBinding));    return result;  }