Fixed bug in channel hash calculation and decryption
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
import { describe, it, expect, beforeEach } from "vitest";
|
||||
import { bytesToHex } from "@hamradio/packet";
|
||||
import { bytesToHex, hexToBytes } from "@hamradio/packet";
|
||||
import { Identity, LocalIdentity, Contact, Group, Contacts, parseNodeHash } from "../src/identity";
|
||||
import { PrivateKey, PublicKey, SharedSecret } from "../src/crypto";
|
||||
import { DecryptedGroupText, DecryptedGroupData } from "../src/packet.types";
|
||||
@@ -230,6 +230,18 @@ describe("Group", () => {
|
||||
it("decryptData throws on short ciphertext", () => {
|
||||
expect(() => group.decryptData(randomBytes(16), Uint8Array.of(1, 2, 3))).toThrow();
|
||||
});
|
||||
|
||||
it("hash is consistent with test vectors", () => {
|
||||
const testVectors = [
|
||||
{ name: "Public", hash: 0x11 },
|
||||
{ name: "#test", hash: 0xd9 }
|
||||
];
|
||||
|
||||
testVectors.forEach(({ name, hash }) => {
|
||||
const g = new Group(name);
|
||||
expect(`${name}:${g.hash()}`).toBe(`${name}:${hash}`);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe("Contacts", () => {
|
||||
@@ -501,4 +513,23 @@ describe("Contacts", () => {
|
||||
const res2 = contacts.decrypt(contactB.identity.hash(), localA.publicKey.key[0], hmac, ciphertext);
|
||||
expect(res2.decrypted).toEqual(msg);
|
||||
});
|
||||
|
||||
it("decryptGroupText on well known channels with test vectors", () => {
|
||||
const testVectors = [
|
||||
{
|
||||
name: "#test",
|
||||
channelHash: 0xd9,
|
||||
cipherMAC: hexToBytes("570D"),
|
||||
cipherText: hexToBytes("E397F0560B2B61396F7E236811FC70B70038E956045347D7F6B9976A46727427"),
|
||||
message: "corrauder 🏕️: Testing "
|
||||
}
|
||||
];
|
||||
|
||||
testVectors.forEach(({ name, channelHash, cipherMAC, cipherText, message }) => {
|
||||
const group = new Group(name);
|
||||
expect(group.hash()).toBe(channelHash);
|
||||
const decrypted = group.decryptText(cipherMAC, cipherText);
|
||||
expect(decrypted.message).toBe(message);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user