TestCodec_Certificates.ttcn 60.3 KB
Newer Older
garciay's avatar
garciay committed
                  sspValue := '01FFFFFF'O,
                  sspBitmask := '01FFFFFF'O
                }
              }
              },
              {
              psid := 137,
              sspRange := {
                bitmapSspRange := {
                  sspValue := '01FFFFFF'O,
                  sspBitmask := '01FFFFFF'O
                }
              }
              },
              {
              psid := 138,
              sspRange := {
                bitmapSspRange := {
                  sspValue := '01FFFFFF'O,
                  sspBitmask := '01FFFFFF'O
                }
              }
              },
              {
              psid := 139,
              sspRange := {
                bitmapSspRange := {
                  sspValue := '01FFFFFF'O,
                  sspBitmask := '01FFFFFF'O
                }
              }
              },
              {
              psid := 140,
              sspRange := {
                bitmapSspRange := {
                  sspValue := '01FFFFFF'O,
                  sspBitmask := '01FFFFFF'O
                }
              }
              },
              {
              psid := 141,
              sspRange := omit
              }
            }
          },
          minChainLength := 2,
          chainLengthRange := 0,
          eeType := '00000000'B
          }
      },
      certRequestPermissions := omit,
      canRequestRollover := omit,
      encryptionKey := {
        supportedSymmAlg := aes128Ccm,
        publicKey := {
          eciesNistP256 := {
            compressed_y_0 := '192B5056FE5FA1A79ADFB78AB5C447D0933FAFEE21F8480FE5569F96A0DF648A'O
          }
        }
      },
      verifyKeyIndicator := {
        verificationKey := {
          ecdsaNistP256 := {
            compressed_y_1 := 'FFD7A5AF269B7EFC295F2BCEA8318E5DD91F44E630919AA627118F31DCEAAD6C'O
          }
        }
      }
    },
    signature_ := {
      ecdsaNistP256Signature := {
        rSig := {
          x_only := '57C070CDD563033C3C969677876275DF7A06FB8ADE9D48D715E6FC0B0B8D53E2'O
        },
        sSig := 'F086C3DE0FFC7D9531F965F5A2D321CA802CB4B0F3552025EBCB4081CED7F473'O
      }
    }
    };
    
    var integer v_res := decvalue(v_enc_msg, v_cert_dec);
    if (v_res == 0) {
      log("Decoded message: ", v_cert_dec);
      setverdict(pass, "Decoded succeed");
      log(match(v_cert_exp, v_cert_dec));
      if (not(match(v_cert_exp, v_cert_dec))) {
        setverdict(fail, "Templates mismatch");
        stop;
      } else {
        setverdict(pass, "Templates match");
      }
    } else {
        setverdict(fail, "Decoding failed");
    }
    
    if (ischosen(v_cert_dec.toBeSigned.verifyKeyIndicator.verificationKey.ecdsaNistP256.compressed_y_0)) {
      v_compressedMode := 0;
      v_publicKeyCompressed := v_cert_dec.toBeSigned.verifyKeyIndicator.verificationKey.ecdsaNistP256.compressed_y_0;
    } else {
      v_compressedMode := 1;
      v_publicKeyCompressed := v_cert_dec.toBeSigned.verifyKeyIndicator.verificationKey.ecdsaNistP256.compressed_y_1;
    }
    v_enc_msg := encvalue(v_cert_dec.toBeSigned);
    if (f_verifyWithEcdsaNistp256WithSha256(
                                            bit2oct(v_enc_msg), 
                                            int2oct(0, 32),
                                            v_cert_dec.signature_.ecdsaNistP256Signature.rSig.x_only & v_cert_dec.signature_.ecdsaNistP256Signature.sSig,
                                            v_publicKeyCompressed,
                                            v_compressedMode
                                            ) == false) {
      setverdict(fail);
    } else {
      setverdict(pass)
    }
  } // End of testcase tc_certificate_asn1c_2
  
