Example usage for com.amazonaws.util StringUtils UTF8

List of usage examples for com.amazonaws.util StringUtils UTF8

Introduction

In this page you can find the example usage for com.amazonaws.util StringUtils UTF8.

Prototype

Charset UTF8

To view the source code for com.amazonaws.util StringUtils UTF8.

Click Source Link

Usage

From source file:io.fineo.client.auth.cognito.CognitoSecretHash.java

License:Open Source License

/**
 * Generates secret hash. Uses HMAC SHA256.
 *
 * @param userId            REQUIRED: User ID
 * @param clientId          REQUIRED: Client ID
 * @param clientSecret      REQUIRED: Client secret
 * @return  secret hash as a {@code String}, {@code null } if {@code clinetSecret if null}
 *///from w  w w  . j av a 2  s .co  m
public static String getSecretHash(String userId, String clientId, String clientSecret) {
    // Arguments userId and clientId have to be not-null.
    if (userId == null) {
        throw new RuntimeException("user ID cannot be null");
    }

    if (clientId == null) {
        throw new RuntimeException("client ID cannot be null");
    }

    // Return null as secret hash if clientSecret is null.
    if (clientSecret == null) {
        return null;
    }

    SecretKeySpec signingKey = new SecretKeySpec(clientSecret.getBytes(StringUtils.UTF8), HMAC_SHA_256);

    try {
        Mac mac = Mac.getInstance(HMAC_SHA_256);
        mac.init(signingKey);
        mac.update(userId.getBytes(StringUtils.UTF8));
        byte[] rawHmac = mac.doFinal(clientId.getBytes(StringUtils.UTF8));
        return new String(Base64.encode(rawHmac));
    } catch (Exception e) {
        throw new RuntimeException("errors in HMAC calculation");
    }
}

From source file:io.fineo.client.auth.cognito.CognitoUser.java

License:Open Source License

/**
 * Creates response for the second step of the SRP authentication.
 *
 * @param challenge                     REQUIRED: {@link InitiateAuthResult} contains next challenge.
 * @param authenticationDetails         REQUIRED: {@link AuthenticationDetails} user authentication details.
 * @param authenticationHelper          REQUIRED: Internal helper class for SRP calculations.
 * @return {@link RespondToAuthChallengeRequest}.
 *//*from  w  ww  .  ja  v a  2  s . c o m*/
private RespondToAuthChallengeRequest userSrpAuthRequest(InitiateAuthResult challenge,
        AuthenticationDetails authenticationDetails, AuthenticationHelper authenticationHelper) {
    this.usernameInternal = challenge.getChallengeParameters().get("USERNAME");
    this.deviceKey = devices.getDeviceKey(usernameInternal, getUserPoolId());
    secretHash = CognitoSecretHash.getSecretHash(usernameInternal, clientId, clientSecret);

    BigInteger B = new BigInteger(challenge.getChallengeParameters().get("SRP_B"), 16);
    if (B.mod(AuthenticationHelper.N).equals(BigInteger.ZERO)) {
        throw new CognitoInternalErrorException("SRP error, B cannot be zero");
    }

    BigInteger salt = new BigInteger(challenge.getChallengeParameters().get("SALT"), 16);
    byte[] key = authenticationHelper.getPasswordAuthenticationKey(usernameInternal,
            authenticationDetails.getPassword(), B, salt);

    Date timestamp = new Date();
    byte[] hmac;
    try {
        Mac mac = Mac.getInstance("HmacSHA256");
        SecretKeySpec keySpec = new SecretKeySpec(key, "HmacSHA256");
        mac.init(keySpec);
        mac.update(pool.getUserPoolId().split("_", 2)[1].getBytes(StringUtils.UTF8));
        mac.update(usernameInternal.getBytes(StringUtils.UTF8));
        byte[] secretBlock = Base64.decode(challenge.getChallengeParameters().get("SECRET_BLOCK"));
        mac.update(secretBlock);
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("EEE MMM d HH:mm:ss z yyyy", Locale.US);
        simpleDateFormat.setTimeZone(new SimpleTimeZone(SimpleTimeZone.UTC_TIME, "UTC"));
        String dateString = simpleDateFormat.format(timestamp);
        byte[] dateBytes = dateString.getBytes(StringUtils.UTF8);
        hmac = mac.doFinal(dateBytes);
    } catch (Exception e) {
        throw new CognitoInternalErrorException("SRP error", e);
    }

    SimpleDateFormat formatTimestamp = new SimpleDateFormat("EEE MMM d HH:mm:ss z yyyy", Locale.US);
    formatTimestamp.setTimeZone(new SimpleTimeZone(SimpleTimeZone.UTC_TIME, "UTC"));

    Map<String, String> srpAuthResponses = new HashMap<String, String>();
    srpAuthResponses.put("PASSWORD_CLAIM_SECRET_BLOCK", challenge.getChallengeParameters().get("SECRET_BLOCK"));
    srpAuthResponses.put("PASSWORD_CLAIM_SIGNATURE", new String(Base64.encode(hmac), StandardCharsets.UTF_8));
    srpAuthResponses.put("TIMESTAMP", formatTimestamp.format(timestamp));
    srpAuthResponses.put("USERNAME", usernameInternal);
    srpAuthResponses.put("USER_ID_FOR_SRP", usernameInternal);
    srpAuthResponses.put("DEVICE_KEY", deviceKey);
    srpAuthResponses.put("SECRET_HASH", secretHash);

    RespondToAuthChallengeRequest authChallengeRequest = new RespondToAuthChallengeRequest();
    authChallengeRequest.setChallengeName(challenge.getChallengeName());
    authChallengeRequest.setClientId(clientId);
    authChallengeRequest.setSession(challenge.getSession());
    authChallengeRequest.setChallengeResponses(srpAuthResponses);

    return authChallengeRequest;
}

From source file:io.fineo.client.auth.cognito.Hkdf.java

License:Open Source License

public byte[] deriveKey(String info, int length) throws IllegalStateException {
    return this.deriveKey(info != null ? info.getBytes(StringUtils.UTF8) : null, length);
}