亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 1396 | 回復: 0
打印 上一主題 下一主題

linux內(nèi)核加密框架 [復制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2009-06-15 09:46 |只看該作者 |倒序瀏覽
Linux內(nèi)核支持很多加密算法,包括對稱加密算法,如AES;摘要算法,如sha1,md5;壓縮算法,如deflate。不過內(nèi)核好像不支持非對稱加密算法。這些算法作為加密函數(shù)框架的最底層,提供加密和解密的實際操作。這些函數(shù)可以在內(nèi)核crypto文件夾下,相應的文件中找到。不過內(nèi)核模塊不能直接調(diào)用這些函數(shù),因為它們并沒有export。內(nèi)核提供一個統(tǒng)一的框架,來管理這些算法。加密算法通過crypto_register_alg()和crypto_unregister_alg()注冊。內(nèi)核將加密算法分為三類,1)cipher,2)compress,3)digest。加密函數(shù)框架中有相應的API封裝,提供給模塊調(diào)用。
對于使用這些加密函數(shù),首先通過crypto_alloc_tfm()來分配一個加密函數(shù)對象的實例。初始化這些實例,然后就可以通過框架提供的API對數(shù)據(jù)進行加密和解密。完成以后,必須通過crypto_free_tfm()撤銷實例。
下面是幾個代碼,或許能夠夠?qū)?nèi)核的加密框架有更直觀的了解:
1)digest算法(sha1)
[color="#000000"]#[color="#ff0000"]include [color="#0000cc"]
[color="#0000cc"]#[color="#ff0000"]include [color="#0000cc"]
[color="#0000cc"]#[color="#ff0000"]include [color="#0000cc"]
[color="#0000cc"]#[color="#ff0000"]include [color="#0000cc"]
[color="#0000cc"]#[color="#ff0000"]include [color="#0000cc"]
[color="#0000cc"]#[color="#ff0000"]include [color="#0000cc"]
[color="#0000cc"]#[color="#ff0000"]include [color="#0000cc"]
[color="#0000cc"]#[color="#ff0000"]include [color="#0000cc"]
[color="#0000ff"]struct crypto_tfm [color="#0000cc"]*tfm[color="#0000cc"];
[color="#0000ff"]struct scatterlist sg[color="#0000cc"][1[color="#0000cc"]][color="#0000cc"];
[color="#0000ff"]char [color="#0000cc"]* code1 [color="#0000cc"]= [color="#ff00ff"]"2ew34123132513451345"[color="#0000cc"];
[color="#0000ff"]char [color="#0000cc"]* code2 [color="#0000cc"]= [color="#ff00ff"]"234123132513451345"[color="#0000cc"];
[color="#0000ff"]char [color="#0000cc"]*do_digest[color="#0000cc"]([color="#0000ff"]char [color="#0000cc"]* code[color="#0000cc"]) [color="#0000cc"]{
    [color="#0000ff"]char [color="#0000cc"]*result[color="#0000cc"];
    [color="#0000ff"]int code_len [color="#0000cc"]= [color="#ff0000"]strlen[color="#0000cc"](code[color="#0000cc"])[color="#0000cc"];
   
        tfm [color="#0000cc"]= crypto_alloc_tfm[color="#0000cc"]([color="#ff00ff"]"sha1"[color="#0000cc"],0[color="#0000cc"])[color="#0000cc"];
        [color="#0000ff"]if[color="#0000cc"](IS_ERR[color="#0000cc"](tfm[color="#0000cc"])[color="#0000cc"])
                [color="#0000ff"]return 0[color="#0000cc"];
        sg_init_one[color="#0000cc"](sg[color="#0000cc"],code[color="#0000cc"],code_len[color="#0000cc"])[color="#0000cc"];
        crypto_digest_init[color="#0000cc"](tfm[color="#0000cc"])[color="#0000cc"];
        crypto_digest_update[color="#0000cc"](tfm[color="#0000cc"],sg[color="#0000cc"],1[color="#0000cc"])[color="#0000cc"];
    result [color="#0000cc"]= [color="#0000cc"]([color="#0000ff"]char [color="#0000cc"]*[color="#0000cc"])kmalloc[color="#0000cc"]([color="#0000ff"]sizeof[color="#0000cc"]([color="#0000ff"]char[color="#0000cc"])[color="#0000cc"]*50[color="#0000cc"],GFP_KERNEL[color="#0000cc"])[color="#0000cc"];
[color="#0000cc"]    if(result == NULL) {
[color="#0000cc"]        crypto_free_tfm(tfm);
[color="#0000cc"]        return 0;
[color="#0000cc"]    }[color="#000000"]
    memset[color="#0000cc"](result[color="#0000cc"],0[color="#0000cc"],[color="#0000ff"]sizeof[color="#0000cc"]([color="#0000ff"]char[color="#0000cc"])[color="#0000cc"]*50[color="#0000cc"])[color="#0000cc"];
    crypto_digest_final[color="#0000cc"](tfm[color="#0000cc"],result[color="#0000cc"])[color="#0000cc"];
        crypto_free_tfm[color="#0000cc"](tfm[color="#0000cc"])[color="#0000cc"];
    [color="#0000ff"]return result[color="#0000cc"];
[color="#0000cc"]}
[color="#0000ff"]static [color="#0000ff"]int __init test_init[color="#0000cc"]([color="#0000ff"]void[color="#0000cc"])
[color="#0000cc"]{
    [color="#0000ff"]char [color="#0000cc"]*result1[color="#0000cc"],[color="#0000cc"]*result2[color="#0000cc"];
    result1 [color="#0000cc"]= do_digest[color="#0000cc"](code1[color="#0000cc"])[color="#0000cc"];
    [color="#0000ff"]if[color="#0000cc"]([color="#0000cc"]!result1[color="#0000cc"])
        [color="#0000ff"]goto failed2[color="#0000cc"];
    result2 [color="#0000cc"]= do_digest[color="#0000cc"](code2[color="#0000cc"])[color="#0000cc"];
    [color="#0000ff"]if[color="#0000cc"]([color="#0000cc"]!result2[color="#0000cc"])
        [color="#0000ff"]goto failed1[color="#0000cc"];
   
    [color="#0000ff"]if[color="#0000cc"]([color="#ff0000"]memcmp[color="#0000cc"](result1[color="#0000cc"],result2[color="#0000cc"],50[color="#0000cc"]) [color="#0000cc"]![color="#0000cc"]= 0[color="#0000cc"])
        printk[color="#0000cc"]([color="#ff00ff"]"code1 != code2\n"[color="#0000cc"])[color="#0000cc"];
    [color="#0000ff"]else
        printk[color="#0000cc"]([color="#ff00ff"]"code1 == code2\n"[color="#0000cc"])[color="#0000cc"];
    kfree[color="#0000cc"](result2[color="#0000cc"])[color="#0000cc"];
[color="#000000"]failed1:
    kfree[color="#0000cc"](result1[color="#0000cc"])[color="#0000cc"];
failed2[color="#0000cc"]:
    [color="#0000ff"]return 0[color="#0000cc"];
[color="#0000cc"]}
[color="#0000ff"]static [color="#0000ff"]void __exit test_exit[color="#0000cc"]([color="#0000ff"]void[color="#0000cc"])
[color="#0000cc"]{
[color="#0000cc"]}
module_init[color="#0000cc"](test_init[color="#0000cc"])[color="#0000cc"];
module_exit[color="#0000cc"](test_exit[color="#0000cc"])[color="#0000cc"];
MODULE_LICENSE[color="#0000cc"]([color="#ff00ff"]"GPL"[color="#0000cc"])[color="#0000cc"];
MODULE_AUTHOR[color="#0000cc"]([color="#ff00ff"]"richardhesidu@chinaunix"[color="#0000cc"])[color="#0000cc"];
2)compress算法(deflate)
[color="#000000"]#[color="#ff0000"]include [color="#0000cc"]
[color="#0000cc"]#[color="#ff0000"]include [color="#0000cc"]
[color="#0000cc"]#[color="#ff0000"]include [color="#0000cc"]
[color="#0000cc"]#[color="#ff0000"]include [color="#0000cc"]
[color="#0000cc"]#[color="#ff0000"]include [color="#0000cc"]
[color="#0000cc"]#[color="#ff0000"]include [color="#0000cc"]
[color="#0000cc"]#[color="#ff0000"]include [color="#0000cc"]
[color="#0000cc"]#[color="#ff0000"]include [color="#0000cc"]
[color="#0000ff"]struct crypto_tfm [color="#0000cc"]*tfm[color="#0000cc"];
[color="#0000ff"]char [color="#0000cc"]* code [color="#0000cc"]= [color="#ff00ff"]"Hello everyone, I'm richardhesidu from chinaunix.net !"[color="#0000cc"];
[color="#0000ff"]static [color="#0000ff"]inline  [color="#0000ff"]void hexdump[color="#0000cc"]([color="#0000ff"]unsigned [color="#0000ff"]char [color="#0000cc"]*buf[color="#0000cc"],[color="#0000ff"]unsigned [color="#0000ff"]int len[color="#0000cc"]) [color="#0000cc"]{
    [color="#0000ff"]while[color="#0000cc"](len[color="#0000cc"]-[color="#0000cc"]-[color="#0000cc"])
        printk[color="#0000cc"]([color="#ff00ff"]"0x%02x,"[color="#0000cc"],[color="#0000cc"]*buf[color="#0000cc"]+[color="#0000cc"]+[color="#0000cc"])[color="#0000cc"];
    printk[color="#0000cc"]([color="#ff00ff"]"\n"[color="#0000cc"])[color="#0000cc"];
[color="#0000cc"]}
[color="#0000ff"]static [color="#0000ff"]int __init test_init[color="#0000cc"]([color="#0000ff"]void[color="#0000cc"]) [color="#0000cc"]{
    [color="#0000ff"]int ret[color="#0000cc"],result_len[color="#0000cc"],temp_len[color="#0000cc"];
    [color="#0000ff"]char result[color="#0000cc"][512[color="#0000cc"]][color="#0000cc"];
    [color="#0000ff"]char temp[color="#0000cc"][512[color="#0000cc"]][color="#0000cc"];
    printk[color="#0000cc"]([color="#ff00ff"]"%s\n"[color="#0000cc"],code[color="#0000cc"])[color="#0000cc"];   
   
    [color="#ff9900"]/* Allocate transform for deflate */
            
    tfm [color="#0000cc"]= crypto_alloc_tfm[color="#0000cc"]([color="#ff00ff"]"deflate"[color="#0000cc"],0[color="#0000cc"])[color="#0000cc"];
        [color="#0000ff"]if[color="#0000cc"](IS_ERR[color="#0000cc"](tfm[color="#0000cc"])[color="#0000cc"]) [color="#0000cc"]{
        printk[color="#0000cc"]([color="#ff00ff"]"failed to load transform for deflate !\n"[color="#0000cc"])[color="#0000cc"];
                [color="#0000ff"]return 0[color="#0000cc"];
    [color="#0000cc"]}
    [color="#ff0000"]memset[color="#0000cc"](result[color="#0000cc"],0[color="#0000cc"],[color="#0000ff"]sizeof[color="#0000cc"](result[color="#0000cc"])[color="#0000cc"])[color="#0000cc"];
    temp_len [color="#0000cc"]= 512[color="#0000cc"];
    ret [color="#0000cc"]= crypto_comp_compress[color="#0000cc"](tfm[color="#0000cc"],code[color="#0000cc"],[color="#ff0000"]strlen[color="#0000cc"](code[color="#0000cc"])[color="#0000cc"],temp[color="#0000cc"],[color="#0000cc"]&temp_len[color="#0000cc"])[color="#0000cc"];
    [color="#0000ff"]if[color="#0000cc"](ret[color="#0000cc"]) [color="#0000cc"]{
        printk[color="#0000cc"]([color="#ff00ff"]"failed to compress !\n"[color="#0000cc"])[color="#0000cc"];
        [color="#0000ff"]return 0[color="#0000cc"];
    [color="#0000cc"]}
      
    hexdump[color="#0000cc"](temp[color="#0000cc"],[color="#ff0000"]strlen[color="#0000cc"](temp[color="#0000cc"])[color="#0000cc"])[color="#0000cc"];
   
    [color="#ff0000"]memset[color="#0000cc"](result[color="#0000cc"],0[color="#0000cc"],[color="#0000ff"]sizeof[color="#0000cc"](result[color="#0000cc"])[color="#0000cc"])[color="#0000cc"];
    result_len [color="#0000cc"]= 512[color="#0000cc"];
    ret [color="#0000cc"]= crypto_comp_decompress[color="#0000cc"](tfm[color="#0000cc"],temp[color="#0000cc"],[color="#ff0000"]strlen[color="#0000cc"](temp[color="#0000cc"])[color="#0000cc"],result[color="#0000cc"],[color="#0000cc"]&result_len[color="#0000cc"])[color="#0000cc"];
    [color="#0000ff"]if[color="#0000cc"](ret[color="#0000cc"]) [color="#0000cc"]{
                printk[color="#0000cc"]([color="#ff00ff"]"failed to decompress !\n"[color="#0000cc"])[color="#0000cc"];
                [color="#0000ff"]return 0[color="#0000cc"];
        [color="#0000cc"]}
    printk[color="#0000cc"]([color="#ff00ff"]"%s\n"[color="#0000cc"],result[color="#0000cc"])[color="#0000cc"];
    [color="#0000ff"]if[color="#0000cc"]([color="#ff0000"]memcmp[color="#0000cc"](code[color="#0000cc"],result[color="#0000cc"],[color="#ff0000"]strlen[color="#0000cc"](code[color="#0000cc"])[color="#0000cc"]) [color="#0000cc"]![color="#0000cc"]= 0[color="#0000cc"])
        printk[color="#0000cc"]([color="#ff00ff"]"decompressed was not successful\n"[color="#0000cc"])[color="#0000cc"];
    [color="#0000ff"]else
        printk[color="#0000cc"]([color="#ff00ff"]"decompressed was successful\n"[color="#0000cc"])[color="#0000cc"];
           crypto_free_tfm[color="#0000cc"](tfm[color="#0000cc"])[color="#0000cc"];
    [color="#0000ff"]return 0[color="#0000cc"];
[color="#0000cc"]}
[color="#0000ff"]static [color="#0000ff"]void __exit test_exit[color="#0000cc"]([color="#0000ff"]void[color="#0000cc"])
[color="#0000cc"]{
[color="#0000cc"]}
module_init[color="#0000cc"](test_init[color="#0000cc"])[color="#0000cc"];
module_exit[color="#0000cc"](test_exit[color="#0000cc"])[color="#0000cc"];
MODULE_LICENSE[color="#0000cc"]([color="#ff00ff"]"GPL"[color="#0000cc"])[color="#0000cc"];
MODULE_AUTHOR[color="#0000cc"]([color="#ff00ff"]"richardhesidu@chinaunix"[color="#0000cc"])[color="#0000cc"];
3)cipher算法(aes)
[color="#000000"]#[color="#ff0000"]include [color="#0000cc"]
[color="#0000cc"]#[color="#ff0000"]include [color="#0000cc"]
[color="#0000cc"]#[color="#ff0000"]include [color="#0000cc"]
[color="#0000cc"]#[color="#ff0000"]include [color="#0000cc"]
[color="#0000cc"]#[color="#ff0000"]include [color="#0000cc"]
[color="#0000cc"]#[color="#ff0000"]include [color="#0000cc"]
[color="#0000cc"]#[color="#ff0000"]include [color="#0000cc"]
[color="#0000cc"]#[color="#ff0000"]include [color="#0000cc"]
[color="#0000cc"]#[color="#ff0000"]include [color="#0000cc"]
[color="#0000ff"]struct crypto_tfm [color="#0000cc"]*tfm[color="#0000cc"];
[color="#0000cc"]#[color="#0000ff"]if 1
[color="#0000ff"]char [color="#0000cc"]*code [color="#0000cc"]= [color="#ff00ff"]"Hello everyone,I'm Richardhesidu"
        [color="#ff00ff"]"Hello everyone,I'm Richardhesidu"
            [color="#ff00ff"]"Hello everyone,I'm Richardhesidu"[color="#0000cc"];
