/*
 *  Copyright (c) 2011-2015 The original author or authors
 *
 *  All rights reserved. This program and the accompanying materials
 *  are made available under the terms of the Eclipse Public License v1.0
 *  and Apache License v2.0 which accompanies this distribution.
 *
 *       The Eclipse Public License is available at
 *       http://www.eclipse.org/legal/epl-v10.html
 *
 *       The Apache License v2.0 is available at
 *       http://www.opensource.org/licenses/apache2.0.php
 *
 *  You may elect to redistribute this code under either of these licenses.
 */

package io.vertx.ext.mail.impl.sasl;

import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;

Author:Alexander Lehmann
/** * @author <a href="http://oss.lehmann.cx/">Alexander Lehmann</a> */
public class CryptUtils { private CryptUtils() { } protected static String hmacHex(String keyString, String message, String hmac) { try { SecretKey key = new SecretKeySpec(keyString.getBytes(StandardCharsets.UTF_8), hmac); Mac mac = Mac.getInstance(key.getAlgorithm()); mac.init(key); return encodeHex(mac.doFinal(message.getBytes(StandardCharsets.UTF_8))); } catch (NoSuchAlgorithmException | InvalidKeyException e) { // doesn't happen, auth will fail in that case return ""; } }
Params:
  • bytes –
Returns:
/** * @param bytes * @return */
protected static String encodeHex(byte[] bytes) { StringBuilder sb = new StringBuilder(bytes.length * 2); for (byte b : bytes) { final int v = ((int) b) & 0xff; if (v < 16) { sb.append('0'); } sb.append(Integer.toHexString(v)); } return sb.toString(); } public static String base64(String string) { // this call does not create multi-line base64 data // (if someone uses a password longer than 57 chars or // one of the other SASL replies is longer than 76 chars) return Base64.getEncoder().encodeToString(string.getBytes(StandardCharsets.UTF_8)); } public static String base64(byte[] data) { return Base64.getEncoder().encodeToString(data); } public static String decodeb64(String string) { return new String(Base64.getDecoder().decode(string), StandardCharsets.UTF_8); } }