← All posts tagged gpg

a13
ололо code gpg xep
если верить http://xmpp.org/extensions/xep-0027.html, то "All program output is US-ASCII armored output with the headers removed. ", думаю, а как же тогда декриптовать? Выше реализовал через отрезание лишнего, base64 декодирование и скармливание в сыром виде. Работает. Стало интересно, как бы сделать красиво, посмотрел код Pidgin-GPG
static char* str_armor(const char* unarmored)
{
	char* header = "-----BEGIN PGP SIGNATURE-----\n\n";
	char* footer = "\n-----END PGP SIGNATURE-----";

	char* buffer = malloc(strlen(header)+strlen(footer)+strlen(unarmored)+1);
	strcpy(buffer, header);
	strcat(buffer, unarmored);
	strcat(buffer, footer);
	return buffer;
}

///_\\\
a13
Emacs gpg jabber.el Ну шо, поцоны, на приём работает:

(defun jabber-chat-print-encrypted (xml-data who mode)
"Decrypts and prints encrypted message"
(let ((foundp nil))
(dolist (x (jabber-xml-node-children xml-data))
(when (and (listp x) (eq (jabber-xml-node-name x) 'x)
(string= (jabber-xml-get-xmlns x) "jabber:x:encrypted"))
(setq foundp t)

(when (eql mode :insert)
(let* ((enc-b64-multi (car (split-string (caddr x) "\n=")))
(enc-b64 (replace-regexp-in-string "\n" "" enc-b64-multi))
(enc (base64-decode-string enc-b64))
(context (epg-make-context epa-protocol))
(dec (epg-decrypt-string context enc)))
(insert "\n"
(jabber-propertize
"encrypted message: " 'face 'jabber-chat-prompt-system)
(format "%s" (jabber-unhex dec)))))))
foundp))

Немного переусложнённо, но блин, спасибо XEP-ам

Чтобы постоянно не спрашивал пароли — gpg-agent в помощь
a13
Emacs gpg jabber.el Пока как-то так:
(add-to-list 'jabber-chat-printers 'jabber-chat-print-encrypted)
(defun jabber-chat-print-encrypted (xml-data who mode)
"Print encrypted part of the message "
(message "detect encrypted")
(let ((foundp nil))
(dolist (x (jabber-xml-node-children xml-data))
(when (and (listp x) (eq (jabber-xml-node-name x) 'x)
(string= (jabber-xml-get-xmlns x) "jabber:x:encrypted"))
(setq foundp t)

(when (eql mode :insert)
(let ((enc (caddr x)))
(insert "\n"
(jabber-propertize
"encrypted message: " 'face 'jabber-chat-prompt-system)
(format "%s" enc))))))
foundp))

осталось декриптануть