Created
October 13, 2016 13:22
-
-
Save rhenium/2a36cee51612a1b44563052b6daec077 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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