/* * Copyright (C) 2000 - 2008 TagServlet Ltd * * This file is part of Open BlueDragon (OpenBD) CFML Server Engine. * * OpenBD is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * Free Software Foundation,version 3. * * OpenBD is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with OpenBD. If not, see http://www.gnu.org/licenses/ * * Additional permission under GNU GPL version 3 section 7 * * If you modify this Program, or any covered work, by linking or combining * it with any of the JARS listed in the README.txt (or a modified version of * (that library), containing parts covered by the terms of that JAR, the * licensors of this Program grant you additional permission to convey the * resulting work. * README.txt @ http://www.openbluedragon.org/license/README.txt * * http://www.openbluedragon.org/ */ package com.naryx.tagfusion.security; import java.util.List; import com.nary.util.string; public class publicKey extends Object { publicSignature pS; long options; long checksum; public final static int HOST_LICENSE = 55521; public final static int DOMAIN_LICENSE = 17737; public final static int FREE_LICENSE = 23479; public publicKey( String signature ) throws Exception { pS = new publicSignature( signature ); } public publicKey( String s, String SIGN ) throws Exception { pS = new publicSignature( SIGN ); s = s.toLowerCase(); int len = s.length(); byte[] signature = new byte[ len/2 ]; for ( int x=0; x < signature.length; x++ ){ int digit1 = s.charAt( x*2 ); int digit2 = s.charAt( x*2 + 1 ); if ( (digit1 >= '0') && (digit1 <= '9') ) digit1 -= '0'; else if ( (digit1 >= 'a') && (digit1 <= 'f')) digit1 -= 'a' - 10; if ( (digit2 >= '0') && (digit2 <= '9') ) digit2 -= '0'; else if ( (digit2 >= 'a') && (digit2 <= 'f')) digit2 -= 'a' - 10; signature[x] = (byte)((digit1 << 4) + digit2 ); } //--[ Decode this try{ List<String> tokens = string.split( new String( signature ), "|" ); checksum = com.nary.util.string.convertToLong( tokens.get(0).toString(), -1 ); options = com.nary.util.string.convertToLong( tokens.get(1).toString(), -1 ); }catch(Exception E){} } public publicSignature getSignature(){ return pS; } public void setOptions( long _options ){ options = _options; } public long getOptions(){ return options; } public String getHost(){ return pS.host; } public String getDomain(){ return pS.domain; } public String getEmail(){ return pS.email; } public String getPublicKey(){ return getString( new String( pS.getChecksum() + "|" + options).getBytes() ); } public boolean isValid(){ if ( pS.getChecksum() == checksum ) return true; else return false; } static final char[] digits = {'0','1','2','3','4','5','6','7', '8','9','a','b','c','d','e','f'}; private static String getString( byte[] signature ){ StringBuilder s = new StringBuilder(); for ( int x=0; x < signature.length; x++ ){ byte b = signature[x]; s.append( digits[(b& 0xf0)>> 4] ); s.append( digits[(b& 0x0f)] ); } return s.toString().toUpperCase(); } public static void main(String args[]){ try{ publicKey pK = new publicKey( args[0] ); pK.setOptions( FREE_LICENSE ); System.out.println( "Key= " + pK.getPublicKey() ); }catch(Exception E){} } }