From e9297cfa6b7b86ffdfa1d10609295771c9b00e18 Mon Sep 17 00:00:00 2001
From: rsanchez <rsanchez@curisit.net>
Date: Mon, 01 Dec 2014 15:00:01 +0000
Subject: [PATCH] #396 fix - Added automated license code generation
---
src/main/java/net/curisit/securis/utils/LicUtils.java | 125 ++++++++++++++++++++++++++++-------------
1 files changed, 86 insertions(+), 39 deletions(-)
diff --git a/src/main/java/net/curisit/securis/utils/LicUtils.java b/src/main/java/net/curisit/securis/utils/LicUtils.java
index 964cca8..234b14c 100644
--- a/src/main/java/net/curisit/securis/utils/LicUtils.java
+++ b/src/main/java/net/curisit/securis/utils/LicUtils.java
@@ -1,56 +1,103 @@
package net.curisit.securis.utils;
import java.math.BigInteger;
+import java.nio.charset.Charset;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
+import java.util.zip.CRC32;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class LicUtils {
- private static final Logger LOG = LogManager.getLogger(LicUtils.class);
+ private static final Logger LOG = LogManager.getLogger(LicUtils.class);
- public static String md5(String str) {
- try {
- MessageDigest mDigest = MessageDigest.getInstance("MD5");
- mDigest.update(str.getBytes(), 0, str.length());
- BigInteger i = new BigInteger(1, mDigest.digest());
- return String.format("%1$032x", i);
- } catch (NoSuchAlgorithmException e) {
- LOG.error("Error generating MD5 for string: " + str, e);
- }
- return null;
- }
+ public static String md5(String str) {
+ try {
+ MessageDigest mDigest = MessageDigest.getInstance("MD5");
+ mDigest.update(str.getBytes(DEFAULT_CHARSET), 0, str.length());
+ BigInteger i = new BigInteger(1, mDigest.digest());
+ return String.format("%1$032x", i);
+ } catch (NoSuchAlgorithmException e) {
+ LOG.error("Error generating MD5 for string: " + str, e);
+ }
+ return null;
+ }
- public static String sha256(String str) {
- return sha256(str.getBytes());
- }
+ public static String sha256(String str) {
+ return sha256(str.getBytes(DEFAULT_CHARSET));
+ }
- public static String sha256(byte[] bytes) {
- try {
- MessageDigest mDigest = MessageDigest.getInstance("SHA-256");
- mDigest.update(bytes, 0, bytes.length);
- BigInteger i = new BigInteger(1, mDigest.digest());
- return String.format("%1$064x", i);
- } catch (NoSuchAlgorithmException e) {
- LOG.error("Error generating SHA-256 for bytes: " + bytes, e);
- }
- return null;
- }
+ public static String sha256(byte[] bytes) {
+ try {
+ MessageDigest mDigest = MessageDigest.getInstance("SHA-256");
+ mDigest.update(bytes, 0, bytes.length);
+ BigInteger i = new BigInteger(1, mDigest.digest());
+ return String.format("%1$064x", i);
+ } catch (NoSuchAlgorithmException e) {
+ LOG.error("Error generating SHA-256 for bytes: " + bytes, e);
+ }
+ return null;
+ }
- public static String sha256(byte[]... bytes) {
- try {
- MessageDigest mDigest = MessageDigest.getInstance("SHA-256");
- for (byte[] bs : bytes) {
- mDigest.update(bs, 0, bs.length);
- }
- BigInteger i = new BigInteger(1, mDigest.digest());
- return String.format("%1$064x", i);
- } catch (NoSuchAlgorithmException e) {
- LOG.error("Error generating SHA-256 for bytes: " + bytes, e);
- }
- return null;
- }
+ public static String sha256(byte[]... bytes) {
+ try {
+ MessageDigest mDigest = MessageDigest.getInstance("SHA-256");
+ for (byte[] bs : bytes) {
+ mDigest.update(bs, 0, bs.length);
+ }
+ BigInteger i = new BigInteger(1, mDigest.digest());
+ return String.format("%1$064x", i);
+ } catch (NoSuchAlgorithmException e) {
+ LOG.error("Error generating SHA-256 for bytes: " + bytes, e);
+ }
+ return null;
+ }
+ private final static Charset DEFAULT_CHARSET = Charset.forName("utf-8");
+
+ public static String getLicenseCrc(String packCode, String licSufixCode) {
+ CRC32 crc = new CRC32();
+ crc.update(packCode.getBytes(DEFAULT_CHARSET));
+ crc.update(licSufixCode.getBytes(DEFAULT_CHARSET));
+ return String.format("%03d", crc.getValue() % 1000);
+ }
+
+ public static String getLicenseCrc(String packCode, Integer licSufixCode) {
+ return getLicenseCrc(packCode, licSufixCode.toString());
+ }
+
+ public static Integer getLicenseCodeSuffix(String licCode) {
+ String[] parts = licCode.split("-");
+
+ return new Integer(parts[2]);
+ }
+
+ public static String getLicenseCode(String packCode, Integer licSufixCode) {
+ String crc = getLicenseCrc(packCode, licSufixCode);
+ return String.format("%s-%s-%s", packCode, crc, licSufixCode);
+ }
+
+ /**
+ * Check if the license code is valid according to the format, the CRC is
+ * validated
+ *
+ * @param licCode
+ * @return true if license code format and its CRC are valid
+ */
+ public static boolean checkValidLicenseCodeCrc(String licCode) {
+ String[] parts = licCode.split("-");
+ if (parts.length != 3) {
+ return false;
+ }
+ String crc = getLicenseCrc(parts[0], parts[2]);
+ return crc.equals(parts[1]);
+ }
+
+ public static void main(String[] args) {
+ String code = getLicenseCode("PCK01", 5);
+ System.out.println(code);
+ System.out.println("Is valid ? " + checkValidLicenseCodeCrc("PCK01-512-"));
+ }
}
--
Gitblit v1.3.2