Compare commits

...

36 Commits

Author SHA1 Message Date
Adam Uhlíř
7eaf79fefe Merge commit 'b517b69' into multihash-poseidon2 2025-09-11 15:20:45 +02:00
Dmitriy Ryajov
c08d807349 Merge remote-tracking branch 'origin' into multihash-poseidon2 2025-03-19 19:34:42 -06:00
Dmitriy Ryajov
bde92606ac add blscurve to requires, for completeness 2025-03-19 19:34:33 -06:00
vladopajic
e7f81867d4 chore(certificate): cosmetics (#1293) 2025-03-19 19:34:33 -06:00
vladopajic
ee83da271a feat: X.509 certificate validation (#1292) 2025-03-19 19:34:33 -06:00
richΛrd
a7374e827a chore: use token per repo in autobump task (#1288) 2025-03-19 19:34:33 -06:00
Dmitriy Ryajov
b6d36fe646 skip nimbledeps from stylechecks 2025-03-19 19:32:03 -06:00
Dmitriy Ryajov
e9a3c6c58e don't export bls public exports (causes conflicts and unnecessary) 2025-03-19 19:31:48 -06:00
munna0908
7960a1d9d6 replace nimcrypto sha256 with bls_sha256 2025-03-17 20:19:56 +05:30
munna0908
60a37c5eb8 Merge branch 'master' into multihash-poseidon2 2025-03-17 19:56:29 +05:30
Dmitriy Ryajov
8bb6ff2d00 Update tests/testmultihash.nim
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-03-13 09:48:24 -07:00
Dmitriy Ryajov
588b7d2682 Update tests/testmultihash.nim
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-03-13 09:48:02 -07:00
Dmitriy Ryajov
285c208143 Update tests/testcid.nim
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-03-13 09:47:55 -07:00
Dmitriy Ryajov
925bddb337 Update tests/testcid.nim
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-03-13 09:47:46 -07:00
Dmitriy Ryajov
5623a4434a Update tests/testcid.nim
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-03-13 09:47:37 -07:00
Dmitriy Ryajov
89d391afe8 Update libp2p/multihash.nim
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-03-13 09:47:30 -07:00
Dmitriy Ryajov
e31ce69cd4 Update libp2p/multicodec.nim
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-03-13 09:47:21 -07:00
Dmitriy Ryajov
3e3b5acbd7 Update libp2p/multibase.nim
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-03-13 09:47:12 -07:00
Dmitriy Ryajov
4c1492baa0 Update libp2p/cid.nim
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-03-13 09:47:00 -07:00
Dmitriy Ryajov
1be84befab Merge branch 'master' into multihash-poseidon2 2025-03-13 10:45:53 -06:00
benbierens
036e110a60 Attempt to fix dependency resolution on windows CI 2024-08-09 09:54:05 +02:00
benbierens
08bd710900 pulls in updated nim-poseidon2 and constantine. 2024-08-08 15:05:32 +02:00
benbierens
2b8db4f9d4 Restores access to hash list from testcid 2024-08-08 11:13:03 +02:00
benbierens
8df12becc3 Attempt to fix missing multihash list 2024-08-08 10:37:46 +02:00
benbierens
ea6680f3cf Restore: RustTestVectors in testmultihash 2024-08-08 10:26:59 +02:00
benbierens
87728e2d9c Merge branch 'master' into multihash-poseidon2 2024-08-08 10:09:00 +02:00
benbierens
1edb317542 Merge branch 'master' into multihash-poseidon2
# Conflicts:
#	libp2p.nimble
#	libp2p/cid.nim
#	libp2p/multicodec.nim
#	libp2p/multihash.nim
#	tests/testmultihash.nim
2024-08-06 11:24:49 +02:00
Dmitriy Ryajov
b239791c56 adding more codecs 2023-12-22 17:18:22 -06:00
Dmitriy Ryajov
967b458b2e adding codex-root to cid 2023-12-22 17:18:22 -06:00
Mark Spanbroek
a4780cf3e3 Update to latest version of constantine
Fixes assembly incompatibility with secp256k1:
https://github.com/mratsim/constantine/pull/309
2023-12-22 17:18:22 -06:00
Dmitriy Ryajov
36457c9ff4 update deps 2023-12-22 17:18:22 -06:00
Dmitriy Ryajov
1e3b439799 correct multicodec spelling 2023-12-22 17:18:22 -06:00
Dmitriy Ryajov
dc7550638d adding codex multicodecs and hashes 2023-12-22 17:18:22 -06:00
Dmitriy Ryajov
50ce66d7d2 adding codex multicodex 2023-12-22 17:18:21 -06:00
Mark Spanbroek
0af4b79daf WIP Add poseidon2 multihash 2023-12-22 17:18:21 -06:00
Mark Spanbroek
e2f0900871 WIP Add dependency on nim-poseidon2 2023-12-22 17:18:21 -06:00
9 changed files with 97 additions and 18 deletions

View File

@@ -1,4 +1,5 @@
bearssl;https://github.com/status-im/nim-bearssl@#34d712933a4e0f91f5e66bc848594a581504a215
blscurve;https://github.com/status-im/nim-blscurve@#52ae4332c749d89fa05226f5493decae568f682c
chronicles;https://github.com/status-im/nim-chronicles@#61759a5e8df8f4d68bcd1b4b8c1adab3e72bbd8d
chronos;https://github.com/status-im/nim-chronos@#b55e2816eb45f698ddaca8d8473e401502562db2
dnsclient;https://github.com/ba0f3/dnsclient.nim@#23214235d4784d24aceed99bbfe153379ea557c8
@@ -19,3 +20,5 @@ websock;https://github.com/status-im/nim-websock@#d5cd89062cd2d168ef35193c7d29d2
zlib;https://github.com/status-im/nim-zlib@#daa8723fd32299d4ca621c837430c29a5a11e19a
jwt;https://github.com/vacp2p/nim-jwt@#18f8378de52b241f321c1f9ea905456e89b95c6f
bearssl_pkey_decoder;https://github.com/vacp2p/bearssl_pkey_decoder@#21dd3710df9345ed2ad8bf8f882761e07863b8e0
constantine;https://github.com/mratsim/constantine@#v0.2.0
poseidon2;https://github.com/codex-storage/nim-poseidon2@#e173dd817b794d2bdadaa7ed45583798aaa91f0d

View File

@@ -11,6 +11,7 @@ switch("warning", "LockLevel:off")
--styleCheck:
usages
switch("warningAsError", "UseBase:on")
--excludePath:nimbledeps/
--styleCheck:
error
--mm:

View File

@@ -10,7 +10,8 @@ skipDirs = @["tests", "examples", "Nim", "tools", "scripts", "docs"]
requires "nim >= 2.0.0",
"nimcrypto >= 0.6.0 & < 0.7.0", "dnsclient >= 0.3.0 & < 0.4.0", "bearssl >= 0.2.5",
"chronicles >= 0.11.0 & < 0.12.0", "chronos >= 4.0.4", "metrics", "secp256k1",
"stew >= 0.4.0", "websock >= 0.2.0", "unittest2", "results", "quic >= 0.2.10",
"stew >= 0.4.0", "websock >= 0.2.0", "unittest2", "blscurve >= 0.0.1", "results",
"quic >= 0.2.10",
"https://github.com/vacp2p/nim-jwt.git#18f8378de52b241f321c1f9ea905456e89b95c6f"
let nimc = getEnv("NIMC", "nim") # Which nim compiler to use

View File

@@ -38,7 +38,7 @@ type
hpos*: int
data*: VBuffer
const ContentIdsList = [
const ContentIdsList* = [
multiCodec("raw"),
multiCodec("dag-pb"),
multiCodec("dag-cbor"),
@@ -67,6 +67,12 @@ const ContentIdsList = [
multiCodec("torrent-info"),
multiCodec("torrent-file"),
multiCodec("ed25519-pub"),
multiCodec("codex-root"),
multiCodec("codex-manifest"),
multiCodec("codex-block"),
multiCodec("codex-slot-root"),
multiCodec("codex-proving-root"),
multiCodec("codex-slot-cell"),
]
proc initCidCodeTable(): Table[int, MultiCodec] {.compileTime.} =

View File

@@ -17,6 +17,7 @@
import tables
import results
import sequtils
import stew/[base32, base58, base64]
import ./utils/sequninit
@@ -387,6 +388,7 @@ proc initMultiBaseNameTable(): Table[string, MBCodec] {.compileTime.} =
const
CodeMultiBases = initMultiBaseCodeTable()
NameMultiBases = initMultiBaseNameTable()
MultibaseList* = MultiBaseCodecs.mapIt(it.name)
proc encodedLength*(mbtype: typedesc[MultiBase], encoding: string, length: int): int =
## Return estimated size of buffer to store MultiBase encoded value with

View File

@@ -370,6 +370,10 @@ const MultiCodecList = [
("skein1024-1008", 0xB3DE),
("skein1024-1016", 0xB3DF),
("skein1024-1024", 0xB3E0),
# poseidon2
("poseidon2-alt_bn_128-sponge-r2", 0xCD10), # bn128 rate 2 sponge
("poseidon2-alt_bn_128-merkle-2kb", 0xCD11), # bn128 2kb compress & merkleize
("poseidon2-alt_bn_128-keyed-compress", 0xCD12), # bn128 keyed compress
# multiaddrs
("ip4", 0x04),
("ip6", 0x29),
@@ -430,6 +434,12 @@ const MultiCodecList = [
("torrent-info", 0x7B),
("torrent-file", 0x7C),
("ed25519-pub", 0xED),
("codex-manifest", 0xCD01),
("codex-block", 0xCD02),
("codex-root", 0xCD03),
("codex-slot-root", 0xCD04),
("codex-proving-root", 0xCD05),
("codex-slot-cell", 0xCD06),
]
type

View File

@@ -25,9 +25,13 @@
{.used.}
import tables
import sequtils
import nimcrypto/[sha, sha2, keccak, blake2, hash, utils]
import poseidon2
import varint, vbuffer, multicodec, multibase
import stew/base58
import blscurve/bls_public_exports
import results
export results
# This is workaround for Nim `import` bug.
@@ -110,13 +114,9 @@ proc blake2Shash(data: openArray[byte], output: var openArray[byte]) =
proc sha2_256hash(data: openArray[byte], output: var openArray[byte]) =
if len(output) > 0:
var digest = sha256.digest(data)
var length =
if sha256.sizeDigest > len(output):
len(output)
else:
sha256.sizeDigest
copyMem(addr output[0], addr digest.data[0], length)
var digest: array[32, byte]
digest.bls_sha256_digest(data)
copyMem(addr output[0], addr digest[0], 32)
proc sha2_512hash(data: openArray[byte], output: var openArray[byte]) =
if len(output) > 0:
@@ -226,7 +226,17 @@ proc shake_256hash(data: openArray[byte], output: var openArray[byte]) =
discard sctx.output(addr output[0], uint(len(output)))
sctx.clear()
const HashesList = [
proc poseidon2_sponge_rate2(data: openArray[byte], output: var openArray[byte]) =
if len(output) > 0:
var digest = poseidon2.Sponge.digest(data).toBytes()
copyMem(addr output[0], addr digest[0], uint(len(output)))
proc poseidon2_merkle_2kb_sponge(data: openArray[byte], output: var openArray[byte]) =
if len(output) > 0:
var digest = poseidon2.SpongeMerkle.digest(data, 2048).toBytes()
copyMem(addr output[0], addr digest[0], uint(len(output)))
const HashesList* = [
MHash(mcodec: multiCodec("identity"), size: 0, coder: identhash),
MHash(mcodec: multiCodec("sha1"), size: sha1.sizeDigest, coder: sha1hash),
MHash(
@@ -348,6 +358,16 @@ const HashesList = [
MHash(mcodec: multiCodec("blake2s-240"), size: 30, coder: blake2Shash),
MHash(mcodec: multiCodec("blake2s-248"), size: 31, coder: blake2Shash),
MHash(mcodec: multiCodec("blake2s-256"), size: 32, coder: blake2Shash),
MHash(
mcodec: multiCodec("poseidon2-alt_bn_128-sponge-r2"),
size: 32,
coder: poseidon2_sponge_rate2,
),
MHash(
mcodec: multiCodec("poseidon2-alt_bn_128-merkle-2kb"),
size: 32,
coder: poseidon2_merkle_2kb_sponge,
),
]
proc initMultiHashCodeTable(): Table[MultiCodec, MHash] {.compileTime.} =

View File

@@ -10,8 +10,11 @@
# those terms.
import unittest2
import std/sequtils
import ../libp2p/[cid, multihash, multicodec]
const MultiHashCodecsList* = HashesList.mapIt(it.mcodec)
suite "Content identifier CID test suite":
test "CIDv0 test vector":
var cid0Text = "QmdfTbBqBPQ7VNxZEYEj14VmRuZBkqFbiwReogJgS1zR1n"
@@ -66,3 +69,25 @@ suite "Content identifier CID test suite":
cid1 != cid5
cid2 != cid4
cid3 != cid6
test "Check all cids and hashes":
var msg = cast[seq[byte]]("Hello World!")
for cidCodec in ContentIdsList:
for mhashCodec in MultiHashCodecsList:
let cid = Cid
.init(CidVersion.CIDv1, cidCodec, MultiHash.digest($mhashCodec, msg).get())
.get()
check:
cid.mcodec == cidCodec
cid.mhash().get().mcodec == mhashCodec
test "Check all cids and hashes base encode":
var msg = cast[seq[byte]]("Hello World!")
for cidCodec in ContentIdsList:
for mhashCodec in MultiHashCodecsList:
let cid = Cid
.init(CidVersion.CIDv1, cidCodec, MultiHash.digest($mhashCodec, msg).get())
.get()
check:
cid.mcodec == cidCodec
cid.mhash().get().mcodec == mhashCodec

View File

@@ -67,16 +67,27 @@ const RustTestVectors = [
B7C42181F40AA1046F39E2EF9EFC6910782A998E0013D172458957957FAC9405
B67D""",
],
[
"poseidon2-alt_bn_128-sponge-r2", "hello world",
"""909A0320823F7FB71C0998153E73AC734AE4870518F5FE324BD2484B68B565C288CF1E1E""",
],
[
"poseidon2-alt_bn_128-merkle-2kb", "hello world",
"""919A0320D9A6AE0CBF28C5E9CBE28D7231D3A4DEDF8B3826B0F8C3C002CA95C21253E614""",
],
]
suite "MultiHash test suite":
template checkTestVector(vector) =
var msg = vector[1]
var bmsg = cast[seq[byte]](msg)
var mh1 = MultiHash.digest(vector[0], bmsg).get()
var mh2 = MultiHash.init(stripSpaces(vector[2])).get()
check:
hex(mh1) == stripSpaces(vector[2])
hex(mh1) == hex(mh2)
mh1 == mh2
test "rust-multihash test vectors":
for item in RustTestVectors:
var msg = item[1]
var bmsg = cast[seq[byte]](msg)
var mh1 = MultiHash.digest(item[0], bmsg).get()
var mh2 = MultiHash.init(stripSpaces(item[2])).get()
check:
hex(mh1) == stripSpaces(item[2])
hex(mh1) == hex(mh2)
mh1 == mh2
checkTestVector(item)