?? secprimitivem.nc
字號:
/* tab:4
*
*
* Copyright (C) 2004 by North Carolina State University.
* All rights reserved.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation for any purpose, without fee, and without written agreement is
* hereby granted, provided that the above copyright notice, the following
* two paragraphs and the author appear in all copies of this software.
*
* IN NO EVENT SHALL THE NORTH CAROLINA STATE UNIVERSITY BE LIABLE TO ANY PARTY
* FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING
* OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE NORTH
* CAROLINA STATE UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* THE NORTH CAROLINA STATE UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
* ON AN "AS IS" BASIS, AND THE NORTH CAROLINA STATE UNIVERSITY HAS NO OBLIGATION
* TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS."
*
* Authors: Donggang Liu
* Date: 4/25/04
*/
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;
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -