@cloudglides/veil 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/README.md +190 -0
  2. package/dist/index.d.ts +103 -0
  3. package/dist/index.js +999 -0
  4. package/dist/veil_core.js +370 -0
  5. package/dist/veil_core_bg.wasm +0 -0
  6. package/package.json +24 -10
  7. package/.envrc +0 -1
  8. package/.github/workflows/build-on-tag.yml +0 -75
  9. package/example/index.html +0 -226
  10. package/flake.nix +0 -68
  11. package/scripts/patch-wasm.js +0 -12
  12. package/src/cpu.ts +0 -67
  13. package/src/entropy/adblock.ts +0 -16
  14. package/src/entropy/approximate.ts +0 -8
  15. package/src/entropy/audio.ts +0 -17
  16. package/src/entropy/battery.ts +0 -10
  17. package/src/entropy/browser.ts +0 -7
  18. package/src/entropy/canvas.ts +0 -17
  19. package/src/entropy/complexity.ts +0 -13
  20. package/src/entropy/connection.ts +0 -14
  21. package/src/entropy/distribution.ts +0 -8
  22. package/src/entropy/fonts.ts +0 -4
  23. package/src/entropy/hardware.ts +0 -10
  24. package/src/entropy/language.ts +0 -14
  25. package/src/entropy/os.ts +0 -12
  26. package/src/entropy/osVersion.ts +0 -6
  27. package/src/entropy/performance.ts +0 -14
  28. package/src/entropy/permissions.ts +0 -15
  29. package/src/entropy/plugins.ts +0 -14
  30. package/src/entropy/preferences.ts +0 -12
  31. package/src/entropy/probabilistic.ts +0 -20
  32. package/src/entropy/screen.ts +0 -12
  33. package/src/entropy/screenInfo.ts +0 -8
  34. package/src/entropy/spectral.ts +0 -8
  35. package/src/entropy/statistical.ts +0 -15
  36. package/src/entropy/storage.ts +0 -22
  37. package/src/entropy/timezone.ts +0 -10
  38. package/src/entropy/userAgent.ts +0 -16
  39. package/src/entropy/webFeatures.ts +0 -21
  40. package/src/entropy/webgl.ts +0 -11
  41. package/src/gpu.ts +0 -132
  42. package/src/index.test.ts +0 -26
  43. package/src/index.ts +0 -198
  44. package/src/normalize/index.ts +0 -31
  45. package/src/probability.ts +0 -11
  46. package/src/scoring.ts +0 -106
  47. package/src/seeded-rng.ts +0 -14
  48. package/src/types/index.ts +0 -11
  49. package/src/types.ts +0 -47
  50. package/src/veil_core.d.ts +0 -4
  51. package/src/wasm-loader.ts +0 -14
  52. package/tsconfig.json +0 -12
  53. package/tsup.config.ts +0 -35
  54. package/veil-core/Cargo.lock +0 -114
  55. package/veil-core/Cargo.toml +0 -12
  56. package/veil-core/src/entropy.rs +0 -132
  57. package/veil-core/src/lib.rs +0 -90
  58. package/vitest.config.ts +0 -15
