therubyracer 0.4.8-x86-darwin-9 → 0.4.9-x86-darwin-9
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of therubyracer might be problematic. Click here for more details.
- data/.gitignore +11 -0
- data/.gitmodules +3 -0
- data/History.txt +5 -1
- data/Rakefile +35 -38
- data/ext/v8/callbacks.cpp +1 -1
- data/ext/v8/convert_ruby.h +1 -1
- data/ext/v8/convert_string.h +3 -3
- data/ext/v8/extconf.rb +9 -17
- data/ext/v8/upstream/2.0.6/.gitignore +26 -0
- data/ext/v8/upstream/Makefile +31 -0
- data/ext/v8/upstream/no-strict-aliasing.patch +13 -0
- data/ext/v8/v8_str.cpp +1 -1
- data/ext/v8/v8_template.cpp +1 -1
- data/lib/v8.rb +1 -1
- data/lib/v8/v8.bundle +0 -0
- data/spec/ext/obj_spec.rb +1 -1
- data/spec/redjs/jsapi_spec.rb +11 -0
- data/therubyracer.gemspec +658 -12
- metadata +611 -1182
- data/Manifest.txt +0 -1191
- data/ext/v8/upstream/2.0.6/.sconsign.dblite +0 -0
- data/ext/v8/upstream/2.0.6/benchmarks/README.txt +0 -63
- data/ext/v8/upstream/2.0.6/benchmarks/base.js +0 -264
- data/ext/v8/upstream/2.0.6/benchmarks/crypto.js +0 -1698
- data/ext/v8/upstream/2.0.6/benchmarks/deltablue.js +0 -880
- data/ext/v8/upstream/2.0.6/benchmarks/earley-boyer.js +0 -4684
- data/ext/v8/upstream/2.0.6/benchmarks/raytrace.js +0 -935
- data/ext/v8/upstream/2.0.6/benchmarks/regexp.js +0 -1614
- data/ext/v8/upstream/2.0.6/benchmarks/revisions.html +0 -86
- data/ext/v8/upstream/2.0.6/benchmarks/richards.js +0 -539
- data/ext/v8/upstream/2.0.6/benchmarks/run.html +0 -141
- data/ext/v8/upstream/2.0.6/benchmarks/run.js +0 -61
- data/ext/v8/upstream/2.0.6/benchmarks/splay.js +0 -378
- data/ext/v8/upstream/2.0.6/benchmarks/style.css +0 -77
- data/ext/v8/upstream/2.0.6/benchmarks/v8-logo.png +0 -0
- data/ext/v8/upstream/2.0.6/samples/SConscript +0 -38
- data/ext/v8/upstream/2.0.6/samples/count-hosts.js +0 -42
- data/ext/v8/upstream/2.0.6/samples/process.cc +0 -622
- data/ext/v8/upstream/2.0.6/samples/shell.cc +0 -303
- data/ext/v8/upstream/2.0.6/test/cctest/SConscript +0 -95
- data/ext/v8/upstream/2.0.6/test/cctest/cctest.cc +0 -126
- data/ext/v8/upstream/2.0.6/test/cctest/cctest.h +0 -211
- data/ext/v8/upstream/2.0.6/test/cctest/cctest.status +0 -54
- data/ext/v8/upstream/2.0.6/test/cctest/test-accessors.cc +0 -450
- data/ext/v8/upstream/2.0.6/test/cctest/test-alloc.cc +0 -215
- data/ext/v8/upstream/2.0.6/test/cctest/test-api.cc +0 -8699
- data/ext/v8/upstream/2.0.6/test/cctest/test-assembler-arm.cc +0 -227
- data/ext/v8/upstream/2.0.6/test/cctest/test-assembler-ia32.cc +0 -395
- data/ext/v8/upstream/2.0.6/test/cctest/test-assembler-x64.cc +0 -292
- data/ext/v8/upstream/2.0.6/test/cctest/test-ast.cc +0 -97
- data/ext/v8/upstream/2.0.6/test/cctest/test-compiler.cc +0 -318
- data/ext/v8/upstream/2.0.6/test/cctest/test-conversions.cc +0 -130
- data/ext/v8/upstream/2.0.6/test/cctest/test-debug.cc +0 -5788
- data/ext/v8/upstream/2.0.6/test/cctest/test-decls.cc +0 -593
- data/ext/v8/upstream/2.0.6/test/cctest/test-disasm-arm.cc +0 -281
- data/ext/v8/upstream/2.0.6/test/cctest/test-disasm-ia32.cc +0 -418
- data/ext/v8/upstream/2.0.6/test/cctest/test-flags.cc +0 -234
- data/ext/v8/upstream/2.0.6/test/cctest/test-func-name-inference.cc +0 -267
- data/ext/v8/upstream/2.0.6/test/cctest/test-hashmap.cc +0 -176
- data/ext/v8/upstream/2.0.6/test/cctest/test-heap-profiler.cc +0 -396
- data/ext/v8/upstream/2.0.6/test/cctest/test-heap.cc +0 -796
- data/ext/v8/upstream/2.0.6/test/cctest/test-list.cc +0 -101
- data/ext/v8/upstream/2.0.6/test/cctest/test-lock.cc +0 -63
- data/ext/v8/upstream/2.0.6/test/cctest/test-log-stack-tracer.cc +0 -372
- data/ext/v8/upstream/2.0.6/test/cctest/test-log-utils.cc +0 -310
- data/ext/v8/upstream/2.0.6/test/cctest/test-log.cc +0 -1081
- data/ext/v8/upstream/2.0.6/test/cctest/test-macro-assembler-x64.cc +0 -2104
- data/ext/v8/upstream/2.0.6/test/cctest/test-mark-compact.cc +0 -341
- data/ext/v8/upstream/2.0.6/test/cctest/test-parsing.cc +0 -129
- data/ext/v8/upstream/2.0.6/test/cctest/test-platform-linux.cc +0 -80
- data/ext/v8/upstream/2.0.6/test/cctest/test-platform-macos.cc +0 -10
- data/ext/v8/upstream/2.0.6/test/cctest/test-platform-nullos.cc +0 -80
- data/ext/v8/upstream/2.0.6/test/cctest/test-platform-win32.cc +0 -26
- data/ext/v8/upstream/2.0.6/test/cctest/test-regexp.cc +0 -1815
- data/ext/v8/upstream/2.0.6/test/cctest/test-serialize.cc +0 -438
- data/ext/v8/upstream/2.0.6/test/cctest/test-sockets.cc +0 -162
- data/ext/v8/upstream/2.0.6/test/cctest/test-spaces.cc +0 -248
- data/ext/v8/upstream/2.0.6/test/cctest/test-strings.cc +0 -432
- data/ext/v8/upstream/2.0.6/test/cctest/test-thread-termination.cc +0 -290
- data/ext/v8/upstream/2.0.6/test/cctest/test-threads.cc +0 -52
- data/ext/v8/upstream/2.0.6/test/cctest/test-utils.cc +0 -186
- data/ext/v8/upstream/2.0.6/test/cctest/test-version.cc +0 -89
- data/ext/v8/upstream/2.0.6/test/cctest/testcfg.py +0 -108
- data/ext/v8/upstream/2.0.6/test/es5conform/README +0 -14
- data/ext/v8/upstream/2.0.6/test/es5conform/es5conform.status +0 -226
- data/ext/v8/upstream/2.0.6/test/es5conform/harness-adapt.js +0 -74
- data/ext/v8/upstream/2.0.6/test/es5conform/testcfg.py +0 -108
- data/ext/v8/upstream/2.0.6/test/message/message.status +0 -31
- data/ext/v8/upstream/2.0.6/test/message/overwritten-builtins.js +0 -31
- data/ext/v8/upstream/2.0.6/test/message/overwritten-builtins.out +0 -30
- data/ext/v8/upstream/2.0.6/test/message/regress/regress-73.js +0 -33
- data/ext/v8/upstream/2.0.6/test/message/regress/regress-73.out +0 -30
- data/ext/v8/upstream/2.0.6/test/message/regress/regress-75.js +0 -32
- data/ext/v8/upstream/2.0.6/test/message/regress/regress-75.out +0 -30
- data/ext/v8/upstream/2.0.6/test/message/simple-throw.js +0 -28
- data/ext/v8/upstream/2.0.6/test/message/simple-throw.out +0 -30
- data/ext/v8/upstream/2.0.6/test/message/testcfg.py +0 -135
- data/ext/v8/upstream/2.0.6/test/message/try-catch-finally-no-message.js +0 -51
- data/ext/v8/upstream/2.0.6/test/message/try-catch-finally-no-message.out +0 -26
- data/ext/v8/upstream/2.0.6/test/message/try-catch-finally-return-in-finally.js +0 -39
- data/ext/v8/upstream/2.0.6/test/message/try-catch-finally-return-in-finally.out +0 -28
- data/ext/v8/upstream/2.0.6/test/message/try-catch-finally-throw-in-catch-and-finally.js +0 -34
- data/ext/v8/upstream/2.0.6/test/message/try-catch-finally-throw-in-catch-and-finally.out +0 -30
- data/ext/v8/upstream/2.0.6/test/message/try-catch-finally-throw-in-catch.js +0 -34
- data/ext/v8/upstream/2.0.6/test/message/try-catch-finally-throw-in-catch.out +0 -30
- data/ext/v8/upstream/2.0.6/test/message/try-catch-finally-throw-in-finally.js +0 -34
- data/ext/v8/upstream/2.0.6/test/message/try-catch-finally-throw-in-finally.out +0 -30
- data/ext/v8/upstream/2.0.6/test/message/try-finally-return-in-finally.js +0 -37
- data/ext/v8/upstream/2.0.6/test/message/try-finally-return-in-finally.out +0 -28
- data/ext/v8/upstream/2.0.6/test/message/try-finally-throw-in-finally.js +0 -32
- data/ext/v8/upstream/2.0.6/test/message/try-finally-throw-in-finally.out +0 -30
- data/ext/v8/upstream/2.0.6/test/message/try-finally-throw-in-try-and-finally.js +0 -32
- data/ext/v8/upstream/2.0.6/test/message/try-finally-throw-in-try-and-finally.out +0 -30
- data/ext/v8/upstream/2.0.6/test/message/try-finally-throw-in-try.js +0 -32
- data/ext/v8/upstream/2.0.6/test/message/try-finally-throw-in-try.out +0 -30
- data/ext/v8/upstream/2.0.6/test/mjsunit/api-call-after-bypassed-exception.js +0 -39
- data/ext/v8/upstream/2.0.6/test/mjsunit/apply.js +0 -196
- data/ext/v8/upstream/2.0.6/test/mjsunit/arguments-apply.js +0 -134
- data/ext/v8/upstream/2.0.6/test/mjsunit/arguments-call-apply.js +0 -41
- data/ext/v8/upstream/2.0.6/test/mjsunit/arguments-enum.js +0 -52
- data/ext/v8/upstream/2.0.6/test/mjsunit/arguments-indirect.js +0 -47
- data/ext/v8/upstream/2.0.6/test/mjsunit/arguments-lazy.js +0 -47
- data/ext/v8/upstream/2.0.6/test/mjsunit/arguments-opt.js +0 -130
- data/ext/v8/upstream/2.0.6/test/mjsunit/arguments-read-and-assignment.js +0 -164
- data/ext/v8/upstream/2.0.6/test/mjsunit/arguments.js +0 -97
- data/ext/v8/upstream/2.0.6/test/mjsunit/array-concat.js +0 -120
- data/ext/v8/upstream/2.0.6/test/mjsunit/array-constructor.js +0 -119
- data/ext/v8/upstream/2.0.6/test/mjsunit/array-functions-prototype.js +0 -159
- data/ext/v8/upstream/2.0.6/test/mjsunit/array-indexing.js +0 -66
- data/ext/v8/upstream/2.0.6/test/mjsunit/array-iteration.js +0 -228
- data/ext/v8/upstream/2.0.6/test/mjsunit/array-join.js +0 -45
- data/ext/v8/upstream/2.0.6/test/mjsunit/array-length-number-conversion.js +0 -53
- data/ext/v8/upstream/2.0.6/test/mjsunit/array-length.js +0 -111
- data/ext/v8/upstream/2.0.6/test/mjsunit/array-reduce.js +0 -514
- data/ext/v8/upstream/2.0.6/test/mjsunit/array-sort.js +0 -362
- data/ext/v8/upstream/2.0.6/test/mjsunit/array-splice.js +0 -314
- data/ext/v8/upstream/2.0.6/test/mjsunit/ascii-regexp-subject.js +0 -49
- data/ext/v8/upstream/2.0.6/test/mjsunit/big-array-literal.js +0 -111
- data/ext/v8/upstream/2.0.6/test/mjsunit/big-object-literal.js +0 -114
- data/ext/v8/upstream/2.0.6/test/mjsunit/binary-operation-overwrite.js +0 -36
- data/ext/v8/upstream/2.0.6/test/mjsunit/bit-not.js +0 -75
- data/ext/v8/upstream/2.0.6/test/mjsunit/bitwise-operations-undefined.js +0 -49
- data/ext/v8/upstream/2.0.6/test/mjsunit/body-not-visible.js +0 -39
- data/ext/v8/upstream/2.0.6/test/mjsunit/bugs/bug-1344252.js +0 -79
- data/ext/v8/upstream/2.0.6/test/mjsunit/bugs/bug-222.js +0 -42
- data/ext/v8/upstream/2.0.6/test/mjsunit/bugs/bug-223.js +0 -39
- data/ext/v8/upstream/2.0.6/test/mjsunit/bugs/bug-900066.js +0 -38
- data/ext/v8/upstream/2.0.6/test/mjsunit/bugs/bug-941049.js +0 -100
- data/ext/v8/upstream/2.0.6/test/mjsunit/call-non-function-call.js +0 -38
- data/ext/v8/upstream/2.0.6/test/mjsunit/call-non-function.js +0 -63
- data/ext/v8/upstream/2.0.6/test/mjsunit/call.js +0 -87
- data/ext/v8/upstream/2.0.6/test/mjsunit/char-escape.js +0 -53
- data/ext/v8/upstream/2.0.6/test/mjsunit/class-of-builtins.js +0 -50
- data/ext/v8/upstream/2.0.6/test/mjsunit/closure.js +0 -37
- data/ext/v8/upstream/2.0.6/test/mjsunit/codegen-coverage.js +0 -91
- data/ext/v8/upstream/2.0.6/test/mjsunit/compare-character.js +0 -50
- data/ext/v8/upstream/2.0.6/test/mjsunit/compare-nan.js +0 -66
- data/ext/v8/upstream/2.0.6/test/mjsunit/compiler/countoperation.js +0 -111
- data/ext/v8/upstream/2.0.6/test/mjsunit/compiler/function-call.js +0 -52
- data/ext/v8/upstream/2.0.6/test/mjsunit/compiler/globals.js +0 -65
- data/ext/v8/upstream/2.0.6/test/mjsunit/compiler/jsnatives.js +0 -33
- data/ext/v8/upstream/2.0.6/test/mjsunit/compiler/literals-assignment.js +0 -104
- data/ext/v8/upstream/2.0.6/test/mjsunit/compiler/literals.js +0 -52
- data/ext/v8/upstream/2.0.6/test/mjsunit/compiler/loops.js +0 -35
- data/ext/v8/upstream/2.0.6/test/mjsunit/compiler/objectliterals.js +0 -57
- data/ext/v8/upstream/2.0.6/test/mjsunit/compiler/property-simple.js +0 -39
- data/ext/v8/upstream/2.0.6/test/mjsunit/compiler/short-circuit.js +0 -102
- data/ext/v8/upstream/2.0.6/test/mjsunit/compiler/thisfunction.js +0 -35
- data/ext/v8/upstream/2.0.6/test/mjsunit/const-declaration.js +0 -172
- data/ext/v8/upstream/2.0.6/test/mjsunit/const-eval-init.js +0 -111
- data/ext/v8/upstream/2.0.6/test/mjsunit/const-redecl.js +0 -220
- data/ext/v8/upstream/2.0.6/test/mjsunit/const.js +0 -70
- data/ext/v8/upstream/2.0.6/test/mjsunit/constant-folding.js +0 -232
- data/ext/v8/upstream/2.0.6/test/mjsunit/context-variable-assignments.js +0 -37
- data/ext/v8/upstream/2.0.6/test/mjsunit/cyclic-array-to-string.js +0 -65
- data/ext/v8/upstream/2.0.6/test/mjsunit/cyrillic.js +0 -199
- data/ext/v8/upstream/2.0.6/test/mjsunit/d8-os.js +0 -180
- data/ext/v8/upstream/2.0.6/test/mjsunit/date-parse.js +0 -268
- data/ext/v8/upstream/2.0.6/test/mjsunit/date.js +0 -149
- data/ext/v8/upstream/2.0.6/test/mjsunit/debug-backtrace-text.js +0 -122
- data/ext/v8/upstream/2.0.6/test/mjsunit/debug-backtrace.js +0 -272
- data/ext/v8/upstream/2.0.6/test/mjsunit/debug-breakpoints.js +0 -120
- data/ext/v8/upstream/2.0.6/test/mjsunit/debug-changebreakpoint.js +0 -108
- data/ext/v8/upstream/2.0.6/test/mjsunit/debug-clearbreakpoint.js +0 -101
- data/ext/v8/upstream/2.0.6/test/mjsunit/debug-clearbreakpointgroup.js +0 -117
- data/ext/v8/upstream/2.0.6/test/mjsunit/debug-compile-event.js +0 -126
- data/ext/v8/upstream/2.0.6/test/mjsunit/debug-conditional-breakpoints.js +0 -171
- data/ext/v8/upstream/2.0.6/test/mjsunit/debug-constructed-by.js +0 -60
- data/ext/v8/upstream/2.0.6/test/mjsunit/debug-constructor.js +0 -78
- data/ext/v8/upstream/2.0.6/test/mjsunit/debug-continue.js +0 -114
- data/ext/v8/upstream/2.0.6/test/mjsunit/debug-enable-disable-breakpoints.js +0 -90
- data/ext/v8/upstream/2.0.6/test/mjsunit/debug-evaluate-arguments.js +0 -93
- data/ext/v8/upstream/2.0.6/test/mjsunit/debug-evaluate-bool-constructor.js +0 -80
- data/ext/v8/upstream/2.0.6/test/mjsunit/debug-evaluate-locals.js +0 -132
- data/ext/v8/upstream/2.0.6/test/mjsunit/debug-evaluate-recursive.js +0 -167
- data/ext/v8/upstream/2.0.6/test/mjsunit/debug-evaluate-with.js +0 -77
- data/ext/v8/upstream/2.0.6/test/mjsunit/debug-evaluate.js +0 -118
- data/ext/v8/upstream/2.0.6/test/mjsunit/debug-event-listener.js +0 -73
- data/ext/v8/upstream/2.0.6/test/mjsunit/debug-handle.js +0 -252
- data/ext/v8/upstream/2.0.6/test/mjsunit/debug-ignore-breakpoints.js +0 -89
- data/ext/v8/upstream/2.0.6/test/mjsunit/debug-mirror-cache.js +0 -85
- data/ext/v8/upstream/2.0.6/test/mjsunit/debug-multiple-breakpoints.js +0 -105
- data/ext/v8/upstream/2.0.6/test/mjsunit/debug-referenced-by.js +0 -112
- data/ext/v8/upstream/2.0.6/test/mjsunit/debug-references.js +0 -118
- data/ext/v8/upstream/2.0.6/test/mjsunit/debug-scopes.js +0 -761
- data/ext/v8/upstream/2.0.6/test/mjsunit/debug-script-breakpoints.js +0 -112
- data/ext/v8/upstream/2.0.6/test/mjsunit/debug-script.js +0 -92
- data/ext/v8/upstream/2.0.6/test/mjsunit/debug-scripts-request.js +0 -108
- data/ext/v8/upstream/2.0.6/test/mjsunit/debug-setbreakpoint.js +0 -165
- data/ext/v8/upstream/2.0.6/test/mjsunit/debug-sourceinfo.js +0 -352
- data/ext/v8/upstream/2.0.6/test/mjsunit/debug-sourceslice.js +0 -74
- data/ext/v8/upstream/2.0.6/test/mjsunit/debug-step-stub-callfunction.js +0 -87
- data/ext/v8/upstream/2.0.6/test/mjsunit/debug-step.js +0 -82
- data/ext/v8/upstream/2.0.6/test/mjsunit/debug-stepin-accessor.js +0 -248
- data/ext/v8/upstream/2.0.6/test/mjsunit/debug-stepin-builtin.js +0 -78
- data/ext/v8/upstream/2.0.6/test/mjsunit/debug-stepin-call-function-stub.js +0 -115
- data/ext/v8/upstream/2.0.6/test/mjsunit/debug-stepin-constructor.js +0 -78
- data/ext/v8/upstream/2.0.6/test/mjsunit/debug-stepin-function-call.js +0 -149
- data/ext/v8/upstream/2.0.6/test/mjsunit/debug-stepnext-do-while.js +0 -79
- data/ext/v8/upstream/2.0.6/test/mjsunit/debug-stepout-recursive-function.js +0 -106
- data/ext/v8/upstream/2.0.6/test/mjsunit/debug-stepout-to-builtin.js +0 -84
- data/ext/v8/upstream/2.0.6/test/mjsunit/debug-suspend.js +0 -96
- data/ext/v8/upstream/2.0.6/test/mjsunit/debug-version.js +0 -90
- data/ext/v8/upstream/2.0.6/test/mjsunit/declare-locally.js +0 -43
- data/ext/v8/upstream/2.0.6/test/mjsunit/deep-recursion.js +0 -66
- data/ext/v8/upstream/2.0.6/test/mjsunit/delay-syntax-error.js +0 -41
- data/ext/v8/upstream/2.0.6/test/mjsunit/delete-global-properties.js +0 -37
- data/ext/v8/upstream/2.0.6/test/mjsunit/delete-in-eval.js +0 -32
- data/ext/v8/upstream/2.0.6/test/mjsunit/delete-in-with.js +0 -34
- data/ext/v8/upstream/2.0.6/test/mjsunit/delete-vars-from-eval.js +0 -40
- data/ext/v8/upstream/2.0.6/test/mjsunit/delete.js +0 -163
- data/ext/v8/upstream/2.0.6/test/mjsunit/div-mod.js +0 -157
- data/ext/v8/upstream/2.0.6/test/mjsunit/do-not-strip-fc.js +0 -31
- data/ext/v8/upstream/2.0.6/test/mjsunit/dont-enum-array-holes.js +0 -35
- data/ext/v8/upstream/2.0.6/test/mjsunit/dont-reinit-global-var.js +0 -47
- data/ext/v8/upstream/2.0.6/test/mjsunit/double-equals.js +0 -114
- data/ext/v8/upstream/2.0.6/test/mjsunit/dtoa.js +0 -32
- data/ext/v8/upstream/2.0.6/test/mjsunit/enumeration-order.js +0 -109
- data/ext/v8/upstream/2.0.6/test/mjsunit/error-constructors.js +0 -32
- data/ext/v8/upstream/2.0.6/test/mjsunit/escape.js +0 -118
- data/ext/v8/upstream/2.0.6/test/mjsunit/eval-enclosing-function-name.js +0 -76
- data/ext/v8/upstream/2.0.6/test/mjsunit/eval-typeof-non-existing.js +0 -35
- data/ext/v8/upstream/2.0.6/test/mjsunit/eval.js +0 -157
- data/ext/v8/upstream/2.0.6/test/mjsunit/execScript-case-insensitive.js +0 -34
- data/ext/v8/upstream/2.0.6/test/mjsunit/extra-arguments.js +0 -54
- data/ext/v8/upstream/2.0.6/test/mjsunit/extra-commas.js +0 -46
- data/ext/v8/upstream/2.0.6/test/mjsunit/for-in-null-or-undefined.js +0 -33
- data/ext/v8/upstream/2.0.6/test/mjsunit/for-in-special-cases.js +0 -64
- data/ext/v8/upstream/2.0.6/test/mjsunit/for-in.js +0 -86
- data/ext/v8/upstream/2.0.6/test/mjsunit/fun-as-prototype.js +0 -36
- data/ext/v8/upstream/2.0.6/test/mjsunit/fun-name.js +0 -34
- data/ext/v8/upstream/2.0.6/test/mjsunit/function-arguments-null.js +0 -30
- data/ext/v8/upstream/2.0.6/test/mjsunit/function-caller.js +0 -48
- data/ext/v8/upstream/2.0.6/test/mjsunit/function-names.js +0 -133
- data/ext/v8/upstream/2.0.6/test/mjsunit/function-property.js +0 -29
- data/ext/v8/upstream/2.0.6/test/mjsunit/function-prototype.js +0 -98
- data/ext/v8/upstream/2.0.6/test/mjsunit/function-source.js +0 -49
- data/ext/v8/upstream/2.0.6/test/mjsunit/function.js +0 -83
- data/ext/v8/upstream/2.0.6/test/mjsunit/fuzz-accessors.js +0 -85
- data/ext/v8/upstream/2.0.6/test/mjsunit/fuzz-natives.js +0 -159
- data/ext/v8/upstream/2.0.6/test/mjsunit/get-own-property-descriptor.js +0 -51
- data/ext/v8/upstream/2.0.6/test/mjsunit/get-prototype-of.js +0 -68
- data/ext/v8/upstream/2.0.6/test/mjsunit/getter-in-prototype.js +0 -50
- data/ext/v8/upstream/2.0.6/test/mjsunit/getter-in-value-prototype.js +0 -35
- data/ext/v8/upstream/2.0.6/test/mjsunit/global-const-var-conflicts.js +0 -57
- data/ext/v8/upstream/2.0.6/test/mjsunit/global-deleted-property-ic.js +0 -45
- data/ext/v8/upstream/2.0.6/test/mjsunit/global-deleted-property-keyed.js +0 -38
- data/ext/v8/upstream/2.0.6/test/mjsunit/global-ic.js +0 -48
- data/ext/v8/upstream/2.0.6/test/mjsunit/global-load-from-eval-in-with.js +0 -59
- data/ext/v8/upstream/2.0.6/test/mjsunit/global-load-from-eval.js +0 -85
- data/ext/v8/upstream/2.0.6/test/mjsunit/global-load-from-nested-eval.js +0 -66
- data/ext/v8/upstream/2.0.6/test/mjsunit/global-vars-eval.js +0 -34
- data/ext/v8/upstream/2.0.6/test/mjsunit/global-vars-with.js +0 -43
- data/ext/v8/upstream/2.0.6/test/mjsunit/greedy.js +0 -60
- data/ext/v8/upstream/2.0.6/test/mjsunit/has-own-property.js +0 -38
- data/ext/v8/upstream/2.0.6/test/mjsunit/html-comments.js +0 -57
- data/ext/v8/upstream/2.0.6/test/mjsunit/html-string-funcs.js +0 -47
- data/ext/v8/upstream/2.0.6/test/mjsunit/if-in-undefined.js +0 -36
- data/ext/v8/upstream/2.0.6/test/mjsunit/in.js +0 -159
- data/ext/v8/upstream/2.0.6/test/mjsunit/indexed-accessors.js +0 -120
- data/ext/v8/upstream/2.0.6/test/mjsunit/instanceof.js +0 -93
- data/ext/v8/upstream/2.0.6/test/mjsunit/integer-to-string.js +0 -35
- data/ext/v8/upstream/2.0.6/test/mjsunit/invalid-lhs.js +0 -65
- data/ext/v8/upstream/2.0.6/test/mjsunit/invalid-source-element.js +0 -31
- data/ext/v8/upstream/2.0.6/test/mjsunit/json.js +0 -207
- data/ext/v8/upstream/2.0.6/test/mjsunit/keyed-ic.js +0 -236
- data/ext/v8/upstream/2.0.6/test/mjsunit/keyed-storage-extend.js +0 -55
- data/ext/v8/upstream/2.0.6/test/mjsunit/large-object-allocation.js +0 -300
- data/ext/v8/upstream/2.0.6/test/mjsunit/large-object-literal.js +0 -56
- data/ext/v8/upstream/2.0.6/test/mjsunit/lazy-load.js +0 -34
- data/ext/v8/upstream/2.0.6/test/mjsunit/leakcheck.js +0 -53
- data/ext/v8/upstream/2.0.6/test/mjsunit/length.js +0 -78
- data/ext/v8/upstream/2.0.6/test/mjsunit/local-load-from-eval.js +0 -39
- data/ext/v8/upstream/2.0.6/test/mjsunit/math-min-max.js +0 -105
- data/ext/v8/upstream/2.0.6/test/mjsunit/megamorphic-callbacks.js +0 -70
- data/ext/v8/upstream/2.0.6/test/mjsunit/mirror-array.js +0 -138
- data/ext/v8/upstream/2.0.6/test/mjsunit/mirror-boolean.js +0 -59
- data/ext/v8/upstream/2.0.6/test/mjsunit/mirror-date.js +0 -77
- data/ext/v8/upstream/2.0.6/test/mjsunit/mirror-error.js +0 -94
- data/ext/v8/upstream/2.0.6/test/mjsunit/mirror-function.js +0 -90
- data/ext/v8/upstream/2.0.6/test/mjsunit/mirror-null.js +0 -50
- data/ext/v8/upstream/2.0.6/test/mjsunit/mirror-number.js +0 -77
- data/ext/v8/upstream/2.0.6/test/mjsunit/mirror-object.js +0 -227
- data/ext/v8/upstream/2.0.6/test/mjsunit/mirror-regexp.js +0 -110
- data/ext/v8/upstream/2.0.6/test/mjsunit/mirror-script.js +0 -100
- data/ext/v8/upstream/2.0.6/test/mjsunit/mirror-string.js +0 -89
- data/ext/v8/upstream/2.0.6/test/mjsunit/mirror-undefined.js +0 -50
- data/ext/v8/upstream/2.0.6/test/mjsunit/mirror-unresolved-function.js +0 -81
- data/ext/v8/upstream/2.0.6/test/mjsunit/mjsunit.js +0 -203
- data/ext/v8/upstream/2.0.6/test/mjsunit/mjsunit.status +0 -66
- data/ext/v8/upstream/2.0.6/test/mjsunit/mul-exhaustive.js +0 -4511
- data/ext/v8/upstream/2.0.6/test/mjsunit/multiple-return.js +0 -62
- data/ext/v8/upstream/2.0.6/test/mjsunit/negate-zero.js +0 -42
- data/ext/v8/upstream/2.0.6/test/mjsunit/negate.js +0 -59
- data/ext/v8/upstream/2.0.6/test/mjsunit/new.js +0 -56
- data/ext/v8/upstream/2.0.6/test/mjsunit/newline-in-string.js +0 -46
- data/ext/v8/upstream/2.0.6/test/mjsunit/no-branch-elimination.js +0 -36
- data/ext/v8/upstream/2.0.6/test/mjsunit/no-octal-constants-above-256.js +0 -32
- data/ext/v8/upstream/2.0.6/test/mjsunit/no-semicolon.js +0 -45
- data/ext/v8/upstream/2.0.6/test/mjsunit/non-ascii-replace.js +0 -30
- data/ext/v8/upstream/2.0.6/test/mjsunit/nul-characters.js +0 -38
- data/ext/v8/upstream/2.0.6/test/mjsunit/number-limits.js +0 -47
- data/ext/v8/upstream/2.0.6/test/mjsunit/number-string-index-call.js +0 -32
- data/ext/v8/upstream/2.0.6/test/mjsunit/number-tostring-small.js +0 -395
- data/ext/v8/upstream/2.0.6/test/mjsunit/number-tostring.js +0 -338
- data/ext/v8/upstream/2.0.6/test/mjsunit/obj-construct.js +0 -46
- data/ext/v8/upstream/2.0.6/test/mjsunit/object-create.js +0 -250
- data/ext/v8/upstream/2.0.6/test/mjsunit/object-literal-gc.js +0 -66
- data/ext/v8/upstream/2.0.6/test/mjsunit/object-literal.js +0 -105
- data/ext/v8/upstream/2.0.6/test/mjsunit/override-read-only-property.js +0 -64
- data/ext/v8/upstream/2.0.6/test/mjsunit/parse-int-float.js +0 -85
- data/ext/v8/upstream/2.0.6/test/mjsunit/property-load-across-eval.js +0 -85
- data/ext/v8/upstream/2.0.6/test/mjsunit/property-object-key.js +0 -36
- data/ext/v8/upstream/2.0.6/test/mjsunit/proto.js +0 -33
- data/ext/v8/upstream/2.0.6/test/mjsunit/prototype.js +0 -93
- data/ext/v8/upstream/2.0.6/test/mjsunit/receiver-in-with-calls.js +0 -47
- data/ext/v8/upstream/2.0.6/test/mjsunit/regexp-UC16.js +0 -47
- data/ext/v8/upstream/2.0.6/test/mjsunit/regexp-call-as-function.js +0 -36
- data/ext/v8/upstream/2.0.6/test/mjsunit/regexp-capture.js +0 -57
- data/ext/v8/upstream/2.0.6/test/mjsunit/regexp-captures.js +0 -31
- data/ext/v8/upstream/2.0.6/test/mjsunit/regexp-indexof.js +0 -77
- data/ext/v8/upstream/2.0.6/test/mjsunit/regexp-lookahead.js +0 -166
- data/ext/v8/upstream/2.0.6/test/mjsunit/regexp-loop-capture.js +0 -29
- data/ext/v8/upstream/2.0.6/test/mjsunit/regexp-multiline-stack-trace.js +0 -116
- data/ext/v8/upstream/2.0.6/test/mjsunit/regexp-multiline.js +0 -112
- data/ext/v8/upstream/2.0.6/test/mjsunit/regexp-standalones.js +0 -78
- data/ext/v8/upstream/2.0.6/test/mjsunit/regexp-static.js +0 -167
- data/ext/v8/upstream/2.0.6/test/mjsunit/regexp-string-methods.js +0 -51
- data/ext/v8/upstream/2.0.6/test/mjsunit/regexp.js +0 -390
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1030466.js +0 -45
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1036894.js +0 -38
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1039610.js +0 -29
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1050043.js +0 -51
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1062422.js +0 -30
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1066899.js +0 -37
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1081309.js +0 -110
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1102760.js +0 -35
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1110164.js +0 -46
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1112051.js +0 -33
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1114040.js +0 -58
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1134697.js +0 -31
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-114.js +0 -43
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-116.js +0 -40
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1170187.js +0 -80
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1173979.js +0 -48
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1175390.js +0 -30
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1177518.js +0 -39
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1177809.js +0 -31
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1178598.js +0 -90
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1182832.js +0 -38
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1187524.js +0 -34
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1199401.js +0 -75
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1199637.js +0 -78
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1200351.js +0 -2032
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1201933.js +0 -40
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1203459.js +0 -29
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1207276.js +0 -36
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1213516.js +0 -40
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1213575.js +0 -41
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1215653.js +0 -365
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-124.js +0 -57
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1254366.js +0 -38
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1327557.js +0 -36
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1341167.js +0 -33
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1346700.js +0 -29
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-137.js +0 -46
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1439135.js +0 -40
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-149.js +0 -28
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1493017.js +0 -52
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-155924.js +0 -46
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-171.js +0 -41
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-176.js +0 -50
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-186.js +0 -72
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-187.js +0 -30
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-189.js +0 -36
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-191.js +0 -42
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1919169.js +0 -40
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-192.js +0 -38
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-193.js +0 -44
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-20070207.js +0 -42
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-201.js +0 -37
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-219.js +0 -176
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-220.js +0 -31
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-221.js +0 -34
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-2249423.js +0 -40
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-225.js +0 -32
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-227.js +0 -33
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-231.js +0 -92
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-233.js +0 -39
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-244.js +0 -67
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-246.js +0 -31
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-253.js +0 -31
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-254.js +0 -58
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-259.js +0 -33
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-260.js +0 -33
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-263.js +0 -38
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-265.js +0 -64
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-267.js +0 -35
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-269.js +0 -49
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-279.js +0 -62
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-284.js +0 -50
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-286.js +0 -36
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-294.js +0 -43
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-312.js +0 -31
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-317.js +0 -31
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-318.js +0 -35
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-326.js +0 -40
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-334.js +0 -90
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-341.js +0 -36
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-345.js +0 -51
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-349.js +0 -32
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-35.js +0 -33
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-351.js +0 -31
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-386.js +0 -47
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-392.js +0 -34
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-394.js +0 -47
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-396.js +0 -39
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-397.js +0 -34
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-399.js +0 -32
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-406.js +0 -69
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-416.js +0 -38
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-475.js +0 -28
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-483.js +0 -35
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-485.js +0 -64
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-486.js +0 -30
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-490.js +0 -48
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-491.js +0 -47
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-492.js +0 -52
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-496.js +0 -39
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-502.js +0 -38
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-503.js +0 -63
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-515.js +0 -40
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-524.js +0 -32
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-526.js +0 -32
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-540.js +0 -47
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-545.js +0 -47
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-57.js +0 -32
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-580.js +0 -55
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-588599.js +0 -31
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-6-9-regexp.js +0 -30
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-662254.js +0 -40
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-666721.js +0 -53
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-667061.js +0 -90
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-670147.js +0 -34
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-674753.js +0 -87
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-676025.js +0 -31
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-678525.js +0 -59
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-682649.js +0 -30
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-69.js +0 -43
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-734862.js +0 -37
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-737588.js +0 -34
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-74.js +0 -41
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-780423.js +0 -39
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-799761.js +0 -92
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-806473.js +0 -60
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-842017.js +0 -60
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-86.js +0 -46
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-87.js +0 -58
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-874178.js +0 -32
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-875031.js +0 -37
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-877615.js +0 -37
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-892742.js +0 -50
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-900055.js +0 -42
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-900966.js +0 -38
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-91.js +0 -38
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-925537.js +0 -42
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-937896.js +0 -50
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-990205.js +0 -35
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-992733.js +0 -35
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-996542.js +0 -40
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-998565.js +0 -51
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-crbug-18639.js +0 -34
- data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-r3391.js +0 -77
- data/ext/v8/upstream/2.0.6/test/mjsunit/scanner.js +0 -30
- data/ext/v8/upstream/2.0.6/test/mjsunit/short-circuit-boolean.js +0 -46
- data/ext/v8/upstream/2.0.6/test/mjsunit/simple-constructor.js +0 -140
- data/ext/v8/upstream/2.0.6/test/mjsunit/sin-cos.js +0 -45
- data/ext/v8/upstream/2.0.6/test/mjsunit/smi-negative-zero.js +0 -100
- data/ext/v8/upstream/2.0.6/test/mjsunit/smi-ops.js +0 -671
- data/ext/v8/upstream/2.0.6/test/mjsunit/sparse-array-reverse.js +0 -131
- data/ext/v8/upstream/2.0.6/test/mjsunit/sparse-array.js +0 -41
- data/ext/v8/upstream/2.0.6/test/mjsunit/stack-traces.js +0 -204
- data/ext/v8/upstream/2.0.6/test/mjsunit/str-to-num.js +0 -158
- data/ext/v8/upstream/2.0.6/test/mjsunit/stress-array-push.js +0 -34
- data/ext/v8/upstream/2.0.6/test/mjsunit/strict-equals.js +0 -90
- data/ext/v8/upstream/2.0.6/test/mjsunit/string-add.js +0 -195
- data/ext/v8/upstream/2.0.6/test/mjsunit/string-case.js +0 -28
- data/ext/v8/upstream/2.0.6/test/mjsunit/string-charat.js +0 -53
- data/ext/v8/upstream/2.0.6/test/mjsunit/string-charcodeat.js +0 -192
- data/ext/v8/upstream/2.0.6/test/mjsunit/string-compare-alignment.js +0 -47
- data/ext/v8/upstream/2.0.6/test/mjsunit/string-flatten.js +0 -37
- data/ext/v8/upstream/2.0.6/test/mjsunit/string-index.js +0 -154
- data/ext/v8/upstream/2.0.6/test/mjsunit/string-indexof-1.js +0 -99
- data/ext/v8/upstream/2.0.6/test/mjsunit/string-indexof-2.js +0 -68
- data/ext/v8/upstream/2.0.6/test/mjsunit/string-lastindexof.js +0 -88
- data/ext/v8/upstream/2.0.6/test/mjsunit/string-localecompare.js +0 -40
- data/ext/v8/upstream/2.0.6/test/mjsunit/string-match.js +0 -149
- data/ext/v8/upstream/2.0.6/test/mjsunit/string-replace-gc.js +0 -57
- data/ext/v8/upstream/2.0.6/test/mjsunit/string-replace.js +0 -182
- data/ext/v8/upstream/2.0.6/test/mjsunit/string-search.js +0 -30
- data/ext/v8/upstream/2.0.6/test/mjsunit/string-split.js +0 -126
- data/ext/v8/upstream/2.0.6/test/mjsunit/substr.js +0 -65
- data/ext/v8/upstream/2.0.6/test/mjsunit/switch.js +0 -289
- data/ext/v8/upstream/2.0.6/test/mjsunit/testcfg.py +0 -137
- data/ext/v8/upstream/2.0.6/test/mjsunit/third_party/array-isarray.js +0 -48
- data/ext/v8/upstream/2.0.6/test/mjsunit/third_party/array-splice-webkit.js +0 -62
- data/ext/v8/upstream/2.0.6/test/mjsunit/third_party/object-keys.js +0 -68
- data/ext/v8/upstream/2.0.6/test/mjsunit/third_party/regexp-pcre.js +0 -6603
- data/ext/v8/upstream/2.0.6/test/mjsunit/third_party/string-trim.js +0 -107
- data/ext/v8/upstream/2.0.6/test/mjsunit/this-in-callbacks.js +0 -47
- data/ext/v8/upstream/2.0.6/test/mjsunit/this.js +0 -46
- data/ext/v8/upstream/2.0.6/test/mjsunit/throw-and-catch-function.js +0 -50
- data/ext/v8/upstream/2.0.6/test/mjsunit/throw-exception-for-null-access.js +0 -37
- data/ext/v8/upstream/2.0.6/test/mjsunit/to-precision.js +0 -82
- data/ext/v8/upstream/2.0.6/test/mjsunit/to_number_order.js +0 -129
- data/ext/v8/upstream/2.0.6/test/mjsunit/tobool.js +0 -36
- data/ext/v8/upstream/2.0.6/test/mjsunit/toint32.js +0 -129
- data/ext/v8/upstream/2.0.6/test/mjsunit/tools/codemap.js +0 -180
- data/ext/v8/upstream/2.0.6/test/mjsunit/tools/consarray.js +0 -60
- data/ext/v8/upstream/2.0.6/test/mjsunit/tools/csvparser.js +0 -79
- data/ext/v8/upstream/2.0.6/test/mjsunit/tools/logreader.js +0 -98
- data/ext/v8/upstream/2.0.6/test/mjsunit/tools/profile.js +0 -348
- data/ext/v8/upstream/2.0.6/test/mjsunit/tools/profile_view.js +0 -95
- data/ext/v8/upstream/2.0.6/test/mjsunit/tools/splaytree.js +0 -166
- data/ext/v8/upstream/2.0.6/test/mjsunit/tools/tickprocessor-test.default +0 -55
- data/ext/v8/upstream/2.0.6/test/mjsunit/tools/tickprocessor-test.gc-state +0 -21
- data/ext/v8/upstream/2.0.6/test/mjsunit/tools/tickprocessor-test.ignore-unknown +0 -51
- data/ext/v8/upstream/2.0.6/test/mjsunit/tools/tickprocessor-test.separate-ic +0 -61
- data/ext/v8/upstream/2.0.6/test/mjsunit/tools/tickprocessor.js +0 -409
- data/ext/v8/upstream/2.0.6/test/mjsunit/top-level-assignments.js +0 -107
- data/ext/v8/upstream/2.0.6/test/mjsunit/touint32.js +0 -72
- data/ext/v8/upstream/2.0.6/test/mjsunit/transcendentals.js +0 -49
- data/ext/v8/upstream/2.0.6/test/mjsunit/try-catch-extension-object.js +0 -58
- data/ext/v8/upstream/2.0.6/test/mjsunit/try-catch-scopes.js +0 -42
- data/ext/v8/upstream/2.0.6/test/mjsunit/try-finally-nested.js +0 -46
- data/ext/v8/upstream/2.0.6/test/mjsunit/try.js +0 -394
- data/ext/v8/upstream/2.0.6/test/mjsunit/typeof.js +0 -40
- data/ext/v8/upstream/2.0.6/test/mjsunit/undeletable-functions.js +0 -181
- data/ext/v8/upstream/2.0.6/test/mjsunit/unicode-case-overoptimization.js +0 -35
- data/ext/v8/upstream/2.0.6/test/mjsunit/unicode-string-to-number.js +0 -46
- data/ext/v8/upstream/2.0.6/test/mjsunit/unicode-test.js +0 -9169
- data/ext/v8/upstream/2.0.6/test/mjsunit/unusual-constructor.js +0 -38
- data/ext/v8/upstream/2.0.6/test/mjsunit/uri.js +0 -78
- data/ext/v8/upstream/2.0.6/test/mjsunit/value-callic-prototype-change.js +0 -94
- data/ext/v8/upstream/2.0.6/test/mjsunit/var.js +0 -37
- data/ext/v8/upstream/2.0.6/test/mjsunit/with-function-expression.js +0 -36
- data/ext/v8/upstream/2.0.6/test/mjsunit/with-leave.js +0 -61
- data/ext/v8/upstream/2.0.6/test/mjsunit/with-parameter-access.js +0 -47
- data/ext/v8/upstream/2.0.6/test/mjsunit/with-prototype.js +0 -44
- data/ext/v8/upstream/2.0.6/test/mjsunit/with-value.js +0 -38
- data/ext/v8/upstream/2.0.6/test/mozilla/mozilla-shell-emulation.js +0 -37
- data/ext/v8/upstream/2.0.6/test/mozilla/mozilla.status +0 -815
- data/ext/v8/upstream/2.0.6/test/mozilla/testcfg.py +0 -138
- data/ext/v8/upstream/2.0.6/test/sputnik/README +0 -6
- data/ext/v8/upstream/2.0.6/test/sputnik/sputnik.status +0 -318
- data/ext/v8/upstream/2.0.6/test/sputnik/testcfg.py +0 -112
- data/ext/v8/upstream/2.0.6/tools/js2c.pyc +0 -0
- data/ext/v8/upstream/2.0.6/tools/jsmin.pyc +0 -0
- data/ext/v8/upstream/2.0.6/tools/utils.pyc +0 -0
- data/spec/redjs/README.txt +0 -8
Binary file
|
@@ -1,63 +0,0 @@
|
|
1
|
-
V8 Benchmark Suite
|
2
|
-
==================
|
3
|
-
|
4
|
-
This is the V8 benchmark suite: A collection of pure JavaScript
|
5
|
-
benchmarks that we have used to tune V8. The licenses for the
|
6
|
-
individual benchmarks are included in the JavaScript files.
|
7
|
-
|
8
|
-
In addition to the benchmarks, the suite consists of the benchmark
|
9
|
-
framework (base.js), which must be loaded before any of the individual
|
10
|
-
benchmark files, and two benchmark runners: An HTML version (run.html)
|
11
|
-
and a standalone JavaScript version (run.js).
|
12
|
-
|
13
|
-
|
14
|
-
Changes From Version 1 To Version 2
|
15
|
-
===================================
|
16
|
-
|
17
|
-
For version 2 the crypto benchmark was fixed. Previously, the
|
18
|
-
decryption stage was given plaintext as input, which resulted in an
|
19
|
-
error. Now, the decryption stage is given the output of the
|
20
|
-
encryption stage as input. The result is checked against the original
|
21
|
-
plaintext. For this to give the correct results the crypto objects
|
22
|
-
are reset for each iteration of the benchmark. In addition, the size
|
23
|
-
of the plain text has been increased a little and the use of
|
24
|
-
Math.random() and new Date() to build an RNG pool has been removed.
|
25
|
-
|
26
|
-
Other benchmarks were fixed to do elementary verification of the
|
27
|
-
results of their calculations. This is to avoid accidentally
|
28
|
-
obtaining scores that are the result of an incorrect JavaScript engine
|
29
|
-
optimization.
|
30
|
-
|
31
|
-
|
32
|
-
Changes From Version 2 To Version 3
|
33
|
-
===================================
|
34
|
-
|
35
|
-
Version 3 adds a new benchmark, RegExp. The RegExp benchmark is
|
36
|
-
generated by loading 50 of the most popular pages on the web and
|
37
|
-
logging all regexp operations performed. Each operation is given a
|
38
|
-
weight that is calculated from an estimate of the popularity of the
|
39
|
-
pages where it occurs and the number of times it is executed while
|
40
|
-
loading each page. Finally the literal letters in the data are
|
41
|
-
encoded using ROT13 in a way that does not affect how the regexps
|
42
|
-
match their input.
|
43
|
-
|
44
|
-
|
45
|
-
Changes from Version 3 to Version 4
|
46
|
-
===================================
|
47
|
-
|
48
|
-
The Splay benchmark is a newcomer in version 4. It manipulates a
|
49
|
-
splay tree by adding and removing data nodes, thus exercising the
|
50
|
-
memory management subsystem of the JavaScript engine.
|
51
|
-
|
52
|
-
Furthermore, all the unused parts of the Prototype library were
|
53
|
-
removed from the RayTrace benchmark. This does not affect the running
|
54
|
-
of the benchmark.
|
55
|
-
|
56
|
-
|
57
|
-
Changes from Version 4 to Version 5
|
58
|
-
===================================
|
59
|
-
|
60
|
-
Removed duplicate line in random seed code, and changed the name of
|
61
|
-
the Object.prototype.inherits function in the DeltaBlue benchmark to
|
62
|
-
inheritsFrom to avoid name clashes when running in Chromium with
|
63
|
-
extensions enabled.
|
@@ -1,264 +0,0 @@
|
|
1
|
-
// Copyright 2008 the V8 project authors. All rights reserved.
|
2
|
-
// Redistribution and use in source and binary forms, with or without
|
3
|
-
// modification, are permitted provided that the following conditions are
|
4
|
-
// met:
|
5
|
-
//
|
6
|
-
// * Redistributions of source code must retain the above copyright
|
7
|
-
// notice, this list of conditions and the following disclaimer.
|
8
|
-
// * Redistributions in binary form must reproduce the above
|
9
|
-
// copyright notice, this list of conditions and the following
|
10
|
-
// disclaimer in the documentation and/or other materials provided
|
11
|
-
// with the distribution.
|
12
|
-
// * Neither the name of Google Inc. nor the names of its
|
13
|
-
// contributors may be used to endorse or promote products derived
|
14
|
-
// from this software without specific prior written permission.
|
15
|
-
//
|
16
|
-
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
17
|
-
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
18
|
-
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
19
|
-
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
20
|
-
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
21
|
-
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
22
|
-
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
23
|
-
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
24
|
-
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
25
|
-
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
26
|
-
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
27
|
-
|
28
|
-
|
29
|
-
// Simple framework for running the benchmark suites and
|
30
|
-
// computing a score based on the timing measurements.
|
31
|
-
|
32
|
-
|
33
|
-
// A benchmark has a name (string) and a function that will be run to
|
34
|
-
// do the performance measurement. The optional setup and tearDown
|
35
|
-
// arguments are functions that will be invoked before and after
|
36
|
-
// running the benchmark, but the running time of these functions will
|
37
|
-
// not be accounted for in the benchmark score.
|
38
|
-
function Benchmark(name, run, setup, tearDown) {
|
39
|
-
this.name = name;
|
40
|
-
this.run = run;
|
41
|
-
this.Setup = setup ? setup : function() { };
|
42
|
-
this.TearDown = tearDown ? tearDown : function() { };
|
43
|
-
}
|
44
|
-
|
45
|
-
|
46
|
-
// Benchmark results hold the benchmark and the measured time used to
|
47
|
-
// run the benchmark. The benchmark score is computed later once a
|
48
|
-
// full benchmark suite has run to completion.
|
49
|
-
function BenchmarkResult(benchmark, time) {
|
50
|
-
this.benchmark = benchmark;
|
51
|
-
this.time = time;
|
52
|
-
}
|
53
|
-
|
54
|
-
|
55
|
-
// Automatically convert results to numbers. Used by the geometric
|
56
|
-
// mean computation.
|
57
|
-
BenchmarkResult.prototype.valueOf = function() {
|
58
|
-
return this.time;
|
59
|
-
}
|
60
|
-
|
61
|
-
|
62
|
-
// Suites of benchmarks consist of a name and the set of benchmarks in
|
63
|
-
// addition to the reference timing that the final score will be based
|
64
|
-
// on. This way, all scores are relative to a reference run and higher
|
65
|
-
// scores implies better performance.
|
66
|
-
function BenchmarkSuite(name, reference, benchmarks) {
|
67
|
-
this.name = name;
|
68
|
-
this.reference = reference;
|
69
|
-
this.benchmarks = benchmarks;
|
70
|
-
BenchmarkSuite.suites.push(this);
|
71
|
-
}
|
72
|
-
|
73
|
-
|
74
|
-
// Keep track of all declared benchmark suites.
|
75
|
-
BenchmarkSuite.suites = [];
|
76
|
-
|
77
|
-
|
78
|
-
// Scores are not comparable across versions. Bump the version if
|
79
|
-
// you're making changes that will affect that scores, e.g. if you add
|
80
|
-
// a new benchmark or change an existing one.
|
81
|
-
BenchmarkSuite.version = '5';
|
82
|
-
|
83
|
-
|
84
|
-
// To make the benchmark results predictable, we replace Math.random
|
85
|
-
// with a 100% deterministic alternative.
|
86
|
-
Math.random = (function() {
|
87
|
-
var seed = 49734321;
|
88
|
-
return function() {
|
89
|
-
// Robert Jenkins' 32 bit integer hash function.
|
90
|
-
seed = ((seed + 0x7ed55d16) + (seed << 12)) & 0xffffffff;
|
91
|
-
seed = ((seed ^ 0xc761c23c) ^ (seed >>> 19)) & 0xffffffff;
|
92
|
-
seed = ((seed + 0x165667b1) + (seed << 5)) & 0xffffffff;
|
93
|
-
seed = ((seed + 0xd3a2646c) ^ (seed << 9)) & 0xffffffff;
|
94
|
-
seed = ((seed + 0xfd7046c5) + (seed << 3)) & 0xffffffff;
|
95
|
-
seed = ((seed ^ 0xb55a4f09) ^ (seed >>> 16)) & 0xffffffff;
|
96
|
-
return (seed & 0xfffffff) / 0x10000000;
|
97
|
-
};
|
98
|
-
})();
|
99
|
-
|
100
|
-
|
101
|
-
// Runs all registered benchmark suites and optionally yields between
|
102
|
-
// each individual benchmark to avoid running for too long in the
|
103
|
-
// context of browsers. Once done, the final score is reported to the
|
104
|
-
// runner.
|
105
|
-
BenchmarkSuite.RunSuites = function(runner) {
|
106
|
-
var continuation = null;
|
107
|
-
var suites = BenchmarkSuite.suites;
|
108
|
-
var length = suites.length;
|
109
|
-
BenchmarkSuite.scores = [];
|
110
|
-
var index = 0;
|
111
|
-
function RunStep() {
|
112
|
-
while (continuation || index < length) {
|
113
|
-
if (continuation) {
|
114
|
-
continuation = continuation();
|
115
|
-
} else {
|
116
|
-
var suite = suites[index++];
|
117
|
-
if (runner.NotifyStart) runner.NotifyStart(suite.name);
|
118
|
-
continuation = suite.RunStep(runner);
|
119
|
-
}
|
120
|
-
if (continuation && typeof window != 'undefined' && window.setTimeout) {
|
121
|
-
window.setTimeout(RunStep, 25);
|
122
|
-
return;
|
123
|
-
}
|
124
|
-
}
|
125
|
-
if (runner.NotifyScore) {
|
126
|
-
var score = BenchmarkSuite.GeometricMean(BenchmarkSuite.scores);
|
127
|
-
var formatted = BenchmarkSuite.FormatScore(100 * score);
|
128
|
-
runner.NotifyScore(formatted);
|
129
|
-
}
|
130
|
-
}
|
131
|
-
RunStep();
|
132
|
-
}
|
133
|
-
|
134
|
-
|
135
|
-
// Counts the total number of registered benchmarks. Useful for
|
136
|
-
// showing progress as a percentage.
|
137
|
-
BenchmarkSuite.CountBenchmarks = function() {
|
138
|
-
var result = 0;
|
139
|
-
var suites = BenchmarkSuite.suites;
|
140
|
-
for (var i = 0; i < suites.length; i++) {
|
141
|
-
result += suites[i].benchmarks.length;
|
142
|
-
}
|
143
|
-
return result;
|
144
|
-
}
|
145
|
-
|
146
|
-
|
147
|
-
// Computes the geometric mean of a set of numbers.
|
148
|
-
BenchmarkSuite.GeometricMean = function(numbers) {
|
149
|
-
var log = 0;
|
150
|
-
for (var i = 0; i < numbers.length; i++) {
|
151
|
-
log += Math.log(numbers[i]);
|
152
|
-
}
|
153
|
-
return Math.pow(Math.E, log / numbers.length);
|
154
|
-
}
|
155
|
-
|
156
|
-
|
157
|
-
// Converts a score value to a string with at least three significant
|
158
|
-
// digits.
|
159
|
-
BenchmarkSuite.FormatScore = function(value) {
|
160
|
-
if (value > 100) {
|
161
|
-
return value.toFixed(0);
|
162
|
-
} else {
|
163
|
-
return value.toPrecision(3);
|
164
|
-
}
|
165
|
-
}
|
166
|
-
|
167
|
-
// Notifies the runner that we're done running a single benchmark in
|
168
|
-
// the benchmark suite. This can be useful to report progress.
|
169
|
-
BenchmarkSuite.prototype.NotifyStep = function(result) {
|
170
|
-
this.results.push(result);
|
171
|
-
if (this.runner.NotifyStep) this.runner.NotifyStep(result.benchmark.name);
|
172
|
-
}
|
173
|
-
|
174
|
-
|
175
|
-
// Notifies the runner that we're done with running a suite and that
|
176
|
-
// we have a result which can be reported to the user if needed.
|
177
|
-
BenchmarkSuite.prototype.NotifyResult = function() {
|
178
|
-
var mean = BenchmarkSuite.GeometricMean(this.results);
|
179
|
-
var score = this.reference / mean;
|
180
|
-
BenchmarkSuite.scores.push(score);
|
181
|
-
if (this.runner.NotifyResult) {
|
182
|
-
var formatted = BenchmarkSuite.FormatScore(100 * score);
|
183
|
-
this.runner.NotifyResult(this.name, formatted);
|
184
|
-
}
|
185
|
-
}
|
186
|
-
|
187
|
-
|
188
|
-
// Notifies the runner that running a benchmark resulted in an error.
|
189
|
-
BenchmarkSuite.prototype.NotifyError = function(error) {
|
190
|
-
if (this.runner.NotifyError) {
|
191
|
-
this.runner.NotifyError(this.name, error);
|
192
|
-
}
|
193
|
-
if (this.runner.NotifyStep) {
|
194
|
-
this.runner.NotifyStep(this.name);
|
195
|
-
}
|
196
|
-
}
|
197
|
-
|
198
|
-
|
199
|
-
// Runs a single benchmark for at least a second and computes the
|
200
|
-
// average time it takes to run a single iteration.
|
201
|
-
BenchmarkSuite.prototype.RunSingleBenchmark = function(benchmark) {
|
202
|
-
var elapsed = 0;
|
203
|
-
var start = new Date();
|
204
|
-
for (var n = 0; elapsed < 1000; n++) {
|
205
|
-
benchmark.run();
|
206
|
-
elapsed = new Date() - start;
|
207
|
-
}
|
208
|
-
var usec = (elapsed * 1000) / n;
|
209
|
-
this.NotifyStep(new BenchmarkResult(benchmark, usec));
|
210
|
-
}
|
211
|
-
|
212
|
-
|
213
|
-
// This function starts running a suite, but stops between each
|
214
|
-
// individual benchmark in the suite and returns a continuation
|
215
|
-
// function which can be invoked to run the next benchmark. Once the
|
216
|
-
// last benchmark has been executed, null is returned.
|
217
|
-
BenchmarkSuite.prototype.RunStep = function(runner) {
|
218
|
-
this.results = [];
|
219
|
-
this.runner = runner;
|
220
|
-
var length = this.benchmarks.length;
|
221
|
-
var index = 0;
|
222
|
-
var suite = this;
|
223
|
-
|
224
|
-
// Run the setup, the actual benchmark, and the tear down in three
|
225
|
-
// separate steps to allow the framework to yield between any of the
|
226
|
-
// steps.
|
227
|
-
|
228
|
-
function RunNextSetup() {
|
229
|
-
if (index < length) {
|
230
|
-
try {
|
231
|
-
suite.benchmarks[index].Setup();
|
232
|
-
} catch (e) {
|
233
|
-
suite.NotifyError(e);
|
234
|
-
return null;
|
235
|
-
}
|
236
|
-
return RunNextBenchmark;
|
237
|
-
}
|
238
|
-
suite.NotifyResult();
|
239
|
-
return null;
|
240
|
-
}
|
241
|
-
|
242
|
-
function RunNextBenchmark() {
|
243
|
-
try {
|
244
|
-
suite.RunSingleBenchmark(suite.benchmarks[index]);
|
245
|
-
} catch (e) {
|
246
|
-
suite.NotifyError(e);
|
247
|
-
return null;
|
248
|
-
}
|
249
|
-
return RunNextTearDown;
|
250
|
-
}
|
251
|
-
|
252
|
-
function RunNextTearDown() {
|
253
|
-
try {
|
254
|
-
suite.benchmarks[index++].TearDown();
|
255
|
-
} catch (e) {
|
256
|
-
suite.NotifyError(e);
|
257
|
-
return null;
|
258
|
-
}
|
259
|
-
return RunNextSetup;
|
260
|
-
}
|
261
|
-
|
262
|
-
// Start out running the setup.
|
263
|
-
return RunNextSetup();
|
264
|
-
}
|
@@ -1,1698 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
* Copyright (c) 2003-2005 Tom Wu
|
3
|
-
* All Rights Reserved.
|
4
|
-
*
|
5
|
-
* Permission is hereby granted, free of charge, to any person obtaining
|
6
|
-
* a copy of this software and associated documentation files (the
|
7
|
-
* "Software"), to deal in the Software without restriction, including
|
8
|
-
* without limitation the rights to use, copy, modify, merge, publish,
|
9
|
-
* distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
-
* permit persons to whom the Software is furnished to do so, subject to
|
11
|
-
* the following conditions:
|
12
|
-
*
|
13
|
-
* The above copyright notice and this permission notice shall be
|
14
|
-
* included in all copies or substantial portions of the Software.
|
15
|
-
*
|
16
|
-
* THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
|
17
|
-
* EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
|
18
|
-
* WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
|
19
|
-
*
|
20
|
-
* IN NO EVENT SHALL TOM WU BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
|
21
|
-
* INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER
|
22
|
-
* RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF
|
23
|
-
* THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT
|
24
|
-
* OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
25
|
-
*
|
26
|
-
* In addition, the following condition applies:
|
27
|
-
*
|
28
|
-
* All redistributions must retain an intact copy of this copyright notice
|
29
|
-
* and disclaimer.
|
30
|
-
*/
|
31
|
-
|
32
|
-
|
33
|
-
// The code has been adapted for use as a benchmark by Google.
|
34
|
-
var Crypto = new BenchmarkSuite('Crypto', 203037, [
|
35
|
-
new Benchmark("Encrypt", encrypt),
|
36
|
-
new Benchmark("Decrypt", decrypt)
|
37
|
-
]);
|
38
|
-
|
39
|
-
|
40
|
-
// Basic JavaScript BN library - subset useful for RSA encryption.
|
41
|
-
|
42
|
-
// Bits per digit
|
43
|
-
var dbits;
|
44
|
-
var BI_DB;
|
45
|
-
var BI_DM;
|
46
|
-
var BI_DV;
|
47
|
-
|
48
|
-
var BI_FP;
|
49
|
-
var BI_FV;
|
50
|
-
var BI_F1;
|
51
|
-
var BI_F2;
|
52
|
-
|
53
|
-
// JavaScript engine analysis
|
54
|
-
var canary = 0xdeadbeefcafe;
|
55
|
-
var j_lm = ((canary&0xffffff)==0xefcafe);
|
56
|
-
|
57
|
-
// (public) Constructor
|
58
|
-
function BigInteger(a,b,c) {
|
59
|
-
this.array = new Array();
|
60
|
-
if(a != null)
|
61
|
-
if("number" == typeof a) this.fromNumber(a,b,c);
|
62
|
-
else if(b == null && "string" != typeof a) this.fromString(a,256);
|
63
|
-
else this.fromString(a,b);
|
64
|
-
}
|
65
|
-
|
66
|
-
// return new, unset BigInteger
|
67
|
-
function nbi() { return new BigInteger(null); }
|
68
|
-
|
69
|
-
// am: Compute w_j += (x*this_i), propagate carries,
|
70
|
-
// c is initial carry, returns final carry.
|
71
|
-
// c < 3*dvalue, x < 2*dvalue, this_i < dvalue
|
72
|
-
// We need to select the fastest one that works in this environment.
|
73
|
-
|
74
|
-
// am1: use a single mult and divide to get the high bits,
|
75
|
-
// max digit bits should be 26 because
|
76
|
-
// max internal value = 2*dvalue^2-2*dvalue (< 2^53)
|
77
|
-
function am1(i,x,w,j,c,n) {
|
78
|
-
var this_array = this.array;
|
79
|
-
var w_array = w.array;
|
80
|
-
while(--n >= 0) {
|
81
|
-
var v = x*this_array[i++]+w_array[j]+c;
|
82
|
-
c = Math.floor(v/0x4000000);
|
83
|
-
w_array[j++] = v&0x3ffffff;
|
84
|
-
}
|
85
|
-
return c;
|
86
|
-
}
|
87
|
-
|
88
|
-
// am2 avoids a big mult-and-extract completely.
|
89
|
-
// Max digit bits should be <= 30 because we do bitwise ops
|
90
|
-
// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
|
91
|
-
function am2(i,x,w,j,c,n) {
|
92
|
-
var this_array = this.array;
|
93
|
-
var w_array = w.array;
|
94
|
-
var xl = x&0x7fff, xh = x>>15;
|
95
|
-
while(--n >= 0) {
|
96
|
-
var l = this_array[i]&0x7fff;
|
97
|
-
var h = this_array[i++]>>15;
|
98
|
-
var m = xh*l+h*xl;
|
99
|
-
l = xl*l+((m&0x7fff)<<15)+w_array[j]+(c&0x3fffffff);
|
100
|
-
c = (l>>>30)+(m>>>15)+xh*h+(c>>>30);
|
101
|
-
w_array[j++] = l&0x3fffffff;
|
102
|
-
}
|
103
|
-
return c;
|
104
|
-
}
|
105
|
-
|
106
|
-
// Alternately, set max digit bits to 28 since some
|
107
|
-
// browsers slow down when dealing with 32-bit numbers.
|
108
|
-
function am3(i,x,w,j,c,n) {
|
109
|
-
var this_array = this.array;
|
110
|
-
var w_array = w.array;
|
111
|
-
|
112
|
-
var xl = x&0x3fff, xh = x>>14;
|
113
|
-
while(--n >= 0) {
|
114
|
-
var l = this_array[i]&0x3fff;
|
115
|
-
var h = this_array[i++]>>14;
|
116
|
-
var m = xh*l+h*xl;
|
117
|
-
l = xl*l+((m&0x3fff)<<14)+w_array[j]+c;
|
118
|
-
c = (l>>28)+(m>>14)+xh*h;
|
119
|
-
w_array[j++] = l&0xfffffff;
|
120
|
-
}
|
121
|
-
return c;
|
122
|
-
}
|
123
|
-
|
124
|
-
// This is tailored to VMs with 2-bit tagging. It makes sure
|
125
|
-
// that all the computations stay within the 29 bits available.
|
126
|
-
function am4(i,x,w,j,c,n) {
|
127
|
-
var this_array = this.array;
|
128
|
-
var w_array = w.array;
|
129
|
-
|
130
|
-
var xl = x&0x1fff, xh = x>>13;
|
131
|
-
while(--n >= 0) {
|
132
|
-
var l = this_array[i]&0x1fff;
|
133
|
-
var h = this_array[i++]>>13;
|
134
|
-
var m = xh*l+h*xl;
|
135
|
-
l = xl*l+((m&0x1fff)<<13)+w_array[j]+c;
|
136
|
-
c = (l>>26)+(m>>13)+xh*h;
|
137
|
-
w_array[j++] = l&0x3ffffff;
|
138
|
-
}
|
139
|
-
return c;
|
140
|
-
}
|
141
|
-
|
142
|
-
// am3/28 is best for SM, Rhino, but am4/26 is best for v8.
|
143
|
-
// Kestrel (Opera 9.5) gets its best result with am4/26.
|
144
|
-
// IE7 does 9% better with am3/28 than with am4/26.
|
145
|
-
// Firefox (SM) gets 10% faster with am3/28 than with am4/26.
|
146
|
-
|
147
|
-
setupEngine = function(fn, bits) {
|
148
|
-
BigInteger.prototype.am = fn;
|
149
|
-
dbits = bits;
|
150
|
-
|
151
|
-
BI_DB = dbits;
|
152
|
-
BI_DM = ((1<<dbits)-1);
|
153
|
-
BI_DV = (1<<dbits);
|
154
|
-
|
155
|
-
BI_FP = 52;
|
156
|
-
BI_FV = Math.pow(2,BI_FP);
|
157
|
-
BI_F1 = BI_FP-dbits;
|
158
|
-
BI_F2 = 2*dbits-BI_FP;
|
159
|
-
}
|
160
|
-
|
161
|
-
|
162
|
-
// Digit conversions
|
163
|
-
var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz";
|
164
|
-
var BI_RC = new Array();
|
165
|
-
var rr,vv;
|
166
|
-
rr = "0".charCodeAt(0);
|
167
|
-
for(vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv;
|
168
|
-
rr = "a".charCodeAt(0);
|
169
|
-
for(vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv;
|
170
|
-
rr = "A".charCodeAt(0);
|
171
|
-
for(vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv;
|
172
|
-
|
173
|
-
function int2char(n) { return BI_RM.charAt(n); }
|
174
|
-
function intAt(s,i) {
|
175
|
-
var c = BI_RC[s.charCodeAt(i)];
|
176
|
-
return (c==null)?-1:c;
|
177
|
-
}
|
178
|
-
|
179
|
-
// (protected) copy this to r
|
180
|
-
function bnpCopyTo(r) {
|
181
|
-
var this_array = this.array;
|
182
|
-
var r_array = r.array;
|
183
|
-
|
184
|
-
for(var i = this.t-1; i >= 0; --i) r_array[i] = this_array[i];
|
185
|
-
r.t = this.t;
|
186
|
-
r.s = this.s;
|
187
|
-
}
|
188
|
-
|
189
|
-
// (protected) set from integer value x, -DV <= x < DV
|
190
|
-
function bnpFromInt(x) {
|
191
|
-
var this_array = this.array;
|
192
|
-
this.t = 1;
|
193
|
-
this.s = (x<0)?-1:0;
|
194
|
-
if(x > 0) this_array[0] = x;
|
195
|
-
else if(x < -1) this_array[0] = x+DV;
|
196
|
-
else this.t = 0;
|
197
|
-
}
|
198
|
-
|
199
|
-
// return bigint initialized to value
|
200
|
-
function nbv(i) { var r = nbi(); r.fromInt(i); return r; }
|
201
|
-
|
202
|
-
// (protected) set from string and radix
|
203
|
-
function bnpFromString(s,b) {
|
204
|
-
var this_array = this.array;
|
205
|
-
var k;
|
206
|
-
if(b == 16) k = 4;
|
207
|
-
else if(b == 8) k = 3;
|
208
|
-
else if(b == 256) k = 8; // byte array
|
209
|
-
else if(b == 2) k = 1;
|
210
|
-
else if(b == 32) k = 5;
|
211
|
-
else if(b == 4) k = 2;
|
212
|
-
else { this.fromRadix(s,b); return; }
|
213
|
-
this.t = 0;
|
214
|
-
this.s = 0;
|
215
|
-
var i = s.length, mi = false, sh = 0;
|
216
|
-
while(--i >= 0) {
|
217
|
-
var x = (k==8)?s[i]&0xff:intAt(s,i);
|
218
|
-
if(x < 0) {
|
219
|
-
if(s.charAt(i) == "-") mi = true;
|
220
|
-
continue;
|
221
|
-
}
|
222
|
-
mi = false;
|
223
|
-
if(sh == 0)
|
224
|
-
this_array[this.t++] = x;
|
225
|
-
else if(sh+k > BI_DB) {
|
226
|
-
this_array[this.t-1] |= (x&((1<<(BI_DB-sh))-1))<<sh;
|
227
|
-
this_array[this.t++] = (x>>(BI_DB-sh));
|
228
|
-
}
|
229
|
-
else
|
230
|
-
this_array[this.t-1] |= x<<sh;
|
231
|
-
sh += k;
|
232
|
-
if(sh >= BI_DB) sh -= BI_DB;
|
233
|
-
}
|
234
|
-
if(k == 8 && (s[0]&0x80) != 0) {
|
235
|
-
this.s = -1;
|
236
|
-
if(sh > 0) this_array[this.t-1] |= ((1<<(BI_DB-sh))-1)<<sh;
|
237
|
-
}
|
238
|
-
this.clamp();
|
239
|
-
if(mi) BigInteger.ZERO.subTo(this,this);
|
240
|
-
}
|
241
|
-
|
242
|
-
// (protected) clamp off excess high words
|
243
|
-
function bnpClamp() {
|
244
|
-
var this_array = this.array;
|
245
|
-
var c = this.s&BI_DM;
|
246
|
-
while(this.t > 0 && this_array[this.t-1] == c) --this.t;
|
247
|
-
}
|
248
|
-
|
249
|
-
// (public) return string representation in given radix
|
250
|
-
function bnToString(b) {
|
251
|
-
var this_array = this.array;
|
252
|
-
if(this.s < 0) return "-"+this.negate().toString(b);
|
253
|
-
var k;
|
254
|
-
if(b == 16) k = 4;
|
255
|
-
else if(b == 8) k = 3;
|
256
|
-
else if(b == 2) k = 1;
|
257
|
-
else if(b == 32) k = 5;
|
258
|
-
else if(b == 4) k = 2;
|
259
|
-
else return this.toRadix(b);
|
260
|
-
var km = (1<<k)-1, d, m = false, r = "", i = this.t;
|
261
|
-
var p = BI_DB-(i*BI_DB)%k;
|
262
|
-
if(i-- > 0) {
|
263
|
-
if(p < BI_DB && (d = this_array[i]>>p) > 0) { m = true; r = int2char(d); }
|
264
|
-
while(i >= 0) {
|
265
|
-
if(p < k) {
|
266
|
-
d = (this_array[i]&((1<<p)-1))<<(k-p);
|
267
|
-
d |= this_array[--i]>>(p+=BI_DB-k);
|
268
|
-
}
|
269
|
-
else {
|
270
|
-
d = (this_array[i]>>(p-=k))&km;
|
271
|
-
if(p <= 0) { p += BI_DB; --i; }
|
272
|
-
}
|
273
|
-
if(d > 0) m = true;
|
274
|
-
if(m) r += int2char(d);
|
275
|
-
}
|
276
|
-
}
|
277
|
-
return m?r:"0";
|
278
|
-
}
|
279
|
-
|
280
|
-
// (public) -this
|
281
|
-
function bnNegate() { var r = nbi(); BigInteger.ZERO.subTo(this,r); return r; }
|
282
|
-
|
283
|
-
// (public) |this|
|
284
|
-
function bnAbs() { return (this.s<0)?this.negate():this; }
|
285
|
-
|
286
|
-
// (public) return + if this > a, - if this < a, 0 if equal
|
287
|
-
function bnCompareTo(a) {
|
288
|
-
var this_array = this.array;
|
289
|
-
var a_array = a.array;
|
290
|
-
|
291
|
-
var r = this.s-a.s;
|
292
|
-
if(r != 0) return r;
|
293
|
-
var i = this.t;
|
294
|
-
r = i-a.t;
|
295
|
-
if(r != 0) return r;
|
296
|
-
while(--i >= 0) if((r=this_array[i]-a_array[i]) != 0) return r;
|
297
|
-
return 0;
|
298
|
-
}
|
299
|
-
|
300
|
-
// returns bit length of the integer x
|
301
|
-
function nbits(x) {
|
302
|
-
var r = 1, t;
|
303
|
-
if((t=x>>>16) != 0) { x = t; r += 16; }
|
304
|
-
if((t=x>>8) != 0) { x = t; r += 8; }
|
305
|
-
if((t=x>>4) != 0) { x = t; r += 4; }
|
306
|
-
if((t=x>>2) != 0) { x = t; r += 2; }
|
307
|
-
if((t=x>>1) != 0) { x = t; r += 1; }
|
308
|
-
return r;
|
309
|
-
}
|
310
|
-
|
311
|
-
// (public) return the number of bits in "this"
|
312
|
-
function bnBitLength() {
|
313
|
-
var this_array = this.array;
|
314
|
-
if(this.t <= 0) return 0;
|
315
|
-
return BI_DB*(this.t-1)+nbits(this_array[this.t-1]^(this.s&BI_DM));
|
316
|
-
}
|
317
|
-
|
318
|
-
// (protected) r = this << n*DB
|
319
|
-
function bnpDLShiftTo(n,r) {
|
320
|
-
var this_array = this.array;
|
321
|
-
var r_array = r.array;
|
322
|
-
var i;
|
323
|
-
for(i = this.t-1; i >= 0; --i) r_array[i+n] = this_array[i];
|
324
|
-
for(i = n-1; i >= 0; --i) r_array[i] = 0;
|
325
|
-
r.t = this.t+n;
|
326
|
-
r.s = this.s;
|
327
|
-
}
|
328
|
-
|
329
|
-
// (protected) r = this >> n*DB
|
330
|
-
function bnpDRShiftTo(n,r) {
|
331
|
-
var this_array = this.array;
|
332
|
-
var r_array = r.array;
|
333
|
-
for(var i = n; i < this.t; ++i) r_array[i-n] = this_array[i];
|
334
|
-
r.t = Math.max(this.t-n,0);
|
335
|
-
r.s = this.s;
|
336
|
-
}
|
337
|
-
|
338
|
-
// (protected) r = this << n
|
339
|
-
function bnpLShiftTo(n,r) {
|
340
|
-
var this_array = this.array;
|
341
|
-
var r_array = r.array;
|
342
|
-
var bs = n%BI_DB;
|
343
|
-
var cbs = BI_DB-bs;
|
344
|
-
var bm = (1<<cbs)-1;
|
345
|
-
var ds = Math.floor(n/BI_DB), c = (this.s<<bs)&BI_DM, i;
|
346
|
-
for(i = this.t-1; i >= 0; --i) {
|
347
|
-
r_array[i+ds+1] = (this_array[i]>>cbs)|c;
|
348
|
-
c = (this_array[i]&bm)<<bs;
|
349
|
-
}
|
350
|
-
for(i = ds-1; i >= 0; --i) r_array[i] = 0;
|
351
|
-
r_array[ds] = c;
|
352
|
-
r.t = this.t+ds+1;
|
353
|
-
r.s = this.s;
|
354
|
-
r.clamp();
|
355
|
-
}
|
356
|
-
|
357
|
-
// (protected) r = this >> n
|
358
|
-
function bnpRShiftTo(n,r) {
|
359
|
-
var this_array = this.array;
|
360
|
-
var r_array = r.array;
|
361
|
-
r.s = this.s;
|
362
|
-
var ds = Math.floor(n/BI_DB);
|
363
|
-
if(ds >= this.t) { r.t = 0; return; }
|
364
|
-
var bs = n%BI_DB;
|
365
|
-
var cbs = BI_DB-bs;
|
366
|
-
var bm = (1<<bs)-1;
|
367
|
-
r_array[0] = this_array[ds]>>bs;
|
368
|
-
for(var i = ds+1; i < this.t; ++i) {
|
369
|
-
r_array[i-ds-1] |= (this_array[i]&bm)<<cbs;
|
370
|
-
r_array[i-ds] = this_array[i]>>bs;
|
371
|
-
}
|
372
|
-
if(bs > 0) r_array[this.t-ds-1] |= (this.s&bm)<<cbs;
|
373
|
-
r.t = this.t-ds;
|
374
|
-
r.clamp();
|
375
|
-
}
|
376
|
-
|
377
|
-
// (protected) r = this - a
|
378
|
-
function bnpSubTo(a,r) {
|
379
|
-
var this_array = this.array;
|
380
|
-
var r_array = r.array;
|
381
|
-
var a_array = a.array;
|
382
|
-
var i = 0, c = 0, m = Math.min(a.t,this.t);
|
383
|
-
while(i < m) {
|
384
|
-
c += this_array[i]-a_array[i];
|
385
|
-
r_array[i++] = c&BI_DM;
|
386
|
-
c >>= BI_DB;
|
387
|
-
}
|
388
|
-
if(a.t < this.t) {
|
389
|
-
c -= a.s;
|
390
|
-
while(i < this.t) {
|
391
|
-
c += this_array[i];
|
392
|
-
r_array[i++] = c&BI_DM;
|
393
|
-
c >>= BI_DB;
|
394
|
-
}
|
395
|
-
c += this.s;
|
396
|
-
}
|
397
|
-
else {
|
398
|
-
c += this.s;
|
399
|
-
while(i < a.t) {
|
400
|
-
c -= a_array[i];
|
401
|
-
r_array[i++] = c&BI_DM;
|
402
|
-
c >>= BI_DB;
|
403
|
-
}
|
404
|
-
c -= a.s;
|
405
|
-
}
|
406
|
-
r.s = (c<0)?-1:0;
|
407
|
-
if(c < -1) r_array[i++] = BI_DV+c;
|
408
|
-
else if(c > 0) r_array[i++] = c;
|
409
|
-
r.t = i;
|
410
|
-
r.clamp();
|
411
|
-
}
|
412
|
-
|
413
|
-
// (protected) r = this * a, r != this,a (HAC 14.12)
|
414
|
-
// "this" should be the larger one if appropriate.
|
415
|
-
function bnpMultiplyTo(a,r) {
|
416
|
-
var this_array = this.array;
|
417
|
-
var r_array = r.array;
|
418
|
-
var x = this.abs(), y = a.abs();
|
419
|
-
var y_array = y.array;
|
420
|
-
|
421
|
-
var i = x.t;
|
422
|
-
r.t = i+y.t;
|
423
|
-
while(--i >= 0) r_array[i] = 0;
|
424
|
-
for(i = 0; i < y.t; ++i) r_array[i+x.t] = x.am(0,y_array[i],r,i,0,x.t);
|
425
|
-
r.s = 0;
|
426
|
-
r.clamp();
|
427
|
-
if(this.s != a.s) BigInteger.ZERO.subTo(r,r);
|
428
|
-
}
|
429
|
-
|
430
|
-
// (protected) r = this^2, r != this (HAC 14.16)
|
431
|
-
function bnpSquareTo(r) {
|
432
|
-
var x = this.abs();
|
433
|
-
var x_array = x.array;
|
434
|
-
var r_array = r.array;
|
435
|
-
|
436
|
-
var i = r.t = 2*x.t;
|
437
|
-
while(--i >= 0) r_array[i] = 0;
|
438
|
-
for(i = 0; i < x.t-1; ++i) {
|
439
|
-
var c = x.am(i,x_array[i],r,2*i,0,1);
|
440
|
-
if((r_array[i+x.t]+=x.am(i+1,2*x_array[i],r,2*i+1,c,x.t-i-1)) >= BI_DV) {
|
441
|
-
r_array[i+x.t] -= BI_DV;
|
442
|
-
r_array[i+x.t+1] = 1;
|
443
|
-
}
|
444
|
-
}
|
445
|
-
if(r.t > 0) r_array[r.t-1] += x.am(i,x_array[i],r,2*i,0,1);
|
446
|
-
r.s = 0;
|
447
|
-
r.clamp();
|
448
|
-
}
|
449
|
-
|
450
|
-
// (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
|
451
|
-
// r != q, this != m. q or r may be null.
|
452
|
-
function bnpDivRemTo(m,q,r) {
|
453
|
-
var pm = m.abs();
|
454
|
-
if(pm.t <= 0) return;
|
455
|
-
var pt = this.abs();
|
456
|
-
if(pt.t < pm.t) {
|
457
|
-
if(q != null) q.fromInt(0);
|
458
|
-
if(r != null) this.copyTo(r);
|
459
|
-
return;
|
460
|
-
}
|
461
|
-
if(r == null) r = nbi();
|
462
|
-
var y = nbi(), ts = this.s, ms = m.s;
|
463
|
-
var pm_array = pm.array;
|
464
|
-
var nsh = BI_DB-nbits(pm_array[pm.t-1]); // normalize modulus
|
465
|
-
if(nsh > 0) { pm.lShiftTo(nsh,y); pt.lShiftTo(nsh,r); }
|
466
|
-
else { pm.copyTo(y); pt.copyTo(r); }
|
467
|
-
var ys = y.t;
|
468
|
-
|
469
|
-
var y_array = y.array;
|
470
|
-
var y0 = y_array[ys-1];
|
471
|
-
if(y0 == 0) return;
|
472
|
-
var yt = y0*(1<<BI_F1)+((ys>1)?y_array[ys-2]>>BI_F2:0);
|
473
|
-
var d1 = BI_FV/yt, d2 = (1<<BI_F1)/yt, e = 1<<BI_F2;
|
474
|
-
var i = r.t, j = i-ys, t = (q==null)?nbi():q;
|
475
|
-
y.dlShiftTo(j,t);
|
476
|
-
|
477
|
-
var r_array = r.array;
|
478
|
-
if(r.compareTo(t) >= 0) {
|
479
|
-
r_array[r.t++] = 1;
|
480
|
-
r.subTo(t,r);
|
481
|
-
}
|
482
|
-
BigInteger.ONE.dlShiftTo(ys,t);
|
483
|
-
t.subTo(y,y); // "negative" y so we can replace sub with am later
|
484
|
-
while(y.t < ys) y_array[y.t++] = 0;
|
485
|
-
while(--j >= 0) {
|
486
|
-
// Estimate quotient digit
|
487
|
-
var qd = (r_array[--i]==y0)?BI_DM:Math.floor(r_array[i]*d1+(r_array[i-1]+e)*d2);
|
488
|
-
if((r_array[i]+=y.am(0,qd,r,j,0,ys)) < qd) { // Try it out
|
489
|
-
y.dlShiftTo(j,t);
|
490
|
-
r.subTo(t,r);
|
491
|
-
while(r_array[i] < --qd) r.subTo(t,r);
|
492
|
-
}
|
493
|
-
}
|
494
|
-
if(q != null) {
|
495
|
-
r.drShiftTo(ys,q);
|
496
|
-
if(ts != ms) BigInteger.ZERO.subTo(q,q);
|
497
|
-
}
|
498
|
-
r.t = ys;
|
499
|
-
r.clamp();
|
500
|
-
if(nsh > 0) r.rShiftTo(nsh,r); // Denormalize remainder
|
501
|
-
if(ts < 0) BigInteger.ZERO.subTo(r,r);
|
502
|
-
}
|
503
|
-
|
504
|
-
// (public) this mod a
|
505
|
-
function bnMod(a) {
|
506
|
-
var r = nbi();
|
507
|
-
this.abs().divRemTo(a,null,r);
|
508
|
-
if(this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r,r);
|
509
|
-
return r;
|
510
|
-
}
|
511
|
-
|
512
|
-
// Modular reduction using "classic" algorithm
|
513
|
-
function Classic(m) { this.m = m; }
|
514
|
-
function cConvert(x) {
|
515
|
-
if(x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m);
|
516
|
-
else return x;
|
517
|
-
}
|
518
|
-
function cRevert(x) { return x; }
|
519
|
-
function cReduce(x) { x.divRemTo(this.m,null,x); }
|
520
|
-
function cMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }
|
521
|
-
function cSqrTo(x,r) { x.squareTo(r); this.reduce(r); }
|
522
|
-
|
523
|
-
Classic.prototype.convert = cConvert;
|
524
|
-
Classic.prototype.revert = cRevert;
|
525
|
-
Classic.prototype.reduce = cReduce;
|
526
|
-
Classic.prototype.mulTo = cMulTo;
|
527
|
-
Classic.prototype.sqrTo = cSqrTo;
|
528
|
-
|
529
|
-
// (protected) return "-1/this % 2^DB"; useful for Mont. reduction
|
530
|
-
// justification:
|
531
|
-
// xy == 1 (mod m)
|
532
|
-
// xy = 1+km
|
533
|
-
// xy(2-xy) = (1+km)(1-km)
|
534
|
-
// x[y(2-xy)] = 1-k^2m^2
|
535
|
-
// x[y(2-xy)] == 1 (mod m^2)
|
536
|
-
// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
|
537
|
-
// should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
|
538
|
-
// JS multiply "overflows" differently from C/C++, so care is needed here.
|
539
|
-
function bnpInvDigit() {
|
540
|
-
var this_array = this.array;
|
541
|
-
if(this.t < 1) return 0;
|
542
|
-
var x = this_array[0];
|
543
|
-
if((x&1) == 0) return 0;
|
544
|
-
var y = x&3; // y == 1/x mod 2^2
|
545
|
-
y = (y*(2-(x&0xf)*y))&0xf; // y == 1/x mod 2^4
|
546
|
-
y = (y*(2-(x&0xff)*y))&0xff; // y == 1/x mod 2^8
|
547
|
-
y = (y*(2-(((x&0xffff)*y)&0xffff)))&0xffff; // y == 1/x mod 2^16
|
548
|
-
// last step - calculate inverse mod DV directly;
|
549
|
-
// assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
|
550
|
-
y = (y*(2-x*y%BI_DV))%BI_DV; // y == 1/x mod 2^dbits
|
551
|
-
// we really want the negative inverse, and -DV < y < DV
|
552
|
-
return (y>0)?BI_DV-y:-y;
|
553
|
-
}
|
554
|
-
|
555
|
-
// Montgomery reduction
|
556
|
-
function Montgomery(m) {
|
557
|
-
this.m = m;
|
558
|
-
this.mp = m.invDigit();
|
559
|
-
this.mpl = this.mp&0x7fff;
|
560
|
-
this.mph = this.mp>>15;
|
561
|
-
this.um = (1<<(BI_DB-15))-1;
|
562
|
-
this.mt2 = 2*m.t;
|
563
|
-
}
|
564
|
-
|
565
|
-
// xR mod m
|
566
|
-
function montConvert(x) {
|
567
|
-
var r = nbi();
|
568
|
-
x.abs().dlShiftTo(this.m.t,r);
|
569
|
-
r.divRemTo(this.m,null,r);
|
570
|
-
if(x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r,r);
|
571
|
-
return r;
|
572
|
-
}
|
573
|
-
|
574
|
-
// x/R mod m
|
575
|
-
function montRevert(x) {
|
576
|
-
var r = nbi();
|
577
|
-
x.copyTo(r);
|
578
|
-
this.reduce(r);
|
579
|
-
return r;
|
580
|
-
}
|
581
|
-
|
582
|
-
// x = x/R mod m (HAC 14.32)
|
583
|
-
function montReduce(x) {
|
584
|
-
var x_array = x.array;
|
585
|
-
while(x.t <= this.mt2) // pad x so am has enough room later
|
586
|
-
x_array[x.t++] = 0;
|
587
|
-
for(var i = 0; i < this.m.t; ++i) {
|
588
|
-
// faster way of calculating u0 = x[i]*mp mod DV
|
589
|
-
var j = x_array[i]&0x7fff;
|
590
|
-
var u0 = (j*this.mpl+(((j*this.mph+(x_array[i]>>15)*this.mpl)&this.um)<<15))&BI_DM;
|
591
|
-
// use am to combine the multiply-shift-add into one call
|
592
|
-
j = i+this.m.t;
|
593
|
-
x_array[j] += this.m.am(0,u0,x,i,0,this.m.t);
|
594
|
-
// propagate carry
|
595
|
-
while(x_array[j] >= BI_DV) { x_array[j] -= BI_DV; x_array[++j]++; }
|
596
|
-
}
|
597
|
-
x.clamp();
|
598
|
-
x.drShiftTo(this.m.t,x);
|
599
|
-
if(x.compareTo(this.m) >= 0) x.subTo(this.m,x);
|
600
|
-
}
|
601
|
-
|
602
|
-
// r = "x^2/R mod m"; x != r
|
603
|
-
function montSqrTo(x,r) { x.squareTo(r); this.reduce(r); }
|
604
|
-
|
605
|
-
// r = "xy/R mod m"; x,y != r
|
606
|
-
function montMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }
|
607
|
-
|
608
|
-
Montgomery.prototype.convert = montConvert;
|
609
|
-
Montgomery.prototype.revert = montRevert;
|
610
|
-
Montgomery.prototype.reduce = montReduce;
|
611
|
-
Montgomery.prototype.mulTo = montMulTo;
|
612
|
-
Montgomery.prototype.sqrTo = montSqrTo;
|
613
|
-
|
614
|
-
// (protected) true iff this is even
|
615
|
-
function bnpIsEven() {
|
616
|
-
var this_array = this.array;
|
617
|
-
return ((this.t>0)?(this_array[0]&1):this.s) == 0;
|
618
|
-
}
|
619
|
-
|
620
|
-
// (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
|
621
|
-
function bnpExp(e,z) {
|
622
|
-
if(e > 0xffffffff || e < 1) return BigInteger.ONE;
|
623
|
-
var r = nbi(), r2 = nbi(), g = z.convert(this), i = nbits(e)-1;
|
624
|
-
g.copyTo(r);
|
625
|
-
while(--i >= 0) {
|
626
|
-
z.sqrTo(r,r2);
|
627
|
-
if((e&(1<<i)) > 0) z.mulTo(r2,g,r);
|
628
|
-
else { var t = r; r = r2; r2 = t; }
|
629
|
-
}
|
630
|
-
return z.revert(r);
|
631
|
-
}
|
632
|
-
|
633
|
-
// (public) this^e % m, 0 <= e < 2^32
|
634
|
-
function bnModPowInt(e,m) {
|
635
|
-
var z;
|
636
|
-
if(e < 256 || m.isEven()) z = new Classic(m); else z = new Montgomery(m);
|
637
|
-
return this.exp(e,z);
|
638
|
-
}
|
639
|
-
|
640
|
-
// protected
|
641
|
-
BigInteger.prototype.copyTo = bnpCopyTo;
|
642
|
-
BigInteger.prototype.fromInt = bnpFromInt;
|
643
|
-
BigInteger.prototype.fromString = bnpFromString;
|
644
|
-
BigInteger.prototype.clamp = bnpClamp;
|
645
|
-
BigInteger.prototype.dlShiftTo = bnpDLShiftTo;
|
646
|
-
BigInteger.prototype.drShiftTo = bnpDRShiftTo;
|
647
|
-
BigInteger.prototype.lShiftTo = bnpLShiftTo;
|
648
|
-
BigInteger.prototype.rShiftTo = bnpRShiftTo;
|
649
|
-
BigInteger.prototype.subTo = bnpSubTo;
|
650
|
-
BigInteger.prototype.multiplyTo = bnpMultiplyTo;
|
651
|
-
BigInteger.prototype.squareTo = bnpSquareTo;
|
652
|
-
BigInteger.prototype.divRemTo = bnpDivRemTo;
|
653
|
-
BigInteger.prototype.invDigit = bnpInvDigit;
|
654
|
-
BigInteger.prototype.isEven = bnpIsEven;
|
655
|
-
BigInteger.prototype.exp = bnpExp;
|
656
|
-
|
657
|
-
// public
|
658
|
-
BigInteger.prototype.toString = bnToString;
|
659
|
-
BigInteger.prototype.negate = bnNegate;
|
660
|
-
BigInteger.prototype.abs = bnAbs;
|
661
|
-
BigInteger.prototype.compareTo = bnCompareTo;
|
662
|
-
BigInteger.prototype.bitLength = bnBitLength;
|
663
|
-
BigInteger.prototype.mod = bnMod;
|
664
|
-
BigInteger.prototype.modPowInt = bnModPowInt;
|
665
|
-
|
666
|
-
// "constants"
|
667
|
-
BigInteger.ZERO = nbv(0);
|
668
|
-
BigInteger.ONE = nbv(1);
|
669
|
-
// Copyright (c) 2005 Tom Wu
|
670
|
-
// All Rights Reserved.
|
671
|
-
// See "LICENSE" for details.
|
672
|
-
|
673
|
-
// Extended JavaScript BN functions, required for RSA private ops.
|
674
|
-
|
675
|
-
// (public)
|
676
|
-
function bnClone() { var r = nbi(); this.copyTo(r); return r; }
|
677
|
-
|
678
|
-
// (public) return value as integer
|
679
|
-
function bnIntValue() {
|
680
|
-
var this_array = this.array;
|
681
|
-
if(this.s < 0) {
|
682
|
-
if(this.t == 1) return this_array[0]-BI_DV;
|
683
|
-
else if(this.t == 0) return -1;
|
684
|
-
}
|
685
|
-
else if(this.t == 1) return this_array[0];
|
686
|
-
else if(this.t == 0) return 0;
|
687
|
-
// assumes 16 < DB < 32
|
688
|
-
return ((this_array[1]&((1<<(32-BI_DB))-1))<<BI_DB)|this_array[0];
|
689
|
-
}
|
690
|
-
|
691
|
-
// (public) return value as byte
|
692
|
-
function bnByteValue() {
|
693
|
-
var this_array = this.array;
|
694
|
-
return (this.t==0)?this.s:(this_array[0]<<24)>>24;
|
695
|
-
}
|
696
|
-
|
697
|
-
// (public) return value as short (assumes DB>=16)
|
698
|
-
function bnShortValue() {
|
699
|
-
var this_array = this.array;
|
700
|
-
return (this.t==0)?this.s:(this_array[0]<<16)>>16;
|
701
|
-
}
|
702
|
-
|
703
|
-
// (protected) return x s.t. r^x < DV
|
704
|
-
function bnpChunkSize(r) { return Math.floor(Math.LN2*BI_DB/Math.log(r)); }
|
705
|
-
|
706
|
-
// (public) 0 if this == 0, 1 if this > 0
|
707
|
-
function bnSigNum() {
|
708
|
-
var this_array = this.array;
|
709
|
-
if(this.s < 0) return -1;
|
710
|
-
else if(this.t <= 0 || (this.t == 1 && this_array[0] <= 0)) return 0;
|
711
|
-
else return 1;
|
712
|
-
}
|
713
|
-
|
714
|
-
// (protected) convert to radix string
|
715
|
-
function bnpToRadix(b) {
|
716
|
-
if(b == null) b = 10;
|
717
|
-
if(this.signum() == 0 || b < 2 || b > 36) return "0";
|
718
|
-
var cs = this.chunkSize(b);
|
719
|
-
var a = Math.pow(b,cs);
|
720
|
-
var d = nbv(a), y = nbi(), z = nbi(), r = "";
|
721
|
-
this.divRemTo(d,y,z);
|
722
|
-
while(y.signum() > 0) {
|
723
|
-
r = (a+z.intValue()).toString(b).substr(1) + r;
|
724
|
-
y.divRemTo(d,y,z);
|
725
|
-
}
|
726
|
-
return z.intValue().toString(b) + r;
|
727
|
-
}
|
728
|
-
|
729
|
-
// (protected) convert from radix string
|
730
|
-
function bnpFromRadix(s,b) {
|
731
|
-
this.fromInt(0);
|
732
|
-
if(b == null) b = 10;
|
733
|
-
var cs = this.chunkSize(b);
|
734
|
-
var d = Math.pow(b,cs), mi = false, j = 0, w = 0;
|
735
|
-
for(var i = 0; i < s.length; ++i) {
|
736
|
-
var x = intAt(s,i);
|
737
|
-
if(x < 0) {
|
738
|
-
if(s.charAt(i) == "-" && this.signum() == 0) mi = true;
|
739
|
-
continue;
|
740
|
-
}
|
741
|
-
w = b*w+x;
|
742
|
-
if(++j >= cs) {
|
743
|
-
this.dMultiply(d);
|
744
|
-
this.dAddOffset(w,0);
|
745
|
-
j = 0;
|
746
|
-
w = 0;
|
747
|
-
}
|
748
|
-
}
|
749
|
-
if(j > 0) {
|
750
|
-
this.dMultiply(Math.pow(b,j));
|
751
|
-
this.dAddOffset(w,0);
|
752
|
-
}
|
753
|
-
if(mi) BigInteger.ZERO.subTo(this,this);
|
754
|
-
}
|
755
|
-
|
756
|
-
// (protected) alternate constructor
|
757
|
-
function bnpFromNumber(a,b,c) {
|
758
|
-
if("number" == typeof b) {
|
759
|
-
// new BigInteger(int,int,RNG)
|
760
|
-
if(a < 2) this.fromInt(1);
|
761
|
-
else {
|
762
|
-
this.fromNumber(a,c);
|
763
|
-
if(!this.testBit(a-1)) // force MSB set
|
764
|
-
this.bitwiseTo(BigInteger.ONE.shiftLeft(a-1),op_or,this);
|
765
|
-
if(this.isEven()) this.dAddOffset(1,0); // force odd
|
766
|
-
while(!this.isProbablePrime(b)) {
|
767
|
-
this.dAddOffset(2,0);
|
768
|
-
if(this.bitLength() > a) this.subTo(BigInteger.ONE.shiftLeft(a-1),this);
|
769
|
-
}
|
770
|
-
}
|
771
|
-
}
|
772
|
-
else {
|
773
|
-
// new BigInteger(int,RNG)
|
774
|
-
var x = new Array(), t = a&7;
|
775
|
-
x.length = (a>>3)+1;
|
776
|
-
b.nextBytes(x);
|
777
|
-
if(t > 0) x[0] &= ((1<<t)-1); else x[0] = 0;
|
778
|
-
this.fromString(x,256);
|
779
|
-
}
|
780
|
-
}
|
781
|
-
|
782
|
-
// (public) convert to bigendian byte array
|
783
|
-
function bnToByteArray() {
|
784
|
-
var this_array = this.array;
|
785
|
-
var i = this.t, r = new Array();
|
786
|
-
r[0] = this.s;
|
787
|
-
var p = BI_DB-(i*BI_DB)%8, d, k = 0;
|
788
|
-
if(i-- > 0) {
|
789
|
-
if(p < BI_DB && (d = this_array[i]>>p) != (this.s&BI_DM)>>p)
|
790
|
-
r[k++] = d|(this.s<<(BI_DB-p));
|
791
|
-
while(i >= 0) {
|
792
|
-
if(p < 8) {
|
793
|
-
d = (this_array[i]&((1<<p)-1))<<(8-p);
|
794
|
-
d |= this_array[--i]>>(p+=BI_DB-8);
|
795
|
-
}
|
796
|
-
else {
|
797
|
-
d = (this_array[i]>>(p-=8))&0xff;
|
798
|
-
if(p <= 0) { p += BI_DB; --i; }
|
799
|
-
}
|
800
|
-
if((d&0x80) != 0) d |= -256;
|
801
|
-
if(k == 0 && (this.s&0x80) != (d&0x80)) ++k;
|
802
|
-
if(k > 0 || d != this.s) r[k++] = d;
|
803
|
-
}
|
804
|
-
}
|
805
|
-
return r;
|
806
|
-
}
|
807
|
-
|
808
|
-
function bnEquals(a) { return(this.compareTo(a)==0); }
|
809
|
-
function bnMin(a) { return(this.compareTo(a)<0)?this:a; }
|
810
|
-
function bnMax(a) { return(this.compareTo(a)>0)?this:a; }
|
811
|
-
|
812
|
-
// (protected) r = this op a (bitwise)
|
813
|
-
function bnpBitwiseTo(a,op,r) {
|
814
|
-
var this_array = this.array;
|
815
|
-
var a_array = a.array;
|
816
|
-
var r_array = r.array;
|
817
|
-
var i, f, m = Math.min(a.t,this.t);
|
818
|
-
for(i = 0; i < m; ++i) r_array[i] = op(this_array[i],a_array[i]);
|
819
|
-
if(a.t < this.t) {
|
820
|
-
f = a.s&BI_DM;
|
821
|
-
for(i = m; i < this.t; ++i) r_array[i] = op(this_array[i],f);
|
822
|
-
r.t = this.t;
|
823
|
-
}
|
824
|
-
else {
|
825
|
-
f = this.s&BI_DM;
|
826
|
-
for(i = m; i < a.t; ++i) r_array[i] = op(f,a_array[i]);
|
827
|
-
r.t = a.t;
|
828
|
-
}
|
829
|
-
r.s = op(this.s,a.s);
|
830
|
-
r.clamp();
|
831
|
-
}
|
832
|
-
|
833
|
-
// (public) this & a
|
834
|
-
function op_and(x,y) { return x&y; }
|
835
|
-
function bnAnd(a) { var r = nbi(); this.bitwiseTo(a,op_and,r); return r; }
|
836
|
-
|
837
|
-
// (public) this | a
|
838
|
-
function op_or(x,y) { return x|y; }
|
839
|
-
function bnOr(a) { var r = nbi(); this.bitwiseTo(a,op_or,r); return r; }
|
840
|
-
|
841
|
-
// (public) this ^ a
|
842
|
-
function op_xor(x,y) { return x^y; }
|
843
|
-
function bnXor(a) { var r = nbi(); this.bitwiseTo(a,op_xor,r); return r; }
|
844
|
-
|
845
|
-
// (public) this & ~a
|
846
|
-
function op_andnot(x,y) { return x&~y; }
|
847
|
-
function bnAndNot(a) { var r = nbi(); this.bitwiseTo(a,op_andnot,r); return r; }
|
848
|
-
|
849
|
-
// (public) ~this
|
850
|
-
function bnNot() {
|
851
|
-
var this_array = this.array;
|
852
|
-
var r = nbi();
|
853
|
-
var r_array = r.array;
|
854
|
-
|
855
|
-
for(var i = 0; i < this.t; ++i) r_array[i] = BI_DM&~this_array[i];
|
856
|
-
r.t = this.t;
|
857
|
-
r.s = ~this.s;
|
858
|
-
return r;
|
859
|
-
}
|
860
|
-
|
861
|
-
// (public) this << n
|
862
|
-
function bnShiftLeft(n) {
|
863
|
-
var r = nbi();
|
864
|
-
if(n < 0) this.rShiftTo(-n,r); else this.lShiftTo(n,r);
|
865
|
-
return r;
|
866
|
-
}
|
867
|
-
|
868
|
-
// (public) this >> n
|
869
|
-
function bnShiftRight(n) {
|
870
|
-
var r = nbi();
|
871
|
-
if(n < 0) this.lShiftTo(-n,r); else this.rShiftTo(n,r);
|
872
|
-
return r;
|
873
|
-
}
|
874
|
-
|
875
|
-
// return index of lowest 1-bit in x, x < 2^31
|
876
|
-
function lbit(x) {
|
877
|
-
if(x == 0) return -1;
|
878
|
-
var r = 0;
|
879
|
-
if((x&0xffff) == 0) { x >>= 16; r += 16; }
|
880
|
-
if((x&0xff) == 0) { x >>= 8; r += 8; }
|
881
|
-
if((x&0xf) == 0) { x >>= 4; r += 4; }
|
882
|
-
if((x&3) == 0) { x >>= 2; r += 2; }
|
883
|
-
if((x&1) == 0) ++r;
|
884
|
-
return r;
|
885
|
-
}
|
886
|
-
|
887
|
-
// (public) returns index of lowest 1-bit (or -1 if none)
|
888
|
-
function bnGetLowestSetBit() {
|
889
|
-
var this_array = this.array;
|
890
|
-
for(var i = 0; i < this.t; ++i)
|
891
|
-
if(this_array[i] != 0) return i*BI_DB+lbit(this_array[i]);
|
892
|
-
if(this.s < 0) return this.t*BI_DB;
|
893
|
-
return -1;
|
894
|
-
}
|
895
|
-
|
896
|
-
// return number of 1 bits in x
|
897
|
-
function cbit(x) {
|
898
|
-
var r = 0;
|
899
|
-
while(x != 0) { x &= x-1; ++r; }
|
900
|
-
return r;
|
901
|
-
}
|
902
|
-
|
903
|
-
// (public) return number of set bits
|
904
|
-
function bnBitCount() {
|
905
|
-
var r = 0, x = this.s&BI_DM;
|
906
|
-
for(var i = 0; i < this.t; ++i) r += cbit(this_array[i]^x);
|
907
|
-
return r;
|
908
|
-
}
|
909
|
-
|
910
|
-
// (public) true iff nth bit is set
|
911
|
-
function bnTestBit(n) {
|
912
|
-
var this_array = this.array;
|
913
|
-
var j = Math.floor(n/BI_DB);
|
914
|
-
if(j >= this.t) return(this.s!=0);
|
915
|
-
return((this_array[j]&(1<<(n%BI_DB)))!=0);
|
916
|
-
}
|
917
|
-
|
918
|
-
// (protected) this op (1<<n)
|
919
|
-
function bnpChangeBit(n,op) {
|
920
|
-
var r = BigInteger.ONE.shiftLeft(n);
|
921
|
-
this.bitwiseTo(r,op,r);
|
922
|
-
return r;
|
923
|
-
}
|
924
|
-
|
925
|
-
// (public) this | (1<<n)
|
926
|
-
function bnSetBit(n) { return this.changeBit(n,op_or); }
|
927
|
-
|
928
|
-
// (public) this & ~(1<<n)
|
929
|
-
function bnClearBit(n) { return this.changeBit(n,op_andnot); }
|
930
|
-
|
931
|
-
// (public) this ^ (1<<n)
|
932
|
-
function bnFlipBit(n) { return this.changeBit(n,op_xor); }
|
933
|
-
|
934
|
-
// (protected) r = this + a
|
935
|
-
function bnpAddTo(a,r) {
|
936
|
-
var this_array = this.array;
|
937
|
-
var a_array = a.array;
|
938
|
-
var r_array = r.array;
|
939
|
-
var i = 0, c = 0, m = Math.min(a.t,this.t);
|
940
|
-
while(i < m) {
|
941
|
-
c += this_array[i]+a_array[i];
|
942
|
-
r_array[i++] = c&BI_DM;
|
943
|
-
c >>= BI_DB;
|
944
|
-
}
|
945
|
-
if(a.t < this.t) {
|
946
|
-
c += a.s;
|
947
|
-
while(i < this.t) {
|
948
|
-
c += this_array[i];
|
949
|
-
r_array[i++] = c&BI_DM;
|
950
|
-
c >>= BI_DB;
|
951
|
-
}
|
952
|
-
c += this.s;
|
953
|
-
}
|
954
|
-
else {
|
955
|
-
c += this.s;
|
956
|
-
while(i < a.t) {
|
957
|
-
c += a_array[i];
|
958
|
-
r_array[i++] = c&BI_DM;
|
959
|
-
c >>= BI_DB;
|
960
|
-
}
|
961
|
-
c += a.s;
|
962
|
-
}
|
963
|
-
r.s = (c<0)?-1:0;
|
964
|
-
if(c > 0) r_array[i++] = c;
|
965
|
-
else if(c < -1) r_array[i++] = BI_DV+c;
|
966
|
-
r.t = i;
|
967
|
-
r.clamp();
|
968
|
-
}
|
969
|
-
|
970
|
-
// (public) this + a
|
971
|
-
function bnAdd(a) { var r = nbi(); this.addTo(a,r); return r; }
|
972
|
-
|
973
|
-
// (public) this - a
|
974
|
-
function bnSubtract(a) { var r = nbi(); this.subTo(a,r); return r; }
|
975
|
-
|
976
|
-
// (public) this * a
|
977
|
-
function bnMultiply(a) { var r = nbi(); this.multiplyTo(a,r); return r; }
|
978
|
-
|
979
|
-
// (public) this / a
|
980
|
-
function bnDivide(a) { var r = nbi(); this.divRemTo(a,r,null); return r; }
|
981
|
-
|
982
|
-
// (public) this % a
|
983
|
-
function bnRemainder(a) { var r = nbi(); this.divRemTo(a,null,r); return r; }
|
984
|
-
|
985
|
-
// (public) [this/a,this%a]
|
986
|
-
function bnDivideAndRemainder(a) {
|
987
|
-
var q = nbi(), r = nbi();
|
988
|
-
this.divRemTo(a,q,r);
|
989
|
-
return new Array(q,r);
|
990
|
-
}
|
991
|
-
|
992
|
-
// (protected) this *= n, this >= 0, 1 < n < DV
|
993
|
-
function bnpDMultiply(n) {
|
994
|
-
var this_array = this.array;
|
995
|
-
this_array[this.t] = this.am(0,n-1,this,0,0,this.t);
|
996
|
-
++this.t;
|
997
|
-
this.clamp();
|
998
|
-
}
|
999
|
-
|
1000
|
-
// (protected) this += n << w words, this >= 0
|
1001
|
-
function bnpDAddOffset(n,w) {
|
1002
|
-
var this_array = this.array;
|
1003
|
-
while(this.t <= w) this_array[this.t++] = 0;
|
1004
|
-
this_array[w] += n;
|
1005
|
-
while(this_array[w] >= BI_DV) {
|
1006
|
-
this_array[w] -= BI_DV;
|
1007
|
-
if(++w >= this.t) this_array[this.t++] = 0;
|
1008
|
-
++this_array[w];
|
1009
|
-
}
|
1010
|
-
}
|
1011
|
-
|
1012
|
-
// A "null" reducer
|
1013
|
-
function NullExp() {}
|
1014
|
-
function nNop(x) { return x; }
|
1015
|
-
function nMulTo(x,y,r) { x.multiplyTo(y,r); }
|
1016
|
-
function nSqrTo(x,r) { x.squareTo(r); }
|
1017
|
-
|
1018
|
-
NullExp.prototype.convert = nNop;
|
1019
|
-
NullExp.prototype.revert = nNop;
|
1020
|
-
NullExp.prototype.mulTo = nMulTo;
|
1021
|
-
NullExp.prototype.sqrTo = nSqrTo;
|
1022
|
-
|
1023
|
-
// (public) this^e
|
1024
|
-
function bnPow(e) { return this.exp(e,new NullExp()); }
|
1025
|
-
|
1026
|
-
// (protected) r = lower n words of "this * a", a.t <= n
|
1027
|
-
// "this" should be the larger one if appropriate.
|
1028
|
-
function bnpMultiplyLowerTo(a,n,r) {
|
1029
|
-
var r_array = r.array;
|
1030
|
-
var a_array = a.array;
|
1031
|
-
var i = Math.min(this.t+a.t,n);
|
1032
|
-
r.s = 0; // assumes a,this >= 0
|
1033
|
-
r.t = i;
|
1034
|
-
while(i > 0) r_array[--i] = 0;
|
1035
|
-
var j;
|
1036
|
-
for(j = r.t-this.t; i < j; ++i) r_array[i+this.t] = this.am(0,a_array[i],r,i,0,this.t);
|
1037
|
-
for(j = Math.min(a.t,n); i < j; ++i) this.am(0,a_array[i],r,i,0,n-i);
|
1038
|
-
r.clamp();
|
1039
|
-
}
|
1040
|
-
|
1041
|
-
// (protected) r = "this * a" without lower n words, n > 0
|
1042
|
-
// "this" should be the larger one if appropriate.
|
1043
|
-
function bnpMultiplyUpperTo(a,n,r) {
|
1044
|
-
var r_array = r.array;
|
1045
|
-
var a_array = a.array;
|
1046
|
-
--n;
|
1047
|
-
var i = r.t = this.t+a.t-n;
|
1048
|
-
r.s = 0; // assumes a,this >= 0
|
1049
|
-
while(--i >= 0) r_array[i] = 0;
|
1050
|
-
for(i = Math.max(n-this.t,0); i < a.t; ++i)
|
1051
|
-
r_array[this.t+i-n] = this.am(n-i,a_array[i],r,0,0,this.t+i-n);
|
1052
|
-
r.clamp();
|
1053
|
-
r.drShiftTo(1,r);
|
1054
|
-
}
|
1055
|
-
|
1056
|
-
// Barrett modular reduction
|
1057
|
-
function Barrett(m) {
|
1058
|
-
// setup Barrett
|
1059
|
-
this.r2 = nbi();
|
1060
|
-
this.q3 = nbi();
|
1061
|
-
BigInteger.ONE.dlShiftTo(2*m.t,this.r2);
|
1062
|
-
this.mu = this.r2.divide(m);
|
1063
|
-
this.m = m;
|
1064
|
-
}
|
1065
|
-
|
1066
|
-
function barrettConvert(x) {
|
1067
|
-
if(x.s < 0 || x.t > 2*this.m.t) return x.mod(this.m);
|
1068
|
-
else if(x.compareTo(this.m) < 0) return x;
|
1069
|
-
else { var r = nbi(); x.copyTo(r); this.reduce(r); return r; }
|
1070
|
-
}
|
1071
|
-
|
1072
|
-
function barrettRevert(x) { return x; }
|
1073
|
-
|
1074
|
-
// x = x mod m (HAC 14.42)
|
1075
|
-
function barrettReduce(x) {
|
1076
|
-
x.drShiftTo(this.m.t-1,this.r2);
|
1077
|
-
if(x.t > this.m.t+1) { x.t = this.m.t+1; x.clamp(); }
|
1078
|
-
this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3);
|
1079
|
-
this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);
|
1080
|
-
while(x.compareTo(this.r2) < 0) x.dAddOffset(1,this.m.t+1);
|
1081
|
-
x.subTo(this.r2,x);
|
1082
|
-
while(x.compareTo(this.m) >= 0) x.subTo(this.m,x);
|
1083
|
-
}
|
1084
|
-
|
1085
|
-
// r = x^2 mod m; x != r
|
1086
|
-
function barrettSqrTo(x,r) { x.squareTo(r); this.reduce(r); }
|
1087
|
-
|
1088
|
-
// r = x*y mod m; x,y != r
|
1089
|
-
function barrettMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }
|
1090
|
-
|
1091
|
-
Barrett.prototype.convert = barrettConvert;
|
1092
|
-
Barrett.prototype.revert = barrettRevert;
|
1093
|
-
Barrett.prototype.reduce = barrettReduce;
|
1094
|
-
Barrett.prototype.mulTo = barrettMulTo;
|
1095
|
-
Barrett.prototype.sqrTo = barrettSqrTo;
|
1096
|
-
|
1097
|
-
// (public) this^e % m (HAC 14.85)
|
1098
|
-
function bnModPow(e,m) {
|
1099
|
-
var e_array = e.array;
|
1100
|
-
var i = e.bitLength(), k, r = nbv(1), z;
|
1101
|
-
if(i <= 0) return r;
|
1102
|
-
else if(i < 18) k = 1;
|
1103
|
-
else if(i < 48) k = 3;
|
1104
|
-
else if(i < 144) k = 4;
|
1105
|
-
else if(i < 768) k = 5;
|
1106
|
-
else k = 6;
|
1107
|
-
if(i < 8)
|
1108
|
-
z = new Classic(m);
|
1109
|
-
else if(m.isEven())
|
1110
|
-
z = new Barrett(m);
|
1111
|
-
else
|
1112
|
-
z = new Montgomery(m);
|
1113
|
-
|
1114
|
-
// precomputation
|
1115
|
-
var g = new Array(), n = 3, k1 = k-1, km = (1<<k)-1;
|
1116
|
-
g[1] = z.convert(this);
|
1117
|
-
if(k > 1) {
|
1118
|
-
var g2 = nbi();
|
1119
|
-
z.sqrTo(g[1],g2);
|
1120
|
-
while(n <= km) {
|
1121
|
-
g[n] = nbi();
|
1122
|
-
z.mulTo(g2,g[n-2],g[n]);
|
1123
|
-
n += 2;
|
1124
|
-
}
|
1125
|
-
}
|
1126
|
-
|
1127
|
-
var j = e.t-1, w, is1 = true, r2 = nbi(), t;
|
1128
|
-
i = nbits(e_array[j])-1;
|
1129
|
-
while(j >= 0) {
|
1130
|
-
if(i >= k1) w = (e_array[j]>>(i-k1))&km;
|
1131
|
-
else {
|
1132
|
-
w = (e_array[j]&((1<<(i+1))-1))<<(k1-i);
|
1133
|
-
if(j > 0) w |= e_array[j-1]>>(BI_DB+i-k1);
|
1134
|
-
}
|
1135
|
-
|
1136
|
-
n = k;
|
1137
|
-
while((w&1) == 0) { w >>= 1; --n; }
|
1138
|
-
if((i -= n) < 0) { i += BI_DB; --j; }
|
1139
|
-
if(is1) { // ret == 1, don't bother squaring or multiplying it
|
1140
|
-
g[w].copyTo(r);
|
1141
|
-
is1 = false;
|
1142
|
-
}
|
1143
|
-
else {
|
1144
|
-
while(n > 1) { z.sqrTo(r,r2); z.sqrTo(r2,r); n -= 2; }
|
1145
|
-
if(n > 0) z.sqrTo(r,r2); else { t = r; r = r2; r2 = t; }
|
1146
|
-
z.mulTo(r2,g[w],r);
|
1147
|
-
}
|
1148
|
-
|
1149
|
-
while(j >= 0 && (e_array[j]&(1<<i)) == 0) {
|
1150
|
-
z.sqrTo(r,r2); t = r; r = r2; r2 = t;
|
1151
|
-
if(--i < 0) { i = BI_DB-1; --j; }
|
1152
|
-
}
|
1153
|
-
}
|
1154
|
-
return z.revert(r);
|
1155
|
-
}
|
1156
|
-
|
1157
|
-
// (public) gcd(this,a) (HAC 14.54)
|
1158
|
-
function bnGCD(a) {
|
1159
|
-
var x = (this.s<0)?this.negate():this.clone();
|
1160
|
-
var y = (a.s<0)?a.negate():a.clone();
|
1161
|
-
if(x.compareTo(y) < 0) { var t = x; x = y; y = t; }
|
1162
|
-
var i = x.getLowestSetBit(), g = y.getLowestSetBit();
|
1163
|
-
if(g < 0) return x;
|
1164
|
-
if(i < g) g = i;
|
1165
|
-
if(g > 0) {
|
1166
|
-
x.rShiftTo(g,x);
|
1167
|
-
y.rShiftTo(g,y);
|
1168
|
-
}
|
1169
|
-
while(x.signum() > 0) {
|
1170
|
-
if((i = x.getLowestSetBit()) > 0) x.rShiftTo(i,x);
|
1171
|
-
if((i = y.getLowestSetBit()) > 0) y.rShiftTo(i,y);
|
1172
|
-
if(x.compareTo(y) >= 0) {
|
1173
|
-
x.subTo(y,x);
|
1174
|
-
x.rShiftTo(1,x);
|
1175
|
-
}
|
1176
|
-
else {
|
1177
|
-
y.subTo(x,y);
|
1178
|
-
y.rShiftTo(1,y);
|
1179
|
-
}
|
1180
|
-
}
|
1181
|
-
if(g > 0) y.lShiftTo(g,y);
|
1182
|
-
return y;
|
1183
|
-
}
|
1184
|
-
|
1185
|
-
// (protected) this % n, n < 2^26
|
1186
|
-
function bnpModInt(n) {
|
1187
|
-
var this_array = this.array;
|
1188
|
-
if(n <= 0) return 0;
|
1189
|
-
var d = BI_DV%n, r = (this.s<0)?n-1:0;
|
1190
|
-
if(this.t > 0)
|
1191
|
-
if(d == 0) r = this_array[0]%n;
|
1192
|
-
else for(var i = this.t-1; i >= 0; --i) r = (d*r+this_array[i])%n;
|
1193
|
-
return r;
|
1194
|
-
}
|
1195
|
-
|
1196
|
-
// (public) 1/this % m (HAC 14.61)
|
1197
|
-
function bnModInverse(m) {
|
1198
|
-
var ac = m.isEven();
|
1199
|
-
if((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO;
|
1200
|
-
var u = m.clone(), v = this.clone();
|
1201
|
-
var a = nbv(1), b = nbv(0), c = nbv(0), d = nbv(1);
|
1202
|
-
while(u.signum() != 0) {
|
1203
|
-
while(u.isEven()) {
|
1204
|
-
u.rShiftTo(1,u);
|
1205
|
-
if(ac) {
|
1206
|
-
if(!a.isEven() || !b.isEven()) { a.addTo(this,a); b.subTo(m,b); }
|
1207
|
-
a.rShiftTo(1,a);
|
1208
|
-
}
|
1209
|
-
else if(!b.isEven()) b.subTo(m,b);
|
1210
|
-
b.rShiftTo(1,b);
|
1211
|
-
}
|
1212
|
-
while(v.isEven()) {
|
1213
|
-
v.rShiftTo(1,v);
|
1214
|
-
if(ac) {
|
1215
|
-
if(!c.isEven() || !d.isEven()) { c.addTo(this,c); d.subTo(m,d); }
|
1216
|
-
c.rShiftTo(1,c);
|
1217
|
-
}
|
1218
|
-
else if(!d.isEven()) d.subTo(m,d);
|
1219
|
-
d.rShiftTo(1,d);
|
1220
|
-
}
|
1221
|
-
if(u.compareTo(v) >= 0) {
|
1222
|
-
u.subTo(v,u);
|
1223
|
-
if(ac) a.subTo(c,a);
|
1224
|
-
b.subTo(d,b);
|
1225
|
-
}
|
1226
|
-
else {
|
1227
|
-
v.subTo(u,v);
|
1228
|
-
if(ac) c.subTo(a,c);
|
1229
|
-
d.subTo(b,d);
|
1230
|
-
}
|
1231
|
-
}
|
1232
|
-
if(v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO;
|
1233
|
-
if(d.compareTo(m) >= 0) return d.subtract(m);
|
1234
|
-
if(d.signum() < 0) d.addTo(m,d); else return d;
|
1235
|
-
if(d.signum() < 0) return d.add(m); else return d;
|
1236
|
-
}
|
1237
|
-
|
1238
|
-
var lowprimes = [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509];
|
1239
|
-
var lplim = (1<<26)/lowprimes[lowprimes.length-1];
|
1240
|
-
|
1241
|
-
// (public) test primality with certainty >= 1-.5^t
|
1242
|
-
function bnIsProbablePrime(t) {
|
1243
|
-
var i, x = this.abs();
|
1244
|
-
var x_array = x.array;
|
1245
|
-
if(x.t == 1 && x_array[0] <= lowprimes[lowprimes.length-1]) {
|
1246
|
-
for(i = 0; i < lowprimes.length; ++i)
|
1247
|
-
if(x_array[0] == lowprimes[i]) return true;
|
1248
|
-
return false;
|
1249
|
-
}
|
1250
|
-
if(x.isEven()) return false;
|
1251
|
-
i = 1;
|
1252
|
-
while(i < lowprimes.length) {
|
1253
|
-
var m = lowprimes[i], j = i+1;
|
1254
|
-
while(j < lowprimes.length && m < lplim) m *= lowprimes[j++];
|
1255
|
-
m = x.modInt(m);
|
1256
|
-
while(i < j) if(m%lowprimes[i++] == 0) return false;
|
1257
|
-
}
|
1258
|
-
return x.millerRabin(t);
|
1259
|
-
}
|
1260
|
-
|
1261
|
-
// (protected) true if probably prime (HAC 4.24, Miller-Rabin)
|
1262
|
-
function bnpMillerRabin(t) {
|
1263
|
-
var n1 = this.subtract(BigInteger.ONE);
|
1264
|
-
var k = n1.getLowestSetBit();
|
1265
|
-
if(k <= 0) return false;
|
1266
|
-
var r = n1.shiftRight(k);
|
1267
|
-
t = (t+1)>>1;
|
1268
|
-
if(t > lowprimes.length) t = lowprimes.length;
|
1269
|
-
var a = nbi();
|
1270
|
-
for(var i = 0; i < t; ++i) {
|
1271
|
-
a.fromInt(lowprimes[i]);
|
1272
|
-
var y = a.modPow(r,this);
|
1273
|
-
if(y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
|
1274
|
-
var j = 1;
|
1275
|
-
while(j++ < k && y.compareTo(n1) != 0) {
|
1276
|
-
y = y.modPowInt(2,this);
|
1277
|
-
if(y.compareTo(BigInteger.ONE) == 0) return false;
|
1278
|
-
}
|
1279
|
-
if(y.compareTo(n1) != 0) return false;
|
1280
|
-
}
|
1281
|
-
}
|
1282
|
-
return true;
|
1283
|
-
}
|
1284
|
-
|
1285
|
-
// protected
|
1286
|
-
BigInteger.prototype.chunkSize = bnpChunkSize;
|
1287
|
-
BigInteger.prototype.toRadix = bnpToRadix;
|
1288
|
-
BigInteger.prototype.fromRadix = bnpFromRadix;
|
1289
|
-
BigInteger.prototype.fromNumber = bnpFromNumber;
|
1290
|
-
BigInteger.prototype.bitwiseTo = bnpBitwiseTo;
|
1291
|
-
BigInteger.prototype.changeBit = bnpChangeBit;
|
1292
|
-
BigInteger.prototype.addTo = bnpAddTo;
|
1293
|
-
BigInteger.prototype.dMultiply = bnpDMultiply;
|
1294
|
-
BigInteger.prototype.dAddOffset = bnpDAddOffset;
|
1295
|
-
BigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo;
|
1296
|
-
BigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo;
|
1297
|
-
BigInteger.prototype.modInt = bnpModInt;
|
1298
|
-
BigInteger.prototype.millerRabin = bnpMillerRabin;
|
1299
|
-
|
1300
|
-
// public
|
1301
|
-
BigInteger.prototype.clone = bnClone;
|
1302
|
-
BigInteger.prototype.intValue = bnIntValue;
|
1303
|
-
BigInteger.prototype.byteValue = bnByteValue;
|
1304
|
-
BigInteger.prototype.shortValue = bnShortValue;
|
1305
|
-
BigInteger.prototype.signum = bnSigNum;
|
1306
|
-
BigInteger.prototype.toByteArray = bnToByteArray;
|
1307
|
-
BigInteger.prototype.equals = bnEquals;
|
1308
|
-
BigInteger.prototype.min = bnMin;
|
1309
|
-
BigInteger.prototype.max = bnMax;
|
1310
|
-
BigInteger.prototype.and = bnAnd;
|
1311
|
-
BigInteger.prototype.or = bnOr;
|
1312
|
-
BigInteger.prototype.xor = bnXor;
|
1313
|
-
BigInteger.prototype.andNot = bnAndNot;
|
1314
|
-
BigInteger.prototype.not = bnNot;
|
1315
|
-
BigInteger.prototype.shiftLeft = bnShiftLeft;
|
1316
|
-
BigInteger.prototype.shiftRight = bnShiftRight;
|
1317
|
-
BigInteger.prototype.getLowestSetBit = bnGetLowestSetBit;
|
1318
|
-
BigInteger.prototype.bitCount = bnBitCount;
|
1319
|
-
BigInteger.prototype.testBit = bnTestBit;
|
1320
|
-
BigInteger.prototype.setBit = bnSetBit;
|
1321
|
-
BigInteger.prototype.clearBit = bnClearBit;
|
1322
|
-
BigInteger.prototype.flipBit = bnFlipBit;
|
1323
|
-
BigInteger.prototype.add = bnAdd;
|
1324
|
-
BigInteger.prototype.subtract = bnSubtract;
|
1325
|
-
BigInteger.prototype.multiply = bnMultiply;
|
1326
|
-
BigInteger.prototype.divide = bnDivide;
|
1327
|
-
BigInteger.prototype.remainder = bnRemainder;
|
1328
|
-
BigInteger.prototype.divideAndRemainder = bnDivideAndRemainder;
|
1329
|
-
BigInteger.prototype.modPow = bnModPow;
|
1330
|
-
BigInteger.prototype.modInverse = bnModInverse;
|
1331
|
-
BigInteger.prototype.pow = bnPow;
|
1332
|
-
BigInteger.prototype.gcd = bnGCD;
|
1333
|
-
BigInteger.prototype.isProbablePrime = bnIsProbablePrime;
|
1334
|
-
|
1335
|
-
// BigInteger interfaces not implemented in jsbn:
|
1336
|
-
|
1337
|
-
// BigInteger(int signum, byte[] magnitude)
|
1338
|
-
// double doubleValue()
|
1339
|
-
// float floatValue()
|
1340
|
-
// int hashCode()
|
1341
|
-
// long longValue()
|
1342
|
-
// static BigInteger valueOf(long val)
|
1343
|
-
// prng4.js - uses Arcfour as a PRNG
|
1344
|
-
|
1345
|
-
function Arcfour() {
|
1346
|
-
this.i = 0;
|
1347
|
-
this.j = 0;
|
1348
|
-
this.S = new Array();
|
1349
|
-
}
|
1350
|
-
|
1351
|
-
// Initialize arcfour context from key, an array of ints, each from [0..255]
|
1352
|
-
function ARC4init(key) {
|
1353
|
-
var i, j, t;
|
1354
|
-
for(i = 0; i < 256; ++i)
|
1355
|
-
this.S[i] = i;
|
1356
|
-
j = 0;
|
1357
|
-
for(i = 0; i < 256; ++i) {
|
1358
|
-
j = (j + this.S[i] + key[i % key.length]) & 255;
|
1359
|
-
t = this.S[i];
|
1360
|
-
this.S[i] = this.S[j];
|
1361
|
-
this.S[j] = t;
|
1362
|
-
}
|
1363
|
-
this.i = 0;
|
1364
|
-
this.j = 0;
|
1365
|
-
}
|
1366
|
-
|
1367
|
-
function ARC4next() {
|
1368
|
-
var t;
|
1369
|
-
this.i = (this.i + 1) & 255;
|
1370
|
-
this.j = (this.j + this.S[this.i]) & 255;
|
1371
|
-
t = this.S[this.i];
|
1372
|
-
this.S[this.i] = this.S[this.j];
|
1373
|
-
this.S[this.j] = t;
|
1374
|
-
return this.S[(t + this.S[this.i]) & 255];
|
1375
|
-
}
|
1376
|
-
|
1377
|
-
Arcfour.prototype.init = ARC4init;
|
1378
|
-
Arcfour.prototype.next = ARC4next;
|
1379
|
-
|
1380
|
-
// Plug in your RNG constructor here
|
1381
|
-
function prng_newstate() {
|
1382
|
-
return new Arcfour();
|
1383
|
-
}
|
1384
|
-
|
1385
|
-
// Pool size must be a multiple of 4 and greater than 32.
|
1386
|
-
// An array of bytes the size of the pool will be passed to init()
|
1387
|
-
var rng_psize = 256;
|
1388
|
-
// Random number generator - requires a PRNG backend, e.g. prng4.js
|
1389
|
-
|
1390
|
-
// For best results, put code like
|
1391
|
-
// <body onClick='rng_seed_time();' onKeyPress='rng_seed_time();'>
|
1392
|
-
// in your main HTML document.
|
1393
|
-
|
1394
|
-
var rng_state;
|
1395
|
-
var rng_pool;
|
1396
|
-
var rng_pptr;
|
1397
|
-
|
1398
|
-
// Mix in a 32-bit integer into the pool
|
1399
|
-
function rng_seed_int(x) {
|
1400
|
-
rng_pool[rng_pptr++] ^= x & 255;
|
1401
|
-
rng_pool[rng_pptr++] ^= (x >> 8) & 255;
|
1402
|
-
rng_pool[rng_pptr++] ^= (x >> 16) & 255;
|
1403
|
-
rng_pool[rng_pptr++] ^= (x >> 24) & 255;
|
1404
|
-
if(rng_pptr >= rng_psize) rng_pptr -= rng_psize;
|
1405
|
-
}
|
1406
|
-
|
1407
|
-
// Mix in the current time (w/milliseconds) into the pool
|
1408
|
-
function rng_seed_time() {
|
1409
|
-
// Use pre-computed date to avoid making the benchmark
|
1410
|
-
// results dependent on the current date.
|
1411
|
-
rng_seed_int(1122926989487);
|
1412
|
-
}
|
1413
|
-
|
1414
|
-
// Initialize the pool with junk if needed.
|
1415
|
-
if(rng_pool == null) {
|
1416
|
-
rng_pool = new Array();
|
1417
|
-
rng_pptr = 0;
|
1418
|
-
var t;
|
1419
|
-
while(rng_pptr < rng_psize) { // extract some randomness from Math.random()
|
1420
|
-
t = Math.floor(65536 * Math.random());
|
1421
|
-
rng_pool[rng_pptr++] = t >>> 8;
|
1422
|
-
rng_pool[rng_pptr++] = t & 255;
|
1423
|
-
}
|
1424
|
-
rng_pptr = 0;
|
1425
|
-
rng_seed_time();
|
1426
|
-
//rng_seed_int(window.screenX);
|
1427
|
-
//rng_seed_int(window.screenY);
|
1428
|
-
}
|
1429
|
-
|
1430
|
-
function rng_get_byte() {
|
1431
|
-
if(rng_state == null) {
|
1432
|
-
rng_seed_time();
|
1433
|
-
rng_state = prng_newstate();
|
1434
|
-
rng_state.init(rng_pool);
|
1435
|
-
for(rng_pptr = 0; rng_pptr < rng_pool.length; ++rng_pptr)
|
1436
|
-
rng_pool[rng_pptr] = 0;
|
1437
|
-
rng_pptr = 0;
|
1438
|
-
//rng_pool = null;
|
1439
|
-
}
|
1440
|
-
// TODO: allow reseeding after first request
|
1441
|
-
return rng_state.next();
|
1442
|
-
}
|
1443
|
-
|
1444
|
-
function rng_get_bytes(ba) {
|
1445
|
-
var i;
|
1446
|
-
for(i = 0; i < ba.length; ++i) ba[i] = rng_get_byte();
|
1447
|
-
}
|
1448
|
-
|
1449
|
-
function SecureRandom() {}
|
1450
|
-
|
1451
|
-
SecureRandom.prototype.nextBytes = rng_get_bytes;
|
1452
|
-
// Depends on jsbn.js and rng.js
|
1453
|
-
|
1454
|
-
// convert a (hex) string to a bignum object
|
1455
|
-
function parseBigInt(str,r) {
|
1456
|
-
return new BigInteger(str,r);
|
1457
|
-
}
|
1458
|
-
|
1459
|
-
function linebrk(s,n) {
|
1460
|
-
var ret = "";
|
1461
|
-
var i = 0;
|
1462
|
-
while(i + n < s.length) {
|
1463
|
-
ret += s.substring(i,i+n) + "\n";
|
1464
|
-
i += n;
|
1465
|
-
}
|
1466
|
-
return ret + s.substring(i,s.length);
|
1467
|
-
}
|
1468
|
-
|
1469
|
-
function byte2Hex(b) {
|
1470
|
-
if(b < 0x10)
|
1471
|
-
return "0" + b.toString(16);
|
1472
|
-
else
|
1473
|
-
return b.toString(16);
|
1474
|
-
}
|
1475
|
-
|
1476
|
-
// PKCS#1 (type 2, random) pad input string s to n bytes, and return a bigint
|
1477
|
-
function pkcs1pad2(s,n) {
|
1478
|
-
if(n < s.length + 11) {
|
1479
|
-
alert("Message too long for RSA");
|
1480
|
-
return null;
|
1481
|
-
}
|
1482
|
-
var ba = new Array();
|
1483
|
-
var i = s.length - 1;
|
1484
|
-
while(i >= 0 && n > 0) ba[--n] = s.charCodeAt(i--);
|
1485
|
-
ba[--n] = 0;
|
1486
|
-
var rng = new SecureRandom();
|
1487
|
-
var x = new Array();
|
1488
|
-
while(n > 2) { // random non-zero pad
|
1489
|
-
x[0] = 0;
|
1490
|
-
while(x[0] == 0) rng.nextBytes(x);
|
1491
|
-
ba[--n] = x[0];
|
1492
|
-
}
|
1493
|
-
ba[--n] = 2;
|
1494
|
-
ba[--n] = 0;
|
1495
|
-
return new BigInteger(ba);
|
1496
|
-
}
|
1497
|
-
|
1498
|
-
// "empty" RSA key constructor
|
1499
|
-
function RSAKey() {
|
1500
|
-
this.n = null;
|
1501
|
-
this.e = 0;
|
1502
|
-
this.d = null;
|
1503
|
-
this.p = null;
|
1504
|
-
this.q = null;
|
1505
|
-
this.dmp1 = null;
|
1506
|
-
this.dmq1 = null;
|
1507
|
-
this.coeff = null;
|
1508
|
-
}
|
1509
|
-
|
1510
|
-
// Set the public key fields N and e from hex strings
|
1511
|
-
function RSASetPublic(N,E) {
|
1512
|
-
if(N != null && E != null && N.length > 0 && E.length > 0) {
|
1513
|
-
this.n = parseBigInt(N,16);
|
1514
|
-
this.e = parseInt(E,16);
|
1515
|
-
}
|
1516
|
-
else
|
1517
|
-
alert("Invalid RSA public key");
|
1518
|
-
}
|
1519
|
-
|
1520
|
-
// Perform raw public operation on "x": return x^e (mod n)
|
1521
|
-
function RSADoPublic(x) {
|
1522
|
-
return x.modPowInt(this.e, this.n);
|
1523
|
-
}
|
1524
|
-
|
1525
|
-
// Return the PKCS#1 RSA encryption of "text" as an even-length hex string
|
1526
|
-
function RSAEncrypt(text) {
|
1527
|
-
var m = pkcs1pad2(text,(this.n.bitLength()+7)>>3);
|
1528
|
-
if(m == null) return null;
|
1529
|
-
var c = this.doPublic(m);
|
1530
|
-
if(c == null) return null;
|
1531
|
-
var h = c.toString(16);
|
1532
|
-
if((h.length & 1) == 0) return h; else return "0" + h;
|
1533
|
-
}
|
1534
|
-
|
1535
|
-
// Return the PKCS#1 RSA encryption of "text" as a Base64-encoded string
|
1536
|
-
//function RSAEncryptB64(text) {
|
1537
|
-
// var h = this.encrypt(text);
|
1538
|
-
// if(h) return hex2b64(h); else return null;
|
1539
|
-
//}
|
1540
|
-
|
1541
|
-
// protected
|
1542
|
-
RSAKey.prototype.doPublic = RSADoPublic;
|
1543
|
-
|
1544
|
-
// public
|
1545
|
-
RSAKey.prototype.setPublic = RSASetPublic;
|
1546
|
-
RSAKey.prototype.encrypt = RSAEncrypt;
|
1547
|
-
//RSAKey.prototype.encrypt_b64 = RSAEncryptB64;
|
1548
|
-
// Depends on rsa.js and jsbn2.js
|
1549
|
-
|
1550
|
-
// Undo PKCS#1 (type 2, random) padding and, if valid, return the plaintext
|
1551
|
-
function pkcs1unpad2(d,n) {
|
1552
|
-
var b = d.toByteArray();
|
1553
|
-
var i = 0;
|
1554
|
-
while(i < b.length && b[i] == 0) ++i;
|
1555
|
-
if(b.length-i != n-1 || b[i] != 2)
|
1556
|
-
return null;
|
1557
|
-
++i;
|
1558
|
-
while(b[i] != 0)
|
1559
|
-
if(++i >= b.length) return null;
|
1560
|
-
var ret = "";
|
1561
|
-
while(++i < b.length)
|
1562
|
-
ret += String.fromCharCode(b[i]);
|
1563
|
-
return ret;
|
1564
|
-
}
|
1565
|
-
|
1566
|
-
// Set the private key fields N, e, and d from hex strings
|
1567
|
-
function RSASetPrivate(N,E,D) {
|
1568
|
-
if(N != null && E != null && N.length > 0 && E.length > 0) {
|
1569
|
-
this.n = parseBigInt(N,16);
|
1570
|
-
this.e = parseInt(E,16);
|
1571
|
-
this.d = parseBigInt(D,16);
|
1572
|
-
}
|
1573
|
-
else
|
1574
|
-
alert("Invalid RSA private key");
|
1575
|
-
}
|
1576
|
-
|
1577
|
-
// Set the private key fields N, e, d and CRT params from hex strings
|
1578
|
-
function RSASetPrivateEx(N,E,D,P,Q,DP,DQ,C) {
|
1579
|
-
if(N != null && E != null && N.length > 0 && E.length > 0) {
|
1580
|
-
this.n = parseBigInt(N,16);
|
1581
|
-
this.e = parseInt(E,16);
|
1582
|
-
this.d = parseBigInt(D,16);
|
1583
|
-
this.p = parseBigInt(P,16);
|
1584
|
-
this.q = parseBigInt(Q,16);
|
1585
|
-
this.dmp1 = parseBigInt(DP,16);
|
1586
|
-
this.dmq1 = parseBigInt(DQ,16);
|
1587
|
-
this.coeff = parseBigInt(C,16);
|
1588
|
-
}
|
1589
|
-
else
|
1590
|
-
alert("Invalid RSA private key");
|
1591
|
-
}
|
1592
|
-
|
1593
|
-
// Generate a new random private key B bits long, using public expt E
|
1594
|
-
function RSAGenerate(B,E) {
|
1595
|
-
var rng = new SecureRandom();
|
1596
|
-
var qs = B>>1;
|
1597
|
-
this.e = parseInt(E,16);
|
1598
|
-
var ee = new BigInteger(E,16);
|
1599
|
-
for(;;) {
|
1600
|
-
for(;;) {
|
1601
|
-
this.p = new BigInteger(B-qs,1,rng);
|
1602
|
-
if(this.p.subtract(BigInteger.ONE).gcd(ee).compareTo(BigInteger.ONE) == 0 && this.p.isProbablePrime(10)) break;
|
1603
|
-
}
|
1604
|
-
for(;;) {
|
1605
|
-
this.q = new BigInteger(qs,1,rng);
|
1606
|
-
if(this.q.subtract(BigInteger.ONE).gcd(ee).compareTo(BigInteger.ONE) == 0 && this.q.isProbablePrime(10)) break;
|
1607
|
-
}
|
1608
|
-
if(this.p.compareTo(this.q) <= 0) {
|
1609
|
-
var t = this.p;
|
1610
|
-
this.p = this.q;
|
1611
|
-
this.q = t;
|
1612
|
-
}
|
1613
|
-
var p1 = this.p.subtract(BigInteger.ONE);
|
1614
|
-
var q1 = this.q.subtract(BigInteger.ONE);
|
1615
|
-
var phi = p1.multiply(q1);
|
1616
|
-
if(phi.gcd(ee).compareTo(BigInteger.ONE) == 0) {
|
1617
|
-
this.n = this.p.multiply(this.q);
|
1618
|
-
this.d = ee.modInverse(phi);
|
1619
|
-
this.dmp1 = this.d.mod(p1);
|
1620
|
-
this.dmq1 = this.d.mod(q1);
|
1621
|
-
this.coeff = this.q.modInverse(this.p);
|
1622
|
-
break;
|
1623
|
-
}
|
1624
|
-
}
|
1625
|
-
}
|
1626
|
-
|
1627
|
-
// Perform raw private operation on "x": return x^d (mod n)
|
1628
|
-
function RSADoPrivate(x) {
|
1629
|
-
if(this.p == null || this.q == null)
|
1630
|
-
return x.modPow(this.d, this.n);
|
1631
|
-
|
1632
|
-
// TODO: re-calculate any missing CRT params
|
1633
|
-
var xp = x.mod(this.p).modPow(this.dmp1, this.p);
|
1634
|
-
var xq = x.mod(this.q).modPow(this.dmq1, this.q);
|
1635
|
-
|
1636
|
-
while(xp.compareTo(xq) < 0)
|
1637
|
-
xp = xp.add(this.p);
|
1638
|
-
return xp.subtract(xq).multiply(this.coeff).mod(this.p).multiply(this.q).add(xq);
|
1639
|
-
}
|
1640
|
-
|
1641
|
-
// Return the PKCS#1 RSA decryption of "ctext".
|
1642
|
-
// "ctext" is an even-length hex string and the output is a plain string.
|
1643
|
-
function RSADecrypt(ctext) {
|
1644
|
-
var c = parseBigInt(ctext, 16);
|
1645
|
-
var m = this.doPrivate(c);
|
1646
|
-
if(m == null) return null;
|
1647
|
-
return pkcs1unpad2(m, (this.n.bitLength()+7)>>3);
|
1648
|
-
}
|
1649
|
-
|
1650
|
-
// Return the PKCS#1 RSA decryption of "ctext".
|
1651
|
-
// "ctext" is a Base64-encoded string and the output is a plain string.
|
1652
|
-
//function RSAB64Decrypt(ctext) {
|
1653
|
-
// var h = b64tohex(ctext);
|
1654
|
-
// if(h) return this.decrypt(h); else return null;
|
1655
|
-
//}
|
1656
|
-
|
1657
|
-
// protected
|
1658
|
-
RSAKey.prototype.doPrivate = RSADoPrivate;
|
1659
|
-
|
1660
|
-
// public
|
1661
|
-
RSAKey.prototype.setPrivate = RSASetPrivate;
|
1662
|
-
RSAKey.prototype.setPrivateEx = RSASetPrivateEx;
|
1663
|
-
RSAKey.prototype.generate = RSAGenerate;
|
1664
|
-
RSAKey.prototype.decrypt = RSADecrypt;
|
1665
|
-
//RSAKey.prototype.b64_decrypt = RSAB64Decrypt;
|
1666
|
-
|
1667
|
-
|
1668
|
-
nValue="a5261939975948bb7a58dffe5ff54e65f0498f9175f5a09288810b8975871e99af3b5dd94057b0fc07535f5f97444504fa35169d461d0d30cf0192e307727c065168c788771c561a9400fb49175e9e6aa4e23fe11af69e9412dd23b0cb6684c4c2429bce139e848ab26d0829073351f4acd36074eafd036a5eb83359d2a698d3";
|
1669
|
-
eValue="10001";
|
1670
|
-
dValue="8e9912f6d3645894e8d38cb58c0db81ff516cf4c7e5a14c7f1eddb1459d2cded4d8d293fc97aee6aefb861859c8b6a3d1dfe710463e1f9ddc72048c09751971c4a580aa51eb523357a3cc48d31cfad1d4a165066ed92d4748fb6571211da5cb14bc11b6e2df7c1a559e6d5ac1cd5c94703a22891464fba23d0d965086277a161";
|
1671
|
-
pValue="d090ce58a92c75233a6486cb0a9209bf3583b64f540c76f5294bb97d285eed33aec220bde14b2417951178ac152ceab6da7090905b478195498b352048f15e7d";
|
1672
|
-
qValue="cab575dc652bb66df15a0359609d51d1db184750c00c6698b90ef3465c99655103edbf0d54c56aec0ce3c4d22592338092a126a0cc49f65a4a30d222b411e58f";
|
1673
|
-
dmp1Value="1a24bca8e273df2f0e47c199bbf678604e7df7215480c77c8db39f49b000ce2cf7500038acfff5433b7d582a01f1826e6f4d42e1c57f5e1fef7b12aabc59fd25";
|
1674
|
-
dmq1Value="3d06982efbbe47339e1f6d36b1216b8a741d410b0c662f54f7118b27b9a4ec9d914337eb39841d8666f3034408cf94f5b62f11c402fc994fe15a05493150d9fd";
|
1675
|
-
coeffValue="3a3e731acd8960b7ff9eb81a7ff93bd1cfa74cbd56987db58b4594fb09c09084db1734c8143f98b602b981aaa9243ca28deb69b5b280ee8dcee0fd2625e53250";
|
1676
|
-
|
1677
|
-
setupEngine(am3, 28);
|
1678
|
-
|
1679
|
-
var TEXT = "The quick brown fox jumped over the extremely lazy frog! " +
|
1680
|
-
"Now is the time for all good men to come to the party.";
|
1681
|
-
var encrypted;
|
1682
|
-
|
1683
|
-
function encrypt() {
|
1684
|
-
var RSA = new RSAKey();
|
1685
|
-
RSA.setPublic(nValue, eValue);
|
1686
|
-
RSA.setPrivateEx(nValue, eValue, dValue, pValue, qValue, dmp1Value, dmq1Value, coeffValue);
|
1687
|
-
encrypted = RSA.encrypt(TEXT);
|
1688
|
-
}
|
1689
|
-
|
1690
|
-
function decrypt() {
|
1691
|
-
var RSA = new RSAKey();
|
1692
|
-
RSA.setPublic(nValue, eValue);
|
1693
|
-
RSA.setPrivateEx(nValue, eValue, dValue, pValue, qValue, dmp1Value, dmq1Value, coeffValue);
|
1694
|
-
var decrypted = RSA.decrypt(encrypted);
|
1695
|
-
if (decrypted != TEXT) {
|
1696
|
-
throw new Error("Crypto operation failed");
|
1697
|
-
}
|
1698
|
-
}
|