summaryrefslogtreecommitdiff
path: root/src/lib/pgp/sign.ts
diff options
context:
space:
mode:
authorJoão Augusto Costa Branco Marado Torres <torres.dev@disroot.org>2025-06-24 12:08:41 -0300
committerJoão Augusto Costa Branco Marado Torres <torres.dev@disroot.org>2025-06-24 12:50:43 -0300
commitf9a77c5c27aede4e5978eb55d9b7af781b680a1d (patch)
treed545e325ba1ae756fc2eac66fac1001b6753c40d /src/lib/pgp/sign.ts
feat!: initial commit
Signed-off-by: João Augusto Costa Branco Marado Torres <torres.dev@disroot.org>
Diffstat (limited to 'src/lib/pgp/sign.ts')
-rw-r--r--src/lib/pgp/sign.ts82
1 files changed, 82 insertions, 0 deletions
diff --git a/src/lib/pgp/sign.ts b/src/lib/pgp/sign.ts
new file mode 100644
index 0000000..5f7f5a8
--- /dev/null
+++ b/src/lib/pgp/sign.ts
@@ -0,0 +1,82 @@
+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<string, Packet[]>;
+
+ 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<KeyID>): 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<typeof InnerSignature>["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;
+ }
+}