smesh_lol_web_common_crypto_chacha20.mjs raw

   1  // Package smesh.lol/web/common/crypto/chacha20
   2  // Generated by MoxieJS — Moxie JavaScript backend
   3  
   4  import * as $rt from './$runtime/index.mjs';
   5  
   6  // Package-level variables
   7  
   8  export function init() {
   9    return;
  10  }
  11  
  12  export function XOR(key, nonce, data) {
  13    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47, $t47_48, $t48_49, $t49_50, $t50_51, $t51_52, $t52_53, $t53_54, $t54_55, $t55_56, $t56_57, $t57_58, $t58_59, $t59_60, $t60_61, $t61_62, $t62_63, $t63_64, $t64_65, $t65_66, $t66_67, $t67_68;
  14    let $block = 0;
  15    while (true) {
  16      switch ($block) {
  17        case 0: {
  18          $t0_1 = { $value: $rt.builtin.makeSlice(32, 32, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
  19          $t0_1.$set($rt.builtin.cloneValue(key));
  20          $t1_2 = { $value: $rt.builtin.makeSlice(12, 12, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
  21          $t1_2.$set($rt.builtin.cloneValue(nonce));
  22          $t2_3 = $rt.builtin.len(data);
  23          $t3_4 = $rt.builtin.makeSlice($t2_3, $t2_3, 0);
  24          $t4_5 = { $value: $rt.builtin.makeSlice(16, 16, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
  25          $t5_6 = $t4_5.$get().addr(0);
  26          $t5_6.$set(1634760805);
  27          $t6_7 = $t4_5.$get().addr(1);
  28          $t6_7.$set(857760878);
  29          $t7_8 = $t4_5.$get().addr(2);
  30          $t7_8.$set(2036477234);
  31          $t8_9 = $t4_5.$get().addr(3);
  32          $t8_9.$set(1797285236);
  33          $t9_10 = $rt.builtin.sliceSlice($t0_1.$get(), 0, 4, undefined);
  34          $t10_11 = le32($t9_10);
  35          $t11_12 = $t4_5.$get().addr(4);
  36          $t11_12.$set($t10_11);
  37          $t12_13 = $rt.builtin.sliceSlice($t0_1.$get(), 4, 8, undefined);
  38          $t13_14 = le32($t12_13);
  39          $t14_15 = $t4_5.$get().addr(5);
  40          $t14_15.$set($t13_14);
  41          $t15_16 = $rt.builtin.sliceSlice($t0_1.$get(), 8, 12, undefined);
  42          $t16_17 = le32($t15_16);
  43          $t17_18 = $t4_5.$get().addr(6);
  44          $t17_18.$set($t16_17);
  45          $t18_19 = $rt.builtin.sliceSlice($t0_1.$get(), 12, 16, undefined);
  46          $t19_20 = le32($t18_19);
  47          $t20_21 = $t4_5.$get().addr(7);
  48          $t20_21.$set($t19_20);
  49          $t21_22 = $rt.builtin.sliceSlice($t0_1.$get(), 16, 20, undefined);
  50          $t22_23 = le32($t21_22);
  51          $t23_24 = $t4_5.$get().addr(8);
  52          $t23_24.$set($t22_23);
  53          $t24_25 = $rt.builtin.sliceSlice($t0_1.$get(), 20, 24, undefined);
  54          $t25_26 = le32($t24_25);
  55          $t26_27 = $t4_5.$get().addr(9);
  56          $t26_27.$set($t25_26);
  57          $t27_28 = $rt.builtin.sliceSlice($t0_1.$get(), 24, 28, undefined);
  58          $t28_29 = le32($t27_28);
  59          $t29_30 = $t4_5.$get().addr(10);
  60          $t29_30.$set($t28_29);
  61          $t30_31 = $rt.builtin.sliceSlice($t0_1.$get(), 28, 32, undefined);
  62          $t31_32 = le32($t30_31);
  63          $t32_33 = $t4_5.$get().addr(11);
  64          $t32_33.$set($t31_32);
  65          $t33_34 = $t4_5.$get().addr(12);
  66          $t33_34.$set(0);
  67          $t34_35 = $rt.builtin.sliceSlice($t1_2.$get(), 0, 4, undefined);
  68          $t35_36 = le32($t34_35);
  69          $t36_37 = $t4_5.$get().addr(13);
  70          $t36_37.$set($t35_36);
  71          $t37_38 = $rt.builtin.sliceSlice($t1_2.$get(), 4, 8, undefined);
  72          $t38_39 = le32($t37_38);
  73          $t39_40 = $t4_5.$get().addr(14);
  74          $t39_40.$set($t38_39);
  75          $t40_41 = $rt.builtin.sliceSlice($t1_2.$get(), 8, 12, undefined);
  76          $t41_42 = le32($t40_41);
  77          $t42_43 = $t4_5.$get().addr(15);
  78          $t42_43.$set($t41_42);
  79          $t53_54 = 0;
  80          $block = 3; break;
  81          break;
  82        }
  83        case 1: {
  84          $t43_44 = { $value: $rt.builtin.makeSlice(64, 64, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
  85          $t44_45 = blockFn($t4_5, $t43_44);
  86          $t45_46 = $t4_5.$get().addr(12);
  87          $t46_47 = $t45_46.$get();
  88          $t47_48 = (($t46_47 + 1) >>> 0);
  89          $t48_49 = $t4_5.$get().addr(12);
  90          $t48_49.$set($t47_48);
  91          $t49_50 = $rt.builtin.len(data);
  92          $t50_51 = ($t49_50 - $t53_54);
  93          $t51_52 = Math.min($t50_51, 64);
  94          $t52_53 = (0 < $t51_52);
  95          if ($t52_53) {
  96            $t56_57 = 0;
  97            $block = 4; break;
  98          }
  99          else {
 100            $block = 5; break;
 101          }
 102          break;
 103        }
 104        case 2: {
 105          return $t3_4;
 106          break;
 107        }
 108        case 3: {
 109          $t54_55 = $rt.builtin.len(data);
 110          $t55_56 = ($t53_54 < $t54_55);
 111          if ($t55_56) {
 112            $block = 1; break;
 113          }
 114          else {
 115            $block = 2; break;
 116          }
 117          break;
 118        }
 119        case 4: {
 120          $t57_58 = ($t53_54 + $t56_57);
 121          $t58_59 = ($t53_54 + $t56_57);
 122          $t59_60 = data.addr($t58_59);
 123          $t60_61 = $t59_60.$get();
 124          $t61_62 = $t43_44.$get().addr($t56_57);
 125          $t62_63 = $t61_62.$get();
 126          $t63_64 = ($t60_61 ^ $t62_63);
 127          $t64_65 = $t3_4.addr($t57_58);
 128          $t64_65.$set($t63_64);
 129          $t65_66 = ($t56_57 + 1);
 130          $t66_67 = ($t65_66 < $t51_52);
 131          if ($t66_67) {
 132            $t56_57 = $t65_66;
 133            $block = 4; break;
 134          }
 135          else {
 136            $block = 5; break;
 137          }
 138          break;
 139        }
 140        case 5: {
 141          $t67_68 = ($t53_54 + $t51_52);
 142          $t53_54 = $t67_68;
 143          $block = 3; break;
 144          break;
 145        }
 146      }
 147    }
 148  }
 149  
 150  export function blockFn(state, out) {
 151    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43;
 152    let $block = 0;
 153    while (true) {
 154      switch ($block) {
 155        case 0: {
 156          $t0_1 = { $value: $rt.builtin.makeSlice(16, 16, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
 157          $t1_2 = $rt.builtin.sliceSlice($t0_1.$get(), undefined, undefined, undefined);
 158          $t2_3 = $rt.builtin.sliceSlice(state.$get(), undefined, undefined, undefined);
 159          $t3_4 = $rt.builtin.copy($t1_2, $t2_3);
 160          $t4_5 = (0 < 10);
 161          if ($t4_5) {
 162            $t5_6 = 0;
 163            $block = 1; break;
 164          }
 165          else {
 166            $block = 2; break;
 167          }
 168          break;
 169        }
 170        case 1: {
 171          $t6_7 = qr($t0_1, 0, 4, 8, 12);
 172          $t7_8 = qr($t0_1, 1, 5, 9, 13);
 173          $t8_9 = qr($t0_1, 2, 6, 10, 14);
 174          $t9_10 = qr($t0_1, 3, 7, 11, 15);
 175          $t10_11 = qr($t0_1, 0, 5, 10, 15);
 176          $t11_12 = qr($t0_1, 1, 6, 11, 12);
 177          $t12_13 = qr($t0_1, 2, 7, 8, 13);
 178          $t13_14 = qr($t0_1, 3, 4, 9, 14);
 179          $t14_15 = ($t5_6 + 1);
 180          $t15_16 = ($t14_15 < 10);
 181          if ($t15_16) {
 182            $t5_6 = $t14_15;
 183            $block = 1; break;
 184          }
 185          else {
 186            $block = 2; break;
 187          }
 188          break;
 189        }
 190        case 2: {
 191          $t16_17 = (0 < 16);
 192          if ($t16_17) {
 193            $t17_18 = 0;
 194            $block = 3; break;
 195          }
 196          else {
 197            $block = 4; break;
 198          }
 199          break;
 200        }
 201        case 3: {
 202          $t18_19 = $t0_1.$get().addr($t17_18);
 203          $t19_20 = $t18_19.$get();
 204          $t20_21 = state.$get().addr($t17_18);
 205          $t21_22 = $t20_21.$get();
 206          $t22_23 = (($t19_20 + $t21_22) >>> 0);
 207          $t23_24 = ($t17_18 * 4);
 208          $t24_25 = ($t22_23 & 0xFF);
 209          $t25_26 = out.$get().addr($t23_24);
 210          $t25_26.$set($t24_25);
 211          $t26_27 = ($t17_18 * 4);
 212          $t27_28 = ($t26_27 + 1);
 213          $t28_29 = ($t22_23 >>> 8);
 214          $t29_30 = ($t28_29 & 0xFF);
 215          $t30_31 = out.$get().addr($t27_28);
 216          $t30_31.$set($t29_30);
 217          $t31_32 = ($t17_18 * 4);
 218          $t32_33 = ($t31_32 + 2);
 219          $t33_34 = ($t22_23 >>> 16);
 220          $t34_35 = ($t33_34 & 0xFF);
 221          $t35_36 = out.$get().addr($t32_33);
 222          $t35_36.$set($t34_35);
 223          $t36_37 = ($t17_18 * 4);
 224          $t37_38 = ($t36_37 + 3);
 225          $t38_39 = ($t22_23 >>> 24);
 226          $t39_40 = ($t38_39 & 0xFF);
 227          $t40_41 = out.$get().addr($t37_38);
 228          $t40_41.$set($t39_40);
 229          $t41_42 = ($t17_18 + 1);
 230          $t42_43 = ($t41_42 < 16);
 231          if ($t42_43) {
 232            $t17_18 = $t41_42;
 233            $block = 3; break;
 234          }
 235          else {
 236            $block = 4; break;
 237          }
 238          break;
 239        }
 240        case 4: {
 241          return;
 242          break;
 243        }
 244      }
 245    }
 246  }
 247  
 248  export function qr(s, a, b, c, d) {
 249    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18, $t18_19, $t19_20, $t20_21, $t21_22, $t22_23, $t23_24, $t24_25, $t25_26, $t26_27, $t27_28, $t28_29, $t29_30, $t30_31, $t31_32, $t32_33, $t33_34, $t34_35, $t35_36, $t36_37, $t37_38, $t38_39, $t39_40, $t40_41, $t41_42, $t42_43, $t43_44, $t44_45, $t45_46, $t46_47, $t47_48, $t48_49, $t49_50, $t50_51, $t51_52, $t52_53, $t53_54, $t54_55, $t55_56, $t56_57, $t57_58, $t58_59, $t59_60, $t60_61, $t61_62, $t62_63, $t63_64, $t64_65, $t65_66, $t66_67, $t67_68, $t68_69, $t69_70, $t70_71, $t71_72, $t72_73, $t73_74, $t74_75, $t75_76, $t76_77, $t77_78, $t78_79, $t79_80;
 250    $t0_1 = s.$get().addr(b);
 251    $t1_2 = $t0_1.$get();
 252    $t2_3 = s.$get().addr(a);
 253    $t3_4 = $t2_3.$get();
 254    $t4_5 = (($t3_4 + $t1_2) >>> 0);
 255    $t5_6 = s.$get().addr(a);
 256    $t5_6.$set($t4_5);
 257    $t6_7 = s.$get().addr(a);
 258    $t7_8 = $t6_7.$get();
 259    $t8_9 = s.$get().addr(d);
 260    $t9_10 = $t8_9.$get();
 261    $t10_11 = (($t9_10 ^ $t7_8) >>> 0);
 262    $t11_12 = s.$get().addr(d);
 263    $t11_12.$set($t10_11);
 264    $t12_13 = s.$get().addr(d);
 265    $t13_14 = $t12_13.$get();
 266    $t14_15 = (($t13_14 << 16) >>> 0);
 267    $t15_16 = s.$get().addr(d);
 268    $t16_17 = $t15_16.$get();
 269    $t17_18 = ($t16_17 >>> 16);
 270    $t18_19 = (($t14_15 + $t17_18) >>> 0);
 271    $t19_20 = s.$get().addr(d);
 272    $t19_20.$set($t18_19);
 273    $t20_21 = s.$get().addr(d);
 274    $t21_22 = $t20_21.$get();
 275    $t22_23 = s.$get().addr(c);
 276    $t23_24 = $t22_23.$get();
 277    $t24_25 = (($t23_24 + $t21_22) >>> 0);
 278    $t25_26 = s.$get().addr(c);
 279    $t25_26.$set($t24_25);
 280    $t26_27 = s.$get().addr(c);
 281    $t27_28 = $t26_27.$get();
 282    $t28_29 = s.$get().addr(b);
 283    $t29_30 = $t28_29.$get();
 284    $t30_31 = (($t29_30 ^ $t27_28) >>> 0);
 285    $t31_32 = s.$get().addr(b);
 286    $t31_32.$set($t30_31);
 287    $t32_33 = s.$get().addr(b);
 288    $t33_34 = $t32_33.$get();
 289    $t34_35 = (($t33_34 << 12) >>> 0);
 290    $t35_36 = s.$get().addr(b);
 291    $t36_37 = $t35_36.$get();
 292    $t37_38 = ($t36_37 >>> 20);
 293    $t38_39 = (($t34_35 + $t37_38) >>> 0);
 294    $t39_40 = s.$get().addr(b);
 295    $t39_40.$set($t38_39);
 296    $t40_41 = s.$get().addr(b);
 297    $t41_42 = $t40_41.$get();
 298    $t42_43 = s.$get().addr(a);
 299    $t43_44 = $t42_43.$get();
 300    $t44_45 = (($t43_44 + $t41_42) >>> 0);
 301    $t45_46 = s.$get().addr(a);
 302    $t45_46.$set($t44_45);
 303    $t46_47 = s.$get().addr(a);
 304    $t47_48 = $t46_47.$get();
 305    $t48_49 = s.$get().addr(d);
 306    $t49_50 = $t48_49.$get();
 307    $t50_51 = (($t49_50 ^ $t47_48) >>> 0);
 308    $t51_52 = s.$get().addr(d);
 309    $t51_52.$set($t50_51);
 310    $t52_53 = s.$get().addr(d);
 311    $t53_54 = $t52_53.$get();
 312    $t54_55 = (($t53_54 << 8) >>> 0);
 313    $t55_56 = s.$get().addr(d);
 314    $t56_57 = $t55_56.$get();
 315    $t57_58 = ($t56_57 >>> 24);
 316    $t58_59 = (($t54_55 + $t57_58) >>> 0);
 317    $t59_60 = s.$get().addr(d);
 318    $t59_60.$set($t58_59);
 319    $t60_61 = s.$get().addr(d);
 320    $t61_62 = $t60_61.$get();
 321    $t62_63 = s.$get().addr(c);
 322    $t63_64 = $t62_63.$get();
 323    $t64_65 = (($t63_64 + $t61_62) >>> 0);
 324    $t65_66 = s.$get().addr(c);
 325    $t65_66.$set($t64_65);
 326    $t66_67 = s.$get().addr(c);
 327    $t67_68 = $t66_67.$get();
 328    $t68_69 = s.$get().addr(b);
 329    $t69_70 = $t68_69.$get();
 330    $t70_71 = (($t69_70 ^ $t67_68) >>> 0);
 331    $t71_72 = s.$get().addr(b);
 332    $t71_72.$set($t70_71);
 333    $t72_73 = s.$get().addr(b);
 334    $t73_74 = $t72_73.$get();
 335    $t74_75 = (($t73_74 << 7) >>> 0);
 336    $t75_76 = s.$get().addr(b);
 337    $t76_77 = $t75_76.$get();
 338    $t77_78 = ($t76_77 >>> 25);
 339    $t78_79 = (($t74_75 + $t77_78) >>> 0);
 340    $t79_80 = s.$get().addr(b);
 341    $t79_80.$set($t78_79);
 342    return;
 343  }
 344  
 345  export function le32(b) {
 346    let $t0_1, $t1_2, $t2_3, $t3_4, $t4_5, $t5_6, $t6_7, $t7_8, $t8_9, $t9_10, $t10_11, $t11_12, $t12_13, $t13_14, $t14_15, $t15_16, $t16_17, $t17_18;
 347    $t0_1 = b.addr(0);
 348    $t1_2 = $t0_1.$get();
 349    $t2_3 = ($t1_2 >>> 0);
 350    $t3_4 = b.addr(1);
 351    $t4_5 = $t3_4.$get();
 352    $t5_6 = ($t4_5 >>> 0);
 353    $t6_7 = (($t5_6 << 8) >>> 0);
 354    $t7_8 = (($t2_3 + $t6_7) >>> 0);
 355    $t8_9 = b.addr(2);
 356    $t9_10 = $t8_9.$get();
 357    $t10_11 = ($t9_10 >>> 0);
 358    $t11_12 = (($t10_11 << 16) >>> 0);
 359    $t12_13 = (($t7_8 + $t11_12) >>> 0);
 360    $t13_14 = b.addr(3);
 361    $t14_15 = $t13_14.$get();
 362    $t15_16 = ($t14_15 >>> 0);
 363    $t16_17 = (($t15_16 << 24) >>> 0);
 364    $t17_18 = (($t12_13 + $t16_17) >>> 0);
 365    return $t17_18;
 366  }
 367  
 368