package Ġfr . ac in q . lightning . crypto Ċ Ċ import Ġfr . ac in q . bitcoin . Byte Vector 3 2 Ċ import Ġfr . ac in q . lightning . tests . utils . Lightning TestSuite Ċ import Ġfr . ac in q . secp 2 5 6 k 1 . Hex Ċ import Ġkotlin . test .* Ċ Ċ class ĠSh a Chain Tests Jvm Ġ: ĠLight ning TestSuite () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġexpected Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠ ĠHex . decode (" f 8 5 a 0 f 7 f 2 3 7 ed 2 1 3 9 8 5 5 7 0 3 db 4 2 6 4 de 3 8 0 ec 7 3 1 f 6 4 a 3 d 8 3 2 c 2 2 a 5 f 2 ef 6 1 5 f 1 d 5 "), ĊĠĠĠĠĠĠĠ ĠHex . decode (" a 0 7 acb 1 2 0 3 f 8 d 7 a 7 6 1 eb 4 3 e 1 0 9 e 4 6 fd 8 7 7 0 3 1 a 6 fd 2 a 8 e 6 8 4 0 f 0 6 4 a 4 9 ba 8 2 6 aec "), ĊĠĠĠĠĠĠĠ ĠHex . decode (" 3 6 4 a 7 bd 5 1 4 3 0 6 0 2 eb 9 6 7 b 8 6 d 3 3 e 2 cbd 4 d 5 e 7 1 1 eb 0 9 8 c 0 8 fd 8 c 6 d 0 3 2 8 bb 1 ef eb 2 "), ĊĠĠĠĠĠĠĠ ĠHex . decode (" f 1 c 2 3 9 ec 1 3 5 4 d 2 ee 1 3 6 c 0 0 d 4 f 7 3 d 9 e 3 ea 0 9 9 c 6 e 7 2 2 5 7 8 0 6 1 f 8 1 4 d 8 cd 2 2 0 e 5 7 ad "), ĊĠĠĠĠĠĠĠ ĠHex . decode (" 3 2 5 3 b 9 3 3 5 3 2 f 7 ea 8 bff a 6 3 2 7 4 2 1 fd 4 8 5 e 7 8 ce 5 ea 3 3 0 9 f 1 5 7 8 8 1 f 8 2 4 c 5 7 d 7 df 3 5 "), ĊĠĠĠĠĠĠĠ ĠHex . decode (" dee 0 cc 9 ed 8 4 4 7 b 5 0 ff 3 1 a 7 1 2 2 f 7 fdb 7 e 3 8 8 2 df ba 7 cc 9 5 7 2 6 1 9 b 1 8 8 8 7 c 2 e 3 4 e 8 8 "), ĊĠĠĠĠĠĠĠ ĠHex . decode (" 0 7 b 1 c 6 6 7 0 de 1 5 3 ec 0 d 1 3 6 0 5 0 8 de 8 2 cc 5 8 7 a 6 9 3 d 6 8 f 7 7 c 1 5 c 1 2 4 3 9 dd 8 9 e 7 9 6 8 8 7 "), ĊĠĠĠĠĠĠĠ ĠHex . decode (" b 7 f 6 6 c 2 7 5 eb 2 9 7 7 3 6 9 1 0 6 4 2 4 a 4 f 4 8 0 8 6 ddc 2 3 c 0 0 db 5 dca f 7 1 1 3 b 5 4 8 6 8 e 0 3 a 2 d 6 "), ĊĠĠĠĠĠĠĠ ĠHex . decode (" f 4 9 d 0 7 8 e 1 1 f 1 6 3 6 9 9 e 4 a 9 eb 8 0 7 2 d 9 ff 1 5 2 4 2 6 4 d 7 8 0 6 9 5 2 c 0 5 aed c 1 f 3 6 3 d 3 5 7 6 2 "), ĊĠĠĠĠĠĠĠ ĠHex . decode (" 0 f 1 f 7 3 9 5 4 2 de eb 5 2 b 7 4 1 c 1 f 3 a 0 f 0 e 0 8 4 3 3 2 a 2 6 5 6 0 e 6 2 6 7 7 d 5 2 7 7 0 1 3 1 7 4 7 1 8 5 2 3 "), ĊĠĠĠĠĠĠĠ ĠHex . decode (" 5 3 1 bd 3 9 9 dd cd be 2 e 7 c 8 3 9 2 eff 5 5 b 7 4 6 6 cf 5 e 1 baf 2 d 6 2 b 8 b 6 af ae 0 9 ff 3 f 5 9 1 5 4 5 "), ĊĠĠĠĠĠĠĠ ĠHex . decode (" 7 7 eda 8 5 4 6 aa 7 4 bfa ed 5 b 6 6 cde 0 7 fbd 2 2 dd 3 8 a 3 db 0 2 1 5 8 8 d 9 4 c 9 5 a 8 2 0 2 8 c 6 ff 7 f "), ĊĠĠĠĠĠĠĠ ĠHex . decode (" ece 8 b 3 3 e 1 1 cb 3 e 0 e 9 2 0 0 2 a 3 2 0 f 6 ca 7 5 dac 2 2 2 4 1 cac fe 0 6 dc 1 5 ec 4 0 3 7 dc 8 6 1 1 4 b "), ĊĠĠĠĠĠĠĠ ĠHex . decode (" cbf 5 3 a 3 5 e 3 b 9 6 d 1 3 5 b 8 0 ed 0 9 ceb dc 3 fa 4 a 3 5 7 a 8 7 3 a 2 9 c 3 8 6 9 2 2 b aca 7 1 7 3 bd 8 de "), ĊĠĠĠĠĠĠĠ ĠHex . decode (" f acc 7 1 a 4 c 2 5 5 8 6 2 0 5 9 1 c 2 2 e 1 9 6 f 5 d 3 aca 3 adb 3 9 a 3 a 8 ce 9 1 9 8 2 0 9 9 5 3 3 3 b 3 2 a 9 7 9 "), ĊĠĠĠĠĠĠĠ ĠHex . decode (" b cee 7 1 cc 4 caf 6 4 8 2 9 1 8 a 5 2 4 2 b 7 0 6 8 ad 5 6 3 a 0 ec 3 2 d 2 a 2 0 f 5 3 2 1 5 1 0 1 dd 3 5 ad 5 7 cb "), ĊĠĠĠĠĠĠĠ ĠHex . decode (" d 4 e 8 fc 6 2 baf 5 c 0 2 8 ce 3 a 2 c 6 7 8 cf 4 9 c 2 8 9 0 2 7 8 3 8 ab 5 4 8 f 3 1 4 8 eaf 0 0 3 c 0 1 2 daa 0 6 "), ĊĠĠĠĠĠĠĠ ĠHex . decode (" 0 1 a 3 3 aa 5 a 5 6 f 4 2 e 7 c 7 e 7 b 5 4 2 f 7 0 fdf 5 c 0 3 b 4 7 4 9 1 0 0 2 a 1 a 1 ad 3 5 6 0 4 9 5 7 6 8 dc 2 4 3 "), ĊĠĠĠĠĠĠĠ ĠHex . decode (" 9 1 e 8 a 2 9 8 b 9 4 8 6 f 1 1 7 5 1 6 3 6 ad 5 6 8 a 5 f 7 6 fcc 6 2 d 0 5 3 0 df 7 9 f 5 fb 6 7 f 0 fd 8 0 8 9 bbb 6 "), ĊĠĠĠĠĠĠĠ ĠHex . decode (" b 0 3 e 0 cef 6 2 bc 8 8 0 9 d 7 1 aca ef 0 1 7 4 9 9 3 1 a 3 3 0 5 ac 0 4 4 8 2 5 9 ee 2 bb 1 9 9 aa 3 0 7 b 3 e 2 b "), ĊĠĠĠĠĠĠĠ ĠHex . decode (" 3 0 6 d 8 f 2 3 3 6 1 6 6 7 f 2 a 9 5 fe 3 f 9 2 b 0 af 8 1 9 1 b 4 de 4 ffe 8 8 cb 1 5 1 6 b 2 6 c 1 aad 4 0 1 4 9 8 0 "), ĊĠĠĠĠĠĠĠ ĠHex . decode (" b 7 3 edf 6 1 9 d 0 1 bb 2 2 3 0 3 9 9 c 9 5 c 5 a 7 1 2 ba 7 1 d 6 ae 8 8 2 9 a 7 1 4 2 4 e 0 e 0 1 e 1 1 ae 9 8 1 5 3 e "), ĊĠĠĠĠĠĠĠ ĠHex . decode (" 4 5 ffa 2 7 8 d 6 6 a 7 0 8 1 c 8 4 7 3 dbe 6 9 4 3 1 cbb 8 0 f 0 2 6 b 3 3 be de 3 4 2 0 4 8 4 aa 3 2 5 f 5 8 be 1 4 "), ĊĠĠĠĠĠĠĠ ĠHex . decode (" b 1 8 0 4 2 6 7 ad 0 eb 2 2 3 5 b 2 a 0 5 8 ca 9 2 0 af 9 fa 7 b 1 7 d 8 ef 8 3 5 1 5 fda ed 3 7 3 e 1 a 3 8 8 4 1 c 6 "), ĊĠĠĠĠĠĠĠ ĠHex . decode (" 3 4 ca 9 f 1 3 7 3 2 0 5 5 9 5 c 8 a 2 f 4 6 e 2 b 1 c 3 c 6 3 3 c 1 7 3 b 8 5 1 7 6 cc 9 4 a 5 f 8 b 7 5 7 3 a 4 e 2 9 3 2 a "), ĊĠĠĠĠĠĠĠ ĠHex . decode (" 3 b 3 dba 4 3 cc 1 9 2 6 5 db 2 3 4 3 d 6 d 6 1 f 1 5 ee 7 4 2 d 1 f 5 f 4 cf 9 3 0 d 6 5 3 f 5 0 f 4 7 b 6 c 4 b 5 1 1 3 "), ĊĠĠĠĠĠĠĠ ĠHex . decode (" 7 c 8 cc 4 d 6 1 b 8 d 0 8 d 9 4 5 9 6 e 4 a 6 e 8 0 ba 5 2 0 3 af ba 7 d 2 8 beb 5 4 d 2 6 b 4 e 5 7 7 4 4 0 ff df 4 4 "), ĊĠĠĠĠĠĠĠ ĠHex . decode (" 4 ada 9 5 4 7 a 2 d 8 dd 2 4 b 3 e 3 8 1 6 cf 2 a 3 2 8 2 ab 5 b 1 7 3 8 6 3 1 aa 1 5 5 4 6 4 6 5 4 2 7 e 3 d 9 b 8 7 7 b "), ĊĠĠĠĠĠĠĠ ĠHex . decode (" 5 b 0 fd 6 c 6 3 2 5 d 8 3 e 4 5 2 3 8 0 4 7 5 7 eac 4 d 8 f 7 d 3 2 2 f 5 8 0 ed 7 9 4 8 5 9 0 0 2 1 9 8 8 2 8 5 d 3 e 4 5 "), ĊĠĠĠĠĠĠĠ ĠHex . decode (" 5 7 8 7 4 2 4 f 4 dad 5 c 4 8 2 1 d 8 4 4 1 5 0 4 6 fb 8 8 0 a 4 5 e 0 3 9 d 5 8 2 2 4 bb 9 1 2 bf 2 2 7 aa 7 6 a 8 5 fe "), ĊĠĠĠĠĠĠĠ ĠHex . decode (" de cb 6 7 6 db 1 b 2 dc db 9 4 cde 8 3 2 df 8 b 9 b 8 9 fdb bee 2 a 1 bd 0 cb 0 3 9 3 cab df cdd 1 6 1 a 3 f "), ĊĠĠĠĠĠĠĠ ĠHex . decode (" 7 cab 4 b 1 2 ffe 2 7 b 7 6 7 9 4 de dd 7 ed 7 9 2 9 9 7 fc 9 f 7 0 a 3 dab cb 6 9 2 b 4 8 3 4 d 6 6 5 c 1 0 7 9 da "), ĊĠĠĠĠĠĠĠ ĠHex . decode (" 8 e 7 b 1 bc 9 8 7 fe 0 f 4 2 9 b 7 d 3 0 7 3 4 c 9 8 b 7 8 6 d 2 e 3 9 a 4 c 1 6 dca e 5 3 4 6 f 8 1 a 4 8 4 eda 5 d 1 0 "), ĊĠĠĠĠĠĠĠ ĠHex . decode (" d 0 4 2 6 7 1 9 6 9 2 9 2 2 e 7 9 d 1 4 d 8 1 2 4 a 4 4 8 8 7 fe 4 d 0 0 9 2 8 f 6 ee 6 8 de 8 9 2 9 6 6 1 6 c 9 3 cfd 0 2 "), ĊĠĠĠĠĠĠĠ ĠHex . decode (" 5 d 8 7 dec 9 d 2 c 2 0 aa 0 7 3 bc 9 8 5 3 2 1 7 1 3 3 d 2 aa 2 5 7 1 6 8 0 b 6 7 ba 8 ccd 5 6 2 6 8 d 0 4 d 5 bb 3 2 "), ĊĠĠĠĠĠĠĠ ĠHex . decode (" 3 d 9 3 2 1 7 3 ef 3 5 2 6 c 2 ed 1 6 1 5 d 3 9 6 9 1 1 faa 1 5 6 9 de 3 0 5 3 b 1 b 5 a 8 d 8 0 f 2 0 d 3 4 deb 6 db 1 "), ĊĠĠĠĠĠĠĠ ĠHex . decode (" 8 9 7 b 0 2 ad 5 9 1 bf 1 2 b 2 3 9 3 e 1 7 5 9 b 8 bf 3 5 0 ebc 8 4 a 0 b 2 f 9 6 be 4 3 0 c 9 7 d 9 7 9 1 4 3 4 3 9 4 d "), ĊĠĠĠĠĠĠĠ ĠHex . decode (" 6 4 c 6 2 6 4 3 cd 1 4 1 f 8 2 2 9 1 2 c 0 2 3 0 8 b 4 3 eb ab 8 e 1 7 6 e 9 0 a 4 0 8 c 3 f 9 2 7 a 5 7 ae 2 b 8 6 5 2 1 0 "), ĊĠĠĠĠĠĠĠ ĠHex . decode (" ed 3 9 b 7 0 4 6 d 9 8 b 8 ddb 5 9 7 ad 9 cb 3 4 e 2 1 6 c 9 fd 4 9 b 1 8 1 e 8 8 3 9 3 e 7 6 8 3 e 6 6 1 eaf cf 9 f 1 "), ĊĠĠĠĠĠĠĠ ĠHex . decode (" de 0 3 f 8 d 4 e 4 e 2 d 4 f 3 4 f 8 9 7 5 2 e 9 1 4 6 3 6 cc 8 f 3 eb 6 3 a 2 3 7 ce 0 a 6 1 3 1 b 0 2 e 9 bad 8 f 6 8 f "), ĊĠĠĠĠĠĠĠ ĠHex . decode (" 4 2 e 3 d 3 ca 2 7 7 2 9 5 5 a 7 1 c 8 9 3 ed 1 7 db 4 3 f 2 5 5 7 df 9 8 8 abab 0 1 7 7 7 7 c 0 3 9 7 6 4 0 6 7 ea 6 f "), ĊĠĠĠĠĠĠĠ ĠHex . decode (" e 1 d 9 cc 5 0 aa 8 4 7 b 8 e 4 8 1 8 1 f 9 a 2 b 1 4 e 4 1 ad 9 5 8 1 9 f 9 3 3 2 6 fdf 5 6 3 ae 6 3 8 2 3 1 f 8 aeb 6 "), ĊĠĠĠĠĠĠĠ ĠHex . decode (" 6 fbe 2 9 e 9 bcd 7 c 2 2 c 8 1 9 af 3 6 df 8 8 5 6 9 7 c 7 4 4 5 f 2 de 5 4 5 7 0 4 8 d 3 e 2 c 4 5 0 aa 2 6 2 3 cbb "), ĊĠĠĠĠĠĠĠ ĠHex . decode (" 2 2 7 3 be 5 9 ca 2 eef 6 a 1 8 a 8 3 f 0 9 5 c 4 6 d 9 7 f 6 6 2 a 0 c 8 a 8 b 7 e 3 6 b 5 be 4 e 0 1 e 2 fef 8 b 3 5 5 "), ĊĠĠĠĠĠĠĠ ĠHex . decode (" 4 7 c 6 4 1 5 4 fdd ba 5 6 d fee 9 2 4 b 2 9 d 0 9 8 cc 9 5 ecd 7 6 8 8 7 ef 5 4 1 5 5 3 b 2 b 1 1 5 7 a 3 b 5 e 9 e 1 "), ĊĠĠĠĠĠĠĠ ĠHex . decode (" 6 a 1 3 9 4 8 1 ff 4 0 9 5 0 4 0 e 3 9 7 c 7 1 b 9 3 fd 5 5 6 b 3 5 ff 3 d 1 4 9 ec 8 6 d 5 6 1 1 7 0 3 f 2 a 8 4 9 7 9 bb "), ĊĠĠĠĠĠĠĠ ĠHex . decode (" d 6 2 1 ad 4 ed be 0 db 4 5 0 2 db ec 1 0 8 6 af cf 2 6 7 ba 7 6 4 2 3 2 0 d 9 c 2 b 8 e 0 6 2 2 da 0 c 1 ccf 9 7 d "), ĊĠĠĠĠĠĠĠ ĠHex . decode (" 1 4 5 c 7 f 9 0 baa 7 9 8 4 3 dd 7 8 b 1 ad 0 c 3 6 7 1 d 9 7 4 2 9 6 ee 9 1 0 c 5 6 e 9 3 5 b 1 faa 3 6 2 3 0 9 2 7 db "), ĊĠĠĠĠĠĠĠ ĠHex . decode (" 0 c 7 3 aa 6 bd 2 8 1 7 5 c 4 b 6 5 4 5 5 0 1 e 8 ce 5 1 4 9 2 a 9 8 e 5 3 0 2 7 b 8 1 3 7 0 0 8 3 5 9 f 6 d 7 5 0 d 2 f 3 8 "), ĊĠĠĠĠĠĠĠ ĠHex . decode (" 0 1 a 1 0 b 1 efc 3 0 7 1 b 4 6 2 8 4 fd 9 b 7 9 c 1 6 9 9 9 d 3 d 0 dc ad 8 8 fb 1 7 bdf 3 cb fa eb 6 2 5 1 ec de ") ĊĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠByte Vector 3 2 ( it ) Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġseed Ġ= ĠByte Vector 3 2 . Zero es ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` generate Ġand Ġreceive Ġhashes `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġ( 0 Ġuntil Ġ 5 0 ). map Ġ{ ĠSh a Chain . sha Chain From Seed ( seed , Ġ- 1 L Ġ/* 0 xffffffff ffffffff L */ Ġ- Ġit ) Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġresult ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġreceiver Ġ= ĠSh a Chain . empty ĊĠĠĠĠĠĠĠ Ġrepeat ( 1 0 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreceiver Ġ= Ġreceiver . add Hash ( Sha Chain . sha Chain From Seed ( seed , Ġ- 1 L Ġ/* 0 xffffffff ffffffff L */ Ġ- Ġit ), Ġ- 1 L Ġ/* 0 xffffffff ffffffff L */ Ġ- Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( receiver . known Hashes . size Ġ<= Ġ 6 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġj : ĠLong Ġ= Ġ- 1 L Ġ/* 0 xffffffff ffffffff L */ Ġ- Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( j Ġ!= Ġ- 1 L Ġ/* 0 xffffffff ffffffff L */) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġho Ġ= Ġreceiver . get Hash ( j ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertNotNull ( ho ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġk Ġ= Ġ(- 1 L Ġ/* 0 xffffffff ffffffff L */ Ġ- Ġj ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( k Ġ< Ġ 5 0 ) ĠassertEquals ( expected [ k ], Ġho ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ++ j ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertNull ( receiver . get Hash (- 1 L Ġ/* 0 xffffffff ffffffff L */ Ġ- Ġit Ġ- Ġ 1 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