diff -urpN JohnTheRipper.orig/src/gpg2john.cpp JohnTheRipper/src/gpg2john.cpp --- JohnTheRipper.orig/src/gpg2john.cpp 2013-04-23 18:50:45.199107751 +0000 +++ JohnTheRipper/src/gpg2john.cpp 2013-04-23 23:14:08.527075057 +0000 @@ -38,7 +38,7 @@ #include #include #include - +#include #include "gpg2john.h" using namespace std; @@ -988,7 +988,7 @@ char *strip_basename(char* filename) return base; } -void key2john(Key &key,char *filename) { +void key2john(Key &key,char *filename, const wchar_t *gecos) { const String2Key &s2k = key.string2Key(); char *base=strip_basename(filename); printf("%s:$gpg$*%d*%d*%d*", base, key.m_algorithm, key.m_datalen, key.bits()); @@ -1010,10 +1010,11 @@ void key2john(Key &key,char *filename) { print_hex((unsigned char*)s2k.m_salt, 8); break; } + if(wcslen(gecos)) + printf(":::%ls",gecos); printf("\n"); } - int process_file(char *filename) { ifstream inStream; inStream.open(filename); @@ -1035,9 +1036,37 @@ int process_file(char *filename) { #endif if(header.type()==PacketHeader::TYPE_SECRET_KEY){ readSecretKey(in,header,key); + //try to read USER ID + wchar_t gecos[256]; + int8_t gecos_buff[1024]; + memset(gecos,0,256*sizeof(wchar_t)); + memset(gecos_buff,0,1024); + try{ + readPacketHeader(in,header); + if(header.type()==PacketHeader::TYPE_USER_ID){ + uint32_t i,idsize=header.length(); + for(i=0;i>gecos_buff[i]; + gecos_buff[i]=0; + const char *p=(char*)gecos_buff; + mbstowcs(gecos,p,256); + + for(i=0;i