@@ -1821,16 +1821,60 @@ where
1821
1821
trampoline_shared_secret,
1822
1822
) ,
1823
1823
} ) ,
1824
- Ok ( ( _, None ) ) => Err ( OnionDecodeErr :: Malformed {
1825
- err_msg : "Non-final Trampoline onion data provided to us as last hop" ,
1826
- // todo: find more suitable error code
1827
- err_code : 0x4000 | 22 ,
1828
- } ) ,
1829
- Ok ( ( _, Some ( _) ) ) => Err ( OnionDecodeErr :: Malformed {
1830
- err_msg : "Final Trampoline onion data provided to us as intermediate hop" ,
1831
- // todo: find more suitable error code
1832
- err_code : 0x4000 | 22 ,
1833
- } ) ,
1824
+ Ok ( ( msgs:: InboundTrampolinePayload :: BlindedForward ( hop_data) , None ) ) => {
1825
+ if hop_data. intro_node_blinding_point . is_some ( ) {
1826
+ return Err ( OnionDecodeErr :: Relay {
1827
+ err_msg : "Non-final intro node Trampoline onion data provided to us as last hop" ,
1828
+ err_code : INVALID_ONION_BLINDING ,
1829
+ shared_secret,
1830
+ trampoline_shared_secret : Some ( SharedSecret :: from_bytes (
1831
+ trampoline_shared_secret,
1832
+ ) ) ,
1833
+ } ) ;
1834
+ }
1835
+ Err ( OnionDecodeErr :: Malformed {
1836
+ err_msg : "Non-final Trampoline onion data provided to us as last hop" ,
1837
+ err_code : INVALID_ONION_BLINDING ,
1838
+ } )
1839
+ } ,
1840
+ Ok ( ( msgs:: InboundTrampolinePayload :: BlindedReceive ( hop_data) , Some ( _) ) ) => {
1841
+ if hop_data. intro_node_blinding_point . is_some ( ) {
1842
+ return Err ( OnionDecodeErr :: Relay {
1843
+ err_msg : "Final Trampoline intro node onion data provided to us as intermediate hop" ,
1844
+ err_code : 0x4000 | 22 ,
1845
+ shared_secret,
1846
+ trampoline_shared_secret : Some ( SharedSecret :: from_bytes (
1847
+ trampoline_shared_secret,
1848
+ ) ) ,
1849
+ } ) ;
1850
+ }
1851
+ Err ( OnionDecodeErr :: Malformed {
1852
+ err_msg :
1853
+ "Final Trampoline onion data provided to us as intermediate hop" ,
1854
+ err_code : INVALID_ONION_BLINDING ,
1855
+ } )
1856
+ } ,
1857
+ Ok ( ( msgs:: InboundTrampolinePayload :: Forward ( _) , None ) ) => {
1858
+ Err ( OnionDecodeErr :: Relay {
1859
+ err_msg : "Non-final Trampoline onion data provided to us as last hop" ,
1860
+ err_code : 0x4000 | 22 ,
1861
+ shared_secret,
1862
+ trampoline_shared_secret : Some ( SharedSecret :: from_bytes (
1863
+ trampoline_shared_secret,
1864
+ ) ) ,
1865
+ } )
1866
+ } ,
1867
+ Ok ( ( msgs:: InboundTrampolinePayload :: Receive ( _) , Some ( _) ) ) => {
1868
+ Err ( OnionDecodeErr :: Relay {
1869
+ err_msg :
1870
+ "Final Trampoline onion data provided to us as intermediate hop" ,
1871
+ err_code : 0x4000 | 22 ,
1872
+ shared_secret,
1873
+ trampoline_shared_secret : Some ( SharedSecret :: from_bytes (
1874
+ trampoline_shared_secret,
1875
+ ) ) ,
1876
+ } )
1877
+ } ,
1834
1878
Err ( e) => Err ( e) ,
1835
1879
}
1836
1880
} ,
0 commit comments