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