Examples of SSLEngineResult


Examples of javax.net.ssl.SSLEngineResult

    ByteBuffer snetBuffer = ByteBuffer.allocate(serverEngine.getSession().getPacketBufferSize());
   
    clientEngine.beginHandshake();
    serverEngine.beginHandshake();
   
    SSLEngineResult result = null;
    SSLEngineResult.HandshakeStatus srv = serverEngine.getHandshakeStatus();
    SSLEngineResult.HandshakeStatus cli = clientEngine.getHandshakeStatus();
   
    while (srv != HandshakeStatus.NOT_HANDSHAKING
           && cli != HandshakeStatus.NOT_HANDSHAKING)
      {
        if (cli == HandshakeStatus.NEED_WRAP)
          {
            if (srv != HandshakeStatus.NEED_UNWRAP)
              {
                throw new SSLException("invalid server handshake state: " + srv);
              }
           
            result = clientEngine.wrap(empty, cnetBuffer);
            if (result.getStatus() != Status.OK)
              throw new SSLException("unexpected status after wrap: "
                                     + result.getStatus());
            cli = result.getHandshakeStatus();
            cnetBuffer.flip();
            result = serverEngine.unwrap(cnetBuffer, empty);
            cnetBuffer.compact();
            if (result.getStatus() != Status.OK)
              throw new SSLException("unexpected status after unwrap: "
                                     + result.getStatus());
            srv = result.getHandshakeStatus();
           
            if (cli == HandshakeStatus.NEED_TASK)
              {
                Runnable task = null;
                while ((task = clientEngine.getDelegatedTask()) != null)
                  task.run();
                cli = clientEngine.getHandshakeStatus();
              }
           
            if (srv == HandshakeStatus.NEED_TASK)
              {
                Runnable task = null;
                while ((task = serverEngine.getDelegatedTask()) != null)
                  task.run();
                srv = serverEngine.getHandshakeStatus();
              }
          }
        else if (cli == HandshakeStatus.NEED_UNWRAP)
          {
            if (srv != HandshakeStatus.NEED_WRAP)
              {
                throw new SSLException("invalid server handshake state: " + srv);
              }
           
            result = serverEngine.wrap(empty, snetBuffer);
            if (result.getStatus() != Status.OK)
              throw new SSLException("unexpected status after wrap: "
                                     + result.getStatus());
            srv = result.getHandshakeStatus();
            snetBuffer.flip();
            result = clientEngine.unwrap(snetBuffer, empty);
            snetBuffer.compact();
            if (result.getStatus() != Status.OK)
              throw new SSLException("unexpected status after unwrap: "
                                     + result.getStatus());
            cli = result.getHandshakeStatus();

            if (cli == HandshakeStatus.NEED_TASK)
              {
                Runnable task = null;
                while ((task = clientEngine.getDelegatedTask()) != null)
                  task.run();
                cli = clientEngine.getHandshakeStatus();
              }
           
            if (srv == HandshakeStatus.NEED_TASK)
              {
                Runnable task = null;
                while ((task = serverEngine.getDelegatedTask()) != null)
                  task.run();
                srv = serverEngine.getHandshakeStatus();
              }
          }
        else if (cli == HandshakeStatus.NEED_TASK)
          {
            throw new SSLException("invalid initial state: " + cli);
          }
        else if (cli == HandshakeStatus.FINISHED)
          {
            if (srv != HandshakeStatus.FINISHED)
              throw new SSLException("invalid final server state: " + srv);
            break;
          }
      }
   
    ByteBuffer appBuffer = ByteBuffer.allocate(serverEngine.getSession().getApplicationBufferSize());
    Charset cs = Charset.forName("US-ASCII");
    CharsetEncoder enc = cs.newEncoder();
    enc.encode(CharBuffer.wrap(TEST_MESSAGE), appBuffer, true);
    appBuffer.flip();
    result = clientEngine.wrap(appBuffer, cnetBuffer);
    if (result.getStatus() != Status.OK)
      throw new SSLException("unexpected status: " + result.getStatus());
    cnetBuffer.flip();
    appBuffer.clear();
    result = serverEngine.unwrap(cnetBuffer, appBuffer);
    if (result.getStatus() != Status.OK)
      throw new SSLException("unexpected status: " + result.getStatus());
    appBuffer.flip();
    String msg = cs.decode(appBuffer).toString();
    if (!msg.equals(TEST_MESSAGE))
      throw new SSLException("message decode failed");

    appBuffer.clear();
    enc.encode(CharBuffer.wrap(msg), appBuffer, true);
    appBuffer.flip();
    result = serverEngine.wrap(appBuffer, snetBuffer);
    if (result.getStatus() != Status.OK)
      throw new SSLException("unexpected status: " + result.getStatus());
    snetBuffer.flip();
    appBuffer.clear();
    result = clientEngine.unwrap(snetBuffer, appBuffer);
    if (result.getStatus() != Status.OK)
      throw new SSLException("unexpected status: " + result.getStatus());
    appBuffer.flip();
    msg = cs.decode(appBuffer).toString();
    if (!msg.equals(TEST_MESSAGE))
      throw new SSLException("message decode (2) failed");
  }
