package com.sample.hsm; import java.util.HashMap; import java.util.Map; import org.jpos.fsdpackager.AFSDFieldPackager; import org.jpos.fsdpackager.BranchFieldPackager; import org.jpos.fsdpackager.FSDMsgX; import org.jpos.fsdpackager.FixedFieldPackager; import org.jpos.fsdpackager.LookAheadPackager; import org.jpos.fsdpackager.OptionalPackager; import org.jpos.fsdpackager.compliance.TrackDataCompliance; import org.jpos.iso.AsciiInterpreter; import org.jpos.iso.ISOException; import org.jpos.iso.ISOUtil; public class HSMMessage { public FSDMsgX getFSDMessage() { FSDMsgX message = new FSDMsgX("HSM"); FixedFieldPackager stan = new FixedFieldPackager("stan", 4, AsciiInterpreter.INSTANCE); message.add(stan); FixedFieldPackager command = new FixedFieldPackager("command", 2, AsciiInterpreter.INSTANCE); message.add(command); Map<String, AFSDFieldPackager> commandCases = new HashMap<String, AFSDFieldPackager>(); commandCases.put("A0", getA0Packager()); commandCases.put("A1", getA1Packager()); commandCases.put("A6", getA6Packager()); commandCases.put("FA", getFAPackager()); BranchFieldPackager branchCommand = new BranchFieldPackager("commandBrancher", "command", commandCases, null); message.add(branchCommand); return message; } private static AFSDFieldPackager getFAPackager() { FixedFieldPackager f1 = new FixedFieldPackager("zmk-scheme", 1, AsciiInterpreter.INSTANCE); FixedFieldPackager f2 = new FixedFieldPackager("zmk", 32, AsciiInterpreter.INSTANCE); FixedFieldPackager f3 = new FixedFieldPackager("import-key-scheme", 1, AsciiInterpreter.INSTANCE); FixedFieldPackager f4 = new FixedFieldPackager("key-to-import-under-zmk", 32, AsciiInterpreter.INSTANCE); FixedFieldPackager f5 = new FixedFieldPackager("mode", 1, AsciiInterpreter.INSTANCE); OptionalPackager f6 = new OptionalPackager("optiona-variant", new FixedFieldPackager("attalla-variant", 1, AsciiInterpreter.INSTANCE)); FSDMsgX optionalGrp1 = new FSDMsgX("OptionalGroup1"); AFSDFieldPackager semicolon = new FixedFieldPackager("delimiter",";",AsciiInterpreter.INSTANCE); AFSDFieldPackager reserved1 = new FixedFieldPackager("Reserved-1","O",AsciiInterpreter.INSTANCE); AFSDFieldPackager keySchemeLMK = new FixedFieldPackager("key-scheme-lmk",1,AsciiInterpreter.INSTANCE); AFSDFieldPackager keyCheckValue = new FixedFieldPackager("key-check-value-len",1,AsciiInterpreter.INSTANCE); optionalGrp1.add(semicolon); optionalGrp1.add(reserved1); optionalGrp1.add(keySchemeLMK); optionalGrp1.add(keyCheckValue); LookAheadPackager determineGrp1 = new LookAheadPackager("LAGRP1", 0, new Byte((byte)';') ,optionalGrp1, null, new String[]{"key-scheme-lmk","key-check-value-len"}, null); FSDMsgX optionalGrp2 = new FSDMsgX("OptionalGroup2"); AFSDFieldPackager lmkid = new FixedFieldPackager("LMK-ID",2,AsciiInterpreter.INSTANCE); AFSDFieldPackager percent = new FixedFieldPackager("delimiter-2","%",AsciiInterpreter.INSTANCE); optionalGrp2.add(percent); optionalGrp2.add(lmkid); LookAheadPackager determineGrp2 = new LookAheadPackager("LAGRP2", 0, new Byte((byte)'%') ,optionalGrp2, null, new String[]{"LMK-ID"}, null); FSDMsgX container = new FSDMsgX("TranslateZPKReq-FA"); container.add(f1); container.add(f2); container.add(f3); container.add(f4); container.add(f5); container.add(f6); container.add(determineGrp1); container.add(determineGrp2); return container; } private static FSDMsgX getA0Packager() { FixedFieldPackager f1 = new FixedFieldPackager("mode", 1, AsciiInterpreter.INSTANCE); FixedFieldPackager f2 = new FixedFieldPackager("key-type", 3, AsciiInterpreter.INSTANCE); FixedFieldPackager f3 = new FixedFieldPackager("key-scheme-key-under-lmk", 1, AsciiInterpreter.INSTANCE); FixedFieldPackager f4 = new FixedFieldPackager("scheme-zmk-or-tmk", 1, AsciiInterpreter.INSTANCE); FixedFieldPackager f5 = new FixedFieldPackager("key-zmk-or-tmk", 32, AsciiInterpreter.INSTANCE); FixedFieldPackager f6 = new FixedFieldPackager("key-scheme-key-under-zmk-or-tmk", 1, AsciiInterpreter.INSTANCE); FSDMsgX container = new FSDMsgX("GenerateKeyReq-A0"); container.add(f1); container.add(f2); container.add(f3); container.add(f4); container.add(f5); container.add(f6); return container; } private static AFSDFieldPackager getA6Packager() { FixedFieldPackager f1 = new FixedFieldPackager("key-type", 3, AsciiInterpreter.INSTANCE); FixedFieldPackager f2 = new FixedFieldPackager("zmk-scheme", 1, AsciiInterpreter.INSTANCE); FixedFieldPackager f3 = new FixedFieldPackager("zmk", 32, AsciiInterpreter.INSTANCE, new TrackDataCompliance()); FixedFieldPackager f4 = new FixedFieldPackager("import-key-scheme", 1, AsciiInterpreter.INSTANCE); FixedFieldPackager f5 = new FixedFieldPackager("key-to-import-under-zmk", 32, AsciiInterpreter.INSTANCE, new TrackDataCompliance()); FixedFieldPackager f6 = new FixedFieldPackager("scheme-key-encrpt-under-lmk", 1, AsciiInterpreter.INSTANCE); OptionalPackager f7 = new OptionalPackager("optiona-variant", new FixedFieldPackager("attalla-variant", 1, AsciiInterpreter.INSTANCE)); FSDMsgX container = new FSDMsgX("ImportKeyReq-A6"); container.add(f1); container.add(f2); container.add(f3); container.add(f4); container.add(f5); container.add(f6); container.add(f7); return container; } private static AFSDFieldPackager getA1Packager() { FixedFieldPackager f0 = new FixedFieldPackager("error", 2, AsciiInterpreter.INSTANCE); FixedFieldPackager f1 = new FixedFieldPackager("scheme-key-under-lmk", 1, AsciiInterpreter.INSTANCE); FixedFieldPackager f2 = new FixedFieldPackager("key-under-lmk", 32, AsciiInterpreter.INSTANCE); FixedFieldPackager f3 = new FixedFieldPackager("scheme-key-under-zmk", 1, AsciiInterpreter.INSTANCE); FixedFieldPackager f4 = new FixedFieldPackager("key-under-zmk", 32, AsciiInterpreter.INSTANCE); FixedFieldPackager f5 = new FixedFieldPackager("check-value", 6, AsciiInterpreter.INSTANCE); FSDMsgX container = new FSDMsgX("GenerateKeyRsp-A1"); container.add(f0); container.add(f1); container.add(f2); container.add(f3); container.add(f4); container.add(f5); return container; } public static void main(String[] args) throws ISOException { HSMMessage m = new HSMMessage(); // FSDMsgX fsd1 = m.getFSDMessage(); // fsd1.set("stan", "1234"); // fsd1.set("command", "A0"); // fsd1.set("mode", "1"); // fsd1.set("key-type", "001"); // fsd1.set("key-scheme-key-under-lmk", "A"); // fsd1.set("scheme-zmk-or-tmk", "B"); // fsd1.set("key-zmk-or-tmk", ISOUtil.padleft("", 32, 'F')); // fsd1.set("key-scheme-key-under-zmk-or-tmk", "C"); // byte[] outStream = fsd1.pack(); // System.out.println(ISOUtil.hexdump(outStream)); // System.out.println(fsd1.dump("")); // System.out.println(fsd1.getParserTree("")); // // FSDMsgX fsd3 = m.getFSDMessage(); // fsd3.set("stan", "1234"); // fsd3.set("command", "A6"); // fsd3.set("key-type", "001"); // fsd3.set("zmk-scheme", "A"); // fsd3.set("zmk", ISOUtil.padleft("", 32, 'A')); // fsd3.set("import-key-scheme", "X"); // fsd3.set("key-to-import-under-zmk", ISOUtil.padleft("", 32, 'B')); // fsd3.set("scheme-key-encrpt-under-lmk", "C"); // fsd3.set("attalla-variant", "V"); // byte[] outStream3 = fsd3.pack(); // System.out.println(ISOUtil.hexdump(outStream3)); // System.out.println(fsd3.dump("")); // System.out.println(fsd3.getParserTree("")); // // FSDMsgX fsd4 = m.getFSDMessage(); // fsd4.set("stan", "1234"); // fsd4.set("command", "A6"); // fsd4.set("key-type", "001"); // fsd4.set("zmk-scheme", "A"); // fsd4.set("zmk", ISOUtil.padleft("", 32, 'A')); // fsd4.set("import-key-scheme", "X"); // fsd4.set("key-to-import-under-zmk", ISOUtil.padleft("", 32, 'B')); // fsd4.set("scheme-key-encrpt-under-lmk", "C"); // byte[] outStream4 = fsd4.pack(); // System.out.println(ISOUtil.hexdump(outStream4)); // System.out.println(fsd4.dump("")); // System.out.println(fsd4.getParserTree("")); FSDMsgX fsd2 = m.getFSDMessage(); fsd2.set("stan", "1234"); fsd2.set("command", "FA"); fsd2.set("zmk-scheme", "A"); fsd2.set("zmk", ISOUtil.padleft("", 32, 'A')); fsd2.set("import-key-scheme", "B"); fsd2.set("key-to-import-under-zmk",ISOUtil.padleft("", 32, 'A')); fsd2.set("mode", "1"); fsd2.set("attalla-variant", "V"); //optional group fields fsd2.set("key-scheme-lmk", "U"); fsd2.set("key-check-value-len", "0"); //optional grp2 field fsd2.set("LMK-ID", "00"); byte[] outStream2 = fsd2.pack(); System.out.println(ISOUtil.hexdump(outStream2)); System.out.println(fsd2.dump("")); System.out.println(fsd2.getParserTree("")); // FSDMsgX mess = m.getFSDMessage(); // mess.unpack(outStream2); // System.out.println(mess.dump("")); // System.out.println(mess.getParserTree("")); } }