Commit 3c0c0de3 authored by YannGarcia's avatar YannGarcia
Browse files

Merge branch 'STF525' of https://forge.etsi.org/gitlab/LIBS/LibIts into STF525

parents 1c22c3f6 4e814d3f
Loading
Loading
Loading
Loading
+0 −16
Original line number Diff line number Diff line
@@ -36,22 +36,6 @@ module LibItsIvim_Functions {
    import from LibItsIvim_Pics all;
    import from LibItsIvim_Pixits all;
    
    group itsFunction {
        
        /** 
         * @desc    Gets the Provifr of test system
         * @return  Test system's Provider value
         * @see     PX_PROVIDER
         */
        function f_getProvider()
        return Provider {
            
            return PX_PROVIDER;
                
        } // End of function f_getProvider
        
    } // End of group itsFunction
    
    group utFuntions { 
            
        /**
+17 −1
Original line number Diff line number Diff line
@@ -31,7 +31,7 @@ module LibItsIvim_Templates {
    // LibItsIvim
    import from LibItsIvim_TestSystem all;
    import from LibItsIvim_TypesAndValues all;
    import from LibItsIvim_Functions all;
    import from LibItsIvim_Pixits all;
    import from LibItsIvim_ASN1_IVInamedNumbers all;
    
    group asn1Constants {
@@ -597,4 +597,20 @@ module LibItsIvim_Templates {
        
    } // End of group roadConfigurationContainerGroup
    
    group itsFunction {
        
        /** 
         * @desc    Gets the Provifr of test system
         * @return  Test system's Provider value
         * @see     PX_PROVIDER
         */
        function f_getProvider()
        return Provider {
            
            return PX_PROVIDER;
                
        } // End of function f_getProvider
        
    } // End of group itsFunction
    
} // End of module LibItsIvimTemplates
+12 −1
Original line number Diff line number Diff line
@@ -3809,6 +3809,10 @@ module LibItsPki_Functions {
      
      // TODO Check that requested information are present
      
      if (f_verifySspPermissions(p_ec_certificate.toBeSigned.appPermissions, p_ea_certificate.toBeSigned.appPermissions) == false) {
        log("f_verify_ec_certificate: Ssp permissions not verified");
        return false;
      }
      
      return true;
    } // End of function f_verify_ec_certificate
@@ -3848,6 +3852,13 @@ module LibItsPki_Functions {
        return false;
      }
      
      // TODO Check that requested information are present
      
      if (f_verifySspPermissions(p_aa_certificate.toBeSigned.appPermissions, p_at_certificate.toBeSigned.appPermissions) == false) {
        log("f_verify_ec_certificate: Ssp permissions not verified");
        return false;
      }
      
      return true;
    } // End of function f_verify_at_certificate
    
+60 −0
Original line number Diff line number Diff line
@@ -2009,6 +2009,66 @@ module LibItsSecurity_Functions {
            
        } // End of group deviceSignatureHelpers
        
        group sspPermissions {
          
          function f_verifySspPermissions(
                                          in SequenceOfPsidSsp p_issuer_ssp_permissions, 
                                          in SequenceOfPsidSsp p_subordinate_ssp_permissions
          ) return boolean {
            // Local variables
            var integer v_idx := 0;
            
            for (v_idx := 0; v_idx < lengthof(p_issuer_ssp_permissions); v_idx := v_idx + 1) {
              var PsidSsp v_issuerPsidSsp := p_issuer_ssp_permissions[v_idx];
              var PsidSsp v_subordinatePsidSsp;
              var boolean v_found := false;
              var integer v_jdx := 0;
              // 1. Check permission from issuer is present
              for (v_jdx := 0; v_jdx < lengthof(p_subordinate_ssp_permissions); v_jdx := v_jdx + 1) {
                if (match(v_issuerPsidSsp, m_appPermissions(p_subordinate_ssp_permissions[v_jdx].psid, p_subordinate_ssp_permissions[v_jdx].ssp)) == true) {
                  v_subordinatePsidSsp := p_subordinate_ssp_permissions[v_jdx];
                  v_found := true;
                  break;
                }
              } // End of 'for' statement
              if (v_found == false) {
                log("f_verifySspPermissions: Permission set not found: ", v_issuerPsidSsp)
                return false;
              }
              // 2. Validate bits mask
              if (ispresent(v_issuerPsidSsp.ssp)) {
                if (ispresent(v_subordinatePsidSsp.ssp) == false) {
                  log("f_verifySspPermissions: Ssp shall not be omitted: ", v_issuerPsidSsp)
                  return false;
                }
                if ((ischosen(v_issuerPsidSsp.ssp.bitmapSsp) == false) or (ischosen(v_subordinatePsidSsp.ssp.bitmapSsp) == false)) {
                  log("f_verifySspPermissions: Wrong variant : ", v_issuerPsidSsp.ssp, " / ", v_subordinatePsidSsp.ssp);
                  return false;
                }
                if (lengthof(v_issuerPsidSsp.ssp.bitmapSsp) < lengthof(v_subordinatePsidSsp.ssp.bitmapSsp)) {
                  log("f_verifySspPermissions: Ssp not be compliant: ", v_issuerPsidSsp.ssp, " / ", v_subordinatePsidSsp.ssp);
                  return false;
                } else {
                  var charstring v_issuerSsp := bit2str(oct2bit(v_issuerPsidSsp.ssp.bitmapSsp));
                  var charstring v_subordinateSsp := bit2str(oct2bit(v_subordinatePsidSsp.ssp.bitmapSsp));
                  
                  for (var integer i := 0; i < lengthof(v_issuerSsp); i := i + 1) {
                    if (v_issuerSsp[i] == "1") { // TODO How to check Permission using SspBitmask/SspValue
                      if (v_subordinateSsp[i] != "1") {
                        log("f_verifySspPermissions: Ssp bitmask mismatch at index: ", i);
                        return false;
                      }
                    } // else, no restriction, subordinate certificate can have any value.
                  } // End of 'for' statement
                }
              }
            } // End of 'for' statement
            
            return true;
          } // End of function f_verifySspPermissions
          
        } // End of group  sspPermissions
        
        group messageGetters {
            
            /**
+1 −1

File changed.

Contains only whitespace changes.