分类 软件 下的文章

基于新唐M0的XXTEA加密解密算法源码

/*---------------------------------------------------------------------------------------------------------

在数据的加解密领域,算法分为对称密钥与非对称密钥两种。对称密钥与非对称密钥由于各自的特点,所应用的领域是不尽相

同的。对称密钥加密算法由于其速度快,一般用于整体数据的加密,而非对称密钥加密算法的安全性能佳,在数字签名领域得到广
泛的应用。

TEA算法是由剑桥大学计算机实验室的David Wheeler和Roger Needham于1994年发明,TEA是Tiny Encryption Algorithm的缩写,

以加密解密速度快,实现简单著称。TEA算法每一次可以操作64bit(8byte),采用128bit(16byte)作为key,算法采用迭代的形式,
推荐的迭代轮数是64轮,最少32轮。为解决TEA算法密钥表攻击的问题,TEA算法先后经历了几次改进,从XTEA到BLOCK TEA,直至
最新的XXTEA。XTEA也称做TEAN,它使用与TEA相同的简单运算,但四个子密钥采取不正规的方式进行混合以阻止密钥表攻击。

Block TEA算法可以对32位的任意整数倍长度的变量块进行加解密的操作,该算法将XTEA轮循函数依次应用于块中的每个字,并且

将它附加于被应用字的邻字。XXTEA使用跟Block TEA相似的结构,但在处理块中每个字时利用了相邻字,且用拥有两个输入量的
MX函数代替了XTEA轮循函数。本文所描述的安全机制采用的加密算法就是TEA算法中安全性能最佳的改进版本-XXTEA算法。

XXTEA算法的结构非常简单,只需要执行加法、异或和寄存的硬件即可,且软件实现的代码非常短小,具有可移植性,非常适合

嵌入式系统应用。由于XXTEA算法的以上优点,可以很好地应用于嵌入式RFID系统当中。

---------------------------------------------------------------------------------------------------------*/

include <string.h>

include <stdio.h>

define MX (z>>5^y<<2) + (y>>3^z<<4)^(sum^y) + (k[p&3^e]^z)

//注意:delta的取值是随机的,但是为了避免不良的取值,采取的是
//黄金分割数(根号5-2)/2与2的32次方的乘积。为0x9e3779b9。
//在解密中,sum=delta×round,如:delta×32=13C6EF3720

//v表示为运算的长整型数据的首地址
//k为长整型的密钥的首地址
//n表示以32bit为基本单位的要运算的组元个数,正表示加密,负表示解密

long xxtea(long v, long n, long k);

long xxtea(long v, long n, long k)
{
unsigned long z=v[n-1], y=v[0], sum=0, e, DELTA=0x9e3779b9;
long p, q;

if(n > 1)
{/ 加密过程 /
q = 6 + 52/n;
while(q-- > 0)
{
sum += DELTA; e = (sum >> 2) & 3;
for (p=0; p<n-1; p++) y = v[p+1], z = v[p] += MX;
y = v[0]; z = v[n-1] += MX;
}
return 0;
}
else
if(n < -1)
{/ 解密过程 /
n = -n; q = 6 + 52/n; sum = q*DELTA;
while(sum != 0)
{
e = (sum >> 2) & 3;
for (p=n-1; p>0; p--) z = v[p-1], y = v[p] -= MX;
z = v[n-1]; y = v[0] -= MX; sum -= DELTA;
}
return 0;
}
return 1;
}

void xxtea_test(void)
{
unsigned long buff[4];
unsigned long test[4]={0x11223344,0x55667788,0x99AABBCC,0xDDEEFF00};
unsigned long keys[4]={0x12345678,0x9ABCDEF0,0x12345678,0x9ABCDEF0};

while(1)
{
printf("nrxxtea test: nr");
memcpy(buff,test,16); printf("0x%08x,0x%08x,0x%08x,0x%08xnr",buff[0],buff[1],buff[2],buff[3]);
xxtea( buff, 4,keys); printf("0x%08x,0x%08x,0x%08x,0x%08xnr",buff[0],buff[1],buff[2],buff[3]);
xxtea( buff,-4,keys); printf("0x%08x,0x%08x,0x%08x,0x%08xnr",buff[0],buff[1],buff[2],buff[3]);

while(1);
}
}

更改 pip 默认下载源(pip 配置文件)

1、在用户根目录下 ~ 下创建 .pip 隐藏文件夹,如果已经有了可以跳过

-- mkdir ~/.pip

2、进入 .pip 隐藏文件夹并创建 pip.conf 配置文件

-- cd ~/.pip && touch pip.conf

3、启动 Finder(访达) 按 cmd+shift+g 来的进入,输入 ~/.pip 回车进入
pip.conf

[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
use-mirrors =true
mirrors =https://pypi.tuna.tsinghua.edu.cn/simple

change mayhem main screen version

portapack-mayhem/firmware/application/ui_navigation.hpp
class InformationView : public View {
public:

InformationView(NavigationView& nav);

private:

static constexpr auto version_string = "v1.3.1";
NavigationView& nav_;

portapack-mayhem/firmware/application/apps/ui_about_simple.cpp

portapack h2+ v3.4 pcb support wm8731 portapack.cpp change to support codec

portapach h2+ v3.4 pcb support wm8731

change portapack.cpp to support wm8731 codec replace ak4951

https://github.com/eried/portapack-mayhem/blob/next/firmware/application/portapack.cpp

static const portapack::cpld::Config& portapack_cpld_config() {

return (portapack_model() == PortaPackModel::R2_20170522)
    ? portapack::cpld::rev_20170522::config
    : portapack::cpld::rev_20170522::config    //2. Change 20150901 to 20170522 support H1/H2 TFT  20150901 cpld is old tft driver
    ;

}

Backlight* backlight() {

return (portapack_model() == PortaPackModel::R2_20170522)
    ? static_cast<portapack::Backlight*>(&backlight_cat4004)
    : static_cast<portapack::Backlight*>(&backlight_cat4004);  //1.Change ON_OFF to cat 4004

}

download changed fw v.1.3.0
download changed fw v.1.3.0 site 2