package net.blogracy.util;
import static org.junit.Assert.assertEquals;
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.PublicKey;
import java.security.Signature;
import java.security.SignatureException;
import org.apache.commons.codec.binary.Base64;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
public class SignatureTest {
private static String content;
private static KeyPair keyPair;
@BeforeClass
public static void setUpBeforeClass() throws Exception {
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(1024);
keyPair = keyPairGenerator.genKeyPair();
content = "Guybrush Treepwood";
}
@AfterClass
public static void tearDownAfterClass() throws Exception {
}
@Before
public void setUp() throws Exception {
}
@After
public void tearDown() throws Exception {
}
@Test
public void testBasicSignature() {
try {
Signature signer = Signature.getInstance("SHA256withRSA");
signer.initSign(keyPair.getPrivate());
signer.update(content.getBytes("UTF-8"));
String signature = Base64.encodeBase64URLSafeString(signer.sign());
Signature verifier = Signature.getInstance("SHA256withRSA");
verifier.initVerify(keyPair.getPublic());
verifier.update(content.getBytes("UTF-8"));
assert (verifier.verify(Base64.decodeBase64(signature)));
} catch (SignatureException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
@Test
public void testJwtSignature() {
try {
String signed = JsonWebSignature.sign(content, keyPair);
PublicKey publicKey = JsonWebSignature.getSignerKey(signed);
assertEquals(publicKey, keyPair.getPublic());
String verified = JsonWebSignature.verify(signed, publicKey);
assertEquals(verified, content);
} catch (SignatureException e) {
e.printStackTrace();
throw new AssertionError();
}
}
}