fingerprint.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. function h(n, e) {
  2. var t = n[0] >>> 16
  3. , r = 65535 & n[0]
  4. , o = n[1] >>> 16
  5. , i = 65535 & n[1]
  6. , a = e[0] >>> 16
  7. , c = 65535 & e[0]
  8. , u = e[1] >>> 16
  9. , l = 65535 & e[1]
  10. , s = 0
  11. , d = 0
  12. , f = 0
  13. , m = 0;
  14. f += (m += i * l) >>> 16,
  15. m &= 65535,
  16. d += (f += o * l) >>> 16,
  17. f &= 65535,
  18. d += (f += i * u) >>> 16,
  19. f &= 65535,
  20. s += (d += r * l) >>> 16,
  21. d &= 65535,
  22. s += (d += o * u) >>> 16,
  23. d &= 65535,
  24. s += (d += i * c) >>> 16,
  25. d &= 65535,
  26. s += t * l + r * u + o * c + i * a,
  27. s &= 65535,
  28. n[0] = s << 16 | d,
  29. n[1] = f << 16 | m
  30. }
  31. function p(n, e) {
  32. var t = n[0];
  33. 32 === (e %= 64) ? (n[0] = n[1],
  34. n[1] = t) : e < 32 ? (n[0] = t << e | n[1] >>> 32 - e,
  35. n[1] = n[1] << e | t >>> 32 - e) : (e -= 32,
  36. n[0] = n[1] << e | t >>> 32 - e,
  37. n[1] = t << e | n[1] >>> 32 - e)
  38. }
  39. function y(n, e) {
  40. n[0] ^= e[0],
  41. n[1] ^= e[1]
  42. }
  43. function b(n, e) {
  44. 0 !== (e %= 64) && (e < 32 ? (n[0] = n[1] >>> 32 - e,
  45. n[1] = n[1] << e) : (n[0] = n[1] << e - 32,
  46. n[1] = 0))
  47. }
  48. function v(n, e) {
  49. var t = n[0] >>> 16
  50. , r = 65535 & n[0]
  51. , o = n[1] >>> 16
  52. , i = 65535 & n[1]
  53. , a = e[0] >>> 16
  54. , c = 65535 & e[0]
  55. , u = e[1] >>> 16
  56. , l = 0
  57. , s = 0
  58. , d = 0
  59. , f = 0;
  60. d += (f += i + (65535 & e[1])) >>> 16,
  61. f &= 65535,
  62. s += (d += o + u) >>> 16,
  63. d &= 65535,
  64. l += (s += r + c) >>> 16,
  65. s &= 65535,
  66. l += t + a,
  67. l &= 65535,
  68. n[0] = l << 16 | s,
  69. n[1] = d << 16 | f
  70. }
  71. var g = [4283543511, 3981806797]
  72. , w = [3301882366, 444984403];
  73. function L(n) {
  74. var e = [0, n[0] >>> 1];
  75. y(n, e),
  76. h(n, g),
  77. e[1] = n[0] >>> 1,
  78. y(n, e),
  79. h(n, w),
  80. e[1] = n[0] >>> 1,
  81. y(n, e)
  82. }
  83. var k = [2277735313, 289559509]
  84. , V = [1291169091, 658871167]
  85. , S = [0, 5]
  86. , W = [0, 1390208809]
  87. , Z = [0, 944331445];
  88. function x(n, e) {
  89. var t = function(n) {
  90. for (var e = new Uint8Array(n.length), t = 0; t < n.length; t++) {
  91. var r = n.charCodeAt(t);
  92. if (r > 127)
  93. return (new TextEncoder).encode(n);
  94. e[t] = r
  95. }
  96. return e
  97. }(n);
  98. e = e || 0;
  99. var r, o = [0, t.length], i = o[1] % 16, a = o[1] - i, c = [0, e], u = [0, e], l = [0, 0], s = [0, 0];
  100. for (r = 0; r < a; r += 16)
  101. l[0] = t[r + 4] | t[r + 5] << 8 | t[r + 6] << 16 | t[r + 7] << 24,
  102. l[1] = t[r] | t[r + 1] << 8 | t[r + 2] << 16 | t[r + 3] << 24,
  103. s[0] = t[r + 12] | t[r + 13] << 8 | t[r + 14] << 16 | t[r + 15] << 24,
  104. s[1] = t[r + 8] | t[r + 9] << 8 | t[r + 10] << 16 | t[r + 11] << 24,
  105. h(l, k),
  106. p(l, 31),
  107. h(l, V),
  108. y(c, l),
  109. p(c, 27),
  110. v(c, u),
  111. h(c, S),
  112. v(c, W),
  113. h(s, V),
  114. p(s, 33),
  115. h(s, k),
  116. y(u, s),
  117. p(u, 31),
  118. v(u, c),
  119. h(u, S),
  120. v(u, Z);
  121. l[0] = 0,
  122. l[1] = 0,
  123. s[0] = 0,
  124. s[1] = 0;
  125. var d = [0, 0];
  126. switch (i) {
  127. case 15:
  128. d[1] = t[r + 14],
  129. b(d, 48),
  130. y(s, d);
  131. case 14:
  132. d[1] = t[r + 13],
  133. b(d, 40),
  134. y(s, d);
  135. case 13:
  136. d[1] = t[r + 12],
  137. b(d, 32),
  138. y(s, d);
  139. case 12:
  140. d[1] = t[r + 11],
  141. b(d, 24),
  142. y(s, d);
  143. case 11:
  144. d[1] = t[r + 10],
  145. b(d, 16),
  146. y(s, d);
  147. case 10:
  148. d[1] = t[r + 9],
  149. b(d, 8),
  150. y(s, d);
  151. case 9:
  152. d[1] = t[r + 8],
  153. y(s, d),
  154. h(s, V),
  155. p(s, 33),
  156. h(s, k),
  157. y(u, s);
  158. case 8:
  159. d[1] = t[r + 7],
  160. b(d, 56),
  161. y(l, d);
  162. case 7:
  163. d[1] = t[r + 6],
  164. b(d, 48),
  165. y(l, d);
  166. case 6:
  167. d[1] = t[r + 5],
  168. b(d, 40),
  169. y(l, d);
  170. case 5:
  171. d[1] = t[r + 4],
  172. b(d, 32),
  173. y(l, d);
  174. case 4:
  175. d[1] = t[r + 3],
  176. b(d, 24),
  177. y(l, d);
  178. case 3:
  179. d[1] = t[r + 2],
  180. b(d, 16),
  181. y(l, d);
  182. case 2:
  183. d[1] = t[r + 1],
  184. b(d, 8),
  185. y(l, d);
  186. case 1:
  187. d[1] = t[r],
  188. y(l, d),
  189. h(l, k),
  190. p(l, 31),
  191. h(l, V),
  192. y(c, l)
  193. }
  194. return y(c, o),
  195. y(u, o),
  196. v(c, u),
  197. v(u, c),
  198. L(c),
  199. L(u),
  200. v(c, u),
  201. v(u, c),
  202. ("00000000" + (c[0] >>> 0).toString(16)).slice(-8) + ("00000000" + (c[1] >>> 0).toString(16)).slice(-8) + ("00000000" + (u[0] >>> 0).toString(16)).slice(-8) + ("00000000" + (u[1] >>> 0).toString(16)).slice(-8)
  203. }
  204. function Mn(n) {
  205. for (var e = "", t = 0, r = Object.keys(n).sort(); t < r.length; t++) {
  206. var o = r[t]
  207. , i = n[o]
  208. , a = "error" in i ? "error" : JSON.stringify(i.value);
  209. e += "".concat(e ? "|" : "").concat(o.replace(/([:|\\])/g, "\\$1"), ":").concat(a)
  210. }
  211. return e
  212. }
  213. function getFingerprint(n) {
  214. return x(Mn(n))
  215. }