package com.github.signed.tryanderror.sftp; import org.bouncycastle.jce.provider.BouncyCastleProvider; import javax.crypto.KeyGenerator; import javax.crypto.Mac; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; public class HMacSha1 { public static final BouncyCastleProvider Provider = new BouncyCastleProvider(); public static final String HMacName = "HMacSHA1"; public HMacSha1Result digest(String message) throws NoSuchAlgorithmException, InvalidKeyException { KeyGenerator keyGenerator = KeyGenerator.getInstance(HMacName, Provider); SecretKey salt = keyGenerator.generateKey(); byte[] digest = digest(message, salt); return new HMacSha1Result(salt.getEncoded(), digest); } public byte[] digest(String message, byte[] salt) throws NoSuchAlgorithmException, InvalidKeyException { SecretKeySpec secretKeySpec = new SecretKeySpec(salt, HMacName); return digest(message, secretKeySpec); } private byte[] digest(String message, SecretKey salt) throws NoSuchAlgorithmException, InvalidKeyException { Mac mac = Mac.getInstance(HMacName, new BouncyCastleProvider()); mac.init(salt); mac.reset(); mac.update(message.getBytes()); return mac.doFinal(); } }