SignatureProvider.kt 2.20 KiB
package com.futo.platformplayer
import java.security.KeyFactory
import java.security.KeyPairGenerator
import java.security.Signature
import java.security.spec.PKCS8EncodedKeySpec
import java.security.spec.X509EncodedKeySpec
import java.util.Base64
data class KeyPair(val privateKey: String, val publicKey: String);
class SignatureProvider {
companion object {
fun sign(text: String, privateKey: String): String {
val privateKeyBytes = Base64.getDecoder().decode(privateKey);
val keySpec = PKCS8EncodedKeySpec(privateKeyBytes);
val keyFactory = KeyFactory.getInstance("RSA");
val privateKeyObject = keyFactory.generatePrivate(keySpec);
val signature = Signature.getInstance("SHA512withRSA");
signature.initSign(privateKeyObject);
signature.update(text.toByteArray());
val signatureBytes = signature.sign();
return Base64.getEncoder().encodeToString(signatureBytes);
}
fun verify(text: String, signature: String, publicKey: String): Boolean {
val publicKeyBytes = Base64.getDecoder().decode(publicKey);
val keySpec = X509EncodedKeySpec(publicKeyBytes);
val keyFactory = KeyFactory.getInstance("RSA");
val publicKeyObject = keyFactory.generatePublic(keySpec);
val signatureBytes = Base64.getDecoder().decode(signature);
val verifySignature = Signature.getInstance("SHA512withRSA");
verifySignature.initVerify(publicKeyObject);
verifySignature.update(text.toByteArray());
return verifySignature.verify(signatureBytes);
}
fun generateKeyPair(): KeyPair {
val keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(2048);
val keyPair = keyPairGenerator.generateKeyPair();
val privateKeyBytes = keyPair.private.encoded;
val privateKey = Base64.getEncoder().encodeToString(privateKeyBytes);
val publicKeyBytes = keyPair.public.encoded;
val publicKey = Base64.getEncoder().encodeToString(publicKeyBytes);
return KeyPair(privateKey, publicKey);
}
}
}