Changeset 13

Show
Ignore:
Timestamp:
11/29/11 01:22:59 (9 years ago)
Author:
vsilva
Message:

Some improvements on error control and support more platforms

Location:
middleware-online/trunk
Files:
39 added
9 removed
23 modified

Legend:

Unmodified
Added
Removed
  • middleware-online/trunk/cc-commons/src/main/java/pt/gov/cartaodecidadao/applet/commons/pteid/PTEID_ADDR.java

    r6 r13  
    11package pt.gov.cartaodecidadao.applet.commons.pteid; 
     2 
     3import pt.gov.cartaodecidadao.PTEID_Address; 
     4import pt.gov.cartaodecidadao.PTEID_Exception; 
    25 
    36public class PTEID_ADDR { 
    47 
    5     //EF05 ADDRESS 
    6     // shared address attributes 
    7     private static final short ADDRESS_TYPE_OFFSET = 0x0; 
    8     private static final short ADDRESS_COUNTRY_OFFSET = 0x2; 
    9     // national address attribute offsets 
    10     private static final short DISTRICT_CODE_OFFSET = 0x6; 
    11     private static final short DISTRICT_DESCRIPTION_OFFSET = 0xA; 
    12     private static final short MUNICIPALITY_CODE_OFFSET = 0x6E; 
    13     private static final short MUNICIPALITY_DESCRIPTION_OFFSET = 0x75; 
    14     private static final short CIVIL_PARISH_CODE_OFFSET = 0xDA; 
    15     private static final short CIVIL_PARISH_DESCRIPTION_OFFSET = 0xE6; 
    16     private static final short ABBR_STREET_TYPE_OFFSET = 0x14A; 
    17     private static final short STREET_TYPE_OFFSET = 0x15E; 
    18     private static final short STREET_NAME_OFFSET = 0x1C2; 
    19     private static final short ABBR_BUILDING_TYPE_OFFSET = 0x28A; 
    20     private static final short BUILDING_TYPE_OFFSET = 0x29E; 
    21     private static final short DOOR_NUMBER_OFFSET = 0x302; 
    22     private static final short FLOOR_OFFSET = 0x316; 
    23     private static final short SIDE_OFFSET = 0x33E; 
    24     private static final short PLACE_OFFSET = 0x366; 
    25     private static final short LOCALITY_OFFSET = 0x3CA; 
    26     private static final short POSTAL_CODE_CP4_OFFSET = 0x42E; 
    27     private static final short POSTAL_CODE_CP3_OFFSET = 0x436; 
    28     private static final short POSTAL_LOCALITY_OFFSET = 0x43C; 
    29     private static final short ADDRESS_NUMBER_OFFSET = 0x46E; 
    30     // foreign address attribute offsets 
    31     private static final short FOREIGN_COUNTRY_DESCRIPTION_OFFSET = 0x6; 
    32     private static final short FOREIGN_ADDRESS_OFFSET = 0x6A; 
    33     private static final short FOREIGN_CITY_OFFSET = 0x196; 
    34     private static final short FOREIGN_REGION_OFFSET = 0x1FA; 
    35     private static final short FOREIGN_LOCALITY_OFFSET = 0x25E; 
    36     private static final short FOREIGN_POSTAL_CODE_OFFSET = 0x2C2; 
    37     private static final short FOREIGN_ADDRESS_NUMBER_OFFSET = 0x326; 
    38     /* Fields length */ 
    39     private static final short PTEID_ADDR_TYPE_LEN = 2; 
    40     private static final short PTEID_ADDR_COUNTRY_LEN = 4; 
    41     private static final short PTEID_DISTRICT_LEN = 4; 
    42     private static final short PTEID_DISTRICT_DESC_LEN = 100; 
    43     private static final short PTEID_DISTRICT_CON_LEN = 8; 
    44     private static final short PTEID_DISTRICT_CON_DESC_LEN = 100; 
    45     private static final short PTEID_DISTRICT_FREG_LEN = 12; 
    46     private static final short PTEID_DISTRICT_FREG_DESC_LEN = 100; 
    47     private static final short PTEID_ROAD_ABBR_LEN = 20; 
    48     private static final short PTEID_ROAD_LEN = 100; 
    49     private static final short PTEID_ROAD_DESIG_LEN = 200; 
    50     private static final short PTEID_HOUSE_ABBR_LEN = 20; 
    51     private static final short PTEID_HOUSE_LEN = 100; 
    52     private static final short PTEID_NUMDOOR_LEN = 20; 
    53     private static final short PTEID_FLOOR_LEN = 40; 
    54     private static final short PTEID_SIDE_LEN = 40; 
    55     private static final short PTEID_PLACE_LEN = 100; 
    56     private static final short PTEID_LOCALITY_LEN = 100; 
    57     private static final short PTEID_CP4_LEN = 8; 
    58     private static final short PTEID_CP3_LEN = 6; 
    59     private static final short PTEID_POSTAL_LEN = 50; 
    60     private static final short PTEID_NUMMOR_LEN = 12; 
    61     private static final short PTEID_ADDR_COUNTRYF_DESC_LEN = 100; 
    62     private static final short PTEID_ADDRF_LEN = 300; 
    63     private static final short PTEID_CITYF_LEN = 100; 
    64     private static final short PTEID_REGIOF_LEN = 100; 
    65     private static final short PTEID_LOCALITYF_LEN = 100; 
    66     private static final short PTEID_POSTALF_LEN = 100; 
    67     private static final short PTEID_NUMMORF_LEN = 12; 
    68      
    69     private static final String ADDR_TYPE_NATIONAL = "N"; 
    70      
    71     public short version; 
    72     public String addrType; 
    73     public String country; 
    74     public String district; 
    75     public String districtDesc; 
    76     public String municipality; 
    77     public String municipalityDesc; 
    78     public String freguesia; 
    79     public String freguesiaDesc; 
    80     public String streettypeAbbr; 
    81     public String streettype; 
    82     public String street; 
    83     public String buildingAbbr; 
    84     public String building; 
    85     public String door; 
    86     public String floor; 
    87     public String side; 
    88     public String place; 
    89     public String locality; 
    90     public String cp4; 
    91     public String cp3; 
    92     public String postal; 
    93     public String numMor; 
    94     public String countryDescF; 
    95     public String addressF; 
    96     public String cityF; 
    97     public String regioF; 
    98     public String localityF; 
    99     public String postalF; 
    100     public String numMorF; 
    101  
    102     public static PTEID_ADDR parseAddr(byte[] buf) { 
    103  
    104         PTEID_ADDR addr = new PTEID_ADDR(); 
    105  
    106         addr.addrType = Utils.extractString(buf, ADDRESS_TYPE_OFFSET, PTEID_ADDR_TYPE_LEN); 
    107         addr.country = Utils.extractString(buf, ADDRESS_COUNTRY_OFFSET, PTEID_ADDR_COUNTRY_LEN); 
    108  
    109         // check if the address is national it can be checked by addrType or by country 
    110         if (ADDR_TYPE_NATIONAL.equals(addr.addrType)) { 
    111             addr.district = Utils.extractString(buf, DISTRICT_CODE_OFFSET, PTEID_DISTRICT_LEN); 
    112             addr.districtDesc = Utils.extractString(buf, DISTRICT_DESCRIPTION_OFFSET, PTEID_DISTRICT_DESC_LEN); 
    113             addr.municipality = Utils.extractString(buf, MUNICIPALITY_CODE_OFFSET, PTEID_DISTRICT_CON_LEN); 
    114             addr.municipalityDesc = Utils.extractString(buf, MUNICIPALITY_DESCRIPTION_OFFSET, PTEID_DISTRICT_CON_DESC_LEN); 
    115             addr.freguesia = Utils.extractString(buf, CIVIL_PARISH_CODE_OFFSET, PTEID_DISTRICT_FREG_LEN); 
    116             addr.freguesiaDesc = Utils.extractString(buf, CIVIL_PARISH_DESCRIPTION_OFFSET, PTEID_DISTRICT_FREG_DESC_LEN); 
    117             addr.streettypeAbbr = Utils.extractString(buf, ABBR_STREET_TYPE_OFFSET, PTEID_ROAD_ABBR_LEN); 
    118             addr.streettype = Utils.extractString(buf, STREET_TYPE_OFFSET, PTEID_ROAD_LEN); 
    119             addr.street = Utils.extractString(buf, STREET_NAME_OFFSET, PTEID_ROAD_DESIG_LEN); 
    120             addr.buildingAbbr = Utils.extractString(buf, ABBR_BUILDING_TYPE_OFFSET, PTEID_HOUSE_ABBR_LEN); 
    121             addr.building = Utils.extractString(buf, BUILDING_TYPE_OFFSET, PTEID_HOUSE_LEN); 
    122             addr.door = Utils.extractString(buf, DOOR_NUMBER_OFFSET, PTEID_NUMDOOR_LEN); 
    123             addr.floor = Utils.extractString(buf, FLOOR_OFFSET, PTEID_FLOOR_LEN); 
    124             addr.side = Utils.extractString(buf, SIDE_OFFSET, PTEID_SIDE_LEN); 
    125             addr.place = Utils.extractString(buf, PLACE_OFFSET, PTEID_PLACE_LEN); 
    126             addr.locality = Utils.extractString(buf, LOCALITY_OFFSET, PTEID_LOCALITY_LEN); 
    127             addr.cp4 = Utils.extractString(buf, POSTAL_CODE_CP4_OFFSET, PTEID_CP4_LEN); 
    128             addr.cp3 = Utils.extractString(buf, POSTAL_CODE_CP3_OFFSET, PTEID_CP3_LEN); 
    129             addr.postal = Utils.extractString(buf, POSTAL_LOCALITY_OFFSET, PTEID_POSTAL_LEN); 
    130             addr.numMor = Utils.extractString(buf, ADDRESS_NUMBER_OFFSET, PTEID_NUMMOR_LEN); 
    131  
    132         } else { // foreign address 
    133             addr.countryDescF = Utils.extractString(buf, FOREIGN_COUNTRY_DESCRIPTION_OFFSET, PTEID_ADDR_COUNTRYF_DESC_LEN); 
    134             addr.addressF = Utils.extractString(buf, FOREIGN_ADDRESS_OFFSET, PTEID_ADDRF_LEN); 
    135             addr.cityF = Utils.extractString(buf, FOREIGN_CITY_OFFSET, PTEID_CITYF_LEN); 
    136             addr.regioF = Utils.extractString(buf, FOREIGN_REGION_OFFSET, PTEID_REGIOF_LEN); 
    137             addr.localityF = Utils.extractString(buf, FOREIGN_LOCALITY_OFFSET, PTEID_LOCALITYF_LEN); 
    138             addr.postalF = Utils.extractString(buf, FOREIGN_POSTAL_CODE_OFFSET, PTEID_POSTALF_LEN); 
    139             addr.numMorF = Utils.extractString(buf, FOREIGN_ADDRESS_NUMBER_OFFSET, PTEID_NUMMORF_LEN); 
    140         } 
    141  
    142         return addr; 
    143     } 
     8        public String district; 
     9        public String districtDesc; 
     10        public String municipality; 
     11        public String civilParish; 
     12        public String streetTypeAbbr; 
     13        public String streetType; 
     14        public String street; 
     15        public String buildingAbbr; 
     16        public String building; 
     17        public String door; 
     18        public String floor; 
     19        public String side; 
     20        public String place; 
     21        public String locality; 
     22        public String cp4; 
     23        public String cp3; 
     24        public String postal; 
     25         
     26        public PTEID_ADDR(PTEID_Address beaddr) throws PTEID_Exception { 
     27                this.district = beaddr.getDistrict(); 
     28                this.municipality = beaddr.getMunicipality(); 
     29                this.civilParish = beaddr.getCivilParish(); 
     30                this.streetTypeAbbr = beaddr.getStreetType1(); 
     31                this.streetType = beaddr.getStreetType2(); 
     32                this.street = beaddr.getStreetName(); 
     33                this.buildingAbbr = beaddr.getBuildingType1(); 
     34                this.building = beaddr.getBuildingType2(); 
     35                this.door = beaddr.getDoorNo(); 
     36                this.floor = beaddr.getFloor(); 
     37                this.side = beaddr.getSide(); 
     38                this.place = beaddr.getPlace(); 
     39                this.locality = beaddr.getLocality(); 
     40                this.cp4 = beaddr.getZip4(); 
     41                this.cp3 = beaddr.getZip3(); 
     42                this.postal = beaddr.getPostalLocality(); 
     43        } 
    14444} 
  • middleware-online/trunk/cc-commons/src/main/java/pt/gov/cartaodecidadao/applet/commons/pteid/PTEID_ID.java

    r6 r13  
    11package pt.gov.cartaodecidadao.applet.commons.pteid; 
     2 
     3import pt.gov.cartaodecidadao.PTEID_EId; 
     4import pt.gov.cartaodecidadao.PTEID_Exception; 
    25 
    36public class PTEID_ID { 
    47 
    5     // EF02 IDENTIFICATION 
    6     // identification attributes offsets 
    7     private static final short ISSUING_ENTITY_OFFSET = 0x0; 
    8     private static final short COUNTRY_OFFSET = 0x28; 
    9     private static final short DOCUMENT_TYPE_OFFSET = 0x78; 
    10     private static final short CARD_NUMBER_OFFSET = 0x9A; 
    11     private static final short CARD_NUMBER_PAN_OFFSET = 0xB6; 
    12     private static final short CARD_VERSION_OFFSET = 0xD6; 
    13     private static final short ISSUING_DATE_OFFSET = 0xE6; 
    14     private static final short LOCAL_OF_REQUEST_OFFSET = 0xFA; 
    15     private static final short EXPIRY_DATE_OFFSET = 0x136; 
    16     private static final short SURNAME_OFFSET = 0x14A; 
    17     private static final short GIVEN_NAME_OFFSET = 0x1C2; 
    18     private static final short SEX_OFFSET = 0x23A; 
    19     private static final short NATIONALITY_OFFSET = 0x23C; 
    20     private static final short DATE_OF_BIRTH_OFFSET = 0x242; 
    21     private static final short HEIGHT_OFFSET = 0x256; 
    22     private static final short DOCUMENT_NUMBER_OFFSET = 0x25E; 
    23     private static final short SURNAME_MOTHER_OFFSET = 0x270; 
    24     private static final short GIVEN_NAME_MOTHER_OFFSET = 0x2E8; 
    25     private static final short SURNAME_FATHER_OFFSET = 0x360; 
    26     private static final short GIVEN_NAME_FATHER_OFFSET = 0x3D8; 
    27     private static final short TAX_NUMBER_OFFSET = 0x450; 
    28     private static final short SOCIAL_SECURITY_NUMBER_OFFSET = 0x462; 
    29     private static final short HEALTH_NUMBER_OFFSET = 0x478; 
    30     private static final short ACCIDENTAL_INDICATIONS_OFFSET = 0x48A; 
    31     private static final short MRZ1_OFFSET = 0x502; 
    32     private static final short MRZ2_OFFSET = 0x520; 
    33     private static final short MRZ3_OFFSET = 0x53E; 
    34     /* Fields length */ 
    35     private static final short PTEID_DELIVERY_ENTITY_LEN = 40; 
    36     private static final short PTEID_COUNTRY_LEN = 80; 
    37     private static final short PTEID_DOCUMENT_TYPE_LEN = 34; 
    38     private static final short PTEID_CARDNUMBER_LEN = 28; 
    39     private static final short PTEID_CARDNUMBER_PAN_LEN = 32; 
    40     private static final short PTEID_CARDVERSION_LEN = 16; 
    41     private static final short PTEID_DATE_LEN = 20; 
    42     private static final short PTEID_LOCALE_LEN = 60; 
    43     private static final short PTEID_NAME_LEN = 120; 
    44     private static final short PTEID_SEX_LEN = 2; 
    45     private static final short PTEID_NATIONALITY_LEN = 6; 
    46     private static final short PTEID_HEIGHT_LEN = 8; 
    47     private static final short PTEID_NUMBI_LEN = 18; 
    48     private static final short PTEID_NUMNIF_LEN = 18; 
    49     private static final short PTEID_NUMSS_LEN = 22; 
    50     private static final short PTEID_NUMSNS_LEN = 18; 
    51     private static final short PTEID_INDICATIONEV_LEN = 120; 
    52     private static final short PTEID_MRZ_LEN = 30; 
    53      
    54     public short version; 
    55     public String deliveryEntity; 
     8    public String issuingEntity; 
    569    public String country; 
    5710    public String documentType; 
    5811    public String cardNumber; 
    59     public String cardNumberPAN; 
    6012    public String cardVersion; 
    61     public String deliveryDate; 
     13    public String issuingDate; 
    6214    public String locale; 
    6315    public String validityDate; 
     
    7729    public String numSNS; 
    7830    public String notes; 
    79     public String mrz1; 
    80     public String mrz2; 
    81     public String mrz3; 
    82  
    83     public static PTEID_ID parseId(byte[] buf) { 
    84  
    85         PTEID_ID id = new PTEID_ID(); 
    86  
    87         id.deliveryEntity = Utils.extractString(buf, ISSUING_ENTITY_OFFSET, PTEID_DELIVERY_ENTITY_LEN); 
    88         id.country = Utils.extractString(buf, COUNTRY_OFFSET, PTEID_COUNTRY_LEN); 
    89         id.documentType = Utils.extractString(buf, DOCUMENT_TYPE_OFFSET, PTEID_DOCUMENT_TYPE_LEN); 
    90         id.cardNumber = Utils.extractString(buf, CARD_NUMBER_OFFSET, PTEID_CARDNUMBER_LEN); 
    91         id.cardNumberPAN = Utils.extractString(buf, CARD_NUMBER_PAN_OFFSET, PTEID_CARDNUMBER_PAN_LEN); 
    92         id.cardVersion = Utils.extractString(buf, CARD_VERSION_OFFSET, PTEID_CARDVERSION_LEN); 
    93         id.deliveryDate = Utils.extractString(buf, ISSUING_DATE_OFFSET, PTEID_DATE_LEN); 
    94         id.locale = Utils.extractString(buf, LOCAL_OF_REQUEST_OFFSET, PTEID_LOCALE_LEN); 
    95         id.validityDate = Utils.extractString(buf, EXPIRY_DATE_OFFSET, PTEID_DATE_LEN); 
    96         id.name = Utils.extractString(buf, SURNAME_OFFSET, PTEID_NAME_LEN); 
    97         id.firstname = Utils.extractString(buf, GIVEN_NAME_OFFSET, PTEID_NAME_LEN); 
    98         id.sex = Utils.extractString(buf, SEX_OFFSET, PTEID_SEX_LEN); 
    99         id.nationality = Utils.extractString(buf, NATIONALITY_OFFSET, PTEID_NATIONALITY_LEN); 
    100         id.birthDate = Utils.extractString(buf, DATE_OF_BIRTH_OFFSET, PTEID_DATE_LEN); 
    101         id.height = Utils.extractString(buf, HEIGHT_OFFSET, PTEID_HEIGHT_LEN); 
    102         id.numBI = Utils.extractString(buf, DOCUMENT_NUMBER_OFFSET, PTEID_NUMBI_LEN); 
    103         id.nameFather = Utils.extractString(buf, SURNAME_FATHER_OFFSET, PTEID_NAME_LEN); 
    104         id.firstnameFather = Utils.extractString(buf, GIVEN_NAME_FATHER_OFFSET, PTEID_NAME_LEN); 
    105         id.nameMother = Utils.extractString(buf, SURNAME_MOTHER_OFFSET, PTEID_NAME_LEN); 
    106         id.firstnameMother = Utils.extractString(buf, GIVEN_NAME_MOTHER_OFFSET, PTEID_NAME_LEN); 
    107         id.numNIF = Utils.extractString(buf, TAX_NUMBER_OFFSET, PTEID_NUMNIF_LEN); 
    108         id.numSS = Utils.extractString(buf, SOCIAL_SECURITY_NUMBER_OFFSET, PTEID_NUMSS_LEN); 
    109         id.numSNS = Utils.extractString(buf, HEALTH_NUMBER_OFFSET, PTEID_NUMSNS_LEN); 
    110         id.notes = Utils.extractString(buf, ACCIDENTAL_INDICATIONS_OFFSET, PTEID_INDICATIONEV_LEN); 
    111         id.mrz1 = Utils.extractString(buf, MRZ1_OFFSET, PTEID_MRZ_LEN); 
    112         id.mrz2 = Utils.extractString(buf, MRZ2_OFFSET, PTEID_MRZ_LEN); 
    113         id.mrz3 = Utils.extractString(buf, MRZ3_OFFSET, PTEID_MRZ_LEN); 
    114  
    115         return id; 
     31     
     32    public PTEID_ID(PTEID_EId beid) throws PTEID_Exception { 
     33        this.issuingEntity = beid.getIssuingEntity(); 
     34        this.country = beid.getCountry(); 
     35        this.documentType = beid.getDocumentType(); 
     36        this.cardNumber = beid.getDocumentNumber(); 
     37        this.cardVersion = beid.getDocumentVersion(); 
     38        this.issuingDate = beid.getValidityBeginDate(); 
     39        this.locale = beid.getLocalofRequest(); 
     40        this.validityDate = beid.getValidityEndDate(); 
     41        this.name = beid.getSurname(); 
     42        this.firstname = beid.getFirstName1(); 
     43        this.sex = beid.getGender(); 
     44        this.nationality = beid.getNationality(); 
     45        this.birthDate = beid.getDateOfBirth(); 
     46        this.height = beid.getHeight(); 
     47        this.numBI = beid.getCivilianIdNumber(); 
     48        this.nameFather = beid.getSurnameFather(); 
     49        this.firstnameFather = beid.getGivenNameFather(); 
     50        this.nameMother = beid.getSurnameMother(); 
     51        this.firstnameMother = beid.getGivenNameMother(); 
     52        this.numNIF = beid.getTaxNo(); 
     53        this.numSS = beid.getSocialSecurityNumber(); 
     54        this.numSNS = beid.getHealthNumber(); 
     55        this.notes = beid.getAccidentalIndications(); 
    11656    } 
    11757} 
  • middleware-online/trunk/cc-commons/src/main/java/pt/gov/cartaodecidadao/applet/commons/pteid/PTEID_PIC.java

    r6 r13  
    11package pt.gov.cartaodecidadao.applet.commons.pteid; 
     2 
     3import pt.gov.cartaodecidadao.PTEID_EId; 
     4import pt.gov.cartaodecidadao.PTEID_Exception; 
    25 
    36public class PTEID_PIC { 
    47 
    5     // picture attributes offsets 
    6     private static final short CBEFF_OFFSET = 0x5DF; 
    7     private static final short FACIALRECHDR_OFFSET = 0x601; 
    8     private static final short FACIALINFO_OFFSET = 0x60F; 
    9     private static final short IMAGEINFO_OFFSET = 0x623; 
    10     private static final short PICTURE_OFFSET = 0x62F; 
    11     // fotografia termina com FF D9 
    12     private static final byte[] jp2_eoc = new byte[]{(byte) 0xFF, (byte) 0xD9}; 
    13     //private static final short PTEID_MAX_PICTURE_LEN = 14128; 
    14     //private static final short PTEID_MAX_PICTURE_LEN_HEADER = 111; 
    15     //private static final short PTEID_MAX_PICTUREH_LEN = (PTEID_MAX_PICTURE_LEN + PTEID_MAX_PICTURE_LEN_HEADER); 
    16     private static final short PTEID_MAX_CBEFF_LEN = 34; 
    17     private static final short PTEID_MAX_FACRECH_LEN = 14; 
    18     private static final short PTEID_MAX_FACINFO_LEN = 20; 
    19     private static final short PTEID_MAX_IMAGEINFO_LEN = 12; 
    20     //private static final short PTEID_MAX_IMAGEHEADER_LEN = (PTEID_MAX_CBEFF_LEN + PTEID_MAX_FACRECH_LEN + PTEID_MAX_FACINFO_LEN + PTEID_MAX_IMAGEINFO_LEN); 
    21      
    228    public short version; 
    239    public byte[] cbeff; 
     
    2713    public byte[] picture; 
    2814 
    29     public static PTEID_PIC parsePic(byte[] buf) { 
    30  
    31         PTEID_PIC pic = new PTEID_PIC(); 
    32          
    33         pic.cbeff = Utils.extractRange(buf, CBEFF_OFFSET, PTEID_MAX_CBEFF_LEN); 
    34         pic.facialrechdr = Utils.extractRange(buf, FACIALRECHDR_OFFSET, PTEID_MAX_FACRECH_LEN); 
    35         pic.facialinfo = Utils.extractRange(buf, FACIALINFO_OFFSET, PTEID_MAX_FACINFO_LEN); 
    36         pic.imageinfo = Utils.extractRange(buf, IMAGEINFO_OFFSET, PTEID_MAX_IMAGEINFO_LEN); 
    37  
    38         int k; 
    39         int piclength = 0; 
    40         for (k = buf.length - 1; k > PICTURE_OFFSET; k--) { 
    41             if (buf[k] == jp2_eoc[1] && buf[k - 1] == jp2_eoc[0]) { 
    42                 piclength = k - PICTURE_OFFSET + 1; 
    43                 break; 
    44             } 
    45         } 
    46          
    47         if (piclength <= 0) { 
    48             throw new RuntimeException("Terminador da imagem não encontrado"); 
    49         } 
    50  
    51         pic.picture = Utils.extractRange(buf, PICTURE_OFFSET, piclength); 
    52  
    53         return pic; 
     15    public PTEID_PIC(PTEID_EId beid) throws PTEID_Exception { 
     16//        TODO complete with the missing attributes 
     17//        this.version; 
     18//        this.cbeff; 
     19//        this.facialrechdr; 
     20//        this.facialinfo; 
     21//        this.imageinfo; 
     22        this.picture = beid.getPhoto().GetBytes(); 
    5423    } 
    5524} 
  • middleware-online/trunk/native-libraries/src/main/java/pt/gov/cartaodecidadao/applet/nativelibs/LibLoader.java

    r6 r13  
    66 */ 
    77public class LibLoader { 
    8      
    9     private static final String PKCS11_MODULE_NAME = "pkcs11-impl"; 
    10      
    11     private static final String LINUX_PREFIX = "$ORIGIN/"; 
    12     private static final String MACOSX_PREFIX = "@loader_path/"; 
    13      
     8        
    149    public static final String CC_JAVA_WRAPPER_WINDOWS = "pteid35libJava_Wrapper"; 
    15     public static final String CC_JAVA_WRAPPER_LINUX_MACOS = "pteidlibJava_Wrapper"; 
    16      
    17     public static String  prepareLibrary() { 
    18         final String libraryFile = System.mapLibraryName(PKCS11_MODULE_NAME); 
    19          
    20         final String osName = System.getProperty("os.name"); 
    21          
    22         if (osName.contains("Linux")) { 
    23             return LINUX_PREFIX + libraryFile; 
    24         } else if (osName.contains("Mac OS X")) { 
    25             return MACOSX_PREFIX + libraryFile; 
    26         } else if(osName.contains("Windows")) { 
    27             /* 
    28              * Windows acts "peculiar" when it comes to dependent libraries so we 
    29              * have to load all of them, one at a time, in order. 
    30              */ 
    31             System.loadLibrary("libeay32"); 
    32             System.loadLibrary("zlib1"); 
    33             System.loadLibrary("libltdl-3"); 
    34             System.loadLibrary("libopensc-3"); 
    35              
    36             /* 
    37              * Windows refuses to load the pkcs11 implementation dll when we pass it 
    38              * to the pkcs11 wrapper using a relative path. However, if we load it 
    39              * beforehand it works. 
    40              */ 
    41             System.loadLibrary(PKCS11_MODULE_NAME); 
    42             return PKCS11_MODULE_NAME; 
    43         } else { 
    44             return libraryFile; 
    45         } 
    46     } 
    47      
     10    public static final String CC_JAVA_WRAPPER_LINUX_MACOS = "pteidlibJava_Wrapper";  
     11    
    4812    public static void  loadLibraryNG() { 
    4913        final String osName = System.getProperty("os.name"); 
  • middleware-online/trunk/pom.xml

    r6 r13  
    3131  <modules> 
    3232    <module>webapp</module> 
    33     <module>auth-applet</module> 
    34     <module>auth-app</module> 
    3533    <module>standalone-auth-applet</module> 
    36     <module>standalone-auth-app</module> 
    3734    <module>native-libraries</module> 
    3835    <module>nativelib-linux-amd64</module> 
     
    4138    <module>nativelib-macosx-universal</module> 
    4239    <module>util-applet</module> 
    43     <module>util-app</module> 
    4440    <module>cc-custom-laf</module> 
    4541    <module>cc-commons</module> 
  • middleware-online/trunk/standalone-auth-applet/src/main/java/pt/gov/cartaodecidadao/applet/standaloneauth/business/CcSdkCardHelper.java

    r6 r13  
    1313import java.security.cert.X509Certificate; 
    1414import java.util.Arrays; 
     15 
    1516import pt.gov.cartaodecidadao.PTEID_ByteArray; 
    1617import pt.gov.cartaodecidadao.PTEID_Certificate; 
     
    2526import pt.gov.cartaodecidadao.PTEID_ReaderSet; 
    2627import pt.gov.cartaodecidadao.PTEID_ulwrapper; 
    27 import pt.gov.cartaodecidadao.applet.commons.beidconverter.BeidConverter; 
    2828import pt.gov.cartaodecidadao.applet.commons.pteid.PTEID_ADDR; 
    2929import pt.gov.cartaodecidadao.applet.commons.pteid.PTEID_ID; 
     
    8383    public PTEID_ID getCitizenId() throws CCError { 
    8484        try { 
    85             PTEID_EId beid = card.getID(); 
    86             return BeidConverter.translateBEID(beid); 
     85            return new PTEID_ID(card.getID()); 
    8786        } catch (PTEID_Exception ex) { 
    8887            throw new CCError(ex); 
     
    9493        try { 
    9594            PTEID_EId beid = card.getID(); 
    96  
    9795            verifyPin(card.getPins().getPinByNumber(4), pinCallback); 
    98              
    99             return BeidConverter.translateBEID(card.getAddr()); 
     96            return new PTEID_ADDR(card.getAddr()); 
    10097        } catch (PTEID_Exception ex) { 
    10198            throw new CCError(ex); 
     
    106103    public PTEID_PIC getCitizenPic() throws CCError { 
    107104        try { 
    108             PTEID_EId beid = card.getID(); 
    109             return BeidConverter.extractPic(beid); 
     105            return new PTEID_PIC(card.getID()); 
    110106        } catch (PTEID_Exception ex) { 
    111107            throw new CCError(ex); 
     
    144140             
    145141            verifyPin(card.getPins().getPinByNumber(0), pinCallback); 
    146              
     142System.out.println("DEBUG: signing array of "+fullDigest.length+" bytes");             
    147143            PTEID_ByteArray outputData = card.Sign(new PTEID_ByteArray(fullDigest, fullDigest.length)); 
    148144             
  • middleware-online/trunk/standalone-auth-applet/src/main/java/pt/gov/cartaodecidadao/applet/standaloneauth/business/StandaloneAuthBusiness.java

    r6 r13  
    145145        checkAddNode(attrSet, identificationNumbers, "SocialSecurityNo", pteidId.numSS); 
    146146        checkAddNode(attrSet, identificationNumbers, "HealthNo", pteidId.numSNS); 
    147         checkAddNode(attrSet, identificationNumbers, "mrz1", pteidId.mrz1); 
    148         checkAddNode(attrSet, identificationNumbers, "mrz2", pteidId.mrz2); 
    149         checkAddNode(attrSet, identificationNumbers, "mrz3", pteidId.mrz3); 
    150147        if(identificationNumbers.hasChildNodes()) { 
    151148            rootNode.appendChild(identificationNumbers); 
     
    154151        Element cardValues = doc.createElement("CardValues"); 
    155152        checkAddNode(attrSet, cardValues, "cardVersion", pteidId.cardVersion); 
    156         checkAddNode(attrSet, cardValues, "cardNumberPAN", pteidId.cardNumberPAN); 
    157         checkAddNode(attrSet, cardValues, "issuingDate", pteidId.deliveryDate); 
    158         checkAddNode(attrSet, cardValues, "issuingEntity", pteidId.deliveryEntity); 
     153        checkAddNode(attrSet, cardValues, "issuingDate", pteidId.issuingDate); 
     154        checkAddNode(attrSet, cardValues, "issuingEntity", pteidId.issuingEntity); 
    159155        checkAddNode(attrSet, cardValues, "documentType", pteidId.documentType); 
    160156        checkAddNode(attrSet, cardValues, "localOfRequest", pteidId.locale); 
    161         checkAddNode(attrSet, cardValues, "version", "" + pteidId.version); 
    162157        if(cardValues.hasChildNodes()) { 
    163158            rootNode.appendChild(cardValues); 
     
    172167        rootNode.appendChild(address); 
    173168        checkAddNode(attrSet, address, "district", pteidAddr.districtDesc); 
    174         checkAddNode(attrSet, address, "municipality", pteidAddr.municipalityDesc); 
    175         checkAddNode(attrSet, address, "civilParish", pteidAddr.freguesiaDesc); 
    176         checkAddNode(attrSet, address, "abrStreetType", pteidAddr.streettypeAbbr); 
    177         checkAddNode(attrSet, address, "streetType", pteidAddr.streettype); 
    178         checkAddNode(attrSet, address, "streetName", pteidAddr.streettype + ' ' + pteidAddr.street); 
     169        checkAddNode(attrSet, address, "abrStreetType", pteidAddr.streetTypeAbbr); 
     170        checkAddNode(attrSet, address, "streetType", pteidAddr.streetType); 
     171        checkAddNode(attrSet, address, "streetName", pteidAddr.streetType + ' ' + pteidAddr.street); 
    179172        checkAddNode(attrSet, address, "abrBuildingType", pteidAddr.buildingAbbr); 
    180173        checkAddNode(attrSet, address, "buildingType", pteidAddr.building); 
  • middleware-online/trunk/standalone-auth-applet/src/main/java/pt/gov/cartaodecidadao/applet/standaloneauth/panel/StandaloneAuthPanel.java

    r6 r13  
    816816                cardCertChain = appletBusiness.getCardCertificateChain(); 
    817817 
    818                 try { 
    819                     StandaloneAuthBusiness.validateCardCertificateChain(cardCertChain); 
    820                 } catch (CCError err) { 
    821                     // esta operação não é crítica, logo os erros não terminam a aplicação 
    822                     Logger.getLogger(StandaloneAuthPanel.class.getName()).log(Level.WARNING, null, err); 
    823                     Logger.getLogger(StandaloneAuthPanel.class.getName()).log(Level.FINE, null, err.getCause()); 
    824                 } catch (CCValidatonFailedException ex) { 
    825                     // se conseguimos validar mas ocorrer uma excepção então é crítico 
    826                     handleError(ex); 
    827                     return null; 
    828                 } 
     818//                try { 
     819//                    StandaloneAuthBusiness.validateCardCertificateChain(cardCertChain); 
     820//                } catch (CCError err) { 
     821//                    // esta operação não é crítica, logo os erros não terminam a aplicação 
     822//                    Logger.getLogger(StandaloneAuthPanel.class.getName()).log(Level.WARNING, null, err); 
     823//                    Logger.getLogger(StandaloneAuthPanel.class.getName()).log(Level.FINE, null, err.getCause()); 
     824//                } catch (CCValidatonFailedException ex) { 
     825//                    // se conseguimos validar mas ocorrer uma excepção então é crítico 
     826//                    handleError(ex); 
     827//                    return null; 
     828//                } 
    829829 
    830830                serverCertChain = StandaloneAuthBusiness.getServerCertificateChain(submitUrl); 
    831831                 
    832                 try { 
    833                     StandaloneAuthBusiness.validateServerCertificate(submitUrl, serverCertChain); 
    834                 } catch (CCValidatonFailedException ex) { 
    835                     // se conseguimos validar mas ocorrer uma excepção então é crítico 
    836                     handleError(ex); 
    837                     return null; 
    838                 } 
     832//                try { 
     833//                    StandaloneAuthBusiness.validateServerCertificate(submitUrl, serverCertChain); 
     834//                } catch (CCValidatonFailedException ex) { 
     835//                    // se conseguimos validar mas ocorrer uma excepção então é crítico 
     836//                    handleError(ex); 
     837//                    return null; 
     838//                } 
    839839 
    840840                xmlResponse = appletBusiness.buildXMLResponse(selectedAttrSet, submitUrl.getHost()); 
  • middleware-online/trunk/util-applet/src/main/java/pt/gov/cartaodecidadao/applet/util/UtilApplet.java

    r6 r13  
    11package pt.gov.cartaodecidadao.applet.util; 
    22 
     3import java.applet.Applet; 
     4import java.awt.image.BufferedImage; 
     5import java.io.ByteArrayInputStream; 
     6import java.io.ByteArrayOutputStream; 
     7import java.security.AccessController; 
     8import java.security.PrivilegedAction; 
     9import java.util.ArrayList; 
     10import java.util.List; 
    311import java.util.logging.Level; 
    412import java.util.logging.Logger; 
     13 
     14import javax.imageio.ImageIO; 
     15 
     16import org.apache.commons.codec.binary.Base64; 
     17 
     18import pt.gov.cartaodecidadao.PTEID_ByteArray; 
     19import pt.gov.cartaodecidadao.PTEID_Certificate; 
     20import pt.gov.cartaodecidadao.PTEID_Certificates; 
     21import pt.gov.cartaodecidadao.PTEID_EIDCard; 
     22import pt.gov.cartaodecidadao.PTEID_EId; 
     23import pt.gov.cartaodecidadao.PTEID_ExCertNoIssuer; 
     24import pt.gov.cartaodecidadao.PTEID_Exception; 
     25import pt.gov.cartaodecidadao.PTEID_Pin; 
     26import pt.gov.cartaodecidadao.PTEID_Pins; 
     27import pt.gov.cartaodecidadao.PTEID_ReaderContext; 
     28import pt.gov.cartaodecidadao.PTEID_ReaderSet; 
     29import pt.gov.cartaodecidadao.PTEID_ulwrapper; 
    530import pt.gov.cartaodecidadao.applet.commons.pteid.PTEID_ADDR; 
    631import pt.gov.cartaodecidadao.applet.commons.pteid.PTEID_ID; 
    732import pt.gov.cartaodecidadao.applet.commons.pteid.PTEID_PIC; 
     33import pt.gov.cartaodecidadao.applet.nativelibs.LibLoader; 
     34 
    835 
    936/** 
     
    1138 * @author bnazare 
    1239 */ 
    13 public class UtilApplet extends javax.swing.JApplet implements ExternalUtilApplet { 
    14  
    15     /** Initializes the applet AppletUtilitaria */ 
     40public class UtilApplet extends Applet { 
     41         
     42        private static final String NOTES_FILE_ID = "3f005f00ef07"; 
     43        public static final int MAX_NOTES_SIZE = 255; // current maximum allowed by the SDK. the card profile allows upto 1000!! 
     44        private static final byte NOTES_PADDING_BYTE = 0; 
     45        private static final int MAXIMUN_PIN_ATTEMPTS = 3; 
     46         
     47    private PTEID_EIDCard card; 
     48     
    1649    @Override 
    1750    public void init() { 
    1851             
    1952        try { 
    20             java.awt.EventQueue.invokeAndWait(new Runnable() { 
    21                 @Override 
    22                 public void run() { 
    23                     initComponents(); 
    24                     painelUtilitario1.initNative(); 
    25                 } 
    26             }); 
     53                LibLoader.loadLibraryNG(); 
    2754        } catch (Exception ex) { 
    2855            Logger.getLogger(UtilApplet.class.getName()).log(Level.SEVERE, null, ex); 
     
    3259    @Override 
    3360    public void start() { 
    34         painelUtilitario1.detectCard(); 
    35     } 
    36  
    37     /** This method is called from within the init() method to 
    38      * initialize the form. 
    39      * WARNING: Do NOT modify this code. The content of this method is 
    40      * always regenerated by the Form Editor. 
    41      */ 
    42     @SuppressWarnings("unchecked") 
    43     // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents 
    44     private void initComponents() { 
    45  
    46         painelUtilitario1 = new pt.gov.cartaodecidadao.applet.util.panel.UtilPanel(); 
    47  
    48         javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
    49         getContentPane().setLayout(layout); 
    50         layout.setHorizontalGroup( 
    51             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
    52             .addComponent(painelUtilitario1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
    53         ); 
    54         layout.setVerticalGroup( 
    55             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
    56             .addComponent(painelUtilitario1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
    57         ); 
    58     }// </editor-fold>//GEN-END:initComponents 
    59  
    60  
    61     // Variables declaration - do not modify//GEN-BEGIN:variables 
    62     private pt.gov.cartaodecidadao.applet.util.panel.UtilPanel painelUtilitario1; 
    63     // End of variables declaration//GEN-END:variables 
    64  
    65     @Override 
     61        detectCard(); 
     62    } 
     63 
     64    public void detectCard() { 
     65        try { 
     66            PTEID_ReaderSet readerSet = PTEID_ReaderSet.instance(); 
     67            PTEID_ReaderContext readerContext = readerSet.getReader(); 
     68            card = readerContext.getEIDCard(); 
     69        } catch (Throwable ex) { 
     70            Logger.getLogger(UtilApplet.class.getName()).log(Level.SEVERE, null, ex); 
     71        } 
     72    } 
     73     
    6674    public PTEID_ID getPteidId() { 
    67         return painelUtilitario1.getPteidId(); 
    68     } 
    69  
    70     @Override 
     75        try { 
     76            return new PTEID_ID(card.getID()); 
     77        } catch (Throwable ex) { 
     78            Logger.getLogger(UtilApplet.class.getName()).log(Level.SEVERE, null, ex); 
     79            return null; 
     80        } 
     81    } 
     82     
    7183    public PTEID_PIC getPteidPic() { 
    72         return painelUtilitario1.getPteidPic(); 
    73     } 
    74  
    75     @Override 
     84        try { 
     85            return new PTEID_PIC(card.getID()); 
     86        } catch (Throwable ex) { 
     87            Logger.getLogger(UtilApplet.class.getName()).log(Level.SEVERE, null, ex); 
     88            return null; 
     89        } 
     90    } 
     91     
    7692    public String getPicBase64() { 
    77         return painelUtilitario1.getPicBase64(); 
    78     } 
    79  
    80     @Override 
     93        return AccessController.doPrivileged(new PrivilegedAction<String>() { 
     94 
     95            @Override 
     96            public String run() { 
     97                try { 
     98                    PTEID_EId beid = card.getID(); 
     99 
     100                    ByteArrayOutputStream jpegImageStream = new ByteArrayOutputStream(); 
     101 
     102                    BufferedImage bi = ImageIO.read(new ByteArrayInputStream(beid.getPhoto().GetBytes())); 
     103                    ImageIO.write(bi, "jpeg", jpegImageStream); 
     104                    jpegImageStream.flush(); 
     105 
     106                    String encodedPicture = Base64.encodeBase64String(jpegImageStream.toByteArray()); 
     107                    encodedPicture = encodedPicture.replaceAll("\r", "").replaceAll("\n", ""); 
     108 
     109                    return encodedPicture; 
     110                } catch (Throwable ex) { 
     111                    Logger.getLogger(UtilApplet.class.getName()).log(Level.SEVERE, null, ex); 
     112                    return null; 
     113                } 
     114            } 
     115        }); 
     116    } 
     117     
    81118    public PTEID_ADDR getPteidAddr() { 
    82         return painelUtilitario1.getPteidAddr(); 
    83     } 
    84  
    85     @Override 
     119        try { 
     120            getAddressPin().verifyPin("3333", new PTEID_ulwrapper(-1)); 
     121            return new PTEID_ADDR(card.getAddr()); 
     122        } catch (Throwable ex) { 
     123            Logger.getLogger(UtilApplet.class.getName()).log(Level.SEVERE, null, ex); 
     124            return null; 
     125        } 
     126    } 
     127     
    86128    public String getPteidNotes() { 
    87         return painelUtilitario1.getPteidNotes(); 
    88     } 
    89  
    90     @Override 
     129        try { 
     130                PTEID_ByteArray bytesRead = card.readFile(NOTES_FILE_ID, 0); 
     131            return new String(bytesRead.GetBytes()).trim(); // yes, this will remove valid white space in the end... 
     132        } catch (Throwable ex) { 
     133            Logger.getLogger(UtilApplet.class.getName()).log(Level.SEVERE, null, ex); 
     134            return null; 
     135        } 
     136    } 
     137     
     138    public boolean verifyPin(int pinIndex) { 
     139                try { 
     140                        return card.getPins().getPinByNumber(pinIndex).verifyPin(null, new PTEID_ulwrapper(-1)); 
     141                } catch (Throwable ex) { 
     142                        Logger.getLogger(UtilApplet.class.getName()).log(Level.SEVERE, 
     143                                        null, ex); 
     144                        return false; 
     145                } 
     146    } 
     147     
     148    public int verifyPin(String inPin, int pinIndex) { 
     149        PTEID_ulwrapper attemptsLeft = new PTEID_ulwrapper(-1); 
     150        try { 
     151                        if (card.getPins().getPinByNumber(pinIndex).verifyPin(inPin, attemptsLeft)) 
     152                                return -1; 
     153                        else  
     154                                return (int) attemptsLeft.m_long; 
     155                } catch (Throwable ex) { 
     156                        Logger.getLogger(UtilApplet.class.getName()).log(Level.SEVERE, 
     157                                        null, ex); 
     158                        return (int) attemptsLeft.m_long; 
     159                } 
     160    } 
     161     
     162    public int verifyAddressPin(String inPin) { 
     163        PTEID_ulwrapper attemptsLeft = new PTEID_ulwrapper(-1); 
     164        try { 
     165                        if (getAddressPin().verifyPin(inPin, attemptsLeft)) 
     166                                return -1; 
     167                        else  
     168                                return (int) attemptsLeft.m_long; 
     169                } catch (Throwable ex) { 
     170                        Logger.getLogger(UtilApplet.class.getName()).log(Level.SEVERE, 
     171                                        null, ex); 
     172                        return (int) attemptsLeft.m_long; 
     173                } 
     174    } 
     175     
     176        public int verifyAuthPin(String inPin) { 
     177        PTEID_ulwrapper attemptsLeft = new PTEID_ulwrapper(-1); 
     178        try { 
     179                        if (getAuthenticationPin().verifyPin(inPin, attemptsLeft)) 
     180                                return -1; 
     181                        else  
     182                                return (int) attemptsLeft.m_long; 
     183                } catch (Throwable ex) { 
     184                        Logger.getLogger(UtilApplet.class.getName()).log(Level.SEVERE, 
     185                                        null, ex); 
     186                        return (int) attemptsLeft.m_long; 
     187                } 
     188        } 
     189     
     190    public void setPteidNotes(String strNotes) { 
     191        try { 
     192                 
     193                byte[] out = new byte[MAX_NOTES_SIZE]; 
     194                byte[] notes = strNotes.getBytes(); 
     195                int i = 0; 
     196                while ((i < notes.length) && (i < MAX_NOTES_SIZE)) { 
     197                        out[i] = notes[i]; 
     198                        ++i; 
     199                } 
     200                while (i < MAX_NOTES_SIZE) { 
     201                        out[i++] = NOTES_PADDING_BYTE; 
     202                } 
     203 
     204            card.writeFile(NOTES_FILE_ID, new PTEID_ByteArray(out, out.length)); 
     205             
     206        } catch (Throwable ex) { 
     207            Logger.getLogger(UtilApplet.class.getName()).log(Level.SEVERE, null, ex); 
     208        } 
     209    } 
     210     
    91211    public CardCert[] getCertificates() { 
    92         return painelUtilitario1.getCertificates(); 
    93     } 
    94  
    95     @Override 
    96     public CardCertDetail getCertificateDetails(int certId) { 
    97         return painelUtilitario1.getCertificateDetails(certId); 
    98     } 
    99  
    100     @Override 
     212        try { 
     213                PTEID_Certificates certificates = card.getCertificates(); 
     214                List<CardCert> chain = new ArrayList<CardCert>(); 
     215                List<CardCert> source = new ArrayList<CardCert>(); 
     216                CardCert roots[] = {null, null}; // test cards may have two roots 
     217                 
     218                for (int i = 0, j= 0, maxi = (int) certificates.countFromCard(); i < maxi; ++i) { 
     219                        CardCert cert = new CardCert(certificates.getCert(i)); 
     220                        source.add(cert); 
     221                        if (cert.isRoot()) { 
     222                                roots[j++] = cert; 
     223                        } 
     224                } 
     225                 
     226                chain.addAll(buildChain(roots[0], source)); 
     227                if (roots[1] != null) 
     228                        chain.addAll(buildChain(roots[1], source)); 
     229                return chain.toArray(new CardCert[chain.size()]); 
     230                 
     231        } catch (Throwable ex) { 
     232                Logger.getLogger(UtilApplet.class.getName()).log(Level.SEVERE, null, ex); 
     233                return null; 
     234        } 
     235    } 
     236     
    101237    public PIN[] getPins() { 
    102         return painelUtilitario1.getPins(); 
    103     } 
    104  
    105     @Override 
    106     public boolean confirmAddress(int processNumber, int confirmationCode) { 
    107         throw new UnsupportedOperationException("Not supported yet."); 
    108     } 
    109  
    110     @Override 
    111     public boolean checkPin(int pinId, String pin) { 
    112         throw new UnsupportedOperationException("Not supported yet."); 
    113     } 
    114  
    115     @Override 
    116     public boolean changePin(int pinId, String oldPin, String newPin) { 
    117         throw new UnsupportedOperationException("Not supported yet."); 
    118     } 
    119  
    120     @Override 
    121     public boolean saveUserNotes(String newContent) { 
    122         throw new UnsupportedOperationException("Not supported yet."); 
    123     } 
    124  
     238         
     239        try { 
     240                PTEID_Pins pins = card.getPins(); 
     241            List<PIN> res = new ArrayList<PIN>(); 
     242            for (int i = 0, maxi = (int) pins.count(); i < maxi; ++i) { 
     243                PTEID_Pin sdkPin = pins.getPinByNumber(i); 
     244                if (sdkPin.getLabel().contains("PIN")) { 
     245                        res.add(new PIN(sdkPin)); 
     246                } 
     247            } 
     248            return res.toArray(new PIN[res.size()]); 
     249        } catch (Throwable ex) { 
     250            Logger.getLogger(UtilApplet.class.getName()).log(Level.SEVERE, null, ex); 
     251            return null; 
     252        } 
     253    } 
     254 
     255    public int changePin(String oldPin, String newPin, int pinIndex) { 
     256        PTEID_ulwrapper attemptsLeft = new PTEID_ulwrapper(-1); 
     257        try { 
     258                        PTEID_Pin pin = card.getPins().getPinByNumber(pinIndex); 
     259                        if (pin.changePin(oldPin, newPin, attemptsLeft, pin.getLabel())) 
     260                                return -1; 
     261                        else 
     262                                return (int) attemptsLeft.m_long; 
     263                } catch (Throwable ex) { 
     264                        Logger.getLogger(UtilApplet.class.getName()).log(Level.SEVERE,null, ex); 
     265                        return (int) attemptsLeft.m_long; 
     266                } 
     267    } 
     268     
     269    private PTEID_Pin getAddressPin() throws PTEID_Exception { 
     270        return getPinByLabel(card.getPins(), "Morada"); 
     271    }        
     272     
     273    private PTEID_Pin getAuthenticationPin() throws PTEID_Exception { 
     274        return getPinByLabel(card.getPins(), "Autentica"); 
     275    } 
     276     
     277    private static PTEID_Pin getPinByLabel(PTEID_Pins pins, String label) throws PTEID_Exception { 
     278        PTEID_Pin pin = null; 
     279        for (int i = 0, maxi = (int) pins.count(); i < maxi; ++i) { 
     280                pin = pins.getPinByNumber(i);  
     281                if (pin.getLabel().contains(label)) 
     282                        return pin; 
     283        } 
     284        return null;      
     285    } 
     286     
     287        private static List<CardCert> buildChain(CardCert rootCert, List<CardCert> source) throws PTEID_Exception { 
     288                 
     289                List<CardCert> res = new ArrayList<CardCert>(); 
     290                res.add(rootCert); 
     291                for (int i = 0, maxi = (int) source.size(); i < maxi; ++i) { 
     292                        CardCert cert = source.get(i); 
     293                        if (rootCert.serialNumber.equals(cert.issuerSerialNumber)) { 
     294                                cert.indentation = 1; 
     295                                res.add(cert); // SuBCA or subject certificate  
     296                                for (int j = 0, maxj = (int) source.size(); j < maxj; ++j) { 
     297                                        CardCert cert2 = source.get(j); 
     298                                        if (cert.serialNumber.equals(cert2.issuerSerialNumber)) { 
     299                                                cert2.indentation = 2; 
     300                                                res.add(cert2); // subject certificate 
     301                                        } 
     302                                } 
     303                        } 
     304                } 
     305                return res; 
     306        } 
     307     
     308    public static class CardCert{ 
     309         
     310        public String label; 
     311        public String subject; 
     312        public String issuer; 
     313        public String validSince; 
     314        public String validUntil; 
     315        public long keySize; 
     316        public int indentation; // level in the hierarchy. used for preety printing presenting a certificate list 
     317        private String serialNumber; 
     318        private String issuerSerialNumber; 
     319        private boolean isRoot; 
     320         
     321        private CardCert(PTEID_Certificate sdkCert) throws PTEID_Exception{ 
     322                this.label = sdkCert.getLabel(); 
     323                this.issuer = sdkCert.getIssuerName(); 
     324                this.keySize = sdkCert.getKeyLength(); 
     325                this.subject = sdkCert.getOwnerName(); 
     326                this.validSince = sdkCert.getValidityBegin(); 
     327                this.validUntil = sdkCert.getValidityEnd(); 
     328                this.serialNumber = sdkCert.getSerialNumber(); 
     329                try{ 
     330                        this.issuerSerialNumber = sdkCert.getIssuer().getSerialNumber(); 
     331                }catch(PTEID_ExCertNoIssuer e) { 
     332                        this.issuerSerialNumber = null; 
     333                } 
     334                this.isRoot = sdkCert.isRoot(); 
     335        } 
     336         
     337            private CardCert(PTEID_Certificate sdkCert, int indentation) throws PTEID_Exception { 
     338                this(sdkCert); 
     339                this.indentation = indentation; 
     340            } 
     341             
     342            private boolean isRoot() { 
     343                return (this.isRoot || this.issuerSerialNumber == null); 
     344            } 
     345    } 
     346     
     347    public static class PIN { 
     348         
     349        public String label; 
     350        public String id; 
     351        public String type; 
     352        public String status; 
     353        public String index; 
     354         
     355        private PIN(PTEID_Pin sdkPin) throws PTEID_Exception { 
     356            this.label = sdkPin.getLabel(); 
     357            this.id = "" + sdkPin.getId(); 
     358            this.status = "" + sdkPin.getFlags(); 
     359            this.type = this.label; 
     360            this.index = "" + sdkPin.getIndex(); 
     361        } 
     362    } 
    125363} 
  • middleware-online/trunk/webapp/src/main/webapp/css/main.css

    r6 r13  
    184184} 
    185185 
     186 
     187#pinListTitle, 
     188#certListTitle{ 
     189        width: 380px; 
     190        padding-top: 4px; 
     191        padding-left: 3px; 
     192        padding-bottom: 1px; 
     193        color: #6c6c6c; 
     194        font-size: 14px; 
     195        font-weight: bold; 
     196        line-height: 14px; 
     197        background: #e2e2e2 url("../images/list_title_background.png") top left repeat-x; 
     198} 
     199 
     200#pinListTitle{ 
     201        padding-right: 346px; 
     202} 
     203 
     204#certListTitle{ 
     205        padding-right: 294px; 
     206} 
     207 
     208#pinList, 
     209#certList{ 
     210        width: 380px;  
     211        height: 400px; 
     212        background-color: #e8f4f3; 
     213} 
     214 
     215#pinList a:focus, 
     216#certList a:focus{ 
     217    color: #fff; 
     218        background: url("../images/list_item_focus_background.jpg") top left repeat-x; 
     219} 
     220 
     221.pin, 
     222.cert0, 
     223.cert1, 
     224.cert2{ 
     225    size: 100px; 
     226    margin-top: 10px; 
     227    margin-left: 15px; 
     228        font-size: 14px; 
     229        color: #2c5679 
     230} 
     231 
     232.cert0 { 
     233        padding-left: 0px; 
     234} 
     235 
     236.cert1 { 
     237        padding-left: 20px; 
     238} 
     239 
     240.cert2 { 
     241        padding-left: 40px; 
     242} 
     243 
    186244.floatLeft{ 
    187245        float: left; 
     
    238296} 
    239297 
     298form textarea.notas{ 
     299        width: 765px;  
     300        height: 400px; 
     301} 
     302 
    240303form input[type="submit"]{ 
    241304        color: #ff6600; 
     
    257320 
    258321 
    259 form input[type="text"].apelido{width: 202px;} 
    260 form input[type="text"].nome{width: 383px;} 
    261 form input[type="text"].sexo{width: 70px; margin-right: 16px;} 
    262 form input[type="text"].altura{width: 60px; margin-right: 16px;} 
    263 form input[type="text"].nacionalidade{width: 97px; margin-right: 16px;} 
    264 form input[type="text"].dataNascimento{width: 70px;} 
    265 form input[type="text"].nDocumento{width: 146px; margin-right: 16px;} 
    266 form input[type="text"].dataValidade{width: 94px;} 
    267 form input[type="text"].filiacao{width: 383px; margin-bottom: 5px;} 
    268 form input[type="text"].codigoPin{width: 160px; margin-right: 20px;} 
    269 form input[type="text"].estadoCodigoPin{width: 351px;} 
    270 form input[type="text"].bytesDisponiveis{width: 88;} 
    271  
     322form input[type="text"]#apelido{width: 383px; height: 20px;} 
     323form input[type="text"]#nome{width: 383px; height: 20px} 
     324form input[type="text"]#sexo{width: 70px; height: 20px; margin-right: 16px;} 
     325form input[type="text"]#altura{width: 60px; height: 20px; margin-right: 16px;} 
     326form input[type="text"]#nacionalidade{width: 97px; height: 20px; margin-right: 16px;} 
     327form input[type="text"]#dataNascimento{width: 73px; height: 20px} 
     328form input[type="text"]#nDocumento{width: 146px; height: 20px; margin-right: 16px;} 
     329form input[type="text"]#dataValidade{width: 94px; height: 20px;} 
     330form input[type="text"]#filiacao1{width: 383px; height: 20px; margin-bottom: 5px;} 
     331form input[type="text"]#filiacao2{width: 383px; height: 20px; margin-bottom: 5px;} 
     332 
     333form input[type="text"]#numFiscal{width: 128px; height: 20px; margin-right: 20px;} 
     334form input[type="text"]#numSegurancaSocial{width: 128px; height: 20px; margin-right: 20px;} 
     335form input[type="text"]#numUtenteSaude{width: 128px; height: 20px} 
     336form input[type="text"]#versaoCartao{width: 128px; height: 20px; margin-right: 20px;} 
     337form input[type="text"]#dataEmissao{width: 128px; height: 20px} 
     338form input[type="text"]#entidadeEmissora{width: 128px; height: 20px; margin-right: 20px;} 
     339form input[type="text"]#tipoDocumento{width: 128px; height: 20px} 
     340form input[type="text"]#localPedido{width: 286px; height: 20px} 
     341 
     342form input[type="text"]#distrito{width: 200px; height: 20px} 
     343form input[type="text"]#concelho{width: 200px; height: 20px} 
     344form input[type="text"]#frequesia{width: 200px; height: 20px} 
     345form input[type="text"]#abrTipoVia{width: 200px; height: 20px; margin-right: 26px;} 
     346form input[type="text"]#tipoVia{width: 200px; height: 20px} 
     347form input[type="text"]#designacaoVia{width: 200px; height: 20px} 
     348form input[type="text"]#abrTipoEdificio{width: 200px; height: 20px; margin-right: 26px;} 
     349form input[type="text"]#tipoEdificio{width: 200px; height: 20px} 
     350form input[type="text"]#numPorta{width: 121px; height: 20px; margin-right: 26px;} 
     351form input[type="text"]#andar{width: 121px; height: 20px; margin-right: 26px;} 
     352form input[type="text"]#lado{width: 121px; height: 20px} 
     353form input[type="text"]#lugar{width: 200px; height: 20px; margin-right: 26px;} 
     354form input[type="text"]#localidade{width: 200px; height: 20px} 
     355form input[type="text"]#cp4{width: 70px; height: 20px; margin-right: 26px;} 
     356form input[type="text"]#cp3{width: 70px; height: 20px; margin-right: 26px;} 
     357form input[type="text"]#localidadePostal{width: 225px; height: 20px} 
     358 
     359form input[type="text"]#tipoPin{width: 160px; height: 20px; margin-right: 20px;} 
     360form input[type="text"]#codigoPin{width: 160px; height: 20px} 
     361form input[type="text"]#estadoPin{width: 351px; height: 20px} 
     362 
     363 
     364form input[type="text"]#bytesDisponiveis{width: 88; height: 20px} 
     365 
     366form input[type="text"]#entidadeCertificado{width: 360px; height: 20px} 
     367form input[type="text"]#entidadeCertificadora{width: 360px; height: 20px} 
     368form input[type="text"]#validoDesde{width: 165px; height: 20px; margin-right: 16px;} 
     369form input[type="text"]#validoAte{width: 165px; height: 20px} 
     370form input[type="text"]#tamanhoChave{width: 160px; height: 20px} 
  • middleware-online/trunk/webapp/src/main/webapp/index.html

    r6 r13  
    99    <h2><a href="run-auth-applet-standalone.html">Applet de Autentica&ccedil;&atilde;o Simples</a></h2> 
    1010    <h2><a href="run-auth-applet-standalone-headless.html">Applet de Autentica&ccedil;&atilde;o Simples (Headless)</a></h2> 
    11     <h2><a href="run-auth-applet.html">Applet de Autentica&ccedil;&atilde;o</a></h2> 
    12     <h2><a href="templates/id_civil.html">Applet Utilit&aacute;ria (HTML)</a></h2> 
    13     <h2><a href="templates/id_civil2.html">Applet Utilit&aacute;ria (HTML - teste)</a></h2> 
     11    <h2><a href="main.html">Applet Utilit&aacute;ria (HTML - teste)</a></h2> 
    1412    <h3><a href="http://www.microsoft.com/download/en/details.aspx?id=26347">( Depend&ecirc;ncias para Windows )</a></h3> 
    1513  </body> 
  • middleware-online/trunk/webapp/src/main/webapp/templates/bloco_notas.html

    r6 r13  
    6262                        <div id="menu_2level"> 
    6363                                <div class="item"><a href="id_civil.html" title="">Identificação Civil</a></div> 
    64                                 <div class="item"><a href="" title="">Outros Dados</a></div> 
    65                                 <div class="item"><a href="" title="">Morada</a></div> 
    66                                 <div class="item"><a href="" title="">Certificados</a></div> 
     64                                <div class="item"><a href="outros_dados.html" title="">Outros Dados</a></div> 
     65                                <div class="item"><a href="morada.html" title="">Morada</a></div> 
     66                                <div class="item"><a href="certificados.html" title="">Certificados</a></div> 
    6767                                <div class="item"><a href="codigos_pin.html" title="">Códigos PIN</a></div> 
    6868                                <div class="item"><a href="bloco_notas.html" title="">Bloco de Notas</a></div> 
  • middleware-online/trunk/webapp/src/main/webapp/templates/codigos_pin.html

    r6 r13  
    6262                        <div id="menu_2level"> 
    6363                                <div class="item"><a href="id_civil.html" title="">Identificação Civil</a></div> 
    64                                 <div class="item"><a href="" title="">Outros Dados</a></div> 
    65                                 <div class="item"><a href="" title="">Morada</a></div> 
    66                                 <div class="item"><a href="" title="">Certificados</a></div> 
     64                                <div class="item"><a href="outros_dados.html" title="">Outros Dados</a></div> 
     65                                <div class="item"><a href="morada.html" title="">Morada</a></div> 
     66                                <div class="item"><a href="certificados.html" title="">Certificados</a></div> 
    6767                                <div class="item"><a href="codigos_pin.html" title="">Códigos PIN</a></div> 
    6868                                <div class="item"><a href="bloco_notas.html" title="">Bloco de Notas</a></div> 
     
    7979                                                <div class="floatLeft"> 
    8080                                                        <label>Tipo de código PIN</label></br> 
     81                                                        <label class="gray">PIN Type</label></br> 
    8182                                                        <input type="text" id="" name="" value="" class="codigoPin"/> 
    8283                                                </div> 
    8384                                                <div class="floatLeft"> 
    8485                                                        <label>Identificação do código PIN</label></br> 
     86                                                        <label class="gray">PIN Id</label></br> 
    8587                                                        <input type="text" id="" name="" value="" class="codigoPin"/> 
    8688                                                </div> 
    8789                                                <div class="clear"></div> 
    8890                                                <label>Estado do código PIN</label></br> 
     91                                                <label class="gray">PIN Status</label></br> 
    8992                                                <input type="text" id="" name="" value="" class="estadoCodigoPin"/> 
    9093                                                <div class="setMarginTop"></div> 
    91                                                 <input type="submit" name="" value="Verificar código PIN" class="largeButton setMarginRight"> 
    92                                                 <input type="submit" name="" value="Alterar código PIN" class="largeButton"> 
     94                                                        <input type="submit" name="" value="Verificar código PIN" class="largeButton setMarginRight"> 
     95                                                        <input type="submit" name="" value="Alterar código PIN" class="largeButton"> 
    9396                                        </div> 
    9497                                        <div class="clear"></div> 
  • middleware-online/trunk/webapp/src/main/webapp/templates/id_civil.html

    r6 r13  
    44<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    55<link href="../css/main.css" rel="stylesheet" media="screen" /> 
    6  
    76</head> 
    87<body> 
     
    6261                        <div id="menu_2level"> 
    6362                                <div class="item"><a href="id_civil.html" title="">Identificação Civil</a></div> 
    64                                 <div class="item"><a href="" title="">Outros Dados</a></div> 
    65                                 <div class="item"><a href="" title="">Morada</a></div> 
    66                                 <div class="item"><a href="" title="">Certificados</a></div> 
     63                                <div class="item"><a href="outros_dados.html" title="">Outros Dados</a></div> 
     64                                <div class="item"><a href="morada.html" title="">Morada</a></div> 
     65                                <div class="item"><a href="certificados.html" title="">Certificados</a></div> 
    6766                                <div class="item"><a href="codigos_pin.html" title="">Códigos PIN</a></div> 
    6867                                <div class="item"><a href="bloco_notas.html" title="">Bloco de Notas</a></div> 
     
    108107                                        </div> 
    109108                                        <div class="clear"></div> 
    110                                         <label>Filiação / Parents</label><br> 
    111                                         <input type="text" id="" name="" value="" class="filiacao"/></br> 
    112                                         <input type="text" id="" name="" value="" class="filiacao"/></br> 
    113                                         <label>Indicações Eventuais / Notes</label><br> 
    114                                         <textarea cols="53" rows="5" name=""></textarea> 
     109                                        <div class="floatLeft"> 
     110                                                <label>Filiação / Parents</label><br> 
     111                                                <input type="text" id="" name="" value="" class="filiacao"/></br> 
     112                                                <input type="text" id="" name="" value="" class="filiacao"/></br> 
     113                                        </div> 
     114                                        <div class="clear"></div> 
     115                                        <div class="floatLeft"> 
     116                                                <label>Indicações Eventuais / Notes</label><br> 
     117                                                <textarea cols="53" rows="5" name=""></textarea> 
     118                                        </div> 
    115119                                </form> 
    116120                        </div> 
  • middleware-online/trunk/webapp/src/main/webapp/templates/id_civil2.html

    r6 r13  
    33<head> 
    44<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    5 <script type="text/css"> 
    6      
    7 .clearLeft{ 
    8         height: 1px; 
    9         clear: left; 
    10 } 
    11  
    12 </script> 
    135<link href="../css/main.css" rel="stylesheet" media="screen" /> 
    146<script type="text/javascript"> 
     
    9183                        <div id="menu_2level"> 
    9284                                <div class="item"><a href="id_civil.html" title="">Identificação Civil</a></div> 
    93                                 <div class="item"><a href="" title="">Outros Dados</a></div> 
    94                                 <div class="item"><a href="" title="">Morada</a></div> 
    95                                 <div class="item"><a href="" title="">Certificados</a></div> 
     85                                <div class="item"><a href="outros_dados.html" title="">Outros Dados</a></div> 
     86                                <div class="item"><a href="morada.html" title="">Morada</a></div> 
     87                                <div class="item"><a href="certificados.html" title="">Certificados</a></div> 
    9688                                <div class="item"><a href="codigos_pin.html" title="">Códigos PIN</a></div> 
    9789                                <div class="item"><a href="bloco_notas.html" title="">Bloco de Notas</a></div> 
     
    126118                                                <input type="text" id="" name="" value="" class="dataNascimento"/> 
    127119                                        </div> 
    128                                         <div class="clearLeft"></div> 
     120                                        <div class="clear"></div> 
    129121                                        <div class="floatLeft"> 
    130122                                                <label>Nº de Documento</label></br> 
     
    137129                                                <input type="text" id="" name="" value="" class="dataValidade"/> 
    138130                                        </div> 
    139                                         <div class="clearLeft"></div> 
     131                                        <div class="clear"></div> 
    140132                                        <label>Filiação / Parents</label><br> 
    141133                                        <input type="text" id="" name="" value="" class="filiacao"/></br>