Return to SSL.java CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / axTLS / bindings / java |
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.io.*; ! 38: import java.util.*; ! 39: ! 40: /** ! 41: * @defgroup java_api Java API. ! 42: * ! 43: * Ensure that the appropriate dispose() methods are called when finished with ! 44: * various objects - otherwise memory leaks will result. ! 45: */ ! 46: ! 47: /** ! 48: * @class SSL ! 49: * @ingroup java_api ! 50: * @brief A representation of an SSL connection. ! 51: * ! 52: */ ! 53: public class SSL ! 54: { ! 55: public int m_ssl; /**< A pointer to the real SSL type */ ! 56: ! 57: /** ! 58: * @brief Store the reference to an SSL context. ! 59: * @param ip [in] A reference to an SSL object. ! 60: */ ! 61: public SSL(int ip) ! 62: { ! 63: m_ssl = ip; ! 64: } ! 65: ! 66: /** ! 67: * @brief Free any used resources on this connection. ! 68: * ! 69: * A "Close Notify" message is sent on this connection (if possible). It ! 70: * is up to the application to close the socket. ! 71: */ ! 72: public void dispose() ! 73: { ! 74: axtlsj.ssl_free(m_ssl); ! 75: } ! 76: ! 77: /** ! 78: * @brief Return the result of a handshake. ! 79: * @return SSL_OK if the handshake is complete and ok. ! 80: * @see ssl.h for the error code list. ! 81: */ ! 82: public int handshakeStatus() ! 83: { ! 84: return axtlsj.ssl_handshake_status(m_ssl); ! 85: } ! 86: ! 87: /** ! 88: * @brief Return the SSL cipher id. ! 89: * @return The cipher id which is one of: ! 90: * - SSL_AES128_SHA (0x2f) ! 91: * - SSL_AES256_SHA (0x35) ! 92: * - SSL_RC4_128_SHA (0x05) ! 93: * - SSL_RC4_128_MD5 (0x04) ! 94: */ ! 95: public byte getCipherId() ! 96: { ! 97: return axtlsj.ssl_get_cipher_id(m_ssl); ! 98: } ! 99: ! 100: /** ! 101: * @brief Get the session id for a handshake. ! 102: * ! 103: * This will be a 32 byte sequence and is available after the first ! 104: * handshaking messages are sent. ! 105: * @return The session id as a 32 byte sequence. ! 106: * @note A SSLv23 handshake may have only 16 valid bytes. ! 107: */ ! 108: public byte[] getSessionId() ! 109: { ! 110: return axtlsj.ssl_get_session_id(m_ssl); ! 111: } ! 112: ! 113: /** ! 114: * @brief Retrieve an X.509 distinguished name component. ! 115: * ! 116: * When a handshake is complete and a certificate has been exchanged, ! 117: * then the details of the remote certificate can be retrieved. ! 118: * ! 119: * This will usually be used by a client to check that the server's common ! 120: * name matches the URL. ! 121: * ! 122: * A full handshake needs to occur for this call to work. ! 123: * ! 124: * @param component [in] one of: ! 125: * - SSL_X509_CERT_COMMON_NAME ! 126: * - SSL_X509_CERT_ORGANIZATION ! 127: * - SSL_X509_CERT_ORGANIZATIONAL_NAME ! 128: * - SSL_X509_CA_CERT_COMMON_NAME ! 129: * - SSL_X509_CA_CERT_ORGANIZATION ! 130: * - SSL_X509_CA_CERT_ORGANIZATIONAL_NAME ! 131: * @return The appropriate string (or null if not defined) ! 132: */ ! 133: public String getCertificateDN(int component) ! 134: { ! 135: return axtlsj.ssl_get_cert_dn(m_ssl, component); ! 136: } ! 137: }