File size: 4,356 Bytes
119e586
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#!/bin/bash
# SKC-LISP: Build Rust β†’ WASM (Phase 3D-3)
# Compiles crypto-wasm.rs to browser-ready WASM module

set -e

echo "=== SoulVM JIT: WASM Build Pipeline ==="

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR"

# ============================================================================
# Step 1: Install wasm-pack (if needed)
# ============================================================================

echo "[1/6] Checking wasm-pack..."

if ! command -v wasm-pack &> /dev/null; then
    echo "Installing wasm-pack..."
    curl https://rustwasm.org/wasm-pack/installer/init.sh -sSf | sh
fi

WASM_PACK_VERSION=$(wasm-pack --version)
echo "βœ“ wasm-pack installed: $WASM_PACK_VERSION"

# ============================================================================
# Step 2: Install Rust wasm32 target
# ============================================================================

echo "[2/6] Installing wasm32-unknown-unknown target..."

rustup target add wasm32-unknown-unknown
echo "βœ“ Target installed"

# ============================================================================
# Step 3: Run Rust tests (native)
# ============================================================================

echo "[3/6] Running Rust unit tests (native)..."

cargo test --lib 2>&1 | grep -E "test|passed|failed" || true
echo "βœ“ Tests complete"

# ============================================================================
# Step 4: Compile to WASM
# ============================================================================

echo "[4/6] Compiling Rust β†’ WASM (wasm-pack)..."

wasm-pack build \
    --target web \
    --release \
    --out-dir pkg \
    --no-typescript

echo "βœ“ WASM compilation complete"

# ============================================================================
# Step 5: Verify artifacts
# ============================================================================

echo "[5/6] Verifying artifacts..."

if [ -f "pkg/skclisp_crypto_wasm.wasm" ]; then
    WASM_SIZE=$(stat -f%z "pkg/skclisp_crypto_wasm.wasm" 2>/dev/null || stat -c%s "pkg/skclisp_crypto_wasm.wasm")
    echo "βœ“ WASM module: pkg/skclisp_crypto_wasm.wasm ($WASM_SIZE bytes)"
else
    echo "ERROR: WASM module not found"
    exit 1
fi

if [ -f "pkg/skclisp_crypto_wasm.js" ]; then
    JS_SIZE=$(stat -f%z "pkg/skclisp_crypto_wasm.js" 2>/dev/null || stat -c%s "pkg/skclisp_crypto_wasm.js")
    echo "βœ“ JavaScript glue: pkg/skclisp_crypto_wasm.js ($JS_SIZE bytes)"
else
    echo "ERROR: JavaScript glue not found"
    exit 1
fi

# ============================================================================
# Step 6: Copy to docs/ for GitHub Pages
# ============================================================================

echo "[6/6] Deploying to GitHub Pages..."

mkdir -p ../docs/assets/

cp pkg/skclisp_crypto_wasm.wasm ../docs/assets/
cp pkg/skclisp_crypto_wasm.js ../docs/assets/
cp pkg/skclisp_crypto_wasm.d.ts ../docs/assets/ 2>/dev/null || true
cp pkg/package.json ../docs/assets/ 2>/dev/null || true

echo "βœ“ Deployed to docs/assets/"

# ============================================================================
# Final Report
# ============================================================================

echo ""
echo "=== Build Complete ==="
echo "Artifacts:"
echo "  - native/pkg/skclisp_crypto_wasm.wasm (WASM module)"
echo "  - native/pkg/skclisp_crypto_wasm.js (JavaScript bindings)"
echo "  - docs/assets/skclisp_crypto_wasm.wasm (GitHub Pages)"
echo "  - docs/assets/skclisp_crypto_wasm.js (GitHub Pages)"
echo ""
echo "Functions exported:"
echo "  - blake3_hash(input: &[u8]) β†’ Vec<u8>"
echo "  - blake3_verify_wasm(payload, expected_digest) β†’ Blake3VerificationResult"
echo "  - ed25519_verify_wasm(message, signature, public_key) β†’ Ed25519VerificationResult"
echo "  - validate_mutation_wasm(...) β†’ MutationValidationResult"
echo "  - validate_proof_certificate_wasm(cert_bytes) β†’ ProofCertificateValidationResult"
echo ""
echo "βœ“ Ready for browser integration"
echo ""
echo "Usage:"
echo "  import init, * as wasmModule from './assets/skclisp_crypto_wasm.js';"
echo "  await init();"
echo "  const result = wasmModule.blake3_verify_wasm(payload, digest);"