Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 20 additions & 20 deletions test-vectors/json/orchard_zsa_asset_base.json

Large diffs are not rendered by default.

6 changes: 3 additions & 3 deletions test-vectors/json/orchard_zsa_digests.json

Large diffs are not rendered by default.

40 changes: 20 additions & 20 deletions test-vectors/rust/orchard_zsa_asset_base.rs

Large diffs are not rendered by default.

32 changes: 16 additions & 16 deletions test-vectors/rust/orchard_zsa_digests.rs

Large diffs are not rendered by default.

40 changes: 20 additions & 20 deletions test-vectors/zcash/orchard_zsa_asset_base.json

Large diffs are not rendered by default.

6 changes: 3 additions & 3 deletions test-vectors/zcash/orchard_zsa_digests.json

Large diffs are not rendered by default.

13 changes: 10 additions & 3 deletions zcash_test_vectors/orchard_zsa/asset_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,15 @@ def native_asset():
return group_hash(b"z.cash:Orchard-cv", b"v")


def encode_asset_id(key, description):
def asset_desc_digest(asset_desc):
h = blake2b(digest_size=32, person=b"ZSA-AssetDescCRH")
h.update(asset_desc)
return h.digest()


def encode_asset_id(key, asset_desc_hash):
version_byte = b"\x00"
return version_byte + key + description
return version_byte + key + asset_desc_hash


def asset_digest(encoded_asset_id):
Expand Down Expand Up @@ -83,7 +89,8 @@ def randbytes(l):

key_bytes = bytes(isk.ik)
description_bytes = get_random_unicode_bytes(512, rand)
asset_base = zsa_value_base(asset_digest(encode_asset_id(key_bytes, description_bytes)))
asset_desc_hash = asset_desc_digest(description_bytes)
asset_base = zsa_value_base(asset_digest(encode_asset_id(key_bytes, asset_desc_hash)))

test_vectors.append({
'key': key_bytes,
Expand Down
2 changes: 1 addition & 1 deletion zcash_test_vectors/orchard_zsa/digests.py
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ def issue_actions_digest(tx):

for action in tx.vIssueActions:
digest.update(issue_notes_digest(action))
digest.update(action.asset_desc)
digest.update(action.asset_desc_hash)
digest.update(struct.pack('<B', action.flagsIssuance))

return digest.digest()
Expand Down
12 changes: 6 additions & 6 deletions zcash_test_vectors/transaction_v6.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from .orchard.pallas import Point
from .orchard_zsa.key_components import IssuanceKeys
from .orchard_zsa.digests import NU7_VERSION_GROUP_ID, NU7_TX_VERSION_BYTES
from .orchard_zsa.asset_base import zsa_value_base, asset_digest, encode_asset_id, get_random_unicode_bytes
from .orchard_zsa.asset_base import zsa_value_base, asset_digest, encode_asset_id, get_random_unicode_bytes, asset_desc_digest
from .zc_utils import write_compact_size
from .transaction import (
NOTEENCRYPTION_AUTH_BYTES, ZC_SAPLING_ENCPLAINTEXT_SIZE,
Expand Down Expand Up @@ -40,17 +40,17 @@ def __bytes__(self):
class IssueActionDescription(object):
def __init__(self, rand, ik):
self.assetDescSize = rand.u32() % 512 + 1
self.asset_desc = get_random_unicode_bytes(self.assetDescSize, rand)
self.asset_desc_hash = asset_desc_digest(get_random_unicode_bytes(self.assetDescSize, rand))
self.vNotes = []
for _ in range(rand.u8() % 5):
self.vNotes.append(IssueNote(rand, ik, self.asset_desc))
self.vNotes.append(IssueNote(rand, ik, self.asset_desc_hash))
self.flagsIssuance = rand.u8() & 1 # Only one bit is reserved for the finalize flag currently

def __bytes__(self):
ret = b''

ret += write_compact_size(self.assetDescSize)
ret += bytes(self.asset_desc)
ret += bytes(self.asset_desc_hash)
ret += write_compact_size(len(self.vNotes))
if len(self.vNotes) > 0:
for note in self.vNotes:
Expand All @@ -61,11 +61,11 @@ def __bytes__(self):


class IssueNote(object):
def __init__(self, rand, ik, asset_desc):
def __init__(self, rand, ik, asset_desc_hash):
fvk_r = FullViewingKey.from_spending_key(SpendingKey(rand.b(32)))
self.recipient = fvk_r.default_d() + bytes(fvk_r.default_pkd())
self.value = rand.u64()
asset_digest_bytes = asset_digest(encode_asset_id(ik, asset_desc))
asset_digest_bytes = asset_digest(encode_asset_id(ik, asset_desc_hash))
self.assetBase = zsa_value_base(asset_digest_bytes)
self.rho = Point.rand(rand).extract()
self.rseed = rand.b(32)
Expand Down