View Full Code Here

Examples of javax.net.ssl.SSLEngineResult

        createOutNetBuffer(src.remaining());

        // Loop until there is no more data in src
        while (src.hasRemaining()) {

            SSLEngineResult result = sslEngine.wrap(src, outNetBuffer.buf());
            if (result.getStatus() == SSLEngineResult.Status.OK) {
                if (result.getHandshakeStatus() == SSLEngineResult.HandshakeStatus.NEED_TASK) {
                    doTasks();
                }
            } else if (result.getStatus() == SSLEngineResult.Status.BUFFER_OVERFLOW) {
                outNetBuffer.capacity(outNetBuffer.capacity() << 1);
                outNetBuffer.limit(outNetBuffer.capacity());
            } else {
                throw new SSLException("SSLEngine error during encrypt: "
                        + result.getStatus() + " src: " + src
                        + "outNetBuffer: " + outNetBuffer);
            }
        }

        outNetBuffer.flip();
View Full Code Here

Examples of javax.net.ssl.SSLEngineResult

        }

        sslEngine.closeOutbound();

        createOutNetBuffer(0);
        SSLEngineResult result;
        for (;;) {
            result = sslEngine.wrap(emptyBuffer.buf(), outNetBuffer.buf());
            if (result.getStatus() == SSLEngineResult.Status.BUFFER_OVERFLOW) {
                outNetBuffer.capacity(outNetBuffer.capacity() << 1);
                outNetBuffer.limit(outNetBuffer.capacity());
            } else {
                break;
            }
        }

        if (result.getStatus() != SSLEngineResult.Status.CLOSED) {
            throw new SSLException("Improper close state: " + result);
        }
        outNetBuffer.flip();
        return true;
    }
View Full Code Here

Examples of javax.net.ssl.SSLEngineResult

                // cannot call wrap with data left on the buffer
                if (outNetBuffer != null && outNetBuffer.hasRemaining()) {
                    break;
                }

                SSLEngineResult result;
                createOutNetBuffer(0);
                for (;;) {
                    result = sslEngine.wrap(emptyBuffer.buf(), outNetBuffer.buf());
                    if (result.getStatus() == SSLEngineResult.Status.BUFFER_OVERFLOW) {
                        outNetBuffer.capacity(outNetBuffer.capacity() << 1);
                        outNetBuffer.limit(outNetBuffer.capacity());
                    } else {
                        break;
                    }
                }

                outNetBuffer.flip();
                handshakeStatus = result.getHandshakeStatus();
                writeNetBuffer(nextFilter);
            } else {
                throw new IllegalStateException("Invalid Handshaking State"
                        + handshakeStatus);
            }
View Full Code Here

Examples of javax.net.ssl.SSLEngineResult

        if (inNetBuffer == null || !inNetBuffer.hasRemaining()) {
            return;
        }

        SSLEngineResult res = unwrap0();

        // prepare to be written again
        if (inNetBuffer.hasRemaining()) {
            inNetBuffer.compact();
        } else {
View Full Code Here

Examples of javax.net.ssl.SSLEngineResult

        if (inNetBuffer == null || !inNetBuffer.hasRemaining()) {
            // Need more data.
            return SSLEngineResult.Status.BUFFER_UNDERFLOW;
        }

        SSLEngineResult res = unwrap0();
        handshakeStatus = res.getHandshakeStatus();

        checkStatus(res);

        // If handshake finished, no data was produced, and the status is still ok,
        // try to unwrap more
        if (handshakeStatus == SSLEngineResult.HandshakeStatus.FINISHED
                && res.getStatus() == SSLEngineResult.Status.OK
                && inNetBuffer.hasRemaining()) {
            res = unwrap0();

            // prepare to be written again
            if (inNetBuffer.hasRemaining()) {
                inNetBuffer.compact();
            } else {
                inNetBuffer = null;
            }

            renegotiateIfNeeded(nextFilter, res);
        } else {
            // prepare to be written again
            if (inNetBuffer.hasRemaining()) {
                inNetBuffer.compact();
            } else {
                inNetBuffer = null;
            }
        }

        return res.getStatus();
    }
