⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bcreencrypt.c

📁 BestCrypt开源加密原代码
💻 C
📖 第 1 页 / 共 2 页
字号:
                    close(fd);                    free(buff);                    return FALSE;                }                break;            case 2:                if ( state.dir == -1 )state.WritePos-=state.BuffSize;                if ( WriteContFile(fd,buff)==-1 )                {                    msg(stderr,"Can not write data to container\n");                    close(fd);                    free(buff);                    return FALSE;                }                if ( state.dir==0 ) state.step=3;                else state.step=1;                if ( state.dir ==  1 )state.WritePos+=state.BuffSize;                if ( WriteStatFiles()==FALSE )                {                    msg(stderr,"Can not write stat files\n");                    close(fd);                    free(buff);                    return FALSE;                }                break;            case 3:                if ( ftruncate(fd,state.NewContSize)==-1 )                {                    msg(stderr,"Can not truncate container file\n");                }                close(fd);                if ( ReadStatFile(fnheader2,buff,state.NewDataOffset)==FALSE )                {                    msg(stderr,"Can not read header file\n");                    free(buff);                    return FALSE;                }                if ( WriteStatFile(ContName,buff,state.NewDataOffset)==FALSE )                {                    msg(stderr,"Can not write header\n");                    free(buff);                    return FALSE;                }                state.step=4;                state.WritePos=state.NewContSize;                break;            default:                msg(stderr,"Unexpected state\n");                free(buff);                return FALSE;        }            if ( o_verbose )        {            t=time(NULL);            pr= (int)((long long)state.WritePos*100/state.NewContSize);            if ( t != ot )            {                msg(stdout,"%10ld/%ld Mb (%3d%%)\r",(unsigned long)state.WritePos>>20, (unsigned long)state.NewContSize>>20,pr);                ot=t;                opr=pr;            }            else if ( pr != opr )            {                msg(stdout,"%10ld/%ld Mb (%3d%%)\r",(unsigned long)state.WritePos>>20, (unsigned long)state.NewContSize>>20,pr);                opr=pr;            }        }    } while ( state.step!=4 );    if ( o_verbose )        msg(stdout,"\n");    free(buff);    return TRUE;}int bcreencrypt (int argc, char ** argv){    struct HiddenSector  hs;    int fd;    DWORD DataSize, _offset;    DATA_BLOCK *pdb,db;    alg_info *AlgInf;    char device[MAX_DEV_PATH];    if ( argc < 2 )    {        msg(stderr,"Please specify container name\n");        return -1;    }    else if ( argc > 2 )    {        msg(stderr,"Too many parameters\n");        return -1;    }    if ( PrepareFileNames(argv[1])==FALSE )    {        msg(stderr,"Can not prepare  file names\n");        return -1;    }    SetSignalHandlers(ReencryptSignalHandler);    if ( WasInterrupted(argv[1])==TRUE )    {        msg(stdout,"Reencryption process was interrupted\nRestoring reencryption...\n");        //Restoring reencryption        if ( (AlgOld.bc_fd = open_bc_dev(device, 0)) < 0 )        {            msg(stderr,"open(\"%s\"): %s\n",device,strerror(errno));            return -1;        }        //reading old header        if ( (fd = open(fnheader1, O_RDONLY)) < 0 )        {            msg(stderr,"open(\"%s\",O_RDONLY): %s\n",fnheader1,strerror(errno));            close(AlgOld.bc_fd);            return -1;        }        if ( read(fd, &hs, sizeof(hs))!=sizeof(hs) )        {            msg(stderr,"read(\"%s\", &hs, sizeof(hs))): %s\n",fnheader1,strerror(errno));            close(fd);            close(AlgOld.bc_fd);            return -1;        }        if ( read(fd, &db, sizeof (db))!=sizeof(db) )        {            msg(stderr,"read(\"%s\", &db, sizeof(db))): %s\n",fnheader1,strerror(errno));            close(fd);            close(AlgOld.bc_fd);            return -1;        }        close(fd);        if ( (AlgInf=GetInfoById(hs.algorithmId))==NULL )        {            msg(stderr,"Unknown old algorithm Id: %d\n",hs.algorithmId);            close(AlgOld.bc_fd);            return -1;        }        AlgOld.alg_id=hs.algorithmId;        AlgOld.alg_module =AlgInf->mod_name;        pdb = &db;        DataSize = sizeof(db);        if (KGSHA256_ID == hs.keyGenId)        {            UseSha256();        }        CreateKeyHandle(AlgOld,AlgInf->key_size,NULL,"Enter old password:",CFLAG_VERIFY_AND_LOAD_KEY,(BYTE **)&pdb,&DataSize,&KeyHandleOld,&Error);        if ( Error!=0 )        {            print_error(Error);            close(AlgOld.bc_fd);            return -1;        }        // reading new header        if ( (fd = open(fnheader2, O_RDONLY)) < 0 )        {            msg(stderr,"open(\"%s\", O_RDONLY): %s\n",fnheader2,strerror(errno));            close(AlgOld.bc_fd);            return -1;        }        if ( read(fd, &hs, sizeof(hs))!=sizeof(hs) )        {            msg(stderr,"read(\"%s\", &hs, sizeof(hs)): %s\n",fnheader2,strerror(errno));            close(fd);            close(AlgOld.bc_fd);            return -1;        }        if ( read(fd, &db, sizeof (db))!=sizeof(db) )        {            msg(stderr,"read(\"%s\", &db, sizeof(db)): %s\n",fnheader2,strerror(errno));            close(fd);            close(AlgOld.bc_fd);            return -1;        }        close(fd);        if ( (AlgInf=GetInfoById(hs.algorithmId))==NULL )        {            msg(stderr,"Unknown algorithm Id %d in container file\n",hs.algorithmId);            close(AlgOld.bc_fd);            return -1;        }        AlgNew.alg_id=hs.algorithmId;        AlgNew.alg_module =AlgInf->mod_name;        AlgNew.bc_fd=AlgOld.bc_fd;        pdb = &db;        DataSize = sizeof(db);        CreateKeyHandle(AlgNew,AlgInf->key_size,NULL,"Enter new password:",CFLAG_VERIFY_AND_LOAD_KEY,(BYTE **)&pdb,&DataSize,&KeyHandleNew,&Error);        if ( Error!=0 )        {            print_error(Error);            close(AlgOld.bc_fd);            return -1;        }        // end of restoring    }    else    {        if ( o_alg==NULL )        {            msg(stderr,"Algorithm name is not specified\n");            close(AlgOld.bc_fd);            return -1;        }        if ( is_valid_container(argv[1])==FALSE )        {            msg(stderr,"%s - is not valid container\n",argv[1]);            close(AlgOld.bc_fd);            return -1;        }        if ( (AlgOld.bc_fd = open_bc_dev(device,0)) < 0 )        {            msg(stderr,"Can not open %s: %s\n", device,strerror(errno));            close(AlgOld.bc_fd);            return -1;        }        if ( (fd = open(argv[1], O_RDONLY|O_LARGEFILE)) < 0 )        {            msg(stderr,"Can not open %s: %s\n", argv[1],strerror(errno));            close(AlgOld.bc_fd);            return -1;        }        if ( read(fd, &hs, sizeof(hs))!=sizeof(hs) )        {            msg(stderr,"read(\"%s\",&hs, sizeof(hs)): %s\n",argv[1],strerror(errno));            close(fd);            close(AlgOld.bc_fd);            return -1;        }        if ('B' == hs.br.jmpCode[0])        {            msg(stderr,                "WARNING! Container \"%s\" is probably in use!\n\n"                "Two reasons for the report are possible:\n"                "    1. The container is already mounted. In this case do not use the container\n"                "    until someone dismounts it.\n"                "    2. The container was not unmounted properly last time, so a lock mask \n"                "    for the container was not reset. If so, unlock the container by running the command:\n"                "        \"bctool unlock %s\" \n\n",                argv[1],argv[1]);            return -1;        }        if ( read(fd, &db, sizeof (db))!=sizeof(db) )        {            msg(stderr,"read(\"%s\",&db, sizeof(db)): %s\n",argv[1],strerror(errno));            close(fd);            close(AlgOld.bc_fd);            return -1;        }        close(fd);        if ( (AlgInf=GetInfoById(hs.algorithmId))==NULL )        {            msg(stderr,"Unknown algorithm Id %d in container file\n",hs.algorithmId);            return -1;        }        AlgOld.alg_id=hs.algorithmId;        AlgOld.alg_module =AlgInf->mod_name;        pdb = &db;        DataSize = sizeof(db);                if (KGSHA256_ID == hs.keyGenId)        {            UseSha256();        }        CreateKeyHandleEx(AlgOld,                          AlgInf->key_size,                          NULL,                          "Enter old password:",                          CFLAG_VERIFY_AND_LOAD_KEY,                          (BYTE **)&pdb,                          &DataSize,                          &KeyHandleOld,                          &Error,                          &_offset);        if ( Error!=0 )        {            print_error(Error);            FreeFileNames();            close(AlgOld.bc_fd);            return -1;        }        if (_offset)        {            msg(stderr,"Sorry, hidden part reencryption is prohibited\n");            FreeFileNames();            close(AlgOld.bc_fd);            return -1;        }        if ( (AlgInf=GetInfoByName(o_alg))==NULL )        {            msg(stderr,"Unknown new algorithm - %s\n",o_alg);            close(AlgOld.bc_fd);            FreeFileNames();            return -1;        }        AlgNew.alg_id=AlgInf->id;        AlgNew.alg_module =AlgInf->mod_name;        AlgNew.bc_fd=AlgOld.bc_fd;        CreateKeyHandle(AlgNew,AlgInf->key_size,NULL,"Enter new password:",CFLAG_CREATE_WITH_SINGLE_PASSWORD,(BYTE **)&pdb,&DataSize,&KeyHandleNew,&Error);        if ( Error!=0 )        {            print_error(Error);            FreeFileNames();            close(AlgOld.bc_fd);            return -1;        }        if ( init(argv[1],(char *)pdb,DataSize,hs.keyGenId,AlgInf->id)==FALSE )        {            msg(stderr,"Can not init reencryption process\n");            FreeKeyHandle(AlgOld,KeyHandleOld);            FreeKeyHandle(AlgNew,KeyHandleNew);            FreeFileNames();            close(AlgOld.bc_fd);            return -1;        }    }    if ( MoveData(argv[1])==FALSE )    {        msg(stderr,"Reencryption error\n");        FreeKeyHandle(AlgNew,KeyHandleNew);        FreeKeyHandle(AlgOld,KeyHandleOld);        FreeFileNames();        close(AlgOld.bc_fd);        return -1;    }    FreeKeyHandle(AlgNew,KeyHandleNew);    FreeKeyHandle(AlgOld,KeyHandleOld);    if ( UnlinkStatFiles()==-1 )    {        msg(stderr,"Can not remove temporary files: %s\nPlease remove them manualy\n",strerror(errno));    }    FreeFileNames();    close(AlgOld.bc_fd);    return 0;} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -