<HTML> <!-- -*- Mode: Java; tab-width: 8 -*- --> <!-- This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <SCRIPT LANGUAGE="JavaScript1.2"> script_url = 'http://interzone.mcom.com/cgi-bin/certomatic/bin/certcgi.cgi' ext_page_ver1 = make_page_intro('Version 1 extensions', "#FFFFFF") + '<IFRAME WIDTH="100%" HEIGHT="100%" FRAMEBORDER=0 ID="ext1">' + 'Version 1 X.509 certs do not support extensions' + '</IFRAME>' + '</body></html>'; num_ca = 0; your_certificate_index_label = 'Your Certificate'; netscape_extensions_index_label = 'Netscape X.509 Extensions'; standard_extensions_index_label = 'Standard X.509 Extensions'; certifying_authorities_index_label = 'Certifying Authorities'; add_sub_alt_name_index_label = 'Add Subject Alternative Name'; index_list = '0, your_certificate_index_label,' + '0, netscape_extensions_index_label,' + '0, standard_extensions_index_label,' + '0, certifying_authorities_index_label'; add_index_list = ''; ver = 3 max_pages = 13; cur_page = 1; ext_page_array = new Array(max_pages); index_label = 'Options'; var main_page = make_page_intro('Your Key', "#FFFFFF") + '<IFRAME WIDTH="100%" HEIGHT="100%" FRAMEBORDER=0 ID="main" SRC="main.html">' + '</IFRAME>' + '</body></html>' ; function setSubAltNameType(form) { with(form) { if (SubAltNameRadio[0].checked) { return true; } if (SubAltNameRadio[3].checked || SubAltNameRadio[5].checked) { SubAltNameDataType.checked = true; return true; } if (SubAltNameRadio[1].checked || SubAltNameRadio[2].checked || SubAltNameRadio[4].checked || SubAltNameRadio[6].checked || SubAltNameRadio[7].checked || SubAltNameRadio[8].checked) { SubAltNameDataType.checked = false; return true; } } return true; } function setIssuerAltNameType(form) { with(form) { if (IssuerAltNameRadio[0].checked) { return true; } if (IssuerAltNameRadio[3].checked || IssuerAltNameRadio[5].checked) { IssuerAltNameDataType.checked = true; return true; } if (IssuerAltNameRadio[1].checked || IssuerAltNameRadio[2].checked || IssuerAltNameRadio[4].checked || IssuerAltNameRadio[6].checked || IssuerAltNameRadio[7].checked || IssuerAltNameRadio[8].checked) { IssuerAltNameDataType.checked = false; return true; } } return true; } function setNameConstraintNameType(form) { with(form) { if (NameConstraintRadio[0].checked) { return true; } if (NameConstraintRadio[3].checked || NameConstraintRadio[5].checked) { NameConstraintNameDataType.checked = true; return true; } if (NameConstraintRadio[1].checked || NameConstraintRadio[2].checked || NameConstraintRadio[4].checked || NameConstraintRadio[6].checked || NameConstraintRadio[7].checked || NameConstraintRadio[8].checked) { NameConstraintNameDataType.checked = false; return true; } } return true; } function addSubAltName(form) { with(form) { var len = SubAltNameSelect.length; var value; var i = 0; while(!(i == (SubAltNameRadio.length - 1)) & !(SubAltNameRadio[i].checked == true)) { i++; } if (i != 0) { value = SubAltNameText.value + " - " + (i + 1); } else { value = SubAltNameText.value + " - " + SubAltNameOtherNameOID.value + " - "; if (SubAltNameDataType.checked) { value += "1 - "; } else { value += "0 - "; } value += (i + 1); if (SubAltNameOtherNameOID.value == "") { alert("Other names must include an OID"); return false; } } if ((SubAltNameText.value == "") | (SubAltNameRadio[i].checked != true)) { alert("Alternative Names must include values for name and name type."); } else { SubAltNameSelect.options[len] = new Option(value, value); } } return true; } function deleteSubAltName(form) { with(form) { while (SubAltNameSelect.selectedIndex >= 0) { SubAltNameSelect[SubAltNameSelect.selectedIndex] = null; } } } function addIssuerAltName(form) { with(form) { var len = IssuerAltNameSelect.length; var value; var i = 0; while(!(i == (IssuerAltNameRadio.length -1)) & !(IssuerAltNameRadio[i].checked == true)) { i++; } if (i != 0) { value = IssuerAltNameText.value + " - " + (i + 1); } else { value = IssuerAltNameText.value + " - " + IssuerAltNameOtherNameOID.value + " - "; if (IssuerAltNameDataType.checked) { value += "1 - "; } else { value += "0 - "; } value += (i + 1); if (IssuerAltNameOtherNameOID.value == "") { alert("Other names must include an OID"); return false; } } if ((IssuerAltNameText.value == "") | (IssuerAltNameRadio[i].checked != true)) { alert("Alternative Names must include values for name and name type.") } else { IssuerAltNameSelect.options[len] = new Option(value, value); } } return true; } function deleteIssuerAltName(form) { with(form) { while (IssuerAltNameSelect.selectedIndex >= 0) { IssuerAltNameSelect[IssuerAltNameSelect.selectedIndex] = null; } } } function addNameConstraint(form) { with(form) { var len = NameConstraintSelect.length; var value; var i = 0; var min = NameConstraintMin.value; var max = NameConstraintMax.value; while(!(i == (NameConstraintRadio.length - 1) ) & !(NameConstraintRadio[i].checked == true)) { i++; } value = NameConstraintText.value + " - "; if (i == 0) { value += NameConstraintOtherNameOID.value + " - "; if (NameConstraintNameDataType.checked) { value += "1 - "; } else { value += "0 - "; } if (NameConstraintOtherNameOID.value == "") { alert("Other names must include an OID"); return false; } } value += (i + 1) + " - "; if (NameConstraintTypeRadio[0].checked == true) { value += "p - "; } else { value += "e - "; } value += min + " - " + max; if ((min == "") | (NameConstraintText.value == "") | (NameConstraintRadio[i].checked != true)) { alert("Name Constraints must include values for minimum, name, and name type.") } else { NameConstraintSelect.options[len] = new Option(value, value); } } return true; } function deleteNameConstraint(form) { with(form) { while (NameConstraintSelect.selectedIndex >= 0) { NameConstraintSelect[NameConstraintSelect.selectedIndex] = null; } } } function submit_it() { save_cur_page(cur_page); var ver1 = (ver == 1); var ver3 = (ver == 3); var array_string; var serial = ext_page_array[0][10][0]; var serial_number = ext_page_array[0][12][0]; var manValidity = ext_page_array[0][19][0]; var notBefore = ext_page_array[0][20][0]; var notAfter = ext_page_array[0][21][0]; var subject = ext_page_array[0][22][0]; if (subject == "") { alert("The DN field must contain some data"); return false; } if (!serial & serial_number == "") { alert("No serial number specified"); return false; } if (ext_page_array[0][15][0]) { var keygen = "<keygen name=\"key\" challenge=\"foo\">"; } else { switch (ext_page_array[0][17][0]) { case 2: var keygen = "<keygen keytype=\"dsa\" pqg=\"MIGdAkEAjfKklEkidqo9JXWbsGhpy+rA2Dr7jQz3y7gyTw14guXQdi/FtyEOr8Lprawyq3qsSWk9+/g3JMLsBzbuMcgCkQIVAMdzIYxzfsjumTtPLe0w9I7azpFfAkEAYm0CeDnqChNBMWOlW0y1ACmdVSKVbO/LO/8Q85nOLC5xy53l+iS6v1jlt5UhklycxC6fb0ZLCIzFcq9T5teIAg==\" name=\"key\" challenge=\"foo\">"; break; case 1: var keygen = "<keygen keytype=\"dsa\" pqg=\"MIHaAmDCboVgX0+6pEeMlbwsasWDVBcJNHPKMzkq9kbCRK2U3k+tE15n+Dc2g3ZjDYr1um51e2iLC34/BwAAAAAAAAAAAAAAAAAAAAAAAAABbBhnlFN5Djmt0Mk8cdEBY5H8iPMCFMhUnFtbpjn3EyfH2DjVg3ALh7FtAmA2zWzhpeCwvOTjYnQorlXiv0WcnSiWmaC79CRYkFt5i+UEfRxwP1eNGJBVB1T+CPW6JGd4WhgsqtSf53pn5DEtv++O7lNfXyOhWhb3KaWHYIx8fuAXtioIWkWmpfEIVZA=\" name=\"key\" challenge=\"foo\">"; break; case 0: var keygen = "<keygen keytype=\"dsa\" pqg=\"MIIBHAKBgId8SiiWrcdua5zbsBhPkKfFcnHBG7T/bQla7c6OixGjjmSSuq2fJLvMKa579CaxHxLZzZZXIHmAk9poRgWl2GUUkCJ68XSum8OQzDPXPsofcEdeANjw3mIAAAAAAAAAAAAAAAAAAAAAAAAIE+MkW5hguLIQqWvEVi9dMpbNu6OZAhTIA+y3TgyiwA0D8pt686ofaL1IOQKBgAiZQC6UCXztr2iXxJrAC+51gN5oX/R9Thilln9RGegsWnHrdxUOpcm5vAWp1LU8TOXtujE8kqkm3UxIRhUWQORe9IxLANAXmZJqkw9FEVHkxj6Cy9detwT2MyBzSwS6avsf7aLisgHmI/IHSeapJsQ3NQa3rikb6zRiqIV+TVa6\" name=\"key\" challenge=\"foo\">"; break; } } array_string = build_array_string(); hiddens = "<input type=\"hidden\" name=\"subject\" value=\'" + subject + "\'> \n" + "<input type=\"hidden\" name=\"serial-auto\" value=\"" + serial + "\"> \n" + "<input type=\"hidden\" name=\"serial_value\" value=\"" + serial_number + "\"> \n" + "<input type=\"hidden\" name=\"ver-1\" value=\"" + ver1 + "\"> \n" + "<input type=\"hidden\" name=\"ver-3\" value=\"" + ver3 + "\"> \n" + "<input type=\"hidden\" name=\"notBefore\" value=\"" + notBefore + "\"> \n" + "<input type=\"hidden\" name=\"notAfter\" value=\"" + notAfter + "\"> \n" + "<input type=\"hidden\" name=\"manValidity\" value=\"" + manValidity + "\"> \n" + array_string; var good_submit_page = '<html>' + '<BODY TEXT="#000000" LINK="#000000" VLINK="#000000" ALINK="#FF0000" BGCOLOR="#FFFFFF">' + '<form method="post" action="' + script_url + '">' + 'Select size for your key:' + keygen + '</p>' + '<input type="submit"></p>' + hiddens + '</form>\n' + '</body>\n' + '</html>\n'; window.frames['right'].document.write(good_submit_page); window.frames['right'].document.close(); cur_page = max_pages + 1; make_left_frame(window); return false; } function build_array_string() { var pg; var array_string = ''; var pages; if ((ext_page_array[3][4][0] > 0) && ext_page_array[3][3][0]) { pages = 4 + parseInt(ext_page_array[3][4][0]); } else { pages = 4; } for (pg = 1; pg < pages; pg++) { if ((pg > 1 || (ver == 3)) && (ext_page_array[pg].length > 1)) { if (pg < 4) { for (i = 0; i < ext_page_array[pg].length; i++) { if (ext_page_array[pg][i][3].indexOf("radio") == -1) { if (ext_page_array[pg][i][3].indexOf("multiple") == -1) { array_string += '<input type=\"hidden\" name=\"' + ext_page_array[pg][i][1] + '\" value=\'' + ext_page_array[pg][i][0] + '\'> \n'; } else { for (k = 0; k < ext_page_array[pg][i][0].length; k++) { array_string += '<input type=\"hidden\" name=\"' + ext_page_array[pg][i][1] + k + '\" value=\'' + ext_page_array[pg][i][0][k] + '\'> \n'; } } } else { array_string += '<input type=\"hidden\" name=\"' + ext_page_array[pg][i][1] + '-' + ext_page_array[pg][i][2] + '\" value=\'' + ext_page_array[pg][i][0] + '\'> \n'; } } } else { for (i = 0; i < ext_page_array[pg].length; i++) { if (ext_page_array[pg][i][3].indexOf("radio") == -1) { if (ext_page_array[pg][i][3].indexOf("multiple") == -1) { array_string += '<input type=\"hidden\" name=\"' + 'CA#' + (pg - 3) + '-' + ext_page_array[pg][i][1] + '\" value=\'' + ext_page_array[pg][i][0] +'\'> \n'; } else { for (k = 0; k < ext_page_array[pg][i][0].length; k++) { array_string += '<input type=\"hidden\" name=\"' + 'CA#' + (pg - 3) + '-' + ext_page_array[pg][i][1] + k + '\" value=\'' + ext_page_array[pg][i][0][k] + '\'> \n'; } } } else { array_string += '<input type=\"hidden\" name=\"' + 'CA#' + (pg - 3) + '-' + ext_page_array[pg][i][1] + '-' + ext_page_array[pg][i][2] + '\" value=\'' + ext_page_array[pg][i][0] + '\'> \n'; } } } } } return array_string; } function init_ext_page_array() { for (i = 0; i < max_pages; i++) { ext_page_array[i] = ''; } } function ca_num_change(n,ca_form) { with(ca_form) { n = parseInt(n,10); if (caChoiceradio[2].checked) { if (n) { update_left_frame(n); } else { update_left_frame(0); } } } } function choice_change(ca_form) { with(ca_form) { if (caChoiceradio[2].checked) { ca_num_change(manCAs.value,ca_form); } else { update_left_frame(0); } } } function update_left_frame(n) { var add_string = ''; for (var i = 0; i < n; i++) { var j = i + 1; add_string = add_string + ',1, \'CA #' + j + '\''; } top.add_index_list = add_string; num_ca = n; make_left_frame(window); } function set_ver1() // redraws the extensions page for version 1 certificates { ver = 1 if (cur_page == 2 || cur_page == 3) { switch_right_frame(window, cur_page, cur_page); } } function set_ver3() // redraws the extensions page for version 3 certificates { ver = 3 if (cur_page == 2) { switch_right_frame(window, 0, 2); } else if (cur_page == 3) { switch_right_frame(window, 0, 3); } } function reset_subject(marker, value, form) // Updates the subject field from a subordinate field { with(form) { var field_sep = '", '; var begin_index = subject.value.indexOf(marker); if (begin_index != 0 && subject.value[begin_index - 1] != ' ') { begin_index = subject.value.indexOf(marker, begin_index +1); } var end_index = subject.value.indexOf(field_sep, begin_index); if (begin_index > -1) { // is it a delete/change? if (end_index == -1) { // is it the last one (includes only one)? if (value.length > 0) { // do I have to change it? if (begin_index == 0) { // is is the only one? subject.value = marker + '"' + value + '"'; } else { // it is the last of many subject.value = subject.value.substring(0,begin_index) + marker + '"' + value + '"'; } } else { // must be a delete if (begin_index == 0) { // is it the only one? begin_index += 2; } subject.value = subject.value.substring(0,(begin_index - 2)); } } else { // it is the first of many or a middle one if (value.length >0) { // do I have to change it? subject.value = subject.value.substring(0,(begin_index + marker.length + 1)) + value + subject.value.substring(end_index,subject.length); } else { // it is a delete subject.value = subject.value.substring(0,begin_index) + subject.value.substring((end_index + 3),subject.length); } } } else { // It is either an insert or a do nothing if (value.length > 0) { // is it an insert? if (subject.value.length == 0) { // is subject currently empty? subject.value = marker + '"' + value + '"'; } else { subject.value = subject.value + ', ' + marker + '"' + value + '"'; } } } } } function reset_subjectFields(form) // updates all the subordinate fields from the subject field of a form // **** move the strings to global variables, to make maintentance easier **** { update_subject_Field(form, 'CN=\"', form.name); update_subject_Field(form, 'MAIL=\"', form.email); update_subject_Field(form, 'O=\"', form.org); update_subject_Field(form, 'C=\"', form.country); update_subject_Field(form, ' L=\"', form.loc); update_subject_Field(form, 'ST=\"', form.state); update_subject_Field(form, 'E=\"', form.email); update_subject_Field(form, 'OU=\"', form.org_unit); update_subject_Field(form, 'UID=\"', form.uid); } function update_subject_Field(form, marker, update_field) //updates a single subordinate field from the subject field of a form // *** need to deal with the two types of e-mail addresses ************** { with(form) { var field_sep = '", '; var begin_index = subject.value.indexOf(marker) + marker.length; var end_index = subject.value.indexOf(field_sep, begin_index); if (end_index == -1) { end_index = subject.value.indexOf('"',begin_index); } if (begin_index != (-1 + marker.length) ) { update_field.value = subject.value.substring(begin_index, end_index); } else { update_field.value = ''; } } } function switch_mail(form) // **** Do I want to delete the other type of e-mail address ? ************ { if (form.email_type[0].checked) { var del = 'E='; var ins = 'MAIL='; } else { var del = 'MAIL='; var ins = 'E='; } reset_subject(del, '', form); reset_subject(ins, form.email.value, form); } function make_page_intro(title, bgcolor) { var style = '<STYLE TYPE="text/css">BODY{' + 'font-family: Geneva,MS Sans Serif,Arial,Lucida,Helvetica,sans-serif;' + 'font-size: 10pt;' + '}' + 'TD{' + 'font-family: Geneva,MS Sans Serif,Arial,Lucida,Helvetica,sans-serif;' + 'font-size: 10pt;}' + '</STYLE>'; if (bgcolor == null) { bgcolor = "#C0C0C0"; } return '<HTML><HEAD>' + '<TITLE>' + title + '</TITLE>' + '</HEAD>' + '<BODY TEXT="#000000" LINK="#000000" VLINK="#000000" ALINK="#FF0000" ' + 'BGCOLOR="' + bgcolor + '">'; } function make_left_frame(window) { with (window.frames['index']) { eval ('index_string = make_left_frame_page(cur_page, ' + index_list + add_index_list + ' )'); fool1 = make_page_intro(index_label, "#FFFFFF") + index_string + '</BODY></HTML>'; document.write(fool1); document.close(); } } function save_cur_page(page_number) { var len; var pg = page_number - 1; if (window.frames['right'].document.forms.length != 0) { with (window.frames['right'].document) { if ((page_number != 2 && page_number != 3 && page_number <= max_pages) || ver == 3) { ext_page_array[pg] = new Array(forms[0].elements.length); for (i = 0; i < forms[0].elements.length; i++) { ext_page_array[pg][i] = new Array(4); switch (forms[0].elements[i].type) { case 'radio': case 'checkbox': ext_page_array[pg][i][0] = forms[0].elements[i].checked; break; case 'select-one': ext_page_array[pg][i][0] = forms[0].elements[i].selectedIndex; break; case 'select-multiple': len = forms[0].elements[i].options.length; ext_page_array[pg][i][0] = new Array(len); for(k = 0; k < len; k++) { ext_page_array[pg][i][0][k] = forms[0].elements[i].options[k].value; } break; default: ext_page_array[pg][i][0] = forms[0].elements[i].value; } ext_page_array[pg][i][1] = forms[0].elements[i].name; ext_page_array[pg][i][2] = forms[0].elements[i].value; ext_page_array[pg][i][3] = forms[0].elements[i].type; } } } } } function reload_form(page_number) { var j = page_number - 1; with (window.frames['right'].document) { if (((page_number < 2 || page_number > 3) || ver == 3) && page_number != 0 && (ext_page_array[j].length > 1)) { for (i = 0; i < ext_page_array[j].length; i++) { switch (forms[0].elements[i].type) { case 'radio': case 'checkbox': forms[0].elements[i].checked = ext_page_array[j][i][0]; break; case 'select-one': forms[0].elements[i].selectedIndex = ext_page_array[j][i][0]; break; case 'select-multiple': for (k = 0; k < ext_page_array[j][i][0].length; k++) { forms[0].elements[i].options[k] = new Option(ext_page_array[j][i][0][k], ext_page_array[j][i][0][k]); } break; default: forms[0].elements[i].value = ext_page_array[j][i][0]; } } } } } function switch_right_frame(top_window, old_pane, new_pane) { var ext_page_stnd = make_page_intro(standard_extensions_index_label, "#FFFFFF") + '<IFRAME WIDTH="100%" HEIGHT="100%" FRAMEBORDER=0 ID="ext" ' + 'SRC="stnd_ext_form.html">' + '</IFRAME></body></html>'; var ext_page_nscp = make_page_intro(netscape_extensions_index_label, "#FFFFFF") + '<IFRAME WIDTH="100%" HEIGHT="100%" FRAMEBORDER=0 ID="ext" ' + 'SRC="nscp_ext_form.html">' + '</IFRAME></body></html>'; var ext_page_ca = make_page_intro(certifying_authorities_index_label, "#FFFFFF") + '<IFRAME WIDTH="100%" HEIGHT="100%" FRAMEBORDER=0 ID="ext" ' + 'SRC="ca.html">' + '</IFRAME></body</html>'; var ext_page_ca_exp = make_page_intro('Certifying Authority Details', "#FFFFFF") + '<IFRAME WIDTH="100%" HEIGHT="100%" FRAMEBORDER=0 ID="ext" ' + 'SRC="ca_form.html">' + '</IFRAME></body></html>'; if (old_pane > 0 && cur_page <= max_pages) { save_cur_page(old_pane); } cur_page = new_pane; make_left_frame(top_window); if (new_pane == 2 || new_pane == 3) { if (ver == 1) { frames['right'].document.write(ext_page_ver1); frames['right'].document.close(); } else if (new_pane == 2) { frames['right'].document.write(ext_page_nscp); frames['right'].document.close(); reload_form(new_pane); } else { frames['right'].document.write(ext_page_stnd); frames['right'].document.close(); reload_form(new_pane); } } else if (new_pane == 4) { frames['right'].document.write(ext_page_ca); frames['right'].document.close(); reload_form(new_pane); } else if (new_pane == 1) { frames['right'].document.write(main_page); frames['right'].document.close(); reload_form(new_pane); } else { frames['right'].document.write(ext_page_ca_exp); frames['right'].document.close(); reload_form(new_pane); } } function make_left_frame_page(selected) { var n_strings = ( make_left_frame_page.arguments.length - 1 ) / 2; var table_background; var command; var indent; var label; var ret_string = ""; ret_string += '<TABLE CELLSPACING=4>'; for ( var i = 1; i <= n_strings; i++ ) { if ( i == selected ) { table_background = 'BGCOLOR=#BBCCBB'; } else { table_background = ''; } indent = make_left_frame_page.arguments[(i*2) - 1]; label = make_left_frame_page.arguments[(i*2)]; if ( indent == 0 ) { ret_string += ('<TR><TD COLSPAN=2 ' + table_background + '>'); } else { ret_string += ('<TR><TD> </TD><TD ' + table_background + '>'); } command = "'parent.switch_right_frame(parent," + selected + "," + i + ")'"; ret_string += ('<A HREF="javascript:void setTimeout(' + command + ',0)">'); if ( indent == 0 ) { ret_string += "<B>"; } ret_string += label; if ( indent == 0 ) { ret_string += "</B>"; } ret_string += '</A></TD></TR>'; } if (selected == (max_pages + 1)) { table_background = 'BGCOLOR=#BBCCBB'; } else { table_background = ''; } ret_string += '<TR><TD COLSPAN=2 ' + table_background + '><b><A HREF="javascript:void setTimeout(\'top.submit_it()\', 0)">Finish</A></b>' + '</TD></TR>' + '<input type="submit"></form>' + '</TABLE>'; return(ret_string); } function make_page(window) // Draws the initial page setup { selected = cur_page init_ext_page_array() with (window.frames['right']) { location="main.html"; // document.write(main_page); // document.close(); } make_left_frame(window); } </script> </HEAD> <title>Cert-O-Matic</title> <FRAMESET cols="150,*" BORDER=3 ONLOAD="make_page(window)"> <FRAME SRC="about:blank" ID="index" NAME="index" MARGINWIDTH=15 MARGINHEIGHT=10 BORDER=3> <FRAME SRC="about:blank" ID="right" NAME="right" MARGINWIDTH=15 MARGINHEIGHT=10 BORDER=3> </FRAMESET> </HTML>