Skip to content

Commit 979c657

Browse files
philliphainesfernandezpablo85
authored andcommitted
RSA-SHA1 / PKCS#1 signature service helper
1 parent 97fa26f commit 979c657

2 files changed

Lines changed: 113 additions & 0 deletions

File tree

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package org.scribe.services;
2+
3+
import org.apache.commons.codec.binary.*;
4+
import org.scribe.exceptions.*;
5+
import java.security.*;
6+
7+
/**
8+
* A signature service that uses the RSA-SHA1 algorithm.
9+
*/
10+
public class RSASha1SignatureService implements SignatureService
11+
{
12+
private static final String METHOD = "RSA-SHA1";
13+
private static final String RSA_SHA1 = "SHA1withRSA";
14+
15+
private PrivateKey privateKey;
16+
17+
public RSASha1SignatureService(PrivateKey privateKey)
18+
{
19+
this.privateKey = privateKey;
20+
}
21+
22+
/**
23+
* {@inheritDoc}
24+
*/
25+
public String getSignature(String baseString, String apiSecret, String tokenSecret)
26+
{
27+
try
28+
{
29+
Signature signature = Signature.getInstance(RSA_SHA1);
30+
signature.initSign(privateKey);
31+
signature.update(baseString.getBytes());
32+
return new String(Base64.encodeBase64(signature.sign(), false));
33+
}
34+
catch (Exception e)
35+
{
36+
throw new OAuthSignatureException(baseString, e);
37+
}
38+
}
39+
40+
/**
41+
* {@inheritDoc}
42+
*/
43+
public String getSignatureMethod()
44+
{
45+
return METHOD;
46+
}
47+
}
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package org.scribe.services;
2+
3+
import static org.junit.Assert.*;
4+
5+
import org.junit.*;
6+
import org.apache.commons.codec.binary.*;
7+
import java.security.*;
8+
import java.security.spec.*;
9+
10+
public class RSASha1SignatureServiceTest
11+
{
12+
13+
RSASha1SignatureService service = new RSASha1SignatureService(getPrivateKey());
14+
15+
@Test
16+
public void shouldReturnSignatureMethodString()
17+
{
18+
String expected = "RSA-SHA1";
19+
assertEquals(expected, service.getSignatureMethod());
20+
}
21+
22+
@Test
23+
public void shouldReturnSignature()
24+
{
25+
String apiSecret = "api secret";
26+
String tokenSecret = "token secret";
27+
String baseString = "base string";
28+
String signature = "LUNRzQAlpdNyM9mLXm96Va6g/qVNnEAb7p7K1KM0g8IopOFQJPoOO7cvppgt7w3QyhijWJnCmvqXaaIAGrqvdyr3fIzBULh8D/iZQUNLMi08GCOA34P81XBvsc7A5uJjPDsGhJg2MzoVJ8nWJhU/lMMk4c92S1WGskeoDofRwpo=";
29+
assertEquals(signature, service.getSignature(baseString, apiSecret, tokenSecret));
30+
}
31+
32+
/**
33+
*Created primary key using openssl.
34+
*
35+
* openssl req -x509 -nodes -days 365 -newkey rsa:1024 -sha1 -subj '/C=GB/ST=/L=Manchester/CN=www.example.com' -keyout myrsakey.pem -out /tmp/myrsacert.pem
36+
* openssl pkcs8 -in myrsakey.pem -topk8 -nocrypt -out myrsakey.pk8
37+
*/
38+
private static PrivateKey getPrivateKey()
39+
{
40+
String str = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAMPQ5BCMxlUq2TYy\n"+
41+
"iRIoEUsz6HGTJhHuasS2nx1Se4Co3lxwxyubVdFj8AuhHNJSmJvjlpbTsGOjLZpr\n"+
42+
"HyDEDdJmf1Fensh1MhUnBZ4a7uLrZrKzFHHJdamX9pxapB89vLeHlCot9hVXdrZH\n"+
43+
"nNtg6FdmRKH/8gbs8iDyIayFvzYDAgMBAAECgYA+c9MpTBy9cQsR9BAvkEPjvkx2\n"+
44+
"XL4ZnfbDgpNA4Nuu7yzsQrPjPomiXMNkkiAFHH67yVxwAlgRjyuuQlgNNTpKvyQt\n"+
45+
"XcHxffnU0820VmE23M+L7jg2TlB3+rUnEDmDvCoyjlwGDR6lNb7t7Fgg2iR+iaov\n"+
46+
"0iVzz+l9w0slRlyGsQJBAPWXW2m3NmFgqfDxtw8fsKC2y8o17/cnPjozRGtWb8LQ\n"+
47+
"g3VCb8kbOFHOYNGazq3M7+wD1qILF2h/HecgK9eQrZ0CQQDMHXoJMfKKbrFrTKgE\n"+
48+
"zyggO1gtuT5OXYeFewMEb5AbDI2FfSc2YP7SHij8iQ2HdukBrbTmi6qxh3HmIR58\n"+
49+
"I/AfAkEA0Y9vr0tombsUB8cZv0v5OYoBZvCTbMANtzfb4AOHpiKqqbohDOevLQ7/\n"+
50+
"SpvgVCmVaDz2PptcRAyEBZ5MCssneQJAB2pmvaDH7Ambfod5bztLfOhLCtY5EkXJ\n"+
51+
"n6rZcDbRaHorRhdG7m3VtDKOUKZ2DF7glkQGV33phKukErVPUzlHBwJAScD9TqaG\n"+
52+
"wJ3juUsVtujV23SnH43iMggXT7m82STpPGam1hPfmqu2Z0niePFo927ogQ7H1EMJ\n"+
53+
"UHgqXmuvk2X/Ww==";
54+
55+
try
56+
{
57+
KeyFactory fac = KeyFactory.getInstance("RSA");
58+
PKCS8EncodedKeySpec privKeySpec = new PKCS8EncodedKeySpec(Base64.decodeBase64(str.getBytes()));
59+
return fac.generatePrivate(privKeySpec);
60+
}
61+
catch (Exception e)
62+
{
63+
throw new RuntimeException(e);
64+
}
65+
}
66+
}

0 commit comments

Comments
 (0)