[color="#0000ff"]char [color="#0000cc"]*key [color="#0000cc"]= [color="#ff00ff"]"00112233445566778899aabbccddeeff"[color="#0000cc"];
[color="#0000cc"]#[color="#ff0000"]endif
[color="#0000cc"]#[color="#0000ff"]if 0
[color="#0000ff"]char code[color="#0000cc"][[color="#0000cc"]] [color="#0000cc"]= [color="#0000cc"]{0x00[color="#0000cc"],0x11[color="#0000cc"],0x22[color="#0000cc"],0x33[color="#0000cc"],0x44[color="#0000cc"],0x55[color="#0000cc"],0x66[color="#0000cc"],0x77[color="#0000cc"],0x88[color="#0000cc"],0x99[color="#0000cc"],0xaa[color="#0000cc"],
        0xbb[color="#0000cc"],0xcc[color="#0000cc"],0xdd[color="#0000cc"],0xee[color="#0000cc"],0xff[color="#0000cc"]}[color="#0000cc"];
[color="#0000ff"]char key[color="#0000cc"][[color="#0000cc"]] [color="#0000cc"]= [color="#0000cc"]{0x00[color="#0000cc"],0x01[color="#0000cc"],0x02[color="#0000cc"],0x03[color="#0000cc"],0x04[color="#0000cc"],0x05[color="#0000cc"],0x06[color="#0000cc"],0x07[color="#0000cc"],0x08[color="#0000cc"],0x09[color="#0000cc"],0x0a[color="#0000cc"],
        0x0b[color="#0000cc"],0x0c[color="#0000cc"],0x0d[color="#0000cc"],0x0e[color="#0000cc"],0x0f[color="#0000cc"]}[color="#0000cc"];
