@ipld/dag-ucan
Advanced tools
Comparing version 3.2.0 to 3.3.0
@@ -48,2 +48,15 @@ import type { ByteView, MulticodecCode, ToJSON, ToString } from "./ucan.js"; | ||
} | ||
export interface SignatureView<T = unknown, Alg extends SigAlg = SigAlg> extends Signature<T, Alg> { | ||
/** | ||
* Verifies that the signature was produced by the given from the given | ||
* payload. | ||
*/ | ||
verify: (signer: Verifier<Alg>, payload: ByteView<T>) => Await<{ | ||
ok: {}; | ||
error?: void; | ||
} | { | ||
error: Error; | ||
ok?: undefined; | ||
}>; | ||
} | ||
export type SignatureJSON<T extends Signature = Signature> = ToJSON<T, { | ||
@@ -50,0 +63,0 @@ "/": { |
@@ -12,19 +12,8 @@ export const NON_STANDARD: 53248; | ||
export function nameCode(name: string): 53248 | 53479 | 53482 | 53483 | 53485 | 13636096 | 13636097 | 13636098 | 13636101 | 53649; | ||
export function create<T extends unknown, A extends number>(code: A, raw: Uint8Array): UCAN.Signature<T, A>; | ||
export function createNamed<T extends unknown>(name: string, raw: Uint8Array): UCAN.Signature<T, UCAN.SigAlg>; | ||
export function createNonStandard<T extends unknown>(name: string, raw: Uint8Array): UCAN.Signature<T, 53248>; | ||
export function view<T extends unknown, A extends number>(bytes: UCAN.ByteView<UCAN.Signature<T, A>>): UCAN.Signature<T, A>; | ||
export function decode<T extends unknown, A extends number>(bytes: UCAN.ByteView<UCAN.Signature<T, A>>): UCAN.Signature<T, A>; | ||
export function encode<T extends unknown, A extends number>(signature: UCAN.Signature<T, A>): UCAN.ByteView<UCAN.Signature<T, A>>; | ||
export function format<T extends unknown, A extends number, Prefix extends string = "u">(signature: UCAN.Signature<T, A>, base?: UCAN.MultibaseEncoder<Prefix> | undefined): UCAN.ToString<UCAN.Signature<T, A>, string>; | ||
export function parse<T extends unknown, A extends number, Prefix extends string = "u">(signature: UCAN.ToString<UCAN.Signature<T, A>, string>, base?: UCAN.MultibaseDecoder<Prefix> | undefined): UCAN.Signature<T, A>; | ||
export function toJSON<Signature_1 extends UCAN.Signature<any, UCAN.SigAlg>>(signature: Signature_1): UCAN.SignatureJSON<Signature_1>; | ||
export function fromJSON<Signature_1 extends UCAN.Signature<any, UCAN.SigAlg>>(json: UCAN.SignatureJSON<Signature_1>): Signature_1; | ||
import * as UCAN from "./ucan.js"; | ||
/** | ||
* @template {unknown} T | ||
* @template {number} A | ||
* @implements {UCAN.Signature<T, A>} | ||
* @implements {UCAN.SignatureView<T, A>} | ||
*/ | ||
declare class Signature<T extends unknown, A extends number> extends Uint8Array implements UCAN.Signature<T, A> { | ||
export class Signature<T extends unknown, A extends number> extends Uint8Array implements UCAN.SignatureView<T, A> { | ||
constructor(length: number); | ||
@@ -39,5 +28,28 @@ constructor(array: ArrayBufferLike | ArrayLike<number>); | ||
get raw(): Uint8Array; | ||
/** | ||
* Verify that this signature was created by the given key. | ||
* | ||
* @param {UCAN.Crypto.Verifier<A>} signer | ||
* @param {UCAN.ByteView<T>} payload | ||
*/ | ||
verify(signer: UCAN.Crypto.Verifier<A>, payload: UCAN.ByteView<T>): Promise<{ | ||
ok: {}; | ||
error?: undefined; | ||
} | { | ||
error: Error; | ||
ok?: undefined; | ||
}>; | ||
toJSON(): UCAN.SignatureJSON<Signature<T, A>>; | ||
} | ||
export {}; | ||
export function create<T extends unknown, A extends number>(code: A, raw: Uint8Array): UCAN.SignatureView<T, A>; | ||
export function createNamed<T extends unknown>(name: string, raw: Uint8Array): UCAN.SignatureView<T, UCAN.SigAlg>; | ||
export function createNonStandard<T extends unknown>(name: string, raw: Uint8Array): UCAN.SignatureView<T, 53248>; | ||
export function view<T extends unknown, A extends number>(bytes: UCAN.ByteView<UCAN.Signature<T, A>>): UCAN.Signature<T, A>; | ||
export function decode<T extends unknown, A extends number>(bytes: UCAN.ByteView<UCAN.Signature<T, A>>): UCAN.Signature<T, A>; | ||
export function encode<T extends unknown, A extends number>(signature: UCAN.Signature<T, A>): UCAN.ByteView<UCAN.Signature<T, A>>; | ||
export function format<T extends unknown, A extends number, Prefix extends string = "u">(signature: UCAN.Signature<T, A>, base?: UCAN.MultibaseEncoder<Prefix> | undefined): UCAN.ToString<UCAN.Signature<T, A>, string>; | ||
export function parse<T extends unknown, A extends number, Prefix extends string = "u">(signature: UCAN.ToString<UCAN.Signature<T, A>, string>, base?: UCAN.MultibaseDecoder<Prefix> | undefined): UCAN.Signature<T, A>; | ||
export function toJSON<Signature_1 extends UCAN.Signature<any, UCAN.SigAlg>>(signature: Signature_1): UCAN.SignatureJSON<Signature_1>; | ||
export function fromJSON<Signature_1 extends UCAN.Signature<any, UCAN.SigAlg>>(json: UCAN.SignatureJSON<Signature_1>): Signature_1; | ||
import * as UCAN from "./ucan.js"; | ||
//# sourceMappingURL=signature.d.ts.map |
@@ -6,2 +6,3 @@ import type { MultibaseEncoder, MultibaseDecoder, MultihashDigest, MultihashHasher, Block as IPLDBlock, Link as IPLDLink, Version as LinkVersion, Phantom, ByteView } from "multiformats"; | ||
export * from "./crypto.js"; | ||
export * as Crypto from "./crypto.js"; | ||
export type { MultibaseEncoder, MultibaseDecoder, MultihashDigest, MultihashHasher, IPLDBlock, IPLDLink, LinkVersion, Phantom, ByteView, }; | ||
@@ -8,0 +9,0 @@ export type Code = MulticodecCode<typeof CBOR_CODE, "CBOR"> | MulticodecCode<typeof RAW_CODE, "Raw">; |
{ | ||
"name": "@ipld/dag-ucan", | ||
"description": "UCAN codec for IPLD", | ||
"version": "3.2.0", | ||
"version": "3.3.0", | ||
"keywords": [ | ||
@@ -6,0 +6,0 @@ "UCAN", |
@@ -61,2 +61,14 @@ import type { | ||
export interface SignatureView<T = unknown, Alg extends SigAlg = SigAlg> | ||
extends Signature<T, Alg> { | ||
/** | ||
* Verifies that the signature was produced by the given from the given | ||
* payload. | ||
*/ | ||
verify: ( | ||
signer: Verifier<Alg>, | ||
payload: ByteView<T> | ||
) => Await<{ ok: {}; error?: void } | { error: Error; ok?: undefined }> | ||
} | ||
export type SignatureJSON<T extends Signature = Signature> = ToJSON< | ||
@@ -63,0 +75,0 @@ T, |
@@ -80,5 +80,5 @@ import * as UCAN from "./ucan.js" | ||
* @template {number} A | ||
* @implements {UCAN.Signature<T, A>} | ||
* @implements {UCAN.SignatureView<T, A>} | ||
*/ | ||
class Signature extends Uint8Array { | ||
export class Signature extends Uint8Array { | ||
get code() { | ||
@@ -110,2 +110,20 @@ const [code] = varint.decode(this) | ||
/** | ||
* Verify that this signature was created by the given key. | ||
* | ||
* @param {UCAN.Crypto.Verifier<A>} signer | ||
* @param {UCAN.ByteView<T>} payload | ||
*/ | ||
async verify(signer, payload) { | ||
try { | ||
if ((await signer.verify(payload, this)) === true) { | ||
return { ok: {} } | ||
} else { | ||
throw new Error("Invalid signature") | ||
} | ||
} catch (cause) { | ||
return { error: /** @type {Error} */ (cause) } | ||
} | ||
} | ||
toJSON() { | ||
@@ -149,3 +167,3 @@ return toJSON(this) | ||
* @param {Uint8Array} raw | ||
* @returns {UCAN.Signature<T, A>} | ||
* @returns {UCAN.SignatureView<T, A>} | ||
*/ | ||
@@ -173,3 +191,3 @@ export const create = (code, raw) => { | ||
* @param {Uint8Array} raw | ||
* @return {UCAN.Signature<T>} | ||
* @return {UCAN.SignatureView<T>} | ||
*/ | ||
@@ -187,3 +205,3 @@ export const createNamed = (name, raw) => { | ||
* @param {Uint8Array} raw | ||
* @return {UCAN.Signature<T, typeof NON_STANDARD>} | ||
* @return {UCAN.SignatureView<T, typeof NON_STANDARD>} | ||
*/ | ||
@@ -190,0 +208,0 @@ export const createNonStandard = (name, raw) => { |
@@ -17,2 +17,3 @@ import type { | ||
export * from "./crypto.js" | ||
export * as Crypto from "./crypto.js" | ||
export type { | ||
@@ -19,0 +20,0 @@ MultibaseEncoder, |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
92043
2323