@@ -209,6 +209,13 @@ private string GetKey(string keyname)
209209 return reader . ReadToEnd ( ) ;
210210 }
211211
212+ private string GetSignatureResource ( string keyname )
213+ {
214+ var resourceStream = Assembly . GetExecutingAssembly ( ) . GetManifestResourceStream ( $ "SshNet.Keygen.Tests.TestSignatures.{ keyname } ") ;
215+ using var reader = new StreamReader ( resourceStream , Encoding . ASCII ) ;
216+ return reader . ReadToEnd ( ) . Replace ( Environment . NewLine , "\n " ) ;
217+ }
218+
212219 private void TestFormatKey < T > ( string keyname , int keyLength , string passphrase = null )
213220 {
214221 if ( ! string . IsNullOrEmpty ( passphrase ) )
@@ -302,5 +309,46 @@ public void TestED25519()
302309 TestFormatKey < ED25519Key > ( "ED25519" , 256 ) ;
303310 TestFormatKey < ED25519Key > ( "ED25519" , 256 , "12345" ) ;
304311 }
312+
313+ [ Test ]
314+ public void TestVerify ( )
315+ {
316+ List < string > keys = [ "RSA2048" , "RSA3072" , "RSA4096" , "RSA8192" , "ECDSA256" , "ECDSA384" , "ECDSA521" , "ED25519" ] ;
317+ var data = Encoding . UTF8 . GetBytes ( GetSignatureResource ( "file.txt" ) ) ;
318+
319+ foreach ( var key in keys )
320+ {
321+ TestContext . WriteLine ( $ "Testing Key { key } ") ;
322+ var signature = GetSignatureResource ( $ "file.txt.{ key } .sig") ;
323+ ClassicAssert . IsTrue ( SshSignature . Verify ( data , signature ) ) ;
324+ }
325+ }
326+
327+ [ Test ]
328+ public void TestSign ( )
329+ {
330+ List < string > keys = [ "RSA2048" , "RSA3072" , "RSA4096" , "RSA8192" , "ECDSA256" , "ECDSA384" , "ECDSA521" , "ED25519" ] ;
331+ var data = Encoding . UTF8 . GetBytes ( GetSignatureResource ( "file.txt" ) ) ;
332+
333+ foreach ( var key in keys )
334+ {
335+ TestContext . WriteLine ( $ "Testing Key { key } ") ;
336+ var expectedSignature = GetSignatureResource ( $ "file.txt.{ key } .sig") ;
337+ var keyData = GetKey ( key ) ;
338+ var keyFile = new PrivateKeyFile ( keyData . ToStream ( ) ) ;
339+ var signature = keyFile . Signature ( data ) ;
340+ ClassicAssert . IsTrue ( SshSignature . Verify ( data , signature ) ) ;
341+
342+ // ECDSA Signatures differ on each run
343+ if ( ! key . StartsWith ( "ECDSA" ) )
344+ ClassicAssert . AreEqual ( expectedSignature , signature ) ;
345+
346+ var file = $ "file-{ key } .txt";
347+ File . WriteAllText ( file , "bla" ) ;
348+ keyFile . SignatureFile ( file ) ;
349+ ClassicAssert . IsTrue ( SshSignature . VerifyFile ( file , $ "{ file } .sig") ) ;
350+
351+ }
352+ }
305353 }
306354}
0 commit comments