functionalscript 0.3.4 → 0.3.5
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/com/cpp/module.f.d.ts +10 -0
- package/com/cpp/module.f.js +107 -0
- package/com/cpp/test.f.d.ts +2 -0
- package/com/cpp/{test.f.ts → test.f.js} +9 -11
- package/com/cpp/testlib.f.d.ts +2 -0
- package/com/cpp/testlib.f.js +5 -0
- package/com/cs/module.f.d.ts +12 -0
- package/com/cs/module.f.js +80 -0
- package/com/cs/test.f.d.ts +2 -0
- package/com/cs/{test.f.ts → test.f.js} +9 -11
- package/com/cs/testlib.f.d.ts +2 -0
- package/com/cs/testlib.f.js +5 -0
- package/com/rust/module.f.d.ts +15 -0
- package/com/rust/module.f.js +169 -0
- package/com/rust/test.f.d.ts +2 -0
- package/com/rust/{test.f.ts → test.f.js} +7 -7
- package/com/rust/testlib.f.d.ts +2 -0
- package/com/rust/testlib.f.js +5 -0
- package/com/test/build.f.d.ts +20 -0
- package/com/test/build.f.js +58 -0
- package/com/types/module.f.d.ts +28 -0
- package/com/types/module.f.js +8 -0
- package/com/types/testlib.f.d.ts +44 -0
- package/com/types/{testlib.f.ts → testlib.f.js} +2 -3
- package/commonjs/build/module.f.d.ts +6 -0
- package/commonjs/build/module.f.js +69 -0
- package/commonjs/build/test.f.d.ts +2 -0
- package/commonjs/build/test.f.js +96 -0
- package/commonjs/module/function/{module.f.ts → module.f.d.ts} +5 -10
- package/commonjs/module/function/module.f.js +4 -0
- package/commonjs/module/module.f.d.ts +18 -0
- package/commonjs/module/module.f.js +12 -0
- package/commonjs/module.f.d.ts +6 -0
- package/commonjs/module.f.js +1 -0
- package/commonjs/package/dependencies/module.f.d.ts +7 -0
- package/commonjs/package/dependencies/module.f.js +13 -0
- package/commonjs/package/dependencies/test.f.d.ts +2 -0
- package/commonjs/package/dependencies/test.f.js +15 -0
- package/commonjs/package/module.f.d.ts +17 -0
- package/commonjs/package/module.f.js +18 -0
- package/commonjs/package/test.f.d.ts +2 -0
- package/commonjs/package/test.f.js +27 -0
- package/commonjs/path/module.f.d.ts +24 -0
- package/commonjs/path/module.f.js +114 -0
- package/commonjs/path/test.f.d.ts +25 -0
- package/commonjs/path/{test.f.ts → test.f.js} +123 -89
- package/crypto/prime_field/module.f.d.ts +43 -0
- package/crypto/prime_field/module.f.js +78 -0
- package/crypto/prime_field/test.f.d.ts +13 -0
- package/crypto/prime_field/test.f.js +149 -0
- package/crypto/secp/module.f.d.ts +68 -0
- package/crypto/secp/module.f.js +127 -0
- package/crypto/secp/test.f.d.ts +5 -0
- package/crypto/secp/test.f.js +72 -0
- package/crypto/sha2/module.f.d.ts +13 -0
- package/crypto/sha2/module.f.js +145 -0
- package/crypto/sha2/test.f.d.ts +9 -0
- package/crypto/sha2/test.f.js +82 -0
- package/dev/module.f.d.ts +1 -0
- package/dev/module.f.js +1 -0
- package/dev/test/module.f.d.ts +20 -0
- package/dev/test/module.f.js +75 -0
- package/dev/test.f.d.ts +9 -0
- package/dev/{test.f.ts → test.f.js} +22 -24
- package/djs/module.f.d.ts +17 -0
- package/djs/module.f.js +63 -0
- package/djs/parser/module.f.d.ts +12 -0
- package/djs/parser/module.f.js +333 -0
- package/djs/parser/test.f.d.ts +12 -0
- package/djs/parser/test.f.js +717 -0
- package/djs/serializer/module.f.d.ts +9 -0
- package/djs/serializer/module.f.js +81 -0
- package/djs/test/input.f.d.ts +2 -0
- package/djs/test/input.f.js +4 -0
- package/djs/test/m.f.d.ts +2 -0
- package/djs/test/m.f.js +1 -0
- package/djs/test.f.d.ts +12 -0
- package/djs/test.f.js +84 -0
- package/djs/tokenizer/module.f.d.ts +8 -0
- package/djs/tokenizer/module.f.js +60 -0
- package/djs/tokenizer/test.f.d.ts +7 -0
- package/djs/tokenizer/test.f.js +529 -0
- package/fsc/module.f.d.ts +5 -0
- package/fsc/module.f.js +75 -0
- package/fsc/test.f.d.ts +4 -0
- package/fsc/test.f.js +19 -0
- package/fsm/module.f.d.ts +13 -0
- package/fsm/module.f.js +59 -0
- package/fsm/test.f.d.ts +5 -0
- package/fsm/test.f.js +137 -0
- package/html/module.f.d.ts +13 -0
- package/html/module.f.js +58 -0
- package/html/test.f.d.ts +9 -0
- package/html/test.f.js +42 -0
- package/issues/test.f.d.ts +16 -0
- package/issues/test.f.js +70 -0
- package/js/tokenizer/module.f.d.ts +86 -0
- package/js/tokenizer/module.f.js +503 -0
- package/js/tokenizer/test.f.d.ts +9 -0
- package/js/tokenizer/test.f.js +905 -0
- package/json/module.f.d.ts +20 -0
- package/json/module.f.js +68 -0
- package/json/parser/module.f.d.ts +5 -0
- package/json/parser/module.f.js +155 -0
- package/json/parser/test.f.d.ts +5 -0
- package/json/parser/test.f.js +328 -0
- package/json/serializer/module.f.d.ts +7 -0
- package/json/serializer/module.f.js +21 -0
- package/json/serializer/test.f.d.ts +8 -0
- package/json/serializer/test.f.js +87 -0
- package/json/test.f.d.ts +8 -0
- package/json/test.f.js +61 -0
- package/json/tokenizer/module.f.d.ts +8 -0
- package/json/tokenizer/module.f.js +52 -0
- package/json/tokenizer/test.f.d.ts +6 -0
- package/json/tokenizer/test.f.js +419 -0
- package/nanvm-lib/tests/test.f.d.ts +27 -0
- package/nanvm-lib/tests/test.f.js +84 -0
- package/nodejs/version/module.f.d.ts +11 -0
- package/nodejs/version/module.f.js +16 -0
- package/nodejs/version/test.f.d.ts +2 -0
- package/nodejs/version/{test.f.ts → test.f.js} +13 -22
- package/package.json +9 -5
- package/text/ascii/module.f.d.ts +129 -0
- package/text/ascii/module.f.js +148 -0
- package/text/ascii/test.f.d.ts +4 -0
- package/text/ascii/test.f.js +14 -0
- package/text/module.f.d.ts +8 -0
- package/text/module.f.js +10 -0
- package/text/sgr/module.f.d.ts +8 -0
- package/text/sgr/module.f.js +8 -0
- package/text/test.f.d.ts +2 -0
- package/text/test.f.js +18 -0
- package/text/utf16/module.f.d.ts +9 -0
- package/text/utf16/module.f.js +66 -0
- package/text/utf16/test.f.d.ts +6 -0
- package/text/utf16/test.f.js +144 -0
- package/text/utf8/module.f.d.ts +6 -0
- package/text/utf8/module.f.js +112 -0
- package/text/utf8/test.f.d.ts +6 -0
- package/text/utf8/test.f.js +175 -0
- package/types/array/module.f.d.ts +21 -0
- package/types/array/module.f.js +23 -0
- package/types/array/test.f.d.ts +10 -0
- package/types/array/test.f.js +116 -0
- package/types/bigfloat/module.f.d.ts +3 -0
- package/types/bigfloat/module.f.js +66 -0
- package/types/bigfloat/test.f.d.ts +6 -0
- package/types/bigfloat/test.f.js +349 -0
- package/types/bigint/module.f.d.ts +54 -0
- package/types/bigint/{module.f.ts → module.f.js} +42 -65
- package/types/bigint/test.f.d.ts +16 -0
- package/types/bigint/test.f.js +199 -0
- package/types/bit_vec/module.f.d.ts +134 -0
- package/types/bit_vec/{module.f.ts → module.f.js} +47 -65
- package/types/bit_vec/test.f.d.ts +22 -0
- package/types/bit_vec/test.f.js +210 -0
- package/types/btree/find/module.f.d.ts +20 -0
- package/types/btree/find/module.f.js +84 -0
- package/types/btree/find/test.f.d.ts +2 -0
- package/types/btree/find/test.f.js +152 -0
- package/types/btree/module.f.d.ts +4 -0
- package/types/btree/module.f.js +31 -0
- package/types/btree/remove/module.f.d.ts +4 -0
- package/types/btree/remove/module.f.js +174 -0
- package/types/btree/remove/test.f.d.ts +5 -0
- package/types/btree/remove/test.f.js +634 -0
- package/types/btree/set/module.f.d.ts +3 -0
- package/types/btree/set/module.f.js +103 -0
- package/types/btree/set/test.f.d.ts +2 -0
- package/types/btree/set/test.f.js +360 -0
- package/types/btree/test.f.d.ts +8 -0
- package/types/btree/test.f.js +75 -0
- package/types/btree/types/module.f.d.ts +11 -0
- package/types/btree/types/module.f.js +1 -0
- package/types/byte_set/module.f.d.ts +16 -0
- package/types/byte_set/module.f.js +28 -0
- package/types/byte_set/test.f.d.ts +12 -0
- package/types/byte_set/test.f.js +122 -0
- package/types/function/compare/module.f.d.ts +10 -0
- package/types/function/compare/module.f.js +7 -0
- package/types/function/compare/test.f.d.ts +2 -0
- package/types/function/compare/test.f.js +8 -0
- package/types/function/module.f.d.ts +28 -0
- package/types/function/module.f.js +19 -0
- package/types/function/operator/module.f.d.ts +20 -0
- package/types/function/operator/module.f.js +18 -0
- package/types/function/test.f.d.ts +2 -0
- package/types/function/test.f.js +12 -0
- package/types/list/module.f.d.ts +50 -0
- package/types/list/module.f.js +171 -0
- package/types/list/test.f.d.ts +22 -0
- package/types/list/test.f.js +395 -0
- package/types/map/module.f.d.ts +14 -0
- package/types/map/module.f.js +31 -0
- package/types/map/test.f.d.ts +5 -0
- package/types/map/test.f.js +114 -0
- package/types/nibble_set/module.f.d.ts +10 -0
- package/types/nibble_set/module.f.js +9 -0
- package/types/nibble_set/test.f.d.ts +12 -0
- package/types/nibble_set/test.f.js +90 -0
- package/types/nullable/module.f.d.ts +3 -0
- package/types/nullable/module.f.js +2 -0
- package/types/nullable/test.f.d.ts +2 -0
- package/types/nullable/test.f.js +12 -0
- package/types/number/module.f.d.ts +6 -0
- package/types/number/module.f.js +8 -0
- package/types/number/test.f.d.ts +11 -0
- package/types/number/test.f.js +124 -0
- package/types/object/module.f.d.ts +10 -0
- package/types/object/module.f.js +12 -0
- package/types/object/test.f.d.ts +5 -0
- package/types/object/test.f.js +17 -0
- package/types/range/module.f.d.ts +3 -0
- package/types/range/module.f.js +2 -0
- package/types/range/test.f.d.ts +2 -0
- package/types/range/test.f.js +18 -0
- package/types/range_map/module.f.d.ts +14 -0
- package/types/range_map/module.f.js +51 -0
- package/types/range_map/test.f.d.ts +6 -0
- package/types/range_map/test.f.js +176 -0
- package/types/result/module.f.d.ts +7 -0
- package/types/result/module.f.js +8 -0
- package/types/sorted_list/module.f.d.ts +16 -0
- package/types/sorted_list/module.f.js +56 -0
- package/types/sorted_list/test.f.d.ts +5 -0
- package/types/sorted_list/test.f.js +64 -0
- package/types/sorted_set/module.f.d.ts +7 -0
- package/types/sorted_set/module.f.js +14 -0
- package/types/sorted_set/test.f.d.ts +6 -0
- package/types/sorted_set/test.f.js +78 -0
- package/types/string/module.f.d.ts +6 -0
- package/types/string/module.f.js +11 -0
- package/types/string/test.f.d.ts +15 -0
- package/types/string/test.f.js +58 -0
- package/types/string_set/module.f.d.ts +9 -0
- package/types/string_set/module.f.js +22 -0
- package/types/string_set/test.f.d.ts +5 -0
- package/types/string_set/test.f.js +65 -0
- package/.github/FUNDING.yml +0 -12
- package/.github/dependabot.yml +0 -11
- package/.github/workflows/ci.yml +0 -88
- package/.github/workflows/npm-publish.yml +0 -53
- package/CHANGELOG.md +0 -29
- package/Cargo.lock +0 -18
- package/Cargo.toml +0 -7
- package/com/README.md +0 -3
- package/com/cpp/README.md +0 -80
- package/com/cpp/module.f.ts +0 -180
- package/com/cpp/nanocom.hpp +0 -195
- package/com/cpp/testlib.f.ts +0 -8
- package/com/cs/module.f.ts +0 -145
- package/com/cs/testlib.f.ts +0 -8
- package/com/proposals.md +0 -28
- package/com/rust/module.f.ts +0 -287
- package/com/rust/nanocom/Cargo.lock +0 -7
- package/com/rust/nanocom/Cargo.toml +0 -15
- package/com/rust/nanocom/README.md +0 -56
- package/com/rust/nanocom/src/class.rs +0 -6
- package/com/rust/nanocom/src/cobject.rs +0 -90
- package/com/rust/nanocom/src/guid.rs +0 -15
- package/com/rust/nanocom/src/hresult.rs +0 -7
- package/com/rust/nanocom/src/interface.rs +0 -9
- package/com/rust/nanocom/src/iunknown.rs +0 -13
- package/com/rust/nanocom/src/lib.rs +0 -20
- package/com/rust/nanocom/src/object.rs +0 -34
- package/com/rust/nanocom/src/ref.rs +0 -57
- package/com/rust/nanocom/src/vmt.rs +0 -7
- package/com/rust/nanocom/tests/it.rs +0 -186
- package/com/rust/nanocom/tests/itmod.rs +0 -195
- package/com/rust/testlib.f.ts +0 -8
- package/com/test/build.f.ts +0 -111
- package/com/test/build.ts +0 -45
- package/com/test/cpp/main.cpp +0 -74
- package/com/test/cs/Program.cs +0 -31
- package/com/test/cs/cs.csproj +0 -16
- package/com/test/rust/Cargo.toml +0 -12
- package/com/test/rust/src/lib.rs +0 -56
- package/com/types/module.f.ts +0 -62
- package/commonjs/README.md +0 -94
- package/commonjs/build/module.f.ts +0 -100
- package/commonjs/build/test.f.ts +0 -107
- package/commonjs/module/module.f.ts +0 -41
- package/commonjs/module.f.ts +0 -7
- package/commonjs/module.ts +0 -31
- package/commonjs/package/dependencies/module.f.ts +0 -22
- package/commonjs/package/dependencies/test.f.ts +0 -8
- package/commonjs/package/module.f.ts +0 -31
- package/commonjs/package/test.f.ts +0 -12
- package/commonjs/path/README.md +0 -17
- package/commonjs/path/module.f.ts +0 -171
- package/commonjs/test.ts +0 -64
- package/crypto/README.md +0 -3
- package/crypto/prime_field/module.f.ts +0 -114
- package/crypto/prime_field/test.f.ts +0 -95
- package/crypto/secp/module.f.ts +0 -182
- package/crypto/secp/test.f.ts +0 -68
- package/crypto/sha2/module.f.ts +0 -215
- package/crypto/sha2/test.f.ts +0 -83
- package/deno.json +0 -71
- package/dev/README.md +0 -8
- package/dev/index.ts +0 -3
- package/dev/module.f.ts +0 -1
- package/dev/module.ts +0 -195
- package/dev/test/module.f.ts +0 -135
- package/dev/test.ts +0 -53
- package/djs/README.md +0 -54
- package/djs/module.f.ts +0 -76
- package/djs/parser/module.f.ts +0 -509
- package/djs/parser/test.f.ts +0 -461
- package/djs/serializer/module.f.ts +0 -90
- package/djs/test.f.ts +0 -67
- package/djs/tokenizer/module.f.ts +0 -99
- package/djs/tokenizer/test.f.ts +0 -364
- package/doc/LANGUAGE.md +0 -255
- package/doc/README.md +0 -61
- package/doc/byte-code.md +0 -59
- package/doc/fa.md +0 -174
- package/doc/predefined.md +0 -143
- package/doc/proposals.md +0 -21
- package/doc/vm/README.md +0 -24
- package/doc/vm-rearchitecture.md +0 -129
- package/doc/vm.md +0 -150
- package/fsc/README.md +0 -111
- package/fsc/module.f.ts +0 -122
- package/fsc/test.f.ts +0 -21
- package/fsm/README.md +0 -113
- package/fsm/module.f.ts +0 -107
- package/fsm/test.f.ts +0 -139
- package/funding.json +0 -61
- package/html/README.md +0 -32
- package/html/module.f.ts +0 -109
- package/html/test.f.ts +0 -37
- package/issues/01-test-debug.md +0 -3
- package/issues/02-esm.md +0 -8
- package/issues/03-djs.md +0 -57
- package/issues/05-publish.md +0 -40
- package/issues/11-fs-load.md +0 -13
- package/issues/17-djs-extension.md +0 -6
- package/issues/README.md +0 -42
- package/issues/lang/1000-json.md +0 -50
- package/issues/lang/2110-default-export.md +0 -11
- package/issues/lang/2120-const.md +0 -14
- package/issues/lang/2130-default-import.md +0 -10
- package/issues/lang/2210-block-comment.md +0 -12
- package/issues/lang/2220-namespace-import.md +0 -25
- package/issues/lang/2310-undefined.md +0 -7
- package/issues/lang/2320-bigint.md +0 -7
- package/issues/lang/2330-property-accessor.md +0 -225
- package/issues/lang/2340-operators.md +0 -41
- package/issues/lang/2350-grouping.md +0 -11
- package/issues/lang/2360-built-in.md +0 -81
- package/issues/lang/2410-identifier-property.md +0 -9
- package/issues/lang/2420-line-comment.md +0 -10
- package/issues/lang/2430-trailing-comma.md +0 -13
- package/issues/lang/2440-shorthand.md +0 -8
- package/issues/lang/2450-destructuring.md +0 -12
- package/issues/lang/3110-function.md +0 -35
- package/issues/lang/3120-parameters.md +0 -9
- package/issues/lang/3130-body-const.md +0 -12
- package/issues/lang/3220-let.md +0 -11
- package/issues/lang/3240-export.md +0 -44
- package/issues/lang/3370-type-inference.md +0 -69
- package/issues/lang/3380-promise.md +0 -22
- package/issues/lang/3390-class.md +0 -3
- package/issues/lang/3410-expression.md +0 -12
- package/issues/lang/3420-one-parameter.md +0 -10
- package/issues/lang/3430-assignments.md +0 -23
- package/issues/lang/README.md +0 -193
- package/issues/test.f.ts +0 -58
- package/js/tokenizer/module.f.ts +0 -882
- package/js/tokenizer/test.f.ts +0 -617
- package/json/html/README.md +0 -49
- package/json/module.f.ts +0 -94
- package/json/parser/module.f.ts +0 -221
- package/json/parser/test.f.ts +0 -255
- package/json/serializer/module.f.ts +0 -74
- package/json/serializer/test.f.ts +0 -64
- package/json/test.f.ts +0 -48
- package/json/tokenizer/module.f.ts +0 -85
- package/json/tokenizer/test.f.ts +0 -290
- package/nanvm-lib/Cargo.toml +0 -6
- package/nanvm-lib/src/extension.rs +0 -130
- package/nanvm-lib/src/interface.rs +0 -133
- package/nanvm-lib/src/lib.rs +0 -7
- package/nanvm-lib/src/naive.rs +0 -236
- package/nanvm-lib/src/nanenum.rs +0 -236
- package/nanvm-lib/src/nullish.rs +0 -7
- package/nanvm-lib/src/sign.rs +0 -5
- package/nanvm-lib/src/simple.rs +0 -32
- package/nanvm-lib/tests/test.f.ts +0 -80
- package/nanvm-lib/tests/test.rs +0 -108
- package/nodejs/version/main.ts +0 -4
- package/nodejs/version/module.f.ts +0 -42
- package/text/README.md +0 -110
- package/text/ascii/module.f.ts +0 -219
- package/text/ascii/test.f.ts +0 -14
- package/text/module.f.ts +0 -30
- package/text/sgr/README.md +0 -3
- package/text/sgr/module.f.ts +0 -11
- package/text/test.f.ts +0 -19
- package/text/utf16/module.f.ts +0 -120
- package/text/utf16/test.f.ts +0 -107
- package/text/utf8/module.f.ts +0 -116
- package/text/utf8/test.f.ts +0 -125
- package/tsconfig.json +0 -104
- package/types/array/module.f.ts +0 -89
- package/types/array/test.f.ts +0 -88
- package/types/bigfloat/module.f.ts +0 -93
- package/types/bigfloat/test.f.ts +0 -218
- package/types/bigint/README.md +0 -35
- package/types/bigint/test.f.ts +0 -144
- package/types/bit_vec/README.md +0 -18
- package/types/bit_vec/test.f.ts +0 -129
- package/types/btree/README.md +0 -160
- package/types/btree/find/module.f.ts +0 -92
- package/types/btree/find/test.f.ts +0 -122
- package/types/btree/module.f.ts +0 -35
- package/types/btree/remove/module.f.ts +0 -151
- package/types/btree/remove/test.f.ts +0 -498
- package/types/btree/set/module.f.ts +0 -89
- package/types/btree/set/test.f.ts +0 -415
- package/types/btree/test.f.ts +0 -92
- package/types/btree/types/module.f.ts +0 -27
- package/types/byte_set/module.f.ts +0 -73
- package/types/byte_set/test.f.ts +0 -84
- package/types/function/compare/module.f.ts +0 -26
- package/types/function/compare/test.f.ts +0 -7
- package/types/function/module.f.ts +0 -43
- package/types/function/operator/module.f.ts +0 -65
- package/types/function/test.f.ts +0 -20
- package/types/list/module.f.ts +0 -350
- package/types/list/test.f.ts +0 -327
- package/types/map/module.f.ts +0 -65
- package/types/map/test.f.ts +0 -76
- package/types/nibble_set/module.f.ts +0 -34
- package/types/nibble_set/test.f.ts +0 -57
- package/types/nullable/module.f.ts +0 -9
- package/types/nullable/test.f.ts +0 -9
- package/types/number/module.f.ts +0 -20
- package/types/number/test.f.ts +0 -194
- package/types/object/module.f.ts +0 -30
- package/types/object/test.f.ts +0 -14
- package/types/range/module.f.ts +0 -10
- package/types/range/test.f.ts +0 -9
- package/types/range_map/module.f.ts +0 -70
- package/types/range_map/test.f.ts +0 -189
- package/types/result/module.f.ts +0 -20
- package/types/result/module.ts +0 -18
- package/types/sorted_list/module.f.ts +0 -83
- package/types/sorted_list/test.f.ts +0 -57
- package/types/sorted_set/module.f.ts +0 -36
- package/types/sorted_set/test.f.ts +0 -67
- package/types/string/module.f.ts +0 -26
- package/types/string/test.f.ts +0 -43
- package/types/string_set/module.f.ts +0 -37
- package/types/string_set/test.f.ts +0 -34
|
@@ -1,171 +0,0 @@
|
|
|
1
|
-
import * as list from '../../types/list/module.f.ts'
|
|
2
|
-
const { next, fold, reverse, first, flat, toArray, filterMap, isEmpty, concat } = list
|
|
3
|
-
import * as string from '../../types/string/module.f.ts'
|
|
4
|
-
const { join } = string
|
|
5
|
-
import * as Package from '../package/module.f.ts'
|
|
6
|
-
import * as Module from '../module/module.f.ts'
|
|
7
|
-
|
|
8
|
-
type Items = readonly string[]
|
|
9
|
-
|
|
10
|
-
type LocalPath = {
|
|
11
|
-
readonly external: boolean
|
|
12
|
-
readonly dir: boolean
|
|
13
|
-
readonly items: Items
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
const split
|
|
17
|
-
: (path: string) => readonly string[]
|
|
18
|
-
= path => path.split('/')
|
|
19
|
-
|
|
20
|
-
type OptionList = readonly[list.List<string>] | null
|
|
21
|
-
|
|
22
|
-
const normItemsOp
|
|
23
|
-
: (items: string) => (prior: OptionList) => OptionList
|
|
24
|
-
= first => prior => {
|
|
25
|
-
if (prior === null) { return null }
|
|
26
|
-
const tail = prior[0]
|
|
27
|
-
switch (first) {
|
|
28
|
-
case '': case '.': { return prior }
|
|
29
|
-
case '..': {
|
|
30
|
-
const result = next(tail)
|
|
31
|
-
if (result === null) { return null }
|
|
32
|
-
return [result.tail]
|
|
33
|
-
}
|
|
34
|
-
default: {
|
|
35
|
-
return [{ first, tail }]
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
const normItems
|
|
41
|
-
: (items: list.List<string>) => OptionList
|
|
42
|
-
= items => {
|
|
43
|
-
const result = fold(normItemsOp)([list.empty])(items)
|
|
44
|
-
return result === null ? result : [reverse(result[0])]
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
const firstNull = first(null)
|
|
48
|
-
|
|
49
|
-
export const parseLocal
|
|
50
|
-
: (local: string) => (path: string) => LocalPath|null
|
|
51
|
-
= local => {
|
|
52
|
-
const fSeq
|
|
53
|
-
: (path: string) => readonly[boolean, boolean, list.List<string>]
|
|
54
|
-
= path => {
|
|
55
|
-
const pathSeq = split(path)
|
|
56
|
-
const dir = [null, '', '.', '..'].includes(pathSeq[pathSeq.length - 1])
|
|
57
|
-
return (['.', '..'] as readonly (string|null)[]).includes(firstNull(pathSeq)) ?
|
|
58
|
-
[false, dir, flat([split(local), pathSeq])] :
|
|
59
|
-
[true, dir, pathSeq]
|
|
60
|
-
}
|
|
61
|
-
// /** @type {(path: string) => LocalPath|null} */
|
|
62
|
-
return path => {
|
|
63
|
-
const [external, dir, items] = fSeq(path)
|
|
64
|
-
const n = normItems(items)
|
|
65
|
-
if (n === null) { return null }
|
|
66
|
-
return {
|
|
67
|
-
external,
|
|
68
|
-
dir,
|
|
69
|
-
items: toArray(n[0])
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
type IdPath = readonly[string, list.List<string>]
|
|
75
|
-
|
|
76
|
-
/** @type {} */
|
|
77
|
-
const variants
|
|
78
|
-
: (prior: readonly[string|null, list.List<string>]) => list.Thunk<IdPath>
|
|
79
|
-
= prior => () => {
|
|
80
|
-
const [a, b] = prior
|
|
81
|
-
const r = next(b)
|
|
82
|
-
if (r === list.empty) { return list.empty }
|
|
83
|
-
const { first, tail } = r
|
|
84
|
-
const n
|
|
85
|
-
: IdPath
|
|
86
|
-
= [a === null ? first : `${a}/${first}`, tail]
|
|
87
|
-
return { first: n, tail: variants(n) }
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
const mapDependency
|
|
91
|
-
: (d: (local: string) => string|null) => (p: IdPath) => IdPath|null
|
|
92
|
-
= d => ([external, internal]) => {
|
|
93
|
-
const id = d(external)
|
|
94
|
-
return id === null ? null : [id, internal]
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
type Path = {
|
|
98
|
-
readonly package: string,
|
|
99
|
-
readonly items: Items,
|
|
100
|
-
readonly dir: boolean,
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
/**
|
|
104
|
-
* @type {}
|
|
105
|
-
*/
|
|
106
|
-
export const parseGlobal
|
|
107
|
-
: (d: (local: string) => string|null) =>
|
|
108
|
-
(dir: boolean) =>
|
|
109
|
-
(items: list.List<string>) =>
|
|
110
|
-
Path|null
|
|
111
|
-
= dependencies =>
|
|
112
|
-
{
|
|
113
|
-
const fMap = filterMap(mapDependency(dependencies))
|
|
114
|
-
return dir => items => {
|
|
115
|
-
const v = variants([null, items])
|
|
116
|
-
const r = firstNull(fMap(v))
|
|
117
|
-
if (r === null) { return null }
|
|
118
|
-
return { package: r[0], items: toArray(r[1]), dir }
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
/**
|
|
123
|
-
* @type { }
|
|
124
|
-
*/
|
|
125
|
-
export const parse
|
|
126
|
-
: (packageId: string) =>
|
|
127
|
-
(dependencies: (local: string) => string|null) =>
|
|
128
|
-
(local: string) =>
|
|
129
|
-
(path: string) =>
|
|
130
|
-
Path|null
|
|
131
|
-
= packageId => dependencies => {
|
|
132
|
-
const pg = parseGlobal(dependencies)
|
|
133
|
-
return local => path => {
|
|
134
|
-
const parsed = parseLocal(local)(path)
|
|
135
|
-
if (parsed === null) { return null }
|
|
136
|
-
const {external, dir, items } = parsed
|
|
137
|
-
if (!external) { return { package: packageId, items, dir } }
|
|
138
|
-
return pg(dir)(items)
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
type FoundResult = {
|
|
143
|
-
readonly id: Module.Id
|
|
144
|
-
readonly source: string
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
type Result = FoundResult| null
|
|
148
|
-
|
|
149
|
-
export const parseAndFind
|
|
150
|
-
: (packageGet: Package.Get) =>
|
|
151
|
-
(moduleId: Module.Id) =>
|
|
152
|
-
(path: string) =>
|
|
153
|
-
Result
|
|
154
|
-
= packageGet => moduleId => path => {
|
|
155
|
-
const currentPack = packageGet(moduleId.package)
|
|
156
|
-
if (currentPack === null) { return null }
|
|
157
|
-
const p = parse(moduleId.package)(currentPack.dependency)(moduleId.path.join('/'))(path)
|
|
158
|
-
if (p === null) { return null }
|
|
159
|
-
const pack = packageGet(p.package)
|
|
160
|
-
if (pack === null) { return null }
|
|
161
|
-
const tryFile
|
|
162
|
-
: (file: string) => FoundResult | null
|
|
163
|
-
= file => {
|
|
164
|
-
const source = pack.file(file)
|
|
165
|
-
return source === null ? null : { id: { package: p.package, path: file.split('/') }, source }
|
|
166
|
-
}
|
|
167
|
-
const file = p.items.join('/')
|
|
168
|
-
const indexJs = join('/')(concat(p.items)(['index.js']))
|
|
169
|
-
const fileList = p.dir || isEmpty(p.items) ? [indexJs] : [file, `${file}.js`, indexJs]
|
|
170
|
-
return firstNull(filterMap(tryFile)(fileList))
|
|
171
|
-
}
|
package/commonjs/test.ts
DELETED
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import * as _ from './module.ts'
|
|
2
|
-
import * as Run from './module/function/module.f.ts'
|
|
3
|
-
|
|
4
|
-
export default {
|
|
5
|
-
ok: () => {
|
|
6
|
-
const source = 'module.exports = "Hello world!"'
|
|
7
|
-
const m = _.compile(source)
|
|
8
|
-
if (m[0] !== 'ok') { throw m }
|
|
9
|
-
const [result] = m[1](() => { throw 0 })(null)
|
|
10
|
-
if (result[0] !== 'ok') { throw result }
|
|
11
|
-
if (result[1] !== 'Hello world!') { throw result }
|
|
12
|
-
},
|
|
13
|
-
compilationError: () => {
|
|
14
|
-
const source = '+'
|
|
15
|
-
const m = _.compile(source)
|
|
16
|
-
if (m[0] !== 'error') { throw m }
|
|
17
|
-
},
|
|
18
|
-
compilationErrorStrict: () => {
|
|
19
|
-
const source = 'const x = 04'
|
|
20
|
-
const m = _.compile(source)
|
|
21
|
-
if (m[0] !== 'error') { throw m }
|
|
22
|
-
},
|
|
23
|
-
runtimeError: () => {
|
|
24
|
-
const source = 'a = 5'
|
|
25
|
-
const m = _.compile(source)
|
|
26
|
-
if (m[0] !== 'ok') { throw m }
|
|
27
|
-
const [result] = m[1](() => { throw 0 })(null)
|
|
28
|
-
if (result[0] !== 'error') { throw result }
|
|
29
|
-
},
|
|
30
|
-
test: () => {
|
|
31
|
-
const depSource = 'module.exports = 137'
|
|
32
|
-
const d = _.compile(depSource)
|
|
33
|
-
if (d[0] !== 'ok') { throw d }
|
|
34
|
-
|
|
35
|
-
const req
|
|
36
|
-
: Run.Require<number>
|
|
37
|
-
= path => prior => {
|
|
38
|
-
if (path !== 'm') { throw path }
|
|
39
|
-
return d[1](req)(prior + 1)
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
let info = 0
|
|
43
|
-
{
|
|
44
|
-
const source = 'module.exports = require("m") + 42'
|
|
45
|
-
const m = _.compile(source)
|
|
46
|
-
if (m[0] !== 'ok') { throw m }
|
|
47
|
-
|
|
48
|
-
const [result, newInfo] = m[1](req)(info)
|
|
49
|
-
if (result[0] !== 'ok') { throw result }
|
|
50
|
-
if (result[1] !== 179) { throw result }
|
|
51
|
-
info = newInfo
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
{
|
|
55
|
-
const source = 'module.exports = require("x") + 42'
|
|
56
|
-
const m = _.compile(source)
|
|
57
|
-
if (m[0] !== 'ok') { throw m }
|
|
58
|
-
|
|
59
|
-
const [result, infox] = m[1](req)(info)
|
|
60
|
-
if (result[0] !== 'error') { throw result }
|
|
61
|
-
if (infox !== 1) { throw info }
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
}
|
package/crypto/README.md
DELETED
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
import * as Operator from '../../types/function/operator/module.f.ts'
|
|
2
|
-
import * as bi from '../../types/bigint/module.f.ts'
|
|
3
|
-
const { scalar_mul } = bi
|
|
4
|
-
|
|
5
|
-
type Reduce = Operator.Reduce<bigint>
|
|
6
|
-
|
|
7
|
-
type Unary = Operator.Unary<bigint, bigint>
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* A type representing a prime field and its associated operations.
|
|
11
|
-
*/
|
|
12
|
-
export type PrimeField = {
|
|
13
|
-
readonly p: bigint
|
|
14
|
-
readonly middle: bigint
|
|
15
|
-
readonly max: bigint
|
|
16
|
-
readonly neg: Unary
|
|
17
|
-
readonly sub: Reduce
|
|
18
|
-
readonly add: Reduce
|
|
19
|
-
readonly abs: Unary
|
|
20
|
-
readonly mul: Reduce
|
|
21
|
-
readonly reciprocal: Unary
|
|
22
|
-
readonly div: Reduce
|
|
23
|
-
readonly pow: Reduce
|
|
24
|
-
readonly pow2: Unary
|
|
25
|
-
readonly pow3: Unary
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Creates a prime field with the specified prime modulus and associated operations.
|
|
30
|
-
*
|
|
31
|
-
* @param p - A prime number to define the field.
|
|
32
|
-
* @returns The prime field object.
|
|
33
|
-
*/
|
|
34
|
-
export const prime_field
|
|
35
|
-
: (p: bigint) => PrimeField
|
|
36
|
-
= p => {
|
|
37
|
-
const sub
|
|
38
|
-
: Reduce
|
|
39
|
-
= a => b => {
|
|
40
|
-
const r = a - b
|
|
41
|
-
return r < 0 ? r + p : r
|
|
42
|
-
}
|
|
43
|
-
const mul
|
|
44
|
-
: Reduce
|
|
45
|
-
= a => b => a * b % p
|
|
46
|
-
const reciprocal
|
|
47
|
-
: Unary
|
|
48
|
-
= a => {
|
|
49
|
-
if (a === 0n) { throw '1/0' }
|
|
50
|
-
let a1 = a
|
|
51
|
-
let a0 = p
|
|
52
|
-
let f0 = 0n
|
|
53
|
-
let f1 = 1n
|
|
54
|
-
while (a1 !== 1n) {
|
|
55
|
-
const q = a0 / a1
|
|
56
|
-
const a2 = a0 % a1
|
|
57
|
-
a0 = a1
|
|
58
|
-
a1 = a2
|
|
59
|
-
const f2 = sub(f0)(mul(f1)(q))
|
|
60
|
-
f0 = f1
|
|
61
|
-
f1 = f2
|
|
62
|
-
}
|
|
63
|
-
return f1
|
|
64
|
-
}
|
|
65
|
-
const middle = p >> 1n
|
|
66
|
-
const pow2
|
|
67
|
-
: Unary
|
|
68
|
-
= a => mul(a)(a)
|
|
69
|
-
const pow
|
|
70
|
-
: Reduce
|
|
71
|
-
= scalar_mul({ 0: 1n, add: mul })
|
|
72
|
-
return {
|
|
73
|
-
p,
|
|
74
|
-
middle,
|
|
75
|
-
max: p - 1n,
|
|
76
|
-
neg: a => a === 0n ? 0n : p - a,
|
|
77
|
-
sub,
|
|
78
|
-
add: a => b => {
|
|
79
|
-
const r = a + b
|
|
80
|
-
return r < p ? r : r - p
|
|
81
|
-
},
|
|
82
|
-
abs: a => middle < a ? p - a : a,
|
|
83
|
-
mul,
|
|
84
|
-
reciprocal,
|
|
85
|
-
div: a => b => mul(a)(reciprocal(b)),
|
|
86
|
-
pow,
|
|
87
|
-
pow2,
|
|
88
|
-
pow3: a => mul(a)(pow2(a))
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* Computes the square root of a number in a prime field.
|
|
94
|
-
*
|
|
95
|
-
* @throws If the prime modulus `p` does not satisfy `p % 4 == 3`.
|
|
96
|
-
*
|
|
97
|
-
* @example
|
|
98
|
-
*
|
|
99
|
-
* ```js
|
|
100
|
-
* const field = prime_field(7n);
|
|
101
|
-
* const root = sqrt(field)(4n);
|
|
102
|
-
* if (root !== 2n) { throw root }
|
|
103
|
-
* ```
|
|
104
|
-
*/
|
|
105
|
-
export const sqrt
|
|
106
|
-
: (f: PrimeField) => (a: bigint) => bigint|null
|
|
107
|
-
= ({p, mul, pow }) => {
|
|
108
|
-
if ((p & 3n) !== 3n) { throw 'sqrt' }
|
|
109
|
-
const sqrt_k = (p + 1n) >> 2n
|
|
110
|
-
return a => {
|
|
111
|
-
const result = pow(a)(sqrt_k)
|
|
112
|
-
return mul(result)(result) === a ? result : null
|
|
113
|
-
}
|
|
114
|
-
}
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
import * as _ from './module.f.ts'
|
|
2
|
-
const { prime_field, sqrt } = _
|
|
3
|
-
|
|
4
|
-
export default {
|
|
5
|
-
prime_field_test: () => {
|
|
6
|
-
const p = 0xffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_fffffffe_fffffc2fn;
|
|
7
|
-
const f = prime_field(p)
|
|
8
|
-
const sqrt_f = sqrt(f)
|
|
9
|
-
return {
|
|
10
|
-
neg: () => {
|
|
11
|
-
if (f.neg(0n) !== 0n) { throw '-0' }
|
|
12
|
-
if (f.neg(1n) !== p - 1n) { throw '-1' }
|
|
13
|
-
},
|
|
14
|
-
sub: () => {
|
|
15
|
-
if (f.sub(10n)(4n) !== 6n) { throw '10 - 4'}
|
|
16
|
-
if (f.sub(11n)(14n) !== p - 3n) { throw '11 - 14' }
|
|
17
|
-
},
|
|
18
|
-
add: () => {
|
|
19
|
-
if (f.add(13n)(24n) !== 37n) { throw '13 + 24' }
|
|
20
|
-
if (f.add(77n)(f.neg(12n)) !== 65n) { throw '77 + (-12)' }
|
|
21
|
-
},
|
|
22
|
-
mul: () => {
|
|
23
|
-
if (f.mul(100n)(0n) !== 0n) { throw '100 * 0' }
|
|
24
|
-
if (f.mul(101n)(205n) !== 20_705n) { throw '101 * 205' }
|
|
25
|
-
if (f.mul(304n)(f.neg(1n)) !== f.neg(304n)) { throw '304 * -1' }
|
|
26
|
-
if (f.mul(f.neg(507n))(609n) !== f.neg(308_763n)) { throw '-507 * 609' }
|
|
27
|
-
if (f.mul(f.neg(713n))(f.neg(825n)) !== 588_225n) { throw '-713 * -825' }
|
|
28
|
-
},
|
|
29
|
-
reciprocal: () => {
|
|
30
|
-
let i = 1n
|
|
31
|
-
while (i < 10_000n) {
|
|
32
|
-
const x = f.reciprocal(i)
|
|
33
|
-
if (f.mul(x)(i) !== 1n) { throw i }
|
|
34
|
-
++i
|
|
35
|
-
}
|
|
36
|
-
},
|
|
37
|
-
pow: () => {
|
|
38
|
-
const test
|
|
39
|
-
: (a: bigint) => void
|
|
40
|
-
= a => {
|
|
41
|
-
if (f.pow(a)(0n) !== 1n) { throw '**0'}
|
|
42
|
-
if (f.pow(a)(1n) !== a) { throw '**1' }
|
|
43
|
-
// https://en.wikipedia.org/wiki/Fermat%27s_little_theorem
|
|
44
|
-
// a^(p-1) % p = 1
|
|
45
|
-
if (f.abs(f.pow(a)(f.middle)) !== 1n) { throw '**middle' }
|
|
46
|
-
if (f.pow(a)(f.sub(f.max)(1n)) !== f.reciprocal(a)) { throw '**(max-1)' }
|
|
47
|
-
if (f.pow(a)(f.max) !== 1n) { throw '**max' }
|
|
48
|
-
}
|
|
49
|
-
// 0
|
|
50
|
-
if (f.pow(0n)(0n) !== 1n) { throw '0**0'}
|
|
51
|
-
if (f.pow(0n)(f.max) !== 0n) { throw '0**max' }
|
|
52
|
-
// 1
|
|
53
|
-
test(1n)
|
|
54
|
-
// 2
|
|
55
|
-
test(2n)
|
|
56
|
-
if (f.pow(2n)(2n) !== 4n) { throw '2**2' }
|
|
57
|
-
if (f.pow(2n)(3n) !== 8n) { throw '2**3' }
|
|
58
|
-
if (f.pow(2n)(128n) !== 1n << 128n) { throw '2**128' }
|
|
59
|
-
// 3
|
|
60
|
-
test(3n)
|
|
61
|
-
if (f.pow(3n)(2n) !== 9n) { throw '3**2' }
|
|
62
|
-
if (f.pow(3n)(3n) !== 27n) { throw '3**3' }
|
|
63
|
-
if (f.pow(3n)(100n) !== 3n ** 100n) { throw '3**100' }
|
|
64
|
-
if (f.pow(3n)(110n) !== 3n ** 110n) { throw '3**110' }
|
|
65
|
-
if (f.pow(3n)(120n) !== 3n ** 120n) { throw '3**120' }
|
|
66
|
-
if (f.pow(3n)(121n) !== 3n ** 121n) { throw '3**121' }
|
|
67
|
-
//
|
|
68
|
-
test(f.middle)
|
|
69
|
-
test(f.max - 1n)
|
|
70
|
-
test(f.max)
|
|
71
|
-
},
|
|
72
|
-
sqrtExample: () => {
|
|
73
|
-
const field = prime_field(7n);
|
|
74
|
-
const root = sqrt(field)(4n);
|
|
75
|
-
if (root !== 2n) { throw root }
|
|
76
|
-
},
|
|
77
|
-
sqrt: () => {
|
|
78
|
-
const test
|
|
79
|
-
: (a: bigint) => void
|
|
80
|
-
= a => {
|
|
81
|
-
const a2 = f.mul(a)(a)
|
|
82
|
-
const s = sqrt_f(a2)
|
|
83
|
-
if (s !== null && f.abs(s) !== f.abs(a)) { throw 'sqrt' }
|
|
84
|
-
}
|
|
85
|
-
let i = 1n
|
|
86
|
-
while (i < 1000n) {
|
|
87
|
-
test(i)
|
|
88
|
-
++i;
|
|
89
|
-
}
|
|
90
|
-
test(f.middle);
|
|
91
|
-
test(f.max);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
}
|
package/crypto/secp/module.f.ts
DELETED
|
@@ -1,182 +0,0 @@
|
|
|
1
|
-
import * as Operator from '../../types/function/operator/module.f.ts'
|
|
2
|
-
import * as pf from '../prime_field/module.f.ts'
|
|
3
|
-
import * as bi from '../../types/bigint/module.f.ts'
|
|
4
|
-
const { scalar_mul } = bi
|
|
5
|
-
const { prime_field, sqrt } = pf
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* A 2D point represented as a pair of `bigint` values `[x, y]`.
|
|
9
|
-
*/
|
|
10
|
-
type Point2D = readonly[bigint, bigint]
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* A 2D point on an elliptic curve, represented as a pair of `bigint` values.
|
|
14
|
-
* `null` represents the point at infinity (`O`).
|
|
15
|
-
*/
|
|
16
|
-
export type Point = Point2D|null
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Initialization parameters for an elliptic curve.
|
|
20
|
-
*/
|
|
21
|
-
export type Init = {
|
|
22
|
-
readonly p: bigint
|
|
23
|
-
readonly a: readonly[bigint, bigint]
|
|
24
|
-
readonly g: readonly[bigint, bigint]
|
|
25
|
-
readonly n: bigint
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Represents an elliptic curve and its associated operations.
|
|
30
|
-
*/
|
|
31
|
-
type Curve = {
|
|
32
|
-
readonly pf: pf.PrimeField
|
|
33
|
-
readonly nf: pf.PrimeField
|
|
34
|
-
readonly y2: (x: bigint) => bigint
|
|
35
|
-
readonly y: (x: bigint) => bigint|null
|
|
36
|
-
readonly neg: (a: Point) => Point
|
|
37
|
-
readonly add: Operator.Reduce<Point>
|
|
38
|
-
readonly mul: (a: Point) => (n: bigint) => Point
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Constructs an elliptic curve with the given initialization parameters.
|
|
43
|
-
*
|
|
44
|
-
* @example
|
|
45
|
-
*
|
|
46
|
-
* ```js
|
|
47
|
-
* const curveParams = {
|
|
48
|
-
* p: 23n,
|
|
49
|
-
* a: [0n, 1n],
|
|
50
|
-
* g: [1n, 1n],
|
|
51
|
-
* n: 19n
|
|
52
|
-
* };
|
|
53
|
-
* const curveInstance = curve(curveParams);
|
|
54
|
-
*
|
|
55
|
-
* // Access curve operations
|
|
56
|
-
* const point = curveInstance.add([1n, 1n])([2n, 5n]); // Add two points
|
|
57
|
-
* const negPoint = curveInstance.neg([1n, 1n]); // Negate a point
|
|
58
|
-
* const mulPoint = curveInstance.mul([1n, 1n])(3n); // Multiply a point by 3
|
|
59
|
-
* ```
|
|
60
|
-
*/
|
|
61
|
-
export const curve
|
|
62
|
-
: (i: Init) => Curve
|
|
63
|
-
= ({ p, a: [a0, a1], n }) => {
|
|
64
|
-
const pf = prime_field(p)
|
|
65
|
-
const { pow2, pow3, sub, add, mul, neg, div } = pf
|
|
66
|
-
const mul3 = mul(3n)
|
|
67
|
-
const mul2 = mul(2n)
|
|
68
|
-
const addA1 = add(a1)
|
|
69
|
-
const mulA1 = mul(a1)
|
|
70
|
-
const addA0 = add(a0)
|
|
71
|
-
/**
|
|
72
|
-
* y**2 = a1*x**3 + a0
|
|
73
|
-
*/
|
|
74
|
-
const y2
|
|
75
|
-
: (x: bigint) => bigint
|
|
76
|
-
= x => addA0(add(pow3(x))(mulA1(x)))
|
|
77
|
-
const addPoint
|
|
78
|
-
: Operator.Reduce<Point>
|
|
79
|
-
= p => q => {
|
|
80
|
-
if (p === null) {
|
|
81
|
-
return q
|
|
82
|
-
}
|
|
83
|
-
if (q === null) {
|
|
84
|
-
return p
|
|
85
|
-
}
|
|
86
|
-
const [px, py] = p
|
|
87
|
-
const [qx, qy] = q
|
|
88
|
-
const md = px === qx
|
|
89
|
-
// (3 * px ** 2 + a1) / (2 * py)
|
|
90
|
-
? py !== qy || py === 0n ? null : [addA1(mul3(pow2(px))), mul2(py)]
|
|
91
|
-
// (py - qy) / (px - qx)
|
|
92
|
-
: [sub(py)(qy), sub(px)(qx)]
|
|
93
|
-
if (md === null) {
|
|
94
|
-
return null
|
|
95
|
-
}
|
|
96
|
-
const [ma, mb] = md
|
|
97
|
-
const m = div(ma)(mb)
|
|
98
|
-
// m ** 2 - px - qx
|
|
99
|
-
const rx = sub(pow2(m))(add(px)(qx))
|
|
100
|
-
// [rx, m * (px - rx) - py]
|
|
101
|
-
return [rx, sub(mul(m)(sub(px)(rx)))(py)]
|
|
102
|
-
}
|
|
103
|
-
const sqrt_p = sqrt(pf)
|
|
104
|
-
return {
|
|
105
|
-
pf,
|
|
106
|
-
nf: prime_field(n),
|
|
107
|
-
y2,
|
|
108
|
-
y: x => sqrt_p(y2(x)),
|
|
109
|
-
neg: p => {
|
|
110
|
-
if (p === null) {
|
|
111
|
-
return null
|
|
112
|
-
}
|
|
113
|
-
const [x, y] = p
|
|
114
|
-
return [x, neg(y)]
|
|
115
|
-
},
|
|
116
|
-
add: addPoint,
|
|
117
|
-
mul: scalar_mul({ 0: null, add: addPoint })
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
export const eq
|
|
122
|
-
: (a: Point) => (b: Point) => boolean
|
|
123
|
-
= a => b => {
|
|
124
|
-
if (a === null || b === null) {
|
|
125
|
-
return a === b
|
|
126
|
-
}
|
|
127
|
-
const [ax, ay] = a
|
|
128
|
-
const [bx, by] = b
|
|
129
|
-
return ax === bx && ay === by
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
/**
|
|
133
|
-
* https://neuromancer.sk/std/secg/secp192r1
|
|
134
|
-
*/
|
|
135
|
-
export const secp192r1
|
|
136
|
-
: Init
|
|
137
|
-
= {
|
|
138
|
-
p: 0xffffffff_ffffffff_ffffffff_fffffffe_ffffffff_ffffffffn,
|
|
139
|
-
a: [
|
|
140
|
-
0x64210519_e59c80e7_0fa7e9ab_72243049_feb8deec_c146b9b1n,
|
|
141
|
-
0xffffffff_ffffffff_ffffffff_fffffffe_ffffffff_fffffffcn
|
|
142
|
-
],
|
|
143
|
-
g: [
|
|
144
|
-
0x188da80e_b03090f6_7cbf20eb_43a18800_f4ff0afd_82ff1012n,
|
|
145
|
-
0x07192b95_ffc8da78_631011ed_6b24cdd5_73f977a1_1e794811n
|
|
146
|
-
],
|
|
147
|
-
n: 0xffffffff_ffffffff_ffffffff_99def836_146bc9b1_b4d22831n,
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
/**
|
|
151
|
-
* https://en.bitcoin.it/wiki/Secp256k1
|
|
152
|
-
* https://neuromancer.sk/std/secg/secp256k1
|
|
153
|
-
*/
|
|
154
|
-
export const secp256k1
|
|
155
|
-
: Init
|
|
156
|
-
= {
|
|
157
|
-
p: 0xffffffff_ffffffff_ffffffff_ffffffff_ffffffff_ffffffff_fffffffe_fffffc2fn,
|
|
158
|
-
a: [7n, 0n],
|
|
159
|
-
g: [
|
|
160
|
-
0x79be667e_f9dcbbac_55a06295_ce870b07_029bfcdb_2dce28d9_59f2815b_16f81798n,
|
|
161
|
-
0x483ada77_26a3c465_5da4fbfc_0e1108a8_fd17b448_a6855419_9c47d08f_fb10d4b8n
|
|
162
|
-
],
|
|
163
|
-
n: 0xffffffff_ffffffff_ffffffff_fffffffe_baaedce6_af48a03b_bfd25e8c_d0364141n,
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
/**
|
|
167
|
-
* https://neuromancer.sk/std/secg/secp256r1
|
|
168
|
-
*/
|
|
169
|
-
export const secp256r1
|
|
170
|
-
: Init
|
|
171
|
-
= {
|
|
172
|
-
p: 0xffffffff_00000001_00000000_00000000_00000000_ffffffff_ffffffff_ffffffffn,
|
|
173
|
-
a: [
|
|
174
|
-
0x5ac635d8_aa3a93e7_b3ebbd55_769886bc_651d06b0_cc53b0f6_3bce3c3e_27d2604bn, //< b
|
|
175
|
-
0xffffffff_00000001_00000000_00000000_00000000_ffffffff_ffffffff_fffffffcn, //< a
|
|
176
|
-
],
|
|
177
|
-
g: [
|
|
178
|
-
0x6b17d1f2_e12c4247_f8bce6e5_63a440f2_77037d81_2deb33a0_f4a13945_d898c296n, //< x
|
|
179
|
-
0x4fe342e2_fe1a7f9b_8ee7eb4a_7c0f9e16_2bce3357_6b315ece_cbb64068_37bf51f5n, //< y
|
|
180
|
-
],
|
|
181
|
-
n: 0xffffffff_00000000_ffffffff_ffffffff_bce6faad_a7179e84_f3b9cac2_fc632551n,
|
|
182
|
-
}
|
package/crypto/secp/test.f.ts
DELETED
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
import * as _ from './module.f.ts'
|
|
2
|
-
const { curve, secp256k1, secp192r1, secp256r1, eq } = _
|
|
3
|
-
|
|
4
|
-
export default {
|
|
5
|
-
example: () => {
|
|
6
|
-
const curveParams
|
|
7
|
-
: _.Init
|
|
8
|
-
= {
|
|
9
|
-
p: 23n,
|
|
10
|
-
a: [0n, 1n],
|
|
11
|
-
g: [1n, 1n],
|
|
12
|
-
n: 19n
|
|
13
|
-
}
|
|
14
|
-
const c = curve(curveParams)
|
|
15
|
-
// Access curve operations
|
|
16
|
-
const point = c.add([1n, 1n])([2n, 5n]); // Add two points
|
|
17
|
-
const negPoint = c.neg([1n, 1n]); // Negate a point
|
|
18
|
-
const mulPoint = c.mul([1n, 1n])(3n); // Multiply a point by 3
|
|
19
|
-
},
|
|
20
|
-
test: () => {
|
|
21
|
-
const test_curve
|
|
22
|
-
: (c: _.Init) => void
|
|
23
|
-
= c => {
|
|
24
|
-
const { g } = c
|
|
25
|
-
const { mul, neg, pf: { abs }, y: yf, nf: { p: n } } = curve(c)
|
|
26
|
-
const point_check
|
|
27
|
-
: (p: _.Point) => void
|
|
28
|
-
= p => {
|
|
29
|
-
if (p === null) { throw 'p === null' }
|
|
30
|
-
const [x, y] = p
|
|
31
|
-
const ye = yf(x)
|
|
32
|
-
if (ye === null) { throw 'ye === null' }
|
|
33
|
-
if (abs(ye) !== abs(y)) { throw 'ye' }
|
|
34
|
-
}
|
|
35
|
-
point_check(g)
|
|
36
|
-
point_check(neg(g))
|
|
37
|
-
const test_mul
|
|
38
|
-
: (p: _.Point) => void
|
|
39
|
-
= p => {
|
|
40
|
-
if (mul(p)(0n) !== null) { throw 'O' }
|
|
41
|
-
if (mul(p)(1n) !== p) { throw 'p' }
|
|
42
|
-
if (mul(p)(n) !== null) { throw 'n' }
|
|
43
|
-
const pn = neg(p)
|
|
44
|
-
if (!eq(mul(p)(n - 1n))(pn)) { throw 'n - 1' }
|
|
45
|
-
const f
|
|
46
|
-
: (s: bigint) => void
|
|
47
|
-
= s => {
|
|
48
|
-
const r = mul(p)(s)
|
|
49
|
-
point_check(r)
|
|
50
|
-
const rn = mul(pn)(s)
|
|
51
|
-
point_check(rn)
|
|
52
|
-
if (!eq(r)(neg(rn))) { throw 'r != -rn' }
|
|
53
|
-
}
|
|
54
|
-
f(2n)
|
|
55
|
-
f(3n)
|
|
56
|
-
f(4n << 128n)
|
|
57
|
-
f((5n << 128n) + 6n)
|
|
58
|
-
f(7n << 128n)
|
|
59
|
-
f((8n << 128n) + 9n)
|
|
60
|
-
}
|
|
61
|
-
test_mul(g)
|
|
62
|
-
test_mul(neg(g))
|
|
63
|
-
}
|
|
64
|
-
test_curve(secp256k1)
|
|
65
|
-
test_curve(secp192r1)
|
|
66
|
-
test_curve(secp256r1)
|
|
67
|
-
}
|
|
68
|
-
}
|