[color="#0000cc"]#[color="#ff0000"]endif
[color="#0000ff"]static [color="#0000ff"]inline  [color="#0000ff"]void hexdump[color="#0000cc"]([color="#0000ff"]unsigned [color="#0000ff"]char [color="#0000cc"]*buf[color="#0000cc"],[color="#0000ff"]unsigned [color="#0000ff"]int len[color="#0000cc"]) [color="#0000cc"]{
    [color="#0000ff"]while[color="#0000cc"](len[color="#0000cc"]-[color="#0000cc"]-[color="#0000cc"])
        printk[color="#0000cc"]([color="#ff00ff"]"%02x"[color="#0000cc"],[color="#0000cc"]*buf[color="#0000cc"]+[color="#0000cc"]+[color="#0000cc"])[color="#0000cc"];
    printk[color="#0000cc"]([color="#ff00ff"]"\n"[color="#0000cc"])[color="#0000cc"];
[color="#0000cc"]}
[color="#0000ff"]static [color="#0000ff"]int __init test_init[color="#0000cc"]([color="#0000ff"]void[color="#0000cc"]) [color="#0000cc"]{
    [color="#0000ff"]int ret[color="#0000cc"],templen[color="#0000cc"],keylen[color="#0000cc"],codelen[color="#0000cc"];
    [color="#0000ff"]struct scatterlist sg[color="#0000cc"][1[color="#0000cc"]][color="#0000cc"];
    [color="#0000ff"]char [color="#0000cc"]*result[color="#0000cc"];
    [color="#0000ff"]char [color="#0000cc"]*temp[color="#0000cc"];
    keylen [color="#0000cc"]= 16[color="#0000cc"];
    codelen [color="#0000cc"]= [color="#ff0000"]strlen[color="#0000cc"](code[color="#0000cc"])[color="#0000cc"]/2[color="#0000cc"];
[color="#0000cc"]#[color="#0000ff"]if 0
    printk[color="#0000cc"]([color="#ff00ff"]"%s, codelen=%d\n"[color="#0000cc"],code[color="#0000cc"],[color="#ff0000"]strlen[color="#0000cc"](code[color="#0000cc"])[color="#0000cc"])[color="#0000cc"];
    printk[color="#0000cc"]([color="#ff00ff"]"%s, keylen=%d\n"[color="#0000cc"],key[color="#0000cc"],[color="#ff0000"]strlen[color="#0000cc"](key[color="#0000cc"])[color="#0000cc"])[color="#0000cc"];   
[color="#0000cc"]#[color="#ff0000"]endif   
    [color="#ff9900"]/* Allocate transform for AES ECB mode */
            
    tfm [color="#0000cc"]= crypto_alloc_tfm[color="#0000cc"]([color="#ff00ff"]"aes"[color="#0000cc"],CRYPTO_TFM_MODE_ECB[color="#0000cc"])[color="#0000cc"];
        [color="#0000ff"]if[color="#0000cc"](IS_ERR[color="#0000cc"](tfm[color="#0000cc"])[color="#0000cc"]) [color="#0000cc"]{
        printk[color="#0000cc"]([color="#ff00ff"]"failed to load transform for aes ECB mode !\n"[color="#0000cc"])[color="#0000cc"];
                [color="#0000ff"]return 0[color="#0000cc"];
    [color="#0000cc"]}
    ret [color="#0000cc"]= crypto_cipher_setkey[color="#0000cc"](tfm[color="#0000cc"],key[color="#0000cc"],keylen[color="#0000cc"])[color="#0000cc"];
    [color="#0000ff"]if[color="#0000cc"](ret[color="#0000cc"]) [color="#0000cc"]{
        printk[color="#0000cc"]([color="#ff00ff"]"failed to setkey \n"[color="#0000cc"])[color="#0000cc"];
        [color="#0000ff"]goto failed1[color="#0000cc"];
    [color="#0000cc"]}
   
    sg_init_one[color="#0000cc"](sg[color="#0000cc"],code[color="#0000cc"],codelen[color="#0000cc"])[color="#0000cc"];
        
    [color="#ff9900"]/* start encrypt */
   
    ret [color="#0000cc"]= crypto_cipher_encrypt[color="#0000cc"](tfm[color="#0000cc"],sg[color="#0000cc"],sg[color="#0000cc"],codelen[color="#0000cc"])[color="#0000cc"];
    [color="#0000ff"]if[color="#0000cc"](ret[color="#0000cc"]) [color="#0000cc"]{
        printk[color="#0000cc"]([color="#ff00ff"]"encrypt failed \n"[color="#0000cc"])[color="#0000cc"];
        [color="#0000ff"]goto failed1[color="#0000cc"];
    [color="#0000cc"]}
   
    temp [color="#0000cc"]= kmap[color="#0000cc"](sg[color="#0000cc"][0[color="#0000cc"]][color="#0000cc"].page[color="#0000cc"]) [color="#0000cc"]+ sg[color="#0000cc"][0[color="#0000cc"]][color="#0000cc"].offset[color="#0000cc"];
    hexdump[color="#0000cc"](temp[color="#0000cc"],sg[color="#0000cc"][0[color="#0000cc"]][color="#0000cc"].length[color="#0000cc"])[color="#0000cc"];
   
          [color="#ff9900"]/* start dencrypt */
    templen [color="#0000cc"]= [color="#ff0000"]strlen[color="#0000cc"](temp[color="#0000cc"])[color="#0000cc"]/2[color="#0000cc"];
    sg_init_one[color="#0000cc"](sg[color="#0000cc"],temp[color="#0000cc"],templen[color="#0000cc"])[color="#0000cc"];
    ret [color="#0000cc"]= crypto_cipher_decrypt[color="#0000cc"](tfm[color="#0000cc"],sg[color="#0000cc"],sg[color="#0000cc"],templen[color="#0000cc"])[color="#0000cc"];
        [color="#0000ff"]if[color="#0000cc"](ret[color="#0000cc"]) [color="#0000cc"]{
                printk[color="#0000cc"]([color="#ff00ff"]"dencrypt failed \n"[color="#0000cc"])[color="#0000cc"];
                [color="#0000ff"]goto failed1[color="#0000cc"];
        [color="#0000cc"]}
        result [color="#0000cc"]= kmap[color="#0000cc"](sg[color="#0000cc"][0[color="#0000cc"]][color="#0000cc"].page[color="#0000cc"]) [color="#0000cc"]+ sg[color="#0000cc"][0[color="#0000cc"]][color="#0000cc"].offset[color="#0000cc"];
    printk[color="#0000cc"]([color="#ff00ff"]"%s\n"[color="#0000cc"],result[color="#0000cc"])[color="#0000cc"];
[color="#ff9900"]//        hexdump(result,sg[0].length);

[color="#0000cc"]#[color="#0000ff"]if 0
    [color="#0000ff"]if[color="#0000cc"]([color="#ff0000"]memcmp[color="#0000cc"](code[color="#0000cc"],result[color="#0000cc"],[color="#ff0000"]strlen[color="#0000cc"](code[color="#0000cc"])[color="#0000cc"]) [color="#0000cc"]![color="#0000cc"]= 0[color="#0000cc"])
        printk[color="#0000cc"]([color="#ff00ff"]"dencrpt was not successful\n"[color="#0000cc"])[color="#0000cc"];
    [color="#0000ff"]else
        printk[color="#0000cc"]([color="#ff00ff"]"dencrypt was successful\n"[color="#0000cc"])[color="#0000cc"];
[color="#0000cc"]#[color="#ff0000"]endif
failed1[color="#0000cc"]:
           crypto_free_tfm[color="#0000cc"](tfm[color="#0000cc"])[color="#0000cc"];
    [color="#0000ff"]return 0[color="#0000cc"];
[color="#0000cc"]}
[color="#0000ff"]static [color="#0000ff"]void __exit test_exit[color="#0000cc"]([color="#0000ff"]void[color="#0000cc"])
[color="#0000cc"]{
[color="#0000cc"]}
module_init[color="#0000cc"](test_init[color="#0000cc"])[color="#0000cc"];
module_exit[color="#0000cc"](test_exit[color="#0000cc"])[color="#0000cc"];
MODULE_LICENSE[color="#0000cc"]([color="#ff00ff"]"GPL"[color="#0000cc"])[color="#0000cc"];
MODULE_AUTHOR[color="#0000cc"]([color="#ff00ff"]"richardhesidu@chinaunix"[color="#0000cc"])[color="#0000cc"];

               
               
               
               

本文來自ChinaUnix博客,如果查看原文請點:http://blog.chinaunix.net/u2/79955/showart_1964346.html
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP