@bitgo-beta/sdk-core 8.2.1-beta.2009 → 8.2.1-beta.2010
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.
- package/dist/src/bitgo/safe/derivableEd25519Pub.d.ts +67 -0
- package/dist/src/bitgo/safe/derivableEd25519Pub.d.ts.map +1 -0
- package/dist/src/bitgo/safe/derivableEd25519Pub.js +156 -0
- package/dist/src/bitgo/safe/index.d.ts +1 -0
- package/dist/src/bitgo/safe/index.d.ts.map +1 -1
- package/dist/src/bitgo/safe/index.js +2 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +5 -1
- package/dist/test/unit/bitgo/safe/derivableEd25519Pub.d.ts +2 -0
- package/dist/test/unit/bitgo/safe/derivableEd25519Pub.d.ts.map +1 -0
- package/dist/test/unit/bitgo/safe/derivableEd25519Pub.js +122 -0
- package/dist/test/unit/bitgo/safe/fixtures/derivableEd25519Pub.json +145 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +8 -8
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"derivableEd25519Pub.d.ts","sourceRoot":"","sources":["../../../../../test/unit/bitgo/safe/derivableEd25519Pub.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,CAAC"}
|
|
@@ -0,0 +1,122 @@
|
|
|
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 () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
require("should");
|
|
37
|
+
const src_1 = require("../../../../src");
|
|
38
|
+
// Cross-repo fixture: byte-identical to
|
|
39
|
+
// packages/wallet-platform/test/unit/base/safes/fixtures/derivableEd25519Pub.json.
|
|
40
|
+
// Four independent implementations of this split will otherwise drift, and the failure mode is an
|
|
41
|
+
// unrecoverable wallet.
|
|
42
|
+
const fixture = __importStar(require("./fixtures/derivableEd25519Pub.json"));
|
|
43
|
+
describe('derivableEd25519Pub', function () {
|
|
44
|
+
describe('format constants', function () {
|
|
45
|
+
it('matches the constants pinned in the shared fixture', function () {
|
|
46
|
+
src_1.DERIVABLE_ED25519_PUB_SPLIT_OFFSET.should.equal(fixture.splitOffset);
|
|
47
|
+
src_1.DERIVABLE_ED25519_CHAIN_CODE_LENGTH.should.equal(fixture.chainCodeLength);
|
|
48
|
+
src_1.DERIVABLE_ED25519_PUB_LENGTH.should.equal(fixture.compositeLength);
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
describe('encodeDerivableEd25519Pub', function () {
|
|
52
|
+
for (const v of fixture.valid) {
|
|
53
|
+
it(`composes ${v.name}`, function () {
|
|
54
|
+
(0, src_1.encodeDerivableEd25519Pub)(v.pub, v.chainCode).should.equal(v.composite);
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
for (const v of fixture.invalidEncodeInputs) {
|
|
58
|
+
it(`rejects ${v.name}`, function () {
|
|
59
|
+
(() => (0, src_1.encodeDerivableEd25519Pub)(v.pub, v.chainCode)).should.throw(/Invalid derivable ed25519 pub/);
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
describe('decodeDerivableEd25519Pub', function () {
|
|
64
|
+
for (const v of fixture.valid) {
|
|
65
|
+
it(`splits ${v.name}`, function () {
|
|
66
|
+
(0, src_1.decodeDerivableEd25519Pub)(v.composite).should.eql({ pub: v.pub, chainCode: v.chainCode });
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
for (const v of fixture.invalidComposite) {
|
|
70
|
+
it(`rejects ${v.name}`, function () {
|
|
71
|
+
(() => (0, src_1.decodeDerivableEd25519Pub)(v.composite)).should.throw(/Invalid derivable ed25519 pub/);
|
|
72
|
+
(0, src_1.isDerivableEd25519Pub)(v.composite).should.equal(false);
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
describe('round trip', function () {
|
|
77
|
+
for (const v of fixture.valid) {
|
|
78
|
+
it(`round-trips ${v.name}`, function () {
|
|
79
|
+
const composite = (0, src_1.encodeDerivableEd25519Pub)(v.pub, v.chainCode);
|
|
80
|
+
const decoded = (0, src_1.decodeDerivableEd25519Pub)(composite);
|
|
81
|
+
decoded.should.eql({ pub: v.pub, chainCode: v.chainCode });
|
|
82
|
+
(0, src_1.encodeDerivableEd25519Pub)(decoded.pub, decoded.chainCode).should.equal(composite);
|
|
83
|
+
(0, src_1.isDerivableEd25519Pub)(composite).should.equal(true);
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
describe('isValidEd25519ChainCode', function () {
|
|
88
|
+
const { chainCode } = fixture.valid[3];
|
|
89
|
+
it('accepts 64 lowercase hex characters', function () {
|
|
90
|
+
(0, src_1.isValidEd25519ChainCode)(chainCode).should.equal(true);
|
|
91
|
+
});
|
|
92
|
+
it('rejects uppercase hex', function () {
|
|
93
|
+
(0, src_1.isValidEd25519ChainCode)(chainCode.toUpperCase()).should.equal(false);
|
|
94
|
+
});
|
|
95
|
+
it('rejects a chain code of the wrong length', function () {
|
|
96
|
+
(0, src_1.isValidEd25519ChainCode)(chainCode.slice(0, 63)).should.equal(false);
|
|
97
|
+
(0, src_1.isValidEd25519ChainCode)(chainCode + '0').should.equal(false);
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
describe('isValidEd25519StrKeyPublicKey', function () {
|
|
101
|
+
for (const v of fixture.valid) {
|
|
102
|
+
it(`accepts the pub half of ${v.name}`, function () {
|
|
103
|
+
(0, src_1.isValidEd25519StrKeyPublicKey)(v.pub).should.equal(true);
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
it('rejects a bad checksum', function () {
|
|
107
|
+
// last character of a known-good pub flipped
|
|
108
|
+
(0, src_1.isValidEd25519StrKeyPublicKey)('GA5WUJ54Z23KILLCUOUNAKTPBVZWKMQVO4O6EQ5GHLAERIMLLHNCSKYA').should.equal(false);
|
|
109
|
+
});
|
|
110
|
+
it('rejects a secret seed', function () {
|
|
111
|
+
(0, src_1.isValidEd25519StrKeyPublicKey)('SA5WUJ54Z23KILLCUOUNAKTPBVZWKMQVO4O6EQ5GHLAERIMLLHNCSKYH').should.equal(false);
|
|
112
|
+
});
|
|
113
|
+
it('rejects a non-base32 character', function () {
|
|
114
|
+
(0, src_1.isValidEd25519StrKeyPublicKey)('GA5WUJ54Z23KILLCUOUNAKTPBVZWKMQVO4O6EQ5GHLAERIMLLHNCSKY1').should.equal(false);
|
|
115
|
+
});
|
|
116
|
+
it('rejects the empty string and a composite pub', function () {
|
|
117
|
+
(0, src_1.isValidEd25519StrKeyPublicKey)('').should.equal(false);
|
|
118
|
+
(0, src_1.isValidEd25519StrKeyPublicKey)(fixture.valid[3].composite).should.equal(false);
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
});
|
|
122
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVyaXZhYmxlRWQyNTUxOVB1Yi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9iaXRnby9zYWZlL2Rlcml2YWJsZUVkMjU1MTlQdWIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxrQkFBZ0I7QUFDaEIseUNBU3lCO0FBRXpCLHdDQUF3QztBQUN4QyxtRkFBbUY7QUFDbkYsa0dBQWtHO0FBQ2xHLHdCQUF3QjtBQUN4Qiw2RUFBK0Q7QUFFL0QsUUFBUSxDQUFDLHFCQUFxQixFQUFFO0lBQzlCLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRTtRQUMzQixFQUFFLENBQUMsb0RBQW9ELEVBQUU7WUFDdkQsd0NBQWtDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDckUseUNBQW1DLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDMUUsa0NBQTRCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDckUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQywyQkFBMkIsRUFBRTtRQUNwQyxLQUFLLE1BQU0sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM5QixFQUFFLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ3ZCLElBQUEsK0JBQXlCLEVBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDMUUsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsS0FBSyxNQUFNLENBQUMsSUFBSSxPQUFPLENBQUMs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O1FBQ2hILENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDhDQUE4QyxFQUFFO1lBQ2pELElBQUEsbUNBQTZCLEVBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0RCxJQUFBLG1DQUE2QixFQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoRixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJ3Nob3VsZCc7XG5pbXBvcnQge1xuICBERVJJVkFCTEVfRUQyNTUxOV9DSEFJTl9DT0RFX0xFTkdUSCxcbiAgREVSSVZBQkxFX0VEMjU1MTlfUFVCX0xFTkdUSCxcbiAgREVSSVZBQkxFX0VEMjU1MTlfUFVCX1NQTElUX09GRlNFVCxcbiAgZGVjb2RlRGVyaXZhYmxlRWQyNTUxOVB1YixcbiAgZW5jb2RlRGVyaXZhYmxlRWQyNTUxOVB1YixcbiAgaXNEZXJpdmFibGVFZDI1NTE5UHViLFxuICBpc1ZhbGlkRWQyNTUxOUNoYWluQ29kZSxcbiAgaXNWYWxpZEVkMjU1MTlTdHJLZXlQdWJsaWNLZXksXG59IGZyb20gJy4uLy4uLy4uLy4uL3NyYyc7XG5cbi8vIENyb3NzLXJlcG8gZml4dHVyZTogYnl0ZS1pZGVudGljYWwgdG9cbi8vIHBhY2thZ2VzL3dhbGxldC1wbGF0Zm9ybS90ZXN0L3VuaXQvYmFzZS9zYWZlcy9maXh0dXJlcy9kZXJpdmFibGVFZDI1NTE5UHViLmpzb24uXG4vLyBGb3VyIGluZGVwZW5kZW50IGltcGxlbWVudGF0aW9ucyBvZiB0aGlzIHNwbGl0IHdpbGwgb3RoZXJ3aXNlIGRyaWZ0LCBhbmQgdGhlIGZhaWx1cmUgbW9kZSBpcyBhblxuLy8gdW5yZWNvdmVyYWJsZSB3YWxsZXQuXG5pbXBvcnQgKiBhcyBmaXh0dXJlIGZyb20gJy4vZml4dHVyZXMvZGVyaXZhYmxlRWQyNTUxOVB1Yi5qc29uJztcblxuZGVzY3JpYmUoJ2Rlcml2YWJsZUVkMjU1MTlQdWInLCBmdW5jdGlvbiAoKSB7XG4gIGRlc2NyaWJlKCdmb3JtYXQgY29uc3RhbnRzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdtYXRjaGVzIHRoZSBjb25zdGFudHMgcGlubmVkIGluIHRoZSBzaGFyZWQgZml4dHVyZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIERFUklWQUJMRV9FRDI1NTE5X1BVQl9TUExJVF9PRkZTRVQuc2hvdWxkLmVxdWFsKGZpeHR1cmUuc3BsaXRPZmZzZXQpO1xuICAgICAgREVSSVZBQkxFX0VEMjU1MTlfQ0hBSU5fQ09ERV9MRU5HVEguc2hvdWxkLmVxdWFsKGZpeHR1cmUuY2hhaW5Db2RlTGVuZ3RoKTtcbiAgICAgIERFUklWQUJMRV9FRDI1NTE5X1BVQl9MRU5HVEguc2hvdWxkLmVxdWFsKGZpeHR1cmUuY29tcG9zaXRlTGVuZ3RoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2VuY29kZURlcml2YWJsZUVkMjU1MTlQdWInLCBmdW5jdGlvbiAoKSB7XG4gICAgZm9yIChjb25zdCB2IG9mIGZpeHR1cmUudmFsaWQpIHtcbiAgICAgIGl0KGBjb21wb3NlcyAke3YubmFtZX1gLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGVuY29kZURlcml2YWJsZUVkMjU1MTlQdWIodi5wdWIsIHYuY2hhaW5Db2RlKS5zaG91bGQuZXF1YWwodi5jb21wb3NpdGUpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB2IG9mIGZpeHR1cmUuaW52YWxpZEVuY29kZUlucHV0cykge1xuICAgICAgaXQoYHJlamVjdHMgJHt2Lm5hbWV9YCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAoKCkgPT4gZW5jb2RlRGVyaXZhYmxlRWQyNTUxOVB1Yih2LnB1Yiwgdi5jaGFpbkNvZGUpKS5zaG91bGQudGhyb3coL0ludmFsaWQgZGVyaXZhYmxlIGVkMjU1MTkgcHViLyk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdkZWNvZGVEZXJpdmFibGVFZDI1NTE5UHViJywgZnVuY3Rpb24gKCkge1xuICAgIGZvciAoY29uc3QgdiBvZiBmaXh0dXJlLnZhbGlkKSB7XG4gICAgICBpdChgc3BsaXRzICR7di5uYW1lfWAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGVjb2RlRGVyaXZhYmxlRWQyNTUxOVB1Yih2LmNvbXBvc2l0ZSkuc2hvdWxkLmVxbCh7IHB1Yjogdi5wdWIsIGNoYWluQ29kZTogdi5jaGFpbkNvZGUgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHYgb2YgZml4dHVyZS5pbnZhbGlkQ29tcG9zaXRlKSB7XG4gICAgICBpdChgcmVqZWN0cyAke3YubmFtZX1gLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICgoKSA9PiBkZWNvZGVEZXJpdmFibGVFZDI1NTE5UHViKHYuY29tcG9zaXRlKSkuc2hvdWxkLnRocm93KC9JbnZhbGlkIGRlcml2YWJsZSBlZDI1NTE5IHB1Yi8pO1xuICAgICAgICBpc0Rlcml2YWJsZUVkMjU1MTlQdWIodi5jb21wb3NpdGUpLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdyb3VuZCB0cmlwJywgZnVuY3Rpb24gKCkge1xuICAgIGZvciAoY29uc3QgdiBvZiBmaXh0dXJlLnZhbGlkKSB7XG4gICAgICBpdChgcm91bmQtdHJpcHMgJHt2Lm5hbWV9YCwgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBjb21wb3NpdGUgPSBlbmNvZGVEZXJpdmFibGVFZDI1NTE5UHViKHYucHViLCB2LmNoYWluQ29kZSk7XG4gICAgICAgIGNvbnN0IGRlY29kZWQgPSBkZWNvZGVEZXJpdmFibGVFZDI1NTE5UHViKGNvbXBvc2l0ZSk7XG4gICAgICAgIGRlY29kZWQuc2hvdWxkLmVxbCh7IHB1Yjogdi5wdWIsIGNoYWluQ29kZTogdi5jaGFpbkNvZGUgfSk7XG4gICAgICAgIGVuY29kZURlcml2YWJsZUVkMjU1MTlQdWIoZGVjb2RlZC5wdWIsIGRlY29kZWQuY2hhaW5Db2RlKS5zaG91bGQuZXF1YWwoY29tcG9zaXRlKTtcbiAgICAgICAgaXNEZXJpdmFibGVFZDI1NTE5UHViKGNvbXBvc2l0ZSkuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcblxuICBkZXNjcmliZSgnaXNWYWxpZEVkMjU1MTlDaGFpbkNvZGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgeyBjaGFpbkNvZGUgfSA9IGZpeHR1cmUudmFsaWRbM107XG5cbiAgICBpdCgnYWNjZXB0cyA2NCBsb3dlcmNhc2UgaGV4IGNoYXJhY3RlcnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpc1ZhbGlkRWQyNTUxOUNoYWluQ29kZShjaGFpbkNvZGUpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIHVwcGVyY2FzZSBoZXgnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpc1ZhbGlkRWQyNTUxOUNoYWluQ29kZShjaGFpbkNvZGUudG9VcHBlckNhc2UoKSkuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIGEgY2hhaW4gY29kZSBvZiB0aGUgd3JvbmcgbGVuZ3RoJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXNWYWxpZEVkMjU1MTlDaGFpbkNvZGUoY2hhaW5Db2RlLnNsaWNlKDAsIDYzKSkuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICAgIGlzVmFsaWRFZDI1NTE5Q2hhaW5Db2RlKGNoYWluQ29kZSArICcwJykuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2lzVmFsaWRFZDI1NTE5U3RyS2V5UHVibGljS2V5JywgZnVuY3Rpb24gKCkge1xuICAgIGZvciAoY29uc3QgdiBvZiBmaXh0dXJlLnZhbGlkKSB7XG4gICAgICBpdChgYWNjZXB0cyB0aGUgcHViIGhhbGYgb2YgJHt2Lm5hbWV9YCwgZnVuY3Rpb24gKCkge1xuICAgICAgICBpc1ZhbGlkRWQyNTUxOVN0cktleVB1YmxpY0tleSh2LnB1Yikuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaXQoJ3JlamVjdHMgYSBiYWQgY2hlY2tzdW0nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBsYXN0IGNoYXJhY3RlciBvZiBhIGtub3duLWdvb2QgcHViIGZsaXBwZWRcbiAgICAgIGlzVmFsaWRFZDI1NTE5U3RyS2V5UHVibGljS2V5KCdHQTVXVUo1NFoyM0tJTExDVU9VTkFLVFBCVlpXS01RVk80TzZFUTVHSExBRVJJTUxMSE5DU0tZQScpLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVqZWN0cyBhIHNlY3JldCBzZWVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXNWYWxpZEVkMjU1MTlTdHJLZXlQdWJsaWNLZXkoJ1NBNVdVSjU0WjIzS0lMTENVT1VOQUtUUEJWWldLTVFWTzRPNkVRNUdITEFFUklNTExITkNTS1lIJykuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWplY3RzIGEgbm9uLWJhc2UzMiBjaGFyYWN0ZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpc1ZhbGlkRWQyNTUxOVN0cktleVB1YmxpY0tleSgnR0E1V1VKNTRaMjNLSUxMQ1VPVU5BS1RQQlZaV0tNUVZPNE82RVE1R0hMQUVSSU1MTEhOQ1NLWTEnKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdHMgdGhlIGVtcHR5IHN0cmluZyBhbmQgYSBjb21wb3NpdGUgcHViJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXNWYWxpZEVkMjU1MTlTdHJLZXlQdWJsaWNLZXkoJycpLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgICBpc1ZhbGlkRWQyNTUxOVN0cktleVB1YmxpY0tleShmaXh0dXJlLnZhbGlkWzNdLmNvbXBvc2l0ZSkuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$comment": "Shared cross-repo fixture for the derivable slot-4 (ed25519Multisig) root pub format: composite = <56-char Stellar StrKey ed25519 public key> || <64 lowercase hex chain code>. Plain JSON with no repo-specific imports so wallet-platform, BitGoJS sdk-core, BitGoJS modules/key-card and WRW can all consume this identical file. Append new vectors rather than editing existing ones in place.",
|
|
3
|
+
"splitOffset": 56,
|
|
4
|
+
"chainCodeLength": 64,
|
|
5
|
+
"compositeLength": 120,
|
|
6
|
+
"valid": [
|
|
7
|
+
{
|
|
8
|
+
"name": "all-zero pub with all-zero chain code",
|
|
9
|
+
"pub": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWHF",
|
|
10
|
+
"chainCode": "0000000000000000000000000000000000000000000000000000000000000000",
|
|
11
|
+
"composite": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWHF0000000000000000000000000000000000000000000000000000000000000000"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"name": "all-ones pub with all-f chain code",
|
|
15
|
+
"pub": "GD7777777777777777777777777777777777777777777777777773DB",
|
|
16
|
+
"chainCode": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
|
|
17
|
+
"composite": "GD7777777777777777777777777777777777777777777777777773DBffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"name": "low-order pub with a leading-zero chain code",
|
|
21
|
+
"pub": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC6PV",
|
|
22
|
+
"chainCode": "0000000000000000000000000000000000000000000000000000000000000001",
|
|
23
|
+
"composite": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC6PV0000000000000000000000000000000000000000000000000000000000000001"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"name": "typical pub with a mixed alphanumeric chain code",
|
|
27
|
+
"pub": "GA5WUJ54Z23KILLCUOUNAKTPBVZWKMQVO4O6EQ5GHLAERIMLLHNCSKYH",
|
|
28
|
+
"chainCode": "9a0f3c7d1e5b28460af3d92c6e81b7053fa4c2e98d17b60543a2fc8e19d7b046",
|
|
29
|
+
"composite": "GA5WUJ54Z23KILLCUOUNAKTPBVZWKMQVO4O6EQ5GHLAERIMLLHNCSKYH9a0f3c7d1e5b28460af3d92c6e81b7053fa4c2e98d17b60543a2fc8e19d7b046"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"name": "typical pub with an all-digit chain code",
|
|
33
|
+
"pub": "GDD7GGYPJUX3BNVA6OPIXUFXYOY2FVHF6YDRQKJ2JNOG27UPSAJDJCMV",
|
|
34
|
+
"chainCode": "1234567890123456789012345678901234567890123456789012345678901234",
|
|
35
|
+
"composite": "GDD7GGYPJUX3BNVA6OPIXUFXYOY2FVHF6YDRQKJ2JNOG27UPSAJDJCMV1234567890123456789012345678901234567890123456789012345678901234"
|
|
36
|
+
}
|
|
37
|
+
],
|
|
38
|
+
"invalidComposite": [
|
|
39
|
+
{
|
|
40
|
+
"name": "empty string",
|
|
41
|
+
"composite": "",
|
|
42
|
+
"reason": "length"
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"name": "bare 56-char pub with no chain code",
|
|
46
|
+
"composite": "GA5WUJ54Z23KILLCUOUNAKTPBVZWKMQVO4O6EQ5GHLAERIMLLHNCSKYH",
|
|
47
|
+
"reason": "length"
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"name": "bare chain code with no pub",
|
|
51
|
+
"composite": "9a0f3c7d1e5b28460af3d92c6e81b7053fa4c2e98d17b60543a2fc8e19d7b046",
|
|
52
|
+
"reason": "length"
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"name": "uppercase hex chain code",
|
|
56
|
+
"composite": "GA5WUJ54Z23KILLCUOUNAKTPBVZWKMQVO4O6EQ5GHLAERIMLLHNCSKYH9A0F3C7D1E5B28460AF3D92C6E81B7053FA4C2E98D17B60543A2FC8E19D7B046",
|
|
57
|
+
"reason": "chainCode"
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"name": "mixed-case hex chain code",
|
|
61
|
+
"composite": "GA5WUJ54Z23KILLCUOUNAKTPBVZWKMQVO4O6EQ5GHLAERIMLLHNCSKYH9A0f3c7d1e5b28460af3d92c6e81b7053fa4c2e98d17b60543a2fc8e19d7b046",
|
|
62
|
+
"reason": "chainCode"
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"name": "non-hex character in chain code",
|
|
66
|
+
"composite": "GA5WUJ54Z23KILLCUOUNAKTPBVZWKMQVO4O6EQ5GHLAERIMLLHNCSKYHga0f3c7d1e5b28460af3d92c6e81b7053fa4c2e98d17b60543a2fc8e19d7b046",
|
|
67
|
+
"reason": "chainCode"
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"name": "chain code one character short",
|
|
71
|
+
"composite": "GA5WUJ54Z23KILLCUOUNAKTPBVZWKMQVO4O6EQ5GHLAERIMLLHNCSKYH9a0f3c7d1e5b28460af3d92c6e81b7053fa4c2e98d17b60543a2fc8e19d7b04",
|
|
72
|
+
"reason": "length"
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"name": "chain code one character long",
|
|
76
|
+
"composite": "GA5WUJ54Z23KILLCUOUNAKTPBVZWKMQVO4O6EQ5GHLAERIMLLHNCSKYH9a0f3c7d1e5b28460af3d92c6e81b7053fa4c2e98d17b60543a2fc8e19d7b0460",
|
|
77
|
+
"reason": "length"
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"name": "pub half is not a valid StrKey (bad checksum)",
|
|
81
|
+
"composite": "GA5WUJ54Z23KILLCUOUNAKTPBVZWKMQVO4O6EQ5GHLAERIMLLHNCSKYA9a0f3c7d1e5b28460af3d92c6e81b7053fa4c2e98d17b60543a2fc8e19d7b046",
|
|
82
|
+
"reason": "pub"
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"name": "pub half is a secret seed (S...) not a public key",
|
|
86
|
+
"composite": "SA5WUJ54Z23KILLCUOUNAKTPBVZWKMQVO4O6EQ5GHLAERIMLLHNCSKYH9a0f3c7d1e5b28460af3d92c6e81b7053fa4c2e98d17b60543a2fc8e19d7b046",
|
|
87
|
+
"reason": "pub"
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"name": "halves swapped",
|
|
91
|
+
"composite": "9a0f3c7d1e5b28460af3d92c6e81b7053fa4c2e98d17b60543a2fc8eGA5WUJ54Z23KILLCUOUNAKTPBVZWKMQVO4O6EQ5GHLAERIMLLHNCSKYH19d7b046",
|
|
92
|
+
"reason": "pub"
|
|
93
|
+
}
|
|
94
|
+
],
|
|
95
|
+
"invalidEncodeInputs": [
|
|
96
|
+
{
|
|
97
|
+
"name": "empty pub",
|
|
98
|
+
"pub": "",
|
|
99
|
+
"chainCode": "9a0f3c7d1e5b28460af3d92c6e81b7053fa4c2e98d17b60543a2fc8e19d7b046",
|
|
100
|
+
"reason": "pub"
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"name": "pub with bad StrKey checksum",
|
|
104
|
+
"pub": "GA5WUJ54Z23KILLCUOUNAKTPBVZWKMQVO4O6EQ5GHLAERIMLLHNCSKYA",
|
|
105
|
+
"chainCode": "9a0f3c7d1e5b28460af3d92c6e81b7053fa4c2e98d17b60543a2fc8e19d7b046",
|
|
106
|
+
"reason": "pub"
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
"name": "composite passed as the pub half",
|
|
110
|
+
"pub": "GA5WUJ54Z23KILLCUOUNAKTPBVZWKMQVO4O6EQ5GHLAERIMLLHNCSKYH9a0f3c7d1e5b28460af3d92c6e81b7053fa4c2e98d17b60543a2fc8e19d7b046",
|
|
111
|
+
"chainCode": "9a0f3c7d1e5b28460af3d92c6e81b7053fa4c2e98d17b60543a2fc8e19d7b046",
|
|
112
|
+
"reason": "pub"
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
"name": "empty chain code",
|
|
116
|
+
"pub": "GA5WUJ54Z23KILLCUOUNAKTPBVZWKMQVO4O6EQ5GHLAERIMLLHNCSKYH",
|
|
117
|
+
"chainCode": "",
|
|
118
|
+
"reason": "chainCode"
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
"name": "uppercase hex chain code",
|
|
122
|
+
"pub": "GA5WUJ54Z23KILLCUOUNAKTPBVZWKMQVO4O6EQ5GHLAERIMLLHNCSKYH",
|
|
123
|
+
"chainCode": "9A0F3C7D1E5B28460AF3D92C6E81B7053FA4C2E98D17B60543A2FC8E19D7B046",
|
|
124
|
+
"reason": "chainCode"
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
"name": "chain code with 0x prefix",
|
|
128
|
+
"pub": "GA5WUJ54Z23KILLCUOUNAKTPBVZWKMQVO4O6EQ5GHLAERIMLLHNCSKYH",
|
|
129
|
+
"chainCode": "0x0f3c7d1e5b28460af3d92c6e81b7053fa4c2e98d17b60543a2fc8e19d7b046",
|
|
130
|
+
"reason": "chainCode"
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
"name": "chain code too short",
|
|
134
|
+
"pub": "GA5WUJ54Z23KILLCUOUNAKTPBVZWKMQVO4O6EQ5GHLAERIMLLHNCSKYH",
|
|
135
|
+
"chainCode": "9a0f3c7d1e5b28460af3d92c6e81b7053fa4c2e98d17b60543a2fc8e19d7b04",
|
|
136
|
+
"reason": "chainCode"
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
"name": "chain code too long",
|
|
140
|
+
"pub": "GA5WUJ54Z23KILLCUOUNAKTPBVZWKMQVO4O6EQ5GHLAERIMLLHNCSKYH",
|
|
141
|
+
"chainCode": "9a0f3c7d1e5b28460af3d92c6e81b7053fa4c2e98d17b60543a2fc8e19d7b0460",
|
|
142
|
+
"reason": "chainCode"
|
|
143
|
+
}
|
|
144
|
+
]
|
|
145
|
+
}
|