Пример #1
0
char *
be_tls_get_peer_finished(Port *port, size_t *len)
{
	char		dummy[1];
	char	   *result;

	/*
	 * OpenSSL does not offer an API to directly get the length of the
	 * expected TLS Finished message, so just do a dummy call to grab this
	 * information to allow caller to do an allocation with a correct size.
	 */
	*len = SSL_get_peer_finished(port->ssl, dummy, sizeof(dummy));
	result = palloc(*len);
	(void) SSL_get_peer_finished(port->ssl, result, *len);

	return result;
}
Пример #2
0
static int
tlso_session_unique( tls_session *sess, struct berval *buf, int is_server)
{
	tlso_session *s = (tlso_session *)sess;

	/* Usually the client sends the finished msg. But if the
	 * session was resumed, the server sent the msg.
	 */
	if (SSL_session_reused(s) ^ !is_server)
		buf->bv_len = SSL_get_finished(s, buf->bv_val, buf->bv_len);
	else
		buf->bv_len = SSL_get_peer_finished(s, buf->bv_val, buf->bv_len);
	return buf->bv_len;
}
Пример #3
0
/**
 * Gets the latest "Finished" message received.
 */
static int meth_getpeerfinished(lua_State *L)
{
  size_t len = 0;
  char *buffer = NULL;
  p_ssl ssl = (p_ssl)luaL_checkudata(L, 1, "SSL:Connection");
  if (ssl->state != LSEC_STATE_CONNECTED) {
    lua_pushnil(L);
    lua_pushstring(L, "closed");
    return 0;
  }
  if ((len = SSL_get_peer_finished(ssl->ssl, NULL, 0)) == 0)
    return 0;
  buffer = (char*)malloc(len);
  if (!buffer) {
    lua_pushnil(L);
    lua_pushstring(L, "out of memory");
    return 2;
  }
  SSL_get_peer_finished(ssl->ssl, buffer, len);
  lua_pushlstring(L, buffer, len);
  free(buffer);
  return 1;
}
Пример #4
0
extern "C" int32_t CryptoNative_SslGetPeerFinished(SSL* ssl, void* buf, int32_t count)
{
    size_t result = SSL_get_peer_finished(ssl, buf, size_t(count));
    assert(result <= INT32_MAX);
    return static_cast<int32_t>(result);
}