package com.klarna.ondemand.crypto;
import android.util.Base64;
import java.security.InvalidKeyException;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Signature;
import java.security.SignatureException;
/**
* This class contains common functionality for Crypto objects.
*/
public abstract class CryptoBase implements Crypto {
private static final String DIGEST_ALGORITHM = "SHA256withRSA";
protected static final String ALGORITHM = "RSA";
protected String publicKeyBase64Str;
protected PublicKey publicKey;
protected PrivateKey privateKey;
@Override
public String getPublicKeyBase64Str() {
return publicKeyBase64Str;
}
public static String sign(String message, PrivateKey privateKey) throws NoSuchAlgorithmException, InvalidKeyException, SignatureException {
Signature sign = Signature.getInstance(DIGEST_ALGORITHM);
sign.initSign(privateKey);
sign.update(message.getBytes());
return new String(Base64.encode(sign.sign(), Base64.DEFAULT));
}
@Override
public String sign(String message) throws NoSuchAlgorithmException, InvalidKeyException, SignatureException {
return sign(message, getPrivateKey());
}
protected PrivateKey getPrivateKey() {
return privateKey;
}
}