Claimed by jackjack!Original message:
I was going to do this myself, but it should be fairly straightforward to implement and I have some other priorities right now. But there has been demand for it, so I'll let someone else take a shot it for me. The string manipulations should be trivial in python.
Goals:
- (1) Create a new message signing algorithm that I can easily wrap with a nice GUI
- (2) It should have three modes:
-
- (a) Bare signatures, compatible with signatures from Bitcoin-Qt/bitcoind
- (b) RFC2440-compatible, ASCII-armored signature blocks (Base64), with the CRC-24
- (c) RFC2440-compatible, ASCII-armored signature blocks (Clearsign)
- (3) It would be neat if the clear-signed messages were somehow compatible with bare signatures: i.e. you could copy the text into Bitcoin-Qt and signature into Bitcoin-Qt and it would verify properly. But I highly doubt that's possible... maybe for simple messages
- (4) Unit-tests that demonstrate dash-escaping, newline behavior, and unicode support
- (5) Be willing to release the copyright of your solution to public domain
The reason I think (3) is not possible is that
Sections 6 and 7 of RFC2440 indicate changing newlines (\n) to Windows newlines (\r\n). And dash-escaping the clear-signed text, but using the original text for signing. I haven't looked too deeply into it, but what I've seen is that it won't be too complicated, just requires some attention to detail. Such as getting CRC-24 coded correctly (also looks simple).
For Base64 encoding: go figure, python has it built-in: "import base64; base64.b64encode(msg), and base64.b64decode(sigBlock)"
This doesn't need to be integrated into the GUI at all. Just have it operate on raw strings, and I will integrate it into the GUI. The GUI would probably have radio buttons that say "Version 0 (Bare Signature/Bitcoin-Qt)", "Version 1 (Base64)", "Version 1 (Clearsign)", and the appropriate signature would be produced for the text that is in the text box (which may include newlines, dashes, and unicode).
Anyone up for the task? [/list][/list]