garciay's avatar
garciay committed
  testcase tc_certificate_gemalto_1() runs on TCType system TCType {
    const octetstring c_cert := '80030080e3c6bb16548f178d298300000000001874e3808466a88001012080010780012482080301ffff0301ffff800125820a0401ffffff0401ffffff800189820a0401ffffff0401ffffff80018a820a0401ffffff0401ffffff80018b820a0401ffffff0401ffffff80018c820a0401ffffff0401ffffff00018d800080830698dbc4ee30ec06bec42913daf024c5ecd415f49c8a72d87aee01c4b6b61ad58080831c965d29f2d3837052f2bdb45f6b4d9961e370cab50284372c5bd6285c16702280807c368781a209f2e7428f550f0032041c0c1c9d00fcd9aa4e58dede56998543b7fc84cbade97904bff78ff95ce22829386a97b6b2c4e8c564c5d159b8da28cf8d'O;
    var bitstring v_enc_msg := oct2bit(c_cert);
    var EtsiTs103097Certificate v_cert_dec;
    var integer v_res := decvalue(v_enc_msg, v_cert_dec);
    if (v_res == 0) {
      log("Decoded message: ", v_cert_dec);
      setverdict(pass, "Decoded succeed");
    } else {
        setverdict(fail, "Decoding failed");
    }
  } // End of testcase tc_certificate_gemalto_1
  
garciay's avatar
garciay committed
  group encdec_functions {
        
    function TestEtsiTs103097Certificate(
                                         in template (value) EtsiTs103097Certificate p_cert,
                                         in boolean p_decode := true, 
                                         in template (omit) bitstring p_expEncMsg := omit 
garciay's avatar
garciay committed
                                         ) runs on TCType return bitstring {
garciay's avatar
garciay committed
      var bitstring v_encMsg;
      var template (omit) TestRecord v_tr := { bs := p_expEncMsg };
      var EtsiTs103097Certificate v_decMsg;
      var integer v_res := 0;
    
      // Encode template
      log("Encode template ", valueof(p_cert));
    v_encMsg := encvalue(p_cert);
      log("Encoded message:  ", bit2oct(v_encMsg));
      // Check result
      if (not isbound(v_encMsg)) {
        setverdict(fail, "Encoding failed!");
        stop;
      }
      if (ispresent(v_tr.bs)) {
        if (not match(v_encMsg, p_expEncMsg)) {
          log("Expected message: ", bit2oct(valueof(p_expEncMsg)));
          setverdict(fail, "Encoding failed, not the expected result!");
          stop;
        }
      }
garciay's avatar
garciay committed
      setverdict(pass, "Encoding passed.");
garciay's avatar
garciay committed
    
      // Check decoding
      if (p_decode == true) {
      v_res := decvalue(v_encMsg, v_decMsg);
        log("Decoded message: ", v_decMsg);
        select (v_res) {
        case (0) {
          if(match(v_decMsg, p_cert)) {
            setverdict(pass);
          } else {
            setverdict(fail);
          }
        }
        case (1) {
          setverdict(fail, "Decoding failed.");
        }
        case (2) {
          setverdict(fail, "Not enough bits.");
        }
        }
      }
garciay's avatar
garciay committed
      return v_encMsg;
garciay's avatar
garciay committed
    }
  } // End of group encdec_functions
garciay's avatar
garciay committed
   
garciay's avatar
garciay committed
  control {
garciay's avatar
garciay committed
    execute(tc_root_certificate_sha256_1());
    execute(tc_root_certificate_sha256_2());
    execute(tc_root_certificate_sha384_1());
    execute(tc_ea_certificate_sha256_1());
garciay's avatar
garciay committed
    execute(tc_at_certificate_sha256_1());
    execute(tc_at_certificate_sha256_2());
    execute(tc_at_certificate_sha256_3());
garciay's avatar
garciay committed
    execute(tc_certificate_asn1c_1());
garciay's avatar
garciay committed
  }
garciay's avatar
garciay committed
} // End of module TestCodec_Certificates