@noble/curves 1.9.7 → 2.0.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (242) hide show
  1. package/README.md +520 -505
  2. package/abstract/bls.d.ts +58 -120
  3. package/abstract/bls.d.ts.map +1 -1
  4. package/abstract/bls.js +108 -152
  5. package/abstract/bls.js.map +1 -1
  6. package/abstract/curve.d.ts +18 -54
  7. package/abstract/curve.d.ts.map +1 -1
  8. package/abstract/curve.js +30 -49
  9. package/abstract/curve.js.map +1 -1
  10. package/abstract/edwards.d.ts +18 -77
  11. package/abstract/edwards.d.ts.map +1 -1
  12. package/abstract/edwards.js +68 -144
  13. package/abstract/edwards.js.map +1 -1
  14. package/abstract/fft.js +14 -27
  15. package/abstract/fft.js.map +1 -1
  16. package/abstract/hash-to-curve.d.ts +35 -47
  17. package/abstract/hash-to-curve.d.ts.map +1 -1
  18. package/abstract/hash-to-curve.js +42 -46
  19. package/abstract/hash-to-curve.js.map +1 -1
  20. package/abstract/modular.d.ts +5 -17
  21. package/abstract/modular.d.ts.map +1 -1
  22. package/abstract/modular.js +170 -169
  23. package/abstract/modular.js.map +1 -1
  24. package/abstract/montgomery.d.ts +7 -12
  25. package/abstract/montgomery.d.ts.map +1 -1
  26. package/abstract/montgomery.js +22 -29
  27. package/abstract/montgomery.js.map +1 -1
  28. package/abstract/oprf.d.ts +282 -0
  29. package/abstract/oprf.d.ts.map +1 -0
  30. package/abstract/oprf.js +297 -0
  31. package/abstract/oprf.js.map +1 -0
  32. package/abstract/poseidon.d.ts.map +1 -1
  33. package/abstract/poseidon.js +26 -31
  34. package/abstract/poseidon.js.map +1 -1
  35. package/abstract/tower.d.ts.map +1 -1
  36. package/abstract/tower.js +43 -19
  37. package/abstract/tower.js.map +1 -1
  38. package/abstract/weierstrass.d.ts +77 -168
  39. package/abstract/weierstrass.d.ts.map +1 -1
  40. package/abstract/weierstrass.js +184 -389
  41. package/abstract/weierstrass.js.map +1 -1
  42. package/bls12-381.d.ts +5 -11
  43. package/bls12-381.d.ts.map +1 -1
  44. package/bls12-381.js +161 -181
  45. package/bls12-381.js.map +1 -1
  46. package/bn254.d.ts +59 -11
  47. package/bn254.d.ts.map +1 -1
  48. package/bn254.js +69 -97
  49. package/bn254.js.map +1 -1
  50. package/ed25519.d.ts +33 -48
  51. package/ed25519.d.ts.map +1 -1
  52. package/ed25519.js +147 -161
  53. package/ed25519.js.map +1 -1
  54. package/ed448.d.ts +27 -36
  55. package/ed448.d.ts.map +1 -1
  56. package/ed448.js +143 -164
  57. package/ed448.js.map +1 -1
  58. package/index.d.ts +1 -0
  59. package/index.js +20 -4
  60. package/index.js.map +1 -1
  61. package/misc.d.ts +10 -14
  62. package/misc.d.ts.map +1 -1
  63. package/misc.js +53 -62
  64. package/misc.js.map +1 -1
  65. package/nist.d.ts +31 -16
  66. package/nist.d.ts.map +1 -1
  67. package/nist.js +75 -64
  68. package/nist.js.map +1 -1
  69. package/package.json +20 -234
  70. package/secp256k1.d.ts +17 -30
  71. package/secp256k1.d.ts.map +1 -1
  72. package/secp256k1.js +59 -73
  73. package/secp256k1.js.map +1 -1
  74. package/src/abstract/bls.ts +207 -354
  75. package/src/abstract/curve.ts +25 -84
  76. package/src/abstract/edwards.ts +68 -193
  77. package/src/abstract/hash-to-curve.ts +71 -85
  78. package/src/abstract/modular.ts +150 -134
  79. package/src/abstract/montgomery.ts +28 -35
  80. package/src/abstract/oprf.ts +600 -0
  81. package/src/abstract/poseidon.ts +6 -8
  82. package/src/abstract/tower.ts +0 -3
  83. package/src/abstract/weierstrass.ts +203 -525
  84. package/src/bls12-381.ts +133 -139
  85. package/src/bn254.ts +69 -93
  86. package/src/ed25519.ts +106 -133
  87. package/src/ed448.ts +111 -138
  88. package/src/index.ts +19 -3
  89. package/src/misc.ts +68 -51
  90. package/src/nist.ts +77 -70
  91. package/src/secp256k1.ts +46 -81
  92. package/src/utils.ts +67 -137
  93. package/src/webcrypto.ts +403 -0
  94. package/utils.d.ts +31 -38
  95. package/utils.d.ts.map +1 -1
  96. package/utils.js +66 -185
  97. package/utils.js.map +1 -1
  98. package/webcrypto.d.ts +99 -0
  99. package/webcrypto.d.ts.map +1 -0
  100. package/webcrypto.js +256 -0
  101. package/webcrypto.js.map +1 -0
  102. package/_shortw_utils.d.ts +0 -19
  103. package/_shortw_utils.d.ts.map +0 -1
  104. package/_shortw_utils.js +0 -20
  105. package/_shortw_utils.js.map +0 -1
  106. package/abstract/utils.d.ts +0 -78
  107. package/abstract/utils.d.ts.map +0 -1
  108. package/abstract/utils.js +0 -73
  109. package/abstract/utils.js.map +0 -1
  110. package/esm/_shortw_utils.d.ts +0 -19
  111. package/esm/_shortw_utils.d.ts.map +0 -1
  112. package/esm/_shortw_utils.js +0 -16
  113. package/esm/_shortw_utils.js.map +0 -1
  114. package/esm/abstract/bls.d.ts +0 -190
  115. package/esm/abstract/bls.d.ts.map +0 -1
  116. package/esm/abstract/bls.js +0 -408
  117. package/esm/abstract/bls.js.map +0 -1
  118. package/esm/abstract/curve.d.ts +0 -231
  119. package/esm/abstract/curve.d.ts.map +0 -1
  120. package/esm/abstract/curve.js +0 -465
  121. package/esm/abstract/curve.js.map +0 -1
  122. package/esm/abstract/edwards.d.ts +0 -243
  123. package/esm/abstract/edwards.d.ts.map +0 -1
  124. package/esm/abstract/edwards.js +0 -627
  125. package/esm/abstract/edwards.js.map +0 -1
  126. package/esm/abstract/fft.d.ts +0 -122
  127. package/esm/abstract/fft.d.ts.map +0 -1
  128. package/esm/abstract/fft.js +0 -425
  129. package/esm/abstract/fft.js.map +0 -1
  130. package/esm/abstract/hash-to-curve.d.ts +0 -102
  131. package/esm/abstract/hash-to-curve.d.ts.map +0 -1
  132. package/esm/abstract/hash-to-curve.js +0 -203
  133. package/esm/abstract/hash-to-curve.js.map +0 -1
  134. package/esm/abstract/modular.d.ts +0 -171
  135. package/esm/abstract/modular.d.ts.map +0 -1
  136. package/esm/abstract/modular.js +0 -530
  137. package/esm/abstract/modular.js.map +0 -1
  138. package/esm/abstract/montgomery.d.ts +0 -30
  139. package/esm/abstract/montgomery.d.ts.map +0 -1
  140. package/esm/abstract/montgomery.js +0 -157
  141. package/esm/abstract/montgomery.js.map +0 -1
  142. package/esm/abstract/poseidon.d.ts +0 -68
  143. package/esm/abstract/poseidon.d.ts.map +0 -1
  144. package/esm/abstract/poseidon.js +0 -296
  145. package/esm/abstract/poseidon.js.map +0 -1
  146. package/esm/abstract/tower.d.ts +0 -95
  147. package/esm/abstract/tower.d.ts.map +0 -1
  148. package/esm/abstract/tower.js +0 -714
  149. package/esm/abstract/tower.js.map +0 -1
  150. package/esm/abstract/utils.d.ts +0 -78
  151. package/esm/abstract/utils.d.ts.map +0 -1
  152. package/esm/abstract/utils.js +0 -70
  153. package/esm/abstract/utils.js.map +0 -1
  154. package/esm/abstract/weierstrass.d.ts +0 -416
  155. package/esm/abstract/weierstrass.d.ts.map +0 -1
  156. package/esm/abstract/weierstrass.js +0 -1413
  157. package/esm/abstract/weierstrass.js.map +0 -1
  158. package/esm/bls12-381.d.ts +0 -16
  159. package/esm/bls12-381.d.ts.map +0 -1
  160. package/esm/bls12-381.js +0 -705
  161. package/esm/bls12-381.js.map +0 -1
  162. package/esm/bn254.d.ts +0 -18
  163. package/esm/bn254.d.ts.map +0 -1
  164. package/esm/bn254.js +0 -214
  165. package/esm/bn254.js.map +0 -1
  166. package/esm/ed25519.d.ts +0 -106
  167. package/esm/ed25519.d.ts.map +0 -1
  168. package/esm/ed25519.js +0 -467
  169. package/esm/ed25519.js.map +0 -1
  170. package/esm/ed448.d.ts +0 -100
  171. package/esm/ed448.d.ts.map +0 -1
  172. package/esm/ed448.js +0 -459
  173. package/esm/ed448.js.map +0 -1
  174. package/esm/index.d.ts +0 -2
  175. package/esm/index.d.ts.map +0 -1
  176. package/esm/index.js +0 -17
  177. package/esm/index.js.map +0 -1
  178. package/esm/jubjub.d.ts +0 -12
  179. package/esm/jubjub.d.ts.map +0 -1
  180. package/esm/jubjub.js +0 -12
  181. package/esm/jubjub.js.map +0 -1
  182. package/esm/misc.d.ts +0 -19
  183. package/esm/misc.d.ts.map +0 -1
  184. package/esm/misc.js +0 -109
  185. package/esm/misc.js.map +0 -1
  186. package/esm/nist.d.ts +0 -21
  187. package/esm/nist.d.ts.map +0 -1
  188. package/esm/nist.js +0 -132
  189. package/esm/nist.js.map +0 -1
  190. package/esm/p256.d.ts +0 -16
  191. package/esm/p256.d.ts.map +0 -1
  192. package/esm/p256.js +0 -16
  193. package/esm/p256.js.map +0 -1
  194. package/esm/p384.d.ts +0 -16
  195. package/esm/p384.d.ts.map +0 -1
  196. package/esm/p384.js +0 -16
  197. package/esm/p384.js.map +0 -1
  198. package/esm/p521.d.ts +0 -16
  199. package/esm/p521.d.ts.map +0 -1
  200. package/esm/p521.js +0 -16
  201. package/esm/p521.js.map +0 -1
  202. package/esm/package.json +0 -4
  203. package/esm/pasta.d.ts +0 -10
  204. package/esm/pasta.d.ts.map +0 -1
  205. package/esm/pasta.js +0 -10
  206. package/esm/pasta.js.map +0 -1
  207. package/esm/secp256k1.d.ts +0 -89
  208. package/esm/secp256k1.d.ts.map +0 -1
  209. package/esm/secp256k1.js +0 -294
  210. package/esm/secp256k1.js.map +0 -1
  211. package/esm/utils.d.ts +0 -110
  212. package/esm/utils.d.ts.map +0 -1
  213. package/esm/utils.js +0 -322
  214. package/esm/utils.js.map +0 -1
  215. package/jubjub.d.ts +0 -12
  216. package/jubjub.d.ts.map +0 -1
  217. package/jubjub.js +0 -15
  218. package/jubjub.js.map +0 -1
  219. package/p256.d.ts +0 -16
  220. package/p256.d.ts.map +0 -1
  221. package/p256.js +0 -13
  222. package/p256.js.map +0 -1
  223. package/p384.d.ts +0 -16
  224. package/p384.d.ts.map +0 -1
  225. package/p384.js +0 -13
  226. package/p384.js.map +0 -1
  227. package/p521.d.ts +0 -16
  228. package/p521.d.ts.map +0 -1
  229. package/p521.js +0 -13
  230. package/p521.js.map +0 -1
  231. package/pasta.d.ts +0 -10
  232. package/pasta.d.ts.map +0 -1
  233. package/pasta.js +0 -13
  234. package/pasta.js.map +0 -1
  235. package/src/_shortw_utils.ts +0 -21
  236. package/src/abstract/utils.ts +0 -80
  237. package/src/jubjub.ts +0 -12
  238. package/src/p256.ts +0 -15
  239. package/src/p384.ts +0 -15
  240. package/src/p521.ts +0 -15
  241. package/src/package.json +0 -3
  242. package/src/pasta.ts +0 -9
