void setAlias(const char *alias) { iIsMatching=0; iSentToServer=0; if(strncmp(alias, "sip:",4)==0)alias += 4; for(iLen=0;; alias++) { if(alias[0]==0 || alias[0]=='@')break; if(isalnum(alias[0]) || (iLen==0 && alias[0]=='+')) { a[iLen] = alias[0]; iLen++; if(iLen + 1 >= sizeof(a))break; } } a[iLen] = 0; void sha256(unsigned char *data, unsigned int data_length, unsigned char *digest); void bin2Hex(unsigned char *Bin, char * Hex ,int iBinLen); unsigned char hashbin[eHashHexSize/2+1]; sha256((unsigned char *)&a[0], iLen, hashbin); bin2Hex(hashbin,hashhex,eHashHexSize/2); uiCrc = getCRCFnc(hashhex, eHashHexSizeCrc); }
void DigestCalcHA1 ( IN const char *pszAlg, IN const char *pszUserName, IN const char *pszRealm, IN const char *pszPassword, IN const char *pszNonce, IN const char *pszCNonce, OUT Hash_hex_t SessionKey ) { MD5_CTX Md5Ctx; Hash_t HA1; MD5Init (&Md5Ctx); MD5Update (&Md5Ctx, (unsigned char *) pszUserName, strlen (pszUserName)); MD5Update (&Md5Ctx, (unsigned char *) ":", 1); MD5Update (&Md5Ctx, (unsigned char *) pszRealm, strlen (pszRealm)); MD5Update (&Md5Ctx, (unsigned char *) ":", 1); MD5Update (&Md5Ctx, (unsigned char *) pszPassword, strlen (pszPassword)); MD5Final ((unsigned char *) HA1, &Md5Ctx); if ((pszAlg != NULL) && strcasecmp (pszAlg, "md5-sess") == 0) { MD5Init (&Md5Ctx); MD5Update (&Md5Ctx, (unsigned char *) HA1, HASHLEN); MD5Update (&Md5Ctx, (unsigned char *) ":", 1); MD5Update (&Md5Ctx, (unsigned char *) pszNonce, strlen (pszNonce)); MD5Update (&Md5Ctx, (unsigned char *) ":", 1); MD5Update (&Md5Ctx, (unsigned char *) pszCNonce, strlen (pszCNonce)); MD5Final ((unsigned char *) HA1, &Md5Ctx); } bin2Hex (HA1, SessionKey); }
Password &Password::increaseLevel(int level) { if (level < getLevel() || level > MAX_PWD_LEVEL) { throw ErrorException(ErrorException::ERROR_INTERNAL, "invalid hash level requested in Password::getHashed!"); } // only possible level conversion in v 4.0 lvl_0->lvl_1 = plain -> MD5 if (level > getLevel()) { unsigned char omd5buf[MD5_DIGEST_LENGTH]; MD5((const unsigned char *)password.c_str(), password.size(), omd5buf); hashLevel++; password = "******"+StringUtils::convertToString(hashLevel)+"\t"+bin2Hex((const unsigned char *)omd5buf, sizeof(omd5buf)); } return *this; }
void initDevID(){ static int iInitOk=0; if(iInitOk)return; iInitOk=1; memset(bufDevID,0,sizeof(bufDevID)); #if 0 //depricated 6.0 NSString *n = [[UIDevice currentDevice]uniqueIdentifier]; const char *pn=n.UTF8String; #else int iDevIdLen=0; char fn[1024]; snprintf(fn,sizeof(fn)-1, "%s/devid-hex.txt", getFileStorePath()); char *pn=loadFile(fn, iDevIdLen); if(!pn || iDevIdLen<=0){ pn=&bufDevID[0]; FILE *f=fopen("/dev/urandom","rb"); if(f){ unsigned char buf[T_MAX_DEV_ID_LEN_BIN+1]; fread(buf,1,T_MAX_DEV_ID_LEN_BIN,f); fclose(f); void bin2Hex(unsigned char *Bin, char * Hex ,int iBinLen); bin2Hex(buf, bufDevID, T_MAX_DEV_ID_LEN_BIN); bufDevID[T_MAX_DEV_ID_LEN]=0; saveFile(fn, bufDevID, T_MAX_DEV_ID_LEN); setFileAttributes(fn,0); } } #endif void safeStrCpy(char *dst, const char *name, int iMaxSize); safeStrCpy(&bufDevID[0],pn,sizeof(bufDevID)-1); int calcMD5(unsigned char *p, int iLen, char *out); calcMD5((unsigned char*)pn,strlen(pn),&bufMD5[0]); }