cl-rw

Layered streams for Common Lisp
git clone https://logand.com/git/cl-rw.git/
Log | Files | Refs

commit 1a4746bddd65ad24eab7fdb7bb3d68f2e0f423b8
parent 0a7018a83ca03cb4438aa203d9a1c6e052cc143a
Author: Tomas Hlavaty <tom@logand.com>
Date:   Sun, 21 Sep 2014 23:27:56 +0200

parse ECPointFormatList extension

Diffstat:
Mtls.lisp | 57++++++++++++++++++++++++++++++++++++++++-----------------
1 file changed, 40 insertions(+), 17 deletions(-)

diff --git a/tls.lisp b/tls.lisp @@ -268,6 +268,12 @@ (defenum %$SignatureHashAlgorithmSignature (:nbits 8) (rsa . 1)) +(defenum $ECPointFormat (:nbits 8) + (uncompressed . 0) + (ansiX962_compressed_prime . 1) + (ansiX962_compressed_char2 . 2) + #+nil(reserved 248..255)) + (defun PublicValueEncoding () ;;'implicit 'explicit) @@ -322,6 +328,25 @@ (defstruc $Certificate () (%$Certificate list :length u24 :min 0 :max #.(1- (expt 2 24)) :size t)) +(defstruc %$ECPointFormatList () + ($ECPointFormat ec_point_format_list :length u8 :min 1 :size t)) + +(defstruc $ECPointFormatList () + (%$ECPointFormatList data :length u16)) + +(defstruc $Extension () + ($ExtensionType type) + ((ecase type + ;;(status_request) + ;;(server_name) + ;;(renegotiation_info) + ;;(SessionTicket_TLS) + ;;(elliptic_curves) + (ec_point_formats $ECPointFormatList) + #+nil(signature_algorithms)) + data) + #+nil(u8 data :length u16 :min 0 :max #.(1- (expt 2 16)) :size t)) + (defstruc $ClientHello () ($ContentVersion #+nil $ProtocolVersion version) ($Random random) @@ -330,19 +355,6 @@ ($CompressionMethod compression_methods :length u8 :min 1 :max #.(1- (expt 2 8)) :size t) ($Extension extensions :length u16 :min 0 :max #.(1- (expt 2 16)) :size t)) -(defstruc $Extension () - ($ExtensionType type) - #+nil - (ecase type - (status_request) - (server_name) - (renegotiation_info) - (SessionTicket_TLS) - (elliptic_curves) - (ec_point_formats) - (signature_algorithms)) - (u8 data :length u16 :min 0 :max #.(1- (expt 2 16)) :size t)) - (defstruc $ServerDHParams () (u8 dh_p :length u16 :min 1 :max #.(1- (expt 2 16))) (u8 dh_g :length u16 :min 1 :max #.(1- (expt 2 16))) @@ -598,18 +610,29 @@ ) :compression_methods (list 'null) :extensions (list + #+nil (make-$Extension :type 'status_request :data '(1 0 0 0 0)) + #+nil (make-$Extension :type 'server_name :data '(0 #x10 0 0 #xd #x77 #x69 #x6b #x69 #x70 #x65 #x64 #x69 #x61 #x2e #x6f #x72 #x67)) + #+nil (make-$Extension :type 'renegotiation_info :data '(0)) + #+nil (make-$Extension :type 'SessionTicket_TLS :data nil) - (make-$Extension :type 'elliptic_curves + #+nil + (make-$Extension :type 'elliptic_curves ;; TODO :data '(0 10 0 #x13 0 #x15 0 #x17 0 #x18 0 #x19)) - (make-$Extension :type 'ec_point_formats - :data '(1 0)) - (make-$Extension :type 'signature_algorithms + (make-$Extension + :type 'ec_point_formats ;; TODO + :data (make-$ECPointFormatList + :data + (make-%$ECPointFormatList + :ec_point_format_list + '(uncompressed)))) + #+nil + (make-$Extension :type 'signature_algorithms ;; TODO :data '(0 #x1a 4 1 4 2 4 3 5 1 5 3 6 1 6 3 3 1 3 2 3 3 2 1 2 2 2 3)))))))) (defun write-client-key-exchange (writer)