+ )))))
+
+(defun mime-edit-sign-smime (beg end boundary)
+ (save-excursion
+ (save-restriction
+ (let* ((ret (progn
+ (narrow-to-region beg end)
+ (mime-edit-translate-region beg end boundary)))
+ (ctype (car ret))
+ (encoding (nth 1 ret))
+ (smime-boundary (concat "smime-sign-" boundary)))
+ (goto-char beg)
+ (insert (format "Content-Type: %s\n" ctype))
+ (if encoding
+ (insert (format "Content-Transfer-Encoding: %s\n" encoding)))
+ (insert "\n")
+ (let (buffer-undo-list)
+ (goto-char (point-min))
+ (while (progn (end-of-line) (not (eobp)))
+ (insert "\r")
+ (forward-line 1))
+ (or (smime-sign-buffer)
+ (throw 'mime-edit-error 'pgp-error)))
+ (goto-char beg)
+ (if (re-search-forward "^Content-Type:\\s-*" nil t)
+ (let* ((start (match-beginning 0))
+ (body (buffer-substring (match-end 0) (std11-field-end))))
+ (delete-region start (line-beginning-position 2))
+ (goto-char beg)
+ (insert "--[[" body "][7bit]]\n")))))))
+
+(defun mime-edit-encrypt-smime (beg end boundary)
+ (save-excursion
+ (save-restriction
+ (let* ((ret (progn
+ (narrow-to-region beg end)
+ (mime-edit-translate-region beg end boundary)))
+ (ctype (car ret))
+ (encoding (nth 1 ret)))
+ (goto-char beg)
+ (insert (format "Content-Type: %s\n" ctype))
+ (if encoding
+ (insert (format "Content-Transfer-Encoding: %s\n" encoding)))
+ (insert "\n")
+ (goto-char (point-min))
+ (while (progn (end-of-line) (not (eobp)))
+ (insert "\r")
+ (forward-line 1))
+ (or (smime-encrypt-buffer)
+ (throw 'mime-edit-error 'pgp-error))
+ (goto-char beg)
+ (if (re-search-forward "^Content-Type:\\s-*" nil t)
+ (let* ((start (match-beginning 0))
+ (body (buffer-substring (match-end 0) (std11-field-end))))
+ (delete-region start (line-beginning-position 2))
+ (goto-char beg)
+ (insert "--[[" body "]]\n")))))))