Add missing asn.1 test file

Julien LepillerFri May 01 17:00:26+0200 2020

1c56ea2

Add missing asn.1 test file

tests/asn1.scm unknown status 1

1+
;;;; Copyright (C) 2020 Julien Lepiller <julien@lepiller.eu>
2+
;;;; 
3+
;;;; This library is free software; you can redistribute it and/or
4+
;;;; modify it under the terms of the GNU Lesser General Public
5+
;;;; License as published by the Free Software Foundation; either
6+
;;;; version 3 of the License, or (at your option) any later version.
7+
;;;; 
8+
;;;; This library is distributed in the hope that it will be useful,
9+
;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
10+
;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11+
;;;; Lesser General Public License for more details.
12+
;;;; 
13+
;;;; You should have received a copy of the GNU Lesser General Public
14+
;;;; License along with this library; if not, write to the Free Software
15+
;;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16+
;;;; 
17+
18+
(define-module (tests asn1)
19+
  #:use-module (srfi srfi-64)
20+
  #:use-module (ice-9 format)
21+
  #:use-module (rnrs bytevectors)
22+
  #:use-module (http-signature asn1))
23+
24+
(define (bv-equal? bv1 bv2)
25+
  (if (equal? (bytevector-length bv1) (bytevector-length bv2))
26+
    (let loop ((pos 0))
27+
      (if (= pos (bytevector-length bv1))
28+
          #t
29+
          (if (equal? (bytevector-u8-ref bv1 pos) (bytevector-u8-ref bv2 pos))
30+
            (loop (+ pos 1))
31+
            #f)))
32+
    #f))
33+
34+
(test-begin "asn1")
35+
36+
(test-assert "asn1 bool decoding #f"
37+
  (equal?
38+
    (decode-asn1 #vu8(#x01 #x01 #x00) asn1:bool)
39+
    #f))
40+
41+
(test-assert "asn1 bool decoding #t"
42+
  (equal?
43+
    (decode-asn1 #vu8(#x01 #x01 #x51) asn1:bool)
44+
    #t))
45+
46+
(test-assert "asn1 integer decoding"
47+
  (and
48+
    (bv-equal? (decode-asn1 #vu8(#x02 #x00) asn1:int-bv) #vu8())
49+
    (bv-equal? (decode-asn1 #vu8(#x02 #x02 #x01 #x50) asn1:int-bv) #vu8(#x01 #x50))))
50+
51+
(test-assert "asn1 bit string decoding"
52+
  (and
53+
    (bv-equal? (decode-asn1 #vu8(#x03 #x00) asn1:bitstring) #vu8())
54+
    (bv-equal? (decode-asn1 #vu8(#x03 #x02 #x01 #x50) asn1:bitstring) #vu8(#x01 #x50))))
55+
56+
(test-assert "asn1 bit string constructed decoding"
57+
  (and
58+
    (bv-equal? (decode-asn1 #vu8(#x23 #x80 #x03 #x03 #x00 #x0a #x3b
59+
                                           #x03 #x05 #x04 #x5f #x29 #x1c #xd0
60+
                                           #x00 #x00)
61+
                            asn1:bitstring)
62+
               #vu8(#x00 #x0a #x3b #x04 #x5f #x29 #x1c #xd0))
63+
    (bv-equal? (decode-asn1 #vu8(#x23 #x80 #x03 #x00
64+
                                           #x23 #x80 #x03 #x01 #x5f
65+
                                                     #x03 #x01 #x1e
66+
                                                     #x00 #x00
67+
                                           #x03 #x02 #x5e #x22
68+
                                           #x00 #x00)
69+
                            asn1:bitstring)
70+
               #vu8(#x5f #x1e #x5e #x22))))
71+
72+
(test-assert "asn1 octet string decoding"
73+
  (and
74+
    (bv-equal? (decode-asn1 #vu8(#x04 #x00) asn1:octetstring) #vu8())
75+
    (bv-equal? (decode-asn1 #vu8(#x04 #x02 #x01 #x50) asn1:octetstring) #vu8(#x01 #x50))))
76+
77+
(test-assert "asn1 octet string constructed decoding"
78+
  (and
79+
    (bv-equal? (decode-asn1 #vu8(#x24 #x80 #x04 #x03 #x00 #x0a #x3b
80+
                                           #x04 #x05 #x04 #x5f #x29 #x1c #xd0
81+
                                           #x00 #x00)
82+
                            asn1:octetstring)
83+
               #vu8(#x00 #x0a #x3b #x04 #x5f #x29 #x1c #xd0))
84+
    (bv-equal? (decode-asn1 #vu8(#x24 #x80 #x04 #x00
85+
                                           #x24 #x80 #x04 #x01 #x5f
86+
                                                     #x04 #x01 #x1e
87+
                                                     #x00 #x00
88+
                                           #x04 #x02 #x5e #x22
89+
                                           #x00 #x00)
90+
                            asn1:octetstring)
91+
               #vu8(#x5f #x1e #x5e #x22))))
92+
93+
(test-assert "asn1 null decoding"
94+
  (equal?
95+
    (decode-asn1 #vu8(#x05 #x00) asn1:null)
96+
    #nil))
97+
98+
(test-assert "asn1 sequence decoding"
99+
  (map equal?
100+
       (decode-asn1 #vu8(#x30 #x0f #x01 #x01 #x50
101+
                                   #x01 #x01 #x01
102+
                                   #x01 #x01 #x00
103+
                                   #x01 #x01 #xff
104+
                                   #x01 #x01 #x00)
105+
         (asn1:sequence asn1:bool asn1:bool asn1:bool asn1:bool asn1:bool))
106+
       (list #t #t #f #t #f)))
107+
108+
(test-assert "asn1 object identifier decoding"
109+
  (map equal?
110+
       (decode-asn1 #vu8(#x06 #x03 #x88 #x37 #x03) asn1:object-identifier)
111+
       '(2 999 3)))
112+
113+
(test-assert "asn1 bool encoding #t"
114+
  (bv-equal? (encode-asn1 asn1:bool #t) #vu8(#x01 #x01 #xff)))
115+
116+
(test-assert "asn1 bool encoding #f"
117+
  (bv-equal? (encode-asn1 asn1:bool #f) #vu8(#x01 #x01 #x00)))
118+
119+
(test-assert "asn1 int encoding"
120+
  (and
121+
    (bv-equal? (encode-asn1 asn1:int-bv #vu8()) #vu8(#x02 #x00))
122+
    (bv-equal? (encode-asn1 asn1:int-bv #vu8(#x5e #x11)) #vu8(#x02 #x02 #x5e #x11))))
123+
124+
(test-assert "asn1 bit string encoding"
125+
  (and
126+
    (bv-equal? (encode-asn1 asn1:bitstring #vu8()) #vu8(#x03 #x00))
127+
    (bv-equal? (encode-asn1 asn1:bitstring #vu8(#x5e #x11)) #vu8(#x03 #x02 #x5e #x11))))
128+
129+
(test-assert "asn1 octet string encoding"
130+
  (and
131+
    (bv-equal? (encode-asn1 asn1:octetstring #vu8()) #vu8(#x04 #x00))
132+
    (bv-equal? (encode-asn1 asn1:octetstring #vu8(#x5e #x11)) #vu8(#x04 #x02 #x5e #x11))))
133+
134+
(test-assert "asn1 null encoding"
135+
  (bv-equal? (encode-asn1 asn1:null #nil) #vu8(#x05 #x00)))
136+
137+
(test-assert "asn1 object identifier encoding"
138+
  (bv-equal? (encode-asn1 asn1:object-identifier '(2 999 3))
139+
             #vu8(#x06 #x03 #x88 #x37 #x03)))
140+
141+
(test-assert "asn1 sequence encoding"
142+
  (bv-equal? (encode-asn1 (asn1:sequence asn1:bool asn1:int-bv asn1:bool)
143+
                          '(#t #vu8(#x5e #x5e #x5e) #f))
144+
             #vu8(#x30 #x0b #x01 #x01 #xff
145+
                            #x02 #x3 #x5e #x5e #x5e
146+
                            #x01 #x01 #x00)))
147+
148+
(test-end "asn1")