首页
社区
课程
招聘
[求助]请教一个TrueCrypt源码中serpent算法的一个简单问题。
2012-2-21 11:39 3048

[求助]请教一个TrueCrypt源码中serpent算法的一个简单问题。

2012-2-21 11:39
3048
请教一下下面代码函数中,ks 是做什么用的?
void serpent_set_key(const unsigned __int8 userKey[], int keylen, unsigned __int8 *ks)
{
        unsigned __int32 a,b,c,d,e;
        unsigned __int32 *k = (unsigned __int32 *)ks;
        unsigned __int32 t;
        int i;

        for (i = 0; i < keylen / (int)sizeof(__int32); i++)
                k[i] = LE32(((unsigned __int32*)userKey)[i]);

        if (keylen < 32)
                k[keylen/4] |= (unsigned __int32)1 << ((keylen%4)*8);

        k += 8;
        t = k[-1];
        for (i = 0; i < 132; ++i)
                k[i] = t = rotlFixed(k[i-8] ^ k[i-5] ^ k[i-3] ^ t ^ 0x9e3779b9 ^ i, 11);
        k -= 20;

#define LK(r, a, b, c, d, e)        {\
        a = k[(8-r)*4 + 0];                \
        b = k[(8-r)*4 + 1];                \
        c = k[(8-r)*4 + 2];                \
        d = k[(8-r)*4 + 3];}

#define SK(r, a, b, c, d, e)        {\
        k[(8-r)*4 + 4] = a;                \
        k[(8-r)*4 + 5] = b;                \
        k[(8-r)*4 + 6] = c;                \
        k[(8-r)*4 + 7] = d;}        \

        for (i=0; i<4; i++)
        {
                afterS2(LK); afterS2(S3); afterS3(SK);
                afterS1(LK); afterS1(S2); afterS2(SK);
                afterS0(LK); afterS0(S1); afterS1(SK);
                beforeS0(LK); beforeS0(S0); afterS0(SK);
                k += 8*4;
                afterS6(LK); afterS6(S7); afterS7(SK);
                afterS5(LK); afterS5(S6); afterS6(SK);
                afterS4(LK); afterS4(S5); afterS5(SK);
                afterS3(LK); afterS3(S4); afterS4(SK);
        }
        afterS2(LK); afterS2(S3); afterS3(SK);
}

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
点赞0
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回