# @file for_authpath_0.py (2023-03-16T14:29Z)
# @author David Ireland <www.di-mgt.com.au/contact>
# @copyright 2023 DI Management Services Pty Ltd
# @license Apache-2.0

"""Compute the authpath for the first FORS tree."""

from spx_adrs import Adrs
from spx_util import hash_root, authpath
    
PKseed = 'B505D7CFAD1B497499323C8686325E47'

# First FORS tree (64 leaves)
leaves = ['8c48e58ee6cf0637722f7c211edb4d1e', '7ef1eff4e77ef7a8adfbf8793349046c', '1dfc64935b17dc31fd3a2325ba9eecac', '37abf592e59189da340d6a881ca1dc2e', 
'7f09be8f2d2bff2b028dcac63d8c8edb', '3ad71895e09ddab57d5f617bd6173292', '07ed7ac077cc6f661e594c552b4f0439', '13c28a865c20193d5382fa821faee938', 
'2e63d8b08b07005a23de4f860618ff91', 'ca7509e3954d7373795557338dfb2fbd', '4ce354f9cd2f9b51517aee646c2b88b9', '8e602a8541824fa4a85a38e1e497627e', 
'd764f3df0782019fee3f70b8178f2d50', '51f316f1bde578150b85d013cd957789', '50a9bff81cb9644dcdf5f9a8b9608e7f', '97e1baddabc46bc4c273e2227c0ea310', 
'bb9a15613b67de783ecd31e74b957276', '59c5fd1f8092044b3bbdc08edb44e5dc', '270a88399082bc55afba707184ab31b9', '7262e2db0198ac492affb0d20b67fffb', 
'702ea7fd8334852034c9303e817215e9', '99e9a823d29ee20b8a7e089717522f25', '90da66896b286a746e2beec2760dad95', 'b9c2970acc70d721e5e493d72fc6a1f8', 
'cb5f2a23f2c72f0ad03ce325a70c0228', '2b1142e4c9db94e6e4be139f6520ae77', '90d9d26cf0068d14f2125ffa16dce594', 'd8f181cba82c4ac6865f55cc504c6dca', 
'5df53cf5a08792790cdb9d9dc9cc2864', '14ebfa4a67cc3d7ab619f41486ed6481', '3f6f06353706365b528f458a413e3d8c', 'dab73d6ae51620a741de048669674181', 
'0637b822e65b533eace21f006c0f878b', 'eaa5aff989ed67ead0f56d25e1774e42', 'b87e7b3968625101ae493cad6cdd84fc', '80f8e7f6ae6d89b4f79a2e6a70a2e75a', 
'feb28391bfa8358f96e55e7e7d8f4338', 'd4d262121ebde471dd0e215bda50c02c', 'fa22bbdb5cbfc896de1b17acb827831b', 'bc6041dec97d58d8dfc009b89a72f505', 
'5bbaf738754909447a2f7f75533c09ee', 'ccab42503508b3efa536c3084389d0f8', 'cebad4bf49bc731c617af1be5c9b0325', 'ee3370155ee5309191cc54c1096ed2d5', 
'58cf10fc260bd256cb4fb261d0e700c5', 'ca4bfd56244bd009d0b29c244ce250da', '09ce929f54961589747139d8e5b81a14', '62bf481688833dc86d1cc06e44f17f26', 
'bec5a9afb8960005f6781a12e8d9a97c', '091b0a69e8e4c6f134dfdcb725b84635', '2031ded3c7be8b1977dfa130a0aa045c', '855d4707b621ec8fceeede056d9df49e', 
'3c3f59498eb43a7c51ea5cd2678f2a74', '54d0b4ae9e50f552dc2ba6397fa0425c', 'dd803ba72611a8ad4367b60a62e00835', 'c200dd4fade50a04712fe7c411c19f82', 
'2e3f52f43a2204b977b83ab68e66f6a8', '81e1624bccbef25b894a2f1671b1ac16', 'a30339324e51deb387d66939d70f4820', '2dbde4d07fdf3ec0b11ffe575c727776', 
'4fc3b7c01ac35ed78813892fccd0c673', '71860f1d996d84eb1802e67b7c9670c0', '5ff9c1c2e09a52ff8622f9245a66b1d0', '2b27ccc292b4a6c0f2e6199171cda6e7']
adrs = Adrs(Adrs.FORS_TREE, layer=0)
adrs.setTreeAddress(0x28daecdc86eb8761)
adrs.setKeyPairAddress(6)
print(f"ADRS={adrs.toHex()}")
root = hash_root(leaves, adrs, PKseed)
print(f"root={root}")
assert(root == "8f5a82fe31bc814bdf198d01481651c5")
# fors_auth_path[0]
auth = authpath(leaves, adrs, PKseed, 27)
print(f"fors_auth_path[0]:")
[print(a) for a in auth]
assert(auth[5] == '606c9bbca50ee8112dcc0cea78e81501')