mirror of
https://github.com/vacp2p/nim-libp2p.git
synced 2026-01-10 11:18:08 -05:00
Compare commits
36 Commits
fix/quic-t
...
multihash-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7eaf79fefe | ||
|
|
c08d807349 | ||
|
|
bde92606ac | ||
|
|
e7f81867d4 | ||
|
|
ee83da271a | ||
|
|
a7374e827a | ||
|
|
b6d36fe646 | ||
|
|
e9a3c6c58e | ||
|
|
7960a1d9d6 | ||
|
|
60a37c5eb8 | ||
|
|
8bb6ff2d00 | ||
|
|
588b7d2682 | ||
|
|
285c208143 | ||
|
|
925bddb337 | ||
|
|
5623a4434a | ||
|
|
89d391afe8 | ||
|
|
e31ce69cd4 | ||
|
|
3e3b5acbd7 | ||
|
|
4c1492baa0 | ||
|
|
1be84befab | ||
|
|
036e110a60 | ||
|
|
08bd710900 | ||
|
|
2b8db4f9d4 | ||
|
|
8df12becc3 | ||
|
|
ea6680f3cf | ||
|
|
87728e2d9c | ||
|
|
1edb317542 | ||
|
|
b239791c56 | ||
|
|
967b458b2e | ||
|
|
a4780cf3e3 | ||
|
|
36457c9ff4 | ||
|
|
1e3b439799 | ||
|
|
dc7550638d | ||
|
|
50ce66d7d2 | ||
|
|
0af4b79daf | ||
|
|
e2f0900871 |
3
.pinned
3
.pinned
@@ -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
|
||||
|
||||
@@ -11,6 +11,7 @@ switch("warning", "LockLevel:off")
|
||||
--styleCheck:
|
||||
usages
|
||||
switch("warningAsError", "UseBase:on")
|
||||
--excludePath:nimbledeps/
|
||||
--styleCheck:
|
||||
error
|
||||
--mm:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.} =
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.} =
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user