mirror of
https://github.com/esp8266/Arduino.git
synced 2025-06-12 01:53:07 +03:00
new trunk
git-svn-id: svn://svn.code.sf.net/p/axtls/code/trunk@78 9a5d90b5-6617-0410-8a86-bb477d3ed2e3
This commit is contained in:
93
bindings/java/Makefile
Normal file
93
bindings/java/Makefile
Normal file
@ -0,0 +1,93 @@
|
||||
#
|
||||
# Copyright(C) 2006 Cameron Rich
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program 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 General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#
|
||||
|
||||
include ../../config/.config
|
||||
include ../../config/makefile.conf
|
||||
include ../../config/makefile.java.conf
|
||||
|
||||
all: lib jar
|
||||
|
||||
JAR=../../$(STAGE)/axtls.jar
|
||||
|
||||
ifdef CONFIG_PLATFORM_WIN32
|
||||
TARGET=../../$(STAGE)/axtlsj.dll
|
||||
else
|
||||
TARGET=../../$(STAGE)/libaxtlsj.so
|
||||
endif
|
||||
|
||||
lib: $(TARGET)
|
||||
axTLSj_wrap.o : axTLSj_wrap.c
|
||||
|
||||
JAVA_FILES= \
|
||||
axtlsjJNI.java \
|
||||
axtlsjConstants.java \
|
||||
axtlsj.java \
|
||||
SSLReadHolder.java \
|
||||
SSL.java \
|
||||
SSLUtil.java \
|
||||
SSLCTX.java \
|
||||
SSLServer.java \
|
||||
SSLClient.java
|
||||
|
||||
OBJ=axTLSj_wrap.o
|
||||
|
||||
AXOLOTLS_HOME=../..
|
||||
SSL_HOME=$(AXOLOTLS_HOME)/ssl
|
||||
CONFIG_HOME=$(AXOLOTLS_HOME)/config
|
||||
JAVA_CLASSES:=$(JAVA_FILES:%.java=classes/axTLSj/%.class)
|
||||
|
||||
ifdef CONFIG_PLATFORM_WIN32
|
||||
CFLAGS += /I"$(shell cygpath -w $(SSL_HOME))"
|
||||
CFLAGS += /I"$(shell cygpath -w $(CONFIG_HOME))"
|
||||
LDFLAGS += axtls.lib /libpath:"../../$(STAGE)"
|
||||
|
||||
include ../../config/makefile.post
|
||||
|
||||
$(TARGET) : $(OBJ)
|
||||
$(LD) $(LDFLAGS) $(LDSHARED) /out:$@ $(OBJ)
|
||||
else # Not Win32
|
||||
|
||||
ifdef CONFIG_PLATFORM_CYGWIN
|
||||
SSL_HOME:=$(shell cygpath -u $(SSL_HOME))
|
||||
CONFIG_HOME:=$(shell cygpath -u $(CONFIG_HOME))
|
||||
endif
|
||||
|
||||
CFLAGS += -I$(SSL_HOME)
|
||||
CFLAGS += -I$(CONFIG_HOME)
|
||||
|
||||
$(TARGET) : $(OBJ)
|
||||
$(LD) $(LDFLAGS) -L ../../$(STAGE) $(LDSHARED) -o $@ $(OBJ) -laxtls
|
||||
endif
|
||||
|
||||
jar: $(OBJ) $(JAR)
|
||||
|
||||
# if we are doing the samples then defer creating the jar until then
|
||||
$(JAR): $(JAVA_CLASSES)
|
||||
ifndef CONFIG_JAVA_SAMPLES
|
||||
jar cvf $@ -C classes axTLSj
|
||||
else
|
||||
@if [ ! -f $(JAR) ]; then touch $(JAR); fi
|
||||
endif
|
||||
|
||||
classes/axTLSj/%.class : %.java
|
||||
javac -d classes -classpath classes $^
|
||||
|
||||
clean::
|
||||
@rm -f $(JAR) $(TARGET) SWIG* axtls* *.i *.c
|
||||
@rm -fr classes/*
|
||||
|
125
bindings/java/SSL.java
Normal file
125
bindings/java/SSL.java
Normal file
@ -0,0 +1,125 @@
|
||||
/*
|
||||
* Copyright(C) 2006 Cameron Rich
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2.1 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program 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 Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
/*
|
||||
* A wrapper around the unmanaged interface to give a semi-decent Java API
|
||||
*/
|
||||
|
||||
package axTLSj;
|
||||
|
||||
import java.io.*;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* @defgroup java_api Java API.
|
||||
*
|
||||
* Ensure that the appropriate dispose() methods are called when finished with
|
||||
* various objects - otherwise memory leaks will result.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @class SSL
|
||||
* @ingroup java_api
|
||||
* @brief A representation of an SSL connection.
|
||||
*
|
||||
*/
|
||||
public class SSL
|
||||
{
|
||||
public int m_ssl; /**< A pointer to the real SSL type */
|
||||
|
||||
/**
|
||||
* @brief Store the reference to an SSL context.
|
||||
* @param ip [in] A reference to an SSL object.
|
||||
*/
|
||||
public SSL(int ip)
|
||||
{
|
||||
m_ssl = ip;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Free any used resources on this connection.
|
||||
*
|
||||
* A "Close Notify" message is sent on this connection (if possible). It
|
||||
* is up to the application to close the socket.
|
||||
*/
|
||||
public void dispose()
|
||||
{
|
||||
axtlsj.ssl_free(m_ssl);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Return the result of a handshake.
|
||||
* @return SSL_OK if the handshake is complete and ok.
|
||||
* @see ssl.h for the error code list.
|
||||
*/
|
||||
public int handshakeStatus()
|
||||
{
|
||||
return axtlsj.ssl_handshake_status(m_ssl);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Return the SSL cipher id.
|
||||
* @return The cipher id which is one of:
|
||||
* - SSL_AES128_SHA (0x2f)
|
||||
* - SSL_AES256_SHA (0x35)
|
||||
* - SSL_RC4_128_SHA (0x05)
|
||||
* - SSL_RC4_128_MD5 (0x04)
|
||||
*/
|
||||
public byte getCipherId()
|
||||
{
|
||||
return axtlsj.ssl_get_cipher_id(m_ssl);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get the session id for a handshake.
|
||||
*
|
||||
* This will be a 32 byte sequence and is available after the first
|
||||
* handshaking messages are sent.
|
||||
* @return The session id as a 32 byte sequence.
|
||||
* @note A SSLv23 handshake may have only 16 valid bytes.
|
||||
*/
|
||||
public byte[] getSessionId()
|
||||
{
|
||||
return axtlsj.ssl_get_session_id(m_ssl);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Retrieve an X.509 distinguished name component.
|
||||
*
|
||||
* When a handshake is complete and a certificate has been exchanged,
|
||||
* then the details of the remote certificate can be retrieved.
|
||||
*
|
||||
* This will usually be used by a client to check that the server's common
|
||||
* name matches the URL.
|
||||
*
|
||||
* A full handshake needs to occur for this call to work.
|
||||
*
|
||||
* @param component [in] one of:
|
||||
* - SSL_X509_CERT_COMMON_NAME
|
||||
* - SSL_X509_CERT_ORGANIZATION
|
||||
* - SSL_X509_CERT_ORGANIZATIONAL_NAME
|
||||
* - SSL_X509_CA_CERT_COMMON_NAME
|
||||
* - SSL_X509_CA_CERT_ORGANIZATION
|
||||
* - SSL_X509_CA_CERT_ORGANIZATIONAL_NAME
|
||||
* @return The appropriate string (or null if not defined)
|
||||
*/
|
||||
public String getCertificateDN(int component)
|
||||
{
|
||||
return axtlsj.ssl_get_cert_dn(m_ssl, component);
|
||||
}
|
||||
}
|
219
bindings/java/SSLCTX.java
Normal file
219
bindings/java/SSLCTX.java
Normal file
@ -0,0 +1,219 @@
|
||||
/*
|
||||
* Copyright(C) 2006 Cameron Rich
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2.1 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program 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 Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
/*
|
||||
* A wrapper around the unmanaged interface to give a semi-decent Java API
|
||||
*/
|
||||
|
||||
package axTLSj;
|
||||
|
||||
import java.net.*;
|
||||
|
||||
/**
|
||||
* @class SSLCTX
|
||||
* @ingroup java_api
|
||||
* @brief A base object for SSLServer/SSLClient.
|
||||
*/
|
||||
public class SSLCTX
|
||||
{
|
||||
/**
|
||||
* A reference to the real client/server context.
|
||||
*/
|
||||
protected int m_ctx;
|
||||
|
||||
/**
|
||||
* @brief Establish a new client/server context.
|
||||
*
|
||||
* This function is called before any client/server SSL connections are
|
||||
* made. If multiple threads are used, then each thread will have its
|
||||
* own SSLCTX context. Any number of connections may be made with a single
|
||||
* context.
|
||||
*
|
||||
* Each new connection will use the this context's private key and
|
||||
* certificate chain. If a different certificate chain is required, then a
|
||||
* different context needs to be be used.
|
||||
*
|
||||
* @param options [in] Any particular options. At present the options
|
||||
* supported are:
|
||||
* - SSL_SERVER_VERIFY_LATER (client only): Don't stop a handshake if the
|
||||
* server authentication fails. The certificate can be authenticated later
|
||||
* with a call to verifyCert().
|
||||
* - SSL_CLIENT_AUTHENTICATION (server only): Enforce client authentication
|
||||
* i.e. each handshake will include a "certificate request" message from
|
||||
* the server.
|
||||
* - SSL_NO_DEFAULT_KEY: Don't use the default key/certificate. The user
|
||||
* will load the key/certificate explicitly.
|
||||
* - SSL_DISPLAY_BYTES (full mode build only): Display the byte sequences
|
||||
* during the handshake.
|
||||
* - SSL_DISPLAY_STATES (full mode build only): Display the state changes
|
||||
* during the handshake.
|
||||
* - SSL_DISPLAY_CERTS (full mode build only): Display the certificates that
|
||||
* are passed during a handshake.
|
||||
* - SSL_DISPLAY_RSA (full mode build only): Display the RSA key details
|
||||
* that are passed during a handshake.
|
||||
*
|
||||
* @param num_sessions [in] The number of sessions to be used for session
|
||||
* caching. If this value is 0, then there is no session caching.
|
||||
*
|
||||
* If this option is null, then the default internal private key/
|
||||
* certificate pair is used (if CONFIG_SSL_USE_DEFAULT_KEY is set).
|
||||
*
|
||||
* The resources used by this object are automatically freed.
|
||||
* @return A client/server context.
|
||||
*/
|
||||
protected SSLCTX(int options, int num_sessions)
|
||||
{
|
||||
m_ctx = axtlsj.ssl_ctx_new(options, num_sessions);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Remove a client/server context.
|
||||
*
|
||||
* Frees any used resources used by this context. Each connection will be
|
||||
* sent a "Close Notify" alert (if possible).
|
||||
*/
|
||||
public void dispose()
|
||||
{
|
||||
axtlsj.ssl_ctx_free(m_ctx);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Read the SSL data stream.
|
||||
* @param ssl [in] An SSL object reference.
|
||||
* @param rh [out] After a successful read, the decrypted data can be
|
||||
* retrieved with rh.getData(). It will be null otherwise.
|
||||
* @return The number of decrypted bytes:
|
||||
* - if > 0, then the handshaking is complete and we are returning the
|
||||
* number of decrypted bytes.
|
||||
* - SSL_OK if the handshaking stage is successful (but not yet complete).
|
||||
* - < 0 if an error.
|
||||
* @see ssl.h for the error code list.
|
||||
* @note Use rh before doing any successive ssl calls.
|
||||
*/
|
||||
public int read(SSL ssl, SSLReadHolder rh)
|
||||
{
|
||||
return axtlsj.ssl_read(ssl.m_ssl, rh);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Write to the SSL data stream.
|
||||
* @param ssl [in] An SSL obect reference.
|
||||
* @param out_data [in] The data to be written
|
||||
* @return The number of bytes sent, or if < 0 if an error.
|
||||
* @see ssl.h for the error code list.
|
||||
*/
|
||||
public int write(SSL ssl, byte[] out_data)
|
||||
{
|
||||
return axtlsj.ssl_write(ssl.m_ssl, out_data, out_data.length);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Write to the SSL data stream.
|
||||
* @param ssl [in] An SSL obect reference.
|
||||
* @param out_data [in] The data to be written
|
||||
* @param out_len [in] The number of bytes to be written
|
||||
* @return The number of bytes sent, or if < 0 if an error.
|
||||
* @see ssl.h for the error code list.
|
||||
*/
|
||||
public int write(SSL ssl, byte[] out_data, int out_len)
|
||||
{
|
||||
return axtlsj.ssl_write(ssl.m_ssl, out_data, out_len);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Find an ssl object based on a Socket reference.
|
||||
*
|
||||
* Goes through the list of SSL objects maintained in a client/server
|
||||
* context to look for a socket match.
|
||||
* @param s [in] A reference to a <A HREF="http://java.sun.com/j2se/1.4.2/docs/api">Socket</A> object.
|
||||
* @return A reference to the SSL object. Returns null if the object
|
||||
* could not be found.
|
||||
*/
|
||||
public SSL find(Socket s)
|
||||
{
|
||||
int client_fd = axtlsj.getFd(s);
|
||||
return new SSL(axtlsj.ssl_find(m_ctx, client_fd));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Authenticate a received certificate.
|
||||
*
|
||||
* This call is usually made by a client after a handshake is complete
|
||||
* and the context is in SSL_SERVER_VERIFY_LATER mode.
|
||||
* @param ssl [in] An SSL object reference.
|
||||
* @return SSL_OK if the certificate is verified.
|
||||
*/
|
||||
public int verifyCert(SSL ssl)
|
||||
{
|
||||
return axtlsj.ssl_verify_cert(ssl.m_ssl);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Force the client to perform its handshake again.
|
||||
*
|
||||
* For a client this involves sending another "client hello" message.
|
||||
* For the server is means sending a "hello request" message.
|
||||
*
|
||||
* This is a blocking call on the client (until the handshake completes).
|
||||
* @param ssl [in] An SSL object reference.
|
||||
* @return SSL_OK if renegotiation instantiation was ok
|
||||
*/
|
||||
public int renegotiate(SSL ssl)
|
||||
{
|
||||
return axtlsj.ssl_renegotiate(ssl.m_ssl);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Load a file into memory that is in binary DER or ASCII PEM format.
|
||||
*
|
||||
* These are temporary objects that are used to load private keys,
|
||||
* certificates etc into memory.
|
||||
* @param obj_type [in] The format of the file. Can be one of:
|
||||
* - SSL_OBJ_X509_CERT (no password required)
|
||||
* - SSL_OBJ_X509_CACERT (no password required)
|
||||
* - SSL_OBJ_RSA_KEY (AES128/AES256 PEM encryption supported)
|
||||
* - SSL_OBJ_P8 (RC4-128 encrypted data supported)
|
||||
* - SSL_OBJ_P12 (RC4-128 encrypted data supported)
|
||||
*
|
||||
* PEM files are automatically detected (if supported).
|
||||
* @param filename [in] The location of a file in DER/PEM format.
|
||||
* @param password [in] The password used. Can be null if not required.
|
||||
* @return SSL_OK if all ok
|
||||
*/
|
||||
public int objLoad(int obj_type, String filename, String password)
|
||||
{
|
||||
return axtlsj.ssl_obj_load(m_ctx, obj_type, filename, password);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Transfer binary data into the object loader.
|
||||
*
|
||||
* These are temporary objects that are used to load private keys,
|
||||
* certificates etc into memory.
|
||||
* @param obj_type [in] The format of the memory data.
|
||||
* @param data [in] The binary data to be loaded.
|
||||
* @param len [in] The amount of data to be loaded.
|
||||
* @param password [in] The password used. Can be null if not required.
|
||||
* @return SSL_OK if all ok
|
||||
*/
|
||||
|
||||
public int objLoad(int obj_type, byte[] data, int len, String password)
|
||||
{
|
||||
return axtlsj.ssl_obj_memory_load(m_ctx, obj_type, data, len, password);
|
||||
}
|
||||
}
|
66
bindings/java/SSLClient.java
Normal file
66
bindings/java/SSLClient.java
Normal file
@ -0,0 +1,66 @@
|
||||
/*
|
||||
* Copyright(C) 2006 Cameron Rich
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2.1 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program 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 Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
/*
|
||||
* A wrapper around the unmanaged interface to give a semi-decent Java API
|
||||
*/
|
||||
|
||||
package axTLSj;
|
||||
|
||||
import java.net.*;
|
||||
|
||||
/**
|
||||
* @class SSLClient
|
||||
* @ingroup java_api
|
||||
* @brief The client context.
|
||||
*
|
||||
* All client connections are started within a client context.
|
||||
*/
|
||||
public class SSLClient extends SSLCTX
|
||||
{
|
||||
/**
|
||||
* @brief Start a new client context.
|
||||
*
|
||||
* @see SSLCTX for details.
|
||||
*/
|
||||
public SSLClient(int options, int num_sessions)
|
||||
{
|
||||
super(options, num_sessions);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Establish a new SSL connection to an SSL server.
|
||||
*
|
||||
* It is up to the application to establish the initial socket connection.
|
||||
*
|
||||
* This is a blocking call - it will finish when the handshake is
|
||||
* complete (or has failed).
|
||||
*
|
||||
* Call dispose() when the connection is to be removed.
|
||||
* @param s [in] A reference to a <A HREF="http://java.sun.com/j2se/1.4.2/docs/api">Socket</A> object.
|
||||
* @param session_id [in] A 32 byte session id for session resumption. This
|
||||
* can be null if no session resumption is not required.
|
||||
* @return An SSL object reference. Use SSL.handshakeStatus() to check
|
||||
* if a handshake succeeded.
|
||||
*/
|
||||
public SSL connect(Socket s, byte[] session_id)
|
||||
{
|
||||
int client_fd = axtlsj.getFd(s);
|
||||
return new SSL(axtlsj.ssl_client_new(m_ctx, client_fd, session_id));
|
||||
}
|
||||
}
|
49
bindings/java/SSLReadHolder.java
Normal file
49
bindings/java/SSLReadHolder.java
Normal file
@ -0,0 +1,49 @@
|
||||
/*
|
||||
* Copyright(C) 2006 Cameron Rich
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2.1 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program 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 Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
/*
|
||||
* A wrapper around the unmanaged interface to give a semi-decent Java API
|
||||
*/
|
||||
|
||||
package axTLSj;
|
||||
|
||||
/**
|
||||
* @class SSLReadHolder
|
||||
* @ingroup java_api
|
||||
* @brief A holder for data read in an SSL read.
|
||||
*/
|
||||
public class SSLReadHolder
|
||||
{
|
||||
/**
|
||||
* @brief Contruct a new read holder object.
|
||||
*/
|
||||
public SSLReadHolder()
|
||||
{
|
||||
m_buf = null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Retrieve the reference to the read data.
|
||||
*/
|
||||
public byte[] getData()
|
||||
{
|
||||
return m_buf;
|
||||
}
|
||||
|
||||
private byte[] m_buf;
|
||||
}
|
60
bindings/java/SSLServer.java
Normal file
60
bindings/java/SSLServer.java
Normal file
@ -0,0 +1,60 @@
|
||||
/*
|
||||
* Copyright(C) 2006 Cameron Rich
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2.1 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program 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 Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
/*
|
||||
* A wrapper around the unmanaged interface to give a semi-decent Java API
|
||||
*/
|
||||
|
||||
package axTLSj;
|
||||
|
||||
import java.net.*;
|
||||
|
||||
/**
|
||||
* @class SSLServer
|
||||
* @ingroup java_api
|
||||
* @brief The server context.
|
||||
*
|
||||
* All server connections are started within a server context.
|
||||
*/
|
||||
public class SSLServer extends SSLCTX
|
||||
{
|
||||
/**
|
||||
* @brief Start a new server context.
|
||||
*
|
||||
* @see SSLCTX for details.
|
||||
*/
|
||||
public SSLServer(int options, int num_sessions)
|
||||
{
|
||||
super(options, num_sessions);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Establish a new SSL connection to an SSL client.
|
||||
*
|
||||
* It is up to the application to establish the initial socket connection.
|
||||
*
|
||||
* Call dispose() when the connection is to be removed.
|
||||
* @param s [in] A reference to a <A HREF="http://java.sun.com/j2se/1.4.2/docs/api">Socket</A> object.
|
||||
* @return An SSL object reference.
|
||||
*/
|
||||
public SSL connect(Socket s)
|
||||
{
|
||||
int client_fd = axtlsj.getFd(s);
|
||||
return new SSL(axtlsj.ssl_server_new(m_ctx, client_fd));
|
||||
}
|
||||
}
|
104
bindings/java/SSLUtil.java
Normal file
104
bindings/java/SSLUtil.java
Normal file
@ -0,0 +1,104 @@
|
||||
/*
|
||||
* Copyright(C) 2006 Cameron Rich
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2.1 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program 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 Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
/*
|
||||
* A wrapper around the unmanaged interface to give a semi-decent Java API
|
||||
*/
|
||||
|
||||
package axTLSj;
|
||||
|
||||
import java.io.*;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* @class SSLUtil
|
||||
* @ingroup java_api
|
||||
* @brief Some global helper functions.
|
||||
*
|
||||
*/
|
||||
public class SSLUtil
|
||||
{
|
||||
/**
|
||||
* @brief Load up the ddl/shared library
|
||||
*/
|
||||
static
|
||||
{
|
||||
System.loadLibrary("axtlsj");
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Return the build mode of the axTLS project.
|
||||
* @return The build mode is one of:
|
||||
* - SSL_BUILD_SERVER_ONLY
|
||||
* - SSL_BUILD_ENABLE_VERIFICATION
|
||||
* - SSL_BUILD_ENABLE_CLIENT
|
||||
* - SSL_BUILD_FULL_MODE
|
||||
*/
|
||||
public static int buildMode()
|
||||
{
|
||||
return axtlsj.ssl_get_config(axtlsj.SSL_BUILD_MODE);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Return the number of chained certificates that the client/server
|
||||
* supports.
|
||||
* @return The number of supported client/server certificates.
|
||||
*/
|
||||
public static int maxCerts()
|
||||
{
|
||||
return axtlsj.ssl_get_config(axtlsj.SSL_MAX_CERT_CFG_OFFSET);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Return the number of CA certificates that the client/server
|
||||
* supports.
|
||||
* @return The number of supported CA certificates.
|
||||
*/
|
||||
public static int maxCACerts()
|
||||
{
|
||||
return axtlsj.ssl_get_config(axtlsj.SSL_MAX_CA_CERT_CFG_OFFSET);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Indicate if PEM is supported.
|
||||
* @return true if PEM supported.
|
||||
*/
|
||||
public static boolean hasPEM()
|
||||
{
|
||||
return axtlsj.ssl_get_config(axtlsj.SSL_HAS_PEM) > 0 ? true : false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Display the text string of the error.
|
||||
* @param error_code [in] The integer error code.
|
||||
* @see ssl.h for the error code list.
|
||||
*/
|
||||
public static void displayError(int error_code)
|
||||
{
|
||||
axtlsj.ssl_display_error(error_code);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Return the version of the axTLS project.
|
||||
*/
|
||||
public static String version()
|
||||
{
|
||||
return axtlsj.ssl_version();
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user