Skip to content
This repository was archived by the owner on Dec 17, 2024. It is now read-only.

Commit c00571c

Browse files
committed
ProgPoW spec v0.9.2
* unique sources for random math by ifdefelse - ifdefelse/ProgPOW@824cd79 * test cases from : chfast/ethash#116 by chfast
1 parent 9094995 commit c00571c

File tree

2 files changed

+47
-43
lines changed

2 files changed

+47
-43
lines changed

src/libethash/progpow-internal.c

+10-6
Original file line numberDiff line numberDiff line change
@@ -278,8 +278,9 @@ void merge(uint32_t *a, uint32_t b, uint32_t r)
278278
{
279279
case 0: *a = (*a * 33) + b; break;
280280
case 1: *a = (*a ^ b) * 33; break;
281-
case 2: *a = ROTL32(*a, ((r >> 16) % 32)) ^ b; break;
282-
case 3: *a = ROTR32(*a, ((r >> 16) % 32)) ^ b; break;
281+
// prevent rotate by 0 which is a NOP
282+
case 2: *a = ROTL32(*a, ((r >> 16) % 31)+1) ^ b; break;
283+
case 3: *a = ROTR32(*a, ((r >> 16) % 31)+1) ^ b; break;
283284
}
284285
}
285286

@@ -370,10 +371,13 @@ void progPowLoop(
370371
if (i < PROGPOW_CNT_MATH)
371372
{
372373
// Random Math
373-
uint32_t src1 = kiss99(&prog_rnd) % PROGPOW_REGS;
374-
uint32_t src2 = kiss99(&prog_rnd) % PROGPOW_REGS;
375-
uint32_t sel1 = kiss99(&prog_rnd);
376-
uint32_t dst = mix_seq_dst[(mix_seq_dst_cnt++)%PROGPOW_REGS];
374+
// Generate 2 unique sources
375+
int src_rnd = kiss99(&prog_rnd) % (PROGPOW_REGS * (PROGPOW_REGS-1));
376+
int src1 = src_rnd % PROGPOW_REGS; // 0 <= src1 < PROGPOW_REGS
377+
int src2 = src_rnd / PROGPOW_REGS; // 0 <= src2 < PROGPOW_REGS - 1
378+
if (src2 >= src1) ++src2; // src2 is now any reg other than src1
379+
int sel1 = kiss99(&prog_rnd);
380+
int dst = mix_seq_dst[(mix_seq_dst_cnt++)%PROGPOW_REGS];
377381
int sel2 = kiss99(&prog_rnd);
378382
for (int l = 0; l < PROGPOW_LANES; l++)
379383
{

test/c/test_progpow.cpp

+37-37
Original file line numberDiff line numberDiff line change
@@ -292,8 +292,8 @@ BOOST_AUTO_TEST_CASE(test_progpow_light_client_checks) {
292292
{
293293
uint64_t nonce = 0x0;
294294
const std::string
295-
exphead = "7ea12cfc33f64616ab7dbbddf3362ee7dd3e1e20d60d860a85c51d6559c912c4",
296-
expmix = "a09ffaa0f2b5d47a98c2d4fbc0e90936710dd2b2a220fce04e8d55a6c6a093d6";
295+
exphead = "63155f732f2bf556967f906155b510c917e48e99685ead76ea83f4eca03ab12b",
296+
expmix = "faeb1be51075b03a4ff44b335067951ead07a3b078539ace76fd56fc410557a3";
297297
const std::string hash_string = blockhashToHexString(&hash);
298298

299299
light_out = progpow_light_compute_internal(light, full_size, hash, nonce, 0);
@@ -324,41 +324,41 @@ struct progpow_hash_test_case
324324

325325
progpow_hash_test_case progpow_hash_test_cases[] = {
326326
{0, "0000000000000000000000000000000000000000000000000000000000000000", "0000000000000000",
327-
"a09ffaa0f2b5d47a98c2d4fbc0e90936710dd2b2a220fce04e8d55a6c6a093d6",
328-
"7ea12cfc33f64616ab7dbbddf3362ee7dd3e1e20d60d860a85c51d6559c912c4"},
329-
{49, "7ea12cfc33f64616ab7dbbddf3362ee7dd3e1e20d60d860a85c51d6559c912c4", "0000000006ff2c47",
330-
"4e453d59426905122ef3d176a6fe660f29b53fdf2f82b5af2753dbaaebebf609",
331-
"f0167e445f8510504ce024856ec614a1a4461610bf58caa32df731ee4c315641"},
332-
{50, "f0167e445f8510504ce024856ec614a1a4461610bf58caa32df731ee4c315641", "00000000076e482e",
333-
"4e5291ae6132f64bff00dd05861721b0da701f789e7e65d096b9affa24bffd7e",
334-
"fdc3bce3e0d0b1a5af43f84acc7d5421d423ec5d3b7e41698178b24c459a6cbe"},
335-
{99, "fdc3bce3e0d0b1a5af43f84acc7d5421d423ec5d3b7e41698178b24c459a6cbe", "000000003917afab",
336-
"d35c7e4012204d1db243dc7cf0bf2075f897e362e6ad2b36c02e325cfc6f8dbb",
337-
"5b014c2c706476b56cf3b9c37ed999d30b20c0fb038d27cc94c991dacef62033"},
338-
{29950, "5b014c2c706476b56cf3b9c37ed999d30b20c0fb038d27cc94c991dacef62033", "005d409dbc23a62a",
339-
"0c64704dedb0677149b47fabc6726e9ff0585233692c8562e485a330ce90c0e9",
340-
"a01b432e82cacaae095ef402b575f1764c45247ba9cf17e99d5432cf00829ee2"},
341-
{29999, "a01b432e82cacaae095ef402b575f1764c45247ba9cf17e99d5432cf00829ee2", "005db5fa4c2a3d03",
342-
"3d95cad9cf4513bb31a4766d3a2f488bbff1baa57da8b2252e246ac91594c769",
343-
"0fc3e6e1392033619f614ec3236d8fbfcefe94d9fdc341a4d7daeffa0b8ad35d"},
344-
{30000, "0fc3e6e1392033619f614ec3236d8fbfcefe94d9fdc341a4d7daeffa0b8ad35d", "005db8607994ff30",
345-
"7ee9d0c571ed35073404454eebe9a73a6d677a32446cf6c427ee63a63bd512da",
346-
"b94de4495555dc2ab4ad8725cabd395178813c8c434134b2f25062b5f72dafb9"},
347-
{30049, "b94de4495555dc2ab4ad8725cabd395178813c8c434134b2f25062b5f72dafb9", "005e2e215a8ca2e7",
348-
"7a16d37208288152237afdc13724d26fe7aadf3cd354a42c587a4192761ef18e",
349-
"e152d3770855cea35a94ee53ab321f93ee3a426513c6ab1ec5e8d81ea9a661d7"},
350-
{30050, "e152d3770855cea35a94ee53ab321f93ee3a426513c6ab1ec5e8d81ea9a661d7", "005e30899481055e",
351-
"005df2434f2a5265c2ed0d13dd12308795620202d2784a40967461c383f859a3",
352-
"55d013e85571e46e914a7529909fbfc686965a92c7baaef2e89e5b5f533a6dc9"},
353-
{30099, "55d013e85571e46e914a7529909fbfc686965a92c7baaef2e89e5b5f533a6dc9", "005ea6aef136f88b",
354-
"d8b1046cc2c8273a06e6f7ce19b7b4aefb7fb43b141721663252e2872b654548",
355-
"8ba5629b6affa0514c2f4951c3a63761465ef0e5be7cbb8f9ce230a5564faccb"},
356-
{59950, "8ba5629b6affa0514c2f4951c3a63761465ef0e5be7cbb8f9ce230a5564faccb", "02ebe0503bd7b1da",
357-
"b3131de1a747449e5328f50742447d5c6da637a5d141a117caf9a986bd524de9",
358-
"10af438404304f4a7de0b07e7d08bfc80b521860237e3e2d47f77630eef5f742"},
359-
{59999, "10af438404304f4a7de0b07e7d08bfc80b521860237e3e2d47f77630eef5f742", "02edb6275bd221e3",
360-
"87f7d6c73fb86a5ed00d2ad7fff7b2a8a9796c3138b31f2473b89065946cb0ed",
361-
"3863e5c767a6b0d28f5cf1d261e35c52fe03f7fd690d50c10596ec73d7595887"},
327+
"faeb1be51075b03a4ff44b335067951ead07a3b078539ace76fd56fc410557a3",
328+
"63155f732f2bf556967f906155b510c917e48e99685ead76ea83f4eca03ab12b"},
329+
{49, "63155f732f2bf556967f906155b510c917e48e99685ead76ea83f4eca03ab12b", "0000000006ff2c47",
330+
"c789c1180f890ec555ff42042913465481e8e6bc512cb981e1c1108dc3f2227d",
331+
"9e7248f20914913a73d80a70174c331b1d34f260535ac3631d770e656b5dd922"},
332+
{50, "9e7248f20914913a73d80a70174c331b1d34f260535ac3631d770e656b5dd922", "00000000076e482e",
333+
"c7340542c2a06b3a7dc7222635f7cd402abf8b528ae971ddac6bbe2b0c7cb518",
334+
"de37e1824c86d35d154cf65a88de6d9286aec4f7f10c3fc9f0fa1bcc2687188d"},
335+
{99, "de37e1824c86d35d154cf65a88de6d9286aec4f7f10c3fc9f0fa1bcc2687188d", "000000003917afab",
336+
"f5e60b2c5bfddd136167a30cbc3c8dbdbd15a512257dee7964e0bc6daa9f8ba7",
337+
"ac7b55e801511b77e11d52e9599206101550144525b5679f2dab19386f23dcce"},
338+
{29950, "ac7b55e801511b77e11d52e9599206101550144525b5679f2dab19386f23dcce", "005d409dbc23a62a",
339+
"07393d15805eb08ee6fc6cb3ad4ad1010533bd0ff92d6006850246829f18fd6e",
340+
"e43d7e0bdc8a4a3f6e291a5ed790b9fa1a0948a2b9e33c844888690847de19f5"},
341+
{29999, "e43d7e0bdc8a4a3f6e291a5ed790b9fa1a0948a2b9e33c844888690847de19f5", "005db5fa4c2a3d03",
342+
"7551bddf977491da2f6cfc1679299544b23483e8f8ee0931c4c16a796558a0b8",
343+
"d34519f72c97cae8892c277776259db3320820cb5279a299d0ef1e155e5c6454"},
344+
{30000, "d34519f72c97cae8892c277776259db3320820cb5279a299d0ef1e155e5c6454", "005db8607994ff30",
345+
"f1c2c7c32266af9635462e6ce1c98ebe4e7e3ecab7a38aaabfbf2e731e0fbff4",
346+
"8b6ce5da0b06d18db7bd8492d9e5717f8b53e7e098d9fef7886d58a6e913ef64"},
347+
{30049, "8b6ce5da0b06d18db7bd8492d9e5717f8b53e7e098d9fef7886d58a6e913ef64", "005e2e215a8ca2e7",
348+
"57fe6a9fbf920b4e91deeb66cb0efa971e08229d1a160330e08da54af0689add",
349+
"c2c46173481b9ced61123d2e293b42ede5a1b323210eb2a684df0874ffe09047"},
350+
{30050, "c2c46173481b9ced61123d2e293b42ede5a1b323210eb2a684df0874ffe09047", "005e30899481055e",
351+
"ba30c61cc5a2c74a5ecaf505965140a08f24a296d687e78720f0b48baf712f2d",
352+
"ea42197eb2ba79c63cb5e655b8b1f612c5f08aae1a49ff236795a3516d87bc71"},
353+
{30099, "ea42197eb2ba79c63cb5e655b8b1f612c5f08aae1a49ff236795a3516d87bc71", "005ea6aef136f88b",
354+
"cfd5e46048cd133d40f261fe8704e51d3f497fc14203ac6a9ef6a0841780b1cd",
355+
"49e15ba4bf501ce8fe8876101c808e24c69a859be15de554bf85dbc095491bd6"},
356+
{59950, "49e15ba4bf501ce8fe8876101c808e24c69a859be15de554bf85dbc095491bd6", "02ebe0503bd7b1da",
357+
"21511fbaa31fb9f5fc4998a754e97b3083a866f4de86fa7500a633346f56d773",
358+
"f5c50ba5c0d6210ddb16250ec3efda178de857b2b1703d8d5403bd0f848e19cf"},
359+
{59999, "f5c50ba5c0d6210ddb16250ec3efda178de857b2b1703d8d5403bd0f848e19cf", "02edb6275bd221e3",
360+
"653eda37d337e39d311d22be9bbd3458d3abee4e643bee4a7280a6d08106ef98",
361+
"341562d10d4afb706ec2c8d5537cb0c810de02b4ebb0a0eea5ae335af6fb2e88"},
362362
};
363363

364364
BOOST_AUTO_TEST_CASE(test_progpow_test_cases) {

0 commit comments

Comments
 (0)