keeweb/app/scripts/mixins/protected-value-ex.js

40 lines
1.3 KiB
JavaScript
Raw Normal View History

2016-01-16 15:19:33 +01:00
'use strict';
var kdbxweb = require('kdbxweb');
kdbxweb.ProtectedValue.prototype.isProtected = true;
Object.defineProperty(kdbxweb.ProtectedValue.prototype, 'textLength', {
get: function() {
var textLength = 0;
var value = this._value, salt = this._salt;
for (var i = 0, len = value.length; i < len; i++) {
var b = value[i] ^ salt[i];
if (b < 128) {
textLength++;
} else if (b >= 192 && b < 224 && i+1 < len) {
i++;
textLength++;
} else if (b >= 224 && b < 240 && i+2 < len) {
i += 2;
textLength++;
} else if (b >= 240 && b < 248 && i+3 < len) {
i++; var b1 = value[i] ^ salt[i];
i++; var b2 = value[i] ^ salt[i];
i++; var b3 = value[i] ^ salt[i];
var c = ((b & 7) << 18) | ((b1 & 0x3f) << 12) | ((b2 & 0x3f) << 6) | (b3 & 0x3f);
if (c <= 0xffff) {
textLength++;
} else {
textLength += 2;
}
} else {
2016-01-16 15:20:14 +01:00
textLength++; // skip error
2016-01-16 15:19:33 +01:00
}
}
return textLength;
}
});
module.exports = kdbxweb.ProtectedValue;