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.

Files changed (580) hide show
  1. data/.gitignore +11 -0
  2. data/.gitmodules +3 -0
  3. data/History.txt +5 -1
  4. data/Rakefile +35 -38
  5. data/ext/v8/callbacks.cpp +1 -1
  6. data/ext/v8/convert_ruby.h +1 -1
  7. data/ext/v8/convert_string.h +3 -3
  8. data/ext/v8/extconf.rb +9 -17
  9. data/ext/v8/upstream/2.0.6/.gitignore +26 -0
  10. data/ext/v8/upstream/Makefile +31 -0
  11. data/ext/v8/upstream/no-strict-aliasing.patch +13 -0
  12. data/ext/v8/v8_str.cpp +1 -1
  13. data/ext/v8/v8_template.cpp +1 -1
  14. data/lib/v8.rb +1 -1
  15. data/lib/v8/v8.bundle +0 -0
  16. data/spec/ext/obj_spec.rb +1 -1
  17. data/spec/redjs/jsapi_spec.rb +11 -0
  18. data/therubyracer.gemspec +658 -12
  19. metadata +611 -1182
  20. data/Manifest.txt +0 -1191
  21. data/ext/v8/upstream/2.0.6/.sconsign.dblite +0 -0
  22. data/ext/v8/upstream/2.0.6/benchmarks/README.txt +0 -63
  23. data/ext/v8/upstream/2.0.6/benchmarks/base.js +0 -264
  24. data/ext/v8/upstream/2.0.6/benchmarks/crypto.js +0 -1698
  25. data/ext/v8/upstream/2.0.6/benchmarks/deltablue.js +0 -880
  26. data/ext/v8/upstream/2.0.6/benchmarks/earley-boyer.js +0 -4684
  27. data/ext/v8/upstream/2.0.6/benchmarks/raytrace.js +0 -935
  28. data/ext/v8/upstream/2.0.6/benchmarks/regexp.js +0 -1614
  29. data/ext/v8/upstream/2.0.6/benchmarks/revisions.html +0 -86
  30. data/ext/v8/upstream/2.0.6/benchmarks/richards.js +0 -539
  31. data/ext/v8/upstream/2.0.6/benchmarks/run.html +0 -141
  32. data/ext/v8/upstream/2.0.6/benchmarks/run.js +0 -61
  33. data/ext/v8/upstream/2.0.6/benchmarks/splay.js +0 -378
  34. data/ext/v8/upstream/2.0.6/benchmarks/style.css +0 -77
  35. data/ext/v8/upstream/2.0.6/benchmarks/v8-logo.png +0 -0
  36. data/ext/v8/upstream/2.0.6/samples/SConscript +0 -38
  37. data/ext/v8/upstream/2.0.6/samples/count-hosts.js +0 -42
  38. data/ext/v8/upstream/2.0.6/samples/process.cc +0 -622
  39. data/ext/v8/upstream/2.0.6/samples/shell.cc +0 -303
  40. data/ext/v8/upstream/2.0.6/test/cctest/SConscript +0 -95
  41. data/ext/v8/upstream/2.0.6/test/cctest/cctest.cc +0 -126
  42. data/ext/v8/upstream/2.0.6/test/cctest/cctest.h +0 -211
  43. data/ext/v8/upstream/2.0.6/test/cctest/cctest.status +0 -54
  44. data/ext/v8/upstream/2.0.6/test/cctest/test-accessors.cc +0 -450
  45. data/ext/v8/upstream/2.0.6/test/cctest/test-alloc.cc +0 -215
  46. data/ext/v8/upstream/2.0.6/test/cctest/test-api.cc +0 -8699
  47. data/ext/v8/upstream/2.0.6/test/cctest/test-assembler-arm.cc +0 -227
  48. data/ext/v8/upstream/2.0.6/test/cctest/test-assembler-ia32.cc +0 -395
  49. data/ext/v8/upstream/2.0.6/test/cctest/test-assembler-x64.cc +0 -292
  50. data/ext/v8/upstream/2.0.6/test/cctest/test-ast.cc +0 -97
  51. data/ext/v8/upstream/2.0.6/test/cctest/test-compiler.cc +0 -318
  52. data/ext/v8/upstream/2.0.6/test/cctest/test-conversions.cc +0 -130
  53. data/ext/v8/upstream/2.0.6/test/cctest/test-debug.cc +0 -5788
  54. data/ext/v8/upstream/2.0.6/test/cctest/test-decls.cc +0 -593
  55. data/ext/v8/upstream/2.0.6/test/cctest/test-disasm-arm.cc +0 -281
  56. data/ext/v8/upstream/2.0.6/test/cctest/test-disasm-ia32.cc +0 -418
  57. data/ext/v8/upstream/2.0.6/test/cctest/test-flags.cc +0 -234
  58. data/ext/v8/upstream/2.0.6/test/cctest/test-func-name-inference.cc +0 -267
  59. data/ext/v8/upstream/2.0.6/test/cctest/test-hashmap.cc +0 -176
  60. data/ext/v8/upstream/2.0.6/test/cctest/test-heap-profiler.cc +0 -396
  61. data/ext/v8/upstream/2.0.6/test/cctest/test-heap.cc +0 -796
  62. data/ext/v8/upstream/2.0.6/test/cctest/test-list.cc +0 -101
  63. data/ext/v8/upstream/2.0.6/test/cctest/test-lock.cc +0 -63
  64. data/ext/v8/upstream/2.0.6/test/cctest/test-log-stack-tracer.cc +0 -372
  65. data/ext/v8/upstream/2.0.6/test/cctest/test-log-utils.cc +0 -310
  66. data/ext/v8/upstream/2.0.6/test/cctest/test-log.cc +0 -1081
  67. data/ext/v8/upstream/2.0.6/test/cctest/test-macro-assembler-x64.cc +0 -2104
  68. data/ext/v8/upstream/2.0.6/test/cctest/test-mark-compact.cc +0 -341
  69. data/ext/v8/upstream/2.0.6/test/cctest/test-parsing.cc +0 -129
  70. data/ext/v8/upstream/2.0.6/test/cctest/test-platform-linux.cc +0 -80
  71. data/ext/v8/upstream/2.0.6/test/cctest/test-platform-macos.cc +0 -10
  72. data/ext/v8/upstream/2.0.6/test/cctest/test-platform-nullos.cc +0 -80
  73. data/ext/v8/upstream/2.0.6/test/cctest/test-platform-win32.cc +0 -26
  74. data/ext/v8/upstream/2.0.6/test/cctest/test-regexp.cc +0 -1815
  75. data/ext/v8/upstream/2.0.6/test/cctest/test-serialize.cc +0 -438
  76. data/ext/v8/upstream/2.0.6/test/cctest/test-sockets.cc +0 -162
  77. data/ext/v8/upstream/2.0.6/test/cctest/test-spaces.cc +0 -248
  78. data/ext/v8/upstream/2.0.6/test/cctest/test-strings.cc +0 -432
  79. data/ext/v8/upstream/2.0.6/test/cctest/test-thread-termination.cc +0 -290
  80. data/ext/v8/upstream/2.0.6/test/cctest/test-threads.cc +0 -52
  81. data/ext/v8/upstream/2.0.6/test/cctest/test-utils.cc +0 -186
  82. data/ext/v8/upstream/2.0.6/test/cctest/test-version.cc +0 -89
  83. data/ext/v8/upstream/2.0.6/test/cctest/testcfg.py +0 -108
  84. data/ext/v8/upstream/2.0.6/test/es5conform/README +0 -14
  85. data/ext/v8/upstream/2.0.6/test/es5conform/es5conform.status +0 -226
  86. data/ext/v8/upstream/2.0.6/test/es5conform/harness-adapt.js +0 -74
  87. data/ext/v8/upstream/2.0.6/test/es5conform/testcfg.py +0 -108
  88. data/ext/v8/upstream/2.0.6/test/message/message.status +0 -31
  89. data/ext/v8/upstream/2.0.6/test/message/overwritten-builtins.js +0 -31
  90. data/ext/v8/upstream/2.0.6/test/message/overwritten-builtins.out +0 -30
  91. data/ext/v8/upstream/2.0.6/test/message/regress/regress-73.js +0 -33
  92. data/ext/v8/upstream/2.0.6/test/message/regress/regress-73.out +0 -30
  93. data/ext/v8/upstream/2.0.6/test/message/regress/regress-75.js +0 -32
  94. data/ext/v8/upstream/2.0.6/test/message/regress/regress-75.out +0 -30
  95. data/ext/v8/upstream/2.0.6/test/message/simple-throw.js +0 -28
  96. data/ext/v8/upstream/2.0.6/test/message/simple-throw.out +0 -30
  97. data/ext/v8/upstream/2.0.6/test/message/testcfg.py +0 -135
  98. data/ext/v8/upstream/2.0.6/test/message/try-catch-finally-no-message.js +0 -51
  99. data/ext/v8/upstream/2.0.6/test/message/try-catch-finally-no-message.out +0 -26
  100. data/ext/v8/upstream/2.0.6/test/message/try-catch-finally-return-in-finally.js +0 -39
  101. data/ext/v8/upstream/2.0.6/test/message/try-catch-finally-return-in-finally.out +0 -28
  102. data/ext/v8/upstream/2.0.6/test/message/try-catch-finally-throw-in-catch-and-finally.js +0 -34
  103. data/ext/v8/upstream/2.0.6/test/message/try-catch-finally-throw-in-catch-and-finally.out +0 -30
  104. data/ext/v8/upstream/2.0.6/test/message/try-catch-finally-throw-in-catch.js +0 -34
  105. data/ext/v8/upstream/2.0.6/test/message/try-catch-finally-throw-in-catch.out +0 -30
  106. data/ext/v8/upstream/2.0.6/test/message/try-catch-finally-throw-in-finally.js +0 -34
  107. data/ext/v8/upstream/2.0.6/test/message/try-catch-finally-throw-in-finally.out +0 -30
  108. data/ext/v8/upstream/2.0.6/test/message/try-finally-return-in-finally.js +0 -37
  109. data/ext/v8/upstream/2.0.6/test/message/try-finally-return-in-finally.out +0 -28
  110. data/ext/v8/upstream/2.0.6/test/message/try-finally-throw-in-finally.js +0 -32
  111. data/ext/v8/upstream/2.0.6/test/message/try-finally-throw-in-finally.out +0 -30
  112. data/ext/v8/upstream/2.0.6/test/message/try-finally-throw-in-try-and-finally.js +0 -32
  113. data/ext/v8/upstream/2.0.6/test/message/try-finally-throw-in-try-and-finally.out +0 -30
  114. data/ext/v8/upstream/2.0.6/test/message/try-finally-throw-in-try.js +0 -32
  115. data/ext/v8/upstream/2.0.6/test/message/try-finally-throw-in-try.out +0 -30
  116. data/ext/v8/upstream/2.0.6/test/mjsunit/api-call-after-bypassed-exception.js +0 -39
  117. data/ext/v8/upstream/2.0.6/test/mjsunit/apply.js +0 -196
  118. data/ext/v8/upstream/2.0.6/test/mjsunit/arguments-apply.js +0 -134
  119. data/ext/v8/upstream/2.0.6/test/mjsunit/arguments-call-apply.js +0 -41
  120. data/ext/v8/upstream/2.0.6/test/mjsunit/arguments-enum.js +0 -52
  121. data/ext/v8/upstream/2.0.6/test/mjsunit/arguments-indirect.js +0 -47
  122. data/ext/v8/upstream/2.0.6/test/mjsunit/arguments-lazy.js +0 -47
  123. data/ext/v8/upstream/2.0.6/test/mjsunit/arguments-opt.js +0 -130
  124. data/ext/v8/upstream/2.0.6/test/mjsunit/arguments-read-and-assignment.js +0 -164
  125. data/ext/v8/upstream/2.0.6/test/mjsunit/arguments.js +0 -97
  126. data/ext/v8/upstream/2.0.6/test/mjsunit/array-concat.js +0 -120
  127. data/ext/v8/upstream/2.0.6/test/mjsunit/array-constructor.js +0 -119
  128. data/ext/v8/upstream/2.0.6/test/mjsunit/array-functions-prototype.js +0 -159
  129. data/ext/v8/upstream/2.0.6/test/mjsunit/array-indexing.js +0 -66
  130. data/ext/v8/upstream/2.0.6/test/mjsunit/array-iteration.js +0 -228
  131. data/ext/v8/upstream/2.0.6/test/mjsunit/array-join.js +0 -45
  132. data/ext/v8/upstream/2.0.6/test/mjsunit/array-length-number-conversion.js +0 -53
  133. data/ext/v8/upstream/2.0.6/test/mjsunit/array-length.js +0 -111
  134. data/ext/v8/upstream/2.0.6/test/mjsunit/array-reduce.js +0 -514
  135. data/ext/v8/upstream/2.0.6/test/mjsunit/array-sort.js +0 -362
  136. data/ext/v8/upstream/2.0.6/test/mjsunit/array-splice.js +0 -314
  137. data/ext/v8/upstream/2.0.6/test/mjsunit/ascii-regexp-subject.js +0 -49
  138. data/ext/v8/upstream/2.0.6/test/mjsunit/big-array-literal.js +0 -111
  139. data/ext/v8/upstream/2.0.6/test/mjsunit/big-object-literal.js +0 -114
  140. data/ext/v8/upstream/2.0.6/test/mjsunit/binary-operation-overwrite.js +0 -36
  141. data/ext/v8/upstream/2.0.6/test/mjsunit/bit-not.js +0 -75
  142. data/ext/v8/upstream/2.0.6/test/mjsunit/bitwise-operations-undefined.js +0 -49
  143. data/ext/v8/upstream/2.0.6/test/mjsunit/body-not-visible.js +0 -39
  144. data/ext/v8/upstream/2.0.6/test/mjsunit/bugs/bug-1344252.js +0 -79
  145. data/ext/v8/upstream/2.0.6/test/mjsunit/bugs/bug-222.js +0 -42
  146. data/ext/v8/upstream/2.0.6/test/mjsunit/bugs/bug-223.js +0 -39
  147. data/ext/v8/upstream/2.0.6/test/mjsunit/bugs/bug-900066.js +0 -38
  148. data/ext/v8/upstream/2.0.6/test/mjsunit/bugs/bug-941049.js +0 -100
  149. data/ext/v8/upstream/2.0.6/test/mjsunit/call-non-function-call.js +0 -38
  150. data/ext/v8/upstream/2.0.6/test/mjsunit/call-non-function.js +0 -63
  151. data/ext/v8/upstream/2.0.6/test/mjsunit/call.js +0 -87
  152. data/ext/v8/upstream/2.0.6/test/mjsunit/char-escape.js +0 -53
  153. data/ext/v8/upstream/2.0.6/test/mjsunit/class-of-builtins.js +0 -50
  154. data/ext/v8/upstream/2.0.6/test/mjsunit/closure.js +0 -37
  155. data/ext/v8/upstream/2.0.6/test/mjsunit/codegen-coverage.js +0 -91
  156. data/ext/v8/upstream/2.0.6/test/mjsunit/compare-character.js +0 -50
  157. data/ext/v8/upstream/2.0.6/test/mjsunit/compare-nan.js +0 -66
  158. data/ext/v8/upstream/2.0.6/test/mjsunit/compiler/countoperation.js +0 -111
  159. data/ext/v8/upstream/2.0.6/test/mjsunit/compiler/function-call.js +0 -52
  160. data/ext/v8/upstream/2.0.6/test/mjsunit/compiler/globals.js +0 -65
  161. data/ext/v8/upstream/2.0.6/test/mjsunit/compiler/jsnatives.js +0 -33
  162. data/ext/v8/upstream/2.0.6/test/mjsunit/compiler/literals-assignment.js +0 -104
  163. data/ext/v8/upstream/2.0.6/test/mjsunit/compiler/literals.js +0 -52
  164. data/ext/v8/upstream/2.0.6/test/mjsunit/compiler/loops.js +0 -35
  165. data/ext/v8/upstream/2.0.6/test/mjsunit/compiler/objectliterals.js +0 -57
  166. data/ext/v8/upstream/2.0.6/test/mjsunit/compiler/property-simple.js +0 -39
  167. data/ext/v8/upstream/2.0.6/test/mjsunit/compiler/short-circuit.js +0 -102
  168. data/ext/v8/upstream/2.0.6/test/mjsunit/compiler/thisfunction.js +0 -35
  169. data/ext/v8/upstream/2.0.6/test/mjsunit/const-declaration.js +0 -172
  170. data/ext/v8/upstream/2.0.6/test/mjsunit/const-eval-init.js +0 -111
  171. data/ext/v8/upstream/2.0.6/test/mjsunit/const-redecl.js +0 -220
  172. data/ext/v8/upstream/2.0.6/test/mjsunit/const.js +0 -70
  173. data/ext/v8/upstream/2.0.6/test/mjsunit/constant-folding.js +0 -232
  174. data/ext/v8/upstream/2.0.6/test/mjsunit/context-variable-assignments.js +0 -37
  175. data/ext/v8/upstream/2.0.6/test/mjsunit/cyclic-array-to-string.js +0 -65
  176. data/ext/v8/upstream/2.0.6/test/mjsunit/cyrillic.js +0 -199
  177. data/ext/v8/upstream/2.0.6/test/mjsunit/d8-os.js +0 -180
  178. data/ext/v8/upstream/2.0.6/test/mjsunit/date-parse.js +0 -268
  179. data/ext/v8/upstream/2.0.6/test/mjsunit/date.js +0 -149
  180. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-backtrace-text.js +0 -122
  181. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-backtrace.js +0 -272
  182. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-breakpoints.js +0 -120
  183. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-changebreakpoint.js +0 -108
  184. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-clearbreakpoint.js +0 -101
  185. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-clearbreakpointgroup.js +0 -117
  186. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-compile-event.js +0 -126
  187. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-conditional-breakpoints.js +0 -171
  188. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-constructed-by.js +0 -60
  189. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-constructor.js +0 -78
  190. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-continue.js +0 -114
  191. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-enable-disable-breakpoints.js +0 -90
  192. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-evaluate-arguments.js +0 -93
  193. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-evaluate-bool-constructor.js +0 -80
  194. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-evaluate-locals.js +0 -132
  195. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-evaluate-recursive.js +0 -167
  196. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-evaluate-with.js +0 -77
  197. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-evaluate.js +0 -118
  198. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-event-listener.js +0 -73
  199. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-handle.js +0 -252
  200. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-ignore-breakpoints.js +0 -89
  201. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-mirror-cache.js +0 -85
  202. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-multiple-breakpoints.js +0 -105
  203. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-referenced-by.js +0 -112
  204. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-references.js +0 -118
  205. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-scopes.js +0 -761
  206. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-script-breakpoints.js +0 -112
  207. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-script.js +0 -92
  208. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-scripts-request.js +0 -108
  209. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-setbreakpoint.js +0 -165
  210. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-sourceinfo.js +0 -352
  211. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-sourceslice.js +0 -74
  212. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-step-stub-callfunction.js +0 -87
  213. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-step.js +0 -82
  214. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-stepin-accessor.js +0 -248
  215. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-stepin-builtin.js +0 -78
  216. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-stepin-call-function-stub.js +0 -115
  217. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-stepin-constructor.js +0 -78
  218. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-stepin-function-call.js +0 -149
  219. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-stepnext-do-while.js +0 -79
  220. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-stepout-recursive-function.js +0 -106
  221. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-stepout-to-builtin.js +0 -84
  222. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-suspend.js +0 -96
  223. data/ext/v8/upstream/2.0.6/test/mjsunit/debug-version.js +0 -90
  224. data/ext/v8/upstream/2.0.6/test/mjsunit/declare-locally.js +0 -43
  225. data/ext/v8/upstream/2.0.6/test/mjsunit/deep-recursion.js +0 -66
  226. data/ext/v8/upstream/2.0.6/test/mjsunit/delay-syntax-error.js +0 -41
  227. data/ext/v8/upstream/2.0.6/test/mjsunit/delete-global-properties.js +0 -37
  228. data/ext/v8/upstream/2.0.6/test/mjsunit/delete-in-eval.js +0 -32
  229. data/ext/v8/upstream/2.0.6/test/mjsunit/delete-in-with.js +0 -34
  230. data/ext/v8/upstream/2.0.6/test/mjsunit/delete-vars-from-eval.js +0 -40
  231. data/ext/v8/upstream/2.0.6/test/mjsunit/delete.js +0 -163
  232. data/ext/v8/upstream/2.0.6/test/mjsunit/div-mod.js +0 -157
  233. data/ext/v8/upstream/2.0.6/test/mjsunit/do-not-strip-fc.js +0 -31
  234. data/ext/v8/upstream/2.0.6/test/mjsunit/dont-enum-array-holes.js +0 -35
  235. data/ext/v8/upstream/2.0.6/test/mjsunit/dont-reinit-global-var.js +0 -47
  236. data/ext/v8/upstream/2.0.6/test/mjsunit/double-equals.js +0 -114
  237. data/ext/v8/upstream/2.0.6/test/mjsunit/dtoa.js +0 -32
  238. data/ext/v8/upstream/2.0.6/test/mjsunit/enumeration-order.js +0 -109
  239. data/ext/v8/upstream/2.0.6/test/mjsunit/error-constructors.js +0 -32
  240. data/ext/v8/upstream/2.0.6/test/mjsunit/escape.js +0 -118
  241. data/ext/v8/upstream/2.0.6/test/mjsunit/eval-enclosing-function-name.js +0 -76
  242. data/ext/v8/upstream/2.0.6/test/mjsunit/eval-typeof-non-existing.js +0 -35
  243. data/ext/v8/upstream/2.0.6/test/mjsunit/eval.js +0 -157
  244. data/ext/v8/upstream/2.0.6/test/mjsunit/execScript-case-insensitive.js +0 -34
  245. data/ext/v8/upstream/2.0.6/test/mjsunit/extra-arguments.js +0 -54
  246. data/ext/v8/upstream/2.0.6/test/mjsunit/extra-commas.js +0 -46
  247. data/ext/v8/upstream/2.0.6/test/mjsunit/for-in-null-or-undefined.js +0 -33
  248. data/ext/v8/upstream/2.0.6/test/mjsunit/for-in-special-cases.js +0 -64
  249. data/ext/v8/upstream/2.0.6/test/mjsunit/for-in.js +0 -86
  250. data/ext/v8/upstream/2.0.6/test/mjsunit/fun-as-prototype.js +0 -36
  251. data/ext/v8/upstream/2.0.6/test/mjsunit/fun-name.js +0 -34
  252. data/ext/v8/upstream/2.0.6/test/mjsunit/function-arguments-null.js +0 -30
  253. data/ext/v8/upstream/2.0.6/test/mjsunit/function-caller.js +0 -48
  254. data/ext/v8/upstream/2.0.6/test/mjsunit/function-names.js +0 -133
  255. data/ext/v8/upstream/2.0.6/test/mjsunit/function-property.js +0 -29
  256. data/ext/v8/upstream/2.0.6/test/mjsunit/function-prototype.js +0 -98
  257. data/ext/v8/upstream/2.0.6/test/mjsunit/function-source.js +0 -49
  258. data/ext/v8/upstream/2.0.6/test/mjsunit/function.js +0 -83
  259. data/ext/v8/upstream/2.0.6/test/mjsunit/fuzz-accessors.js +0 -85
  260. data/ext/v8/upstream/2.0.6/test/mjsunit/fuzz-natives.js +0 -159
  261. data/ext/v8/upstream/2.0.6/test/mjsunit/get-own-property-descriptor.js +0 -51
  262. data/ext/v8/upstream/2.0.6/test/mjsunit/get-prototype-of.js +0 -68
  263. data/ext/v8/upstream/2.0.6/test/mjsunit/getter-in-prototype.js +0 -50
  264. data/ext/v8/upstream/2.0.6/test/mjsunit/getter-in-value-prototype.js +0 -35
  265. data/ext/v8/upstream/2.0.6/test/mjsunit/global-const-var-conflicts.js +0 -57
  266. data/ext/v8/upstream/2.0.6/test/mjsunit/global-deleted-property-ic.js +0 -45
  267. data/ext/v8/upstream/2.0.6/test/mjsunit/global-deleted-property-keyed.js +0 -38
  268. data/ext/v8/upstream/2.0.6/test/mjsunit/global-ic.js +0 -48
  269. data/ext/v8/upstream/2.0.6/test/mjsunit/global-load-from-eval-in-with.js +0 -59
  270. data/ext/v8/upstream/2.0.6/test/mjsunit/global-load-from-eval.js +0 -85
  271. data/ext/v8/upstream/2.0.6/test/mjsunit/global-load-from-nested-eval.js +0 -66
  272. data/ext/v8/upstream/2.0.6/test/mjsunit/global-vars-eval.js +0 -34
  273. data/ext/v8/upstream/2.0.6/test/mjsunit/global-vars-with.js +0 -43
  274. data/ext/v8/upstream/2.0.6/test/mjsunit/greedy.js +0 -60
  275. data/ext/v8/upstream/2.0.6/test/mjsunit/has-own-property.js +0 -38
  276. data/ext/v8/upstream/2.0.6/test/mjsunit/html-comments.js +0 -57
  277. data/ext/v8/upstream/2.0.6/test/mjsunit/html-string-funcs.js +0 -47
  278. data/ext/v8/upstream/2.0.6/test/mjsunit/if-in-undefined.js +0 -36
  279. data/ext/v8/upstream/2.0.6/test/mjsunit/in.js +0 -159
  280. data/ext/v8/upstream/2.0.6/test/mjsunit/indexed-accessors.js +0 -120
  281. data/ext/v8/upstream/2.0.6/test/mjsunit/instanceof.js +0 -93
  282. data/ext/v8/upstream/2.0.6/test/mjsunit/integer-to-string.js +0 -35
  283. data/ext/v8/upstream/2.0.6/test/mjsunit/invalid-lhs.js +0 -65
  284. data/ext/v8/upstream/2.0.6/test/mjsunit/invalid-source-element.js +0 -31
  285. data/ext/v8/upstream/2.0.6/test/mjsunit/json.js +0 -207
  286. data/ext/v8/upstream/2.0.6/test/mjsunit/keyed-ic.js +0 -236
  287. data/ext/v8/upstream/2.0.6/test/mjsunit/keyed-storage-extend.js +0 -55
  288. data/ext/v8/upstream/2.0.6/test/mjsunit/large-object-allocation.js +0 -300
  289. data/ext/v8/upstream/2.0.6/test/mjsunit/large-object-literal.js +0 -56
  290. data/ext/v8/upstream/2.0.6/test/mjsunit/lazy-load.js +0 -34
  291. data/ext/v8/upstream/2.0.6/test/mjsunit/leakcheck.js +0 -53
  292. data/ext/v8/upstream/2.0.6/test/mjsunit/length.js +0 -78
  293. data/ext/v8/upstream/2.0.6/test/mjsunit/local-load-from-eval.js +0 -39
  294. data/ext/v8/upstream/2.0.6/test/mjsunit/math-min-max.js +0 -105
  295. data/ext/v8/upstream/2.0.6/test/mjsunit/megamorphic-callbacks.js +0 -70
  296. data/ext/v8/upstream/2.0.6/test/mjsunit/mirror-array.js +0 -138
  297. data/ext/v8/upstream/2.0.6/test/mjsunit/mirror-boolean.js +0 -59
  298. data/ext/v8/upstream/2.0.6/test/mjsunit/mirror-date.js +0 -77
  299. data/ext/v8/upstream/2.0.6/test/mjsunit/mirror-error.js +0 -94
  300. data/ext/v8/upstream/2.0.6/test/mjsunit/mirror-function.js +0 -90
  301. data/ext/v8/upstream/2.0.6/test/mjsunit/mirror-null.js +0 -50
  302. data/ext/v8/upstream/2.0.6/test/mjsunit/mirror-number.js +0 -77
  303. data/ext/v8/upstream/2.0.6/test/mjsunit/mirror-object.js +0 -227
  304. data/ext/v8/upstream/2.0.6/test/mjsunit/mirror-regexp.js +0 -110
  305. data/ext/v8/upstream/2.0.6/test/mjsunit/mirror-script.js +0 -100
  306. data/ext/v8/upstream/2.0.6/test/mjsunit/mirror-string.js +0 -89
  307. data/ext/v8/upstream/2.0.6/test/mjsunit/mirror-undefined.js +0 -50
  308. data/ext/v8/upstream/2.0.6/test/mjsunit/mirror-unresolved-function.js +0 -81
  309. data/ext/v8/upstream/2.0.6/test/mjsunit/mjsunit.js +0 -203
  310. data/ext/v8/upstream/2.0.6/test/mjsunit/mjsunit.status +0 -66
  311. data/ext/v8/upstream/2.0.6/test/mjsunit/mul-exhaustive.js +0 -4511
  312. data/ext/v8/upstream/2.0.6/test/mjsunit/multiple-return.js +0 -62
  313. data/ext/v8/upstream/2.0.6/test/mjsunit/negate-zero.js +0 -42
  314. data/ext/v8/upstream/2.0.6/test/mjsunit/negate.js +0 -59
  315. data/ext/v8/upstream/2.0.6/test/mjsunit/new.js +0 -56
  316. data/ext/v8/upstream/2.0.6/test/mjsunit/newline-in-string.js +0 -46
  317. data/ext/v8/upstream/2.0.6/test/mjsunit/no-branch-elimination.js +0 -36
  318. data/ext/v8/upstream/2.0.6/test/mjsunit/no-octal-constants-above-256.js +0 -32
  319. data/ext/v8/upstream/2.0.6/test/mjsunit/no-semicolon.js +0 -45
  320. data/ext/v8/upstream/2.0.6/test/mjsunit/non-ascii-replace.js +0 -30
  321. data/ext/v8/upstream/2.0.6/test/mjsunit/nul-characters.js +0 -38
  322. data/ext/v8/upstream/2.0.6/test/mjsunit/number-limits.js +0 -47
  323. data/ext/v8/upstream/2.0.6/test/mjsunit/number-string-index-call.js +0 -32
  324. data/ext/v8/upstream/2.0.6/test/mjsunit/number-tostring-small.js +0 -395
  325. data/ext/v8/upstream/2.0.6/test/mjsunit/number-tostring.js +0 -338
  326. data/ext/v8/upstream/2.0.6/test/mjsunit/obj-construct.js +0 -46
  327. data/ext/v8/upstream/2.0.6/test/mjsunit/object-create.js +0 -250
  328. data/ext/v8/upstream/2.0.6/test/mjsunit/object-literal-gc.js +0 -66
  329. data/ext/v8/upstream/2.0.6/test/mjsunit/object-literal.js +0 -105
  330. data/ext/v8/upstream/2.0.6/test/mjsunit/override-read-only-property.js +0 -64
  331. data/ext/v8/upstream/2.0.6/test/mjsunit/parse-int-float.js +0 -85
  332. data/ext/v8/upstream/2.0.6/test/mjsunit/property-load-across-eval.js +0 -85
  333. data/ext/v8/upstream/2.0.6/test/mjsunit/property-object-key.js +0 -36
  334. data/ext/v8/upstream/2.0.6/test/mjsunit/proto.js +0 -33
  335. data/ext/v8/upstream/2.0.6/test/mjsunit/prototype.js +0 -93
  336. data/ext/v8/upstream/2.0.6/test/mjsunit/receiver-in-with-calls.js +0 -47
  337. data/ext/v8/upstream/2.0.6/test/mjsunit/regexp-UC16.js +0 -47
  338. data/ext/v8/upstream/2.0.6/test/mjsunit/regexp-call-as-function.js +0 -36
  339. data/ext/v8/upstream/2.0.6/test/mjsunit/regexp-capture.js +0 -57
  340. data/ext/v8/upstream/2.0.6/test/mjsunit/regexp-captures.js +0 -31
  341. data/ext/v8/upstream/2.0.6/test/mjsunit/regexp-indexof.js +0 -77
  342. data/ext/v8/upstream/2.0.6/test/mjsunit/regexp-lookahead.js +0 -166
  343. data/ext/v8/upstream/2.0.6/test/mjsunit/regexp-loop-capture.js +0 -29
  344. data/ext/v8/upstream/2.0.6/test/mjsunit/regexp-multiline-stack-trace.js +0 -116
  345. data/ext/v8/upstream/2.0.6/test/mjsunit/regexp-multiline.js +0 -112
  346. data/ext/v8/upstream/2.0.6/test/mjsunit/regexp-standalones.js +0 -78
  347. data/ext/v8/upstream/2.0.6/test/mjsunit/regexp-static.js +0 -167
  348. data/ext/v8/upstream/2.0.6/test/mjsunit/regexp-string-methods.js +0 -51
  349. data/ext/v8/upstream/2.0.6/test/mjsunit/regexp.js +0 -390
  350. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1030466.js +0 -45
  351. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1036894.js +0 -38
  352. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1039610.js +0 -29
  353. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1050043.js +0 -51
  354. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1062422.js +0 -30
  355. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1066899.js +0 -37
  356. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1081309.js +0 -110
  357. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1102760.js +0 -35
  358. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1110164.js +0 -46
  359. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1112051.js +0 -33
  360. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1114040.js +0 -58
  361. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1134697.js +0 -31
  362. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-114.js +0 -43
  363. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-116.js +0 -40
  364. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1170187.js +0 -80
  365. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1173979.js +0 -48
  366. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1175390.js +0 -30
  367. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1177518.js +0 -39
  368. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1177809.js +0 -31
  369. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1178598.js +0 -90
  370. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1182832.js +0 -38
  371. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1187524.js +0 -34
  372. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1199401.js +0 -75
  373. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1199637.js +0 -78
  374. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1200351.js +0 -2032
  375. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1201933.js +0 -40
  376. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1203459.js +0 -29
  377. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1207276.js +0 -36
  378. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1213516.js +0 -40
  379. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1213575.js +0 -41
  380. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1215653.js +0 -365
  381. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-124.js +0 -57
  382. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1254366.js +0 -38
  383. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1327557.js +0 -36
  384. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1341167.js +0 -33
  385. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1346700.js +0 -29
  386. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-137.js +0 -46
  387. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1439135.js +0 -40
  388. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-149.js +0 -28
  389. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1493017.js +0 -52
  390. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-155924.js +0 -46
  391. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-171.js +0 -41
  392. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-176.js +0 -50
  393. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-186.js +0 -72
  394. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-187.js +0 -30
  395. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-189.js +0 -36
  396. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-191.js +0 -42
  397. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-1919169.js +0 -40
  398. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-192.js +0 -38
  399. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-193.js +0 -44
  400. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-20070207.js +0 -42
  401. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-201.js +0 -37
  402. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-219.js +0 -176
  403. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-220.js +0 -31
  404. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-221.js +0 -34
  405. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-2249423.js +0 -40
  406. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-225.js +0 -32
  407. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-227.js +0 -33
  408. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-231.js +0 -92
  409. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-233.js +0 -39
  410. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-244.js +0 -67
  411. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-246.js +0 -31
  412. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-253.js +0 -31
  413. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-254.js +0 -58
  414. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-259.js +0 -33
  415. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-260.js +0 -33
  416. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-263.js +0 -38
  417. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-265.js +0 -64
  418. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-267.js +0 -35
  419. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-269.js +0 -49
  420. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-279.js +0 -62
  421. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-284.js +0 -50
  422. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-286.js +0 -36
  423. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-294.js +0 -43
  424. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-312.js +0 -31
  425. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-317.js +0 -31
  426. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-318.js +0 -35
  427. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-326.js +0 -40
  428. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-334.js +0 -90
  429. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-341.js +0 -36
  430. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-345.js +0 -51
  431. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-349.js +0 -32
  432. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-35.js +0 -33
  433. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-351.js +0 -31
  434. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-386.js +0 -47
  435. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-392.js +0 -34
  436. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-394.js +0 -47
  437. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-396.js +0 -39
  438. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-397.js +0 -34
  439. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-399.js +0 -32
  440. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-406.js +0 -69
  441. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-416.js +0 -38
  442. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-475.js +0 -28
  443. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-483.js +0 -35
  444. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-485.js +0 -64
  445. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-486.js +0 -30
  446. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-490.js +0 -48
  447. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-491.js +0 -47
  448. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-492.js +0 -52
  449. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-496.js +0 -39
  450. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-502.js +0 -38
  451. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-503.js +0 -63
  452. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-515.js +0 -40
  453. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-524.js +0 -32
  454. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-526.js +0 -32
  455. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-540.js +0 -47
  456. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-545.js +0 -47
  457. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-57.js +0 -32
  458. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-580.js +0 -55
  459. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-588599.js +0 -31
  460. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-6-9-regexp.js +0 -30
  461. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-662254.js +0 -40
  462. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-666721.js +0 -53
  463. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-667061.js +0 -90
  464. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-670147.js +0 -34
  465. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-674753.js +0 -87
  466. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-676025.js +0 -31
  467. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-678525.js +0 -59
  468. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-682649.js +0 -30
  469. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-69.js +0 -43
  470. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-734862.js +0 -37
  471. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-737588.js +0 -34
  472. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-74.js +0 -41
  473. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-780423.js +0 -39
  474. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-799761.js +0 -92
  475. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-806473.js +0 -60
  476. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-842017.js +0 -60
  477. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-86.js +0 -46
  478. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-87.js +0 -58
  479. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-874178.js +0 -32
  480. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-875031.js +0 -37
  481. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-877615.js +0 -37
  482. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-892742.js +0 -50
  483. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-900055.js +0 -42
  484. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-900966.js +0 -38
  485. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-91.js +0 -38
  486. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-925537.js +0 -42
  487. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-937896.js +0 -50
  488. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-990205.js +0 -35
  489. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-992733.js +0 -35
  490. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-996542.js +0 -40
  491. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-998565.js +0 -51
  492. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-crbug-18639.js +0 -34
  493. data/ext/v8/upstream/2.0.6/test/mjsunit/regress/regress-r3391.js +0 -77
  494. data/ext/v8/upstream/2.0.6/test/mjsunit/scanner.js +0 -30
  495. data/ext/v8/upstream/2.0.6/test/mjsunit/short-circuit-boolean.js +0 -46
  496. data/ext/v8/upstream/2.0.6/test/mjsunit/simple-constructor.js +0 -140
  497. data/ext/v8/upstream/2.0.6/test/mjsunit/sin-cos.js +0 -45
  498. data/ext/v8/upstream/2.0.6/test/mjsunit/smi-negative-zero.js +0 -100
  499. data/ext/v8/upstream/2.0.6/test/mjsunit/smi-ops.js +0 -671
  500. data/ext/v8/upstream/2.0.6/test/mjsunit/sparse-array-reverse.js +0 -131
  501. data/ext/v8/upstream/2.0.6/test/mjsunit/sparse-array.js +0 -41
  502. data/ext/v8/upstream/2.0.6/test/mjsunit/stack-traces.js +0 -204
  503. data/ext/v8/upstream/2.0.6/test/mjsunit/str-to-num.js +0 -158
  504. data/ext/v8/upstream/2.0.6/test/mjsunit/stress-array-push.js +0 -34
  505. data/ext/v8/upstream/2.0.6/test/mjsunit/strict-equals.js +0 -90
  506. data/ext/v8/upstream/2.0.6/test/mjsunit/string-add.js +0 -195
  507. data/ext/v8/upstream/2.0.6/test/mjsunit/string-case.js +0 -28
  508. data/ext/v8/upstream/2.0.6/test/mjsunit/string-charat.js +0 -53
  509. data/ext/v8/upstream/2.0.6/test/mjsunit/string-charcodeat.js +0 -192
  510. data/ext/v8/upstream/2.0.6/test/mjsunit/string-compare-alignment.js +0 -47
  511. data/ext/v8/upstream/2.0.6/test/mjsunit/string-flatten.js +0 -37
  512. data/ext/v8/upstream/2.0.6/test/mjsunit/string-index.js +0 -154
  513. data/ext/v8/upstream/2.0.6/test/mjsunit/string-indexof-1.js +0 -99
  514. data/ext/v8/upstream/2.0.6/test/mjsunit/string-indexof-2.js +0 -68
  515. data/ext/v8/upstream/2.0.6/test/mjsunit/string-lastindexof.js +0 -88
  516. data/ext/v8/upstream/2.0.6/test/mjsunit/string-localecompare.js +0 -40
  517. data/ext/v8/upstream/2.0.6/test/mjsunit/string-match.js +0 -149
  518. data/ext/v8/upstream/2.0.6/test/mjsunit/string-replace-gc.js +0 -57
  519. data/ext/v8/upstream/2.0.6/test/mjsunit/string-replace.js +0 -182
  520. data/ext/v8/upstream/2.0.6/test/mjsunit/string-search.js +0 -30
  521. data/ext/v8/upstream/2.0.6/test/mjsunit/string-split.js +0 -126
  522. data/ext/v8/upstream/2.0.6/test/mjsunit/substr.js +0 -65
  523. data/ext/v8/upstream/2.0.6/test/mjsunit/switch.js +0 -289
  524. data/ext/v8/upstream/2.0.6/test/mjsunit/testcfg.py +0 -137
  525. data/ext/v8/upstream/2.0.6/test/mjsunit/third_party/array-isarray.js +0 -48
  526. data/ext/v8/upstream/2.0.6/test/mjsunit/third_party/array-splice-webkit.js +0 -62
  527. data/ext/v8/upstream/2.0.6/test/mjsunit/third_party/object-keys.js +0 -68
  528. data/ext/v8/upstream/2.0.6/test/mjsunit/third_party/regexp-pcre.js +0 -6603
  529. data/ext/v8/upstream/2.0.6/test/mjsunit/third_party/string-trim.js +0 -107
  530. data/ext/v8/upstream/2.0.6/test/mjsunit/this-in-callbacks.js +0 -47
  531. data/ext/v8/upstream/2.0.6/test/mjsunit/this.js +0 -46
  532. data/ext/v8/upstream/2.0.6/test/mjsunit/throw-and-catch-function.js +0 -50
  533. data/ext/v8/upstream/2.0.6/test/mjsunit/throw-exception-for-null-access.js +0 -37
  534. data/ext/v8/upstream/2.0.6/test/mjsunit/to-precision.js +0 -82
  535. data/ext/v8/upstream/2.0.6/test/mjsunit/to_number_order.js +0 -129
  536. data/ext/v8/upstream/2.0.6/test/mjsunit/tobool.js +0 -36
  537. data/ext/v8/upstream/2.0.6/test/mjsunit/toint32.js +0 -129
  538. data/ext/v8/upstream/2.0.6/test/mjsunit/tools/codemap.js +0 -180
  539. data/ext/v8/upstream/2.0.6/test/mjsunit/tools/consarray.js +0 -60
  540. data/ext/v8/upstream/2.0.6/test/mjsunit/tools/csvparser.js +0 -79
  541. data/ext/v8/upstream/2.0.6/test/mjsunit/tools/logreader.js +0 -98
  542. data/ext/v8/upstream/2.0.6/test/mjsunit/tools/profile.js +0 -348
  543. data/ext/v8/upstream/2.0.6/test/mjsunit/tools/profile_view.js +0 -95
  544. data/ext/v8/upstream/2.0.6/test/mjsunit/tools/splaytree.js +0 -166
  545. data/ext/v8/upstream/2.0.6/test/mjsunit/tools/tickprocessor-test.default +0 -55
  546. data/ext/v8/upstream/2.0.6/test/mjsunit/tools/tickprocessor-test.gc-state +0 -21
  547. data/ext/v8/upstream/2.0.6/test/mjsunit/tools/tickprocessor-test.ignore-unknown +0 -51
  548. data/ext/v8/upstream/2.0.6/test/mjsunit/tools/tickprocessor-test.separate-ic +0 -61
  549. data/ext/v8/upstream/2.0.6/test/mjsunit/tools/tickprocessor.js +0 -409
  550. data/ext/v8/upstream/2.0.6/test/mjsunit/top-level-assignments.js +0 -107
  551. data/ext/v8/upstream/2.0.6/test/mjsunit/touint32.js +0 -72
  552. data/ext/v8/upstream/2.0.6/test/mjsunit/transcendentals.js +0 -49
  553. data/ext/v8/upstream/2.0.6/test/mjsunit/try-catch-extension-object.js +0 -58
  554. data/ext/v8/upstream/2.0.6/test/mjsunit/try-catch-scopes.js +0 -42
  555. data/ext/v8/upstream/2.0.6/test/mjsunit/try-finally-nested.js +0 -46
  556. data/ext/v8/upstream/2.0.6/test/mjsunit/try.js +0 -394
  557. data/ext/v8/upstream/2.0.6/test/mjsunit/typeof.js +0 -40
  558. data/ext/v8/upstream/2.0.6/test/mjsunit/undeletable-functions.js +0 -181
  559. data/ext/v8/upstream/2.0.6/test/mjsunit/unicode-case-overoptimization.js +0 -35
  560. data/ext/v8/upstream/2.0.6/test/mjsunit/unicode-string-to-number.js +0 -46
  561. data/ext/v8/upstream/2.0.6/test/mjsunit/unicode-test.js +0 -9169
  562. data/ext/v8/upstream/2.0.6/test/mjsunit/unusual-constructor.js +0 -38
  563. data/ext/v8/upstream/2.0.6/test/mjsunit/uri.js +0 -78
  564. data/ext/v8/upstream/2.0.6/test/mjsunit/value-callic-prototype-change.js +0 -94
  565. data/ext/v8/upstream/2.0.6/test/mjsunit/var.js +0 -37
  566. data/ext/v8/upstream/2.0.6/test/mjsunit/with-function-expression.js +0 -36
  567. data/ext/v8/upstream/2.0.6/test/mjsunit/with-leave.js +0 -61
  568. data/ext/v8/upstream/2.0.6/test/mjsunit/with-parameter-access.js +0 -47
  569. data/ext/v8/upstream/2.0.6/test/mjsunit/with-prototype.js +0 -44
  570. data/ext/v8/upstream/2.0.6/test/mjsunit/with-value.js +0 -38
  571. data/ext/v8/upstream/2.0.6/test/mozilla/mozilla-shell-emulation.js +0 -37
  572. data/ext/v8/upstream/2.0.6/test/mozilla/mozilla.status +0 -815
  573. data/ext/v8/upstream/2.0.6/test/mozilla/testcfg.py +0 -138
  574. data/ext/v8/upstream/2.0.6/test/sputnik/README +0 -6
  575. data/ext/v8/upstream/2.0.6/test/sputnik/sputnik.status +0 -318
  576. data/ext/v8/upstream/2.0.6/test/sputnik/testcfg.py +0 -112
  577. data/ext/v8/upstream/2.0.6/tools/js2c.pyc +0 -0
  578. data/ext/v8/upstream/2.0.6/tools/jsmin.pyc +0 -0
  579. data/ext/v8/upstream/2.0.6/tools/utils.pyc +0 -0
  580. data/spec/redjs/README.txt +0 -8
@@ -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
- }