亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? javapursecrypto.java

?? 一個javacard的身份驗(yàn)證程序
?? JAVA
?? 第 1 頁 / 共 3 頁
字號:
                apdu.setOutgoingAndSend((short)0, offset);    }        /**     * Handles Initialize Transaction APDU.     * <p>See <em>Java Card 2.1 Reference Implementation User's Guide</em> for details.     *     * @param apdu APDU object     */    private void processInitializeTransaction(APDU apdu) {        if (transientBools[TRANSACTION_INITIALIZED])            ISOException.throwIt(SW_COMMAND_OUT_OF_SEQUENCE);        if (!userPIN.isValidated())            ISOException.throwIt(ISO7816.SW_SECURITY_STATUS_NOT_SATISFIED);        byte[] buffer = apdu.getBuffer();        if (buffer[ISO7816.OFFSET_LC] != LC_IT)            ISOException.throwIt(ISO7816.SW_WRONG_LENGTH);        if (buffer[ISO7816.OFFSET_P2] != 0)            ISOException.throwIt(ISO7816.SW_INCORRECT_P1P2);        apdu.setIncomingAndReceive();    // get expected data        byte transactionType = buffer[ISO7816.OFFSET_P1];        transientShorts[TRANSACTION_TYPE_IX] = transactionType;        short amount = Util.getShort(buffer, ISO7816.OFFSET_CDATA);        transientShorts[AMOUNT_IX] = amount;                short balance = checkTransactionValues(transactionType, amount);                // Increment TN in Transient Memory & compute signature        short newTN = (short)(TN + 1);        transientShorts[TN_IX] = newTN;        Util.arrayCopyNonAtomic(buffer, CAD_ID_OFFSET, CAD_ID_array, START, ID_LENGTH);                // Send	R-APDU        short offset = Util.arrayCopyNonAtomic(ID_Purse, START, buffer, START, ID_LENGTH);        offset = Util.arrayCopyNonAtomic(ExpDate, START, buffer, offset, DATE_LENGTH);        offset = Util.setShort(buffer, offset, balance);        offset = Util.setShort(buffer, offset, newTN);        // The crypto processing could be done here        deskey.setKey(keyData, (short)0);        sig.init(deskey, Signature.MODE_SIGN);        short sigLength = sig.sign(buffer, START, (short)(offset - START),             byteArray8, (short)0);        offset = Util.arrayCopyNonAtomic(byteArray8, START, buffer, offset, SIGNATURE_LENGTH);                apdu.setOutgoingAndSend(START, (short)(offset - START));        transientBools[TRANSACTION_INITIALIZED] = true;    }        /**     * Handles Complete Transaction APDU.     * @param apdu APDU object     */    private void processCompleteTransaction(APDU apdu) {        if (!transientBools[TRANSACTION_INITIALIZED])            ISOException.throwIt(SW_COMMAND_OUT_OF_SEQUENCE);        byte[] buffer = apdu.getBuffer();        if (buffer[ISO7816.OFFSET_LC] != LC_CT)            ISOException.throwIt(ISO7816.SW_WRONG_LENGTH);        if ((buffer[ISO7816.OFFSET_P1] != 0) || (buffer[ISO7816.OFFSET_P2] != 0))            ISOException.throwIt(ISO7816.SW_INCORRECT_P1P2);                apdu.setIncomingAndReceive();    // get expected data                //restore transaction data from transient        short newTN = transientShorts[TN_IX];        short amount = transientShorts[AMOUNT_IX];        short newBalance = transientShorts[NEW_BALANCE_IX];        //The signature verification         //get CLA, INS, P1, P2, LC        short offset = Util.arrayCopyNonAtomic(buffer, (short)0, MAC_buffer,(byte)0, (short)5);        Util.arrayCopyNonAtomic(buffer, offset, byteArray8,(byte)0, SIGNATURE_LENGTH);        Util.arrayCopyNonAtomic(buffer, (short)(offset + SIGNATURE_LENGTH), MAC_buffer,(byte)5, (short)DATETIME_LENGTH);        deskey.setKey(keyData, (short)0);        sig.init(deskey, Signature.MODE_VERIFY);        boolean signatureOK = sig.verify(MAC_buffer, (short)0, (short)10,            byteArray8, START, SIGNATURE_LENGTH);                //prepare transaction record in APDU buffer        offset = Util.setShort(buffer, START, newTN);        buffer[offset] = (byte)transientShorts[TRANSACTION_TYPE_IX];        offset++;        offset = Util.setShort(buffer, offset, amount);        //CAD ID was left in this array from Initialize Transaction        offset = Util.arrayCopyNonAtomic(CAD_ID_array, START, buffer, offset, ID_LENGTH);                //Date and time are copied in APDU buffer to where they should go        //in the transaction record.        short balanceOffset = offset =            Util.arrayCopyNonAtomic(buffer, (short)(ISO7816.OFFSET_CDATA + 8),             buffer, offset, DATETIME_LENGTH);        //Balance and SW will be added to transactionRecord	later        if (!signatureOK) {            //Branch for unsuccessful transaction. Balance is not updated,            //otherwise transactionLog is recorded the same way as in successful transaction            offset = Util.setShort(buffer, offset, transientShorts[CURRENT_BALANCE_IX]); // old balance            Util.setShort(buffer, offset, SW_WRONG_SIGNATURE);            //done with preparing transaction record                        byte[] theRecord = transactionLogFile.getNewLogRecord();            //The following	few	steps have to be performed atomically!            JCSystem.beginTransaction();            TN = newTN;            Util.arrayCopy(buffer, START,                 theRecord, START, TRANSACTION_RECORD_LENGTH);            transactionLogFile.updateNewLogRecord();            JCSystem.commitTransaction();                        //Now we can throw exception            transientBools[TRANSACTION_INITIALIZED] = false;            ISOException.throwIt(SW_WRONG_SIGNATURE);        } else {            //Branch for successful transaction.            offset = Util.setShort(buffer, offset, transientShorts[NEW_BALANCE_IX]);            Util.setShort(buffer, offset, ISO7816.SW_NO_ERROR);            // done with preparing transaction record                        byte[] theRecord = transactionLogFile.getNewLogRecord();            //The following few steps have to be performed atomically!            JCSystem.beginTransaction();            TN = transientShorts[TN_IX];            //Update balance            Util.setShort(balancesRecord, START, newBalance);            Util.arrayCopy(buffer, START,                 theRecord, START, TRANSACTION_RECORD_LENGTH);            transactionLogFile.updateNewLogRecord();            JCSystem.commitTransaction();        }                // Do loyalty work        // We have all the information in the buffer, the loyalty applets shouldn't        // know transaction number and the balance of purse - so we zero out these        // fields first        Util.setShort(buffer, START, (short)0);        Util.setShort(buffer, balanceOffset, (short)0);        short loyaltyCADValue = Util.getShort(CAD_ID_array, START);        for (byte loyaltyIndex = 0; loyaltyIndex < MAX_LOYALTY; loyaltyIndex++) {            if (loyaltyCAD[loyaltyIndex] == loyaltyCADValue) {                loyaltySIO[loyaltyIndex].grantPoints (buffer);                break;            }        }                offset = Util.setShort(MAC_buffer, START, newBalance);        Util.setShort(MAC_buffer, offset, SW_SUCCESS);        deskey.setKey(keyData, (short)0);        sig.init(deskey, Signature.MODE_SIGN);        short sigLength = sig.sign(MAC_buffer, (short)0, (short)4,             byteArray8, (short)0);                //send R-APDU        offset = Util.setShort(buffer, START, newBalance);        offset = Util.arrayCopyNonAtomic(byteArray8, START, buffer, offset, SIGNATURE_LENGTH);        apdu.setOutgoingAndSend(START, (short)(offset - START));                transientBools[TRANSACTION_INITIALIZED] = false;    }            /**     * Handles Initialize Parameter Update APDU.     *     * <p><em>NOTE:</em> In this sample implementation we assume that all the     * Parameter Updates are performed in somewhat secured facility and therefore     * the tearing of the card is not an issue. That's why we don't do any     * transactional protection while processing Initialize and Complete     * Parameter Update APDU commands.     *     * @param apdu APDU object     */    private void processInitializeUpdate(APDU apdu) {        if (transientBools[UPDATE_INITIALIZED])            ISOException.throwIt(SW_COMMAND_OUT_OF_SEQUENCE);        if (!masterPIN.isValidated() && isPersonalized)            ISOException.throwIt(ISO7816.SW_SECURITY_STATUS_NOT_SATISFIED);                byte[] buffer = apdu.getBuffer();        if ((buffer[ISO7816.OFFSET_P1] != 0) || (buffer[ISO7816.OFFSET_P2] != 0))            ISOException.throwIt(ISO7816.SW_INCORRECT_P1P2);                // Because this is a case 2 command (outgoing data only), the contents of P3        //  are undefined. In T=0, P3 is Le. In T=1, P3 is Lc. Therefore, we don't        //  bother to test the contents of buffer[ISO7816.OFFSET_LC].                        PUN++; //Increment parameter Update Number                // Send R-APDU        short offset = Util.arrayCopyNonAtomic(ID_Purse, START, buffer, START, ID_LENGTH);        offset = Util.arrayCopyNonAtomic(ExpDate, START, buffer, offset, DATE_LENGTH);        offset = Util.setShort(buffer, offset, PUN);        apdu.setOutgoingAndSend(START, (short)(offset - START));                transientBools[UPDATE_INITIALIZED] = true;    }        /**     * Handles Complete Parameter Update APDU.     * @param apdu APDU object     */    private void processCompleteUpdate(APDU apdu) {        if (!transientBools[UPDATE_INITIALIZED])            ISOException.throwIt(SW_COMMAND_OUT_OF_SEQUENCE);        byte[] buffer = apdu.getBuffer();        if ((buffer[ISO7816.OFFSET_P1] != 0) || (buffer[ISO7816.OFFSET_P2] != 0))            ISOException.throwIt(ISO7816.SW_INCORRECT_P1P2);        short count = apdu.setIncomingAndReceive();    // get expected data        byte lc = buffer[ISO7816.OFFSET_LC];        //The signature verification         //get CLA, INS, P1, P2, LC        //message to sign length        short messageLength = (short)(lc - SIGNATURE_LENGTH + 5);        short offset = Util.arrayCopyNonAtomic(buffer, (short)0, MAC_buffer,(byte)0, (short)messageLength);        offset = Util.arrayCopyNonAtomic(buffer, offset, byteArray8,(byte)0, SIGNATURE_LENGTH);         // verify signature if in coming apdu        deskey.setKey(keyData, (short)0);        sig.init(deskey, Signature.MODE_VERIFY);        boolean signatureOK = sig.verify(MAC_buffer, (short)0, messageLength,            byteArray8, START, SIGNATURE_LENGTH);                    if (!signatureOK)            ISOException.throwIt(SW_WRONG_SIGNATURE);                switch (buffer[TLV_OFFSET]) {        case MASTER_PIN_UPDATE:            updatePIN(apdu, masterPIN);            setIsPersonalized();            break;        case USER_PIN_UPDATE:            updatePIN(apdu, userPIN);            break;        case EXP_DATE_UPDATE:            updateParameterValue(apdu, ExpDate);            break;        case PURSE_ID_UPDATE:            updateParameterValue(apdu, ID_Purse);            break;        case MAX_BAL_UPDATE:            updateBalanceValue(apdu, OFFSET_BAL_MAX);            break;        case MAX_M_UPDATE:            updateBalanceValue(apdu, OFFSET_AMOUNT_MAX);            break;        case VERSION_UPDATE:            updateParametersFile(apdu);            break;        case LOYALTY1_UPDATE:            updateLoyaltyProgram(apdu, (byte)0);            break;        case LOYALTY2_UPDATE:            updateLoyaltyProgram(apdu, (byte)1);            break;        case LOYALTY3_UPDATE:            updateLoyaltyProgram(apdu, (byte)2);            break;        case LOYALTY4_UPDATE:            updateLoyaltyProgram(apdu, (byte)3);            break;        default:            ISOException.throwIt(ISO7816.SW_FUNC_NOT_SUPPORTED);        }                //sign the return message        //Admittedly, this is a poor MAC, but this message only returns the status        //(what is MACed here) and the MAC itself. A real application should return a        //little more information.        offset = Util.setShort(MAC_buffer, START, SW_SUCCESS);        deskey.setKey(keyData, (short)0);        sig.init(deskey, Signature.MODE_SIGN);        short sigLength = sig.sign(MAC_buffer, (short)0, (short)2,             byteArray8, (short)0);                //send R-APDU        //offset = Util.arrayCopyNonAtomic(byteArray8, START, buffer, offset, SIGNATURE_LENGTH);        Util.arrayCopyNonAtomic(byteArray8, START, buffer, START, SIGNATURE_LENGTH);        apdu.setOutgoingAndSend(START, SIGNATURE_LENGTH);                transientBools[UPDATE_INITIALIZED] = false;        }        /**     * Handles Verify Pin APDU.     * @param apdu APDU object     */    private void processVerifyPIN(APDU apdu) {        byte[] buffer = apdu.getBuffer();        byte pinLength = buffer[ISO7816.OFFSET_LC];        byte triesRemaining	= (byte)0;        short count = apdu.setIncomingAndReceive();    // get expected data        if (count < pinLength)             ISOException.throwIt(ISO7816.SW_WRONG_LENGTH);        byte pinType = buffer[ISO7816.OFFSET_P2];                switch (pinType) {        case MASTER_PIN:            if (!masterPIN.check(buffer, ISO7816.OFFSET_CDATA, pinLength)) {                triesRemaining = masterPIN.getTriesRemaining();                //The last nibble of return	code is	number of remaining	tries                ISOException.throwIt((short)(SW_PIN_FAILED + triesRemaining));            }            break;        case USER_PIN:            if (!userPIN.check(buffer, ISO7816.OFFSET_CDATA, pinLength)) {                triesRemaining = userPIN.getTriesRemaining();                //The last nibble of return	code is	number of remaining	tries                ISOException.throwIt((short)(SW_PIN_FAILED + triesRemaining));            }            break;        default:             ISOException.throwIt(ISO7816.SW_INCORRECT_P1P2);        }    }        /**     * Verifies numerical limitations on Transaction Amount.     *     * <p><em>NOTE:</em> With some values of maxBalance and maxAmount the logic     * in this method might become somewhat unrealistic. It's the result of using     * short arithmetic on values which might be too big to fit in short variables.

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国内成+人亚洲+欧美+综合在线| 国产美女娇喘av呻吟久久| 日本成人超碰在线观看| 国产乱一区二区| 欧美中文字幕久久| 国产三区在线成人av| 亚洲成人免费影院| 国产成人av电影在线| 欧美性欧美巨大黑白大战| 国产欧美日韩激情| 裸体健美xxxx欧美裸体表演| 91成人看片片| 日韩美女精品在线| 成人性色生活片免费看爆迷你毛片| 4438x亚洲最大成人网| 一区二区三区在线影院| 波多野结衣视频一区| 久久蜜桃av一区二区天堂| 日韩精品1区2区3区| 欧美亚洲免费在线一区| 亚洲欧洲精品一区二区三区不卡| 极品美女销魂一区二区三区| 日韩欧美激情一区| 亚洲韩国精品一区| 在线观看av一区| 亚洲男人的天堂av| 色综合久久综合| 亚洲欧洲日韩一区二区三区| 不卡av在线网| 自拍偷在线精品自拍偷无码专区| 国产99精品在线观看| 久久久精品免费网站| 国产精品一区二区免费不卡| 久久一夜天堂av一区二区三区| 久久精品国产精品亚洲红杏| 日韩一级片在线播放| 六月丁香综合在线视频| 26uuu色噜噜精品一区二区| 激情综合色播五月| 久久蜜桃av一区精品变态类天堂| 国产麻豆视频一区| 国产欧美精品一区二区色综合朱莉| 国产传媒一区在线| 国产精品久久福利| 色婷婷激情一区二区三区| 一区二区三区精品在线观看| 欧美日韩视频在线第一区| 性做久久久久久免费观看欧美| 欧美精品三级在线观看| 免费欧美日韩国产三级电影| www亚洲一区| 成人精品gif动图一区| 一区二区三区四区乱视频| 欧美日韩亚洲综合在线| 免费的成人av| 中文字幕成人av| 在线精品观看国产| 日韩电影免费一区| 国产欧美日韩综合| 在线影院国内精品| 久99久精品视频免费观看| 中文字幕精品在线不卡| 在线免费观看日韩欧美| 免费人成在线不卡| 国产精品电影一区二区| 欧美日韩亚洲综合在线| 国产91高潮流白浆在线麻豆| 综合精品久久久| 欧美一区二区在线观看| 成人一区在线看| 香蕉乱码成人久久天堂爱免费| 2024国产精品视频| 欧美性猛片xxxx免费看久爱| 韩国成人福利片在线播放| 亚洲精品精品亚洲| 久久综合九色综合久久久精品综合| 99久久精品国产导航| 免费在线观看日韩欧美| 亚洲欧美日韩在线不卡| 欧美精品一区二区三区蜜桃视频| 99re热这里只有精品免费视频| 日本三级韩国三级欧美三级| 国产精品国产a| 26uuu国产电影一区二区| 欧美三级电影网| k8久久久一区二区三区| 韩国视频一区二区| 午夜精品123| 亚洲欧洲日韩av| 国产欧美在线观看一区| 91精品午夜视频| 日本丰满少妇一区二区三区| 91免费版pro下载短视频| 日韩精品福利网| 亚洲1区2区3区视频| 亚洲久本草在线中文字幕| 久久久久久影视| 日韩欧美国产wwwww| 欧美日韩精品久久久| 色偷偷88欧美精品久久久| 国产成人午夜精品影院观看视频| 天堂影院一区二区| 亚洲综合色在线| 亚洲精品自拍动漫在线| 国产精品久久久久影院亚瑟| xnxx国产精品| 精品久久人人做人人爽| 欧美一级片在线| 欧美老年两性高潮| 欧美男同性恋视频网站| 91福利精品第一导航| 色婷婷激情综合| 在线观看成人小视频| 欧美三级午夜理伦三级中视频| 91免费国产视频网站| jlzzjlzz亚洲女人18| 成人国产精品免费| 福利一区二区在线观看| 成人久久视频在线观看| 成人久久18免费网站麻豆| 不卡在线观看av| 99久久综合99久久综合网站| 91丨porny丨国产| 在线视频亚洲一区| 欧美日韩一区不卡| 欧美一卡二卡在线| 精品日韩欧美在线| 国产日产亚洲精品系列| 国产精品国产三级国产专播品爱网| 中文字幕中文在线不卡住| 综合久久国产九一剧情麻豆| 亚洲最大的成人av| 日韩精品久久久久久| 国产在线精品一区二区不卡了| 国产电影一区二区三区| 97精品超碰一区二区三区| 91黄色免费看| 日韩一区二区在线看| 久久精品人人做人人综合 | 久久99精品久久久久久国产越南| 青青草97国产精品免费观看| 韩国毛片一区二区三区| 成人小视频在线观看| 日本道免费精品一区二区三区| 欧美日韩一本到| 久久久激情视频| 亚洲伊人伊色伊影伊综合网| 热久久免费视频| 成人99免费视频| 欧美丰满美乳xxx高潮www| 久久久国产综合精品女国产盗摄| 亚洲色图色小说| 美日韩一区二区三区| 成人午夜视频在线| 欧美精品精品一区| 国产欧美日韩在线| 天堂蜜桃一区二区三区| 从欧美一区二区三区| 欧美妇女性影城| 椎名由奈av一区二区三区| 奇米综合一区二区三区精品视频| 成人美女在线观看| 欧美一区二区三区在线观看视频| 中文字幕巨乱亚洲| 免费日韩伦理电影| 在线免费精品视频| 国产精品午夜久久| 美腿丝袜亚洲色图| 欧美色精品在线视频| 国产精品亲子乱子伦xxxx裸| 视频一区二区国产| 色婷婷综合在线| 国产精品久久久99| 蜜臀va亚洲va欧美va天堂| 色婷婷综合久久久久中文一区二区| 欧美成人国产一区二区| 亚洲成人777| 色综合久久久久| 国产精品嫩草影院com| 久久99精品久久久久婷婷| 欧美日韩大陆在线| 亚洲黄色av一区| 成a人片国产精品| 国产午夜精品久久久久久免费视| 免费精品视频最新在线| 欧美日韩一区成人| 亚洲成人免费av| 在线观看日韩国产| 一区二区三区精品视频| 91在线国内视频| 自拍偷在线精品自拍偷无码专区| 国产suv精品一区二区三区| 精品国产乱码久久久久久久| 日本伊人精品一区二区三区观看方式| 欧美专区亚洲专区| 一级日本不卡的影视| 欧日韩精品视频| 亚洲国产视频在线| 欧美日韩久久不卡| 日韩精品91亚洲二区在线观看|