-
大小: 97KB文件類型: .rar金幣: 2下載: 1 次發布日期: 2021-05-07
- 語言: 其他
- 標簽: GCM-AES-128??aes_wrap??aes_unwrap??
資源簡介
做國外電表DLMS加解密必用的算法,費勁我幾個月的整理修改,總算把這GCM-AES-128的加解密算法和密鑰傳輸的包裹算法弄好。算是商業機密吧,呵呵!據說有廠家為數據傳輸加解密前前后后搞了2年。
壓縮包里有三個代碼文件,附有測試程序和測試數據。
同行的人,肯定認為這10分值的。

代碼片段和文件信息
#include?“StdAfx.h“
#include?“DHCryptlib.h“
#include?
#include?
#include?
#if?defined(__cplusplus)
extern?“C“
{
#endif
#define?_MaxText_Length_?1024??//最大加解密數據長度?
mh_decl?void?xor_block_aligned(void?*r?const?void?*p?const?void?*q)
{
rep3_u4(f_xor?UNIT_PTR(r)?UNIT_PTR(p)?UNIT_PTR(q)?UNIT_VAL);
}
gf_decl?void?gf_mulx1_lb(gf_t?r?const?gf_t?x)
{???
gf_unit_t?_tt;
_tt?=?gf_tab[(UNIT_PTR(x)[3]?>>?17)?&?MASK(0x80)];
rep2_d4(f1_lb?UNIT_PTR(r)?UNIT_PTR(x));
UNIT_PTR(r)[0]?^=?_tt;
}
void?init_4k_table(const?gf_t?g?gf_t4k_t?t)
{???
int?j?k;
memset(t[0]?0?GF_BYTE_LEN);
memcpy(t[128]?g?GF_BYTE_LEN);
for(j?=?64;?j?>=?1;?j?>>=?1)
gf_mulx1(mode)(t[j]?t[j?+?j]);
for(j?=?2;?j?256;?j?+=?j)
for(k?=?1;?k? xor_block_aligned(t[j?+?k]?t[j]?t[k]);
}
#define?xor_4k(iaptr)?gf_mulx8(mode)(r);?xor_block_aligned(r?r?t[ap[GF_INDEX(i)]])
#??define?ls_box(xc)???????four_tables(xt_use(fl)vf1rf2c)
#define?ke4(ki)?\
{???k[4*(i)+4]?=?ss[0]?^=?ls_box(ss[3]3)?^?t_use(rc)[i];?\
k[4*(i)+5]?=?ss[1]?^=?ss[0];?\
k[4*(i)+6]?=?ss[2]?^=?ss[1];?\
k[4*(i)+7]?=?ss[3]?^=?ss[2];?\
}
#define?v(ni)??((n)?-?(i)?+?2?*?((i)?&?3))
#define?k4e(ki)?\
{???k[v(40(4*(i))+4)]?=?ss[0]?^=?ls_box(ss[3]3)?^?t_use(rc)[i];?\
k[v(40(4*(i))+5)]?=?ss[1]?^=?ss[0];?\
k[v(40(4*(i))+6)]?=?ss[2]?^=?ss[1];?\
k[v(40(4*(i))+7)]?=?ss[3]?^=?ss[2];?\
}
#define?kdf4(ki)?\
{???ss[0]?=?ss[0]?^?ss[2]?^?ss[1]?^?ss[3];?\
ss[1]?=?ss[1]?^?ss[3];?\
ss[2]?=?ss[2]?^?ss[3];?\
ss[4]?=?ls_box(ss[(i+3)?%?4]?3)?^?t_use(rc)[i];?\
ss[i?%?4]?^=?ss[4];?\
ss[4]?^=?k[v(40(4*(i)))];???k[v(40(4*(i))+4)]?=?ff(ss[4]);?\
ss[4]?^=?k[v(40(4*(i))+1)];?k[v(40(4*(i))+5)]?=?ff(ss[4]);?\
ss[4]?^=?k[v(40(4*(i))+2)];?k[v(40(4*(i))+6)]?=?ff(ss[4]);?\
ss[4]?^=?k[v(40(4*(i))+3)];?k[v(40(4*(i))+7)]?=?ff(ss[4]);?\
}
#define?kd4(ki)?\
{???ss[4]?=?ls_box(ss[(i+3)?%?4]?3)?^?t_use(rc)[i];?\
ss[i?%?4]?^=?ss[4];?ss[4]?=?ff(ss[4]);?\
k[v(40(4*(i))+4)]?=?ss[4]?^=?k[v(40(4*(i)))];?\
k[v(40(4*(i))+5)]?=?ss[4]?^=?k[v(40(4*(i))+1)];?\
k[v(40(4*(i))+6)]?=?ss[4]?^=?k[v(40(4*(i))+2)];?\
k[v(40(4*(i))+7)]?=?ss[4]?^=?k[v(40(4*(i))+3)];?\
}
#define?kdl4(ki)?\
{???ss[4]?=?ls_box(ss[(i+3)?%?4]?3)?^?t_use(rc)[i];?ss[i?%?4]?^=?ss[4];?\
k[v(40(4*(i))+4)]?=?(ss[0]?^=?ss[1])?^?ss[2]?^?ss[3];?\
k[v(40(4*(i))+5)]?=?ss[1]?^?ss[3];?\
k[v(40(4*(i))+6)]?=?ss[0];?\
k[v(40(4*(i))+7)]?=?ss[1];?\
}
AES_RETURN?aes_encrypt_key128(const?unsigned?char?*key?aes_encrypt_ctx?cx[1])
{??
uint_32t????ss[4];
cx->ks[0]?=?ss[0]?=?word_in(key?0);
cx->ks[1]?=?ss[1]?=?word_in(key?1);
cx->ks[2]?=?ss[2]?=?word_in(key?2);
cx->ks[3]?=?ss[3]?=?word_in(key?3);
ke4(cx->ks?0);??ke4(cx->ks?1);
ke4(cx->ks?2);??ke4(cx->ks?3);
ke4(cx->ks?4);??ke4(cx->ks?5);
ke4(cx->ks?6);??ke4(cx->ks?7);
ke4(cx->ks?8);
ke4(cx->ks?9);
cx->inf.l?=?0;
cx->
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????32813??2012-11-23?09:05??源碼\AESGCM.cpp
?????文件??????20280??2012-11-10?09:13??源碼\AESHead.h
?????文件??????10078??2012-11-13?15:39??源碼\DHCryptlib.h
?????文件?????315904??2012-10-29?13:17??AES128GCM.exe
?????文件???????9022??2006-10-27?18:49??gcm.1
?????目錄??????????0??2012-12-07?23:09??源碼
-----------?---------??----------?-----??----
???????????????388097????????????????????6
評論
共有 條評論