I hooked up the forward notification and registration in GrowlApplicationController, and started plugging away at it. I fixed a variety of small bugs and moved on to enabling encryption, and proper use of passwords.
Presently I am able to send an encrypted message and registration between two OSX boxes using passwords from the keychain. The changes I made over the last few days are all up in the Default branch of the growl-development repo. I am not able presently to reliably test with Window's (I would have to run it in a vm or something), so I don't know if I broke anything that Rudy already had working with that. I tried to make things friendly for localhost, but it hasn't been tested still.
There will be more on issues in a sec, but this one needs more explanation. CCCrypt is returning error code 4300 invalid parameter every time on decrypt, but the data is coming out . I found one thing online that mentioned this issue claiming that it is the kCCOptionPKCS7Padding option in the decrypt, but not knowing much about cryptography, I thought I should ask a broader audience. I am pretty sure that it is encrypting the data properly, but again, while I can compare two blocks of data, I don't know much about crypto.
There are a number of known issues still:
It might be trying to feed ouroboros, need to do more testing
Passwords updated in the UI are not reflected until a restart of GrowlHelperApp.
Password retrieval without a signed build intermittent (I know, I need to self sign my builds).
Registrations are only forwarded at time of registration
remote registrations will clobber local registrations if two computers have the same app
Error 4300 on decrypt, see above
Proper handling of localhost messages, they don't require security (presently its allowed, but not necessary)
Subscription support is completely unimplemented
fixed so far:
Crash in error statement in retrieving the password for incoming messages
Fixed hashingAlgorithmFromString to use isSupportedHashAlgorithm rather than isSupportedEncryptionAlgorithm
Sending registration now uses our local behavior on missing human readable name, and sets it to the notification name, rather than fail to send a required header
Made Growl_isLikelyIPAddress to use inet_pton to determine whether something is an IPv4 or IPv6
There are some things we should consider design wise, such as possibly having remotely registered apps separated out (an additional field for host name?), how to handle sending registrations (on error of not registered? all locally registered at once on initial setting to forward to that machine?), and how to handle subscriptions.