一、在.net micro framework中增加LibTom加解密算法

87 篇文章 1 订阅
11 篇文章 0 订阅

思路.按照.net的方式新建一个供C#调用的C接口,然后通过C接口调用LibTom的加解密算法。

1、C#调用C方法,请参考.net micro framework提供的资料进行

2、修改工程的dotNetMF.proj文件,然后把LibTom的必要文件加上,要添加那些文件可以,参考使用Libtomcrypt RSA/ECC等加密算法到项目中

3、然后重新编译固件,此时你会发现好多问题.

我遇到的问题及相关解决方式如下:

	EXEC : error : L6915E: Library reports error: __use_no_semihosting_swi was requested, but _sys_open was referenced [C:\MF\PK\Solutions\NetduinoPlus2\TinyCLR\TinyCLR.proj]
	EXEC : error : L6915E: Library reports error: __use_no_semihosting_swi was requested, but clock was referenced [C:\MF\PK\Solutions\NetduinoPlus2\TinyCLR\TinyCLR.proj]

	A、在tomcrypt_custom.h中打开以下宏定义,主要不使用printf or getline,fprintf, assert, fopen, fclose这些函数,参考
	http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/ka11357.html
	/* clean the stack of functions which put private information on stack */
	#define LTC_CLEAN_STACK 

	/* disable all file related functions */
	#define LTC_NO_FILE

	/* disable all forms of ASM */
	#define LTC_NO_ASM

	/* disable FAST mode */
	/* #define LTC_NO_FAST */

	/* disable BSWAP on x86 */
	 #define LTC_NO_BSWAP/
	 
	B、在tomcrypt_cfg.h中修改ARGTYPE的定义
		/* type of argument checking, 0=default, 1=fatal and 2=error+continue, 3=nothing */
	#ifndef ARGTYPE
	   #define ARGTYPE  4
	#endif

	解决_sys_open这个Bug。
	
	B、rng_get_bytes.c文件中取消这个函数
	/* on ANSI C platforms with 100 < CLOCKS_PER_SEC < 10000 */
	#if	0//defined(CLOCKS_PER_SEC) && !defined(WINCE)

	#define ANSI_RNG

	static unsigned long rng_ansic(unsigned char *buf, unsigned long len, 
								   void (*callback)(void))
	{
	   clock_t t1;
	   int l, acc, bits, a, b;

	   if (XCLOCKS_PER_SEC < 100 || XCLOCKS_PER_SEC > 10000) {
		  return 0;
	   }

	   l = len;
	   bits = 8;
	   acc  = a = b = 0;
	   while (len--) {
		   if (callback != NULL) callback();
		   while (bits--) {
			  do {
				 t1 = XCLOCK(); while (t1 == XCLOCK()) a ^= 1;
				 t1 = XCLOCK(); while (t1 == XCLOCK()) b ^= 1;
			  } while (a == b);
			  acc = (acc << 1) | a;
		   }
		   *buf++ = acc; 
		   acc  = 0;
		   bits = 8;
	   }
	   acc = bits = a = b = 0;
	   return l;
	}

	#endif 


#ifndef TOMCRYPT_H_ #define TOMCRYPT_H_ #include <assert.h> #include <stdio.h> #include <string.h> #include <stdlib.h> #include <time.h> #include <ctype.h> #include <limits.h> /* use configuration data */ #include <tomcrypt_custom.h> #ifdef __cplusplus extern "C" { #endif /* version */ #define CRYPT 0x0116 #define SCRYPT "1.16" /* max size of either a cipher/hash block or symmetric key [largest of the two] */ #define MAXBLOCKSIZE 128 /* descriptor table size */ /* Dropbear change - this should be smaller, saves some size */ #define TAB_SIZE 4 /* error codes [will be expanded in future releases] */ enum { CRYPT_OK=0, /* Result OK */ CRYPT_ERROR, /* Generic Error */ CRYPT_NOP, /* Not a failure but no operation was performed */ CRYPT_INVALID_KEYSIZE, /* Invalid key size given */ CRYPT_INVALID_ROUNDS, /* Invalid number of rounds */ CRYPT_FAIL_TESTVECTOR, /* Algorithm failed test vectors */ CRYPT_BUFFER_OVERFLOW, /* Not enough space for output */ CRYPT_INVALID_PACKET, /* Invalid input packet given */ CRYPT_INVALID_PRNGSIZE, /* Invalid number of bits for a PRNG */ CRYPT_ERROR_READPRNG, /* Could not read enough from PRNG */ CRYPT_INVALID_CIPHER, /* Invalid cipher specified */ CRYPT_INVALID_HASH, /* Invalid hash specified */ CRYPT_INVALID_PRNG, /* Invalid PRNG specified */ CRYPT_MEM, /* Out of memory */ CRYPT_PK_TYPE_MISMATCH, /* Not equivalent types of PK keys */ CRYPT_PK_NOT_PRIVATE, /* Requires a private PK key */ CRYPT_INVALID_ARG, /* Generic invalid argument */ CRYPT_FILE_NOTFOUND, /* File Not Found */ CRYPT_PK_INVALID_TYPE, /* Invalid type of PK key */ CRYPT_PK_INVALID_SYSTEM,/* Invalid PK system specified */ CRYPT_PK_DUP, /* Duplicate key already in key ring */ CRYPT_PK_NOT_FOUND, /* Key not found in keyring */ CRYPT_PK_INVALID_SIZE, /* Invalid size input for PK parameters */ CRYPT_INVALID_PRIME_SIZE,/* Invalid size of prime requested */ CRYPT_PK_INVALID_PADDING /* Invalid padding on input */ }; #include <tomcrypt_cfg.h> #include <tomcrypt_macros.h> #include <tomcrypt_cipher.h> #include <tomcrypt_hash.h> #include <tomcrypt_mac.h> #include <tomcrypt_prng.h> #include <tomcrypt_pk.h> #include <tomcrypt_math.h> #include <tomcrypt_misc.h> #include <tomcrypt_argchk.h> #include <tomcrypt_pkcs.h> #ifdef __cplusplus } #endif #endif /* TOMCRYPT_H_ */ /* $Source: /cvs/libtom/libtomcrypt/src/headers/tomcrypt.h,v $ */ /* $Revision: 1.20 $ */ /* $Date: 2006/11/26 01:45:14 $ */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值