You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@oltu.apache.org by si...@apache.org on 2014/06/25 17:43:49 UTC
svn commit: r1605452 - in /oltu/trunk/jose/jws/src:
main/java/org/apache/oltu/jose/jws/signature/impl/
test/java/org/apache/oltu/jose/jws/signature/impl/
Author: simonetripodi
Date: Wed Jun 25 15:43:48 2014
New Revision: 1605452
URL: http://svn.apache.org/r1605452
Log:
trivial: code format
Modified:
oltu/trunk/jose/jws/src/main/java/org/apache/oltu/jose/jws/signature/impl/SignatureMethodRSAImpl.java
oltu/trunk/jose/jws/src/main/java/org/apache/oltu/jose/jws/signature/impl/SignatureMethodsHMAC256Impl.java
oltu/trunk/jose/jws/src/test/java/org/apache/oltu/jose/jws/signature/impl/SignatureMethodRSAImplTest.java
oltu/trunk/jose/jws/src/test/java/org/apache/oltu/jose/jws/signature/impl/SignatureMethodsHMAC256ImplTest.java
Modified: oltu/trunk/jose/jws/src/main/java/org/apache/oltu/jose/jws/signature/impl/SignatureMethodRSAImpl.java
URL: http://svn.apache.org/viewvc/oltu/trunk/jose/jws/src/main/java/org/apache/oltu/jose/jws/signature/impl/SignatureMethodRSAImpl.java?rev=1605452&r1=1605451&r2=1605452&view=diff
==============================================================================
--- oltu/trunk/jose/jws/src/main/java/org/apache/oltu/jose/jws/signature/impl/SignatureMethodRSAImpl.java (original)
+++ oltu/trunk/jose/jws/src/main/java/org/apache/oltu/jose/jws/signature/impl/SignatureMethodRSAImpl.java Wed Jun 25 15:43:48 2014
@@ -15,68 +15,60 @@
* limitations under the License.
*/
package org.apache.oltu.jose.jws.signature.impl;
-
+
import java.security.Signature;
import org.apache.oltu.commons.encodedtoken.TokenDecoder;
import org.apache.oltu.jose.jws.JwsConstants;
import org.apache.oltu.jose.jws.signature.SignatureMethod;
/**
- * Class that asymmetrically sign and verify the
- * issued token
- *
+ * Class that asymmetrically sign and verify the issued token.
*/
-public class SignatureMethodRSAImpl implements
-SignatureMethod<PrivateKey, PublicKey>{
-
+public class SignatureMethodRSAImpl implements SignatureMethod<PrivateKey, PublicKey>{
+
private String algorithm;
public SignatureMethodRSAImpl(String algorithm) {
- super();
this.algorithm = algorithm;
}
-
- /*
- * Calculate the signature of given header.payload as for
- * http://tools.ietf.org/html/draft-ietf-jose-json-web-signature-21#appendix-A.2.1
- *
+ /**
+ * Calculate the signature of given header.payload as for
+ * <a href="http://tools.ietf.org/html/draft-ietf-jose-json-web-signature-21#appendix-A.2.1">appendix-A.2.1</a>
+ *
+ * {@inheritDoc}
*/
@Override
public String calculate(String header, String payload, PrivateKey signingKey) {
- StringBuilder sb = new StringBuilder();
- sb.append(header).append(".").append(payload);
- final String stringToSign = sb.toString();
- byte[] bytes = stringToSign.getBytes();
+ byte[] token = toToken(header, payload);
try {
Signature signature = Signature.getInstance(getAlgorithmInternal());
-
+
signature.initSign(signingKey.getPrivateKey());
- signature.update(bytes);
- bytes = signature.sign();
-
- return TokenDecoder.base64Encode(bytes);
+ signature.update(token);
+ token = signature.sign();
+
+ return TokenDecoder.base64Encode(token);
} catch (Exception e) {
throw new RuntimeException(e);
- }
+ }
}
- /*
- * Verify the signature of given header.payload as for
- * http://tools.ietf.org/html/draft-ietf-jose-json-web-signature-21#appendix-A.2.2
- *
+ /**
+ * Verify the signature of given header.payload as for
+ * <a href="http://tools.ietf.org/html/draft-ietf-jose-json-web-signature-21#appendix-A.2.2">appendix-A.2.2</a>
+ *
+ * {@inheritDoc}
*/
@Override
- public boolean verify(String signature, String header, String payload,
- PublicKey verifyingKey) {
- final String text = header + "." + payload;
+ public boolean verify(String signature, String header, String payload, PublicKey verifyingKey) {
+ byte[] token = toToken(header, payload);
try {
Signature sign = Signature.getInstance(getAlgorithmInternal());
sign.initVerify(verifyingKey.getPublicKey());
- sign.update(text.getBytes());
-
+ sign.update(token);
+
return sign.verify(decode(signature));
-
} catch (Exception e) {
return false;
}
@@ -86,33 +78,53 @@ SignatureMethod<PrivateKey, PublicKey>{
public String getAlgorithm() {
return algorithm;
}
-
+
// ---------- Private methods ---------------------------------------------
- private String getAlgorithmInternal(){
+
+ private static byte[] toToken(String header, String payload) {
+ return new StringBuilder()
+ .append(header)
+ .append(".")
+ .append(payload)
+ .toString()
+ .getBytes();
+ }
+
+ private String getAlgorithmInternal() {
String alg = null;
- if (JwsConstants.RS256.equals(algorithm)) {
- alg = "SHA256withRSA";
- } else if (JwsConstants.RS384.equals(algorithm)) {
- alg = "SHA384withRSA";
- } else if (JwsConstants.RS512.equals(algorithm)) {
- alg = "SHA512withRSA";
+ if (JwsConstants.RS256.equals(algorithm)) {
+ alg = "SHA256withRSA";
+ } else if (JwsConstants.RS384.equals(algorithm)) {
+ alg = "SHA384withRSA";
+ } else if (JwsConstants.RS512.equals(algorithm)) {
+ alg = "SHA512withRSA";
}
return alg;
}
-
+
private static byte[] decode(String arg) throws Exception {
String s = arg;
s = s.replace('-', '+'); // 62nd char of encoding
s = s.replace('_', '/'); // 63rd char of encoding
+
switch (s.length() % 4) // Pad with trailing '='s
{
- case 0: break; // No pad chars in this case
- case 2: s += "=="; break; // Two pad chars
- case 3: s += "="; break; // One pad char
- default: throw new java.lang.Exception(
- "Illegal base64url string!");
+ case 0: // No pad chars in this case
+ break;
+
+ case 2: // Two pad chars
+ s += "==";
+ break;
+
+ case 3: // One pad char
+ s += "=";
+ break;
+
+ default:
+ throw new Exception("Illegal base64url string!");
}
+
return TokenDecoder.base64DecodeToByte(s);
- }
+ }
}
Modified: oltu/trunk/jose/jws/src/main/java/org/apache/oltu/jose/jws/signature/impl/SignatureMethodsHMAC256Impl.java
URL: http://svn.apache.org/viewvc/oltu/trunk/jose/jws/src/main/java/org/apache/oltu/jose/jws/signature/impl/SignatureMethodsHMAC256Impl.java?rev=1605452&r1=1605451&r2=1605452&view=diff
==============================================================================
--- oltu/trunk/jose/jws/src/main/java/org/apache/oltu/jose/jws/signature/impl/SignatureMethodsHMAC256Impl.java (original)
+++ oltu/trunk/jose/jws/src/main/java/org/apache/oltu/jose/jws/signature/impl/SignatureMethodsHMAC256Impl.java Wed Jun 25 15:43:48 2014
@@ -23,21 +23,18 @@ import javax.crypto.spec.SecretKeySpec;
import org.apache.oltu.commons.encodedtoken.TokenDecoder;
import org.apache.oltu.jose.jws.signature.SignatureMethod;
-public class SignatureMethodsHMAC256Impl implements
- SignatureMethod<SymmetricKeyImpl, SymmetricKeyImpl> {
+public class SignatureMethodsHMAC256Impl implements SignatureMethod<SymmetricKeyImpl, SymmetricKeyImpl> {
private static final String ALG = "HS256";
@Override
- public String calculate(String header, String payload,
- SymmetricKeyImpl signingKey) {
-
+ public String calculate(String header, String payload, SymmetricKeyImpl signingKey) {
StringBuilder sb = new StringBuilder();
sb.append(header).append(".").append(payload);
String stringToSign = sb.toString();
byte[] bytes = stringToSign.getBytes();
- try {
+ try {
Mac mac = Mac.getInstance("HMACSHA256");
mac.init(new SecretKeySpec(signingKey.getKey(), mac.getAlgorithm()));
mac.update(bytes);
@@ -53,8 +50,7 @@ public class SignatureMethodsHMAC256Impl
}
@Override
- public boolean verify(String signature, String header, String payload,
- SymmetricKeyImpl verifyingKey) {
+ public boolean verify(String signature, String header, String payload, SymmetricKeyImpl verifyingKey) {
String signed = calculate(header, payload, verifyingKey);
return signed.equals(signature);
}
Modified: oltu/trunk/jose/jws/src/test/java/org/apache/oltu/jose/jws/signature/impl/SignatureMethodRSAImplTest.java
URL: http://svn.apache.org/viewvc/oltu/trunk/jose/jws/src/test/java/org/apache/oltu/jose/jws/signature/impl/SignatureMethodRSAImplTest.java?rev=1605452&r1=1605451&r2=1605452&view=diff
==============================================================================
--- oltu/trunk/jose/jws/src/test/java/org/apache/oltu/jose/jws/signature/impl/SignatureMethodRSAImplTest.java (original)
+++ oltu/trunk/jose/jws/src/test/java/org/apache/oltu/jose/jws/signature/impl/SignatureMethodRSAImplTest.java Wed Jun 25 15:43:48 2014
@@ -31,10 +31,10 @@ import org.junit.Test;
/**
- * Unit test based on the example contained in
+ * Unit test based on the example contained in
* http://tools.ietf.org/html/draft-ietf-jose-json-web-signature-25#appendix-A.2 and
* http://tools.ietf.org/html/draft-ietf-jose-cookbook-01#section-3.1
- *
+ *
*/
public class SignatureMethodRSAImplTest {
@@ -45,6 +45,7 @@ public class SignatureMethodRSAImplTest
private String payload;
private RSAPrivateKey rsaPrivKey;
+
private RSAPublicKey rsaPublicKey;
@Before
@@ -64,7 +65,6 @@ public class SignatureMethodRSAImplTest
//validates the example in http://tools.ietf.org/html/draft-ietf-jose-json-web-signature-25#appendix-A.2
@Test
public void testCalculate() throws Exception{
-
final byte[] n = { (byte) 161, (byte) 248, (byte) 22, (byte) 10, (byte) 226, (byte) 227, (byte) 201, (byte) 180,
(byte) 101, (byte) 206, (byte) 141, (byte) 45, (byte) 101, (byte) 98, (byte) 99, (byte) 54, (byte) 43,
(byte) 146, (byte) 125, (byte) 190, (byte) 41, (byte) 225, (byte) 240, (byte) 36, (byte) 119, (byte) 252,
@@ -137,7 +137,7 @@ public class SignatureMethodRSAImplTest
rsa256 = "{\"alg\":\"RS256\"}";
payload = "{\"iss\":\"joe\",\r\n \"exp\":1300819380,\r\n \"http://example.com/is_root\":true}";
-
+
assertEquals("cC4hiUPoj9Eetdgtv3hF80EGrhuB__dzERat0XF9g2VtQgr9PJbu3XOiZj5RZmh7"+
"AAuHIm4Bh-0Qc_lF5YKt_O8W2Fp5jujGbds9uJdbF9CUAr7t1dnZcAcQjbKBYNX4"+
"BAynRFdiuB--f_nZLgrnbyTyWzO75vRK5h6xBArLIARNPvkSjtQBMHlb1L07Qe7K"+
@@ -151,7 +151,6 @@ public class SignatureMethodRSAImplTest
//validates the example in http://tools.ietf.org/html/draft-ietf-jose-json-web-signature-25#appendix-A.2
@Test
public void testVerify() throws Exception{
-
final byte[] n = { (byte) 161, (byte) 248, (byte) 22, (byte) 10, (byte) 226, (byte) 227, (byte) 201, (byte) 180,
(byte) 101, (byte) 206, (byte) 141, (byte) 45, (byte) 101, (byte) 98, (byte) 99, (byte) 54, (byte) 43,
(byte) 146, (byte) 125, (byte) 190, (byte) 41, (byte) 225, (byte) 240, (byte) 36, (byte) 119, (byte) 252,
@@ -221,12 +220,12 @@ public class SignatureMethodRSAImplTest
RSAPrivateKeySpec privKeySpec = new RSAPrivateKeySpec(N, D);
rsaPublicKey = (RSAPublicKey) keyFactory.generatePublic(pubKeySpec);
rsaPrivKey = (RSAPrivateKey) keyFactory.generatePrivate(privKeySpec);
-
+
String accessToken = "eyJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ.cC4hiUPoj9Eetdgtv3hF80EGrhuB__dzERat0XF9g2VtQgr9PJbu3XOiZj5RZmh7AAuHIm4Bh-0Qc_lF5YKt_O8W2Fp5jujGbds9uJdbF9CUAr7t1dnZcAcQjbKBYNX4BAynRFdiuB--f_nZLgrnbyTyWzO75vRK5h6xBArLIARNPvkSjtQBMHlb1L07Qe7K0GarZRmB_eSN9383LcOLn6_dO--xi12jzDwusC-eOkHWEsqtFZESc6BfI7noOPqvhJ1phCnvWh6IeYI2w9QOYEUipUTI8np6LbgGY9Fs98rqVt5AXLIhWkWywlVmtVrBp0igcN_IoypGlUPQGe77Rw";
String jwt[] = accessToken.split("\\.");
assertTrue(sRsaImpl.verify(jwt[2], jwt[0], jwt[1], new PublicKey(rsaPublicKey)));
}
-
+
//validates the example in http://tools.ietf.org/html/draft-ietf-jose-cookbook-01#section-3.1
@Test
public void testCalculateCookbook() throws Exception{
@@ -259,7 +258,7 @@ public class SignatureMethodRSAImplTest
"b24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcm"+
"UgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4", new PrivateKey(rsaPrivKey)));
}
-
+
//validates the example in http://tools.ietf.org/html/draft-ietf-jose-cookbook-01#section-3.1
@Test
public void testVerifyCookbook() throws Exception{
@@ -275,18 +274,18 @@ public class SignatureMethodRSAImplTest
RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(N, E);
RSAPrivateKeySpec privKeySpec = new RSAPrivateKeySpec(N, D);
rsaPublicKey = (RSAPublicKey) keyFactory.generatePublic(pubKeySpec);
- rsaPrivKey = (RSAPrivateKey) keyFactory.generatePrivate(privKeySpec);
-
- String accessToken = "eyJhbGciOiJSUzI1NiIsImtpZCI6ImJpbGJvLmJhZ2dpbnNAaG9iYml0b24uZXhhbXBsZSJ9." +
- "SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IH" +
- "lvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBk" +
- "b24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcm" +
- "UgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4." +
- "MRjdkly7_-oTPTS3AXP41iQIGKa80A0ZmTuV5MEaHoxnW2e5CZ5NlKtainoFmK" +
- "ZopdHM1O2U4mwzJdQx996ivp83xuglII7PNDi84wnB-BDkoBwA78185hX-Es4J" +
- "IwmDLJK3lfWRa-XtL0RnltuYv746iYTh_qHRD68BNt1uSNCrUCTJDt5aAE6x8w" +
- "W1Kt9eRo4QPocSadnHXFxnt8Is9UzpERV0ePPQdLuW3IS_de3xyIrDaLGdjluP" +
- "xUAhb6L2aXic1U12podGU0KLUQSE_oI-ZnmKJ3F4uOZDnd6QZWJushZ41Axf_f" +
+ rsaPrivKey = (RSAPrivateKey) keyFactory.generatePrivate(privKeySpec);
+
+ String accessToken = "eyJhbGciOiJSUzI1NiIsImtpZCI6ImJpbGJvLmJhZ2dpbnNAaG9iYml0b24uZXhhbXBsZSJ9." +
+ "SXTigJlzIGEgZGFuZ2Vyb3VzIGJ1c2luZXNzLCBGcm9kbywgZ29pbmcgb3V0IH" +
+ "lvdXIgZG9vci4gWW91IHN0ZXAgb250byB0aGUgcm9hZCwgYW5kIGlmIHlvdSBk" +
+ "b24ndCBrZWVwIHlvdXIgZmVldCwgdGhlcmXigJlzIG5vIGtub3dpbmcgd2hlcm" +
+ "UgeW91IG1pZ2h0IGJlIHN3ZXB0IG9mZiB0by4." +
+ "MRjdkly7_-oTPTS3AXP41iQIGKa80A0ZmTuV5MEaHoxnW2e5CZ5NlKtainoFmK" +
+ "ZopdHM1O2U4mwzJdQx996ivp83xuglII7PNDi84wnB-BDkoBwA78185hX-Es4J" +
+ "IwmDLJK3lfWRa-XtL0RnltuYv746iYTh_qHRD68BNt1uSNCrUCTJDt5aAE6x8w" +
+ "W1Kt9eRo4QPocSadnHXFxnt8Is9UzpERV0ePPQdLuW3IS_de3xyIrDaLGdjluP" +
+ "xUAhb6L2aXic1U12podGU0KLUQSE_oI-ZnmKJ3F4uOZDnd6QZWJushZ41Axf_f" +
"cIe8u9ipH84ogoree7vjbU5y18kDquDg";
String jwt[] = accessToken.split("\\.");
assertTrue(sRsaImpl.verify(jwt[2], jwt[0], jwt[1], new PublicKey(rsaPublicKey)));
Modified: oltu/trunk/jose/jws/src/test/java/org/apache/oltu/jose/jws/signature/impl/SignatureMethodsHMAC256ImplTest.java
URL: http://svn.apache.org/viewvc/oltu/trunk/jose/jws/src/test/java/org/apache/oltu/jose/jws/signature/impl/SignatureMethodsHMAC256ImplTest.java?rev=1605452&r1=1605451&r2=1605452&view=diff
==============================================================================
--- oltu/trunk/jose/jws/src/test/java/org/apache/oltu/jose/jws/signature/impl/SignatureMethodsHMAC256ImplTest.java (original)
+++ oltu/trunk/jose/jws/src/test/java/org/apache/oltu/jose/jws/signature/impl/SignatureMethodsHMAC256ImplTest.java Wed Jun 25 15:43:48 2014
@@ -47,6 +47,7 @@ public class SignatureMethodsHMAC256Impl
private String payload;
private SymmetricKeyImpl key;
+
private SignatureMethodsHMAC256Impl sHmacImpl;
@Before