phygital-token-sdk 1.0.0 → 1.0.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/dist/utils/passkey/internal.d.ts +8 -0
- package/dist/utils/passkey/internal.d.ts.map +1 -1
- package/dist/utils/passkey/internal.js +37 -2
- package/dist/utils/passkey/internal.js.map +1 -1
- package/dist/utils/passkey/webauthn.d.ts.map +1 -1
- package/dist/utils/passkey/webauthn.js +23 -13
- package/dist/utils/passkey/webauthn.js.map +1 -1
- package/package.json +1 -1
|
@@ -14,6 +14,14 @@ export declare function normalizeSignatureToLowS(signature: Uint8Array): Uint8Ar
|
|
|
14
14
|
export declare function convertSignatureDERtoRS(signature: Uint8Array): Uint8Array;
|
|
15
15
|
export declare function getClientDataJsonBytes(authResponse: AuthenticationResponseJSON): Uint8Array;
|
|
16
16
|
export declare function getSecp256r1Message(authResponse: AuthenticationResponseJSON): Uint8Array;
|
|
17
|
+
/**
|
|
18
|
+
* Recover a compressed secp256r1 public key from a WebAuthn assertion signature
|
|
19
|
+
* and the signed message (`authenticatorData || SHA-256(clientDataJSON)`).
|
|
20
|
+
*
|
|
21
|
+
* WebAuthn signatures omit the ECDSA recovery id, so recids 0–3 are tried until
|
|
22
|
+
* a recovered key verifies the assertion.
|
|
23
|
+
*/
|
|
24
|
+
export declare function recoverSecp256r1PublicKey(signature: Uint8Array, message: Uint8Array): Uint8Array;
|
|
17
25
|
export declare function parseWebAuthnClientData(clientDataJSON: string): {
|
|
18
26
|
challenge: string;
|
|
19
27
|
origin: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../../src/utils/passkey/internal.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,0BAA0B,EAChC,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAkCxD;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,UAAU,GAAG,UAAU,CAoB1E;AAED,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,UAAU,GAAG,UAAU,
|
|
1
|
+
{"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../../src/utils/passkey/internal.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,0BAA0B,EAChC,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAkCxD;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,UAAU,GAAG,UAAU,CAoB1E;AAED,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,UAAU,GAAG,UAAU,CAEzE;AA2DD,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,0BAA0B,GACvC,UAAU,CAEZ;AAED,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,0BAA0B,GACvC,UAAU,CASZ;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,UAAU,EACrB,OAAO,EAAE,UAAU,GAClB,UAAU,CAkBZ;AAED,wBAAgB,uBAAuB,CAAC,cAAc,EAAE,MAAM;IAK1D,SAAS;IACT,MAAM;IACN,WAAW;IACX,uBAAuB;EAE1B"}
|
|
@@ -56,8 +56,11 @@ export function normalizeSignatureToLowS(signature) {
|
|
|
56
56
|
return normalized;
|
|
57
57
|
}
|
|
58
58
|
export function convertSignatureDERtoRS(signature) {
|
|
59
|
+
return normalizeSignatureToLowS(parseSignatureToRS(signature));
|
|
60
|
+
}
|
|
61
|
+
function parseSignatureToRS(signature) {
|
|
59
62
|
if (signature.length === 64) {
|
|
60
|
-
return
|
|
63
|
+
return signature;
|
|
61
64
|
}
|
|
62
65
|
if (signature[0] !== 0x30) {
|
|
63
66
|
throw new Error("Invalid DER sequence");
|
|
@@ -89,7 +92,16 @@ export function convertSignatureDERtoRS(signature) {
|
|
|
89
92
|
const rawSig = new Uint8Array(64);
|
|
90
93
|
rawSig.set(rStripped, 32 - rStripped.length);
|
|
91
94
|
rawSig.set(sStripped, 64 - sStripped.length);
|
|
92
|
-
return
|
|
95
|
+
return rawSig;
|
|
96
|
+
}
|
|
97
|
+
function toCompressedPublicKey(point) {
|
|
98
|
+
return point.toBytes(true);
|
|
99
|
+
}
|
|
100
|
+
function signatureFromBytes(signature) {
|
|
101
|
+
if (signature.length >= 2 && signature[0] === 0x30) {
|
|
102
|
+
return p256.Signature.fromBytes(signature, "der");
|
|
103
|
+
}
|
|
104
|
+
return p256.Signature.fromBytes(parseSignatureToRS(signature), "compact");
|
|
93
105
|
}
|
|
94
106
|
export function getClientDataJsonBytes(authResponse) {
|
|
95
107
|
return base64URLStringToBuffer(authResponse.response.clientDataJSON);
|
|
@@ -100,6 +112,29 @@ export function getSecp256r1Message(authResponse) {
|
|
|
100
112
|
const clientDataHash = sha256(clientDataJSON);
|
|
101
113
|
return new Uint8Array([...authenticatorData, ...clientDataHash]);
|
|
102
114
|
}
|
|
115
|
+
/**
|
|
116
|
+
* Recover a compressed secp256r1 public key from a WebAuthn assertion signature
|
|
117
|
+
* and the signed message (`authenticatorData || SHA-256(clientDataJSON)`).
|
|
118
|
+
*
|
|
119
|
+
* WebAuthn signatures omit the ECDSA recovery id, so recids 0–3 are tried until
|
|
120
|
+
* a recovered key verifies the assertion.
|
|
121
|
+
*/
|
|
122
|
+
export function recoverSecp256r1PublicKey(signature, message) {
|
|
123
|
+
const sig = signatureFromBytes(signature);
|
|
124
|
+
const verifyRs = normalizeSignatureToLowS(parseSignatureToRS(signature));
|
|
125
|
+
for (let recoveryId = 0; recoveryId < 4; recoveryId += 1) {
|
|
126
|
+
try {
|
|
127
|
+
const publicKey = toCompressedPublicKey(sig.addRecoveryBit(recoveryId).recoverPublicKey(message));
|
|
128
|
+
if (p256.verify(verifyRs, message, publicKey, { prehash: false })) {
|
|
129
|
+
return publicKey;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
// try next recovery id
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
throw new Error("Failed to recover secp256r1 public key from signature");
|
|
137
|
+
}
|
|
103
138
|
export function parseWebAuthnClientData(clientDataJSON) {
|
|
104
139
|
const parsed = JSON.parse(new TextDecoder().decode(base64URLStringToBuffer(clientDataJSON)));
|
|
105
140
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"internal.js","sourceRoot":"","sources":["../../../src/utils/passkey/internal.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"internal.js","sourceRoot":"","sources":["../../../src/utils/passkey/internal.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webauthn.d.ts","sourceRoot":"","sources":["../../../src/utils/passkey/webauthn.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"webauthn.d.ts","sourceRoot":"","sources":["../../../src/utils/passkey/webauthn.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AAEH,6CAA6C;AAC7C,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC;AAErC,MAAM,MAAM,4BAA4B,GACpC,KAAK,GACL,OAAO,GACP,QAAQ,GACR,UAAU,GACV,KAAK,GACL,YAAY,GACZ,KAAK,CAAC;AAEV,MAAM,MAAM,iCAAiC,GAAG;IAC9C,EAAE,EAAE,eAAe,CAAC;IACpB,IAAI,EAAE,uBAAuB,CAAC;IAC9B,UAAU,CAAC,EAAE,4BAA4B,EAAE,CAAC;CAC7C,CAAC;AAEF,iDAAiD;AACjD,MAAM,MAAM,qCAAqC,GAAG;IAClD,SAAS,EAAE,eAAe,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gBAAgB,CAAC,EAAE,iCAAiC,EAAE,CAAC;IACvD,gBAAgB,CAAC,EAAE,2BAA2B,CAAC;IAC/C,KAAK,CAAC,EAAE,KAAK,CAAC,QAAQ,GAAG,cAAc,GAAG,eAAe,CAAC,CAAC;IAC3D,UAAU,CAAC,EAAE,oCAAoC,CAAC;CACnD,CAAC;AAEF,MAAM,MAAM,kCAAkC,GAAG;IAC/C,cAAc,EAAE,eAAe,CAAC;IAChC,iBAAiB,EAAE,eAAe,CAAC;IACnC,SAAS,EAAE,eAAe,CAAC;IAC3B,UAAU,CAAC,EAAE,eAAe,CAAC;CAC9B,CAAC;AAEF,yDAAyD;AACzD,MAAM,MAAM,0BAA0B,GAAG;IACvC,EAAE,EAAE,eAAe,CAAC;IACpB,KAAK,EAAE,eAAe,CAAC;IACvB,QAAQ,EAAE,kCAAkC,CAAC;IAC7C,uBAAuB,CAAC,EAAE,uBAAuB,CAAC;IAClD,sBAAsB,EAAE,qCAAqC,CAAC;IAC9D,IAAI,EAAE,uBAAuB,CAAC;CAC/B,CAAC;AAEF,yEAAyE;AACzE,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,WAAW,GAAG,eAAe,GACpC,eAAe,CAWjB;AAED,8DAA8D;AAC9D,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,CAEpE;AAED,4CAA4C;AAC5C,wBAAgB,uBAAuB,CAAC,eAAe,EAAE,MAAM,GAAG,UAAU,CAU3E;AAuBD;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,eAAe,EAC1B,IAAI,EAAE,MAAM,GACX,qCAAqC,CAcvC;AAED;;;;GAIG;AACH,wBAAsB,wBAAwB,CAC5C,WAAW,EAAE,qCAAqC,GACjD,OAAO,CAAC,0BAA0B,CAAC,CAuErC"}
|
|
@@ -1,10 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
*
|
|
4
|
-
* Replaces `@simplewebauthn/browser` for the narrow surface we need:
|
|
5
|
-
* base64url encoding, JSON response types, and a thin
|
|
6
|
-
* `navigator.credentials.get` wrapper (no conditional UI / autofill).
|
|
7
|
-
*/
|
|
1
|
+
import { sha256 } from "@noble/hashes/sha2.js";
|
|
2
|
+
import { recoverSecp256r1PublicKey } from "./internal.js";
|
|
8
3
|
/** Convert an ArrayBuffer or TypedArray view into a Base64URL string. */
|
|
9
4
|
export function bufferToBase64URLString(buffer) {
|
|
10
5
|
const bytes = buffer instanceof ArrayBuffer
|
|
@@ -60,7 +55,7 @@ export function nfcWebAuthnRequestOptions(challenge, rpId) {
|
|
|
60
55
|
userVerification: "preferred",
|
|
61
56
|
allowCredentials: [
|
|
62
57
|
{
|
|
63
|
-
id: bufferToBase64URLString(crypto.getRandomValues(new Uint8Array(
|
|
58
|
+
id: bufferToBase64URLString(crypto.getRandomValues(new Uint8Array(16))),
|
|
64
59
|
type: "public-key",
|
|
65
60
|
transports: ["nfc"],
|
|
66
61
|
},
|
|
@@ -97,13 +92,28 @@ export async function authenticateWithWebauthn(optionsJSON) {
|
|
|
97
92
|
if (response.userHandle) {
|
|
98
93
|
userHandle = bufferToBase64URLString(response.userHandle);
|
|
99
94
|
}
|
|
95
|
+
const authenticatorData = bufferToBase64URLString(response.authenticatorData);
|
|
96
|
+
const clientDataJSON = bufferToBase64URLString(response.clientDataJSON);
|
|
97
|
+
const signature = bufferToBase64URLString(response.signature);
|
|
98
|
+
let credentialId = credential.id;
|
|
99
|
+
const placeholderIds = new Set(optionsJSON.allowCredentials?.map((descriptor) => descriptor.id) ?? []);
|
|
100
|
+
if (placeholderIds.has(credentialId)) {
|
|
101
|
+
const clientDataBytes = new Uint8Array(response.clientDataJSON);
|
|
102
|
+
const authenticatorDataBytes = new Uint8Array(response.authenticatorData);
|
|
103
|
+
const message = new Uint8Array([
|
|
104
|
+
...authenticatorDataBytes,
|
|
105
|
+
...sha256(clientDataBytes),
|
|
106
|
+
]);
|
|
107
|
+
const signatureBytes = new Uint8Array(response.signature);
|
|
108
|
+
credentialId = bufferToBase64URLString(recoverSecp256r1PublicKey(signatureBytes, message));
|
|
109
|
+
}
|
|
100
110
|
return {
|
|
101
|
-
id:
|
|
102
|
-
rawId:
|
|
111
|
+
id: credentialId,
|
|
112
|
+
rawId: credentialId,
|
|
103
113
|
response: {
|
|
104
|
-
authenticatorData
|
|
105
|
-
clientDataJSON
|
|
106
|
-
signature
|
|
114
|
+
authenticatorData,
|
|
115
|
+
clientDataJSON,
|
|
116
|
+
signature,
|
|
107
117
|
userHandle,
|
|
108
118
|
},
|
|
109
119
|
type: credential.type,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webauthn.js","sourceRoot":"","sources":["../../../src/utils/passkey/webauthn.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"webauthn.js","sourceRoot":"","sources":["../../../src/utils/passkey/webauthn.ts"],"names":[],"mappings":"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"}
|