keybase-proofs
Version:
Publicly-verifiable proofs of identity
470 lines (438 loc) • 15.5 kB
JavaScript
// Generated by IcedCoffeeScript 108.0.11
(function() {
var Base, EncKeyManager, KeyManager, RotateKey, TeamBase, constants, iced, make_esc, pack, parse, schema, unpack, __iced_k, __iced_k_noop, _ref, _ref1,
__hasProp = {}.hasOwnProperty,
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
iced = require('iced-runtime');
__iced_k = __iced_k_noop = function() {};
Base = require('./sig3').Base;
constants = require('./constants').constants;
parse = require('./parse3');
_ref = require('kbpgp').kb, EncKeyManager = _ref.EncKeyManager, KeyManager = _ref.KeyManager;
make_esc = require('iced-error').make_esc;
schema = require('./schema3');
_ref1 = require('purepack'), pack = _ref1.pack, unpack = _ref1.unpack;
exports.TeamBase = TeamBase = (function(_super) {
__extends(TeamBase, _super);
function TeamBase(args) {
this.team = args.team;
TeamBase.__super__.constructor.call(this, args);
}
TeamBase.prototype._v_encode_inner = function(_arg) {
var json, obj;
json = _arg.json;
obj = {
i: Buffer.from(this.team.id, 'hex')
};
obj.m = !!this.team.is_implicit;
obj.p = !!this.team.is_public;
if (this.team.admin != null) {
obj.a = {
i: this.team.admin.id,
s: this.team.admin.seqno,
t: this.team.admin.chain_type
};
}
return json.t = obj;
};
TeamBase.prototype._v_extend_schema = function(schm) {
return schm.set_key("t", schema.dict({
a: schema.dict({
i: schema.binary(16).name("team_id"),
s: schema.seqno().name("seqno"),
t: schema.chain_type().name("chain_type")
}).optional().name("implicit_admin"),
i: schema.binary(16).name("team_id"),
m: schema.bool().optional().name("is_implicit"),
p: schema.bool().optional().name("is_public")
}).name('team'));
};
TeamBase.prototype._v_decode_inner = function(_arg, cb) {
var json;
json = _arg.json;
this.team = {
id: json.t.i,
is_public: !!json.t.p,
is_implicit: !!json.t.m
};
if (json.t.a != null) {
this.team.admin = {
id: json.t.a.i,
seqno: json.t.a.s,
chain_type: json.t.a.t
};
}
return cb(null);
};
TeamBase.prototype.to_v2_team_obj = function() {
var ret;
ret = {
id: this.team.id.toString('hex'),
is_implicit: this.team.is_implicit,
is_public: this.team.is_public
};
if (this.team.admin != null) {
ret.admin = {
team_id: this.team.admin.id.toString('hex'),
seqno: this.team.admin.seqno,
seq_type: this.team.admin.chain_type
};
}
return ret;
};
return TeamBase;
})(Base);
exports.RotateKey = RotateKey = (function(_super) {
__extends(RotateKey, _super);
function RotateKey(args) {
this.per_team_keys = args.per_team_keys;
RotateKey.__super__.constructor.call(this, args);
}
RotateKey.prototype._v_encode_inner = function(_arg) {
var json, k, keys;
json = _arg.json;
RotateKey.__super__._v_encode_inner.call(this, {
json: json
});
keys = (function() {
var _i, _len, _ref2, _results;
_ref2 = this.per_team_keys;
_results = [];
for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
k = _ref2[_i];
_results.push({
a: constants.appkey_derivation_version.xor,
c: k.seed_check,
e: k.enc_km.key.ekid(),
g: k.generation,
r: null,
s: k.sig_km.key.ekid(),
t: k.ptk_type
});
}
return _results;
}).call(this);
return json.b = {
k: keys
};
};
RotateKey.prototype._v_extend_schema = function(schm) {
var elem;
RotateKey.__super__._v_extend_schema.call(this, schm);
elem = schema.dict({
a: schema.value(constants.appkey_derivation_version.xor).name("appkey_derivation_version"),
c: schema.dict({
h: schema.binary(32).name("hash"),
v: schema.value(1).name("version")
}).name("seed_check"),
e: schema.enc_kid().name("encryption_kid"),
g: schema.seqno().name("generation"),
r: schema.binary(64).name("reverse_sig"),
s: schema.kid().name("signing_kid"),
t: schema.ptk_type().name("ptk_type")
}).name("key");
return schm.set_key("b", schema.dict({
k: schema.array(elem).name("keys")
}).name("body"));
};
RotateKey.prototype._decode_key = function(_arg, cb) {
var esc, key, ret, ___iced_passed_deferral, __iced_deferrals, __iced_k;
__iced_k = __iced_k_noop;
___iced_passed_deferral = iced.findDeferral(arguments);
key = _arg.key;
esc = make_esc(cb);
ret = {
generation: key.g,
appkey_derivation_version: key.a,
reverse_sig: key.r,
ptk_type: key.t
};
(function(_this) {
return (function(__iced_k) {
__iced_deferrals = new iced.Deferrals(__iced_k, {
parent: ___iced_passed_deferral,
filename: "/Users/max/src/keybase/proofs/src/team_hidden.iced",
funcname: "RotateKey._decode_key"
});
EncKeyManager.import_public({
raw: key.e
}, esc(__iced_deferrals.defer({
assign_fn: (function(__slot_1) {
return function() {
return __slot_1.enc_km = arguments[0];
};
})(ret),
lineno: 114
})));
__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/proofs/src/team_hidden.iced",
funcname: "RotateKey._decode_key"
});
KeyManager.import_public({
raw: key.s
}, esc(__iced_deferrals.defer({
assign_fn: (function(__slot_1) {
return function() {
return __slot_1.sig_km = arguments[0];
};
})(ret),
lineno: 115
})));
__iced_deferrals._fulfill();
})(function() {
return cb(null, ret);
});
};
})(this));
};
RotateKey.prototype._v_decode_inner = function(_arg, cb) {
var esc, json, key, ptk, seen, ___iced_passed_deferral, __iced_deferrals, __iced_k;
__iced_k = __iced_k_noop;
___iced_passed_deferral = iced.findDeferral(arguments);
json = _arg.json;
esc = make_esc(cb);
(function(_this) {
return (function(__iced_k) {
__iced_deferrals = new iced.Deferrals(__iced_k, {
parent: ___iced_passed_deferral,
filename: "/Users/max/src/keybase/proofs/src/team_hidden.iced",
funcname: "RotateKey._v_decode_inner"
});
RotateKey.__super__._v_decode_inner.call(_this, {
json: json
}, esc(__iced_deferrals.defer({
lineno: 120
})));
__iced_deferrals._fulfill();
});
})(this)((function(_this) {
return function() {
_this.per_team_keys = [];
seen = {};
(function(__iced_k) {
var _i, _len, _ref2, _results, _while;
_ref2 = json.b.k;
_len = _ref2.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 {
key = _ref2[_i];
(function(__iced_k) {
__iced_deferrals = new iced.Deferrals(__iced_k, {
parent: ___iced_passed_deferral,
filename: "/Users/max/src/keybase/proofs/src/team_hidden.iced",
funcname: "RotateKey._v_decode_inner"
});
_this._decode_key({
key: key
}, esc(__iced_deferrals.defer({
assign_fn: (function() {
return function() {
return ptk = arguments[0];
};
})(),
lineno: 124
})));
__iced_deferrals._fulfill();
})(function() {
if (seen[ptk.ptk_type]) {
return cb(new Error("Repeated PTK type " + ptk.ptk_type + " not allowed"));
}
seen[ptk.ptk_type] = true;
return _next(_this.per_team_keys.push(ptk));
});
}
};
_while(__iced_k);
})(function() {
return cb(null);
});
};
})(this));
};
RotateKey.prototype._v_reverse_sign = function(_arg, cb) {
var esc, i, inner, k, outer, sig, ___iced_passed_deferral, __iced_deferrals, __iced_k;
__iced_k = __iced_k_noop;
___iced_passed_deferral = iced.findDeferral(arguments);
inner = _arg.inner, outer = _arg.outer;
esc = make_esc(cb);
(function(_this) {
return (function(__iced_k) {
var _i, _len, _ref2, _results, _while;
_ref2 = _this.per_team_keys;
_len = _ref2.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 {
k = _ref2[i];
(function(__iced_k) {
__iced_deferrals = new iced.Deferrals(__iced_k, {
parent: ___iced_passed_deferral,
filename: "/Users/max/src/keybase/proofs/src/team_hidden.iced",
funcname: "RotateKey._v_reverse_sign"
});
_this._sign({
sig_eng: k.sig_km.make_sig_eng(),
outer: outer
}, esc(__iced_deferrals.defer({
assign_fn: (function() {
return function() {
return sig = arguments[0];
};
})(),
lineno: 134
})));
__iced_deferrals._fulfill();
})(function() {
inner.b.k[i].r = sig;
return _next(outer = _this._generate_outer({
inner: inner
}));
});
}
};
_while(__iced_k);
});
})(this)((function(_this) {
return function() {
return cb(null, {
inner: inner,
outer: outer
});
};
})(this));
};
RotateKey.prototype._v_verify_reverse_sig = function(_arg, cb) {
var esc, i, inner, inner_hash, k, outer, outer_obj, payload, reverse_sigs, s, sig, ___iced_passed_deferral, __iced_deferrals, __iced_k;
__iced_k = __iced_k_noop;
___iced_passed_deferral = iced.findDeferral(arguments);
inner = _arg.inner, outer_obj = _arg.outer_obj;
esc = make_esc(cb);
reverse_sigs = [];
reverse_sigs = (function() {
var _i, _len, _ref2, _results;
_ref2 = inner.b.k;
_results = [];
for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
k = _ref2[_i];
_results.push(k.r);
}
return _results;
})();
inner_hash = outer_obj.inner_hash;
(function(_this) {
return (function(__iced_k) {
var _i, _len, _ref2, _results, _while;
_ref2 = inner.b.k;
_len = _ref2.length;
i = _len - 1;
_while = function(__iced_k) {
var _break, _continue, _next;
_break = __iced_k;
_continue = function() {
return iced.trampoline(function() {
i = i + -1;
return _while(__iced_k);
});
};
_next = _continue;
if (!(i >= 0)) {
return _break();
} else {
k = _ref2[i];
sig = k.r;
k.r = null;
outer_obj.inner_hash = _this._hash(inner);
outer = outer_obj.encode();
payload = pack(outer);
(function(__iced_k) {
__iced_deferrals = new iced.Deferrals(__iced_k, {
parent: ___iced_passed_deferral,
filename: "/Users/max/src/keybase/proofs/src/team_hidden.iced",
funcname: "RotateKey._v_verify_reverse_sig"
});
_this.per_team_keys[i].sig_km.verify_raw({
prefix: _this._prefix(),
payload: payload,
sig: sig
}, esc(__iced_deferrals.defer({
lineno: 150
})));
__iced_deferrals._fulfill();
})(_next);
}
};
_while(__iced_k);
});
})(this)((function(_this) {
return function() {
var _i, _len;
for (i = _i = 0, _len = reverse_sigs.length; _i < _len; i = ++_i) {
s = reverse_sigs[i];
inner.b.k[i].r = s;
}
return cb(null);
};
})(this));
};
RotateKey.prototype._v_link_type_v3 = function() {
return constants.sig_types_v3.team.rotate_key;
};
RotateKey.prototype._v_chain_type_v3 = function() {
return constants.seq_types.TEAM_HIDDEN;
};
RotateKey.prototype._v_assert_is_v2_legacy = function() {
if (typeof err !== "undefined" && err !== null) {
return err;
}
if (this.per_team_keys.length !== 1) {
return new Error("need exactly one PTK");
}
if (this.per_team_keys[0].ptk_type !== constants.ptk_types.reader) {
return new Error("need a reader PTK (no current support for bot or admin keys)");
}
return null;
};
RotateKey.prototype.to_v2_team_obj = function() {
var k, ret;
ret = RotateKey.__super__.to_v2_team_obj.call(this);
k = this.per_team_keys[0];
ret.per_team_key = {
encryption_kid: k.enc_km.key.ekid().toString('hex'),
signing_kid: k.sig_km.key.ekid().toString('hex'),
generation: k.generation,
reverse_sig: k.reverse_sig.toString('base64')
};
return ret;
};
return RotateKey;
})(TeamBase);
}).call(this);