A bit of cleanup and README update

This commit is contained in:
Ugljesa Jovanovic committed 2019-07-20 18:59:37 +02:00
1 parent bebe05757d
commit 7b57a931ef
17 files changed
+821 -766

No files matched your search

+205 -380
View File
@@ -1,6 +1,7 @@
(function (_, Kotlin, $module$bignum, $module$kotlinx_coroutines_core) {
(function (_, Kotlin, $module$bignum) {
'use strict';
var $$importsForInline$$ = _.$$importsForInline$$ || (_.$$importsForInline$$ = {});
var Kind_OBJECT = Kotlin.Kind.OBJECT;
var Kind_INTERFACE = Kotlin.Kind.INTERFACE;
var chunked = Kotlin.kotlin.collections.chunked_ba2ldo$;
var joinToString = Kotlin.kotlin.collections.joinToString_fmv235$;
@@ -13,7 +14,6 @@
var ArrayList_init = Kotlin.kotlin.collections.ArrayList_init_ww73n8$;
var UInt_init = Kotlin.kotlin.UInt;
var ULong_init = Kotlin.kotlin.ULong;
var Unit = Kotlin.kotlin.Unit;
var encodeToByteArray = Kotlin.kotlin.text.encodeToByteArray_pdl1vz$;
var toList = Kotlin.kotlin.collections.toList_7wnvza$;
var UByte = Kotlin.kotlin.UByte;
@@ -21,14 +21,7 @@
var toList_0 = Kotlin.kotlin.collections.toList_us0mfu$;
var IllegalStateException_init = Kotlin.kotlin.IllegalStateException_init_pdl1vj$;
var until = Kotlin.kotlin.ranges.until_dqglrj$;
var Kind_OBJECT = Kotlin.Kind.OBJECT;
var RuntimeException_init = Kotlin.kotlin.RuntimeException_init_pdl1vj$;
var COROUTINE_SUSPENDED = Kotlin.kotlin.coroutines.intrinsics.COROUTINE_SUSPENDED;
var CoroutineImpl = Kotlin.kotlin.coroutines.CoroutineImpl;
var launch = $module$kotlinx_coroutines_core.kotlinx.coroutines.launch_s496o7$;
var Job = $module$kotlinx_coroutines_core.kotlinx.coroutines.Job_5dx9e$;
var coroutines = $module$kotlinx_coroutines_core.kotlinx.coroutines;
var CoroutineScope = $module$kotlinx_coroutines_core.kotlinx.coroutines.CoroutineScope_1fupul$;
var BigInteger = $module$bignum.com.ionspin.kotlin.bignum.integer.BigInteger;
var Kind_CLASS = Kotlin.Kind.CLASS;
var Array_0 = Array;
@@ -41,9 +34,22 @@
var addAll = Kotlin.kotlin.collections.addAll_ipc267$;
var emptyList = Kotlin.kotlin.collections.emptyList_287e2$;
var slice = Kotlin.kotlin.collections.slice_l0m14x$;
var Result = Kotlin.kotlin.Result;
var intercepted = Kotlin.kotlin.coroutines.intrinsics.intercepted_f9mg25$;
var SafeContinuation_init = Kotlin.kotlin.coroutines.SafeContinuation_init_wj8d80$;
function Config() {
Config_instance = this;
this.DEBUG = false;
}
Config.$metadata$ = {
kind: Kind_OBJECT,
simpleName: 'Config',
interfaces: []
};
var Config_instance = null;
function Config_getInstance() {
if (Config_instance === null) {
new Config();
}
return Config_instance;
}
function Hash() {
}
Hash.$metadata$ = {
@@ -169,13 +175,6 @@
return copyToArray(it);
};
});
function suspendCoroutine$lambda(closure$block) {
return function (c) {
var safe = SafeContinuation_init(intercepted(c));
closure$block(safe);
return safe.getOrThrow();
};
}
function Blake2b(key, hashLength) {
Blake2b$Companion_getInstance();
if (key === void 0)
@@ -184,8 +183,6 @@
hashLength = 64;
this.key = key;
this.hashLength = hashLength;
this.job = Job();
this.scope = CoroutineScope(coroutines.Dispatchers.Default.plus_1fupul$(this.job));
this.h = Blake2b$Companion_getInstance().iv_0.slice();
this.counter = BigInteger.Companion.ZERO;
this.bufferCounter = 0;
@@ -232,26 +229,9 @@
this.R3 = 16;
this.R4 = 63;
}
function Blake2b$Companion$mixRound$lambda$lambda(it) {
return it.toUpperCase();
}
Blake2b$Companion.prototype.mixRound_r29y2p$ = function (input, message, round) {
var v = input;
var selectedSigma = this.sigma_0[round % 10];
var $receiver = v;
var destination = ArrayList_init($receiver.length);
var tmp$;
for (tmp$ = 0; tmp$ !== $receiver.length; ++tmp$) {
var item = $receiver[tmp$];
destination.add_11rb$(toString_0(item, 16));
}
var printout = chunked(destination, 3);
var tmp$_0;
tmp$_0 = printout.iterator();
while (tmp$_0.hasNext()) {
var element = tmp$_0.next();
println(joinToString(element, ' ', void 0, void 0, void 0, void 0, Blake2b$Companion$mixRound$lambda$lambda));
}
v = this.mix_0(v, 0, 4, 8, 12, message[selectedSigma[0]], message[selectedSigma[1]]);
v = this.mix_0(v, 1, 5, 9, 13, message[selectedSigma[2]], message[selectedSigma[3]]);
v = this.mix_0(v, 2, 6, 10, 14, message[selectedSigma[4]], message[selectedSigma[5]]);
@@ -330,21 +310,22 @@
accumulator = acc;
}
var m = accumulator;
println('m');
var destination = ArrayList_init(m.length);
var tmp$_3;
for (tmp$_3 = 0; tmp$_3 !== m.length; ++tmp$_3) {
var item = m[tmp$_3];
destination.add_11rb$(toString_0(item, 16));
if (Config_getInstance().DEBUG) {
var destination = ArrayList_init(m.length);
var tmp$_3;
for (tmp$_3 = 0; tmp$_3 !== m.length; ++tmp$_3) {
var item = m[tmp$_3];
destination.add_11rb$(toString_0(item, 16));
}
var printout = chunked(destination, 4);
var tmp$_4;
tmp$_4 = printout.iterator();
while (tmp$_4.hasNext()) {
var element_0 = tmp$_4.next();
println(joinToString(element_0, ' ', void 0, void 0, void 0, void 0, Blake2b$Companion$compress$lambda$lambda));
}
println('Offset ' + offsetCounter);
}
var printout = chunked(destination, 4);
var tmp$_4;
tmp$_4 = printout.iterator();
while (tmp$_4.hasNext()) {
var element_0 = tmp$_4.next();
println(joinToString(element_0, ' ', void 0, void 0, void 0, void 0, Blake2b$Companion$compress$lambda$lambda));
}
println('Offset ' + offsetCounter);
var $this_0 = v[12];
var other_0 = offsetCounter.ulongValue_6taknv$();
v[12] = new ULong_init($this_0.data.xor(other_0.data));
@@ -553,7 +534,7 @@
}
return Blake2b$Companion_instance;
}
Blake2b.prototype.updateBlocking_ummv9a$ = function (array) {
Blake2b.prototype.update_ummv9a$ = function (array) {
if (array.length === 0) {
throw RuntimeException_init('Updating with empty array is not allowed. If you need empty hash, just call digest without updating');
}
@@ -613,7 +594,7 @@
}
}
};
Blake2b.prototype.updateBlocking_61zpoe$ = function (input) {
Blake2b.prototype.update_61zpoe$ = function (input) {
var $receiver = encodeToByteArray(input);
var destination = ArrayList_init($receiver.length);
var tmp$;
@@ -621,7 +602,7 @@
var item = $receiver[tmp$];
destination.add_11rb$(new UByte(item));
}
this.updateBlocking_ummv9a$(copyToArray(destination));
this.update_ummv9a$(copyToArray(destination));
};
Blake2b.prototype.appendToBuffer_0 = function (array, start) {
arrayCopy(array, this.buffer, start, 0, array.length);
@@ -630,183 +611,12 @@
Blake2b.prototype.consumeBlock_0 = function (block) {
this.h = Blake2b$Companion_getInstance().compress_c1cv33$(this.h, block, this.counter, false);
};
function Coroutine$Blake2b$update$lambda$lambda(closure$array_0, this$Blake2b_0, closure$it_0, $receiver_0, controller, continuation_0) {
CoroutineImpl.call(this, continuation_0);
this.$controller = controller;
this.exceptionState_0 = 1;
this.local$closure$array = closure$array_0;
this.local$this$Blake2b = this$Blake2b_0;
this.local$closure$it = closure$it_0;
}
Coroutine$Blake2b$update$lambda$lambda.$metadata$ = {
kind: Kotlin.Kind.CLASS,
simpleName: null,
interfaces: [CoroutineImpl]
};
Coroutine$Blake2b$update$lambda$lambda.prototype = Object.create(CoroutineImpl.prototype);
Coroutine$Blake2b$update$lambda$lambda.prototype.constructor = Coroutine$Blake2b$update$lambda$lambda;
Coroutine$Blake2b$update$lambda$lambda.prototype.doResume = function () {
do
try {
switch (this.state_0) {
case 0:
this.local$this$Blake2b.updateBlocking_ummv9a$(this.local$closure$array);
this.local$closure$it.resumeWith_tl1gpc$(new Result(Unit));
return Unit;
case 1:
throw this.exception_0;
default:this.state_0 = 1;
throw new Error('State Machine Unreachable execution');
}
}
catch (e) {
if (this.state_0 === 1) {
this.exceptionState_0 = this.state_0;
throw e;
}
else {
this.state_0 = this.exceptionState_0;
this.exception_0 = e;
}
}
while (true);
};
function Blake2b$update$lambda$lambda(closure$array_0, this$Blake2b_0, closure$it_0) {
return function ($receiver_0, continuation_0, suspended) {
var instance = new Coroutine$Blake2b$update$lambda$lambda(closure$array_0, this$Blake2b_0, closure$it_0, $receiver_0, this, continuation_0);
if (suspended)
return instance;
else
return instance.doResume(null);
};
}
function Blake2b$update$lambda(this$Blake2b, closure$array) {
return function (it) {
launch(this$Blake2b.scope, this$Blake2b.job, void 0, Blake2b$update$lambda$lambda(closure$array, this$Blake2b, it));
return Unit;
};
}
function Coroutine$update_ummv9a$($this, array_0, continuation_0) {
CoroutineImpl.call(this, continuation_0);
this.exceptionState_0 = 1;
this.$this = $this;
this.local$array = array_0;
}
Coroutine$update_ummv9a$.$metadata$ = {
kind: Kotlin.Kind.CLASS,
simpleName: null,
interfaces: [CoroutineImpl]
};
Coroutine$update_ummv9a$.prototype = Object.create(CoroutineImpl.prototype);
Coroutine$update_ummv9a$.prototype.constructor = Coroutine$update_ummv9a$;
Coroutine$update_ummv9a$.prototype.doResume = function () {
do
try {
switch (this.state_0) {
case 0:
this.state_0 = 2;
this.result_0 = suspendCoroutine$lambda(Blake2b$update$lambda(this.$this, this.local$array))(this);
if (this.result_0 === COROUTINE_SUSPENDED)
return COROUTINE_SUSPENDED;
continue;
case 1:
throw this.exception_0;
case 2:
this.result_0;
return this.result_0;
default:this.state_0 = 1;
throw new Error('State Machine Unreachable execution');
}
}
catch (e) {
if (this.state_0 === 1) {
this.exceptionState_0 = this.state_0;
throw e;
}
else {
this.state_0 = this.exceptionState_0;
this.exception_0 = e;
}
}
while (true);
};
Blake2b.prototype.update_ummv9a$ = function (array_0, continuation_0, suspended) {
var instance = new Coroutine$update_ummv9a$(this, array_0, continuation_0);
if (suspended)
return instance;
else
return instance.doResume(null);
};
function Coroutine$update_61zpoe$($this, input_0, continuation_0) {
CoroutineImpl.call(this, continuation_0);
this.exceptionState_0 = 1;
this.$this = $this;
this.local$input = input_0;
}
Coroutine$update_61zpoe$.$metadata$ = {
kind: Kotlin.Kind.CLASS,
simpleName: null,
interfaces: [CoroutineImpl]
};
Coroutine$update_61zpoe$.prototype = Object.create(CoroutineImpl.prototype);
Coroutine$update_61zpoe$.prototype.constructor = Coroutine$update_61zpoe$;
Coroutine$update_61zpoe$.prototype.doResume = function () {
do
try {
switch (this.state_0) {
case 0:
var $receiver = encodeToByteArray(this.local$input);
var destination = ArrayList_init($receiver.length);
var tmp$;
for (tmp$ = 0; tmp$ !== $receiver.length; ++tmp$) {
var item = $receiver[tmp$];
destination.add_11rb$(new UByte(item));
}
this.state_0 = 2;
this.result_0 = this.$this.update_ummv9a$(copyToArray(destination), this);
if (this.result_0 === COROUTINE_SUSPENDED)
return COROUTINE_SUSPENDED;
continue;
case 1:
throw this.exception_0;
case 2:
return;
default:this.state_0 = 1;
throw new Error('State Machine Unreachable execution');
}
}
catch (e) {
if (this.state_0 === 1) {
this.exceptionState_0 = this.state_0;
throw e;
}
else {
this.state_0 = this.exceptionState_0;
this.exception_0 = e;
}
}
while (true);
};
Blake2b.prototype.update_61zpoe$ = function (input_0, continuation_0, suspended) {
var instance = new Coroutine$update_61zpoe$(this, input_0, continuation_0);
if (suspended)
return instance;
else
return instance.doResume(null);
};
Blake2b.prototype.digest = function () {
var lastBlockPadded = Blake2b$Companion_getInstance().padToBlock_0(this.buffer);
this.counter = this.counter.plus_za3lpa$(this.bufferCounter);
Blake2b$Companion_getInstance().compress_c1cv33$(this.h, lastBlockPadded, this.counter, true);
var result = Blake2b$Companion_getInstance().formatResult_0(this.h);
var destination = ArrayList_init(result.length);
var tmp$;
for (tmp$ = 0; tmp$ !== result.length; ++tmp$) {
var item = result[tmp$];
destination.add_11rb$(toString(item, 16));
}
println(joinToString(destination, ''));
this.reset_0();
return result;
};
Blake2b.prototype.digestString = function () {
@@ -819,6 +629,18 @@
}
return joinToString(destination, '');
};
Blake2b.prototype.reset_0 = function () {
this.h = Blake2b$Companion_getInstance().iv_0.slice();
this.counter = BigInteger.Companion.ZERO;
this.bufferCounter = 0;
var array = Array_0(128);
var tmp$;
tmp$ = array.length - 1 | 0;
for (var i = 0; i <= tmp$; i++) {
array[i] = new UByte(0);
}
this.buffer = array;
};
Blake2b.$metadata$ = {
kind: Kind_CLASS,
simpleName: 'Blake2b',
@@ -852,15 +674,6 @@
});
function Sha256() {
Sha256$Companion_getInstance();
this.h0 = new UInt_init(1779033703);
this.h1 = new UInt_init(-1150833019);
this.h2 = new UInt_init(1013904242);
this.h3 = new UInt_init(-1521486534);
this.h4 = new UInt_init(1359893119);
this.h5 = new UInt_init(-1694144372);
this.h6 = new UInt_init(528734635);
this.h7 = new UInt_init(1541459225);
this.k = [new UInt_init(1116352408), new UInt_init(1899447441), new UInt_init(-1245643825), new UInt_init(-373957723), new UInt_init(961987163), new UInt_init(1508970993), new UInt_init(-1841331548), new UInt_init(-1424204075), new UInt_init(-670586216), new UInt_init(310598401), new UInt_init(607225278), new UInt_init(1426881987), new UInt_init(1925078388), new UInt_init(-2132889090), new UInt_init(-1680079193), new UInt_init(-1046744716), new UInt_init(-459576895), new UInt_init(-272742522), new UInt_init(264347078), new UInt_init(604807628), new UInt_init(770255983), new UInt_init(1249150122), new UInt_init(1555081692), new UInt_init(1996064986), new UInt_init(-1740746414), new UInt_init(-1473132947), new UInt_init(-1341970488), new UInt_init(-1084653625), new UInt_init(-958395405), new UInt_init(-710438585), new UInt_init(113926993), new UInt_init(338241895), new UInt_init(666307205), new UInt_init(773529912), new UInt_init(1294757372), new UInt_init(1396182291), new UInt_init(1695183700), new UInt_init(1986661051), new UInt_init(-2117940946), new UInt_init(-1838011259), new UInt_init(-1564481375), new UInt_init(-1474664885), new UInt_init(-1035236496), new UInt_init(-949202525), new UInt_init(-778901479), new UInt_init(-694614492), new UInt_init(-200395387), new UInt_init(275423344), new UInt_init(430227734), new UInt_init(506948616), new UInt_init(659060556), new UInt_init(883997877), new UInt_init(958139571), new UInt_init(1322822218), new UInt_init(1537002063), new UInt_init(1747873779), new UInt_init(1955562222), new UInt_init(2024104815), new UInt_init(-2067236844), new UInt_init(-1933114872), new UInt_init(-1866530822), new UInt_init(-1538233109), new UInt_init(-1090935817), new UInt_init(-965641998)];
}
function Sha256$Companion() {
Sha256$Companion_instance = this;
@@ -869,21 +682,29 @@
this.UINT_MASK = new UInt_init(-1);
this.BYTE_MASK_FROM_ULONG = new ULong_init(Kotlin.Long.fromInt(255));
this.BYTE_MASK_FROM_UINT = new UInt_init(255);
this.iv = [new UInt_init(1779033703), new UInt_init(-1150833019), new UInt_init(1013904242), new UInt_init(-1521486534), new UInt_init(1359893119), new UInt_init(-1694144372), new UInt_init(528734635), new UInt_init(1541459225)];
this.k = [new UInt_init(1116352408), new UInt_init(1899447441), new UInt_init(-1245643825), new UInt_init(-373957723), new UInt_init(961987163), new UInt_init(1508970993), new UInt_init(-1841331548), new UInt_init(-1424204075), new UInt_init(-670586216), new UInt_init(310598401), new UInt_init(607225278), new UInt_init(1426881987), new UInt_init(1925078388), new UInt_init(-2132889090), new UInt_init(-1680079193), new UInt_init(-1046744716), new UInt_init(-459576895), new UInt_init(-272742522), new UInt_init(264347078), new UInt_init(604807628), new UInt_init(770255983), new UInt_init(1249150122), new UInt_init(1555081692), new UInt_init(1996064986), new UInt_init(-1740746414), new UInt_init(-1473132947), new UInt_init(-1341970488), new UInt_init(-1084653625), new UInt_init(-958395405), new UInt_init(-710438585), new UInt_init(113926993), new UInt_init(338241895), new UInt_init(666307205), new UInt_init(773529912), new UInt_init(1294757372), new UInt_init(1396182291), new UInt_init(1695183700), new UInt_init(1986661051), new UInt_init(-2117940946), new UInt_init(-1838011259), new UInt_init(-1564481375), new UInt_init(-1474664885), new UInt_init(-1035236496), new UInt_init(-949202525), new UInt_init(-778901479), new UInt_init(-694614492), new UInt_init(-200395387), new UInt_init(275423344), new UInt_init(430227734), new UInt_init(506948616), new UInt_init(659060556), new UInt_init(883997877), new UInt_init(958139571), new UInt_init(1322822218), new UInt_init(1537002063), new UInt_init(1747873779), new UInt_init(1955562222), new UInt_init(2024104815), new UInt_init(-2067236844), new UInt_init(-1933114872), new UInt_init(-1866530822), new UInt_init(-1538233109), new UInt_init(-1090935817), new UInt_init(-965641998)];
}
Sha256$Companion.$metadata$ = {
kind: Kind_OBJECT,
simpleName: 'Companion',
interfaces: []
};
var Sha256$Companion_instance = null;
function Sha256$Companion_getInstance() {
if (Sha256$Companion_instance === null) {
new Sha256$Companion();
}
return Sha256$Companion_instance;
}
Sha256.prototype.digest_ummv9a$ = function (message) {
Sha256$Companion.prototype.digest_61zpoe$ = function (message) {
var $receiver = encodeToByteArray(message);
var destination = ArrayList_init($receiver.length);
var tmp$;
for (tmp$ = 0; tmp$ !== $receiver.length; ++tmp$) {
var item = $receiver[tmp$];
destination.add_11rb$(new UByte(item));
}
return this.digest_ummv9a$(copyToArray(destination));
};
Sha256$Companion.prototype.digest_ummv9a$ = function (message) {
var tmp$;
var h0 = {v: new UInt_init(1779033703)};
var h1 = {v: new UInt_init(-1150833019)};
var h2 = {v: new UInt_init(1013904242)};
var h3 = {v: new UInt_init(-1521486534)};
var h4 = {v: new UInt_init(1359893119)};
var h5 = {v: new UInt_init(-1694144372)};
var h6 = {v: new UInt_init(528734635)};
var h7 = {v: new UInt_init(1541459225)};
var originalMessageSizeInBits = message.length * 8 | 0;
var expandedRemainderOf512 = (originalMessageSizeInBits + 65 | 0) % 512;
if (expandedRemainderOf512 === 0)
@@ -961,14 +782,14 @@
var other_2 = w[i_2 - 7 | 0];
w[i_2] = new UInt_init((new UInt_init($this.data + other_2.data | 0)).data + s1.data | 0);
}
var a = this.h0;
var b = this.h1;
var c = this.h2;
var d = this.h3;
var e = this.h4;
var f = this.h5;
var g = this.h6;
var h = this.h7;
var a = h0.v;
var b = h1.v;
var c = h2.v;
var d = h3.v;
var e = h4.v;
var f = h5.v;
var g = h6.v;
var h = h7.v;
for (var i_3 = 0; i_3 < 64; i_3++) {
var s1_0 = this.compressionSigma1_0(e);
var ch = this.ch_0(e, f, g);
@@ -989,102 +810,91 @@
b = a;
a = new UInt_init(temp1.data + temp2.data | 0);
}
var $this_2 = this.h0;
var $this_2 = h0.v;
var other_5 = a;
this.h0 = new UInt_init($this_2.data + other_5.data | 0);
var $this_3 = this.h1;
h0.v = new UInt_init($this_2.data + other_5.data | 0);
var $this_3 = h1.v;
var other_6 = b;
this.h1 = new UInt_init($this_3.data + other_6.data | 0);
var $this_4 = this.h2;
h1.v = new UInt_init($this_3.data + other_6.data | 0);
var $this_4 = h2.v;
var other_7 = c;
this.h2 = new UInt_init($this_4.data + other_7.data | 0);
var $this_5 = this.h3;
h2.v = new UInt_init($this_4.data + other_7.data | 0);
var $this_5 = h3.v;
var other_8 = d;
this.h3 = new UInt_init($this_5.data + other_8.data | 0);
var $this_6 = this.h4;
h3.v = new UInt_init($this_5.data + other_8.data | 0);
var $this_6 = h4.v;
var other_9 = e;
this.h4 = new UInt_init($this_6.data + other_9.data | 0);
var $this_7 = this.h5;
h4.v = new UInt_init($this_6.data + other_9.data | 0);
var $this_7 = h5.v;
var other_10 = f;
this.h5 = new UInt_init($this_7.data + other_10.data | 0);
var $this_8 = this.h6;
h5.v = new UInt_init($this_7.data + other_10.data | 0);
var $this_8 = h6.v;
var other_11 = g;
this.h6 = new UInt_init($this_8.data + other_11.data | 0);
var $this_9 = this.h7;
h6.v = new UInt_init($this_8.data + other_11.data | 0);
var $this_9 = h7.v;
var other_12 = h;
this.h7 = new UInt_init($this_9.data + other_12.data | 0);
h7.v = new UInt_init($this_9.data + other_12.data | 0);
}
var $receiver_0 = this.toPaddedByteArray_1(this.h0);
var elements_0 = this.toPaddedByteArray_1(this.h1);
var $receiver_0 = this.toPaddedByteArray_1(h0.v);
var elements_0 = this.toPaddedByteArray_1(h1.v);
var $receiver_1 = $receiver_0.concat(elements_0);
var elements_1 = this.toPaddedByteArray_1(this.h2);
var elements_1 = this.toPaddedByteArray_1(h2.v);
var $receiver_2 = $receiver_1.concat(elements_1);
var elements_2 = this.toPaddedByteArray_1(this.h3);
var elements_2 = this.toPaddedByteArray_1(h3.v);
var $receiver_3 = $receiver_2.concat(elements_2);
var elements_3 = this.toPaddedByteArray_1(this.h4);
var elements_3 = this.toPaddedByteArray_1(h4.v);
var $receiver_4 = $receiver_3.concat(elements_3);
var elements_4 = this.toPaddedByteArray_1(this.h5);
var elements_4 = this.toPaddedByteArray_1(h5.v);
var $receiver_5 = $receiver_4.concat(elements_4);
var elements_5 = this.toPaddedByteArray_1(this.h6);
var elements_5 = this.toPaddedByteArray_1(h6.v);
var $receiver_6 = $receiver_5.concat(elements_5);
var elements_6 = this.toPaddedByteArray_1(this.h7);
var elements_6 = this.toPaddedByteArray_1(h7.v);
var digest = $receiver_6.concat(elements_6);
this.reset_0();
return digest;
};
Sha256.prototype.reset_0 = function () {
this.h0 = new UInt_init(1779033703);
this.h1 = new UInt_init(-1150833019);
this.h2 = new UInt_init(1013904242);
this.h3 = new UInt_init(-1521486534);
this.h4 = new UInt_init(1359893119);
this.h5 = new UInt_init(-1694144372);
this.h6 = new UInt_init(528734635);
this.h7 = new UInt_init(1541459225);
};
Sha256.prototype.scheduleSigma0_0 = function (value) {
Sha256$Companion.prototype.scheduleSigma0_0 = function (value) {
var $this = rotateRight(value, 7);
var other = rotateRight(value, 18);
var tmp$ = new UInt_init($this.data ^ other.data);
var other_0 = new UInt_init(value.data >>> 3);
return new UInt_init(tmp$.data ^ other_0.data);
};
Sha256.prototype.scheduleSigma1_0 = function (value) {
Sha256$Companion.prototype.scheduleSigma1_0 = function (value) {
var $this = rotateRight(value, 17);
var other = rotateRight(value, 19);
var tmp$ = new UInt_init($this.data ^ other.data);
var other_0 = new UInt_init(value.data >>> 10);
return new UInt_init(tmp$.data ^ other_0.data);
};
Sha256.prototype.compressionSigma0_0 = function (a) {
Sha256$Companion.prototype.compressionSigma0_0 = function (a) {
var $this = rotateRight(a, 2);
var other = rotateRight(a, 13);
var $this_0 = new UInt_init($this.data ^ other.data);
var other_0 = rotateRight(a, 22);
return new UInt_init($this_0.data ^ other_0.data);
};
Sha256.prototype.compressionSigma1_0 = function (e) {
Sha256$Companion.prototype.compressionSigma1_0 = function (e) {
var $this = rotateRight(e, 6);
var other = rotateRight(e, 11);
var $this_0 = new UInt_init($this.data ^ other.data);
var other_0 = rotateRight(e, 25);
return new UInt_init($this_0.data ^ other_0.data);
};
Sha256.prototype.ch_0 = function (x, y, z) {
Sha256$Companion.prototype.ch_0 = function (x, y, z) {
var tmp$ = new UInt_init(x.data & y.data);
var other = Sha256$Companion_getInstance().UINT_MASK;
var other = this.UINT_MASK;
var other_0 = new UInt_init((new UInt_init(x.data ^ other.data)).data & z.data);
return new UInt_init(tmp$.data ^ other_0.data);
};
Sha256.prototype.maj_0 = function (x, y, z) {
Sha256$Companion.prototype.maj_0 = function (x, y, z) {
var tmp$ = new UInt_init(x.data & y.data);
var other = new UInt_init(x.data & z.data);
var tmp$_0 = new UInt_init(tmp$.data ^ other.data);
var other_0 = new UInt_init(y.data & z.data);
return new UInt_init(tmp$_0.data ^ other_0.data);
};
Sha256.prototype.toPaddedByteArray_0 = function ($receiver) {
var byteMask = Sha256$Companion_getInstance().BYTE_MASK_FROM_ULONG;
Sha256$Companion.prototype.toPaddedByteArray_0 = function ($receiver) {
var byteMask = this.BYTE_MASK_FROM_ULONG;
var array = Array_0(8);
var tmp$;
tmp$ = array.length - 1 | 0;
@@ -1124,8 +934,8 @@
}
return array;
};
Sha256.prototype.toPaddedByteArray_1 = function ($receiver) {
var byteMask = Sha256$Companion_getInstance().BYTE_MASK_FROM_UINT;
Sha256$Companion.prototype.toPaddedByteArray_1 = function ($receiver) {
var byteMask = this.BYTE_MASK_FROM_UINT;
var array = Array_0(4);
var tmp$;
tmp$ = array.length - 1 | 0;
@@ -1153,10 +963,22 @@
}
return array;
};
Sha256$Companion.$metadata$ = {
kind: Kind_OBJECT,
simpleName: 'Companion',
interfaces: []
};
var Sha256$Companion_instance = null;
function Sha256$Companion_getInstance() {
if (Sha256$Companion_instance === null) {
new Sha256$Companion();
}
return Sha256$Companion_instance;
}
Sha256.$metadata$ = {
kind: Kind_CLASS,
simpleName: 'Sha256',
interfaces: []
interfaces: [Hash]
};
var chunked$lambda_1 = wrapFunction(function () {
var copyToArray = Kotlin.kotlin.collections.copyToArray;
@@ -1166,35 +988,34 @@
});
function Sha512() {
Sha512$Companion_getInstance();
this.h0 = new ULong_init(new Kotlin.Long(-205731576, 1779033703));
this.h1 = new ULong_init(new Kotlin.Long(-2067093701, -1150833019));
this.h2 = new ULong_init(new Kotlin.Long(-23791573, 1013904242));
this.h3 = new ULong_init(new Kotlin.Long(1595750129, -1521486534));
this.h4 = new ULong_init(new Kotlin.Long(-1377402159, 1359893119));
this.h5 = new ULong_init(new Kotlin.Long(725511199, -1694144372));
this.h6 = new ULong_init(new Kotlin.Long(-79577749, 528734635));
this.h7 = new ULong_init(new Kotlin.Long(327033209, 1541459225));
}
function Sha512$Companion() {
Sha512$Companion_instance = this;
this.BLOCK_SIZE = 1024;
this.ULONG_MASK = new ULong_init(Kotlin.Long.NEG_ONE);
this.k = [new ULong_init(new Kotlin.Long(-685199838, 1116352408)), new ULong_init(new Kotlin.Long(602891725, 1899447441)), new ULong_init(new Kotlin.Long(-330482897, -1245643825)), new ULong_init(new Kotlin.Long(-2121671748, -373957723)), new ULong_init(new Kotlin.Long(-213338824, 961987163)), new ULong_init(new Kotlin.Long(-1241133031, 1508970993)), new ULong_init(new Kotlin.Long(-1357295717, -1841331548)), new ULong_init(new Kotlin.Long(-630357736, -1424204075)), new ULong_init(new Kotlin.Long(-1560083902, -670586216)), new ULong_init(new Kotlin.Long(1164996542, 310598401)), new ULong_init(new Kotlin.Long(1323610764, 607225278)), new ULong_init(new Kotlin.Long(-704662302, 1426881987)), new ULong_init(new Kotlin.Long(-226784913, 1925078388)), new ULong_init(new Kotlin.Long(991336113, -2132889090)), new ULong_init(new Kotlin.Long(633803317, -1680079193)), new ULong_init(new Kotlin.Long(-815192428, -1046744716)), new ULong_init(new Kotlin.Long(-1628353838, -459576895)), new ULong_init(new Kotlin.Long(944711139, -272742522)), new ULong_init(new Kotlin.Long(-1953704523, 264347078)), new ULong_init(new Kotlin.Long(2007800933, 604807628)), new ULong_init(new Kotlin.Long(1495990901, 770255983)), new ULong_init(new Kotlin.Long(1856431235, 1249150122)), new ULong_init(new Kotlin.Long(-1119749164, 1555081692)), new ULong_init(new Kotlin.Long(-2096016459, 1996064986)), new ULong_init(new Kotlin.Long(-295247957, -1740746414)), new ULong_init(new Kotlin.Long(766784016, -1473132947)), new ULong_init(new Kotlin.Long(-1728372417, -1341970488)), new ULong_init(new Kotlin.Long(-1091629340, -1084653625)), new ULong_init(new Kotlin.Long(1034457026, -958395405)), new ULong_init(new Kotlin.Long(-1828018395, -710438585)), new ULong_init(new Kotlin.Long(-536640913, 113926993)), new ULong_init(new Kotlin.Long(168717936, 338241895)), new ULong_init(new Kotlin.Long(1188179964, 666307205)), new ULong_init(new Kotlin.Long(1546045734, 773529912)), new ULong_init(new Kotlin.Long(1522805485, 1294757372)), new ULong_init(new Kotlin.Long(-1651133473, 1396182291)), new ULong_init(new Kotlin.Long(-1951439906, 1695183700)), new ULong_init(new Kotlin.Long(1014477480, 1986661051)), new ULong_init(new Kotlin.Long(1206759142, -2117940946)), new ULong_init(new Kotlin.Long(344077627, -1838011259)), new ULong_init(new Kotlin.Long(1290863460, -1564481375)), new ULong_init(new Kotlin.Long(-1136513023, -1474664885)), new ULong_init(new Kotlin.Long(-789014639, -1035236496)), new ULong_init(new Kotlin.Long(106217008, -949202525)), new ULong_init(new Kotlin.Long(-688958952, -778901479)), new ULong_init(new Kotlin.Long(1432725776, -694614492)), new ULong_init(new Kotlin.Long(1467031594, -200395387)), new ULong_init(new Kotlin.Long(851169720, 275423344)), new ULong_init(new Kotlin.Long(-1194143544, 430227734)), new ULong_init(new Kotlin.Long(1363258195, 506948616)), new ULong_init(new Kotlin.Long(-544281703, 659060556)), new ULong_init(new Kotlin.Long(-509917016, 883997877)), new ULong_init(new Kotlin.Long(-976659869, 958139571)), new ULong_init(new Kotlin.Long(-482243893, 1322822218)), new ULong_init(new Kotlin.Long(2003034995, 1537002063)), new ULong_init(new Kotlin.Long(-692930397, 1747873779)), new ULong_init(new Kotlin.Long(1575990012, 1955562222)), new ULong_init(new Kotlin.Long(1125592928, 2024104815)), new ULong_init(new Kotlin.Long(-1578062990, -2067236844)), new ULong_init(new Kotlin.Long(442776044, -1933114872)), new ULong_init(new Kotlin.Long(593698344, -1866530822)), new ULong_init(new Kotlin.Long(-561857047, -1538233109)), new ULong_init(new Kotlin.Long(-1295615723, -1090935817)), new ULong_init(new Kotlin.Long(-479046869, -965641998)), new ULong_init(new Kotlin.Long(-366583396, -903397682)), new ULong_init(new Kotlin.Long(566280711, -779700025)), new ULong_init(new Kotlin.Long(-840897762, -354779690)), new ULong_init(new Kotlin.Long(-294727304, -176337025)), new ULong_init(new Kotlin.Long(1914138554, 116418474)), new ULong_init(new Kotlin.Long(-1563912026, 174292421)), new ULong_init(new Kotlin.Long(-1090974290, 289380356)), new ULong_init(new Kotlin.Long(320620315, 460393269)), new ULong_init(new Kotlin.Long(587496836, 685471733)), new ULong_init(new Kotlin.Long(1086792851, 852142971)), new ULong_init(new Kotlin.Long(365543100, 1017036298)), new ULong_init(new Kotlin.Long(-1676669620, 1126000580)), new ULong_init(new Kotlin.Long(-885112138, 1288033470)), new ULong_init(new Kotlin.Long(-60457430, 1501505948)), new ULong_init(new Kotlin.Long(987167468, 1607167915)), new ULong_init(new Kotlin.Long(1246189591, 1816402316))];
this.iv = [new ULong_init(new Kotlin.Long(-205731576, 1779033703)), new ULong_init(new Kotlin.Long(-2067093701, -1150833019)), new ULong_init(new Kotlin.Long(-23791573, 1013904242)), new ULong_init(new Kotlin.Long(1595750129, -1521486534)), new ULong_init(new Kotlin.Long(-1377402159, 1359893119)), new ULong_init(new Kotlin.Long(725511199, -1694144372)), new ULong_init(new Kotlin.Long(-79577749, 528734635)), new ULong_init(new Kotlin.Long(327033209, 1541459225))];
}
Sha512$Companion.$metadata$ = {
kind: Kind_OBJECT,
simpleName: 'Companion',
interfaces: []
};
var Sha512$Companion_instance = null;
function Sha512$Companion_getInstance() {
if (Sha512$Companion_instance === null) {
new Sha512$Companion();
}
return Sha512$Companion_instance;
}
Sha512.prototype.digest_ummv9a$ = function (message) {
Sha512$Companion.prototype.digest_61zpoe$ = function (message) {
var $receiver = encodeToByteArray(message);
var destination = ArrayList_init($receiver.length);
var tmp$;
for (tmp$ = 0; tmp$ !== $receiver.length; ++tmp$) {
var item = $receiver[tmp$];
destination.add_11rb$(new UByte(item));
}
return this.digest_ummv9a$(copyToArray(destination));
};
Sha512$Companion.prototype.digest_ummv9a$ = function (message) {
var tmp$;
var h0 = {v: new ULong_init(new Kotlin.Long(-205731576, 1779033703))};
var h1 = {v: new ULong_init(new Kotlin.Long(-2067093701, -1150833019))};
var h2 = {v: new ULong_init(new Kotlin.Long(-23791573, 1013904242))};
var h3 = {v: new ULong_init(new Kotlin.Long(1595750129, -1521486534))};
var h4 = {v: new ULong_init(new Kotlin.Long(-1377402159, 1359893119))};
var h5 = {v: new ULong_init(new Kotlin.Long(725511199, -1694144372))};
var h6 = {v: new ULong_init(new Kotlin.Long(-79577749, 528734635))};
var h7 = {v: new ULong_init(new Kotlin.Long(327033209, 1541459225))};
var originalMessageSizeInBits = message.length * 8 | 0;
var expandedRemainderOf1024 = (originalMessageSizeInBits + 129 | 0) % 1024;
if (expandedRemainderOf1024 === 0)
@@ -1288,19 +1109,19 @@
var other_6 = w[i_2 - 7 | 0];
w[i_2] = new ULong_init((new ULong_init($this_7.data.add(other_6.data))).data.add(s1.data));
}
var a = this.h0;
var b = this.h1;
var c = this.h2;
var d = this.h3;
var e = this.h4;
var f = this.h5;
var g = this.h6;
var h = this.h7;
var a = h0.v;
var b = h1.v;
var c = h2.v;
var d = h3.v;
var e = h4.v;
var f = h5.v;
var g = h6.v;
var h = h7.v;
for (var i_3 = 0; i_3 < 80; i_3++) {
var s1_0 = this.compressionSigma1_0(e);
var ch = this.ch_0(e, f, g);
var $this_8 = new ULong_init((new ULong_init(h.data.add(s1_0.data))).data.add(ch.data));
var other_7 = Sha512$Companion_getInstance().k[i_3];
var other_7 = this.k[i_3];
var $this_9 = new ULong_init($this_8.data.add(other_7.data));
var other_8 = w[i_3];
var temp1 = new ULong_init($this_9.data.add(other_8.data));
@@ -1316,101 +1137,90 @@
b = a;
a = new ULong_init(temp1.data.add(temp2.data));
}
var $this_10 = this.h0;
var $this_10 = h0.v;
var other_9 = a;
this.h0 = new ULong_init($this_10.data.add(other_9.data));
var $this_11 = this.h1;
h0.v = new ULong_init($this_10.data.add(other_9.data));
var $this_11 = h1.v;
var other_10 = b;
this.h1 = new ULong_init($this_11.data.add(other_10.data));
var $this_12 = this.h2;
h1.v = new ULong_init($this_11.data.add(other_10.data));
var $this_12 = h2.v;
var other_11 = c;
this.h2 = new ULong_init($this_12.data.add(other_11.data));
var $this_13 = this.h3;
h2.v = new ULong_init($this_12.data.add(other_11.data));
var $this_13 = h3.v;
var other_12 = d;
this.h3 = new ULong_init($this_13.data.add(other_12.data));
var $this_14 = this.h4;
h3.v = new ULong_init($this_13.data.add(other_12.data));
var $this_14 = h4.v;
var other_13 = e;
this.h4 = new ULong_init($this_14.data.add(other_13.data));
var $this_15 = this.h5;
h4.v = new ULong_init($this_14.data.add(other_13.data));
var $this_15 = h5.v;
var other_14 = f;
this.h5 = new ULong_init($this_15.data.add(other_14.data));
var $this_16 = this.h6;
h5.v = new ULong_init($this_15.data.add(other_14.data));
var $this_16 = h6.v;
var other_15 = g;
this.h6 = new ULong_init($this_16.data.add(other_15.data));
var $this_17 = this.h7;
h6.v = new ULong_init($this_16.data.add(other_15.data));
var $this_17 = h7.v;
var other_16 = h;
this.h7 = new ULong_init($this_17.data.add(other_16.data));
h7.v = new ULong_init($this_17.data.add(other_16.data));
}
var $receiver_0 = this.toPaddedByteArray_0(this.h0);
var elements_0 = this.toPaddedByteArray_0(this.h1);
var $receiver_0 = this.toPaddedByteArray_0(h0.v);
var elements_0 = this.toPaddedByteArray_0(h1.v);
var $receiver_1 = $receiver_0.concat(elements_0);
var elements_1 = this.toPaddedByteArray_0(this.h2);
var elements_1 = this.toPaddedByteArray_0(h2.v);
var $receiver_2 = $receiver_1.concat(elements_1);
var elements_2 = this.toPaddedByteArray_0(this.h3);
var elements_2 = this.toPaddedByteArray_0(h3.v);
var $receiver_3 = $receiver_2.concat(elements_2);
var elements_3 = this.toPaddedByteArray_0(this.h4);
var elements_3 = this.toPaddedByteArray_0(h4.v);
var $receiver_4 = $receiver_3.concat(elements_3);
var elements_4 = this.toPaddedByteArray_0(this.h5);
var elements_4 = this.toPaddedByteArray_0(h5.v);
var $receiver_5 = $receiver_4.concat(elements_4);
var elements_5 = this.toPaddedByteArray_0(this.h6);
var elements_5 = this.toPaddedByteArray_0(h6.v);
var $receiver_6 = $receiver_5.concat(elements_5);
var elements_6 = this.toPaddedByteArray_0(this.h7);
var elements_6 = this.toPaddedByteArray_0(h7.v);
var digest = $receiver_6.concat(elements_6);
this.reset_0();
return digest;
};
Sha512.prototype.reset_0 = function () {
this.h0 = new ULong_init(new Kotlin.Long(-205731576, 1779033703));
this.h1 = new ULong_init(new Kotlin.Long(-2067093701, -1150833019));
this.h2 = new ULong_init(new Kotlin.Long(-23791573, 1013904242));
this.h3 = new ULong_init(new Kotlin.Long(1595750129, -1521486534));
this.h4 = new ULong_init(new Kotlin.Long(-1377402159, 1359893119));
this.h5 = new ULong_init(new Kotlin.Long(725511199, -1694144372));
this.h6 = new ULong_init(new Kotlin.Long(-79577749, 528734635));
this.h7 = new ULong_init(new Kotlin.Long(327033209, 1541459225));
};
Sha512.prototype.scheduleSigma0_0 = function (value) {
Sha512$Companion.prototype.scheduleSigma0_0 = function (value) {
var $this = rotateRight_0(value, 1);
var other = rotateRight_0(value, 8);
var tmp$ = new ULong_init($this.data.xor(other.data));
var other_0 = new ULong_init(value.data.shiftRightUnsigned(7));
return new ULong_init(tmp$.data.xor(other_0.data));
};
Sha512.prototype.scheduleSigma1_0 = function (value) {
Sha512$Companion.prototype.scheduleSigma1_0 = function (value) {
var $this = rotateRight_0(value, 19);
var other = rotateRight_0(value, 61);
var tmp$ = new ULong_init($this.data.xor(other.data));
var other_0 = new ULong_init(value.data.shiftRightUnsigned(6));
return new ULong_init(tmp$.data.xor(other_0.data));
};
Sha512.prototype.compressionSigma0_0 = function (e) {
Sha512$Companion.prototype.compressionSigma0_0 = function (e) {
var $this = rotateRight_0(e, 28);
var other = rotateRight_0(e, 34);
var $this_0 = new ULong_init($this.data.xor(other.data));
var other_0 = rotateRight_0(e, 39);
return new ULong_init($this_0.data.xor(other_0.data));
};
Sha512.prototype.compressionSigma1_0 = function (a) {
Sha512$Companion.prototype.compressionSigma1_0 = function (a) {
var $this = rotateRight_0(a, 14);
var other = rotateRight_0(a, 18);
var $this_0 = new ULong_init($this.data.xor(other.data));
var other_0 = rotateRight_0(a, 41);
return new ULong_init($this_0.data.xor(other_0.data));
};
Sha512.prototype.ch_0 = function (x, y, z) {
Sha512$Companion.prototype.ch_0 = function (x, y, z) {
var tmp$ = new ULong_init(x.data.and(y.data));
var other = Sha512$Companion_getInstance().ULONG_MASK;
var other = this.ULONG_MASK;
var other_0 = new ULong_init((new ULong_init(x.data.xor(other.data))).data.and(z.data));
return new ULong_init(tmp$.data.xor(other_0.data));
};
Sha512.prototype.maj_0 = function (x, y, z) {
Sha512$Companion.prototype.maj_0 = function (x, y, z) {
var tmp$ = new ULong_init(x.data.and(y.data));
var other = new ULong_init(x.data.and(z.data));
var tmp$_0 = new ULong_init(tmp$.data.xor(other.data));
var other_0 = new ULong_init(y.data.and(z.data));
return new ULong_init(tmp$_0.data.xor(other_0.data));
};
Sha512.prototype.toPaddedByteArray_0 = function ($receiver) {
Sha512$Companion.prototype.toPaddedByteArray_0 = function ($receiver) {
var byteMask = new ULong_init(Kotlin.Long.fromInt(255));
var array = Array_0(8);
var tmp$;
@@ -1452,7 +1262,7 @@
}
return array;
};
Sha512.prototype.toPadded128BitByteArray_0 = function ($receiver) {
Sha512$Companion.prototype.toPadded128BitByteArray_0 = function ($receiver) {
var byteMask = new ULong_init(Kotlin.Long.fromInt(255));
var array = Array_0(16);
var tmp$;
@@ -1494,15 +1304,30 @@
}
return array;
};
Sha512$Companion.$metadata$ = {
kind: Kind_OBJECT,
simpleName: 'Companion',
interfaces: []
};
var Sha512$Companion_instance = null;
function Sha512$Companion_getInstance() {
if (Sha512$Companion_instance === null) {
new Sha512$Companion();
}
return Sha512$Companion_instance;
}
Sha512.$metadata$ = {
kind: Kind_CLASS,
simpleName: 'Sha512',
interfaces: []
interfaces: [Hash]
};
var package$com = _.com || (_.com = {});
var package$ionspin = package$com.ionspin || (package$com.ionspin = {});
var package$kotlin = package$ionspin.kotlin || (package$ionspin.kotlin = {});
var package$crypto = package$kotlin.crypto || (package$kotlin.crypto = {});
Object.defineProperty(package$crypto, 'Config', {
get: Config_getInstance
});
package$crypto.Hash = Hash;
package$crypto.UpdateableHash = UpdateableHash;
package$crypto.hexColumsPrint_mgx7ee$ = hexColumsPrint;
@@ -1528,6 +1353,6 @@
package$sha.Sha512 = Sha512;
Kotlin.defineModule('crypto-core', _);
return _;
}(module.exports, require('kotlin'), require('bignum'), require('kotlinx-coroutines-core')));
}(module.exports, require('kotlin'), require('bignum')));
//# sourceMappingURL=crypto-core.js.map
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"crypto-core.js","sources":["kotlin/text/numberConversions.kt","generated/_Arrays.kt","kotlin/UInt.kt","kotlin/ULong.kt","arrayUtils.kt","kotlin/UByte.kt","kotlin/collections.kt","generated/_Collections.kt","generated/_ArraysJs.kt","coroutines/Continuation.kt","../../../../../src/commonMain/kotlin/com/ionspin/kotlin/crypto/Util.kt","kotlin/text/string.kt","collections/Collections.kt","util/Standard.kt","../../../../../src/commonMain/kotlin/com/ionspin/kotlin/crypto/blake2b/Blake2b.kt","collections/Arrays.kt","kotlin/kotlin.kt","util/Result.kt","../../../../../../../../../../../dummy.kt","../../../../../src/commonMain/kotlin/com/ionspin/kotlin/crypto/sha/Sha256.kt","../../../../../src/commonMain/kotlin/com/ionspin/kotlin/crypto/sha/Sha512.kt"],"sourcesContent":[null,null,null,null,null,"/*\n * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\n// Auto-generated file. DO NOT EDIT!\n\npackage kotlin\n\nimport kotlin.experimental.*\n\n@Suppress(\"NON_PUBLIC_PRIMARY_CONSTRUCTOR_OF_INLINE_CLASS\")\n@SinceKotlin(\"1.3\")\n@ExperimentalUnsignedTypes\npublic inline class UByte @PublishedApi internal constructor(@PublishedApi internal val data: Byte) : Comparable<UByte> {\n\n companion object {\n /**\n * A constant holding the minimum value an instance of UByte can have.\n */\n public const val MIN_VALUE: UByte = UByte(0)\n\n /**\n * A constant holding the maximum value an instance of UByte can have.\n */\n public const val MAX_VALUE: UByte = UByte(-1)\n\n /**\n * The number of bytes used to represent an instance of UByte in a binary form.\n */\n public const val SIZE_BYTES: Int = 1\n\n /**\n * The number of bits used to represent an instance of UByte in a binary form.\n */\n public const val SIZE_BITS: Int = 8\n }\n\n /**\n * Compares this value with the specified value for order.\n * Returns zero if this value is equal to the specified other value, a negative number if it's less than other,\n * or a positive number if it's greater than other.\n */\n @kotlin.internal.InlineOnly\n @Suppress(\"OVERRIDE_BY_INLINE\")\n public override inline operator fun compareTo(other: UByte): Int = this.toInt().compareTo(other.toInt())\n\n /**\n * Compares this value with the specified value for order.\n * Returns zero if this value is equal to the specified other value, a negative number if it's less than other,\n * or a positive number if it's greater than other.\n */\n @kotlin.internal.InlineOnly\n public inline operator fun compareTo(other: UShort): Int = this.toInt().compareTo(other.toInt())\n\n /**\n * Compares this value with the specified value for order.\n * Returns zero if this value is equal to the specified other value, a negative number if it's less than other,\n * or a positive number if it's greater than other.\n */\n @kotlin.internal.InlineOnly\n public inline operator fun compareTo(other: UInt): Int = this.toUInt().compareTo(other)\n\n /**\n * Compares this value with the specified value for order.\n * Returns zero if this value is equal to the specified other value, a negative number if it's less than other,\n * or a positive number if it's greater than other.\n */\n @kotlin.internal.InlineOnly\n public inline operator fun compareTo(other: ULong): Int = this.toULong().compareTo(other)\n\n /** Adds the other value to this value. */\n @kotlin.internal.InlineOnly\n public inline operator fun plus(other: UByte): UInt = this.toUInt().plus(other.toUInt())\n /** Adds the other value to this value. */\n @kotlin.internal.InlineOnly\n public inline operator fun plus(other: UShort): UInt = this.toUInt().plus(other.toUInt())\n /** Adds the other value to this value. */\n @kotlin.internal.InlineOnly\n public inline operator fun plus(other: UInt): UInt = this.toUInt().plus(other)\n /** Adds the other value to this value. */\n @kotlin.internal.InlineOnly\n public inline operator fun plus(other: ULong): ULong = this.toULong().plus(other)\n\n /** Subtracts the other value from this value. */\n @kotlin.internal.InlineOnly\n public inline operator fun minus(other: UByte): UInt = this.toUInt().minus(other.toUInt())\n /** Subtracts the other value from this value. */\n @kotlin.internal.InlineOnly\n public inline operator fun minus(other: UShort): UInt = this.toUInt().minus(other.toUInt())\n /** Subtracts the other value from this value. */\n @kotlin.internal.InlineOnly\n public inline operator fun minus(other: UInt): UInt = this.toUInt().minus(other)\n /** Subtracts the other value from this value. */\n @kotlin.internal.InlineOnly\n public inline operator fun minus(oLine truncated
{"version":3,"file":"crypto-core.js","sources":["kotlin/text/numberConversions.kt","generated/_Arrays.kt","kotlin/UInt.kt","kotlin/ULong.kt","arrayUtils.kt","kotlin/UByte.kt","kotlin/collections.kt","generated/_Collections.kt","generated/_ArraysJs.kt","../../../../../src/commonMain/kotlin/com/ionspin/kotlin/crypto/Config.kt","../../../../../src/commonMain/kotlin/com/ionspin/kotlin/crypto/Util.kt","kotlin/text/string.kt","collections/Collections.kt","util/Standard.kt","../../../../../src/commonMain/kotlin/com/ionspin/kotlin/crypto/blake2b/Blake2b.kt","collections/Arrays.kt","kotlin/kotlin.kt","../../../../../src/commonMain/kotlin/com/ionspin/kotlin/crypto/sha/Sha256.kt","../../../../../src/commonMain/kotlin/com/ionspin/kotlin/crypto/sha/Sha512.kt"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":[],"mappings":";;;;;;;;;;;;mBAiGA,mC;uBCm9QA,gD;kBC95QI,kB;mBCAA,mB;;;;;;;;;;;gBCzIJ,K;aC4NiE,wB;oBC3NjE,qC;gCC2wCA,yD;kBC5wBA,mC;eH5OA,a;yBE45BA,+C;eAOA,wC;;;;IElrCA,sB;IAMI,aAAkB,K;EANtB,C;;;;;;;;IAAA,6B;MAAA,Y;;IAAA,sB;EAAA,C;;;;;;;;;;;;;;;;ICOkE,OAAA,ECmJE,c;EDnJe,C;;ITkiRxE,kBAAM,eSniRE,STmiRW,OAAb,C;IA6UA,Q;IAAb,wBSh3Re,STg3Rf,gB;MAAa,WSh3RE,STg3Rf,M;MACI,WAAY,WDjyRsD,WCiyRxC,IDjyRwC,EUhFhC,EVgFgC,CCiyRtD,C;;ISj3RhB,eAA4C,QTk3RrC,WSl3RqC,EAAQ,EAAR,C;IHyhD5B,U;IAAA,SGxhDhB,QHwhDgB,W;IAAhB,OAAgB,gBAAhB,C;MAAgB,2B;MGxhDG,QAAW,aHwhDD,OGxhDC,EAAyB,GAAzB,kCAA8B,4BAA9B,CAAX,C;;EACvB,C;;IAIkE,OAAA,EC8IE,c;ED9Ie,C;;IT6hRxE,kBAAM,eS9hRE,ST8hRW,OAAb,C;IA6UA,Q;IAAb,wBS32Re,ST22Rf,gB;MAAa,WS32RE,ST22Rf,M;MACI,WAAY,WS52Ra,ST42RC,IS52RD,EAAS,EAAT,CT42Rb,C;;IS52RhB,eAA4C,QT62RrC,WS72RqC,EAAQ,EAAR,C;IHohD5B,U;IAAA,SGnhDhB,QHmhDgB,W;IAAhB,OAAgB,gBAAhB,C;MAAgB,2B;MGnhDG,QAAW,aHmhDD,OGnhDC,EAAyB,GAAzB,kCAA8B,8BAA9B,CAAX,C;;EACvB,C;;IAIkE,OAAA,ECyIE,c;EDzIe,C;;ITwhRxE,kBAAM,eSzhRE,STyhRW,OAAb,C;IA6UA,Q;IAAb,wBSt2Re,STs2Rf,gB;MAAa,WSt2RE,STs2Rf,M;MACI,WAAY,WSv2Ra,WTu2RC,ISv2RD,EAAS,EAAT,CTu2Rb,C;;ISv2RhB,eAA4C,QTw2RrC,WSx2RqC,EAAQ,CAAR,C;IH+gD5B,U;IAAA,SG9gDhB,QH8gDgB,W;IAAhB,OAAgB,gBAAhB,C;MAAgB,2B;MG9gDG,QAAW,aH8gDD,OG9gDC,EAAyB,GAAzB,kCAA8B,8BAA9B,CAAX,C;;EACvB,C;gGAEA,yB;IAAA,0D;IAAA,sC;IAAA,8C;IAAA,mD;IEgGA,qE;ILmpCA,uF;ID3wCA,uD;IIwBA,qBAesB,yB;MJvCtB,uD;;QIuCwB,OJtC8C,YIsC9C,EJtC8C,C;MIsC5B,C;KAApB,C;IAftB,iD;MACI,WAAW,SAAK,OAAL,GAAY,S;MACvB,cAAc,SAAQ,C;MACtB,qBAAqB,SAAK,OAAL,GAAY,SAAZ,I;MEqGrB,WAAW,eFlG8C,CEkG9C,C;MCOX,iBAAc,CAAd,UHzGyD,CGyGzD,U;QDN6B,eFnGiC,WEmGjC,C;;MFnG7B,aEoGO,I;MFlGP,aAAU,CAAV,MAAkB,cAAlB,M;QACI,MAAO,WAAS,MAAL,SAAK,EAAM,qBAAI,SAAJ,GAAoB,YAAC,IAAI,CAAJ,IAAD,EAAU,SAAV,CAApB,CAAN,CAAT,C;;MAEX,IAAI,OAAJ,C;QACI,MAAO,WAAS,MAAL,SAAK,EAAM,kCAAiB,SAAjB,GAAiC,SAAK,OAAtC,CAAN,CAAT,C;;MH8uCJ,kBAAM,eAAa,wBG3uCnB,MH2uCmB,EAAwB,EAAxB,CAAb,C;MAqEA,Q;MAAA,OGhzCN,MHgzCM,W;MAAb,OAAa,cAAb,C;QAAa,sB;QACT,WAAY,WDv1CkD,YCu1CpC,IDv1CoC,CCu1ClD,C;;MGjzChB,OJtCkE,YCw1C3D,WDx1C2D,C;IIwCtE,C;GAjBA,C;;IAqBY,WR6F2C,cQ7F3C,SR6FgD,UQ7FvC,MR6FkC,C;IQ7FrB,eAAU,KAAK,MAAL,I;IAAjC,YR0F4C,cQ1FrB,SR0F0B,SAAS,QAAd,C;IQ1FnD,ORsGiD,cAAU,SAAL,GAAc,KAAM,KAAzB,C;EQrGrD,C;;IAIY,WPwF4C,eOxF5C,SPwFkD,yBOxFzC,MPwFyC,CAAN,C;IOxFtB,eAAU,KAAK,MAAL,I;IAAjC,YPqF6C,eOrFtB,SPqF4B,gBAAS,QAAT,CAAN,C;IOrFpD,OPiGmD,eAAW,SAAL,KAAc,KAAM,KAApB,CAAN,C;EOhGvD,C;EA3BA,qBAesB,yB;IJvCtB,uD;;MIuCwB,OJtC8C,YIsC9C,EJtC8C,C;IIsC5B,C;GAApB,C;;IIpBlB,+B;IADU,mB;MAAA,MAAyB,I;IAAM,0B;MAAA,aAAsB,E;IAArD,c;IAA+B,4B;IAwNzC,SAAQ,oCNofgB,Q;IMnfxB,eAAc,oBAAW,K;IACzB,qBAAoB,C;IV5OmC,YAAa,QU6O1C,GV7O0C,C;IAIvD,Q;IAAA,OAAA,KAAM,OAAN,GAAa,CAAb,I;IAAb,aAAU,CAAV,iB;MACI,MAAM,CAAN,IUwOqC,Y;;IAAzC,cVtOO,K;IU0O+B,4BAA3B,M;IAAA,mBAAE,CAAF,C;IAAA,YAAS,6C;IAAT,SX9FwC,eAAW,UAAL,KAAc,KAAM,KAApB,CAAN,C;IW8Fb,iDX1Gc,eAAM,CAyJrB,eAAW,oBW/CC,aX+CD,CAAX,CAzJqB,iBW0GU,CX1GV,CAAN,CW0Gd,4BAAqC,gC;IAAvE,mB;IAAO,aX9FwC,eAAW,WAAL,KAAoB,WAApB,CAAN,C;IW8F4C,gBAAX,e;IAAzE,cX+C0B,eAAW,oBAAL,SAAK,CAAX,C;IW/CjC,OAAE,CAAF,IX9F+C,eAAW,WAAL,KAAc,OAAM,KAApB,CAAN,C;IWgGtC,kBAAJ,Q;IC5MF,gC;IAAA,Y;MAAqB,SAAL,Wd0sMhB,YAAQ,C;;Ia9/LX,IAAI,CC5MR,MD4MI,C;MACI,sBAAe,6CAAW,QAAX,CAAf,EAAgC,kBAAhC,C;;EAlOC,C;;IACT,iC;IAEI,oBAAyB,E;IACzB,0BAA+B,E;IAC/B,mBAAwB,G;IACxB,sBAA2B,E;IAC3B,sBAA2B,C;IAC3B,qBAA0B,E;IAC1B,qBAA0B,C;IAC1B,uBAAwB,aAAF,CAAE,CAAF,aAAqB,GAArB,C;IAEtB,eAAoB,CAChB,CAAQ,CAAR,EAAW,CAAX,EAAc,CAAd,EAAiB,CAAjB,EAAoB,CAApB,EAAuB,CAAvB,EAA0B,CAA1B,EAA6B,CAA7B,EAAgC,CAAhC,EAAmC,CAAnC,EAAsC,EAAtC,EAA0C,EAA1C,EAA8C,EAA9C,EAAkD,EAAlD,EAAsD,EAAtD,EAA0D,EAA1D,CADgB,EAEhB,CAAQ,EAAR,EAAY,EAAZ,EAAgB,CAAhB,EAAmB,CAAnB,EAAsB,CAAtB,EAAyB,EAAzB,EAA6B,EAA7B,EAAiC,CAAjC,EAAoC,CAApC,EAAuC,EAAvC,EAA2C,CAA3C,EAA8C,CAA9C,EAAiD,EAAjD,EAAqD,CAArD,EAAwD,CAAxD,EAA2D,CAA3D,CAFgB,EAGhB,CAAQ,EAAR,EAAY,CAAZ,EAAe,EAAf,EAAmB,CAAnB,EAAsB,CAAtB,EAAyB,CAAzB,EAA4B,EAA5B,EAAgC,EAAhC,EAAoC,EAApC,EAAwC,EAAxC,EAA4C,CAA5C,EAA+C,CAA/C,EAAkD,CAAlD,EAAqD,CAArD,EAAwD,CAAxD,EAA2D,CAA3D,CAHgB,EAIhB,CAAQ,CAAR,EAAW,CAAX,EAAc,CAAd,EAAiB,CAAjB,EAAoB,EAApB,EAAwB,EAAxB,EAA4B,EAA5B,EAAgC,EAAhC,EAAoC,CAApC,EAAuC,CAAvC,EAA0C,CAA1C,EAA6C,EAA7C,EAAiD,CAAjD,EAAoD,CAApD,EAAuD,EAAvD,EAA2D,CAA3D,CAJgB,EAKhBLine truncated
+1 -1
View File
@@ -1 +1 @@
// Kotlin.kotlin_module_metadata(393729, "crypto-core", "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");
// Kotlin.kotlin_module_metadata(393729, "crypto-core", "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");
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,26 @@
/*
* Copyright 2019 Ugljesa Jovanovic
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.ionspin.kotlin.crypto
/**
* Created by Ugljesa Jovanovic
* ugljesa.jovanovic@ionspin.com
* on 20-Jul-2019
*/
object Config {
const val DEBUG = false
}
@@ -28,7 +28,7 @@ import kotlinx.coroutines.Job
* ugljesa.jovanovic@ionspin.com
* on 14-Jul-2019
*/
@ExperimentalStdlibApi
@ExperimentalUnsignedTypes
class Blake2b(val key: Array<UByte>? = null, val hashLength: Int = 64) : UpdateableHash {
companion object : Hash {
@@ -75,8 +75,6 @@ class Blake2b(val key: Array<UByte>? = null, val hashLength: Int = 64) : Updatea
internal fun mixRound(input: Array<ULong>, message: Array<ULong>, round: Int): Array<ULong> {
var v = input
val selectedSigma = sigma[round % 10]
val printout = v.map { it.toString(16) }.chunked(3)
printout.forEach { println(it.joinToString(separator = " ") { it.toUpperCase() }) }
v = mix(v, 0, 4, 8, 12, message[selectedSigma[0]], message[selectedSigma[1]])
v = mix(v, 1, 5, 9, 13, message[selectedSigma[2]], message[selectedSigma[3]])
v = mix(v, 2, 6, 10, 14, message[selectedSigma[4]], message[selectedSigma[5]])
@@ -120,11 +118,11 @@ class Blake2b(val key: Array<UByte>? = null, val hashLength: Int = 64) : Updatea
acc[slot] = acc[slot] + (byte.toULong() shl ((position) * 8))
acc
}
println("m")
val printout = m.map { it.toString(16) }.chunked(4)
printout.forEach { println(it.joinToString(separator = " ") { it.toUpperCase() }) }
println("Offset ${offsetCounter}")
if (Config.DEBUG) {
val printout = m.map { it.toString(16) }.chunked(4)
printout.forEach { println(it.joinToString(separator = " ") { it.toUpperCase() }) }
println("Offset ${offsetCounter}")
}
v[12] = v[12] xor offsetCounter.ulongValue()
v[13] = v[13] xor (offsetCounter shr BITS_IN_WORD).ulongValue()
@@ -144,7 +142,7 @@ class Blake2b(val key: Array<UByte>? = null, val hashLength: Int = 64) : Updatea
return h
}
@ExperimentalStdlibApi
fun digest(inputString: String, key: String? = null): Array<UByte> {
val chunked = inputString.encodeToByteArray().map { it.toUByte() }.toList().chunked(BLOCK_BYTES)
.map { it.toTypedArray() }.toTypedArray()
@@ -239,7 +237,7 @@ class Blake2b(val key: Array<UByte>? = null, val hashLength: Int = 64) : Updatea
}
}
@ExperimentalStdlibApi
constructor(
key: String?,
requestedHashLenght: Int = 64
@@ -248,10 +246,6 @@ class Blake2b(val key: Array<UByte>? = null, val hashLength: Int = 64) : Updatea
requestedHashLenght
)
var job = Job()
val scope = CoroutineScope(Dispatchers.Default + job)
var h = iv.copyOf()
var counter = BigInteger.ZERO
var bufferCounter = 0
@@ -306,7 +300,7 @@ class Blake2b(val key: Array<UByte>? = null, val hashLength: Int = 64) : Updatea
}
}
@ExperimentalStdlibApi
fun update(input: String) {
update(input.encodeToByteArray().map { it.toUByte() }.toTypedArray())
}
@@ -326,7 +320,7 @@ class Blake2b(val key: Array<UByte>? = null, val hashLength: Int = 64) : Updatea
compress(h, lastBlockPadded, counter, true)
val result = formatResult(h)
println(result.map { it.toString(16) }.joinToString(separator = ""))
reset()
return result
}
@@ -335,6 +329,13 @@ class Blake2b(val key: Array<UByte>? = null, val hashLength: Int = 64) : Updatea
return digest().map { it.toString(16) }.joinToString(separator = "")
}
private fun reset() {
h = iv.copyOf()
counter = BigInteger.ZERO
bufferCounter = 0
buffer = Array<UByte>(BLOCK_BYTES) { 0U }
}
}
@@ -16,6 +16,7 @@
package com.ionspin.kotlin.crypto.sha
import com.ionspin.kotlin.crypto.Hash
import com.ionspin.kotlin.crypto.chunked
import com.ionspin.kotlin.crypto.rotateRight
@@ -26,8 +27,10 @@ import com.ionspin.kotlin.crypto.rotateRight
* on 17-Jul-2019
*/
@ExperimentalUnsignedTypes
class Sha256() {
class Sha256() : Hash {
companion object {
const val BLOCK_SIZE = 512
const val W_SIZE = 64
@@ -35,181 +38,185 @@ class Sha256() {
const val BYTE_MASK_FROM_ULONG = 0xFFUL
const val BYTE_MASK_FROM_UINT = 0xFFU
}
val iv = arrayOf(
0x6a09e667U,
0xbb67ae85U,
0x3c6ef372U,
0xa54ff53aU,
0x510e527fU,
0x9b05688cU,
0x1f83d9abU,
0x5be0cd19U
)
var h0 = 0x6a09e667U
var h1 = 0xbb67ae85U
var h2 = 0x3c6ef372U
var h3 = 0xa54ff53aU
var h4 = 0x510e527fU
var h5 = 0x9b05688cU
var h6 = 0x1f83d9abU
var h7 = 0x5be0cd19U
val k = arrayOf(
0x428a2f98U, 0x71374491U, 0xb5c0fbcfU, 0xe9b5dba5U, 0x3956c25bU, 0x59f111f1U, 0x923f82a4U, 0xab1c5ed5U,
0xd807aa98U, 0x12835b01U, 0x243185beU, 0x550c7dc3U, 0x72be5d74U, 0x80deb1feU, 0x9bdc06a7U, 0xc19bf174U,
0xe49b69c1U, 0xefbe4786U, 0x0fc19dc6U, 0x240ca1ccU, 0x2de92c6fU, 0x4a7484aaU, 0x5cb0a9dcU, 0x76f988daU,
0x983e5152U, 0xa831c66dU, 0xb00327c8U, 0xbf597fc7U, 0xc6e00bf3U, 0xd5a79147U, 0x06ca6351U, 0x14292967U,
0x27b70a85U, 0x2e1b2138U, 0x4d2c6dfcU, 0x53380d13U, 0x650a7354U, 0x766a0abbU, 0x81c2c92eU, 0x92722c85U,
0xa2bfe8a1U, 0xa81a664bU, 0xc24b8b70U, 0xc76c51a3U, 0xd192e819U, 0xd6990624U, 0xf40e3585U, 0x106aa070U,
0x19a4c116U, 0x1e376c08U, 0x2748774cU, 0x34b0bcb5U, 0x391c0cb3U, 0x4ed8aa4aU, 0x5b9cca4fU, 0x682e6ff3U,
0x748f82eeU, 0x78a5636fU, 0x84c87814U, 0x8cc70208U, 0x90befffaU, 0xa4506cebU, 0xbef9a3f7U, 0xc67178f2U
)
val k = arrayOf(
0x428a2f98U, 0x71374491U, 0xb5c0fbcfU, 0xe9b5dba5U, 0x3956c25bU, 0x59f111f1U, 0x923f82a4U, 0xab1c5ed5U,
0xd807aa98U, 0x12835b01U, 0x243185beU, 0x550c7dc3U, 0x72be5d74U, 0x80deb1feU, 0x9bdc06a7U, 0xc19bf174U,
0xe49b69c1U, 0xefbe4786U, 0x0fc19dc6U, 0x240ca1ccU, 0x2de92c6fU, 0x4a7484aaU, 0x5cb0a9dcU, 0x76f988daU,
0x983e5152U, 0xa831c66dU, 0xb00327c8U, 0xbf597fc7U, 0xc6e00bf3U, 0xd5a79147U, 0x06ca6351U, 0x14292967U,
0x27b70a85U, 0x2e1b2138U, 0x4d2c6dfcU, 0x53380d13U, 0x650a7354U, 0x766a0abbU, 0x81c2c92eU, 0x92722c85U,
0xa2bfe8a1U, 0xa81a664bU, 0xc24b8b70U, 0xc76c51a3U, 0xd192e819U, 0xd6990624U, 0xf40e3585U, 0x106aa070U,
0x19a4c116U, 0x1e376c08U, 0x2748774cU, 0x34b0bcb5U, 0x391c0cb3U, 0x4ed8aa4aU, 0x5b9cca4fU, 0x682e6ff3U,
0x748f82eeU, 0x78a5636fU, 0x84c87814U, 0x8cc70208U, 0x90befffaU, 0xa4506cebU, 0xbef9a3f7U, 0xc67178f2U
)
fun digest(message: Array<UByte>) : Array<UByte> {
val originalMessageSizeInBits = message.size * 8
//K such that L + 1 + K + 64 is a multiple of 512
val expandedRemainderOf512 = (originalMessageSizeInBits + 65) % BLOCK_SIZE
val zeroAddAmount = when (expandedRemainderOf512) {
0 -> 0
else -> (BLOCK_SIZE - expandedRemainderOf512) / 8
@ExperimentalStdlibApi
fun digest(message : String) : Array<UByte> {
return digest(message.encodeToByteArray().map { it.toUByte() }.toTypedArray())
}
val expansionArray = Array<UByte>(zeroAddAmount + 1) {
when (it) {
0 -> 0b10000000U //TODO This wont work if there the byte needs to be shared with the L (length) ULong
else -> 0U
fun digest(message: Array<UByte>) : Array<UByte> {
var h0 = 0x6a09e667U
var h1 = 0xbb67ae85U
var h2 = 0x3c6ef372U
var h3 = 0xa54ff53aU
var h4 = 0x510e527fU
var h5 = 0x9b05688cU
var h6 = 0x1f83d9abU
var h7 = 0x5be0cd19U
val originalMessageSizeInBits = message.size * 8
//K such that L + 1 + K + 64 is a multiple of 512
val expandedRemainderOf512 = (originalMessageSizeInBits + 65) % BLOCK_SIZE
val zeroAddAmount = when (expandedRemainderOf512) {
0 -> 0
else -> (BLOCK_SIZE - expandedRemainderOf512) / 8
}
}
val chunks = (message + expansionArray + originalMessageSizeInBits.toULong().toPaddedByteArray()).chunked(64)
chunks.forEach { chunk ->
val w = Array<UInt>(W_SIZE) {
val expansionArray = Array<UByte>(zeroAddAmount + 1) {
when (it) {
in 0 until 16 -> {
var collected = (chunk[(it * 4)].toUInt() shl 24) +
(chunk[(it * 4) + 1].toUInt() shl 16 ) +
(chunk[(it * 4) + 2].toUInt() shl 8 ) +
(chunk[(it * 4) + 3].toUInt())
collected
}
0 -> 0b10000000U //TODO This wont work if there the byte needs to be shared with the L (length) ULong
else -> 0U
}
}
for (i in 16 until W_SIZE) {
val s0 = scheduleSigma0(w[i - 15])
val s1 = scheduleSigma1(w[i - 2])
w[i] = w[i-16] + s0 + w[i - 7] + s1
val chunks = (message + expansionArray + originalMessageSizeInBits.toULong().toPaddedByteArray()).chunked(64)
chunks.forEach { chunk ->
val w = Array<UInt>(W_SIZE) {
when (it) {
in 0 until 16 -> {
var collected = (chunk[(it * 4)].toUInt() shl 24) +
(chunk[(it * 4) + 1].toUInt() shl 16 ) +
(chunk[(it * 4) + 2].toUInt() shl 8 ) +
(chunk[(it * 4) + 3].toUInt())
collected
}
else -> 0U
}
}
for (i in 16 until W_SIZE) {
val s0 = scheduleSigma0(w[i - 15])
val s1 = scheduleSigma1(w[i - 2])
w[i] = w[i-16] + s0 + w[i - 7] + s1
}
var a = h0
var b = h1
var c = h2
var d = h3
var e = h4
var f = h5
var g = h6
var h = h7
for (i in 0 until W_SIZE) {
val s1 = compressionSigma1(e)
val ch = ch(e, f, g)
val temp1 = h + s1 + ch + k[i] + w[i]
val s0 = compressionSigma0(a)
val maj = maj(a,b,c)
val temp2 = s0 + maj
h = g
g = f
f = e
e = d + temp1
d = c
c = b
b = a
a = temp1 + temp2
}
h0 += a
h1 += b
h2 += c
h3 += d
h4 += e
h5 += f
h6 += g
h7 += h
}
var a = h0
var b = h1
var c = h2
var d = h3
var e = h4
var f = h5
var g = h6
var h = h7
for (i in 0 until W_SIZE) {
val s1 = compressionSigma1(e)
val ch = ch(e, f, g)
val temp1 = h + s1 + ch + k[i] + w[i]
val s0 = compressionSigma0(a)
val maj = maj(a,b,c)
val temp2 = s0 + maj
h = g
g = f
f = e
e = d + temp1
d = c
c = b
b = a
a = temp1 + temp2
}
h0 += a
h1 += b
h2 += c
h3 += d
h4 += e
h5 += f
h6 += g
h7 += h
val digest = h0.toPaddedByteArray() +
h1.toPaddedByteArray() +
h2.toPaddedByteArray() +
h3.toPaddedByteArray() +
h4.toPaddedByteArray() +
h5.toPaddedByteArray() +
h6.toPaddedByteArray() +
h7.toPaddedByteArray()
return digest
}
val digest = h0.toPaddedByteArray() +
h1.toPaddedByteArray() +
h2.toPaddedByteArray() +
h3.toPaddedByteArray() +
h4.toPaddedByteArray() +
h5.toPaddedByteArray() +
h6.toPaddedByteArray() +
h7.toPaddedByteArray()
reset()
return digest
}
private fun scheduleSigma0(value: UInt): UInt {
return value.rotateRight(7) xor value.rotateRight(18) xor (value shr 3)
}
private fun reset() {
h0 = 0x6a09e667U
h1 = 0xbb67ae85U
h2 = 0x3c6ef372U
h3 = 0xa54ff53aU
h4 = 0x510e527fU
h5 = 0x9b05688cU
h6 = 0x1f83d9abU
h7 = 0x5be0cd19U
}
private fun scheduleSigma1(value : UInt) : UInt {
return value.rotateRight(17) xor value.rotateRight(19) xor (value shr 10)
}
private fun scheduleSigma0(value: UInt): UInt {
return value.rotateRight(7) xor value.rotateRight(18) xor (value shr 3)
}
private fun compressionSigma0(a : UInt) : UInt {
return (a rotateRight 2) xor (a rotateRight 13) xor (a rotateRight 22)
}
private fun scheduleSigma1(value : UInt) : UInt {
return value.rotateRight(17) xor value.rotateRight(19) xor (value shr 10)
}
private fun compressionSigma1(e : UInt) : UInt {
return (e rotateRight 6) xor (e rotateRight 11) xor (e rotateRight 25)
}
private fun compressionSigma0(a : UInt) : UInt {
return (a rotateRight 2) xor (a rotateRight 13) xor (a rotateRight 22)
}
private fun ch(x : UInt, y : UInt, z : UInt) : UInt {
return ((x and y) xor ((x xor UINT_MASK) and z))
}
private fun compressionSigma1(e : UInt) : UInt {
return (e rotateRight 6) xor (e rotateRight 11) xor (e rotateRight 25)
}
private fun maj(x : UInt, y : UInt, z : UInt) : UInt {
return (((x and y) xor (x and z) xor (y and z)))
}
private fun ch(x : UInt, y : UInt, z : UInt) : UInt {
return ((x and y) xor ((x xor UINT_MASK) and z))
}
private fun maj(x : UInt, y : UInt, z : UInt) : UInt {
return (((x and y) xor (x and z) xor (y and z)))
}
private fun ULong.toPaddedByteArray(): Array<UByte> {
val byteMask = BYTE_MASK_FROM_ULONG
return Array(8) {
when (it) {
7 -> (this and byteMask).toUByte()
6 -> ((this shr 8) and byteMask).toUByte()
5 -> ((this shr 16) and byteMask).toUByte()
4 -> ((this shr 24) and byteMask).toUByte()
3 -> ((this shr 32) and byteMask).toUByte()
2 -> ((this shr 40) and byteMask).toUByte()
1 -> ((this shr 48) and byteMask).toUByte()
0 -> ((this shr 54) and byteMask).toUByte()
else -> throw RuntimeException("Invalid conversion")
private fun ULong.toPaddedByteArray(): Array<UByte> {
val byteMask = BYTE_MASK_FROM_ULONG
return Array(8) {
when (it) {
7 -> (this and byteMask).toUByte()
6 -> ((this shr 8) and byteMask).toUByte()
5 -> ((this shr 16) and byteMask).toUByte()
4 -> ((this shr 24) and byteMask).toUByte()
3 -> ((this shr 32) and byteMask).toUByte()
2 -> ((this shr 40) and byteMask).toUByte()
1 -> ((this shr 48) and byteMask).toUByte()
0 -> ((this shr 54) and byteMask).toUByte()
else -> throw RuntimeException("Invalid conversion")
}
}
}
}
private fun UInt.toPaddedByteArray(): Array<UByte> {
val byteMask = BYTE_MASK_FROM_UINT
return Array(4) {
when (it) {
3 -> (this and byteMask).toUByte()
2 -> ((this shr 8) and byteMask).toUByte()
1 -> ((this shr 16) and byteMask).toUByte()
0 -> ((this shr 24) and byteMask).toUByte()
else -> throw RuntimeException("Invalid conversion")
private fun UInt.toPaddedByteArray(): Array<UByte> {
val byteMask = BYTE_MASK_FROM_UINT
return Array(4) {
when (it) {
3 -> (this and byteMask).toUByte()
2 -> ((this shr 8) and byteMask).toUByte()
1 -> ((this shr 16) and byteMask).toUByte()
0 -> ((this shr 24) and byteMask).toUByte()
else -> throw RuntimeException("Invalid conversion")
}
}
}
}
@@ -217,4 +224,6 @@ class Sha256() {
}
@@ -16,6 +16,7 @@
package com.ionspin.kotlin.crypto.sha
import com.ionspin.kotlin.crypto.Hash
import com.ionspin.kotlin.crypto.chunked
import com.ionspin.kotlin.crypto.rotateRight
@@ -26,206 +27,272 @@ import com.ionspin.kotlin.crypto.rotateRight
*/
@ExperimentalUnsignedTypes
class Sha512 {
class Sha512 : Hash {
companion object {
const val BLOCK_SIZE = 1024
const val ULONG_MASK = 0xFFFFFFFFFFFFFFFFUL
val k = arrayOf(
0x428a2f98d728ae22UL, 0x7137449123ef65cdUL, 0xb5c0fbcfec4d3b2fUL, 0xe9b5dba58189dbbcUL, 0x3956c25bf348b538UL,
0x59f111f1b605d019UL, 0x923f82a4af194f9bUL, 0xab1c5ed5da6d8118UL, 0xd807aa98a3030242UL, 0x12835b0145706fbeUL,
0x243185be4ee4b28cUL, 0x550c7dc3d5ffb4e2UL, 0x72be5d74f27b896fUL, 0x80deb1fe3b1696b1UL, 0x9bdc06a725c71235UL,
0xc19bf174cf692694UL, 0xe49b69c19ef14ad2UL, 0xefbe4786384f25e3UL, 0x0fc19dc68b8cd5b5UL, 0x240ca1cc77ac9c65UL,
0x2de92c6f592b0275UL, 0x4a7484aa6ea6e483UL, 0x5cb0a9dcbd41fbd4UL, 0x76f988da831153b5UL, 0x983e5152ee66dfabUL,
0xa831c66d2db43210UL, 0xb00327c898fb213fUL, 0xbf597fc7beef0ee4UL, 0xc6e00bf33da88fc2UL, 0xd5a79147930aa725UL,
0x06ca6351e003826fUL, 0x142929670a0e6e70UL, 0x27b70a8546d22ffcUL, 0x2e1b21385c26c926UL, 0x4d2c6dfc5ac42aedUL,
0x53380d139d95b3dfUL, 0x650a73548baf63deUL, 0x766a0abb3c77b2a8UL, 0x81c2c92e47edaee6UL, 0x92722c851482353bUL,
0xa2bfe8a14cf10364UL, 0xa81a664bbc423001UL, 0xc24b8b70d0f89791UL, 0xc76c51a30654be30UL, 0xd192e819d6ef5218UL,
0xd69906245565a910UL, 0xf40e35855771202aUL, 0x106aa07032bbd1b8UL, 0x19a4c116b8d2d0c8UL, 0x1e376c085141ab53UL,
0x2748774cdf8eeb99UL, 0x34b0bcb5e19b48a8UL, 0x391c0cb3c5c95a63UL, 0x4ed8aa4ae3418acbUL, 0x5b9cca4f7763e373UL,
0x682e6ff3d6b2b8a3UL, 0x748f82ee5defb2fcUL, 0x78a5636f43172f60UL, 0x84c87814a1f0ab72UL, 0x8cc702081a6439ecUL,
0x90befffa23631e28UL, 0xa4506cebde82bde9UL, 0xbef9a3f7b2c67915UL, 0xc67178f2e372532bUL, 0xca273eceea26619cUL,
0xd186b8c721c0c207UL, 0xeada7dd6cde0eb1eUL, 0xf57d4f7fee6ed178UL, 0x06f067aa72176fbaUL, 0x0a637dc5a2c898a6UL,
0x113f9804bef90daeUL, 0x1b710b35131c471bUL, 0x28db77f523047d84UL, 0x32caab7b40c72493UL, 0x3c9ebe0a15c9bebcUL,
0x431d67c49c100d4cUL, 0x4cc5d4becb3e42b6UL, 0x597f299cfc657e2aUL, 0x5fcb6fab3ad6faecUL, 0x6c44198c4a475817UL
0x428a2f98d728ae22UL,
0x7137449123ef65cdUL,
0xb5c0fbcfec4d3b2fUL,
0xe9b5dba58189dbbcUL,
0x3956c25bf348b538UL,
0x59f111f1b605d019UL,
0x923f82a4af194f9bUL,
0xab1c5ed5da6d8118UL,
0xd807aa98a3030242UL,
0x12835b0145706fbeUL,
0x243185be4ee4b28cUL,
0x550c7dc3d5ffb4e2UL,
0x72be5d74f27b896fUL,
0x80deb1fe3b1696b1UL,
0x9bdc06a725c71235UL,
0xc19bf174cf692694UL,
0xe49b69c19ef14ad2UL,
0xefbe4786384f25e3UL,
0x0fc19dc68b8cd5b5UL,
0x240ca1cc77ac9c65UL,
0x2de92c6f592b0275UL,
0x4a7484aa6ea6e483UL,
0x5cb0a9dcbd41fbd4UL,
0x76f988da831153b5UL,
0x983e5152ee66dfabUL,
0xa831c66d2db43210UL,
0xb00327c898fb213fUL,
0xbf597fc7beef0ee4UL,
0xc6e00bf33da88fc2UL,
0xd5a79147930aa725UL,
0x06ca6351e003826fUL,
0x142929670a0e6e70UL,
0x27b70a8546d22ffcUL,
0x2e1b21385c26c926UL,
0x4d2c6dfc5ac42aedUL,
0x53380d139d95b3dfUL,
0x650a73548baf63deUL,
0x766a0abb3c77b2a8UL,
0x81c2c92e47edaee6UL,
0x92722c851482353bUL,
0xa2bfe8a14cf10364UL,
0xa81a664bbc423001UL,
0xc24b8b70d0f89791UL,
0xc76c51a30654be30UL,
0xd192e819d6ef5218UL,
0xd69906245565a910UL,
0xf40e35855771202aUL,
0x106aa07032bbd1b8UL,
0x19a4c116b8d2d0c8UL,
0x1e376c085141ab53UL,
0x2748774cdf8eeb99UL,
0x34b0bcb5e19b48a8UL,
0x391c0cb3c5c95a63UL,
0x4ed8aa4ae3418acbUL,
0x5b9cca4f7763e373UL,
0x682e6ff3d6b2b8a3UL,
0x748f82ee5defb2fcUL,
0x78a5636f43172f60UL,
0x84c87814a1f0ab72UL,
0x8cc702081a6439ecUL,
0x90befffa23631e28UL,
0xa4506cebde82bde9UL,
0xbef9a3f7b2c67915UL,
0xc67178f2e372532bUL,
0xca273eceea26619cUL,
0xd186b8c721c0c207UL,
0xeada7dd6cde0eb1eUL,
0xf57d4f7fee6ed178UL,
0x06f067aa72176fbaUL,
0x0a637dc5a2c898a6UL,
0x113f9804bef90daeUL,
0x1b710b35131c471bUL,
0x28db77f523047d84UL,
0x32caab7b40c72493UL,
0x3c9ebe0a15c9bebcUL,
0x431d67c49c100d4cUL,
0x4cc5d4becb3e42b6UL,
0x597f299cfc657e2aUL,
0x5fcb6fab3ad6faecUL,
0x6c44198c4a475817UL
)
}
var h0 = 0x6a09e667f3bcc908UL
var h1 = 0xbb67ae8584caa73bUL
var h2 = 0x3c6ef372fe94f82bUL
var h3 = 0xa54ff53a5f1d36f1UL
var h4 = 0x510e527fade682d1UL
var h5 = 0x9b05688c2b3e6c1fUL
var h6 = 0x1f83d9abfb41bd6bUL
var h7 = 0x5be0cd19137e2179UL
val iv = arrayOf(
0x6a09e667f3bcc908UL,
0xbb67ae8584caa73bUL,
0x3c6ef372fe94f82bUL,
0xa54ff53a5f1d36f1UL,
0x510e527fade682d1UL,
0x9b05688c2b3e6c1fUL,
0x1f83d9abfb41bd6bUL,
0x5be0cd19137e2179UL
)
fun digest(message: Array<UByte>) : Array<UByte> {
val originalMessageSizeInBits = message.size * 8
//K such that L + 1 + K + 64 is a multiple of 512
val expandedRemainderOf1024 = (originalMessageSizeInBits + 129) % BLOCK_SIZE
val zeroAddAmount = when (expandedRemainderOf1024) {
0 -> 0
else -> (BLOCK_SIZE - expandedRemainderOf1024) / 8
@ExperimentalStdlibApi
fun digest(message: String): Array<UByte> {
return digest(message.encodeToByteArray().map { it.toUByte() }.toTypedArray())
}
val expansionArray = Array<UByte>(zeroAddAmount + 1) {
when (it) {
0 -> 0b10000000U //TODO This wont work if there the byte needs to be shared with the L (length) ULong
else -> 0U
fun digest(message: Array<UByte>): Array<UByte> {
var h0 = 0x6a09e667f3bcc908UL
var h1 = 0xbb67ae8584caa73bUL
var h2 = 0x3c6ef372fe94f82bUL
var h3 = 0xa54ff53a5f1d36f1UL
var h4 = 0x510e527fade682d1UL
var h5 = 0x9b05688c2b3e6c1fUL
var h6 = 0x1f83d9abfb41bd6bUL
var h7 = 0x5be0cd19137e2179UL
val originalMessageSizeInBits = message.size * 8
//K such that L + 1 + K + 64 is a multiple of 512
val expandedRemainderOf1024 = (originalMessageSizeInBits + 129) % BLOCK_SIZE
val zeroAddAmount = when (expandedRemainderOf1024) {
0 -> 0
else -> (BLOCK_SIZE - expandedRemainderOf1024) / 8
}
}
val chunks = (message + expansionArray + originalMessageSizeInBits.toULong().toPadded128BitByteArray()).chunked(128)
chunks.forEach { chunk ->
val w = Array<ULong>(80) {
val expansionArray = Array<UByte>(zeroAddAmount + 1) {
when (it) {
in 0 until 16 -> {
var collected = (chunk[(it * 8)].toULong() shl 56) +
(chunk[(it * 8) + 1].toULong() shl 48 ) +
(chunk[(it * 8) + 2].toULong() shl 40 ) +
(chunk[(it * 8) + 3].toULong() shl 32 ) +
(chunk[(it * 8) + 4].toULong() shl 24 ) +
(chunk[(it * 8) + 5].toULong() shl 16 ) +
(chunk[(it * 8) + 6].toULong() shl 8 ) +
(chunk[(it * 8) + 7].toULong())
collected
}
else -> 0UL
0 -> 0b10000000U //TODO This wont work if there the byte needs to be shared with the L (length) ULong
else -> 0U
}
}
for (i in 16 until 80) {
val s0 = scheduleSigma0(w[i - 15])
val s1 = scheduleSigma1(w[i - 2])
w[i] = w[i-16] + s0 + w[i - 7] + s1
val chunks =
(message + expansionArray + originalMessageSizeInBits.toULong().toPadded128BitByteArray()).chunked(128)
chunks.forEach { chunk ->
val w = Array<ULong>(80) {
when (it) {
in 0 until 16 -> {
var collected = (chunk[(it * 8)].toULong() shl 56) +
(chunk[(it * 8) + 1].toULong() shl 48) +
(chunk[(it * 8) + 2].toULong() shl 40) +
(chunk[(it * 8) + 3].toULong() shl 32) +
(chunk[(it * 8) + 4].toULong() shl 24) +
(chunk[(it * 8) + 5].toULong() shl 16) +
(chunk[(it * 8) + 6].toULong() shl 8) +
(chunk[(it * 8) + 7].toULong())
collected
}
else -> 0UL
}
}
for (i in 16 until 80) {
val s0 = scheduleSigma0(w[i - 15])
val s1 = scheduleSigma1(w[i - 2])
w[i] = w[i - 16] + s0 + w[i - 7] + s1
}
var a = h0
var b = h1
var c = h2
var d = h3
var e = h4
var f = h5
var g = h6
var h = h7
for (i in 0 until 80) {
val s1 = compressionSigma1(e)
val ch = ch(e, f, g)
val temp1 = h + s1 + ch + k[i] + w[i]
val s0 = compressionSigma0(a)
val maj = maj(a, b, c)
val temp2 = s0 + maj
h = g
g = f
f = e
e = d + temp1
d = c
c = b
b = a
a = temp1 + temp2
}
h0 += a
h1 += b
h2 += c
h3 += d
h4 += e
h5 += f
h6 += g
h7 += h
}
var a = h0
var b = h1
var c = h2
var d = h3
var e = h4
var f = h5
var g = h6
var h = h7
for (i in 0 until 80) {
val s1 = compressionSigma1(e)
val ch = ch(e, f, g)
val temp1 = h + s1 + ch + k[i] + w[i]
val s0 = compressionSigma0(a)
val maj = maj(a,b,c)
val temp2 = s0 + maj
h = g
g = f
f = e
e = d + temp1
d = c
c = b
b = a
a = temp1 + temp2
}
h0 += a
h1 += b
h2 += c
h3 += d
h4 += e
h5 += f
h6 += g
h7 += h
val digest = h0.toPaddedByteArray() +
h1.toPaddedByteArray() +
h2.toPaddedByteArray() +
h3.toPaddedByteArray() +
h4.toPaddedByteArray() +
h5.toPaddedByteArray() +
h6.toPaddedByteArray() +
h7.toPaddedByteArray()
return digest
}
val digest = h0.toPaddedByteArray() +
h1.toPaddedByteArray() +
h2.toPaddedByteArray() +
h3.toPaddedByteArray() +
h4.toPaddedByteArray() +
h5.toPaddedByteArray() +
h6.toPaddedByteArray() +
h7.toPaddedByteArray()
reset()
return digest
}
private fun scheduleSigma0(value: ULong): ULong {
return value.rotateRight(1) xor value.rotateRight(8) xor (value shr 7)
}
private fun reset() {
h0 = 0x6a09e667f3bcc908UL
h1 = 0xbb67ae8584caa73bUL
h2 = 0x3c6ef372fe94f82bUL
h3 = 0xa54ff53a5f1d36f1UL
h4 = 0x510e527fade682d1UL
h5 = 0x9b05688c2b3e6c1fUL
h6 = 0x1f83d9abfb41bd6bUL
h7 = 0x5be0cd19137e2179UL
}
private fun scheduleSigma1(value: ULong): ULong {
return value.rotateRight(19) xor value.rotateRight(61) xor (value shr 6)
}
private fun scheduleSigma0(value: ULong): ULong {
return value.rotateRight(1) xor value.rotateRight(8) xor (value shr 7)
}
private fun compressionSigma0(e: ULong): ULong {
return (e rotateRight 28) xor (e rotateRight 34) xor (e rotateRight 39)
}
private fun scheduleSigma1(value : ULong) : ULong {
return value.rotateRight(19) xor value.rotateRight(61) xor (value shr 6)
}
private fun compressionSigma1(a: ULong): ULong {
return (a rotateRight 14) xor (a rotateRight 18) xor (a rotateRight 41)
}
private fun compressionSigma0(e : ULong) : ULong {
return (e rotateRight 28) xor (e rotateRight 34) xor (e rotateRight 39)
}
private fun ch(x: ULong, y: ULong, z: ULong): ULong {
return ((x and y) xor ((x xor ULONG_MASK) and z))
}
private fun compressionSigma1(a : ULong) : ULong {
return (a rotateRight 14) xor (a rotateRight 18) xor (a rotateRight 41)
}
private fun ch(x : ULong, y : ULong, z : ULong) : ULong {
return ((x and y) xor ((x xor ULONG_MASK) and z))
}
private fun maj(x : ULong, y : ULong, z : ULong) : ULong {
return ((x and y) xor (x and z) xor (y and z))
}
private fun maj(x: ULong, y: ULong, z: ULong): ULong {
return ((x and y) xor (x and z) xor (y and z))
}
private fun ULong.toPaddedByteArray(): Array<UByte> {
val byteMask = 0xFFUL
//Ignore messages longer than 64 bits for now
return Array(8) {
when (it) {
7 -> (this and byteMask).toUByte()
6 -> ((this shr 8) and byteMask).toUByte()
5 -> ((this shr 16) and byteMask).toUByte()
4 -> ((this shr 24) and byteMask).toUByte()
3 -> ((this shr 32) and byteMask).toUByte()
2 -> ((this shr 40) and byteMask).toUByte()
1 -> ((this shr 48) and byteMask).toUByte()
0 -> ((this shr 56) and byteMask).toUByte()
else -> 0U
}
}
}
private fun ULong.toPaddedByteArray(): Array<UByte> {
val byteMask = 0xFFUL
//Ignore messages longer than 64 bits for now
return Array(8) {
when (it) {
7 -> (this and byteMask).toUByte()
6 -> ((this shr 8) and byteMask).toUByte()
5 -> ((this shr 16) and byteMask).toUByte()
4 -> ((this shr 24) and byteMask).toUByte()
3 -> ((this shr 32) and byteMask).toUByte()
2 -> ((this shr 40) and byteMask).toUByte()
1 -> ((this shr 48) and byteMask).toUByte()
0 -> ((this shr 56) and byteMask).toUByte()
else -> 0U
private fun ULong.toPadded128BitByteArray(): Array<UByte> {
val byteMask = 0xFFUL
//Ignore messages longer than 64 bits for now
return Array(16) {
when (it) {
15 -> (this and byteMask).toUByte()
14 -> ((this shr 8) and byteMask).toUByte()
13 -> ((this shr 16) and byteMask).toUByte()
12 -> ((this shr 24) and byteMask).toUByte()
11 -> ((this shr 32) and byteMask).toUByte()
10 -> ((this shr 40) and byteMask).toUByte()
9 -> ((this shr 48) and byteMask).toUByte()
8 -> ((this shr 54) and byteMask).toUByte()
else -> 0U
}
}
}
}
private fun ULong.toPadded128BitByteArray(): Array<UByte> {
val byteMask = 0xFFUL
//Ignore messages longer than 64 bits for now
return Array(16) {
when (it) {
15 -> (this and byteMask).toUByte()
14 -> ((this shr 8) and byteMask).toUByte()
13 -> ((this shr 16) and byteMask).toUByte()
12 -> ((this shr 24) and byteMask).toUByte()
11 -> ((this shr 32) and byteMask).toUByte()
10 -> ((this shr 40) and byteMask).toUByte()
9 -> ((this shr 48) and byteMask).toUByte()
8 -> ((this shr 54) and byteMask).toUByte()
else -> 0U
}
}
}
}
@@ -0,0 +1,100 @@
/*
* Copyright 2019 Ugljesa Jovanovic
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.ionspin.kotlin.crypto
import com.ionspin.kotlin.crypto.blake2b.Blake2b
import com.ionspin.kotlin.crypto.sha.Sha256
import com.ionspin.kotlin.crypto.sha.Sha512
import kotlin.test.Test
import kotlin.test.assertTrue
/**
* Created by Ugljesa Jovanovic
* ugljesa.jovanovic@ionspin.com
* on 20-Jul-2019
*/
@ExperimentalUnsignedTypes
@ExperimentalStdlibApi
class ReadmeTest {
@Test
fun blake2bObjectExample() {
val input = "abc"
val result = Blake2b.digest(input)
//@formatter:off
val expectedResult = arrayOf<UByte>(
0xBAU,0x80U,0xA5U,0x3FU,0x98U,0x1CU,0x4DU,0x0DU,0x6AU,0x27U,0x97U,0xB6U,0x9FU,0x12U,0xF6U,0xE9U,
0x4CU,0x21U,0x2FU,0x14U,0x68U,0x5AU,0xC4U,0xB7U,0x4BU,0x12U,0xBBU,0x6FU,0xDBU,0xFFU,0xA2U,0xD1U,
0x7DU,0x87U,0xC5U,0x39U,0x2AU,0xABU,0x79U,0x2DU,0xC2U,0x52U,0xD5U,0xDEU,0x45U,0x33U,0xCCU,0x95U,
0x18U,0xD3U,0x8AU,0xA8U,0xDBU,0xF1U,0x92U,0x5AU,0xB9U,0x23U,0x86U,0xEDU,0xD4U,0x00U,0x99U,0x23U
)
//@formatter:on
assertTrue {
result.contentEquals(expectedResult)
}
}
@Test
fun blake2bInstanceExample() {
val test = "abc"
val key = "key"
val blake2b = Blake2b(key)
blake2b.update(test)
val result = blake2b.digest()
assertTrue {
result.isNotEmpty()
}
val expectedResult = ("5c6a9a4ae911c02fb7e71a991eb9aea371ae993d4842d206e" +
"6020d46f5e41358c6d5c277c110ef86c959ed63e6ecaaaceaaff38019a43264ae06acf73b9550b1")
.chunked(2).map { it.toUByte(16) }.toTypedArray()
assertTrue {
result.contentEquals(expectedResult)
}
}
@ExperimentalStdlibApi
@Test
fun sha256Example() {
val input ="abc"
val result = Sha256.digest(message = input)
val expectedResult = "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
assertTrue {
result.contentEquals(expectedResult.chunked(2).map { it.toUByte(16) }.toTypedArray())
}
}
@ExperimentalStdlibApi
@Test
fun sha512Example() {
val input ="abc"
val result = Sha512.digest(message = input.encodeToByteArray().map { it.toUByte() }.toTypedArray())
println(result.map {it.toString(16)})
val expectedResult = "ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a" +
"2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f"
assertTrue {
result.contentEquals(expectedResult.chunked(2).map { it.toUByte(16) }.toTypedArray())
}
}
}
@@ -44,7 +44,6 @@ class Blake2BTest {
"1234567890" +
"1234567890" +
"1234567890"
print("|$test|")
val result = Blake2b.digest(test)
//Generated with b2sum 8.31
@@ -58,9 +57,6 @@ class Blake2BTest {
//@formatter:on
)
val printout = result.map { it.toString(16) }.chunked(16)
printout.forEach { println(it.joinToString(separator = " ") { it.toUpperCase() }) }
assertTrue {
result.contentEquals(expectedResult)
}
@@ -79,7 +75,6 @@ class Blake2BTest {
"1234567890" +
"1234567890"
print("|$test|")
val result = Blake2b.digest(test)
val expectedResultString = "800bb78cd4da18995c8074713bb674" +
@@ -87,9 +82,6 @@ class Blake2BTest {
"4ce1935a76154d7ea7c410493557741d18ec3a08da75"
val expectedResult = expectedResultString.chunked(2).map { it.toUByte(16) }.toTypedArray()
val printout = result.map { it.toString(16) }.chunked(16)
printout.forEach { println(it.joinToString(separator = " ") { it.toUpperCase() }) }
assertTrue {
result.contentEquals(expectedResult)
}
@@ -111,9 +103,6 @@ class Blake2BTest {
//@formatter:on
)
val printout = result.map { it.toString(16) }.chunked(16)
printout.forEach { println(it.joinToString(separator = " ") { it.toUpperCase() }) }
assertTrue {
result.contentEquals(expectedResult)
}
@@ -126,10 +115,6 @@ class Blake2BTest {
val key = "key"
val result = Blake2b.digest(test, key)
val printout = result.map { it.toString(16) }.chunked(16)
printout.forEach { println(it.joinToString(separator = " ") { it.toUpperCase() }) }
assertTrue {
result.isNotEmpty()
@@ -159,9 +144,6 @@ class Blake2BTest {
)
//@formatter:on
val printout = result.map { it.toString(16) }.chunked(16)
printout.forEach { println(it.joinToString(separator = " ") { it.toUpperCase() }) }
assertTrue {
result.contentEquals(expectedResult)
}
@@ -290,9 +272,6 @@ class Blake2BTest {
val inputRound = mixChain[i]
val round = i
val result = Blake2b.mixRound(inputRound, message, round)
println("Result: ")
val printout = result.map { it.toString(16) }.chunked(3)
printout.forEach { println(it.joinToString(separator = " ") { it.toUpperCase() }) }
val expectedResult = mixChain[i + 1]
assertTrue {
result.contentEquals(expectedResult)
@@ -80,10 +80,6 @@ class Blake2bInstanceTest {
val blake2b = Blake2b(key)
blake2b.update(test)
val result = blake2b.digest()
val printout = result.map { it.toString(16) }.chunked(16)
printout.forEach { println(it.joinToString(separator = " ") { it.toUpperCase() }) }
assertTrue {
result.isNotEmpty()
@@ -30,10 +30,8 @@ class Sha256Test {
@ExperimentalStdlibApi
@Test
fun testWellKnownValue() {
val sha = Sha256()
val result = sha.digest(message = "abc".encodeToByteArray().map { it.toUByte() }.toTypedArray())
println(result.map {it.toString(16)})
val result = Sha256.digest(message = "abc")
val expectedResult = "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
assertTrue {
result.contentEquals(expectedResult.chunked(2).map { it.toUByte(16) }.toTypedArray())
@@ -45,9 +43,8 @@ class Sha256Test {
@ExperimentalStdlibApi
@Test
fun testWellKnownDoubleBlock() {
val sha = Sha256()
val resultDoubleBlock = sha.digest(message = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq".encodeToByteArray().map { it.toUByte() }.toTypedArray())
val resultDoubleBlock = Sha256.digest(message = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq")
val expectedResultForDoubleBlock = "248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1"
assertTrue {
resultDoubleBlock.contentEquals(expectedResultForDoubleBlock.chunked(2).map { it.toUByte(16) }.toTypedArray())
@@ -29,9 +29,8 @@ class Sha512Test {
@ExperimentalStdlibApi
@Test
fun testWellKnownValue() {
val sha = Sha512()
val result = sha.digest(message = "abc".encodeToByteArray().map { it.toUByte() }.toTypedArray())
val result = Sha512.digest(message = "abc".encodeToByteArray().map { it.toUByte() }.toTypedArray())
println(result.map {it.toString(16)})
val expectedResult = "ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a" +
"2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f"
@@ -42,14 +41,13 @@ class Sha512Test {
}
@ExperimentalUnsignedTypes
@ExperimentalStdlibApi
@Test
fun testWellKnownDoubleBlock() {
val sha = Sha512()
val resultDoubleBlock = sha.digest(message = ("abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn" +
"hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu").encodeToByteArray().map { it.toUByte() }.toTypedArray())
println(resultDoubleBlock.map {it.toString(16)})
val resultDoubleBlock = Sha512.digest(message = "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn" +
"hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu")
val expectedResultForDoubleBlock = "8e959b75dae313da8cf4f72814fc143f8f7779c6eb9f7fa17299aeadb6889018" +
"501d289e4900f7e4331b99dec4b5433ac7d329eeb6dd26545e96e55b874be909"
assertTrue {
@@ -60,16 +58,11 @@ class Sha512Test {
@ExperimentalStdlibApi
@Test
fun testWellKnownLong() {
val sha = Sha512()
val inputBuilder = StringBuilder()
for (i in 0 until 1000000) {
inputBuilder.append("a")
if (i % 100000 == 0) {
println("$i / 1000000")
}
}
val resultDoubleBlock = sha.digest(message = (inputBuilder.toString()).encodeToByteArray().map { it.toUByte() }.toTypedArray())
println(resultDoubleBlock.map {it.toString(16)})
val resultDoubleBlock = Sha512.digest(message = (inputBuilder.toString()).encodeToByteArray().map { it.toUByte() }.toTypedArray())
val expectedResultForDoubleBlock = "e718483d0ce769644e2e42c7bc15b4638e1f98b13b2044285632a803afa973ebde0ff244877ea60a4cb0432ce577c31beb009c5c2c49aa2e4eadb217ad8cc09b"
assertTrue {
resultDoubleBlock.contentEquals(expectedResultForDoubleBlock.chunked(2).map { it.toUByte(16) }.toTypedArray())