smesh_lol_web_common_crypto_chacha20poly1305.mjs raw

   1  // Package smesh.lol/web/common/crypto/chacha20poly1305
   2  // Generated by MoxieJS — Moxie JavaScript backend
   3  
   4  import * as $rt from './$runtime/index.mjs';
   5  
   6  import * as smesh$lol$web$common$crypto$chacha20 from './smesh_lol_web_common_crypto_chacha20.mjs';
   7  import * as smesh$lol$web$common$jsbridge$poly1305 from './smesh_lol_web_common_jsbridge_poly1305.mjs';
   8  
   9  // Package-level variables
  10  
  11  export function init() {
  12    return;
  13  }
  14  
  15  export function Seal(key, nonce, plaintext, aad) {
  16    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;
  17    $t0_1 = { $value: $rt.builtin.makeSlice(32, 32, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
  18    $t1_2 = $rt.builtin.sliceSlice($t0_1.$get(), undefined, undefined, undefined);
  19    $t2_3 = smesh$lol$web$common$crypto$chacha20.XORAt(key, nonce, 0, $t1_2);
  20    $t3_4 = $rt.builtin.sliceSlice($t2_3, 0, 32, undefined);
  21    $t4_5 = smesh$lol$web$common$crypto$chacha20.XORAt(key, nonce, 1, plaintext);
  22    $t5_6 = computeTag($t3_4, aad, $t4_5);
  23    $t6_7 = $rt.builtin.len($t4_5);
  24    $t7_8 = ($t6_7 + 16);
  25    $t8_9 = $rt.builtin.makeSlice($t7_8, $t7_8, 0);
  26    $t9_10 = $rt.builtin.copy($t8_9, $t4_5);
  27    $t10_11 = $rt.builtin.len($t4_5);
  28    $t11_12 = $rt.builtin.sliceSlice($t8_9, $t10_11, undefined, undefined);
  29    $t12_13 = $rt.builtin.copy($t11_12, $t5_6);
  30    return $t8_9;
  31  }
  32  
  33  export function Open(key, nonce, sealed, aad) {
  34    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;
  35    let $block = 0;
  36    while (true) {
  37      switch ($block) {
  38        case 0: {
  39          $t0_1 = $rt.builtin.len(sealed);
  40          $t1_2 = ($t0_1 < 16);
  41          if ($t1_2) {
  42            $block = 1; break;
  43          }
  44          else {
  45            $block = 2; break;
  46          }
  47          break;
  48        }
  49        case 1: {
  50          return [null, false];
  51          break;
  52        }
  53        case 2: {
  54          $t2_3 = $rt.builtin.len(sealed);
  55          $t3_4 = ($t2_3 - 16);
  56          $t4_5 = $rt.builtin.sliceSlice(sealed, undefined, $t3_4, undefined);
  57          $t5_6 = $rt.builtin.len(sealed);
  58          $t6_7 = ($t5_6 - 16);
  59          $t7_8 = $rt.builtin.sliceSlice(sealed, $t6_7, undefined, undefined);
  60          $t8_9 = { $value: $rt.builtin.makeSlice(32, 32, 0), $get() { return this.$value; }, $set(v) { this.$value = v; } };
  61          $t9_10 = $rt.builtin.sliceSlice($t8_9.$get(), undefined, undefined, undefined);
  62          $t10_11 = smesh$lol$web$common$crypto$chacha20.XORAt(key, nonce, 0, $t9_10);
  63          $t11_12 = $rt.builtin.sliceSlice($t10_11, 0, 32, undefined);
  64          $t12_13 = buildMACInput(aad, $t4_5);
  65          $t13_14 = smesh$lol$web$common$jsbridge$poly1305.Verify($t11_12, $t12_13, $t7_8);
  66          if ($t13_14) {
  67            $block = 4; break;
  68          }
  69          else {
  70            $block = 3; break;
  71          }
  72          break;
  73        }
  74        case 3: {
  75          return [null, false];
  76          break;
  77        }
  78        case 4: {
  79          $t14_15 = smesh$lol$web$common$crypto$chacha20.XORAt(key, nonce, 1, $t4_5);
  80          return [$t14_15, true];
  81          break;
  82        }
  83      }
  84    }
  85  }
  86  
  87  export function computeTag(polyKey, aad, ct) {
  88    let $t0_1, $t1_2;
  89    $t0_1 = buildMACInput(aad, ct);
  90    $t1_2 = smesh$lol$web$common$jsbridge$poly1305.MAC(polyKey, $t0_1);
  91    return $t1_2;
  92  }
  93  
  94  export function buildMACInput(aad, ct) {
  95    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;
  96    $t0_1 = $rt.builtin.len(aad);
  97    $t1_2 = ($t0_1 % 16);
  98    $t2_3 = (16 - $t1_2);
  99    $t3_4 = ($t2_3 % 16);
 100    $t4_5 = $rt.builtin.len(ct);
 101    $t5_6 = ($t4_5 % 16);
 102    $t6_7 = (16 - $t5_6);
 103    $t7_8 = ($t6_7 % 16);
 104    $t8_9 = $rt.builtin.len(aad);
 105    $t9_10 = ($t8_9 + $t3_4);
 106    $t10_11 = $rt.builtin.len(ct);
 107    $t11_12 = ($t9_10 + $t10_11);
 108    $t12_13 = ($t11_12 + $t7_8);
 109    $t13_14 = ($t12_13 + 16);
 110    $t14_15 = $rt.builtin.makeSlice($t13_14, $t13_14, 0);
 111    $t15_16 = $rt.builtin.sliceSlice($t14_15, 0, undefined, undefined);
 112    $t16_17 = $rt.builtin.copy($t15_16, aad);
 113    $t17_18 = $rt.builtin.len(aad);
 114    $t18_19 = ($t17_18 + $t3_4);
 115    $t19_20 = (0 + $t18_19);
 116    $t20_21 = $rt.builtin.sliceSlice($t14_15, $t19_20, undefined, undefined);
 117    $t21_22 = $rt.builtin.copy($t20_21, ct);
 118    $t22_23 = $rt.builtin.len(ct);
 119    $t23_24 = ($t22_23 + $t7_8);
 120    $t24_25 = ($t19_20 + $t23_24);
 121    $t25_26 = $rt.builtin.len(aad);
 122    $t26_27 = ($t25_26 >>> 0);
 123    $t27_28 = ($t26_27 & 0xFF);
 124    $t28_29 = $t14_15.addr($t24_25);
 125    $t28_29.$set($t27_28);
 126    $t29_30 = ($t24_25 + 1);
 127    $t30_31 = ($t26_27 >>> 8);
 128    $t31_32 = ($t30_31 & 0xFF);
 129    $t32_33 = $t14_15.addr($t29_30);
 130    $t32_33.$set($t31_32);
 131    $t33_34 = ($t24_25 + 2);
 132    $t34_35 = ($t26_27 >>> 16);
 133    $t35_36 = ($t34_35 & 0xFF);
 134    $t36_37 = $t14_15.addr($t33_34);
 135    $t36_37.$set($t35_36);
 136    $t37_38 = ($t24_25 + 3);
 137    $t38_39 = ($t26_27 >>> 24);
 138    $t39_40 = ($t38_39 & 0xFF);
 139    $t40_41 = $t14_15.addr($t37_38);
 140    $t40_41.$set($t39_40);
 141    $t41_42 = $rt.builtin.len(ct);
 142    $t42_43 = ($t41_42 >>> 0);
 143    $t43_44 = ($t24_25 + 8);
 144    $t44_45 = ($t42_43 & 0xFF);
 145    $t45_46 = $t14_15.addr($t43_44);
 146    $t45_46.$set($t44_45);
 147    $t46_47 = ($t24_25 + 9);
 148    $t47_48 = ($t42_43 >>> 8);
 149    $t48_49 = ($t47_48 & 0xFF);
 150    $t49_50 = $t14_15.addr($t46_47);
 151    $t49_50.$set($t48_49);
 152    $t50_51 = ($t24_25 + 10);
 153    $t51_52 = ($t42_43 >>> 16);
 154    $t52_53 = ($t51_52 & 0xFF);
 155    $t53_54 = $t14_15.addr($t50_51);
 156    $t53_54.$set($t52_53);
 157    $t54_55 = ($t24_25 + 11);
 158    $t55_56 = ($t42_43 >>> 24);
 159    $t56_57 = ($t55_56 & 0xFF);
 160    $t57_58 = $t14_15.addr($t54_55);
 161    $t57_58.$set($t56_57);
 162    return $t14_15;
 163  }
 164  
 165