@@ -60,55 +60,65 @@ public override AuthenticationResult Authenticate(Session session)
60
60
61
61
session . RegisterMessage ( "SSH_MSG_USERAUTH_PK_OK" ) ;
62
62
63
- foreach ( var keyFile in KeyFiles )
63
+ try
64
64
{
65
- _authenticationCompleted . Reset ( ) ;
66
- _isSignatureRequired = false ;
65
+ foreach ( var keyFile in KeyFiles )
66
+ {
67
+ _authenticationCompleted . Reset ( ) ;
68
+ _isSignatureRequired = false ;
67
69
68
- var message = new RequestMessagePublicKey ( ServiceName . Connection , Username , keyFile . HostKey . Name , keyFile . HostKey . Data ) ;
70
+ var message = new RequestMessagePublicKey ( ServiceName . Connection ,
71
+ Username ,
72
+ keyFile . HostKey . Name ,
73
+ keyFile . HostKey . Data ) ;
69
74
70
- if ( KeyFiles . Count < 2 )
71
- {
72
- // If only one key file provided then send signature for very first request
73
- var signatureData = new SignatureData ( message , session . SessionId ) . GetBytes ( ) ;
75
+ if ( KeyFiles . Count < 2 )
76
+ {
77
+ // If only one key file provided then send signature for very first request
78
+ var signatureData = new SignatureData ( message , session . SessionId ) . GetBytes ( ) ;
74
79
75
- message . Signature = keyFile . HostKey . Sign ( signatureData ) ;
76
- }
80
+ message . Signature = keyFile . HostKey . Sign ( signatureData ) ;
81
+ }
77
82
78
- // Send public key authentication request
79
- session . SendMessage ( message ) ;
83
+ // Send public key authentication request
84
+ session . SendMessage ( message ) ;
80
85
81
- session . WaitOnHandle ( _authenticationCompleted ) ;
86
+ session . WaitOnHandle ( _authenticationCompleted ) ;
82
87
83
- if ( _isSignatureRequired )
84
- {
85
- _authenticationCompleted . Reset ( ) ;
88
+ if ( _isSignatureRequired )
89
+ {
90
+ _authenticationCompleted . Reset ( ) ;
86
91
87
- var signatureMessage = new RequestMessagePublicKey ( ServiceName . Connection , Username , keyFile . HostKey . Name , keyFile . HostKey . Data ) ;
92
+ var signatureMessage = new RequestMessagePublicKey ( ServiceName . Connection ,
93
+ Username ,
94
+ keyFile . HostKey . Name ,
95
+ keyFile . HostKey . Data ) ;
88
96
89
- var signatureData = new SignatureData ( message , session . SessionId ) . GetBytes ( ) ;
97
+ var signatureData = new SignatureData ( message , session . SessionId ) . GetBytes ( ) ;
90
98
91
- signatureMessage . Signature = keyFile . HostKey . Sign ( signatureData ) ;
99
+ signatureMessage . Signature = keyFile . HostKey . Sign ( signatureData ) ;
92
100
93
- // Send public key authentication request with signature
94
- session . SendMessage ( signatureMessage ) ;
95
- }
101
+ // Send public key authentication request with signature
102
+ session . SendMessage ( signatureMessage ) ;
103
+ }
96
104
97
- session . WaitOnHandle ( _authenticationCompleted ) ;
105
+ session . WaitOnHandle ( _authenticationCompleted ) ;
98
106
99
- if ( _authenticationResult == AuthenticationResult . Success )
100
- {
101
- break ;
107
+ if ( _authenticationResult == AuthenticationResult . Success )
108
+ {
109
+ break ;
110
+ }
102
111
}
103
- }
104
-
105
- session . UserAuthenticationSuccessReceived -= Session_UserAuthenticationSuccessReceived ;
106
- session . UserAuthenticationFailureReceived -= Session_UserAuthenticationFailureReceived ;
107
- session . MessageReceived -= Session_MessageReceived ;
108
-
109
- session . UnRegisterMessage ( "SSH_MSG_USERAUTH_PK_OK" ) ;
110
112
111
- return _authenticationResult ;
113
+ return _authenticationResult ;
114
+ }
115
+ finally
116
+ {
117
+ session . UserAuthenticationSuccessReceived -= Session_UserAuthenticationSuccessReceived ;
118
+ session . UserAuthenticationFailureReceived -= Session_UserAuthenticationFailureReceived ;
119
+ session . MessageReceived -= Session_MessageReceived ;
120
+ session . UnRegisterMessage ( "SSH_MSG_USERAUTH_PK_OK" ) ;
121
+ }
112
122
}
113
123
114
124
private void Session_UserAuthenticationSuccessReceived ( object sender , MessageEventArgs < SuccessMessage > e )
@@ -168,8 +178,8 @@ protected virtual void Dispose(bool disposing)
168
178
var authenticationCompleted = _authenticationCompleted ;
169
179
if ( authenticationCompleted != null )
170
180
{
171
- authenticationCompleted . Dispose ( ) ;
172
181
_authenticationCompleted = null ;
182
+ authenticationCompleted . Dispose ( ) ;
173
183
}
174
184
175
185
_isDisposed = true ;
@@ -243,6 +253,5 @@ protected override void SaveData()
243
253
WriteBinaryString ( _message . PublicKeyData ) ;
244
254
}
245
255
}
246
-
247
256
}
248
257
}
0 commit comments