All Downloads are FREE. Search and download functionalities are using the official Maven repository.

utilities.flex.tokenverification.TokenVerificationUtility Maven / Gradle / Ivy

There is a newer version: 0.0.8
Show newest version
package utilities.flex.tokenverification;

import java.io.IOException;
import java.security.GeneralSecurityException;
import java.security.PublicKey;
import java.security.Signature;
import java.util.Map;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import utilities.flex.exception.FlexEncodingException;
import utilities.flex.exception.FlexException;
import utilities.flex.exception.FlexSDKInternalException;
import utilities.flex.exception.FlexSecurityException;
import utilities.flex.security.Base64;

public class TokenVerificationUtility {
	private static Logger logger = LogManager.getLogger(TokenVerificationUtility.class);
	
	public boolean verifyToken(PublicKey publicKey, Map postParams) throws FlexException {
		if (postParams == null) {
			logger.error("FlexSecurityException : A valid Map must be supplied");
			throw new FlexSecurityException("A valid Map must be supplied");
		}
		final String signature = (String) postParams.get("signature");
		
		if (signature == null) {
			logger.error("FlexSecurityException : Missing required field 'signature'");
			throw new FlexSecurityException("Missing required field: signature");
		}
		final String signedFields = (String) postParams.get("signedFields");
		
		if (signedFields == null) {
			logger.error("FlexSecurityException : Missing required field: 'signedFields'");
			throw new FlexSecurityException("Missing required field: signedFields");
		}
		
		StringBuilder sb = new StringBuilder();
		for (String k : signedFields.split(",")) {
			sb.append(',');
			sb.append(postParams.get("" + k));
		}
		final String signedValues = sb.substring(1);
		return validateTokenSignature(publicKey, signedValues, signature);		
}
	
	private boolean validateTokenSignature(PublicKey publicKey, String signedFields, String signature) throws FlexException {
		boolean success = false;
		
		if (publicKey == null) {
			logger.error("FlexSecurityException : Must supply a valid PublicKey instance");
			throw new FlexSecurityException("Must supply a valid PublicKey instance");
		}
		
		if (signature == null) {
			logger.error("FlexSecurityException : Missing required field 'signature'");
			throw new FlexSecurityException("Missing required field: signature");
		}
		
		if (signedFields == null) {
			logger.error("FlexSecurityException : Missing required field: 'signedFields'");
			throw new FlexSecurityException("Missing required field: signedFields");
		}
		
		try {
			final Signature signInstance = Signature.getInstance("SHA512withRSA");
			signInstance.initVerify(publicKey);
			signInstance.update(signedFields.getBytes());
			success = signInstance.verify(Base64.decode(signature));
			System.out.println(success);
		} catch (IOException e) {
			logger.error("FlexEncodingException : Unable to decode signature\n{}", e);
			throw new FlexEncodingException("Unable to decode signature"+ e);
		} catch (GeneralSecurityException e) {
			logger.error("FlexSDKInternalException : {}", e);
			throw new FlexSDKInternalException(e);
		}
		return success;
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy