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);

    }
示例#2
0
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);
}
示例#3
0
文件: Password.cpp 项目: Dalboz/molap
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]);
   
   
}