/** * Creates a mostly unitialized SHAiButtonUser object. This constructor merely copies the * coprocessors 7 byte binding code into a local cache and stores the name of the account service * file used for all user iButtons. * * <p>Since this constructor leaves data unitialized, you should be very careful with the use of * it. It is expected that after calling this constructor, the user will call <code>setiButton * </code> to finish the initialization process. On memory-starved platforms, this should help * optimize memory usage. * * @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. * @see #SHAiButtonUser18(SHAiButtonCopr,OneWireContainer18,boolean,byte[]) * @see #SHAiButtonUser18(SHAiButtonCopr) */ public SHAiButtonUser18(SHAiButtonCopr copr) { // save a copy of the binding code copr.getBindCode(this.fullBindCode, 0); System.arraycopy(this.fullBindCode, 4, this.fullBindCode, 12, 3); // create string representation of service filename copr.getFilename(this.serviceFile, 0); this.strServiceFilename = new String(this.serviceFile) + "." + (int) copr.getFilenameExt(); }
/** * 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. * * @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("------------------------------------"); } // \\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\ }