import type { KeyID, Signature as InnerSignature, SignaturePacket, } from "openpgp"; import { defined, identity } from "../../utils/anonymous.ts"; import { type MaybeIterable, surelyIterable } from "../../utils/iterator.ts"; export class Signature { private signature!: InnerSignature; #packets!: Map; constructor(signature: InnerSignature) { this.signature = signature; this.#packets = new Map(); for (const packet of this.signature.packets) { const key = packet.issuerKeyID.bytes; const keyPackets = this.#packets.get(key); if (keyPackets !== undefined) { keyPackets.push(new Packet(packet)); } else { this.#packets.set(key, [new Packet(packet)]); } } } getPackets(key?: MaybeIterable): Packet[] { key ??= this.signingKeyIDs; const iterator = Iterator.from(surelyIterable(key)); return iterator.map((key) => this.#packets.get(key.bytes)).filter(defined) .flatMap(identity).toArray(); } get signingKeyIDs(): ReturnType< InstanceType["getSigningKeyIDs"] > { return this.signature.getSigningKeyIDs(); } get inner(): InnerSignature { return this.signature; } } export class Packet { private packet!: SignaturePacket; constructor(packet: SignaturePacket) { this.packet = packet; } get signersUserID(): SignaturePacket["signersUserID"] { return this.packet.signersUserID; } get issuerKeyID(): SignaturePacket["issuerKeyID"] { return this.packet.issuerKeyID; } get issuerFingerprint(): SignaturePacket["issuerFingerprint"] { return this.packet.issuerFingerprint; } get created(): SignaturePacket["created"] { return this.packet.created; } get signatureType(): SignaturePacket["signatureType"] { return this.packet.signatureType; } get trustLevel(): SignaturePacket["trustLevel"] { return this.packet.trustLevel; } get trustAmount(): SignaturePacket["trustAmount"] { return this.packet.trustAmount; } get inner(): SignaturePacket { return this.packet; } }