EMMA Coverage Report (generated Sat Nov 12 08:39:53 KST 2005)
[all classes][org.apache.mina.examples.echoserver.ssl]

COVERAGE SUMMARY FOR SOURCE FILE [BogusSSLContextFactory.java]

nameclass, %method, %block, %line, %
BogusSSLContextFactory.java100% (1/1)80%  (4/5)73%  (130/178)78%  (31.8/41)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class BogusSSLContextFactory100% (1/1)80%  (4/5)73%  (130/178)78%  (31.8/41)
BogusSSLContextFactory (): void 0%   (0/1)0%   (0/3)0%   (0/1)
getInstance (boolean): SSLContext 100% (1/1)61%  (46/75)80%  (15.3/19)
createBougusServerSSLContext (): SSLContext 100% (1/1)70%  (38/54)70%  (10.5/15)
<static initializer> 100% (1/1)100% (36/36)100% (3/3)
createBougusClientSSLContext (): SSLContext 100% (1/1)100% (10/10)100% (3/3)

1/*
2 *   @(#) $Id: BogusSSLContextFactory.java 332218 2005-11-10 03:52:42Z trustin $
3 *
4 *   Copyright 2004 The Apache Software Foundation
5 *
6 *   Licensed under the Apache License, Version 2.0 (the "License");
7 *   you may not use this file except in compliance with the License.
8 *   You may obtain a copy of the License at
9 *
10 *       http://www.apache.org/licenses/LICENSE-2.0
11 *
12 *   Unless required by applicable law or agreed to in writing, software
13 *   distributed under the License is distributed on an "AS IS" BASIS,
14 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 *   See the License for the specific language governing permissions and
16 *   limitations under the License.
17 *
18 */
19package org.apache.mina.examples.echoserver.ssl;
20 
21import java.io.IOException;
22import java.io.InputStream;
23import java.security.GeneralSecurityException;
24import java.security.KeyStore;
25 
26import javax.net.ssl.KeyManagerFactory;
27import javax.net.ssl.SSLContext;
28 
29/**
30 * Factory to create a bougus SSLContext.
31 *
32 * @author The Apache Directory Project (dev@directory.apache.org)
33 * @version $Rev: 332218 $, $Date: 2005-11-10 12:52:42 +0900 $
34 */
35public class BogusSSLContextFactory
36{
37 
38    /**
39     * Protocol to use.
40     */
41    private static final String PROTOCOL = "TLS";
42 
43    /**
44     * Bougus Server certificate keystore file name.
45     */
46    private static final String BOGUS_KEYSTORE = "bogus.cert";
47 
48    // NOTE: The keystore was generated using keytool:
49    //   keytool -genkey -alias bogus -keysize 512 -validity 3650
50    //           -keyalg RSA -dname "CN=bogus.com, OU=XXX CA,
51    //               O=Bogus Inc, L=Stockholm, S=Stockholm, C=SE"
52    //           -keypass boguspw -storepass boguspw -keystore bogus.cert
53 
54    /**
55     * Bougus keystore password.
56     */
57    private static final char[] BOGUS_PW = { 'b', 'o', 'g', 'u', 's', 'p',
58                                            'w' };
59 
60    private static SSLContext serverInstance = null;
61 
62    private static SSLContext clientInstance = null;
63 
64    /**
65     * Get SSLContext singleton.
66     *
67     * @return SSLContext
68     * @throws java.security.GeneralSecurityException
69     *
70     */
71    public static SSLContext getInstance( boolean server )
72            throws GeneralSecurityException
73    {
74        SSLContext retInstance = null;
75        if( server )
76        {
77            if( serverInstance == null )
78            {
79                synchronized( BogusSSLContextFactory.class )
80                {
81                    if( serverInstance == null )
82                    {
83                        try
84                        {
85                            serverInstance = createBougusServerSSLContext();
86                        }
87                        catch( Exception ioe )
88                        {
89                            throw new GeneralSecurityException(
90                                    "Can't create Server SSLContext:" + ioe );
91                        }
92                    }
93                }
94            }
95            retInstance = serverInstance;
96        }
97        else
98        {
99            if( clientInstance == null )
100            {
101                synchronized( BogusSSLContextFactory.class )
102                {
103                    if( clientInstance == null )
104                    {
105                        clientInstance = createBougusClientSSLContext();
106                    }
107                }
108            }
109            retInstance = clientInstance;
110        }
111        return retInstance;
112    }
113 
114    private static SSLContext createBougusServerSSLContext()
115            throws GeneralSecurityException, IOException
116    {
117        // Create keystore
118        KeyStore ks = KeyStore.getInstance( "JKS" );
119        InputStream in = null;
120        try
121        {
122            in = BogusSSLContextFactory.class
123                    .getResourceAsStream( BOGUS_KEYSTORE );
124            ks.load( in, BOGUS_PW );
125        }
126        finally
127        {
128            if( in != null )
129            {
130                try
131                {
132                    in.close();
133                }
134                catch( IOException ignored )
135                {
136                }
137            }
138        }
139 
140        // Set up key manager factory to use our key store
141        KeyManagerFactory kmf = KeyManagerFactory.getInstance( "SunX509" );
142        kmf.init( ks, BOGUS_PW );
143 
144        // Initialize the SSLContext to work with our key managers.
145        SSLContext sslContext = SSLContext.getInstance( PROTOCOL );
146        sslContext.init( kmf.getKeyManagers(),
147                BogusTrustManagerFactory.X509_MANAGERS, null );
148 
149        return sslContext;
150    }
151 
152    private static SSLContext createBougusClientSSLContext()
153            throws GeneralSecurityException
154    {
155        SSLContext context = SSLContext.getInstance( PROTOCOL );
156        context.init( null, BogusTrustManagerFactory.X509_MANAGERS, null );
157        return context;
158    }
159 
160}

[all classes][org.apache.mina.examples.echoserver.ssl]
EMMA 2.0.4217 (C) Vladimir Roubtsov