1
1
import type { PeerId } from '@libp2p/interfaces/peer-id'
2
+ import { InvalidCryptoExchangeError , UnexpectedPeerError } from '@libp2p/interfaces/connection-encrypter/errors'
2
3
import type { ProtobufStream } from 'it-pb-stream'
3
4
import type { bytes , bytes32 } from './@types/basic.js'
4
5
import type { CipherState , NoiseSession } from './@types/handshake.js'
@@ -71,7 +72,7 @@ export class XXHandshake implements IHandshake {
71
72
const receivedMessageBuffer = decode0 ( ( await this . connection . readLP ( ) ) . slice ( ) )
72
73
const { valid } = this . xx . recvMessage ( this . session , receivedMessageBuffer )
73
74
if ( ! valid ) {
74
- throw new Error ( 'xx handshake stage 0 validation fail' )
75
+ throw new InvalidCryptoExchangeError ( 'xx handshake stage 0 validation fail' )
75
76
}
76
77
logger ( 'Stage 0 - Responder received first message.' )
77
78
logRemoteEphemeralKey ( this . session . hs . re )
@@ -85,7 +86,7 @@ export class XXHandshake implements IHandshake {
85
86
const receivedMessageBuffer = decode1 ( ( await this . connection . readLP ( ) ) . slice ( ) )
86
87
const { plaintext, valid } = this . xx . recvMessage ( this . session , receivedMessageBuffer )
87
88
if ( ! valid ) {
88
- throw new Error ( 'xx handshake stage 1 validation fail' )
89
+ throw new InvalidCryptoExchangeError ( 'xx handshake stage 1 validation fail' )
89
90
}
90
91
logger ( 'Stage 1 - Initiator received the message.' )
91
92
logRemoteEphemeralKey ( this . session . hs . re )
@@ -99,7 +100,7 @@ export class XXHandshake implements IHandshake {
99
100
this . setRemoteEarlyData ( decodedPayload . data )
100
101
} catch ( e ) {
101
102
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 } ` )
103
104
}
104
105
logger ( 'All good with the signature!' )
105
106
} else {
@@ -123,7 +124,7 @@ export class XXHandshake implements IHandshake {
123
124
const receivedMessageBuffer = decode2 ( ( await this . connection . readLP ( ) ) . slice ( ) )
124
125
const { plaintext, valid } = this . xx . recvMessage ( this . session , receivedMessageBuffer )
125
126
if ( ! valid ) {
126
- throw new Error ( 'xx handshake stage 2 validation fail' )
127
+ throw new InvalidCryptoExchangeError ( 'xx handshake stage 2 validation fail' )
127
128
}
128
129
logger ( 'Stage 2 - Responder received the message, finished handshake.' )
129
130
@@ -134,7 +135,7 @@ export class XXHandshake implements IHandshake {
134
135
this . setRemoteEarlyData ( decodedPayload . data )
135
136
} catch ( e ) {
136
137
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 } ` )
138
139
}
139
140
}
140
141
logCipherState ( this . session )
@@ -158,7 +159,7 @@ export class XXHandshake implements IHandshake {
158
159
159
160
private getCS ( session : NoiseSession , encryption = true ) : CipherState {
160
161
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.' )
162
163
}
163
164
164
165
if ( this . isInitiator ) {
0 commit comments