Skip to content

Instantly share code, notes, and snippets.

@rhenium
Created October 13, 2016 13:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rhenium/2a36cee51612a1b44563052b6daec077 to your computer and use it in GitHub Desktop.
Save rhenium/2a36cee51612a1b44563052b6daec077 to your computer and use it in GitHub Desktop.
import java.math.BigInteger;
import java.security.KeyFactory;
import java.security.Signature;
import java.security.interfaces.*;
import java.security.spec.DSAPrivateKeySpec;
import java.security.spec.RSAPrivateKeySpec;
import org.bouncycastle.jce.spec.*;
import org.bouncycastle.jce.*;
import java.util.Base64;
class RubyOpenSSL {
static byte[] DATA = "Sign me!".getBytes();
public static void main(String[] args) throws Exception {
java.security.Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
System.out.println("data: \"" + new String(DATA) + "\"");
RSAPKCS1v15();
DSA();
ECDSA();
}
static void RSAPKCS1v15() throws Exception {
Signature signer = Signature.getInstance("SHA256withRSA", "BC");
signer.initSign(RSA1024());
signer.update(DATA);
out("SHA256withRSA", signer.sign());
}
static void DSA() throws Exception {
Signature signer = Signature.getInstance("SHA256withDSA", "BC");
signer.initSign(DSA512());
signer.update(DATA);
out("SHA256withDSA", signer.sign());
}
static void ECDSA() throws Exception {
Signature signer = Signature.getInstance("SHA256withECDSA", "BC");
signer.initSign(P256());
signer.update(DATA);
out("SHA256withECDSA", signer.sign());
}
static RSAPrivateKey RSA1024() throws Exception {
RSAPrivateKeySpec keySpec = new RSAPrivateKeySpec(
new BigInteger("CBC2C4B0D440A73ED4FE3E43A01E170603BD67C02DBF9CBF395411A746A0F13AA8D587B0B168A3C44581EC93804F0A41376EBB5384F59CF648C711043BB9FF58D6B6C2CF495AC8DA87CB2C101152C59A9D5CA48B7F43781E2EFF190FDA62868C0A243C8C0E237A02B614999733BD6E3DEFA314DFE979E04EA517F25F14453987", 16),
new BigInteger("A4A5FCC41AAF27B5C8ECACA97E8FF1F0C542DEBC56FB5790D9A54A228E1AECF2868D0CF9455215CB3A9352F499A0C4DB900C654886CEE587C9A539E5DED15C381EB240CC6A40F5BFA65E8D8B712644976C44CE4CB0F05164E7EB5F138276F5EED5358E4B54B54EBBC4AFF4F22FD7A1D9609D086CE95A074EE0A1DC7BBBECEE91", 16));
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
return (RSAPrivateKey)keyFactory.generatePrivate(keySpec);
}
static DSAPrivateKey DSA512() throws Exception {
DSAPrivateKeySpec keySpec = new DSAPrivateKeySpec(
new BigInteger("046F7C878B62960E92E798EB7890F749EDEC969B", 16),
new BigInteger("E650781AF1308EBB0C9460EA1ACC6B6EA785461EA8F4E5ADE858136221041DA398864231BF43A44593C3370386F7DEE60E3067BC32758B9E8E992DCC6D39E8BF", 16),
new BigInteger("982E6FF683AD20C1E036461FB5326AB71A1B2E83", 16),
new BigInteger("7D1DD170FF7B5DF0AE25D45647BFB4C265E27764B6FB745DD35A81943F4D37442AA88E2DFF94774AA1575340DB914BF9BA0E50B0863463890FE50518022C271A", 16));
KeyFactory keyFactory = KeyFactory.getInstance("DSA");
return (DSAPrivateKey)keyFactory.generatePrivate(keySpec);
}
static ECPrivateKey P256() throws Exception {
ECParameterSpec paramSpec = ECNamedCurveTable.getParameterSpec("prime256v1");
ECPrivateKeySpec keySpec = new ECPrivateKeySpec(
new BigInteger("80F8F450EA71FD4ED5E3BCB1A4E01BBD146D7430F45AB0B1E9628ADD9A5A11F5", 16),
paramSpec);
KeyFactory keyFactory = KeyFactory.getInstance("ECDSA");
return (ECPrivateKey)keyFactory.generatePrivate(keySpec);
}
static void out(String name, byte[] signature) {
System.out.println(name);
String base64 = Base64.getEncoder().encodeToString(signature);
int len = base64.length();
for (int i = 0; i < len; i += 60)
System.out.println(base64.substring(i, i + 60 > len ? len : i + 60));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment