@gerege-systems/eid-mongolia-sdk 0.6.0 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- package/dist/{browser-PhjcbuAN.d.cts → browser-BU9ShPWO.d.cts} +6 -0
- package/dist/{browser-PhjcbuAN.d.ts → browser-BU9ShPWO.d.ts} +6 -0
- package/dist/browser.d.cts +1 -1
- package/dist/browser.d.ts +1 -1
- package/dist/index.cjs +15 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +15 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -160,6 +160,9 @@ OK ирж болзошгүй. Иймд `ResponseValidator`:
|
|
|
160
160
|
4. Гарын үсгийг иргэний public key-ээр шалгана:
|
|
161
161
|
- **auth** → ACSP_V2 payload (`smart-id|ACSP_V2|serverRandom|rpChallenge|userChallenge|B64(rpName)|B64(brokeredRpName)|B64(SHA-256(interactions))|interactionTypeUsed|initialCallbackUrl|flowType`, hash = хүсэлтийн `hashAlgorithm`) дээр — `flowType`, `userChallenge`, `serverRandom` ба алгоритмын downgrade-ийг мөн шалгана;
|
|
162
162
|
`expectedFlowType` өгвөл `flowType` эхлүүлсэн урсгалтай ЯГ таарах, Web2App/App2App-д `userChallengeVerifier` заавал
|
|
163
|
+
`initialCallbackUrl`-ийг хариуны `signature.initialCallbackUrl`-аас авна (CA урсгалаар шийднэ: QR/Notification →
|
|
164
|
+
`""`, Web2App/App2App → таны callback; шилжилтийн үед legacy `/dl` ба push-д таны callback) — зөвхөн `""` эсвэл
|
|
165
|
+
таны илгээсэн callback байхад, Web2App/App2App-д заавал таны callback; өөр утга → татгалзана
|
|
163
166
|
- **sign** → RP-ийн өгсөн digest дээр
|
|
164
167
|
|
|
165
168
|
Аль нэг алхам бүтэлгүйтвэл `ValidationError` шиднэ — хариунд **итгэхгүй**.
|
|
@@ -116,6 +116,12 @@ interface SessionResult {
|
|
|
116
116
|
serverRandom: string | null;
|
|
117
117
|
userChallenge: string | null;
|
|
118
118
|
flowType: string | null;
|
|
119
|
+
/**
|
|
120
|
+
* ACSP_V2 payload-д гарын үсэг зурагдсан `initialCallbackUrl` (хариуны `signature.initialCallbackUrl`,
|
|
121
|
+
* eID нэмэлт). Smart-ID: QR/Notification → `""`, Web2App/App2App → RP-ийн илгээсэн URL. null = хариунд
|
|
122
|
+
* талбар алга (хуучин CA). Validator үүнийг зөвхөн `""` эсвэл RP-ийн өөрийн callback байхад л хүлээн авна.
|
|
123
|
+
*/
|
|
124
|
+
initialCallbackUrl?: string | null;
|
|
119
125
|
signatureAlgorithmParameters: SignatureAlgorithmParameters | null;
|
|
120
126
|
interactionTypeUsed: string | null;
|
|
121
127
|
/**
|
|
@@ -116,6 +116,12 @@ interface SessionResult {
|
|
|
116
116
|
serverRandom: string | null;
|
|
117
117
|
userChallenge: string | null;
|
|
118
118
|
flowType: string | null;
|
|
119
|
+
/**
|
|
120
|
+
* ACSP_V2 payload-д гарын үсэг зурагдсан `initialCallbackUrl` (хариуны `signature.initialCallbackUrl`,
|
|
121
|
+
* eID нэмэлт). Smart-ID: QR/Notification → `""`, Web2App/App2App → RP-ийн илгээсэн URL. null = хариунд
|
|
122
|
+
* талбар алга (хуучин CA). Validator үүнийг зөвхөн `""` эсвэл RP-ийн өөрийн callback байхад л хүлээн авна.
|
|
123
|
+
*/
|
|
124
|
+
initialCallbackUrl?: string | null;
|
|
119
125
|
signatureAlgorithmParameters: SignatureAlgorithmParameters | null;
|
|
120
126
|
interactionTypeUsed: string | null;
|
|
121
127
|
/**
|
package/dist/browser.d.cts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { d as DeviceLinkError, e as DeviceLinkInput, D as DeviceLinkSession, E as EidError, h as NavigatorLike, O as OpenOrShowQROptions, n as deviceLink, o as isMobileUserAgent, p as openOrShowQR } from './browser-
|
|
1
|
+
export { d as DeviceLinkError, e as DeviceLinkInput, D as DeviceLinkSession, E as EidError, h as NavigatorLike, O as OpenOrShowQROptions, n as deviceLink, o as isMobileUserAgent, p as openOrShowQR } from './browser-BU9ShPWO.cjs';
|
package/dist/browser.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { d as DeviceLinkError, e as DeviceLinkInput, D as DeviceLinkSession, E as EidError, h as NavigatorLike, O as OpenOrShowQROptions, n as deviceLink, o as isMobileUserAgent, p as openOrShowQR } from './browser-
|
|
1
|
+
export { d as DeviceLinkError, e as DeviceLinkInput, D as DeviceLinkSession, E as EidError, h as NavigatorLike, O as OpenOrShowQROptions, n as deviceLink, o as isMobileUserAgent, p as openOrShowQR } from './browser-BU9ShPWO.js';
|
package/dist/index.cjs
CHANGED
|
@@ -336,6 +336,9 @@ function parseSessionResult(raw) {
|
|
|
336
336
|
serverRandom: str(sig.serverRandom),
|
|
337
337
|
userChallenge: str(sig.userChallenge),
|
|
338
338
|
flowType: str(sig.flowType),
|
|
339
|
+
// CA-ийн eID нэмэлт (f59d14ee-оос): гарын үсэг зурагдсан ACSP_V2 initialCallbackUrl. "" нь утга —
|
|
340
|
+
// null/undefined-аас ялгана (талбар алга = хуучин CA).
|
|
341
|
+
initialCallbackUrl: typeof sig.initialCallbackUrl === "string" ? sig.initialCallbackUrl : null,
|
|
339
342
|
signatureAlgorithmParameters: parseSigParams(sig.signatureAlgorithmParameters),
|
|
340
343
|
interactionTypeUsed: str(r.interactionTypeUsed),
|
|
341
344
|
onBehalfOf: parseOrg(r.onBehalfOf)
|
|
@@ -447,7 +450,7 @@ var ResponseValidator = class {
|
|
|
447
450
|
brokeredRpName: acsp.brokeredRpName,
|
|
448
451
|
interactions: acsp.interactions,
|
|
449
452
|
interactionTypeUsed,
|
|
450
|
-
initialCallbackUrl: acsp.initialCallbackUrl,
|
|
453
|
+
initialCallbackUrl: signedCallbackUrl(result.initialCallbackUrl, acsp.initialCallbackUrl, flowType),
|
|
451
454
|
flowType
|
|
452
455
|
});
|
|
453
456
|
if (!verifyPayloadSignature(payload, result.signatureValueB64, leaf.publicKey, alg, hash)) {
|
|
@@ -584,6 +587,17 @@ var ResponseValidator = class {
|
|
|
584
587
|
}
|
|
585
588
|
}
|
|
586
589
|
};
|
|
590
|
+
function signedCallbackUrl(fromResponse, rpCallback, flowType) {
|
|
591
|
+
const rp = rpCallback ?? "";
|
|
592
|
+
if (fromResponse == null) return rp;
|
|
593
|
+
if (fromResponse !== "" && fromResponse !== rp) {
|
|
594
|
+
throw new ValidationError("signature.initialCallbackUrl \u043D\u044C \u0445\u043E\u043E\u0441\u043E\u043D \u0447 \u0431\u0438\u0448, \u0438\u043B\u0433\u044D\u044D\u0441\u044D\u043D callback \u0447 \u0431\u0438\u0448 (\u0445\u0443\u0443\u0440\u0430\u043C\u0447 \u0445\u0430\u0440\u0438\u0443 \u0431\u0430\u0439\u0436 \u0431\u043E\u043B\u0437\u043E\u0448\u0433\u04AF\u0439)");
|
|
595
|
+
}
|
|
596
|
+
if ((flowType === "Web2App" || flowType === "App2App") && fromResponse !== rp) {
|
|
597
|
+
throw new ValidationError(`${flowType} \u0443\u0440\u0441\u0433\u0430\u043B\u0434 signature.initialCallbackUrl \u043D\u044C \u0438\u043B\u0433\u044D\u044D\u0441\u044D\u043D callback \u0431\u0430\u0439\u0445 \u0451\u0441\u0442\u043E\u0439`);
|
|
598
|
+
}
|
|
599
|
+
return fromResponse;
|
|
600
|
+
}
|
|
587
601
|
function userChallengeOf(verifier) {
|
|
588
602
|
return (0, import_node_crypto2.createHash)("sha256").update(verifier, "utf8").digest("base64url");
|
|
589
603
|
}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { R as RpCredentials, C as CertificateLevel, I as Interaction, S as SignatureAlgorithm, H as HashAlgorithm, N as NotificationSession, D as DeviceLinkSession, a as SessionResult, A as AcspContext, F as FlowType } from './browser-
|
|
2
|
-
export { b as ApiError, c as AuthenticationError, d as DeviceLinkError, e as DeviceLinkInput, E as EidError, f as EndResult, g as ForbiddenError, h as NavigatorLike, i as NetworkError, O as OpenOrShowQROptions, j as SessionFailedError, k as SessionState, l as SignatureAlgorithmParameters, m as SignatureProtocol, V as ValidationError, n as deviceLink, o as isMobileUserAgent, p as openOrShowQR } from './browser-
|
|
1
|
+
import { R as RpCredentials, C as CertificateLevel, I as Interaction, S as SignatureAlgorithm, H as HashAlgorithm, N as NotificationSession, D as DeviceLinkSession, a as SessionResult, A as AcspContext, F as FlowType } from './browser-BU9ShPWO.cjs';
|
|
2
|
+
export { b as ApiError, c as AuthenticationError, d as DeviceLinkError, e as DeviceLinkInput, E as EidError, f as EndResult, g as ForbiddenError, h as NavigatorLike, i as NetworkError, O as OpenOrShowQROptions, j as SessionFailedError, k as SessionState, l as SignatureAlgorithmParameters, m as SignatureProtocol, V as ValidationError, n as deviceLink, o as isMobileUserAgent, p as openOrShowQR } from './browser-BU9ShPWO.cjs';
|
|
3
3
|
import { X509Certificate, KeyObject } from 'node:crypto';
|
|
4
4
|
|
|
5
5
|
interface HttpConfig {
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { R as RpCredentials, C as CertificateLevel, I as Interaction, S as SignatureAlgorithm, H as HashAlgorithm, N as NotificationSession, D as DeviceLinkSession, a as SessionResult, A as AcspContext, F as FlowType } from './browser-
|
|
2
|
-
export { b as ApiError, c as AuthenticationError, d as DeviceLinkError, e as DeviceLinkInput, E as EidError, f as EndResult, g as ForbiddenError, h as NavigatorLike, i as NetworkError, O as OpenOrShowQROptions, j as SessionFailedError, k as SessionState, l as SignatureAlgorithmParameters, m as SignatureProtocol, V as ValidationError, n as deviceLink, o as isMobileUserAgent, p as openOrShowQR } from './browser-
|
|
1
|
+
import { R as RpCredentials, C as CertificateLevel, I as Interaction, S as SignatureAlgorithm, H as HashAlgorithm, N as NotificationSession, D as DeviceLinkSession, a as SessionResult, A as AcspContext, F as FlowType } from './browser-BU9ShPWO.js';
|
|
2
|
+
export { b as ApiError, c as AuthenticationError, d as DeviceLinkError, e as DeviceLinkInput, E as EidError, f as EndResult, g as ForbiddenError, h as NavigatorLike, i as NetworkError, O as OpenOrShowQROptions, j as SessionFailedError, k as SessionState, l as SignatureAlgorithmParameters, m as SignatureProtocol, V as ValidationError, n as deviceLink, o as isMobileUserAgent, p as openOrShowQR } from './browser-BU9ShPWO.js';
|
|
3
3
|
import { X509Certificate, KeyObject } from 'node:crypto';
|
|
4
4
|
|
|
5
5
|
interface HttpConfig {
|
package/dist/index.js
CHANGED
|
@@ -261,6 +261,9 @@ function parseSessionResult(raw) {
|
|
|
261
261
|
serverRandom: str(sig.serverRandom),
|
|
262
262
|
userChallenge: str(sig.userChallenge),
|
|
263
263
|
flowType: str(sig.flowType),
|
|
264
|
+
// CA-ийн eID нэмэлт (f59d14ee-оос): гарын үсэг зурагдсан ACSP_V2 initialCallbackUrl. "" нь утга —
|
|
265
|
+
// null/undefined-аас ялгана (талбар алга = хуучин CA).
|
|
266
|
+
initialCallbackUrl: typeof sig.initialCallbackUrl === "string" ? sig.initialCallbackUrl : null,
|
|
264
267
|
signatureAlgorithmParameters: parseSigParams(sig.signatureAlgorithmParameters),
|
|
265
268
|
interactionTypeUsed: str(r.interactionTypeUsed),
|
|
266
269
|
onBehalfOf: parseOrg(r.onBehalfOf)
|
|
@@ -372,7 +375,7 @@ var ResponseValidator = class {
|
|
|
372
375
|
brokeredRpName: acsp.brokeredRpName,
|
|
373
376
|
interactions: acsp.interactions,
|
|
374
377
|
interactionTypeUsed,
|
|
375
|
-
initialCallbackUrl: acsp.initialCallbackUrl,
|
|
378
|
+
initialCallbackUrl: signedCallbackUrl(result.initialCallbackUrl, acsp.initialCallbackUrl, flowType),
|
|
376
379
|
flowType
|
|
377
380
|
});
|
|
378
381
|
if (!verifyPayloadSignature(payload, result.signatureValueB64, leaf.publicKey, alg, hash)) {
|
|
@@ -509,6 +512,17 @@ var ResponseValidator = class {
|
|
|
509
512
|
}
|
|
510
513
|
}
|
|
511
514
|
};
|
|
515
|
+
function signedCallbackUrl(fromResponse, rpCallback, flowType) {
|
|
516
|
+
const rp = rpCallback ?? "";
|
|
517
|
+
if (fromResponse == null) return rp;
|
|
518
|
+
if (fromResponse !== "" && fromResponse !== rp) {
|
|
519
|
+
throw new ValidationError("signature.initialCallbackUrl \u043D\u044C \u0445\u043E\u043E\u0441\u043E\u043D \u0447 \u0431\u0438\u0448, \u0438\u043B\u0433\u044D\u044D\u0441\u044D\u043D callback \u0447 \u0431\u0438\u0448 (\u0445\u0443\u0443\u0440\u0430\u043C\u0447 \u0445\u0430\u0440\u0438\u0443 \u0431\u0430\u0439\u0436 \u0431\u043E\u043B\u0437\u043E\u0448\u0433\u04AF\u0439)");
|
|
520
|
+
}
|
|
521
|
+
if ((flowType === "Web2App" || flowType === "App2App") && fromResponse !== rp) {
|
|
522
|
+
throw new ValidationError(`${flowType} \u0443\u0440\u0441\u0433\u0430\u043B\u0434 signature.initialCallbackUrl \u043D\u044C \u0438\u043B\u0433\u044D\u044D\u0441\u044D\u043D callback \u0431\u0430\u0439\u0445 \u0451\u0441\u0442\u043E\u0439`);
|
|
523
|
+
}
|
|
524
|
+
return fromResponse;
|
|
525
|
+
}
|
|
512
526
|
function userChallengeOf(verifier) {
|
|
513
527
|
return createHash2("sha256").update(verifier, "utf8").digest("base64url");
|
|
514
528
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gerege-systems/eid-mongolia-sdk",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.1",
|
|
4
4
|
"description": "e-ID Mongolia Relying Party SDK — иргэнээр утсаар нь нэвтрэлт ба хууль ёсны цахим гарын үсэг (RP-API v3, Smart-ID нийцтэй).",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|