To get encrypted swsusp to work, try this:

cryptosuspend:
#!/bin/bash
PASSPHRASE=`cat /dev/urandom | uuenpipe | head -3 | tail -1`
echo $PASSPHRASE | gpg -e -r Suspendkey > /tmp/swsusp.Suspendkey
# gpg-keygen, call the key 'Suspendkey'. Provide passphrase you want to use as resume password.
echo $PASSPHRASE | ./suspend -p /dev/hda1

cryptoresume:
#!/bin/bash
echo 'passphrase' | gpg -d -r Suspendkey --passphrase-fd 0 /tmp/swsusp.Suspendkey | ./resume -p /dev/hda1

Known problems with freezer:

1) stress -d 5 --hdd-bytes 100M -i 5 -c 5 

breaks it most of the time.

2) mysqld breaks it.

https://bugzilla.novell.com/show_bug.cgi?id=71076

This simple program should demonstrate the bug

#include <signal.h>
#include <errno.h>
#include <stdlib.h>

int main(int argc,char ** argv){
sigset_t set;
int sig;
sigemptyset(&set);
sigprocmask(SIG_BLOCK,&set,NULL);
while(sigwait(&set,&sig)==EINTR);
return 0;
}