View Full Code Here

Examples of javax.net.ssl.SSLEngineResult

            appBuffer = IoBuffer.allocate(inNetBuffer.remaining());
        } else {
            appBuffer.expand(inNetBuffer.remaining());
        }

        SSLEngineResult res;
        do {
            res = sslEngine.unwrap(inNetBuffer.buf(), appBuffer.buf());
            if (res.getStatus() == SSLEngineResult.Status.BUFFER_OVERFLOW) {
                appBuffer.capacity(appBuffer.capacity() << 1);
                appBuffer.limit(appBuffer.capacity());
                continue;
            }
        } while ((res.getStatus() == SSLEngineResult.Status.OK || res.getStatus() == SSLEngineResult.Status.BUFFER_OVERFLOW) &&
                 (handshakeComplete && res.getHandshakeStatus() == SSLEngineResult.HandshakeStatus.NOT_HANDSHAKING ||
                  res.getHandshakeStatus() == SSLEngineResult.HandshakeStatus.NEED_UNWRAP));

        return res;
    }
View Full Code Here

Examples of javax.net.ssl.SSLEngineResult

                        break;
                    }

                    ByteBuffer outAppBuf = pendingWrite.outAppBuf;

                    SSLEngineResult result;
                    try {
                        result = engine.wrap(outAppBuf, outNetBuf);
                    } finally {
                        if (!outAppBuf.hasRemaining()) {
                            pendingUnencryptedWrites.remove();
                        }
                    }
                    if (result.bytesProduced() > 0) {
                        outNetBuf.flip();
                        msg = ChannelBuffers.buffer(outNetBuf.remaining());
                        msg.writeBytes(outNetBuf.array(), 0, msg.capacity());
                        outNetBuf.clear();

                        if (pendingWrite.outAppBuf.hasRemaining()) {
                            // pendingWrite's future shouldn't be notified if
                            // only partial data is written.
                            future = succeededFuture(channel);
                        } else {
                            future = pendingWrite.future;
                        }

                        MessageEvent encryptedWrite = messageEvent(channel, future, msg);
                        if (Thread.holdsLock(pendingEncryptedWrites)) {
                            pendingEncryptedWrites.offer(encryptedWrite);
                        } else {
                            synchronized (pendingEncryptedWrites) {
                                pendingEncryptedWrites.offer(encryptedWrite);
                            }
                        }
                    } else {
                        switch (result.getHandshakeStatus()) {
                        case NEED_WRAP:
                            if (outAppBuf.hasRemaining()) {
                                break;
                            } else {
                                break loop;
View Full Code Here

Examples of javax.net.ssl.SSLEngineResult

    private ChannelFuture wrapNonAppData(ChannelHandlerContext ctx, Channel channel) throws SSLException {
        ChannelFuture future = null;
        ByteBuffer outNetBuf = bufferPool.acquire();

        SSLEngineResult result;
        try {
            for (;;) {
                result = engine.wrap(EMPTY_BUFFER, outNetBuf);

                if (result.bytesProduced() > 0) {
                    outNetBuf.flip();
                    ChannelBuffer msg = ChannelBuffers.buffer(outNetBuf.remaining());
                    msg.writeBytes(outNetBuf.array(), 0, msg.capacity());
                    outNetBuf.clear();
                    if (channel.isConnected()) {
                        future = future(channel);
                        write(ctx, channel, future, msg);
                    }
                }

                switch (result.getHandshakeStatus()) {
                case FINISHED:
                    setHandshakeSuccess();
                    break;
                case NEED_TASK:
                    runDelegatedTasks();
                    break;
                }

                if (result.bytesProduced() == 0) {
                    break;
                }
            }
        } catch (SSLException e) {
            if (handshaking) {
View Full Code Here

Examples of javax.net.ssl.SSLEngineResult

        ByteBuffer outAppBuf = bufferPool.acquire();

        try {
            loop:
            for (;;) {
                SSLEngineResult result = engine.unwrap(inNetBuf, outAppBuf);

                switch (result.getHandshakeStatus()) {
                case NEED_UNWRAP:
                    if (inNetBuf.hasRemaining()) {
                        break;
                    } else {
                        break loop;
View Full Code Here
TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.