Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
languagejava
    public byte[] getOnlinePin(byte [] data) {

        Log.d("getOnlinePin", "Getting pin block");

        DUKPTResult result = pindukptResult;

        byte [] encryptedPinBlock = result.getResult();
        byte [] ksn = result.getKsn();

        Log.d("getOnlinePin", "KSN is : " + hex(ksn) + " and encrypted pinblock is " + hex(encryptedPinBlock));
        StringBuilder message = new StringBuilder();
        message.append("<CrdhldrOnLinePIN>" +
                "<NcrptdPINBlck>" +
                "<CnttTp>EVLP</CnttTp>" +
                "<EnvlpdData>" +
                "<Vrsn>1</Vrsn>" +
                "<Rcpt>" +
                "<KEK>" +
                "<Vrsn>1</Vrsn>" +
                "<KEKId>" +
                "<KeyId>SpecV1TestKey<<KeyId>nexoAESD128TestKey</KeyId>" +
                "<KeyVrsn>2010060715<<KeyVrsn>20190522</KeyVrsn>" +
                "<SeqNb>1</SeqNb>" +
                "<DerivtnId>" + Base64.encodeToString(Arrays.copyOfRange(ksn, 0, 5), Base64.NO_WRAP) + "</DerivtnId>" +
                "</KEKId>" +
                "<KeyNcrptnAlgo>" +
                "<Algo>DKP9<<Algo>DA12</Algo>" +
                "</KeyNcrptnAlgo>" +
                "<NcrptdKey>" + Base64.encodeToString(Arrays.copyOfRange(ksn, 5, 12), Base64.NO_WRAP) + "</NcrptdKey>" +
                "</KEK>" +
                "</Rcpt>" +
                "<NcrptdCntt>" +
                "<CnttTp>DATA</CnttTp>" +
                "<CnttNcrptnAlgo>" +
                "<Algo>E3DC<<Algo>EA2C</Algo>" +
                "</CnttNcrptnAlgo>" +
                "<NcrptdData>" + Base64.encodeToString(encryptedPinBlock, Base64.NO_WRAP) + "</NcrptdData>" +
                "</NcrptdCntt>" +
                "</EnvlpdData>" +
                "</NcrptdPINBlck>" +
                "<PINFrmt>ISO4</PINFrmt>" +
                "</CrdhldrOnLinePIN>");

        TlvTree cardholderpin = TlvTree.Empty();
        cardholderpin.AddEnum(0xDF9F34, 0);
        cardholderpin.AddAscii(0xDF9F14, message.toString());

        Log.d("getOnlinePin", cardholderpin.Stringify());

        return cardholderpin.AsBytes();
    }