@@ -1,6 +1,3 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.montgomery = montgomery;
4
1
  /**
5
2
  * Montgomery curve methods. It's not really whole montgomery curve,
6
3
  * just bunch of very specific methods for X25519 / X448 from
@@ -8,25 +5,26 @@ exports.montgomery = montgomery;
8
5
  * @module
9
6
  */
10
7
  /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
11
- const utils_ts_1 = require("../utils.js");
12
- const modular_ts_1 = require("./modular.js");
8
+ import { abytes, aInRange, bytesToNumberLE, copyBytes, numberToBytesLE, randomBytes, validateObject, } from "../utils.js";
9
+ import { createKeygen } from "./curve.js";
10
+ import { mod } from "./modular.js";
13
11
  const _0n = BigInt(0);
14
12
  const _1n = BigInt(1);
15
13
  const _2n = BigInt(2);
16
14
  function validateOpts(curve) {
17
- (0, utils_ts_1._validateObject)(curve, {
15
+ validateObject(curve, {
18
16
  adjustScalarBytes: 'function',
19
17
  powPminus2: 'function',
20
18
  });
21
19
  return Object.freeze({ ...curve });
22
20
  }
23
- function montgomery(curveDef) {
21
+ export function montgomery(curveDef) {
24
22
  const CURVE = validateOpts(curveDef);
25
23
  const { P, type, adjustScalarBytes, powPminus2, randomBytes: rand } = CURVE;
26
24
  const is25519 = type === 'x25519';
27
25
  if (!is25519 && type !== 'x448')
28
26
  throw new Error('invalid type');
29
- const randomBytes_ = rand || utils_ts_1.randomBytes;
27
+ const randomBytes_ = rand || randomBytes;
30
28
  const montgomeryBits = is25519 ? 255 : 448;
31
29
  const fieldLen = is25519 ? 32 : 56;
32
30
  const Gu = is25519 ? BigInt(9) : BigInt(5);
@@ -43,13 +41,13 @@ function montgomery(curveDef) {
43
41
  ? BigInt(8) * _2n ** BigInt(251) - _1n
44
42
  : BigInt(4) * _2n ** BigInt(445) - _1n;
45
43
  const maxScalar = minScalar + maxAdded + _1n; // (inclusive)
46
- const modP = (n) => (0, modular_ts_1.mod)(n, P);
44
+ const modP = (n) => mod(n, P);
47
45
  const GuBytes = encodeU(Gu);
48
46
  function encodeU(u) {
49
- return (0, utils_ts_1.numberToBytesLE)(modP(u), fieldLen);
47
+ return numberToBytesLE(modP(u), fieldLen);
50
48
  }
51
49
  function decodeU(u) {
52
- const _u = (0, utils_ts_1.ensureBytes)('u coordinate', u, fieldLen);
50
+ const _u = copyBytes(abytes(u, fieldLen, 'uCoordinate'));
53
51
  // RFC: When receiving such an array, implementations of X25519
54
52
  // (but not X448) MUST mask the most significant bit in the final byte.
55
53
  if (is25519)
@@ -58,10 +56,10 @@ function montgomery(curveDef) {
58
56
  // if they had been reduced modulo the field prime. The non-canonical
59
57
  // values are 2^255 - 19 through 2^255 - 1 for X25519 and 2^448 - 2^224
60
58
  // - 1 through 2^448 - 1 for X448.
61
- return modP((0, utils_ts_1.bytesToNumberLE)(_u));
59
+ return modP(bytesToNumberLE(_u));
62
60
  }
63
61
  function decodeScalar(scalar) {
64
- return (0, utils_ts_1.bytesToNumberLE)(adjustScalarBytes((0, utils_ts_1.ensureBytes)('scalar', scalar, fieldLen)));
62
+ return bytesToNumberLE(adjustScalarBytes(copyBytes(abytes(scalar, fieldLen, 'scalar'))));
65
63
  }
66
64
  function scalarMult(scalar, u) {
67
65
  const pu = montgomeryLadder(decodeU(u), decodeScalar(scalar));
@@ -76,6 +74,8 @@ function montgomery(curveDef) {
76
74
  function scalarMultBase(scalar) {
77
75
  return scalarMult(scalar, GuBytes);
78
76
  }
77
+ const getPublicKey = scalarMultBase;
78
+ const getSharedSecret = scalarMult;
79
79
  // cswap from RFC7748 "example code"
80
80
  function cswap(swap, x_2, x_3) {
81
81
  // dummy = mask(swap) AND (x_2 XOR x_3)
@@ -93,8 +93,8 @@ function montgomery(curveDef) {
93
93
  * @returns new Point on Montgomery curve
94
94
  */
95
95
  function montgomeryLadder(u, scalar) {
96
- (0, utils_ts_1.aInRange)('u', u, _0n, P);
97
- (0, utils_ts_1.aInRange)('scalar', scalar, minScalar, maxScalar);
96
+ aInRange('u', u, _0n, P);
97
+ aInRange('scalar', scalar, minScalar, maxScalar);
98
98
  const k = scalar;
99
99
  const x_1 = u;
100
100
  let x_2 = _1n;
@@ -135,26 +135,19 @@ function montgomery(curveDef) {
135
135
  seed: fieldLen,
136
136
  };
137
137
  const randomSecretKey = (seed = randomBytes_(fieldLen)) => {
138
- (0, utils_ts_1.abytes)(seed, lengths.seed);
138
+ abytes(seed, lengths.seed, 'seed');
139
139
  return seed;
140
140
  };
141
- function keygen(seed) {
142
- const secretKey = randomSecretKey(seed);
143
- return { secretKey, publicKey: scalarMultBase(secretKey) };
144
- }
145
- const utils = {
146
- randomSecretKey,
147
- randomPrivateKey: randomSecretKey,
148
- };
149
- return {
150
- keygen,
151
- getSharedSecret: (secretKey, publicKey) => scalarMult(secretKey, publicKey),
152
- getPublicKey: (secretKey) => scalarMultBase(secretKey),
141
+ const utils = { randomSecretKey };
142
+ return Object.freeze({
143
+ keygen: createKeygen(randomSecretKey, getPublicKey),
144
+ getSharedSecret,
145
+ getPublicKey,
153
146
  scalarMult,
154
147
  scalarMultBase,
155
148
  utils,
156
149
  GuBytes: GuBytes.slice(),
157
150
  lengths,
158
- };
151
+ });
159
152
  }
160
153
  //# sourceMappingURL=montgomery.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"montgomery.js","sourceRoot":"","sources":["../src/abstract/montgomery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"montgomery.js","sourceRoot":"","sources":["../src/abstract/montgomery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,282 @@
1
+ /**
2
+ * RFC 9497: Oblivious Pseudorandom Functions (OPRFs) Using Prime-Order Groups.
3
+ * https://www.rfc-editor.org/rfc/rfc9497
4
+ *
5
+
6
+ OPRF allows to interactively create an `Output = PRF(Input, serverSecretKey)`:
7
+
8
+ - Server cannot calculate Output by itself: it doesn't know Input
9
+ - Client cannot calculate Output by itself: it doesn't know server secretKey
10
+ - An attacker interception the communication can't restore Input/Output/serverSecretKey and can't
11
+ link Input to some value.
12
+
13
+ ## Issues
14
+
15
+ - Low-entropy inputs (e.g. password '123') enable brute-forced dictionary attacks by the server
16
+ (solveable by domain separation in POPRF)
17
+ - High-level protocol needs to be constructed on top, because OPRF is low-level
18
+
19
+ ## Use cases
20
+
21
+ 1. **Password-Authenticated Key Exchange (PAKE):** Enables secure password login (e.g., OPAQUE)
22
+ without revealing the password to the server.
23
+ 2. **Private Set Intersection (PSI):** Allows two parties to compute the intersection of their
24
+ private sets without revealing non-intersecting elements.
25
+ 3. **Anonymous Credential Systems:** Supports issuance of anonymous, unlinkable credentials
26
+ (e.g., Privacy Pass) using blind OPRF evaluation.
27
+ 4. **Private Information Retrieval (PIR):** Helps users query databases without revealing which
28
+ item they accessed.
29
+ 5. **Encrypted Search / Secure Indexing:** Enables keyword search over encrypted data while keeping
30
+ queries private.
31
+ 6. **Spam Prevention and Rate-Limiting:** Issues anonymous tokens to prevent abuse
32
+ (e.g., CAPTCHA bypass) without compromising user privacy.
33
+
34
+ ## Modes
35
+
36
+ - OPRF: simple mode, client doesn't need to know server public key
37
+ - VOPRF: verifable mode, allows client to verify that server used secret key corresponding to known public key
38
+ - POPRF: partially oblivious mode, VOPRF + domain separation
39
+
40
+ There is also non-interactive mode (Evaluate) that supports creating Output in non-interactive mode with knowledge of secret key.
41
+
42
+ Flow:
43
+ - (once) Server generates secret and public keys, distributes public keys to clients
44
+ - deterministically: `deriveKeyPair` or just random: `generateKeyPair`
45
+ - Client blinds input: `blind(secretInput)`
46
+ - Server evaluates blinded input: `blindEvaluate` generated by client, sends result to client
47
+ - Client creates output using result of evaluation via 'finalize'
48
+
49
+ * @module
50
+ */
51
+ /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */
52
+ import { randomBytes } from '../utils.ts';
53
+ import { type CurvePoint, type CurvePointCons } from './curve.ts';
54
+ import { type H2CDSTOpts } from './hash-to-curve.ts';
55
+ export type PointBytes = Uint8Array;
56
+ export type ScalarBytes = Uint8Array;
57
+ export type Bytes = Uint8Array;
58
+ export type RNG = typeof randomBytes;
59
+ export type OPRFOpts<P extends CurvePoint<any, P>> = {
60
+ name: string;
61
+ Point: CurvePointCons<P>;
62
+ hash(msg: Bytes): Bytes;
63
+ hashToScalar(msg: Uint8Array, options: H2CDSTOpts): bigint;
64
+ hashToGroup(msg: Uint8Array, options: H2CDSTOpts): P;
65
+ };
66
+ export type OPRFKeys = {
67
+ secretKey: ScalarBytes;
68
+ publicKey: PointBytes;
69
+ };
70
+ export type OPRFBlind = {
71
+ blind: Uint8Array;
72
+ blinded: Uint8Array;
73
+ };
74
+ export type OPRFBlindEval = {
75
+ evaluated: PointBytes;
76
+ proof: Bytes;
77
+ };
78
+ export type OPRFBlindEvalBatch = {
79
+ evaluated: PointBytes[];
80
+ proof: Bytes;
81
+ };
82
+ export type OPRFFinalizeItem = {
83
+ input: Bytes;
84
+ blind: ScalarBytes;
85
+ evaluated: PointBytes;
86
+ blinded: PointBytes;
87
+ };
88
+ /**
89
+ * Represents a full OPRF ciphersuite implementation according to RFC 9497.
90
+ * This object bundles the three protocol variants (OPRF, VOPRF, POPRF) for a specific
91
+ * prime-order group and hash function combination.
92
+ *
93
+ * @see https://www.rfc-editor.org/rfc/rfc9497.html
94
+ */
95
+ export type OPRF = {
96
+ /**
97
+ * The unique identifier for the ciphersuite, e.g., "ristretto255-SHA512".
98
+ * This name is used for domain separation to prevent cross-protocol attacks.
99
+ */
100
+ readonly name: string;
101
+ /**
102
+ * The base Oblivious Pseudorandom Function (OPRF) mode (mode 0x00).
103
+ * This is a two-party protocol between a client and a server to compute F(k, x)
104
+ * where 'k' is the server's key and 'x' is the client's input.
105
+ *
106
+ * The client learns the output F(k, x) but nothing about 'k'.
107
+ * The server learns nothing about 'x' or F(k, x).
108
+ * This mode is NOT verifiable; the client cannot prove the server used a specific key.
109
+ */
110
+ readonly oprf: {
111
+ /**
112
+ * (Server-side) Generates a new random private/public key pair for the server.
113
+ * @returns A new key pair.
114
+ */
115
+ generateKeyPair(): OPRFKeys;
116
+ /**
117
+ * (Server-side) Deterministically derives a private/public key pair from a seed.
118
+ * @param seed A 32-byte cryptographically secure random seed.
119
+ * @param keyInfo An optional byte string for domain separation.
120
+ * @returns The derived key pair.
121
+ */
122
+ deriveKeyPair(seed: Bytes, keyInfo: Bytes): OPRFKeys;
123
+ /**
124
+ * (Client-side) The first step of the protocol. The client blinds its private input.
125
+ * @param input The client's private input bytes.
126
+ * @param rng An optional cryptographically secure random number generator.
127
+ * @returns An object containing the `blind` scalar (which the client MUST keep secret)
128
+ * and the `blinded` element (which the client sends to the server).
129
+ */
130
+ blind(input: Bytes, rng?: RNG): OPRFBlind;
131
+ /**
132
+ * (Server-side) The second step. The server evaluates the client's blinded element
133
+ * using its secret key.
134
+ * @param secretKey The server's private key.
135
+ * @param blinded The blinded group element received from the client.
136
+ * @returns The evaluated group element, to be sent back to the client.
137
+ */
138
+ blindEvaluate(secretKey: ScalarBytes, blinded: PointBytes): PointBytes;
139
+ /**
140
+ * (Client-side) The final step. The client unblinds the server's response to
141
+ * compute the final OPRF output.
142
+ * @param input The original private input from the `blind` step.
143
+ * @param blind The secret scalar from the `blind` step.
144
+ * @param evaluated The evaluated group element received from the server.
145
+ * @returns The final OPRF output, `Hash(len(input)||input||len(unblinded)||unblinded||"Finalize")`.
146
+ */
147
+ finalize(input: Bytes, blind: ScalarBytes, evaluated: PointBytes): Bytes;
148
+ };
149
+ /**
150
+ * The Verifiable Oblivious Pseudorandom Function (VOPRF) mode (mode 0x01).
151
+ * This mode extends the base OPRF by providing a proof that the server used the
152
+ * secret key corresponding to its known public key.
153
+ */
154
+ readonly voprf: {
155
+ /** (Server-side) Generates a key pair for the VOPRF mode. */
156
+ generateKeyPair(): OPRFKeys;
157
+ /** (Server-side) Deterministically derives a key pair for the VOPRF mode. */
158
+ deriveKeyPair(seed: Bytes, keyInfo: Bytes): OPRFKeys;
159
+ /** (Client-side) Blinds the client's private input for the VOPRF protocol. */
160
+ blind(input: Bytes, rng?: RNG): OPRFBlind;
161
+ /**
162
+ * (Server-side) Evaluates the client's blinded element and generates a DLEQ proof
163
+ * of correctness.
164
+ * @param secretKey The server's private key.
165
+ * @param publicKey The server's public key, used in proof generation.
166
+ * @param blinded The blinded group element received from the client.
167
+ * @param rng An optional cryptographically secure random number generator for the proof.
168
+ * @returns The evaluated element and a proof of correct computation.
169
+ */
170
+ blindEvaluate(secretKey: ScalarBytes, publicKey: PointBytes, blinded: PointBytes, rng?: RNG): OPRFBlindEval;
171
+ /**
172
+ * (Server-side) An optimized batch version of `blindEvaluate`. It evaluates multiple
173
+ * blinded elements and produces a single, constant-size proof for the entire batch,
174
+ * amortizing the cost of proof generation.
175
+ * @param secretKey The server's private key.
176
+ * @param publicKey The server's public key.
177
+ * @param blinded An array of blinded group elements from one or more clients.
178
+ * @param rng An optional cryptographically secure random number generator for the proof.
179
+ * @returns An array of evaluated elements and a single proof for the batch.
180
+ */
181
+ blindEvaluateBatch(secretKey: ScalarBytes, publicKey: PointBytes, blinded: PointBytes[], rng?: RNG): OPRFBlindEvalBatch;
182
+ /**
183
+ * (Client-side) The final step. The client verifies the server's proof, and if valid,
184
+ * unblinds the result to compute the final VOPRF output.
185
+ * @param input The original private input.
186
+ * @param blind The secret scalar from the `blind` step.
187
+ * @param evaluated The evaluated element from the server.
188
+ * @param blinded The blinded element sent to the server (needed for proof verification).
189
+ * @param publicKey The server's public key against which the proof is verified.
190
+ * @param proof The DLEQ proof from the server.
191
+ * @returns The final VOPRF output.
192
+ * @throws If the proof verification fails.
193
+ */
194
+ finalize(input: Bytes, blind: ScalarBytes, evaluated: PointBytes, blinded: PointBytes, publicKey: PointBytes, proof: Bytes): Bytes;
195
+ /**
196
+ * (Client-side) The batch-aware version of `finalize`. It verifies a single batch proof
197
+ * against a list of corresponding inputs and outputs.
198
+ * @param items An array of objects, each containing the parameters for a single finalization.
199
+ * @param publicKey The server's public key.
200
+ * @param proof The single DLEQ proof for the entire batch.
201
+ * @returns An array of final VOPRF outputs, one for each item in the input.
202
+ * @throws If the proof verification fails.
203
+ */
204
+ finalizeBatch(items: OPRFFinalizeItem[], publicKey: PointBytes, proof: Bytes): Bytes[];
205
+ };
206
+ /**
207
+ * A factory for the Partially Oblivious Pseudorandom Function (POPRF) mode (mode 0x02).
208
+ * This mode extends VOPRF to include a public `info` parameter, known to both client and
209
+ * server, which is cryptographically bound to the final output.
210
+ * This is useful for domain separation at the application level.
211
+ * @param info A public byte string to be mixed into the computation.
212
+ * @returns An object with the POPRF protocol functions.
213
+ */
214
+ readonly poprf: (info: Bytes) => {
215
+ /** (Server-side) Generates a key pair for the POPRF mode. */
216
+ generateKeyPair(): OPRFKeys;
217
+ /** (Server-side) Deterministically derives a key pair for the POPRF mode. */
218
+ deriveKeyPair(seed: Bytes, keyInfo: Bytes): OPRFKeys;
219
+ /**
220
+ * (Client-side) Blinds the client's private input and computes the "tweaked key".
221
+ * The tweaked key is a public value derived from the server's public key and the public `info`.
222
+ * @param input The client's private input.
223
+ * @param publicKey The server's public key.
224
+ * @param rng An optional cryptographically secure random number generator.
225
+ * @returns The `blind`, `blinded` element, and the `tweakedKey` which the client uses for verification.
226
+ */
227
+ blind(input: Bytes, publicKey: PointBytes, rng?: RNG): OPRFBlind & {
228
+ tweakedKey: PointBytes;
229
+ };
230
+ /**
231
+ * (Server-side) Evaluates the blinded element using a key derived from its secret key and the public `info`.
232
+ * It generates a DLEQ proof against the tweaked key.
233
+ * @param secretKey The server's private key.
234
+ * @param blinded The blinded element from the client.
235
+ * @param rng An optional RNG for the proof.
236
+ * @returns The evaluated element and a proof of correct computation.
237
+ */
238
+ blindEvaluate(secretKey: ScalarBytes, blinded: PointBytes, rng?: RNG): OPRFBlindEval;
239
+ /**
240
+ * (Server-side) A batch-aware version of `blindEvaluate` for the POPRF mode.
241
+ * @param secretKey The server's private key.
242
+ * @param blinded An array of blinded elements.
243
+ * @param rng An optional RNG for the proof.
244
+ * @returns An array of evaluated elements and a single proof for the batch.
245
+ */
246
+ blindEvaluateBatch(secretKey: ScalarBytes, blinded: PointBytes[], rng: RNG): OPRFBlindEvalBatch;
247
+ /**
248
+ * (Client-side) A batch-aware version of `finalize` for the POPRF mode.
249
+ * It verifies the proof against the tweaked key.
250
+ * @param items An array containing the parameters for each finalization.
251
+ * @param proof The single DLEQ proof for the batch.
252
+ * @param tweakedKey The tweaked key corresponding to the proof (all items must share the same `info` and `publicKey`).
253
+ * @returns An array of final POPRF outputs.
254
+ * @throws If proof verification fails.
255
+ */
256
+ finalizeBatch(items: OPRFFinalizeItem[], proof: Bytes, tweakedKey: PointBytes): Bytes[];
257
+ /**
258
+ * (Client-side) Finalizes the POPRF protocol. It verifies the server's proof against the
259
+ * `tweakedKey` computed in the `blind` step. The final output is bound to the public `info`.
260
+ * @param input The original private input.
261
+ * @param blind The secret scalar.
262
+ * @param evaluated The evaluated element from the server.
263
+ * @param blinded The blinded element sent to the server.
264
+ * @param proof The DLEQ proof from the server.
265
+ * @param tweakedKey The public tweaked key computed by the client during the `blind` step.
266
+ * @returns The final POPRF output.
267
+ * @throws If proof verification fails.
268
+ */
269
+ finalize(input: Bytes, blind: ScalarBytes, evaluated: PointBytes, blinded: PointBytes, proof: Bytes, tweakedKey: PointBytes): Bytes;
270
+ /**
271
+ * A non-interactive evaluation function for an entity that knows all inputs.
272
+ * Computes the final POPRF output directly. Useful for testing or specific applications
273
+ * where the server needs to compute the output for a known input.
274
+ * @param secretKey The server's private key.
275
+ * @param input The client's private input.
276
+ * @returns The final POPRF output.
277
+ */
278
+ evaluate(secretKey: ScalarBytes, input: Bytes): Bytes;
279
+ };
280
+ };
281
+ export declare function createORPF<P extends CurvePoint<any, P>>(opts: OPRFOpts<P>): OPRF;
282
+ //# sourceMappingURL=oprf.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oprf.d.ts","sourceRoot":"","sources":["../src/abstract/oprf.ts"],"names":[],"mappings":"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"}