From a21e0e546bf45bb63e51cd9417b51c90a5c3a720 Mon Sep 17 00:00:00 2001
From: n1474335 ()f;jv80UlO&EnSiRP%C~Y >(p+=this.DB-k);
- }
- else {
- d = (this[i]>>(p-=k))&km;
- if(p <= 0) { p += this.DB; --i; }
- }
- if(d > 0) m = true;
- if(m) r += int2char(d);
- }
- }
- return m?r:"0";
-}
-
-// (public) -this
-function bnNegate() { var r = nbi(); BigInteger.ZERO.subTo(this,r); return r; }
-
-// (public) |this|
-function bnAbs() { return (this.s<0)?this.negate():this; }
-
-// (public) return + if this > a, - if this < a, 0 if equal
-function bnCompareTo(a) {
- var r = this.s-a.s;
- if(r != 0) return r;
- var i = this.t;
- r = i-a.t;
- if(r != 0) return (this.s<0)?-r:r;
- while(--i >= 0) if((r=this[i]-a[i]) != 0) return r;
- return 0;
-}
-
-// returns bit length of the integer x
-function nbits(x) {
- var r = 1, t;
- if((t=x>>>16) != 0) { x = t; r += 16; }
- if((t=x>>8) != 0) { x = t; r += 8; }
- if((t=x>>4) != 0) { x = t; r += 4; }
- if((t=x>>2) != 0) { x = t; r += 2; }
- if((t=x>>1) != 0) { x = t; r += 1; }
- return r;
-}
-
-// (public) return the number of bits in "this"
-function bnBitLength() {
- if(this.t <= 0) return 0;
- return this.DB*(this.t-1)+nbits(this[this.t-1]^(this.s&this.DM));
-}
-
-// (protected) r = this << n*DB
-function bnpDLShiftTo(n,r) {
- var i;
- for(i = this.t-1; i >= 0; --i) r[i+n] = this[i];
- for(i = n-1; i >= 0; --i) r[i] = 0;
- r.t = this.t+n;
- r.s = this.s;
-}
-
-// (protected) r = this >> n*DB
-function bnpDRShiftTo(n,r) {
- for(var i = n; i < this.t; ++i) r[i-n] = this[i];
- r.t = Math.max(this.t-n,0);
- r.s = this.s;
-}
-
-// (protected) r = this << n
-function bnpLShiftTo(n,r) {
- var bs = n%this.DB;
- var cbs = this.DB-bs;
- var bm = (1< >(p+=this.DB-8);
- }
- else {
- d = (this[i]>>(p-=8))&0xff;
- if(p <= 0) { p += this.DB; --i; }
- }
- if((d&0x80) != 0) d |= -256;
- if(k == 0 && (this.s&0x80) != (d&0x80)) ++k;
- if(k > 0 || d != this.s) r[k++] = d;
- }
- }
- return r;
-}
-
-function bnEquals(a) { return(this.compareTo(a)==0); }
-function bnMin(a) { return(this.compareTo(a)<0)?this:a; }
-function bnMax(a) { return(this.compareTo(a)>0)?this:a; }
-
-// (protected) r = this op a (bitwise)
-function bnpBitwiseTo(a,op,r) {
- var i, f, m = Math.min(a.t,this.t);
- for(i = 0; i < m; ++i) r[i] = op(this[i],a[i]);
- if(a.t < this.t) {
- f = a.s&this.DM;
- for(i = m; i < this.t; ++i) r[i] = op(this[i],f);
- r.t = this.t;
- }
- else {
- f = this.s&this.DM;
- for(i = m; i < a.t; ++i) r[i] = op(f,a[i]);
- r.t = a.t;
- }
- r.s = op(this.s,a.s);
- r.clamp();
-}
-
-// (public) this & a
-function op_and(x,y) { return x&y; }
-function bnAnd(a) { var r = nbi(); this.bitwiseTo(a,op_and,r); return r; }
-
-// (public) this | a
-function op_or(x,y) { return x|y; }
-function bnOr(a) { var r = nbi(); this.bitwiseTo(a,op_or,r); return r; }
-
-// (public) this ^ a
-function op_xor(x,y) { return x^y; }
-function bnXor(a) { var r = nbi(); this.bitwiseTo(a,op_xor,r); return r; }
-
-// (public) this & ~a
-function op_andnot(x,y) { return x&~y; }
-function bnAndNot(a) { var r = nbi(); this.bitwiseTo(a,op_andnot,r); return r; }
-
-// (public) ~this
-function bnNot() {
- var r = nbi();
- for(var i = 0; i < this.t; ++i) r[i] = this.DM&~this[i];
- r.t = this.t;
- r.s = ~this.s;
- return r;
-}
-
-// (public) this << n
-function bnShiftLeft(n) {
- var r = nbi();
- if(n < 0) this.rShiftTo(-n,r); else this.lShiftTo(n,r);
- return r;
-}
-
-// (public) this >> n
-function bnShiftRight(n) {
- var r = nbi();
- if(n < 0) this.lShiftTo(-n,r); else this.rShiftTo(n,r);
- return r;
-}
-
-// return index of lowest 1-bit in x, x < 2^31
-function lbit(x) {
- if(x == 0) return -1;
- var r = 0;
- if((x&0xffff) == 0) { x >>= 16; r += 16; }
- if((x&0xff) == 0) { x >>= 8; r += 8; }
- if((x&0xf) == 0) { x >>= 4; r += 4; }
- if((x&3) == 0) { x >>= 2; r += 2; }
- if((x&1) == 0) ++r;
- return r;
-}
-
-// (public) returns index of lowest 1-bit (or -1 if none)
-function bnGetLowestSetBit() {
- for(var i = 0; i < this.t; ++i)
- if(this[i] != 0) return i*this.DB+lbit(this[i]);
- if(this.s < 0) return this.t*this.DB;
- return -1;
-}
-
-// return number of 1 bits in x
-function cbit(x) {
- var r = 0;
- while(x != 0) { x &= x-1; ++r; }
- return r;
-}
-
-// (public) return number of set bits
-function bnBitCount() {
- var r = 0, x = this.s&this.DM;
- for(var i = 0; i < this.t; ++i) r += cbit(this[i]^x);
- return r;
-}
-
-// (public) true iff nth bit is set
-function bnTestBit(n) {
- var j = Math.floor(n/this.DB);
- if(j >= this.t) return(this.s!=0);
- return((this[j]&(1<<(n%this.DB)))!=0);
-}
-
-// (protected) this op (1<
- * This name space provides following name spaces:
- *
- * This is ITU-T X.690 ASN.1 DER encoder class library and
- * class structure and methods is very similar to
- * org.bouncycastle.asn1 package of
- * well known BouncyCaslte Cryptography Library.
- *
- *
- * This namespace privides following crytpgrahic classes.
- *
For example, to decode multiple Base64 strings, enter them all on separate lines then add the 'Fork' and 'From Base64' operations to the recipe. Each string will be decoded separately.",
run: FlowControl.runFork,
diff --git a/src/js/core/Chef.js b/src/js/core/Chef.js
index e6bac71d..1e33496e 100755
--- a/src/js/core/Chef.js
+++ b/src/js/core/Chef.js
@@ -1,3 +1,7 @@
+var Dish = require("./Dish.js"),
+ Recipe = require("./Recipe.js");
+
+
/**
* The main controller for CyberChef.
*
@@ -7,7 +11,7 @@
*
* @class
*/
-var Chef = function() {
+var Chef = module.exports = function() {
this.dish = new Dish();
};
diff --git a/src/js/core/Dish.js b/src/js/core/Dish.js
index 27fcdc06..db2c8e72 100755
--- a/src/js/core/Dish.js
+++ b/src/js/core/Dish.js
@@ -1,3 +1,6 @@
+var Utils = require("./Utils.js");
+
+
/**
* The data being operated on by each operation.
*
@@ -9,7 +12,7 @@
* @param {byteArray|string|number} value - The value of the input data.
* @param {number} type - The data type of value, see Dish enums.
*/
-var Dish = function(value, type) {
+var Dish = module.exports = function(value, type) {
this.value = value || typeof value == "string" ? value : null;
this.type = type || Dish.BYTE_ARRAY;
};
diff --git a/src/js/core/FlowControl.js b/src/js/core/FlowControl.js
index dc2db7d5..72edcda4 100755
--- a/src/js/core/FlowControl.js
+++ b/src/js/core/FlowControl.js
@@ -7,7 +7,7 @@
*
* @namespace
*/
-var FlowControl = {
+var FlowControl = module.exports = {
/**
* @constant
diff --git a/src/js/core/Ingredient.js b/src/js/core/Ingredient.js
index b79088b8..eacd56b9 100755
--- a/src/js/core/Ingredient.js
+++ b/src/js/core/Ingredient.js
@@ -1,3 +1,6 @@
+var Utils = require("./Utils.js");
+
+
/**
* The arguments to operations.
*
@@ -8,7 +11,7 @@
* @class
* @param {Object} ingredientConfig
*/
-var Ingredient = function(ingredientConfig) {
+var Ingredient = module.exports = function(ingredientConfig) {
this.name = "";
this.type = "";
this.value = null;
diff --git a/src/js/core/Operation.js b/src/js/core/Operation.js
index aaa2e45b..a92dd1b8 100755
--- a/src/js/core/Operation.js
+++ b/src/js/core/Operation.js
@@ -1,3 +1,7 @@
+var Dish = require("./Dish.js"),
+ Ingredient = require("./Ingredient.js");
+
+
/**
* The Operation specified by the user to be run.
*
@@ -9,7 +13,7 @@
* @param {string} operationName
* @param {Object} operationConfig
*/
-var Operation = function(operationName, operationConfig) {
+var Operation = module.exports = function(operationName, operationConfig) {
this.name = operationName;
this.description = "";
this.inputType = -1;
diff --git a/src/js/core/Recipe.js b/src/js/core/Recipe.js
index d5f383fc..0f6afd59 100755
--- a/src/js/core/Recipe.js
+++ b/src/js/core/Recipe.js
@@ -1,3 +1,7 @@
+var OperationConfig = require("../config/OperationConfig.js"),
+ Operation = require("./Operation.js");
+
+
/**
* The Recipe controls a list of Operations and the Dish they operate on.
*
@@ -8,7 +12,7 @@
* @class
* @param {Object} recipeConfig
*/
-var Recipe = function(recipeConfig) {
+var Recipe = module.exports = function(recipeConfig) {
this.opList = [];
if (recipeConfig) {
diff --git a/src/js/core/Utils.js b/src/js/core/Utils.js
index 9ef0b2b1..5948dc27 100755
--- a/src/js/core/Utils.js
+++ b/src/js/core/Utils.js
@@ -1,4 +1,7 @@
-/* globals CryptoJS, moment */
+var CryptoJS = require("crypto-js"),
+ moment = require("moment"),
+ $ = require("jquery");
+
/**
* Utility functions for use in operations, the core framework and the stage.
@@ -9,7 +12,7 @@
*
* @namespace
*/
-var Utils = {
+var Utils = module.exports = {
/**
* Translates an ordinal into a character.
@@ -1182,21 +1185,21 @@ var Utils = {
* // Places the cursor at the beginning of the element #input-text.
* $("#input-text").selectRange(0);
*/
-$.fn.selectRange = function(start, end) {
- if (!end) end = start;
- return this.each(function() {
- if (this.setSelectionRange) {
- this.focus();
- this.setSelectionRange(start, end);
- } else if (this.createTextRange) {
- var range = this.createTextRange();
- range.collapse(true);
- range.moveEnd("character", end);
- range.moveStart("character", start);
- range.select();
- }
- });
-};
+// $.fn.selectRange = function(start, end) {
+// if (!end) end = start;
+// return this.each(function() {
+// if (this.setSelectionRange) {
+// this.focus();
+// this.setSelectionRange(start, end);
+// } else if (this.createTextRange) {
+// var range = this.createTextRange();
+// range.collapse(true);
+// range.moveEnd("character", end);
+// range.moveStart("character", start);
+// range.select();
+// }
+// });
+// };
/**
diff --git a/src/js/operations/Base.js b/src/js/operations/Base.js
index 31497093..c25c0eeb 100755
--- a/src/js/operations/Base.js
+++ b/src/js/operations/Base.js
@@ -7,7 +7,7 @@
*
* @namespace
*/
-var Base = {
+var Base = module.exports = {
/**
* @constant
diff --git a/src/js/operations/Base58.js b/src/js/operations/Base58.js
index 8f6e0967..74a5bd58 100755
--- a/src/js/operations/Base58.js
+++ b/src/js/operations/Base58.js
@@ -1,3 +1,6 @@
+var Utils = require("../core/Utils.js");
+
+
/**
* Base58 operations.
*
@@ -7,7 +10,7 @@
*
* @namespace
*/
-var Base58 = {
+var Base58 = module.exports = {
/**
* @constant
diff --git a/src/js/operations/Base64.js b/src/js/operations/Base64.js
index 90529682..433bb7ac 100755
--- a/src/js/operations/Base64.js
+++ b/src/js/operations/Base64.js
@@ -1,3 +1,6 @@
+var Utils = require("../core/Utils.js");
+
+
/**
* Base64 operations.
*
@@ -7,7 +10,7 @@
*
* @namespace
*/
-var Base64 = {
+var Base64 = module.exports = {
/**
* @constant
diff --git a/src/js/operations/BitwiseOp.js b/src/js/operations/BitwiseOp.js
index 27fc3385..b6bfac92 100755
--- a/src/js/operations/BitwiseOp.js
+++ b/src/js/operations/BitwiseOp.js
@@ -1,4 +1,6 @@
-/* globals CryptoJS */
+var Utils = require("../core/Utils.js"),
+ CryptoJS = require("crypto-js");
+
/**
* Bitwise operations.
@@ -9,7 +11,7 @@
*
* @namespace
*/
-var BitwiseOp = {
+var BitwiseOp = module.exports = {
/**
* Runs bitwise operations across the input data.
diff --git a/src/js/operations/ByteRepr.js b/src/js/operations/ByteRepr.js
index 2130409d..f485ad83 100755
--- a/src/js/operations/ByteRepr.js
+++ b/src/js/operations/ByteRepr.js
@@ -1,4 +1,6 @@
/* globals app */
+var Utils = require("../core/Utils.js");
+
/**
* Byte representation operations.
@@ -9,7 +11,7 @@
*
* @namespace
*/
-var ByteRepr = {
+var ByteRepr = module.exports = {
/**
* @constant
diff --git a/src/js/operations/CharEnc.js b/src/js/operations/CharEnc.js
index 55cef46a..00b54dc5 100755
--- a/src/js/operations/CharEnc.js
+++ b/src/js/operations/CharEnc.js
@@ -1,4 +1,6 @@
-/* globals CryptoJS */
+var Utils = require("../core/Utils.js"),
+ CryptoJS = require("crypto-js");
+
/**
* Character encoding operations.
@@ -9,7 +11,7 @@
*
* @namespace
*/
-var CharEnc = {
+var CharEnc = module.exports = {
/**
* @constant
diff --git a/src/js/operations/Checksum.js b/src/js/operations/Checksum.js
index 644694e1..88c8c343 100755
--- a/src/js/operations/Checksum.js
+++ b/src/js/operations/Checksum.js
@@ -1,3 +1,6 @@
+var Utils = require("../core/Utils.js");
+
+
/**
* Checksum operations.
*
@@ -7,7 +10,7 @@
*
* @namespace
*/
-var Checksum = {
+var Checksum = module.exports = {
/**
* Fletcher-8 Checksum operation.
diff --git a/src/js/operations/Cipher.js b/src/js/operations/Cipher.js
index 672c4731..f452d75f 100755
--- a/src/js/operations/Cipher.js
+++ b/src/js/operations/Cipher.js
@@ -1,4 +1,7 @@
-/* globals CryptoJS, blowfish */
+var Utils = require("../core/Utils.js"),
+ CryptoJS = require("crypto-js"),
+ Blowfish = require("sladex-blowfish");
+
/**
* Cipher operations.
@@ -9,7 +12,7 @@
*
* @namespace
*/
-var Cipher = {
+var Cipher = module.exports = {
/**
* @constant
@@ -263,7 +266,7 @@ var Cipher = {
if (key.length === 0) return "Enter a key";
- var encHex = blowfish.encrypt(input, key, {
+ var encHex = Blowfish.encrypt(input, key, {
outputType: 1,
cipherMode: Cipher.BLOWFISH_MODES.indexOf(mode)
}),
@@ -289,7 +292,7 @@ var Cipher = {
input = Utils.format[inputFormat].parse(input);
- return blowfish.decrypt(input.toString(CryptoJS.enc.Base64), key, {
+ return Blowfish.decrypt(input.toString(CryptoJS.enc.Base64), key, {
outputType: 0, // This actually means inputType. The library is weird.
cipherMode: Cipher.BLOWFISH_MODES.indexOf(mode)
});
diff --git a/src/js/operations/Code.js b/src/js/operations/Code.js
index a65bacb9..71dd242c 100755
--- a/src/js/operations/Code.js
+++ b/src/js/operations/Code.js
@@ -1,4 +1,8 @@
-/* globals prettyPrintOne, vkbeautify, xpath */
+/* globals xpath */
+var Utils = require("../core/Utils.js"),
+ VKbeautify = require("vkbeautify");
+ //Prettify = require("google-code-prettify");
+
/**
* Code operations.
@@ -9,7 +13,7 @@
*
* @namespace
*/
-var Code = {
+var Code = module.exports = {
/**
* @constant
@@ -32,7 +36,7 @@ var Code = {
runSyntaxHighlight: function(input, args) {
var language = args[0],
lineNums = args[1];
- return "" + prettyPrintOne(Utils.escapeHtml(input), language, lineNums) + "
";
+ return "" + Prettify.prettyPrintOne(Utils.escapeHtml(input), language, lineNums) + "
";
},
@@ -51,7 +55,7 @@ var Code = {
*/
runXmlBeautify: function(input, args) {
var indentStr = args[0];
- return vkbeautify.xml(input, indentStr);
+ return VKbeautify.xml(input, indentStr);
},
@@ -65,7 +69,7 @@ var Code = {
runJsonBeautify: function(input, args) {
var indentStr = args[0];
if (!input) return "";
- return vkbeautify.json(input, indentStr);
+ return VKbeautify.json(input, indentStr);
},
@@ -78,7 +82,7 @@ var Code = {
*/
runCssBeautify: function(input, args) {
var indentStr = args[0];
- return vkbeautify.css(input, indentStr);
+ return VKbeautify.css(input, indentStr);
},
@@ -91,7 +95,7 @@ var Code = {
*/
runSqlBeautify: function(input, args) {
var indentStr = args[0];
- return vkbeautify.sql(input, indentStr);
+ return VKbeautify.sql(input, indentStr);
},
@@ -110,7 +114,7 @@ var Code = {
*/
runXmlMinify: function(input, args) {
var preserveComments = args[0];
- return vkbeautify.xmlmin(input, preserveComments);
+ return VKbeautify.xmlmin(input, preserveComments);
},
@@ -123,7 +127,7 @@ var Code = {
*/
runJsonMinify: function(input, args) {
if (!input) return "";
- return vkbeautify.jsonmin(input);
+ return VKbeautify.jsonmin(input);
},
@@ -136,7 +140,7 @@ var Code = {
*/
runCssMinify: function(input, args) {
var preserveComments = args[0];
- return vkbeautify.cssmin(input, preserveComments);
+ return VKbeautify.cssmin(input, preserveComments);
},
@@ -148,7 +152,7 @@ var Code = {
* @returns {string}
*/
runSqlMinify: function(input, args) {
- return vkbeautify.sqlmin(input);
+ return VKbeautify.sqlmin(input);
},
diff --git a/src/js/operations/Compress.js b/src/js/operations/Compress.js
index 6e756264..b3d45059 100755
--- a/src/js/operations/Compress.js
+++ b/src/js/operations/Compress.js
@@ -1,4 +1,21 @@
-/* globals Zlib, bzip2 */
+/* globals bzip2 */
+var rawdeflate = require("zlibjs/bin/rawdeflate.min"),
+ rawinflate = require("zlibjs/bin/rawinflate.min"),
+ zlibAndGzip = require("zlibjs/bin/zlib_and_gzip.min"),
+ zip = require("zlibjs/bin/zip.min"),
+ unzip = require("zlibjs/bin/unzip.min");
+
+var Zlib = {
+ RawDeflate: rawdeflate.Zlib.RawDeflate,
+ RawInflate: rawinflate.Zlib.RawInflate,
+ Deflate: zlibAndGzip.Zlib.Deflate,
+ Inflate: zlibAndGzip.Zlib.Inflate,
+ Gzip: zlibAndGzip.Zlib.Gzip,
+ Gunzip: zlibAndGzip.Zlib.Gunzip,
+ Zip: zip.Zlib.Zip,
+ Unzip: unzip.Zlib.Unzip,
+};
+
/**
* Compression operations.
@@ -9,7 +26,7 @@
*
* @namespace
*/
-var Compress = {
+var Compress = module.exports = {
/**
* @constant
diff --git a/src/js/operations/Convert.js b/src/js/operations/Convert.js
index e10360ba..9586f522 100755
--- a/src/js/operations/Convert.js
+++ b/src/js/operations/Convert.js
@@ -7,7 +7,7 @@
*
* @namespace
*/
-var Convert = {
+var Convert = module.exports = {
/**
* @constant
diff --git a/src/js/operations/DateTime.js b/src/js/operations/DateTime.js
index e4145c3f..e35c874a 100755
--- a/src/js/operations/DateTime.js
+++ b/src/js/operations/DateTime.js
@@ -1,4 +1,5 @@
-/* globals moment */
+var moment = require("moment-timezone");
+
/**
* Date and time operations.
@@ -9,7 +10,7 @@
*
* @namespace
*/
-var DateTime = {
+var DateTime = module.exports = {
/**
* @constant
diff --git a/src/js/operations/Endian.js b/src/js/operations/Endian.js
index 0ce1dc8c..e241c97a 100755
--- a/src/js/operations/Endian.js
+++ b/src/js/operations/Endian.js
@@ -1,3 +1,6 @@
+var Utils = require("../core/Utils.js");
+
+
/**
* Endian operations.
*
@@ -7,7 +10,7 @@
*
* @namespace
*/
-var Endian = {
+var Endian = module.exports = {
/**
* @constant
diff --git a/src/js/operations/Entropy.js b/src/js/operations/Entropy.js
index 4d99bac0..82c8cc1f 100755
--- a/src/js/operations/Entropy.js
+++ b/src/js/operations/Entropy.js
@@ -1,3 +1,6 @@
+var Utils = require("../core/Utils.js");
+
+
/**
* Entropy operations.
*
@@ -7,7 +10,7 @@
*
* @namespace
*/
-var Entropy = {
+var Entropy = module.exports = {
/**
* @constant
diff --git a/src/js/operations/Extract.js b/src/js/operations/Extract.js
index ac0899bf..799eb531 100755
--- a/src/js/operations/Extract.js
+++ b/src/js/operations/Extract.js
@@ -7,7 +7,7 @@
*
* @namespace
*/
-var Extract = {
+var Extract = module.exports = {
/**
* Runs search operations across the input data using regular expressions.
diff --git a/src/js/operations/FileType.js b/src/js/operations/FileType.js
index c265e418..4196fbba 100755
--- a/src/js/operations/FileType.js
+++ b/src/js/operations/FileType.js
@@ -1,3 +1,6 @@
+var Utils = require("../core/Utils.js");
+
+
/**
* File type operations.
*
@@ -7,7 +10,7 @@
*
* @namespace
*/
-var FileType = {
+var FileType = module.exports = {
/**
* Detect File Type operation.
diff --git a/src/js/operations/HTML.js b/src/js/operations/HTML.js
index 6a82933d..e9cfe1e2 100755
--- a/src/js/operations/HTML.js
+++ b/src/js/operations/HTML.js
@@ -1,3 +1,6 @@
+var Utils = require("../core/Utils.js");
+
+
/**
* HTML operations.
*
@@ -7,7 +10,7 @@
*
* @namespace
*/
-var HTML = {
+var HTML = module.exports = {
/**
* @constant
diff --git a/src/js/operations/HTTP.js b/src/js/operations/HTTP.js
index eab2abf8..c1695b18 100755
--- a/src/js/operations/HTTP.js
+++ b/src/js/operations/HTTP.js
@@ -1,4 +1,5 @@
-/* globals UAS_parser */
+var UAParser = require("uas-parser");
+
/**
* HTTP operations.
@@ -9,7 +10,7 @@
*
* @namespace
*/
-var HTTP = {
+var HTTP = module.exports = {
/**
* Strip HTTP headers operation.
@@ -34,7 +35,7 @@ var HTTP = {
* @returns {string}
*/
runParseUserAgent: function(input, args) {
- var ua = UAS_parser.parse(input); // eslint-disable-line camelcase
+ var ua = UAParser.parse(input);
return "Type: " + ua.type + "\n" +
"Family: " + ua.uaFamily + "\n" +
diff --git a/src/js/operations/Hash.js b/src/js/operations/Hash.js
index ed30c1c1..285de467 100755
--- a/src/js/operations/Hash.js
+++ b/src/js/operations/Hash.js
@@ -1,4 +1,8 @@
-/* globals CryptoApi, CryptoJS, Checksum */
+var Utils = require("../core/Utils.js"),
+ CryptoJS = require("crypto-js"),
+ CryptoApi = require("crypto-api"),
+ Checksum = require("./Checksum.js");
+
/**
* Hashing operations.
@@ -9,7 +13,7 @@
*
* @namespace
*/
-var Hash = {
+var Hash = module.exports = {
/**
* MD2 operation.
diff --git a/src/js/operations/Hexdump.js b/src/js/operations/Hexdump.js
index bca7c667..92c147d6 100755
--- a/src/js/operations/Hexdump.js
+++ b/src/js/operations/Hexdump.js
@@ -1,4 +1,6 @@
/* globals app */
+var Utils = require("../core/Utils.js");
+
/**
* Hexdump operations.
@@ -9,7 +11,7 @@
*
* @namespace
*/
-var Hexdump = {
+var Hexdump = module.exports = {
/**
* @constant
diff --git a/src/js/operations/IP.js b/src/js/operations/IP.js
index 54302eb8..d9ad9d36 100755
--- a/src/js/operations/IP.js
+++ b/src/js/operations/IP.js
@@ -1,4 +1,7 @@
-/* globals BigInteger, Checksum */
+var Utils = require("../core/Utils.js"),
+ Checksum = require("./Checksum.js"),
+ BigInteger = require("jsbn").BigInteger;
+
/**
* Internet Protocol address operations.
@@ -9,7 +12,7 @@
*
* @namespace
*/
-var IP = {
+var IP = module.exports = {
/**
* @constant
diff --git a/src/js/operations/JS.js b/src/js/operations/JS.js
index a2f94dcf..906717e3 100755
--- a/src/js/operations/JS.js
+++ b/src/js/operations/JS.js
@@ -1,4 +1,7 @@
-/* globals esprima, escodegen, esmangle */
+var esprima = require("esprima"),
+ escodegen = require("escodegen"),
+ esmangle = require("esmangle");
+
/**
* JavaScript operations.
@@ -9,7 +12,7 @@
*
* @namespace
*/
-var JS = {
+var JS = module.exports = {
/**
* @constant
diff --git a/src/js/operations/MAC.js b/src/js/operations/MAC.js
index 93457e36..a890b1c0 100755
--- a/src/js/operations/MAC.js
+++ b/src/js/operations/MAC.js
@@ -7,7 +7,7 @@
*
* @namespace
*/
-var MAC = {
+var MAC = module.exports = {
/**
* @constant
diff --git a/src/js/operations/MorseCode.js b/src/js/operations/MorseCode.js
index 5a048df5..4759fde2 100644
--- a/src/js/operations/MorseCode.js
+++ b/src/js/operations/MorseCode.js
@@ -1,3 +1,6 @@
+var Utils = require("../core/Utils.js");
+
+
/**
* Morse Code translation operations.
*
@@ -7,7 +10,7 @@
*
* @namespace
*/
-var MorseCode = {
+var MorseCode = module.exports = {
/**
* @constant
diff --git a/src/js/operations/NetBIOS.js b/src/js/operations/NetBIOS.js
index 58d69cb6..b71704ae 100644
--- a/src/js/operations/NetBIOS.js
+++ b/src/js/operations/NetBIOS.js
@@ -7,7 +7,7 @@
*
* @namespace
*/
-var NetBIOS = {
+var NetBIOS = module.exports = {
/**
* @constant
diff --git a/src/js/operations/Numberwang.js b/src/js/operations/Numberwang.js
index d19a590d..f5d06d11 100755
--- a/src/js/operations/Numberwang.js
+++ b/src/js/operations/Numberwang.js
@@ -4,7 +4,7 @@
* @author Unknown Male 282
* @namespace
*/
-var Numberwang = {
+var Numberwang = module.exports = {
/**
* Numberwang operation. Remain indoors.
diff --git a/src/js/operations/OS.js b/src/js/operations/OS.js
index 6b89627a..e517152c 100755
--- a/src/js/operations/OS.js
+++ b/src/js/operations/OS.js
@@ -7,7 +7,7 @@
*
* @namespace
*/
-var OS = {
+var OS = module.exports = {
/**
* Parse UNIX file permissions operation.
diff --git a/src/js/operations/PublicKey.js b/src/js/operations/PublicKey.js
index cb43026a..758c331a 100755
--- a/src/js/operations/PublicKey.js
+++ b/src/js/operations/PublicKey.js
@@ -1,4 +1,6 @@
-/* globals X509, KJUR, ASN1HEX, KEYUTIL, BigInteger */
+var Utils = require("../core/Utils.js"),
+ r = require("jsrsasign");
+
/**
* Public Key operations.
@@ -9,7 +11,7 @@
*
* @namespace
*/
-var PublicKey = {
+var PublicKey = module.exports = {
/**
* @constant
@@ -25,7 +27,7 @@ var PublicKey = {
* @returns {string}
*/
runParseX509: function (input, args) {
- var cert = new X509(),
+ var cert = new r.X509(),
inputFormat = args[0];
if (!input.length) {
@@ -36,39 +38,39 @@ var PublicKey = {
case "DER Hex":
input = input.replace(/\s/g, "");
cert.hex = input;
- cert.pem = KJUR.asn1.ASN1Util.getPEMStringFromHex(input, "CERTIFICATE");
+ cert.pem = r.KJUR.asn1.ASN1Util.getPEMStringFromHex(input, "CERTIFICATE");
break;
case "PEM":
- cert.hex = X509.pemToHex(input);
+ cert.hex = r.X509.pemToHex(input);
cert.pem = input;
break;
case "Base64":
cert.hex = Utils.toHex(Utils.fromBase64(input, null, "byteArray"), "");
- cert.pem = KJUR.asn1.ASN1Util.getPEMStringFromHex(cert.hex, "CERTIFICATE");
+ cert.pem = r.KJUR.asn1.ASN1Util.getPEMStringFromHex(cert.hex, "CERTIFICATE");
break;
case "Raw":
cert.hex = Utils.toHex(Utils.strToByteArray(input), "");
- cert.pem = KJUR.asn1.ASN1Util.getPEMStringFromHex(cert.hex, "CERTIFICATE");
+ cert.pem = r.KJUR.asn1.ASN1Util.getPEMStringFromHex(cert.hex, "CERTIFICATE");
break;
default:
throw "Undefined input format";
}
- var version = ASN1HEX.getDecendantHexVByNthList(cert.hex, 0, [0, 0, 0]),
+ var version = r.ASN1HEX.getDecendantHexVByNthList(cert.hex, 0, [0, 0, 0]),
sn = cert.getSerialNumberHex(),
- algorithm = KJUR.asn1.x509.OID.oid2name(KJUR.asn1.ASN1Util.oidHexToInt(ASN1HEX.getDecendantHexVByNthList(cert.hex, 0, [0, 2, 0]))),
+ algorithm = r.KJUR.asn1.x509.OID.oid2name(r.KJUR.asn1.ASN1Util.oidHexToInt(r.ASN1HEX.getDecendantHexVByNthList(cert.hex, 0, [0, 2, 0]))),
issuer = cert.getIssuerString(),
notBefore = cert.getNotBefore(),
notAfter = cert.getNotAfter(),
subject = cert.getSubjectString(),
- pkAlgorithm = KJUR.asn1.x509.OID.oid2name(KJUR.asn1.ASN1Util.oidHexToInt(ASN1HEX.getDecendantHexVByNthList(cert.hex, 0, [0, 6, 0, 0]))),
- pk = X509.getPublicKeyFromCertPEM(cert.pem),
+ pkAlgorithm = r.KJUR.asn1.x509.OID.oid2name(r.KJUR.asn1.ASN1Util.oidHexToInt(r.ASN1HEX.getDecendantHexVByNthList(cert.hex, 0, [0, 6, 0, 0]))),
+ pk = r.X509.getPublicKeyFromCertPEM(cert.pem),
pkFields = [],
pkStr = "",
- certSigAlg = KJUR.asn1.x509.OID.oid2name(KJUR.asn1.ASN1Util.oidHexToInt(ASN1HEX.getDecendantHexVByNthList(cert.hex, 0, [1, 0]))),
- certSig = ASN1HEX.getDecendantHexVByNthList(cert.hex, 0, [2]).substr(2),
+ certSigAlg = r.KJUR.asn1.x509.OID.oid2name(r.KJUR.asn1.ASN1Util.oidHexToInt(r.ASN1HEX.getDecendantHexVByNthList(cert.hex, 0, [1, 0]))),
+ certSig = r.ASN1HEX.getDecendantHexVByNthList(cert.hex, 0, [2]).substr(2),
sigStr = "",
- extensions = ASN1HEX.dump(ASN1HEX.getDecendantHexVByNthList(cert.hex, 0, [0, 7]));
+ extensions = r.ASN1HEX.dump(r.ASN1HEX.getDecendantHexVByNthList(cert.hex, 0, [0, 7]));
// Public Key fields
if (pk.type === "EC") { // ECDSA
@@ -78,7 +80,7 @@ var PublicKey = {
});
pkFields.push({
key: "Length",
- value: (((new BigInteger(pk.pubKeyHex, 16)).bitLength()-3) /2) + " bits"
+ value: (((new r.BigInteger(pk.pubKeyHex, 16)).bitLength()-3) /2) + " bits"
});
pkFields.push({
key: "pub",
@@ -122,9 +124,9 @@ var PublicKey = {
}
// Signature fields
- if (ASN1HEX.dump(certSig).indexOf("SEQUENCE") === 0) { // DSA or ECDSA
- sigStr = " r: " + PublicKey._formatByteStr(ASN1HEX.getDecendantHexVByNthList(certSig, 0, [0]), 16, 18) + "\n" +
- " s: " + PublicKey._formatByteStr(ASN1HEX.getDecendantHexVByNthList(certSig, 0, [1]), 16, 18) + "\n";
+ if (r.ASN1HEX.dump(certSig).indexOf("SEQUENCE") === 0) { // DSA or ECDSA
+ sigStr = " r: " + PublicKey._formatByteStr(r.ASN1HEX.getDecendantHexVByNthList(certSig, 0, [0]), 16, 18) + "\n" +
+ " s: " + PublicKey._formatByteStr(r.ASN1HEX.getDecendantHexVByNthList(certSig, 0, [1]), 16, 18) + "\n";
} else { // RSA
sigStr = " Signature: " + PublicKey._formatByteStr(certSig, 16, 18) + "\n";
}
@@ -145,7 +147,7 @@ var PublicKey = {
subjectStr = PublicKey._formatDnStr(subject, 2);
var output = "Version: " + (parseInt(version, 16) + 1) + " (0x" + version + ")\n" +
- "Serial number: " + new BigInteger(sn, 16).toString() + " (0x" + sn + ")\n" +
+ "Serial number: " + new r.BigInteger(sn, 16).toString() + " (0x" + sn + ")\n" +
"Algorithm ID: " + algorithm + "\n" +
"Validity\n" +
" Not Before: " + nbDate + " (dd-mm-yy hh:mm:ss) (" + notBefore + ")\n" +
@@ -183,7 +185,7 @@ var PublicKey = {
// Add footer so that the KEYUTIL function works
input = input + "-----END CERTIFICATE-----";
}
- return KEYUTIL.getHexFromPEM(input);
+ return r.KEYUTIL.getHexFromPEM(input);
},
@@ -201,7 +203,7 @@ var PublicKey = {
* @returns {string}
*/
runHexToPem: function(input, args) {
- return KJUR.asn1.ASN1Util.getPEMStringFromHex(input.replace(/\s/g, ""), args[0]);
+ return r.KJUR.asn1.ASN1Util.getPEMStringFromHex(input.replace(/\s/g, ""), args[0]);
},
@@ -213,7 +215,7 @@ var PublicKey = {
* @returns {string}
*/
runHexToObjectIdentifier: function(input, args) {
- return KJUR.asn1.ASN1Util.oidHexToInt(input.replace(/\s/g, ""));
+ return r.KJUR.asn1.ASN1Util.oidHexToInt(input.replace(/\s/g, ""));
},
@@ -225,7 +227,7 @@ var PublicKey = {
* @returns {string}
*/
runObjectIdentifierToHex: function(input, args) {
- return KJUR.asn1.ASN1Util.oidIntToHex(input);
+ return r.KJUR.asn1.ASN1Util.oidIntToHex(input);
},
@@ -245,7 +247,7 @@ var PublicKey = {
runParseAsn1HexString: function(input, args) {
var truncateLen = args[1],
index = args[0];
- return ASN1HEX.dump(input.replace(/\s/g, ""), {
+ return r.ASN1HEX.dump(input.replace(/\s/g, ""), {
"ommitLongOctet": truncateLen
}, index);
},
@@ -342,12 +344,12 @@ var PublicKey = {
* @param {string} hDN - Hex DN string
* @returns {string}
*/
-X509.hex2dn = function(hDN) {
+r.X509.hex2dn = function(hDN) {
var s = "";
- var a = ASN1HEX.getPosArrayOfChildren_AtObj(hDN, 0);
+ var a = r.ASN1HEX.getPosArrayOfChildren_AtObj(hDN, 0);
for (var i = 0; i < a.length; i++) {
- var hRDN = ASN1HEX.getHexOfTLV_AtObj(hDN, a[i]);
- s = s + ",/|" + X509.hex2rdn(hRDN);
+ var hRDN = r.ASN1HEX.getHexOfTLV_AtObj(hDN, a[i]);
+ s = s + ",/|" + r.X509.hex2rdn(hRDN);
}
return s;
};
@@ -361,7 +363,7 @@ X509.hex2dn = function(hDN) {
*
* @constant
*/
-X509.DN_ATTRHEX = {
+r.X509.DN_ATTRHEX = {
"0603550403" : "commonName",
"0603550404" : "surname",
"0603550406" : "countryName",
diff --git a/src/js/operations/Punycode.js b/src/js/operations/Punycode.js
index 8fb80579..a53f176f 100755
--- a/src/js/operations/Punycode.js
+++ b/src/js/operations/Punycode.js
@@ -1,4 +1,5 @@
-/* globals punycode */
+var punycode = require("punycode");
+
/**
* Punycode operations.
@@ -9,7 +10,7 @@
*
* @namespace
*/
-var Punycode = {
+var Punycode = module.exports = {
/**
* @constant
@@ -28,7 +29,7 @@ var Punycode = {
var idn = args[0];
if (idn) {
- return punycode.ToASCII(input);
+ return punycode.toASCII(input);
} else {
return punycode.encode(input);
}
@@ -46,7 +47,7 @@ var Punycode = {
var idn = args[0];
if (idn) {
- return punycode.ToUnicode(input);
+ return punycode.toUnicode(input);
} else {
return punycode.decode(input);
}
diff --git a/src/js/operations/QuotedPrintable.js b/src/js/operations/QuotedPrintable.js
index c19a11b4..a07135be 100755
--- a/src/js/operations/QuotedPrintable.js
+++ b/src/js/operations/QuotedPrintable.js
@@ -30,7 +30,7 @@
*
* @namespace
*/
-var QuotedPrintable = {
+var QuotedPrintable = module.exports = {
/**
* To Quoted Printable operation.
diff --git a/src/js/operations/Rotate.js b/src/js/operations/Rotate.js
index accb93d1..b3856099 100755
--- a/src/js/operations/Rotate.js
+++ b/src/js/operations/Rotate.js
@@ -9,7 +9,7 @@
*
* @todo Support for UTF16
*/
-var Rotate = {
+var Rotate = module.exports = {
/**
* @constant
diff --git a/src/js/operations/SeqUtils.js b/src/js/operations/SeqUtils.js
index cd6ac99b..3153b396 100755
--- a/src/js/operations/SeqUtils.js
+++ b/src/js/operations/SeqUtils.js
@@ -1,3 +1,6 @@
+var Utils = require("../core/Utils.js");
+
+
/**
* Sequence utility operations.
*
@@ -7,7 +10,7 @@
*
* @namespace
*/
-var SeqUtils = {
+var SeqUtils = module.exports = {
/**
* @constant
diff --git a/src/js/operations/StrUtils.js b/src/js/operations/StrUtils.js
index ee2e38aa..0770de3e 100755
--- a/src/js/operations/StrUtils.js
+++ b/src/js/operations/StrUtils.js
@@ -1,4 +1,6 @@
-/* globals JsDiff */
+var Utils = require("../core/Utils.js"),
+ JsDiff = require("diff");
+
/**
* String utility operations.
@@ -9,7 +11,7 @@
*
* @namespace
*/
-var StrUtils = {
+var StrUtils = module.exports = {
/**
* @constant
diff --git a/src/js/operations/Tidy.js b/src/js/operations/Tidy.js
index 1fe0a3ed..4493e48b 100755
--- a/src/js/operations/Tidy.js
+++ b/src/js/operations/Tidy.js
@@ -1,3 +1,6 @@
+var Utils = require("../core/Utils.js");
+
+
/**
* Tidy operations.
*
@@ -7,7 +10,7 @@
*
* @namespace
*/
-var Tidy = {
+var Tidy = module.exports = {
/**
* @constant
diff --git a/src/js/operations/URL.js b/src/js/operations/URL.js
index a42f47a1..88814d2d 100755
--- a/src/js/operations/URL.js
+++ b/src/js/operations/URL.js
@@ -1,5 +1,8 @@
/* globals unescape */
+var Utils = require("../core/Utils.js");
+
+
/**
* URL operations.
* Namespace is appended with an underscore to prevent overwriting the global URL object.
@@ -10,7 +13,7 @@
*
* @namespace
*/
-var URL_ = {
+var URL_ = module.exports = {
/**
* @constant
diff --git a/src/js/operations/UUID.js b/src/js/operations/UUID.js
index 2248eb63..1e0dc22c 100755
--- a/src/js/operations/UUID.js
+++ b/src/js/operations/UUID.js
@@ -7,7 +7,7 @@
*
* @namespace
*/
-var UUID = {
+var UUID = module.exports = {
/**
* Generate UUID operation.
diff --git a/src/js/operations/Unicode.js b/src/js/operations/Unicode.js
index 2ab39c86..354271b6 100755
--- a/src/js/operations/Unicode.js
+++ b/src/js/operations/Unicode.js
@@ -1,3 +1,6 @@
+var Utils = require("../core/Utils.js");
+
+
/**
* Unicode operations.
*
@@ -7,7 +10,7 @@
*
* @namespace
*/
-var Unicode = {
+var Unicode = module.exports = {
/**
* @constant
diff --git a/src/js/views/node/index.js b/src/js/views/node/index.js
new file mode 100644
index 00000000..ebab8bf7
--- /dev/null
+++ b/src/js/views/node/index.js
@@ -0,0 +1,12 @@
+var Chef = require("../../core/Chef.js");
+
+
+/**
+ * @author n1474335 [n1474335@gmail.com]
+ * @copyright Crown Copyright 2017
+ * @license Apache-2.0
+ */
+
+var chef = new Chef();
+
+console.log(chef.bake("test", [{"op":"To Hex","args":["Space"]}], {}, 0, false));
diff --git a/webpack.config.js b/webpack.config.js
new file mode 100644
index 00000000..7fd92fb8
--- /dev/null
+++ b/webpack.config.js
@@ -0,0 +1,11 @@
+/* eslint-env node */
+
+var path = require("path");
+
+module.exports = {
+ entry: "./src/js/views/html/index.js",
+ output: {
+ filename: "bundle.js",
+ path: path.resolve(__dirname, "build/dev")
+ }
+};
From 99f306dc1874af6711e2d2ab6d55fd9088815b23 Mon Sep 17 00:00:00 2001
From: n1474335 f4NK9k@tn5|=RZ{ieDi%*q78KaLOficRt#{=4YW@SuOTXE27F1bh@Et&1S
z5$C5VqYgrrtwK@Q!8;D*&j6;0mi
zgL6AevU5A9>$8d|oX+heAtyjX4S?Tw2$O&^M!Y_$xYBvEAWIy*;LVsWuxGHsBuZ==
zL9m(=3{z7|ZezK=fe1|On+02HP}Zst?5QOIi2+y?Y%Xtw&8@bj)ukc%7>}eo}Us)KE)XcXr4ie~Mz{VlMeZ8>=VBXl74KY0+E{m-^##GFwi)rcve
zh+Ck+gt;np1Q@7ZwTkX6><=jA0`$}3m`PqSIMDO~lK}E#!6IfXFrk}z?*UBgvuzMu
zkW+Z6Kd
zbXcJ0jQgI3MGuI9sDsfEvkT
z(*T;%{AEYSD(mWyCslBZruBKEG8qBQ4w7Q~E_xw?+Zi?>+z4g1JFbXc+bI*d1;PDh
zU+&|4iIRn7&3BMA9|~expect(value)
- * @param {String} value The value we are expecting the lookahead token to have
- * @since 2.0
- */
- function expectTolerant(value) {
- if (extra.errors) {
- var token = lookahead;
- if (token.type !== Token.Punctuator && token.value !== value) {
- throwErrorTolerant(token, Messages.UnexpectedToken, token.value);
- } else {
- lex();
- }
- } else {
- expect(value);
- }
- }
-
- // Expect the next token to match the specified keyword.
- // If not, an exception will be thrown.
-
- function expectKeyword(keyword) {
- var token = lex();
- if (token.type !== Token.Keyword || token.value !== keyword) {
- throwUnexpected(token);
- }
- }
-
- // Return true if the next token matches the specified punctuator.
-
- function match(value) {
- return lookahead.type === Token.Punctuator && lookahead.value === value;
- }
-
- // Return true if the next token matches the specified keyword
-
- function matchKeyword(keyword) {
- return lookahead.type === Token.Keyword && lookahead.value === keyword;
- }
-
- // Return true if the next token is an assignment operator
-
- function matchAssign() {
- var op;
-
- if (lookahead.type !== Token.Punctuator) {
- return false;
- }
- op = lookahead.value;
- return op === '=' ||
- op === '*=' ||
- op === '/=' ||
- op === '%=' ||
- op === '+=' ||
- op === '-=' ||
- op === '<<=' ||
- op === '>>=' ||
- op === '>>>=' ||
- op === '&=' ||
- op === '^=' ||
- op === '|=';
- }
-
- function consumeSemicolon() {
- var line;
-
- // Catch the very common case first: immediately a semicolon (U+003B).
- if (source.charCodeAt(index) === 0x3B || match(';')) {
- lex();
- return;
- }
-
- line = lineNumber;
- skipComment();
- if (lineNumber !== line) {
- return;
- }
-
- if (lookahead.type !== Token.EOF && !match('}')) {
- throwUnexpected(lookahead);
- }
- }
-
- // Return true if provided expression is LeftHandSideExpression
-
- function isLeftHandSide(expr) {
- return expr.type === Syntax.Identifier || expr.type === Syntax.MemberExpression;
- }
-
- // 11.1.4 Array Initialiser
-
- function parseArrayInitialiser() {
- var elements = [], node = new Node();
-
- expect('[');
-
- while (!match(']')) {
- if (match(',')) {
- lex();
- elements.push(null);
- } else {
- elements.push(parseAssignmentExpression());
-
- if (!match(']')) {
- expect(',');
- }
- }
- }
-
- lex();
-
- return node.finishArrayExpression(elements);
- }
-
- // 11.1.5 Object Initialiser
-
- function parsePropertyFunction(param, first) {
- var previousStrict, body, node = new Node();
-
- previousStrict = strict;
- body = parseFunctionSourceElements();
- if (first && strict && isRestrictedWord(param[0].name)) {
- throwErrorTolerant(first, Messages.StrictParamName);
- }
- strict = previousStrict;
- return node.finishFunctionExpression(null, param, [], body);
- }
-
- function parseObjectPropertyKey() {
- var token, node = new Node();
-
- token = lex();
-
- // Note: This function is called only from parseObjectProperty(), where
- // EOF and Punctuator tokens are already filtered out.
-
- if (token.type === Token.StringLiteral || token.type === Token.NumericLiteral) {
- if (strict && token.octal) {
- throwErrorTolerant(token, Messages.StrictOctalLiteral);
- }
- return node.finishLiteral(token);
- }
-
- return node.finishIdentifier(token.value);
- }
-
- function parseObjectProperty() {
- var token, key, id, value, param, node = new Node();
-
- token = lookahead;
-
- if (token.type === Token.Identifier) {
-
- id = parseObjectPropertyKey();
-
- // Property Assignment: Getter and Setter.
-
- if (token.value === 'get' && !match(':')) {
- key = parseObjectPropertyKey();
- expect('(');
- expect(')');
- value = parsePropertyFunction([]);
- return node.finishProperty('get', key, value);
- }
- if (token.value === 'set' && !match(':')) {
- key = parseObjectPropertyKey();
- expect('(');
- token = lookahead;
- if (token.type !== Token.Identifier) {
- expect(')');
- throwErrorTolerant(token, Messages.UnexpectedToken, token.value);
- value = parsePropertyFunction([]);
- } else {
- param = [ parseVariableIdentifier() ];
- expect(')');
- value = parsePropertyFunction(param, token);
- }
- return node.finishProperty('set', key, value);
- }
- expect(':');
- value = parseAssignmentExpression();
- return node.finishProperty('init', id, value);
- }
- if (token.type === Token.EOF || token.type === Token.Punctuator) {
- throwUnexpected(token);
- } else {
- key = parseObjectPropertyKey();
- expect(':');
- value = parseAssignmentExpression();
- return node.finishProperty('init', key, value);
- }
- }
-
- function parseObjectInitialiser() {
- var properties = [], token, property, name, key, kind, map = {}, toString = String, node = new Node();
-
- expect('{');
-
- while (!match('}')) {
- property = parseObjectProperty();
-
- if (property.key.type === Syntax.Identifier) {
- name = property.key.name;
- } else {
- name = toString(property.key.value);
- }
- kind = (property.kind === 'init') ? PropertyKind.Data : (property.kind === 'get') ? PropertyKind.Get : PropertyKind.Set;
-
- key = '$' + name;
- if (Object.prototype.hasOwnProperty.call(map, key)) {
- if (map[key] === PropertyKind.Data) {
- if (strict && kind === PropertyKind.Data) {
- throwErrorTolerant({}, Messages.StrictDuplicateProperty);
- } else if (kind !== PropertyKind.Data) {
- throwErrorTolerant({}, Messages.AccessorDataProperty);
- }
- } else {
- if (kind === PropertyKind.Data) {
- throwErrorTolerant({}, Messages.AccessorDataProperty);
- } else if (map[key] & kind) {
- throwErrorTolerant({}, Messages.AccessorGetSet);
- }
- }
- map[key] |= kind;
- } else {
- map[key] = kind;
- }
-
- properties.push(property);
-
- if (!match('}')) {
- expectTolerant(',');
- }
- }
-
- expect('}');
-
- return node.finishObjectExpression(properties);
- }
-
- // 11.1.6 The Grouping Operator
-
- function parseGroupExpression() {
- var expr;
-
- expect('(');
-
- if (match(')')) {
- lex();
- return PlaceHolders.ArrowParameterPlaceHolder;
- }
-
- ++state.parenthesisCount;
-
- expr = parseExpression();
-
- expect(')');
-
- return expr;
- }
-
-
- // 11.1 Primary Expressions
-
- function parsePrimaryExpression() {
- var type, token, expr, node;
-
- if (match('(')) {
- return parseGroupExpression();
- }
-
- if (match('[')) {
- return parseArrayInitialiser();
- }
-
- if (match('{')) {
- return parseObjectInitialiser();
- }
-
- type = lookahead.type;
- node = new Node();
-
- if (type === Token.Identifier) {
- expr = node.finishIdentifier(lex().value);
- } else if (type === Token.StringLiteral || type === Token.NumericLiteral) {
- if (strict && lookahead.octal) {
- throwErrorTolerant(lookahead, Messages.StrictOctalLiteral);
- }
- expr = node.finishLiteral(lex());
- } else if (type === Token.Keyword) {
- if (matchKeyword('function')) {
- return parseFunctionExpression();
- }
- if (matchKeyword('this')) {
- lex();
- expr = node.finishThisExpression();
- } else {
- throwUnexpected(lex());
- }
- } else if (type === Token.BooleanLiteral) {
- token = lex();
- token.value = (token.value === 'true');
- expr = node.finishLiteral(token);
- } else if (type === Token.NullLiteral) {
- token = lex();
- token.value = null;
- expr = node.finishLiteral(token);
- } else if (match('/') || match('/=')) {
- if (typeof extra.tokens !== 'undefined') {
- expr = node.finishLiteral(collectRegex());
- } else {
- expr = node.finishLiteral(scanRegExp());
- }
- peek();
- } else {
- throwUnexpected(lex());
- }
-
- return expr;
- }
-
- // 11.2 Left-Hand-Side Expressions
-
- function parseArguments() {
- var args = [];
-
- expect('(');
-
- if (!match(')')) {
- while (index < length) {
- args.push(parseAssignmentExpression());
- if (match(')')) {
- break;
- }
- expectTolerant(',');
- }
- }
-
- expect(')');
-
- return args;
- }
-
- function parseNonComputedProperty() {
- var token, node = new Node();
-
- token = lex();
-
- if (!isIdentifierName(token)) {
- throwUnexpected(token);
- }
-
- return node.finishIdentifier(token.value);
- }
-
- function parseNonComputedMember() {
- expect('.');
-
- return parseNonComputedProperty();
- }
-
- function parseComputedMember() {
- var expr;
-
- expect('[');
-
- expr = parseExpression();
-
- expect(']');
-
- return expr;
- }
-
- function parseNewExpression() {
- var callee, args, node = new Node();
-
- expectKeyword('new');
- callee = parseLeftHandSideExpression();
- args = match('(') ? parseArguments() : [];
-
- return node.finishNewExpression(callee, args);
- }
-
- function parseLeftHandSideExpressionAllowCall() {
- var expr, args, property, startToken, previousAllowIn = state.allowIn;
-
- startToken = lookahead;
- state.allowIn = true;
- expr = matchKeyword('new') ? parseNewExpression() : parsePrimaryExpression();
-
- for (;;) {
- if (match('.')) {
- property = parseNonComputedMember();
- expr = new WrappingNode(startToken).finishMemberExpression('.', expr, property);
- } else if (match('(')) {
- args = parseArguments();
- expr = new WrappingNode(startToken).finishCallExpression(expr, args);
- } else if (match('[')) {
- property = parseComputedMember();
- expr = new WrappingNode(startToken).finishMemberExpression('[', expr, property);
- } else {
- break;
- }
- }
- state.allowIn = previousAllowIn;
-
- return expr;
- }
-
- function parseLeftHandSideExpression() {
- var expr, property, startToken;
- assert(state.allowIn, 'callee of new expression always allow in keyword.');
-
- startToken = lookahead;
-
- expr = matchKeyword('new') ? parseNewExpression() : parsePrimaryExpression();
-
- for (;;) {
- if (match('[')) {
- property = parseComputedMember();
- expr = new WrappingNode(startToken).finishMemberExpression('[', expr, property);
- } else if (match('.')) {
- property = parseNonComputedMember();
- expr = new WrappingNode(startToken).finishMemberExpression('.', expr, property);
- } else {
- break;
- }
- }
- return expr;
- }
-
- // 11.3 Postfix Expressions
-
- function parsePostfixExpression() {
- var expr, token, startToken = lookahead;
-
- expr = parseLeftHandSideExpressionAllowCall();
-
- if (lookahead.type === Token.Punctuator) {
- if ((match('++') || match('--')) && !peekLineTerminator()) {
- // 11.3.1, 11.3.2
- if (strict && expr.type === Syntax.Identifier && isRestrictedWord(expr.name)) {
- throwErrorTolerant({}, Messages.StrictLHSPostfix);
- }
-
- if (!isLeftHandSide(expr)) {
- throwErrorTolerant({}, Messages.InvalidLHSInAssignment);
- }
-
- token = lex();
- expr = new WrappingNode(startToken).finishPostfixExpression(token.value, expr);
- }
- }
-
- return expr;
- }
-
- // 11.4 Unary Operators
-
- function parseUnaryExpression() {
- var token, expr, startToken;
-
- if (lookahead.type !== Token.Punctuator && lookahead.type !== Token.Keyword) {
- expr = parsePostfixExpression();
- } else if (match('++') || match('--')) {
- startToken = lookahead;
- token = lex();
- expr = parseUnaryExpression();
- // 11.4.4, 11.4.5
- if (strict && expr.type === Syntax.Identifier && isRestrictedWord(expr.name)) {
- throwErrorTolerant({}, Messages.StrictLHSPrefix);
- }
-
- if (!isLeftHandSide(expr)) {
- throwErrorTolerant({}, Messages.InvalidLHSInAssignment);
- }
-
- expr = new WrappingNode(startToken).finishUnaryExpression(token.value, expr);
- } else if (match('+') || match('-') || match('~') || match('!')) {
- startToken = lookahead;
- token = lex();
- expr = parseUnaryExpression();
- expr = new WrappingNode(startToken).finishUnaryExpression(token.value, expr);
- } else if (matchKeyword('delete') || matchKeyword('void') || matchKeyword('typeof')) {
- startToken = lookahead;
- token = lex();
- expr = parseUnaryExpression();
- expr = new WrappingNode(startToken).finishUnaryExpression(token.value, expr);
- if (strict && expr.operator === 'delete' && expr.argument.type === Syntax.Identifier) {
- throwErrorTolerant({}, Messages.StrictDelete);
- }
- } else {
- expr = parsePostfixExpression();
- }
-
- return expr;
- }
-
- function binaryPrecedence(token, allowIn) {
- var prec = 0;
-
- if (token.type !== Token.Punctuator && token.type !== Token.Keyword) {
- return 0;
- }
-
- switch (token.value) {
- case '||':
- prec = 1;
- break;
-
- case '&&':
- prec = 2;
- break;
-
- case '|':
- prec = 3;
- break;
-
- case '^':
- prec = 4;
- break;
-
- case '&':
- prec = 5;
- break;
-
- case '==':
- case '!=':
- case '===':
- case '!==':
- prec = 6;
- break;
-
- case '<':
- case '>':
- case '<=':
- case '>=':
- case 'instanceof':
- prec = 7;
- break;
-
- case 'in':
- prec = allowIn ? 7 : 0;
- break;
-
- case '<<':
- case '>>':
- case '>>>':
- prec = 8;
- break;
-
- case '+':
- case '-':
- prec = 9;
- break;
-
- case '*':
- case '/':
- case '%':
- prec = 11;
- break;
-
- default:
- break;
- }
-
- return prec;
- }
-
- // 11.5 Multiplicative Operators
- // 11.6 Additive Operators
- // 11.7 Bitwise Shift Operators
- // 11.8 Relational Operators
- // 11.9 Equality Operators
- // 11.10 Binary Bitwise Operators
- // 11.11 Binary Logical Operators
-
- function parseBinaryExpression() {
- var marker, markers, expr, token, prec, stack, right, operator, left, i;
-
- marker = lookahead;
- left = parseUnaryExpression();
- if (left === PlaceHolders.ArrowParameterPlaceHolder) {
- return left;
- }
-
- token = lookahead;
- prec = binaryPrecedence(token, state.allowIn);
- if (prec === 0) {
- return left;
- }
- token.prec = prec;
- lex();
-
- markers = [marker, lookahead];
- right = parseUnaryExpression();
-
- stack = [left, token, right];
-
- while ((prec = binaryPrecedence(lookahead, state.allowIn)) > 0) {
-
- // Reduce: make a binary expression from the three topmost entries.
- while ((stack.length > 2) && (prec <= stack[stack.length - 2].prec)) {
- right = stack.pop();
- operator = stack.pop().value;
- left = stack.pop();
- markers.pop();
- expr = new WrappingNode(markers[markers.length - 1]).finishBinaryExpression(operator, left, right);
- stack.push(expr);
- }
-
- // Shift.
- token = lex();
- token.prec = prec;
- stack.push(token);
- markers.push(lookahead);
- expr = parseUnaryExpression();
- stack.push(expr);
- }
-
- // Final reduce to clean-up the stack.
- i = stack.length - 1;
- expr = stack[i];
- markers.pop();
- while (i > 1) {
- expr = new WrappingNode(markers.pop()).finishBinaryExpression(stack[i - 1].value, stack[i - 2], expr);
- i -= 2;
- }
-
- return expr;
- }
-
-
- // 11.12 Conditional Operator
-
- function parseConditionalExpression() {
- var expr, previousAllowIn, consequent, alternate, startToken;
-
- startToken = lookahead;
-
- expr = parseBinaryExpression();
- if (expr === PlaceHolders.ArrowParameterPlaceHolder) {
- return expr;
- }
- if (match('?')) {
- lex();
- previousAllowIn = state.allowIn;
- state.allowIn = true;
- consequent = parseAssignmentExpression();
- state.allowIn = previousAllowIn;
- expect(':');
- alternate = parseAssignmentExpression();
-
- expr = new WrappingNode(startToken).finishConditionalExpression(expr, consequent, alternate);
- }
-
- return expr;
- }
-
- // [ES6] 14.2 Arrow Function
-
- function parseConciseBody() {
- if (match('{')) {
- return parseFunctionSourceElements();
- }
- return parseAssignmentExpression();
- }
-
- function reinterpretAsCoverFormalsList(expressions) {
- var i, len, param, params, defaults, defaultCount, options, rest;
-
- params = [];
- defaults = [];
- defaultCount = 0;
- rest = null;
- options = {
- paramSet: {}
- };
-
- for (i = 0, len = expressions.length; i < len; i += 1) {
- param = expressions[i];
- if (param.type === Syntax.Identifier) {
- params.push(param);
- defaults.push(null);
- validateParam(options, param, param.name);
- } else if (param.type === Syntax.AssignmentExpression) {
- params.push(param.left);
- defaults.push(param.right);
- ++defaultCount;
- validateParam(options, param.left, param.left.name);
- } else {
- return null;
- }
- }
-
- if (options.message === Messages.StrictParamDupe) {
- throwError(
- strict ? options.stricted : options.firstRestricted,
- options.message
- );
- }
-
- if (defaultCount === 0) {
- defaults = [];
- }
-
- return {
- params: params,
- defaults: defaults,
- rest: rest,
- stricted: options.stricted,
- firstRestricted: options.firstRestricted,
- message: options.message
- };
- }
-
- function parseArrowFunctionExpression(options, node) {
- var previousStrict, body;
-
- expect('=>');
- previousStrict = strict;
-
- body = parseConciseBody();
-
- if (strict && options.firstRestricted) {
- throwError(options.firstRestricted, options.message);
- }
- if (strict && options.stricted) {
- throwErrorTolerant(options.stricted, options.message);
- }
-
- strict = previousStrict;
-
- return node.finishArrowFunctionExpression(options.params, options.defaults, body, body.type !== Syntax.BlockStatement);
- }
-
- // 11.13 Assignment Operators
-
- function parseAssignmentExpression() {
- var oldParenthesisCount, token, expr, right, list, startToken;
-
- oldParenthesisCount = state.parenthesisCount;
-
- startToken = lookahead;
- token = lookahead;
-
- expr = parseConditionalExpression();
-
- if (expr === PlaceHolders.ArrowParameterPlaceHolder || match('=>')) {
- if (state.parenthesisCount === oldParenthesisCount ||
- state.parenthesisCount === (oldParenthesisCount + 1)) {
- if (expr.type === Syntax.Identifier) {
- list = reinterpretAsCoverFormalsList([ expr ]);
- } else if (expr.type === Syntax.AssignmentExpression) {
- list = reinterpretAsCoverFormalsList([ expr ]);
- } else if (expr.type === Syntax.SequenceExpression) {
- list = reinterpretAsCoverFormalsList(expr.expressions);
- } else if (expr === PlaceHolders.ArrowParameterPlaceHolder) {
- list = reinterpretAsCoverFormalsList([]);
- }
- if (list) {
- return parseArrowFunctionExpression(list, new WrappingNode(startToken));
- }
- }
- }
-
- if (matchAssign()) {
- // LeftHandSideExpression
- if (!isLeftHandSide(expr)) {
- throwErrorTolerant({}, Messages.InvalidLHSInAssignment);
- }
-
- // 11.13.1
- if (strict && expr.type === Syntax.Identifier && isRestrictedWord(expr.name)) {
- throwErrorTolerant(token, Messages.StrictLHSAssignment);
- }
-
- token = lex();
- right = parseAssignmentExpression();
- expr = new WrappingNode(startToken).finishAssignmentExpression(token.value, expr, right);
- }
-
- return expr;
- }
-
- // 11.14 Comma Operator
-
- function parseExpression() {
- var expr, startToken = lookahead, expressions;
-
- expr = parseAssignmentExpression();
-
- if (match(',')) {
- expressions = [expr];
-
- while (index < length) {
- if (!match(',')) {
- break;
- }
- lex();
- expressions.push(parseAssignmentExpression());
- }
-
- expr = new WrappingNode(startToken).finishSequenceExpression(expressions);
- }
-
- return expr;
- }
-
- // 12.1 Block
-
- function parseStatementList() {
- var list = [],
- statement;
-
- while (index < length) {
- if (match('}')) {
- break;
- }
- statement = parseSourceElement();
- if (typeof statement === 'undefined') {
- break;
- }
- list.push(statement);
- }
-
- return list;
- }
-
- function parseBlock() {
- var block, node = new Node();
-
- expect('{');
-
- block = parseStatementList();
-
- expect('}');
-
- return node.finishBlockStatement(block);
- }
-
- // 12.2 Variable Statement
-
- function parseVariableIdentifier() {
- var token, node = new Node();
-
- token = lex();
-
- if (token.type !== Token.Identifier) {
- throwUnexpected(token);
- }
-
- return node.finishIdentifier(token.value);
- }
-
- function parseVariableDeclaration(kind) {
- var init = null, id, node = new Node();
-
- id = parseVariableIdentifier();
-
- // 12.2.1
- if (strict && isRestrictedWord(id.name)) {
- throwErrorTolerant({}, Messages.StrictVarName);
- }
-
- if (kind === 'const') {
- expect('=');
- init = parseAssignmentExpression();
- } else if (match('=')) {
- lex();
- init = parseAssignmentExpression();
- }
-
- return node.finishVariableDeclarator(id, init);
- }
-
- function parseVariableDeclarationList(kind) {
- var list = [];
-
- do {
- list.push(parseVariableDeclaration(kind));
- if (!match(',')) {
- break;
- }
- lex();
- } while (index < length);
-
- return list;
- }
-
- function parseVariableStatement(node) {
- var declarations;
-
- expectKeyword('var');
-
- declarations = parseVariableDeclarationList();
-
- consumeSemicolon();
-
- return node.finishVariableDeclaration(declarations, 'var');
- }
-
- // kind may be `const` or `let`
- // Both are experimental and not in the specification yet.
- // see http://wiki.ecmascript.org/doku.php?id=harmony:const
- // and http://wiki.ecmascript.org/doku.php?id=harmony:let
- function parseConstLetDeclaration(kind) {
- var declarations, node = new Node();
-
- expectKeyword(kind);
-
- declarations = parseVariableDeclarationList(kind);
-
- consumeSemicolon();
-
- return node.finishVariableDeclaration(declarations, kind);
- }
-
- // 12.3 Empty Statement
-
- function parseEmptyStatement() {
- var node = new Node();
- expect(';');
- return node.finishEmptyStatement();
- }
-
- // 12.4 Expression Statement
-
- function parseExpressionStatement(node) {
- var expr = parseExpression();
- consumeSemicolon();
- return node.finishExpressionStatement(expr);
- }
-
- // 12.5 If statement
-
- function parseIfStatement(node) {
- var test, consequent, alternate;
-
- expectKeyword('if');
-
- expect('(');
-
- test = parseExpression();
-
- expect(')');
-
- consequent = parseStatement();
-
- if (matchKeyword('else')) {
- lex();
- alternate = parseStatement();
- } else {
- alternate = null;
- }
-
- return node.finishIfStatement(test, consequent, alternate);
- }
-
- // 12.6 Iteration Statements
-
- function parseDoWhileStatement(node) {
- var body, test, oldInIteration;
-
- expectKeyword('do');
-
- oldInIteration = state.inIteration;
- state.inIteration = true;
-
- body = parseStatement();
-
- state.inIteration = oldInIteration;
-
- expectKeyword('while');
-
- expect('(');
-
- test = parseExpression();
-
- expect(')');
-
- if (match(';')) {
- lex();
- }
-
- return node.finishDoWhileStatement(body, test);
- }
-
- function parseWhileStatement(node) {
- var test, body, oldInIteration;
-
- expectKeyword('while');
-
- expect('(');
-
- test = parseExpression();
-
- expect(')');
-
- oldInIteration = state.inIteration;
- state.inIteration = true;
-
- body = parseStatement();
-
- state.inIteration = oldInIteration;
-
- return node.finishWhileStatement(test, body);
- }
-
- function parseForVariableDeclaration() {
- var token, declarations, node = new Node();
-
- token = lex();
- declarations = parseVariableDeclarationList();
-
- return node.finishVariableDeclaration(declarations, token.value);
- }
-
- function parseForStatement(node) {
- var init, test, update, left, right, body, oldInIteration, previousAllowIn = state.allowIn;
-
- init = test = update = null;
-
- expectKeyword('for');
-
- expect('(');
-
- if (match(';')) {
- lex();
- } else {
- if (matchKeyword('var') || matchKeyword('let')) {
- state.allowIn = false;
- init = parseForVariableDeclaration();
- state.allowIn = previousAllowIn;
-
- if (init.declarations.length === 1 && matchKeyword('in')) {
- lex();
- left = init;
- right = parseExpression();
- init = null;
- }
- } else {
- state.allowIn = false;
- init = parseExpression();
- state.allowIn = previousAllowIn;
-
- if (matchKeyword('in')) {
- // LeftHandSideExpression
- if (!isLeftHandSide(init)) {
- throwErrorTolerant({}, Messages.InvalidLHSInForIn);
- }
-
- lex();
- left = init;
- right = parseExpression();
- init = null;
- }
- }
-
- if (typeof left === 'undefined') {
- expect(';');
- }
- }
-
- if (typeof left === 'undefined') {
-
- if (!match(';')) {
- test = parseExpression();
- }
- expect(';');
-
- if (!match(')')) {
- update = parseExpression();
- }
- }
-
- expect(')');
-
- oldInIteration = state.inIteration;
- state.inIteration = true;
-
- body = parseStatement();
-
- state.inIteration = oldInIteration;
-
- return (typeof left === 'undefined') ?
- node.finishForStatement(init, test, update, body) :
- node.finishForInStatement(left, right, body);
- }
-
- // 12.7 The continue statement
-
- function parseContinueStatement(node) {
- var label = null, key;
-
- expectKeyword('continue');
-
- // Optimize the most common form: 'continue;'.
- if (source.charCodeAt(index) === 0x3B) {
- lex();
-
- if (!state.inIteration) {
- throwError({}, Messages.IllegalContinue);
- }
-
- return node.finishContinueStatement(null);
- }
-
- if (peekLineTerminator()) {
- if (!state.inIteration) {
- throwError({}, Messages.IllegalContinue);
- }
-
- return node.finishContinueStatement(null);
- }
-
- if (lookahead.type === Token.Identifier) {
- label = parseVariableIdentifier();
-
- key = '$' + label.name;
- if (!Object.prototype.hasOwnProperty.call(state.labelSet, key)) {
- throwError({}, Messages.UnknownLabel, label.name);
- }
- }
-
- consumeSemicolon();
-
- if (label === null && !state.inIteration) {
- throwError({}, Messages.IllegalContinue);
- }
-
- return node.finishContinueStatement(label);
- }
-
- // 12.8 The break statement
-
- function parseBreakStatement(node) {
- var label = null, key;
-
- expectKeyword('break');
-
- // Catch the very common case first: immediately a semicolon (U+003B).
- if (source.charCodeAt(index) === 0x3B) {
- lex();
-
- if (!(state.inIteration || state.inSwitch)) {
- throwError({}, Messages.IllegalBreak);
- }
-
- return node.finishBreakStatement(null);
- }
-
- if (peekLineTerminator()) {
- if (!(state.inIteration || state.inSwitch)) {
- throwError({}, Messages.IllegalBreak);
- }
-
- return node.finishBreakStatement(null);
- }
-
- if (lookahead.type === Token.Identifier) {
- label = parseVariableIdentifier();
-
- key = '$' + label.name;
- if (!Object.prototype.hasOwnProperty.call(state.labelSet, key)) {
- throwError({}, Messages.UnknownLabel, label.name);
- }
- }
-
- consumeSemicolon();
-
- if (label === null && !(state.inIteration || state.inSwitch)) {
- throwError({}, Messages.IllegalBreak);
- }
-
- return node.finishBreakStatement(label);
- }
-
- // 12.9 The return statement
-
- function parseReturnStatement(node) {
- var argument = null;
-
- expectKeyword('return');
-
- if (!state.inFunctionBody) {
- throwErrorTolerant({}, Messages.IllegalReturn);
- }
-
- // 'return' followed by a space and an identifier is very common.
- if (source.charCodeAt(index) === 0x20) {
- if (isIdentifierStart(source.charCodeAt(index + 1))) {
- argument = parseExpression();
- consumeSemicolon();
- return node.finishReturnStatement(argument);
- }
- }
-
- if (peekLineTerminator()) {
- return node.finishReturnStatement(null);
- }
-
- if (!match(';')) {
- if (!match('}') && lookahead.type !== Token.EOF) {
- argument = parseExpression();
- }
- }
-
- consumeSemicolon();
-
- return node.finishReturnStatement(argument);
- }
-
- // 12.10 The with statement
-
- function parseWithStatement(node) {
- var object, body;
-
- if (strict) {
- // TODO(ikarienator): Should we update the test cases instead?
- skipComment();
- throwErrorTolerant({}, Messages.StrictModeWith);
- }
-
- expectKeyword('with');
-
- expect('(');
-
- object = parseExpression();
-
- expect(')');
-
- body = parseStatement();
-
- return node.finishWithStatement(object, body);
- }
-
- // 12.10 The swith statement
-
- function parseSwitchCase() {
- var test, consequent = [], statement, node = new Node();
-
- if (matchKeyword('default')) {
- lex();
- test = null;
- } else {
- expectKeyword('case');
- test = parseExpression();
- }
- expect(':');
-
- while (index < length) {
- if (match('}') || matchKeyword('default') || matchKeyword('case')) {
- break;
- }
- statement = parseStatement();
- consequent.push(statement);
- }
-
- return node.finishSwitchCase(test, consequent);
- }
-
- function parseSwitchStatement(node) {
- var discriminant, cases, clause, oldInSwitch, defaultFound;
-
- expectKeyword('switch');
-
- expect('(');
-
- discriminant = parseExpression();
-
- expect(')');
-
- expect('{');
-
- cases = [];
-
- if (match('}')) {
- lex();
- return node.finishSwitchStatement(discriminant, cases);
- }
-
- oldInSwitch = state.inSwitch;
- state.inSwitch = true;
- defaultFound = false;
-
- while (index < length) {
- if (match('}')) {
- break;
- }
- clause = parseSwitchCase();
- if (clause.test === null) {
- if (defaultFound) {
- throwError({}, Messages.MultipleDefaultsInSwitch);
- }
- defaultFound = true;
- }
- cases.push(clause);
- }
-
- state.inSwitch = oldInSwitch;
-
- expect('}');
-
- return node.finishSwitchStatement(discriminant, cases);
- }
-
- // 12.13 The throw statement
-
- function parseThrowStatement(node) {
- var argument;
-
- expectKeyword('throw');
-
- if (peekLineTerminator()) {
- throwError({}, Messages.NewlineAfterThrow);
- }
-
- argument = parseExpression();
-
- consumeSemicolon();
-
- return node.finishThrowStatement(argument);
- }
-
- // 12.14 The try statement
-
- function parseCatchClause() {
- var param, body, node = new Node();
-
- expectKeyword('catch');
-
- expect('(');
- if (match(')')) {
- throwUnexpected(lookahead);
- }
-
- param = parseVariableIdentifier();
- // 12.14.1
- if (strict && isRestrictedWord(param.name)) {
- throwErrorTolerant({}, Messages.StrictCatchVariable);
- }
-
- expect(')');
- body = parseBlock();
- return node.finishCatchClause(param, body);
- }
-
- function parseTryStatement(node) {
- var block, handlers = [], finalizer = null;
-
- expectKeyword('try');
-
- block = parseBlock();
-
- if (matchKeyword('catch')) {
- handlers.push(parseCatchClause());
- }
-
- if (matchKeyword('finally')) {
- lex();
- finalizer = parseBlock();
- }
-
- if (handlers.length === 0 && !finalizer) {
- throwError({}, Messages.NoCatchOrFinally);
- }
-
- return node.finishTryStatement(block, [], handlers, finalizer);
- }
-
- // 12.15 The debugger statement
-
- function parseDebuggerStatement(node) {
- expectKeyword('debugger');
-
- consumeSemicolon();
-
- return node.finishDebuggerStatement();
- }
-
- // 12 Statements
-
- function parseStatement() {
- var type = lookahead.type,
- expr,
- labeledBody,
- key,
- node;
-
- if (type === Token.EOF) {
- throwUnexpected(lookahead);
- }
-
- if (type === Token.Punctuator && lookahead.value === '{') {
- return parseBlock();
- }
-
- node = new Node();
-
- if (type === Token.Punctuator) {
- switch (lookahead.value) {
- case ';':
- return parseEmptyStatement(node);
- case '(':
- return parseExpressionStatement(node);
- default:
- break;
- }
- } else if (type === Token.Keyword) {
- switch (lookahead.value) {
- case 'break':
- return parseBreakStatement(node);
- case 'continue':
- return parseContinueStatement(node);
- case 'debugger':
- return parseDebuggerStatement(node);
- case 'do':
- return parseDoWhileStatement(node);
- case 'for':
- return parseForStatement(node);
- case 'function':
- return parseFunctionDeclaration(node);
- case 'if':
- return parseIfStatement(node);
- case 'return':
- return parseReturnStatement(node);
- case 'switch':
- return parseSwitchStatement(node);
- case 'throw':
- return parseThrowStatement(node);
- case 'try':
- return parseTryStatement(node);
- case 'var':
- return parseVariableStatement(node);
- case 'while':
- return parseWhileStatement(node);
- case 'with':
- return parseWithStatement(node);
- default:
- break;
- }
- }
-
- expr = parseExpression();
-
- // 12.12 Labelled Statements
- if ((expr.type === Syntax.Identifier) && match(':')) {
- lex();
-
- key = '$' + expr.name;
- if (Object.prototype.hasOwnProperty.call(state.labelSet, key)) {
- throwError({}, Messages.Redeclaration, 'Label', expr.name);
- }
-
- state.labelSet[key] = true;
- labeledBody = parseStatement();
- delete state.labelSet[key];
- return node.finishLabeledStatement(expr, labeledBody);
- }
-
- consumeSemicolon();
-
- return node.finishExpressionStatement(expr);
- }
-
- // 13 Function Definition
-
- function parseFunctionSourceElements() {
- var sourceElement, sourceElements = [], token, directive, firstRestricted,
- oldLabelSet, oldInIteration, oldInSwitch, oldInFunctionBody, oldParenthesisCount,
- node = new Node();
-
- expect('{');
-
- while (index < length) {
- if (lookahead.type !== Token.StringLiteral) {
- break;
- }
- token = lookahead;
-
- sourceElement = parseSourceElement();
- sourceElements.push(sourceElement);
- if (sourceElement.expression.type !== Syntax.Literal) {
- // this is not directive
- break;
- }
- directive = source.slice(token.start + 1, token.end - 1);
- if (directive === 'use strict') {
- strict = true;
- if (firstRestricted) {
- throwErrorTolerant(firstRestricted, Messages.StrictOctalLiteral);
- }
- } else {
- if (!firstRestricted && token.octal) {
- firstRestricted = token;
- }
- }
- }
-
- oldLabelSet = state.labelSet;
- oldInIteration = state.inIteration;
- oldInSwitch = state.inSwitch;
- oldInFunctionBody = state.inFunctionBody;
- oldParenthesisCount = state.parenthesizedCount;
-
- state.labelSet = {};
- state.inIteration = false;
- state.inSwitch = false;
- state.inFunctionBody = true;
- state.parenthesizedCount = 0;
-
- while (index < length) {
- if (match('}')) {
- break;
- }
- sourceElement = parseSourceElement();
- if (typeof sourceElement === 'undefined') {
- break;
- }
- sourceElements.push(sourceElement);
- }
-
- expect('}');
-
- state.labelSet = oldLabelSet;
- state.inIteration = oldInIteration;
- state.inSwitch = oldInSwitch;
- state.inFunctionBody = oldInFunctionBody;
- state.parenthesizedCount = oldParenthesisCount;
-
- return node.finishBlockStatement(sourceElements);
- }
-
- function validateParam(options, param, name) {
- var key = '$' + name;
- if (strict) {
- if (isRestrictedWord(name)) {
- options.stricted = param;
- options.message = Messages.StrictParamName;
- }
- if (Object.prototype.hasOwnProperty.call(options.paramSet, key)) {
- options.stricted = param;
- options.message = Messages.StrictParamDupe;
- }
- } else if (!options.firstRestricted) {
- if (isRestrictedWord(name)) {
- options.firstRestricted = param;
- options.message = Messages.StrictParamName;
- } else if (isStrictModeReservedWord(name)) {
- options.firstRestricted = param;
- options.message = Messages.StrictReservedWord;
- } else if (Object.prototype.hasOwnProperty.call(options.paramSet, key)) {
- options.firstRestricted = param;
- options.message = Messages.StrictParamDupe;
- }
- }
- options.paramSet[key] = true;
- }
-
- function parseParam(options) {
- var token, param, def;
-
- token = lookahead;
- param = parseVariableIdentifier();
- validateParam(options, token, token.value);
- if (match('=')) {
- lex();
- def = parseAssignmentExpression();
- ++options.defaultCount;
- }
-
- options.params.push(param);
- options.defaults.push(def);
-
- return !match(')');
- }
-
- function parseParams(firstRestricted) {
- var options;
-
- options = {
- params: [],
- defaultCount: 0,
- defaults: [],
- firstRestricted: firstRestricted
- };
-
- expect('(');
-
- if (!match(')')) {
- options.paramSet = {};
- while (index < length) {
- if (!parseParam(options)) {
- break;
- }
- expect(',');
- }
- }
-
- expect(')');
-
- if (options.defaultCount === 0) {
- options.defaults = [];
- }
-
- return {
- params: options.params,
- defaults: options.defaults,
- stricted: options.stricted,
- firstRestricted: options.firstRestricted,
- message: options.message
- };
- }
-
- function parseFunctionDeclaration() {
- var id, params = [], defaults = [], body, token, stricted, tmp, firstRestricted, message, previousStrict, node = new Node();
-
- expectKeyword('function');
- token = lookahead;
- id = parseVariableIdentifier();
- if (strict) {
- if (isRestrictedWord(token.value)) {
- throwErrorTolerant(token, Messages.StrictFunctionName);
- }
- } else {
- if (isRestrictedWord(token.value)) {
- firstRestricted = token;
- message = Messages.StrictFunctionName;
- } else if (isStrictModeReservedWord(token.value)) {
- firstRestricted = token;
- message = Messages.StrictReservedWord;
- }
- }
-
- tmp = parseParams(firstRestricted);
- params = tmp.params;
- defaults = tmp.defaults;
- stricted = tmp.stricted;
- firstRestricted = tmp.firstRestricted;
- if (tmp.message) {
- message = tmp.message;
- }
-
- previousStrict = strict;
- body = parseFunctionSourceElements();
- if (strict && firstRestricted) {
- throwError(firstRestricted, message);
- }
- if (strict && stricted) {
- throwErrorTolerant(stricted, message);
- }
- strict = previousStrict;
-
- return node.finishFunctionDeclaration(id, params, defaults, body);
- }
-
- function parseFunctionExpression() {
- var token, id = null, stricted, firstRestricted, message, tmp,
- params = [], defaults = [], body, previousStrict, node = new Node();
-
- expectKeyword('function');
-
- if (!match('(')) {
- token = lookahead;
- id = parseVariableIdentifier();
- if (strict) {
- if (isRestrictedWord(token.value)) {
- throwErrorTolerant(token, Messages.StrictFunctionName);
- }
- } else {
- if (isRestrictedWord(token.value)) {
- firstRestricted = token;
- message = Messages.StrictFunctionName;
- } else if (isStrictModeReservedWord(token.value)) {
- firstRestricted = token;
- message = Messages.StrictReservedWord;
- }
- }
- }
-
- tmp = parseParams(firstRestricted);
- params = tmp.params;
- defaults = tmp.defaults;
- stricted = tmp.stricted;
- firstRestricted = tmp.firstRestricted;
- if (tmp.message) {
- message = tmp.message;
- }
-
- previousStrict = strict;
- body = parseFunctionSourceElements();
- if (strict && firstRestricted) {
- throwError(firstRestricted, message);
- }
- if (strict && stricted) {
- throwErrorTolerant(stricted, message);
- }
- strict = previousStrict;
-
- return node.finishFunctionExpression(id, params, defaults, body);
- }
-
- // 14 Program
-
- function parseSourceElement() {
- if (lookahead.type === Token.Keyword) {
- switch (lookahead.value) {
- case 'const':
- case 'let':
- return parseConstLetDeclaration(lookahead.value);
- case 'function':
- return parseFunctionDeclaration();
- default:
- return parseStatement();
- }
- }
-
- if (lookahead.type !== Token.EOF) {
- return parseStatement();
- }
- }
-
- function parseSourceElements() {
- var sourceElement, sourceElements = [], token, directive, firstRestricted;
-
- while (index < length) {
- token = lookahead;
- if (token.type !== Token.StringLiteral) {
- break;
- }
-
- sourceElement = parseSourceElement();
- sourceElements.push(sourceElement);
- if (sourceElement.expression.type !== Syntax.Literal) {
- // this is not directive
- break;
- }
- directive = source.slice(token.start + 1, token.end - 1);
- if (directive === 'use strict') {
- strict = true;
- if (firstRestricted) {
- throwErrorTolerant(firstRestricted, Messages.StrictOctalLiteral);
- }
- } else {
- if (!firstRestricted && token.octal) {
- firstRestricted = token;
- }
- }
- }
-
- while (index < length) {
- sourceElement = parseSourceElement();
- /* istanbul ignore if */
- if (typeof sourceElement === 'undefined') {
- break;
- }
- sourceElements.push(sourceElement);
- }
- return sourceElements;
- }
-
- function parseProgram() {
- var body, node;
-
- skipComment();
- peek();
- node = new Node();
- strict = false;
-
- body = parseSourceElements();
- return node.finishProgram(body);
- }
-
- function filterTokenLocation() {
- var i, entry, token, tokens = [];
-
- for (i = 0; i < extra.tokens.length; ++i) {
- entry = extra.tokens[i];
- token = {
- type: entry.type,
- value: entry.value
- };
- if (extra.range) {
- token.range = entry.range;
- }
- if (extra.loc) {
- token.loc = entry.loc;
- }
- tokens.push(token);
- }
-
- extra.tokens = tokens;
- }
-
- function tokenize(code, options) {
- var toString,
- tokens;
-
- toString = String;
- if (typeof code !== 'string' && !(code instanceof String)) {
- code = toString(code);
- }
-
- source = code;
- index = 0;
- lineNumber = (source.length > 0) ? 1 : 0;
- lineStart = 0;
- length = source.length;
- lookahead = null;
- state = {
- allowIn: true,
- labelSet: {},
- inFunctionBody: false,
- inIteration: false,
- inSwitch: false,
- lastCommentStart: -1
- };
-
- extra = {};
-
- // Options matching.
- options = options || {};
-
- // Of course we collect tokens here.
- options.tokens = true;
- extra.tokens = [];
- extra.tokenize = true;
- // The following two fields are necessary to compute the Regex tokens.
- extra.openParenToken = -1;
- extra.openCurlyToken = -1;
-
- extra.range = (typeof options.range === 'boolean') && options.range;
- extra.loc = (typeof options.loc === 'boolean') && options.loc;
-
- if (typeof options.comment === 'boolean' && options.comment) {
- extra.comments = [];
- }
- if (typeof options.tolerant === 'boolean' && options.tolerant) {
- extra.errors = [];
- }
-
- try {
- peek();
- if (lookahead.type === Token.EOF) {
- return extra.tokens;
- }
-
- lex();
- while (lookahead.type !== Token.EOF) {
- try {
- lex();
- } catch (lexError) {
- if (extra.errors) {
- extra.errors.push(lexError);
- // We have to break on the first error
- // to avoid infinite loops.
- break;
- } else {
- throw lexError;
- }
- }
- }
-
- filterTokenLocation();
- tokens = extra.tokens;
- if (typeof extra.comments !== 'undefined') {
- tokens.comments = extra.comments;
- }
- if (typeof extra.errors !== 'undefined') {
- tokens.errors = extra.errors;
- }
- } catch (e) {
- throw e;
- } finally {
- extra = {};
- }
- return tokens;
- }
-
- function parse(code, options) {
- var program, toString;
-
- toString = String;
- if (typeof code !== 'string' && !(code instanceof String)) {
- code = toString(code);
- }
-
- source = code;
- index = 0;
- lineNumber = (source.length > 0) ? 1 : 0;
- lineStart = 0;
- length = source.length;
- lookahead = null;
- state = {
- allowIn: true,
- labelSet: {},
- parenthesisCount: 0,
- inFunctionBody: false,
- inIteration: false,
- inSwitch: false,
- lastCommentStart: -1
- };
-
- extra = {};
- if (typeof options !== 'undefined') {
- extra.range = (typeof options.range === 'boolean') && options.range;
- extra.loc = (typeof options.loc === 'boolean') && options.loc;
- extra.attachComment = (typeof options.attachComment === 'boolean') && options.attachComment;
-
- if (extra.loc && options.source !== null && options.source !== undefined) {
- extra.source = toString(options.source);
- }
-
- if (typeof options.tokens === 'boolean' && options.tokens) {
- extra.tokens = [];
- }
- if (typeof options.comment === 'boolean' && options.comment) {
- extra.comments = [];
- }
- if (typeof options.tolerant === 'boolean' && options.tolerant) {
- extra.errors = [];
- }
- if (extra.attachComment) {
- extra.range = true;
- extra.comments = [];
- extra.bottomRightStack = [];
- extra.trailingComments = [];
- extra.leadingComments = [];
- }
- }
-
- try {
- program = parseProgram();
- if (typeof extra.comments !== 'undefined') {
- program.comments = extra.comments;
- }
- if (typeof extra.tokens !== 'undefined') {
- filterTokenLocation();
- program.tokens = extra.tokens;
- }
- if (typeof extra.errors !== 'undefined') {
- program.errors = extra.errors;
- }
- } catch (e) {
- throw e;
- } finally {
- extra = {};
- }
-
- return program;
- }
-
- // Sync with *.json manifests.
- exports.version = '2.0.0-dev';
-
- exports.tokenize = tokenize;
-
- exports.parse = parse;
-
- // Deep copy.
- /* istanbul ignore next */
- exports.Syntax = (function () {
- var name, types = {};
-
- if (typeof Object.create === 'function') {
- types = Object.create(null);
- }
-
- for (name in Syntax) {
- if (Syntax.hasOwnProperty(name)) {
- types[name] = Syntax[name];
- }
- }
-
- if (typeof Object.freeze === 'function') {
- Object.freeze(types);
- }
-
- return types;
- }());
-
-}));
-/* vim: set sw=4 ts=4 et tw=80 : */
diff --git a/src/js/lib/jsbn/base64.js b/src/js/lib/jsbn/base64.js
deleted file mode 100755
index 0b4f83d9..00000000
--- a/src/js/lib/jsbn/base64.js
+++ /dev/null
@@ -1,70 +0,0 @@
-var b64map="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-var b64padchar="=";
-function hex2b64(h) {
-var i;
-var c;
-var ret = "";
-for(i = 0; i+3 <= h.length; i+=3) {
- c = parseInt(h.substring(i,i+3),16);
- ret += b64map.charAt(c >> 6) + b64map.charAt(c & 63);
- }
- if(i+1 == h.length) {
- c = parseInt(h.substring(i,i+1),16);
- ret += b64map.charAt(c << 2);
- }
- else if(i+2 == h.length) {
- c = parseInt(h.substring(i,i+2),16);
- ret += b64map.charAt(c >> 2) + b64map.charAt((c & 3) << 4);
- }
- while((ret.length & 3) > 0) ret += b64padchar;
- return ret;
-}
-
-// convert a base64 string to hex
-function b64tohex(s) {
- var ret = ""
- var i;
- var k = 0; // b64 state, 0-3
- var slop;
- for(i = 0; i < s.length; ++i) {
- if(s.charAt(i) == b64padchar) break;
- var v = b64map.indexOf(s.charAt(i));
- if(v < 0) continue;
- if(k == 0) {
- ret += int2char(v >> 2);
- slop = v & 3;
- k = 1;
- }
- else if(k == 1) {
- ret += int2char((slop << 2) | (v >> 4));
- slop = v & 0xf;
- k = 2;
- }
- else if(k == 2) {
- ret += int2char(slop);
- ret += int2char(v >> 2);
- slop = v & 3;
- k = 3;
- }
- else {
- ret += int2char((slop << 2) | (v >> 4));
- ret += int2char(v & 0xf);
- k = 0;
- }
- }
- if(k == 1)
- ret += int2char(slop << 2);
- return ret;
-}
-
-// convert a base64 string to a byte/number array
-function b64toBA(s) {
- //piggyback on b64tohex for now, optimize later
- var h = b64tohex(s);
- var i;
- var a = new Array();
- for(i = 0; 2*i < h.length; ++i) {
- a[i] = parseInt(h.substring(2*i,2*i+2),16);
- }
- return a;
-}
diff --git a/src/js/lib/jsbn/ec.js b/src/js/lib/jsbn/ec.js
deleted file mode 100755
index a13e1cd1..00000000
--- a/src/js/lib/jsbn/ec.js
+++ /dev/null
@@ -1,288 +0,0 @@
-// Basic Javascript Elliptic Curve implementation
-// Ported loosely from BouncyCastle's Java EC code
-// Only Fp curves implemented for now
-// Requires jsbn.js and jsbn2.js
-// ----------------
-// ECFieldElementFp
-// constructor
-function ECFieldElementFp(q,x) {
-this.x = x;
-// TODO if(x.compareTo(q) >= 0) error
-this.q = q;
-}
-function feFpEquals(other) {
-if(other == this) return true;
-return (this.q.equals(other.q) && this.x.equals(other.x));
-}
-function feFpToBigInteger() {
-return this.x;
-}
-function feFpNegate() {
-return new ECFieldElementFp(this.q, this.x.negate().mod(this.q));
-}
-function feFpAdd(b) {
-return new ECFieldElementFp(this.q, this.x.add(b.toBigInteger()).mod(this.q));
-}
-function feFpSubtract(b) {
-return new ECFieldElementFp(this.q, this.x.subtract(b.toBigInteger()).mod(this.q));
-}
-function feFpMultiply(b) {
-return new ECFieldElementFp(this.q, this.x.multiply(b.toBigInteger()).mod(this.q));
-}
-function feFpSquare() {
-return new ECFieldElementFp(this.q, this.x.square().mod(this.q));
-}
-function feFpDivide(b) {
-return new ECFieldElementFp(this.q, this.x.multiply(b.toBigInteger().modInverse(this.q)).mod(this.q));
-}
-ECFieldElementFp.prototype.equals = feFpEquals;
-ECFieldElementFp.prototype.toBigInteger = feFpToBigInteger;
-ECFieldElementFp.prototype.negate = feFpNegate;
-ECFieldElementFp.prototype.add = feFpAdd;
-ECFieldElementFp.prototype.subtract = feFpSubtract;
-ECFieldElementFp.prototype.multiply = feFpMultiply;
-ECFieldElementFp.prototype.square = feFpSquare;
-ECFieldElementFp.prototype.divide = feFpDivide;
-// ----------------
-// ECPointFp
-// constructor
-function ECPointFp(curve,x,y,z) {
-this.curve = curve;
-this.x = x;
-this.y = y;
-// Projective coordinates: either zinv == null or z * zinv == 1
-// z and zinv are just BigIntegers, not fieldElements
-if(z == null) {
-this.z = BigInteger.ONE;
-}
-else {
-this.z = z;
-}
-this.zinv = null;
-//TODO: compression flag
-}
-function pointFpGetX() {
-if(this.zinv == null) {
-this.zinv = this.z.modInverse(this.curve.q);
-}
-var r = this.x.toBigInteger().multiply(this.zinv);
-this.curve.reduce(r);
-return this.curve.fromBigInteger(r);
-}
-function pointFpGetY() {
-if(this.zinv == null) {
-this.zinv = this.z.modInverse(this.curve.q);
-}
-var r = this.y.toBigInteger().multiply(this.zinv);
-this.curve.reduce(r);
-return this.curve.fromBigInteger(r);
-}
-function pointFpEquals(other) {
-if(other == this) return true;
-if(this.isInfinity()) return other.isInfinity();
-if(other.isInfinity()) return this.isInfinity();
-var u, v;
-// u = Y2 * Z1 - Y1 * Z2
-u = other.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(other.z)).mod(this.curve.q);
-if(!u.equals(BigInteger.ZERO)) return false;
-// v = X2 * Z1 - X1 * Z2
-v = other.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(other.z)).mod(this.curve.q);
-return v.equals(BigInteger.ZERO);
-}
-function pointFpIsInfinity() {
-if((this.x == null) && (this.y == null)) return true;
-return this.z.equals(BigInteger.ZERO) && !this.y.toBigInteger().equals(BigInteger.ZERO);
-}
-function pointFpNegate() {
-return new ECPointFp(this.curve, this.x, this.y.negate(), this.z);
-}
-function pointFpAdd(b) {
-if(this.isInfinity()) return b;
-if(b.isInfinity()) return this;
-// u = Y2 * Z1 - Y1 * Z2
-var u = b.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(b.z)).mod(this.curve.q);
-// v = X2 * Z1 - X1 * Z2
-var v = b.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(b.z)).mod(this.curve.q);
-if(BigInteger.ZERO.equals(v)) {
-if(BigInteger.ZERO.equals(u)) {
-return this.twice(); // this == b, so double
-}
-return this.curve.getInfinity(); // this = -b, so infinity
-}
-var THREE = new BigInteger("3");
-var x1 = this.x.toBigInteger();
-var y1 = this.y.toBigInteger();
-var x2 = b.x.toBigInteger();
-var y2 = b.y.toBigInteger();
-var v2 = v.square();
-var v3 = v2.multiply(v);
-var x1v2 = x1.multiply(v2);
-var zu2 = u.square().multiply(this.z);
-// x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)
-var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.q);
-// y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3
-var y3 = x1v2.multiply(THREE).multiply(u).subtract(y1.multiply(v3)).subtract(zu2.multiply(u)).multiply(b.z).add(u.multiply(v3)).mod(this.curve.q);
-// z3 = v^3 * z1 * z2
-var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.q);
-return new ECPointFp(this.curve, this.curve.fromBigInteger(x3), this.curve.fromBigInteger(y3), z3);
-}
-function pointFpTwice() {
-if(this.isInfinity()) return this;
-if(this.y.toBigInteger().signum() == 0) return this.curve.getInfinity();
-// TODO: optimized handling of constants
-var THREE = new BigInteger("3");
-var x1 = this.x.toBigInteger();
-var y1 = this.y.toBigInteger();
-var y1z1 = y1.multiply(this.z);
-var y1sqz1 = y1z1.multiply(y1).mod(this.curve.q);
-var a = this.curve.a.toBigInteger();
-// w = 3 * x1^2 + a * z1^2
-var w = x1.square().multiply(THREE);
-if(!BigInteger.ZERO.equals(a)) {
-w = w.add(this.z.square().multiply(a));
-}
-w = w.mod(this.curve.q);
-//this.curve.reduce(w);
-// x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)
-var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.q);
-// y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3
-var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.square().multiply(w)).mod(this.curve.q);
-// z3 = 8 * (y1 * z1)^3
-var z3 = y1z1.square().multiply(y1z1).shiftLeft(3).mod(this.curve.q);
-return new ECPointFp(this.curve, this.curve.fromBigInteger(x3), this.curve.fromBigInteger(y3), z3);
-}
-// Simple NAF (Non-Adjacent Form) multiplication algorithm
-// TODO: modularize the multiplication algorithm
-function pointFpMultiply(k) {
-if(this.isInfinity()) return this;
-if(k.signum() == 0) return this.curve.getInfinity();
-var e = k;
-var h = e.multiply(new BigInteger("3"));
-var neg = this.negate();
-var R = this;
-var i;
-for(i = h.bitLength() - 2; i > 0; --i) {
-R = R.twice();
-var hBit = h.testBit(i);
-var eBit = e.testBit(i);
-if (hBit != eBit) {
-R = R.add(hBit ? this : neg);
-}
-}
-return R;
-}
-// Compute this*j + x*k (simultaneous multiplication)
-function pointFpMultiplyTwo(j,x,k) {
-var i;
-if(j.bitLength() > k.bitLength())
-i = j.bitLength() - 1;
-else
-i = k.bitLength() - 1;
-var R = this.curve.getInfinity();
-var both = this.add(x);
-while(i >= 0) {
-R = R.twice();
-if(j.testBit(i)) {
-if(k.testBit(i)) {
-R = R.add(both);
-}
-else {
-R = R.add(this);
-}
-}
-else {
-if(k.testBit(i)) {
-R = R.add(x);
-}
-}
---i;
-}
-return R;
-}
-ECPointFp.prototype.getX = pointFpGetX;
-ECPointFp.prototype.getY = pointFpGetY;
-ECPointFp.prototype.equals = pointFpEquals;
-ECPointFp.prototype.isInfinity = pointFpIsInfinity;
-ECPointFp.prototype.negate = pointFpNegate;
-ECPointFp.prototype.add = pointFpAdd;
-ECPointFp.prototype.twice = pointFpTwice;
-ECPointFp.prototype.multiply = pointFpMultiply;
-ECPointFp.prototype.multiplyTwo = pointFpMultiplyTwo;
-// ----------------
-// ECCurveFp
-// constructor
-function ECCurveFp(q,a,b) {
-this.q = q;
-this.a = this.fromBigInteger(a);
-this.b = this.fromBigInteger(b);
-this.infinity = new ECPointFp(this, null, null);
-this.reducer = new Barrett(this.q);
-}
-function curveFpGetQ() {
-return this.q;
-}
-function curveFpGetA() {
-return this.a;
-}
-function curveFpGetB() {
-return this.b;
-}
-function curveFpEquals(other) {
-if(other == this) return true;
-return(this.q.equals(other.q) && this.a.equals(other.a) && this.b.equals(other.b));
-}
-function curveFpGetInfinity() {
-return this.infinity;
-}
-function curveFpFromBigInteger(x) {
-return new ECFieldElementFp(this.q, x);
-}
-function curveReduce(x) {
-this.reducer.reduce(x);
-}
-// for now, work with hex strings because they're easier in JS
-function curveFpDecodePointHex(s) {
-switch(parseInt(s.substr(0,2), 16)) { // first byte
-case 0:
-return this.infinity;
-case 2:
-case 3:
-// point compression not supported yet
-return null;
-case 4:
-case 6:
-case 7:
-var len = (s.length - 2) / 2;
-var xHex = s.substr(2, len);
-var yHex = s.substr(len+2, len);
-return new ECPointFp(this,
-this.fromBigInteger(new BigInteger(xHex, 16)),
-this.fromBigInteger(new BigInteger(yHex, 16)));
-default: // unsupported
-return null;
-}
-}
-function curveFpEncodePointHex(p) {
-if (p.isInfinity()) return "00";
-var xHex = p.getX().toBigInteger().toString(16);
-var yHex = p.getY().toBigInteger().toString(16);
-var oLen = this.getQ().toString(16).length;
-if ((oLen % 2) != 0) oLen++;
-while (xHex.length < oLen) {
- xHex = "0" + xHex;
- }
- while (yHex.length < oLen) {
- yHex = "0" + yHex;
- }
- return "04" + xHex + yHex;
-}
-
-ECCurveFp.prototype.getQ = curveFpGetQ;
-ECCurveFp.prototype.getA = curveFpGetA;
-ECCurveFp.prototype.getB = curveFpGetB;
-ECCurveFp.prototype.equals = curveFpEquals;
-ECCurveFp.prototype.getInfinity = curveFpGetInfinity;
-ECCurveFp.prototype.fromBigInteger = curveFpFromBigInteger;
-ECCurveFp.prototype.reduce = curveReduce;
-ECCurveFp.prototype.decodePointHex = curveFpDecodePointHex;
-ECCurveFp.prototype.encodePointHex = curveFpEncodePointHex;
diff --git a/src/js/lib/jsbn/jsbn.js b/src/js/lib/jsbn/jsbn.js
deleted file mode 100755
index ba340c1b..00000000
--- a/src/js/lib/jsbn/jsbn.js
+++ /dev/null
@@ -1,591 +0,0 @@
-/** @license
-========================================================================
- Copyright (c) 2005 Tom Wu
- All Rights Reserved.
- Basic JavaScript BN library - subset useful for RSA encryption.
-
- This software is covered under the following copyright:
-
- Copyright (c) 2003-2005 Tom Wu
- All Rights Reserved.
-
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
-
- The above copyright notice and this permission notice shall be
- included in all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
- EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
- WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
-
- IN NO EVENT SHALL TOM WU BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
- INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER
- RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF
- THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT
- OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
- In addition, the following condition applies:
-
- All redistributions must retain an intact copy of this copyright notice
- and disclaimer.
-
- Address all questions regarding this license to:
- Tom Wu
- tjw@cs.Stanford.EDU
-*/
-
-// Bits per digit
-var dbits;
-// JavaScript engine analysis
-var canary = 0xdeadbeefcafe;
-var j_lm = ((canary&0xffffff)==0xefcafe);
-// (public) Constructor
-function BigInteger(a,b,c) {
-if(a != null)
-if("number" == typeof a) this.fromNumber(a,b,c);
-else if(b == null && "string" != typeof a) this.fromString(a,256);
-else this.fromString(a,b);
-}
-// return new, unset BigInteger
-function nbi() { return new BigInteger(null); }
-// am: Compute w_j += (x*this_i), propagate carries,
-// c is initial carry, returns final carry.
-// c < 3*dvalue, x < 2*dvalue, this_i < dvalue
-// We need to select the fastest one that works in this environment.
-
-// am1: use a single mult and divide to get the high bits,
-// max digit bits should be 26 because
-// max internal value = 2*dvalue^2-2*dvalue (< 2^53)
-function am1(i,x,w,j,c,n) {
- while(--n >= 0) {
- var v = x*this[i++]+w[j]+c;
- c = Math.floor(v/0x4000000);
- w[j++] = v&0x3ffffff;
- }
- return c;
-}
-// am2 avoids a big mult-and-extract completely.
-// Max digit bits should be <= 30 because we do bitwise ops
-// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
-function am2(i,x,w,j,c,n) {
- var xl = x&0x7fff, xh = x>>15;
- while(--n >= 0) {
- var l = this[i]&0x7fff;
- var h = this[i++]>>15;
- var m = xh*l+h*xl;
- l = xl*l+((m&0x7fff)<<15)+w[j]+(c&0x3fffffff);
- c = (l>>>30)+(m>>>15)+xh*h+(c>>>30);
- w[j++] = l&0x3fffffff;
- }
- return c;
-}
-// Alternately, set max digit bits to 28 since some
-// browsers slow down when dealing with 32-bit numbers.
-function am3(i,x,w,j,c,n) {
- var xl = x&0x3fff, xh = x>>14;
- while(--n >= 0) {
- var l = this[i]&0x3fff;
- var h = this[i++]>>14;
- var m = xh*l+h*xl;
- l = xl*l+((m&0x3fff)<<14)+w[j]+c;
- c = (l>>28)+(m>>14)+xh*h;
- w[j++] = l&0xfffffff;
- }
- return c;
-}
-if(j_lm && (navigator.appName == "Microsoft Internet Explorer")) {
- BigInteger.prototype.am = am2;
- dbits = 30;
-}
-else if(j_lm && (navigator.appName != "Netscape")) {
- BigInteger.prototype.am = am1;
- dbits = 26;
-}
-else { // Mozilla/Netscape seems to prefer am3
- BigInteger.prototype.am = am3;
- dbits = 28;
-}
-
-BigInteger.prototype.DB = dbits;
-BigInteger.prototype.DM = ((1<
- *
- * PROVIDING ASN.1 PRIMITIVES
- * Here are ASN.1 DER primitive classes.
- *
- *
- * OTHER ASN.1 CLASSES
- *
- *
- * SUB NAME SPACES
- *
- *
- *
- * {TYPE-OF-ASNOBJ: ASN1OBJ-PARAMETER}
- *
- * 'TYPE-OF-ASN1OBJ' can be one of following symbols:
- *
- *
- * @example
- * newObject({'prnstr': 'aaa'});
- * newObject({'seq': [{'int': 3}, {'prnstr': 'aaa'}]})
- * // ASN.1 Tagged Object
- * newObject({'tag': {'tag': 'a1',
- * 'explicit': true,
- * 'obj': {'seq': [{'int': 3}, {'prnstr': 'aaa'}]}}});
- * // more simple representation of ASN.1 Tagged Object
- * newObject({'tag': ['a1',
- * true,
- * {'seq': [
- * {'int': 3},
- * {'prnstr': 'aaa'}]}
- * ]});
- */
- this.newObject = function(param) {
- var ns1 = KJUR.asn1;
- var keys = Object.keys(param);
- if (keys.length != 1)
- throw "key of param shall be only one.";
- var key = keys[0];
-
- if (":bool:int:bitstr:octstr:null:oid:enum:utf8str:numstr:prnstr:telstr:ia5str:utctime:gentime:seq:set:tag:".indexOf(":" + key + ":") == -1)
- throw "undefined key: " + key;
-
- if (key == "bool") return new ns1.DERBoolean(param[key]);
- if (key == "int") return new ns1.DERInteger(param[key]);
- if (key == "bitstr") return new ns1.DERBitString(param[key]);
- if (key == "octstr") return new ns1.DEROctetString(param[key]);
- if (key == "null") return new ns1.DERNull(param[key]);
- if (key == "oid") return new ns1.DERObjectIdentifier(param[key]);
- if (key == "enum") return new ns1.DEREnumerated(param[key]);
- if (key == "utf8str") return new ns1.DERUTF8String(param[key]);
- if (key == "numstr") return new ns1.DERNumericString(param[key]);
- if (key == "prnstr") return new ns1.DERPrintableString(param[key]);
- if (key == "telstr") return new ns1.DERTeletexString(param[key]);
- if (key == "ia5str") return new ns1.DERIA5String(param[key]);
- if (key == "utctime") return new ns1.DERUTCTime(param[key]);
- if (key == "gentime") return new ns1.DERGeneralizedTime(param[key]);
-
- if (key == "seq") {
- var paramList = param[key];
- var a = [];
- for (var i = 0; i < paramList.length; i++) {
- var asn1Obj = ns1.ASN1Util.newObject(paramList[i]);
- a.push(asn1Obj);
- }
- return new ns1.DERSequence({'array': a});
- }
-
- if (key == "set") {
- var paramList = param[key];
- var a = [];
- for (var i = 0; i < paramList.length; i++) {
- var asn1Obj = ns1.ASN1Util.newObject(paramList[i]);
- a.push(asn1Obj);
- }
- return new ns1.DERSet({'array': a});
- }
-
- if (key == "tag") {
- var tagParam = param[key];
- if (Object.prototype.toString.call(tagParam) === '[object Array]' &&
- tagParam.length == 3) {
- var obj = ns1.ASN1Util.newObject(tagParam[2]);
- return new ns1.DERTaggedObject({tag: tagParam[0], explicit: tagParam[1], obj: obj});
- } else {
- var newParam = {};
- if (tagParam.explicit !== undefined)
- newParam.explicit = tagParam.explicit;
- if (tagParam.tag !== undefined)
- newParam.tag = tagParam.tag;
- if (tagParam.obj === undefined)
- throw "obj shall be specified for 'tag'.";
- newParam.obj = ns1.ASN1Util.newObject(tagParam.obj);
- return new ns1.DERTaggedObject(newParam);
- }
- }
- };
-
- /**
- * get encoded hexadecimal string of ASN1Object specifed by JSON parameters
- * @name jsonToASN1HEX
- * @memberOf KJUR.asn1.ASN1Util
- * @function
- * @param {Array} param JSON parameter to generate ASN1Object
- * @return hexadecimal string of ASN1Object
- * @since asn1 1.0.4
- * @description
- * As for ASN.1 object representation of JSON object,
- * please see {@link newObject}.
- * @example
- * jsonToASN1HEX({'prnstr': 'aaa'});
- */
- this.jsonToASN1HEX = function(param) {
- var asn1Obj = this.newObject(param);
- return asn1Obj.getEncodedHex();
- };
-};
-
-/**
- * get dot noted oid number string from hexadecimal value of OID
- * @name oidHexToInt
- * @memberOf KJUR.asn1.ASN1Util
- * @function
- * @param {String} hex hexadecimal value of object identifier
- * @return {String} dot noted string of object identifier
- * @since jsrsasign 4.8.3 asn1 1.0.7
- * @description
- * This static method converts from hexadecimal string representation of
- * ASN.1 value of object identifier to oid number string.
- * @example
- * KJUR.asn1.ASN1Util.oidHexToInt('550406') → "2.5.4.6"
- */
-KJUR.asn1.ASN1Util.oidHexToInt = function(hex) {
- var s = "";
- var i01 = parseInt(hex.substr(0, 2), 16);
- var i0 = Math.floor(i01 / 40);
- var i1 = i01 % 40;
- var s = i0 + "." + i1;
-
- var binbuf = "";
- for (var i = 2; i < hex.length; i += 2) {
- var value = parseInt(hex.substr(i, 2), 16);
- var bin = ("00000000" + value.toString(2)).slice(- 8);
- binbuf = binbuf + bin.substr(1, 7);
- if (bin.substr(0, 1) == "0") {
- var bi = new BigInteger(binbuf, 2);
- s = s + "." + bi.toString(10);
- binbuf = "";
- }
- };
-
- return s;
-};
-
-/**
- * get hexadecimal value of object identifier from dot noted oid value
- * @name oidIntToHex
- * @memberOf KJUR.asn1.ASN1Util
- * @function
- * @param {String} oidString dot noted string of object identifier
- * @return {String} hexadecimal value of object identifier
- * @since jsrsasign 4.8.3 asn1 1.0.7
- * @description
- * This static method converts from object identifier value string.
- * to hexadecimal string representation of it.
- * @example
- * KJUR.asn1.ASN1Util.oidIntToHex("2.5.4.6") → "550406"
- */
-KJUR.asn1.ASN1Util.oidIntToHex = function(oidString) {
- var itox = function(i) {
- var h = i.toString(16);
- if (h.length == 1) h = '0' + h;
- return h;
- };
-
- var roidtox = function(roid) {
- var h = '';
- var bi = new BigInteger(roid, 10);
- var b = bi.toString(2);
- var padLen = 7 - b.length % 7;
- if (padLen == 7) padLen = 0;
- var bPad = '';
- for (var i = 0; i < padLen; i++) bPad += '0';
- b = bPad + b;
- for (var i = 0; i < b.length - 1; i += 7) {
- var b8 = b.substr(i, 7);
- if (i != b.length - 7) b8 = '1' + b8;
- h += itox(parseInt(b8, 2));
- }
- return h;
- };
-
- if (! oidString.match(/^[0-9.]+$/)) {
- throw "malformed oid string: " + oidString;
- }
- var h = '';
- var a = oidString.split('.');
- var i0 = parseInt(a[0]) * 40 + parseInt(a[1]);
- h += itox(i0);
- a.splice(0, 2);
- for (var i = 0; i < a.length; i++) {
- h += roidtox(a[i]);
- }
- return h;
-};
-
-
-// ********************************************************************
-// Abstract ASN.1 Classes
-// ********************************************************************
-
-// ********************************************************************
-
-/**
- * base class for ASN.1 DER encoder object
- * @name KJUR.asn1.ASN1Object
- * @class base class for ASN.1 DER encoder object
- * @property {Boolean} isModified flag whether internal data was changed
- * @property {String} hTLV hexadecimal string of ASN.1 TLV
- * @property {String} hT hexadecimal string of ASN.1 TLV tag(T)
- * @property {String} hL hexadecimal string of ASN.1 TLV length(L)
- * @property {String} hV hexadecimal string of ASN.1 TLV value(V)
- * @description
- */
-KJUR.asn1.ASN1Object = function() {
- var isModified = true;
- var hTLV = null;
- var hT = '00';
- var hL = '00';
- var hV = '';
-
- /**
- * get hexadecimal ASN.1 TLV length(L) bytes from TLV value(V)
- * @name getLengthHexFromValue
- * @memberOf KJUR.asn1.ASN1Object
- * @function
- * @return {String} hexadecimal string of ASN.1 TLV length(L)
- */
- this.getLengthHexFromValue = function() {
- if (typeof this.hV == "undefined" || this.hV == null) {
- throw "this.hV is null or undefined.";
- }
- if (this.hV.length % 2 == 1) {
- throw "value hex must be even length: n=" + hV.length + ",v=" + this.hV;
- }
- var n = this.hV.length / 2;
- var hN = n.toString(16);
- if (hN.length % 2 == 1) {
- hN = "0" + hN;
- }
- if (n < 128) {
- return hN;
- } else {
- var hNlen = hN.length / 2;
- if (hNlen > 15) {
- throw "ASN.1 length too long to represent by 8x: n = " + n.toString(16);
- }
- var head = 128 + hNlen;
- return head.toString(16) + hN;
- }
- };
-
- /**
- * get hexadecimal string of ASN.1 TLV bytes
- * @name getEncodedHex
- * @memberOf KJUR.asn1.ASN1Object
- * @function
- * @return {String} hexadecimal string of ASN.1 TLV
- */
- this.getEncodedHex = function() {
- if (this.hTLV == null || this.isModified) {
- this.hV = this.getFreshValueHex();
- this.hL = this.getLengthHexFromValue();
- this.hTLV = this.hT + this.hL + this.hV;
- this.isModified = false;
- //alert("first time: " + this.hTLV);
- }
- return this.hTLV;
- };
-
- /**
- * get hexadecimal string of ASN.1 TLV value(V) bytes
- * @name getValueHex
- * @memberOf KJUR.asn1.ASN1Object
- * @function
- * @return {String} hexadecimal string of ASN.1 TLV value(V) bytes
- */
- this.getValueHex = function() {
- this.getEncodedHex();
- return this.hV;
- }
-
- this.getFreshValueHex = function() {
- return '';
- };
-};
-
-// == BEGIN DERAbstractString ================================================
-/**
- * base class for ASN.1 DER string classes
- * @name KJUR.asn1.DERAbstractString
- * @class base class for ASN.1 DER string classes
- * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})
- * @property {String} s internal string of value
- * @extends KJUR.asn1.ASN1Object
- * @description
- *
- * As for argument 'params' for constructor, you can specify one of
- * following properties:
- *
- *
- * NOTE: 'params' can be omitted.
- */
-KJUR.asn1.DERAbstractString = function(params) {
- KJUR.asn1.DERAbstractString.superclass.constructor.call(this);
- var s = null;
- var hV = null;
-
- /**
- * get string value of this string object
- * @name getString
- * @memberOf KJUR.asn1.DERAbstractString
- * @function
- * @return {String} string value of this string object
- */
- this.getString = function() {
- return this.s;
- };
-
- /**
- * set value by a string
- * @name setString
- * @memberOf KJUR.asn1.DERAbstractString
- * @function
- * @param {String} newS value by a string to set
- */
- this.setString = function(newS) {
- this.hTLV = null;
- this.isModified = true;
- this.s = newS;
- this.hV = stohex(this.s);
- };
-
- /**
- * set value by a hexadecimal string
- * @name setStringHex
- * @memberOf KJUR.asn1.DERAbstractString
- * @function
- * @param {String} newHexString value by a hexadecimal string to set
- */
- this.setStringHex = function(newHexString) {
- this.hTLV = null;
- this.isModified = true;
- this.s = null;
- this.hV = newHexString;
- };
-
- this.getFreshValueHex = function() {
- return this.hV;
- };
-
- if (typeof params != "undefined") {
- if (typeof params == "string") {
- this.setString(params);
- } else if (typeof params['str'] != "undefined") {
- this.setString(params['str']);
- } else if (typeof params['hex'] != "undefined") {
- this.setStringHex(params['hex']);
- }
- }
-};
-YAHOO.lang.extend(KJUR.asn1.DERAbstractString, KJUR.asn1.ASN1Object);
-// == END DERAbstractString ================================================
-
-// == BEGIN DERAbstractTime ==================================================
-/**
- * base class for ASN.1 DER Generalized/UTCTime class
- * @name KJUR.asn1.DERAbstractTime
- * @class base class for ASN.1 DER Generalized/UTCTime class
- * @param {Array} params associative array of parameters (ex. {'str': '130430235959Z'})
- * @extends KJUR.asn1.ASN1Object
- * @description
- * @see KJUR.asn1.ASN1Object - superclass
- */
-KJUR.asn1.DERAbstractTime = function(params) {
- KJUR.asn1.DERAbstractTime.superclass.constructor.call(this);
- var s = null;
- var date = null;
-
- // --- PRIVATE METHODS --------------------
- this.localDateToUTC = function(d) {
- utc = d.getTime() + (d.getTimezoneOffset() * 60000);
- var utcDate = new Date(utc);
- return utcDate;
- };
-
- /**
- * format date string by Data object
- * @name formatDate
- * @memberOf KJUR.asn1.AbstractTime;
- * @param {Date} dateObject
- * @param {string} type 'utc' or 'gen'
- * @param {boolean} withMillis flag for with millisections or not
- * @description
- * 'withMillis' flag is supported from asn1 1.0.6.
- */
- this.formatDate = function(dateObject, type, withMillis) {
- var pad = this.zeroPadding;
- var d = this.localDateToUTC(dateObject);
- var year = String(d.getFullYear());
- if (type == 'utc') year = year.substr(2, 2);
- var month = pad(String(d.getMonth() + 1), 2);
- var day = pad(String(d.getDate()), 2);
- var hour = pad(String(d.getHours()), 2);
- var min = pad(String(d.getMinutes()), 2);
- var sec = pad(String(d.getSeconds()), 2);
- var s = year + month + day + hour + min + sec;
- if (withMillis === true) {
- var millis = d.getMilliseconds();
- if (millis != 0) {
- var sMillis = pad(String(millis), 3);
- sMillis = sMillis.replace(/[0]+$/, "");
- s = s + "." + sMillis;
- }
- }
- return s + "Z";
- };
-
- this.zeroPadding = function(s, len) {
- if (s.length >= len) return s;
- return new Array(len - s.length + 1).join('0') + s;
- };
-
- // --- PUBLIC METHODS --------------------
- /**
- * get string value of this string object
- * @name getString
- * @memberOf KJUR.asn1.DERAbstractTime
- * @function
- * @return {String} string value of this time object
- */
- this.getString = function() {
- return this.s;
- };
-
- /**
- * set value by a string
- * @name setString
- * @memberOf KJUR.asn1.DERAbstractTime
- * @function
- * @param {String} newS value by a string to set such like "130430235959Z"
- */
- this.setString = function(newS) {
- this.hTLV = null;
- this.isModified = true;
- this.s = newS;
- this.hV = stohex(newS);
- };
-
- /**
- * set value by a Date object
- * @name setByDateValue
- * @memberOf KJUR.asn1.DERAbstractTime
- * @function
- * @param {Integer} year year of date (ex. 2013)
- * @param {Integer} month month of date between 1 and 12 (ex. 12)
- * @param {Integer} day day of month
- * @param {Integer} hour hours of date
- * @param {Integer} min minutes of date
- * @param {Integer} sec seconds of date
- */
- this.setByDateValue = function(year, month, day, hour, min, sec) {
- var dateObject = new Date(Date.UTC(year, month - 1, day, hour, min, sec, 0));
- this.setByDate(dateObject);
- };
-
- this.getFreshValueHex = function() {
- return this.hV;
- };
-};
-YAHOO.lang.extend(KJUR.asn1.DERAbstractTime, KJUR.asn1.ASN1Object);
-// == END DERAbstractTime ==================================================
-
-// == BEGIN DERAbstractStructured ============================================
-/**
- * base class for ASN.1 DER structured class
- * @name KJUR.asn1.DERAbstractStructured
- * @class base class for ASN.1 DER structured class
- * @property {Array} asn1Array internal array of ASN1Object
- * @extends KJUR.asn1.ASN1Object
- * @description
- * @see KJUR.asn1.ASN1Object - superclass
- */
-KJUR.asn1.DERAbstractStructured = function(params) {
- KJUR.asn1.DERAbstractString.superclass.constructor.call(this);
- var asn1Array = null;
-
- /**
- * set value by array of ASN1Object
- * @name setByASN1ObjectArray
- * @memberOf KJUR.asn1.DERAbstractStructured
- * @function
- * @param {array} asn1ObjectArray array of ASN1Object to set
- */
- this.setByASN1ObjectArray = function(asn1ObjectArray) {
- this.hTLV = null;
- this.isModified = true;
- this.asn1Array = asn1ObjectArray;
- };
-
- /**
- * append an ASN1Object to internal array
- * @name appendASN1Object
- * @memberOf KJUR.asn1.DERAbstractStructured
- * @function
- * @param {ASN1Object} asn1Object to add
- */
- this.appendASN1Object = function(asn1Object) {
- this.hTLV = null;
- this.isModified = true;
- this.asn1Array.push(asn1Object);
- };
-
- this.asn1Array = new Array();
- if (typeof params != "undefined") {
- if (typeof params['array'] != "undefined") {
- this.asn1Array = params['array'];
- }
- }
-};
-YAHOO.lang.extend(KJUR.asn1.DERAbstractStructured, KJUR.asn1.ASN1Object);
-
-
-// ********************************************************************
-// ASN.1 Object Classes
-// ********************************************************************
-
-// ********************************************************************
-/**
- * class for ASN.1 DER Boolean
- * @name KJUR.asn1.DERBoolean
- * @class class for ASN.1 DER Boolean
- * @extends KJUR.asn1.ASN1Object
- * @description
- * @see KJUR.asn1.ASN1Object - superclass
- */
-KJUR.asn1.DERBoolean = function() {
- KJUR.asn1.DERBoolean.superclass.constructor.call(this);
- this.hT = "01";
- this.hTLV = "0101ff";
-};
-YAHOO.lang.extend(KJUR.asn1.DERBoolean, KJUR.asn1.ASN1Object);
-
-// ********************************************************************
-/**
- * class for ASN.1 DER Integer
- * @name KJUR.asn1.DERInteger
- * @class class for ASN.1 DER Integer
- * @extends KJUR.asn1.ASN1Object
- * @description
- *
- * As for argument 'params' for constructor, you can specify one of
- * following properties:
- *
- *
- * NOTE: 'params' can be omitted.
- */
-KJUR.asn1.DERInteger = function(params) {
- KJUR.asn1.DERInteger.superclass.constructor.call(this);
- this.hT = "02";
-
- /**
- * set value by Tom Wu's BigInteger object
- * @name setByBigInteger
- * @memberOf KJUR.asn1.DERInteger
- * @function
- * @param {BigInteger} bigIntegerValue to set
- */
- this.setByBigInteger = function(bigIntegerValue) {
- this.hTLV = null;
- this.isModified = true;
- this.hV = KJUR.asn1.ASN1Util.bigIntToMinTwosComplementsHex(bigIntegerValue);
- };
-
- /**
- * set value by integer value
- * @name setByInteger
- * @memberOf KJUR.asn1.DERInteger
- * @function
- * @param {Integer} integer value to set
- */
- this.setByInteger = function(intValue) {
- var bi = new BigInteger(String(intValue), 10);
- this.setByBigInteger(bi);
- };
-
- /**
- * set value by integer value
- * @name setValueHex
- * @memberOf KJUR.asn1.DERInteger
- * @function
- * @param {String} hexadecimal string of integer value
- * @description
- *
- * NOTE: Value shall be represented by minimum octet length of
- * two's complement representation.
- * @example
- * new KJUR.asn1.DERInteger(123);
- * new KJUR.asn1.DERInteger({'int': 123});
- * new KJUR.asn1.DERInteger({'hex': '1fad'});
- */
- this.setValueHex = function(newHexString) {
- this.hV = newHexString;
- };
-
- this.getFreshValueHex = function() {
- return this.hV;
- };
-
- if (typeof params != "undefined") {
- if (typeof params['bigint'] != "undefined") {
- this.setByBigInteger(params['bigint']);
- } else if (typeof params['int'] != "undefined") {
- this.setByInteger(params['int']);
- } else if (typeof params == "number") {
- this.setByInteger(params);
- } else if (typeof params['hex'] != "undefined") {
- this.setValueHex(params['hex']);
- }
- }
-};
-YAHOO.lang.extend(KJUR.asn1.DERInteger, KJUR.asn1.ASN1Object);
-
-// ********************************************************************
-/**
- * class for ASN.1 DER encoded BitString primitive
- * @name KJUR.asn1.DERBitString
- * @class class for ASN.1 DER encoded BitString primitive
- * @extends KJUR.asn1.ASN1Object
- * @description
- *
- * As for argument 'params' for constructor, you can specify one of
- * following properties:
- *
- *
- * NOTE: 'params' can be omitted.
- */
-KJUR.asn1.DERBitString = function(params) {
- KJUR.asn1.DERBitString.superclass.constructor.call(this);
- this.hT = "03";
-
- /**
- * set ASN.1 value(V) by a hexadecimal string including unused bits
- * @name setHexValueIncludingUnusedBits
- * @memberOf KJUR.asn1.DERBitString
- * @function
- * @param {String} newHexStringIncludingUnusedBits
- */
- this.setHexValueIncludingUnusedBits = function(newHexStringIncludingUnusedBits) {
- this.hTLV = null;
- this.isModified = true;
- this.hV = newHexStringIncludingUnusedBits;
- };
-
- /**
- * set ASN.1 value(V) by unused bit and hexadecimal string of value
- * @name setUnusedBitsAndHexValue
- * @memberOf KJUR.asn1.DERBitString
- * @function
- * @param {Integer} unusedBits
- * @param {String} hValue
- */
- this.setUnusedBitsAndHexValue = function(unusedBits, hValue) {
- if (unusedBits < 0 || 7 < unusedBits) {
- throw "unused bits shall be from 0 to 7: u = " + unusedBits;
- }
- var hUnusedBits = "0" + unusedBits;
- this.hTLV = null;
- this.isModified = true;
- this.hV = hUnusedBits + hValue;
- };
-
- /**
- * set ASN.1 DER BitString by binary string
- * @name setByBinaryString
- * @memberOf KJUR.asn1.DERBitString
- * @function
- * @param {String} binaryString binary value string (i.e. '10111')
- * @description
- * Its unused bits will be calculated automatically by length of
- * 'binaryValue'.
- * NOTE: Trailing zeros '0' will be ignored.
- */
- this.setByBinaryString = function(binaryString) {
- binaryString = binaryString.replace(/0+$/, '');
- var unusedBits = 8 - binaryString.length % 8;
- if (unusedBits == 8) unusedBits = 0;
- for (var i = 0; i <= unusedBits; i++) {
- binaryString += '0';
- }
- var h = '';
- for (var i = 0; i < binaryString.length - 1; i += 8) {
- var b = binaryString.substr(i, 8);
- var x = parseInt(b, 2).toString(16);
- if (x.length == 1) x = '0' + x;
- h += x;
- }
- this.hTLV = null;
- this.isModified = true;
- this.hV = '0' + unusedBits + h;
- };
-
- /**
- * set ASN.1 TLV value(V) by an array of boolean
- * @name setByBooleanArray
- * @memberOf KJUR.asn1.DERBitString
- * @function
- * @param {array} booleanArray array of boolean (ex. [true, false, true])
- * @description
- * NOTE: Trailing falses will be ignored.
- */
- this.setByBooleanArray = function(booleanArray) {
- var s = '';
- for (var i = 0; i < booleanArray.length; i++) {
- if (booleanArray[i] == true) {
- s += '1';
- } else {
- s += '0';
- }
- }
- this.setByBinaryString(s);
- };
-
- /**
- * generate an array of false with specified length
- * @name newFalseArray
- * @memberOf KJUR.asn1.DERBitString
- * @function
- * @param {Integer} nLength length of array to generate
- * @return {array} array of boolean faluse
- * @description
- * This static method may be useful to initialize boolean array.
- */
- this.newFalseArray = function(nLength) {
- var a = new Array(nLength);
- for (var i = 0; i < nLength; i++) {
- a[i] = false;
- }
- return a;
- };
-
- this.getFreshValueHex = function() {
- return this.hV;
- };
-
- if (typeof params != "undefined") {
- if (typeof params == "string" && params.toLowerCase().match(/^[0-9a-f]+$/)) {
- this.setHexValueIncludingUnusedBits(params);
- } else if (typeof params['hex'] != "undefined") {
- this.setHexValueIncludingUnusedBits(params['hex']);
- } else if (typeof params['bin'] != "undefined") {
- this.setByBinaryString(params['bin']);
- } else if (typeof params['array'] != "undefined") {
- this.setByBooleanArray(params['array']);
- }
- }
-};
-YAHOO.lang.extend(KJUR.asn1.DERBitString, KJUR.asn1.ASN1Object);
-
-// ********************************************************************
-/**
- * class for ASN.1 DER OctetString
- * @name KJUR.asn1.DEROctetString
- * @class class for ASN.1 DER OctetString
- * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})
- * @extends KJUR.asn1.DERAbstractString
- * @description
- * @see KJUR.asn1.DERAbstractString - superclass
- */
-KJUR.asn1.DEROctetString = function(params) {
- KJUR.asn1.DEROctetString.superclass.constructor.call(this, params);
- this.hT = "04";
-};
-YAHOO.lang.extend(KJUR.asn1.DEROctetString, KJUR.asn1.DERAbstractString);
-
-// ********************************************************************
-/**
- * class for ASN.1 DER Null
- * @name KJUR.asn1.DERNull
- * @class class for ASN.1 DER Null
- * @extends KJUR.asn1.ASN1Object
- * @description
- * @see KJUR.asn1.ASN1Object - superclass
- */
-KJUR.asn1.DERNull = function() {
- KJUR.asn1.DERNull.superclass.constructor.call(this);
- this.hT = "05";
- this.hTLV = "0500";
-};
-YAHOO.lang.extend(KJUR.asn1.DERNull, KJUR.asn1.ASN1Object);
-
-// ********************************************************************
-/**
- * class for ASN.1 DER ObjectIdentifier
- * @name KJUR.asn1.DERObjectIdentifier
- * @class class for ASN.1 DER ObjectIdentifier
- * @param {Array} params associative array of parameters (ex. {'oid': '2.5.4.5'})
- * @extends KJUR.asn1.ASN1Object
- * @description
- *
- * As for argument 'params' for constructor, you can specify one of
- * following properties:
- *
- *
- * NOTE: 'params' can be omitted.
- */
-KJUR.asn1.DERObjectIdentifier = function(params) {
- var itox = function(i) {
- var h = i.toString(16);
- if (h.length == 1) h = '0' + h;
- return h;
- };
- var roidtox = function(roid) {
- var h = '';
- var bi = new BigInteger(roid, 10);
- var b = bi.toString(2);
- var padLen = 7 - b.length % 7;
- if (padLen == 7) padLen = 0;
- var bPad = '';
- for (var i = 0; i < padLen; i++) bPad += '0';
- b = bPad + b;
- for (var i = 0; i < b.length - 1; i += 7) {
- var b8 = b.substr(i, 7);
- if (i != b.length - 7) b8 = '1' + b8;
- h += itox(parseInt(b8, 2));
- }
- return h;
- }
-
- KJUR.asn1.DERObjectIdentifier.superclass.constructor.call(this);
- this.hT = "06";
-
- /**
- * set value by a hexadecimal string
- * @name setValueHex
- * @memberOf KJUR.asn1.DERObjectIdentifier
- * @function
- * @param {String} newHexString hexadecimal value of OID bytes
- */
- this.setValueHex = function(newHexString) {
- this.hTLV = null;
- this.isModified = true;
- this.s = null;
- this.hV = newHexString;
- };
-
- /**
- * set value by a OID string
- * @name setValueOidString
- * @memberOf KJUR.asn1.DERObjectIdentifier
- * @function
- * @param {String} oidString OID string (ex. 2.5.4.13)
- */
- this.setValueOidString = function(oidString) {
- if (! oidString.match(/^[0-9.]+$/)) {
- throw "malformed oid string: " + oidString;
- }
- var h = '';
- var a = oidString.split('.');
- var i0 = parseInt(a[0]) * 40 + parseInt(a[1]);
- h += itox(i0);
- a.splice(0, 2);
- for (var i = 0; i < a.length; i++) {
- h += roidtox(a[i]);
- }
- this.hTLV = null;
- this.isModified = true;
- this.s = null;
- this.hV = h;
- };
-
- /**
- * set value by a OID name
- * @name setValueName
- * @memberOf KJUR.asn1.DERObjectIdentifier
- * @function
- * @param {String} oidName OID name (ex. 'serverAuth')
- * @since 1.0.1
- * @description
- * OID name shall be defined in 'KJUR.asn1.x509.OID.name2oidList'.
- * Otherwise raise error.
- */
- this.setValueName = function(oidName) {
- if (typeof KJUR.asn1.x509.OID.name2oidList[oidName] != "undefined") {
- var oid = KJUR.asn1.x509.OID.name2oidList[oidName];
- this.setValueOidString(oid);
- } else {
- throw "DERObjectIdentifier oidName undefined: " + oidName;
- }
- };
-
- this.getFreshValueHex = function() {
- return this.hV;
- };
-
- if (typeof params != "undefined") {
- if (typeof params == "string" && params.match(/^[0-2].[0-9.]+$/)) {
- this.setValueOidString(params);
- } else if (KJUR.asn1.x509.OID.name2oidList[params] !== undefined) {
- this.setValueOidString(KJUR.asn1.x509.OID.name2oidList[params]);
- } else if (typeof params['oid'] != "undefined") {
- this.setValueOidString(params['oid']);
- } else if (typeof params['hex'] != "undefined") {
- this.setValueHex(params['hex']);
- } else if (typeof params['name'] != "undefined") {
- this.setValueName(params['name']);
- }
- }
-};
-YAHOO.lang.extend(KJUR.asn1.DERObjectIdentifier, KJUR.asn1.ASN1Object);
-
-// ********************************************************************
-/**
- * class for ASN.1 DER Enumerated
- * @name KJUR.asn1.DEREnumerated
- * @class class for ASN.1 DER Enumerated
- * @extends KJUR.asn1.ASN1Object
- * @description
- *
- * As for argument 'params' for constructor, you can specify one of
- * following properties:
- *
- *
- * NOTE: 'params' can be omitted.
- */
-KJUR.asn1.DEREnumerated = function(params) {
- KJUR.asn1.DEREnumerated.superclass.constructor.call(this);
- this.hT = "0a";
-
- /**
- * set value by Tom Wu's BigInteger object
- * @name setByBigInteger
- * @memberOf KJUR.asn1.DEREnumerated
- * @function
- * @param {BigInteger} bigIntegerValue to set
- */
- this.setByBigInteger = function(bigIntegerValue) {
- this.hTLV = null;
- this.isModified = true;
- this.hV = KJUR.asn1.ASN1Util.bigIntToMinTwosComplementsHex(bigIntegerValue);
- };
-
- /**
- * set value by integer value
- * @name setByInteger
- * @memberOf KJUR.asn1.DEREnumerated
- * @function
- * @param {Integer} integer value to set
- */
- this.setByInteger = function(intValue) {
- var bi = new BigInteger(String(intValue), 10);
- this.setByBigInteger(bi);
- };
-
- /**
- * set value by integer value
- * @name setValueHex
- * @memberOf KJUR.asn1.DEREnumerated
- * @function
- * @param {String} hexadecimal string of integer value
- * @description
- *
- * NOTE: Value shall be represented by minimum octet length of
- * two's complement representation.
- * @example
- * new KJUR.asn1.DEREnumerated(123);
- * new KJUR.asn1.DEREnumerated({'int': 123});
- * new KJUR.asn1.DEREnumerated({'hex': '1fad'});
- */
- this.setValueHex = function(newHexString) {
- this.hV = newHexString;
- };
-
- this.getFreshValueHex = function() {
- return this.hV;
- };
-
- if (typeof params != "undefined") {
- if (typeof params['int'] != "undefined") {
- this.setByInteger(params['int']);
- } else if (typeof params == "number") {
- this.setByInteger(params);
- } else if (typeof params['hex'] != "undefined") {
- this.setValueHex(params['hex']);
- }
- }
-};
-YAHOO.lang.extend(KJUR.asn1.DEREnumerated, KJUR.asn1.ASN1Object);
-
-// ********************************************************************
-/**
- * class for ASN.1 DER UTF8String
- * @name KJUR.asn1.DERUTF8String
- * @class class for ASN.1 DER UTF8String
- * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})
- * @extends KJUR.asn1.DERAbstractString
- * @description
- * @see KJUR.asn1.DERAbstractString - superclass
- */
-KJUR.asn1.DERUTF8String = function(params) {
- KJUR.asn1.DERUTF8String.superclass.constructor.call(this, params);
- this.hT = "0c";
-};
-YAHOO.lang.extend(KJUR.asn1.DERUTF8String, KJUR.asn1.DERAbstractString);
-
-// ********************************************************************
-/**
- * class for ASN.1 DER NumericString
- * @name KJUR.asn1.DERNumericString
- * @class class for ASN.1 DER NumericString
- * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})
- * @extends KJUR.asn1.DERAbstractString
- * @description
- * @see KJUR.asn1.DERAbstractString - superclass
- */
-KJUR.asn1.DERNumericString = function(params) {
- KJUR.asn1.DERNumericString.superclass.constructor.call(this, params);
- this.hT = "12";
-};
-YAHOO.lang.extend(KJUR.asn1.DERNumericString, KJUR.asn1.DERAbstractString);
-
-// ********************************************************************
-/**
- * class for ASN.1 DER PrintableString
- * @name KJUR.asn1.DERPrintableString
- * @class class for ASN.1 DER PrintableString
- * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})
- * @extends KJUR.asn1.DERAbstractString
- * @description
- * @see KJUR.asn1.DERAbstractString - superclass
- */
-KJUR.asn1.DERPrintableString = function(params) {
- KJUR.asn1.DERPrintableString.superclass.constructor.call(this, params);
- this.hT = "13";
-};
-YAHOO.lang.extend(KJUR.asn1.DERPrintableString, KJUR.asn1.DERAbstractString);
-
-// ********************************************************************
-/**
- * class for ASN.1 DER TeletexString
- * @name KJUR.asn1.DERTeletexString
- * @class class for ASN.1 DER TeletexString
- * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})
- * @extends KJUR.asn1.DERAbstractString
- * @description
- * @see KJUR.asn1.DERAbstractString - superclass
- */
-KJUR.asn1.DERTeletexString = function(params) {
- KJUR.asn1.DERTeletexString.superclass.constructor.call(this, params);
- this.hT = "14";
-};
-YAHOO.lang.extend(KJUR.asn1.DERTeletexString, KJUR.asn1.DERAbstractString);
-
-// ********************************************************************
-/**
- * class for ASN.1 DER IA5String
- * @name KJUR.asn1.DERIA5String
- * @class class for ASN.1 DER IA5String
- * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})
- * @extends KJUR.asn1.DERAbstractString
- * @description
- * @see KJUR.asn1.DERAbstractString - superclass
- */
-KJUR.asn1.DERIA5String = function(params) {
- KJUR.asn1.DERIA5String.superclass.constructor.call(this, params);
- this.hT = "16";
-};
-YAHOO.lang.extend(KJUR.asn1.DERIA5String, KJUR.asn1.DERAbstractString);
-
-// ********************************************************************
-/**
- * class for ASN.1 DER UTCTime
- * @name KJUR.asn1.DERUTCTime
- * @class class for ASN.1 DER UTCTime
- * @param {Array} params associative array of parameters (ex. {'str': '130430235959Z'})
- * @extends KJUR.asn1.DERAbstractTime
- * @description
- *
- * As for argument 'params' for constructor, you can specify one of
- * following properties:
- *
- *
- * NOTE: 'params' can be omitted.
- * EXAMPLES
- * @example
- * var d1 = new KJUR.asn1.DERUTCTime();
- * d1.setString('130430125959Z');
- *
- * var d2 = new KJUR.asn1.DERUTCTime({'str': '130430125959Z'});
- * var d3 = new KJUR.asn1.DERUTCTime({'date': new Date(Date.UTC(2015, 0, 31, 0, 0, 0, 0))});
- * var d4 = new KJUR.asn1.DERUTCTime('130430125959Z');
- */
-KJUR.asn1.DERUTCTime = function(params) {
- KJUR.asn1.DERUTCTime.superclass.constructor.call(this, params);
- this.hT = "17";
-
- /**
- * set value by a Date object
- * @name setByDate
- * @memberOf KJUR.asn1.DERUTCTime
- * @function
- * @param {Date} dateObject Date object to set ASN.1 value(V)
- */
- this.setByDate = function(dateObject) {
- this.hTLV = null;
- this.isModified = true;
- this.date = dateObject;
- this.s = this.formatDate(this.date, 'utc');
- this.hV = stohex(this.s);
- };
-
- this.getFreshValueHex = function() {
- if (typeof this.date == "undefined" && typeof this.s == "undefined") {
- this.date = new Date();
- this.s = this.formatDate(this.date, 'utc');
- this.hV = stohex(this.s);
- }
- return this.hV;
- };
-
- if (typeof params != "undefined") {
- if (typeof params['str'] != "undefined") {
- this.setString(params['str']);
- } else if (typeof params == "string" && params.match(/^[0-9]{12}Z$/)) {
- this.setString(params);
- } else if (typeof params['hex'] != "undefined") {
- this.setStringHex(params['hex']);
- } else if (typeof params['date'] != "undefined") {
- this.setByDate(params['date']);
- }
- }
-};
-YAHOO.lang.extend(KJUR.asn1.DERUTCTime, KJUR.asn1.DERAbstractTime);
-
-// ********************************************************************
-/**
- * class for ASN.1 DER GeneralizedTime
- * @name KJUR.asn1.DERGeneralizedTime
- * @class class for ASN.1 DER GeneralizedTime
- * @param {Array} params associative array of parameters (ex. {'str': '20130430235959Z'})
- * @property {Boolean} withMillis flag to show milliseconds or not
- * @extends KJUR.asn1.DERAbstractTime
- * @description
- *
- * As for argument 'params' for constructor, you can specify one of
- * following properties:
- *
- *
- * NOTE1: 'params' can be omitted.
- * NOTE2: 'withMillis' property is supported from asn1 1.0.6.
- */
-KJUR.asn1.DERGeneralizedTime = function(params) {
- KJUR.asn1.DERGeneralizedTime.superclass.constructor.call(this, params);
- this.hT = "18";
- this.withMillis = false;
-
- /**
- * set value by a Date object
- * @name setByDate
- * @memberOf KJUR.asn1.DERGeneralizedTime
- * @function
- * @param {Date} dateObject Date object to set ASN.1 value(V)
- * @example
- * When you specify UTC time, use 'Date.UTC' method like this:
- * var o = new DERUTCTime();
- * var date = new Date(Date.UTC(2015, 0, 31, 23, 59, 59, 0)); #2015JAN31 23:59:59
- * o.setByDate(date);
- */
- this.setByDate = function(dateObject) {
- this.hTLV = null;
- this.isModified = true;
- this.date = dateObject;
- this.s = this.formatDate(this.date, 'gen', this.withMillis);
- this.hV = stohex(this.s);
- };
-
- this.getFreshValueHex = function() {
- if (typeof this.date == "undefined" && typeof this.s == "undefined") {
- this.date = new Date();
- this.s = this.formatDate(this.date, 'gen', this.withMillis);
- this.hV = stohex(this.s);
- }
- return this.hV;
- };
-
- if (typeof params != "undefined") {
- if (typeof params['str'] != "undefined") {
- this.setString(params['str']);
- } else if (typeof params == "string" && params.match(/^[0-9]{14}Z$/)) {
- this.setString(params);
- } else if (typeof params['hex'] != "undefined") {
- this.setStringHex(params['hex']);
- } else if (typeof params['date'] != "undefined") {
- this.setByDate(params['date']);
- } else if (params.millis === true) {
- this.withMillis = true;
- }
- }
-};
-YAHOO.lang.extend(KJUR.asn1.DERGeneralizedTime, KJUR.asn1.DERAbstractTime);
-
-// ********************************************************************
-/**
- * class for ASN.1 DER Sequence
- * @name KJUR.asn1.DERSequence
- * @class class for ASN.1 DER Sequence
- * @extends KJUR.asn1.DERAbstractStructured
- * @description
- *
- * As for argument 'params' for constructor, you can specify one of
- * following properties:
- *
- *
- * NOTE: 'params' can be omitted.
- */
-KJUR.asn1.DERSequence = function(params) {
- KJUR.asn1.DERSequence.superclass.constructor.call(this, params);
- this.hT = "30";
- this.getFreshValueHex = function() {
- var h = '';
- for (var i = 0; i < this.asn1Array.length; i++) {
- var asn1Obj = this.asn1Array[i];
- h += asn1Obj.getEncodedHex();
- }
- this.hV = h;
- return this.hV;
- };
-};
-YAHOO.lang.extend(KJUR.asn1.DERSequence, KJUR.asn1.DERAbstractStructured);
-
-// ********************************************************************
-/**
- * class for ASN.1 DER Set
- * @name KJUR.asn1.DERSet
- * @class class for ASN.1 DER Set
- * @extends KJUR.asn1.DERAbstractStructured
- * @description
- *
- * As for argument 'params' for constructor, you can specify one of
- * following properties:
- *
- *
- * NOTE1: 'params' can be omitted.
- * NOTE2: sortflag is supported since 1.0.5.
- */
-KJUR.asn1.DERSet = function(params) {
- KJUR.asn1.DERSet.superclass.constructor.call(this, params);
- this.hT = "31";
- this.sortFlag = true; // item shall be sorted only in ASN.1 DER
- this.getFreshValueHex = function() {
- var a = new Array();
- for (var i = 0; i < this.asn1Array.length; i++) {
- var asn1Obj = this.asn1Array[i];
- a.push(asn1Obj.getEncodedHex());
- }
- if (this.sortFlag == true) a.sort();
- this.hV = a.join('');
- return this.hV;
- };
-
- if (typeof params != "undefined") {
- if (typeof params.sortflag != "undefined" &&
- params.sortflag == false)
- this.sortFlag = false;
- }
-};
-YAHOO.lang.extend(KJUR.asn1.DERSet, KJUR.asn1.DERAbstractStructured);
-
-// ********************************************************************
-/**
- * class for ASN.1 DER TaggedObject
- * @name KJUR.asn1.DERTaggedObject
- * @class class for ASN.1 DER TaggedObject
- * @extends KJUR.asn1.ASN1Object
- * @description
- *
- * Parameter 'tagNoNex' is ASN.1 tag(T) value for this object.
- * For example, if you find '[1]' tag in a ASN.1 dump,
- * 'tagNoHex' will be 'a1'.
- *
- * As for optional argument 'params' for constructor, you can specify *ANY* of
- * following properties:
- *
- *
- * @example
- * d1 = new KJUR.asn1.DERUTF8String({'str':'a'});
- * d2 = new KJUR.asn1.DERTaggedObject({'obj': d1});
- * hex = d2.getEncodedHex();
- */
-KJUR.asn1.DERTaggedObject = function(params) {
- KJUR.asn1.DERTaggedObject.superclass.constructor.call(this);
- this.hT = "a0";
- this.hV = '';
- this.isExplicit = true;
- this.asn1Object = null;
-
- /**
- * set value by an ASN1Object
- * @name setString
- * @memberOf KJUR.asn1.DERTaggedObject
- * @function
- * @param {Boolean} isExplicitFlag flag for explicit/implicit tag
- * @param {Integer} tagNoHex hexadecimal string of ASN.1 tag
- * @param {ASN1Object} asn1Object ASN.1 to encapsulate
- */
- this.setASN1Object = function(isExplicitFlag, tagNoHex, asn1Object) {
- this.hT = tagNoHex;
- this.isExplicit = isExplicitFlag;
- this.asn1Object = asn1Object;
- if (this.isExplicit) {
- this.hV = this.asn1Object.getEncodedHex();
- this.hTLV = null;
- this.isModified = true;
- } else {
- this.hV = null;
- this.hTLV = asn1Object.getEncodedHex();
- this.hTLV = this.hTLV.replace(/^../, tagNoHex);
- this.isModified = false;
- }
- };
-
- this.getFreshValueHex = function() {
- return this.hV;
- };
-
- if (typeof params != "undefined") {
- if (typeof params['tag'] != "undefined") {
- this.hT = params['tag'];
- }
- if (typeof params['explicit'] != "undefined") {
- this.isExplicit = params['explicit'];
- }
- if (typeof params['obj'] != "undefined") {
- this.asn1Object = params['obj'];
- this.setASN1Object(this.isExplicit, this.hT, this.asn1Object);
- }
- }
-};
-YAHOO.lang.extend(KJUR.asn1.DERTaggedObject, KJUR.asn1.ASN1Object);
diff --git a/src/js/lib/jsrasign/asn1hex-1.1.js b/src/js/lib/jsrasign/asn1hex-1.1.js
deleted file mode 100755
index 33c9af16..00000000
--- a/src/js/lib/jsrasign/asn1hex-1.1.js
+++ /dev/null
@@ -1,566 +0,0 @@
-/*! asn1hex-1.1.6.js (c) 2012-2015 Kenji Urushima | kjur.github.com/jsrsasign/license
- */
-/*
- * asn1hex.js - Hexadecimal represented ASN.1 string library
- *
- * Copyright (c) 2010-2015 Kenji Urushima (kenji.urushima@gmail.com)
- *
- * This software is licensed under the terms of the MIT License.
- * http://kjur.github.com/jsrsasign/license/
- *
- * The above copyright and license notice shall be
- * included in all copies or substantial portions of the Software.
- */
-
-/**
- * @fileOverview
- * @name asn1hex-1.1.js
- * @author Kenji Urushima kenji.urushima@gmail.com
- * @version asn1hex 1.1.6 (2015-Jun-11)
- * @license MIT License
- */
-
-/*
- * MEMO:
- * f('3082025b02...', 2) ... 82025b ... 3bytes
- * f('020100', 2) ... 01 ... 1byte
- * f('0203001...', 2) ... 03 ... 1byte
- * f('02818003...', 2) ... 8180 ... 2bytes
- * f('3080....0000', 2) ... 80 ... -1
- *
- * Requirements:
- * - ASN.1 type octet length MUST be 1.
- * (i.e. ASN.1 primitives like SET, SEQUENCE, INTEGER, OCTETSTRING ...)
- */
-
-/**
- * ASN.1 DER encoded hexadecimal string utility class
- * @name ASN1HEX
- * @class ASN.1 DER encoded hexadecimal string utility class
- * @since jsrsasign 1.1
- */
-var ASN1HEX = new function() {
- /**
- * get byte length for ASN.1 L(length) bytes
- * @name getByteLengthOfL_AtObj
- * @memberOf ASN1HEX
- * @function
- * @param {String} s hexadecimal string of ASN.1 DER encoded data
- * @param {Number} pos string index
- * @return byte length for ASN.1 L(length) bytes
- */
- this.getByteLengthOfL_AtObj = function(s, pos) {
- if (s.substring(pos + 2, pos + 3) != '8') return 1;
- var i = parseInt(s.substring(pos + 3, pos + 4));
- if (i == 0) return -1; // length octet '80' indefinite length
- if (0 < i && i < 10) return i + 1; // including '8?' octet;
- return -2; // malformed format
- };
-
- /**
- * get hexadecimal string for ASN.1 L(length) bytes
- * @name getHexOfL_AtObj
- * @memberOf ASN1HEX
- * @function
- * @param {String} s hexadecimal string of ASN.1 DER encoded data
- * @param {Number} pos string index
- * @return {String} hexadecimal string for ASN.1 L(length) bytes
- */
- this.getHexOfL_AtObj = function(s, pos) {
- var len = this.getByteLengthOfL_AtObj(s, pos);
- if (len < 1) return '';
- return s.substring(pos + 2, pos + 2 + len * 2);
- };
-
- // getting ASN.1 length value at the position 'idx' of
- // hexa decimal string 's'.
- //
- // f('3082025b02...', 0) ... 82025b ... ???
- // f('020100', 0) ... 01 ... 1
- // f('0203001...', 0) ... 03 ... 3
- // f('02818003...', 0) ... 8180 ... 128
- /**
- * get integer value of ASN.1 length for ASN.1 data
- * @name getIntOfL_AtObj
- * @memberOf ASN1HEX
- * @function
- * @param {String} s hexadecimal string of ASN.1 DER encoded data
- * @param {Number} pos string index
- * @return ASN.1 L(length) integer value
- */
- this.getIntOfL_AtObj = function(s, pos) {
- var hLength = this.getHexOfL_AtObj(s, pos);
- if (hLength == '') return -1;
- var bi;
- if (parseInt(hLength.substring(0, 1)) < 8) {
- bi = new BigInteger(hLength, 16);
- } else {
- bi = new BigInteger(hLength.substring(2), 16);
- }
- return bi.intValue();
- };
-
- /**
- * get ASN.1 value starting string position for ASN.1 object refered by index 'idx'.
- * @name getStartPosOfV_AtObj
- * @memberOf ASN1HEX
- * @function
- * @param {String} s hexadecimal string of ASN.1 DER encoded data
- * @param {Number} pos string index
- */
- this.getStartPosOfV_AtObj = function(s, pos) {
- var l_len = this.getByteLengthOfL_AtObj(s, pos);
- if (l_len < 0) return l_len;
- return pos + (l_len + 1) * 2;
- };
-
- /**
- * get hexadecimal string of ASN.1 V(value)
- * @name getHexOfV_AtObj
- * @memberOf ASN1HEX
- * @function
- * @param {String} s hexadecimal string of ASN.1 DER encoded data
- * @param {Number} pos string index
- * @return {String} hexadecimal string of ASN.1 value.
- */
- this.getHexOfV_AtObj = function(s, pos) {
- var pos1 = this.getStartPosOfV_AtObj(s, pos);
- var len = this.getIntOfL_AtObj(s, pos);
- return s.substring(pos1, pos1 + len * 2);
- };
-
- /**
- * get hexadecimal string of ASN.1 TLV at
- * @name getHexOfTLV_AtObj
- * @memberOf ASN1HEX
- * @function
- * @param {String} s hexadecimal string of ASN.1 DER encoded data
- * @param {Number} pos string index
- * @return {String} hexadecimal string of ASN.1 TLV.
- * @since 1.1
- */
- this.getHexOfTLV_AtObj = function(s, pos) {
- var hT = s.substr(pos, 2);
- var hL = this.getHexOfL_AtObj(s, pos);
- var hV = this.getHexOfV_AtObj(s, pos);
- return hT + hL + hV;
- };
-
- /**
- * get next sibling starting index for ASN.1 object string
- * @name getPosOfNextSibling_AtObj
- * @memberOf ASN1HEX
- * @function
- * @param {String} s hexadecimal string of ASN.1 DER encoded data
- * @param {Number} pos string index
- * @return next sibling starting index for ASN.1 object string
- */
- this.getPosOfNextSibling_AtObj = function(s, pos) {
- var pos1 = this.getStartPosOfV_AtObj(s, pos);
- var len = this.getIntOfL_AtObj(s, pos);
- return pos1 + len * 2;
- };
-
- /**
- * get array of indexes of child ASN.1 objects
- * @name getPosArrayOfChildren_AtObj
- * @memberOf ASN1HEX
- * @function
- * @param {String} s hexadecimal string of ASN.1 DER encoded data
- * @param {Number} start string index of ASN.1 object
- * @return {Array of Number} array of indexes for childen of ASN.1 objects
- */
- this.getPosArrayOfChildren_AtObj = function(h, pos) {
- var a = new Array();
- var p0 = this.getStartPosOfV_AtObj(h, pos);
- a.push(p0);
-
- var len = this.getIntOfL_AtObj(h, pos);
- var p = p0;
- var k = 0;
- while (1) {
- var pNext = this.getPosOfNextSibling_AtObj(h, p);
- if (pNext == null || (pNext - p0 >= (len * 2))) break;
- if (k >= 200) break;
-
- a.push(pNext);
- p = pNext;
-
- k++;
- }
-
- return a;
- };
-
- /**
- * get string index of nth child object of ASN.1 object refered by h, idx
- * @name getNthChildIndex_AtObj
- * @memberOf ASN1HEX
- * @function
- * @param {String} h hexadecimal string of ASN.1 DER encoded data
- * @param {Number} idx start string index of ASN.1 object
- * @param {Number} nth for child
- * @return {Number} string index of nth child.
- * @since 1.1
- */
- this.getNthChildIndex_AtObj = function(h, idx, nth) {
- var a = this.getPosArrayOfChildren_AtObj(h, idx);
- return a[nth];
- };
-
- // ========== decendant methods ==============================
- /**
- * get string index of nth child object of ASN.1 object refered by h, idx
- * @name getDecendantIndexByNthList
- * @memberOf ASN1HEX
- * @function
- * @param {String} h hexadecimal string of ASN.1 DER encoded data
- * @param {Number} currentIndex start string index of ASN.1 object
- * @param {Array of Number} nthList array list of nth
- * @return {Number} string index refered by nthList
- * @since 1.1
- * @example
- * The "nthList" is a index list of structured ASN.1 object
- * reference. Here is a sample structure and "nthList"s which
- * refers each objects.
- *
- * SQUENCE -
- * SEQUENCE - [0]
- * IA5STRING 000 - [0, 0]
- * UTF8STRING 001 - [0, 1]
- * SET - [1]
- * IA5STRING 010 - [1, 0]
- * UTF8STRING 011 - [1, 1]
- */
- this.getDecendantIndexByNthList = function(h, currentIndex, nthList) {
- if (nthList.length == 0) {
- return currentIndex;
- }
- var firstNth = nthList.shift();
- var a = this.getPosArrayOfChildren_AtObj(h, currentIndex);
- return this.getDecendantIndexByNthList(h, a[firstNth], nthList);
- };
-
- /**
- * get hexadecimal string of ASN.1 TLV refered by current index and nth index list.
- * @name getDecendantHexTLVByNthList
- * @memberOf ASN1HEX
- * @function
- * @param {String} h hexadecimal string of ASN.1 DER encoded data
- * @param {Number} currentIndex start string index of ASN.1 object
- * @param {Array of Number} nthList array list of nth
- * @return {Number} hexadecimal string of ASN.1 TLV refered by nthList
- * @since 1.1
- */
- this.getDecendantHexTLVByNthList = function(h, currentIndex, nthList) {
- var idx = this.getDecendantIndexByNthList(h, currentIndex, nthList);
- return this.getHexOfTLV_AtObj(h, idx);
- };
-
- /**
- * get hexadecimal string of ASN.1 V refered by current index and nth index list.
- * @name getDecendantHexVByNthList
- * @memberOf ASN1HEX
- * @function
- * @param {String} h hexadecimal string of ASN.1 DER encoded data
- * @param {Number} currentIndex start string index of ASN.1 object
- * @param {Array of Number} nthList array list of nth
- * @return {Number} hexadecimal string of ASN.1 V refered by nthList
- * @since 1.1
- */
- this.getDecendantHexVByNthList = function(h, currentIndex, nthList) {
- var idx = this.getDecendantIndexByNthList(h, currentIndex, nthList);
- return this.getHexOfV_AtObj(h, idx);
- };
-};
-
-/**
- * @since asn1hex 1.1.4
- */
-ASN1HEX.getVbyList = function(h, currentIndex, nthList, checkingTag) {
- var idx = this.getDecendantIndexByNthList(h, currentIndex, nthList);
- if (idx === undefined) {
- throw "can't find nthList object";
- }
- if (checkingTag !== undefined) {
- if (h.substr(idx, 2) != checkingTag) {
- throw "checking tag doesn't match: " +
- h.substr(idx,2) + "!=" + checkingTag;
- }
- }
- return this.getHexOfV_AtObj(h, idx);
-};
-
-/**
- * get OID string from hexadecimal encoded value
- * @name hextooidstr
- * @memberOf ASN1HEX
- * @function
- * @param {String} hex hexadecmal string of ASN.1 DER encoded OID value
- * @return {String} OID string (ex. '1.2.3.4.567')
- * @since asn1hex 1.1.5
- */
-ASN1HEX.hextooidstr = function(hex) {
- var zeroPadding = function(s, len) {
- if (s.length >= len) return s;
- return new Array(len - s.length + 1).join('0') + s;
- };
-
- var a = [];
-
- // a[0], a[1]
- var hex0 = hex.substr(0, 2);
- var i0 = parseInt(hex0, 16);
- a[0] = new String(Math.floor(i0 / 40));
- a[1] = new String(i0 % 40);
-
- // a[2]..a[n]
- var hex1 = hex.substr(2);
- var b = [];
- for (var i = 0; i < hex1.length / 2; i++) {
- b.push(parseInt(hex1.substr(i * 2, 2), 16));
- }
- var c = [];
- var cbin = "";
- for (var i = 0; i < b.length; i++) {
- if (b[i] & 0x80) {
- cbin = cbin + zeroPadding((b[i] & 0x7f).toString(2), 7);
- } else {
- cbin = cbin + zeroPadding((b[i] & 0x7f).toString(2), 7);
- c.push(new String(parseInt(cbin, 2)));
- cbin = "";
- }
- }
-
- var s = a.join(".");
- if (c.length > 0) s = s + "." + c.join(".");
- return s;
-};
-
-/**
- * get string of simple ASN.1 dump from hexadecimal ASN.1 data
- * @name dump
- * @memberOf ASN1HEX
- * @function
- * @param {String} hex hexadecmal string of ASN.1 data
- * @param {Array} associative array of flags for dump (OPTION)
- * @param {Number} idx string index for starting dump (OPTION)
- * @param {String} indent string (OPTION)
- * @return {String} string of simple ASN.1 dump
- * @since jsrsasign 4.8.3 asn1hex 1.1.6
- * @description
- * This method will get an ASN.1 dump from
- * hexadecmal string of ASN.1 DER encoded data.
- * Here are features:
- *
- *
- * @example
- * // ASN.1 INTEGER
- * ASN1HEX.dump('0203012345')
- * ↓
- * INTEGER 012345
- * // ASN.1 Object Identifier
- * ASN1HEX.dump('06052b0e03021a')
- * ↓
- * ObjectIdentifier sha1 (1 3 14 3 2 26)
- * // ASN.1 SEQUENCE
- * ASN1HEX.dump('3006020101020102')
- * ↓
- * SEQUENCE
- * INTEGER 01
- * INTEGER 02
- * // ASN.1 DUMP FOR X.509 CERTIFICATE
- * ASN1HEX.dump(X509.pemToHex(certPEM))
- * ↓
- * SEQUENCE
- * SEQUENCE
- * [0]
- * INTEGER 02
- * INTEGER 0c009310d206dbe337553580118ddc87
- * SEQUENCE
- * ObjectIdentifier SHA256withRSA (1 2 840 113549 1 1 11)
- * NULL
- * SEQUENCE
- * SET
- * SEQUENCE
- * ObjectIdentifier countryName (2 5 4 6)
- * PrintableString 'US'
- * :
- */
-ASN1HEX.dump = function(hex, flags, idx, indent) {
- var _skipLongHex = function(hex, limitNumOctet) {
- if (hex.length <= limitNumOctet * 2) {
- return hex;
- } else {
- var s = hex.substr(0, limitNumOctet) +
- "..(total " + hex.length / 2 + "bytes).." +
- hex.substr(hex.length - limitNumOctet, limitNumOctet);
- return s;
- };
- };
-
- if (flags === undefined) flags = { "ommit_long_octet": 32 };
- if (idx === undefined) idx = 0;
- if (indent === undefined) indent = "";
- var skipLongHex = flags.ommit_long_octet;
-
- if (hex.substr(idx, 2) == "01") {
- var v = ASN1HEX.getHexOfV_AtObj(hex, idx);
- if (v == "00") {
- return indent + "BOOLEAN FALSE\n";
- } else {
- return indent + "BOOLEAN TRUE\n";
- }
- }
- if (hex.substr(idx, 2) == "02") {
- var v = ASN1HEX.getHexOfV_AtObj(hex, idx);
- return indent + "INTEGER " + _skipLongHex(v, skipLongHex) + "\n";
- }
- if (hex.substr(idx, 2) == "03") {
- var v = ASN1HEX.getHexOfV_AtObj(hex, idx);
- return indent + "BITSTRING " + _skipLongHex(v, skipLongHex) + "\n";
- }
- if (hex.substr(idx, 2) == "04") {
- var v = ASN1HEX.getHexOfV_AtObj(hex, idx);
- if (ASN1HEX.isASN1HEX(v)) {
- var s = indent + "OCTETSTRING, encapsulates\n";
- s = s + ASN1HEX.dump(v, flags, 0, indent + " ");
- return s;
- } else {
- return indent + "OCTETSTRING " + _skipLongHex(v, skipLongHex) + "\n";
- }
- }
- if (hex.substr(idx, 2) == "05") {
- return indent + "NULL\n";
- }
- if (hex.substr(idx, 2) == "06") {
- var hV = ASN1HEX.getHexOfV_AtObj(hex, idx);
- var oidDot = KJUR.asn1.ASN1Util.oidHexToInt(hV);
- var oidName = KJUR.asn1.x509.OID.oid2name(oidDot);
- var oidSpc = oidDot.replace(/\./g, ' ');
- if (oidName != '') {
- return indent + "ObjectIdentifier " + oidName + " (" + oidSpc + ")\n";
- } else {
- return indent + "ObjectIdentifier (" + oidSpc + ")\n";
- }
- }
- if (hex.substr(idx, 2) == "0c") {
- return indent + "UTF8String '" + hextoutf8(ASN1HEX.getHexOfV_AtObj(hex, idx)) + "'\n";
- }
- if (hex.substr(idx, 2) == "13") {
- return indent + "PrintableString '" + hextoutf8(ASN1HEX.getHexOfV_AtObj(hex, idx)) + "'\n";
- }
- if (hex.substr(idx, 2) == "14") {
- return indent + "TeletexString '" + hextoutf8(ASN1HEX.getHexOfV_AtObj(hex, idx)) + "'\n";
- }
- if (hex.substr(idx, 2) == "16") {
- return indent + "IA5String '" + hextoutf8(ASN1HEX.getHexOfV_AtObj(hex, idx)) + "'\n";
- }
- if (hex.substr(idx, 2) == "17") {
- return indent + "UTCTime " + hextoutf8(ASN1HEX.getHexOfV_AtObj(hex, idx)) + "\n";
- }
- if (hex.substr(idx, 2) == "18") {
- return indent + "GeneralizedTime " + hextoutf8(ASN1HEX.getHexOfV_AtObj(hex, idx)) + "\n";
- }
- if (hex.substr(idx, 2) == "30") {
- if (hex.substr(idx, 4) == "3000") {
- return indent + "SEQUENCE {}\n";
- }
-
- var s = indent + "SEQUENCE\n";
- var aIdx = ASN1HEX.getPosArrayOfChildren_AtObj(hex, idx);
-
- var flagsTemp = flags;
-
- if ((aIdx.length == 2 || aIdx.length == 3) &&
- hex.substr(aIdx[0], 2) == "06" &&
- hex.substr(aIdx[aIdx.length - 1], 2) == "04") { // supposed X.509v3 extension
- var oidHex = ASN1HEX.getHexOfV_AtObj(hex, aIdx[0]);
- var oidDot = KJUR.asn1.ASN1Util.oidHexToInt(oidHex);
- var oidName = KJUR.asn1.x509.OID.oid2name(oidDot);
-
- var flagsClone = JSON.parse(JSON.stringify(flags));
- flagsClone.x509ExtName = oidName;
- flagsTemp = flagsClone;
- }
-
- for (var i = 0; i < aIdx.length; i++) {
- s = s + ASN1HEX.dump(hex, flagsTemp, aIdx[i], indent + " ");
- }
- return s;
- }
- if (hex.substr(idx, 2) == "31") {
- var s = indent + "SET\n";
- var aIdx = ASN1HEX.getPosArrayOfChildren_AtObj(hex, idx);
- for (var i = 0; i < aIdx.length; i++) {
- s = s + ASN1HEX.dump(hex, flags, aIdx[i], indent + " ");
- }
- return s;
- }
- var tag = parseInt(hex.substr(idx, 2), 16);
- if ((tag & 128) != 0) { // context specific
- var tagNumber = tag & 31;
- if ((tag & 32) != 0) { // structured tag
- var s = indent + "[" + tagNumber + "]\n";
- var aIdx = ASN1HEX.getPosArrayOfChildren_AtObj(hex, idx);
- for (var i = 0; i < aIdx.length; i++) {
- s = s + ASN1HEX.dump(hex, flags, aIdx[i], indent + " ");
- }
- return s;
- } else { // primitive tag
- var v = ASN1HEX.getHexOfV_AtObj(hex, idx);
- if (v.substr(0, 8) == "68747470") { // http
- v = hextoutf8(v);
- }
- if (flags.x509ExtName === "subjectAltName" &&
- tagNumber == 2) {
- v = hextoutf8(v);
- }
-
- var s = indent + "[" + tagNumber + "] " + v + "\n";
- return s;
- }
- }
- return indent + "UNKNOWN(" + hex.substr(idx, 2) + ") " + ASN1HEX.getHexOfV_AtObj(hex, idx) + "\n";
-};
-
-/**
- * check wheather the string is ASN.1 hexadecimal string or not
- * @name isASN1HEX
- * @memberOf ASN1HEX
- * @function
- * @param {String} hex string to check whether it is hexadecmal string for ASN.1 DER or not
- * @return {Boolean} true if it is hexadecimal string of ASN.1 data otherwise false
- * @since jsrsasign 4.8.3 asn1hex 1.1.6
- * @description
- * This method checks wheather the argument 'hex' is a hexadecimal string of
- * ASN.1 data or not.
- * @example
- * ASN1HEX.isASN1HEX('0203012345') → true // PROPER ASN.1 INTEGER
- * ASN1HEX.isASN1HEX('0203012345ff') → false // TOO LONG VALUE
- * ASN1HEX.isASN1HEX('02030123') → false // TOO SHORT VALUE
- * ASN1HEX.isASN1HEX('fa3bcd') → false // WRONG FOR ASN.1
- */
-ASN1HEX.isASN1HEX = function(hex) {
- if (hex.length % 2 == 1) return false;
-
- var intL = ASN1HEX.getIntOfL_AtObj(hex, 0);
- var tV = hex.substr(0, 2);
- var lV = ASN1HEX.getHexOfL_AtObj(hex, 0);
- var hVLength = hex.length - tV.length - lV.length;
- if (hVLength == intL * 2) return true;
-
- return false;
-};
diff --git a/src/js/lib/jsrasign/asn1x509-1.0.js b/src/js/lib/jsrasign/asn1x509-1.0.js
deleted file mode 100755
index 0d5cee2b..00000000
--- a/src/js/lib/jsrasign/asn1x509-1.0.js
+++ /dev/null
@@ -1,2102 +0,0 @@
-/*! asn1x509-1.0.12.js (c) 2013-2015 Kenji Urushima | kjur.github.com/jsrsasign/license
- */
-/*
- * asn1x509.js - ASN.1 DER encoder classes for X.509 certificate
- *
- * Copyright (c) 2013-2015 Kenji Urushima (kenji.urushima@gmail.com)
- *
- * This software is licensed under the terms of the MIT License.
- * http://kjur.github.com/jsrsasign/license
- *
- * The above copyright and license notice shall be
- * included in all copies or substantial portions of the Software.
- */
-
-/**
- * @fileOverview
- * @name asn1x509-1.0.js
- * @author Kenji Urushima kenji.urushima@gmail.com
- * @version 1.0.12 (2015-Jun-01)
- * @since jsrsasign 2.1
- * @license MIT License
- */
-
-/**
- * kjur's class library name space
- * // already documented in asn1-1.0.js
- * @name KJUR
- * @namespace kjur's class library name space
- */
-if (typeof KJUR == "undefined" || !KJUR) KJUR = {};
-
-/**
- * kjur's ASN.1 class library name space
- * // already documented in asn1-1.0.js
- * @name KJUR.asn1
- * @namespace
- */
-if (typeof KJUR.asn1 == "undefined" || !KJUR.asn1) KJUR.asn1 = {};
-
-/**
- * kjur's ASN.1 class for X.509 certificate library name space
- *
- *
- * FEATURES
- *
- *
- * PROVIDED CLASSES
- *
- *
- * SUPPORTED EXTENSIONS
- *
- *
- * NOTE: Please ignore method summary and document of this namespace. This caused by a bug of jsdoc2.
- * @name KJUR.asn1.x509
- * @namespace
- */
-if (typeof KJUR.asn1.x509 == "undefined" || !KJUR.asn1.x509) KJUR.asn1.x509 = {};
-
-// === BEGIN Certificate ===================================================
-
-/**
- * X.509 Certificate class to sign and generate hex encoded certificate
- * @name KJUR.asn1.x509.Certificate
- * @class X.509 Certificate class to sign and generate hex encoded certificate
- * @param {Array} params associative array of parameters (ex. {'tbscertobj': obj, 'prvkeyobj': key})
- * @extends KJUR.asn1.ASN1Object
- * @description
- *
- * As for argument 'params' for constructor, you can specify one of
- * following properties:
- *
- *
- * NOTE1: 'params' can be omitted.
- * NOTE2: DSA/ECDSA is also supported for CA signging key from asn1x509 1.0.6.
- * @example
- * var caKey = KEYUTIL.getKey(caKeyPEM); // CA's private key
- * var cert = new KJUR.asn1x509.Certificate({'tbscertobj': tbs, 'prvkeyobj': caKey});
- * cert.sign(); // issue certificate by CA's private key
- * var certPEM = cert.getPEMString();
- *
- * // Certificate ::= SEQUENCE {
- * // tbsCertificate TBSCertificate,
- * // signatureAlgorithm AlgorithmIdentifier,
- * // signature BIT STRING }
- */
-KJUR.asn1.x509.Certificate = function(params) {
- KJUR.asn1.x509.Certificate.superclass.constructor.call(this);
- var asn1TBSCert = null;
- var asn1SignatureAlg = null;
- var asn1Sig = null;
- var hexSig = null;
- var prvKey = null;
- var rsaPrvKey = null; // DEPRECATED
-
-
- /**
- * set PKCS#5 encrypted RSA PEM private key as CA key
- * @name setRsaPrvKeyByPEMandPass
- * @memberOf KJUR.asn1.x509.Certificate
- * @function
- * @param {String} rsaPEM string of PKCS#5 encrypted RSA PEM private key
- * @param {String} passPEM passcode string to decrypt private key
- * @since 1.0.1
- * @description
- *
- * EXAMPLES
- * @example
- * var cert = new KJUR.asn1.x509.Certificate({'tbscertobj': tbs});
- * cert.setRsaPrvKeyByPEMandPass("-----BEGIN RSA PRIVATE..(snip)", "password");
- */
- this.setRsaPrvKeyByPEMandPass = function(rsaPEM, passPEM) {
- var caKeyHex = PKCS5PKEY.getDecryptedKeyHex(rsaPEM, passPEM);
- var caKey = new RSAKey();
- caKey.readPrivateKeyFromASN1HexString(caKeyHex);
- this.prvKey = caKey;
- };
-
- /**
- * sign TBSCertificate and set signature value internally
- * @name sign
- * @memberOf KJUR.asn1.x509.Certificate
- * @function
- * @description
- * @example
- * var cert = new KJUR.asn1.x509.Certificate({'tbscertobj': tbs, 'rsaprvkey': prvKey});
- * cert.sign();
- */
- this.sign = function() {
- this.asn1SignatureAlg = this.asn1TBSCert.asn1SignatureAlg;
-
- sig = new KJUR.crypto.Signature({'alg': 'SHA1withRSA'});
- sig.init(this.prvKey);
- sig.updateHex(this.asn1TBSCert.getEncodedHex());
- this.hexSig = sig.sign();
-
- this.asn1Sig = new KJUR.asn1.DERBitString({'hex': '00' + this.hexSig});
-
- var seq = new KJUR.asn1.DERSequence({'array': [this.asn1TBSCert,
- this.asn1SignatureAlg,
- this.asn1Sig]});
- this.hTLV = seq.getEncodedHex();
- this.isModified = false;
- };
-
- /**
- * set signature value internally by hex string
- * @name setSignatureHex
- * @memberOf KJUR.asn1.x509.Certificate
- * @function
- * @since asn1x509 1.0.8
- * @description
- * @example
- * var cert = new KJUR.asn1.x509.Certificate({'tbscertobj': tbs});
- * cert.setSignatureHex('01020304');
- */
- this.setSignatureHex = function(sigHex) {
- this.asn1SignatureAlg = this.asn1TBSCert.asn1SignatureAlg;
- this.hexSig = sigHex;
- this.asn1Sig = new KJUR.asn1.DERBitString({'hex': '00' + this.hexSig});
-
- var seq = new KJUR.asn1.DERSequence({'array': [this.asn1TBSCert,
- this.asn1SignatureAlg,
- this.asn1Sig]});
- this.hTLV = seq.getEncodedHex();
- this.isModified = false;
- };
-
- this.getEncodedHex = function() {
- if (this.isModified == false && this.hTLV != null) return this.hTLV;
- throw "not signed yet";
- };
-
- /**
- * get PEM formatted certificate string after signed
- * @name getPEMString
- * @memberOf KJUR.asn1.x509.Certificate
- * @function
- * @return PEM formatted string of certificate
- * @description
- * @example
- * var cert = new KJUR.asn1.x509.Certificate({'tbscertobj': tbs, 'rsaprvkey': prvKey});
- * cert.sign();
- * var sPEM = cert.getPEMString();
- */
- this.getPEMString = function() {
- var hCert = this.getEncodedHex();
- var wCert = CryptoJS.enc.Hex.parse(hCert);
- var b64Cert = CryptoJS.enc.Base64.stringify(wCert);
- var pemBody = b64Cert.replace(/(.{64})/g, "$1\r\n");
- return "-----BEGIN CERTIFICATE-----\r\n" + pemBody + "\r\n-----END CERTIFICATE-----\r\n";
- };
-
- if (typeof params != "undefined") {
- if (typeof params['tbscertobj'] != "undefined") {
- this.asn1TBSCert = params['tbscertobj'];
- }
- if (typeof params['prvkeyobj'] != "undefined") {
- this.prvKey = params['prvkeyobj'];
- } else if (typeof params['rsaprvkey'] != "undefined") {
- this.prvKey = params['rsaprvkey'];
- } else if ((typeof params['rsaprvpem'] != "undefined") &&
- (typeof params['rsaprvpas'] != "undefined")) {
- this.setRsaPrvKeyByPEMandPass(params['rsaprvpem'], params['rsaprvpas']);
- }
- }
-};
-YAHOO.lang.extend(KJUR.asn1.x509.Certificate, KJUR.asn1.ASN1Object);
-
-/**
- * ASN.1 TBSCertificate structure class
- * @name KJUR.asn1.x509.TBSCertificate
- * @class ASN.1 TBSCertificate structure class
- * @param {Array} params associative array of parameters (ex. {})
- * @extends KJUR.asn1.ASN1Object
- * @description
- *
- * EXAMPLE
- * @example
- * var o = new KJUR.asn1.x509.TBSCertificate();
- * o.setSerialNumberByParam({'int': 4});
- * o.setSignatureAlgByParam({'name': 'SHA1withRSA'});
- * o.setIssuerByParam({'str': '/C=US/O=a'});
- * o.setNotBeforeByParam({'str': '130504235959Z'});
- * o.setNotAfterByParam({'str': '140504235959Z'});
- * o.setSubjectByParam({'str': '/C=US/CN=b'});
- * o.setSubjectPublicKeyByParam({'rsakey': rsaKey});
- * o.appendExtension(new KJUR.asn1.x509.BasicConstraints({'cA':true}));
- * o.appendExtension(new KJUR.asn1.x509.KeyUsage({'bin':'11'}));
- */
-KJUR.asn1.x509.TBSCertificate = function(params) {
- KJUR.asn1.x509.TBSCertificate.superclass.constructor.call(this);
-
- this._initialize = function() {
- this.asn1Array = new Array();
-
- this.asn1Version =
- new KJUR.asn1.DERTaggedObject({'obj': new KJUR.asn1.DERInteger({'int': 2})});
- this.asn1SerialNumber = null;
- this.asn1SignatureAlg = null;
- this.asn1Issuer = null;
- this.asn1NotBefore = null;
- this.asn1NotAfter = null;
- this.asn1Subject = null;
- this.asn1SubjPKey = null;
- this.extensionsArray = new Array();
- };
-
- /**
- * set serial number field by parameter
- * @name setSerialNumberByParam
- * @memberOf KJUR.asn1.x509.TBSCertificate
- * @function
- * @param {Array} intParam DERInteger param
- * @description
- * @example
- * tbsc.setSerialNumberByParam({'int': 3});
- */
- this.setSerialNumberByParam = function(intParam) {
- this.asn1SerialNumber = new KJUR.asn1.DERInteger(intParam);
- };
-
- /**
- * set signature algorithm field by parameter
- * @name setSignatureAlgByParam
- * @memberOf KJUR.asn1.x509.TBSCertificate
- * @function
- * @param {Array} algIdParam AlgorithmIdentifier parameter
- * @description
- * @example
- * tbsc.setSignatureAlgByParam({'name': 'SHA1withRSA'});
- */
- this.setSignatureAlgByParam = function(algIdParam) {
- this.asn1SignatureAlg = new KJUR.asn1.x509.AlgorithmIdentifier(algIdParam);
- };
-
- /**
- * set issuer name field by parameter
- * @name setIssuerByParam
- * @memberOf KJUR.asn1.x509.TBSCertificate
- * @function
- * @param {Array} x500NameParam X500Name parameter
- * @description
- * @example
- * tbsc.setIssuerParam({'str': '/C=US/CN=b'});
- * @see KJUR.asn1.x509.X500Name
- */
- this.setIssuerByParam = function(x500NameParam) {
- this.asn1Issuer = new KJUR.asn1.x509.X500Name(x500NameParam);
- };
-
- /**
- * set notBefore field by parameter
- * @name setNotBeforeByParam
- * @memberOf KJUR.asn1.x509.TBSCertificate
- * @function
- * @param {Array} timeParam Time parameter
- * @description
- * @example
- * tbsc.setNotBeforeByParam({'str': '130508235959Z'});
- * @see KJUR.asn1.x509.Time
- */
- this.setNotBeforeByParam = function(timeParam) {
- this.asn1NotBefore = new KJUR.asn1.x509.Time(timeParam);
- };
-
- /**
- * set notAfter field by parameter
- * @name setNotAfterByParam
- * @memberOf KJUR.asn1.x509.TBSCertificate
- * @function
- * @param {Array} timeParam Time parameter
- * @description
- * @example
- * tbsc.setNotAfterByParam({'str': '130508235959Z'});
- * @see KJUR.asn1.x509.Time
- */
- this.setNotAfterByParam = function(timeParam) {
- this.asn1NotAfter = new KJUR.asn1.x509.Time(timeParam);
- };
-
- /**
- * set subject name field by parameter
- * @name setSubjectByParam
- * @memberOf KJUR.asn1.x509.TBSCertificate
- * @function
- * @param {Array} x500NameParam X500Name parameter
- * @description
- * @example
- * tbsc.setSubjectParam({'str': '/C=US/CN=b'});
- * @see KJUR.asn1.x509.X500Name
- */
- this.setSubjectByParam = function(x500NameParam) {
- this.asn1Subject = new KJUR.asn1.x509.X500Name(x500NameParam);
- };
-
- /**
- * (DEPRECATED) set subject public key info field by RSA key parameter
- * @name setSubjectPublicKeyByParam
- * @memberOf KJUR.asn1.x509.TBSCertificate
- * @function
- * @param {Array} subjPKeyParam SubjectPublicKeyInfo parameter of RSA
- * @deprecated
- * @description
- * @example
- * tbsc.setSubjectPublicKeyByParam({'rsakey': pubKey});
- * @see KJUR.asn1.x509.SubjectPublicKeyInfo
- */
- this.setSubjectPublicKeyByParam = function(subjPKeyParam) {
- this.asn1SubjPKey = new KJUR.asn1.x509.SubjectPublicKeyInfo(subjPKeyParam);
- };
-
- /**
- * set subject public key info by RSA/ECDSA/DSA key parameter
- * @name setSubjectPublicKeyByGetKey
- * @memberOf KJUR.asn1.x509.TBSCertificate
- * @function
- * @param {Object} keyParam public key parameter which passed to {@link KEYUTIL.getKey} argument
- * @description
- * @example
- * tbsc.setSubjectPublicKeyByGetKeyParam(certPEMString); // or
- * tbsc.setSubjectPublicKeyByGetKeyParam(pkcs8PublicKeyPEMString); // or
- * tbsc.setSubjectPublicKeyByGetKeyParam(kjurCryptoECDSAKeyObject); // et.al.
- * @see KJUR.asn1.x509.SubjectPublicKeyInfo
- * @see KEYUTIL.getKey
- * @since asn1x509 1.0.6
- */
- this.setSubjectPublicKeyByGetKey = function(keyParam) {
- var keyObj = KEYUTIL.getKey(keyParam);
- this.asn1SubjPKey = new KJUR.asn1.x509.SubjectPublicKeyInfo(keyObj);
- };
-
- /**
- * append X.509v3 extension to this object
- * @name appendExtension
- * @memberOf KJUR.asn1.x509.TBSCertificate
- * @function
- * @param {Extension} extObj X.509v3 Extension object
- * @description
- * @example
- * tbsc.appendExtension(new KJUR.asn1.x509.BasicConstraints({'cA':true, 'critical': true}));
- * tbsc.appendExtension(new KJUR.asn1.x509.KeyUsage({'bin':'11'}));
- * @see KJUR.asn1.x509.Extension
- */
- this.appendExtension = function(extObj) {
- this.extensionsArray.push(extObj);
- };
-
- /**
- * append X.509v3 extension to this object by name and parameters
- * @name appendExtensionByName
- * @memberOf KJUR.asn1.x509.TBSCertificate
- * @function
- * @param {name} name name of X.509v3 Extension object
- * @param {Array} extParams parameters as argument of Extension constructor.
- * @description
- * @example
- * tbsc.appendExtensionByName('BasicConstraints', {'cA':true, 'critical': true});
- * tbsc.appendExtensionByName('KeyUsage', {'bin':'11'});
- * tbsc.appendExtensionByName('CRLDistributionPoints', {uri: 'http://aaa.com/a.crl'});
- * tbsc.appendExtensionByName('ExtKeyUsage', {array: [{name: 'clientAuth'}]});
- * tbsc.appendExtensionByName('AuthorityKeyIdentifier', {kid: '1234ab..'});
- * @see KJUR.asn1.x509.Extension
- */
- this.appendExtensionByName = function(name, extParams) {
- if (name.toLowerCase() == "basicconstraints") {
- var extObj = new KJUR.asn1.x509.BasicConstraints(extParams);
- this.appendExtension(extObj);
- } else if (name.toLowerCase() == "keyusage") {
- var extObj = new KJUR.asn1.x509.KeyUsage(extParams);
- this.appendExtension(extObj);
- } else if (name.toLowerCase() == "crldistributionpoints") {
- var extObj = new KJUR.asn1.x509.CRLDistributionPoints(extParams);
- this.appendExtension(extObj);
- } else if (name.toLowerCase() == "extkeyusage") {
- var extObj = new KJUR.asn1.x509.ExtKeyUsage(extParams);
- this.appendExtension(extObj);
- } else if (name.toLowerCase() == "authoritykeyidentifier") {
- var extObj = new KJUR.asn1.x509.AuthorityKeyIdentifier(extParams);
- this.appendExtension(extObj);
- } else {
- throw "unsupported extension name: " + name;
- }
- };
-
- this.getEncodedHex = function() {
- if (this.asn1NotBefore == null || this.asn1NotAfter == null)
- throw "notBefore and/or notAfter not set";
- var asn1Validity =
- new KJUR.asn1.DERSequence({'array':[this.asn1NotBefore, this.asn1NotAfter]});
-
- this.asn1Array = new Array();
-
- this.asn1Array.push(this.asn1Version);
- this.asn1Array.push(this.asn1SerialNumber);
- this.asn1Array.push(this.asn1SignatureAlg);
- this.asn1Array.push(this.asn1Issuer);
- this.asn1Array.push(asn1Validity);
- this.asn1Array.push(this.asn1Subject);
- this.asn1Array.push(this.asn1SubjPKey);
-
- if (this.extensionsArray.length > 0) {
- var extSeq = new KJUR.asn1.DERSequence({"array": this.extensionsArray});
- var extTagObj = new KJUR.asn1.DERTaggedObject({'explicit': true,
- 'tag': 'a3',
- 'obj': extSeq});
- this.asn1Array.push(extTagObj);
- }
-
- var o = new KJUR.asn1.DERSequence({"array": this.asn1Array});
- this.hTLV = o.getEncodedHex();
- this.isModified = false;
- return this.hTLV;
- };
-
- this._initialize();
-};
-YAHOO.lang.extend(KJUR.asn1.x509.TBSCertificate, KJUR.asn1.ASN1Object);
-
-// === END TBSCertificate ===================================================
-
-// === BEGIN X.509v3 Extensions Related =======================================
-
-/**
- * base Extension ASN.1 structure class
- * @name KJUR.asn1.x509.Extension
- * @class base Extension ASN.1 structure class
- * @param {Array} params associative array of parameters (ex. {'critical': true})
- * @extends KJUR.asn1.ASN1Object
- * @description
- * @example
- * // Extension ::= SEQUENCE {
- * // extnID OBJECT IDENTIFIER,
- * // critical BOOLEAN DEFAULT FALSE,
- * // extnValue OCTET STRING }
- */
-KJUR.asn1.x509.Extension = function(params) {
- KJUR.asn1.x509.Extension.superclass.constructor.call(this);
- var asn1ExtnValue = null;
-
- this.getEncodedHex = function() {
- var asn1Oid = new KJUR.asn1.DERObjectIdentifier({'oid': this.oid});
- var asn1EncapExtnValue =
- new KJUR.asn1.DEROctetString({'hex': this.getExtnValueHex()});
-
- var asn1Array = new Array();
- asn1Array.push(asn1Oid);
- if (this.critical) asn1Array.push(new KJUR.asn1.DERBoolean());
- asn1Array.push(asn1EncapExtnValue);
-
- var asn1Seq = new KJUR.asn1.DERSequence({'array': asn1Array});
- return asn1Seq.getEncodedHex();
- };
-
- this.critical = false;
- if (typeof params != "undefined") {
- if (typeof params['critical'] != "undefined") {
- this.critical = params['critical'];
- }
- }
-};
-YAHOO.lang.extend(KJUR.asn1.x509.Extension, KJUR.asn1.ASN1Object);
-
-/**
- * KeyUsage ASN.1 structure class
- * @name KJUR.asn1.x509.KeyUsage
- * @class KeyUsage ASN.1 structure class
- * @param {Array} params associative array of parameters (ex. {'bin': '11', 'critical': true})
- * @extends KJUR.asn1.x509.Extension
- * @description
- * @example
- */
-KJUR.asn1.x509.KeyUsage = function(params) {
- KJUR.asn1.x509.KeyUsage.superclass.constructor.call(this, params);
-
- this.getExtnValueHex = function() {
- return this.asn1ExtnValue.getEncodedHex();
- };
-
- this.oid = "2.5.29.15";
- if (typeof params != "undefined") {
- if (typeof params['bin'] != "undefined") {
- this.asn1ExtnValue = new KJUR.asn1.DERBitString(params);
- }
- }
-};
-YAHOO.lang.extend(KJUR.asn1.x509.KeyUsage, KJUR.asn1.x509.Extension);
-
-/**
- * BasicConstraints ASN.1 structure class
- * @name KJUR.asn1.x509.BasicConstraints
- * @class BasicConstraints ASN.1 structure class
- * @param {Array} params associative array of parameters (ex. {'cA': true, 'critical': true})
- * @extends KJUR.asn1.x509.Extension
- * @description
- * @example
- */
-KJUR.asn1.x509.BasicConstraints = function(params) {
- KJUR.asn1.x509.BasicConstraints.superclass.constructor.call(this, params);
- var cA = false;
- var pathLen = -1;
-
- this.getExtnValueHex = function() {
- var asn1Array = new Array();
- if (this.cA) asn1Array.push(new KJUR.asn1.DERBoolean());
- if (this.pathLen > -1)
- asn1Array.push(new KJUR.asn1.DERInteger({'int': this.pathLen}));
- var asn1Seq = new KJUR.asn1.DERSequence({'array': asn1Array});
- this.asn1ExtnValue = asn1Seq;
- return this.asn1ExtnValue.getEncodedHex();
- };
-
- this.oid = "2.5.29.19";
- this.cA = false;
- this.pathLen = -1;
- if (typeof params != "undefined") {
- if (typeof params['cA'] != "undefined") {
- this.cA = params['cA'];
- }
- if (typeof params['pathLen'] != "undefined") {
- this.pathLen = params['pathLen'];
- }
- }
-};
-YAHOO.lang.extend(KJUR.asn1.x509.BasicConstraints, KJUR.asn1.x509.Extension);
-
-/**
- * CRLDistributionPoints ASN.1 structure class
- * @name KJUR.asn1.x509.CRLDistributionPoints
- * @class CRLDistributionPoints ASN.1 structure class
- * @param {Array} params associative array of parameters (ex. {'uri': 'http://a.com/', 'critical': true})
- * @extends KJUR.asn1.x509.Extension
- * @description
- * @example
- */
-KJUR.asn1.x509.CRLDistributionPoints = function(params) {
- KJUR.asn1.x509.CRLDistributionPoints.superclass.constructor.call(this, params);
-
- this.getExtnValueHex = function() {
- return this.asn1ExtnValue.getEncodedHex();
- };
-
- this.setByDPArray = function(dpArray) {
- this.asn1ExtnValue = new KJUR.asn1.DERSequence({'array': dpArray});
- };
-
- this.setByOneURI = function(uri) {
- var gn1 = new KJUR.asn1.x509.GeneralNames([{'uri': uri}]);
- var dpn1 = new KJUR.asn1.x509.DistributionPointName(gn1);
- var dp1 = new KJUR.asn1.x509.DistributionPoint({'dpobj': dpn1});
- this.setByDPArray([dp1]);
- };
-
- this.oid = "2.5.29.31";
- if (typeof params != "undefined") {
- if (typeof params['array'] != "undefined") {
- this.setByDPArray(params['array']);
- } else if (typeof params['uri'] != "undefined") {
- this.setByOneURI(params['uri']);
- }
- }
-};
-YAHOO.lang.extend(KJUR.asn1.x509.CRLDistributionPoints, KJUR.asn1.x509.Extension);
-
-/**
- * KeyUsage ASN.1 structure class
- * @name KJUR.asn1.x509.ExtKeyUsage
- * @class ExtKeyUsage ASN.1 structure class
- * @param {Array} params associative array of parameters
- * @extends KJUR.asn1.x509.Extension
- * @description
- * @example
- * var e1 =
- * new KJUR.asn1.x509.ExtKeyUsage({'critical': true,
- * 'array':
- * [{'oid': '2.5.29.37.0', // anyExtendedKeyUsage
- * 'name': 'clientAuth'}]});
- *
- * // id-ce-extKeyUsage OBJECT IDENTIFIER ::= { id-ce 37 }
- * // ExtKeyUsageSyntax ::= SEQUENCE SIZE (1..MAX) OF KeyPurposeId
- * // KeyPurposeId ::= OBJECT IDENTIFIER
- */
-KJUR.asn1.x509.ExtKeyUsage = function(params) {
- KJUR.asn1.x509.ExtKeyUsage.superclass.constructor.call(this, params);
-
- this.setPurposeArray = function(purposeArray) {
- this.asn1ExtnValue = new KJUR.asn1.DERSequence();
- for (var i = 0; i < purposeArray.length; i++) {
- var o = new KJUR.asn1.DERObjectIdentifier(purposeArray[i]);
- this.asn1ExtnValue.appendASN1Object(o);
- }
- };
-
- this.getExtnValueHex = function() {
- return this.asn1ExtnValue.getEncodedHex();
- };
-
- this.oid = "2.5.29.37";
- if (typeof params != "undefined") {
- if (typeof params['array'] != "undefined") {
- this.setPurposeArray(params['array']);
- }
- }
-};
-YAHOO.lang.extend(KJUR.asn1.x509.ExtKeyUsage, KJUR.asn1.x509.Extension);
-
-/**
- * AuthorityKeyIdentifier ASN.1 structure class
- * @name KJUR.asn1.x509.AuthorityKeyIdentifier
- * @class AuthorityKeyIdentifier ASN.1 structure class
- * @param {Array} params associative array of parameters (ex. {'uri': 'http://a.com/', 'critical': true})
- * @extends KJUR.asn1.x509.Extension
- * @since asn1x509 1.0.8
- * @description
- *
- * d-ce-authorityKeyIdentifier OBJECT IDENTIFIER ::= { id-ce 35 }
- * AuthorityKeyIdentifier ::= SEQUENCE {
- * keyIdentifier [0] KeyIdentifier OPTIONAL,
- * authorityCertIssuer [1] GeneralNames OPTIONAL,
- * authorityCertSerialNumber [2] CertificateSerialNumber OPTIONAL }
- * KeyIdentifier ::= OCTET STRING
- *
- * @example
- * var param = {'kid': {'hex': '89ab'},
- * 'issuer': {'str': '/C=US/CN=a'},
- * 'sn': {'hex': '1234'},
- * 'critical': true});
- * var e1 = new KJUR.asn1.x509.AuthorityKeyIdentifier(param);
- */
-KJUR.asn1.x509.AuthorityKeyIdentifier = function(params) {
- KJUR.asn1.x509.AuthorityKeyIdentifier.superclass.constructor.call(this, params);
- this.asn1KID = null;
- this.asn1CertIssuer = null;
- this.asn1CertSN = null;
-
- this.getExtnValueHex = function() {
- var a = new Array();
- if (this.asn1KID)
- a.push(new KJUR.asn1.DERTaggedObject({'explicit': false,
- 'tag': '80',
- 'obj': this.asn1KID}));
- if (this.asn1CertIssuer)
- a.push(new KJUR.asn1.DERTaggedObject({'explicit': false,
- 'tag': 'a1',
- 'obj': this.asn1CertIssuer}));
- if (this.asn1CertSN)
- a.push(new KJUR.asn1.DERTaggedObject({'explicit': false,
- 'tag': '82',
- 'obj': this.asn1CertSN}));
-
- var asn1Seq = new KJUR.asn1.DERSequence({'array': a});
- this.asn1ExtnValue = asn1Seq;
- return this.asn1ExtnValue.getEncodedHex();
- };
-
- /**
- * set keyIdentifier value by DERInteger parameter
- * @name setKIDByParam
- * @memberOf KJUR.asn1.x509.AuthorityKeyIdentifier
- * @function
- * @param {Array} param array of {@link KJUR.asn1.DERInteger} parameter
- * @since asn1x509 1.0.8
- * @description
- * NOTE: Automatic keyIdentifier value calculation by an issuer
- * public key will be supported in future version.
- */
- this.setKIDByParam = function(param) {
- this.asn1KID = new KJUR.asn1.DEROctetString(param);
- };
-
- /**
- * set authorityCertIssuer value by X500Name parameter
- * @name setCertIssuerByParam
- * @memberOf KJUR.asn1.x509.AuthorityKeyIdentifier
- * @function
- * @param {Array} param array of {@link KJUR.asn1.x509.X500Name} parameter
- * @since asn1x509 1.0.8
- * @description
- * NOTE: Automatic authorityCertIssuer name setting by an issuer
- * certificate will be supported in future version.
- */
- this.setCertIssuerByParam = function(param) {
- this.asn1CertIssuer = new KJUR.asn1.x509.X500Name(param);
- };
-
- /**
- * set authorityCertSerialNumber value by DERInteger parameter
- * @name setCertSerialNumberByParam
- * @memberOf KJUR.asn1.x509.AuthorityKeyIdentifier
- * @function
- * @param {Array} param array of {@link KJUR.asn1.DERInteger} parameter
- * @since asn1x509 1.0.8
- * @description
- * NOTE: Automatic authorityCertSerialNumber setting by an issuer
- * certificate will be supported in future version.
- */
- this.setCertSNByParam = function(param) {
- this.asn1CertSN = new KJUR.asn1.DERInteger(param);
- };
-
- this.oid = "2.5.29.35";
- if (typeof params != "undefined") {
- if (typeof params['kid'] != "undefined") {
- this.setKIDByParam(params['kid']);
- }
- if (typeof params['issuer'] != "undefined") {
- this.setCertIssuerByParam(params['issuer']);
- }
- if (typeof params['sn'] != "undefined") {
- this.setCertSNByParam(params['sn']);
- }
- }
-};
-YAHOO.lang.extend(KJUR.asn1.x509.AuthorityKeyIdentifier, KJUR.asn1.x509.Extension);
-
-// === END X.509v3 Extensions Related =======================================
-
-// === BEGIN CRL Related ===================================================
-/**
- * X.509 CRL class to sign and generate hex encoded CRL
- * @name KJUR.asn1.x509.CRL
- * @class X.509 CRL class to sign and generate hex encoded certificate
- * @param {Array} params associative array of parameters (ex. {'tbsobj': obj, 'rsaprvkey': key})
- * @extends KJUR.asn1.ASN1Object
- * @since 1.0.3
- * @description
- *
- * As for argument 'params' for constructor, you can specify one of
- * following properties:
- *
- *
- * NOTE: 'params' can be omitted.
- * EXAMPLE
- * @example
- * var prvKey = new RSAKey(); // CA's private key
- * prvKey.readPrivateKeyFromASN1HexString("3080...");
- * var crl = new KJUR.asn1x509.CRL({'tbsobj': tbs, 'rsaprvkey': prvKey});
- * crl.sign(); // issue CRL by CA's private key
- * var hCRL = crl.getEncodedHex();
- *
- * // CertificateList ::= SEQUENCE {
- * // tbsCertList TBSCertList,
- * // signatureAlgorithm AlgorithmIdentifier,
- * // signatureValue BIT STRING }
- */
-KJUR.asn1.x509.CRL = function(params) {
- KJUR.asn1.x509.CRL.superclass.constructor.call(this);
-
- var asn1TBSCertList = null;
- var asn1SignatureAlg = null;
- var asn1Sig = null;
- var hexSig = null;
- var rsaPrvKey = null;
-
- /**
- * set PKCS#5 encrypted RSA PEM private key as CA key
- * @name setRsaPrvKeyByPEMandPass
- * @memberOf KJUR.asn1.x509.CRL
- * @function
- * @param {String} rsaPEM string of PKCS#5 encrypted RSA PEM private key
- * @param {String} passPEM passcode string to decrypt private key
- * @description
- *
- * EXAMPLES
- * @example
- */
- this.setRsaPrvKeyByPEMandPass = function(rsaPEM, passPEM) {
- var caKeyHex = PKCS5PKEY.getDecryptedKeyHex(rsaPEM, passPEM);
- var caKey = new RSAKey();
- caKey.readPrivateKeyFromASN1HexString(caKeyHex);
- this.rsaPrvKey = caKey;
- };
-
- /**
- * sign TBSCertList and set signature value internally
- * @name sign
- * @memberOf KJUR.asn1.x509.CRL
- * @function
- * @description
- * @example
- * var cert = new KJUR.asn1.x509.CRL({'tbsobj': tbs, 'rsaprvkey': prvKey});
- * cert.sign();
- */
- this.sign = function() {
- this.asn1SignatureAlg = this.asn1TBSCertList.asn1SignatureAlg;
-
- sig = new KJUR.crypto.Signature({'alg': 'SHA1withRSA', 'prov': 'cryptojs/jsrsa'});
- sig.initSign(this.rsaPrvKey);
- sig.updateHex(this.asn1TBSCertList.getEncodedHex());
- this.hexSig = sig.sign();
-
- this.asn1Sig = new KJUR.asn1.DERBitString({'hex': '00' + this.hexSig});
-
- var seq = new KJUR.asn1.DERSequence({'array': [this.asn1TBSCertList,
- this.asn1SignatureAlg,
- this.asn1Sig]});
- this.hTLV = seq.getEncodedHex();
- this.isModified = false;
- };
-
- this.getEncodedHex = function() {
- if (this.isModified == false && this.hTLV != null) return this.hTLV;
- throw "not signed yet";
- };
-
- /**
- * get PEM formatted CRL string after signed
- * @name getPEMString
- * @memberOf KJUR.asn1.x509.CRL
- * @function
- * @return PEM formatted string of certificate
- * @description
- * @example
- * var cert = new KJUR.asn1.x509.CRL({'tbsobj': tbs, 'rsaprvkey': prvKey});
- * cert.sign();
- * var sPEM = cert.getPEMString();
- */
- this.getPEMString = function() {
- var hCert = this.getEncodedHex();
- var wCert = CryptoJS.enc.Hex.parse(hCert);
- var b64Cert = CryptoJS.enc.Base64.stringify(wCert);
- var pemBody = b64Cert.replace(/(.{64})/g, "$1\r\n");
- return "-----BEGIN X509 CRL-----\r\n" + pemBody + "\r\n-----END X509 CRL-----\r\n";
- };
-
- if (typeof params != "undefined") {
- if (typeof params['tbsobj'] != "undefined") {
- this.asn1TBSCertList = params['tbsobj'];
- }
- if (typeof params['rsaprvkey'] != "undefined") {
- this.rsaPrvKey = params['rsaprvkey'];
- }
- if ((typeof params['rsaprvpem'] != "undefined") &&
- (typeof params['rsaprvpas'] != "undefined")) {
- this.setRsaPrvKeyByPEMandPass(params['rsaprvpem'], params['rsaprvpas']);
- }
- }
-};
-YAHOO.lang.extend(KJUR.asn1.x509.CRL, KJUR.asn1.ASN1Object);
-
-/**
- * ASN.1 TBSCertList structure class for CRL
- * @name KJUR.asn1.x509.TBSCertList
- * @class ASN.1 TBSCertList structure class for CRL
- * @param {Array} params associative array of parameters (ex. {})
- * @extends KJUR.asn1.ASN1Object
- * @since 1.0.3
- * @description
- *
- * EXAMPLE
- * @example
- * var o = new KJUR.asn1.x509.TBSCertList();
- * o.setSignatureAlgByParam({'name': 'SHA1withRSA'});
- * o.setIssuerByParam({'str': '/C=US/O=a'});
- * o.setNotThisUpdateByParam({'str': '130504235959Z'});
- * o.setNotNextUpdateByParam({'str': '140504235959Z'});
- * o.addRevokedCert({'int': 4}, {'str':'130514235959Z'}));
- * o.addRevokedCert({'hex': '0f34dd'}, {'str':'130514235959Z'}));
- *
- * // TBSCertList ::= SEQUENCE {
- * // version Version OPTIONAL,
- * // -- if present, MUST be v2
- * // signature AlgorithmIdentifier,
- * // issuer Name,
- * // thisUpdate Time,
- * // nextUpdate Time OPTIONAL,
- * // revokedCertificates SEQUENCE OF SEQUENCE {
- * // userCertificate CertificateSerialNumber,
- * // revocationDate Time,
- * // crlEntryExtensions Extensions OPTIONAL
- * // -- if present, version MUST be v2
- * // } OPTIONAL,
- * // crlExtensions [0] EXPLICIT Extensions OPTIONAL
- */
-KJUR.asn1.x509.TBSCertList = function(params) {
- KJUR.asn1.x509.TBSCertList.superclass.constructor.call(this);
- var aRevokedCert = null;
-
- /**
- * set signature algorithm field by parameter
- * @name setSignatureAlgByParam
- * @memberOf KJUR.asn1.x509.TBSCertList
- * @function
- * @param {Array} algIdParam AlgorithmIdentifier parameter
- * @description
- * @example
- * tbsc.setSignatureAlgByParam({'name': 'SHA1withRSA'});
- */
- this.setSignatureAlgByParam = function(algIdParam) {
- this.asn1SignatureAlg = new KJUR.asn1.x509.AlgorithmIdentifier(algIdParam);
- };
-
- /**
- * set issuer name field by parameter
- * @name setIssuerByParam
- * @memberOf KJUR.asn1.x509.TBSCertList
- * @function
- * @param {Array} x500NameParam X500Name parameter
- * @description
- * @example
- * tbsc.setIssuerParam({'str': '/C=US/CN=b'});
- * @see KJUR.asn1.x509.X500Name
- */
- this.setIssuerByParam = function(x500NameParam) {
- this.asn1Issuer = new KJUR.asn1.x509.X500Name(x500NameParam);
- };
-
- /**
- * set thisUpdate field by parameter
- * @name setThisUpdateByParam
- * @memberOf KJUR.asn1.x509.TBSCertList
- * @function
- * @param {Array} timeParam Time parameter
- * @description
- * @example
- * tbsc.setThisUpdateByParam({'str': '130508235959Z'});
- * @see KJUR.asn1.x509.Time
- */
- this.setThisUpdateByParam = function(timeParam) {
- this.asn1ThisUpdate = new KJUR.asn1.x509.Time(timeParam);
- };
-
- /**
- * set nextUpdate field by parameter
- * @name setNextUpdateByParam
- * @memberOf KJUR.asn1.x509.TBSCertList
- * @function
- * @param {Array} timeParam Time parameter
- * @description
- * @example
- * tbsc.setNextUpdateByParam({'str': '130508235959Z'});
- * @see KJUR.asn1.x509.Time
- */
- this.setNextUpdateByParam = function(timeParam) {
- this.asn1NextUpdate = new KJUR.asn1.x509.Time(timeParam);
- };
-
- /**
- * add revoked certficate by parameter
- * @name addRevokedCert
- * @memberOf KJUR.asn1.x509.TBSCertList
- * @function
- * @param {Array} snParam DERInteger parameter for certificate serial number
- * @param {Array} timeParam Time parameter for revocation date
- * @description
- * @example
- * tbsc.addRevokedCert({'int': 3}, {'str': '130508235959Z'});
- * @see KJUR.asn1.x509.Time
- */
- this.addRevokedCert = function(snParam, timeParam) {
- var param = {};
- if (snParam != undefined && snParam != null) param['sn'] = snParam;
- if (timeParam != undefined && timeParam != null) param['time'] = timeParam;
- var o = new KJUR.asn1.x509.CRLEntry(param);
- this.aRevokedCert.push(o);
- };
-
- this.getEncodedHex = function() {
- this.asn1Array = new Array();
-
- if (this.asn1Version != null) this.asn1Array.push(this.asn1Version);
- this.asn1Array.push(this.asn1SignatureAlg);
- this.asn1Array.push(this.asn1Issuer);
- this.asn1Array.push(this.asn1ThisUpdate);
- if (this.asn1NextUpdate != null) this.asn1Array.push(this.asn1NextUpdate);
-
- if (this.aRevokedCert.length > 0) {
- var seq = new KJUR.asn1.DERSequence({'array': this.aRevokedCert});
- this.asn1Array.push(seq);
- }
-
- var o = new KJUR.asn1.DERSequence({"array": this.asn1Array});
- this.hTLV = o.getEncodedHex();
- this.isModified = false;
- return this.hTLV;
- };
-
- this._initialize = function() {
- this.asn1Version = null;
- this.asn1SignatureAlg = null;
- this.asn1Issuer = null;
- this.asn1ThisUpdate = null;
- this.asn1NextUpdate = null;
- this.aRevokedCert = new Array();
- };
-
- this._initialize();
-};
-YAHOO.lang.extend(KJUR.asn1.x509.TBSCertList, KJUR.asn1.ASN1Object);
-
-/**
- * ASN.1 CRLEntry structure class for CRL
- * @name KJUR.asn1.x509.CRLEntry
- * @class ASN.1 CRLEntry structure class for CRL
- * @param {Array} params associative array of parameters (ex. {})
- * @extends KJUR.asn1.ASN1Object
- * @since 1.0.3
- * @description
- * @example
- * var e = new KJUR.asn1.x509.CRLEntry({'time': {'str': '130514235959Z'}, 'sn': {'int': 234}});
- *
- * // revokedCertificates SEQUENCE OF SEQUENCE {
- * // userCertificate CertificateSerialNumber,
- * // revocationDate Time,
- * // crlEntryExtensions Extensions OPTIONAL
- * // -- if present, version MUST be v2 }
- */
-KJUR.asn1.x509.CRLEntry = function(params) {
- KJUR.asn1.x509.CRLEntry.superclass.constructor.call(this);
- var sn = null;
- var time = null;
-
- /**
- * set DERInteger parameter for serial number of revoked certificate
- * @name setCertSerial
- * @memberOf KJUR.asn1.x509.CRLEntry
- * @function
- * @param {Array} intParam DERInteger parameter for certificate serial number
- * @description
- * @example
- * entry.setCertSerial({'int': 3});
- */
- this.setCertSerial = function(intParam) {
- this.sn = new KJUR.asn1.DERInteger(intParam);
- };
-
- /**
- * set Time parameter for revocation date
- * @name setRevocationDate
- * @memberOf KJUR.asn1.x509.CRLEntry
- * @function
- * @param {Array} timeParam Time parameter for revocation date
- * @description
- * @example
- * entry.setRevocationDate({'str': '130508235959Z'});
- */
- this.setRevocationDate = function(timeParam) {
- this.time = new KJUR.asn1.x509.Time(timeParam);
- };
-
- this.getEncodedHex = function() {
- var o = new KJUR.asn1.DERSequence({"array": [this.sn, this.time]});
- this.TLV = o.getEncodedHex();
- return this.TLV;
- };
-
- if (typeof params != "undefined") {
- if (typeof params['time'] != "undefined") {
- this.setRevocationDate(params['time']);
- }
- if (typeof params['sn'] != "undefined") {
- this.setCertSerial(params['sn']);
- }
- }
-};
-YAHOO.lang.extend(KJUR.asn1.x509.CRLEntry, KJUR.asn1.ASN1Object);
-
-// === END CRL Related ===================================================
-
-// === BEGIN X500Name Related =================================================
-/**
- * X500Name ASN.1 structure class
- * @name KJUR.asn1.x509.X500Name
- * @class X500Name ASN.1 structure class
- * @param {Array} params associative array of parameters (ex. {'str': '/C=US/O=a'})
- * @extends KJUR.asn1.ASN1Object
- * @description
- * @example
- */
-KJUR.asn1.x509.X500Name = function(params) {
- KJUR.asn1.x509.X500Name.superclass.constructor.call(this);
- this.asn1Array = new Array();
-
- this.setByString = function(dnStr) {
- var a = dnStr.split('/');
- a.shift();
- for (var i = 0; i < a.length; i++) {
- this.asn1Array.push(new KJUR.asn1.x509.RDN({'str':a[i]}));
- }
- };
-
- this.getEncodedHex = function() {
- if (typeof this.hTLV == "string") return this.hTLV;
- var o = new KJUR.asn1.DERSequence({"array": this.asn1Array});
- this.hTLV = o.getEncodedHex();
- return this.hTLV;
- };
-
- if (typeof params != "undefined") {
- if (typeof params['str'] != "undefined") {
- this.setByString(params['str']);
- }
- if (typeof params.certissuer != "undefined") {
- var x = new X509();
- x.hex = X509.pemToHex(params.certissuer);
- this.hTLV = x.getIssuerHex();
- }
- if (typeof params.certsubject != "undefined") {
- var x = new X509();
- x.hex = X509.pemToHex(params.certsubject);
- this.hTLV = x.getSubjectHex();
- }
- }
-};
-YAHOO.lang.extend(KJUR.asn1.x509.X500Name, KJUR.asn1.ASN1Object);
-
-/**
- * RDN (Relative Distinguish Name) ASN.1 structure class
- * @name KJUR.asn1.x509.RDN
- * @class RDN (Relative Distinguish Name) ASN.1 structure class
- * @param {Array} params associative array of parameters (ex. {'str': 'C=US'})
- * @extends KJUR.asn1.ASN1Object
- * @description
- * @example
- */
-KJUR.asn1.x509.RDN = function(params) {
- KJUR.asn1.x509.RDN.superclass.constructor.call(this);
- this.asn1Array = new Array();
-
- this.addByString = function(rdnStr) {
- this.asn1Array.push(new KJUR.asn1.x509.AttributeTypeAndValue({'str':rdnStr}));
- };
-
- this.getEncodedHex = function() {
- var o = new KJUR.asn1.DERSet({"array": this.asn1Array});
- this.TLV = o.getEncodedHex();
- return this.TLV;
- };
-
- if (typeof params != "undefined") {
- if (typeof params['str'] != "undefined") {
- this.addByString(params['str']);
- }
- }
-};
-YAHOO.lang.extend(KJUR.asn1.x509.RDN, KJUR.asn1.ASN1Object);
-
-/**
- * AttributeTypeAndValue ASN.1 structure class
- * @name KJUR.asn1.x509.AttributeTypeAndValue
- * @class AttributeTypeAndValue ASN.1 structure class
- * @param {Array} params associative array of parameters (ex. {'str': 'C=US'})
- * @extends KJUR.asn1.ASN1Object
- * @description
- * @example
- */
-KJUR.asn1.x509.AttributeTypeAndValue = function(params) {
- KJUR.asn1.x509.AttributeTypeAndValue.superclass.constructor.call(this);
- var typeObj = null;
- var valueObj = null;
- var defaultDSType = "utf8";
-
- this.setByString = function(attrTypeAndValueStr) {
- if (attrTypeAndValueStr.match(/^([^=]+)=(.+)$/)) {
- this.setByAttrTypeAndValueStr(RegExp.$1, RegExp.$2);
- } else {
- throw "malformed attrTypeAndValueStr: " + attrTypeAndValueStr;
- }
- };
-
- this.setByAttrTypeAndValueStr = function(shortAttrType, valueStr) {
- this.typeObj = KJUR.asn1.x509.OID.atype2obj(shortAttrType);
- var dsType = defaultDSType;
- if (shortAttrType == "C") dsType = "prn";
- this.valueObj = this.getValueObj(dsType, valueStr);
- };
-
- this.getValueObj = function(dsType, valueStr) {
- if (dsType == "utf8") return new KJUR.asn1.DERUTF8String({"str": valueStr});
- if (dsType == "prn") return new KJUR.asn1.DERPrintableString({"str": valueStr});
- if (dsType == "tel") return new KJUR.asn1.DERTeletexString({"str": valueStr});
- if (dsType == "ia5") return new KJUR.asn1.DERIA5String({"str": valueStr});
- throw "unsupported directory string type: type=" + dsType + " value=" + valueStr;
- };
-
- this.getEncodedHex = function() {
- var o = new KJUR.asn1.DERSequence({"array": [this.typeObj, this.valueObj]});
- this.TLV = o.getEncodedHex();
- return this.TLV;
- };
-
- if (typeof params != "undefined") {
- if (typeof params['str'] != "undefined") {
- this.setByString(params['str']);
- }
- }
-};
-YAHOO.lang.extend(KJUR.asn1.x509.AttributeTypeAndValue, KJUR.asn1.ASN1Object);
-
-// === END X500Name Related =================================================
-
-// === BEGIN Other ASN1 structure class ======================================
-
-/**
- * SubjectPublicKeyInfo ASN.1 structure class
- * @name KJUR.asn1.x509.SubjectPublicKeyInfo
- * @class SubjectPublicKeyInfo ASN.1 structure class
- * @param {Object} params parameter for subject public key
- * @extends KJUR.asn1.ASN1Object
- * @description
- *
- * As for argument 'params' for constructor, you can specify one of
- * following properties:
- *
- *
- * NOTE1: 'params' can be omitted.
- * NOTE2: DSA/ECDSA key object is also supported since asn1x509 1.0.6.
- * EXAMPLE
- * @example
- * var spki = new KJUR.asn1.x509.SubjectPublicKeyInfo(RSAKey_object);
- * var spki = new KJUR.asn1.x509.SubjectPublicKeyInfo(KJURcryptoECDSA_object);
- * var spki = new KJUR.asn1.x509.SubjectPublicKeyInfo(KJURcryptoDSA_object);
- */
-KJUR.asn1.x509.SubjectPublicKeyInfo = function(params) {
- KJUR.asn1.x509.SubjectPublicKeyInfo.superclass.constructor.call(this);
- var asn1AlgId = null;
- var asn1SubjPKey = null;
- var rsaKey = null;
-
- /**
- * (DEPRECATED) set RSAKey object as subject public key
- * @name setRSAKey
- * @memberOf KJUR.asn1.x509.SubjectPublicKeyInfo
- * @function
- * @param {RSAKey} rsaKey {@link RSAKey} object for RSA public key
- * @description
- * @deprecated
- * @example
- * spki.setRSAKey(rsaKey);
- */
- this.setRSAKey = function(rsaKey) {
- if (! RSAKey.prototype.isPrototypeOf(rsaKey))
- throw "argument is not RSAKey instance";
- this.rsaKey = rsaKey;
- var asn1RsaN = new KJUR.asn1.DERInteger({'bigint': rsaKey.n});
- var asn1RsaE = new KJUR.asn1.DERInteger({'int': rsaKey.e});
- var asn1RsaPub = new KJUR.asn1.DERSequence({'array': [asn1RsaN, asn1RsaE]});
- var rsaKeyHex = asn1RsaPub.getEncodedHex();
- this.asn1AlgId = new KJUR.asn1.x509.AlgorithmIdentifier({'name':'rsaEncryption'});
- this.asn1SubjPKey = new KJUR.asn1.DERBitString({'hex':'00'+rsaKeyHex});
- };
-
- /**
- * (DEPRECATED) set a PEM formatted RSA public key string as RSA public key
- * @name setRSAPEM
- * @memberOf KJUR.asn1.x509.SubjectPublicKeyInfo
- * @function
- * @param {String} rsaPubPEM PEM formatted RSA public key string
- * @deprecated
- * @description
- * @example
- * spki.setRSAPEM(rsaPubPEM);
- */
- this.setRSAPEM = function(rsaPubPEM) {
- if (rsaPubPEM.match(/-----BEGIN PUBLIC KEY-----/)) {
- var s = rsaPubPEM;
- s = s.replace(/^-----[^-]+-----/, '');
- s = s.replace(/-----[^-]+-----\s*$/, '');
- var rsaB64 = s.replace(/\s+/g, '');
- var rsaWA = CryptoJS.enc.Base64.parse(rsaB64);
- var rsaP8Hex = CryptoJS.enc.Hex.stringify(rsaWA);
- var a = _rsapem_getHexValueArrayOfChildrenFromHex(rsaP8Hex);
- var hBitStrVal = a[1];
- var rsaHex = hBitStrVal.substr(2);
- var a3 = _rsapem_getHexValueArrayOfChildrenFromHex(rsaHex);
- var rsaKey = new RSAKey();
- rsaKey.setPublic(a3[0], a3[1]);
- this.setRSAKey(rsaKey);
- } else {
- throw "key not supported";
- }
- };
-
- /**
- * @since asn1x509 1.0.7
- */
- this.getASN1Object = function() {
- if (this.asn1AlgId == null || this.asn1SubjPKey == null)
- throw "algId and/or subjPubKey not set";
- var o = new KJUR.asn1.DERSequence({'array':
- [this.asn1AlgId, this.asn1SubjPKey]});
- return o;
- };
-
- this.getEncodedHex = function() {
- var o = this.getASN1Object();
- this.hTLV = o.getEncodedHex();
- return this.hTLV;
- };
-
- this._setRSAKey = function(key) {
- var asn1RsaPub = KJUR.asn1.ASN1Util.newObject({
- 'seq': [{'int': {'bigint': key.n}}, {'int': {'int': key.e}}]
- });
- var rsaKeyHex = asn1RsaPub.getEncodedHex();
- this.asn1AlgId = new KJUR.asn1.x509.AlgorithmIdentifier({'name':'rsaEncryption'});
- this.asn1SubjPKey = new KJUR.asn1.DERBitString({'hex':'00'+rsaKeyHex});
- };
-
- this._setEC = function(key) {
- var asn1Params = new KJUR.asn1.DERObjectIdentifier({'name': key.curveName});
- this.asn1AlgId =
- new KJUR.asn1.x509.AlgorithmIdentifier({'name': 'ecPublicKey',
- 'asn1params': asn1Params});
- this.asn1SubjPKey = new KJUR.asn1.DERBitString({'hex': '00' + key.pubKeyHex});
- };
-
- this._setDSA = function(key) {
- var asn1Params = new KJUR.asn1.ASN1Util.newObject({
- 'seq': [{'int': {'bigint': key.p}},
- {'int': {'bigint': key.q}},
- {'int': {'bigint': key.g}}]
- });
- this.asn1AlgId =
- new KJUR.asn1.x509.AlgorithmIdentifier({'name': 'dsa',
- 'asn1params': asn1Params});
- var pubInt = new KJUR.asn1.DERInteger({'bigint': key.y});
- this.asn1SubjPKey = new KJUR.asn1.DERBitString({'hex': '00' + pubInt.getEncodedHex()});
- };
-
- if (typeof params != "undefined") {
- if (typeof RSAKey != 'undefined' && params instanceof RSAKey) {
- this._setRSAKey(params);
- } else if (typeof KJUR.crypto.ECDSA != 'undefined' &&
- params instanceof KJUR.crypto.ECDSA) {
- this._setEC(params);
- } else if (typeof KJUR.crypto.DSA != 'undefined' &&
- params instanceof KJUR.crypto.DSA) {
- this._setDSA(params);
- } else if (typeof params['rsakey'] != "undefined") {
- this.setRSAKey(params['rsakey']);
- } else if (typeof params['rsapem'] != "undefined") {
- this.setRSAPEM(params['rsapem']);
- }
- }
-};
-YAHOO.lang.extend(KJUR.asn1.x509.SubjectPublicKeyInfo, KJUR.asn1.ASN1Object);
-
-/**
- * Time ASN.1 structure class
- * @name KJUR.asn1.x509.Time
- * @class Time ASN.1 structure class
- * @param {Array} params associative array of parameters (ex. {'str': '130508235959Z'})
- * @extends KJUR.asn1.ASN1Object
- * @description
- *
- * EXAMPLES
- * @example
- * var t1 = new KJUR.asn1.x509.Time{'str': '130508235959Z'} // UTCTime by default
- * var t2 = new KJUR.asn1.x509.Time{'type': 'gen', 'str': '20130508235959Z'} // GeneralizedTime
- */
-KJUR.asn1.x509.Time = function(params) {
- KJUR.asn1.x509.Time.superclass.constructor.call(this);
- var type = null;
- var timeParams = null;
-
- this.setTimeParams = function(timeParams) {
- this.timeParams = timeParams;
- }
-
- this.getEncodedHex = function() {
- var o = null;
-
- if (this.timeParams != null) {
- if (this.type == "utc") {
- o = new KJUR.asn1.DERUTCTime(this.timeParams);
- } else {
- o = new KJUR.asn1.DERGeneralizedTime(this.timeParams);
- }
- } else {
- if (this.type == "utc") {
- o = new KJUR.asn1.DERUTCTime();
- } else {
- o = new KJUR.asn1.DERGeneralizedTime();
- }
- }
- this.TLV = o.getEncodedHex();
- return this.TLV;
- };
-
- this.type = "utc";
- if (typeof params != "undefined") {
- if (typeof params.type != "undefined") {
- this.type = params.type;
- } else {
- if (typeof params.str != "undefined") {
- if (params.str.match(/^[0-9]{12}Z$/)) this.type = "utc";
- if (params.str.match(/^[0-9]{14}Z$/)) this.type = "gen";
- }
- }
- this.timeParams = params;
- }
-};
-YAHOO.lang.extend(KJUR.asn1.x509.Time, KJUR.asn1.ASN1Object);
-
-/**
- * AlgorithmIdentifier ASN.1 structure class
- * @name KJUR.asn1.x509.AlgorithmIdentifier
- * @class AlgorithmIdentifier ASN.1 structure class
- * @param {Array} params associative array of parameters (ex. {'name': 'SHA1withRSA'})
- * @extends KJUR.asn1.ASN1Object
- * @description
- * @example
- */
-KJUR.asn1.x509.AlgorithmIdentifier = function(params) {
- KJUR.asn1.x509.AlgorithmIdentifier.superclass.constructor.call(this);
- var nameAlg = null;
- var asn1Alg = null;
- var asn1Params = null;
- var paramEmpty = false;
-
- this.getEncodedHex = function() {
- if (this.nameAlg == null && this.asn1Alg == null) {
- throw "algorithm not specified";
- }
- if (this.nameAlg != null && this.asn1Alg == null) {
- this.asn1Alg = KJUR.asn1.x509.OID.name2obj(this.nameAlg);
- }
- var a = [this.asn1Alg];
- if (! this.paramEmpty) a.push(this.asn1Params);
- var o = new KJUR.asn1.DERSequence({'array': a});
- this.hTLV = o.getEncodedHex();
- return this.hTLV;
- };
-
- if (typeof params != "undefined") {
- if (typeof params['name'] != "undefined") {
- this.nameAlg = params['name'];
- }
- if (typeof params['asn1params'] != "undefined") {
- this.asn1Params = params['asn1params'];
- }
- if (typeof params['paramempty'] != "undefined") {
- this.paramEmpty = params['paramempty'];
- }
- }
- if (this.asn1Params == null) {
- this.asn1Params = new KJUR.asn1.DERNull();
- }
-};
-YAHOO.lang.extend(KJUR.asn1.x509.AlgorithmIdentifier, KJUR.asn1.ASN1Object);
-
-/**
- * GeneralName ASN.1 structure class
- * @name KJUR.asn1.x509.GeneralName
- * @class GeneralName ASN.1 structure class
- * @description
- *
- * As for argument 'params' for constructor, you can specify one of
- * following properties:
- *
- *
- * NOTE1: certissuer and certsubj is supported since asn1x509 1.0.10.
- *
- * Here is definition of the ASN.1 syntax:
- *
- * -- NOTE: under the CHOICE, it will always be explicit.
- * GeneralName ::= CHOICE {
- * otherName [0] OtherName,
- * rfc822Name [1] IA5String,
- * dNSName [2] IA5String,
- * x400Address [3] ORAddress,
- * directoryName [4] Name,
- * ediPartyName [5] EDIPartyName,
- * uniformResourceIdentifier [6] IA5String,
- * iPAddress [7] OCTET STRING,
- * registeredID [8] OBJECT IDENTIFIER }
- *
- *
- *
- *
- * @example
- * gn = new KJUR.asn1.x509.GeneralName({rfc822: 'test@aaa.com'});
- * gn = new KJUR.asn1.x509.GeneralName({dns: 'aaa.com'});
- * gn = new KJUR.asn1.x509.GeneralName({uri: 'http://aaa.com/'});
- * gn = new KJUR.asn1.x509.GeneralName({certissuer: certPEM});
- * gn = new KJUR.asn1.x509.GeneralName({certsubj: certPEM});
- */
-KJUR.asn1.x509.GeneralName = function(params) {
- KJUR.asn1.x509.GeneralName.superclass.constructor.call(this);
- var asn1Obj = null;
- var type = null;
- var pTag = {rfc822: '81', dns: '82', dn: 'a4', uri: '86'};
- this.explicit = false;
-
- this.setByParam = function(params) {
- var str = null;
- var v = null;
-
- if (typeof params == "undefined") return;
-
- if (typeof params.rfc822 != "undefined") {
- this.type = 'rfc822';
- v = new KJUR.asn1.DERIA5String({'str': params[this.type]});
- }
- if (typeof params.dns != "undefined") {
- this.type = 'dns';
- v = new KJUR.asn1.DERIA5String({'str': params[this.type]});
- }
- if (typeof params.uri != "undefined") {
- this.type = 'uri';
- v = new KJUR.asn1.DERIA5String({'str': params[this.type]});
- }
- if (typeof params.certissuer != "undefined") {
- this.type = 'dn';
- this.explicit = true;
- var certStr = params.certissuer;
- var certHex = null;
- if (certStr.match(/^[0-9A-Fa-f]+$/)) {
- certHex == certStr;
- }
- if (certStr.indexOf("-----BEGIN ") != -1) {
- certHex = X509.pemToHex(certStr);
- }
- if (certHex == null) throw "certissuer param not cert";
- var x = new X509();
- x.hex = certHex;
- var dnHex = x.getIssuerHex();
- v = new KJUR.asn1.ASN1Object();
- v.hTLV = dnHex;
- }
- if (typeof params.certsubj != "undefined") {
- this.type = 'dn';
- this.explicit = true;
- var certStr = params.certsubj;
- var certHex = null;
- if (certStr.match(/^[0-9A-Fa-f]+$/)) {
- certHex == certStr;
- }
- if (certStr.indexOf("-----BEGIN ") != -1) {
- certHex = X509.pemToHex(certStr);
- }
- if (certHex == null) throw "certsubj param not cert";
- var x = new X509();
- x.hex = certHex;
- var dnHex = x.getSubjectHex();
- v = new KJUR.asn1.ASN1Object();
- v.hTLV = dnHex;
- }
-
- if (this.type == null)
- throw "unsupported type in params=" + params;
- this.asn1Obj = new KJUR.asn1.DERTaggedObject({'explicit': this.explicit,
- 'tag': pTag[this.type],
- 'obj': v});
- };
-
- this.getEncodedHex = function() {
- return this.asn1Obj.getEncodedHex();
- }
-
- if (typeof params != "undefined") {
- this.setByParam(params);
- }
-
-};
-YAHOO.lang.extend(KJUR.asn1.x509.GeneralName, KJUR.asn1.ASN1Object);
-
-/**
- * GeneralNames ASN.1 structure class
- * @name KJUR.asn1.x509.GeneralNames
- * @class GeneralNames ASN.1 structure class
- * @description
- *
- * EXAMPLE AND ASN.1 SYNTAX
- * @example
- * var gns = new KJUR.asn1.x509.GeneralNames([{'uri': 'http://aaa.com/'}, {'uri': 'http://bbb.com/'}]);
- *
- * GeneralNames ::= SEQUENCE SIZE (1..MAX) OF GeneralName
- */
-KJUR.asn1.x509.GeneralNames = function(paramsArray) {
- KJUR.asn1.x509.GeneralNames.superclass.constructor.call(this);
- var asn1Array = null;
-
- /**
- * set a array of {@link KJUR.asn1.x509.GeneralName} parameters
- * @name setByParamArray
- * @memberOf KJUR.asn1.x509.GeneralNames
- * @function
- * @param {Array} paramsArray Array of {@link KJUR.asn1.x509.GeneralNames}
- * @description
- *
- * EXAMPLES
- * @example
- * var gns = new KJUR.asn1.x509.GeneralNames();
- * gns.setByParamArray([{'uri': 'http://aaa.com/'}, {'uri': 'http://bbb.com/'}]);
- */
- this.setByParamArray = function(paramsArray) {
- for (var i = 0; i < paramsArray.length; i++) {
- var o = new KJUR.asn1.x509.GeneralName(paramsArray[i]);
- this.asn1Array.push(o);
- }
- };
-
- this.getEncodedHex = function() {
- var o = new KJUR.asn1.DERSequence({'array': this.asn1Array});
- return o.getEncodedHex();
- };
-
- this.asn1Array = new Array();
- if (typeof paramsArray != "undefined") {
- this.setByParamArray(paramsArray);
- }
-};
-YAHOO.lang.extend(KJUR.asn1.x509.GeneralNames, KJUR.asn1.ASN1Object);
-
-/**
- * DistributionPointName ASN.1 structure class
- * @name KJUR.asn1.x509.DistributionPointName
- * @class DistributionPointName ASN.1 structure class
- * @description
- * @example
- */
-KJUR.asn1.x509.DistributionPointName = function(gnOrRdn) {
- KJUR.asn1.x509.DistributionPointName.superclass.constructor.call(this);
- var asn1Obj = null;
- var type = null;
- var tag = null;
- var asn1V = null;
-
- this.getEncodedHex = function() {
- if (this.type != "full")
- throw "currently type shall be 'full': " + this.type;
- this.asn1Obj = new KJUR.asn1.DERTaggedObject({'explicit': false,
- 'tag': this.tag,
- 'obj': this.asn1V});
- this.hTLV = this.asn1Obj.getEncodedHex();
- return this.hTLV;
- };
-
- if (typeof gnOrRdn != "undefined") {
- if (KJUR.asn1.x509.GeneralNames.prototype.isPrototypeOf(gnOrRdn)) {
- this.type = "full";
- this.tag = "a0";
- this.asn1V = gnOrRdn;
- } else {
- throw "This class supports GeneralNames only as argument";
- }
- }
-};
-YAHOO.lang.extend(KJUR.asn1.x509.DistributionPointName, KJUR.asn1.ASN1Object);
-
-/**
- * DistributionPoint ASN.1 structure class
- * @name KJUR.asn1.x509.DistributionPoint
- * @class DistributionPoint ASN.1 structure class
- * @description
- * @example
- */
-KJUR.asn1.x509.DistributionPoint = function(params) {
- KJUR.asn1.x509.DistributionPoint.superclass.constructor.call(this);
- var asn1DP = null;
-
- this.getEncodedHex = function() {
- var seq = new KJUR.asn1.DERSequence();
- if (this.asn1DP != null) {
- var o1 = new KJUR.asn1.DERTaggedObject({'explicit': true,
- 'tag': 'a0',
- 'obj': this.asn1DP});
- seq.appendASN1Object(o1);
- }
- this.hTLV = seq.getEncodedHex();
- return this.hTLV;
- };
-
- if (typeof params != "undefined") {
- if (typeof params['dpobj'] != "undefined") {
- this.asn1DP = params['dpobj'];
- }
- }
-};
-YAHOO.lang.extend(KJUR.asn1.x509.DistributionPoint, KJUR.asn1.ASN1Object);
-
-/**
- * static object for OID
- * @name KJUR.asn1.x509.OID
- * @class static object for OID
- * @property {Assoc Array} atype2oidList for short attribyte type name and oid (i.e. 'C' and '2.5.4.6')
- * @property {Assoc Array} name2oidList for oid name and oid (i.e. 'keyUsage' and '2.5.29.15')
- * @property {Assoc Array} objCache for caching name and DERObjectIdentifier object
- * @description
- *
- *
- * @example
- */
-KJUR.asn1.x509.OID = new function(params) {
- this.atype2oidList = {
- 'C': '2.5.4.6',
- 'O': '2.5.4.10',
- 'OU': '2.5.4.11',
- 'ST': '2.5.4.8',
- 'L': '2.5.4.7',
- 'CN': '2.5.4.3',
- 'DN': '2.5.4.49',
- 'DC': '0.9.2342.19200300.100.1.25',
- };
- this.name2oidList = {
- 'sha1': '1.3.14.3.2.26',
- 'sha256': '2.16.840.1.101.3.4.2.1',
- 'sha384': '2.16.840.1.101.3.4.2.2',
- 'sha512': '2.16.840.1.101.3.4.2.3',
- 'sha224': '2.16.840.1.101.3.4.2.4',
- 'md5': '1.2.840.113549.2.5',
- 'md2': '1.3.14.7.2.2.1',
- 'ripemd160': '1.3.36.3.2.1',
-
- 'MD2withRSA': '1.2.840.113549.1.1.2',
- 'MD4withRSA': '1.2.840.113549.1.1.3',
- 'MD5withRSA': '1.2.840.113549.1.1.4',
- 'SHA1withRSA': '1.2.840.113549.1.1.5',
- 'SHA224withRSA': '1.2.840.113549.1.1.14',
- 'SHA256withRSA': '1.2.840.113549.1.1.11',
- 'SHA384withRSA': '1.2.840.113549.1.1.12',
- 'SHA512withRSA': '1.2.840.113549.1.1.13',
-
- 'SHA1withECDSA': '1.2.840.10045.4.1',
- 'SHA224withECDSA': '1.2.840.10045.4.3.1',
- 'SHA256withECDSA': '1.2.840.10045.4.3.2',
- 'SHA384withECDSA': '1.2.840.10045.4.3.3',
- 'SHA512withECDSA': '1.2.840.10045.4.3.4',
-
- 'dsa': '1.2.840.10040.4.1',
- 'SHA1withDSA': '1.2.840.10040.4.3',
- 'SHA224withDSA': '2.16.840.1.101.3.4.3.1',
- 'SHA256withDSA': '2.16.840.1.101.3.4.3.2',
-
- 'rsaEncryption': '1.2.840.113549.1.1.1',
-
- 'countryName': '2.5.4.6',
- 'organization': '2.5.4.10',
- 'organizationalUnit': '2.5.4.11',
- 'stateOrProvinceName': '2.5.4.8',
- 'locality': '2.5.4.7',
- 'commonName': '2.5.4.3',
-
- 'subjectKeyIdentifier': '2.5.29.14',
- 'keyUsage': '2.5.29.15',
- 'subjectAltName': '2.5.29.17',
- 'basicConstraints': '2.5.29.19',
- 'nameConstraints': '2.5.29.30',
- 'cRLDistributionPoints':'2.5.29.31',
- 'certificatePolicies': '2.5.29.32',
- 'authorityKeyIdentifier':'2.5.29.35',
- 'policyConstraints': '2.5.29.36',
- 'extKeyUsage': '2.5.29.37',
- 'authorityInfoAccess': '1.3.6.1.5.5.7.1.1',
-
- 'anyExtendedKeyUsage': '2.5.29.37.0',
- 'serverAuth': '1.3.6.1.5.5.7.3.1',
- 'clientAuth': '1.3.6.1.5.5.7.3.2',
- 'codeSigning': '1.3.6.1.5.5.7.3.3',
- 'emailProtection': '1.3.6.1.5.5.7.3.4',
- 'timeStamping': '1.3.6.1.5.5.7.3.8',
- 'ocspSigning': '1.3.6.1.5.5.7.3.9',
-
- 'ecPublicKey': '1.2.840.10045.2.1',
- 'secp256r1': '1.2.840.10045.3.1.7',
- 'secp256k1': '1.3.132.0.10',
- 'secp384r1': '1.3.132.0.34',
-
- 'pkcs5PBES2': '1.2.840.113549.1.5.13',
- 'pkcs5PBKDF2': '1.2.840.113549.1.5.12',
-
- 'des-EDE3-CBC': '1.2.840.113549.3.7',
-
- 'data': '1.2.840.113549.1.7.1', // CMS data
- 'signed-data': '1.2.840.113549.1.7.2', // CMS signed-data
- 'enveloped-data': '1.2.840.113549.1.7.3', // CMS enveloped-data
- 'digested-data': '1.2.840.113549.1.7.5', // CMS digested-data
- 'encrypted-data': '1.2.840.113549.1.7.6', // CMS encrypted-data
- 'authenticated-data': '1.2.840.113549.1.9.16.1.2', // CMS authenticated-data
- 'tstinfo': '1.2.840.113549.1.9.16.1.4', // RFC3161 TSTInfo
- };
-
- this.objCache = {};
-
- /**
- * get DERObjectIdentifier by registered OID name
- * @name name2obj
- * @memberOf KJUR.asn1.x509.OID
- * @function
- * @param {String} name OID
- * @description
- * @example
- * var asn1ObjOID = OID.name2obj('SHA1withRSA');
- */
- this.name2obj = function(name) {
- if (typeof this.objCache[name] != "undefined")
- return this.objCache[name];
- if (typeof this.name2oidList[name] == "undefined")
- throw "Name of ObjectIdentifier not defined: " + name;
- var oid = this.name2oidList[name];
- var obj = new KJUR.asn1.DERObjectIdentifier({'oid': oid});
- this.objCache[name] = obj;
- return obj;
- };
-
- /**
- * get DERObjectIdentifier by registered attribyte type name such like 'C' or 'CN'
- * @name atype2obj
- * @memberOf KJUR.asn1.x509.OID
- * @function
- * @param {String} atype short attribute type name such like 'C' or 'CN'
- * @description
- * @example
- * var asn1ObjOID = OID.atype2obj('CN');
- */
- this.atype2obj = function(atype) {
- if (typeof this.objCache[atype] != "undefined")
- return this.objCache[atype];
- if (typeof this.atype2oidList[atype] == "undefined")
- throw "AttributeType name undefined: " + atype;
- var oid = this.atype2oidList[atype];
- var obj = new KJUR.asn1.DERObjectIdentifier({'oid': oid});
- this.objCache[atype] = obj;
- return obj;
- };
-};
-
-/**
- * convert OID to name
- * @name oid2name
- * @memberOf KJUR.asn1.x509.OID
- * @function
- * @param {String} dot noted Object Identifer string (ex. 1.2.3.4)
- * @return {String} OID name
- * @description
- * This static method converts OID string to its name.
- * If OID is undefined then it returns empty string (i.e. '').
- * @example
- * name = KJUR.asn1.x509.OID.oid2name("1.3.6.1.5.5.7.1.1");
- * // name will be 'authorityInfoAccess'.
- * @since asn1x509 1.0.9
- */
-KJUR.asn1.x509.OID.oid2name = function(oid) {
- var list = KJUR.asn1.x509.OID.name2oidList;
- for (var name in list) {
- if (list[name] == oid) return name;
- }
- return '';
-};
-
-/**
- * convert name to OID
- * @name name2oid
- * @memberOf KJUR.asn1.x509.OID
- * @function
- * @param {String} OID name
- * @return {String} dot noted Object Identifer string (ex. 1.2.3.4)
- * @description
- * This static method converts from OID name to OID string.
- * If OID is undefined then it returns empty string (i.e. '').
- * @example
- * name = KJUR.asn1.x509.OID.name2oid("authorityInfoAccess");
- * // name will be '1.3.6.1.5.5.7.1.1'.
- * @since asn1x509 1.0.11
- */
-KJUR.asn1.x509.OID.name2oid = function(name) {
- var list = KJUR.asn1.x509.OID.name2oidList;
- if (list[name] === undefined) return '';
- return list[name];
-};
-
-/**
- * X.509 certificate and CRL utilities class
- * @name KJUR.asn1.x509.X509Util
- * @class X.509 certificate and CRL utilities class
- */
-KJUR.asn1.x509.X509Util = new function() {
- /**
- * get PKCS#8 PEM public key string from RSAKey object
- * @name getPKCS8PubKeyPEMfromRSAKey
- * @memberOf KJUR.asn1.x509.X509Util
- * @function
- * @param {RSAKey} rsaKey RSA public key of {@link RSAKey} object
- * @description
- * @example
- * var pem = KJUR.asn1.x509.X509Util.getPKCS8PubKeyPEMfromRSAKey(pubKey);
- */
- this.getPKCS8PubKeyPEMfromRSAKey = function(rsaKey) {
- var pem = null;
- var hN = KJUR.asn1.ASN1Util.bigIntToMinTwosComplementsHex(rsaKey.n);
- var hE = KJUR.asn1.ASN1Util.integerToByteHex(rsaKey.e);
- var iN = new KJUR.asn1.DERInteger({hex: hN});
- var iE = new KJUR.asn1.DERInteger({hex: hE});
- var asn1PubKey = new KJUR.asn1.DERSequence({array: [iN, iE]});
- var hPubKey = asn1PubKey.getEncodedHex();
- var o1 = new KJUR.asn1.x509.AlgorithmIdentifier({name: 'rsaEncryption'});
- var o2 = new KJUR.asn1.DERBitString({hex: '00' + hPubKey});
- var seq = new KJUR.asn1.DERSequence({array: [o1, o2]});
- var hP8 = seq.getEncodedHex();
- var pem = KJUR.asn1.ASN1Util.getPEMStringFromHex(hP8, "PUBLIC KEY");
- return pem;
- };
-};
-/**
- * issue a certificate in PEM format
- * @name newCertPEM
- * @memberOf KJUR.asn1.x509.X509Util
- * @function
- * @param {Array} param parameter to issue a certificate
- * @since asn1x509 1.0.6
- * @description
- * This method can issue a certificate by a simple
- * JSON object.
- * Signature value will be provided by signing with
- * private key using 'cakey' parameter or
- * hexa decimal signature value by 'sighex' parameter.
- *
- * NOTE: When using DSA or ECDSA CA signing key,
- * use 'paramempty' in 'sigalg' to ommit parameter field
- * of AlgorithmIdentifer. In case of RSA, parameter
- * NULL will be specified by default.
- *
- * @example
- * var certPEM = KJUR.asn1.x509.X509Util.newCertPEM(
- * { serial: {int: 4},
- * sigalg: {name: 'SHA1withECDSA', paramempty: true},
- * issuer: {str: '/C=US/O=a'},
- * notbefore: {'str': '130504235959Z'},
- * notafter: {'str': '140504235959Z'},
- * subject: {str: '/C=US/O=b'},
- * sbjpubkey: pubKeyPEM,
- * ext: [
- * {basicConstraints: {cA: true, critical: true}},
- * {keyUsage: {bin: '11'}},
- * ],
- * cakey: [prvkey, pass]}
- * );
- * // -- or --
- * var certPEM = KJUR.asn1.x509.X509Util.newCertPEM(
- * { serial: {int: 1},
- * sigalg: {name: 'SHA1withRSA', paramempty: true},
- * issuer: {str: '/C=US/O=T1'},
- * notbefore: {'str': '130504235959Z'},
- * notafter: {'str': '140504235959Z'},
- * subject: {str: '/C=US/O=T1'},
- * sbjpubkey: pubKeyObj,
- * sighex: '0102030405..'}
- * );
- */
-KJUR.asn1.x509.X509Util.newCertPEM = function(param) {
- var ns1 = KJUR.asn1.x509;
- var o = new ns1.TBSCertificate();
-
- if (param.serial !== undefined)
- o.setSerialNumberByParam(param.serial);
- else
- throw "serial number undefined.";
-
- if (typeof param.sigalg.name == 'string')
- o.setSignatureAlgByParam(param.sigalg);
- else
- throw "unproper signature algorithm name";
-
- if (param.issuer !== undefined)
- o.setIssuerByParam(param.issuer);
- else
- throw "issuer name undefined.";
-
- if (param.notbefore !== undefined)
- o.setNotBeforeByParam(param.notbefore);
- else
- throw "notbefore undefined.";
-
- if (param.notafter !== undefined)
- o.setNotAfterByParam(param.notafter);
- else
- throw "notafter undefined.";
-
- if (param.subject !== undefined)
- o.setSubjectByParam(param.subject);
- else
- throw "subject name undefined.";
-
- if (param.sbjpubkey !== undefined)
- o.setSubjectPublicKeyByGetKey(param.sbjpubkey);
- else
- throw "subject public key undefined.";
-
- if (param.ext !== undefined && param.ext.length !== undefined) {
- for (var i = 0; i < param.ext.length; i++) {
- for (key in param.ext[i]) {
- o.appendExtensionByName(key, param.ext[i][key]);
- }
- }
- }
-
- // set signature
- if (param.cakey === undefined && param.sighex === undefined)
- throw "param cakey and sighex undefined.";
-
- var caKey = null;
- var cert = null;
-
- if (param.cakey) {
- caKey = KEYUTIL.getKey.apply(null, param.cakey);
- cert = new ns1.Certificate({'tbscertobj': o, 'prvkeyobj': caKey});
- cert.sign();
- }
-
- if (param.sighex) {
- cert = new ns1.Certificate({'tbscertobj': o});
- cert.setSignatureHex(param.sighex);
- }
-
- return cert.getPEMString();
-};
-
-/*
- org.bouncycastle.asn1.x500
- AttributeTypeAndValue
- DirectoryString
- RDN
- X500Name
- X500NameBuilder
-
- org.bouncycastleasn1.x509
- TBSCertificate
-*/
diff --git a/src/js/lib/jsrasign/base64x-1.1.js b/src/js/lib/jsrasign/base64x-1.1.js
deleted file mode 100755
index a1d6c4bb..00000000
--- a/src/js/lib/jsrasign/base64x-1.1.js
+++ /dev/null
@@ -1,430 +0,0 @@
-/*! base64x-1.1.5 (c) 2012-2015 Kenji Urushima | kjur.github.com/jsjws/license
- */
-/*
- * base64x.js - Base64url and supplementary functions for Tom Wu's base64.js library
- *
- * version: 1.1.5 (2015-Sep-13)
- *
- * Copyright (c) 2012-2015 Kenji Urushima (kenji.urushima@gmail.com)
- *
- * This software is licensed under the terms of the MIT License.
- * http://kjur.github.com/jsjws/license/
- *
- * The above copyright and license notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * DEPENDS ON:
- * - base64.js - Tom Wu's Base64 library
- */
-
-/**
- * @fileOverview
- * @name base64x-1.1.js
- * @author Kenji Urushima kenji.urushima@gmail.com
- * @version asn1 1.1.5 (2015-Sep-13)
- * @since jsrsasign 2.1
- * @license MIT License
- */
-
-/**
- * Base64URL and supplementary functions for Tom Wu's base64.js library.
- * This class is just provide information about global functions
- * defined in 'base64x.js'. The 'base64x.js' script file provides
- * global functions for converting following data each other.
- *
- *
- * All functions in 'base64x.js' are defined in {@link _global_} and not
- * in this class.
- *
- * @class Base64URL and supplementary functions for Tom Wu's base64.js library
- * @author Kenji Urushima
- * @version 1.1 (07 May 2012)
- * @requires base64.js
- * @see 'jwjws'(JWS JavaScript Library) home page http://kjur.github.com/jsjws/
- * @see 'jwrsasign'(RSA Sign JavaScript Library) home page http://kjur.github.com/jsrsasign/
- */
-function Base64x() {
-}
-
-// ==== string / byte array ================================
-/**
- * convert a string to an array of character codes
- * @param {String} s
- * @return {Array of Numbers}
- */
-function stoBA(s) {
- var a = new Array();
- for (var i = 0; i < s.length; i++) {
- a[i] = s.charCodeAt(i);
- }
- return a;
-}
-
-/**
- * convert an array of character codes to a string
- * @param {Array of Numbers} a array of character codes
- * @return {String} s
- */
-function BAtos(a) {
- var s = "";
- for (var i = 0; i < a.length; i++) {
- s = s + String.fromCharCode(a[i]);
- }
- return s;
-}
-
-// ==== byte array / hex ================================
-/**
- * convert an array of bytes(Number) to hexadecimal string.
- * @param {Array of Numbers} a array of bytes
- * @return {String} hexadecimal string
- */
-function BAtohex(a) {
- var s = "";
- for (var i = 0; i < a.length; i++) {
- var hex1 = a[i].toString(16);
- if (hex1.length == 1) hex1 = "0" + hex1;
- s = s + hex1;
- }
- return s;
-}
-
-// ==== string / hex ================================
-/**
- * convert a ASCII string to a hexadecimal string of ASCII codes.
- * NOTE: This can't be used for non ASCII characters.
- * @param {s} s ASCII string
- * @return {String} hexadecimal string
- */
-function stohex(s) {
- return BAtohex(stoBA(s));
-}
-
-// ==== string / base64 ================================
-/**
- * convert a ASCII string to a Base64 encoded string.
- * NOTE: This can't be used for non ASCII characters.
- * @param {s} s ASCII string
- * @return {String} Base64 encoded string
- */
-function stob64(s) {
- return hex2b64(stohex(s));
-}
-
-// ==== string / base64url ================================
-/**
- * convert a ASCII string to a Base64URL encoded string.
- * NOTE: This can't be used for non ASCII characters.
- * @param {s} s ASCII string
- * @return {String} Base64URL encoded string
- */
-function stob64u(s) {
- return b64tob64u(hex2b64(stohex(s)));
-}
-
-/**
- * convert a Base64URL encoded string to a ASCII string.
- * NOTE: This can't be used for Base64URL encoded non ASCII characters.
- * @param {s} s Base64URL encoded string
- * @return {String} ASCII string
- */
-function b64utos(s) {
- return BAtos(b64toBA(b64utob64(s)));
-}
-
-// ==== base64 / base64url ================================
-/**
- * convert a Base64 encoded string to a Base64URL encoded string.
- * Example: "ab+c3f/==" → "ab-c3f_"
- * @param {String} s Base64 encoded string
- * @return {String} Base64URL encoded string
- */
-function b64tob64u(s) {
- s = s.replace(/\=/g, "");
- s = s.replace(/\+/g, "-");
- s = s.replace(/\//g, "_");
- return s;
-}
-
-/**
- * convert a Base64URL encoded string to a Base64 encoded string.
- * Example: "ab-c3f_" → "ab+c3f/=="
- * @param {String} s Base64URL encoded string
- * @return {String} Base64 encoded string
- */
-function b64utob64(s) {
- if (s.length % 4 == 2) s = s + "==";
- else if (s.length % 4 == 3) s = s + "=";
- s = s.replace(/-/g, "+");
- s = s.replace(/_/g, "/");
- return s;
-}
-
-// ==== hex / base64url ================================
-/**
- * convert a hexadecimal string to a Base64URL encoded string.
- * @param {String} s hexadecimal string
- * @return {String} Base64URL encoded string
- * @description
- * convert a hexadecimal string to a Base64URL encoded string.
- * NOTE: If leading "0" is omitted and odd number length for
- * hexadecimal leading "0" is automatically added.
- */
-function hextob64u(s) {
- if (s.length % 2 == 1) s = "0" + s;
- return b64tob64u(hex2b64(s));
-}
-
-/**
- * convert a Base64URL encoded string to a hexadecimal string.
- * @param {String} s Base64URL encoded string
- * @return {String} hexadecimal string
- */
-function b64utohex(s) {
- return b64tohex(b64utob64(s));
-}
-
-var utf8tob64u, b64utoutf8;
-
-if (typeof Buffer === 'function')
-{
- utf8tob64u = function (s)
- {
- return b64tob64u(new Buffer(s, 'utf8').toString('base64'));
- };
-
- b64utoutf8 = function (s)
- {
- return new Buffer(b64utob64(s), 'base64').toString('utf8');
- };
-}
-else
-{
-// ==== utf8 / base64url ================================
-/**
- * convert a UTF-8 encoded string including CJK or Latin to a Base64URL encoded string.
- * @param {String} s UTF-8 encoded string
- * @return {String} Base64URL encoded string
- * @since 1.1
- */
- utf8tob64u = function (s)
- {
- return hextob64u(uricmptohex(encodeURIComponentAll(s)));
- };
-
-/**
- * convert a Base64URL encoded string to a UTF-8 encoded string including CJK or Latin.
- * @param {String} s Base64URL encoded string
- * @return {String} UTF-8 encoded string
- * @since 1.1
- */
- b64utoutf8 = function (s)
- {
- return decodeURIComponent(hextouricmp(b64utohex(s)));
- };
-}
-
-// ==== utf8 / base64url ================================
-/**
- * convert a UTF-8 encoded string including CJK or Latin to a Base64 encoded string.
- * @param {String} s UTF-8 encoded string
- * @return {String} Base64 encoded string
- * @since 1.1.1
- */
-function utf8tob64(s) {
- return hex2b64(uricmptohex(encodeURIComponentAll(s)));
-}
-
-/**
- * convert a Base64 encoded string to a UTF-8 encoded string including CJK or Latin.
- * @param {String} s Base64 encoded string
- * @return {String} UTF-8 encoded string
- * @since 1.1.1
- */
-function b64toutf8(s) {
- return decodeURIComponent(hextouricmp(b64tohex(s)));
-}
-
-// ==== utf8 / hex ================================
-/**
- * convert a UTF-8 encoded string including CJK or Latin to a hexadecimal encoded string.
- * @param {String} s UTF-8 encoded string
- * @return {String} hexadecimal encoded string
- * @since 1.1.1
- */
-function utf8tohex(s) {
- return uricmptohex(encodeURIComponentAll(s));
-}
-
-/**
- * convert a hexadecimal encoded string to a UTF-8 encoded string including CJK or Latin.
- * Note that when input is improper hexadecimal string as UTF-8 string, this function returns
- * 'null'.
- * @param {String} s hexadecimal encoded string
- * @return {String} UTF-8 encoded string or null
- * @since 1.1.1
- */
-function hextoutf8(s) {
- return decodeURIComponent(hextouricmp(s));
-}
-
-/**
- * convert a hexadecimal encoded string to raw string including non printable characters.
- * @param {String} s hexadecimal encoded string
- * @return {String} raw string
- * @since 1.1.2
- * @example
- * hextorstr("610061") → "a\x00a"
- */
-function hextorstr(sHex) {
- var s = "";
- for (var i = 0; i < sHex.length - 1; i += 2) {
- s += String.fromCharCode(parseInt(sHex.substr(i, 2), 16));
- }
- return s;
-}
-
-/**
- * convert a raw string including non printable characters to hexadecimal encoded string.
- * @param {String} s raw string
- * @return {String} hexadecimal encoded string
- * @since 1.1.2
- * @example
- * rstrtohex("a\x00a") → "610061"
- */
-function rstrtohex(s) {
- var result = "";
- for (var i = 0; i < s.length; i++) {
- result += ("0" + s.charCodeAt(i).toString(16)).slice(-2);
- }
- return result;
-}
-
-// ==== hex / b64nl =======================================
-
-/*
- * since base64x 1.1.3
- */
-function hextob64(s) {
- return hex2b64(s);
-}
-
-/*
- * since base64x 1.1.3
- */
-function hextob64nl(s) {
- var b64 = hextob64(s);
- var b64nl = b64.replace(/(.{64})/g, "$1\r\n");
- b64nl = b64nl.replace(/\r\n$/, '');
- return b64nl;
-}
-
-/*
- * since base64x 1.1.3
- */
-function b64nltohex(s) {
- var b64 = s.replace(/[^0-9A-Za-z\/+=]*/g, '');
- var hex = b64tohex(b64);
- return hex;
-}
-
-// ==== URIComponent / hex ================================
-/**
- * convert a URLComponent string such like "%67%68" to a hexadecimal string.
- * @param {String} s URIComponent string such like "%67%68"
- * @return {String} hexadecimal string
- * @since 1.1
- */
-function uricmptohex(s) {
- return s.replace(/%/g, "");
-}
-
-/**
- * convert a hexadecimal string to a URLComponent string such like "%67%68".
- * @param {String} s hexadecimal string
- * @return {String} URIComponent string such like "%67%68"
- * @since 1.1
- */
-function hextouricmp(s) {
- return s.replace(/(..)/g, "%$1");
-}
-
-// ==== URIComponent ================================
-/**
- * convert UTFa hexadecimal string to a URLComponent string such like "%67%68".
- * Note that these "0-9A-Za-z!'()*-._~
" characters will not
- * converted to "%xx" format by builtin 'encodeURIComponent()' function.
- * However this 'encodeURIComponentAll()' function will convert
- * all of characters into "%xx" format.
- * @param {String} s hexadecimal string
- * @return {String} URIComponent string such like "%67%68"
- * @since 1.1
- */
-function encodeURIComponentAll(u8) {
- var s = encodeURIComponent(u8);
- var s2 = "";
- for (var i = 0; i < s.length; i++) {
- if (s[i] == "%") {
- s2 = s2 + s.substr(i, 3);
- i = i + 2;
- } else {
- s2 = s2 + "%" + stohex(s[i]);
- }
- }
- return s2;
-}
-
-// ==== new lines ================================
-/**
- * convert all DOS new line("\r\n") to UNIX new line("\n") in
- * a String "s".
- * @param {String} s string
- * @return {String} converted string
- */
-function newline_toUnix(s) {
- s = s.replace(/\r\n/mg, "\n");
- return s;
-}
-
-/**
- * convert all UNIX new line("\r\n") to DOS new line("\n") in
- * a String "s".
- * @param {String} s string
- * @return {String} converted string
- */
-function newline_toDos(s) {
- s = s.replace(/\r\n/mg, "\n");
- s = s.replace(/\n/mg, "\r\n");
- return s;
-}
-
-// ==== others ================================
-
-/**
- * find index of string where two string differs
- * @param {String} s1 string to compare
- * @param {String} s2 string to compare
- * @return {Number} string index of where character differs. Return -1 if same.
- * @since jsrsasign 4.9.0 base64x 1.1.5
- * @example
- * strdiffidx("abcdefg", "abcd4fg") -> 4
- * strdiffidx("abcdefg", "abcdefg") -> -1
- * strdiffidx("abcdefg", "abcdef") -> 6
- * strdiffidx("abcdefgh", "abcdef") -> 6
- */
-var strdiffidx = function(s1, s2) {
- var n = s1.length;
- if (s1.length > s2.length) n = s2.length;
- for (var i = 0; i < n; i++) {
- if (s1.charCodeAt(i) != s2.charCodeAt(i)) return i;
- }
- if (s1.length != s2.length) return n;
- return -1; // same
-};
diff --git a/src/js/lib/jsrasign/crypto-1.1.js b/src/js/lib/jsrasign/crypto-1.1.js
deleted file mode 100755
index 5bfdeca1..00000000
--- a/src/js/lib/jsrasign/crypto-1.1.js
+++ /dev/null
@@ -1,1136 +0,0 @@
-/*! crypto-1.1.6.js (c) 2013-2015 Kenji Urushima | kjur.github.com/jsrsasign/license
- */
-/*
- * crypto.js - Cryptographic Algorithm Provider class
- *
- * Copyright (c) 2013-2015 Kenji Urushima (kenji.urushima@gmail.com)
- *
- * This software is licensed under the terms of the MIT License.
- * http://kjur.github.com/jsrsasign/license
- *
- * The above copyright and license notice shall be
- * included in all copies or substantial portions of the Software.
- */
-
-/**
- * @fileOverview
- * @name crypto-1.1.js
- * @author Kenji Urushima kenji.urushima@gmail.com
- * @version 1.1.6 (2015-Jun-07)
- * @since jsrsasign 2.2
- * @license MIT License
- */
-
-/**
- * kjur's class library name space
- * @name KJUR
- * @namespace kjur's class library name space
- */
-if (typeof KJUR == "undefined" || !KJUR) KJUR = {};
-/**
- * kjur's cryptographic algorithm provider library name space
- *
- *
- * NOTE: Please ignore method summary and document of this namespace. This caused by a bug of jsdoc2.
- *
{'ecpubhex': '041f..', 'eccurvename': 'secp256r1'}
)
- * {'ecprvhex': '1d3f..', 'eccurvename': 'secp256r1'}
)- * CAUTION: Most of the case, you don't need to use this class. - * Please use {@link KJUR.crypto.Signature} class instead. - *
- *- * This class was originally developped by Recurity Labs GmbH for OpenPGP JavaScript library. - * (See {@link https://github.com/openpgpjs/openpgpjs/blob/master/src/ciphers/asymmetric/dsa.js}) - *
- */ -/* https://github.com/openpgpjs/openpgpjs/blob/master/src/ciphers/asymmetric/dsa.js */ -KJUR.crypto.DSA = function() { - this.p = null; - this.q = null; - this.g = null; - this.y = null; - this.x = null; - this.type = "DSA"; - - //=========================== - // PUBLIC METHODS - //=========================== - - /** - * set DSA private key by key specs - * @name setPrivate - * @memberOf KJUR.crypto.DSA - * @function - * @param {BigInteger} p prime P - * @param {BigInteger} q sub prime Q - * @param {BigInteger} g base G - * @param {BigInteger} y public key Y - * @param {BigInteger} x private key X - * @since dsa-modified 1.0.0 - */ - this.setPrivate = function(p, q, g, y, x) { - this.isPrivate = true; - this.p = p; - this.q = q; - this.g = g; - this.y = y; - this.x = x; - }; - - /** - * set DSA public key by key specs - * @name setPublic - * @memberOf KJUR.crypto.DSA - * @function - * @param {BigInteger} p prime P - * @param {BigInteger} q sub prime Q - * @param {BigInteger} g base G - * @param {BigInteger} y public key Y - * @since dsa-modified 1.0.0 - */ - this.setPublic = function(p, q, g, y) { - this.isPublic = true; - this.p = p; - this.q = q; - this.g = g; - this.y = y; - this.x = null; - }; - - /** - * sign to hashed message by this DSA private key object - * @name signWithMessageHash - * @memberOf KJUR.crypto.DSA - * @function - * @param {String} sHashHex hexadecimal string of hashed message - * @return {String} hexadecimal string of ASN.1 encoded DSA signature value - * @since dsa-modified 1.0.0 - */ - this.signWithMessageHash = function(sHashHex) { - var p = this.p; - var q = this.q; - var g = this.g; - var y = this.y; - var x = this.x; - - // 1. trim message hash - var hashHex = sHashHex.substr(0, q.bitLength() / 4); - var hash = new BigInteger(sHashHex, 16); - - var k = getRandomBigIntegerInRange(BigInteger.ONE.add(BigInteger.ONE), - q.subtract(BigInteger.ONE)); - var s1 = (g.modPow(k,p)).mod(q); - var s2 = (k.modInverse(q).multiply(hash.add(x.multiply(s1)))).mod(q); - - var result = KJUR.asn1.ASN1Util.jsonToASN1HEX({ - 'seq': [{'int': {'bigint': s1}}, {'int': {'bigint': s2}}] - }); - return result; - }; - - /** - * verify signature by this DSA public key object - * @name verifyWithMessageHash - * @memberOf KJUR.crypto.DSA - * @function - * @param {String} sHashHex hexadecimal string of hashed message - * @param {String} hSigVal hexadecimal string of ASN.1 encoded DSA signature value - * @return {Boolean} true if the signature is valid otherwise false. - * @since dsa-modified 1.0.0 - */ - this.verifyWithMessageHash = function(sHashHex, hSigVal) { - var p = this.p; - var q = this.q; - var g = this.g; - var y = this.y; - - // 1. parse ASN.1 signature - var s1s2 = this.parseASN1Signature(hSigVal); - var s1 = s1s2[0]; - var s2 = s1s2[1]; - - // 2. trim message hash - var sHashHex = sHashHex.substr(0, q.bitLength() / 4); - var hash = new BigInteger(sHashHex, 16); - - if (BigInteger.ZERO.compareTo(s1) > 0 || - s1.compareTo(q) > 0 || - BigInteger.ZERO.compareTo(s2) > 0 || - s2.compareTo(q) > 0) { - throw "invalid DSA signature"; - } - var w = s2.modInverse(q); - var u1 = hash.multiply(w).mod(q); - var u2 = s1.multiply(w).mod(q); - var dopublic = g.modPow(u1,p).multiply(y.modPow(u2,p)).mod(p).mod(q); - return dopublic.compareTo(s1) == 0; - }; - - /** - * parse hexadecimal ASN.1 DSA signature value - * @name parseASN1Signature - * @memberOf KJUR.crypto.DSA - * @function - * @param {String} hSigVal hexadecimal string of ASN.1 encoded DSA signature value - * @return {Array} array [s1, s2] of DSA signature value. Both s1 and s2 are BigInteger. - * @since dsa-modified 1.0.0 - */ - this.parseASN1Signature = function(hSigVal) { - try { - var s1 = new BigInteger(ASN1HEX.getVbyList(hSigVal, 0, [0], "02"), 16); - var s2 = new BigInteger(ASN1HEX.getVbyList(hSigVal, 0, [1], "02"), 16); - return [s1, s2]; - } catch (ex) { - throw "malformed DSA signature"; - } - } - - // s1 = ((g**s) mod p) mod q - // s1 = ((s**-1)*(sha-1(m)+(s1*x) mod q) - function sign(hashalgo, m, g, p, q, x) { - // If the output size of the chosen hash is larger than the number of - // bits of q, the hash result is truncated to fit by taking the number - // of leftmost bits equal to the number of bits of q. This (possibly - // truncated) hash function result is treated as a number and used - // directly in the DSA signature algorithm. - - var hashHex = KJUR.crypto.Util.hashString(m, hashalgo.toLowerCase()); - var hashHex = hashHex.substr(0, q.bitLength() / 4); - var hash = new BigInteger(hashHex, 16); - - var k = getRandomBigIntegerInRange(BigInteger.ONE.add(BigInteger.ONE), - q.subtract(BigInteger.ONE)); - var s1 = (g.modPow(k,p)).mod(q); - var s2 = (k.modInverse(q).multiply(hash.add(x.multiply(s1)))).mod(q); - var result = new Array(); - result[0] = s1; - result[1] = s2; - return result; - } - - function select_hash_algorithm(q) { - var usersetting = openpgp.config.config.prefer_hash_algorithm; - /* - * 1024-bit key, 160-bit q, SHA-1, SHA-224, SHA-256, SHA-384, or SHA-512 hash - * 2048-bit key, 224-bit q, SHA-224, SHA-256, SHA-384, or SHA-512 hash - * 2048-bit key, 256-bit q, SHA-256, SHA-384, or SHA-512 hash - * 3072-bit key, 256-bit q, SHA-256, SHA-384, or SHA-512 hash - */ - switch (Math.round(q.bitLength() / 8)) { - case 20: // 1024 bit - if (usersetting != 2 && - usersetting > 11 && - usersetting != 10 && - usersetting < 8) - return 2; // prefer sha1 - return usersetting; - case 28: // 2048 bit - if (usersetting > 11 && - usersetting < 8) - return 11; - return usersetting; - case 32: // 4096 bit // prefer sha224 - if (usersetting > 10 && - usersetting < 8) - return 8; // prefer sha256 - return usersetting; - default: - util.print_debug("DSA select hash algorithm: returning null for an unknown length of q"); - return null; - - } - } - this.select_hash_algorithm = select_hash_algorithm; - - function verify(hashalgo, s1,s2,m,p,q,g,y) { - var hashHex = KJUR.crypto.Util.hashString(m, hashalgo.toLowerCase()); - var hashHex = hashHex.substr(0, q.bitLength() / 4); - var hash = new BigInteger(hashHex, 16); - - if (BigInteger.ZERO.compareTo(s1) > 0 || - s1.compareTo(q) > 0 || - BigInteger.ZERO.compareTo(s2) > 0 || - s2.compareTo(q) > 0) { - util.print_error("invalid DSA Signature"); - return null; - } - var w = s2.modInverse(q); - var u1 = hash.multiply(w).mod(q); - var u2 = s1.multiply(w).mod(q); - var dopublic = g.modPow(u1,p).multiply(y.modPow(u2,p)).mod(p).mod(q); - return dopublic.compareTo(s1) == 0; - } - - /* - * unused code. This can be used as a start to write a key generator - * function. - */ - function generateKey(bitcount) { - var qi = new BigInteger(bitcount, primeCenterie); - var pi = generateP(q, 512); - var gi = generateG(p, q, bitcount); - var xi; - do { - xi = new BigInteger(q.bitCount(), rand); - } while (x.compareTo(BigInteger.ZERO) != 1 && x.compareTo(q) != -1); - var yi = g.modPow(x, p); - return {x: xi, q: qi, p: pi, g: gi, y: yi}; - } - - function generateP(q, bitlength, randomfn) { - if (bitlength % 64 != 0) { - return false; - } - var pTemp; - var pTemp2; - do { - pTemp = randomfn(bitcount, true); - pTemp2 = pTemp.subtract(BigInteger.ONE); - pTemp = pTemp.subtract(pTemp2.remainder(q)); - } while (!pTemp.isProbablePrime(primeCenterie) || pTemp.bitLength() != l); - return pTemp; - } - - function generateG(p, q, bitlength, randomfn) { - var aux = p.subtract(BigInteger.ONE); - var pow = aux.divide(q); - var gTemp; - do { - gTemp = randomfn(bitlength); - } while (gTemp.compareTo(aux) != -1 && gTemp.compareTo(BigInteger.ONE) != 1); - return gTemp.modPow(pow, p); - } - - function generateK(q, bitlength, randomfn) { - var tempK; - do { - tempK = randomfn(bitlength, false); - } while (tempK.compareTo(q) != -1 && tempK.compareTo(BigInteger.ZERO) != 1); - return tempK; - } - - function generateR(q,p) { - k = generateK(q); - var r = g.modPow(k, p).mod(q); - return r; - } - - function generateS(hashfn,k,r,m,q,x) { - var hash = hashfn(m); - s = (k.modInverse(q).multiply(hash.add(x.multiply(r)))).mod(q); - return s; - } - this.sign = sign; - this.verify = verify; - // this.generate = generateKey; - - // - // METHODS FROM - // https://github.com/openpgpjs/openpgpjs/blob/master/src/ciphers/openpgp.crypto.js - // - function getRandomBigIntegerInRange(min, max) { - if (max.compareTo(min) <= 0) - return; - var range = max.subtract(min); - var r = getRandomBigInteger(range.bitLength()); - while (r > range) { - r = getRandomBigInteger(range.bitLength()); - } - return min.add(r); - } - - function getRandomBigInteger(bits) { - if (bits < 0) - return null; - var numBytes = Math.floor((bits+7)/8); - - var randomBits = getRandomBytes(numBytes); - if (bits % 8 > 0) { - randomBits = String.fromCharCode((Math.pow(2,bits % 8)-1) & - randomBits.charCodeAt(0)) + - randomBits.substring(1); - } - return new BigInteger(hexstrdump(randomBits), 16); - } - - function getRandomBytes(length) { - var result = ''; - for (var i = 0; i < length; i++) { - result += String.fromCharCode(getSecureRandomOctet()); - } - return result; - } - - function getSecureRandomOctet() { - var buf = new Uint32Array(1); - window.crypto.getRandomValues(buf); - return buf[0] & 0xFF; - } - - // https://github.com/openpgpjs/openpgpjs/blob/master/src/util/util.js - function hexstrdump(str) { - if (str == null) - return ""; - var r=[]; - var e=str.length; - var c=0; - var h; - while(c- * CAUTION: Most of the case, you don't need to use this class except - * for generating an EC key pair. Please use {@link KJUR.crypto.Signature} class instead. - *
- *- * This class was originally developped by Stefan Thomas for Bitcoin JavaScript library. - * (See {@link https://github.com/bitcoinjs/bitcoinjs-lib/blob/master/src/ecdsa.js}) - * Currently this class supports following named curves and their aliases. - *
=a:return[265,a-11,1];case 14>=a:return[266,a-13,1];case 16>=a:return[267,a-15,1];case 18>=a:return[268,a-17,1];case 22>=a:return[269,a-19,2];case 26>=a:return[270,a-23,2];case 30>=a:return[271,a-27,2];case 34>=a:return[272,
-a-31,2];case 42>=a:return[273,a-35,3];case 50>=a:return[274,a-43,3];case 58>=a:return[275,a-51,3];case 66>=a:return[276,a-59,3];case 82>=a:return[277,a-67,4];case 98>=a:return[278,a-83,4];case 114>=a:return[279,a-99,4];case 130>=a:return[280,a-115,4];case 162>=a:return[281,a-131,5];case 194>=a:return[282,a-163,5];case 226>=a:return[283,a-195,5];case 257>=a:return[284,a-227,5];case 258===a:return[285,a-258,0];default:throw"invalid length: "+a;}}var d=[],c,f;for(c=3;258>=c;c++)f=e(c),d[c]=f[2]<<24|
-f[1]<<16|f[0];return d}(),Ga=C?new Uint32Array(Fa):Fa;
-function na(e,d){function c(a,c){var b=a.g,d=[],f=0,e;e=Ga[a.length];d[f++]=e&65535;d[f++]=e>>16&255;d[f++]=e>>24;var g;switch(u){case 1===b:g=[0,b-1,0];break;case 2===b:g=[1,b-2,0];break;case 3===b:g=[2,b-3,0];break;case 4===b:g=[3,b-4,0];break;case 6>=b:g=[4,b-5,1];break;case 8>=b:g=[5,b-7,1];break;case 12>=b:g=[6,b-9,2];break;case 16>=b:g=[7,b-13,2];break;case 24>=b:g=[8,b-17,3];break;case 32>=b:g=[9,b-25,3];break;case 48>=b:g=[10,b-33,4];break;case 64>=b:g=[11,b-49,4];break;case 96>=b:g=[12,b-
-65,5];break;case 128>=b:g=[13,b-97,5];break;case 192>=b:g=[14,b-129,6];break;case 256>=b:g=[15,b-193,6];break;case 384>=b:g=[16,b-257,7];break;case 512>=b:g=[17,b-385,7];break;case 768>=b:g=[18,b-513,8];break;case 1024>=b:g=[19,b-769,8];break;case 1536>=b:g=[20,b-1025,9];break;case 2048>=b:g=[21,b-1537,9];break;case 3072>=b:g=[22,b-2049,10];break;case 4096>=b:g=[23,b-3073,10];break;case 6144>=b:g=[24,b-4097,11];break;case 8192>=b:g=[25,b-6145,11];break;case 12288>=b:g=[26,b-8193,12];break;case 16384>=
-b:g=[27,b-12289,12];break;case 24576>=b:g=[28,b-16385,13];break;case 32768>=b:g=[29,b-24577,13];break;default:throw"invalid distance";}e=g;d[f++]=e[0];d[f++]=e[1];d[f++]=e[2];var k,m;k=0;for(m=d.length;k >>0;a.o=(e[g++]|
-e[g++]<<8|e[g++]<<16|e[g++]<<24)>>>0;a.w=e[g++]|e[g++]<<8;a.v=w?e.subarray(g,g+a.w):e.slice(g,g+a.w)}d=a.o;h=0;for(k=a.ba;h z)for(;0<
-z--;)I[G++]=0,M[0]++;else for(;0f&&(e=d,f=g);if(258===g)break}return new xa(f,a-e)}
-function ua(b,a){var c=b.length,d=new la(572),e=new (B?Uint8Array:Array)(c),f,g,k,h,l;if(!B)for(h=0;h