mturk       2005/05/20 02:25:39

  Modified:    jni/java/org/apache/tomcat/jni SSL.java
               jni/native/src ssl.c
  Log:
  Add engine param to SSL.initialize to enable hardware devices.
  
  Revision  Changes    Path
  1.3       +70 -2     
jakarta-tomcat-connectors/jni/java/org/apache/tomcat/jni/SSL.java
  
  Index: SSL.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-connectors/jni/java/org/apache/tomcat/jni/SSL.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- SSL.java  20 May 2005 07:31:41 -0000      1.2
  +++ SSL.java  20 May 2005 09:25:39 -0000      1.3
  @@ -24,6 +24,71 @@
   
   public final class SSL {
   
  +    /*
  +     * Type definitions mostly from mod_ssl
  +     */
  +    public static final int UNSET            = -1;
  +    /*
  +     * Define the certificate algorithm types
  +     */
  +    public static final int SSL_ALGO_UNKNOWN = 0;
  +    public static final int SSL_ALGO_RSA     = (1<<0);
  +    public static final int SSL_ALGO_DSA     = (1<<1);
  +    public static final int SSL_ALGO_ALL     = (SSL_ALGO_RSA|SSL_ALGO_DSA);
  +
  +    public static final int SSL_AIDX_RSA     = 0;
  +    public static final int SSL_AIDX_DSA     = 1;
  +    public static final int SSL_AIDX_MAX     = 2;
  +    /*
  +     * Define IDs for the temporary RSA keys and DH params
  +     */
  +
  +    public static final int SSL_TMP_KEY_RSA_512  = 0;
  +    public static final int SSL_TMP_KEY_RSA_1024 = 1;
  +    public static final int SSL_TMP_KEY_DH_512   = 2;
  +    public static final int SSL_TMP_KEY_DH_1024  = 3;
  +    public static final int SSL_TMP_KEY_MAX      = 4;
  +
  +    /*
  +     * Define the SSL options
  +     */
  +    public static final int SSL_OPT_NONE           = 0;
  +    public static final int SSL_OPT_RELSET         = (1<<0);
  +    public static final int SSL_OPT_STDENVVARS     = (1<<1);
  +    public static final int SSL_OPT_EXPORTCERTDATA = (1<<3);
  +    public static final int SSL_OPT_FAKEBASICAUTH  = (1<<4);
  +    public static final int SSL_OPT_STRICTREQUIRE  = (1<<5);
  +    public static final int SSL_OPT_OPTRENEGOTIATE = (1<<6);
  +    public static final int SSL_OPT_ALL            = 
(SSL_OPT_STDENVVARS|SSL_OPT_EXPORTCERTDATA|SSL_OPT_FAKEBASICAUTH|SSL_OPT_STRICTREQUIRE|SSL_OPT_OPTRENEGOTIATE);
  +
  +    /*
  +     * Define the SSL Protocol options
  +     */
  +    public static final int SSL_PROTOCOL_NONE  = 0;
  +    public static final int SSL_PROTOCOL_SSLV2 = (1<<0);
  +    public static final int SSL_PROTOCOL_SSLV3 = (1<<1);
  +    public static final int SSL_PROTOCOL_TLSV1 = (1<<2);
  +    public static final int SSL_PROTOCOL_ALL   = 
(SSL_PROTOCOL_SSLV2|SSL_PROTOCOL_SSLV3|SSL_PROTOCOL_TLSV1);
  +
  +    /*
  +     * Define the SSL verify levels
  +     */
  +    public static final int SSL_CVERIFY_UNSET          = UNSET;
  +    public static final int SSL_CVERIFY_NONE           = 0;
  +    public static final int SSL_CVERIFY_OPTIONAL       = 1;
  +    public static final int SSL_CVERIFY_REQUIRE        = 2;
  +    public static final int SSL_CVERIFY_OPTIONAL_NO_CA = 3;
  +
  +    /* Use either SSL_VERIFY_NONE or SSL_VERIFY_PEER, the last 2 options
  +     * are 'ored' with SSL_VERIFY_PEER if they are desired
  +     */
  +    public static final int SSL_VERIFY_NONE                 = 0;
  +    public static final int SSL_VERIFY_PEER                 = 1;
  +    public static final int SSL_VERIFY_FAIL_IF_NO_PEER_CERT = 2;
  +    public static final int SSL_VERIFY_CLIENT_ONCE          = 4;
  +    public static final int SSL_VERIFY_PEER_STRICT          = 
(SSL_VERIFY_PEER|SSL_VERIFY_FAIL_IF_NO_PEER_CERT);
  +
  +
       /* Return OpenSSL version number */
       public static native int version();
   
  @@ -34,9 +99,12 @@
        * Initialize OpenSSL support.
        * This function needs to be called once for the
        * lifetime of JVM. Library.init() has to be called before.
  +     * @param engine Support for external a Crypto Device ("engine"),
  +     *                usually
  +     * a hardware accellerator card for crypto operations.
        * @return APR status code
        */
  -    public static native int initialize();
  +    public static native int initialize(String engine);
   
   
   }
  
  
  
  1.5       +38 -6     jakarta-tomcat-connectors/jni/native/src/ssl.c
  
  Index: ssl.c
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-connectors/jni/native/src/ssl.c,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- ssl.c     20 May 2005 07:31:41 -0000      1.4
  +++ ssl.c     20 May 2005 09:25:39 -0000      1.5
  @@ -43,6 +43,9 @@
   static apr_status_t ssl_init_cleanup(void *data)
   {
       UNREFERENCED(data);
  +    if (!ssl_initialized)
  +        return APR_SUCCESS;
  +    ssl_initialized = 0;
       /*
        * Try to kill the internals of the SSL library.
        */
  @@ -75,15 +78,20 @@
       return APR_SUCCESS;
   }
   
  -TCN_IMPLEMENT_CALL(jint, SSL, initialize)(TCN_STDARGS)
  +TCN_IMPLEMENT_CALL(jint, SSL, initialize)(TCN_STDARGS, jstring engine)
   {
  +    TCN_ALLOC_CSTRING(engine);
       
  -    UNREFERENCED_STDARGS;
  -    if (!tcn_global_pool)
  +    UNREFERENCED(o);
  +    if (!tcn_global_pool) {
  +        TCN_FREE_CSTRING(engine);
           return (jint)APR_EINVAL;
  +    }
       /* Check if already initialized */
  -    if (ssl_initialized++)
  +    if (ssl_initialized++) {
  +        TCN_FREE_CSTRING(engine);
           return (jint)APR_SUCCESS;
  +    }
       /* We must register the library in full, to ensure our configuration 
        * code can successfully test the SSL environment.
        */
  @@ -98,13 +106,37 @@
       OPENSSL_load_builtin_modules();
   #endif
   
  +#if defined(HAVE_OPENSSL_ENGINE_H) && defined(HAVE_ENGINE_INIT)
  +    if (J2S(engine)) {
  +        ENGINE *e;
  +        apr_status_t err = APR_SUCCESS;
  +        if (!(e = ENGINE_by_id(J2S(engine))) {
  +            ssl_init_cleanup(NULL);
  +            err = APR_ENOTIMPL;
  +        }
  +
  +        if (strcmp(J2S(engine), "chil") == 0) {
  +            ENGINE_ctrl(e, ENGINE_CTRL_CHIL_SET_FORKCHECK, 1, 0, 0);
  +        }
  +
  +        if (!ENGINE_set_default(e, ENGINE_METHOD_ALL)) {
  +            ssl_init_cleanup(NULL);
  +            err = APR_ENOTIMPL;
  +        }
  +        ENGINE_free(e);
  +        if (err != APR_SUCCESS) {
  +            TCN_FREE_CSTRING(engine);
  +            return (jint)err;
  +        }
  +    }
  +#endif
       /*
  -     * Let us cleanup the ssl library when the module is unloaded
  +     * Let us cleanup the ssl library when the library is unloaded
        */
       apr_pool_cleanup_register(tcn_global_pool, NULL,
                                 ssl_init_cleanup,
                                 apr_pool_cleanup_null);
  -
  +    TCN_FREE_CSTRING(engine);
       return (jint)APR_SUCCESS;
   }
   
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to