@ledgerhq/coin-casper
Version:
Ledger Casper integration
50 lines • 3.38 kB
JavaScript
import { KeyAlgorithm } from "casper-js-sdk";
import { casperAddressFromPubKey, isAddressValid } from "../bridge/bridgeHelpers/addresses";
describe("Casper addresses", () => {
const pubKeys = {
// valid
validSecp256k1: "0203a17118ec0e64c4e4fdbdbee0ea14d118c9aaf08c6c81bbb776cae607ceb84ecb",
validEd25519: "016470ae57b0a3ad5a679d2e0422909bfb9ded445e20cbe6b4c9806f844c94d401",
validSecp256k1Checksum: "0203A17118eC0e64c4e4FdbDbEe0eA14D118C9aAf08C6c81bbB776Cae607cEB84EcB", // Checksummed
validEd25519Checksum: "016470AE57b0a3aD5A679d2e0422909Bfb9dEd445e20cbE6B4c9806f844c94d401", // Checksummed
// invalid
invalidSecp256k1: "0203A17118ec0e64c4e4fdbdbee0ea14d118c9aaf08c6c81bbc776cae607ceb84ecb",
invalidEd25519: "016470ae57b0a3ad5a679d2e0422909bfb9ded445e20cbe6b8c9806f844c94D401",
invalidAddresstype: "036470ae57b0a3ad5a679d2e0422909bfb9ded445e20cbe6b8c9806f844c94d401", // Invalid address type
invalidLength: "12345", // Invalid length
invalidCharacter: "xyz123", // Contains non-hex characters
invalidChecksum: "016470ae57b0a3ad5a679d2e0422909bfb9ded445e20cbe6b4c9806f844c94D400", // Invalid checksum
};
test("Check if valid addresses are valid", () => {
expect(isAddressValid(pubKeys.validEd25519)).toBe(true);
expect(isAddressValid(pubKeys.validSecp256k1)).toBe(true);
expect(isAddressValid(pubKeys.validSecp256k1Checksum)).toBe(true);
expect(isAddressValid(pubKeys.validEd25519Checksum)).toBe(true);
});
test("Check if invalid addresses are invalid", () => {
expect(isAddressValid(pubKeys.invalidEd25519)).toBe(false);
expect(isAddressValid(pubKeys.invalidSecp256k1)).toBe(false);
expect(isAddressValid(pubKeys.invalidLength)).toBe(false);
expect(isAddressValid(pubKeys.invalidCharacter)).toBe(false);
expect(isAddressValid(pubKeys.invalidChecksum)).toBe(false);
});
test("Get the address from the publick key", () => {
/**
* Extracts the public key and key signature from a given Casper address.
*
* @param {string} address - The Casper address from which to extract the public key and key signature.
* @returns {{ pubkey: Buffer, keySig: CLPublicKeyTag }} An object containing the public key as a Buffer and the key signature as a CLPublicKeyTag.
*/
function casperPubKeyFromAddress(address) {
const keySig = parseInt(address.slice(0, 2), 10);
const pubkeyHex = address.slice(2);
const pubkey = Buffer.from(pubkeyHex, "hex");
return { pubkey, keySig };
}
expect(casperAddressFromPubKey(casperPubKeyFromAddress(pubKeys.validSecp256k1).pubkey, KeyAlgorithm.SECP256K1)).toBe(pubKeys.validSecp256k1);
expect(casperAddressFromPubKey(casperPubKeyFromAddress(pubKeys.validSecp256k1Checksum).pubkey, KeyAlgorithm.SECP256K1)).toBe(pubKeys.validSecp256k1Checksum.toLowerCase());
expect(casperAddressFromPubKey(casperPubKeyFromAddress(pubKeys.validEd25519).pubkey, KeyAlgorithm.ED25519)).toBe(pubKeys.validEd25519);
expect(casperAddressFromPubKey(casperPubKeyFromAddress(pubKeys.validEd25519Checksum).pubkey, KeyAlgorithm.ED25519)).toBe(pubKeys.validEd25519Checksum.toLowerCase());
});
});
//# sourceMappingURL=utils.unit.test.js.map