📄 secprimitivem.nc
字号:
module SecPrimitiveM {
provides {
interface Primitive;
}
uses {
interface MAC;
interface BlockCipher;
}
}
implementation
{
uint8_t random_key[8];
uint32_t counter;
command result_t Primitive.PRF(uint8_t *key, uint32_t x, uint8_t *out)
{
return call Primitive.MAC(key,(uint8_t *)&x,4,out);
}
command result_t Primitive.PRG(uint8_t *out)
{
counter++;
return call Primitive.MAC(random_key,(uint8_t *)&counter, 4, out);
}
command result_t Primitive.MAC (uint8_t *key, uint8_t *in, uint8_t len, uint8_t *out)
{
MACContext context;
call MAC.init(&context, 8, key);
return call MAC.MAC (&context, in, len, out, 8);
}
command result_t Primitive.verifyMAC(uint8_t *key, uint8_t *in, uint8_t len,uint8_t *mac)
{
uint8_t i;
MACContext context;
uint8_t tmp[8];
call MAC.init(&context, 8, key);
call MAC.MAC (&context, in, len, tmp, 8);
for(i=0;i<8;i++) if(tmp[i]!=mac[i]) return FAIL;
return SUCCESS;
}
command result_t Primitive.encrypt(uint8_t *key, uint8_t * plainBlock, uint8_t * cipherBlock)
{
CipherContext context;
call BlockCipher.init(&context,8,8,key);
call BlockCipher.encrypt(&context,plainBlock, cipherBlock);
return SUCCESS;
}
command result_t Primitive.decrypt(uint8_t *key,uint8_t * cipherBlock, uint8_t * plainBlock)
{
CipherContext context;
call BlockCipher.init(&context,8,8,key);
call BlockCipher.decrypt(&context, cipherBlock,plainBlock);
return SUCCESS;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -