# @file wots_ht_0.py
# @version 1.1 (2026-01-26T11:37Z)
# @author David Ireland <https://di-mgt.com.au/contact>
# @copyright 2023-26 DI Management Services Pty Ltd
# @license Apache-2.0

"""Generate the first and last HT signature values ht_sig[0][0] and ht_sig[0][34]."""

from slh_adrs import Adrs
from slh_sha256 import F, PRF
PKseed = 'FA495FB834DEFEA7CC96A81309479135'
SKseed = 'D5213BA4BB6470F1B9EDA88CBC94E627'

fors_pk = "33af163817cd6c2bea881ddf7d2b89ab"
wots_input = fors_pk
layer = 0
tree_addr = 0x7cdcef4b8fdb03b0
idx_leaf = 0
# Set up ADRS object
adrs = Adrs(Adrs.WOTS_HASH, layer=layer)
adrs.setTreeAddress(tree_addr)
adrs.setKeyPairAddress(idx_leaf)
print(f"ADRS base={adrs.toHex(True)}")
skAdrs = adrs.copy()
skAdrs.setType(Adrs.WOTS_PRF)
skAdrs.setKeyPairAddress(adrs.getKeyPairAddress())

idx = 0
print(f"Generate WOTS+ private key for i = {idx}")
# sk = PRF(SK.seed, ADRS)
skAdrs.setChainAddress(idx)
adrs_c = skAdrs.toHex(True)
print(f"ADRS={adrs_c}")
sk = PRF(PKseed, SKseed, adrs_c)
print(f"wots_sk={sk}")

# Compute F^m_i(sk)
adrs.setChainAddress(idx)
mi = 3
print(f"m[{idx}]={mi}")
x = sk
adrs_ht = Adrs.fromHex(adrs.toHex(True))
for i in range(mi):
    adrs_ht.setHashAddress(i)
    adrs_c = adrs_ht.toHex(True)
    print(f"i={i} ADRS={adrs_ht.toHexSP(True)}")
    print(f"in={x}")
    x = F(PKseed, adrs_c, x)
    print(f"F(PK.seed, ADRS, in)={x}")

print(f"ht_sig[{layer}][{idx}]:{x}")
# a328a052f8f91d66a4ab9a12263bb318

idx = 34
print(f"Generate WOTS+ private key for i = {idx}")
# sk = PRF(SK.seed, ADRS)
skAdrs.setChainAddress(idx)
adrs_c = skAdrs.toHex(True)
print(f"ADRS={adrs_c}")
sk = PRF(PKseed, SKseed, adrs_c)
print(f"wots_sk={sk}")

# Compute F^m_i(sk)
adrs.setChainAddress(idx)
mi = 6
print(f"m[{idx}]={mi}")
x = sk
adrs_ht = Adrs.fromHex(adrs.toHex(True))
for i in range(mi):
    adrs_ht.setHashAddress(i)
    adrs_c = adrs_ht.toHex(True)
    print(f"i={i} ADRS={adrs_ht.toHexSP(True)}")
    print(f"in={x}")
    x = F(PKseed, adrs_c, x)
    print(f"F(PK.seed, ADRS, in)={x}")

print(f"ht_sig[{layer}][{idx}]:{x}")
# a328a052f8f91d66a4ab9a12263bb318