1e1051a39Sopenharmony_ci#! /usr/bin/env bash
2e1051a39Sopenharmony_ci
3e1051a39Sopenharmony_ci# Create a root CA, signing a leaf cert with a KDC principal otherName SAN, and
4e1051a39Sopenharmony_ci# also a non-UTF8 smtpUtf8Mailbox SAN followed by an rfc822Name SAN and a DNS
5e1051a39Sopenharmony_ci# name SAN.  In the vulnerable EAI code, the KDC principal `otherName` should
6e1051a39Sopenharmony_ci# trigger ASAN errors in DNS name checks, while the non-UTF8 `smtpUtf8Mailbox`
7e1051a39Sopenharmony_ci# should likewise lead to ASAN issues with email name checks.
8e1051a39Sopenharmony_ci
9e1051a39Sopenharmony_cirm -f root-key.pem root-cert.pem
10e1051a39Sopenharmony_ciopenssl req -nodes -new -newkey rsa:2048 -keyout kdc-root-key.pem \
11e1051a39Sopenharmony_ci        -x509 -subj /CN=Root -days 36524 -out kdc-root-cert.pem
12e1051a39Sopenharmony_ci
13e1051a39Sopenharmony_ciexts=$(
14e1051a39Sopenharmony_ci    printf "%s\n%s\n%s\n%s = " \
15e1051a39Sopenharmony_ci        "subjectKeyIdentifier = hash" \
16e1051a39Sopenharmony_ci        "authorityKeyIdentifier = keyid" \
17e1051a39Sopenharmony_ci        "basicConstraints = CA:false" \
18e1051a39Sopenharmony_ci        "subjectAltName"
19e1051a39Sopenharmony_ci    printf "%s, " "otherName:1.3.6.1.5.2.2;SEQUENCE:kdc_princ_name"
20e1051a39Sopenharmony_ci    printf "%s, " "otherName:1.3.6.1.5.5.7.8.9;IA5:moe@example.com"
21e1051a39Sopenharmony_ci    printf "%s, " "email:joe@example.com"
22e1051a39Sopenharmony_ci    printf "%s\n" "DNS:mx1.example.com"
23e1051a39Sopenharmony_ci    printf "[kdc_princ_name]\n"
24e1051a39Sopenharmony_ci    printf "realm = EXP:0, GeneralString:TEST.EXAMPLE\n"
25e1051a39Sopenharmony_ci    printf "principal_name = EXP:1, SEQUENCE:kdc_principal_seq\n"
26e1051a39Sopenharmony_ci    printf "[kdc_principal_seq]\n"
27e1051a39Sopenharmony_ci    printf "name_type = EXP:0, INTEGER:1\n"
28e1051a39Sopenharmony_ci    printf "name_string = EXP:1, SEQUENCE:kdc_principal_components\n"
29e1051a39Sopenharmony_ci    printf "[kdc_principal_components]\n"
30e1051a39Sopenharmony_ci    printf "princ1 = GeneralString:krbtgt\n"
31e1051a39Sopenharmony_ci    printf "princ2 = GeneralString:TEST.EXAMPLE\n"
32e1051a39Sopenharmony_ci    )
33e1051a39Sopenharmony_ci
34e1051a39Sopenharmony_ciprintf "%s\n" "$exts"
35e1051a39Sopenharmony_ci
36e1051a39Sopenharmony_ciopenssl req -nodes -new -newkey rsa:2048 -keyout kdc-key.pem \
37e1051a39Sopenharmony_ci    -subj "/CN=TEST.EXAMPLE" |
38e1051a39Sopenharmony_ci    openssl x509 -req -out kdc-cert.pem \
39e1051a39Sopenharmony_ci        -CA "kdc-root-cert.pem" -CAkey "kdc-root-key.pem" \
40e1051a39Sopenharmony_ci        -set_serial 2 -days 36524 \
41e1051a39Sopenharmony_ci        -extfile <(printf "%s\n" "$exts")
42