@airgap/icp 0.13.11-beta.1 → 0.13.11-beta.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (144) hide show
  1. package/index.d.ts +1 -0
  2. package/index.js +18 -0
  3. package/index.js.map +1 -0
  4. package/package.json +6 -9
  5. package/v1/block-explorer/ICPBlockExplorer.d.ts +9 -0
  6. package/v1/block-explorer/ICPBlockExplorer.js +74 -0
  7. package/v1/block-explorer/ICPBlockExplorer.js.map +1 -0
  8. package/v1/index.d.ts +14 -0
  9. package/v1/index.js +14 -0
  10. package/v1/index.js.map +1 -0
  11. package/v1/module/ICPModule.d.ts +14 -0
  12. package/v1/module/ICPModule.js +119 -0
  13. package/v1/module/ICPModule.js.map +1 -0
  14. package/v1/module.d.ts +3 -0
  15. package/v1/module.js +24 -0
  16. package/v1/module.js.map +1 -0
  17. package/v1/protocol/ICPImplementation.d.ts +34 -0
  18. package/v1/protocol/ICPImplementation.js +376 -0
  19. package/v1/protocol/ICPImplementation.js.map +1 -0
  20. package/v1/protocol/ICPProtocol.d.ts +45 -0
  21. package/v1/protocol/ICPProtocol.js +423 -0
  22. package/v1/protocol/ICPProtocol.js.map +1 -0
  23. package/v1/protocol/icrc/CkBTCProtocol.d.ts +13 -0
  24. package/v1/protocol/icrc/CkBTCProtocol.js +328 -0
  25. package/v1/protocol/icrc/CkBTCProtocol.js.map +1 -0
  26. package/v1/protocol/icrc/ICRC1Protocol.d.ts +91 -0
  27. package/v1/protocol/icrc/ICRC1Protocol.js +672 -0
  28. package/v1/protocol/icrc/ICRC1Protocol.js.map +1 -0
  29. package/v1/serializer/v3/schemas/converter/transaction-converter.d.ts +7 -0
  30. package/v1/serializer/v3/schemas/converter/transaction-converter.js +21 -0
  31. package/v1/serializer/v3/schemas/converter/transaction-converter.js.map +1 -0
  32. package/v1/serializer/v3/schemas/definitions/transaction-sign-request-icp.d.ts +4 -0
  33. package/v1/serializer/v3/schemas/definitions/transaction-sign-request-icp.js +3 -0
  34. package/v1/serializer/v3/schemas/definitions/transaction-sign-request-icp.js.map +1 -0
  35. package/v1/serializer/v3/schemas/definitions/transaction-sign-response-icp.d.ts +3 -0
  36. package/v1/serializer/v3/schemas/definitions/transaction-sign-response-icp.js +3 -0
  37. package/v1/serializer/v3/schemas/definitions/transaction-sign-response-icp.js.map +1 -0
  38. package/v1/serializer/v3/schemas/generated/transaction-sign-request-icp.json +32 -0
  39. package/v1/serializer/v3/schemas/generated/transaction-sign-response-icp.json +19 -0
  40. package/v1/serializer/v3/serializer-companion.d.ts +14 -0
  41. package/v1/serializer/v3/serializer-companion.js +190 -0
  42. package/v1/serializer/v3/serializer-companion.js.map +1 -0
  43. package/v1/serializer/v3/validators/transaction-validator.d.ts +10 -0
  44. package/v1/serializer/v3/validators/transaction-validator.js +100 -0
  45. package/v1/serializer/v3/validators/transaction-validator.js.map +1 -0
  46. package/v1/serializer/v3/validators/validators.d.ts +5 -0
  47. package/v1/serializer/v3/validators/validators.js +106 -0
  48. package/v1/serializer/v3/validators/validators.js.map +1 -0
  49. package/v1/types/ckbtc/metadata.d.ts +4 -0
  50. package/v1/types/ckbtc/metadata.js +3 -0
  51. package/v1/types/ckbtc/metadata.js.map +1 -0
  52. package/v1/types/crypto.d.ts +2 -0
  53. package/v1/types/crypto.js +3 -0
  54. package/v1/types/crypto.js.map +1 -0
  55. package/v1/types/governance.d.ts +580 -0
  56. package/v1/types/governance.js +796 -0
  57. package/v1/types/governance.js.map +1 -0
  58. package/v1/types/icrc/account.d.ts +4 -0
  59. package/v1/types/icrc/account.js +3 -0
  60. package/v1/types/icrc/account.js.map +1 -0
  61. package/v1/types/icrc/ledger.d.ts +15 -0
  62. package/v1/types/icrc/ledger.js +92 -0
  63. package/v1/types/icrc/ledger.js.map +1 -0
  64. package/v1/types/icrc/metadata.d.ts +6 -0
  65. package/v1/types/icrc/metadata.js +3 -0
  66. package/v1/types/icrc/metadata.js.map +1 -0
  67. package/v1/types/icrc/transfer.d.ts +9 -0
  68. package/v1/types/icrc/transfer.js +3 -0
  69. package/v1/types/icrc/transfer.js.map +1 -0
  70. package/v1/types/ledger.d.ts +142 -0
  71. package/v1/types/ledger.js +145 -0
  72. package/v1/types/ledger.js.map +1 -0
  73. package/v1/types/management_idl.d.ts +7 -0
  74. package/v1/types/management_idl.js +72 -0
  75. package/v1/types/management_idl.js.map +1 -0
  76. package/v1/types/protocol.d.ts +37 -0
  77. package/v1/types/protocol.js +3 -0
  78. package/v1/types/protocol.js.map +1 -0
  79. package/v1/types/transaction.d.ts +11 -0
  80. package/v1/types/transaction.js +3 -0
  81. package/v1/types/transaction.js.map +1 -0
  82. package/v1/utils/account.d.ts +24 -0
  83. package/v1/utils/account.js +112 -0
  84. package/v1/utils/account.js.map +1 -0
  85. package/v1/utils/actor.d.ts +246 -0
  86. package/v1/utils/actor.js +458 -0
  87. package/v1/utils/actor.js.map +1 -0
  88. package/v1/utils/agent.d.ts +156 -0
  89. package/v1/utils/agent.js +16 -0
  90. package/v1/utils/agent.js.map +1 -0
  91. package/v1/utils/auth.d.ts +110 -0
  92. package/v1/utils/auth.js +261 -0
  93. package/v1/utils/auth.js.map +1 -0
  94. package/v1/utils/bls.d.ts +38 -0
  95. package/v1/utils/bls.js +204 -0
  96. package/v1/utils/bls.js.map +1 -0
  97. package/v1/utils/buffer.d.ts +70 -0
  98. package/v1/utils/buffer.js +216 -0
  99. package/v1/utils/buffer.js.map +1 -0
  100. package/v1/utils/cbor.d.ts +9 -0
  101. package/v1/utils/cbor.js +178 -0
  102. package/v1/utils/cbor.js.map +1 -0
  103. package/v1/utils/certificate.d.ts +74 -0
  104. package/v1/utils/certificate.js +396 -0
  105. package/v1/utils/certificate.js.map +1 -0
  106. package/v1/utils/convert.d.ts +10 -0
  107. package/v1/utils/convert.js +88 -0
  108. package/v1/utils/convert.js.map +1 -0
  109. package/v1/utils/crypto.d.ts +0 -0
  110. package/v1/utils/crypto.js +104 -0
  111. package/v1/utils/crypto.js.map +1 -0
  112. package/v1/utils/der.d.ts +35 -0
  113. package/v1/utils/der.js +176 -0
  114. package/v1/utils/der.js.map +1 -0
  115. package/v1/utils/errors.d.ts +7 -0
  116. package/v1/utils/errors.js +38 -0
  117. package/v1/utils/errors.js.map +1 -0
  118. package/v1/utils/hdkey.d.ts +13 -0
  119. package/v1/utils/hdkey.js +265 -0
  120. package/v1/utils/hdkey.js.map +1 -0
  121. package/v1/utils/http.d.ts +284 -0
  122. package/v1/utils/http.js +614 -0
  123. package/v1/utils/http.js.map +1 -0
  124. package/v1/utils/icrc1.d.ts +20 -0
  125. package/v1/utils/icrc1.js +171 -0
  126. package/v1/utils/icrc1.js.map +1 -0
  127. package/v1/utils/idl.d.ts +515 -0
  128. package/v1/utils/idl.js +2103 -0
  129. package/v1/utils/idl.js.map +1 -0
  130. package/v1/utils/leb128.d.ts +63 -0
  131. package/v1/utils/leb128.js +224 -0
  132. package/v1/utils/leb128.js.map +1 -0
  133. package/v1/utils/polling.d.ts +59 -0
  134. package/v1/utils/polling.js +325 -0
  135. package/v1/utils/polling.js.map +1 -0
  136. package/v1/utils/principal.d.ts +58 -0
  137. package/v1/utils/principal.js +543 -0
  138. package/v1/utils/principal.js.map +1 -0
  139. package/v1/utils/secp256k1.d.ts +79 -0
  140. package/v1/utils/secp256k1.js +278 -0
  141. package/v1/utils/secp256k1.js.map +1 -0
  142. package/v1/utils/transaction.d.ts +3 -0
  143. package/v1/utils/transaction.js +56 -0
  144. package/v1/utils/transaction.js.map +1 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buffer.js","sourceRoot":"","sources":["../../../src/v1/utils/buffer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export declare enum CborTag {
2
+ Uint64LittleEndian = 71,
3
+ Semantic = 55799
4
+ }
5
+ /**
6
+ * Encode a JavaScript value into CBOR.
7
+ */
8
+ export declare function encode(value: any): ArrayBuffer;
9
+ export declare function decode<T>(input: ArrayBuffer): T;
@@ -0,0 +1,178 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.decode = exports.encode = exports.CborTag = void 0;
27
+ // tslint:disable:max-classes-per-file
28
+ // This file is based on:
29
+ // tslint:disable-next-line: max-line-length
30
+ // https://github.com/dfinity-lab/dfinity/blob/9bca65f8edd65701ea6bdb00e0752f9186bbc893/docs/spec/public/index.adoc#cbor-encoding-of-requests-and-responses
31
+ var borc_1 = require("borc");
32
+ var cbor = __importStar(require("simple-cbor"));
33
+ var simple_cbor_1 = require("simple-cbor");
34
+ var buffer_1 = require("./buffer");
35
+ // We are using hansl/simple-cbor for CBOR serialization, to avoid issues with
36
+ // encoding the uint64 values that the HTTP handler of the client expects for
37
+ // canister IDs. However, simple-cbor does not yet provide deserialization so
38
+ // we are using `Uint8Array` so that we can use the dignifiedquire/borc CBOR
39
+ // decoder.
40
+ var PrincipalEncoder = /** @class */ (function () {
41
+ function PrincipalEncoder() {
42
+ }
43
+ Object.defineProperty(PrincipalEncoder.prototype, "name", {
44
+ get: function () {
45
+ return 'Principal';
46
+ },
47
+ enumerable: false,
48
+ configurable: true
49
+ });
50
+ Object.defineProperty(PrincipalEncoder.prototype, "priority", {
51
+ get: function () {
52
+ return 0;
53
+ },
54
+ enumerable: false,
55
+ configurable: true
56
+ });
57
+ PrincipalEncoder.prototype.match = function (value) {
58
+ return value && value._isPrincipal === true;
59
+ };
60
+ PrincipalEncoder.prototype.encode = function (v) {
61
+ return cbor.value.bytes(v.toUint8Array());
62
+ };
63
+ return PrincipalEncoder;
64
+ }());
65
+ var BufferEncoder = /** @class */ (function () {
66
+ function BufferEncoder() {
67
+ }
68
+ Object.defineProperty(BufferEncoder.prototype, "name", {
69
+ get: function () {
70
+ return 'Buffer';
71
+ },
72
+ enumerable: false,
73
+ configurable: true
74
+ });
75
+ Object.defineProperty(BufferEncoder.prototype, "priority", {
76
+ get: function () {
77
+ return 1;
78
+ },
79
+ enumerable: false,
80
+ configurable: true
81
+ });
82
+ BufferEncoder.prototype.match = function (value) {
83
+ return value instanceof ArrayBuffer || ArrayBuffer.isView(value);
84
+ };
85
+ BufferEncoder.prototype.encode = function (v) {
86
+ return cbor.value.bytes(new Uint8Array(v));
87
+ };
88
+ return BufferEncoder;
89
+ }());
90
+ var BigIntEncoder = /** @class */ (function () {
91
+ function BigIntEncoder() {
92
+ }
93
+ Object.defineProperty(BigIntEncoder.prototype, "name", {
94
+ get: function () {
95
+ return 'BigInt';
96
+ },
97
+ enumerable: false,
98
+ configurable: true
99
+ });
100
+ Object.defineProperty(BigIntEncoder.prototype, "priority", {
101
+ get: function () {
102
+ return 1;
103
+ },
104
+ enumerable: false,
105
+ configurable: true
106
+ });
107
+ BigIntEncoder.prototype.match = function (value) {
108
+ return typeof value === "bigint";
109
+ };
110
+ BigIntEncoder.prototype.encode = function (v) {
111
+ // Always use a bigint encoding.
112
+ if (v > BigInt(0)) {
113
+ return cbor.value.tagged(2, cbor.value.bytes((0, buffer_1.fromHex)(v.toString(16))));
114
+ }
115
+ else {
116
+ return cbor.value.tagged(3, cbor.value.bytes((0, buffer_1.fromHex)((BigInt('-1') * v).toString(16))));
117
+ }
118
+ };
119
+ return BigIntEncoder;
120
+ }());
121
+ var serializer = simple_cbor_1.SelfDescribeCborSerializer.withDefaultEncoders(true);
122
+ serializer.addEncoder(new PrincipalEncoder());
123
+ serializer.addEncoder(new BufferEncoder());
124
+ serializer.addEncoder(new BigIntEncoder());
125
+ var CborTag;
126
+ (function (CborTag) {
127
+ CborTag[CborTag["Uint64LittleEndian"] = 71] = "Uint64LittleEndian";
128
+ CborTag[CborTag["Semantic"] = 55799] = "Semantic";
129
+ })(CborTag = exports.CborTag || (exports.CborTag = {}));
130
+ /**
131
+ * Encode a JavaScript value into CBOR.
132
+ */
133
+ function encode(value) {
134
+ return serializer.serialize(value);
135
+ }
136
+ exports.encode = encode;
137
+ function decodePositiveBigInt(buf) {
138
+ var len = buf.byteLength;
139
+ var res = BigInt(0);
140
+ for (var i = 0; i < len; i++) {
141
+ // tslint:disable-next-line:no-bitwise
142
+ res = res * BigInt(0x100) + BigInt(buf[i]);
143
+ }
144
+ return res;
145
+ }
146
+ // A BORC subclass that decodes byte strings to ArrayBuffer instead of the Buffer class.
147
+ // class Uint8ArrayDecoder extends Decoder {
148
+ // constructor(params: any) {
149
+ // super(params)
150
+ // }
151
+ // public createByteString(raw: ArrayBuffer[]): ArrayBuffer {
152
+ // return concat(...raw)
153
+ // }
154
+ // public createByteStringFromHeap(start: number, end: number): ArrayBuffer {
155
+ // if (start === end) {
156
+ // return new ArrayBuffer(0)
157
+ // }
158
+ // return new Uint8Array((this as any)._heap.slice(start, end))
159
+ // }
160
+ // }
161
+ function decode(input) {
162
+ var _a;
163
+ var buffer = new Uint8Array(input);
164
+ var decoder = new borc_1.Decoder({
165
+ size: buffer.byteLength,
166
+ tags: (_a = {
167
+ // Override tags 2 and 3 for BigInt support (borc supports only BigNumber).
168
+ 2: function (val) { return decodePositiveBigInt(val); },
169
+ 3: function (val) { return -decodePositiveBigInt(val); }
170
+ },
171
+ _a[CborTag.Semantic] = function (value) { return value; },
172
+ _a)
173
+ });
174
+ //@ts-ignore
175
+ return decoder.decodeFirst(buffer);
176
+ }
177
+ exports.decode = decode;
178
+ //# sourceMappingURL=cbor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cbor.js","sourceRoot":"","sources":["../../../src/v1/utils/cbor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ import { Principal } from './principal';
2
+ import { AgentError } from './errors';
3
+ /**
4
+ * A certificate may fail verification with respect to the provided public key
5
+ */
6
+ export declare class CertificateVerificationError extends AgentError {
7
+ constructor(reason: string);
8
+ }
9
+ declare const enum NodeId {
10
+ Empty = 0,
11
+ Fork = 1,
12
+ Labeled = 2,
13
+ Leaf = 3,
14
+ Pruned = 4
15
+ }
16
+ export declare type HashTree = [NodeId.Empty] | [NodeId.Fork, HashTree, HashTree] | [NodeId.Labeled, ArrayBuffer, HashTree] | [NodeId.Leaf, ArrayBuffer] | [NodeId.Pruned, ArrayBuffer];
17
+ /**
18
+ * Make a human readable string out of a hash tree.
19
+ * @param tree
20
+ */
21
+ export declare function hashTreeToString(tree: HashTree): string;
22
+ declare type VerifyFunc = (pk: Uint8Array, sig: Uint8Array, msg: Uint8Array) => Promise<boolean>;
23
+ export interface CreateCertificateOptions {
24
+ /**
25
+ * The bytes encoding the certificate to be verified
26
+ */
27
+ certificate: ArrayBuffer;
28
+ /**
29
+ * The root key against which to verify the certificate
30
+ * (normally, the root key of the IC main network)
31
+ */
32
+ rootKey: ArrayBuffer;
33
+ /**
34
+ * The effective canister ID of the request when verifying a response, or
35
+ * the signing canister ID when verifying a certified variable.
36
+ */
37
+ canisterId: Principal;
38
+ /**
39
+ * BLS Verification strategy. Default strategy uses wasm for performance, but that may not be available in all contexts.
40
+ */
41
+ blsVerify?: VerifyFunc;
42
+ }
43
+ export declare class Certificate {
44
+ private _rootKey;
45
+ private _canisterId;
46
+ private _blsVerify;
47
+ private readonly cert;
48
+ /**
49
+ * Create a new instance of a certificate, automatically verifying it. Throws a
50
+ * CertificateVerificationError if the certificate cannot be verified.
51
+ * @constructs {@link AuthClient}
52
+ * @param {CreateCertificateOptions} options
53
+ * @see {@link CreateCertificateOptions}
54
+ * @param {ArrayBuffer} options.certificate The bytes of the certificate
55
+ * @param {ArrayBuffer} options.rootKey The root key to verify against
56
+ * @param {Principal} options.canisterId The effective or signing canister ID
57
+ * @throws {CertificateVerificationError}
58
+ */
59
+ static create(options: CreateCertificateOptions): Promise<Certificate>;
60
+ private constructor();
61
+ lookup(path: Array<ArrayBuffer | string>): ArrayBuffer | undefined;
62
+ private verify;
63
+ private _checkDelegationAndGetKey;
64
+ }
65
+ /**
66
+ * @param t
67
+ */
68
+ export declare function reconstruct(t: HashTree): Promise<ArrayBuffer>;
69
+ /**
70
+ * @param path
71
+ * @param tree
72
+ */
73
+ export declare function lookup_path(path: Array<ArrayBuffer | string>, tree: HashTree): ArrayBuffer | undefined;
74
+ export {};
@@ -0,0 +1,396 @@
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ if (typeof b !== "function" && b !== null)
11
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
+ extendStatics(d, b);
13
+ function __() { this.constructor = d; }
14
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
+ };
16
+ })();
17
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
18
+ if (k2 === undefined) k2 = k;
19
+ var desc = Object.getOwnPropertyDescriptor(m, k);
20
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
21
+ desc = { enumerable: true, get: function() { return m[k]; } };
22
+ }
23
+ Object.defineProperty(o, k2, desc);
24
+ }) : (function(o, m, k, k2) {
25
+ if (k2 === undefined) k2 = k;
26
+ o[k2] = m[k];
27
+ }));
28
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
29
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
30
+ }) : function(o, v) {
31
+ o["default"] = v;
32
+ });
33
+ var __importStar = (this && this.__importStar) || function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
41
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
42
+ return new (P || (P = Promise))(function (resolve, reject) {
43
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
44
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
45
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
46
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
47
+ });
48
+ };
49
+ var __generator = (this && this.__generator) || function (thisArg, body) {
50
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
51
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
52
+ function verb(n) { return function (v) { return step([n, v]); }; }
53
+ function step(op) {
54
+ if (f) throw new TypeError("Generator is already executing.");
55
+ while (_) try {
56
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
57
+ if (y = 0, t) op = [op[0] & 2, t.value];
58
+ switch (op[0]) {
59
+ case 0: case 1: t = op; break;
60
+ case 4: _.label++; return { value: op[1], done: false };
61
+ case 5: _.label++; y = op[1]; op = [0]; continue;
62
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
63
+ default:
64
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
65
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
66
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
67
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
68
+ if (t[2]) _.ops.pop();
69
+ _.trys.pop(); continue;
70
+ }
71
+ op = body.call(thisArg, _);
72
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
73
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
74
+ }
75
+ };
76
+ var __values = (this && this.__values) || function(o) {
77
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
78
+ if (m) return m.call(o);
79
+ if (o && typeof o.length === "number") return {
80
+ next: function () {
81
+ if (o && i >= o.length) o = void 0;
82
+ return { value: o && o[i++], done: !o };
83
+ }
84
+ };
85
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
86
+ };
87
+ Object.defineProperty(exports, "__esModule", { value: true });
88
+ exports.lookup_path = exports.reconstruct = exports.Certificate = exports.hashTreeToString = exports.CertificateVerificationError = void 0;
89
+ var auth_1 = require("./auth");
90
+ var buffer_1 = require("./buffer");
91
+ var principal_1 = require("./principal");
92
+ var cbor = __importStar(require("./cbor"));
93
+ var bls_1 = require("./bls");
94
+ var errors_1 = require("./errors");
95
+ /**
96
+ * A certificate may fail verification with respect to the provided public key
97
+ */
98
+ var CertificateVerificationError = /** @class */ (function (_super) {
99
+ __extends(CertificateVerificationError, _super);
100
+ function CertificateVerificationError(reason) {
101
+ return _super.call(this, "Invalid certificate: ".concat(reason)) || this;
102
+ }
103
+ return CertificateVerificationError;
104
+ }(errors_1.AgentError));
105
+ exports.CertificateVerificationError = CertificateVerificationError;
106
+ /**
107
+ * Make a human readable string out of a hash tree.
108
+ * @param tree
109
+ */
110
+ function hashTreeToString(tree) {
111
+ var indent = function (s) {
112
+ return s
113
+ .split('\n')
114
+ .map(function (x) { return ' ' + x; })
115
+ .join('\n');
116
+ };
117
+ function labelToString(label) {
118
+ var decoder = new TextDecoder(undefined, { fatal: true });
119
+ try {
120
+ return JSON.stringify(decoder.decode(label));
121
+ }
122
+ catch (e) {
123
+ return "data(...".concat(label.byteLength, " bytes)");
124
+ }
125
+ }
126
+ switch (tree[0]) {
127
+ case 0 /* NodeId.Empty */:
128
+ return '()';
129
+ case 1 /* NodeId.Fork */: {
130
+ var left = hashTreeToString(tree[1]);
131
+ var right = hashTreeToString(tree[2]);
132
+ return "sub(\n left:\n".concat(indent(left), "\n---\n right:\n").concat(indent(right), "\n)");
133
+ }
134
+ case 2 /* NodeId.Labeled */: {
135
+ var label = labelToString(tree[1]);
136
+ var sub = hashTreeToString(tree[2]);
137
+ return "label(\n label:\n".concat(indent(label), "\n sub:\n").concat(indent(sub), "\n)");
138
+ }
139
+ case 3 /* NodeId.Leaf */: {
140
+ return "leaf(...".concat(tree[1].byteLength, " bytes)");
141
+ }
142
+ case 4 /* NodeId.Pruned */: {
143
+ return "pruned(".concat((0, buffer_1.toHex)(new Uint8Array(tree[1])));
144
+ }
145
+ default: {
146
+ return "unknown(".concat(JSON.stringify(tree[0]), ")");
147
+ }
148
+ }
149
+ }
150
+ exports.hashTreeToString = hashTreeToString;
151
+ function isBufferEqual(a, b) {
152
+ if (a.byteLength !== b.byteLength) {
153
+ return false;
154
+ }
155
+ var a8 = new Uint8Array(a);
156
+ var b8 = new Uint8Array(b);
157
+ for (var i = 0; i < a8.length; i++) {
158
+ if (a8[i] !== b8[i]) {
159
+ return false;
160
+ }
161
+ }
162
+ return true;
163
+ }
164
+ var Certificate = /** @class */ (function () {
165
+ function Certificate(certificate, _rootKey, _canisterId, _blsVerify) {
166
+ this._rootKey = _rootKey;
167
+ this._canisterId = _canisterId;
168
+ this._blsVerify = _blsVerify;
169
+ this.cert = cbor.decode(new Uint8Array(certificate));
170
+ }
171
+ /**
172
+ * Create a new instance of a certificate, automatically verifying it. Throws a
173
+ * CertificateVerificationError if the certificate cannot be verified.
174
+ * @constructs {@link AuthClient}
175
+ * @param {CreateCertificateOptions} options
176
+ * @see {@link CreateCertificateOptions}
177
+ * @param {ArrayBuffer} options.certificate The bytes of the certificate
178
+ * @param {ArrayBuffer} options.rootKey The root key to verify against
179
+ * @param {Principal} options.canisterId The effective or signing canister ID
180
+ * @throws {CertificateVerificationError}
181
+ */
182
+ Certificate.create = function (options) {
183
+ return __awaiter(this, void 0, void 0, function () {
184
+ var blsVerify, cert;
185
+ return __generator(this, function (_a) {
186
+ switch (_a.label) {
187
+ case 0:
188
+ blsVerify = options.blsVerify;
189
+ if (!blsVerify) {
190
+ blsVerify = bls_1.blsVerify;
191
+ }
192
+ cert = new Certificate(options.certificate, options.rootKey, options.canisterId, blsVerify);
193
+ return [4 /*yield*/, cert.verify()];
194
+ case 1:
195
+ _a.sent();
196
+ return [2 /*return*/, cert];
197
+ }
198
+ });
199
+ });
200
+ };
201
+ Certificate.prototype.lookup = function (path) {
202
+ return lookup_path(path, this.cert.tree);
203
+ };
204
+ Certificate.prototype.verify = function () {
205
+ return __awaiter(this, void 0, void 0, function () {
206
+ var rootHash, derKey, sig, key, msg, sigVer, err_1;
207
+ return __generator(this, function (_a) {
208
+ switch (_a.label) {
209
+ case 0: return [4 /*yield*/, reconstruct(this.cert.tree)];
210
+ case 1:
211
+ rootHash = _a.sent();
212
+ return [4 /*yield*/, this._checkDelegationAndGetKey(this.cert.delegation)];
213
+ case 2:
214
+ derKey = _a.sent();
215
+ sig = this.cert.signature;
216
+ key = extractDER(derKey);
217
+ msg = (0, buffer_1.concat)(domain_sep('ic-state-root'), rootHash);
218
+ sigVer = false;
219
+ _a.label = 3;
220
+ case 3:
221
+ _a.trys.push([3, 5, , 6]);
222
+ return [4 /*yield*/, this._blsVerify(new Uint8Array(key), new Uint8Array(sig), new Uint8Array(msg))];
223
+ case 4:
224
+ sigVer = _a.sent();
225
+ return [3 /*break*/, 6];
226
+ case 5:
227
+ err_1 = _a.sent();
228
+ sigVer = false;
229
+ return [3 /*break*/, 6];
230
+ case 6:
231
+ if (!sigVer) {
232
+ throw new CertificateVerificationError('Signature verification failed');
233
+ }
234
+ return [2 /*return*/];
235
+ }
236
+ });
237
+ });
238
+ };
239
+ Certificate.prototype._checkDelegationAndGetKey = function (d) {
240
+ return __awaiter(this, void 0, void 0, function () {
241
+ var cert, rangeLookup, ranges_arr, ranges, canisterInRange, publicKeyLookup;
242
+ var _this = this;
243
+ return __generator(this, function (_a) {
244
+ switch (_a.label) {
245
+ case 0:
246
+ if (!d) {
247
+ return [2 /*return*/, this._rootKey];
248
+ }
249
+ return [4 /*yield*/, Certificate.create({
250
+ certificate: d.certificate,
251
+ rootKey: this._rootKey,
252
+ canisterId: this._canisterId
253
+ })];
254
+ case 1:
255
+ cert = _a.sent();
256
+ rangeLookup = cert.lookup(['subnet', d.subnet_id, 'canister_ranges']);
257
+ if (!rangeLookup) {
258
+ throw new CertificateVerificationError("Could not find canister ranges for subnet 0x".concat((0, buffer_1.toHex)(d.subnet_id)));
259
+ }
260
+ ranges_arr = cbor.decode(rangeLookup);
261
+ ranges = ranges_arr.map(function (v) { return [principal_1.Principal.fromUint8Array(v[0]), principal_1.Principal.fromUint8Array(v[1])]; });
262
+ canisterInRange = ranges.some(function (r) { return r[0].ltEq(_this._canisterId) && r[1].gtEq(_this._canisterId); });
263
+ if (!canisterInRange) {
264
+ throw new CertificateVerificationError("Canister ".concat(this._canisterId, " not in range of delegations for subnet 0x").concat((0, buffer_1.toHex)(d.subnet_id)));
265
+ }
266
+ publicKeyLookup = cert.lookup(['subnet', d.subnet_id, 'public_key']);
267
+ if (!publicKeyLookup) {
268
+ throw new Error("Could not find subnet key for subnet 0x".concat((0, buffer_1.toHex)(d.subnet_id)));
269
+ }
270
+ return [2 /*return*/, publicKeyLookup];
271
+ }
272
+ });
273
+ });
274
+ };
275
+ return Certificate;
276
+ }());
277
+ exports.Certificate = Certificate;
278
+ var DER_PREFIX = (0, buffer_1.fromHex)('308182301d060d2b0601040182dc7c0503010201060c2b0601040182dc7c05030201036100');
279
+ var KEY_LENGTH = 96;
280
+ function extractDER(buf) {
281
+ var expectedLength = DER_PREFIX.byteLength + KEY_LENGTH;
282
+ if (buf.byteLength !== expectedLength) {
283
+ throw new TypeError("BLS DER-encoded public key must be ".concat(expectedLength, " bytes long"));
284
+ }
285
+ var prefix = buf.slice(0, DER_PREFIX.byteLength);
286
+ if (!isBufferEqual(prefix, DER_PREFIX)) {
287
+ throw new TypeError("BLS DER-encoded public key is invalid. Expect the following prefix: ".concat(DER_PREFIX, ", but get ").concat(prefix));
288
+ }
289
+ return buf.slice(DER_PREFIX.byteLength);
290
+ }
291
+ /**
292
+ * @param t
293
+ */
294
+ function reconstruct(t) {
295
+ return __awaiter(this, void 0, void 0, function () {
296
+ var _a, _b, _c, _d, _e, _f, _g;
297
+ return __generator(this, function (_h) {
298
+ switch (_h.label) {
299
+ case 0:
300
+ _a = t[0];
301
+ switch (_a) {
302
+ case 0 /* NodeId.Empty */: return [3 /*break*/, 1];
303
+ case 4 /* NodeId.Pruned */: return [3 /*break*/, 2];
304
+ case 3 /* NodeId.Leaf */: return [3 /*break*/, 3];
305
+ case 2 /* NodeId.Labeled */: return [3 /*break*/, 4];
306
+ case 1 /* NodeId.Fork */: return [3 /*break*/, 6];
307
+ }
308
+ return [3 /*break*/, 9];
309
+ case 1: return [2 /*return*/, (0, auth_1.hash)(domain_sep('ic-hashtree-empty'))];
310
+ case 2: return [2 /*return*/, t[1]];
311
+ case 3: return [2 /*return*/, (0, auth_1.hash)((0, buffer_1.concat)(domain_sep('ic-hashtree-leaf'), t[1]))];
312
+ case 4:
313
+ _b = auth_1.hash;
314
+ _c = buffer_1.concat;
315
+ _d = [domain_sep('ic-hashtree-labeled'), t[1]];
316
+ return [4 /*yield*/, reconstruct(t[2])];
317
+ case 5: return [2 /*return*/, _b.apply(void 0, [_c.apply(void 0, _d.concat([_h.sent()]))])];
318
+ case 6:
319
+ _e = auth_1.hash;
320
+ _f = buffer_1.concat;
321
+ _g = [domain_sep('ic-hashtree-fork')];
322
+ return [4 /*yield*/, reconstruct(t[1])];
323
+ case 7:
324
+ _g = _g.concat([_h.sent()]);
325
+ return [4 /*yield*/, reconstruct(t[2])];
326
+ case 8: return [2 /*return*/, _e.apply(void 0, [_f.apply(void 0, _g.concat([_h.sent()]))])];
327
+ case 9: throw new Error('unreachable');
328
+ }
329
+ });
330
+ });
331
+ }
332
+ exports.reconstruct = reconstruct;
333
+ function domain_sep(s) {
334
+ var len = new Uint8Array([s.length]);
335
+ var str = new TextEncoder().encode(s);
336
+ return (0, buffer_1.concat)(len, str);
337
+ }
338
+ /**
339
+ * @param path
340
+ * @param tree
341
+ */
342
+ function lookup_path(path, tree) {
343
+ if (path.length === 0) {
344
+ switch (tree[0]) {
345
+ case 3 /* NodeId.Leaf */: {
346
+ return new Uint8Array(tree[1]).buffer;
347
+ }
348
+ default: {
349
+ return undefined;
350
+ }
351
+ }
352
+ }
353
+ var label = typeof path[0] === 'string' ? new TextEncoder().encode(path[0]) : path[0];
354
+ var t = find_label(label, flatten_forks(tree));
355
+ if (t) {
356
+ return lookup_path(path.slice(1), t);
357
+ }
358
+ return undefined;
359
+ }
360
+ exports.lookup_path = lookup_path;
361
+ function flatten_forks(t) {
362
+ switch (t[0]) {
363
+ case 0 /* NodeId.Empty */:
364
+ return [];
365
+ case 1 /* NodeId.Fork */:
366
+ return flatten_forks(t[1]).concat(flatten_forks(t[2]));
367
+ default:
368
+ return [t];
369
+ }
370
+ }
371
+ function find_label(l, trees) {
372
+ var e_1, _a;
373
+ if (trees.length === 0) {
374
+ return undefined;
375
+ }
376
+ try {
377
+ for (var trees_1 = __values(trees), trees_1_1 = trees_1.next(); !trees_1_1.done; trees_1_1 = trees_1.next()) {
378
+ var t = trees_1_1.value;
379
+ if (t[0] === 2 /* NodeId.Labeled */) {
380
+ var p = t[1];
381
+ if (isBufferEqual(l, p)) {
382
+ return t[2];
383
+ }
384
+ }
385
+ }
386
+ }
387
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
388
+ finally {
389
+ try {
390
+ if (trees_1_1 && !trees_1_1.done && (_a = trees_1.return)) _a.call(trees_1);
391
+ }
392
+ finally { if (e_1) throw e_1.error; }
393
+ }
394
+ return undefined;
395
+ }
396
+ //# sourceMappingURL=certificate.js.map