From 442a3fe7fe037914d446e94ba51d946cff0f08a9 Mon Sep 17 00:00:00 2001 From: praisethemoon Date: Mon, 18 May 2026 23:20:54 +0200 Subject: [PATCH 1/3] typev: use native sha1 --- frameworks/typev/Dockerfile | 2 +- .../benchmark-code/stdlib/internal/socket.tc | 6 ++++++ frameworks/typev/bundle/output.tvbc | Bin 28673 -> 28673 bytes 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/frameworks/typev/Dockerfile b/frameworks/typev/Dockerfile index 1b1ea558b..e0eadfa2b 100644 --- a/frameworks/typev/Dockerfile +++ b/frameworks/typev/Dockerfile @@ -12,7 +12,7 @@ WORKDIR /app # typev VM — binary + FFI plugins (json, stdcore, stdsocket, ...). Pre-built # (-O3 -march=x86-64-v3, static liburing) and fetched from object storage RUN wget -q -O /tmp/typev.zip \ - https://typev.s3.fr-par.scw.cloud/typev-17-05-2026.zip && \ + https://typev.s3.fr-par.scw.cloud/typev-18-05-2026.zip && \ unzip -q /tmp/typev.zip -d /app && \ rm /tmp/typev.zip diff --git a/frameworks/typev/bundle/benchmark-code/stdlib/internal/socket.tc b/frameworks/typev/bundle/benchmark-code/stdlib/internal/socket.tc index 84e2522a8..c242fb21e 100644 --- a/frameworks/typev/bundle/benchmark-code/stdlib/internal/socket.tc +++ b/frameworks/typev/bundle/benchmark-code/stdlib/internal/socket.tc @@ -234,4 +234,10 @@ extern socket from "stdsocket" = { * Returns the number of complete request terminators found. */ fn count_http_terminators(buf: uint[], n: uint) -> uint + + /** + * SHA-1 of data[0..len) into the 20-byte `out` buffer. Native — keeps the + * 80-round hash off the bytecode path. Returns 0, or -1 if out < 20. + */ + fn socket_sha1(data: uint[], len: uint, out: uint[]) -> int } diff --git a/frameworks/typev/bundle/output.tvbc b/frameworks/typev/bundle/output.tvbc index baf128c9c1b178062f441bd06f06c265a09fccf6..390b3dca254e361e36faaaa6c870fd709585a701 100644 GIT binary patch delta 3823 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 From 85a28797874eac2a4ffa5a0db9dece9b12d0b8b4 Mon Sep 17 00:00:00 2001 From: praisethemoon Date: Tue, 19 May 2026 13:55:25 +0200 Subject: [PATCH 2/3] typev: use native sha1 & b64 --- .../typev/bundle/benchmark-code/src/ws.tc | 139 +----------------- .../benchmark-code/stdlib/internal/socket.tc | 7 +- frameworks/typev/bundle/output.tvbc | Bin 28673 -> 26487 bytes 3 files changed, 9 insertions(+), 137 deletions(-) diff --git a/frameworks/typev/bundle/benchmark-code/src/ws.tc b/frameworks/typev/bundle/benchmark-code/src/ws.tc index 65e00633d..c5064a4c5 100644 --- a/frameworks/typev/bundle/benchmark-code/src/ws.tc +++ b/frameworks/typev/bundle/benchmark-code/src/ws.tc @@ -3,13 +3,9 @@ // frame echo loop: read masked client frames, echo them unmasked. from std.socket import tcp_write, tcp_read +from std.internal.socket import socket from response import writeBytes -// Low 32 bits mask — SHA-1 is 32-bit arithmetic; typev `uint` is 64-bit. -let local const M32: uint = 4294967295u - -let local const B64: byte[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".bytes() -let local const WS_GUID: byte[] = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11".bytes() let local const WS_101: byte[] = "HTTP/1.1 101 Switching Protocols\r\nUpgrade: websocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: ".bytes() let local const WS_CRLF2: byte[] = "\r\n\r\n".bytes() let local const WS_BAD: byte[] = "HTTP/1.1 400 Bad Request\r\nContent-Length: 0\r\nConnection: close\r\n\r\n".bytes() @@ -36,136 +32,11 @@ local fn wsSend(fd: int, b: byte[], len: uint) -> bool { return true } -// 32-bit rotate-left. -local fn rotl32(x: uint, n: uint) -> uint { - return ((x << n) | (x >> (32u - n))) & M32 -} - -// SHA-1 of data[0..n) — returns the 20-byte digest. -local fn sha1(data: byte[], n: uint) -> byte[] { - let padded: uint = ((n + 8u) / 64u + 1u) * 64u - let msg: byte[] = new byte[](padded) - foreach i: uint in 0u, n { - msg[i] = data[i] - } - msg[n] = 128 as byte - foreach i: uint in n + 1u, padded { - msg[i] = 0 as byte - } - let bits: uint = n * 8u - foreach i: uint in 0u, 8u { - msg[padded - 1u - i] = ((bits >> (8u * i)) & 255u) as byte - } - - let h0: uint = 1732584193u - let h1: uint = 4023233417u - let h2: uint = 2562383102u - let h3: uint = 271733878u - let h4: uint = 3285377520u - let w: uint[] = new uint[](80) - let blocks: uint = padded / 64u - - foreach b: uint in 0u, blocks { - let base: uint = b * 64u - foreach t: uint in 0u, 16u { - let o: uint = base + t * 4u - w[t] = (((msg[o] as uint) << 24u) | ((msg[o + 1u] as uint) << 16u) - | ((msg[o + 2u] as uint) << 8u) | (msg[o + 3u] as uint)) & M32 - } - foreach t: uint in 16u, 80u { - w[t] = rotl32((w[t - 3u] ^ w[t - 8u] ^ w[t - 14u] ^ w[t - 16u]) & M32, 1u) - } - let a: uint = h0 - let bb: uint = h1 - let c: uint = h2 - let d: uint = h3 - let e: uint = h4 - foreach t: uint in 0u, 80u { - let f: uint = 0u - let k: uint = 0u - if t < 20u { - f = (bb & c) | ((M32 ^ bb) & d) - k = 1518500249u - } else if t < 40u { - f = bb ^ c ^ d - k = 1859775393u - } else if t < 60u { - f = (bb & c) | (bb & d) | (c & d) - k = 2400959708u - } else { - f = bb ^ c ^ d - k = 3395469782u - } - let tt: uint = (rotl32(a, 5u) + (f & M32) + e + k + w[t]) & M32 - e = d - d = c - c = rotl32(bb, 30u) - bb = a - a = tt - } - h0 = (h0 + a) & M32 - h1 = (h1 + bb) & M32 - h2 = (h2 + c) & M32 - h3 = (h3 + d) & M32 - h4 = (h4 + e) & M32 - } - - let digest: byte[] = new byte[](20) - let hs: uint[] = [h0, h1, h2, h3, h4] - foreach i: uint in 0u, 5u { - let v: uint = hs[i] - digest[i * 4u] = ((v >> 24u) & 255u) as byte - digest[i * 4u + 1u] = ((v >> 16u) & 255u) as byte - digest[i * 4u + 2u] = ((v >> 8u) & 255u) as byte - digest[i * 4u + 3u] = (v & 255u) as byte - } - return digest -} - -// Base64-encode data[0..n). -local fn b64encode(data: byte[], n: uint) -> byte[] { - let outLen: uint = ((n + 2u) / 3u) * 4u - let out: byte[] = new byte[](outLen) - let i: uint = 0u - let o: uint = 0u - while i + 3u <= n { - let x: uint = ((data[i] as uint) << 16u) | ((data[i + 1u] as uint) << 8u) | (data[i + 2u] as uint) - out[o] = B64[(x >> 18u) & 63u] - out[o + 1u] = B64[(x >> 12u) & 63u] - out[o + 2u] = B64[(x >> 6u) & 63u] - out[o + 3u] = B64[x & 63u] - i = i + 3u - o = o + 4u - } - let rem: uint = n - i - if rem == 1u { - let x: uint = (data[i] as uint) << 16u - out[o] = B64[(x >> 18u) & 63u] - out[o + 1u] = B64[(x >> 12u) & 63u] - out[o + 2u] = 61 as byte - out[o + 3u] = 61 as byte - } else if rem == 2u { - let x: uint = ((data[i] as uint) << 16u) | ((data[i + 1u] as uint) << 8u) - out[o] = B64[(x >> 18u) & 63u] - out[o + 1u] = B64[(x >> 12u) & 63u] - out[o + 2u] = B64[(x >> 6u) & 63u] - out[o + 3u] = 61 as byte - } - return out -} - -// Sec-WebSocket-Accept = base64(SHA1(key + GUID)). +// Sec-WebSocket-Accept = base64(SHA1(key + GUID)) — computed natively. local fn wsAccept(key: byte[], keyStart: uint, keyEnd: uint) -> byte[] { - let keyLen: uint = keyEnd - keyStart - let concat: byte[] = new byte[](keyLen + WS_GUID.length) - foreach i: uint in 0u, keyLen { - concat[i] = key[keyStart + i] - } - foreach i: uint in 0u, WS_GUID.length { - concat[keyLen + i] = WS_GUID[i] - } - let digest: byte[] = sha1(concat, concat.length) - return b64encode(digest, 20u) + let out: byte[] = new byte[](28) + socket.socket_ws_accept(key, keyStart, keyEnd - keyStart, out) + return out } // Send the 101 upgrade response; `scratch` is the caller's output buffer. diff --git a/frameworks/typev/bundle/benchmark-code/stdlib/internal/socket.tc b/frameworks/typev/bundle/benchmark-code/stdlib/internal/socket.tc index c242fb21e..11133663f 100644 --- a/frameworks/typev/bundle/benchmark-code/stdlib/internal/socket.tc +++ b/frameworks/typev/bundle/benchmark-code/stdlib/internal/socket.tc @@ -236,8 +236,9 @@ extern socket from "stdsocket" = { fn count_http_terminators(buf: uint[], n: uint) -> uint /** - * SHA-1 of data[0..len) into the 20-byte `out` buffer. Native — keeps the - * 80-round hash off the bytecode path. Returns 0, or -1 if out < 20. + * WebSocket Sec-WebSocket-Accept = base64(SHA1(key + GUID)), written as + * 28 bytes into `out`. Native — the whole handshake digest in one call. + * Returns 0, or -1 if out < 28. */ - fn socket_sha1(data: uint[], len: uint, out: uint[]) -> int + fn socket_ws_accept(key: uint[], start: uint, len: uint, out: uint[]) -> int } diff --git a/frameworks/typev/bundle/output.tvbc b/frameworks/typev/bundle/output.tvbc index 390b3dca254e361e36faaaa6c870fd709585a701..4f04b54505c8a967bced92ad471b79ee62c76480 100644 GIT binary patch delta 1849 zcmZ9MU2IfU5XWcky=RvNwo8Fhu=Iniw9GCwWjJN%g@8O^i{Z7-BFc`arDzb9bZ0o6P)X=G-~= zoH=vP;qUm5FF2!i&9+t_5nbYba)BkZn9?Xn7is3zj0|PJr4D#n<>Wd7y z6HfP@{)kGLd-mBO-{W5Hm74hxyD6*BluvSJ+7r2L%mcF6Kfrl%$^SkN+D!{rSUe=B z3U2Tda}@d<=uvP zg#p^nWU@)L*Dy>n$*?TMOtRQ=VisA5sZzPy5a57hHa6v!(`+xLbdnjj+~q_mWw`X}VPmLI9#0Aqc~qPkSxHEHT+Yxh$H3YPd0ub{dCF zSR8**+S)7Avygz@GWjsa3^H#iCd*wQ@3i|-)tl{k{F40Eo{vMB*OA9!S9feQ^v(&p%c;c_p| z#f1f8Y2$8Fu7$H_DPn!T>4?oG&qTTre?@)?_x>|aZ)6eXIUCXQd=T+Ne-)|z-#j_p zC451y_N4jH3kJ4qxM%{CzA6LVW$c!>y91e1usD3fm1r0@*hyBL6j|fSBlo(~d8&AN zGJGBsb8>P5g+|e646|msrxE@JdQG5B;rs{KQ zvw!UQn8U*`nT|r6bj-1jL#NV7#~yLwKREVnNB`vLJC42&P4t(eF$o^51rJuIpL9qV z(j{5Z!!sxG5LLrp1z8EPuSL%>r$|%(q0|5wW;Q9a6ni|It<0c&(_ic@Bm6FgvdYP_ z%4POrq1YJv>Ed*@lvO}u)iA(f$Kp9)`2c? z1Ly|pL7m?KPJ)d|e3{_HCY{D<0 zSi)FBw_Npf1=mNE=Q{1yhnB;SL4DXdE*j7zc6?kSU_ZMYzaK#zk3w|IM&anZXmUJ? fWZlHkWPTJ4m>5@@xwzMBoW%XSI?383*EswecaT5A delta 3949 zcmaJ^YiwM_6`nIQ_kHiacO5na+j)5t$9C36zKb|{R^9R5i+%U9p z)9~gkTT9z+**>yk=jhn3@~ykaZ@c}Dz5DhbIC$vrk)y}%I(}ku>h60^o~qq@-{~{= zPcJWauUOgByJ~e`d)Gqf=fS3r(;uJab?HKRT~F8`g(>2JBE4&H!R;cw7O?Q zvA7pJ7r#frK~c!?I)AxUf(l9i?4lJ~MvzzmWmB%A#mauA!_3N)C?Z0JGlHIy9#7SLXv z#aCzX*Fg2Vs=5KR-}%4X_vZUQpL_A;zq~W~{Qc+dP*ME!gPAw(D|aXU{r=CMyYR!e zKA{Dh4i|(;BT^RyPO>C)j&v21lB+|M1oNcBzH-EbBNo#q3=z~cgG~#~s2E@PWCWlM zDwsrMKvqIhW8BBhVN6I75P~o*Oj(g%_$3W#h8u-UXj8&ah;%ZMR>p*71|?Hi+jUbT z^Ew+fOuf@2-l1D24Coc>GoM>XHyb`WNHGH`rE83|oov!fXv)PAPv?YsBbR)YQd}hq zOE7mLb|ENvdaN;-V3dUM6z0>+Wf_*7NTq|4%TsOK^=d8`rR*HHkR)DnlcJPMxMeq& zE#x?_WpkpGG_&Pw67z!Bcv6&;JS(#}MV?Kb)p)9s`p75Ghmq7yMrjzzz=FlhQ z%2YC+_|R!VrwyGBG#l86P9Ap7VN-3+Z-UV|*x?P>UDM4$wDTkcybLojS7l}}id{*s zmyPGM-l&(#m$~QiJnpO{%U9VA0p$xy7PJJ%V`t~I zHRT+cg8?T8e#(eKYox$W>oN_#o^GndPWu$gu*n#YQCwq_A`vHi3VmTQLh|{-CPD)G z!r_D@^o1b^iRcSmB9%cS!VZ$s_HhOr=OS=ElGzh{PH@KH`iMQpAP3oPId;k6d^%=1 zBTm8~3q0F$N*3pZI9by%J3bOO4YHN29WUA7JKR?Ck*s4Gk*qBs>(~|kCx0eJ!M9-c z5K5iHeliOJ_j1(Z-VmJDN+C*|OI+Q&QQhDhLQ5Eos%&9U6B;X-2~jXes|kaZEK`() zWfm;1)l7?(F_xmhMvRm-X7?L4!xq!r(4_&M=~`n>zgaUKqk#SE)7-SBi3vxy#@v3V z=D23T=HNTFbP5bSt7f@Q!4}|IHc(ZuU9hB%U|Lo7j^ANvge)Gi+j^Nrpp+3mg|oBaiu&SE4a!L%Oz_aE5wy?3*iOrMn<8qIUtL( zCK#!*8-tn)LVl&26c3-6%aJO z!>om=Ka>mJ69Nk)6H;5krgWyY8M>I%xq*Ds)qRUp#r@Z~SOso4Yr>X68*;a13N~$+ zcE$dekB<$L4ivb|Arru^a7aRy3rG+9x2-p?L z!Z-FTAPPU+(@Z=xCRE=xu|ho+kVNp6t{6N#Jkgw%2n<#?fj5U)Gfh0W96mpBB>Vrh z<|=K_y1t_HRVxe7pR4r$kJh&<9rWGsgK9PoYw+v}*Vqh9yb!ijyGajsRlDZlN>EW# zw*!O>V3o-L{>v+x8NOI;YKK!gK7u$%Rg;j=A_;tfuLyi7#r5mzbuc4|y$DUKa~^eN;-%ZzP9&l z9{)Um96;+wTaUI5?K*z-&HJ7qiidyL|3I?HxM*gY=tcmZY}Ukz@YsQNZzaQvl54Vu zN!b&=a-h%W+5)C&z3h^8pXrFTD?#0NxC20j>cK0M`O>e)>8f^FbhguzOAK2daewK(%lXs1|Mjs)a*9 zwQwVl0XG5Fx?!MNw;71i*S7#Aa4QfuqFw?bDfDeXJjL`|fNK4Apno02$Sh+AUPMbU z#v33K7{wUT(Z^=TyO_|IVqC^JxUT890@Vg~tNB3F$AQ;K!6Y)X WA)rNgk_MxNCuv|7hh}j@g#Q5uYCW+4 From cf62cbf8cacd0e3fc34d67900b12e139963b33a6 Mon Sep 17 00:00:00 2001 From: praisethemoon Date: Tue, 19 May 2026 18:30:52 +0200 Subject: [PATCH 3/3] typev: bump to new runtime, changes: switch to oneshot accept --- frameworks/typev/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frameworks/typev/Dockerfile b/frameworks/typev/Dockerfile index e0eadfa2b..9fd8d905a 100644 --- a/frameworks/typev/Dockerfile +++ b/frameworks/typev/Dockerfile @@ -12,7 +12,7 @@ WORKDIR /app # typev VM — binary + FFI plugins (json, stdcore, stdsocket, ...). Pre-built # (-O3 -march=x86-64-v3, static liburing) and fetched from object storage RUN wget -q -O /tmp/typev.zip \ - https://typev.s3.fr-par.scw.cloud/typev-18-05-2026.zip && \ + https://typev.s3.fr-par.scw.cloud/typev-19-05-2026.zip && \ unzip -q /tmp/typev.zip -d /app && \ rm /tmp/typev.zip