Annotation of embedaddon/axTLS/bindings/java/SSLCTX.java, revision 1.1.1.1

1.1       misho       1: /*
                      2:  * Copyright (c) 2007, Cameron Rich
                      3:  * 
                      4:  * All rights reserved.
                      5:  * 
                      6:  * Redistribution and use in source and binary forms, with or without 
                      7:  * modification, are permitted provided that the following conditions are met:
                      8:  *
                      9:  * * Redistributions of source code must retain the above copyright notice, 
                     10:  *   this list of conditions and the following disclaimer.
                     11:  * * Redistributions in binary form must reproduce the above copyright notice, 
                     12:  *   this list of conditions and the following disclaimer in the documentation 
                     13:  *   and/or other materials provided with the distribution.
                     14:  * * Neither the name of the axTLS project nor the names of its contributors 
                     15:  *   may be used to endorse or promote products derived from this software 
                     16:  *   without specific prior written permission.
                     17:  *
                     18:  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
                     19:  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
                     20:  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
                     21:  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
                     22:  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
                     23:  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
                     24:  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
                     25:  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
                     26:  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
                     27:  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
                     28:  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
                     29:  */
                     30: 
                     31: /*
                     32:  * A wrapper around the unmanaged interface to give a semi-decent Java API
                     33:  */
                     34: 
                     35: package axTLSj;
                     36: 
                     37: import java.net.*;
                     38: 
                     39: /**
                     40:  * @class SSLCTX
                     41:  * @ingroup java_api 
                     42:  * @brief A base object for SSLServer/SSLClient.
                     43:  */
                     44: public class SSLCTX
                     45: {
                     46:     /**
                     47:      * A reference to the real client/server context.
                     48:      */
                     49:     protected int m_ctx;
                     50: 
                     51:     /**
                     52:      * @brief Establish a new client/server context.
                     53:      *
                     54:      * This function is called before any client/server SSL connections are 
                     55:      * made.  If multiple threads are used, then each thread will have its 
                     56:      * own SSLCTX context. Any number of connections may be made with a single 
                     57:      * context. 
                     58:      *
                     59:      * Each new connection will use the this context's private key and 
                     60:      * certificate chain. If a different certificate chain is required, then a 
                     61:      * different context needs to be be used.
                     62:      *
                     63:      * @param options [in]  Any particular options. At present the options
                     64:      * supported are:
                     65:      * - SSL_SERVER_VERIFY_LATER (client only): Don't stop a handshake if the 
                     66:      * server authentication fails. The certificate can be authenticated later 
                     67:      * with a call to verifyCert().
                     68:      * - SSL_CLIENT_AUTHENTICATION (server only): Enforce client authentication
                     69:      * i.e. each handshake will include a "certificate request" message from 
                     70:      * the server.
                     71:      * - SSL_DISPLAY_BYTES (full mode build only): Display the byte sequences
                     72:      * during the handshake.
                     73:      * - SSL_DISPLAY_STATES (full mode build only): Display the state changes
                     74:      * during the handshake.
                     75:      * - SSL_DISPLAY_CERTS (full mode build only): Display the certificates that
                     76:      * are passed during a handshake.
                     77:      * - SSL_DISPLAY_RSA (full mode build only): Display the RSA key details 
                     78:      * that are passed during a handshake.
                     79:      *
                     80:      * @param num_sessions [in] The number of sessions to be used for session
                     81:      * caching. If this value is 0, then there is no session caching.
                     82:      * 
                     83:      * If this option is null, then the default internal private key/
                     84:      * certificate pair is used (if CONFIG_SSL_USE_DEFAULT_KEY is set). 
                     85:      * 
                     86:      * The resources used by this object are automatically freed.  
                     87:      * @return A client/server context.
                     88:      */
                     89:     protected SSLCTX(int options, int num_sessions)
                     90:     {
                     91:         m_ctx = axtlsj.ssl_ctx_new(options, num_sessions);
                     92:     }
                     93: 
                     94:     /**
                     95:      * @brief Remove a client/server context.
                     96:      *
                     97:      * Frees any used resources used by this context. Each connection will be 
                     98:      * sent a "Close Notify" alert (if possible).
                     99:      */
                    100:     public void dispose()
                    101:     {
                    102:         axtlsj.ssl_ctx_free(m_ctx);
                    103:     }
                    104: 
                    105:     /**
                    106:      * @brief Read the SSL data stream.
                    107:      * @param ssl [in] An SSL object reference.
                    108:      * @param rh [out] After a successful read, the decrypted data can be 
                    109:      * retrieved with rh.getData(). It will be null otherwise.
                    110:      * @return The number of decrypted bytes:
                    111:      * - if > 0, then the handshaking is complete and we are returning the 
                    112:      * number of decrypted bytes. 
                    113:      * - SSL_OK if the handshaking stage is successful (but not yet complete).  
                    114:      * - < 0 if an error.
                    115:      * @see ssl.h for the error code list.
                    116:      * @note Use rh before doing any successive ssl calls.
                    117:      */
                    118:     public int read(SSL ssl, SSLReadHolder rh)
                    119:     {
                    120:         return axtlsj.ssl_read(ssl.m_ssl, rh);
                    121:     }
                    122: 
                    123:     /**
                    124:      * @brief Write to the SSL data stream.
                    125:      * @param ssl [in] An SSL obect reference.
                    126:      * @param out_data [in] The data to be written
                    127:      * @return The number of bytes sent, or if < 0 if an error.
                    128:      * @see ssl.h for the error code list.
                    129:      */
                    130:     public int write(SSL ssl, byte[] out_data)
                    131:     {
                    132:         return axtlsj.ssl_write(ssl.m_ssl, out_data, out_data.length);
                    133:     }
                    134: 
                    135:     /**
                    136:      * @brief Write to the SSL data stream.
                    137:      * @param ssl [in] An SSL obect reference.
                    138:      * @param out_data [in] The data to be written
                    139:      * @param out_len [in] The number of bytes to be written
                    140:      * @return The number of bytes sent, or if < 0 if an error.
                    141:      * @see ssl.h for the error code list.
                    142:      */
                    143:     public int write(SSL ssl, byte[] out_data, int out_len)
                    144:     {
                    145:         return axtlsj.ssl_write(ssl.m_ssl, out_data, out_len);
                    146:     }
                    147: 
                    148:     /**
                    149:      * @brief Find an ssl object based on a Socket reference.
                    150:      *
                    151:      * Goes through the list of SSL objects maintained in a client/server 
                    152:      * context to look for a socket match.
                    153:      * @param s [in] A reference to a <A HREF="http://java.sun.com/j2se/1.4.2/docs/api">Socket</A> object.
                    154:      * @return A reference to the SSL object. Returns null if the object 
                    155:      * could not be found.
                    156:      */
                    157:     public SSL find(Socket s)
                    158:     {
                    159:         int client_fd = axtlsj.getFd(s);
                    160:         return new SSL(axtlsj.ssl_find(m_ctx, client_fd));
                    161:     }
                    162: 
                    163:     /**
                    164:      * @brief Authenticate a received certificate.
                    165:      * 
                    166:      * This call is usually made by a client after a handshake is complete 
                    167:      * and the context is in SSL_SERVER_VERIFY_LATER mode.
                    168:      * @param ssl [in] An SSL object reference.
                    169:      * @return SSL_OK if the certificate is verified.
                    170:      */
                    171:     public int verifyCert(SSL ssl)
                    172:     {
                    173:         return axtlsj.ssl_verify_cert(ssl.m_ssl);
                    174:     }
                    175: 
                    176:     /**
                    177:      * @brief Force the client to perform its handshake again.
                    178:      *
                    179:      * For a client this involves sending another "client hello" message.
                    180:      * For the server is means sending a "hello request" message.
                    181:      *
                    182:      * This is a blocking call on the client (until the handshake completes).
                    183:      * @param ssl [in] An SSL object reference.
                    184:      * @return SSL_OK if renegotiation instantiation was ok
                    185:      */
                    186:     public int renegotiate(SSL ssl)
                    187:     {
                    188:         return axtlsj.ssl_renegotiate(ssl.m_ssl);
                    189:     }
                    190: 
                    191:     /**
                    192:      * @brief Load a file into memory that is in binary DER or ASCII PEM format.
                    193:      *
                    194:      * These are temporary objects that are used to load private keys,
                    195:      * certificates etc into memory.
                    196:      * @param obj_type [in] The format of the file. Can be one of:
                    197:      * - SSL_OBJ_X509_CERT (no password required)
                    198:      * - SSL_OBJ_X509_CACERT (no password required)
                    199:      * - SSL_OBJ_RSA_KEY (AES128/AES256 PEM encryption supported)
                    200:      * - SSL_OBJ_P8 (RC4-128 encrypted data supported)
                    201:      * - SSL_OBJ_P12 (RC4-128 encrypted data supported)
                    202:      *
                    203:      * PEM files are automatically detected (if supported).
                    204:      * @param filename [in] The location of a file in DER/PEM format.
                    205:      * @param password [in] The password used. Can be null if not required.
                    206:      * @return SSL_OK if all ok
                    207:      */
                    208:     public int objLoad(int obj_type, String filename, String password)
                    209:     {
                    210:         return axtlsj.ssl_obj_load(m_ctx, obj_type, filename, password);
                    211:     }
                    212: 
                    213:     /**
                    214:      * @brief Transfer binary data into the object loader.
                    215:      *
                    216:      * These are temporary objects that are used to load private keys,
                    217:      * certificates etc into memory.
                    218:      * @param obj_type [in] The format of the memory data.
                    219:      * @param data [in] The binary data to be loaded.
                    220:      * @param len [in] The amount of data to be loaded.
                    221:      * @param password [in] The password used. Can be null if not required.
                    222:      * @return SSL_OK if all ok
                    223:      */
                    224: 
                    225:     public int objLoad(int obj_type, byte[] data, int len, String password)
                    226:     {
                    227:         return axtlsj.ssl_obj_memory_load(m_ctx, obj_type, data, len, password);
                    228:     }
                    229: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>