forked from rachanon/stdbWeb
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
195 lines
7.5 KiB
195 lines
7.5 KiB
9 years ago
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
||
|
"http://www.w3.org/TR/html4/loose.dtd">
|
||
|
<html>
|
||
|
<head>
|
||
|
<meta charset="utf-8">
|
||
|
<title>QUnit JWS sign HS* test of 'jws.js'</title>
|
||
|
<link rel="stylesheet" href="qunit.css" type="text/css" media="screen" />
|
||
|
|
||
|
<script type="text/javascript" src="jquery-1.4.2.min.js"></script>
|
||
|
<script type="text/javascript" src="qunit.js"></script>
|
||
|
|
||
|
<script language="JavaScript" type="text/javascript" src="../jsrsasign-latest-all-min.js"></script>
|
||
|
<script language="JavaScript" type="text/javascript" src="../crypto-1.1.js"></script>
|
||
|
<script language="JavaScript" type="text/javascript" src="../jws-3.3.js"></script>
|
||
|
|
||
|
<script type="text/javascript">
|
||
|
$(document).ready(function(){
|
||
|
|
||
|
var sJWSHS256 = 'eyJhbGciOiJIUzI1NiIsICJjdHkiOiJKV1QifQ.eyJhZ2UiOiAyMX0.vcimDRCLttYBHsO7M0S_tCvUIOGz26Ti5nkRuj1QcHc';
|
||
|
var sJWSHS256LP = 'eyJhbGciOiJIUzI1NiIsICJjdHkiOiJKV1QifQ.eyJhZ2UiOiAyMX0.cFJ8ICyb1rj_iczWJ2IdNAT7h2rLFFElH7436Ev1ddA'; // long password 40bytes
|
||
|
var sJWSHS256B6 = 'eyJhbGciOiJIUzI1NiIsICJjdHkiOiJKV1QifQ.eyJhZ2UiOiAyMX0.Gc9TEuqJtoB5MrxZPwomTFfZ46rJrrs07A4T0VQHFaU'; // base64
|
||
|
|
||
|
test("JWS sign HS* password test (sJWSHS256)", function() {
|
||
|
var sJWS;
|
||
|
|
||
|
sJWS = KJUR.jws.JWS.sign(null, '{"alg":"HS256", "cty":"JWT"}', '{"age": 21}', "aaa");
|
||
|
equal(sJWS, sJWSHS256, "pass=aaa");
|
||
|
|
||
|
sJWS = KJUR.jws.JWS.sign(null, '{"alg":"HS256", "cty":"JWT"}', '{"age": 21}', "616161");
|
||
|
equal(sJWS, sJWSHS256, "pass=616161");
|
||
|
|
||
|
sJWS = KJUR.jws.JWS.sign(null, '{"alg":"HS256", "cty":"JWT"}', '{"age": 21}', {rstr: "aaa"});
|
||
|
equal(sJWS, sJWSHS256, "pass={rstr: aaa}");
|
||
|
|
||
|
sJWS = KJUR.jws.JWS.sign(null, '{"alg":"HS256", "cty":"JWT"}', '{"age": 21}', {utf8: "aaa"});
|
||
|
equal(sJWS, sJWSHS256, "pass={utf8: aaa}");
|
||
|
|
||
|
sJWS = KJUR.jws.JWS.sign(null, '{"alg":"HS256", "cty":"JWT"}', '{"age": 21}', {hex: "616161"});
|
||
|
equal(sJWS, sJWSHS256, "pass={hex: 616161}");
|
||
|
|
||
|
sJWS = KJUR.jws.JWS.sign(null, '{"alg":"HS256", "cty":"JWT"}', '{"age": 21}', {b64: "YWFh"});
|
||
|
equal(sJWS, sJWSHS256, "pass={b64: YWFh}");
|
||
|
|
||
|
sJWS = KJUR.jws.JWS.sign(null, '{"alg":"HS256", "cty":"JWT"}', '{"age": 21}', "6161616");
|
||
|
notEqual(sJWS, sJWSHS256, "pass=6161616 **INVALID**");
|
||
|
|
||
|
sJWS = KJUR.jws.JWS.sign(null, '{"alg":"HS256", "cty":"JWT"}', '{"age": 21}', "61616");
|
||
|
notEqual(sJWS, sJWSHS256, "pass=61616 **INVALID**");
|
||
|
|
||
|
raises(function() {
|
||
|
sJWS = KJUR.jws.JWS.sign(null, '{"alg":"HS256", "cty":"JWT"}', '{"age": 21}', {hex: "zzzz"});
|
||
|
}, "pass{hex: zzzz} **EXCEPTION**");
|
||
|
|
||
|
raises(function() {
|
||
|
sJWS = KJUR.jws.JWS.sign(null, '{"alg":"HS256", "cty":"JWT"}', '{"age": 21}', {hex: "616"});
|
||
|
}, "pass{hex: 616} **EXCEPTION**");
|
||
|
|
||
|
// long password
|
||
|
sJWS = KJUR.jws.JWS.sign(null, '{"alg":"HS256", "cty":"JWT"}', '{"age": 21}', "6162636465666768696a6162636465666768696a6162636465666768696a6162636465666768696a");
|
||
|
equal(sJWS, sJWSHS256LP, "pass=(6162..6a x 4) long");
|
||
|
|
||
|
sJWS = KJUR.jws.JWS.sign(null, '{"alg":"HS256", "cty":"JWT"}', '{"age": 21}', "abcdefghijabcdefghijabcdefghijabcdefghij");
|
||
|
equal(sJWS, sJWSHS256LP, "pass=(abc..j x 4) long");
|
||
|
|
||
|
// base64 Mbc1/+QrCg==, Mbc1_-QrCg, 31b735ffe42b
|
||
|
sJWS = KJUR.jws.JWS.sign(null, '{"alg":"HS256", "cty":"JWT"}', '{"age": 21}', {b64: "Mbc1/+QrCg=="});
|
||
|
equal(sJWS, sJWSHS256B6, "pass=Mbc1/+QrCg== base64");
|
||
|
|
||
|
sJWS = KJUR.jws.JWS.sign(null, '{"alg":"HS256", "cty":"JWT"}', '{"age": 21}', {b64u: "Mbc1_-QrCg"});
|
||
|
equal(sJWS, sJWSHS256B6, "pass=Mbc1_-QrCg base64url");
|
||
|
|
||
|
sJWS = KJUR.jws.JWS.sign(null, '{"alg":"HS256", "cty":"JWT"}', '{"age": 21}', {hex: "31b735ffe42b0a"});
|
||
|
equal(sJWS, sJWSHS256B6, "pass=31b735ffe42b0a base64>hex");
|
||
|
});
|
||
|
|
||
|
test("JWS sign HS* algorithm test (sJWSHS256,384,512)", function() {
|
||
|
var sJWS, sig384, sig512;
|
||
|
|
||
|
sJWS = KJUR.jws.JWS.sign(null, '{"alg":"HS256", "cty":"JWT"}', '{"age": 21}', "aaa");
|
||
|
equal(sJWS, sJWSHS256, "HS256");
|
||
|
|
||
|
sig384 = "eyJhbGciOiJIUzM4NCIsICJjdHkiOiJKV1QifQ.eyJhZ2UiOiAyMX0.bX10I4Ivadicwp3XA7buwjJXByzrvFWXMNxN3rGOunBxrzNSUNkW8YfTPQordvn2";
|
||
|
sJWS = KJUR.jws.JWS.sign(null, '{"alg":"HS384", "cty":"JWT"}', '{"age": 21}', "aaa");
|
||
|
equal(sJWS, sig384, "HS384");
|
||
|
|
||
|
sig512 = "eyJhbGciOiJIUzUxMiIsICJjdHkiOiJKV1QifQ.eyJhZ2UiOiAyMX0.b6HuF_CTLldXzQwAVhsnpEGkbrtquQfjdr8ie_UyqjPFNnGOz-rEvOvfDC_ex4zvVgsARAixM-6Ug9WcnweTgA";
|
||
|
sJWS = KJUR.jws.JWS.sign(null, '{"alg":"HS512", "cty":"JWT"}', '{"age": 21}', "aaa");
|
||
|
equal(sJWS, sig512, "HS512");
|
||
|
|
||
|
raises(function() {
|
||
|
sJWS = KJUR.jws.JWS.sign("HS384", '{"alg":"HS256", "cty":"JWT"}', '{"age": 21}', "aaa");
|
||
|
}, "alg HS384 != header.HS256");
|
||
|
|
||
|
});
|
||
|
|
||
|
test("JWS sign header and/or payload by object test", function() {
|
||
|
var sJWS, pHeader, pPayload;
|
||
|
|
||
|
equal(JSON.stringify({alg: "HS256", cty: "JWT"}), '{"alg":"HS256","cty":"JWT"}',
|
||
|
"if this sub test fails, there is NO PROBLEM that all of following sub test fail.");
|
||
|
|
||
|
sJWS = KJUR.jws.JWS.sign(null, {"alg":"HS256", "cty":"JWT"}, {"age": 21}, "aaa");
|
||
|
equal(sJWS, 'eyJhbGciOiJIUzI1NiIsImN0eSI6IkpXVCJ9.eyJhZ2UiOjIxfQ.pLem30ReEpeXgMt6e3gjZ6QYSpLBbhd_NB-Afud1m4A', 'by header, payload object {}');
|
||
|
|
||
|
pHeader = {};
|
||
|
pHeader.alg = "HS256";
|
||
|
pHeader.cty = "JWT";
|
||
|
pPayload = {};
|
||
|
pPayload.age = 21;
|
||
|
sJWS = KJUR.jws.JWS.sign(null, pHeader, pPayload, "aaa");
|
||
|
equal(sJWS, 'eyJhbGciOiJIUzI1NiIsImN0eSI6IkpXVCJ9.eyJhZ2UiOjIxfQ.pLem30ReEpeXgMt6e3gjZ6QYSpLBbhd_NB-Afud1m4A', 'by header, payload object p.age=21');
|
||
|
|
||
|
});
|
||
|
|
||
|
var hJWSHSPass = "616161";
|
||
|
var sJWSHS256 = 'eyJhbGciOiJIUzI1NiIsICJjdHkiOiJKV1QifQ.eyJhZ2UiOiAyMX0.vcimDRCLttYBHsO7M0S_tCvUIOGz26Ti5nkRuj1QcHc';
|
||
|
var sJWSHS512 = 'eyJhbGciOiJIUzUxMiIsICJjdHkiOiJKV1QifQ.eyJhZ2UiOiAyMX0.b6HuF_CTLldXzQwAVhsnpEGkbrtquQfjdr8ie_UyqjPFNnGOz-rEvOvfDC_ex4zvVgsARAixM-6Ug9WcnweTgA';
|
||
|
|
||
|
// *** VERIFICATION TESTS *****************************************
|
||
|
test("verify test for algorithm HS256", function() {
|
||
|
var result = KJUR.jws.JWS.verify(sJWSHS256, hJWSHSPass);
|
||
|
equal(result, true, "pass=616161");
|
||
|
|
||
|
var result = KJUR.jws.JWS.verify(sJWSHS256, "aaa");
|
||
|
equal(result, true, "pass=aaa");
|
||
|
|
||
|
var result = KJUR.jws.JWS.verify(sJWSHS256, {hex: "616161"});
|
||
|
equal(result, true, "pass={hex:616161}");
|
||
|
|
||
|
var result = KJUR.jws.JWS.verify(sJWSHS256, {utf8: "aaa"});
|
||
|
equal(result, true, "pass={utf8:aaa}");
|
||
|
|
||
|
var result = KJUR.jws.JWS.verify(sJWSHS256, {rstr: "aaa"});
|
||
|
equal(result, true, "pass={rstr:aaa}");
|
||
|
|
||
|
var result = KJUR.jws.JWS.verify(sJWSHS256, {b64: "YWFh"});
|
||
|
equal(result, true, "pass={b64:YWFh}");
|
||
|
|
||
|
var result = KJUR.jws.JWS.verify(sJWSHS256, {b64u: "YWFh"});
|
||
|
equal(result, true, "pass={b64u:YWFh}");
|
||
|
|
||
|
var result = KJUR.jws.JWS.verify(sJWSHS256, "aab");
|
||
|
equal(result, false, "pass=aab FALSE");
|
||
|
});
|
||
|
|
||
|
test("verify test for algorithm HS512", function() {
|
||
|
var result = KJUR.jws.JWS.verify(sJWSHS512, hJWSHSPass);
|
||
|
equal(result, true, "");
|
||
|
});
|
||
|
|
||
|
// *** ALGORITHM ACCEPTANCE TESTS *****************************************
|
||
|
test("arg acceptAlgs test (HS256 not in [HS512])", function() {
|
||
|
expect(1);
|
||
|
var msg = "";
|
||
|
try {
|
||
|
var result = KJUR.jws.JWS.verify(sJWSHS256, hJWSHSPass, ["HS512"]);
|
||
|
} catch(ex) {
|
||
|
msg = ex;
|
||
|
}
|
||
|
equal(msg, "algorithm 'HS256' not accepted in the list", "");
|
||
|
});
|
||
|
|
||
|
test("arg acceptAlgs test (HS256 in [HS256])", function() {
|
||
|
expect(1);
|
||
|
var msg = "";
|
||
|
try {
|
||
|
var result = KJUR.jws.JWS.verify(sJWSHS256, hJWSHSPass, ["HS256"]);
|
||
|
} catch(ex) {
|
||
|
msg = ex;
|
||
|
}
|
||
|
equal(msg, "", "");
|
||
|
});
|
||
|
|
||
|
|
||
|
});
|
||
|
|
||
|
</script>
|
||
|
|
||
|
|
||
|
</head>
|
||
|
<body>
|
||
|
<div id="qunit"></div>
|
||
|
<div id="qunit-fixture">test markup</div>
|
||
|
<p>
|
||
|
<a href="../">TOP</a> |
|
||
|
<a href="index.html">TEST INDEX</a> |
|
||
|
<a href="qunit-do-jws-sign.html">asynmetric key(RS/PS/ES) sign/verify</a> |
|
||
|
<a href="qunit-do-jws-sign-hs.html">Hmac(HS) sign/verify</a> |
|
||
|
<a href="qunit-do-jws-sign-slow.html">sign/verify slow</a> |
|
||
|
<a href="qunit-do-jws-intdate.html">IntDate</a> |
|
||
|
</p>
|
||
|
</body>
|
||
|
</html>
|
||
|
|