18f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen/* 28f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen * Copyright 2009 Rene Treffer 38f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen * 48f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen * Licensed under the Apache License, Version 2.0 (the "License"); 58f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen * you may not use this file except in compliance with the License. 68f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen * You may obtain a copy of the License at 78f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen * 88f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen * http://www.apache.org/licenses/LICENSE-2.0 98f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen * 108f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen * Unless required by applicable law or agreed to in writing, software 118f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen * distributed under the License is distributed on an "AS IS" BASIS, 128f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 138f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen * See the License for the specific language governing permissions and 148f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen * limitations under the License. 158f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen * 168f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen */ 178f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chenpackage de.measite.smack; 188f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen 198f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chenimport java.util.Enumeration; 208f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chenimport java.util.Hashtable; 218f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chenimport java.util.Map; 228f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen 238f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chenimport org.apache.harmony.javax.security.auth.callback.CallbackHandler; 248f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chenimport org.apache.harmony.javax.security.sasl.SaslClient; 258f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chenimport org.apache.harmony.javax.security.sasl.SaslException; 268f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chenimport org.apache.harmony.javax.security.sasl.SaslServer; 278f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chenimport org.apache.harmony.javax.security.sasl.SaslServerFactory; 288f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen 298f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chenpublic class Sasl { 308f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen 318f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen // SaslClientFactory service name 328f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen private static final String CLIENTFACTORYSRV = "SaslClientFactory"; //$NON-NLS-1$ 338f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen 348f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen // SaslServerFactory service name 358f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen private static final String SERVERFACTORYSRV = "SaslServerFactory"; //$NON-NLS-1$ 368f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen 378f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen public static final String POLICY_NOPLAINTEXT = "javax.security.sasl.policy.noplaintext"; //$NON-NLS-1$ 388f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen 398f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen public static final String POLICY_NOACTIVE = "javax.security.sasl.policy.noactive"; //$NON-NLS-1$ 408f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen 418f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen public static final String POLICY_NODICTIONARY = "javax.security.sasl.policy.nodictionary"; //$NON-NLS-1$ 428f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen 438f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen public static final String POLICY_NOANONYMOUS = "javax.security.sasl.policy.noanonymous"; //$NON-NLS-1$ 448f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen 458f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen public static final String POLICY_FORWARD_SECRECY = "javax.security.sasl.policy.forward"; //$NON-NLS-1$ 468f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen 478f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen public static final String POLICY_PASS_CREDENTIALS = "javax.security.sasl.policy.credentials"; //$NON-NLS-1$ 488f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen 498f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen public static final String MAX_BUFFER = "javax.security.sasl.maxbuffer"; //$NON-NLS-1$ 508f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen 518f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen public static final String RAW_SEND_SIZE = "javax.security.sasl.rawsendsize"; //$NON-NLS-1$ 528f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen 538f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen public static final String REUSE = "javax.security.sasl.reuse"; //$NON-NLS-1$ 548f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen 558f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen public static final String QOP = "javax.security.sasl.qop"; //$NON-NLS-1$ 568f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen 578f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen public static final String STRENGTH = "javax.security.sasl.strength"; //$NON-NLS-1$ 588f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen 598f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen public static final String SERVER_AUTH = "javax.security.sasl.server.authentication"; //$NON-NLS-1$ 608f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen 618f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen public static Enumeration<SaslClientFactory> getSaslClientFactories() { 628f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen Hashtable<SaslClientFactory,Object> factories = new Hashtable<SaslClientFactory,Object>(); 638f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen factories.put(new SaslClientFactory(), new Object()); 648f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen return factories.keys(); 658f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen } 668f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen 678f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen public static Enumeration<SaslServerFactory> getSaslServerFactories() { 688f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen return org.apache.harmony.javax.security.sasl.Sasl.getSaslServerFactories(); 698f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen } 708f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen 718f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen public static SaslServer createSaslServer(String mechanism, String protocol, 728f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen String serverName, Map<String, ?> prop, CallbackHandler cbh) throws SaslException { 738f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen return org.apache.harmony.javax.security.sasl.Sasl.createSaslServer(mechanism, protocol, serverName, prop, cbh); 748f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen } 758f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen 768f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen public static SaslClient createSaslClient(String[] mechanisms, String authanticationID, 778f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen String protocol, String serverName, Map<String, ?> prop, CallbackHandler cbh) 788f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen throws SaslException { 798f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen if (mechanisms == null) { 808f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen throw new NullPointerException("auth.33"); //$NON-NLS-1$ 818f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen } 828f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen SaslClientFactory fact = getSaslClientFactories().nextElement(); 838f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen String[] mech = fact.getMechanismNames(null); 848f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen boolean is = false; 858f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen if (mech != null) { 868f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen for (int j = 0; j < mech.length; j++) { 878f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen for (int n = 0; n < mechanisms.length; n++) { 888f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen if (mech[j].equals(mechanisms[n])) { 898f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen is = true; 908f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen break; 918f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen } 928f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen } 938f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen } 948f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen } 958f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen if (is) { 968f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen return fact.createSaslClient( 978f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen mechanisms, 988f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen authanticationID, 998f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen protocol, 1008f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen serverName, 1018f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen prop, 1028f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen cbh 1038f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen ); 1048f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen } 1058f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen return null; 1068f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen } 1078f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen 1088f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen} 109