Skip to content

Commit

Permalink
compute public address
Browse files Browse the repository at this point in the history
  • Loading branch information
ftheirs committed Mar 13, 2024
1 parent e818b7e commit 4890bfe
Show file tree
Hide file tree
Showing 4 changed files with 84 additions and 16 deletions.
16 changes: 16 additions & 0 deletions app/rust/src/constants.rs
Original file line number Diff line number Diff line change
Expand Up @@ -47,3 +47,19 @@ pub const PROOF_GENERATION_KEY_GENERATOR: AffineNielsPoint = AffinePoint::from_r
]),
)
.to_niels();

pub const PUBLIC_KEY_GENERATOR: AffineNielsPoint = AffinePoint::from_raw_unchecked(
Fq::from_raw([
0x3edc_c85f_4d1a_44cd,
0x77ff_8c90_a9a0_d8f4,
0x0daf_03b5_47e2_022b,
0x6dad_65e6_2328_d37a,
]),
Fq::from_raw([
0x5095_1f1f_eff0_8278,
0xf0b7_03d5_3a3e_dd4e,
0xca01_f580_9c00_eee2,
0x6996_932c_ece1_f4bb,
]),
)
.to_niels();
2 changes: 2 additions & 0 deletions app/rust/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ pub enum ParserError {
pub enum ConstantKey {
SpendingKeyGenerator,
ProofGenerationKeyGenerator,
PublicKeyGenerator,
}

#[no_mangle]
Expand All @@ -53,6 +54,7 @@ pub extern "C" fn scalar_multiplication(input: &[u8; 32], key: ConstantKey, outp
let key_point = match key {
ConstantKey::SpendingKeyGenerator => constants::SPENDING_KEY_GENERATOR,
ConstantKey::ProofGenerationKeyGenerator => constants::PROOF_GENERATION_KEY_GENERATOR,
ConstantKey::PublicKeyGenerator => constants::PUBLIC_KEY_GENERATOR,
};

let extended_point = key_point.multiply_bits(input);
Expand Down
3 changes: 3 additions & 0 deletions app/src/keys_def.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ typedef struct {
typedef enum {
SpendingKeyGenerator,
ProofGenerationKeyGenerator,
PublicKeyGenerator,
InvalidKey,
} constant_key_t;

Expand All @@ -45,6 +46,8 @@ typedef uint8_t nk_t[KEY_LENGTH];
typedef uint8_t ivk_t[KEY_LENGTH];
typedef uint8_t ovk_t[KEY_LENGTH];

typedef uint8_t public_address_t[KEY_LENGTH];

typedef struct {
bytes_t spendingKey;
bytes_t ask;
Expand Down
79 changes: 63 additions & 16 deletions tests/keys.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ struct IronfishKeys {
string viewKey;
string incomingViewingKey;
string outgoingViewingKey;
string publicAddress;
};

string toHexString(const uint8_t* data, size_t length) {
Expand All @@ -54,7 +55,8 @@ vector<IronfishKeys> testvectors {
"be0383711ddcb0beaa8b7ef72fc20f1798f813e3008bb9d704a5da590d967ed7",
"94c0bf0aff4653756184e7564d6bace42ba28ded17cb6969bd3db2b5bb813183be0383711ddcb0beaa8b7ef72fc20f1798f813e3008bb9d704a5da590d967ed7",
"03171a55bcdd54018c224a261cdc99badce181a60ba4d4f6be401dc9841e07bb",
"efd8642e69a4bf55196ed4d4528fcf50a842319284332f708fc1254c8358ae1e"
"efd8642e69a4bf55196ed4d4528fcf50a842319284332f708fc1254c8358ae1e",
"4f766c63bf2a18f2434add5dfda393886c80b1fe4ef1d968c7c87dc0484b5c9d"
},
{
"0000000000000000000000000000000000000000000000000000000000000001",
Expand All @@ -64,7 +66,8 @@ vector<IronfishKeys> testvectors {
"71a7ec7feae16363b6daff256f8033778fdff4404af51f4702f6bb3723441fc3",
"46095954bc6e220bceb8e9dd92ad551c241df5fc78575e09b457a3b5c7ccfa5971a7ec7feae16363b6daff256f8033778fdff4404af51f4702f6bb3723441fc3",
"01e8b953ebef20c9df67ac99075f7fff3bc2f1ca93822299d6f6247617e2efd4",
"1824f96c702f47b199457273994c35d7e9343bc1a8aff9b4037fdd06d0b3a660"
"1824f96c702f47b199457273994c35d7e9343bc1a8aff9b4037fdd06d0b3a660",
"796d7ecc523ae042265314f70641daa158576f537fbb408e8ce7f17e0900fc99"
},
{
"71af0f431ad2b93fdc9bbe907b03314f607c09461c421a2873d4807f8841bbc7",
Expand All @@ -74,7 +77,8 @@ vector<IronfishKeys> testvectors {
"f68210181abe9d2d1178773eeda7d869f619db56b6ed928b79474b532158d267",
"283e16fc078a556b2be63e7f4661474cbffa5397ececee7376e144abb5aff71ef68210181abe9d2d1178773eeda7d869f619db56b6ed928b79474b532158d267",
"035c7bcf0c6f8ffd2c5afd44fda50eda233f0b2b9747154d66fe2a827a35a78d",
"86be13371588a5e3803dc57678578aba2877f4b0212c994727197df2307d9691"
"86be13371588a5e3803dc57678578aba2877f4b0212c994727197df2307d9691",
"f308f7b7c1dcea1d5c9c2ae9085afcbc476e2916ce58c3ed142336884919959a"
},
{
"36dea1c88f60c02b01ab6a0494e16e6d939b44a2a3dd75e9e0360399dc8650f4",
Expand All @@ -84,7 +88,8 @@ vector<IronfishKeys> testvectors {
"90a7eb4c20f5993c791de70d3da81501da041744c27a5ad135b3ea1618870330",
"c8117bd8d872097494bff6ce631e7d84bc5ab4113d2a04eeb24f1717fad833e190a7eb4c20f5993c791de70d3da81501da041744c27a5ad135b3ea1618870330",
"07d77856b0a3d2a7b6fdba054beeb199d7ddd9dd66ad3e6287f00b405b1535ec",
"25f0fa2b575874eb93644e81c44c2631efe5a1ab5d1ab7258060847670367068"
"25f0fa2b575874eb93644e81c44c2631efe5a1ab5d1ab7258060847670367068",
"3f88c1b9f3c4338d9445ade292f2838c2aa2de712b62250ed1ae172090c6f037"
},
{
"b4334a7fb7f3795906688fef68dbbaf714739691fca288f722e54136ffa0d327",
Expand All @@ -94,7 +99,8 @@ vector<IronfishKeys> testvectors {
"011abad7ce51e5163e5d46cccfa323d458ffb1c6fafb3bea42cb96df70378870",
"d2ee54d95d8410fe79968df4add0bbb46c7db66c256957b965d8f4295acd1cf1011abad7ce51e5163e5d46cccfa323d458ffb1c6fafb3bea42cb96df70378870",
"04f81f076f6d0d3509171033e837e966c48dbdbc85063ffc5ab4053fc7d00839",
"323d72bcfa2f7b2702744c3253753d0b749849cf3aa4f179e65c7b7617f4b057"
"323d72bcfa2f7b2702744c3253753d0b749849cf3aa4f179e65c7b7617f4b057",
"4d30630129be18acf77b5297d5bfd7ac2f49009d50676d9cf31e1175e35203b1"
},
{
"994f855e8e49063b1c58e348bdf80f513cb2ea24d4d3b238f77484ede3c2d92a",
Expand All @@ -104,7 +110,8 @@ vector<IronfishKeys> testvectors {
"b430f67ce7fbd4d3a1126b7e339db35fe6060bbe98cbda062118a9fc166213a1",
"14f9260c82a77d7f171dfd97df572b4103cf91d89c15b55450144c99fb5d9d3eb430f67ce7fbd4d3a1126b7e339db35fe6060bbe98cbda062118a9fc166213a1",
"047228f8313b24db2ad37a552cc15279dd515d156ac39f57da1a4d4dd40a4a61",
"c1068c4c44619ac9fa1294475de5f42d1f9257984c7792fdda241d7b127be8c8"
"c1068c4c44619ac9fa1294475de5f42d1f9257984c7792fdda241d7b127be8c8",
"3d8288b5df34654ba97c23e1914a1a2392d4798be05aa420895dddd2eecbd953"
},
{
"b75e9a8a5f24d3299a196cb4b4124a211dd4f253a9d227290b0b3f72313a5532",
Expand All @@ -114,7 +121,8 @@ vector<IronfishKeys> testvectors {
"98f87650c039a601e875ca924b8fd48a17b443da3ce0536bef019bdc20db2c1b",
"e616286d0f2729f3fa26a5f4d89fa03214b4310c7f7a40b9ed703361e6b40b3e98f87650c039a601e875ca924b8fd48a17b443da3ce0536bef019bdc20db2c1b",
"0163e0f0202685ec96529cf5c5edf69327a292f82c77ef3204814c6e939c9b7e",
"784ffe8b8cd62e7be3e2b0a34e38ec63cd6b9739a2573c312daef3d7bb3ae262"
"784ffe8b8cd62e7be3e2b0a34e38ec63cd6b9739a2573c312daef3d7bb3ae262",
"fb721350fa746a9dab381c534eeeeb9edf49f07dd5fb397fee46313c2c8c5c40"
},
{
"683f1521a8c6f76d4835f87ecee51cf899ec71555102e595e5bc2c8ed6c1ff82",
Expand All @@ -124,7 +132,8 @@ vector<IronfishKeys> testvectors {
"cfd751257c062c86b1e4461ed2370ec98dd4f2e7e22331ce315f6ee1c42544c1",
"c9305843719d27ca9a35bd165651b210a087fe0a6c3e906dbb7e3018ec016e39cfd751257c062c86b1e4461ed2370ec98dd4f2e7e22331ce315f6ee1c42544c1",
"0428f0f7d4a43973d7535c47adbd16752fd54105ecf1e6e346a1ac029c4ca85b",
"b4c1fa6741f7250188c42947a9012c0ca7f863695a93b1d71fb22dc063143c77"
"b4c1fa6741f7250188c42947a9012c0ca7f863695a93b1d71fb22dc063143c77",
"cbcb4371bc45865bcdd40ab17f0bd7b015dc0a5328850c203cbf669fed38cb90"
},
{
"c81b034031656bfceb51300a0088b012eafe1700b22f115d747e23d5e76f66dd",
Expand All @@ -134,7 +143,8 @@ vector<IronfishKeys> testvectors {
"aa46f2468269142649f58c42a272cbbdf3791c2dc0242c715ccd12acda2ab361",
"fee8c30df362ec50f8169441c95b860a00c8b9d57f020a9946c54ab47484c026aa46f2468269142649f58c42a272cbbdf3791c2dc0242c715ccd12acda2ab361",
"04c6e8fc3a669acacc5b0b078125cca65ca63424c06b3ac36565a65280958c3b",
"c0cf9084ad644b5005fac345a40b38392759194bd7488f434af8ecbac9b6224f"
"c0cf9084ad644b5005fac345a40b38392759194bd7488f434af8ecbac9b6224f",
"752b5325119879d1427d8df427e28206a59819acc69e4003db656812bda6cc4e"
},
{
"9e0de76b502d8fea848086e90cb776832516e68fa7715758410a11dac33279a5",
Expand All @@ -144,7 +154,8 @@ vector<IronfishKeys> testvectors {
"3fa04bab93e6a17eb3b98b0371ac4c46194b1ab3b0f5472ae76e830e51b068c2",
"f83d80b645d4fda5c5e5b598ce855f96abc8fb7c385a406f8c2d32b1cc4b089b3fa04bab93e6a17eb3b98b0371ac4c46194b1ab3b0f5472ae76e830e51b068c2",
"06009065dc3b4eb05b3c238d20e2e6d897a2bd13e0359846c80fc0814b22667e",
"fa46321b8da3da8282df1f8cdb980be5c9606e55200c110c8b500b330f84ecfc"
"fa46321b8da3da8282df1f8cdb980be5c9606e55200c110c8b500b330f84ecfc",
"a31441f468d12e4ced4677f7e1b2b89e6d6efe4dec940f13d8d4880034282e51"
},
{
"6171008a41c077d30853dbd4a365d44f5df46e3d84974acf64aec45d3dfa8518",
Expand All @@ -154,7 +165,8 @@ vector<IronfishKeys> testvectors {
"a3f9d913b854a7f8bfea0575b5447dad7caeb5384bcf127178ba2bfffe99cfd0",
"8c3337ccc68bf985094ff4099f40d136662e840adcad8b3e4398ac1c2e3cc30ba3f9d913b854a7f8bfea0575b5447dad7caeb5384bcf127178ba2bfffe99cfd0",
"0688006785e98dbc7754eff5e8077abbda8e3c731f91ad1a14d69fc5d2627783",
"ff403d8ab3394b14a1d1dc35c07797755e27a39ad140ab32d046fc8f4636c74c"
"ff403d8ab3394b14a1d1dc35c07797755e27a39ad140ab32d046fc8f4636c74c",
"649b86129fd4ca89cff804a98f63cc023200f9aeb486b9cd60458b456ec96eac"
},
{
"eb18bb634960b813b7d876fb30fc13fb0786d6a43d4b66622c56665d2fbdaf76",
Expand All @@ -164,7 +176,8 @@ vector<IronfishKeys> testvectors {
"6356136ea5c85f2c082c42e5db40de5f788eb5cf94992cc8d1f2391d1a646596",
"c1a69c99d0b31e6e1f8084fd19985144a66fa7985614dfc524d2f8d2da293a3a6356136ea5c85f2c082c42e5db40de5f788eb5cf94992cc8d1f2391d1a646596",
"05ad202783a7ecbb734eb405831a2a2fe32d6916135451a4e81a825cf6152666",
"12e5048f89d52d5ed178d5da49e4e7fe6d597bffc855b56c72334f04a462c4d1"
"12e5048f89d52d5ed178d5da49e4e7fe6d597bffc855b56c72334f04a462c4d1",
"566399b7710d75a20246d7e36fa3b4f4d3b0d7b7ced586be9f31c78fb1688595"
},
{
"6ed609b68227ccdb65f13f4119301fd03f392276aa50e6c5fbc1dd24eb448a6e",
Expand All @@ -174,7 +187,8 @@ vector<IronfishKeys> testvectors {
"431cee7e49cf5097ea1c8c56b2e54fa9cdbb63310fac0a2b48a55842ab335e8e",
"57fe8e536aa4d64b2af0186be557aedabc88bc68471d1f92346bef86af459e10431cee7e49cf5097ea1c8c56b2e54fa9cdbb63310fac0a2b48a55842ab335e8e",
"033013c1407fecb398c16f144e4bba03efd5cbbf8ceead92f05b57cdd1a6b44c",
"7ddee0eda90360658301542af1dbb08566db8e4bf0e4d3a8679fa01cf6361799"
"7ddee0eda90360658301542af1dbb08566db8e4bf0e4d3a8679fa01cf6361799",
"8ddca1d54e02bb2d13a3f0a485820a20908427c2067c78490a3072afb6b4efa9"
},
{
"7b94d9ceffcf2d7a764a16146ce7ce90cd710f717cd9812b8bc85555364c06f3",
Expand All @@ -184,7 +198,8 @@ vector<IronfishKeys> testvectors {
"36b6122e6dbe1d04f6cfa16edd03f25e54397cfa02f1d2fc3c529fd3888980e2",
"aeeeb23556eba42bf22632c7ba5f9871f9b34196f6c87091fb82111668edfd4136b6122e6dbe1d04f6cfa16edd03f25e54397cfa02f1d2fc3c529fd3888980e2",
"03a3e8d415ef18aca5f4b16e2d2b89ec7ec1439b062d217896625aeb0bbbb8a4",
"88fcbdd13b18a27f1f0c0507384e1716d5004ef0edcbbe7e5fce63c3ba29a8c4"
"88fcbdd13b18a27f1f0c0507384e1716d5004ef0edcbbe7e5fce63c3ba29a8c4",
"cfbe977de06351c864bd35b942e1715d0f9efa78b2e3c79d28e0f5d7f1b5b03c"
},
{
"4c7da515de11409b3101665a6c91fbccfc9f4ff77076b8dd71bcfef34533e9be",
Expand All @@ -194,7 +209,8 @@ vector<IronfishKeys> testvectors {
"531bf079f72b51eeeec7a8ba7e17687fe1bdf2dd437abeed7d80d23675dcc89b",
"49a722eee2330bd3ec9f00ce2d76f51ede01db1f2584f02f941eff01ca3732af531bf079f72b51eeeec7a8ba7e17687fe1bdf2dd437abeed7d80d23675dcc89b",
"01b0c1949caefe5b1ae6619165c2c8b844cc48b60fad8bbc225301f1a5482236",
"1c7b2453eb96c94a07337a4d6e233fa4d8bdab2f0129d5ebdbbbb6ff92fa5988"
"1c7b2453eb96c94a07337a4d6e233fa4d8bdab2f0129d5ebdbbbb6ff92fa5988",
"fe7f51c8d744d29323862d5c80e58575d539995413f01d99e35ceccf1464e884"
},
{
"bb20c0b30bfd58582994c99d5096928574786600de6e5068d6578793f810778c",
Expand All @@ -204,10 +220,34 @@ vector<IronfishKeys> testvectors {
"276a2d02fc6dd50fb4e7e471fd46e2c4c0545d48fd34dcdaf8b1361ea0f73618",
"0e2f36dc1d56cc8000175f330606849ad725aa8dfa775e618d57e76992dea3ef276a2d02fc6dd50fb4e7e471fd46e2c4c0545d48fd34dcdaf8b1361ea0f73618",
"072f1e5b04f3af53d19728dd147efcbf3693e5471798d44a0d304c546aa653e3",
"87f244bce4971951a25a9cfcf5b17300314f737c274ff49ec3c7c1795759538b"
"87f244bce4971951a25a9cfcf5b17300314f737c274ff49ec3c7c1795759538b",
"6a8e8ccd89e684f41656985c642316a7457865c03a916cdb5bbe84e0174f0d4b"
},
{
"9c9a9edaeb2d4c671f797d80f253a0b274bdd635b1e09d4223d05c84bb69f42c",
"09e1d308114cacc0fbf65167b4654196a92d51622411e9bb63103c188d6948e7",
"0d72a3f8abfa526afd1d7a0f529ccfe92439fe784a331e9ae5ba21beebdc2d7b",
"07313b1fe45c897f9a3cb09b0bfde097cbec0ea2912f14e0229cd4230fb6e9be",
"2421e49f1195516b6366fee8a6f0e617b24284c3942bdfe121755c8ca31154cd",
"07313b1fe45c897f9a3cb09b0bfde097cbec0ea2912f14e0229cd4230fb6e9be2421e49f1195516b6366fee8a6f0e617b24284c3942bdfe121755c8ca31154cd",
"050305d983a25a349b8c6a98a37573eba02bc02db5d606d398f5a4698073e3e4",
"a6e0bd607f94019525a75c9f3b87b40e0844757cd782fa8abebadbffe378c133",
"911f0a4dc6db375ab01357959581f626a3d8d0681b764c5ee960f9dd542719c3"
},
{
"5ecd495e8d1a3aa3fe9a0f038c2b984d361df073202d2d9e48d2a592960adf8c",
"0bd9d324949da2664db619d7707a4874fc8b7687d4be046e7d776fa791792c11",
"04b597a4a3f6e60eb59ecd09828224ab9a849c1a0d0229e4cbd5cfed6db2979b",
"8f2111bea95fb2056fd78b9b035c1e1c776f01aea3777a0ca4c28f0f87c98758",
"91e874444a8c49b5b46ba831db44f783c6d172b81df00ee05bf47bb9baaecc81",
"8f2111bea95fb2056fd78b9b035c1e1c776f01aea3777a0ca4c28f0f87c9875891e874444a8c49b5b46ba831db44f783c6d172b81df00ee05bf47bb9baaecc81",
"064f88f47275e77c362390ef04b1bd657e31fe1a0bdce74b84e494e6276bb625",
"cc691cbcb17a713f67eb2977d735c5f34e28ca885d10e78a93106198f333fd85",
"a944ec349e29edde71ce202384d3b2b65cb7e86f9ec43d7757097e8597f47ced"
},
};


TEST(Keys, SpendingAuthorizationKey) {
for (const auto& testcase : testvectors) {
spending_key_t spendingKey = {0};
Expand All @@ -221,6 +261,8 @@ TEST(Keys, SpendingAuthorizationKey) {
ivk_t incomingViewingKey = {0};
ovk_t outgoingViewingKey = {0};

public_address_t publicAddress = {0};

// Read spendingKey from testvectors
parseHexString(spendingKey, sizeof(spendingKey), testcase.spendingKey.c_str());

Expand Down Expand Up @@ -253,5 +295,10 @@ TEST(Keys, SpendingAuthorizationKey) {
ASSERT_EQ(convertKey(spendingKey, 0x02, outgoingViewingKey, false), parser_ok);
const string ovk = toHexString(outgoingViewingKey, 32);
EXPECT_EQ(ovk, testcase.outgoingViewingKey);


ASSERT_EQ(generate_key(incomingViewingKey, PublicKeyGenerator, publicAddress), parser_ok);
const string address = toHexString(publicAddress, 32);
EXPECT_EQ(address, testcase.publicAddress);
}
}

0 comments on commit 4890bfe

Please sign in to comment.