@ledgerhq/hw-ledger-key-ring-protocol 0.5.2 → 0.5.3-nightly.1
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/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +14 -0
- package/package.json +3 -3
- package/lib/__tests__/codec.d.ts +0 -2
- package/lib/__tests__/codec.d.ts.map +0 -1
- package/lib/__tests__/codec.js +0 -99
- package/lib/__tests__/codec.js.map +0 -1
- package/lib/__tests__/crypto.d.ts +0 -2
- package/lib/__tests__/crypto.d.ts.map +0 -1
- package/lib/__tests__/crypto.js +0 -37
- package/lib/__tests__/crypto.js.map +0 -1
- package/lib/__tests__/indexed_tree.d.ts +0 -2
- package/lib/__tests__/indexed_tree.d.ts.map +0 -1
- package/lib/__tests__/indexed_tree.js +0 -44
- package/lib/__tests__/indexed_tree.js.map +0 -1
- package/lib/__tests__/key_exchange.d.ts +0 -2
- package/lib/__tests__/key_exchange.d.ts.map +0 -1
- package/lib/__tests__/key_exchange.js +0 -120
- package/lib/__tests__/key_exchange.js.map +0 -1
- package/lib/__tests__/seedId.d.ts +0 -2
- package/lib/__tests__/seedId.d.ts.map +0 -1
- package/lib/__tests__/seedId.js +0 -92
- package/lib/__tests__/seedId.js.map +0 -1
- package/lib/__tests__/shared_object.d.ts +0 -2
- package/lib/__tests__/shared_object.d.ts.map +0 -1
- package/lib/__tests__/shared_object.js +0 -65
- package/lib/__tests__/shared_object.js.map +0 -1
- package/lib/__tests__/units/NobleCrypto.test.d.ts +0 -2
- package/lib/__tests__/units/NobleCrypto.test.d.ts.map +0 -1
- package/lib/__tests__/units/NobleCrypto.test.js +0 -58
- package/lib/__tests__/units/NobleCrypto.test.js.map +0 -1
- package/lib-es/__tests__/codec.d.ts +0 -2
- package/lib-es/__tests__/codec.d.ts.map +0 -1
- package/lib-es/__tests__/codec.js +0 -97
- package/lib-es/__tests__/codec.js.map +0 -1
- package/lib-es/__tests__/crypto.d.ts +0 -2
- package/lib-es/__tests__/crypto.d.ts.map +0 -1
- package/lib-es/__tests__/crypto.js +0 -35
- package/lib-es/__tests__/crypto.js.map +0 -1
- package/lib-es/__tests__/indexed_tree.d.ts +0 -2
- package/lib-es/__tests__/indexed_tree.d.ts.map +0 -1
- package/lib-es/__tests__/indexed_tree.js +0 -42
- package/lib-es/__tests__/indexed_tree.js.map +0 -1
- package/lib-es/__tests__/key_exchange.d.ts +0 -2
- package/lib-es/__tests__/key_exchange.d.ts.map +0 -1
- package/lib-es/__tests__/key_exchange.js +0 -115
- package/lib-es/__tests__/key_exchange.js.map +0 -1
- package/lib-es/__tests__/seedId.d.ts +0 -2
- package/lib-es/__tests__/seedId.d.ts.map +0 -1
- package/lib-es/__tests__/seedId.js +0 -90
- package/lib-es/__tests__/seedId.js.map +0 -1
- package/lib-es/__tests__/shared_object.d.ts +0 -2
- package/lib-es/__tests__/shared_object.d.ts.map +0 -1
- package/lib-es/__tests__/shared_object.js +0 -63
- package/lib-es/__tests__/shared_object.js.map +0 -1
- package/lib-es/__tests__/units/NobleCrypto.test.d.ts +0 -2
- package/lib-es/__tests__/units/NobleCrypto.test.d.ts.map +0 -1
- package/lib-es/__tests__/units/NobleCrypto.test.js +0 -56
- package/lib-es/__tests__/units/NobleCrypto.test.js.map +0 -1
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const NobleCrypto_1 = require("../../NobleCrypto");
|
|
4
|
-
describe("NobleCryptoSecp256k1", () => {
|
|
5
|
-
const crypto = new NobleCrypto_1.NobleCryptoSecp256k1();
|
|
6
|
-
describe("derEncode", () => {
|
|
7
|
-
it("should encode a valid DER signature", () => {
|
|
8
|
-
// The R component starts with a byte < 0x80
|
|
9
|
-
// The S component starts with a 0 but the next byte is >= 0x80
|
|
10
|
-
const der32 = crypto.derEncode(Uint8Array.from([
|
|
11
|
-
...Buffer.from("4802f9f997e06b7e98ec35ba75a10a0e0a5bd1a15767d7d1124869301081d891", "hex"),
|
|
12
|
-
...Buffer.from("008022731cd6cd05ac285829d8d588b51bb4c5be5bad5a44cbd966fcf670f809", "hex"),
|
|
13
|
-
]));
|
|
14
|
-
expect(Buffer.from(der32).toString("hex")).toBe(noWS `
|
|
15
|
-
30 44
|
|
16
|
-
02 20 4802f9f997e06b7e98ec35ba75a10a0e0a5bd1a15767d7d1124869301081d891
|
|
17
|
-
02 20 008022731cd6cd05ac285829d8d588b51bb4c5be5bad5a44cbd966fcf670f809
|
|
18
|
-
`);
|
|
19
|
-
// The R and S component both start with a byte >= 0x80
|
|
20
|
-
const der33 = crypto.derEncode(Uint8Array.from([
|
|
21
|
-
...Buffer.from("8002f9f997e06b7e98ec35ba75a10a0e0a5bd1a15767d7d1124869301081d891", "hex"),
|
|
22
|
-
...Buffer.from("ff7222731cd6cd05ac285829d8d588b51bb4c5be5bad5a44cbd966fcf670f809", "hex"),
|
|
23
|
-
]));
|
|
24
|
-
expect(Buffer.from(der33).toString("hex")).toBe(noWS `
|
|
25
|
-
30 46
|
|
26
|
-
02 21 008002f9f997e06b7e98ec35ba75a10a0e0a5bd1a15767d7d1124869301081d891
|
|
27
|
-
02 21 00ff7222731cd6cd05ac285829d8d588b51bb4c5be5bad5a44cbd966fcf670f809
|
|
28
|
-
`);
|
|
29
|
-
// The R and S component both start with a 0 then have a byte < 0x80
|
|
30
|
-
const der31 = crypto.derEncode(Uint8Array.from([
|
|
31
|
-
...Buffer.from("0002f9f997e06b7e98ec35ba75a10a0e0a5bd1a15767d7d1124869301081d891", "hex"),
|
|
32
|
-
...Buffer.from("007222731cd6cd05ac285829d8d588b51bb4c5be5bad5a44cbd966fcf670f809", "hex"),
|
|
33
|
-
]));
|
|
34
|
-
expect(Buffer.from(der31).toString("hex")).toBe(noWS `
|
|
35
|
-
30 42
|
|
36
|
-
02 1f 02f9f997e06b7e98ec35ba75a10a0e0a5bd1a15767d7d1124869301081d891
|
|
37
|
-
02 1f 7222731cd6cd05ac285829d8d588b51bb4c5be5bad5a44cbd966fcf670f809
|
|
38
|
-
`);
|
|
39
|
-
// The R and S component both start several leading 0s
|
|
40
|
-
const derLeadingZeros = crypto.derEncode(Uint8Array.from([
|
|
41
|
-
...Buffer.from("000000f997e06b7e98ec35ba75a10a0e0a5bd1a15767d7d1124869301081d891", "hex"),
|
|
42
|
-
...Buffer.from("000000731cd6cd05ac285829d8d588b51bb4c5be5bad5a44cbd966fcf670f809", "hex"),
|
|
43
|
-
]));
|
|
44
|
-
expect(Buffer.from(derLeadingZeros).toString("hex")).toBe(noWS `
|
|
45
|
-
30 3f
|
|
46
|
-
02 1e 00f997e06b7e98ec35ba75a10a0e0a5bd1a15767d7d1124869301081d891
|
|
47
|
-
02 1d 731cd6cd05ac285829d8d588b51bb4c5be5bad5a44cbd966fcf670f809
|
|
48
|
-
`);
|
|
49
|
-
});
|
|
50
|
-
it("should throw if a component is null", () => {
|
|
51
|
-
expect(() => crypto.derEncode(Uint8Array.from({ length: 64 }, () => 0))).toThrow(`Invalid DER component: 0000000000000000000000000000000000000000000000000000000000000000`);
|
|
52
|
-
});
|
|
53
|
-
});
|
|
54
|
-
});
|
|
55
|
-
function noWS(...str) {
|
|
56
|
-
return str.join("").replace(/\s+/g, "");
|
|
57
|
-
}
|
|
58
|
-
//# sourceMappingURL=NobleCrypto.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"NobleCrypto.test.js","sourceRoot":"","sources":["../../../src/__tests__/units/NobleCrypto.test.ts"],"names":[],"mappings":";;AAAA,mDAAyD;AAEzD,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,MAAM,MAAM,GAAG,IAAI,kCAAoB,EAAE,CAAC;IAE1C,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;QACzB,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,4CAA4C;YAC5C,+DAA+D;YAC/D,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAC5B,UAAU,CAAC,IAAI,CAAC;gBACd,GAAG,MAAM,CAAC,IAAI,CAAC,kEAAkE,EAAE,KAAK,CAAC;gBACzF,GAAG,MAAM,CAAC,IAAI,CAAC,kEAAkE,EAAE,KAAK,CAAC;aAC1F,CAAC,CACH,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAA;;;;OAInD,CAAC,CAAC;YAEH,uDAAuD;YACvD,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAC5B,UAAU,CAAC,IAAI,CAAC;gBACd,GAAG,MAAM,CAAC,IAAI,CAAC,kEAAkE,EAAE,KAAK,CAAC;gBACzF,GAAG,MAAM,CAAC,IAAI,CAAC,kEAAkE,EAAE,KAAK,CAAC;aAC1F,CAAC,CACH,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAA;;;;OAInD,CAAC,CAAC;YAEH,oEAAoE;YACpE,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAC5B,UAAU,CAAC,IAAI,CAAC;gBACd,GAAG,MAAM,CAAC,IAAI,CAAC,kEAAkE,EAAE,KAAK,CAAC;gBACzF,GAAG,MAAM,CAAC,IAAI,CAAC,kEAAkE,EAAE,KAAK,CAAC;aAC1F,CAAC,CACH,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAA;;;;OAInD,CAAC,CAAC;YAEH,sDAAsD;YACtD,MAAM,eAAe,GAAG,MAAM,CAAC,SAAS,CACtC,UAAU,CAAC,IAAI,CAAC;gBACd,GAAG,MAAM,CAAC,IAAI,CAAC,kEAAkE,EAAE,KAAK,CAAC;gBACzF,GAAG,MAAM,CAAC,IAAI,CAAC,kEAAkE,EAAE,KAAK,CAAC;aAC1F,CAAC,CACH,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAA;;;;OAI7D,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAC9E,yFAAyF,CAC1F,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,SAAS,IAAI,CAAC,GAAG,GAA2B;IAC1C,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAC1C,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../../src/__tests__/codec.ts"],"names":[],"mappings":""}
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
import { AddMember, createCommandBlock, Permissions, PublishKey, Seed, signCommandBlock, } from "../CommandBlock";
|
|
2
|
-
import { TLV } from "../tlv";
|
|
3
|
-
import { CommandStreamDecoder } from "../CommandStreamDecoder";
|
|
4
|
-
import { CommandStreamEncoder } from "../CommandStreamEncoder";
|
|
5
|
-
import { crypto } from "../Crypto";
|
|
6
|
-
import { CommandStream } from "..";
|
|
7
|
-
describe("Encode/Decode command stream tester", () => {
|
|
8
|
-
it("should encode and decode a byte", () => {
|
|
9
|
-
const byte = 42;
|
|
10
|
-
let buffer = new Uint8Array();
|
|
11
|
-
buffer = TLV.pushByte(buffer, 42);
|
|
12
|
-
const decoded = TLV.readVarInt(TLV.readTLV(buffer, 0));
|
|
13
|
-
expect(decoded.value).toBe(byte);
|
|
14
|
-
});
|
|
15
|
-
it("should encode and decode a Int32", () => {
|
|
16
|
-
const varint = 0xdeadbeef;
|
|
17
|
-
let buffer = new Uint8Array();
|
|
18
|
-
buffer = TLV.pushInt32(buffer, varint);
|
|
19
|
-
const decoded = TLV.readVarInt(TLV.readTLV(buffer, 0));
|
|
20
|
-
expect(decoded.value).toBe(varint);
|
|
21
|
-
});
|
|
22
|
-
it("should encode and decode a string", () => {
|
|
23
|
-
const str = "Hello World";
|
|
24
|
-
let buffer = new Uint8Array();
|
|
25
|
-
buffer = TLV.pushString(buffer, str);
|
|
26
|
-
const decoded = TLV.readString(TLV.readTLV(buffer, 0));
|
|
27
|
-
expect(decoded.value).toBe(str);
|
|
28
|
-
});
|
|
29
|
-
it("should encode and decode a hash", () => {
|
|
30
|
-
const hash = crypto.hash(new Uint8Array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]));
|
|
31
|
-
let buffer = new Uint8Array();
|
|
32
|
-
buffer = TLV.pushHash(buffer, hash);
|
|
33
|
-
const decoded = TLV.readHash(TLV.readTLV(buffer, 0));
|
|
34
|
-
expect(crypto.to_hex(decoded.value)).toEqual(crypto.to_hex(hash));
|
|
35
|
-
});
|
|
36
|
-
it("should encode and decode bytes", () => {
|
|
37
|
-
const bytes = new Uint8Array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]);
|
|
38
|
-
let buffer = new Uint8Array();
|
|
39
|
-
buffer = TLV.pushBytes(buffer, bytes);
|
|
40
|
-
const decoded = TLV.readBytes(TLV.readTLV(buffer, 0));
|
|
41
|
-
expect(decoded.value).toEqual(bytes);
|
|
42
|
-
});
|
|
43
|
-
it("should encode and decode a signature", () => {
|
|
44
|
-
const alice = crypto.randomKeypair();
|
|
45
|
-
const block = signCommandBlock(createCommandBlock(alice.publicKey, []), alice.publicKey, alice.privateKey);
|
|
46
|
-
let buffer = new Uint8Array();
|
|
47
|
-
buffer = TLV.pushSignature(buffer, block.signature);
|
|
48
|
-
const decoded = TLV.readSignature(TLV.readTLV(buffer, 0));
|
|
49
|
-
expect(decoded.value).toEqual(block.signature);
|
|
50
|
-
});
|
|
51
|
-
it("should encode and decode a public key", () => {
|
|
52
|
-
const alice = crypto.randomKeypair();
|
|
53
|
-
let buffer = new Uint8Array();
|
|
54
|
-
buffer = TLV.pushPublicKey(buffer, alice.publicKey);
|
|
55
|
-
const decoded = TLV.readPublicKey(TLV.readTLV(buffer, 0));
|
|
56
|
-
expect(decoded.value).toEqual(alice.publicKey);
|
|
57
|
-
});
|
|
58
|
-
it("should encode and decode a stream. Encoding/Decoding should not alter the stream", () => {
|
|
59
|
-
const alice = crypto.randomKeypair();
|
|
60
|
-
const groupPk = crypto.randomKeypair();
|
|
61
|
-
const groupChainCode = crypto.randomBytes(32);
|
|
62
|
-
const xpriv = new Uint8Array(64);
|
|
63
|
-
const initializationVector = crypto.randomBytes(16);
|
|
64
|
-
xpriv.set(groupPk.privateKey);
|
|
65
|
-
xpriv.set(groupChainCode, 32);
|
|
66
|
-
const ephemeralPk = crypto.randomKeypair();
|
|
67
|
-
const block1 = signCommandBlock(createCommandBlock(alice.publicKey, [
|
|
68
|
-
new Seed(crypto.randomBytes(16), 0, groupPk.publicKey, initializationVector, xpriv, ephemeralPk.publicKey),
|
|
69
|
-
]), alice.publicKey, alice.privateKey);
|
|
70
|
-
const block2 = signCommandBlock(createCommandBlock(alice.publicKey, [
|
|
71
|
-
new AddMember("Alice", crypto.randomBytes(32), Permissions.OWNER),
|
|
72
|
-
new PublishKey(crypto.randomBytes(16), crypto.randomBytes(32), crypto.randomBytes(32), crypto.randomBytes(32)),
|
|
73
|
-
]), alice.publicKey, alice.privateKey);
|
|
74
|
-
const block3 = signCommandBlock(createCommandBlock(alice.publicKey, []), alice.publicKey, alice.privateKey);
|
|
75
|
-
const stream = [block1, block2, block3];
|
|
76
|
-
const encoded = CommandStreamEncoder.encode(stream);
|
|
77
|
-
const digestEncoded = crypto.hash(encoded);
|
|
78
|
-
const decoded = CommandStreamDecoder.decode(encoded);
|
|
79
|
-
const reencoded = CommandStreamEncoder.encode(decoded);
|
|
80
|
-
const digestReencoded = crypto.hash(reencoded);
|
|
81
|
-
expect(digestEncoded).toEqual(digestReencoded);
|
|
82
|
-
});
|
|
83
|
-
it("decodes a specific command stream", async () => {
|
|
84
|
-
const tlv = "0101010220824b3168c79e8b61b599751c107117b5c9b647f2b6859de8a245952559707692062102a13e82cd0d2f77d1ab1434d8bd799571e54cd32e1121c5cf82217f8b0b713b6b01010315a8050c800000008000001080000000062103ccf74aa7775b3d39d6cbb0236acee7a7f980b9f6a556a4d814d44b0bd56cb77b05108c51eda6be26623ca919ed17333afcdb054019c0b60ede1692479cc04ce69eae6a0bd51941bab6f044f3dec10c11cf11e6253504d1df6b0aab7dc1996e4eaa7c6f92c29153c59534578901cd7ff4efcea1ae06210268abdb3d49ba4a274ce8660cde0d1eeaf1fea00e281218be775f6b3aefc39756113a040f7765622d746f6f6c732d6563626638062103a270456b0f95714cc61a6473e6b6d8db354a3c377281096bdd2439a5475ecbf80104ffffffff129a05100e5205b4a616b2a4d79b07b4a4932f560540669e741f38fee07956fb0dc0ea9978d55bd5d8424b0d0f66a2c5a45788f92d0ddc283138c7ba62c521de1d604ee7f847c5aed40a11536bbe742af0be8cfd4132062103a270456b0f95714cc61a6473e6b6d8db354a3c377281096bdd2439a5475ecbf80621027003755248202ea8a67d1fcdcd82d7f7022248f3af892fa5307d3ea250dc81050346304402204422a779fd08723d8cba19c0cc11ef7a24f6f1f459cb01598ff1a26f27ea8976022053a554d4f509223f2d08faa5de796fed13a9762f35da08e94884edd1f7c0d015";
|
|
85
|
-
const decoded = CommandStreamDecoder.decode(crypto.from_hex(tlv));
|
|
86
|
-
const stream = new CommandStream(decoded);
|
|
87
|
-
const resolved = await stream.resolve();
|
|
88
|
-
expect(resolved.getMembersData()).toEqual([
|
|
89
|
-
{
|
|
90
|
-
id: "03a270456b0f95714cc61a6473e6b6d8db354a3c377281096bdd2439a5475ecbf8",
|
|
91
|
-
name: "web-tools-ecbf8",
|
|
92
|
-
permissions: 4294967295,
|
|
93
|
-
},
|
|
94
|
-
]);
|
|
95
|
-
});
|
|
96
|
-
});
|
|
97
|
-
//# sourceMappingURL=codec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"codec.js","sourceRoot":"","sources":["../../src/__tests__/codec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../src/__tests__/crypto.ts"],"names":[],"mappings":""}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { crypto } from "../Crypto";
|
|
2
|
-
describe("Sodium wrapper tester", () => {
|
|
3
|
-
it("should computes the same symetric key with ECDH using two parties", async () => {
|
|
4
|
-
const kp1 = await crypto.randomKeypair();
|
|
5
|
-
const kp2 = await crypto.randomKeypair();
|
|
6
|
-
const shared1 = await crypto.ecdh(kp1, kp2.publicKey);
|
|
7
|
-
const shared2 = await crypto.ecdh(kp2, kp1.publicKey);
|
|
8
|
-
expect(crypto.to_hex(shared1)).toBe(crypto.to_hex(shared2));
|
|
9
|
-
});
|
|
10
|
-
it("should encrypt a message and decrypt using the same symmetric key", async () => {
|
|
11
|
-
//const message = "Hello world!"
|
|
12
|
-
const message = await crypto.randomBytes(64);
|
|
13
|
-
const key = await crypto.randomBytes(32);
|
|
14
|
-
const nonce = await crypto.randomBytes(16);
|
|
15
|
-
const encrypted = await crypto.encrypt(key, nonce, message);
|
|
16
|
-
const decrypted = await crypto.decrypt(key, nonce, encrypted);
|
|
17
|
-
expect(crypto.to_hex(decrypted)).toBe(crypto.to_hex(message));
|
|
18
|
-
});
|
|
19
|
-
it("should encrypt user data", async () => {
|
|
20
|
-
const keypair = await crypto.randomKeypair();
|
|
21
|
-
const data = await crypto.randomBytes(64);
|
|
22
|
-
const encrypted = await crypto.encryptUserData(keypair.privateKey, data);
|
|
23
|
-
const decrypted = await crypto.decryptUserData(keypair.privateKey, encrypted);
|
|
24
|
-
expect(crypto.to_hex(decrypted)).toBe(crypto.to_hex(data));
|
|
25
|
-
});
|
|
26
|
-
it("should verify truncated signature by padding 0s from the start", async () => {
|
|
27
|
-
const hash = crypto.from_hex("19514a2e50bfad4a6de397ebde776191cbb720e8bbfcc3c165385c3664c03341");
|
|
28
|
-
const signature = crypto.from_hex(
|
|
29
|
-
// Here the "S" part of the signature is only 31 bytes long it should be padded with a 0
|
|
30
|
-
"3043022052a82876fcd4d9d8383ce12a7e4d96bb4c1d9e71e857cd087c092b87cec6baeb021f6b86b9a3bab1e7794ca6ef081c66cb6e6dff06cceddbd23e1f25089e311784");
|
|
31
|
-
const issuer = crypto.from_hex("026e7bf1e015da491674be5796b15d6fabd1f454aad478a6a223934e5a872719e0");
|
|
32
|
-
expect(await crypto.verify(hash, signature, issuer)).toBe(true);
|
|
33
|
-
});
|
|
34
|
-
});
|
|
35
|
-
//# sourceMappingURL=crypto.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/__tests__/crypto.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;QACjF,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,aAAa,EAAE,CAAC;QACzC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,aAAa,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;QACtD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;QAEtD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;QACjF,gCAAgC;QAChC,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAC7C,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAC5D,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;QAC9D,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;QACxC,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,aAAa,EAAE,CAAC;QAC7C,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAC1C,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACzE,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QAC9E,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAC9E,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAC1B,kEAAkE,CACnE,CAAC;QACF,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ;QAC/B,wFAAwF;QACxF,4IAA4I,CAC7I,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAC5B,oEAAoE,CACrE,CAAC;QACF,MAAM,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"indexed_tree.d.ts","sourceRoot":"","sources":["../../src/__tests__/indexed_tree.ts"],"names":[],"mappings":""}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { IndexedTree } from "../IndexedTree";
|
|
2
|
-
describe("Indexed tree unit test suite", () => {
|
|
3
|
-
it("should create a new tree with a root", () => {
|
|
4
|
-
const tree = new IndexedTree(0);
|
|
5
|
-
expect(tree.getValue()).toBe(0);
|
|
6
|
-
});
|
|
7
|
-
it("should create a new tree with a root and update the root", () => {
|
|
8
|
-
let tree = new IndexedTree(0);
|
|
9
|
-
tree = tree.updateChild([], 1);
|
|
10
|
-
expect(tree.getValue()).toBe(1);
|
|
11
|
-
});
|
|
12
|
-
it("should create a new tree with a root and update a child", () => {
|
|
13
|
-
let tree = new IndexedTree(0);
|
|
14
|
-
tree = tree.updateChild([1], 1);
|
|
15
|
-
expect(tree.getChild(1).getValue()).toBe(1);
|
|
16
|
-
});
|
|
17
|
-
it("should create a tree with multiple children and update a child which had no value before", () => {
|
|
18
|
-
let tree = new IndexedTree(0);
|
|
19
|
-
tree = tree.updateChild([0, 1], 1);
|
|
20
|
-
tree = tree.updateChild([0, 2], 2);
|
|
21
|
-
expect(tree.findChild([0, 1]).getValue()).toBe(1);
|
|
22
|
-
expect(tree.findChild([0, 2]).getValue()).toBe(2);
|
|
23
|
-
expect(tree.getChild(0)?.getValue()).toBe(null);
|
|
24
|
-
tree = tree.updateChild([0], 42);
|
|
25
|
-
expect(tree.getChild(0)?.getValue()).toBe(42);
|
|
26
|
-
});
|
|
27
|
-
it("should add a subtree to the tree", () => {
|
|
28
|
-
let tree = new IndexedTree(0);
|
|
29
|
-
tree = tree.addChild([0, 1], new IndexedTree(1));
|
|
30
|
-
tree = tree.addChild([0, 2], new IndexedTree(2));
|
|
31
|
-
let subtree = new IndexedTree(42);
|
|
32
|
-
subtree = subtree.updateChild([0], 43);
|
|
33
|
-
subtree = subtree.updateChild([1], 44);
|
|
34
|
-
tree = tree.addChild([0, 3], subtree);
|
|
35
|
-
expect(tree.findChild([0, 1]).getValue()).toBe(1);
|
|
36
|
-
expect(tree.findChild([0, 2]).getValue()).toBe(2);
|
|
37
|
-
expect(tree.findChild([0, 3]).getValue()).toBe(42);
|
|
38
|
-
expect(tree.findChild([0, 3, 0]).getValue()).toBe(43);
|
|
39
|
-
expect(tree.findChild([0, 3, 1]).getValue()).toBe(44);
|
|
40
|
-
});
|
|
41
|
-
});
|
|
42
|
-
//# sourceMappingURL=indexed_tree.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"indexed_tree.js","sourceRoot":"","sources":["../../src/__tests__/indexed_tree.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"key_exchange.d.ts","sourceRoot":"","sources":["../../src/__tests__/key_exchange.ts"],"names":[],"mappings":""}
|
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
import { createDevice } from "../Device";
|
|
2
|
-
import CommandStream from "../CommandStream";
|
|
3
|
-
import { Permissions } from "../CommandBlock";
|
|
4
|
-
import { crypto } from "../Crypto";
|
|
5
|
-
import { StreamTreeCipher } from "../StreamTreeCipher";
|
|
6
|
-
import { StreamTree } from "../StreamTree";
|
|
7
|
-
const DEFAULT_TOPIC = "c96d450545ff2836204c29af291428a5bf740304978f5dfb0b4a261474192851";
|
|
8
|
-
describe("Symmetric key exchange scenarii", () => {
|
|
9
|
-
it("create a new group with 1 member", async () => {
|
|
10
|
-
const alice = await createDevice();
|
|
11
|
-
const topic = crypto.from_hex(DEFAULT_TOPIC);
|
|
12
|
-
let stream = new CommandStream([]);
|
|
13
|
-
stream = await stream.edit().seed(topic).issue(alice);
|
|
14
|
-
const resolved = await stream.resolve();
|
|
15
|
-
expect(resolved.isCreated()).toBe(true);
|
|
16
|
-
expect(resolved.getMembers().length).toBe(1);
|
|
17
|
-
expect(resolved.getMembersData().length).toBe(0);
|
|
18
|
-
expect(crypto.to_hex(resolved.getTopic())).toBe(crypto.to_hex(topic));
|
|
19
|
-
//const parsed = CommandStreamDecoder.decode(CommandStreamEncoder.encode(stream.blocks));
|
|
20
|
-
//console.log(JSON.stringify(CommandStreamJsonifier.jsonify(parsed), null, 2));
|
|
21
|
-
//const raw = CommandStreamEncoder.encode(stream.blocks);
|
|
22
|
-
//console.log(crypto.to_hex(raw));
|
|
23
|
-
});
|
|
24
|
-
it("create a group owned by Alice, Alice adds Bob and publish a key for Bob.", async () => {
|
|
25
|
-
const alice = await createDevice();
|
|
26
|
-
const bob = await createDevice();
|
|
27
|
-
let stream = new CommandStream();
|
|
28
|
-
stream = await stream.edit().seed(crypto.from_hex(DEFAULT_TOPIC)).issue(alice);
|
|
29
|
-
stream = await stream
|
|
30
|
-
.edit()
|
|
31
|
-
.addMember("Bob", (await bob.getPublicKey()).publicKey, Permissions.KEY_READER)
|
|
32
|
-
.issue(alice);
|
|
33
|
-
const tree = StreamTree.from(stream);
|
|
34
|
-
// Encrypt a message from Alice
|
|
35
|
-
const originalMessage = new TextEncoder().encode("Hello World!");
|
|
36
|
-
const encryptedMessage = await StreamTreeCipher.create(alice).encrypt(tree, [], originalMessage);
|
|
37
|
-
// The message should be different from the original
|
|
38
|
-
expect(crypto.to_hex(encryptedMessage)).not.toEqual(crypto.to_hex(originalMessage));
|
|
39
|
-
// Decrypt the message from Bob
|
|
40
|
-
const decryptedMessage = await StreamTreeCipher.create(bob).decrypt(tree, [], encryptedMessage);
|
|
41
|
-
// The message should be the same as the original
|
|
42
|
-
expect(crypto.to_hex(decryptedMessage)).toBe(crypto.to_hex(originalMessage));
|
|
43
|
-
});
|
|
44
|
-
it("create a group owned by Alice, Alice adds Bob and publish a key for Bob, Alice adds Charlie and Bob publishes a key for Charlie", async () => {
|
|
45
|
-
const alice = await createDevice();
|
|
46
|
-
const bob = await createDevice();
|
|
47
|
-
const charlie = await createDevice();
|
|
48
|
-
let stream = new CommandStream();
|
|
49
|
-
stream = await stream.edit().seed(crypto.from_hex(DEFAULT_TOPIC)).issue(alice);
|
|
50
|
-
stream = await stream
|
|
51
|
-
.edit()
|
|
52
|
-
.addMember("Bob", (await bob.getPublicKey()).publicKey, Permissions.KEY_READER)
|
|
53
|
-
.issue(alice);
|
|
54
|
-
stream = await stream
|
|
55
|
-
.edit()
|
|
56
|
-
.addMember("Charlie", (await charlie.getPublicKey()).publicKey, Permissions.KEY_READER)
|
|
57
|
-
.issue(alice);
|
|
58
|
-
const tree = StreamTree.from(stream);
|
|
59
|
-
// Encrypt a message from Alice
|
|
60
|
-
const originalMessage = new TextEncoder().encode("Hello World!");
|
|
61
|
-
const encryptedMessage = await StreamTreeCipher.create(alice).encrypt(tree, [], originalMessage);
|
|
62
|
-
// The message should be different from the original
|
|
63
|
-
expect(crypto.to_hex(encryptedMessage)).not.toBe(crypto.to_hex(originalMessage));
|
|
64
|
-
{
|
|
65
|
-
// Decrypt the message from Bob
|
|
66
|
-
const decryptedMessage = await StreamTreeCipher.create(bob).decrypt(tree, [], encryptedMessage);
|
|
67
|
-
// The message should be the same as the original
|
|
68
|
-
expect(crypto.to_hex(decryptedMessage)).toBe(crypto.to_hex(originalMessage));
|
|
69
|
-
}
|
|
70
|
-
{
|
|
71
|
-
// Decrypt the message from Charlie
|
|
72
|
-
const decryptedMessage = await StreamTreeCipher.create(charlie).decrypt(tree, [], encryptedMessage);
|
|
73
|
-
// The message should be the same as the original
|
|
74
|
-
expect(crypto.to_hex(decryptedMessage)).toBe(crypto.to_hex(originalMessage));
|
|
75
|
-
}
|
|
76
|
-
//console.log(crypto.to_hex(CommandStreamEncoder.encode(stream.blocks)));
|
|
77
|
-
//const parsed = CommandStreamDecoder.decode(CommandStreamEncoder.encode(stream.blocks));
|
|
78
|
-
//console.log(JSON.stringify(CommandStreamJsonifier.jsonify(parsed), null, 2));
|
|
79
|
-
});
|
|
80
|
-
it("creates group owned by Alice, Alice adds Bob as an admin, Bob adds Charlie", async () => {
|
|
81
|
-
const alice = await createDevice();
|
|
82
|
-
const bob = await createDevice();
|
|
83
|
-
const charlie = await createDevice();
|
|
84
|
-
let stream = new CommandStream();
|
|
85
|
-
stream = await stream.edit().seed(crypto.from_hex(DEFAULT_TOPIC)).issue(alice);
|
|
86
|
-
stream = await stream
|
|
87
|
-
.edit()
|
|
88
|
-
.addMember("Bob", (await bob.getPublicKey()).publicKey, Permissions.ADD_MEMBER | Permissions.KEY_READER)
|
|
89
|
-
.issue(alice);
|
|
90
|
-
stream = await stream
|
|
91
|
-
.edit()
|
|
92
|
-
.addMember("Charlie", (await charlie.getPublicKey()).publicKey, Permissions.KEY_READER)
|
|
93
|
-
.issue(bob);
|
|
94
|
-
const tree = StreamTree.from(stream);
|
|
95
|
-
// Encrypt a message from Alice
|
|
96
|
-
const originalMessage = new TextEncoder().encode("Hello World!");
|
|
97
|
-
const encryptedMessage = await StreamTreeCipher.create(alice).encrypt(tree, [], originalMessage);
|
|
98
|
-
// The message should be different from the original
|
|
99
|
-
expect(crypto.to_hex(encryptedMessage)).not.toBe(crypto.to_hex(originalMessage));
|
|
100
|
-
{
|
|
101
|
-
// Decrypt the message from Bob
|
|
102
|
-
const decryptedMessage = await StreamTreeCipher.create(bob).decrypt(tree, [], encryptedMessage);
|
|
103
|
-
// The message should be the same as the original
|
|
104
|
-
expect(crypto.to_hex(decryptedMessage)).toBe(crypto.to_hex(originalMessage));
|
|
105
|
-
}
|
|
106
|
-
{
|
|
107
|
-
// Decrypt the message from Charlie
|
|
108
|
-
const decryptedMessage = await StreamTreeCipher.create(charlie).decrypt(tree, [], encryptedMessage);
|
|
109
|
-
// The message should be the same as the original
|
|
110
|
-
expect(crypto.to_hex(decryptedMessage)).toBe(crypto.to_hex(originalMessage));
|
|
111
|
-
}
|
|
112
|
-
//console.log(JSON.stringify(CommandStreamJsonifier.jsonify(stream.blocks), null, 2));
|
|
113
|
-
});
|
|
114
|
-
});
|
|
115
|
-
//# sourceMappingURL=key_exchange.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"key_exchange.js","sourceRoot":"","sources":["../../src/__tests__/key_exchange.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"seedId.d.ts","sourceRoot":"","sources":["../../src/__tests__/seedId.ts"],"names":[],"mappings":""}
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
import { crypto } from "../Crypto";
|
|
2
|
-
import { Challenge, PubKeyCredential } from "../SeedId";
|
|
3
|
-
describe("PubKeyCredential regular cases", () => {
|
|
4
|
-
const rpPubKeyCredential = new PubKeyCredential({
|
|
5
|
-
version: 0,
|
|
6
|
-
curveId: 0x21,
|
|
7
|
-
signAlgorithm: 0x01,
|
|
8
|
-
publicKey: crypto.from_hex("02b2c29ab36022219967cc21a306599ecaf51ce9f2998da6982388d52c8c69a6a5"),
|
|
9
|
-
});
|
|
10
|
-
test("assertValidity", () => {
|
|
11
|
-
expect(() => rpPubKeyCredential.assertValidity()).not.toThrow();
|
|
12
|
-
});
|
|
13
|
-
test("toJSON", () => {
|
|
14
|
-
expect(rpPubKeyCredential.toJSON()).toEqual({
|
|
15
|
-
version: 0,
|
|
16
|
-
curveId: 33,
|
|
17
|
-
signAlgorithm: 1,
|
|
18
|
-
publicKey: "02b2c29ab36022219967cc21a306599ecaf51ce9f2998da6982388d52c8c69a6a5",
|
|
19
|
-
});
|
|
20
|
-
});
|
|
21
|
-
test("toBytes", () => {
|
|
22
|
-
expect(crypto.to_hex(rpPubKeyCredential.toBytes())).toEqual("0021012102b2c29ab36022219967cc21a306599ecaf51ce9f2998da6982388d52c8c69a6a5");
|
|
23
|
-
});
|
|
24
|
-
test("fromBytes", () => {
|
|
25
|
-
expect(PubKeyCredential.fromBytes(crypto.from_hex("0021012102b2c29ab36022219967cc21a306599ecaf51ce9f2998da6982388d52c8c69a6a5"))).toEqual([rpPubKeyCredential, 37]);
|
|
26
|
-
});
|
|
27
|
-
test("toBytes into fromBytes", () => {
|
|
28
|
-
const bytes = rpPubKeyCredential.toBytes();
|
|
29
|
-
const [pubKeyCredential, _] = PubKeyCredential.fromBytes(bytes);
|
|
30
|
-
expect(pubKeyCredential).toEqual(rpPubKeyCredential);
|
|
31
|
-
});
|
|
32
|
-
});
|
|
33
|
-
describe("Challenge regular cases", () => {
|
|
34
|
-
const rpPubKeyCredential = new PubKeyCredential({
|
|
35
|
-
version: 0,
|
|
36
|
-
curveId: 0x21,
|
|
37
|
-
signAlgorithm: 0x01,
|
|
38
|
-
publicKey: crypto.from_hex("02b2c29ab36022219967cc21a306599ecaf51ce9f2998da6982388d52c8c69a6a5"),
|
|
39
|
-
});
|
|
40
|
-
const challengeData = crypto.from_hex("53cafde60e5395b164eb867213bc05f6");
|
|
41
|
-
const rpSignature = crypto.from_hex("3045022025d130d7ae5c48a6cf09781d04a08e9a2d07ce1bd17e84637f6ede4a043c5dcc022100a846ececf20eb53ffc2dc502ce8074ba40b241bfd13edaf1e8575559a9b2b4ea");
|
|
42
|
-
const challenge = new Challenge({
|
|
43
|
-
payloadType: 0x07,
|
|
44
|
-
version: 0,
|
|
45
|
-
protocolVersion: {
|
|
46
|
-
major: 1,
|
|
47
|
-
minor: 0,
|
|
48
|
-
patch: 0,
|
|
49
|
-
},
|
|
50
|
-
challengeData: challengeData,
|
|
51
|
-
challengeExpiry: new Date(1708678950000),
|
|
52
|
-
host: "localhost",
|
|
53
|
-
rpCredential: rpPubKeyCredential,
|
|
54
|
-
rpSignature: rpSignature,
|
|
55
|
-
});
|
|
56
|
-
test("parse one example from backend", () => {
|
|
57
|
-
const hex = "01010702010012102d4492d50ef878a450d9bd6e8862690014010115483046022100beb271fa9752c377251005e125cc115737e427d5259a2dbbc9a38f7a36430c3f0221008826b3d3c1b491b41908d7cc89d71b92e9428c52a927e95341d555252f687b0f16046654aea120096c6f63616c686f7374320121332103cb7628e7248ddf9c07da54b979f16bf081fb3d173aac0992ad2a44ef6a388ae2600401000000";
|
|
58
|
-
const bytes = crypto.from_hex(hex);
|
|
59
|
-
const [challengeFromBytes, l] = Challenge.fromBytes(bytes);
|
|
60
|
-
expect(l).toEqual(bytes.length);
|
|
61
|
-
expect(challengeFromBytes.toJSON()).toEqual({
|
|
62
|
-
payloadType: 7,
|
|
63
|
-
version: 0,
|
|
64
|
-
challenge: { data: "2d4492d50ef878a450d9bd6e88626900", expiry: "2024-05-27T16:02:41.000Z" },
|
|
65
|
-
host: "localhost",
|
|
66
|
-
rp: [
|
|
67
|
-
{
|
|
68
|
-
credential: {
|
|
69
|
-
version: 0,
|
|
70
|
-
curveId: 33,
|
|
71
|
-
signAlgorithm: 1,
|
|
72
|
-
publicKey: "03cb7628e7248ddf9c07da54b979f16bf081fb3d173aac0992ad2a44ef6a388ae2",
|
|
73
|
-
},
|
|
74
|
-
signature: "3046022100beb271fa9752c377251005e125cc115737e427d5259a2dbbc9a38f7a36430c3f0221008826b3d3c1b491b41908d7cc89d71b92e9428c52a927e95341d555252f687b0f",
|
|
75
|
-
},
|
|
76
|
-
],
|
|
77
|
-
protocolVersion: { major: 1, minor: 0, patch: 0 },
|
|
78
|
-
});
|
|
79
|
-
});
|
|
80
|
-
test("toBytes", () => {
|
|
81
|
-
expect(crypto.to_hex(challenge.toBytes())).toEqual("010107020100121053cafde60e5395b164eb867213bc05f614010115473045022025d130d7ae5c48a6cf09781d04a08e9a2d07ce1bd17e84637f6ede4a043c5dcc022100a846ececf20eb53ffc2dc502ce8074ba40b241bfd13edaf1e8575559a9b2b4ea160465d85f2620096c6f63616c686f7374320121332102b2c29ab36022219967cc21a306599ecaf51ce9f2998da6982388d52c8c69a6a5600401000000");
|
|
82
|
-
});
|
|
83
|
-
test("toBytes <> fromBytes", () => {
|
|
84
|
-
const bytes = challenge.toBytes();
|
|
85
|
-
const [challengeFromBytes, _] = Challenge.fromBytes(bytes);
|
|
86
|
-
expect(challengeFromBytes).toEqual(challenge);
|
|
87
|
-
expect(challengeFromBytes.toBytes()).toEqual(bytes);
|
|
88
|
-
});
|
|
89
|
-
});
|
|
90
|
-
//# sourceMappingURL=seedId.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"seedId.js","sourceRoot":"","sources":["../../src/__tests__/seedId.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shared_object.d.ts","sourceRoot":"","sources":["../../src/__tests__/shared_object.ts"],"names":[],"mappings":""}
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
This test suite simulates an application generating data (using a fixed shchema) and sharing part of the
|
|
3
|
-
data to specific users. The data is encrypted using a StreamTree.
|
|
4
|
-
*/
|
|
5
|
-
import { StreamTree } from "../StreamTree";
|
|
6
|
-
import { device } from "..";
|
|
7
|
-
import { Permissions } from "../CommandBlock";
|
|
8
|
-
import { StreamTreeCipher } from "../StreamTreeCipher";
|
|
9
|
-
import { DerivationPath, crypto } from "../Crypto";
|
|
10
|
-
const APPLICATION_ID = 12;
|
|
11
|
-
async function encryptSharedObject(device, tree, sharedObject, mapping = new Map()) {
|
|
12
|
-
const cipher = StreamTreeCipher.create(device);
|
|
13
|
-
const encrypt = async (key, defaultPath) => {
|
|
14
|
-
return crypto.to_hex(await cipher.encrypt(tree, DerivationPath.toIndexArray(mapping.get(key) || defaultPath), new TextEncoder().encode(sharedObject[key].toString())));
|
|
15
|
-
};
|
|
16
|
-
const encryptedSharedObject = {
|
|
17
|
-
name: await encrypt("name", `0h/${APPLICATION_ID}h/0h/0h/0h`),
|
|
18
|
-
age: await encrypt("age", `0h/${APPLICATION_ID}h/0h/1h/0h`),
|
|
19
|
-
email: await encrypt("email", `0h/${APPLICATION_ID}h/0h/2h/0h`),
|
|
20
|
-
};
|
|
21
|
-
return encryptedSharedObject;
|
|
22
|
-
}
|
|
23
|
-
async function decryptSharedObject(device, tree, encryptedSharedObject, mapping = new Map()) {
|
|
24
|
-
const cipher = StreamTreeCipher.create(device);
|
|
25
|
-
const decrypt = async (key, defaultPath) => {
|
|
26
|
-
const path = DerivationPath.toIndexArray(mapping.get(key) || defaultPath);
|
|
27
|
-
const bytes = await cipher.decrypt(tree, path, crypto.from_hex(encryptedSharedObject[key]));
|
|
28
|
-
return new TextDecoder().decode(bytes);
|
|
29
|
-
};
|
|
30
|
-
const sharedObject = {
|
|
31
|
-
name: await decrypt("name", `0h/${APPLICATION_ID}h/0h/0h/0h`),
|
|
32
|
-
age: parseInt(await decrypt("age", `0h/${APPLICATION_ID}h/0h/1h/0h`)),
|
|
33
|
-
email: await decrypt("email", `0h/${APPLICATION_ID}h/0h/2h/0h`),
|
|
34
|
-
};
|
|
35
|
-
return sharedObject;
|
|
36
|
-
}
|
|
37
|
-
describe("Shared object scenario using StreamTree", () => {
|
|
38
|
-
it("should create a tree with 3 members, one member encrypt a shared object and another one decrypts it", async () => {
|
|
39
|
-
const alice = await device.software();
|
|
40
|
-
const bob = await device.software();
|
|
41
|
-
const carol = await device.software();
|
|
42
|
-
// Create a new tree owned by alice
|
|
43
|
-
let tree = await StreamTree.createNewTree(alice);
|
|
44
|
-
// Share the application node with bob
|
|
45
|
-
tree = await tree.share(tree.getApplicationRootPath(APPLICATION_ID), alice, (await bob.getPublicKey()).publicKey, "Bob", Permissions.OWNER);
|
|
46
|
-
// Bob creates a shared object and encrypt it (1 value -> 1 encryption key)
|
|
47
|
-
const sharedObject = {
|
|
48
|
-
name: "Bob",
|
|
49
|
-
age: 42,
|
|
50
|
-
email: "bob@box.com",
|
|
51
|
-
};
|
|
52
|
-
//console.dir(sharedObject, { depth: null });
|
|
53
|
-
const encryptedObject = await encryptSharedObject(bob, tree, sharedObject);
|
|
54
|
-
// Share the application node with carol
|
|
55
|
-
tree = await tree.share(tree.getApplicationRootPath(APPLICATION_ID), alice, (await carol.getPublicKey()).publicKey, "Carol", Permissions.OWNER);
|
|
56
|
-
// Decrypt with Carol
|
|
57
|
-
const decryptedObject = await decryptSharedObject(carol, tree, encryptedObject);
|
|
58
|
-
//console.dir(encryptedObject, { depth: null });
|
|
59
|
-
//console.dir(decryptedObject, { depth: null });
|
|
60
|
-
expect(decryptedObject).toEqual(sharedObject);
|
|
61
|
-
});
|
|
62
|
-
});
|
|
63
|
-
//# sourceMappingURL=shared_object.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shared_object.js","sourceRoot":"","sources":["../../src/__tests__/shared_object.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"NobleCrypto.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/units/NobleCrypto.test.ts"],"names":[],"mappings":""}
|