Added blocking test util
This commit is contained in:
		
							parent
							
								
									1852db686c
								
							
						
					
					
						commit
						bebe05757d
					
				
							
								
								
									
										561
									
								
								crypto-core/node_modules/crypto-core.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										561
									
								
								crypto-core/node_modules/crypto-core.js
									
									
									
										generated
									
									
										vendored
									
									
								
							@ -1,6 +1,7 @@
 | 
			
		||||
(function (_, Kotlin, $module$bignum) {
 | 
			
		||||
(function (_, Kotlin, $module$bignum, $module$kotlinx_coroutines_core) {
 | 
			
		||||
  'use strict';
 | 
			
		||||
  var $$importsForInline$$ = _.$$importsForInline$$ || (_.$$importsForInline$$ = {});
 | 
			
		||||
  var Kind_INTERFACE = Kotlin.Kind.INTERFACE;
 | 
			
		||||
  var chunked = Kotlin.kotlin.collections.chunked_ba2ldo$;
 | 
			
		||||
  var joinToString = Kotlin.kotlin.collections.joinToString_fmv235$;
 | 
			
		||||
  var println = Kotlin.kotlin.io.println_s8jyv4$;
 | 
			
		||||
@ -12,26 +13,51 @@
 | 
			
		||||
  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;
 | 
			
		||||
  var toBigInteger = $module$bignum.com.ionspin.kotlin.bignum.integer.toBigInteger_s8ev3n$;
 | 
			
		||||
  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 L255 = Kotlin.Long.fromInt(255);
 | 
			
		||||
  var Array_0 = Array;
 | 
			
		||||
  var L255 = Kotlin.Long.fromInt(255);
 | 
			
		||||
  var copyToArray = Kotlin.kotlin.collections.copyToArray;
 | 
			
		||||
  var collectionSizeOrDefault = Kotlin.kotlin.collections.collectionSizeOrDefault_ba2ldo$;
 | 
			
		||||
  var toByte = Kotlin.toByte;
 | 
			
		||||
  var arrayCopy = Kotlin.kotlin.collections.arrayCopy;
 | 
			
		||||
  var toByte = Kotlin.toByte;
 | 
			
		||||
  var ArrayList_init_0 = Kotlin.kotlin.collections.ArrayList_init_287e2$;
 | 
			
		||||
  var addAll = Kotlin.kotlin.collections.addAll_ipc267$;
 | 
			
		||||
  var until = Kotlin.kotlin.ranges.until_dqglrj$;
 | 
			
		||||
  var RuntimeException_init = Kotlin.kotlin.RuntimeException_init_pdl1vj$;
 | 
			
		||||
  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 Hash() {
 | 
			
		||||
  }
 | 
			
		||||
  Hash.$metadata$ = {
 | 
			
		||||
    kind: Kind_INTERFACE,
 | 
			
		||||
    simpleName: 'Hash',
 | 
			
		||||
    interfaces: []
 | 
			
		||||
  };
 | 
			
		||||
  function UpdateableHash() {
 | 
			
		||||
  }
 | 
			
		||||
  UpdateableHash.$metadata$ = {
 | 
			
		||||
    kind: Kind_INTERFACE,
 | 
			
		||||
    simpleName: 'UpdateableHash',
 | 
			
		||||
    interfaces: [Hash]
 | 
			
		||||
  };
 | 
			
		||||
  function hexColumsPrint$lambda$lambda(it) {
 | 
			
		||||
    return it.toUpperCase();
 | 
			
		||||
  }
 | 
			
		||||
@ -137,8 +163,57 @@
 | 
			
		||||
    var other = new ULong_init($receiver.data.shiftLeft(bitCount));
 | 
			
		||||
    return new ULong_init(tmp$.data.xor(other.data));
 | 
			
		||||
  }
 | 
			
		||||
  function Blake2b() {
 | 
			
		||||
  var chunked$lambda = wrapFunction(function () {
 | 
			
		||||
    var copyToArray = Kotlin.kotlin.collections.copyToArray;
 | 
			
		||||
    return function (it) {
 | 
			
		||||
      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)
 | 
			
		||||
      key = null;
 | 
			
		||||
    if (hashLength === void 0)
 | 
			
		||||
      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;
 | 
			
		||||
    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;
 | 
			
		||||
    var tmp$_0, tmp$_1, tmp$_2, tmp$_3;
 | 
			
		||||
    var $this = this.h[0];
 | 
			
		||||
    var other = new ULong_init(Kotlin.Long.fromInt(16842752));
 | 
			
		||||
    tmp$_3 = new ULong_init($this.data.xor(other.data));
 | 
			
		||||
    tmp$_2 = (tmp$_1 = (tmp$_0 = this.key) != null ? new ULong_init((new ULong_init(Kotlin.Long.fromInt(tmp$_0.length))).data.shiftLeft(8)) : null) != null ? tmp$_1 : new ULong_init(Kotlin.Long.ZERO);
 | 
			
		||||
    var tmp$_4 = this.h;
 | 
			
		||||
    var tmp$_5 = new ULong_init(tmp$_3.data.xor(tmp$_2.data));
 | 
			
		||||
    var $receiver = this.hashLength;
 | 
			
		||||
    var other_0 = new ULong_init(Kotlin.Long.fromInt($receiver));
 | 
			
		||||
    tmp$_4[0] = new ULong_init(tmp$_5.data.xor(other_0.data));
 | 
			
		||||
    var $receiver_0 = this.key;
 | 
			
		||||
    var tmp$_6 = $receiver_0 == null;
 | 
			
		||||
    if (!tmp$_6) {
 | 
			
		||||
      tmp$_6 = $receiver_0.length === 0;
 | 
			
		||||
    }
 | 
			
		||||
    if (!tmp$_6) {
 | 
			
		||||
      this.appendToBuffer_0(Blake2b$Companion_getInstance().padToBlock_0(this.key), this.bufferCounter);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  function Blake2b$Companion() {
 | 
			
		||||
    Blake2b$Companion_instance = this;
 | 
			
		||||
@ -366,40 +441,14 @@
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
     else {
 | 
			
		||||
      var padToBlock_0$result;
 | 
			
		||||
      padToBlock_0$break: do {
 | 
			
		||||
        if (secretKey.length === 128) {
 | 
			
		||||
          padToBlock_0$result = secretKey;
 | 
			
		||||
          break padToBlock_0$break;
 | 
			
		||||
        }
 | 
			
		||||
        if (secretKey.length > 128) {
 | 
			
		||||
          throw IllegalStateException_init('Block larger than 128 bytes');
 | 
			
		||||
        }
 | 
			
		||||
        var array_1 = Array_0(128);
 | 
			
		||||
        var tmp$_7;
 | 
			
		||||
        tmp$_7 = array_1.length - 1 | 0;
 | 
			
		||||
        for (var i_1 = 0; i_1 <= tmp$_7; i_1++) {
 | 
			
		||||
          var init$result;
 | 
			
		||||
          if (0 <= i_1 && i_1 < secretKey.length) {
 | 
			
		||||
            init$result = secretKey[i_1];
 | 
			
		||||
          }
 | 
			
		||||
           else {
 | 
			
		||||
            init$result = new UByte(0);
 | 
			
		||||
          }
 | 
			
		||||
          array_1[i_1] = init$result;
 | 
			
		||||
        }
 | 
			
		||||
        padToBlock_0$result = array_1;
 | 
			
		||||
      }
 | 
			
		||||
       while (false);
 | 
			
		||||
      tmp$ = [padToBlock_0$result].concat(inputMessage);
 | 
			
		||||
      tmp$ = [this.padToBlock_0(secretKey)].concat(inputMessage);
 | 
			
		||||
    }
 | 
			
		||||
    var message = tmp$;
 | 
			
		||||
    if (message.length > 1) {
 | 
			
		||||
      tmp$_0 = message.length - 1 | 0;
 | 
			
		||||
      for (var i_2 = 0; i_2 < tmp$_0; i_2++) {
 | 
			
		||||
        var $receiver = this.compress_c1cv33$(h, message[i_2], toBigInteger((i_2 + 1 | 0) * 128 | 0), false);
 | 
			
		||||
      for (var i_1 = 0; i_1 < tmp$_0; i_1++) {
 | 
			
		||||
        var $receiver = this.compress_c1cv33$(h, message[i_1], toBigInteger((i_1 + 1 | 0) * 128 | 0), false);
 | 
			
		||||
        arrayCopy($receiver, h, 0, 0, $receiver.length);
 | 
			
		||||
        hexColumsPrint_1(h);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    switch (message.length) {
 | 
			
		||||
@ -414,114 +463,88 @@
 | 
			
		||||
    }
 | 
			
		||||
    var lastSize = tmp$_1;
 | 
			
		||||
    if (!(message.length === 0)) {
 | 
			
		||||
      var unpadded = message[message.length - 1 | 0];
 | 
			
		||||
      var padToBlock_0$result_0;
 | 
			
		||||
      padToBlock_0$break: do {
 | 
			
		||||
        if (unpadded.length === 128) {
 | 
			
		||||
          padToBlock_0$result_0 = unpadded;
 | 
			
		||||
          break padToBlock_0$break;
 | 
			
		||||
        }
 | 
			
		||||
        if (unpadded.length > 128) {
 | 
			
		||||
          throw IllegalStateException_init('Block larger than 128 bytes');
 | 
			
		||||
        }
 | 
			
		||||
        var array_2 = Array_0(128);
 | 
			
		||||
        var tmp$_8;
 | 
			
		||||
        tmp$_8 = array_2.length - 1 | 0;
 | 
			
		||||
        for (var i_3 = 0; i_3 <= tmp$_8; i_3++) {
 | 
			
		||||
          var init$result_0;
 | 
			
		||||
          if (0 <= i_3 && i_3 < unpadded.length) {
 | 
			
		||||
            init$result_0 = unpadded[i_3];
 | 
			
		||||
          }
 | 
			
		||||
           else {
 | 
			
		||||
            init$result_0 = new UByte(0);
 | 
			
		||||
          }
 | 
			
		||||
          array_2[i_3] = init$result_0;
 | 
			
		||||
        }
 | 
			
		||||
        padToBlock_0$result_0 = array_2;
 | 
			
		||||
      }
 | 
			
		||||
       while (false);
 | 
			
		||||
      tmp$_2 = padToBlock_0$result_0;
 | 
			
		||||
      tmp$_2 = this.padToBlock_0(message[message.length - 1 | 0]);
 | 
			
		||||
    }
 | 
			
		||||
     else {
 | 
			
		||||
      var array_3 = Array_0(16);
 | 
			
		||||
      var tmp$_9;
 | 
			
		||||
      tmp$_9 = array_3.length - 1 | 0;
 | 
			
		||||
      for (var i_4 = 0; i_4 <= tmp$_9; i_4++) {
 | 
			
		||||
        array_3[i_4] = new UByte(0);
 | 
			
		||||
      var array_1 = Array_0(16);
 | 
			
		||||
      var tmp$_7;
 | 
			
		||||
      tmp$_7 = array_1.length - 1 | 0;
 | 
			
		||||
      for (var i_2 = 0; i_2 <= tmp$_7; i_2++) {
 | 
			
		||||
        array_1[i_2] = new UByte(0);
 | 
			
		||||
      }
 | 
			
		||||
      tmp$_2 = array_3;
 | 
			
		||||
      tmp$_2 = array_1;
 | 
			
		||||
    }
 | 
			
		||||
    var lastBlockPadded = tmp$_2;
 | 
			
		||||
    var $receiver_0 = this.compress_c1cv33$(h, lastBlockPadded, toBigInteger(lastSize), true);
 | 
			
		||||
    arrayCopy($receiver_0, h, 0, 0, $receiver_0.length);
 | 
			
		||||
    return this.formatResult_0(h);
 | 
			
		||||
  };
 | 
			
		||||
  Blake2b$Companion.prototype.formatResult_0 = function (h) {
 | 
			
		||||
    var destination = ArrayList_init(h.length);
 | 
			
		||||
    var tmp$_10;
 | 
			
		||||
    for (tmp$_10 = 0; tmp$_10 !== h.length; ++tmp$_10) {
 | 
			
		||||
      var item = h[tmp$_10];
 | 
			
		||||
      var tmp$_11 = destination.add_11rb$;
 | 
			
		||||
    var tmp$;
 | 
			
		||||
    for (tmp$ = 0; tmp$ !== h.length; ++tmp$) {
 | 
			
		||||
      var item = h[tmp$];
 | 
			
		||||
      var tmp$_0 = destination.add_11rb$;
 | 
			
		||||
      var other = new ULong_init(Kotlin.Long.fromInt(255));
 | 
			
		||||
      var tmp$_1 = new UByte(toByte((new ULong_init(item.data.and(other.data))).data.toInt()));
 | 
			
		||||
      var $this = new ULong_init(item.data.shiftRightUnsigned(8));
 | 
			
		||||
      var other_0 = new ULong_init(Kotlin.Long.fromInt(255));
 | 
			
		||||
      var tmp$_2 = new UByte(toByte((new ULong_init($this.data.and(other_0.data))).data.toInt()));
 | 
			
		||||
      var $this_0 = new ULong_init(item.data.shiftRightUnsigned(16));
 | 
			
		||||
      var other_1 = new ULong_init(Kotlin.Long.fromInt(255));
 | 
			
		||||
      var tmp$_3 = new UByte(toByte((new ULong_init($this_0.data.and(other_1.data))).data.toInt()));
 | 
			
		||||
      var $this_1 = new ULong_init(item.data.shiftRightUnsigned(24));
 | 
			
		||||
      var other_2 = new ULong_init(Kotlin.Long.fromInt(255));
 | 
			
		||||
      var tmp$_12 = new UByte(toByte((new ULong_init(item.data.and(other_2.data))).data.toInt()));
 | 
			
		||||
      var $this_0 = new ULong_init(item.data.shiftRightUnsigned(8));
 | 
			
		||||
      var tmp$_4 = new UByte(toByte((new ULong_init($this_1.data.and(other_2.data))).data.toInt()));
 | 
			
		||||
      var $this_2 = new ULong_init(item.data.shiftRightUnsigned(32));
 | 
			
		||||
      var other_3 = new ULong_init(Kotlin.Long.fromInt(255));
 | 
			
		||||
      var tmp$_13 = new UByte(toByte((new ULong_init($this_0.data.and(other_3.data))).data.toInt()));
 | 
			
		||||
      var $this_1 = new ULong_init(item.data.shiftRightUnsigned(16));
 | 
			
		||||
      var tmp$_5 = new UByte(toByte((new ULong_init($this_2.data.and(other_3.data))).data.toInt()));
 | 
			
		||||
      var $this_3 = new ULong_init(item.data.shiftRightUnsigned(40));
 | 
			
		||||
      var other_4 = new ULong_init(Kotlin.Long.fromInt(255));
 | 
			
		||||
      var tmp$_14 = new UByte(toByte((new ULong_init($this_1.data.and(other_4.data))).data.toInt()));
 | 
			
		||||
      var $this_2 = new ULong_init(item.data.shiftRightUnsigned(24));
 | 
			
		||||
      var tmp$_6 = new UByte(toByte((new ULong_init($this_3.data.and(other_4.data))).data.toInt()));
 | 
			
		||||
      var $this_4 = new ULong_init(item.data.shiftRightUnsigned(48));
 | 
			
		||||
      var other_5 = new ULong_init(Kotlin.Long.fromInt(255));
 | 
			
		||||
      var tmp$_15 = new UByte(toByte((new ULong_init($this_2.data.and(other_5.data))).data.toInt()));
 | 
			
		||||
      var $this_3 = new ULong_init(item.data.shiftRightUnsigned(32));
 | 
			
		||||
      var tmp$_7 = new UByte(toByte((new ULong_init($this_4.data.and(other_5.data))).data.toInt()));
 | 
			
		||||
      var $this_5 = new ULong_init(item.data.shiftRightUnsigned(56));
 | 
			
		||||
      var other_6 = new ULong_init(Kotlin.Long.fromInt(255));
 | 
			
		||||
      var tmp$_16 = new UByte(toByte((new ULong_init($this_3.data.and(other_6.data))).data.toInt()));
 | 
			
		||||
      var $this_4 = new ULong_init(item.data.shiftRightUnsigned(40));
 | 
			
		||||
      var other_7 = new ULong_init(Kotlin.Long.fromInt(255));
 | 
			
		||||
      var tmp$_17 = new UByte(toByte((new ULong_init($this_4.data.and(other_7.data))).data.toInt()));
 | 
			
		||||
      var $this_5 = new ULong_init(item.data.shiftRightUnsigned(48));
 | 
			
		||||
      var other_8 = new ULong_init(Kotlin.Long.fromInt(255));
 | 
			
		||||
      var tmp$_18 = new UByte(toByte((new ULong_init($this_5.data.and(other_8.data))).data.toInt()));
 | 
			
		||||
      var $this_6 = new ULong_init(item.data.shiftRightUnsigned(56));
 | 
			
		||||
      var other_9 = new ULong_init(Kotlin.Long.fromInt(255));
 | 
			
		||||
      tmp$_11.call(destination, [tmp$_12, tmp$_13, tmp$_14, tmp$_15, tmp$_16, tmp$_17, tmp$_18, new UByte(toByte((new ULong_init($this_6.data.and(other_9.data))).data.toInt()))]);
 | 
			
		||||
      tmp$_0.call(destination, [tmp$_1, tmp$_2, tmp$_3, tmp$_4, tmp$_5, tmp$_6, tmp$_7, new UByte(toByte((new ULong_init($this_5.data.and(other_6.data))).data.toInt()))]);
 | 
			
		||||
    }
 | 
			
		||||
    var destination_0 = ArrayList_init_0();
 | 
			
		||||
    var tmp$_19;
 | 
			
		||||
    tmp$_19 = destination.iterator();
 | 
			
		||||
    while (tmp$_19.hasNext()) {
 | 
			
		||||
      var element = tmp$_19.next();
 | 
			
		||||
    var tmp$_8;
 | 
			
		||||
    tmp$_8 = destination.iterator();
 | 
			
		||||
    while (tmp$_8.hasNext()) {
 | 
			
		||||
      var element = tmp$_8.next();
 | 
			
		||||
      var list = toList_0(element);
 | 
			
		||||
      addAll(destination_0, list);
 | 
			
		||||
    }
 | 
			
		||||
    return copyToArray(destination_0);
 | 
			
		||||
  };
 | 
			
		||||
  Blake2b$Companion.prototype.padToBlock_0 = wrapFunction(function () {
 | 
			
		||||
    var Array_0 = Array;
 | 
			
		||||
    return function (unpadded) {
 | 
			
		||||
      if (unpadded.length === 128) {
 | 
			
		||||
        return unpadded;
 | 
			
		||||
  Blake2b$Companion.prototype.padToBlock_0 = function (unpadded) {
 | 
			
		||||
    if (unpadded.length === 128) {
 | 
			
		||||
      return unpadded;
 | 
			
		||||
    }
 | 
			
		||||
    if (unpadded.length > 128) {
 | 
			
		||||
      throw IllegalStateException_init('Block larger than 128 bytes');
 | 
			
		||||
    }
 | 
			
		||||
    var array = Array_0(128);
 | 
			
		||||
    var tmp$;
 | 
			
		||||
    tmp$ = array.length - 1 | 0;
 | 
			
		||||
    for (var i = 0; i <= tmp$; i++) {
 | 
			
		||||
      var init$result;
 | 
			
		||||
      if (0 <= i && i < unpadded.length) {
 | 
			
		||||
        init$result = unpadded[i];
 | 
			
		||||
      }
 | 
			
		||||
      if (unpadded.length > 128) {
 | 
			
		||||
        throw IllegalStateException_init('Block larger than 128 bytes');
 | 
			
		||||
       else {
 | 
			
		||||
        init$result = new UByte(0);
 | 
			
		||||
      }
 | 
			
		||||
      var array = Array_0(128);
 | 
			
		||||
      var tmp$;
 | 
			
		||||
      tmp$ = array.length - 1 | 0;
 | 
			
		||||
      for (var i = 0; i <= tmp$; i++) {
 | 
			
		||||
        var init$result;
 | 
			
		||||
        if (0 <= i && i < unpadded.length) {
 | 
			
		||||
          init$result = unpadded[i];
 | 
			
		||||
        }
 | 
			
		||||
         else {
 | 
			
		||||
          init$result = new UByte(0);
 | 
			
		||||
        }
 | 
			
		||||
        array[i] = init$result;
 | 
			
		||||
      }
 | 
			
		||||
      return array;
 | 
			
		||||
    };
 | 
			
		||||
  });
 | 
			
		||||
      array[i] = init$result;
 | 
			
		||||
    }
 | 
			
		||||
    return array;
 | 
			
		||||
  };
 | 
			
		||||
  Blake2b$Companion.$metadata$ = {
 | 
			
		||||
    kind: Kind_OBJECT,
 | 
			
		||||
    simpleName: 'Companion',
 | 
			
		||||
    interfaces: []
 | 
			
		||||
    interfaces: [Hash]
 | 
			
		||||
  };
 | 
			
		||||
  var Blake2b$Companion_instance = null;
 | 
			
		||||
  function Blake2b$Companion_getInstance() {
 | 
			
		||||
@ -530,17 +553,298 @@
 | 
			
		||||
    }
 | 
			
		||||
    return Blake2b$Companion_instance;
 | 
			
		||||
  }
 | 
			
		||||
  Blake2b.prototype.digest_jyasbz$ = function (inputString, key) {
 | 
			
		||||
    if (key === void 0)
 | 
			
		||||
      key = null;
 | 
			
		||||
    return Blake2b$Companion_getInstance().digest_jyasbz$(inputString, key);
 | 
			
		||||
  Blake2b.prototype.updateBlocking_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');
 | 
			
		||||
    }
 | 
			
		||||
    if ((this.bufferCounter + array.length | 0) < 128)
 | 
			
		||||
      this.appendToBuffer_0(array, this.bufferCounter);
 | 
			
		||||
    else if ((this.bufferCounter + array.length | 0) >= 128) {
 | 
			
		||||
      var last = array.length % 128;
 | 
			
		||||
      var hasLast = last !== 0;
 | 
			
		||||
      var numberOfSlices = array.length / 128 | 0;
 | 
			
		||||
      var list = ArrayList_init(0);
 | 
			
		||||
      for (var index = 0; index < 0; index++) {
 | 
			
		||||
        list.add_11rb$(emptyList());
 | 
			
		||||
      }
 | 
			
		||||
      var result = list;
 | 
			
		||||
      for (var i = 0; i < numberOfSlices; i++) {
 | 
			
		||||
        result.add_11rb$(slice(array, until(Kotlin.imul(i, 128), Kotlin.imul(i + 1 | 0, 128))));
 | 
			
		||||
      }
 | 
			
		||||
      if (hasLast) {
 | 
			
		||||
        result.add_11rb$(slice(array, until(Kotlin.imul(numberOfSlices, 128), array.length)));
 | 
			
		||||
      }
 | 
			
		||||
      var destination = ArrayList_init(collectionSizeOrDefault(result, 10));
 | 
			
		||||
      var tmp$;
 | 
			
		||||
      tmp$ = result.iterator();
 | 
			
		||||
      while (tmp$.hasNext()) {
 | 
			
		||||
        var item = tmp$.next();
 | 
			
		||||
        destination.add_11rb$(copyToArray(item));
 | 
			
		||||
      }
 | 
			
		||||
      var chunked = copyToArray(destination);
 | 
			
		||||
      var tmp$_0;
 | 
			
		||||
      for (tmp$_0 = 0; tmp$_0 !== chunked.length; ++tmp$_0) {
 | 
			
		||||
        var element = chunked[tmp$_0];
 | 
			
		||||
        if ((this.bufferCounter + element.length | 0) < 128) {
 | 
			
		||||
          this.appendToBuffer_0(element, this.bufferCounter);
 | 
			
		||||
        }
 | 
			
		||||
         else {
 | 
			
		||||
          arrayCopy(element, this.buffer, this.bufferCounter, 0, 128 - this.bufferCounter | 0);
 | 
			
		||||
          this.counter = this.counter.plus_za3lpa$(128);
 | 
			
		||||
          this.consumeBlock_0(this.buffer);
 | 
			
		||||
          var array_0 = Array_0(128);
 | 
			
		||||
          var tmp$_1;
 | 
			
		||||
          tmp$_1 = array_0.length - 1 | 0;
 | 
			
		||||
          for (var i_0 = 0; i_0 <= tmp$_1; i_0++) {
 | 
			
		||||
            var init$result;
 | 
			
		||||
            var tmp$_2;
 | 
			
		||||
            tmp$_2 = element.length - (128 - this.bufferCounter) | 0;
 | 
			
		||||
            if (0 <= i_0 && i_0 < tmp$_2) {
 | 
			
		||||
              init$result = element[i_0 + (128 - this.bufferCounter) | 0];
 | 
			
		||||
            }
 | 
			
		||||
             else {
 | 
			
		||||
              init$result = new UByte(0);
 | 
			
		||||
            }
 | 
			
		||||
            array_0[i_0] = init$result;
 | 
			
		||||
          }
 | 
			
		||||
          this.buffer = array_0;
 | 
			
		||||
          this.bufferCounter = element.length - (128 - this.bufferCounter) | 0;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  };
 | 
			
		||||
  Blake2b.prototype.updateBlocking_61zpoe$ = function (input) {
 | 
			
		||||
    var $receiver = encodeToByteArray(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.updateBlocking_ummv9a$(copyToArray(destination));
 | 
			
		||||
  };
 | 
			
		||||
  Blake2b.prototype.appendToBuffer_0 = function (array, start) {
 | 
			
		||||
    arrayCopy(array, this.buffer, start, 0, array.length);
 | 
			
		||||
    this.bufferCounter = this.bufferCounter + array.length | 0;
 | 
			
		||||
  };
 | 
			
		||||
  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, ''));
 | 
			
		||||
    return result;
 | 
			
		||||
  };
 | 
			
		||||
  Blake2b.prototype.digestString = function () {
 | 
			
		||||
    var $receiver = this.digest();
 | 
			
		||||
    var destination = ArrayList_init($receiver.length);
 | 
			
		||||
    var tmp$;
 | 
			
		||||
    for (tmp$ = 0; tmp$ !== $receiver.length; ++tmp$) {
 | 
			
		||||
      var item = $receiver[tmp$];
 | 
			
		||||
      destination.add_11rb$(toString(item, 16));
 | 
			
		||||
    }
 | 
			
		||||
    return joinToString(destination, '');
 | 
			
		||||
  };
 | 
			
		||||
  Blake2b.$metadata$ = {
 | 
			
		||||
    kind: Kind_CLASS,
 | 
			
		||||
    simpleName: 'Blake2b',
 | 
			
		||||
    interfaces: []
 | 
			
		||||
    interfaces: [UpdateableHash]
 | 
			
		||||
  };
 | 
			
		||||
  var chunked$lambda = wrapFunction(function () {
 | 
			
		||||
  function Blake2b_init(key, requestedHashLenght, $this) {
 | 
			
		||||
    if (requestedHashLenght === void 0)
 | 
			
		||||
      requestedHashLenght = 64;
 | 
			
		||||
    $this = $this || Object.create(Blake2b.prototype);
 | 
			
		||||
    var tmp$, tmp$_0, tmp$_1;
 | 
			
		||||
    var tmp$_2;
 | 
			
		||||
    if ((tmp$ = key != null ? encodeToByteArray(key) : null) != null) {
 | 
			
		||||
      var destination = ArrayList_init(tmp$.length);
 | 
			
		||||
      var tmp$_3;
 | 
			
		||||
      for (tmp$_3 = 0; tmp$_3 !== tmp$.length; ++tmp$_3) {
 | 
			
		||||
        var item = tmp$[tmp$_3];
 | 
			
		||||
        destination.add_11rb$(new UByte(item));
 | 
			
		||||
      }
 | 
			
		||||
      tmp$_2 = destination;
 | 
			
		||||
    }
 | 
			
		||||
     else
 | 
			
		||||
      tmp$_2 = null;
 | 
			
		||||
    Blake2b.call($this, (tmp$_1 = (tmp$_0 = tmp$_2) != null ? copyToArray(tmp$_0) : null) != null ? tmp$_1 : [], requestedHashLenght);
 | 
			
		||||
    return $this;
 | 
			
		||||
  }
 | 
			
		||||
  var chunked$lambda_0 = wrapFunction(function () {
 | 
			
		||||
    var copyToArray = Kotlin.kotlin.collections.copyToArray;
 | 
			
		||||
    return function (it) {
 | 
			
		||||
      return copyToArray(it);
 | 
			
		||||
@ -854,7 +1158,7 @@
 | 
			
		||||
    simpleName: 'Sha256',
 | 
			
		||||
    interfaces: []
 | 
			
		||||
  };
 | 
			
		||||
  var chunked$lambda_0 = wrapFunction(function () {
 | 
			
		||||
  var chunked$lambda_1 = wrapFunction(function () {
 | 
			
		||||
    var copyToArray = Kotlin.kotlin.collections.copyToArray;
 | 
			
		||||
    return function (it) {
 | 
			
		||||
      return copyToArray(it);
 | 
			
		||||
@ -1199,16 +1503,19 @@
 | 
			
		||||
  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 = {});
 | 
			
		||||
  package$crypto.Hash = Hash;
 | 
			
		||||
  package$crypto.UpdateableHash = UpdateableHash;
 | 
			
		||||
  package$crypto.hexColumsPrint_mgx7ee$ = hexColumsPrint;
 | 
			
		||||
  package$crypto.hexColumsPrint_q387ch$ = hexColumsPrint_0;
 | 
			
		||||
  package$crypto.hexColumsPrint_uo2ox1$ = hexColumsPrint_1;
 | 
			
		||||
  package$crypto.rotateRight_k13f4a$ = rotateRight;
 | 
			
		||||
  package$crypto.rotateRight_hc3rh$ = rotateRight_0;
 | 
			
		||||
  $$importsForInline$$['crypto-core'] = _;
 | 
			
		||||
  Object.defineProperty(Blake2b, 'Companion', {
 | 
			
		||||
    get: Blake2b$Companion_getInstance
 | 
			
		||||
  });
 | 
			
		||||
  $$importsForInline$$['crypto-core'] = _;
 | 
			
		||||
  var package$blake2b = package$crypto.blake2b || (package$crypto.blake2b = {});
 | 
			
		||||
  package$blake2b.Blake2b_init_9d67ql$ = Blake2b_init;
 | 
			
		||||
  package$blake2b.Blake2b = Blake2b;
 | 
			
		||||
  Object.defineProperty(Sha256, 'Companion', {
 | 
			
		||||
    get: Sha256$Companion_getInstance
 | 
			
		||||
@ -1221,6 +1528,6 @@
 | 
			
		||||
  package$sha.Sha512 = Sha512;
 | 
			
		||||
  Kotlin.defineModule('crypto-core', _);
 | 
			
		||||
  return _;
 | 
			
		||||
}(module.exports, require('kotlin'), require('bignum')));
 | 
			
		||||
}(module.exports, require('kotlin'), require('bignum'), require('kotlinx-coroutines-core')));
 | 
			
		||||
 | 
			
		||||
//# sourceMappingURL=crypto-core.js.map
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										2
									
								
								crypto-core/node_modules/crypto-core.js.map
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								crypto-core/node_modules/crypto-core.js.map
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										2
									
								
								crypto-core/node_modules/crypto-core.meta.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								crypto-core/node_modules/crypto-core.meta.js
									
									
									
										generated
									
									
										vendored
									
									
								
							@ -1 +1 @@
 | 
			
		||||
// Kotlin.kotlin_module_metadata(393729, "crypto-core", "H4sIAAAAAAAAAKVWTXPaVhTlSUI8XwF+YOMQkjSO0zSJm6SYxEmmXbTGcQvxBx7Ak48NI4OCVIPEgMjEWXTSdCZdtKtMF5nuuumiv6D/oMvO9Af0d3TV6X3SAyTIRztdPB3d866uHu+8e0SEyunfZfiJQKxpDu0jowXqkeN2LBuiG/2+fgykDnODjtU0atZTA+Sy7ULSNJ5sOp1hd7DftzBWDmwLr8Vj14DogYAdx26D1ndc3TWqVtvkafxhtdfRm8YATm496Rl9q2vYrt45sAdW2zZa9eMeTslNpwsxy7EHPVyH2uwf91wn/RAkRkClESZlIx5GBcYEUoFzAkFgXGASUWLzoNA5xvAKWE+hGkvlfiO5AovkkmlI07SSlkpynuTJCn9IzpLVMVdQmZKT8lLpBf2VRnILTMVI9ufzSp5wcilERvPkLxKZ5dUxv8w05GOrOLB8wiv/rYKTL6lE6SRDxQz19RnPJQUkevIVjSMDkfQfAN8p09soZBXbCbHDjn5kFA4hVhQ3c5tOt6fb+ADIG/YxxIvleq1R3mvcq1Tv+MprxZ3K5naj+KC+VYPk7sb9RmmjVhLxPI/Le/sHdUGohyjqkK/Bdo220QcoWu2yuE/w7O2tB+Ni+KJAsQSPJ9NSdQ1HAcd1HDcgXa0c7N3xVrdZ2d2vbtUwx3o8OrTi+EXxVHV1oLgRvb4xGAAxIWrZvaE7OqcJ59GjgeFuOkNcFi7wkWXrnWLHaR7hvjhOx9Bxx1pW2xi4EPee3MU6etvApjCafcPdNo4BTH1g7hh22zVB85JqLjZGG1SB8hFmyV3rCZDHQHQgh0CaQFpAkDkGijNVXEELYl1RPdr3Yujprbrjr4cObYxa2KGZYOvU3FbHOtzoWW/pqPT3BA9+BA97xDvyhEl4lZiMV5kp2ByKaKYoU70mkfA+Jhor5jUUz094TZNETmPzYu6kwJzAswJXBF4SeEvg7WwkJ7+iysqfCn0hZ9WClKdFiUp3P2Gnc35vJPOJQpydCUXviWgeI5UtYw/EEc8hMmyEu5+y84GERVzr+5Nu5hyySWQvBLIoxh9ggTle4HyogMou4kSqAJhyOadkST7FkypsNbSoDwORyq7wWohXBV4T+JHAPGIScY1jSeIF11nhtb/Sj66Hyt/gZUoR/tgyWw8sNs5uTqLSc4oZ1RSjPP3+i/qPNIoaPyNIQZiSkNKms1QW53uLU2x6iqFRjih+biRk0iEmgsxCiPkMmcUQk0cmE2KWkVkKMV8hcyLEZKtplp1sx/3n3P6qGXYqoPIcVxlnhBuulGgsG132DtjHRC3+O43Fw9xZ0/yygPbqm+ovcfhZfoepygNTx6439cL6zRk/Bd88a+WHW76bLnBva+xu1LYbn1cru42D8l5dfCUXp6d2KntfjGxtjid6k6De8+tJZh4HeqSJHmmiR5o3cKzjuInjFpCjkTVKTVPYDnkKqZEz4iJr3Cvz3J5m2DUgxtgGhXOOrUru6l+iXxloo+KfQHLQNI3WsGOIktHHemdoTNFrkHKdfc/QeD1/cW/5U8B3dX2tAOBthf/rT4wqrBVuFy13XCf97P/7HUdNYGLK684LvCjwiocKu+oh4zV9j/uahDxuti1pdclrS0AKT9+PNIbs3/I+QZ43ojbhFZ/PsGQwX8V8ss+7e36qX0dt8IM82wc5XgI74JTA0wLPcPStaQHNyCfPBsllQZ6bkGfYimirBJpyHJ13HPnOeuHdb6OeE6Mr4isuienLwfeuzpKZsf/im1bfSGseXY17hob7lvSjVChKh6KFULQYijKhaCkUnQhE82O/Am8fAsYyj56yUuEnI/Xmk8FQ6WvBE8APGFd6UlgLFl75huvMZnXWxM5rYuc1sfNaUGdNSKoFddaE+Np/0Pkdb5vWWROSakGdp8gMfkFnBX27zlpIZy2ksxbSWQvprIV01kI6ayGdRRSWlbykCkQgkhMfhpz4C/wPvcKX4WcNAAA=");
 | 
			
		||||
// Kotlin.kotlin_module_metadata(393729, "crypto-core", "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");
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								crypto-core/node_modules/crypto-core/com/ionspin/kotlin/crypto/blake2b/blake2b.kjsm
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								crypto-core/node_modules/crypto-core/com/ionspin/kotlin/crypto/blake2b/blake2b.kjsm
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								crypto-core/node_modules/crypto-core/com/ionspin/kotlin/crypto/crypto.kjsm
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								crypto-core/node_modules/crypto-core/com/ionspin/kotlin/crypto/crypto.kjsm
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											Binary file not shown.
										
									
								
							@ -23,5 +23,5 @@ package com.ionspin.kotlin.crypto
 | 
			
		||||
 */
 | 
			
		||||
interface Hash
 | 
			
		||||
 | 
			
		||||
interface StreamingHash : Hash
 | 
			
		||||
interface UpdateableHash : Hash
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -22,8 +22,6 @@ import com.ionspin.kotlin.crypto.*
 | 
			
		||||
import kotlinx.coroutines.CoroutineScope
 | 
			
		||||
import kotlinx.coroutines.Dispatchers
 | 
			
		||||
import kotlinx.coroutines.Job
 | 
			
		||||
import kotlinx.coroutines.async
 | 
			
		||||
import kotlin.text.chunked
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Created by Ugljesa Jovanovic
 | 
			
		||||
@ -32,7 +30,7 @@ import kotlin.text.chunked
 | 
			
		||||
 */
 | 
			
		||||
@ExperimentalStdlibApi
 | 
			
		||||
@ExperimentalUnsignedTypes
 | 
			
		||||
class Blake2b(val key: Array<UByte>? = null, val hashLength: Int = 64) : StreamingHash {
 | 
			
		||||
class Blake2b(val key: Array<UByte>? = null, val hashLength: Int = 64) : UpdateableHash {
 | 
			
		||||
    companion object : Hash {
 | 
			
		||||
 | 
			
		||||
        const val BITS_IN_WORD = 64
 | 
			
		||||
@ -250,7 +248,7 @@ class Blake2b(val key: Array<UByte>? = null, val hashLength: Int = 64) : Streami
 | 
			
		||||
        requestedHashLenght
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    val job = Job()
 | 
			
		||||
    var job = Job()
 | 
			
		||||
    val scope = CoroutineScope(Dispatchers.Default + job)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -268,7 +266,7 @@ class Blake2b(val key: Array<UByte>? = null, val hashLength: Int = 64) : Streami
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun updateBlocking(array: Array<UByte>) {
 | 
			
		||||
    fun update(array: Array<UByte>) {
 | 
			
		||||
        if (array.isEmpty()) {
 | 
			
		||||
            throw RuntimeException("Updating with empty array is not allowed. If you need empty hash, just call digest without updating")
 | 
			
		||||
        }
 | 
			
		||||
@ -309,8 +307,8 @@ class Blake2b(val key: Array<UByte>? = null, val hashLength: Int = 64) : Streami
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun updateBlocking(input: String) {
 | 
			
		||||
        updateBlocking(input.encodeToByteArray().map { it.toUByte() }.toTypedArray())
 | 
			
		||||
    fun update(input: String) {
 | 
			
		||||
        update(input.encodeToByteArray().map { it.toUByte() }.toTypedArray())
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun appendToBuffer(array: Array<UByte>, start: Int) {
 | 
			
		||||
@ -322,12 +320,6 @@ class Blake2b(val key: Array<UByte>? = null, val hashLength: Int = 64) : Streami
 | 
			
		||||
        h = compress(h, block, counter, false)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    suspend fun update(array: Array<UByte>) {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    fun digest(): Array<UByte> {
 | 
			
		||||
        val lastBlockPadded = padToBlock(buffer)
 | 
			
		||||
        counter += bufferCounter
 | 
			
		||||
 | 
			
		||||
@ -16,6 +16,9 @@
 | 
			
		||||
 | 
			
		||||
package com.ionspin.kotlin.crypto.blake2b
 | 
			
		||||
 | 
			
		||||
import com.ionspin.kotlin.crypto.util.testBlocking
 | 
			
		||||
import kotlinx.coroutines.GlobalScope
 | 
			
		||||
import kotlinx.coroutines.launch
 | 
			
		||||
import kotlin.test.Test
 | 
			
		||||
import kotlin.test.assertTrue
 | 
			
		||||
 | 
			
		||||
@ -26,10 +29,10 @@ import kotlin.test.assertTrue
 | 
			
		||||
 */
 | 
			
		||||
@ExperimentalUnsignedTypes
 | 
			
		||||
@ExperimentalStdlibApi
 | 
			
		||||
class Blake2bStreaming {
 | 
			
		||||
class Blake2bInstanceTest {
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    fun testStreamingBlake2b() {
 | 
			
		||||
    fun testUpdateableBlake2b() {
 | 
			
		||||
        val updates = 14
 | 
			
		||||
        val input = "1234567890"
 | 
			
		||||
        val expectedResult = arrayOf<UByte>(
 | 
			
		||||
@ -44,7 +47,7 @@ class Blake2bStreaming {
 | 
			
		||||
 | 
			
		||||
        val blake2b = Blake2b()
 | 
			
		||||
        for (i in 0 until updates) {
 | 
			
		||||
            blake2b.updateBlocking(input)
 | 
			
		||||
            blake2b.update(input)
 | 
			
		||||
        }
 | 
			
		||||
        val result = blake2b.digest()
 | 
			
		||||
 | 
			
		||||
@ -62,7 +65,7 @@ class Blake2bStreaming {
 | 
			
		||||
 | 
			
		||||
        val blake2b = Blake2b()
 | 
			
		||||
        for (i in 0 until updates) {
 | 
			
		||||
            blake2b.updateBlocking(input)
 | 
			
		||||
            blake2b.update(input)
 | 
			
		||||
        }
 | 
			
		||||
        val result = blake2b.digestString()
 | 
			
		||||
        assertTrue {
 | 
			
		||||
@ -75,7 +78,7 @@ class Blake2bStreaming {
 | 
			
		||||
        val test = "abc"
 | 
			
		||||
        val key = "key"
 | 
			
		||||
        val blake2b = Blake2b(key)
 | 
			
		||||
        blake2b.updateBlocking(test)
 | 
			
		||||
        blake2b.update(test)
 | 
			
		||||
        val result = blake2b.digest()
 | 
			
		||||
        val printout = result.map { it.toString(16) }.chunked(16)
 | 
			
		||||
        printout.forEach { println(it.joinToString(separator = " ") { it.toUpperCase() }) }
 | 
			
		||||
@ -49,13 +49,13 @@ class Blake2bKnowAnswerTests {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    fun knownAnswerTestStreaming() {
 | 
			
		||||
    fun knownAnswerTestInstance() {
 | 
			
		||||
 | 
			
		||||
        kat.forEach { kat ->
 | 
			
		||||
            val parsedInput = kat.input.chunked(2).map { it.toUByte(16) }.toTypedArray()
 | 
			
		||||
            val chunkedInput = parsedInput.toList().chunked(128).map { it.toTypedArray() }.toTypedArray()
 | 
			
		||||
            val blake2b = Blake2b(key = kat.key.chunked(2).map { it.toUByte(16) }.toTypedArray())
 | 
			
		||||
            chunkedInput.forEach { blake2b.updateBlocking(it) }
 | 
			
		||||
            chunkedInput.forEach { blake2b.update(it) }
 | 
			
		||||
            val result = blake2b.digest()
 | 
			
		||||
            assertTrue("KAT ${kat.input} \nkey: ${kat.key} \nexpected: {${kat.hash}") {
 | 
			
		||||
                result.contentEquals(kat.hash.chunked(2).map { it.toUByte(16) }.toTypedArray())
 | 
			
		||||
 | 
			
		||||
@ -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.util
 | 
			
		||||
 | 
			
		||||
import kotlinx.coroutines.CoroutineScope
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Created by Ugljesa Jovanovic
 | 
			
		||||
 * ugljesa.jovanovic@ionspin.com
 | 
			
		||||
 * on 20-Jul-2019
 | 
			
		||||
 */
 | 
			
		||||
expect fun testBlocking(block : suspend (scope : CoroutineScope) -> Unit)
 | 
			
		||||
@ -0,0 +1,28 @@
 | 
			
		||||
/*
 | 
			
		||||
 *    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.util
 | 
			
		||||
 | 
			
		||||
import kotlinx.coroutines.CoroutineScope
 | 
			
		||||
import kotlinx.coroutines.GlobalScope
 | 
			
		||||
import kotlinx.coroutines.promise
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Created by Ugljesa Jovanovic
 | 
			
		||||
 * ugljesa.jovanovic@ionspin.com
 | 
			
		||||
 * on 20-Jul-2019
 | 
			
		||||
 */
 | 
			
		||||
actual fun testBlocking(block: suspend (scope: CoroutineScope) -> Unit) : dynamic = GlobalScope.promise { block(this) }
 | 
			
		||||
@ -0,0 +1,27 @@
 | 
			
		||||
/*
 | 
			
		||||
 *    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.util
 | 
			
		||||
 | 
			
		||||
import kotlinx.coroutines.CoroutineScope
 | 
			
		||||
import kotlinx.coroutines.runBlocking
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Created by Ugljesa Jovanovic
 | 
			
		||||
 * ugljesa.jovanovic@ionspin.com
 | 
			
		||||
 * on 20-Jul-2019
 | 
			
		||||
 */
 | 
			
		||||
actual fun testBlocking(block: suspend (scope: CoroutineScope) -> Unit) = runBlocking { block(this) }
 | 
			
		||||
@ -0,0 +1,27 @@
 | 
			
		||||
/*
 | 
			
		||||
 *    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.util
 | 
			
		||||
 | 
			
		||||
import kotlinx.coroutines.CoroutineScope
 | 
			
		||||
import kotlinx.coroutines.runBlocking
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Created by Ugljesa Jovanovic
 | 
			
		||||
 * ugljesa.jovanovic@ionspin.com
 | 
			
		||||
 * on 20-Jul-2019
 | 
			
		||||
 */
 | 
			
		||||
actual fun testBlocking(block: suspend (scope: CoroutineScope) -> Unit) = runBlocking { block(this) }
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user