void runSuccess2() {
    struct crypt_data data;
    data.initialized = 0;
    char buf[64];
    setkey_r(buf, &data);
    setkey_r(buf, &data);
    data.initialized = 0;
    setkey_r(buf, &data);
}
void testValues() {
    f = 2;
    
    struct crypt_data data;
    data.initialized = 0;
    char buf[64];
    setkey_r(buf, &data);

    //@ assert f == 2;
    //@ assert vacuous: \false;
}
Пример #3
0
 int DES_crypt::des_decrypt(ObString &user_name, int64_t &timestamp, const int64_t skey, char *buffer, int64_t buffer_length)
 {
   int err = OB_SUCCESS;
   if(buffer == NULL || buffer_length != OB_MAX_TOKEN_BUFFER_LENGTH)
   {
     err = OB_INVALID_ARGUMENT;
     TBSYS_LOG(WARN, "invalid argument.err=%d, buffer=%p,buffer_length =%ld", err, buffer, buffer_length);
   }
   if(OB_SUCCESS == err)
   {
     data_.initialized = 0;
     err = stringTobyte(keybyte_, OB_ENRYPT_KEY_BYTE, reinterpret_cast<const char*>(&skey), sizeof(int64_t));
     if(err != OB_SUCCESS)
     {
       TBSYS_LOG(WARN, "fail to stringTobyte. err=%d", err);
     }
     else
     {
       setkey_r(keybyte_, &data_);
     }
   }
   if(OB_SUCCESS == err)
   {
     err = stringTobyte(txtbyte_, OB_ENCRYPT_TXT_BYTE, buffer, buffer_length);
     if(err != OB_SUCCESS)
     {
       TBSYS_LOG(WARN, "fail to tranlate to byte. err=%d", err);
     }
   }
   char *ptr = txtbyte_;
   if(OB_SUCCESS == err)
   {
     for(int64_t i = 0; i < buffer_length * OB_BYTE_NUM; i += OB_CRYPT_UNIT)
     {
       ptr = &txtbyte_[i];
       encrypt_r(ptr, DECODE_FLAG, &data_);
     }
   }
   if(OB_SUCCESS == err)
   {
     err = byteTostring(buffer, buffer_length, txtbyte_, buffer_length * 8);
     if(err != OB_SUCCESS)
     {
       TBSYS_LOG(WARN, "fail to tranlate to string. err=%d", err);
     }
   }
   if(OB_SUCCESS == err)
   {
     int64_t pos = 0;
     int32_t magic_number = *(reinterpret_cast<const int32_t*>(buffer + pos));
     if(magic_number != OB_CRYPT_MAGIC_NUM)
     {
       err = OB_DECRYPT_FAILED;
       TBSYS_LOG(WARN, "magic number not legal.maybe the wrong skey,or the wrong data, err = %d", err);
     }
     else
     {
       pos += sizeof(int32_t);
       int32_t user_name_length = *(reinterpret_cast<const int32_t*>(buffer + pos));
       pos += sizeof(int32_t);
       user_name.assign_ptr(buffer + pos, user_name_length);
       pos += user_name_length;
       timestamp = *(reinterpret_cast<const int64_t*>(buffer + pos));
     }
   }
   return err;
 }
Пример #4
0
 int DES_crypt::des_encrypt(const ObString &user_name, const int64_t timestamp, const int64_t skey, char *buffer, int64_t &buffer_length)
 {
   int err = OB_SUCCESS;
   if(buffer_length <= (int64_t)(sizeof(int64_t) + 2 * sizeof(int32_t) + user_name.length()) || buffer_length % 8 != 0)
   {
     err = OB_INVALID_ARGUMENT;
     TBSYS_LOG(WARN, "invalid argument. buffer_length = %ld, should be 80", buffer_length);
   }
   if(OB_SUCCESS == err)
   {
     if(user_name.length() == 0)
     {
       err = OB_INVALID_ARGUMENT;
       TBSYS_LOG(WARN, "user_name should not be null. user_name.length=%d", user_name.length());
     }
   }
   if(OB_SUCCESS == err)
   {
     data_.initialized = 0;
     err = stringTobyte(keybyte_, OB_ENRYPT_KEY_BYTE, reinterpret_cast<const char*>(&skey), sizeof(int64_t));
     if(err != OB_SUCCESS)
     {
       TBSYS_LOG(WARN, "fail to stringTobyte. err=%d", err);
     }
     else
     {
       setkey_r(keybyte_, &data_);
     }
   }
   int64_t length = 0;
   if(OB_SUCCESS == err)
   {
     length = 2 * sizeof(int32_t)  + sizeof(int64_t) + user_name.length();
     original_txt_length_ = static_cast<int32_t>(length);
     err = pad(txtptr_, OB_MAX_TOKEN_BUFFER_LENGTH, length);
     if(OB_SUCCESS != err)
     {
       TBSYS_LOG(WARN, "fail to pad array. err=%d", err);
     }
   }
   int64_t pos = 0;
   if(OB_SUCCESS == err)
   {
     *(reinterpret_cast<int32_t*>(txtptr_ + pos)) = OB_CRYPT_MAGIC_NUM;
     pos += sizeof(int32_t);
     *(reinterpret_cast<int32_t*>(txtptr_ + pos)) = user_name.length();
     pos += sizeof(int32_t);
     memcpy(txtptr_ + pos, user_name.ptr(), user_name.length());
     pos += user_name.length();
     *(reinterpret_cast<int64_t*>(txtptr_ + pos)) = timestamp;
     pos += sizeof(int64_t);       
   }
   if(OB_SUCCESS == err)
   {
     err = stringTobyte(txtbyte_, OB_ENCRYPT_TXT_BYTE, txtptr_, length);
     if(err != OB_SUCCESS)
     {
       TBSYS_LOG(WARN, "fail to translate string to byte.err=%d", err);
     }
   }  
   if(OB_SUCCESS == err)
   {
     length = length * OB_BYTE_NUM;
     char *ptr = txtbyte_;
     for(int64_t i = 0; i < length; i += OB_CRYPT_UNIT)
     {
       ptr = &txtbyte_[i];
       encrypt_r(ptr, ENCODE_FLAG, &data_);
     }
   }
   if(OB_SUCCESS == err)
   {
     err = byteTostring(buffer, buffer_length, txtbyte_, length);
     if(err != OB_SUCCESS)
     {
       TBSYS_LOG(WARN, "fail to translate to string.err=%d", err);
     }
     else
     {
       buffer_length = length / OB_BYTE_NUM;
     }
   }  
   return err;
 }
void runFailure3() {
    struct crypt_data data;
    char buf[64];
    setkey_r(buf, &data);
}
void runFailure2() {
    struct crypt_data data;
    data.initialized = 0;
    char buf[63];
    setkey_r(buf, &data);
}
void runFailure1() {
    struct crypt_data data;
    data.initialized = 0;
    char buf[64];
    setkey_r(buf, NULL);
}
void runFailure() {
    struct crypt_data data;
    data.initialized = 0;
    char buf[64];
    setkey_r(NULL, &data);
}