anchor.diff:      :int
     (asn1-string :pointer))
   
  -(cffi:defcfun ("strlen" strlen)
  -    :int
  -  (string :string))
  -
  -(cffi:defcfun (memcpy "memcpy") :pointer
  -  (dest :pointer)
  -  (src  :pointer)
  -  (count :int))
  -
   (cffi:defcstruct asn1_string_st
     (length :int)
     (type :int)
     (data :pointer)
     (flags :long))
  -
   
   #|
   ASN1 string validation references:
  
positive.code: 
  (defmethod decode-asn1-string (asn1-string (type (eql #.+v-asn1-utf8string+)))
    (let* ((data (asn1-string-data asn1-string))
           (length (asn1-string-length asn1-string))
           (strlen (strlen data)))
      (if (= strlen length)
          (cffi:foreign-string-to-lisp data)
          (error 'invalid-asn1-string :type '+v-asn1-utf8string+))))
  
  (defmethod decode-asn1-string (asn1-string (type (eql #.+v-asn1-universalstring+)))
    (if (= 0 (mod (asn1-string-length asn1-string) 4))
  
negative.code: (defgeneric decode-asn1-string (asn1-string type))
  
  (defun copy-bytes-to-lisp-vector (src-ptr vector count)
    (declare (type (simple-array (unsigned-byte 8)) vector)
             (type fixnum count)
             (optimize (safety 0) (debug 0) (speed 3)))
    (dotimes (i count vector)
      (setf (aref vector i) (cffi:mem-aref src-ptr :unsigned-char i))))
  
  (defun asn1-string-bytes-vector (asn1-string)
    (let* ((data (asn1-string-data asn1-string))
  