1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148
| package com.aptana.ide.core.licensing;
import java.math.BigInteger; import java.util.Calendar; import java.util.TimeZone; import java.util.zip.CRC32;
public final class ClientKey { private static class Decrypt {
private BigInteger modulus; private BigInteger exponent;
public String decrypt(String encrypted) { long crc32Value; byte bytes[]; CRC32 crc32; if (encrypted == null) { encrypted = ""; } else { encrypted = ClientKey.trimEncryptedLicense(encrypted); } BigInteger big = new BigInteger(encrypted); BigInteger decrypted = big.modPow(exponent, modulus); crc32Value = (long) decrypted.intValue() & 0xffffffffL; decrypted = decrypted.shiftRight(32); bytes = decrypted.toByteArray(); crc32 = new CRC32(); crc32.update(bytes); if (crc32Value == crc32.getValue()) { return new String(bytes); } return null; }
Decrypt(String exponent, String modulus) { this.modulus = new BigInteger(modulus); this.exponent = new BigInteger(exponent); } }
public static final String BEGIN_LICENSE_MARKER = "--begin-aptana-license--"; public static final String END_LICENSE_MARKER = "--end-aptana-license--"; private static final TimeZone GMT = TimeZone.getTimeZone("GMT"); private static final String EMAILS_NON_MATCHING = "EMAILS_NON_MATCHING"; private static final int PRO = 0; private static final int TRIAL = 1; private String email; private long expiration; private int type;
private ClientKey(int type, String email, long expiration) { this.type = type; this.email = email; this.expiration = expiration; }
public static ClientKey decrypt(String encrypted, String email) { String modulus = "115801190261221214754334668902722425936509505416457970789287297728816388753627896293249501578830570324705253515546383166989625001335561947096747210280001245977114030627247212292377290543869343996595819188362915644707269064020812435233012510929338706599216007185654748959001143012936618501934698642942289379979"; String exponent = "65537"; if (encrypted != null) { encrypted = encrypted.trim(); } Decrypt decrypter = new Decrypt(exponent, modulus); return decrypt(decrypter, encrypted, email); }
private static ClientKey decrypt(Decrypt decrypter, String encrypted, String email) { String value = decrypter.decrypt(encrypted); if (value == null) { return new ClientKey(1, null, 0L); } String values[] = value.split(";"); int type = 1; String genedEmail = null; long expiration = 0L; if (values.length == 3) { if ("p".equals(values[0].toLowerCase())) { type = 0; } genedEmail = values[1]; if (genedEmail != null) { if (!genedEmail.equalsIgnoreCase(email)) { genedEmail = "EMAILS_NON_MATCHING"; } } else { genedEmail = null; } try { expiration = Long.parseLong(values[2]); } catch (Exception _ex) { expiration = 0L; } } return new ClientKey(type, genedEmail, expiration); }
public boolean isCloseToExpiring() { return false; }
public boolean isValid() { return true; }
public boolean isCloseToMatching() { return false; }
public boolean isExpired() { return false; }
public String getEmail() { return "heimazhao@gmail.com"; }
public Calendar getExpiration() { Calendar expirationCal = Calendar.getInstance(GMT); expirationCal.set(2010, 9, 9);
return expirationCal; }
public boolean isTrial() { return false; }
public boolean isPro() { return true; }
public boolean shouldProPluginsRun() { return true; }
public static String trimEncryptedLicense(String encrypted) { String newEncrypted = encrypted; newEncrypted = newEncrypted.trim(); newEncrypted = newEncrypted.replaceAll("--begin-aptana-license--", ""); newEncrypted = newEncrypted.replaceAll("--end-aptana-license--", ""); newEncrypted = newEncrypted.replaceAll("/s+", ""); return newEncrypted; } }
|