#
# PKCS15 r/w profile for MyEID cards
#

cardinfo {
	label           = "MyEID";
	manufacturer    = "Aventra Ltd.";
	min-pin-length	= 4;
	max-pin-length	= 8;
	pin-encoding	= ascii-numeric;
   	pin-pad-char	= 0xFF;
}

#
# The following controls some aspects of the PKCS15 we put onto
# the card.
#
pkcs15 {
    # Put certificates into the CDF itself?
    direct-certificates = no;
    # Put the DF length into the ODF file?
    encode-df-length    = no;
    # Have a lastUpdate field in the EF(TokenInfo)?
    do-last-update	    = no;
}

option default {
    macros {
        #protected   = READ=NONE, UPDATE=CHV1, DELETE=CHV2;
        #unprotected = READ=NONE, UPDATE=CHV1, DELETE=CHV1;
		
	unusedspace-size = 510;
	odf-size	     = 255;
	aodf-size	     = 255;
	cdf-size	     = 1530;
	cdf-trusted-size = 510;
	prkdf-size	     = 1530;
	pukdf-size	     = 1530;
	skdf-size	     = 1530;
	dodf-size	     = 1530;
    }
}

# Define reasonable limits for PINs and PUK
# Note that we do not set a file path or reference
# here; that is done dynamically.
PIN user-pin {
    reference  = 1;
    min-length = 4;
    max-length = 8;
    attempts   = 3;
    flags      = initialized, needs-padding;
}

PIN user-puk {
    min-length = 4;
    max-length = 8;
    attempts   = 10;
    flags      = needs-padding;
}

PIN so-pin {
    reference  = 3;
    auth-id    = FF;
    min-length = 4;
    max-length = 8;
    attempts   = 3;
    flags      = initialized, soPin, needs-padding;
}

PIN so-puk {
    min-length = 4;
    max-length = 8;
    attempts   = 10;
   flags       = needs-padding;
}

# Additional filesystem info.
# This is added to the file system info specified in the
# main profile.
filesystem {
    DF MF {
        path  = 3F00;
        type  = DF;
        acl	  = CREATE=$PIN, DELETE=$SOPIN;

    	# This is the DIR file
        EF DIR {	    
    	    file-id   = 2F00;
            structure = transparent;
	        size      = 128;
	        acl	      = READ=NONE, UPDATE=$SOPIN, DELETE=$SOPIN;
	    }
        DF PKCS15-AppDF {
 	        type      = DF;
	        file-id   = 5015;
            acl       = DELETE=$PIN, CREATE=$PIN;
	    
            EF PKCS15-ODF {
        	    file-id   = 5031;
                structure = transparent;
        	    size      = $odf-size;
	            acl       = READ=NONE, UPDATE=$PIN, DELETE=$SOPIN;
        	}

            EF PKCS15-TokenInfo {
        	   file-id	  = 5032;
        	   size		  = 160;
	           structure  = transparent;
        	   acl	      = READ=NONE, UPDATE=$SOPIN, DELETE=$SOPIN;
            }

            EF PKCS15-UnusedSpace {
                file-id	  = 5033;
                structure = transparent;
                size	  = $unusedspace-size;
                acl	      = READ=NONE, UPDATE=$SOPIN, DELETE=$SOPIN;
            }

            EF PKCS15-AODF {
                file-id	  = 4401;
                structure = transparent;
                size	  = $aodf-size;
                acl	      = READ=NONE, UPDATE=$SOPIN, DELETE=$SOPIN;
            }

            EF PKCS15-PrKDF {
                file-id	  = 4402;
                structure = transparent;
                size	  = $prkdf-size;
                acl	      = *=NEVER, READ=NONE, UPDATE=$PIN, DELETE=$SOPIN;
            }

            EF PKCS15-PuKDF {
                file-id	  = 4404;
                structure = transparent;
                size	  = $pukdf-size;
                acl	      = *=NEVER, READ=NONE, UPDATE=$PIN, DELETE=$SOPIN;
            }

            EF PKCS15-SKDF {
                file-id	  = 4407;
                structure = transparent;
                size	  = $skdf-size;
                acl	      = *=NEVER, READ=NONE, UPDATE=$PIN, DELETE=$SOPIN;
            }

            EF PKCS15-CDF {
                file-id	  = 4403;
                structure = transparent;
                size	  = $cdf-size;
                acl	      = *=NEVER, READ=NONE, UPDATE=$PIN, DELETE=$SOPIN;
            }

            EF PKCS15-CDF-TRUSTED {
                file-id	  = 4405;
                structure = transparent;
                size	  = $cdf-trusted-size;
                acl	      = *=NEVER, READ=NONE, UPDATE=$PIN, DELETE=$SOPIN;
            }

            EF PKCS15-DODF {
                file-id	  = 4406;
                structure = transparent;
                size	  = $dodf-size;
                acl       = *=NEVER, READ=NONE, UPDATE=$PIN, DELETE=$SOPIN;
            }
            
            EF template-private-key {
                type      = internal-ef;
                file-id   = 4B01;
                acl       = CRYPTO=$PIN, UPDATE=$PIN, DELETE=$PIN, GENERATE=$PIN;
            }
            
            EF template-secret-key {
                type      = internal-ef;
                file-id   = 4D01;
                acl       = CRYPTO=$PIN, UPDATE=$PIN, DELETE=$PIN, GENERATE=$PIN;
            }
            
            EF template-public-key {
                structure = transparent;
                file-id	  = 5501;
                acl	      = READ=NONE, UPDATE=$PIN, DELETE=$PIN, GENERATE=$PIN;
            }

            EF template-certificate {
                file-id   = 4301;
                structure = transparent;
                acl       = READ=NONE, UPDATE=$PIN, DELETE=$PIN;
            }

            template key-domain {
                # This is a dummy entry - pkcs15-init insists that
                # this is present
                EF private-key {
                    file-id   = 4B01;
                    type      = internal-ef;
                    acl       = CRYPTO=$PIN, UPDATE=$PIN, DELETE=$PIN, GENERATE=$PIN;
                }
                EF public-key {
                    file-id   = 5501;
                    structure = transparent;
                    acl       = READ=NONE, UPDATE=$PIN, DELETE=$PIN, GENERATE=$PIN;
                }
                EF secret-key {
                    file-id   = 4D01;
                    type      = internal-ef;
                    acl       = CRYPTO=$PIN, UPDATE=$PIN, DELETE=$PIN, GENERATE=$PIN;
                }
		
                # Certificate template
                EF certificate {
                    file-id	  = 4301;
                    structure = transparent;
                    acl       = READ=NONE, UPDATE=$PIN, DELETE=$PIN;
                }
                EF privdata {
                    file-id   = 4501;
                    structure = transparent;
                    acl       = READ=$PIN, UPDATE=$PIN, DELETE=$PIN;
                }
                EF data {
                    file-id   = 4601;
                    structure = transparent;
                    acl       = READ=NONE, UPDATE=$PIN, DELETE=$PIN;
                }
            }
	    }
    }
}
