@isomorphic-pgp/parser
Version:
An OpenPGP message parser
42 lines (37 loc) • 1.58 kB
JavaScript
const concatenate = require("concat-buffers");
const { select } = require("select-case");
const UrlSafeBase64 = require("../../UrlSafeBase64.js");
const Length = require("./Length.js");
const CreationTime = require("./CreationTime.js");
const SignatureExpirationTime = require("./SignatureExpirationTime.js");
const KeyExpirationTime = require("./KeyExpirationTime.js");
const Issuer = require("./Issuer.js");
const KeyFlags = require("./KeyFlags.js");
module.exports.parse = function parse(a) {
let subpacket = {
length: Length.parse(a),
type: a.b[a.i++]
};
let _data = a.b.slice(a.i, (a.i += subpacket.length - 1));
subpacket.subpacket = select(subpacket.type, {
2: () => CreationTime.parse(_data),
3: () => SignatureExpirationTime.parse(_data),
9: () => KeyExpirationTime.parse(_data),
16: () => Issuer.parse(_data),
27: () => KeyFlags.parse(_data),
default: () => ({ data: UrlSafeBase64.parse(_data) })
});
return subpacket;
}
module.exports.serialize = function serialize(subpacket) {
let content = select(subpacket.type, {
2: () => CreationTime.serialize(subpacket.subpacket),
3: () => SignatureExpirationTime.serialize(subpacket.subpacket),
9: () => KeyExpirationTime.serialize(subpacket.subpacket),
16: () => Issuer.serialize(subpacket.subpacket),
27: () => KeyFlags.serialize(subpacket.subpacket),
default: () => UrlSafeBase64.serialize(subpacket.subpacket.data)
});
let length = Length.serialize(content.length + 1);
return concatenate([length, new Uint8Array([subpacket.type]), content]);
}