编辑: QQ215851406 | 2018-10-27 |
只用 OneWireContainer18 类就能够初始化容器、无需使用 com.dalsemi.onewire.application.sha 包. 下面代码说明了只使用 OneWireContainer18 把密钥安装到器件的步骤.需要注意的是这段代码和 图3中的 SHAiButtonCopr 构造器的实际执行过程几乎相同. 协处理器的容器级初始化 图4/* install the signing secret */ coprDevice.installMasterSecret(signPageNumber, inputSignSecret, signPageNumber&
7);
/* install the authentication secret */ coprDevice.installMasterSecret(authPageNumber, inputAuthSecret, authPageNumber&
7);
/* create the configuration file */ OWFileOutputStream fos = new OWFileOutputStream(shaDevice, COPR.0 );
/* Write all the service parameters to the output stream (see AN157 for format) */ fos.write(acctFilename,0,4);
fos.write(acctFile);
fos.write(signPageNumber);
fos.write(authPageNumber);
fos.write(wspcPageNumber);
fos.write(0);
ersion umber //v n fos.write(0x01);
//month fos.write(0x01);
//day fos.write(0x07);
//year MSB fos.write(0xD1);
//year LSB C>
1/1/2001 fos.write(bindData);
fos.write(bindCode);
fos.write(signingChlg);
fos.write(l_providerName.length);
fos.write(l_initSignature.length);
fos.write(l_auxData.length);
fos.write( Maxim .getBytes());
//Provider name fos.write(initSignature);
fos.write( .getBytes());
//auxilliary info fos.write(l_encCode);
//encryption code fos.write(0);
//DS1961S Compatibility flag (see AN157) fos.close();
/* Create the new instance of SHAiButtonCopr, ready to perform transactions! */ SHAiButtonCopr copr = new SHAiButtonCopr(coprDevice, COPR.0 );
如果SHA协处理器是用于鉴别DS1961S/DS2432 iButton,或者用于产生复制暂存器的授权,需要 截取主鉴别密钥以适应DS1961S较小的暂存器.这里提供了一个可适当截取密钥的函数.随后协 处理器文件中的 DS1961S 兼容性标记 应当被置为非零值. 截取验证密钥 图5inputAuthSecret = SHAiButtonCopr.reformatFor1961S(inputAuthSecret);
AN156
5 of
23 2.2 初始化用户令牌 初始化用户令牌分两步.第一步:安装主鉴别密钥并将其绑定到iButton上,以产生唯一的令牌密 钥.第二步:向iButton中写入证书文件.实际操作要比最初听起来复杂一些.DS1963S的存储器 有十六页,相应的有八个密钥(每两页共用一个密钥).证书文件必须写到具有写次数计数器的页 中,这样就将其限制在器件内存区的最后八页中.同时,写证书文件页的密钥应该就是安装的主 鉴别密钥.但是,1-Wire文件API并不允许存储文件中按页........