ox 1.2.0 → 1.3.0
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/CHANGELOG.md +34 -0
- package/dist/core/AbiFunction.d.ts +1 -1
- package/dist/core/AbiFunction.d.ts.map +1 -1
- package/dist/core/AbiFunction.js +6 -2
- package/dist/core/AbiFunction.js.map +1 -1
- package/dist/core/AbiParameters.d.ts +1 -1
- package/dist/core/AbiParameters.d.ts.map +1 -1
- package/dist/core/AbiParameters.js +1 -13
- package/dist/core/AbiParameters.js.map +1 -1
- package/dist/core/AesGcm.d.ts +36 -1
- package/dist/core/AesGcm.d.ts.map +1 -1
- package/dist/core/AesGcm.js +44 -0
- package/dist/core/AesGcm.js.map +1 -1
- package/dist/core/Ed25519.d.ts +46 -1
- package/dist/core/Ed25519.d.ts.map +1 -1
- package/dist/core/Ed25519.js +43 -0
- package/dist/core/Ed25519.js.map +1 -1
- package/dist/core/Engine.d.ts +1 -1
- package/dist/core/Engine.d.ts.map +1 -1
- package/dist/core/Engine.js.map +1 -1
- package/dist/core/Hash.d.ts +164 -1
- package/dist/core/Hash.d.ts.map +1 -1
- package/dist/core/Hash.js +172 -0
- package/dist/core/Hash.js.map +1 -1
- package/dist/core/Hex.d.ts.map +1 -1
- package/dist/core/Hex.js +1 -4
- package/dist/core/Hex.js.map +1 -1
- package/dist/core/Rlp.d.ts +32 -0
- package/dist/core/Rlp.d.ts.map +1 -1
- package/dist/core/Rlp.js +146 -0
- package/dist/core/Rlp.js.map +1 -1
- package/dist/core/Secp256k1.d.ts +46 -1
- package/dist/core/Secp256k1.d.ts.map +1 -1
- package/dist/core/Secp256k1.js +48 -0
- package/dist/core/Secp256k1.js.map +1 -1
- package/dist/core/WebAuthn.d.ts +224 -0
- package/dist/core/WebAuthn.d.ts.map +1 -0
- package/dist/core/WebAuthn.js +343 -0
- package/dist/core/WebAuthn.js.map +1 -0
- package/dist/core/WebAuthnP256.d.ts +46 -50
- package/dist/core/WebAuthnP256.d.ts.map +1 -1
- package/dist/core/WebAuthnP256.js +44 -50
- package/dist/core/WebAuthnP256.js.map +1 -1
- package/dist/core/internal/abiParameters.d.ts +7 -87
- package/dist/core/internal/abiParameters.d.ts.map +1 -1
- package/dist/core/internal/abiParameters.js +339 -194
- package/dist/core/internal/abiParameters.js.map +1 -1
- package/dist/core/internal/engine.d.ts +35 -2
- package/dist/core/internal/engine.d.ts.map +1 -1
- package/dist/core/internal/engine.js +12 -1
- package/dist/core/internal/engine.js.map +1 -1
- package/dist/core/internal/hash.d.ts +10 -0
- package/dist/core/internal/hash.d.ts.map +1 -1
- package/dist/core/internal/hash.js +26 -1
- package/dist/core/internal/hash.js.map +1 -1
- package/dist/index.d.ts +23 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +23 -14
- package/dist/index.js.map +1 -1
- package/dist/node/Engine.d.ts +1 -1
- package/dist/node/Engine.d.ts.map +1 -1
- package/dist/node/Engine.js.map +1 -1
- package/dist/node/Hash.d.ts +6 -4
- package/dist/node/Hash.d.ts.map +1 -1
- package/dist/node/Hash.js +35 -3
- package/dist/node/Hash.js.map +1 -1
- package/dist/tempo/AuthorizationTempo.d.ts +6 -6
- package/dist/tempo/AuthorizationTempo.js +6 -6
- package/dist/tempo/KeyAuthorization.d.ts +3 -8
- package/dist/tempo/KeyAuthorization.d.ts.map +1 -1
- package/dist/tempo/KeyAuthorization.js +3 -8
- package/dist/tempo/KeyAuthorization.js.map +1 -1
- package/dist/tempo/SignatureEnvelope.d.ts +8 -8
- package/dist/tempo/SignatureEnvelope.js +8 -8
- package/dist/wasm/Engine.d.ts +1 -1
- package/dist/wasm/Engine.d.ts.map +1 -1
- package/dist/wasm/Engine.js.map +1 -1
- package/dist/wasm/Hash.d.ts +1 -1
- package/dist/wasm/Hash.d.ts.map +1 -1
- package/dist/wasm/Hash.js +5 -0
- package/dist/wasm/Hash.js.map +1 -1
- package/dist/wasm/internal/blake3.d.ts +10 -1
- package/dist/wasm/internal/blake3.d.ts.map +1 -1
- package/dist/wasm/internal/blake3.js +12 -1
- package/dist/wasm/internal/blake3.js.map +1 -1
- package/dist/wasm/internal/blake3.wasm.d.ts +3 -1
- package/dist/wasm/internal/blake3.wasm.d.ts.map +1 -1
- package/dist/wasm/internal/blake3.wasm.js +3 -1
- package/dist/wasm/internal/blake3.wasm.js.map +1 -1
- package/dist/wasm/internal/hash.d.ts +9 -0
- package/dist/wasm/internal/hash.d.ts.map +1 -1
- package/dist/wasm/internal/hash.js +13 -1
- package/dist/wasm/internal/hash.js.map +1 -1
- package/dist/wasm/internal/hashState.d.ts +25 -0
- package/dist/wasm/internal/hashState.d.ts.map +1 -0
- package/dist/wasm/internal/hashState.js +105 -0
- package/dist/wasm/internal/hashState.js.map +1 -0
- package/dist/wasm/internal/hashes.d.ts +12 -1
- package/dist/wasm/internal/hashes.d.ts.map +1 -1
- package/dist/wasm/internal/hashes.js +18 -1
- package/dist/wasm/internal/hashes.js.map +1 -1
- package/dist/wasm/internal/hashes.wasm.d.ts +11 -3
- package/dist/wasm/internal/hashes.wasm.d.ts.map +1 -1
- package/dist/wasm/internal/hashes.wasm.js +11 -3
- package/dist/wasm/internal/hashes.wasm.js.map +1 -1
- package/dist/webauthn/Authentication.d.ts +2 -0
- package/dist/webauthn/Authentication.d.ts.map +1 -1
- package/dist/webauthn/Authentication.js +2 -1
- package/dist/webauthn/Authentication.js.map +1 -1
- package/dist/webauthn/Registration.d.ts.map +1 -1
- package/dist/webauthn/Registration.js +2 -1
- package/dist/webauthn/Registration.js.map +1 -1
- package/dist/webauthn/Types.d.ts +27 -6
- package/dist/webauthn/Types.d.ts.map +1 -1
- package/dist/webauthn/internal/utils.d.ts.map +1 -1
- package/dist/webauthn/internal/utils.js +35 -9
- package/dist/webauthn/internal/utils.js.map +1 -1
- package/dist/zod/TypedData.d.ts +2 -2
- package/package.json +9 -1
- package/src/benchmarks/Ox.bench.ts +6 -0
- package/src/benchmarks/OxNode.bench.ts +8 -0
- package/src/benchmarks/OxV0.bench.ts +4 -0
- package/src/benchmarks/OxWasm.bench.ts +22 -0
- package/src/core/AbiFunction.ts +5 -5
- package/src/core/AbiParameters.ts +8 -20
- package/src/core/AesGcm.ts +86 -1
- package/src/core/Ed25519.ts +87 -1
- package/src/core/Engine.ts +1 -0
- package/src/core/Hash.ts +262 -1
- package/src/core/Hex.ts +1 -4
- package/src/core/Rlp.ts +172 -5
- package/src/core/Secp256k1.ts +92 -1
- package/src/core/WebAuthn.ts +579 -0
- package/src/core/WebAuthnP256.ts +47 -50
- package/src/core/_test/AbiFunction.test.ts +9 -0
- package/src/core/_test/AbiParameters.differential.fuzz.ts +156 -0
- package/src/core/_test/AbiParameters.encode.test.ts +22 -0
- package/src/core/_test/AbiParameters.fuzz.ts +4 -0
- package/src/core/_test/AesGcm.test.ts +76 -0
- package/src/core/_test/Ed25519.test-d.ts +13 -1
- package/src/core/_test/Ed25519.test.ts +120 -1
- package/src/core/_test/Engine.test-d.ts +9 -0
- package/src/core/_test/Engine.test.ts +1 -1
- package/src/core/_test/Hash.test-d.ts +23 -0
- package/src/core/_test/Hash.test.ts +179 -1
- package/src/core/_test/Hex.test.ts +2 -0
- package/src/core/_test/Rlp.test-d.ts +18 -0
- package/src/core/_test/Rlp.test.ts +109 -0
- package/src/core/_test/Secp256k1.test-d.ts +14 -0
- package/src/core/_test/Secp256k1.test.ts +91 -1
- package/src/core/_test/WebAuthn.test-d.ts +142 -0
- package/src/core/_test/WebAuthn.test.ts +766 -0
- package/src/core/_test/index.test.ts +1 -0
- package/src/core/internal/abiParameters.ts +466 -326
- package/src/core/internal/engine.ts +47 -2
- package/src/core/internal/hash.ts +53 -1
- package/src/index.ts +24 -14
- package/src/node/Engine.ts +1 -0
- package/src/node/Hash.ts +43 -6
- package/src/node/_test/Engine.test-d.ts +1 -0
- package/src/node/_test/Engine.test.ts +2 -0
- package/src/node/_test/Hash.test-d.ts +10 -0
- package/src/node/_test/Hash.test.ts +46 -0
- package/src/tempo/AuthorizationTempo.ts +6 -6
- package/src/tempo/KeyAuthorization.ts +3 -8
- package/src/tempo/SignatureEnvelope.ts +8 -8
- package/src/version.ts +1 -1
- package/src/wasm/Engine.ts +1 -0
- package/src/wasm/Hash.ts +10 -0
- package/src/wasm/_test/Engine.test-d.ts +1 -0
- package/src/wasm/_test/Engine.test.ts +5 -0
- package/src/wasm/_test/Hash.browser.test.ts +28 -0
- package/src/wasm/_test/Hash.test-d.ts +16 -0
- package/src/wasm/_test/Hash.test.ts +250 -1
- package/src/wasm/internal/blake3.ts +23 -2
- package/src/wasm/internal/blake3.wasm.ts +4 -1
- package/src/wasm/internal/hash.ts +27 -1
- package/src/wasm/internal/hashState.ts +154 -0
- package/src/wasm/internal/hashes.ts +56 -15
- package/src/wasm/internal/hashes.wasm.ts +15 -3
- package/src/webauthn/Authentication.ts +4 -0
- package/src/webauthn/Registration.ts +2 -0
- package/src/webauthn/Types.ts +32 -2
- package/src/webauthn/_test/Authentication.test.ts +123 -1
- package/src/webauthn/_test/Registration.test.ts +26 -6
- package/src/webauthn/_test/WebAuthn.browser.test.ts +28 -0
- package/src/webauthn/internal/utils.ts +41 -8
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { describe, expect, test } from 'vp/test'
|
|
2
|
+
import * as Bytes from '../../core/Bytes.js'
|
|
3
|
+
import * as Secp256k1 from '../../core/Secp256k1.js'
|
|
4
|
+
import * as WebAuthn from '../../core/WebAuthn.js'
|
|
5
|
+
|
|
6
|
+
const rpId = 'localhost'
|
|
7
|
+
const rpName = 'Ox Test'
|
|
8
|
+
|
|
9
|
+
describe('createCredential + getCredential', () => {
|
|
10
|
+
test('derives a stable private key', async () => {
|
|
11
|
+
const credential = await WebAuthn.createCredential({
|
|
12
|
+
name: `prf-${Date.now()}`,
|
|
13
|
+
prf: true,
|
|
14
|
+
rp: {
|
|
15
|
+
id: rpId,
|
|
16
|
+
name: rpName,
|
|
17
|
+
},
|
|
18
|
+
})
|
|
19
|
+
const next = await WebAuthn.getCredential({
|
|
20
|
+
credentialId: credential.id,
|
|
21
|
+
prf: true,
|
|
22
|
+
rpId,
|
|
23
|
+
})
|
|
24
|
+
|
|
25
|
+
expect(Bytes.isEqual(credential.prf, next.prf)).toBe(true)
|
|
26
|
+
expect(Secp256k1.fromPrf(credential.prf)).toBe(Secp256k1.fromPrf(next.prf))
|
|
27
|
+
})
|
|
28
|
+
})
|
|
@@ -24,8 +24,9 @@ export function bytesToArrayBuffer(bytes: Uint8Array): ArrayBuffer {
|
|
|
24
24
|
/** @internal */
|
|
25
25
|
export function bufferSourceToBytes(source: Types.BufferSource): Uint8Array {
|
|
26
26
|
if (source instanceof Uint8Array) return source
|
|
27
|
-
if (
|
|
28
|
-
|
|
27
|
+
if (ArrayBuffer.isView(source))
|
|
28
|
+
return new Uint8Array(source.buffer, source.byteOffset, source.byteLength)
|
|
29
|
+
return new Uint8Array(source)
|
|
29
30
|
}
|
|
30
31
|
|
|
31
32
|
/**
|
|
@@ -119,13 +120,20 @@ export function serializeExtensions(
|
|
|
119
120
|
extensions: Types.AuthenticationExtensionsClientInputs,
|
|
120
121
|
): Types.AuthenticationExtensionsClientInputs<true> {
|
|
121
122
|
const { prf, ...rest } = extensions
|
|
123
|
+
const { eval: eval_, evalByCredential } = prf ?? {}
|
|
122
124
|
return {
|
|
123
125
|
...rest,
|
|
124
126
|
...(prf && {
|
|
125
127
|
prf: {
|
|
126
|
-
eval:
|
|
127
|
-
|
|
128
|
-
|
|
128
|
+
...(eval_ && { eval: serializePrfValues(eval_) }),
|
|
129
|
+
...(evalByCredential && {
|
|
130
|
+
evalByCredential: Object.fromEntries(
|
|
131
|
+
Object.entries(evalByCredential).map(([id, values]) => [
|
|
132
|
+
id,
|
|
133
|
+
serializePrfValues(values),
|
|
134
|
+
]),
|
|
135
|
+
),
|
|
136
|
+
}),
|
|
129
137
|
},
|
|
130
138
|
}),
|
|
131
139
|
}
|
|
@@ -136,14 +144,39 @@ export function deserializeExtensions(
|
|
|
136
144
|
extensions: Types.AuthenticationExtensionsClientInputs<true>,
|
|
137
145
|
): Types.AuthenticationExtensionsClientInputs {
|
|
138
146
|
const { prf, ...rest } = extensions
|
|
147
|
+
const { eval: eval_, evalByCredential } = prf ?? {}
|
|
139
148
|
return {
|
|
140
149
|
...rest,
|
|
141
150
|
...(prf && {
|
|
142
151
|
prf: {
|
|
143
|
-
eval:
|
|
144
|
-
|
|
145
|
-
|
|
152
|
+
...(eval_ && { eval: deserializePrfValues(eval_) }),
|
|
153
|
+
...(evalByCredential && {
|
|
154
|
+
evalByCredential: Object.fromEntries(
|
|
155
|
+
Object.entries(evalByCredential).map(([id, values]) => [
|
|
156
|
+
id,
|
|
157
|
+
deserializePrfValues(values),
|
|
158
|
+
]),
|
|
159
|
+
),
|
|
160
|
+
}),
|
|
146
161
|
},
|
|
147
162
|
}),
|
|
148
163
|
}
|
|
149
164
|
}
|
|
165
|
+
|
|
166
|
+
function serializePrfValues(values: Types.PrfValues): Types.PrfValues<true> {
|
|
167
|
+
const { first, second } = values
|
|
168
|
+
return {
|
|
169
|
+
first: Base64.fromBytes(bufferSourceToBytes(first), base64UrlOptions),
|
|
170
|
+
...(second !== undefined && {
|
|
171
|
+
second: Base64.fromBytes(bufferSourceToBytes(second), base64UrlOptions),
|
|
172
|
+
}),
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
function deserializePrfValues(values: Types.PrfValues<true>): Types.PrfValues {
|
|
177
|
+
const { first, second } = values
|
|
178
|
+
return {
|
|
179
|
+
first: Base64.toBytes(first),
|
|
180
|
+
...(second !== undefined && { second: Base64.toBytes(second) }),
|
|
181
|
+
}
|
|
182
|
+
}
|