@@ -1,14 +0,0 @@
1
- let wasmInitialized = false;
2
-
3
- export async function initializeWasm() {
4
- if (wasmInitialized) return;
5
-
6
- try {
7
- const wasmModule = await import("./veil_core.js");
8
- await wasmModule.default();
9
- wasmInitialized = true;
10
- } catch (error) {
11
- console.error("Failed to initialize WASM module:", error);
12
- throw error;
13
- }
14
- }
package/tsconfig.json DELETED
@@ -1,12 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "target": "ES2020",
4
- "module": "ESNext",
5
- "moduleResolution": "Bundler",
6
- "strict": true,
7
- "declaration": true,
8
- "outDir": "dist",
9
- "skipLibCheck": true,
10
- "allowImportingTsExtensions": true
11
- }
12
- }
package/tsup.config.ts DELETED
@@ -1,35 +0,0 @@
1
- import { defineConfig } from "tsup";
2
- import { cp, mkdir } from "fs/promises";
3
- import { readFileSync, writeFileSync } from "fs";
4
- import { resolve } from "path";
5
-
6
- export default defineConfig({
7
- entry: ["src/index.ts"],
8
- format: ["esm"],
9
- dts: true,
10
- clean: true,
11
- shims: true,
12
- outDir: "dist",
13
- external: ["./veil_core.js"],
14
- onSuccess: async () => {
15
- const srcWasmDir = resolve("veil-core/pkg");
16
- const distDir = resolve("dist");
17
-
18
- await mkdir(distDir, { recursive: true });
19
-
20
- await cp(`${srcWasmDir}/veil_core_bg.wasm`, `${distDir}/veil_core_bg.wasm`);
21
- await cp(`${srcWasmDir}/veil_core.js`, `${distDir}/veil_core.js`);
22
- await cp(`${srcWasmDir}/veil_core.d.ts`, `${distDir}/veil_core.d.ts`);
23
- await cp(
24
- `${srcWasmDir}/veil_core_bg.wasm.d.ts`,
25
- `${distDir}/veil_core_bg.wasm.d.ts`,
26
- );
27
-
28
- let wasmContent = readFileSync(`${distDir}/veil_core.js`, "utf-8");
29
- wasmContent = wasmContent.replace(
30
- /module_or_path = new URL\('veil_core_bg\.wasm', import\.meta\.url\);/g,
31
- "module_or_path = new URL('veil_core_bg.wasm', import.meta.url).href;",
32
- );
33
- writeFileSync(`${distDir}/veil_core.js`, wasmContent);
34
- },
35
- });
@@ -1,114 +0,0 @@
1
- # This file is automatically @generated by Cargo.
2
- # It is not intended for manual editing.
3
- version = 4
4
-
5
- [[package]]
6
- name = "bumpalo"
7
- version = "3.19.1"
8
- source = "registry+https://github.com/rust-lang/crates.io-index"
9
- checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510"
10
-
11
- [[package]]
12
- name = "cfg-if"
13
- version = "1.0.4"
14
- source = "registry+https://github.com/rust-lang/crates.io-index"
15
- checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
16
-
17
- [[package]]
18
- name = "once_cell"
19
- version = "1.21.3"
20
- source = "registry+https://github.com/rust-lang/crates.io-index"
21
- checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
22
-
23
- [[package]]
24
- name = "proc-macro2"
25
- version = "1.0.103"
26
- source = "registry+https://github.com/rust-lang/crates.io-index"
27
- checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8"
28
- dependencies = [
29
- "unicode-ident",
30
- ]
31
-
32
- [[package]]
33
- name = "quote"
34
- version = "1.0.42"
35
- source = "registry+https://github.com/rust-lang/crates.io-index"
36
- checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f"
37
- dependencies = [
38
- "proc-macro2",
39
- ]
40
-
41
- [[package]]
42
- name = "rustversion"
43
- version = "1.0.22"
44
- source = "registry+https://github.com/rust-lang/crates.io-index"
45
- checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
46
-
47
- [[package]]
48
- name = "syn"
49
- version = "2.0.111"
50
- source = "registry+https://github.com/rust-lang/crates.io-index"
51
- checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87"
52
- dependencies = [
53
- "proc-macro2",
54
- "quote",
55
- "unicode-ident",
56
- ]
57
-
58
- [[package]]
59
- name = "unicode-ident"
60
- version = "1.0.22"
61
- source = "registry+https://github.com/rust-lang/crates.io-index"
62
- checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5"
63
-
64
- [[package]]
65
- name = "veil-core"
66
- version = "0.1.0"
67
- dependencies = [
68
- "wasm-bindgen",
69
- ]
70
-
71
- [[package]]
72
- name = "wasm-bindgen"
73
- version = "0.2.106"
74
- source = "registry+https://github.com/rust-lang/crates.io-index"
75
- checksum = "0d759f433fa64a2d763d1340820e46e111a7a5ab75f993d1852d70b03dbb80fd"
76
- dependencies = [
77
- "cfg-if",
78
- "once_cell",
79
- "rustversion",
80
- "wasm-bindgen-macro",
81
- "wasm-bindgen-shared",
82
- ]
83
-
84
- [[package]]
85
- name = "wasm-bindgen-macro"
86
- version = "0.2.106"
87
- source = "registry+https://github.com/rust-lang/crates.io-index"
88
- checksum = "48cb0d2638f8baedbc542ed444afc0644a29166f1595371af4fecf8ce1e7eeb3"
89
- dependencies = [
90
- "quote",
91
- "wasm-bindgen-macro-support",
92
- ]
93
-
94
- [[package]]
95
- name = "wasm-bindgen-macro-support"
96
- version = "0.2.106"
97
- source = "registry+https://github.com/rust-lang/crates.io-index"
98
- checksum = "cefb59d5cd5f92d9dcf80e4683949f15ca4b511f4ac0a6e14d4e1ac60c6ecd40"
99
- dependencies = [
100
- "bumpalo",
101
- "proc-macro2",
102
- "quote",
103
- "syn",
104
- "wasm-bindgen-shared",
105
- ]
106
-
107
- [[package]]
108
- name = "wasm-bindgen-shared"
109
- version = "0.2.106"
110
- source = "registry+https://github.com/rust-lang/crates.io-index"
111
- checksum = "cbc538057e648b67f72a982e708d485b2efa771e1ac05fec311f9f63e5800db4"
112
- dependencies = [
113
- "unicode-ident",
114
- ]
@@ -1,12 +0,0 @@
1
- [package]
2
- name = "veil-core"
3
- version = "0.1.0"
4
- edition = "2024"
5
-
6
- [lib]
7
- crate-type=["cdylib"]
8
-
9
- [dependencies]
10
- wasm-bindgen="0.2"
11
-
12
-
@@ -1,132 +0,0 @@
1
- #[allow(dead_code)]
2
- pub fn kolmogorov_smirnov(values: &[f64]) -> f64 {
3
- let mut sorted = values.to_vec();
4
- sorted.sort_by(|a, b| a.partial_cmp(b).unwrap());
5
-
6
- let mut ks_statistic = 0.0;
7
- for (i, &val) in sorted.iter().enumerate() {
8
- let empirical_cdf = (i as f64 + 1.0) / sorted.len() as f64;
9
- let theoretical_cdf = val;
10
- let diff = (empirical_cdf - theoretical_cdf).abs();
11
- if diff > ks_statistic {
12
- ks_statistic = diff;
13
- }
14
- }
15
- ks_statistic
16
- }
17
-
18
- #[allow(dead_code)]
19
- pub fn lempel_ziv_complexity(data: &[u8]) -> usize {
20
- let mut complexity = 1;
21
- let mut pointer = 0;
22
- let mut window_size = 1;
23
-
24
- while pointer + window_size < data.len() {
25
- let window = &data[pointer..pointer + window_size];
26
- let next = data[pointer + window_size];
27
-
28
- let mut found = false;
29
- for i in 0..pointer {
30
- if i + window_size < data.len()
31
- && &data[i..i + window_size] == window
32
- && data.get(i + window_size) == Some(&next)
33
- {
34
- found = true;
35
- break;
36
- }
37
- }
38
- if !found {
39
- complexity += 1;
40
- pointer += window_size;
41
- window_size = 1;
42
- } else {
43
- window_size += 1;
44
- }
45
- }
46
- complexity
47
- }
48
-
49
- #[allow(dead_code)]
50
- pub fn spectral_entropy(samples: &[f64]) -> f64 {
51
- let n = samples.len();
52
- let mut real = vec![0.0; n];
53
- let mut imag = vec![0.0; n];
54
-
55
- for k in 0..n {
56
- for (n_idx, &sample) in samples.iter().enumerate() {
57
- let angle = -2.0 * std::f64::consts::PI * (k as f64) * (n_idx as f64) / (n as f64);
58
- real[k] += sample * angle.cos();
59
- imag[k] += sample * angle.sin();
60
- }
61
- }
62
-
63
- let mut power: Vec<f64> = real
64
- .iter()
65
- .zip(imag.iter())
66
- .map(|(r, i)| (r * r + i * i).sqrt())
67
- .collect();
68
-
69
- let total_power: f64 = power.iter().sum();
70
-
71
- let mut entropy = 0.0;
72
- for p in power.iter_mut() {
73
- if *p > 0.0 {
74
- *p /= total_power;
75
- entropy -= *p * p.log2();
76
- }
77
- }
78
- entropy
79
- }
80
-
81
- #[allow(dead_code)]
82
- pub fn approximate_entropy(samples: &[f64], m: usize) -> f64 {
83
- fn count_matches(data: &[f64], m: usize) -> usize {
84
- let mut count = 0;
85
- for i in 0..=(data.len().saturating_sub(m)) {
86
- for j in (i + 1)..=(data.len().saturating_sub(m)) {
87
- let mut match_found = true;
88
- for k in 0..m {
89
- if (data[i + k] - data[j + k]).abs() > 0.001 {
90
- match_found = false;
91
- break;
92
- }
93
- }
94
- if match_found {
95
- count += 1;
96
- }
97
- }
98
- }
99
- count
100
- }
101
-
102
- let c1 = (count_matches(samples, m) as f64 + 1.0) / (samples.len() as f64 - m as f64 + 1.0);
103
- let c2 = (count_matches(samples, m + 1) as f64 + 1.0) / (samples.len() as f64 - m as f64);
104
- (c1 / c2).ln()
105
- }
106
-
107
- #[allow(dead_code)]
108
- pub fn sample_entropy(samples: &[f64], m: usize, r: f64) -> f64 {
109
- fn count_template_matches(data: &[f64], m: usize, r: f64) -> usize {
110
- let mut count = 0;
111
- for i in 0..=(data.len().saturating_sub(m)) {
112
- for j in (i + 1)..=(data.len().saturating_sub(m)) {
113
- let mut max_diff = 0.0;
114
- for k in 0..m {
115
- let diff = (data[i + k] - data[j + k]).abs();
116
- if diff > max_diff {
117
- max_diff = diff;
118
- }
119
- }
120
- if max_diff < r {
121
- count += 1;
122
- }
123
- }
124
- }
125
- count
126
- }
127
-
128
- let c1 = count_template_matches(samples, m, r) as f64;
129
- let c2 = count_template_matches(samples, m + 1, r) as f64;
130
-
131
- if c2 > 0.0 { -(c1 / c2).ln() } else { 0.0 }
132
- }
@@ -1,90 +0,0 @@
1
- use std::usize;
2
-
3
- use wasm_bindgen::prelude::*;
4
-
5
- mod entropy;
6
-
7
- const MURMUR_SEED: u32 = 0x811c9dc5;
8
- const FNV_PRIME: u32 = 16777619;
9
- const FNV_OFFSET_BASIS: u32 = 2166136261;
10
-
11
- #[wasm_bindgen]
12
- pub fn murmur_hash(s: &str) -> String {
13
- let mut h1 = MURMUR_SEED;
14
- for byte in s.as_bytes() {
15
- h1 ^= *byte as u32;
16
- h1 = h1
17
- .wrapping_add(h1 << 1)
18
- .wrapping_add(h1 << 4)
19
- .wrapping_add(h1 << 7)
20
- .wrapping_add(h1 << 8)
21
- .wrapping_add(h1 << 24);
22
- }
23
- format!("{:x}", h1)
24
- }
25
-
26
- #[wasm_bindgen]
27
- pub fn fnv_hash(s: &str) -> String {
28
- let mut hash = FNV_OFFSET_BASIS;
29
- for byte in s.as_bytes() {
30
- hash ^= *byte as u32;
31
- hash = hash.wrapping_mul(FNV_PRIME);
32
- }
33
- format!("{:x}", hash)
34
- }
35
-
36
- #[wasm_bindgen]
37
- pub fn shannon_entropy(s: &str) -> f64 {
38
- let mut freq = [0usize; 256];
39
- for byte in s.as_bytes() {
40
- freq[*byte as usize] += 1;
41
- }
42
- let len = s.len() as f64;
43
- let mut entropy = 0.0;
44
-
45
- for &count in &freq {
46
- if count > 0 {
47
- let p = count as f64 / len;
48
- entropy -= p * p.log2();
49
- }
50
- }
51
- entropy
52
- }
53
- #[wasm_bindgen]
54
- pub fn kolmogorov_complexity(s: &str) -> f64 {
55
- let len = s.len();
56
- let mut runs = 0;
57
- let bytes = s.as_bytes();
58
-
59
- for i in 1..bytes.len() {
60
- if bytes[i] != bytes[i - 1] {
61
- runs += 1;
62
- }
63
- }
64
- (len as f64) + (len as f64 * (runs as f64 / len as f64))
65
- }
66
-
67
- #[wasm_bindgen]
68
- pub fn ks_test(values: &[f64]) -> f64 {
69
- entropy::kolmogorov_smirnov(values)
70
- }
71
-
72
- #[wasm_bindgen]
73
- pub fn lz_complexity(data: &[u8]) -> usize {
74
- entropy::lempel_ziv_complexity(data)
75
- }
76
-
77
- #[wasm_bindgen]
78
- pub fn spectral(samples: &[f64]) -> f64 {
79
- entropy::spectral_entropy(samples)
80
- }
81
-
82
- #[wasm_bindgen]
83
- pub fn approx_entropy(samples: &[f64], m: usize) -> f64 {
84
- entropy::approximate_entropy(samples, m)
85
- }
86
-
87
- #[wasm_bindgen]
88
- pub fn sample_ent(samples: &[f64], m: usize, r: f64) -> f64 {
89
- entropy::sample_entropy(samples, m, r)
90
- }
package/vitest.config.ts DELETED
@@ -1,15 +0,0 @@
1
- import { defineConfig } from "vitest/config";
2
- import wasm from "vite-plugin-wasm";
3
- import topLevelAwait from "vite-plugin-top-level-await";
4
-
5
- export default defineConfig({
6
- plugins: [wasm(), topLevelAwait()],
7
- test: {
8
- environment: "happy-dom",
9
- globals: true,
10
- exclude: ["node_modules", "dist", ".direnv"],
11
- },
12
- optimizeDeps: {
13
- exclude: ["veil-core"],
14
- },
15
- });