📄 shaibuttonuser18.java
字号:
/*--------------------------------------------------------------------------- * Copyright (C) 1999-2001 Dallas Semiconductor Corporation, All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL DALLAS SEMICONDUCTOR BE LIABLE FOR ANY CLAIM, DAMAGES * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. * * Except as contained in this notice, the name of Dallas Semiconductor * shall not be used except as stated in the Dallas Semiconductor * Branding Policy. *--------------------------------------------------------------------------- */package com.dalsemi.onewire.application.sha;import com.dalsemi.onewire.adapter.DSPortAdapter;import com.dalsemi.onewire.container.OneWireContainer18;import com.dalsemi.onewire.adapter.OneWireIOException;import com.dalsemi.onewire.OneWireException;import com.dalsemi.onewire.utils.IOHelper;import java.io.IOException;/** * <P>Class representing DS1963S (or DS2421), family-code 0x18, SHA iButtons as a user * token in SHA Transactions.</P> * * @see SHATransaction * @see SHAiButtonCopr * @see SHAiButtonUser33 * * @version 1.00 * @author SKH */public class SHAiButtonUser18 extends SHAiButtonUser{ /** * Reference to the OneWireContainer */ protected OneWireContainer18 ibc = null; /** * <P>No default constructor for user apps. At bare minimum, you need * a reference to a <code>SHAiButtonCopr</code> before you can construct a * <code>SHAiButtonUser</code>.</P> * * @see #SHAiButtonUser18(SHAiButtonCopr,OneWireContainer18,boolean,byte[]) * @see #SHAiButtonUser18(SHAiButtonCopr,OneWireContainer18) * @see #SHAiButtonUser18(SHAiButtonCopr) */ protected SHAiButtonUser18() {;} /** * <P>Initialize a DS1963S as a fresh user iButton for a given SHA service. * This constructor not only creates the service file for the user iButton * using the TMEX file structure, but it also installs the master * authentication secret and binds it to the iButton (making it unique for * a particular button). Optionally, the device can be formatted before * the service file is installed.</P> * * @param copr The SHAiButtonCopr to which the user object is tied. This * Coprocessor contains the necessary binding code and service * filename, necessary for both locating a user and recreating his * unique secret. * @param owc The DS1963S iButton that this object will refer to. * @param formatDevice If <code>true</code>, the TMEX filesystem will be * formatted before the account service file is created. * @param authSecret The master authentication secret for the systm. * * @throws OneWireIOException on a 1-Wire communication error such as * reading an incorrect CRC from a 1-Wire device. This could be * caused by a physical interruption in the 1-Wire Network due to * shorts or a newly arriving 1-Wire device issuing a 'presence pulse'. * @throws OneWireException on a communication or setup error with the 1-Wire * adapter * * @see #SHAiButtonUser18(SHAiButtonCopr,OneWireContainer18) * @see #SHAiButtonUser18(SHAiButtonCopr) */ public SHAiButtonUser18(SHAiButtonCopr copr, OneWireContainer18 owc, boolean formatDevice, byte[] authSecret) throws OneWireException, OneWireIOException { //setup service filename this(copr); //hold container reference this.ibc = owc; //and address this.address = owc.getAddress(); if(!createServiceFile(owc, strServiceFilename, formatDevice)) throw new OneWireException("Failed to create service file."); //save a copy of the binding code copr.getBindCode(this.fullBindCode,0); System.arraycopy(this.fullBindCode,4, this.fullBindCode,12, 3); //setup the fullBindCode with rest of info this.fullBindCode[4] = (byte)this.accountPageNumber; System.arraycopy(this.address,0, this.fullBindCode,5,7); if(!owc.installMasterSecret(accountPageNumber, authSecret, accountPageNumber&7)) throw new OneWireException("Install Master Secret failed"); //not in critical path, so getBindBlah() is okay. if(!owc.bindSecretToiButton(accountPageNumber, copr.getBindData(), this.fullBindCode, accountPageNumber&7)) throw new OneWireException("Bind Secret to iButton failed"); //\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\ if(DEBUG) { IOHelper.writeLine("------------------------------------"); IOHelper.writeLine("Initialized User"); IOHelper.writeLine("address"); IOHelper.writeBytesHex(owc.getAddress()); IOHelper.writeLine("serviceFilename: " + strServiceFilename); IOHelper.writeLine("accountPageNumber: " + accountPageNumber); IOHelper.writeLine("authSecret"); IOHelper.writeBytesHex(authSecret); IOHelper.writeLine("bindData"); IOHelper.writeBytesHex(copr.bindData); IOHelper.writeLine("bindCode"); IOHelper.writeBytesHex(copr.bindCode); IOHelper.writeLine("------------------------------------"); } //\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\ } /** * <P>Initialize a DS1963S as a fresh user iButton for a given SHA service. * This constructor not only creates the service file for the user iButton * using the TMEX file structure, but it also installs the master * authentication secret and binds it to the iButton (making it unique for * a particular button). Optionally, the device can be formatted before * the service file is installed.</P> * * @param coprBindData The Coprocessor Bind Data, used to create a unique * secret for this user token. * @param coprBindCode The Coprocessor Bind Code without the user-specific * information, used to create a unique secret for this user token. * @param fileName The file name for the account info. * @param fileNameExt The file extenstion for the account info * @param owc The DS1963S iButton that this object will refer to. * @param formatDevice If <code>true</code>, the TMEX filesystem will be * formatted before the account service file is created. * @param authSecret The master authentication secret for the systm. * * @throws OneWireIOException on a 1-Wire communication error such as * reading an incorrect CRC from a 1-Wire device. This could be * caused by a physical interruption in the 1-Wire Network due to * shorts or a newly arriving 1-Wire device issuing a 'presence pulse'. * @throws OneWireException on a communication or setup error with the 1-Wire * adapter * * @see #SHAiButtonUser18(SHAiButtonCopr,OneWireContainer18) * @see #SHAiButtonUser18(SHAiButtonCopr) */ public SHAiButtonUser18(byte[] coprBindData, byte[] coprBindCode, byte[] fileName, int fileNameExt, OneWireContainer18 owc, boolean formatDevice, byte[] authSecret) throws OneWireException, OneWireIOException { //hold container reference this.ibc = owc; //and address this.address = owc.getAddress(); System.arraycopy(fileName, 0, this.serviceFile, 0, 4); //create string representation of service filename this.strServiceFilename = new String(fileName) + "." + (int)fileNameExt; if(!createServiceFile(owc, strServiceFilename, formatDevice)) throw new OneWireException("Failed to create service file."); //save a copy of the binding code System.arraycopy(coprBindCode, 0, this.fullBindCode, 0, 7); System.arraycopy(this.fullBindCode,4, this.fullBindCode,12, 3); //setup the fullBindCode with rest of info this.fullBindCode[4] = (byte)this.accountPageNumber; System.arraycopy(this.address,0, this.fullBindCode,5,7); if(!owc.installMasterSecret(accountPageNumber, authSecret, accountPageNumber&7)) throw new OneWireException("Install Master Secret failed"); //not in critical path, so getBindBlah() is okay. if(!owc.bindSecretToiButton(accountPageNumber, coprBindData, this.fullBindCode, accountPageNumber&7)) throw new OneWireException("Bind Secret to iButton failed"); //\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\ if(DEBUG) { IOHelper.writeLine("------------------------------------"); IOHelper.writeLine("Initialized User"); IOHelper.writeLine("address"); IOHelper.writeBytesHex(owc.getAddress()); IOHelper.writeLine("serviceFilename: " + strServiceFilename); IOHelper.writeLine("accountPageNumber: " + accountPageNumber); IOHelper.writeLine("authSecret"); IOHelper.writeBytesHex(authSecret); IOHelper.writeLine("bindCode"); IOHelper.writeBytesHex(coprBindCode); IOHelper.writeLine("------------------------------------"); } //\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\ } /** * <P>Creates a valid SHAiButtonUser object. If the service file, * whose name is taken from the <code>SHAiButtonCopr</code>, is not * found on the user iButton, a OneWireException is thrown with the * message "Invalid SHA user".</P> * * @param copr The SHAiButtonCopr to which the user object is tied. This * Coprocessor contains the necessary binding code and service * filename, necessary for both locating a user and recreating his * unique secret. * @param owc The DS1963S iButton that this object will refer to. * * @throws OneWireIOException on a 1-Wire communication error such as * reading an incorrect CRC from a 1-Wire device. This could be * caused by a physical interruption in the 1-Wire Network due to * shorts or a newly arriving 1-Wire device issuing a 'presence pulse'. * @throws OneWireException on a communication or setup error with the 1-Wire * adapter * * @see #SHAiButtonUser18(SHAiButtonCopr,OneWireContainer18,boolean,byte[]) * @see #SHAiButtonUser18(SHAiButtonCopr) */ public SHAiButtonUser18(SHAiButtonCopr copr, OneWireContainer18 owc) throws OneWireException, OneWireIOException { //setup service filename this(copr);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -