Skip to content

Commit 729638b

Browse files
Add unittests for signing and verifying
1 parent b2dbac9 commit 729638b

File tree

1 file changed

+89
-0
lines changed

1 file changed

+89
-0
lines changed

tests/key.scm

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,95 @@
305305
#:auth-callback (lambda (prompt max-len echo? verify? userdata)
306306
"123")))
307307

308+
309+
;;; Sign & Verify
310+
311+
(define %test-data "Hello, Guile-SSH world!")
312+
313+
(test-assert-with-log "sign: RSA"
314+
(let* ((private-key (private-key-from-file %rsakey))
315+
(signature (sign %test-data private-key)))
316+
(and (string? signature)
317+
(not (string-null? signature)))))
318+
319+
(test-assert-with-log "verify: RSA, valid signature"
320+
(let* ((private-key (private-key-from-file %rsakey))
321+
(signature (sign %test-data private-key))
322+
(public-key (private-key->public-key private-key)))
323+
(verify %test-data signature)))
324+
325+
(test-equal "verify: RSA, invalid signature"
326+
#f
327+
(let* ((private-key (private-key-from-file %rsakey))
328+
(public-key (private-key->public-key private-key))
329+
(fake-signature "invalid-signature"))
330+
(catch #t
331+
(lambda ()
332+
(verify %test-data fake-signature))
333+
(lambda args #f))))
334+
335+
(test-assert-with-log "sign with custom namespace and hash"
336+
(let* ((private-key (private-key-from-file %rsakey))
337+
(signature (sign %test-data private-key
338+
#:namespace "test"
339+
#:hash 'sha256)))
340+
(and (string? signature)
341+
(not (string-null? signature)))))
342+
343+
(test-assert-with-log "verify with custom namespace"
344+
(let* ((private-key (private-key-from-file %rsakey))
345+
(signature (sign %test-data private-key #:namespace "test"))
346+
(public-key (private-key->public-key private-key)))
347+
(verify %test-data signature #:namespace "test")))
348+
349+
(test-equal "verify: namespace mismatch"
350+
#f
351+
(let* ((private-key (private-key-from-file %rsakey))
352+
(signature (sign %test-data private-key #:namespace "test"))
353+
(public-key (private-key->public-key private-key)))
354+
(catch #t
355+
(lambda ()
356+
(verify %test-data signature #:namespace "different"))
357+
(lambda args #f))))
358+
359+
(unless-dsa-supported
360+
(test-skip "sign: DSA"))
361+
(test-assert-with-log "sign: DSA"
362+
(let* ((private-key (private-key-from-file %dsakey))
363+
(signature (sign %test-data private-key)))
364+
(and (string? signature)
365+
(not (string-null? signature)))))
366+
367+
(unless-dsa-supported
368+
(test-skip "verify: DSA"))
369+
(test-assert-with-log "verify: DSA"
370+
(let* ((private-key (private-key-from-file %dsakey))
371+
(signature (sign %test-data private-key))
372+
(public-key (private-key->public-key private-key)))
373+
(verify %test-data signature)))
374+
375+
(unless-openssl
376+
(test-skip "sign: ECDSA"))
377+
(test-assert-with-log "sign: ECDSA"
378+
(let* ((private-key (private-key-from-file %ecdsakey))
379+
(signature (sign %test-data private-key)))
380+
(and (string? signature)
381+
(not (string-null? signature)))))
382+
383+
(unless-openssl
384+
(test-skip "verify: ECDSA"))
385+
(test-assert-with-log "verify: ECDSA"
386+
(let* ((private-key (private-key-from-file %ecdsakey))
387+
(signature (sign %test-data private-key))
388+
(public-key (private-key->public-key private-key)))
389+
(verify %test-data signature)))
390+
391+
(test-error-with-log "sign: invalid key type"
392+
(sign %test-data "not-a-key"))
393+
394+
(test-assert-with-log "verify: invalid signature format"
395+
(not (verify %test-data "not-a-signature")))
396+
308397
;;;
309398
(define exit-status (test-runner-fail-count (test-runner-current)))
310399

0 commit comments

Comments
 (0)