kbpgp
Version:
Keybase's PGP Implementation
1,130 lines (1,081 loc) • 41.8 kB
JavaScript
// Generated by IcedCoffeeScript 108.0.11
(function() {
var C, KeyBlock, Message, OPS, Warnings, armor, athrow, bufeq_secure, do_message, hashmod, iced, import_key_pgp, katch, konst, make_esc, parse, unix_time, util, verify_clearsign, verify_detached, __iced_k, __iced_k_noop, _ref;
iced = require('iced-runtime');
__iced_k = __iced_k_noop = function() {};
make_esc = require('iced-error').make_esc;
OPS = require('../keyfetch').OPS;
konst = require('../const');
C = konst.openpgp;
_ref = require('../util'), katch = _ref.katch, unix_time = _ref.unix_time, athrow = _ref.athrow, Warnings = _ref.Warnings, bufeq_secure = _ref.bufeq_secure;
parse = require('./parser').parse;
import_key_pgp = require('../symmetric').import_key_pgp;
util = require('util');
armor = require('./armor');
hashmod = require('../hash');
verify_clearsign = require('./clearsign').verify;
verify_detached = require('./detachsign').verify;
KeyBlock = (function() {
function KeyBlock(packets, opts) {
this.packets = packets;
this.verified_signatures = [];
this.subkeys = [];
this.primary = null;
this.userids = [];
this.user_attributes = [];
this.warnings = new Warnings();
this.opts = opts || {};
if (this.opts.strict == null) {
this.opts.strict = true;
}
}
KeyBlock.prototype.to_obj = function() {
return {
subkeys: this.subkeys,
primary: this.primary,
userids: this.userids
};
};
KeyBlock.prototype._extract_keys = function() {
var err, i, p, _i, _len, _ref1;
err = null;
if (!this.packets.length) {
err = new Error("No packets; cannot extract a key");
} else if (!(this.primary = this.packets[0]).is_primary()) {
err = new Error("First packet must be the primary key");
} else {
_ref1 = this.packets.slice(1);
for (i = _i = 0, _len = _ref1.length; _i < _len; i = ++_i) {
p = _ref1[i];
if (p.is_key_material() && (err == null)) {
if (p.key.is_toxic()) {
this.warnings.push("Ignoring toxic subkey (ElGamal Encrypt+Sign)");
} else if (!p.is_primary()) {
this.subkeys.push(p);
} else if (bufeq_secure(p.get_fingerprint(), this.primary.get_fingerprint())) {
p.set_duplicate_primary();
} else {
err = new Error("cannot have 2 primary keys");
}
}
}
}
return err;
};
KeyBlock.prototype._check_keys = function() {
return this._check_primary() || this._check_subkeys();
};
KeyBlock.prototype._check_primary = function() {
var err;
return err = !this.primary.is_self_signed() ? new Error("no valid primary key self-signature or key(s) have expired") : (this.userids = this.primary.get_signed_userids()).length === 0 ? new Error("no valid Userid signed into key") : (this.user_attributes = this.primary.get_signed_user_attributes(), null);
};
KeyBlock.prototype._check_subkeys = function() {
var err, i, k, msg, subkeys, _i, _len;
subkeys = this.subkeys;
err = null;
this.subkeys = [];
for (i = _i = 0, _len = subkeys.length; _i < _len; i = ++_i) {
k = subkeys[i];
if (err == null) {
if (k.is_signed_subkey_of(this.primary, this.opts)) {
this.subkeys.push(k);
} else {
msg = "Subkey " + i + " was invalid; discarding";
this.warnings.push(msg);
}
}
}
return err;
};
KeyBlock.prototype.process = function(cb) {
var err, ___iced_passed_deferral, __iced_deferrals, __iced_k;
__iced_k = __iced_k_noop;
___iced_passed_deferral = iced.findDeferral(arguments);
err = this._extract_keys();
(function(_this) {
return (function(__iced_k) {
if (err == null) {
(function(__iced_k) {
__iced_deferrals = new iced.Deferrals(__iced_k, {
parent: ___iced_passed_deferral,
filename: "/Users/max/src/keybase/kbpgp/src/openpgp/processor.iced",
funcname: "KeyBlock.process"
});
_this._verify_sigs(__iced_deferrals.defer({
assign_fn: (function() {
return function() {
return err = arguments[0];
};
})(),
lineno: 87
}));
__iced_deferrals._fulfill();
})(__iced_k);
} else {
return __iced_k();
}
});
})(this)((function(_this) {
return function() {
var _ref1;
if ((_ref1 = _this.opts) != null ? _ref1.no_check_keys : void 0) {
if (err == null) {
_this.userids = _this.primary.get_signed_userids();
}
} else {
if (err == null) {
err = _this._check_keys();
}
}
return cb(err);
};
})(this));
};
KeyBlock.prototype._get_issuer = function(i, packet, primary) {
var fp, iid;
if ((fp = packet.get_issuer_fingerprint()) != null) {
return [fp, bufeq_secure(fp, this.primary.get_fingerprint()), this.primary.get_fingerprint()];
}
if ((iid = packet.get_issuer_key_id()) != null) {
return [iid, bufeq_secure(iid, this.primary.get_key_id()), this.primary.get_key_id()];
}
this.warnings.push("Signature is missing an issuer (at packet=" + i + ")");
return [null, false];
};
KeyBlock.prototype._verify_sigs = function(cb) {
var err, expected_ours, i, issuer_id, matches_ours, msg, n_sigs, p, tmp, working_set, ___iced_passed_deferral, __iced_deferrals, __iced_k;
__iced_k = __iced_k_noop;
___iced_passed_deferral = iced.findDeferral(arguments);
err = null;
working_set = [];
n_sigs = 0;
(function(_this) {
return (function(__iced_k) {
var _i, _len, _ref1, _results, _while;
_ref1 = _this.packets.slice(1);
_len = _ref1.length;
i = 0;
_while = function(__iced_k) {
var _break, _continue, _next;
_break = __iced_k;
_continue = function() {
return iced.trampoline(function() {
++i;
return _while(__iced_k);
});
};
_next = _continue;
if (!(i < _len)) {
return _break();
} else {
p = _ref1[i];
if (err == null) {
(function(__iced_k) {
if (!p.is_signature()) {
if (n_sigs > 0) {
n_sigs = 0;
working_set = [];
}
if (!p.is_duplicate_primary()) {
working_set.push(p);
}
(function(__iced_k) {
_continue()
})(__iced_k);
} else {
return __iced_k();
}
})(function() {
var _ref2;
n_sigs++;
_ref2 = _this._get_issuer(i, p, _this.primary), issuer_id = _ref2[0], matches_ours = _ref2[1], expected_ours = _ref2[2];
(function(__iced_k) {
if (issuer_id != null) {
(function(__iced_k) {
if (!(matches_ours || p.type === C.sig_types.key_revocation)) {
_this.warnings.push("Skipping signature by another issuer: " + (issuer_id != null ? issuer_id.toString('hex') : void 0) + " != " + (expected_ours != null ? expected_ours.toString('hex') : void 0));
(function(__iced_k) {
_continue()
})(__iced_k);
} else {
return __iced_k();
}
})(function() {
p.key = _this.primary.key;
p.primary = _this.primary;
p.is_third_party = !matches_ours;
(function(__iced_k) {
__iced_deferrals = new iced.Deferrals(__iced_k, {
parent: ___iced_passed_deferral,
filename: "/Users/max/src/keybase/kbpgp/src/openpgp/processor.iced",
funcname: "KeyBlock._verify_sigs"
});
p.verify(working_set, __iced_deferrals.defer({
assign_fn: (function() {
return function() {
return tmp = arguments[0];
};
})(),
lineno: 137
}), _this.opts);
__iced_deferrals._fulfill();
})(function() {
return __iced_k(typeof tmp !== "undefined" && tmp !== null ? (msg = "Signature failure in packet " + i + ": " + tmp.message + " (" + (issuer_id.toString('hex')) + ")", _this.warnings.push(msg)) : _this.verified_signatures.push(p));
});
});
} else {
return __iced_k();
}
})(_next);
});
} else {
return _continue();
}
}
};
_while(__iced_k);
});
})(this)((function(_this) {
return function() {
return cb(err);
};
})(this));
};
return KeyBlock;
})();
Message = (function() {
function Message(_arg) {
this.keyfetch = _arg.keyfetch, this.data_fn = _arg.data_fn, this.data = _arg.data, this.strict = _arg.strict, this.now = _arg.now, this.assert_pgp_hash = _arg.assert_pgp_hash;
this.literals = [];
this.enc_data_packet = null;
this.warnings = new Warnings();
}
Message.prototype._get_session_key = function(cb) {
var enc, err, esk_packets, fingerprint, index, key_ids, key_material, km, p, packet, pkcs5, privk, sesskey, ___iced_passed_deferral, __iced_deferrals, __iced_k;
__iced_k = __iced_k_noop;
___iced_passed_deferral = iced.findDeferral(arguments);
key_ids = [];
esk_packets = [];
err = null;
pkcs5 = false;
key_ids = (function() {
var _results;
_results = [];
while (this.packets.length && (p = this.packets[0].to_esk_packet())) {
esk_packets.push(p);
this.packets.shift();
_results.push(p.get_key_id());
}
return _results;
}).call(this);
(function(_this) {
return (function(__iced_k) {
if (key_ids.length) {
enc = true;
(function(__iced_k) {
__iced_deferrals = new iced.Deferrals(__iced_k, {
parent: ___iced_passed_deferral,
filename: "/Users/max/src/keybase/kbpgp/src/openpgp/processor.iced",
funcname: "Message._get_session_key"
});
_this.keyfetch.fetch(key_ids, konst.ops.decrypt, __iced_deferrals.defer({
assign_fn: (function() {
return function() {
err = arguments[0];
km = arguments[1];
return index = arguments[2];
};
})(),
lineno: 178
}));
__iced_deferrals._fulfill();
})(function() {
(function(__iced_k) {
if (err == null) {
packet = esk_packets[index];
key_material = km.find_pgp_key_material(key_ids[index]);
fingerprint = key_material.get_fingerprint();
privk = key_material.key;
(function(__iced_k) {
__iced_deferrals = new iced.Deferrals(__iced_k, {
parent: ___iced_passed_deferral,
filename: "/Users/max/src/keybase/kbpgp/src/openpgp/processor.iced",
funcname: "Message._get_session_key"
});
privk.decrypt_and_unpad(packet.ekey, {
fingerprint: fingerprint
}, __iced_deferrals.defer({
assign_fn: (function() {
return function() {
err = arguments[0];
sesskey = arguments[1];
return pkcs5 = arguments[2];
};
})(),
lineno: 184
}));
__iced_deferrals._fulfill();
})(function() {
return __iced_k(err == null ? _this.encryption_subkey = key_material : void 0);
});
} else {
return __iced_k();
}
})(__iced_k);
});
} else {
return __iced_k(enc = false);
}
});
})(this)((function(_this) {
return function() {
return cb(err, enc, sesskey, pkcs5);
};
})(this));
};
Message.prototype._find_encrypted_data = function(cb) {
var err, ret;
err = ret = null;
if (this.packets.length && (ret = this.packets[0].to_enc_data_packet())) {
this.packets.pop();
} else {
err = new Error("Could not find encrypted data packet");
}
return cb(err, ret);
};
Message.prototype._decrypt_with_session_key = function(sesskey, edat, pkcs5, cb) {
var cipher, err, ret, ___iced_passed_deferral, __iced_deferrals, __iced_k, _ref1;
__iced_k = __iced_k_noop;
___iced_passed_deferral = iced.findDeferral(arguments);
_ref1 = katch(function() {
return import_key_pgp(sesskey, pkcs5);
}), err = _ref1[0], cipher = _ref1[1];
(function(_this) {
return (function(__iced_k) {
if (err == null) {
(function(__iced_k) {
__iced_deferrals = new iced.Deferrals(__iced_k, {
parent: ___iced_passed_deferral,
filename: "/Users/max/src/keybase/kbpgp/src/openpgp/processor.iced",
funcname: "Message._decrypt_with_session_key"
});
edat.decrypt({
cipher: cipher
}, __iced_deferrals.defer({
assign_fn: (function() {
return function() {
err = arguments[0];
return ret = arguments[1];
};
})(),
lineno: 206
}));
__iced_deferrals._fulfill();
})(__iced_k);
} else {
return __iced_k();
}
});
})(this)((function(_this) {
return function() {
return cb(err, ret);
};
})(this));
};
Message.prototype._parse = function(raw, cb) {
var err, packets, _ref1;
_ref1 = parse(raw), err = _ref1[0], packets = _ref1[1];
return cb(err, packets);
};
Message.prototype._decrypt = function(cb) {
var edat, esc, is_enc, packets, pkcs5, plaintext, sesskey, ___iced_passed_deferral, __iced_deferrals, __iced_k;
__iced_k = __iced_k_noop;
___iced_passed_deferral = iced.findDeferral(arguments);
esc = make_esc(cb, "Message::decrypt");
(function(_this) {
return (function(__iced_k) {
__iced_deferrals = new iced.Deferrals(__iced_k, {
parent: ___iced_passed_deferral,
filename: "/Users/max/src/keybase/kbpgp/src/openpgp/processor.iced",
funcname: "Message._decrypt"
});
_this._get_session_key(esc(__iced_deferrals.defer({
assign_fn: (function() {
return function() {
is_enc = arguments[0];
sesskey = arguments[1];
return pkcs5 = arguments[2];
};
})(),
lineno: 219
})));
__iced_deferrals._fulfill();
});
})(this)((function(_this) {
return function() {
(function(__iced_k) {
if (is_enc) {
(function(__iced_k) {
__iced_deferrals = new iced.Deferrals(__iced_k, {
parent: ___iced_passed_deferral,
filename: "/Users/max/src/keybase/kbpgp/src/openpgp/processor.iced",
funcname: "Message._decrypt"
});
_this._find_encrypted_data(esc(__iced_deferrals.defer({
assign_fn: (function() {
return function() {
return edat = arguments[0];
};
})(),
lineno: 221
})));
__iced_deferrals._fulfill();
})(function() {
(function(__iced_k) {
__iced_deferrals = new iced.Deferrals(__iced_k, {
parent: ___iced_passed_deferral,
filename: "/Users/max/src/keybase/kbpgp/src/openpgp/processor.iced",
funcname: "Message._decrypt"
});
_this._decrypt_with_session_key(sesskey, edat, pkcs5, esc(__iced_deferrals.defer({
assign_fn: (function() {
return function() {
return plaintext = arguments[0];
};
})(),
lineno: 222
})));
__iced_deferrals._fulfill();
})(function() {
(function(__iced_k) {
__iced_deferrals = new iced.Deferrals(__iced_k, {
parent: ___iced_passed_deferral,
filename: "/Users/max/src/keybase/kbpgp/src/openpgp/processor.iced",
funcname: "Message._decrypt"
});
_this._parse(plaintext, esc(__iced_deferrals.defer({
assign_fn: (function() {
return function() {
return packets = arguments[0];
};
})(),
lineno: 223
})));
__iced_deferrals._fulfill();
})(function() {
return __iced_k(_this.packets = packets.concat(_this.packets));
});
});
});
} else {
return __iced_k();
}
})(function() {
return cb(null);
});
};
})(this));
};
Message.prototype._inflate = function(cb) {
var esc, inflated, p, packets, ___iced_passed_deferral, __iced_deferrals, __iced_k;
__iced_k = __iced_k_noop;
___iced_passed_deferral = iced.findDeferral(arguments);
packets = [];
esc = make_esc(cb, "Message::_inflate");
(function(_this) {
return (function(__iced_k) {
var _i, _len, _ref1, _results, _while;
_ref1 = _this.packets;
_len = _ref1.length;
_i = 0;
_while = function(__iced_k) {
var _break, _continue, _next;
_break = __iced_k;
_continue = function() {
return iced.trampoline(function() {
++_i;
return _while(__iced_k);
});
};
_next = _continue;
if (!(_i < _len)) {
return _break();
} else {
p = _ref1[_i];
(function(__iced_k) {
__iced_deferrals = new iced.Deferrals(__iced_k, {
parent: ___iced_passed_deferral,
filename: "/Users/max/src/keybase/kbpgp/src/openpgp/processor.iced",
funcname: "Message._inflate"
});
p.inflate(esc(__iced_deferrals.defer({
assign_fn: (function() {
return function() {
return inflated = arguments[0];
};
})(),
lineno: 233
})));
__iced_deferrals._fulfill();
})(function() {
(function(__iced_k) {
if (typeof inflated !== "undefined" && inflated !== null) {
(function(__iced_k) {
__iced_deferrals = new iced.Deferrals(__iced_k, {
parent: ___iced_passed_deferral,
filename: "/Users/max/src/keybase/kbpgp/src/openpgp/processor.iced",
funcname: "Message._inflate"
});
_this._parse(inflated, esc(__iced_deferrals.defer({
assign_fn: (function() {
return function() {
return p = arguments[0];
};
})(),
lineno: 235
})));
__iced_deferrals._fulfill();
})(function() {
return __iced_k(packets.push.apply(packets, p));
});
} else {
return __iced_k(packets.push(p));
}
})(_next);
});
}
};
_while(__iced_k);
});
})(this)((function(_this) {
return function() {
_this.packets = packets;
return cb(null);
};
})(this));
};
Message.prototype._frame_signatures = function() {
var o, p, payload, ret, stack, _i, _j, _len, _len1, _ref1;
ret = [];
stack = [];
payload = [];
_ref1 = this.packets;
for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
p = _ref1[_i];
if (p.tag === C.packet_tags.one_pass_sig) {
stack.push({
open: p
});
} else if (!stack.length) {
} else if (p.tag === C.packet_tags.signature) {
o = stack.pop();
o.close = p;
ret.push(o);
} else {
payload.push(p);
}
}
for (_j = 0, _len1 = ret.length; _j < _len1; _j++) {
o = ret[_j];
o.payload = payload;
}
return ret;
};
Message.prototype._verify_sig = function(sig, cb) {
var a, b, err, i, key_material, km, ___iced_passed_deferral, __iced_deferrals, __iced_k;
__iced_k = __iced_k_noop;
___iced_passed_deferral = iced.findDeferral(arguments);
err = null;
if (!bufeq_secure((a = sig.open.key_id), (b = sig.close.get_key_id()))) {
err = new Error("signature mismatch open v close: " + (a != null ? a.toString('hex') : void 0) + " != " + (b != null ? b.toString('hex') : void 0));
}
(function(_this) {
return (function(__iced_k) {
if (err == null) {
(function(__iced_k) {
__iced_deferrals = new iced.Deferrals(__iced_k, {
parent: ___iced_passed_deferral,
filename: "/Users/max/src/keybase/kbpgp/src/openpgp/processor.iced",
funcname: "Message._verify_sig"
});
_this.keyfetch.fetch([a], konst.ops.verify, __iced_deferrals.defer({
assign_fn: (function() {
return function() {
err = arguments[0];
km = arguments[1];
return i = arguments[2];
};
})(),
lineno: 274
}));
__iced_deferrals._fulfill();
})(function() {
return __iced_k(err != null ? err = new Error("Can't find a key for " + (a.toString('hex')) + ": " + err.message) : void 0);
});
} else {
return __iced_k();
}
});
})(this)((function(_this) {
return function() {
(function(__iced_k) {
if (err == null) {
key_material = km.find_pgp_key_material(a);
sig.close.key = key_material.key;
sig.close.subkey_material = key_material;
sig.close.key_manager = km;
(function(__iced_k) {
__iced_deferrals = new iced.Deferrals(__iced_k, {
parent: ___iced_passed_deferral,
filename: "/Users/max/src/keybase/kbpgp/src/openpgp/processor.iced",
funcname: "Message._verify_sig"
});
sig.close.verify(sig.payload, __iced_deferrals.defer({
assign_fn: (function() {
return function() {
return err = arguments[0];
};
})(),
lineno: 289
}), {
now: _this.now,
assert_pgp_hash: _this.assert_pgp_hash
});
__iced_deferrals._fulfill();
})(__iced_k);
} else {
return __iced_k(!_this.strict ? (_this.warnings.push("Problem fetching key " + (a.toString('hex')) + ": " + (err.toString())), err = null) : void 0);
}
})(function() {
return cb(err);
});
};
})(this));
};
Message.prototype._verify = function(cb) {
var esc, sig, sigs, ___iced_passed_deferral, __iced_deferrals, __iced_k;
__iced_k = __iced_k_noop;
___iced_passed_deferral = iced.findDeferral(arguments);
esc = make_esc(cb, "Message::_verify_sigs");
sigs = this._frame_signatures();
(function(_this) {
return (function(__iced_k) {
var _i, _len, _ref1, _results, _while;
_ref1 = sigs;
_len = _ref1.length;
_i = 0;
_while = function(__iced_k) {
var _break, _continue, _next;
_break = __iced_k;
_continue = function() {
return iced.trampoline(function() {
++_i;
return _while(__iced_k);
});
};
_next = _continue;
if (!(_i < _len)) {
return _break();
} else {
sig = _ref1[_i];
(function(__iced_k) {
__iced_deferrals = new iced.Deferrals(__iced_k, {
parent: ___iced_passed_deferral,
filename: "/Users/max/src/keybase/kbpgp/src/openpgp/processor.iced",
funcname: "Message._verify"
});
_this._verify_sig(sig, esc(__iced_deferrals.defer({
lineno: 303
})));
__iced_deferrals._fulfill();
})(_next);
}
};
_while(__iced_k);
});
})(this)((function(_this) {
return function() {
return cb(null);
};
})(this));
};
Message.prototype.collect_literals = function() {
var p, _i, _len, _ref1, _results;
_ref1 = this.packets;
_results = [];
for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
p = _ref1[_i];
if (p.tag === C.packet_tags.literal) {
_results.push(p);
}
}
return _results;
};
Message.prototype._process_generic = function(_arg, cb) {
var esc, packets, ___iced_passed_deferral, __iced_deferrals, __iced_k;
__iced_k = __iced_k_noop;
___iced_passed_deferral = iced.findDeferral(arguments);
packets = _arg.packets;
this.packets = packets;
esc = make_esc(cb, "Message:process");
(function(_this) {
return (function(__iced_k) {
__iced_deferrals = new iced.Deferrals(__iced_k, {
parent: ___iced_passed_deferral,
filename: "/Users/max/src/keybase/kbpgp/src/openpgp/processor.iced",
funcname: "Message._process_generic"
});
_this._decrypt(esc(__iced_deferrals.defer({
lineno: 316
})));
__iced_deferrals._fulfill();
});
})(this)((function(_this) {
return function() {
(function(__iced_k) {
__iced_deferrals = new iced.Deferrals(__iced_k, {
parent: ___iced_passed_deferral,
filename: "/Users/max/src/keybase/kbpgp/src/openpgp/processor.iced",
funcname: "Message._process_generic"
});
_this._inflate(esc(__iced_deferrals.defer({
lineno: 317
})));
__iced_deferrals._fulfill();
})(function() {
(function(__iced_k) {
__iced_deferrals = new iced.Deferrals(__iced_k, {
parent: ___iced_passed_deferral,
filename: "/Users/max/src/keybase/kbpgp/src/openpgp/processor.iced",
funcname: "Message._process_generic"
});
_this._verify(esc(__iced_deferrals.defer({
lineno: 318
})));
__iced_deferrals._fulfill();
})(function() {
return cb(null, _this.collect_literals());
});
});
};
})(this));
};
Message.prototype._verify_clearsign = function(_arg, cb) {
var clearsign, err, literal, packets, ___iced_passed_deferral, __iced_deferrals, __iced_k;
__iced_k = __iced_k_noop;
___iced_passed_deferral = iced.findDeferral(arguments);
packets = _arg.packets, clearsign = _arg.clearsign;
(function(_this) {
return (function(__iced_k) {
if (clearsign == null) {
return __iced_k(err = new Error("no clearsign data found"));
} else {
(function(__iced_k) {
__iced_deferrals = new iced.Deferrals(__iced_k, {
parent: ___iced_passed_deferral,
filename: "/Users/max/src/keybase/kbpgp/src/openpgp/processor.iced",
funcname: "Message._verify_clearsign"
});
verify_clearsign({
packets: packets,
clearsign: clearsign,
keyfetch: _this.keyfetch,
now: _this.now,
assert_pgp_hash: _this.assert_pgp_hash
}, __iced_deferrals.defer({
assign_fn: (function() {
return function() {
err = arguments[0];
return literal = arguments[1];
};
})(),
lineno: 327
}));
__iced_deferrals._fulfill();
})(__iced_k);
}
});
})(this)((function(_this) {
return function() {
return cb(err, [literal]);
};
})(this));
};
Message.prototype.parse_and_inflate = function(body, cb) {
var esc, ___iced_passed_deferral, __iced_deferrals, __iced_k;
__iced_k = __iced_k_noop;
___iced_passed_deferral = iced.findDeferral(arguments);
esc = make_esc(cb, "Message::parse_and_inflate");
(function(_this) {
return (function(__iced_k) {
__iced_deferrals = new iced.Deferrals(__iced_k, {
parent: ___iced_passed_deferral,
filename: "/Users/max/src/keybase/kbpgp/src/openpgp/processor.iced",
funcname: "Message.parse_and_inflate"
});
_this._parse(body, esc(__iced_deferrals.defer({
assign_fn: (function(__slot_1) {
return function() {
return __slot_1.packets = arguments[0];
};
})(_this),
lineno: 334
})));
__iced_deferrals._fulfill();
});
})(this)((function(_this) {
return function() {
(function(__iced_k) {
__iced_deferrals = new iced.Deferrals(__iced_k, {
parent: ___iced_passed_deferral,
filename: "/Users/max/src/keybase/kbpgp/src/openpgp/processor.iced",
funcname: "Message.parse_and_inflate"
});
_this._inflate(esc(__iced_deferrals.defer({
lineno: 335
})));
__iced_deferrals._fulfill();
})(function() {
return cb(null, _this.collect_literals());
});
};
})(this));
};
Message.prototype.parse_and_process = function(msg, cb) {
var esc, literals, packets, ___iced_passed_deferral, __iced_deferrals, __iced_k;
__iced_k = __iced_k_noop;
___iced_passed_deferral = iced.findDeferral(arguments);
esc = make_esc(cb, "Message::parse_and_process");
(function(_this) {
return (function(__iced_k) {
__iced_deferrals = new iced.Deferrals(__iced_k, {
parent: ___iced_passed_deferral,
filename: "/Users/max/src/keybase/kbpgp/src/openpgp/processor.iced",
funcname: "Message.parse_and_process"
});
_this._parse(msg.body, esc(__iced_deferrals.defer({
assign_fn: (function() {
return function() {
return packets = arguments[0];
};
})(),
lineno: 342
})));
__iced_deferrals._fulfill();
});
})(this)((function(_this) {
return function() {
(function(__iced_k) {
__iced_deferrals = new iced.Deferrals(__iced_k, {
parent: ___iced_passed_deferral,
filename: "/Users/max/src/keybase/kbpgp/src/openpgp/processor.iced",
funcname: "Message.parse_and_process"
});
_this._process({
msg: msg,
packets: packets
}, esc(__iced_deferrals.defer({
assign_fn: (function() {
return function() {
return literals = arguments[0];
};
})(),
lineno: 343
})));
__iced_deferrals._fulfill();
})(function() {
return cb(null, literals);
});
};
})(this));
};
Message.prototype._verify_signature = function(_arg, cb) {
var err, literals, packets, ___iced_passed_deferral, __iced_deferrals, __iced_k;
__iced_k = __iced_k_noop;
___iced_passed_deferral = iced.findDeferral(arguments);
packets = _arg.packets;
(function(_this) {
return (function(__iced_k) {
if (!((_this.data != null) || (_this.data_fn != null))) {
return __iced_k(err = new Error("Cannot verify detached signature without data input"));
} else {
(function(__iced_k) {
__iced_deferrals = new iced.Deferrals(__iced_k, {
parent: ___iced_passed_deferral,
filename: "/Users/max/src/keybase/kbpgp/src/openpgp/processor.iced",
funcname: "Message._verify_signature"
});
verify_detached({
packets: packets,
data: _this.data,
data_fn: _this.data_fn,
keyfetch: _this.keyfetch,
now: _this.now,
assert_pgp_hash: _this.assert_pgp_hash
}, __iced_deferrals.defer({
assign_fn: (function() {
return function() {
err = arguments[0];
return literals = arguments[1];
};
})(),
lineno: 352
}));
__iced_deferrals._fulfill();
})(__iced_k);
}
});
})(this)((function(_this) {
return function() {
return cb(err, literals);
};
})(this));
};
Message.prototype._process = function(_arg, cb) {
var err, literals, msg, packets, ___iced_passed_deferral, __iced_deferrals, __iced_k;
__iced_k = __iced_k_noop;
___iced_passed_deferral = iced.findDeferral(arguments);
msg = _arg.msg, packets = _arg.packets;
msg.type || (msg.type = C.message_types.generic);
(function(_this) {
return (function(__iced_k) {
switch (msg.type) {
case C.message_types.generic:
(function(__iced_k) {
__iced_deferrals = new iced.Deferrals(__iced_k, {
parent: ___iced_passed_deferral,
filename: "/Users/max/src/keybase/kbpgp/src/openpgp/processor.iced",
funcname: "Message._process"
});
_this._process_generic({
packets: packets
}, __iced_deferrals.defer({
assign_fn: (function() {
return function() {
err = arguments[0];
return literals = arguments[1];
};
})(),
lineno: 361
}));
__iced_deferrals._fulfill();
})(__iced_k);
break;
case C.message_types.clearsign:
(function(__iced_k) {
__iced_deferrals = new iced.Deferrals(__iced_k, {
parent: ___iced_passed_deferral,
filename: "/Users/max/src/keybase/kbpgp/src/openpgp/processor.iced",
funcname: "Message._process"
});
_this._verify_clearsign({
packets: packets,
clearsign: msg.clearsign
}, __iced_deferrals.defer({
assign_fn: (function() {
return function() {
err = arguments[0];
return literals = arguments[1];
};
})(),
lineno: 363
}));
__iced_deferrals._fulfill();
})(__iced_k);
break;
case C.message_types.signature:
(function(__iced_k) {
__iced_deferrals = new iced.Deferrals(__iced_k, {
parent: ___iced_passed_deferral,
filename: "/Users/max/src/keybase/kbpgp/src/openpgp/processor.iced",
funcname: "Message._process"
});
_this._verify_signature({
packets: packets
}, __iced_deferrals.defer({
assign_fn: (function() {
return function() {
err = arguments[0];
return literals = arguments[1];
};
})(),
lineno: 365
}));
__iced_deferrals._fulfill();
})(__iced_k);
break;
default:
return __iced_k(err = new Error("Needed a 'generic', 'clearsign', or 'signature' PGP message, got " + msg.type));
}
});
})(this)((function(_this) {
return function() {
return cb(err, literals);
};
})(this));
};
return Message;
})();
exports.KeyBlock = KeyBlock;
exports.Message = Message;
exports.do_message = do_message = function(_arg, cb) {
var armored, data, data_fn, err, esk, keyfetch, literals, msg, msg_type, now, proc, raw, strict, warnings, ___iced_passed_deferral, __iced_deferrals, __iced_k, _ref1;
__iced_k = __iced_k_noop;
___iced_passed_deferral = iced.findDeferral(arguments);
armored = _arg.armored, raw = _arg.raw, msg_type = _arg.msg_type, keyfetch = _arg.keyfetch, data_fn = _arg.data_fn, data = _arg.data, strict = _arg.strict, now = _arg.now;
literals = null;
err = msg = warnings = esk = null;
if (armored != null) {
_ref1 = armor.decode(armored), err = _ref1[0], msg = _ref1[1];
} else if (raw != null) {
msg_type || (msg_type = C.message_types.generic);
msg = {
body: raw,
type: msg_type
};
} else {
err = new Error("No input to do_message; need either 'armored' or 'raw' input");
}
(function(_this) {
return (function(__iced_k) {
if (err == null) {
if (strict == null) {
strict = true;
}
proc = new Message({
keyfetch: keyfetch,
data_fn: data_fn,
data: data,
strict: strict,
now: now
});
(function(__iced_k) {
__iced_deferrals = new iced.Deferrals(__iced_k, {
parent: ___iced_passed_deferral,
filename: "/Users/max/src/keybase/kbpgp/src/openpgp/processor.iced"
});
proc.parse_and_process(msg, __iced_deferrals.defer({
assign_fn: (function() {
return function() {
err = arguments[0];
return literals = arguments[1];
};
})(),
lineno: 413
}));
__iced_deferrals._fulfill();
})(function() {
warnings = proc.warnings;
return __iced_k(esk = proc.encryption_subkey);
});
} else {
return __iced_k();
}
});
})(this)((function(_this) {
return function() {
return cb(err, literals, warnings, esk);
};
})(this));
};
}).call(this);