;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2020 Ludovic Courtès ;;; ;;; This file is part of GNU Guix. ;;; ;;; GNU Guix is free software; you can redistribute it and/or modify it ;;; under the terms of the GNU General Public License as published by ;;; the Free Software Foundation; either version 3 of the License, or (at ;;; your option) any later version. ;;; ;;; GNU Guix is distributed in the hope that it will be useful, but ;;; WITHOUT ANY WARRANTY; without even the implied warranty of ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;;; GNU General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with GNU Guix. If not, see . (define-module (tests-openpgp) #:use-module (guix openpgp) #:use-module (gcrypt base16) #:use-module (gcrypt hash) #:use-module (gcrypt pk-crypto) #:use-module (ice-9 binary-ports) #:use-module (ice-9 match) #:use-module (rnrs bytevectors) #:use-module (srfi srfi-1) #:use-module (srfi srfi-11) #:use-module
aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'build-aux')
0 files changed, 0 insertions, 0 deletions
\ -----BEGIN PGP SIGNATURE----- iHUEABYCAB0WIQRE0x4hr3E4+bYyKAp3H0nL+q4HLQUCXqRALQAKCRB3H0nL+q4H LdhEAQCfkdYhIVRa43oTNw9EL/TDFGQjXSHNRFVU0ktjkWbkQwEAjIXhvj2sqy79 Pz7oopeN72xgggYUNT37ezqN3MeCqw0= =AE4G -----END PGP SIGNATURE-----") (test-begin "openpgp") (test-equal "read-radix-64" '(#t "PGP MESSAGE") (let-values (((data type) (call-with-input-string %radix-64-sample read-radix-64))) (list (bytevector? data) type))) (test-equal "read-radix-64, CRC mismatch" '(#f "PGP MESSAGE") (call-with-values (lambda () (call-with-input-string %radix-64-sample/crc-mismatch read-radix-64)) list)) (test-assert "port-ascii-armored?, #t" (call-with-input-string %radix-64-sample port-ascii-armored?)) (test-assert "port-ascii-armored?, #f" (not (port-ascii-armored? (open-bytevector-input-port %binary-sample)))) (test-assert "get-openpgp-keyring" (let* ((key (search-path %load-path "tests/civodul.key")) (keyring (get-openpgp-keyring (open-bytevector-input-port (call-with-input-file key read-radix-64))))) (let-values (((primary packets) (lookup-key-by-id keyring %civodul-key-id))) (let ((fingerprint (openpgp-public-key-fingerprint primary))) (and (= (openpgp-public-key-id primary) %civodul-key-id) (not (openpgp-public-key-subkey? primary)) (string=? (openpgp-format-fingerprint fingerprint) %civodul-fingerprint) (string=? (openpgp-user-id-value (find openpgp-user-id? packets)) "Ludovic Courtès ") (eq? (lookup-key-by-fingerprint keyring fingerprint) primary)))))) (test-equal "get-openpgp-detached-signature/ascii" (list `(,%dsa-key-id ,%dsa-key-fingerprint dsa sha256) `(,%rsa-key-id ,%rsa-key-fingerprint rsa sha256) `(,%ed25519-key-id ,%ed25519-key-fingerprint eddsa sha256) `(,%ed25519-key-id ,%ed25519-key-fingerprint eddsa sha512) `(,%ed25519-key-id ,%ed25519-key-fingerprint eddsa sha1)) (map (lambda (str) (let ((signature (get-openpgp-detached-signature/ascii (open-input-string str)))) (list (openpgp-signature-issuer-key-id signature) (openpgp-signature-issuer-fingerprint signature) (openpgp-signature-public-key-algorithm signature) (openpgp-signature-hash-algorithm signature)))) (list %hello-signature/dsa %hello-signature/rsa %hello-signature/ed25519/sha256 %hello-signature/ed25519/sha512 %hello-signature/ed25519/sha1))) (test-equal "verify-openpgp-signature, missing key" `(missing-key ,%rsa-key-fingerprint) (let* ((keyring (get-openpgp-keyring (%make-void-port "r"))) (signature (string->openpgp-packet %hello-signature/rsa))) (let-values (((status key) (verify-openpgp-signature signature keyring (open-input-string "Hello!\n")))) (list status key)))) (test-equal "verify-openpgp-signature, good signatures" `((good-signature ,%rsa-key-id) (good-signature ,%dsa-key-id) (good-signature ,%ed25519-key-id) (good-signature ,%ed25519-key-id) (good-signature ,%ed25519-key-id)) (map (lambda (key signature) (let* ((key (search-path %load-path key)) (keyring (get-openpgp-keyring (open-bytevector-input-port (call-with-input-file key read-radix-64)))) (signature (string->openpgp-packet signature))) (let-values (((status key) (verify-openpgp-signature signature keyring (open-input-string "Hello!\n")))) (list status (openpgp-public-key-id key))))) (list "tests/rsa.key" "tests/dsa.key" "tests/ed25519.key" "tests/ed25519.key" "tests/ed25519.key") (list %hello-signature/rsa %hello-signature/dsa %hello-signature/ed25519/sha256 %hello-signature/ed25519/sha512 %hello-signature/ed25519/sha1))) (test-equal "verify-openpgp-signature, bad signature" `((bad-signature ,%rsa-key-id) (bad-signature ,%dsa-key-id) (bad-signature ,%ed25519-key-id) (bad-signature ,%ed25519-key-id) (bad-signature ,%ed25519-key-id)) (let ((keyring (fold (lambda (key keyring) (let ((key (search-path %load-path key))) (get-openpgp-keyring (open-bytevector-input-port (call-with-input-file key read-radix-64)) keyring))) %empty-keyring '("tests/rsa.key" "tests/dsa.key" "tests/ed25519.key" "tests/ed25519.key" "tests/ed25519.key")))) (map (lambda (signature) (let ((signature (string->openpgp-packet signature))) (let-values (((status key) (verify-openpgp-signature signature keyring (open-input-string "What?!")))) (list status (openpgp-public-key-id key))))) (list %hello-signature/rsa %hello-signature/dsa %hello-signature/ed25519/sha256 %hello-signature/ed25519/sha512 %hello-signature/ed25519/sha1)))) (test-end "openpgp")