author | Giulio Cesare Solaroli <giulio.cesare@clipperz.com> | 2013-08-30 15:56:53 (UTC) |
---|---|---|
committer | Giulio Cesare Solaroli <giulio.cesare@clipperz.com> | 2013-08-30 21:23:42 (UTC) |
commit | 20bea94ab6b91c85b171dcf86baba0a64169d508 (patch) (side-by-side diff) | |
tree | 6e38e91498dcdb861620eba1e237d1026fe79cc5 /frontend/delta/js/Clipperz/PM/Toll.js | |
parent | bde3c7b98523112ade9c5bbf7390c4ecb494cd2e (diff) | |
download | clipperz-20bea94ab6b91c85b171dcf86baba0a64169d508.zip clipperz-20bea94ab6b91c85b171dcf86baba0a64169d508.tar.gz clipperz-20bea94ab6b91c85b171dcf86baba0a64169d508.tar.bz2 |
First release of /delta version
Diffstat (limited to 'frontend/delta/js/Clipperz/PM/Toll.js') (more/less context) (show whitespace changes)
-rw-r--r-- | frontend/delta/js/Clipperz/PM/Toll.js | 189 |
1 files changed, 189 insertions, 0 deletions
diff --git a/frontend/delta/js/Clipperz/PM/Toll.js b/frontend/delta/js/Clipperz/PM/Toll.js new file mode 100644 index 0000000..e9c3092 --- a/dev/null +++ b/frontend/delta/js/Clipperz/PM/Toll.js @@ -0,0 +1,189 @@ +/* + +Copyright 2008-2013 Clipperz Srl + +This file is part of Clipperz, the online password manager. +For further information about its features and functionalities please +refer to http://www.clipperz.com. + +* Clipperz 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. + +* Clipperz 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 Clipperz. If not, see http://www.gnu.org/licenses/. + +*/ + +if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } +if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } + +//============================================================================= + +Clipperz.PM.Toll = function(args) { + args = args || {}; + + this._requestType = args.requestType; + this._targetValue = args.targetValue; + this._cost = args.cost; + this._toll = null; + + return this; +} + +Clipperz.PM.Toll.prototype = MochiKit.Base.update(null, { + + 'toString': function() { + return "Clipperz.PM.Toll (" + this.requestType() + ": " + this.cost() + " - " + ((this.toll() == null)? 'UNPAID' : 'PAID') + ")"; + }, + + //------------------------------------------------------------------------- + + 'requestType': function() { + return this._requestType; + }, + + //------------------------------------------------------------------------- + + 'targetValue': function() { + return this._targetValue; + }, + + //------------------------------------------------------------------------- + + 'cost': function() { + return this._cost; + }, + + //------------------------------------------------------------------------- + + 'toll': function() { + return this._toll; + }, + + //------------------------------------------------------------------------- +/* + '__pay': function() { + var result; + var targetData; + var targetMatchSize; + var prefixMatchingBits; + var payment; + var i; + + if (this.toll() == null) { + i = 0; + targetData = new Clipperz.ByteArray("0x" + this.targetValue()); + targetMatchSize = this.cost(); + + payment = Clipperz.Crypto.PRNG.defaultRandomGenerator().getRandomBytes(32); + + do { + var paymentData; + + //payment = Clipperz.Crypto.PRNG.defaultRandomGenerator().getRandomBytes(32); + payment.increment(); + paymentData = Clipperz.Crypto.SHA.sha256(payment); +// prefixMatchingBits = this.prefixMatchingBits(targetData, paymentData); + prefixMatchingBits = Clipperz.ByteArray.prefixMatchingBits(targetData, paymentData); + i++; + } while (prefixMatchingBits < targetMatchSize); + + this._toll = payment.toHexString().substring(2) + } + + return this; + }, +*/ + //------------------------------------------------------------------------- + + 'innerDeferredPay': function (aTargetValue, aCost, aPayment) { + var deferredResult; + var result; + var payment; + var i; + + result = null; + payment = aPayment; + i = 0; + + while ((result == null) && (i < Clipperz.PM.Toll.numberOfCloseLoopIterations)) { + if (Clipperz.ByteArray.prefixMatchingBits(aTargetValue, Clipperz.Crypto.SHA.sha256(payment)) > aCost) { + result = payment; + } else { + payment.increment(); + } + + i ++; + } + + if (result == null) { + deferredResult = MochiKit.Async.callLater(Clipperz.PM.Toll.pauseBetweenEachCloseLoop, MochiKit.Base.method(this, 'innerDeferredPay', aTargetValue, aCost, aPayment)); + } else { + deferredResult = MochiKit.Async.succeed(result); + } + + return deferredResult; + }, + + 'deferredPay': function () { + var deferredResult; + var toll; + + toll = this; + deferredResult = new Clipperz.Async.Deferred("Toll.deferredPay"); +//deferredResult.addLog("--->>> deferredPay - " + this.cost()); + deferredResult.addMethod(Clipperz.Crypto.PRNG.defaultRandomGenerator(), 'getRandomBytes', 32); + deferredResult.addMethod(toll, 'innerDeferredPay', new Clipperz.ByteArray("0x" + this.targetValue()), this.cost()); + deferredResult.addCallback(MochiKit.Base.bind(function(aPayment) { + var result; + + result = { + targetValue: this.targetValue(), + toll: aPayment.toHexString().substr(2) + }; + + return result; + }, this)); +//deferredResult.addLog("<<<--- deferredPay - " + this.cost()); + deferredResult.callback(); + + return deferredResult; + }, + + //========================================================================= + __syntaxFix__: "syntax fix" + +}); + + +Clipperz.PM.Toll.validate = function(aTargetValue, aToll, aCost) { + var result; + var tollValue; + var targetValue; + var hashedTollValue; + var payedToll; + + tollValue = new Clipperz.ByteArray("0x" + aToll); + targetValue = new Clipperz.ByteArray("0x" + aTargetValue); + hashedTollValue = Clipperz.Crypto.SHA.sha256(tollValue); + + payedToll = Clipperz.ByteArray.prefixMatchingBits(targetValue, hashedTollValue); + + if (payedToll < aCost) { + result = false; + } else { + result = true; + } + + return result; +}; + +Clipperz.PM.Toll.numberOfCloseLoopIterations = 50; +Clipperz.PM.Toll.pauseBetweenEachCloseLoop = 0.5;
\ No newline at end of file |