summaryrefslogtreecommitdiff
path: root/tests/jwk.scm
blob: 6750456b8b461dedad7728de679869d123af6eb6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
(define-module (tests jwk)
  #:use-module (disfluid jwk)
  #:use-module (oop goops)
  #:use-module (srfi srfi-64)
  #:declarative? #t)

(test-group "Generating a key: RSA"
  (let* ((key (make <jwk> #:n-size 2048))
         (public (jwk-public->json key))
         (pair (jwk->json key)))
    (test-group "Generating an RSA key: public and private parts"
      (test-equal "RSA" (assq-ref pair 'kty))
      (test-equal (jkt key) (assq-ref pair 'kid))
      (test-assert (not (string-suffix? "=" (assq-ref pair 'kid))))
      (test-assert (string? (assq-ref pair 'n)))
      (test-assert (string? (assq-ref pair 'e)))
      (test-assert (string? (assq-ref pair 'd)))
      (test-assert (string? (assq-ref pair 'p)))
      (test-assert (string? (assq-ref pair 'q)))
      ;; Fixme: find a way to compute dp and dq
      (test-assert (not (assq-ref pair 'dp)))
      (test-assert (not (assq-ref pair 'dq)))
      (test-assert (string? (assq-ref pair 'qi))))
    (test-group "Generating an RSA key: public part"
      (test-equal "RSA" (assq-ref public 'kty))
      (test-assert (string? (assq-ref public 'kid)))
      (test-assert (string? (assq-ref public 'n)))
      (test-assert (string? (assq-ref public 'e)))
      (test-assert (not (assq-ref public 'd)))
      (test-assert (not (assq-ref public 'p)))
      (test-assert (not (assq-ref public 'q)))
      (test-assert (not (assq-ref public 'dp)))
      (test-assert (not (assq-ref public 'dq)))
      (test-assert (not (assq-ref public 'qi))))
    (test-group "Generating a key: RSA with e=0"
      (let ((key (jwk-public->json (make <jwk> #:n-size 2048 #:e 0))))
        (test-equal "RSA" (assq-ref key 'kty))
        (test-assert (not (equal? (assq-ref key 'e) "AA")))))
    (test-group "Generating a key: RSA with e=1"
      (let ((key (jwk-public->json (make <jwk> #:n-size 2048 #:e 1))))
        (test-equal "RSA" (assq-ref key 'kty))
        (test-assert (not (equal? (assq-ref key 'e) "AQ")))))
    (test-group "Generating a key: RSA with e=3"
      (let ((key (jwk-public->json (make <jwk> #:n-size 2048 #:e 3))))
        (test-equal "RSA" (assq-ref key 'kty))
        (test-equal "Aw" (assq-ref key 'e))))
    (test-group "Generating a key: RSA with e=AQAB"
      (let ((key (jwk-public->json (make <jwk> #:n-size 2048 #:e "AQAB"))))
        (test-equal "RSA" (assq-ref key 'kty))
        (test-equal "AQAB" (assq-ref key 'e))))))

(test-group "Generating a key with incorrect parameters: RSA"
  (test-error &invalid-key-parameters (make <jwk> #:n-size 8))
  (test-error &invalid-key-parameters (make <jwk> #:n-size 16))
  (test-error &invalid-key-parameters (make <jwk> #:n-size 64))
  (test-error &invalid-key-parameters (make <jwk> #:n-size "garbage"))
  (test-error &invalid-key-parameters (make <jwk> #:n-size 2048 #:e "garbage"))
  (test-error &invalid-key-parameters (make <jwk>)))