11import type { PeerId } from '@libp2p/interfaces/peer-id'
2+ import { InvalidCryptoExchangeError , UnexpectedPeerError } from '@libp2p/interfaces/connection-encrypter/errors'
23import type { ProtobufStream } from 'it-pb-stream'
34import type { bytes , bytes32 } from './@types/basic.js'
45import type { CipherState , NoiseSession } from './@types/handshake.js'
@@ -71,7 +72,7 @@ export class XXHandshake implements IHandshake {
7172 const receivedMessageBuffer = decode0 ( ( await this . connection . readLP ( ) ) . slice ( ) )
7273 const { valid } = this . xx . recvMessage ( this . session , receivedMessageBuffer )
7374 if ( ! valid ) {
74- throw new Error ( 'xx handshake stage 0 validation fail' )
75+ throw new InvalidCryptoExchangeError ( 'xx handshake stage 0 validation fail' )
7576 }
7677 logger ( 'Stage 0 - Responder received first message.' )
7778 logRemoteEphemeralKey ( this . session . hs . re )
@@ -85,7 +86,7 @@ export class XXHandshake implements IHandshake {
8586 const receivedMessageBuffer = decode1 ( ( await this . connection . readLP ( ) ) . slice ( ) )
8687 const { plaintext, valid } = this . xx . recvMessage ( this . session , receivedMessageBuffer )
8788 if ( ! valid ) {
88- throw new Error ( 'xx handshake stage 1 validation fail' )
89+ throw new InvalidCryptoExchangeError ( 'xx handshake stage 1 validation fail' )
8990 }
9091 logger ( 'Stage 1 - Initiator received the message.' )
9192 logRemoteEphemeralKey ( this . session . hs . re )
@@ -99,7 +100,7 @@ export class XXHandshake implements IHandshake {
99100 this . setRemoteEarlyData ( decodedPayload . data )
100101 } catch ( e ) {
101102 const err = e as Error
102- throw new Error ( `Error occurred while verifying signed payload: ${ err . message } ` )
103+ throw new UnexpectedPeerError ( `Error occurred while verifying signed payload: ${ err . message } ` )
103104 }
104105 logger ( 'All good with the signature!' )
105106 } else {
@@ -123,7 +124,7 @@ export class XXHandshake implements IHandshake {
123124 const receivedMessageBuffer = decode2 ( ( await this . connection . readLP ( ) ) . slice ( ) )
124125 const { plaintext, valid } = this . xx . recvMessage ( this . session , receivedMessageBuffer )
125126 if ( ! valid ) {
126- throw new Error ( 'xx handshake stage 2 validation fail' )
127+ throw new InvalidCryptoExchangeError ( 'xx handshake stage 2 validation fail' )
127128 }
128129 logger ( 'Stage 2 - Responder received the message, finished handshake.' )
129130
@@ -134,7 +135,7 @@ export class XXHandshake implements IHandshake {
134135 this . setRemoteEarlyData ( decodedPayload . data )
135136 } catch ( e ) {
136137 const err = e as Error
137- throw new Error ( `Error occurred while verifying signed payload: ${ err . message } ` )
138+ throw new UnexpectedPeerError ( `Error occurred while verifying signed payload: ${ err . message } ` )
138139 }
139140 }
140141 logCipherState ( this . session )
@@ -158,7 +159,7 @@ export class XXHandshake implements IHandshake {
158159
159160 private getCS ( session : NoiseSession , encryption = true ) : CipherState {
160161 if ( ! session . cs1 || ! session . cs2 ) {
161- throw new Error ( 'Handshake not completed properly, cipher state does not exist.' )
162+ throw new InvalidCryptoExchangeError ( 'Handshake not completed properly, cipher state does not exist.' )
162163 }
163164
164165 if ( this . isInitiator ) {
0 commit comments