亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? glue.c

?? Fast and transparent file system and swap encryption package for linux. No source code changes to li
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* *  glue.c * *  Written by Jari Ruusu, December 14 2006 * *  Copyright 2001-2006 by Jari Ruusu. *  Redistribution of this file is permitted under the GNU Public License. */#include <linux/version.h>#include <linux/sched.h>#include <linux/fs.h>#include <linux/string.h>#include <linux/types.h>#include <linux/errno.h>#if LINUX_VERSION_CODE >= 0x20600# include <linux/bio.h># include <linux/blkdev.h>#endif#if LINUX_VERSION_CODE >= 0x20200# include <linux/slab.h># include <linux/loop.h># include <asm/uaccess.h>#else# include <linux/malloc.h># include <asm/segment.h># include "patched-loop.h"#endif#if LINUX_VERSION_CODE >= 0x20400# include <linux/spinlock.h>#endif#include <asm/byteorder.h>#if defined(CONFIG_BLK_DEV_LOOP_PADLOCK) && (defined(CONFIG_X86) || defined(CONFIG_X86_64))# include <asm/processor.h>#endif#include "aes.h"#include "md5.h"#if LINUX_VERSION_CODE >= 0x20600typedef sector_t TransferSector_t;# define LoopInfo_t struct loop_info64#elsetypedef int TransferSector_t;# define LoopInfo_t struct loop_info#endif#if !defined(cpu_to_le32)# if defined(__BIG_ENDIAN)#  define cpu_to_le32(x) ({u_int32_t __x=(x);((u_int32_t)((((u_int32_t)(__x)&(u_int32_t)0x000000ffUL)<<24)|(((u_int32_t)(__x)&(u_int32_t)0x0000ff00UL)<<8)|(((u_int32_t)(__x)&(u_int32_t)0x00ff0000UL)>>8)|(((u_int32_t)(__x)&(u_int32_t)0xff000000UL)>>24)));})# else#  define cpu_to_le32(x) ((u_int32_t)(x))# endif#endif#if LINUX_VERSION_CODE < 0x20200# define copy_from_user(t,f,s) (verify_area(VERIFY_READ,f,s)?(s):(memcpy_fromfs(t,f,s),0))#endif#if !defined(LOOP_MULTI_KEY_SETUP)# define LOOP_MULTI_KEY_SETUP 0x4C4D#endif#if !defined(LOOP_MULTI_KEY_SETUP_V3)# define LOOP_MULTI_KEY_SETUP_V3 0x4C4E#endif#ifdef CONFIG_BLK_DEV_LOOP_KEYSCRUB# define KEY_ALLOC_COUNT  128#else# define KEY_ALLOC_COUNT  64#endiftypedef struct {    aes_context *keyPtr[KEY_ALLOC_COUNT];    unsigned    keyMask;#ifdef CONFIG_BLK_DEV_LOOP_KEYSCRUB    u_int32_t   *partialMD5;    u_int32_t   partialMD5buf[8];    rwlock_t    rwlock;    unsigned    reversed;    unsigned    blocked;    struct timer_list timer;#else    u_int32_t   partialMD5[4];#endif#if defined(CONFIG_BLK_DEV_LOOP_PADLOCK) && (defined(CONFIG_X86) || defined(CONFIG_X86_64))    u_int32_t   padlock_cw_e;    u_int32_t   padlock_cw_d;#endif} AESmultiKey;#if defined(CONFIG_BLK_DEV_LOOP_PADLOCK) && (defined(CONFIG_X86) || defined(CONFIG_X86_64))/* This function allocates AES context structures at special address such *//* that returned address % 16 == 8 . That way expanded encryption and *//* decryption keys in AES context structure are always 16 byte aligned */static void *specialAligned_kmalloc(size_t size, unsigned int flags){    void *pn, **ps;    pn = kmalloc(size + (16 + 8), flags);    if(!pn) return (void *)0;    ps = (void **)((((unsigned long)pn + 15) & ~((unsigned long)15)) + 8);    *(ps - 1) = pn;    return (void *)ps;}static void specialAligned_kfree(void *ps){    if(ps) kfree(*((void **)ps - 1));}# define specialAligned_ctxSize     ((sizeof(aes_context) + 15) & ~15)#else# define specialAligned_kmalloc     kmalloc# define specialAligned_kfree       kfree# define specialAligned_ctxSize     sizeof(aes_context)#endif#ifdef CONFIG_BLK_DEV_LOOP_KEYSCRUBstatic void keyScrubWork(AESmultiKey *m){    aes_context *a0, *a1;    u_int32_t *p;    int x, y, z;    z = m->keyMask + 1;    for(x = 0; x < z; x++) {        a0 = m->keyPtr[x];        a1 = m->keyPtr[x + z];        memcpy(a1, a0, sizeof(aes_context));        m->keyPtr[x] = a1;        m->keyPtr[x + z] = a0;        p = (u_int32_t *) a0;        y = sizeof(aes_context) / sizeof(u_int32_t);        while(y > 0) {            *p ^= 0xFFFFFFFF;            p++;            y--;        }    }    x = m->reversed;    /* x is 0 or 4 */    m->reversed ^= 4;    y = m->reversed;    /* y is 4 or 0 */    p = &m->partialMD5buf[x];    memcpy(&m->partialMD5buf[y], p, 16);    m->partialMD5 = &m->partialMD5buf[y];    p[0] ^= 0xFFFFFFFF;    p[1] ^= 0xFFFFFFFF;    p[2] ^= 0xFFFFFFFF;    p[3] ^= 0xFFFFFFFF;    /* try to flush dirty cache data to RAM */#if !defined(CONFIG_XEN) && (defined(CONFIG_X86_64) || (defined(CONFIG_X86) && !defined(CONFIG_M386) && !defined(CONFIG_CPU_386)))    __asm__ __volatile__ ("wbinvd": : :"memory");#else    mb();#endif}/* called only from loop thread process context */static void keyScrubThreadFn(AESmultiKey *m){    write_lock(&m->rwlock);    if(!m->blocked) keyScrubWork(m);    write_unlock(&m->rwlock);}#if defined(NEW_TIMER_VOID_PTR_PARAM)# define KeyScrubTimerFnParamType void *#else# define KeyScrubTimerFnParamType unsigned long#endifstatic void keyScrubTimerFn(KeyScrubTimerFnParamType);static void keyScrubTimerInit(struct loop_device *lo){    AESmultiKey     *m;    unsigned long   expire;    m = (AESmultiKey *)lo->key_data;    expire = jiffies + HZ;    init_timer(&m->timer);    m->timer.expires = expire;    m->timer.data = (KeyScrubTimerFnParamType)lo;    m->timer.function = keyScrubTimerFn;    add_timer(&m->timer);}/* called only from timer handler context */static void keyScrubTimerFn(KeyScrubTimerFnParamType d){    struct loop_device *lo = (struct loop_device *)d;    extern void loop_add_keyscrub_fn(struct loop_device *, void (*)(void *), void *);    /* rw lock needs process context, so make loop thread do scrubbing */    loop_add_keyscrub_fn(lo, (void (*)(void*))keyScrubThreadFn, lo->key_data);    /* start timer again */    keyScrubTimerInit(lo);}#endifstatic AESmultiKey *allocMultiKey(void){    AESmultiKey *m;    aes_context *a;    int x = 0, n;    m = (AESmultiKey *) kmalloc(sizeof(AESmultiKey), GFP_KERNEL);    if(!m) return 0;    memset(m, 0, sizeof(AESmultiKey));#ifdef CONFIG_BLK_DEV_LOOP_KEYSCRUB    m->partialMD5 = &m->partialMD5buf[0];    rwlock_init(&m->rwlock);    init_timer(&m->timer);    again:#endif    n = PAGE_SIZE / specialAligned_ctxSize;    if(!n) n = 1;    a = (aes_context *) specialAligned_kmalloc(specialAligned_ctxSize * n, GFP_KERNEL);    if(!a) {#ifdef CONFIG_BLK_DEV_LOOP_KEYSCRUB        if(x) specialAligned_kfree(m->keyPtr[0]);#endif        kfree(m);        return 0;    }    while((x < KEY_ALLOC_COUNT) && n) {        m->keyPtr[x] = a;        a = (aes_context *)((unsigned char *)a + specialAligned_ctxSize);        x++;        n--;    }#ifdef CONFIG_BLK_DEV_LOOP_KEYSCRUB    if(x < 2) goto again;#endif    return m;}static void clearAndFreeMultiKey(AESmultiKey *m){    aes_context *a;    int x, n;#ifdef CONFIG_BLK_DEV_LOOP_KEYSCRUB    /* stop scrub timer. loop thread was killed earlier */    del_timer_sync(&m->timer);    /* make sure allocated keys are in original order */    if(m->reversed) keyScrubWork(m);#endif    n = PAGE_SIZE / specialAligned_ctxSize;    if(!n) n = 1;    x = 0;    while(x < KEY_ALLOC_COUNT) {        a = m->keyPtr[x];        if(!a) break;        memset(a, 0, specialAligned_ctxSize * n);        specialAligned_kfree(a);        x += n;    }    memset(m, 0, sizeof(AESmultiKey));    kfree(m);}static int multiKeySetup(struct loop_device *lo, unsigned char *k, int version3){    AESmultiKey *m;    aes_context *a;    int x, y, n, err = 0;    union {        u_int32_t     w[16];        unsigned char b[64];    } un;#if LINUX_VERSION_CODE >= 0x20200    if(lo->lo_key_owner != current->uid && !capable(CAP_SYS_ADMIN))        return -EPERM;#endif    m = (AESmultiKey *)lo->key_data;    if(!m) return -ENXIO;#ifdef CONFIG_BLK_DEV_LOOP_KEYSCRUB    /* temporarily prevent loop thread from messing with keys */    write_lock(&m->rwlock);    m->blocked = 1;    /* make sure allocated keys are in original order */    if(m->reversed) keyScrubWork(m);    write_unlock(&m->rwlock);#endif    n = PAGE_SIZE / specialAligned_ctxSize;    if(!n) n = 1;    x = 0;    while(x < KEY_ALLOC_COUNT) {        if(!m->keyPtr[x]) {            a = (aes_context *) specialAligned_kmalloc(specialAligned_ctxSize * n, GFP_KERNEL);            if(!a) {                err = -ENOMEM;                goto error_out;            }            y = x;            while((y < (x + n)) && (y < KEY_ALLOC_COUNT)) {                m->keyPtr[y] = a;                a = (aes_context *)((unsigned char *)a + specialAligned_ctxSize);                y++;            }        }#ifdef CONFIG_BLK_DEV_LOOP_KEYSCRUB        if(x >= 64) {            x++;            continue;        }#endif        if(copy_from_user(&un.b[0], k, 32)) {            err = -EFAULT;            goto error_out;        }        aes_set_key(m->keyPtr[x], &un.b[0], lo->lo_encrypt_key_size, 0);        k += 32;        x++;    }    m->partialMD5[0] = 0x67452301;    m->partialMD5[1] = 0xefcdab89;    m->partialMD5[2] = 0x98badcfe;    m->partialMD5[3] = 0x10325476;    if(version3) {        /* only first 128 bits of iv-key is used */        if(copy_from_user(&un.b[0], k, 16)) {            err = -EFAULT;            goto error_out;        }#if defined(__BIG_ENDIAN)        un.w[0] = cpu_to_le32(un.w[0]);        un.w[1] = cpu_to_le32(un.w[1]);        un.w[2] = cpu_to_le32(un.w[2]);        un.w[3] = cpu_to_le32(un.w[3]);#endif        memset(&un.b[16], 0, 48);        md5_transform_CPUbyteorder(&m->partialMD5[0], &un.w[0]);        lo->lo_flags |= 0x080000;  /* multi-key-v3 (info exported to user space) */    }    m->keyMask = 0x3F;          /* range 0...63 */    lo->lo_flags |= 0x100000;   /* multi-key (info exported to user space) */    memset(&un.b[0], 0, 32);error_out:#ifdef CONFIG_BLK_DEV_LOOP_KEYSCRUB    /* re-enable loop thread key scrubbing */    write_lock(&m->rwlock);    m->blocked = 0;    write_unlock(&m->rwlock);#endif    return err;}void loop_compute_sector_iv(TransferSector_t devSect, u_int32_t *ivout){    if(sizeof(TransferSector_t) == 8) {        ivout[0] = cpu_to_le32(devSect);        ivout[1] = cpu_to_le32((u_int64_t)devSect>>32);        ivout[3] = ivout[2] = 0;    } else {        ivout[0] = cpu_to_le32(devSect);        ivout[3] = ivout[2] = ivout[1] = 0;    }}void loop_compute_md5_iv_v3(TransferSector_t devSect, u_int32_t *ivout, u_int32_t *data){    int         x;#if defined(__BIG_ENDIAN)    int         y, e;#endif    u_int32_t   buf[16];#if defined(__BIG_ENDIAN)    y = 7;    e = 16;    do {        if (!y) {            e = 12;            /* md5_transform_CPUbyteorder wants data in CPU byte order */            /* devSect is already in CPU byte order -- no need to convert */            if(sizeof(TransferSector_t) == 8) {                /* use only 56 bits of sector number */                buf[12] = devSect;                buf[13] = (((u_int64_t)devSect >> 32) & 0xFFFFFF) | 0x80000000;            } else {                /* 32 bits of sector number + 24 zero bits */                buf[12] = devSect;                buf[13] = 0x80000000;            }            /* 4024 bits == 31 * 128 bit plaintext blocks + 56 bits of sector number */            /* For version 3 on-disk format this really should be 4536 bits, but can't be */            /* changed without breaking compatibility. V3 uses MD5-with-wrong-length IV */            buf[14] = 4024;            buf[15] = 0;        }        x = 0;        do {            buf[x    ] = cpu_to_le32(data[0]);            buf[x + 1] = cpu_to_le32(data[1]);            buf[x + 2] = cpu_to_le32(data[2]);            buf[x + 3] = cpu_to_le32(data[3]);            x += 4;            data += 4;        } while (x < e);        md5_transform_CPUbyteorder(&ivout[0], &buf[0]);    } while (--y >= 0);    ivout[0] = cpu_to_le32(ivout[0]);    ivout[1] = cpu_to_le32(ivout[1]);    ivout[2] = cpu_to_le32(ivout[2]);    ivout[3] = cpu_to_le32(ivout[3]);#else    x = 6;    do {        md5_transform_CPUbyteorder(&ivout[0], data);        data += 16;    } while (--x >= 0);    memcpy(buf, data, 48);    /* md5_transform_CPUbyteorder wants data in CPU byte order */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品国产**网站演员| 国产欧美一区视频| 亚洲一区二区综合| 欧美日韩一本到| 奇米精品一区二区三区四区| 欧美一卡二卡三卡| 裸体歌舞表演一区二区| 精品美女被调教视频大全网站| 91.com在线观看| 秋霞国产午夜精品免费视频| 亚洲精品一区在线观看| 国产成a人无v码亚洲福利| 亚洲人成在线观看一区二区| 欧美巨大另类极品videosbest| 日韩不卡一区二区三区| 在线这里只有精品| 99久久免费精品| 精品国产免费一区二区三区香蕉| 日本人妖一区二区| 欧美日韩国产一区| 国产精品综合一区二区| 亚洲日本青草视频在线怡红院| 在线亚洲欧美专区二区| 首页国产丝袜综合| 久久久99久久| 欧美亚洲高清一区二区三区不卡| 蜜臀av一区二区在线观看| 国产精品麻豆欧美日韩ww| 欧美性极品少妇| 国产mv日韩mv欧美| 丝袜美腿成人在线| 国产精品嫩草影院com| 欧美精品久久天天躁| 久久精品免视看| 亚洲精品在线观看网站| 日本韩国一区二区| 国产乱码精品一区二区三区av| 亚洲综合成人在线视频| 精品久久国产老人久久综合| 91激情在线视频| 国产91富婆露脸刺激对白| 午夜精品成人在线| 国产精品国产三级国产普通话蜜臀| 欧美精品丝袜久久久中文字幕| 成人h动漫精品| 另类中文字幕网| 亚洲高清三级视频| 中文字幕一区二区三区视频| 精品欧美乱码久久久久久| 精品视频123区在线观看| 国产69精品久久久久777| 蜜桃视频一区二区三区在线观看| 一区二区三区四区激情| 久久综合九色欧美综合狠狠| 精品视频在线免费看| 一本色道亚洲精品aⅴ| 丁香婷婷深情五月亚洲| 美女视频第一区二区三区免费观看网站| 亚洲免费在线播放| 国产精品白丝在线| 国产日韩欧美制服另类| 久久亚洲精品小早川怜子| 欧美一卡2卡3卡4卡| 欧美精品精品一区| 欧美日韩在线播放三区四区| 色老汉av一区二区三区| 99riav久久精品riav| 成人国产精品免费观看视频| 国产成人精品亚洲777人妖| 黄色小说综合网站| 另类小说图片综合网| 麻豆传媒一区二区三区| 日本视频免费一区| 日本中文字幕一区二区有限公司| 午夜亚洲国产au精品一区二区| 亚洲精品视频观看| 一区二区三区高清在线| 日韩毛片视频在线看| 亚洲日本丝袜连裤袜办公室| 亚洲乱码一区二区三区在线观看| 日韩美女精品在线| 一区二区在线电影| 亚洲电影你懂得| 偷拍与自拍一区| 麻豆久久一区二区| 精品一区二区在线免费观看| 国产福利一区二区三区视频在线| 国产高清不卡二三区| 99精品国产一区二区三区不卡| 91麻豆文化传媒在线观看| 99久久婷婷国产综合精品| 91国偷自产一区二区三区观看| 欧美日韩久久久久久| 日韩精品一区二区三区视频播放| 久久综合色之久久综合| 国产精品久久久久一区二区三区共| 亚洲欧美色图小说| 偷拍一区二区三区| 韩国三级中文字幕hd久久精品| 成人午夜激情片| 在线亚洲免费视频| 日韩你懂的在线观看| 国产女人18毛片水真多成人如厕| 亚洲女性喷水在线观看一区| 五月激情综合婷婷| 国产69精品一区二区亚洲孕妇| 色综合久久88色综合天天| 91精品国产欧美一区二区18| 久久久久久久久久电影| 亚洲精品写真福利| 麻豆视频观看网址久久| 99久久久国产精品免费蜜臀| 欧美精品tushy高清| 国产色91在线| 亚洲综合成人在线| 国产老肥熟一区二区三区| 色综合一区二区三区| 日韩欧美一级二级三级| 亚洲欧洲www| 久久99精品网久久| 91毛片在线观看| 精品电影一区二区三区 | 中文字幕亚洲欧美在线不卡| 亚洲一区二区三区在线看| 精品系列免费在线观看| 在线观看国产日韩| 国产亚洲精品久| 亚洲成人综合网站| aaa欧美大片| 欧美成人r级一区二区三区| 亚洲图片激情小说| 国产成人精品亚洲777人妖| 69久久夜色精品国产69蝌蚪网 | 国产免费成人在线视频| 亚洲va欧美va人人爽午夜 | 极品少妇一区二区| 欧美三级视频在线播放| 国产精品久久久久久久久免费樱桃| 日本成人在线一区| 日本高清视频一区二区| 国产精品女同互慰在线看| 欧美aⅴ一区二区三区视频| 91福利视频网站| 国产精品视频线看| 国产一区二区免费在线| 91麻豆精品国产91久久久久久久久| 成人免费在线播放视频| 国产福利91精品一区| 欧美va亚洲va在线观看蝴蝶网| 日韩一区欧美二区| 欧美色精品天天在线观看视频| 亚洲美女偷拍久久| 99国产精品久久| 中文字幕日韩欧美一区二区三区| 国产一区二区h| 2023国产精品| 韩日av一区二区| 欧美精品一区二区三区久久久| 日韩精品成人一区二区在线| 欧美日韩国产综合视频在线观看| 亚洲综合成人在线| 在线观看亚洲专区| 亚洲午夜久久久久久久久电影网| 日本高清不卡aⅴ免费网站| 亚洲色图一区二区三区| aaa国产一区| 亚洲欧美日韩国产中文在线| 波多野结衣中文一区| 亚洲国产精品ⅴa在线观看| 成人激情小说网站| 自拍偷拍欧美激情| 91丝袜呻吟高潮美腿白嫩在线观看| 亚洲欧洲精品天堂一级| 色悠悠亚洲一区二区| 亚洲国产毛片aaaaa无费看 | 成人在线综合网站| 国产精品久久久久国产精品日日| 不卡一卡二卡三乱码免费网站| 中文字幕亚洲区| 欧美自拍丝袜亚洲| 日本欧美一区二区三区| 欧美变态tickle挠乳网站| 国产一区三区三区| 国产精品久久一级| 色哟哟在线观看一区二区三区| 香蕉久久夜色精品国产使用方法| 欧美精品日韩精品| 精品午夜一区二区三区在线观看| 国产日韩欧美a| 94-欧美-setu| 天天综合日日夜夜精品| 日韩免费高清电影| av不卡免费电影| 亚洲国产成人av| 久久久精品一品道一区| 91麻豆免费视频| 日本免费新一区视频| 亚洲国产成人午夜在线一区| 欧美视频日韩视频在线观看| 免费高清成人在线|