commit 33b17eb0e4d3a5d7505944c9a86410d20baace6f
parent ed055f88e82498a15a60ed42ada7a48f905b146c
Author: Tomas Hlavaty <tom@logand.com>
Date: Sun, 7 Dec 2014 18:39:40 +0100
use next-der and write-der as usual instead of decode and encode
this should allow better integration with rw.wire
Diffstat:
M | der.lisp | | | 49 | +++++++++++++++++++++++++------------------------ |
M | tls.lisp | | | 4 | ++-- |
2 files changed, 27 insertions(+), 26 deletions(-)
diff --git a/der.lisp b/der.lisp
@@ -22,8 +22,9 @@
(defpackage :rw.der
(:use :cl)
- (:export :decode
- :encode))
+ (:export :der
+ :next-der
+ :write-der))
(in-package :rw.der)
@@ -40,7 +41,7 @@
;; http://www.herongyang.com/Cryptography/Certificate-Format-PEM-on-Certificates.html
;; http://serverfault.com/questions/9708/what-is-a-pem-file-and-how-does-it-differ-from-other-openssl-generated-key-file
-(defun decode (reader)
+(defun next-der (reader)
(labels ((len ()
(let ((n (rw:next-u8 reader)))
(if (logbitp 7 n)
@@ -85,8 +86,8 @@
(r (rw:peek-reader (rw:shorter-reader reader n))))
(loop
while (rw:peek r)
- collect (decode r)))
- ;;(decode (rw:shorter-reader reader (len)))
+ collect (next-der r)))
+ ;;(next-der (rw:shorter-reader reader (len)))
;;#+nil
(let* ((n (len))
(z (make-array n
@@ -147,26 +148,26 @@
(loop
with r = (rw:peek-reader (rw:shorter-reader reader (len)))
while (rw:peek r)
- collect (decode r)))
+ collect (next-der r)))
(49 ;; SET #x31
- (cons 'set (decode (rw:shorter-reader reader (len)))))
+ (cons 'set (next-der (rw:shorter-reader reader (len)))))
(80
(list '???-key-identifier
- (decode (rw:shorter-reader reader (len)))))
+ (next-der (rw:shorter-reader reader (len)))))
(160 ;; ??? crl-extensions signed certificate version #xa0
;; (int inside) 2 = signed certificate v3
(list '???-signed-certificate-version
- (decode (rw:shorter-reader reader (len)))))
+ (next-der (rw:shorter-reader reader (len)))))
(163 ;; ??? signed certificate extensions #xa3
(list '???-signed-certificate-extensions
- (decode (rw:shorter-reader reader (len)))))
+ (next-der (rw:shorter-reader reader (len)))))
;; ;;;;;;;;;;
#+nil
(128
- (cons '???-128 (decode (rw:shorter-reader reader (len)))))
+ (cons '???-128 (next-der (rw:shorter-reader reader (len)))))
))))
-(defun encode (writer x)
+(defun write-der (writer x)
(labels ((len (n)
(assert (<= 0 n))
(if (< n #x80)
@@ -188,7 +189,7 @@
(let* ((b (make-array 42 :fill-pointer 0 :adjustable t))
(w (rw:writer b)))
(dolist (x x)
- (encode w x))
+ (write-der w x))
(len (length b))
(loop
for x across b
@@ -354,15 +355,15 @@
(dolist (test tests t)
;; (print (list :@@@ test))
;; (finish-output)
- (assert (equalp (car test) (decode (rw:reader (cadr test)))))
+ (assert (equalp (car test) (next-der (rw:reader (cadr test)))))
(assert (equalp (cadr test)
(let ((b (make-array 42 :fill-pointer 0 :adjustable t)))
- (encode (rw:writer b) (car test))
+ (write-der (rw:writer b) (car test))
(coerce b 'list))))))
-;;(decode (rw:reader '(6 6 #x2a #x86 #x48 #x86 #xf7 #x0d)))
-;;(decode (rw:reader '(3 4 6 #x6e #x5d #xc0))) ; '(:bit-string "011011100101110111")
-;;(encode w '(bit-string "011011100101110111")) ;; '(3 4 6 #x6e #x5d #xc0)
+;;(next-der (rw:reader '(6 6 #x2a #x86 #x48 #x86 #xf7 #x0d)))
+;;(next-der (rw:reader '(3 4 6 #x6e #x5d #xc0))) ; '(:bit-string "011011100101110111")
+;;(write-der w '(bit-string "011011100101110111")) ;; '(3 4 6 #x6e #x5d #xc0)
;; http://serverfault.com/questions/9708/what-is-a-pem-file-and-how-does-it-differ-from-other-openssl-generated-key-file
@@ -377,7 +378,7 @@
#\P #\R #\I #\V #\A #\T #\E #\space
#\K #\E #\Y
#\- #\- #\- #\- #\-))
- (prog1 (list 'private-key (decode (rw.base64:decode-reader reader)))
+ (prog1 (list 'private-key (next-der (rw.base64:decode-reader reader)))
;;(rw:till (rw:peek-reader (rw.base64:decode-reader reader)))
(rw:skip reader)
(assert
@@ -393,7 +394,7 @@
#\B #\E #\G #\I #\N #\space
#\C #\E #\R #\T #\I #\F #\I #\C #\A #\T #\E
#\- #\- #\- #\- #\-))
- (prog1 (list 'certificate (decode (rw.base64:decode-reader reader)))
+ (prog1 (list 'certificate (next-der (rw.base64:decode-reader reader)))
;;(rw:till (rw:peek-reader (rw.base64:decode-reader reader)))
(rw:skip reader)
(assert
@@ -440,11 +441,11 @@
(defun decode-reader (reader)
(lambda ()
- (decode reader)))
+ (next-der reader)))
(defun encode-writer (writer)
(lambda (x)
- (encode writer x)))
+ (write-der writer x)))
(defun encode-reader (reader &optional buffer)
(let* (done
@@ -462,7 +463,7 @@
(x
(setq n 0)
(setf (fill-pointer b) 0)
- (encode w x)
+ (write-der w x)
;;(print b)
(prog1 (aref b n)
(incf n)))
@@ -518,4 +519,4 @@
#+nil
(with-open-file (s "/usr/share/doc/dirmngr/examples/extra-certs/S-TRUSTQualSigOCSP2008-022.final.v3.509.crt"
:element-type '(unsigned-byte 8))
- (decode (rw:byte-reader s)))
+ (next-der (rw:byte-reader s)))
diff --git a/tls.lisp b/tls.lisp
@@ -292,7 +292,7 @@
(rw.wire:defstruc %$Certificate ()
(rw:u8 #+nil $ASN.1Cert data :length rw:u24be :min 0 :max #.(1- (expt 2 24)))
- (rw.wire::computed der :next (rw.der:decode (rw:reader data))))
+ (rw.wire::computed der :next (rw.der:next-der (rw:reader data))))
(rw.wire:defstruc $Certificate ()
(%$Certificate list :length rw:u24be :min 0 :max #.(1- (expt 2 24)) :size t))
@@ -666,7 +666,7 @@
(loop
for i from (1- nbytes) downto 0
do (rw:write-u8 w (ldb (byte 8 (* 8 i)) x)))
- (rw.der:decode (rw:reader b)))))
+ (rw.der:next-der (rw:reader b)))))
(defun certificate-r-s (x)
(labels ((rec (x)