@@ -50,8 +50,9 @@ export const verify = async (token) => {
5050
5151 const publicKey = Loader . Cardano . PublicKey . from_bytes ( headermap . key_id ( ) ) ;
5252
53- if ( ! verifyAddress ( address , publicKey ) ) {
54- throw new Error ( "Address verification failed" ) ;
53+ const verifyAddressResponse = verifyAddress ( address , publicKey ) ;
54+ if ( ! verifyAddressResponse . status ) {
55+ throw new Error ( verifyAddressResponse . msg ) ;
5556 }
5657
5758 const parsed_body = parseAsHeaders ( body ) ;
@@ -70,13 +71,16 @@ export const verify = async (token) => {
7071 } ;
7172} ;
7273
74+ /**
75+ * Validate the Address provided. To do this we take the Address (or Base Address)
76+ * and compare it to an address (BaseAddress or RewardAddress) reconstructed from the
77+ * publicKey.
78+ * @param {Loader.Cardano.Address } checkAddress
79+ * @param {Loader.Cardano.PublicKey } publicKey
80+ * @returns {{status: bool, msg?: string, code?: number} }
81+ */
7382const verifyAddress = ( checkAddress , publicKey ) => {
74- console . log ( "publicKey" , publicKey . hash ( ) ) ;
75- // if (this.headers.address.to_bech32() !== checkAddress.to_bech32()) {
76- // console.log("FASLE1");
77- // return false;
78- // }
79- // check if BaseAddress
83+ let errorMsg = "" ;
8084 try {
8185 const baseAddress = Loader . Cardano . BaseAddress . from_address ( checkAddress ) ;
8286 //reconstruct address
@@ -88,22 +92,37 @@ const verifyAddress = (checkAddress, publicKey) => {
8892 Loader . Cardano . StakeCredential . from_keyhash ( stakeKeyHash )
8993 ) ;
9094
91- return (
92- checkAddress . to_bech32 ( ) === reconstructedAddress . to_address ( ) . to_bech32 ( )
93- ) ;
95+ const status = checkAddress . to_bech32 ( ) === reconstructedAddress . to_address ( ) . to_bech32 ( ) ;
96+ return {
97+ status,
98+ msg : status ? "Valid Address" : "Base Address does not validate to Reconstructed address" ,
99+ code : 1
100+ } ;
94101 } catch ( e ) {
95- console . error ( e ) ;
102+ errorMsg += ` ${ e . message } `
96103 }
97104
98105 try {
99- const stakeKeyHash = address . hash ( ) ;
106+ const stakeKeyHash = checkAddress . hash ( ) ;
100107 const reconstructedAddress = RewardAddress . new (
101108 checkAddress . network_id ( ) ,
102109 StakeCredential . from_keyhash ( stakeKeyHash )
103110 ) ;
104- return (
105- checkAddress . to_bech32 ( ) === reconstructedAddress . to_address ( ) . to_bech32 ( )
106- ) ;
107- } catch ( e ) { }
108- return false ;
111+
112+ const status = checkAddress . to_bech32 ( ) === reconstructedAddress . to_address ( ) . to_bech32 ( ) ;
113+ return {
114+ status,
115+ msg : status ? "Valid Address" : "Address does not validate to Reconstructed address" ,
116+ code : 1
117+ } ;
118+
119+ } catch ( e ) {
120+ errorMsg += ` ${ e . message } `
121+ }
122+
123+ return {
124+ status : false ,
125+ msg : `Error: ${ errorMsg } ` ,
126+ code : 3
127+ } ;
109128} ;
0 commit comments