finitefields 0.0.3

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.
package/.lesshst ADDED
@@ -0,0 +1,3 @@
1
+ .less-history-file:
2
+ .search
3
+ "token
package/.viminfo ADDED
@@ -0,0 +1,112 @@
1
+ # This viminfo file was generated by Vim 9.0.
2
+ # You may edit it if you're careful!
3
+
4
+ # Viminfo version
5
+ |1,4
6
+
7
+ # Value of 'encoding' when this file was written
8
+ *encoding=latin1
9
+
10
+
11
+ # hlsearch on (H) or off (h):
12
+ ~h
13
+ # Command Line History (newest to oldest):
14
+ :wq
15
+ |2,0,1770671027,,"wq"
16
+
17
+ # Search String History (newest to oldest):
18
+
19
+ # Expression History (newest to oldest):
20
+
21
+ # Input Line History (newest to oldest):
22
+
23
+ # Debug Line History (newest to oldest):
24
+
25
+ # Registers:
26
+ ""- CHAR 0
27
+ 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
28
+ |3,1,36,0,1,0,1770671022,"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"
29
+
30
+ # File marks:
31
+ '0 1 72 ~/.npmrc
32
+ |4,48,1,72,1770671027,"~/.npmrc"
33
+ '1 1 39 /home/jobj/token
34
+ |4,49,1,39,1770670606,"/home/jobj/token"
35
+ '2 5 11 ~/.gitignore
36
+ |4,50,5,11,1770670071,"~/.gitignore"
37
+ '3 4 8 ~/.gitignore
38
+ |4,51,4,8,1770670048,"~/.gitignore"
39
+ '4 4 8 ~/.gitignore
40
+ |4,52,4,8,1770670048,"~/.gitignore"
41
+
42
+ # Jumplist (newest first):
43
+ -' 1 72 ~/.npmrc
44
+ |4,39,1,72,1770671027,"~/.npmrc"
45
+ -' 1 39 /home/jobj/token
46
+ |4,39,1,39,1770670606,"/home/jobj/token"
47
+ -' 1 39 /home/jobj/token
48
+ |4,39,1,39,1770670606,"/home/jobj/token"
49
+ -' 5 11 ~/.gitignore
50
+ |4,39,5,11,1770670071,"~/.gitignore"
51
+ -' 5 11 ~/.gitignore
52
+ |4,39,5,11,1770670071,"~/.gitignore"
53
+ -' 5 11 ~/.gitignore
54
+ |4,39,5,11,1770670071,"~/.gitignore"
55
+ -' 5 11 ~/.gitignore
56
+ |4,39,5,11,1770670071,"~/.gitignore"
57
+ -' 4 8 ~/.gitignore
58
+ |4,39,4,8,1770670065,"~/.gitignore"
59
+ -' 4 8 ~/.gitignore
60
+ |4,39,4,8,1770670065,"~/.gitignore"
61
+ -' 4 8 ~/.gitignore
62
+ |4,39,4,8,1770670065,"~/.gitignore"
63
+ -' 4 8 ~/.gitignore
64
+ |4,39,4,8,1770670065,"~/.gitignore"
65
+ -' 4 8 ~/.gitignore
66
+ |4,39,4,8,1770670048,"~/.gitignore"
67
+ -' 4 8 ~/.gitignore
68
+ |4,39,4,8,1770670048,"~/.gitignore"
69
+ -' 4 8 ~/.gitignore
70
+ |4,39,4,8,1770670048,"~/.gitignore"
71
+ -' 4 8 ~/.gitignore
72
+ |4,39,4,8,1770670048,"~/.gitignore"
73
+ -' 1 0 ~/.gitignore
74
+ |4,39,1,0,1770670030,"~/.gitignore"
75
+ -' 1 0 ~/.gitignore
76
+ |4,39,1,0,1770670030,"~/.gitignore"
77
+ -' 1 0 ~/.gitignore
78
+ |4,39,1,0,1770670030,"~/.gitignore"
79
+ -' 1 0 ~/.gitignore
80
+ |4,39,1,0,1770670030,"~/.gitignore"
81
+ -' 1 0 ~/.gitignore
82
+ |4,39,1,0,1770670030,"~/.gitignore"
83
+ -' 1 0 ~/.gitignore
84
+ |4,39,1,0,1770670030,"~/.gitignore"
85
+ -' 1 0 ~/.gitignore
86
+ |4,39,1,0,1770670030,"~/.gitignore"
87
+ -' 1 0 ~/.gitignore
88
+ |4,39,1,0,1770670030,"~/.gitignore"
89
+
90
+ # History of marks within files (newest to oldest):
91
+
92
+ > ~/.npmrc
93
+ * 1770671026 0
94
+ " 1 72
95
+ ^ 1 73
96
+ . 1 57
97
+ + 1 57
98
+
99
+ > /home/jobj/token
100
+ * 1770670605 0
101
+ " 1 39
102
+ ^ 1 40
103
+ . 1 24
104
+ + 1 24
105
+
106
+ > ~/.gitignore
107
+ * 1770670070 0
108
+ " 5 11
109
+ ^ 5 12
110
+ . 5 11
111
+ + 4 8
112
+ + 5 11
package/Makefile ADDED
@@ -0,0 +1,13 @@
1
+ .PHONY: run clean
2
+
3
+ all: build
4
+
5
+ build:
6
+ npm run build
7
+
8
+ run:
9
+ npm run start
10
+
11
+ clean:
12
+ rm -f *.js
13
+
package/main.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=main.d.ts.map
package/main.d.ts.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["main.ts"],"names":[],"mappings":""}
package/main.js ADDED
@@ -0,0 +1,23 @@
1
+ /* main.ts */
2
+ import { Polynomial } from './polynomial.js';
3
+ let log;
4
+ log = console.log;
5
+ let p1;
6
+ let p2;
7
+ let p3;
8
+ let x0;
9
+ let x1;
10
+ let x2;
11
+ let x3;
12
+ x0 = BigInt(1);
13
+ x1 = BigInt(0);
14
+ x2 = BigInt(1);
15
+ x3 = BigInt(0);
16
+ p1 = new Polynomial([x0, x1, x2, x3], 2n);
17
+ p2 = new Polynomial({ tobject: 0n, x3: 1n, x2: 0n, x: 1n, 1: 1n }, 2n);
18
+ // log(p1, " + ", p2, " =");
19
+ // p3 = Polynomial.add(p1,p2);
20
+ p3 = new Polynomial(256n, 2n);
21
+ log(p3, p3.eval());
22
+ // log(p3.eval());
23
+ //# sourceMappingURL=main.js.map
package/main.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["main.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,IAAI,GAAsB,CAAC;AAC3B,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;AAElB,IAAI,EAAa,CAAC;AAClB,IAAI,EAAa,CAAC;AAClB,IAAI,EAAa,CAAC;AAClB,IAAI,EAAS,CAAC;AACd,IAAI,EAAS,CAAC;AACd,IAAI,EAAS,CAAC;AACd,IAAI,EAAS,CAAC;AAEd,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACf,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACf,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACf,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AAEf,EAAE,GAAG,IAAI,UAAU,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;AAC1C,EAAE,GAAG,IAAI,UAAU,CAAC,EAAE,OAAO,EAAC,EAAE,EAAE,EAAE,EAAC,EAAE,EAAE,EAAE,EAAC,EAAE,EAAE,CAAC,EAAC,EAAE,EAAE,CAAC,EAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AAClE,4BAA4B;AAC5B,8BAA8B;AAC9B,EAAE,GAAG,IAAI,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAE9B,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;AACnB,kBAAkB"}
package/main.ts ADDED
@@ -0,0 +1,28 @@
1
+ /* main.ts */
2
+ import { Polynomial } from './polynomial.js';
3
+
4
+ let log:(...x:any[])=>void;
5
+ log = console.log;
6
+
7
+ let p1:Polynomial;
8
+ let p2:Polynomial;
9
+ let p3:Polynomial;
10
+ let x0:bigint;
11
+ let x1:bigint;
12
+ let x2:bigint;
13
+ let x3:bigint;
14
+
15
+ x0 = BigInt(1);
16
+ x1 = BigInt(0);
17
+ x2 = BigInt(1);
18
+ x3 = BigInt(0);
19
+
20
+ p1 = new Polynomial([x0, x1, x2, x3], 2n);
21
+ p2 = new Polynomial({ tobject:0n, x3:1n, x2:0n, x:1n, 1:1n }, 2n);
22
+ // log(p1, " + ", p2, " =");
23
+ // p3 = Polynomial.add(p1,p2);
24
+ p3 = new Polynomial(256n, 2n);
25
+
26
+ log(p3, p3.eval());
27
+ // log(p3.eval());
28
+
package/package.json ADDED
@@ -0,0 +1,26 @@
1
+ {
2
+ "name": "finitefields",
3
+ "type": "module",
4
+ "version": "0.0.3",
5
+ "description": "Galois/Finite field crypto and raw elliptic curves",
6
+ "main": "main.js",
7
+ "scripts": {
8
+ "build": "tsc",
9
+ "start": "node .",
10
+ "pub": "npm version patch && npm publish"
11
+ },
12
+ "keywords": [
13
+ "galois",
14
+ "galois fields",
15
+ "finite fields",
16
+ "cryptography",
17
+ "elliptic curves"
18
+ ],
19
+ "author": "@dr-Jonas-Birch",
20
+ "license": "MIT",
21
+ "dependencies": {
22
+ "@types/node": "^25.2.2",
23
+ "@types/typescript": "^2.0.0",
24
+ "typescript": "^5.9.3"
25
+ }
26
+ }
@@ -0,0 +1,37 @@
1
+ declare let zip: (xs: bigint[], ys: bigint[]) => zipped;
2
+ type zipitem = {
3
+ x: bigint;
4
+ y: bigint;
5
+ };
6
+ type zipped = zipitem[];
7
+ type xs = 'tobject' | '1' | 'x' | 'x2' | 'x3' | 'x4' | 'x5' | 'x6' | 'x7';
8
+ type Polysource = bigint | bigint[] | Tobject;
9
+ type Tobject = {
10
+ [K in xs]?: bigint;
11
+ };
12
+ interface Ipolynomial {
13
+ fromarr(src: bigint[]): void;
14
+ fromobj(src: Tobject): void;
15
+ fromint(src: bigint): void;
16
+ verifyorder(order: bigint): boolean;
17
+ eval(): bigint;
18
+ constructor: Function;
19
+ }
20
+ declare class Polynomial implements Ipolynomial {
21
+ private data;
22
+ private degree;
23
+ private order;
24
+ static int2pol(src: bigint): bigint[];
25
+ static int2pol_(val: bigint, arr: bigint[]): bigint[];
26
+ static evaluate(src: bigint[], order: bigint): bigint;
27
+ static evaluate_(src: bigint[], order: bigint, val: bigint): bigint;
28
+ static add(a: Polynomial, b: Polynomial): Polynomial;
29
+ constructor(src: Polysource, order: bigint);
30
+ fromarr(src: bigint[]): void;
31
+ fromobj(src: Tobject): void;
32
+ fromint(src: bigint): void;
33
+ verifyorder(order: bigint): boolean;
34
+ eval(): bigint;
35
+ }
36
+ export { Polynomial, zip };
37
+ //# sourceMappingURL=polynomial.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polynomial.d.ts","sourceRoot":"","sources":["polynomial.ts"],"names":[],"mappings":"AAWA,QAAA,IAAI,GAAG,EAAC,CAAC,EAAE,EAAC,MAAM,EAAE,EAAC,EAAE,EAAC,MAAM,EAAE,KAAG,MAAM,CAAC;AAc1C,KAAK,OAAO,GAAG;IAAC,CAAC,EAAC,MAAM,CAAC;IAAA,CAAC,EAAC,MAAM,CAAA;CAAC,CAAC;AACnC,KAAK,MAAM,GAAG,OAAO,EAAE,CAAC;AAExB,KAAK,EAAE,GACD,SAAS,GACT,GAAG,GACH,GAAG,GACH,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,CAAC;AAEX,KAAK,UAAU,GACT,MAAM,GACN,MAAM,EAAE,GACR,OAAO,CAAC;AAEd,KAAK,OAAO,GAAG;KACV,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM;CACrB,CAAA;AAED,UAAU,WAAW;IACjB,OAAO,CAAC,GAAG,EAAC,MAAM,EAAE,GAAG,IAAI,CAAC;IAC5B,OAAO,CAAC,GAAG,EAAC,OAAO,GAAG,IAAI,CAAC;IAC3B,OAAO,CAAC,GAAG,EAAC,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,CAAC,KAAK,EAAC,MAAM,GAAG,OAAO,CAAC;IACnC,IAAI,IAAI,MAAM,CAAC;IACf,WAAW,EAAE,QAAQ,CAAC;CACzB;AAED,cAAM,UAAW,YAAW,WAAW;IACnC,OAAO,CAAC,IAAI,CAAU;IACtB,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,KAAK,CAAQ;IAErB,MAAM,CAAC,OAAO,CAAC,GAAG,EAAC,MAAM,GAAG,MAAM,EAAE;IAIpC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAC,MAAM,EAAE,GAAG,EAAC,MAAM,EAAE,GAAG,MAAM,EAAE;IAenD,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAC,MAAM,EAAE,EAAE,KAAK,EAAC,MAAM,GAAG,MAAM;IAInD,MAAM,CAAC,SAAS,CAAC,GAAG,EAAC,MAAM,EAAE,EAAE,KAAK,EAAC,MAAM,EAAE,GAAG,EAAC,MAAM,GAAG,MAAM;IAmBhE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAC,UAAU,EAAE,CAAC,EAAC,UAAU,GAAG,UAAU;gBAa/B,GAAG,EAAC,UAAU,EAAE,KAAK,EAAC,MAAM;IAmCxC,OAAO,CAAC,GAAG,EAAC,MAAM,EAAE,GAAG,IAAI;IAS3B,OAAO,CAAC,GAAG,EAAC,OAAO,GAAG,IAAI;IAW1B,OAAO,CAAC,GAAG,EAAC,MAAM,GAAG,IAAI;IASzB,WAAW,CAAC,KAAK,EAAC,MAAM,GAAG,OAAO;IAclC,IAAI,IAAI,MAAM;CAGxB;AAED,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC"}
package/polynomial.js ADDED
@@ -0,0 +1,129 @@
1
+ /*
2
+ * polynomial data structure
3
+ *
4
+ * finitefields package by @dr-Jonas-Birch
5
+ *
6
+ * 2026
7
+ *
8
+ */
9
+ let fail;
10
+ let log;
11
+ let zip;
12
+ fail = () => {
13
+ throw new Error();
14
+ return void 0;
15
+ };
16
+ zip = (xs, ys) => (xs.length == ys.length) ? xs
17
+ .map((x, idx) => ({ x, y: (ys[idx] || 0n) })) :
18
+ fail();
19
+ log = console.log;
20
+ class Polynomial {
21
+ data;
22
+ degree;
23
+ order;
24
+ static int2pol(src) {
25
+ return Polynomial.int2pol_(src, []);
26
+ }
27
+ static int2pol_(val, arr) {
28
+ let x;
29
+ let y;
30
+ let bit;
31
+ if (!val)
32
+ return arr;
33
+ y = (val >> 1n);
34
+ bit = (val & 1n);
35
+ x = new Array(bit, ...arr);
36
+ return Polynomial.int2pol_(y, x);
37
+ }
38
+ static evaluate(src, order) {
39
+ return Polynomial.evaluate_(src, order, 0n);
40
+ }
41
+ static evaluate_(src, order, val) {
42
+ let x;
43
+ let y;
44
+ let z;
45
+ let arr;
46
+ if (!src.length)
47
+ return val;
48
+ else
49
+ y = (order * val);
50
+ arr = new Array(...src);
51
+ z = arr.shift()
52
+ || 0n;
53
+ x = (y + z);
54
+ return Polynomial.evaluate_(arr, order, x);
55
+ }
56
+ static add(a, b) {
57
+ let z;
58
+ let p;
59
+ let arr;
60
+ z = zip(a.data, b.data);
61
+ arr = z
62
+ .map(({ x, y }) => ((x + y) % BigInt(a.order)));
63
+ return new Polynomial(arr, a.order);
64
+ }
65
+ constructor(src, order) {
66
+ this.data = [];
67
+ this.degree = 0;
68
+ if (!src)
69
+ fail();
70
+ switch (true) {
71
+ case src instanceof Array:
72
+ this.fromarr(src);
73
+ break;
74
+ case typeof src === 'bigint':
75
+ if (order != 2n)
76
+ fail();
77
+ this.fromint(src);
78
+ break;
79
+ case ((typeof src !== 'bigint') && ('tobject' in src)):
80
+ this.fromobj(src);
81
+ break;
82
+ default:
83
+ fail();
84
+ break;
85
+ }
86
+ if (this.verifyorder(order))
87
+ this.order = order;
88
+ else
89
+ fail();
90
+ return this;
91
+ }
92
+ fromarr(src) {
93
+ if (!src)
94
+ fail();
95
+ this.data = src;
96
+ this.degree = this.data.length;
97
+ return void 0;
98
+ }
99
+ fromobj(src) {
100
+ if (!src)
101
+ fail();
102
+ const { tobject, ...obj } = src;
103
+ this.data = Object.values(obj);
104
+ this.degree = this.data.length;
105
+ return void 0;
106
+ }
107
+ fromint(src) {
108
+ if (!src)
109
+ fail();
110
+ this.data = Polynomial.int2pol(src);
111
+ this.degree = this.data.length;
112
+ return void 0;
113
+ }
114
+ verifyorder(order) {
115
+ let arr;
116
+ if (!order)
117
+ fail();
118
+ else if (!this.degree)
119
+ return true;
120
+ arr = this.data
121
+ .map((x) => !(x >= order));
122
+ return arr.every((x) => x);
123
+ }
124
+ eval() {
125
+ return Polynomial.evaluate(this.data, this.order);
126
+ }
127
+ }
128
+ export { Polynomial, zip };
129
+ //# sourceMappingURL=polynomial.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polynomial.js","sourceRoot":"","sources":["polynomial.ts"],"names":[],"mappings":"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"}
package/polynomial.ts ADDED
@@ -0,0 +1,201 @@
1
+ /*
2
+ * polynomial data structure
3
+ *
4
+ * finitefields package by @dr-Jonas-Birch
5
+ *
6
+ * 2026
7
+ *
8
+ */
9
+
10
+ let fail:()=>never;
11
+ let log:(...x:any[])=>void;
12
+ let zip:(xs:bigint[],ys:bigint[])=>zipped;
13
+
14
+ fail = (): never => {
15
+ throw new Error();
16
+
17
+ return void 0 as never;
18
+ }
19
+
20
+ zip = (xs:bigint[],ys:bigint[]): zipped => (xs.length==ys.length) ? xs
21
+ .map((x:bigint,idx:number): {x:bigint,y:bigint} => ({x,y:(ys[idx]||0n)})) :
22
+ fail();
23
+
24
+ log = console.log;
25
+
26
+ type zipitem = {x:bigint,y:bigint};
27
+ type zipped = zipitem[];
28
+
29
+ type xs =
30
+ | 'tobject'
31
+ | '1'
32
+ | 'x'
33
+ | 'x2'
34
+ | 'x3'
35
+ | 'x4'
36
+ | 'x5'
37
+ | 'x6'
38
+ | 'x7';
39
+
40
+ type Polysource =
41
+ | bigint
42
+ | bigint[]
43
+ | Tobject;
44
+
45
+ type Tobject = {
46
+ [K in xs]?: bigint;
47
+ }
48
+
49
+ interface Ipolynomial {
50
+ fromarr(src:bigint[]): void;
51
+ fromobj(src:Tobject): void;
52
+ fromint(src:bigint): void;
53
+ verifyorder(order:bigint): boolean;
54
+ eval(): bigint;
55
+ constructor: Function;
56
+ }
57
+
58
+ class Polynomial implements Ipolynomial {
59
+ private data:bigint[];
60
+ private degree:number;
61
+ private order:bigint;
62
+
63
+ static int2pol(src:bigint): bigint[] {
64
+ return Polynomial.int2pol_(src, []);
65
+ }
66
+
67
+ static int2pol_(val:bigint, arr:bigint[]): bigint[] {
68
+ let x:bigint[];
69
+ let y:bigint;
70
+ let bit:bigint;
71
+
72
+ if (!val)
73
+ return arr;
74
+
75
+ y = (val >> 1n);
76
+ bit = (val & 1n);
77
+ x = new Array(bit, ...arr);
78
+
79
+ return Polynomial.int2pol_(y, x);
80
+ }
81
+
82
+ static evaluate(src:bigint[], order:bigint): bigint {
83
+ return Polynomial.evaluate_(src, order, 0n);
84
+ }
85
+
86
+ static evaluate_(src:bigint[], order:bigint, val:bigint): bigint {
87
+ let x:bigint;
88
+ let y:bigint;
89
+ let z:bigint;
90
+ let arr:bigint[];
91
+
92
+ if (!src.length)
93
+ return val;
94
+ else
95
+ y = (order*val);
96
+
97
+ arr = new Array(...src);
98
+ z = arr.shift()
99
+ || 0n;
100
+ x = (y+z);
101
+
102
+ return Polynomial.evaluate_(arr, order, x);
103
+ }
104
+
105
+ static add(a:Polynomial, b:Polynomial): Polynomial {
106
+ let z:zipped;
107
+ let p:Polynomial;
108
+ let arr:bigint[];
109
+
110
+ z = zip(a.data, b.data);
111
+ arr = z
112
+ .map(({x,y}: zipitem): bigint =>
113
+ ((x+y)%BigInt(a.order)));
114
+
115
+ return new Polynomial(arr, a.order);
116
+ }
117
+
118
+ public constructor(src:Polysource, order:bigint) {
119
+ this.data = [];
120
+ this.degree = 0;
121
+
122
+ if (!src)
123
+ fail();
124
+
125
+ switch (true) {
126
+ case src instanceof Array:
127
+ this.fromarr(src as bigint[]);
128
+ break;
129
+
130
+ case typeof src === 'bigint':
131
+ if (order != 2n)
132
+ fail();
133
+ this.fromint(src as bigint);
134
+ break;
135
+
136
+ case ((typeof src !== 'bigint') && ('tobject' in (src as Tobject))):
137
+ this.fromobj(src as Tobject);
138
+ break;
139
+
140
+ default:
141
+ fail();
142
+ break;
143
+ }
144
+
145
+ if (this.verifyorder(order))
146
+ this.order = order;
147
+ else
148
+ fail();
149
+
150
+ return this;
151
+ }
152
+
153
+ public fromarr(src:bigint[]): void {
154
+ if (!src)
155
+ fail();
156
+ this.data = src;
157
+ this.degree = this.data.length;
158
+
159
+ return void 0;
160
+ }
161
+
162
+ public fromobj(src:Tobject): void {
163
+ if (!src)
164
+ fail();
165
+
166
+ const { tobject, ...obj } = src;
167
+ this.data = Object.values(obj);
168
+ this.degree = this.data.length;
169
+
170
+ return void 0;
171
+ }
172
+
173
+ public fromint(src:bigint): void {
174
+ if (!src)
175
+ fail();
176
+ this.data = Polynomial.int2pol(src);
177
+ this.degree = this.data.length;
178
+
179
+ return void 0;
180
+ }
181
+
182
+ public verifyorder(order:bigint): boolean {
183
+ let arr:boolean[];
184
+
185
+ if (!order)
186
+ fail();
187
+ else if (!this.degree)
188
+ return true;
189
+
190
+ arr = this.data
191
+ .map((x:bigint): boolean => !(x>=order));
192
+
193
+ return arr.every((x:boolean):boolean => x);
194
+ }
195
+
196
+ public eval(): bigint {
197
+ return Polynomial.evaluate(this.data, this.order);
198
+ }
199
+ }
200
+
201
+ export { Polynomial, zip };
package/tsconfig.json ADDED
@@ -0,0 +1,43 @@
1
+ {
2
+ // Visit https://aka.ms/tsconfig to read more about this file
3
+ "compilerOptions": {
4
+ // File Layout
5
+ // "rootDir": "./src",
6
+ // "outDir": "./dist",
7
+
8
+ // Environment Settings
9
+ // See also https://aka.ms/tsconfig/module
10
+ "module": "nodenext",
11
+ "target": "esnext",
12
+ // For nodejs:
13
+ "lib": ["esnext","dom"],
14
+ "types": ["node"],
15
+ // and npm install -D @types/node
16
+
17
+ // Other Outputs
18
+ "sourceMap": true,
19
+ "declaration": true,
20
+ "declarationMap": true,
21
+
22
+ // Stricter Typechecking Options
23
+ "noUncheckedIndexedAccess": true,
24
+ "exactOptionalPropertyTypes": false,
25
+
26
+ // Style Options
27
+ // "noImplicitReturns": true,
28
+ // "noImplicitOverride": true,
29
+ // "noUnusedLocals": true,
30
+ // "noUnusedParameters": true,
31
+ // "noFallthroughCasesInSwitch": true,
32
+ // "noPropertyAccessFromIndexSignature": true,
33
+
34
+ // Recommended Options
35
+ "strict": true,
36
+ "jsx": "react-jsx",
37
+ "verbatimModuleSyntax": true,
38
+ "isolatedModules": true,
39
+ "noUncheckedSideEffectImports": true,
40
+ "moduleDetection": "force",
41
+ "skipLibCheck": true,
42
+ }
43
+ }