summaryrefslogtreecommitdiff
path: root/frontend/beta/js/Clipperz/ByteArray.js
Side-by-side diff
Diffstat (limited to 'frontend/beta/js/Clipperz/ByteArray.js') (more/less context) (ignore whitespace changes)
-rw-r--r--frontend/beta/js/Clipperz/ByteArray.js15
1 files changed, 6 insertions, 9 deletions
diff --git a/frontend/beta/js/Clipperz/ByteArray.js b/frontend/beta/js/Clipperz/ByteArray.js
index 2275087..a69aa43 100644
--- a/frontend/beta/js/Clipperz/ByteArray.js
+++ b/frontend/beta/js/Clipperz/ByteArray.js
@@ -1,408 +1,405 @@
/*
Copyright 2008-2011 Clipperz Srl
-This file is part of Clipperz's Javascript Crypto Library.
-Javascript Crypto Library provides web developers with an extensive
-and efficient set of cryptographic functions. The library aims to
-obtain maximum execution speed while preserving modularity and
-reusability.
+This file is part of Clipperz Community Edition.
+Clipperz Community Edition is an online password manager.
For further information about its features and functionalities please
-refer to http://www.clipperz.com
+refer to http://www.clipperz.com.
-* Javascript Crypto Library is free software: you can redistribute
+* Clipperz Community Edition is free software: you can redistribute
it and/or modify it under the terms of the GNU Affero General Public
License as published by the Free Software Foundation, either version
3 of the License, or (at your option) any later version.
-* Javascript Crypto Library is distributed in the hope that it will
+* Clipperz Community Edition is distributed in the hope that it will
be useful, but WITHOUT ANY WARRANTY; without even the implied
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU Affero General Public License for more details.
* You should have received a copy of the GNU Affero General Public
- License along with Javascript Crypto Library. If not, see
+ License along with Clipperz Community Edition. If not, see
<http://www.gnu.org/licenses/>.
*/
if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
//=============================================================================
Clipperz.ByteArray_abstract = function(args) {
return this;
}
Clipperz.ByteArray_abstract.prototype = MochiKit.Base.update(null, {
//-------------------------------------------------------------------------
'toString': function() {
return "Clipperz.ByteArray_abstract";
},
//-------------------------------------------------------------------------
'equals': function(aValue) {
return (this.compare(aValue) == 0);
},
//-------------------------------------------------------------------------
'compare': function(aValue) {
var result;
var i;
result = MochiKit.Base.compare(this.length(), aValue.length());
i = this.length();
while ((result == 0) && (i>0)) {
i--;
result = MochiKit.Base.compare(this.byteAtIndex(i), aValue.byteAtIndex(i));
}
return result;
},
//-------------------------------------------------------------------------
'clone': function() {
throw Clipperz.Base.exception.AbstractMethod;
},
//-------------------------------------------------------------------------
'newInstance': function() {
throw Clipperz.Base.exception.AbstractMethod;
},
//-------------------------------------------------------------------------
'reset': function() {
throw Clipperz.Base.exception.AbstractMethod;
},
//-------------------------------------------------------------------------
'length': function() {
throw Clipperz.Base.exception.AbstractMethod;
},
//-------------------------------------------------------------------------
'checkValue': function(aValue) {
if ((aValue & 0xff) != aValue) {
MochiKit.Logging.logError("Clipperz.ByteArray.appendByte: the provided value (0x" + aValue.toString(16) + ") is not a byte value.");
throw Clipperz.ByteArray.exception.InvalidValue;
}
},
//-------------------------------------------------------------------------
'xorMergeWithBlock': function(aBlock, anAllignment, paddingMode) {
var result;
var a, b;
var aLength;
var bLength;
var i, c;
if (this.length() > aBlock.length()) {
a = this;
b = aBlock;
} else {
a = aBlock;
b = this;
}
aLength = a.length();
bLength = b.length();
if (aLength != bLength) {
if (paddingMode == 'truncate') {
if (anAllignment == 'left') {
a = a.split(0, bLength);
} else {
a = a.split(aLength - bLength);
}
} else {
var ii, cc;
var padding;
// padding = new Clipperz.ByteArray();
padding = this.newInstance();
cc = aLength - bLength;
for (ii=0; ii<cc; ii++) {
padding.appendByte(0);
}
if (anAllignment == 'left') {
b = b.appendBlock(padding);
} else {
b = padding.appendBlock(b);
}
}
}
// result = new Clipperz.ByteArray();
result = this.newInstance();
c = a.length();
for (i=0; i<c; i++) {
result.appendByte(a.byteAtIndex(i) ^ b.byteAtIndex(i));
}
return result;
},
//-------------------------------------------------------------------------
/*
'shiftLeft': function(aNumberOfBitsToShift) {
var result;
result = this.clone(); // ???????????
return result;
},
*/
//-------------------------------------------------------------------------
'appendBlock': function(aBlock) {
throw Clipperz.Base.exception.AbstractMethod;
},
//-------------------------------------------------------------------------
'appendByte': function(aValue) {
throw Clipperz.Base.exception.AbstractMethod;
},
'appendBytes': function(args) {
var values;
var i,c;
if (args.constructor == Array) {
values = args;
} else {
values = arguments;
}
c = values.length;
for (i=0; i<c; i++) {
this.appendByte(values[i]);
}
return this;
},
//-------------------------------------------------------------------------
'appendWord': function(aValue, isLittleEndian) {
var result;
var processAsLittleEndian;
processAsLittleEndian = isLittleEndian === true ? true : false;
if (processAsLittleEndian) {
result = this.appendBytes( (aValue) & 0xff, (aValue >> 8) & 0xff, (aValue >> 16) & 0xff, (aValue >> 24) & 0xff ); // little endian
} else {
result = this.appendBytes( (aValue >> 24) & 0xff, (aValue >> 16) & 0xff, (aValue >> 8) & 0xff, (aValue) & 0xff ); // big endian - DEFAULT
}
return result;
},
'appendWords': function(args) {
var values;
var i,c;
if (args.constructor == Array) {
values = args;
} else {
values = arguments;
}
c = values.length;
for (i=0; i<c; i++) {
this.appendWord(values[i], false);
}
return this;
},
//-------------------------------------------------------------------------
'appendBigEndianWords': function(args) {
var values;
var i,c;
if (args.constructor == Array) {
values = args;
} else {
values = arguments;
}
c = values.length;
for (i=0; i<c; i++) {
this.appendWord(values[i], true);
}
return this;
},
//-------------------------------------------------------------------------
'byteAtIndex': function(anIndex) {
throw Clipperz.Base.exception.AbstractMethod;
},
'setByteAtIndex': function(aValue, anIndex) {
throw Clipperz.Base.exception.AbstractMethod;
},
//-------------------------------------------------------------------------
'bitAtIndex': function(aBitPosition) {
var result;
var bytePosition;
var bitPositionInSelectedByte;
var selectedByte;
var selectedByteMask;
bytePosition = this.length() - Math.ceil((aBitPosition + 1)/ 8);
bitPositionInSelectedByte = aBitPosition % 8;
selectedByte = this.byteAtIndex(bytePosition);
if (bitPositionInSelectedByte > 0) {
selectedByteMask = (1 << bitPositionInSelectedByte);
} else {
selectedByteMask = 1;
}
result = selectedByte & selectedByteMask ? 1 : 0;
//console.log("aBitPosition: " + aBitPosition + ", length: " + this.length() + ", bytePosition: " + bytePosition + ", bitPositionInSelectedByte: " + bitPositionInSelectedByte + ", selectedByteMask: " + selectedByteMask);
return result;
},
//-------------------------------------------------------------------------
'bitBlockAtIndexWithSize': function(aBitPosition, aSize) {
var result;
var bitValue;
var i,c;
result = 0;
c = aSize;
for (i=0; i<c; i++) {
bitValue = this.bitAtIndex(aBitPosition + i);
result = result | bitValue << i;
}
return result;
},
//-------------------------------------------------------------------------
'asString': function() {
var result;
var length;
var i;
//var startTime = new Date();
//# result = "";
result = [];
i = 0;
length = this.length();
while (i < length) {
var currentCharacter;
var currentByte;
var unicode;
currentByte = this.byteAtIndex(i);
if ((currentByte & 0x80) == 0x00 ) { // 0xxxxxxx
unicode = currentByte;
currentCharacter = String.fromCharCode(unicode);
} else if ((currentByte & 0xe0) == 0xc0 ) { // 110xxxxx 10xxxxxx
unicode = (currentByte & 0x1f) << 6;
i++; currentByte = this.byteAtIndex(i);
unicode = unicode | (currentByte & 0x3f);
currentCharacter = String.fromCharCode(unicode);
} else if ((currentByte & 0xf0) == 0xe0 ) { // 1110xxxx 10xxxxxx 10xxxxxx
unicode = (currentByte & 0x0f) << (6+6);
i++; currentByte = this.byteAtIndex(i);
unicode = unicode | ((currentByte & 0x3f) << 6);
i++; currentByte = this.byteAtIndex(i);
unicode = unicode | (currentByte & 0x3f);
currentCharacter = String.fromCharCode(unicode);
} else { // 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
unicode = (currentByte & 0x07) << (6+6+6);
i++; currentByte = this.byteAtIndex(i);
unicode = unicode | ((currentByte & 0x3f) << (6+6));
i++; currentByte = this.byteAtIndex(i);
unicode = unicode | ((currentByte & 0x3f) << 6);
i++; currentByte = this.byteAtIndex(i);
unicode = unicode | (currentByte & 0x3f);
currentCharacter = String.fromCharCode(unicode);
}
// result += currentCharacter;
result.push(currentCharacter);
i++;
}
//MochiKit.Logging.logDebug("[" + (new Date() - startTime) + "] ByteArray.asString");
// return result;
return result.join("");
},
//-------------------------------------------------------------------------
'toHexString': function() {
throw Clipperz.Base.exception.AbstractMethod;
},
//-------------------------------------------------------------------------
'base64map': "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",
'base64mapIndex': "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(''),
// 'base64mapInvertedIndex': {
// 'A': 0, 'B': 1, 'C': 2, 'D': 3, 'E': 4, 'F': 5, 'G': 6, 'H': 7, 'I': 8, 'J': 9,
// 'K': 10, 'L': 11, 'M': 12, 'N': 13, 'O': 14, 'P': 15, 'Q': 16, 'R': 17, 'S': 18, 'T': 19,
// 'U': 20, 'V': 21, 'W': 22, 'X': 23, 'Y': 24, 'Z': 25, 'a': 26, 'b': 27, 'c': 28, 'd': 29,
// 'e': 30, 'f': 31, 'g': 32, 'h': 33, 'i': 34, 'j': 35, 'k': 36, 'l': 37, 'm': 38, 'n': 39,
// 'o': 40, 'p': 41, 'q': 42, 'r': 43, 's': 44, 't': 45, 'u': 46, 'v': 47, 'w': 48, 'x': 49,
// 'y': 50, 'z': 51, '0': 52, '1': 53, '2': 54, '3': 55, '4': 56, '5': 57, '6': 58, '7': 59,
// '8': 60, '9': 61, '+': 62, '/': 63,
// "=": -1},
//-------------------------------------------------------------------------
'appendBase64String': function(aValue) {
var i;
var length;
length = aValue.length;
if ((length % 4) != 0) {
MochiKit.Logging.logError("the value passed to the 'ByteArray.setBase64Value' is not correct");
throw Clipperz.ByteArray.exception.InvalidValue;
}
i = 0;
while (i<length) {
var value1, value2, value3, value4;
var byte1, byte2, byte3;
value1 = this.base64map.indexOf(aValue.charAt(i));
value2 = this.base64map.indexOf(aValue.charAt(i+1));
value3 = this.base64map.indexOf(aValue.charAt(i+2));
value4 = this.base64map.indexOf(aValue.charAt(i+3));